The purpose of ESS is to offer aggregators a dumb api so that
they can gain insight into the publication date of rss and atom
feed items. An 1 kb ESS file can potentially provide time stamps
for over a hundred feed entries. This makes it possible for the
aggregator to aggregate millions of feeds for a user who is
really only interested in new items.
When a news item qualifies as being new enough the aggregator
can pull the full rss or atom feed so that the user may consume
the perhaps overly elaborate description and countless other
types of data and meta data contained therein.
- The aggregator should require the user to define a number of
news entries.
- The aggregator should sort the ESS feed by the time stamp of
their fist entry and discard those that are to old.
- The aggregator should compare the first time stamp of the
oldest remaining entry with the first of each new ESS request.
- If the first item in the new ESS is younger than the oldest
item the oldest item is removed and the new ESS is inserted in
its proper location in the sorted result set.
- Periodically the aggregator must remove all items from each
ESS beyond the first that are older than the current oldest
item.
- Periodically the aggregator must split remaining ESS files
into single entry ESS files.
- After completing the purge and the split the aggregator must
build a NNO result set.
NNO Specifications
NNO files are intended for personal consumption but also for
publication.
After obtaining an NNO file an aggregator must recycle previous
results, it should only need to download the rss or atom feed if
a younger entry is not found in the previous result set.
If an NNO time stamp can not be matched with that of a feed
entry or if multiple feed entries share the time stamp the 0-255
title hash is used to identify the desired entry.
If an entry has a new time stamp it may be sorted to its
chronological position or be displayed under its old date but
should be marked as updated.
If entries have a matching time stamp and a matching title the
aggregator may include each or (if the interface only provides
links to news results) it may append 2,3,4,5,6 to the link. As
that could push the desired result set over the configured
amount one may also opt to list the entry 1 time and link it to
the top level domain.
Dumb Checksum
The Dumb Checksum is produced by adding up the string char codes
and subtracting 256 while the sum exceeds 256. The resulting
number will thus range from 0 to 256.
var dumbChecksum = function(st) {
var ds = 0;
for (var i = 0; i < st.length; i++) ds += st.charCodeAt(i);
while(ds > 256) ds -= 256;
return ds;
}
"hello world" would thus be:
104+101+108+108+111+32+119+111+114+108+100-256-256-256-256 = 92
and the Dumb Checksum for the title of this page:
"Even Shorter Syndication [ess] and No Nonsense Outlines [nno]"
Would be 140
Timestamp in minutes before/after build
(note: I'm putting this in simple arithmetic so that no
mathmagical terminology is requred.)
When building an ESS or NNO the buildTime is calculated by
taking the current unix time in seconds, divide by 60, round it
down, then multiply by 60.
Simply: a unix timestamp in seconds that is divisable by 60.
The entry time stamp is similarly calculated by taking the unix
time in seconds of the feed entry, divide it by 60, round it
down, multiply it by 60, subtract that from the build time and
divide it by 60 again.
Simply: the publication time expressed in minutes before the
build time.
When the aggregator parses the feed items the time stamps are
compared by converting the feed item time stamp to unix time,
dividing that by 60, round down, multiply by 60 and subtract
the NNO build time.
This approach is good because having an entire unix time stamp
for each entry would fill the ESS and NNO files with mostly
redundant information.
Most of the time we only need the ESS build time (that is in
seconds) to discard them for being to old. This because the
primary goal of the above exersize is to check many ESS files.
Ideally the amount of feeds should greatly exceed that what any
user could consume.