This document is http://videdot.com/rss/design

At: /rss/design

RSS design goals

The aims of our RSS tools for BeOS

Suggestions are most welcome, in particular pointers to how to do things the 'Right Way' with regards to RSS.

Library features

Handle the great majority of available feeds
In practice this means directly supporting RSS 0.91, 1.0 and 2.0, with passable support for the in-between 0.9x's.
It also means that if new formats like Atom become sufficiently popular then we shall add support for them too.
Compliant HTTP behaviour
1.1 support is the obvious target (currently lacking some of the mandatory encodings)
Support for If-Modified-Since and ETags to make conditional requests and avoid burdening servers kindly serving feeds
Do the Right Thing with 301 Moved Permanently responses and rewrite the stored feed information.
Polite fetching behaviour
Honouring the suggested fetch times, using If-Modified-Since or ETags to conditionally request, rewrite moved links and support conditional requests (as described above)
Edit sources
Drag & drop supporting view that can be used to add, remove and categorise sources. Can move items by dragging them.
Store sources on disk as bookmarks with extra attributes for the title, when the feed was last fetched, categories, icons &c.
Store with the source a list of item identifiers that are marked as important or read with their published dates (to allow purging of old items)

Applications

Just one client to begin with:

DeskFeed

Deskbar icon
Showing the current state of the feeds (perhaps a graphic representation of how 'hot' things are, plus counts of the new/unread/important items)
A tooltip showing the former more verbosely
Context menu
Click on the deskbar icon to get a nested-categorised list of feeds with their items. Counts for 'fresh' messages bubbled up to the parent's menu item.
Pending user-testing, menu text scaled to how busy the sub-menus have been.
Only split categories into sub-menus when there are more than one.
Sub-menu for item/source to display how old the piece is, and allow refreshing of the feed.
Must show the progress of fetching and make it clear when a feed is broken and be helpful about filing a bug report (with us or the feed-owner).
Edit sources
Invoking core library's view.
Keyboard navigation
To allow walking the menus and launching items/sources.

Not doing

Things that aren't going in (unless someone makes a compelling argument for them):

View source
Not that interesting for a user-facing app

Open questions

Things we are deferring to later or possibly never:

Parse-at-all-costs?
Notion proposed by Mark Dive
Pros
Works well in a tag-soup world
Cons
Encourages content authors to make a tag-soup world
We'll have to live in the world around us, so breaking gently could be useful. Long term this may mean carrying two parsers around. For the time being we'll support well-built feeds and get the basic parser up to scratch and have a place to file feeds that don't work with our parser (whichever party is at fault) and then find the most effective way to make those work. Often that may mean simply aiding the publisher.
The other way to do this is to add an on-fail-cleanup step, that then leaves the core parser alone.
Smart search
With find-as-you-type text searching in all fields plus attribute-structured search.
Likely implement by making the search view from more general and having a Tracker-style-query-with-context view.
Caching of feeds to disk
Very helpful for an offline-reader, but not a compelling prospect for my uses. It could go in the core library if it were really desirable, but would have to be accompanied by cache-clearance handling, which would be significant effort to get right.
Direct support for caches and proxies
Although'transparent' proxies will work as well as they ever do.
Three-paned reader
Using the same underlying library. The most prevalent type of RSS reader for other platforms. Will only write it if there is much call for it.
Complications include embedding a layout component that can show an item's description, making sure that is done in a 'safe' way, fathoming the intent of the author as to whether or not the description element contained markup (which may not match well with what the specification said was allowed).

No comments yet. Add one.