People are often pretty good at walking into a room they are familiar with, and instantly knowing what has changed. That’s pretty useful for 3D operations team rooms. But what if things have been “redecorated” — moved around for better functionality without changes to the important content? What if the user has been away for a long time? If the user isn’t visually oriented? What if the “user” is an external computer system? <%image(20090629-rss-forums.jpg|363|472|Firefox RSS feed of some of my forums.)%>
Our “Forums” system is aimed at enterprise use, so the collaborative 3D environment is a forum or context in which people work together on mostly the same kinds of artifacts they already work on: office documents in .doc, .xls, .pdf and similar formats, or various media files. This use-case happens to give us a great way to summarize relevant macro-changes:
- what documents have newly introduced or changed?
- what forums have been created or saved?
- who has been working in what forums?
Lots of things can happen in a forum, and you need the whole system and a human to appreciate all of them. But if you could just get a list of these three kinds of events, you would have a pretty good textual overview of what’s been going on.
Even though the collaborative use of the system is effectively peer-to-peer in operation, our system persists this kind of information on a server, where it is accessible during and between sessions by external systems. We’ve hooked up a Web server to this back-end and made this information available as an RSS feed.
“Really Simple Syndication” is a Web XML format that has long been popular for listing these sorts of events. Each item usually includes a title, a timestamp of when it happened, a short description, and a link to a Web page with more information. (Try the little RSS icon or XML button on the right-side panel of this site.) These days most Web browsers and mail readers have some very nice user interfaces for working with “feeds” of such files. A feed is simply a URL that lists a few of the most recent such items. (The spec recommends 15.) The browser or other feed reader hits the URL on demand or on some schedule and presents the items, in some cases only showing those that have not already been examined. (It is a misconception that the feeds actively notify you when something is new or changed. Instead, each reader polls the feed for a current set of items.) If the user wants more info, they click on an item’s link. Some readers and sites aggregate many such feeds together from several sources into a composite item list, which makes it easy to track lots of multiple feeds.
We’ve designated a URL for each forum, each document in a forum, and each user. This gives us a place for the item links to go to, and allows readers to distinguish between items. (A different URL means a different item.)
We also make an enabling simplification (aka cheating). RSS isn’t intended as an audit trail. You could use it that way by periodically fetching RSS from a feed and storing the results in some external system. Maybe you would use the url and timestamp as a combined key. RSS uses just the url as the equivalent of a key, but there’s no need for an RSS publisher itself to maintain a history of old items. This allows us to create an RSS item on the fly for just the most recent activity: last save of a forum or doc, or the last forum visited by a user. Each of our RSS items link to the forum, document, or user according to it’s category. The timestamp identifies when it was last changed, and the description says who did what.
Our basic URL for forum RSS feeds is http://hostName/rss2.xml
, e.g., http://forums.qwaq.com/rss2.xml
. We also use URL query parameters to narrow the range, e.g., http://forums.qwaq.com/rss2.xml?category=docs
, http://forums.qwaq.com/rss2.xml?category=forums
, or http://forums.qwaq.com/rss2.xml?category=presence
, or combined like http://forums.qwaq.com/rss2.xml?category=docs,forums
. A login is required, so you only get the forums, people, and docs you have access to. You can narrow it to a subset with additional parameters for specific forums and such.
The main use by people is just to keep apprised of what’s new. They get a compact listing in their usual feed reader. The feed can be as narrow as they want, or can be an aggregate across all their forums. This is terrific for quick checks from an on the road or from a mobile phone browser. I think 80% of a social site like Facebook is just generating and presenting this kind of information.
The other use is to get a listing of forms, documents for forum, visitors in a forum, etc. as a query interface from other programs. More about that when I talk about Forum Pages another day.