Even Shorter Syndication [ESS] AND No Nonsense Outline [NNO]

Table of content

ESS structure NNO structure ESS example NNO example ESS Specifications NNO Specifications Dumb Checksum Timestamp in minutes before/after build ESS Node.js module ESS and NNO autodiscovery icon design "contest" / feedback

ESS structure

buildTime, feedUrl, minutesBeforeBuild, titleDumbChecksum, minutesBeforeBuild, titleDumbChecksum, minutesBeforeBuild, titleDumbChecksum, minutesBeforeBuild, titleDumbChecksum

NNO structure

buildTime, feedUrl, minutesBeforeBuild, titleDumbChecksum, feedUrl, minutesBeforeBuild, titleDumbChecksum, feedUrl, minutesBeforeBuild, titleDumbChecksum, feedUrl, minutesBeforeBuild, titleDumbChecksum

ESS example

1503411304088, http://example.com/rss.xml, 0,27, 3600,22, 7890,142, 23421,17

NNO example

1503411304088, http://example.com/rss.xml,223432,27, http://example2.com/rss.xml,453223,44, http://example3.com/rss.xml,5432242,125, http://example4.com/rss.xml,23143231,241

ESS Specifications

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; }
Or:
[...x.title].reduce((a,b)=>a+b.charCodeAt(0)&255,0)
"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.

ESS Node.js module

https://gist.github.com/gaby-de-wilde/341a0d1897e47b57af39fd0a2a06b718 install with

ESS and NNO autodiscovery

The usual link tag can be added to html documents.
<link rel="alternate" type="application/ess" title="example" href="/ess/" />
and:
<link rel="alternate" type="application/nno" title="example" href="/nno/" />

icon design "contest" / feedback

A clearly identifyable icon would be useful. If you want to make one you can send it to: gdewilde@gmail.com Other feedback is also welcome.