Microsoft SSE Thoughts
Everyone knows Ray Ozzie is my hero right? I spent the first several years of my professional career as a Lotus Notes developer, and even worked for Lotus itself for a brief stint in 1996, so you can imagine what an Ozzie disciple I am. I even was able to pay fealty to him in person back in 2004. I must say it pains me to see him working for a company like Microsoft, but that really doesn't lessen my respect for him in any way. Besides, he's been working with those guys for a long time now - we all saw the move to Microsoft as an inevitability way back in 2002 when Microsoft invested in Groove.net, right? So I've had a while to get used to the idea.
Regardless of where Ray is working now, it's nice to see in his post today that his Notes and Groove experience isn't far from his mind, and its incredibly exciting to me that he's now applying that work to RSS. As I've written many times before on this blog Everything New is Notes Again: In one way or another many of the principles of communication, synchronization and security that we're seeing in Web 2.0 all harken back to functionality that was available in Lotus Notes over a decade ago. (Ray's explanation today of how RSS tags correspond exactly to their Notes equivalent concepts showed this perfectly, if you ask me.)
So now I'm trying to grok the specifics of how the Simple Sharing Extensions laid on top of RSS are supposed to work. Here's some thoughts about the spec:
I like the idea of the simplest thing that could possibly work for synchronization, but the beginning stuff in the spec could be explained a bit better. Maybe exchanging the word "endpoint" for something clearer like "website" might help my mind? Honestly, the criss-cross subscription and aggregation stuff in section 1.3 is confusing on first read. I think I understand it, I just don't think it's explained well. I do think it's interesting how they're definining a time frame for the channel. This has been sort of ad-hoc up until now, where you get the last say 10 items in a feed, and that's all the info you get about the updates. Then the aggregator is forced to compare item by item until it finds something new or changed. If you were gone a week and more than 10 items have changed, then your aggregator will have no clue about them. With this system, you'll see there'll be a timeframe where you don't have information.
The item level sync stuff is great - with the history, deletion and conflict flags, and rules on how to resolve problems. Perfect! But isn't the sync id attribute duplicating the GUID tag of the item itself? What happens if they don't match up, or rather, what happens if they matched up at one point, and then later on change? I guess this would be considered a change, and be recorded as such, but it seems at that point there's a break-down in what an item is supposed to represent. Regardless, this system is essentially creating a system for keeping track of field-level changes, and that's pretty cool (and powerful).
But of course, RSS Items only have a few fields with real data: pubdate, link, title and description. Maybe a few more depending on which feed spec you use. In Ray's post, he talked about syncing things like contact lists and calendaring info. The SSE just manages the syncing itself - there's no place for the data to sit besides what's in RSS already. Where does this other stuff fit? In plain text in the description field? No way. Either he's talking about using this system with a bunch of different namespaces generated from various applications, or the next step must be an arbitrary field-data namespace for this sort of info.
This is what's being done already over in Mountain View... Remember the Google Base RSS Extensions spec from the other day? Their system allowed a variety of arbitrary fields to be embedded into an item. Adding in SSE namespace could then in theory allow *any* data contained in an item can be kept in sync. Pretty cool, hey? Sort of a universal data communication spec: Anything that any database can spit out, you can keep track of it, synchronize, and manage changes. Very, very cool. Now, I don't really like Google's implementation of the Base extensions. All those specific tag names like "course_name" and "hoa_number" are just ridiculous IMHO, and would be better off with a simple "field" tag with a type attribute and the actual data contained within the value of the tag.
I'm sure Ray and Microsoft realizes this as well. Maybe they're just planning on using the SSE stuff with the huge variety of MS apps that generate XML namespaces already, like for playlists or whatever. But personally, I'd like to see them embrace a simple data formatting spec as well, so that arbitrary data (like dates, strings and numbers) could be embedded into an RSS Item and syndicated as well.