<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Dare Obasanjo aka Carnage4Life - Syndication Technology</title>
    <link>http://www.25hoursaday.com/weblog/</link>
    <description>You can buy cars but you can't buy respect in the 'hood - Curtis Jackson</description>
    <language>en-us</language>
    <copyright>Dare Obasanjo</copyright>
    <lastBuildDate>Mon, 04 Jan 2010 15:06:19 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>kpako@yahoo.com</managingEditor>
    <webMaster>kpako@yahoo.com</webMaster>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=c41de3bd-5d5d-446e-91ea-32b7925c3845</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=c41de3bd-5d5d-446e-91ea-32b7925c3845</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=c41de3bd-5d5d-446e-91ea-32b7925c3845</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=c41de3bd-5d5d-446e-91ea-32b7925c3845</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <title>Brizzly, Seesmic Web and the Future of RSS</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=c41de3bd-5d5d-446e-91ea-32b7925c3845</guid>
      <link>http://www.25hoursaday.com/weblog/2010/01/04/BrizzlySeesmicWebAndTheFutureOfRSS.aspx</link>
      <pubDate>Mon, 04 Jan 2010 15:06:19 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Recently I came across two blogs I thought were interesting and would love to follow regularly; &lt;a href="http://www.cdixon.org"&gt;Chris Dixon's blog&lt;/a&gt; and the &lt;a href="http://windowsteamblog.com/blogs/windowslive/"&gt;Inside Windows Live blog&lt;/a&gt;. What surprised me was that my first instinct was to see if they were on Twitter instead of adding their RSS feeds to &lt;a href="http://www.rssbandit.org"&gt;my favorite RSS reader&lt;/a&gt;. I thought this was interesting and decided to analyze my internal thought process that led me to preferring following blogs via Twitter instead of consuming the RSS feeds in Google Reader + RSS Bandit. &lt;/p&gt;  &lt;p&gt;I realized it comes down to two things, one I’ve mentioned before and the second which dawned on me recently&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;p&gt;The first problem is that the user experience around consuming feeds in traditional RSS readers which take their design cues from email readers is all sorts of wrong. I’ve written about this previously in my post &lt;a href="http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx"&gt;The Top 5 Reasons RSS Readers Went Wrong&lt;/a&gt;. Treating every blog post as important enough that I have view the entire content and explicitly mark it as read is wrong. Not providing a consistent mechanism to give the author feedback or easily reshare the content is archaic in today’s world. And so on. &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;The mobile experience for consuming Twitter streams is all sorts of awesome. I currently use &lt;a href="http://echofon.com/"&gt;Echofon&lt;/a&gt; to consume Twitter on my phone and have used &lt;a href="http://iconfactory.com/software/twitterrific/"&gt;Twitterific&lt;/a&gt; which is also excellent. I’ve also heard people say lots of good things about &lt;a href="http://www.atebits.com/tweetie-iphone/"&gt;Tweetie&lt;/a&gt;. On the other hand, I haven’t found a great mobile application for consuming RSS feeds on my mobile phone which may be a consequence of #1 above. &lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So I’ve been thinking about how to make my RSS experience more like my Twitter experience given that not all the blogs I read are on Twitter or will ever be on the service. At first I flirted with building a tool that automatically creates a Twitter account for a given RSS feed but backed away from that when I remembered that &lt;a href="http://www.techcrunch.com/2009/07/16/twitters-internal-strategy-laid-bare-to-be-the-pulse-of-the-planet/"&gt;the Twitter team hates people using it as a platform for rebroadcasting RSS feeds&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I realized that what I really need is a Twitter applicationthat also understands RSS feeds and shows them in the same stream. In addition, I may have been fine with this being a new app on the Web but don’t want to lose the existing Twitter clients on my mobile phone. So I really want a web app that shows me a merged Twitter/RSS streams and that exposes the Twitter API so I can point apps like Echofon/Twitterific/Tweetie at it. &lt;/p&gt;  &lt;p&gt;As I thought about which web app could be closest to doing this today I landed on &lt;a href="http://brizzly.com/"&gt;Brizzly&lt;/a&gt; and &lt;a href="http://seesmic.com/web"&gt;Seesmic Web&lt;/a&gt;. These sites are currently slightly different web interfaces to to the Twitter service which [at least to me] currently haven’t provided enough value above and beyond the Twitter website for me to use on a regular basis. Being able to consume both my RSS feeds and my Twitter stream on such services would not only serve as a differentiator between them and other Twitter web clients but would also be functionality that Twitter wouldn’t be able to make obsolete given their stated dislike of RSS content on their service. &lt;/p&gt;  &lt;p&gt;I’d write something myself except that I doubt that the authors of Twitter mobile apps will be interested in making it easy to consume a Twitter stream from sites other than &lt;a href="http://www.twitter.com"&gt;http://www.twitter.com&lt;/a&gt; unless lots of their users ask for this feature which will only happen if services like Brizzly, Seesmic Web and others start providing a reason to consume Twitter-like streams from non-Twitter sources.&amp;#160; &lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=c41de3bd-5d5d-446e-91ea-32b7925c3845</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=471b97f6-5aec-497f-ac21-b240034dbd98</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=471b97f6-5aec-497f-ac21-b240034dbd98</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=471b97f6-5aec-497f-ac21-b240034dbd98</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=471b97f6-5aec-497f-ac21-b240034dbd98</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <title>Some Thoughts on the Twitter API as a "standard API" for microblogging</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=471b97f6-5aec-497f-ac21-b240034dbd98</guid>
      <link>http://www.25hoursaday.com/weblog/2009/12/21/SomeThoughtsOnTheTwitterAPIAsAStandardAPIForMicroblogging.aspx</link>
      <pubDate>Mon, 21 Dec 2009 15:09:58 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;There are a couple of posts written this past weekend about services beginning to expose their services using the Twitter API and how this marks the rise of Twitter as a de facto standard for use in microblogging (or whatever we're calling it these days). &lt;/p&gt;  &lt;p&gt;The first post I was on this topic was from Fred Wilson in his post &lt;a href="http://www.avc.com/a_vc/2009/12/open-apis-and-open-standards.html"&gt;Open APIs and Open Standards&lt;/a&gt; where he writes &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As &lt;/em&gt;&lt;a href="http://www.scripting.com/stories/2009/12/17/howOpenStandardsAreCreated.html"&gt;&lt;em&gt;Dave Winer has been pointing out&lt;/em&gt;&lt;/a&gt;&lt;em&gt; in recent weeks, there is something quite interesting happening in the blogging/microblogging world.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;First &lt;/em&gt;&lt;a href="http://www.scripting.com/stories/2009/12/17/howOpenStandardsAreCreated.html"&gt;&lt;em&gt;WordPress allowed posting and reading wordpress blogs via the Twitter API&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Then yesterday &lt;/em&gt;&lt;a href="http://staff.tumblr.com/post/287703110/api"&gt;&lt;em&gt;our portfolio company Tumblr did the same&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://twitter.com/johnBorthwick"&gt;&lt;em&gt;John Borthwick&lt;/em&gt;&lt;/a&gt;&lt;em&gt; has been advising companies for a while now to build APIs that mimic the Twitter API. His reasoning is that if your API look and feels similar to the Twitter API then third party developers will have an easier time adopting it and building to it. Makes sense to me.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;But what Wordpress and Tumblr have done is a step farther than mimicing the API. They have effectively usurped it for their own blogging platforms. In the case of Tumblr, they are even replicating key pieces of their functionality in it&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Anil Dash quickly followed up by declaring &lt;a href="http://dashes.com/anil/2009/12/the-twitter-api-is-finished.html"&gt;The Twitter API is Finished. Now What?&lt;/a&gt; and stating &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Twitter's API has spawned over 50,000 applications that connect to it, taking the promise of fertile APIs we first saw with Flickr half a decade ago and bringing it to new heights. Now, the first meaningful efforts to support Twitter's API on other services mark the maturation of the API as a de facto industry standard and herald the end of its period of rapid fundamental iteration.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;From here, we're going to see a flourishing of support for the Twitter API across the web, meaning that the Twitter API is finished. Not kaput, complete. If two companies with a significant number of users that share no investors or board members both support a common API, we can say that the API has reached Version 1.0 and is safe to base your work on. So now what?&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is a pattern that repeats itself regularly in the software industry; companies roll their own proprietary APIs or data formats in a burgeoning space until one or two leaders emerge and then the rest of the industry quickly wants to crown a winning data format or API to prevent Betamax vs. VHS style incompatibility woes for customers and developers.&lt;/p&gt;  &lt;p&gt;Given that this is a common pattern, what can we expect in this instance? There are typically two expected outcomes when such clamoring for a company's proprietary platform or data format to become the property reaches a fever pitch. The first outcome is similar to what Anil Dash and Fred Wilson have described. Some competitors or related companies adopt the format or API as is to take advantage of the ecosystem that has sprung up around the winning platform. This basically puts the company (Twitter in this case) in a spot where they either have to freeze the API or bear the barbs from the community if they ever try to improve the API in a backwards incompatible way. &lt;/p&gt;  &lt;p&gt;The problem with freezing the API is that once it becomes a de facto standard all sorts of folks will show up demanding that it do more than it was originally expected to do since they can't ship their own proprietary solutions now that there is a &amp;quot;standard&amp;quot;. This is basically what happened during the RSS vs. Atom days where Dave Winer declared that &lt;a href="http://www.reallysimplesyndication.com/2005/04/08"&gt;RSS is Frozen&lt;/a&gt;. What ended up happening was that there were a lot of people who felt that RSS and it's sister specifications such as the MetaWeblog API were not the final word in syndicating and managing content on the Web. Dave Winer stuck to his guns and people were left with no choice but to create a conflicting de jure standard to compete with the de facto standard that was RSS. So Atom vs. RSS became the XML syndication world's Betamax vs. VHS or Blu-Ray vs. HD-DVD. As a simple thought experiment, what happens if Twitter goes along with the idea that their API is some sort of de facto standard API for microcontent delivered in real-time streams. What happens when a company like Facebook decides to adopt this API but needs to API to be expanded because it doesn't support their features? And that they need the API to be constantly updated since they add new features on Facebook at a fairly rapid clip? Amusingly enough there are already people &lt;a title="A VC: Open APIs and Open Standards" href="http://www.avc.com/a_vc/2009/12/open-apis-and-open-standards.html#disqus_thread"&gt;preemptively flaming Facebook&lt;/a&gt; for not abandoning their API and adopting Twitter's even though it is quite clear to any observer that Facebook's API predates Twitter's, has more functionality and is supported by more applications &amp;amp; websites. &lt;/p&gt;  &lt;p&gt;Things get even more interesting if Facebook actually did decide to create their own fork or &amp;quot;profile&amp;quot; of the Twitter API due to community pressure to support their scenarios. Given how this has gone down in the past such as &lt;a title="Workbench | RSS Means Never Being Board" href="http://workbench.cadenhead.org/news/2860/rss-means-never-being-board"&gt;the conflict between Dave Winer and the RSS Advisory board&lt;/a&gt; or more recently &lt;a title="WRAP, and the Demise of the OAuth Community" href="http://hueniverse.com/2009/11/wrap-and-the-demise-of-the-oauth-community/"&gt;Eran Hammer-Lahav's strong negative reaction to the creation of OAuth WRAP&lt;/a&gt; which he viewed as a competitor to OAuth, it is quite likely that a world where Facebook or someone else with more features than Twitter decided to adopt Twitter's API wouldn't necessarily lead to everyone singing &lt;a href="http://en.wikipedia.org/wiki/Kumbaya"&gt;Kumbaya&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Let's say Twitter decides to take the alternate road and ignores this hubbub since the last thing a fast moving startup needs is to have their hands tied by a bunch of competitors telling them they can't innovate in their API or platform any longer. What happens the first time they decide to break their API or even worse deprecate it because it no longer meets their needs? That isn't far fetched. &lt;a href="http://www.blogger.com/developers/api/1_docs/"&gt;Google deprecated the Blogger API&lt;/a&gt; in favor of GData (based on the Atom Publishing Protocol) even though Dave Winer and a bunch of others had created a de facto standard around a flavor of the API called the &lt;a href="http://www.xmlrpc.com/metaWeblogApi"&gt;MetaWeblog API&lt;/a&gt;. About two weeks ago &lt;a title="Facebook Developers | Developer Roadmap: Keeping You Up to Date" href="http://developers.facebook.com/news.php?blog=1&amp;amp;story=341"&gt;Facebook confirmed that they were deprecating a number of APIs used for interacting with the news feed&lt;/a&gt;. What happens to all the applications that considered these APIs to be set in stone? It is a big risk to bet on a company's platform plans even when they plan to support developers let alone doing so as a consequence of a bunch of the company's competitors deciding that they want to tap into its developer ecosystem instead of growing their own. &lt;/p&gt;  &lt;p&gt;The bottom line is that it isn't as simple as saying &amp;quot;Twitter is popular and it's API is supported by lots of apps so everyone needs to implement their API on their web site as well&amp;quot;. There are lots of ways to create standards. Crowning a company's proprietary platform as king without their participation or discussion in an open forum is probably the &lt;em&gt;worst&lt;/em&gt; possible way to do so.&lt;/p&gt;  &lt;p&gt;&lt;img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /&gt; Now Playing: &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Eminem&amp;amp;field-title=Stolen&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Eminem&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Eminem+Hell Breaks Loose&amp;amp;x=0&amp;amp;y=0"&gt;Hell Breaks Loose&lt;/a&gt; &lt;img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=471b97f6-5aec-497f-ac21-b240034dbd98</comments>
      <category>Syndication Technology</category>
      <category>Web Development</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=53357874-aea4-4c84-bba2-981c05fba933</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=53357874-aea4-4c84-bba2-981c05fba933</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=53357874-aea4-4c84-bba2-981c05fba933</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=53357874-aea4-4c84-bba2-981c05fba933</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Real-time, Distributed Conversations: Some Thoughts on the Salmon Protocol</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=53357874-aea4-4c84-bba2-981c05fba933</guid>
      <link>http://www.25hoursaday.com/weblog/2009/11/02/RealtimeDistributedConversationsSomeThoughtsOnTheSalmonProtocol.aspx</link>
      <pubDate>Mon, 02 Nov 2009 14:50:44 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Last week John Panzer, who works on Blogger at Google, wrote about some of the work he’s been doing on creating a protocol for syndicating comments associated with activity streams in his post &lt;a href="http://www.abstractioneer.org/2009/10/salmon-protocol-introducing-salmon.html"&gt;The Salmon Protocol: Introducing the Salmon Project&lt;/a&gt;. Key parts of his post are excerpted below &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A few days ago, at the &lt;/em&gt;&lt;a href="http://www.readwriteweb.com/archives/real_time_web_event.php"&gt;&lt;em&gt;Real Time Web Summit&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, we had a session about &lt;/em&gt;&lt;a href="http://salmon-protocol.org/"&gt;&lt;em&gt;Salmon&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, a protocol for re-aggregated distributed conversations around web content.&amp;#160; I was hoping for some feedback and to generate some interest, and I was overwhelmed by the positive reactions, especially after Louis Gray's post &lt;/em&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fblog.louisgray.com%2F2009%2F10%2Fproposed-salmon-protocol-aims-to-unify.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFrqEze-c491wB5WhBBdf1Io_6ryFbeofA"&gt;&lt;em&gt;&amp;quot;Proposed Salmon Protocol aims to unify Conversations on the Web&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Adina Levin's &lt;/em&gt;&lt;a href="http://www.alevin.com/?p=1806"&gt;&lt;em&gt;&amp;quot;Salmon - Re-assembling distributed conversations&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is a good, insightful review as well. There's clearly a great deal of interest in this, and so I've gone ahead and expanded Salmon's home at &lt;/em&gt;&lt;a href="http://salmon-protocol.org/"&gt;&lt;em&gt;salmon-protocol.org&lt;/em&gt;&lt;/a&gt;&lt;em&gt; with an open source project, &lt;/em&gt;&lt;a href="http://salmon-protocol.googlecode.com/"&gt;&lt;em&gt;salmon-protocol.googlecode.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, and a mailing list, &lt;/em&gt;&lt;a href="http://groups.google.com/group/salmon-protocol"&gt;&lt;em&gt;groups.google.com/group/salmon-protocol&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Louis Gray’s post on the topic includes an embedded presentation which captures the essence of the protocol&lt;/p&gt; &lt;iframe height="451" src="http://docs.google.com/present/embed?id=dfjqf7vg_5cc7c976f&amp;amp;size=m" frameborder="0" width="555"&gt;&lt;/iframe&gt;  &lt;p&gt;Before talking about the technical details of the protocol it is a good idea to understand the end user problem the protocol solves. For me, it solves a problem I have in the way that &lt;a title="Dare Obasanjo aka Carnage4Life: RSS Bandit + Facebook = RSS Bandit 1.9.0.972" href="http://www.25hoursaday.com/weblog/2009/10/13/RSSBanditFacebookRSSBandit190972.aspx"&gt;RSS Bandit integrates with Facebook&lt;/a&gt;. The problem is that although there is a way to get regular updates on changes to the user’s news feed by polling Facebook’s stream and &lt;a title="Facebook Developer Wiki: Using Activity Streams" href="http://wiki.developers.facebook.com/index.php/Using_Activity_Streams"&gt;getting data back in the Activity Stream format&lt;/a&gt; there isn’t a mechanism today to get updates on the comments on items in the feed. What it means in practice today is that once an item rolls off of the news feed, there is no way to keep the comments up to date in RSS Bandit. &lt;/p&gt;  &lt;p&gt;The Salmon Protocol aims to address this problem by piggybacking on &lt;a href="http://code.google.com/p/pubsubhubbub/"&gt;PubSubHubBub&lt;/a&gt; as a way for applications to get real-time updates on comments on items in an activity stream not just updates on new activities. &lt;/p&gt;  &lt;p&gt;There have also been several mentions of Salmon being a way to aggregate distributed conversations on an item (e.g. this blog post is syndicated to&amp;#160; FriendFeed and there are comments there as well as in the comments on my blog) but I am less clear on those scenarios or whether Salmon is enough to solve the various tough problems that need to be solved to make that work end to end. &lt;/p&gt;  &lt;p&gt;Any API for posting comments to a site needs to solve two problems; identity and dealing with comment spam. I decided to take a look at the &lt;a href="http://www.salmon-protocol.org/salmon-protocol-summary"&gt;Salmon Protocol Summary&lt;/a&gt; to see how it addresses these problems. &lt;/p&gt;  &lt;p&gt;The meat of the Salmon Protocol format is excerpted below &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A source provides an RSS/Atom feed of content. It includes a Salmon link in its feed:&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;lt;link rel=&amp;quot;salmon&amp;quot; href=&amp;quot;http://example.org/salmon-endpoint&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;An aggregator reads the feed (ideally via a push mechanism such as PubSubHubbub), and sees from the link that it is Salmon-enabled. It remembers the endpoint URL for later use.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;When an aggregator's user leaves a comment on a feed item, the aggregator stores the comment as usual, and then also POSTs a salmon version of it to the source's Salmon endpoint:&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;POST /salmon-endpoint HTTP/1.1&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;Host: example.org&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;Content-Type: application/atom+xml&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;entry xmlns='http://www.w3.org/2005/Atom'&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;author&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;name&amp;gt;John Doe&amp;lt;/name&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;uri&amp;gt;acct:johndoe@aggregator-example.com&amp;lt;/uri&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/author&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;content&amp;gt;Yes, but what about the llamas?&amp;lt;/content&amp;gt;&amp;#160; &lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;id&amp;gt;tag:aggregator-example.com,2009:cmt-441071406174557701&amp;lt;/id&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;updated&amp;gt;2009-09-28T18:30:02Z&amp;lt;/updated&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0'&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ref='tag:example.org,1999:id-22717401685551851865'/&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;sal:signature xmlns:sal='http://salmonprotocol.org/ns/1.0'&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e55bee08b4c643bc8aedf122f606f804269b7bc7&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/sal:signature&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title/&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;em&gt;&amp;lt;/entry&amp;gt;&lt;/em&gt;&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The commenter is identified in the published comment using the &lt;a href="http://atompub.org/rfc4287.html#element.uri"&gt;atom:uri element&lt;/a&gt;. How this author is authenticated in situations outside of public comments on a blog such as RSS Bandit posting a comment to Facebook on my behalf isn’t really discussed. I noticed an offhand reference to OAuth headers which&amp;#160; seems to imply that the publishing application should also be sending authentication headers as well when publishing the comment. How these authentication headers would flow through the systems involved is unclear to me especially given the approach Salmon has taken to deal with spam prevention. &lt;/p&gt;  &lt;p&gt;The workflow for dealing with spam comments is described as follows &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A major concern with this type of distributed protocol is how to prevent spam and abuse.&amp;#160; Salmon provides building blocks to allow in-depth defense against attacks.&amp;#160; Specifically, every salmon has a verifiable author and user agent.&amp;#160; The basic security flow when salmon swims upstream looks like this:&lt;/em&gt;&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;&lt;em&gt;&lt;b&gt;aggregator-example.com&lt;/b&gt;: &amp;quot;Here is a salmon, authored and signed by 'acct:johndoe@aggregator-example.com'; please accept it.&amp;quot; &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;&lt;b&gt;Recipient&lt;/b&gt;: &amp;quot;I know that this is really aggregator-example.com due to its OAuth headers, and it has a good reputatation, but I do not trust it completely; I will do a double check.&amp;quot; &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;&lt;b&gt;Recipient&lt;/b&gt;: Uses Webfinger/XRD to discover salmon validation service for acct:johndoe@aggregator-example.com, which turns out to be hosted by aggregator-example.com.&lt;/em&gt; &lt;/li&gt;      &lt;li&gt;&lt;em&gt;&lt;b&gt;Recipient&lt;/b&gt;: &amp;quot;Given that johndoe has delegated Salmon validation to aggregator-example, and I know I'm talking to aggregator-example already, I'll skip the actual check.&amp;quot; (Returns HTTP 200 to aggregator-example.com)&lt;/em&gt; &lt;/li&gt;   &lt;/ol&gt;    &lt;p&gt;&lt;em&gt;The flow can get more complicated, especially if the aggregator is not also providing identity services for the user.&amp;#160; In the most general case, the recipient needs to take the salmon, discover a salmon validator service for the author via XRD discovery on the author's URI, and POST the salmon to the validator service. The validator service does an integrity / signature check against the salmon and returns 200 if the salmon checks out, 400 if not.&amp;#160; The signature check means that the given author (johndoe in this case) signed the salmon with the given id, parent id, and timestamp.&amp;#160; It does not attempt to do a full, XML-DSig style verification, though such a service is another reasonable extension.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This flow seems weird and it is unclear to me that it actually solves the problems involved in distributed commenting. So let’s say I post a comment to Facebook from RSS Bandit, in step 3 above they are now supposed to use &lt;a href="http://code.google.com/p/webfinger/"&gt;WebFinger&lt;/a&gt; to lookup my email address provider and determine which service I use for digitally signing comments. Then they ask it if the comment looks like it was from me. &lt;/p&gt;  &lt;p&gt;Hmm, this looks like a user authentication workflow in disguise as a comment validation workflow. Shouldn’t the service receiving the comment (i.e. Facebook) in the example above be responsible for validating my identity not some third party service? Maybe this protocol wasn’t meant for sites like Facebook? &lt;/p&gt;  &lt;p&gt;Let’s say this protocol is really meant for situations when the comment recipient doesn’t intend to be the sole identity provider such as commenting on &lt;a href="http://scobleizer.com/"&gt;Robert Scoble's blog&lt;/a&gt; where he allows comments from anyone with just an email address and an optional web page URL as identifiers. So each commenter needs to provide an email address on an email service provider that supports WebFinger &lt;u&gt;and&lt;/u&gt; validates digital signatures in the specific situation related to the Salmon protocol? Sounds like boiling the ocean. I wonder why this can’t work with OpenID validation or some other authentication protocol that has already been validated by developers and is seeing some adoption? &lt;/p&gt;  &lt;p&gt;At the end of the day, I think the problem Salmon attempts to solve is one that needs solving as activity streams become a more popular and intrinsic feature across the Web. However in its current form it’s hard for me to see how it actually solves the real problems that exist today in a practical way. &lt;/p&gt;  &lt;p&gt;Of course, this may just be my misunderstanding of the protocol documents currently published and I look forward to being corrected by one of the protocol gurus if that is the case. &lt;/p&gt;  &lt;p&gt;&lt;img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /&gt; Now Playing: &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Chris Brown&amp;amp;field-title=Stolen&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Chris Brown&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Chris Brown+I Can Transform Ya (feat. Lil Wayne)&amp;amp;x=0&amp;amp;y=0"&gt;I Can Transform Ya (feat. Lil Wayne)&lt;/a&gt; &lt;img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=53357874-aea4-4c84-bba2-981c05fba933</comments>
      <category>Social Software</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=3983bf7d-405e-4cf9-939a-1b9f9664e5f1</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3983bf7d-405e-4cf9-939a-1b9f9664e5f1</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=3983bf7d-405e-4cf9-939a-1b9f9664e5f1</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=3983bf7d-405e-4cf9-939a-1b9f9664e5f1</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <title>The Top 5 Reasons RSS Readers Went Wrong</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3983bf7d-405e-4cf9-939a-1b9f9664e5f1</guid>
      <link>http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx</link>
      <pubDate>Wed, 26 Aug 2009 16:03:39 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Sam Diaz over at ZDNet wrote the following in a blog entry titled &lt;a href="http://blogs.zdnet.com/BTL/?p=23276"&gt;RSS: A good idea at the time but there are better ways now&lt;/a&gt; in response to an announcement of a new feature in Google Reader&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Once a big advocate for Google Reader, I have to admit that I haven’t logged in in weeks, maybe months. That’s not to say I’m not reading. Sometimes I feel like reading - and writing this blog - are the only things I do. But my sources of for reading material are scattered across the Web, not in one aggregated spot.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;I catch headlines on &lt;/em&gt;&lt;a href="http://news.yahoo.com"&gt;&lt;em&gt;Yahoo News&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and &lt;/em&gt;&lt;a href="http://news.google.com"&gt;&lt;em&gt;Google News&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. I have a pretty extensive lineup of browser bookmarks to take me to sites that I scan throughout the day. &lt;/em&gt;&lt;a href="http://www.techmeme.com"&gt;&lt;em&gt;Techmeme&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is always in one of my browser tabs so I can keep a pulse on what others in my industry are talking about. And then there are Twitter and Facebook. I actually pick up a lot of interesting reading material from people I’m following on Twitter and some friends on Facebook, with some of it becoming fodder for blog posts here.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&amp;#160;&lt;/em&gt;&lt;a href="http://i.zdnet.com/blogs/google-reader-1000.jpg"&gt;&lt;em&gt;&lt;img title="google-reader-1000" alt="" src="http://i.zdnet.com/blogs/google-reader-1000.jpg" width="475" height="282" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The truth of the matter is that RSS readers are &lt;font color="#ff0000"&gt;a Web 1.0 tool&lt;/font&gt;, an aggregator of news headlines that never really caught on with the mainstream &lt;/em&gt;&lt;a href="http://blogs.zdnet.com/BTL/?p=23245"&gt;&lt;em&gt;the way Twitter and Facebook have&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I take issue with the title of Sam’s post since his complaint is really about the current generation of consumer tools for reading RSS feeds not the underlying technology itself. In general, I agree with Sam that the current generation of RSS readers have failed users and I now use pretty much the same tools that he does to catch up on blog (i.e. Twitter &amp;amp; Techmeme). I’ve listed some of my gripes with RSS readers including the one I wrote (&lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt;) in the past and will reiterate some of these points below &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;p&gt;Dave Winer was right about &lt;a href="http://www.reallysimplesyndication.com/riverOfNews"&gt;River of News style aggregators&lt;/a&gt;. A user interface where I see a stream of news and can click on the bits that interest me without doing a lot of management is superior to the using the current dominant RSS reader paradigm where I need to click on multiple folders, manage read/unread state and wade through massive walls of text I don’t want to read to get to the gems. &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Today’s RSS readers are a one way tool instead of a two-way tool. One of the things I like about shared links in Twitter &amp;amp; Facebook is that I can start or read a conversation about the story and otherwise give feedback (i.e. “like” or retweet) to the publisher of the news as part of the experience. This is where I think Sam’s comment that these are “Web 1.0” tools rings the truest. Google Reader &lt;a href="http://googlereader.blogspot.com/2009/07/following-liking-and-people-searching.html"&gt;recently added a “like” feature&lt;/a&gt; but it is broken in that the information about who liked one of my posts never gets back to me whereas it does when I share this post on Twitter or Facebook.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;As Dave McClure once ranted, &lt;a href="http://500hats.typepad.com/500blogs/2009/05/the-faces-the-faces-its-all-about-the-fking-faces-or-the-avatars-icons.html"&gt;it's all about the faces&lt;/a&gt;. The user interface of RSS readers is sterile and impersonal compared to social sites like Twitter and Facebook because of the lack of pictures/faces of the people whose words you are reading. It always makes a difference to me when I read a blog and there is a picture of the author and the same goes for just browsing a Twitter account. &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;No good ways to separate the wheat from the chaff. As if it isn’t bad enough that you are nagged about having thousands of unread blog posts when you don’t visit your RSS reader for a few days, there isn’t a good way to get an overview of what is most interesting/pressing and then move on by marking everything as read. On the other hand, when I go to &lt;a href="http://techmeme.com"&gt;Techmeme&lt;/a&gt; I can always see what the current top stories are and can even go back to see what was popular on the days I didn’t visit the site.&amp;#160; &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;The process of adding feeds still takes too many steps. If I see your Twitter profile and think you’re worth following, I click the “follow” button and I’m done. On the other hand, if I visit your blog there’s a multi-step process involved to adding you to my subscriptions even if I use a web-based RSS aggregator like Google Reader. &lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;These are the five biggest bugs in the traditional RSS reading experience today that I hope eventually get fixed since it is holding back the benefits people can get from reading blogs and/other activity streams using the open &amp;amp; standard infrastructure of the Web. &lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=3983bf7d-405e-4cf9-939a-1b9f9664e5f1</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=d3194710-ed74-45a5-b2b3-a13a86f540e4</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=d3194710-ed74-45a5-b2b3-a13a86f540e4</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=d3194710-ed74-45a5-b2b3-a13a86f540e4</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=d3194710-ed74-45a5-b2b3-a13a86f540e4</wfw:commentRss>
      <slash:comments>21</slash:comments>
      <title>RSS readers modeled after email clients are fundamentally broken</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=d3194710-ed74-45a5-b2b3-a13a86f540e4</guid>
      <link>http://www.25hoursaday.com/weblog/2009/05/05/RSSReadersModeledAfterEmailClientsAreFundamentallyBroken.aspx</link>
      <pubDate>Tue, 05 May 2009 12:17:10 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Farhad Manjoo has an article on Slate entitled &lt;a href="http://slate.com/id/2217353"&gt;Kill your RSS reader&lt;/a&gt; which captures a growing sentiment I’ve had for a while and ranted about during &lt;a title="Feed Me: Bite Size Info for a Hungry Internet" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0900837"&gt;a recent panel at SXSW&lt;/a&gt;. Below are a few key excerpts from Farhad’s article that resonate strongly with me &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;In theory, the RSS reader is a great idea. Many years ago, as blogs became an ever-larger part of my news diet, I got addicted to &lt;a href="http://www.bloglines.com/" target="_blank"&gt;Bloglines&lt;/a&gt;, one of the first popular RSS programs. I used to read a dozen different news sites every day, going to each site every so often to check whether something fresh had been posted. With Bloglines, I just had to list the sites I loved and it would do the visiting for me. This was fantastic—instead of scouring the Web for interesting stories, everything came to me! &lt;/i&gt;      &lt;br /&gt;...       &lt;br /&gt;&lt;i&gt;But RSS started to bring me down. You know that sinking feeling you get when you open your e-mail and discover hundreds of messages you need to respond to—that realization that e-mail has become another merciless chore in your day? That's how I began to feel about my reader. RSS readers encourage you to oversubscribe to news. Every time you encounter an interesting new blog post, you've got an incentive to sign up to all the posts from that blog—after all, you don't want to miss anything. Eventually you find yourself subscribed to hundreds of blogs, many of which, you later notice, are completely useless. It's like having an inbox stuffed with e-mail from overactive listservs you no longer care to read.&lt;/i&gt;&lt;/p&gt;   &lt;i&gt;     &lt;p&gt;It's true that many RSS readers have great tools by which to organize your feeds, and folks more capable than I am have probably hit on ways to categorize their blogs in a way that makes it easy to get through them. But that was just my problem—I began to resent that I had to think about &lt;/p&gt; organizing&lt;i&gt; my reader. &lt;/i&gt;&lt;/i&gt;&lt;/blockquote&gt;  &lt;p&gt;This mirrors my experience of that of many of my friends who used to be enthusiastic users of RSS readers. Today I primarily find out what’s going on in blogs using a combination of &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;, &lt;a href="http://www.techmeme.com"&gt;Techmeme&lt;/a&gt; and &lt;a href="http://planet.intertwingly.net/"&gt;Planet Intertwingly&lt;/a&gt;. The interesting thing is that I’m already subscribed to about half of the blogs that end up getting linked to in these sources on a regular basis yet I tend to avoid firing up my RSS reader. &lt;/p&gt;  &lt;p&gt;The problem is that the RSS readers I use regularly, &lt;a href="http://reader.google.com"&gt;Google Reader&lt;/a&gt; and &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt;, take their inspiration from email clients which is the wrong model for consuming casual content like blogs. Whenever I fire up an email application like Outlook or Hotmail it presents me with a list of tasks I must complete in the form of messages that need responses, work items, meeting invitations, spam that needs to deleting, notifications related to commercial/financial transactions that I need to be aware of and so on. Reading email is a chore where you are constantly taunted by the &lt;u&gt;&lt;b&gt;BOLD&lt;/b&gt;&lt;/u&gt; unread messages indicator silently nagging you about the stuff you haven’t done yet. &lt;/p&gt;  &lt;p&gt;Given that a significant percentage of the time, the stuff in my email inbox is messages that were sent directly to me that need some form of response or acknowledgment this model is somewhat sound although as many have pointed out &lt;a title="Why Email Clients Need to Change" href="http://gigaom.com/2009/04/24/why-email-clients-need-to-change/"&gt;there is a lot of room for improvement&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;When it comes to blogs and other casual content, this model breaks down. I really don’t need a constant nagging reminder that I haven’t read the half dozen reposts of the same tech news stories about Google, Twitter and Facebook after I’ve seen the first one. Furthermore, if I haven’t fired up my reader in a while then I don’t care to be nagged about all the stuff I missed since they are just blogs so it is OK if I never read them. This opinion isn’t new, Dave Winer has been evangelizing &lt;a href="http://www.reallysimplesyndication.com/riverOfNews"&gt;“River of News” style aggregators for several years&lt;/a&gt; and given the success of this model for social networking sites like Facebook and microblogging sites like Twitter, it’s clear that Dave was onto something. &lt;/p&gt;  &lt;p&gt;Looking back at the time I’ve spent working on &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt;, I realize there are a couple of features I added to attempt to glom the river of news model on top of an email based model for reading feeds. These features include&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;the ability to mark all items as read after navigating away from a feed. This allows you to skim the interesting headlines then not have to deal with the “guilt” of not reading the rest of the items in the feed.&lt;/li&gt;    &lt;li&gt;a reading pane inspired by Google Reader where unread items are presented in a single flow and marked as read as you scroll past each item&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Looking back now, it seems to me that the way we think of RSS readers needs to fundamentally change. Presenting information as a news feed where the user isn’t pressured to read every item or feel like a failure is one way to move the needle on the user experience here. What I wonder is whether it isn’t already too late for this category of applications as services like Twitter &amp;amp; Facebook take over as how people keep up to date with what’s going on with the people and content they care about. &lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=d3194710-ed74-45a5-b2b3-a13a86f540e4</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=65469949-ceda-4c41-bd10-871ebcfe4994</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=65469949-ceda-4c41-bd10-871ebcfe4994</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=65469949-ceda-4c41-bd10-871ebcfe4994</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=65469949-ceda-4c41-bd10-871ebcfe4994</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <title>Sharing social activity streams across the Web: How Gnip fits in</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=65469949-ceda-4c41-bd10-871ebcfe4994</guid>
      <link>http://www.25hoursaday.com/weblog/2009/03/24/SharingSocialActivityStreamsAcrossTheWebHowGnipFitsIn.aspx</link>
      <pubDate>Tue, 24 Mar 2009 13:07:16 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Over the past two weeks I participated in panels at both the &lt;a href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0900837"&gt;SXSW&lt;/a&gt; and &lt;a href="http://videos.visitmix.com/MIX09/T28F"&gt;MIX 09&lt;/a&gt; on the growing trend of provide streams of user activities on social sites and aggregating these activities from multiple services into a single experience. Aggregating activities from multiple sites into a single service for the purpose of creating a activity stream is fairly commonplace today and was popularized by &lt;a href="http://www.friendfeed.com"&gt;Friendfeed&lt;/a&gt;. This functionality now exists on many social networking sites and related services including &lt;a href="http://venturebeat.com/2008/04/15/facebook-is-kinda-competing-with-friendfeed-like-it-kinda-competes-with-twitter/"&gt;Facebook&lt;/a&gt;, &lt;a href="http://www.yprofileblog.com/blog/2009/01/16/share-updates-from-other-sites-on-your-yahoo-profile/"&gt;Yahoo! Profile&lt;/a&gt; and the &lt;a href="http://windowslivewire.spaces.live.com/blog/cns!2F7EB29B42641D59!30283.entry"&gt;Windows Live Profile&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;In general, the model is to receive or retrieve user updates from a social media site like &lt;a href="http://www.flickr.com"&gt;Flickr&lt;/a&gt; and make these updates available on the user's profile on the target social network and share it with the user's friends via an activity stream (or news feed) on the site. The diagram below attempts to capture this many-to-many relationship as it occurs today using some well known services as examples. &lt;/p&gt;  &lt;p&gt;&lt;img src="http://4vwitg.bay.livefilestore.com/y1ppBa0_Ong9d3SNFupBAw8dsr4g3Vk9XLzJ9zzTBzKDVBzRh41RSmbX3otcIodYi05_x47vlFLngo/sharing.jpg" width="650" height="418" /&gt; &lt;/p&gt;  &lt;p&gt;The bidirectional arrows are meant to indicate that the relationship can be push-based where the content-based social media site notifies the target social network of new updates from the user or pull-based where the social network polls the site on a regular basis seeking new updates from the target user. &lt;/p&gt;  &lt;p&gt;There are two problems that sites have to deal with in this model &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;p&gt;Content sites like Flickr have to either deal with being polled unnecessarily millions of times a day by social networks seeking photo updates from their users.&amp;#160; There is the money quote from last year that &lt;a href="http://friendfeed.com/e/6039f854-7030-0f20-747c-55580487bfe8/FriendFeed-crawled-Flickr-2-7M-times-for-a-grand/"&gt;FriendFeed polled Flickr 2.7 million times a day to retrieve a total of less than 7,000 updates&lt;/a&gt;. Even if they move to a publish-subscribe model it would mean not only having to track which users are of interest to which social network but also targeting APIs on different social networks that are radically different (aka &lt;a href="http://twitter.com/kevinmarks/statuses/1068364292"&gt;the beautiful f-ing snowflake API problem&lt;/a&gt;). &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Social aggregation services like Friendfeed and Windows Live have to target dozens of sites each with a different APIs or schemas. Even in the case where the content sites support RSS or Atom, they often use &lt;a href="http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx"&gt;radically different schemas for representing the same data&lt;/a&gt;.&amp;#160; &lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The approach I've been advocating along with others in the industry is that we need to adopt standards for activity streams in a way that reduces the complexity of this many-to-many conversation that is currently going on between social sites. &lt;/p&gt;  &lt;p&gt;While I was at SXSW, I met one of the folks from &lt;a href="http://www.gnipcentral.com/"&gt;Gnip&lt;/a&gt; who is advocating an alternate approach. He argued that even with activity stream standards we've only addressed part of the problem. Such standards may mean that FriendFeed gets to reuse their Flickr code to poll Smugmug with little to no changes but it doesn't change the fact that they poll these sites millions of times a day to get a few thousand updates. &lt;/p&gt;  &lt;p&gt;Gnip has built a model where content sites publish updates to Gnip and then social networking sites can then choose to either poll Gnip or receive updates from Gnip when the update matches one of the rules they have created (e.g. notify us if you get a digg vote from Carnage4Life). The following diagram captures how Gnip works. &lt;/p&gt;  &lt;p&gt;&lt;img src="http://4vwitg.bay.livefilestore.com/y1p7GjK_fldHTQvD9irJt2cJseijhH_4vdlxBXUjMZvpBzPZVsV4fP-8OpOIcJGUaJMR3nbga0q-9I/gnip.png" /&gt; &lt;/p&gt;  &lt;p&gt;The benefit of this model to content sites like Flickr is that they no longer have to worry about being polled millions of times a day by social aggregation services. The benefit to social networking sites is that they now get a consistent format for data from the social media sites they care about and can choose to either pull the data or have it pushed to them. &lt;/p&gt;  &lt;p&gt;The main problem I see with this model is that it sets Gnip up to be this central point of failure and I'd personally rather deal interact directly with the content services directly instead of inject a middle man into the process. However I can see how their approach would be attractive to many sites who might be buckling under the load of being constantly polled and to social aggregation sites that are tired of hand coding adapters for each new social media sites they want to integrate with.&amp;#160; &lt;/p&gt;  &lt;p&gt;What do you think of Gnip's service and the problem space in general? &lt;/p&gt;  &lt;p&gt;&lt;img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /&gt; Now Playing: &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Eamon&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Eamon&lt;/a&gt; – &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Eamon+Fuck It (I Don't Want You Back) &amp;amp;x=0&amp;amp;y=0"&gt;F**k It (I Don't Want You Back) &lt;/a&gt;&lt;img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=65469949-ceda-4c41-bd10-871ebcfe4994</comments>
      <category>Startup Shoutout</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=db553491-ebe9-47fe-a1ac-02e09232f02d</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=db553491-ebe9-47fe-a1ac-02e09232f02d</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=db553491-ebe9-47fe-a1ac-02e09232f02d</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=db553491-ebe9-47fe-a1ac-02e09232f02d</wfw:commentRss>
      <slash:comments>9</slash:comments>
      <title>Can RDF really save us from data format proliferation?</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=db553491-ebe9-47fe-a1ac-02e09232f02d</guid>
      <link>http://www.25hoursaday.com/weblog/2009/01/12/CanRDFReallySaveUsFromDataFormatProliferation.aspx</link>
      <pubDate>Mon, 12 Jan 2009 14:10:08 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Bill de hÓra has a blog post entitled &lt;a href="http://www.dehora.net/journal/2009/01/10/format-debt-what-you-cant-say/"&gt;Format Debt: what you can't say&lt;/a&gt; where he writes&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The closest thing to a deployable web technology that might improve describing these kind of data mashups without parsing at any cost or patching is RDF. Once RDF is parsed it becomes a well defined graph structure - albeit not a structure most web programmers will be used to, it is however the same structure regardless of the source syntax or the code and the graph structure is closed under all allowed operations.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;If we take the example of MediaRSS, &lt;/em&gt;&lt;a href="http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx"&gt;&lt;em&gt;which is not consistenly used or placed in syndication and API formats&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, that class of problem more or less evaporates via RDF. Likewise if we take the &lt;/em&gt;&lt;a href="http://mashable.com/2008/03/25/windows-live-data-portability/"&gt;&lt;em&gt;current Zoo&lt;/em&gt;&lt;/a&gt;&lt;em&gt; of &lt;/em&gt;&lt;a href="http://groups.google.com/group/microformats/browse_thread/thread/559cb4d06dc50c30"&gt;&lt;em&gt;contact formats&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and our seeming &lt;/em&gt;&lt;a href="http://factoryjoe.com/blog/2008/03/11/portable-contact-lists-and-the-case-against-xfn/"&gt;&lt;em&gt;inability to commit to one&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, RDF/OWL &lt;/em&gt;&lt;a href="http://www.w3.org/TR/owl-ref/#IndividualIdentity"&gt;&lt;em&gt;can enable a declarative mapping between them&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Mapping can reduce the number of man years it takes to define a "standard" format by not having to bother unifying "standards" or getting away with a few thousand less test cases.&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I've always found this particular argument by RDF proponents to be suspect. When I complained about the &lt;a title="Dare Obasanjo aka Carnage4Life: Representing Rich Media and Social Network Activities in RSS/Atom Feeds" href="http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx"&gt;the lack of standards for representing rich media in Atom feeds&lt;/a&gt;, the thrust of the complaint is that you can't just plugin a feed from &lt;a href="http://picasaweb.google.com/"&gt;Picassa&lt;/a&gt; into a service that understands how to process feeds from &lt;a href="http://www.zooomr.com"&gt;Zooomr&lt;/a&gt; without making changes to the service or the input feed. &lt;/p&gt;  &lt;p&gt;RDF proponents&amp;nbsp; often to argue that if we all used RDF based formats then instead of having to change your code to support every new photo site's Atom feed with custom extensions, you could instead create a mapping from the format you don't understand to the one you do using something like the &lt;a href="http://www.w3.org/TR/owl-features/"&gt;OWL Web Ontology Language&lt;/a&gt;.&amp;nbsp; The problem with this argument is that there is a declarative approach to mapping between XML data formats without having to boil the ocean by convincing everyone to switch to RD; &lt;a href="http://www.w3.org/TR/xslt"&gt;XSL Transformations (XSLT)&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The key problem is that in both cases (i.e. mapping with OWL vs. mapping with XSLT) there is still the problem that Picassa feeds won't work with an app that understand's Zoomr's feeds until some developer writes code. Thus we're really debating on whether it is &lt;strike&gt;better&lt;/strike&gt; &lt;i&gt;cheaper&lt;/i&gt; to have the developer write declarative mappings like OWL or XSLT instead of writing new parsing code in their language of choice. &lt;/p&gt;  &lt;p&gt;In my experience I've seen that creating a software system where you can drop in an XSLT, OWL or other declarative mapping document to deal with new data formats is cheaper and likely to be less error prone than having to alter parsing code written in C#, Python, Ruby or whatever. However we don't need RDF or other Semantic Web technologies to build such solution today. XSLT works just fine as a tool for solving exactly that problem. &lt;/p&gt;  &lt;p&gt;&lt;img style="vertical-align: middle;" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif"&gt; Now Playing: &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Lady%20GaGa%20&amp;amp;%20Colby%20O%27Donis&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Lady GaGa &amp;amp; Colby O'Donis&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Lady%20GaGa%20&amp;amp;%20Colby%20O%27Donis+Just%20Dance&amp;amp;x=0&amp;amp;y=0"&gt;Just Dance&lt;/a&gt; &lt;img style="vertical-align: middle;" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif"&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=db553491-ebe9-47fe-a1ac-02e09232f02d</comments>
      <category>Syndication Technology</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=79610681-82d7-44b2-9433-823e032df128</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=79610681-82d7-44b2-9433-823e032df128</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=79610681-82d7-44b2-9433-823e032df128</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=79610681-82d7-44b2-9433-823e032df128</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <title>Representing Rich Media and Social Network Activities in RSS/Atom Feeds</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=79610681-82d7-44b2-9433-823e032df128</guid>
      <link>http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx</link>
      <pubDate>Thu, 08 Jan 2009 13:02:18 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;As I've mentioned previously, one of the features we shipped in the most recent release of Windows Live is the ability to import your activities from photo sharing sites like &lt;a href="http://www.flickr.com"&gt;Flickr&lt;/a&gt; and &lt;a href="http://www.photobucket.com"&gt;PhotoBucket&lt;/a&gt; or even blog posts from a regular RSS/Atom feed onto your Windows Live profile. You can see this in action on &lt;a href="http://cid-616444ee7a34f417.profile.live.com"&gt;my Windows Live profile&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;One question that has repeatedly come up for our service and others like it, is how users can get a great experience from just importing RSS/Atom feeds of sites that we don't support in a first class way. A couple of weeks ago Dave Winer asked this of FriendFeed in his post &lt;a href="http://www.scripting.com/stories/2008/11/30/friendfeedAndLevelPlayingF.html"&gt;FriendFeed and level playing fields&lt;/a&gt; where he writes &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Consider this screen (click on it to see the detail): &lt;/em&gt;&lt;a href="http://www.scripting.com/stories/2008/11/30/friendfeedAndLevelPlayingF.html#p2"&gt;&lt;em&gt;&lt;img border="0" alt="Permalink to this paragraph" src="http://www.scripting.com/images/2001/09/20/sharpPermaLink3.gif" width="6" height="9" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a name="p3"&gt;&lt;/a&gt;&lt;a href="http://images.scripting.com/archiveScriptingCom/2008/11/30/ffbigscreen.gif"&gt;&lt;em&gt;&lt;img border="0" hspace="15" alt="A picture named ffscrfeen.gif" vspace="5" src="http://images.scripting.com/archiveScriptingCom/2008/11/30/ffscrfeen.gif" width="250" height="315" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; &lt;/em&gt;&lt;a href="http://www.scripting.com/stories/2008/11/30/friendfeedAndLevelPlayingF.html#p3"&gt;&lt;em&gt;&lt;img border="0" alt="Permalink to this paragraph" src="http://www.scripting.com/images/2001/09/20/sharpPermaLink3.gif" width="6" height="9" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a name="p4"&gt;&lt;/a&gt;&lt;em&gt;Suppose you used a photo site that wasn't one of the ones listed, but you had an RSS feed for your photos and favorites on that site. What are you supposed to do? I always assumed you should just add the feed under &amp;quot;Blog&amp;quot; but then your readers will start asking why your pictures don't do all the neat things that happen automatically with Flickr, Picasa, SmugMug or Zooomr sites. I have such a site, and I don't want them to do anything special for it, I just want to tell FF that it's a photo site and have all the cool special goodies they have for Flickr kick in automatically. &lt;/em&gt;&lt;a href="http://www.scripting.com/stories/2008/11/30/friendfeedAndLevelPlayingF.html#p4"&gt;&lt;em&gt;&lt;img border="0" alt="Permalink to this paragraph" src="http://www.scripting.com/images/2001/09/20/sharpPermaLink3.gif" width="6" height="9" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a name="p5"&gt;&lt;/a&gt;&lt;em&gt;If you pop up a higher level, you'll see that this is actually contrary to the whole idea of feeds, which were supposed to create a level playing field for the big guys and ordinary people.&lt;/em&gt;       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We have a similar problem when importing arbitrary RSS/Atom feeds onto a user's profile in Windows Live. For now, we treat each imported RSS feed as a blog entry and assume it has a title and a body that can be used as a summary. This breaks down if you are someone like &lt;a href="http://twitter.com/kradcliffe/statuses/1038688717"&gt;Kevin Radcliffe&lt;/a&gt; who would like to import his Picasa Web albums. At this point we run smack-dab into the fact that there aren't actually consistent standards around how to represent photo albums from photo sharing sites in Atom/RSS feeds. &lt;/p&gt;  &lt;p&gt;Let's look at the RSS/Atom feeds from three of the sites that Dave names that aren't natively supported by Windows Live's Web Activities feature. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://picasaweb.google.com/"&gt;Picassa&lt;/a&gt; &lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;guid &lt;/span&gt;&lt;span style="color: red"&gt;isPermaLink&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;false&lt;/span&gt;'&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;http://picasaweb.google.com/data/entry/base/user/bo.so.po.ro.sie/albumid/5280893965532109969/photoid/5280894045331336242?alt=rss&lt;span style="color: red"&gt;&amp;amp;amp;&lt;/span&gt;hl=en_US&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;guid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;pubDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Wed, 17 Dec 2008 22:45:59 +0000&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;pubDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;atom:updated&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2008-12-17T22:45:59.000Z&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;atom:updated&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;category &lt;/span&gt;&lt;span style="color: red"&gt;domain&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;http://schemas.google.com/g/2005#kind&lt;/span&gt;'&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;http://schemas.google.com/photos/2007#photo&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;category&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;DSC_0479.JPG&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;table&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;tr&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;td style=&amp;quot;padding: 0 5px&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;a href=&amp;quot;http://picasaweb.google.com/bo.so.po.ro.sie/DosiaIPomaraCze#5280894045331336242&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;img style=&amp;quot;border:1px solid #5C7FB9&amp;quot; src=&amp;quot;http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/s288/DSC_0479.JPG&amp;quot; alt=&amp;quot;DSC_0479.JPG&amp;quot;/&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/td&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;td valign=&amp;quot;top&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;font color=&amp;quot;#6B6B6B&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;Date: &lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/font&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;font color=&amp;quot;#333333&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;Dec 17, 2008 10:56 AM&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/font&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;br/&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;font color=\&amp;quot;#6B6B6B\&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;Number of Comments on Photo:&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/font&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;font color=\&amp;quot;#333333\&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;0&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/font&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;br/&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;p&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;a href=&amp;quot;http://picasaweb.google.com/bo.so.po.ro.sie/DosiaIPomaraCze#5280894045331336242&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;font color=&amp;quot;#3964C2&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;View Photo&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/font&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/p&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/td&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/tr&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/table&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;enclosure &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;image/jpeg&lt;/span&gt;' &lt;span style="color: red"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/DSC_0479.JPG&lt;/span&gt;' &lt;span style="color: red"&gt;length&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;0&lt;/span&gt;'&lt;span style="color: blue"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;link&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;http://picasaweb.google.com/lh/photo/PORshBK0wdBV0WPl27g_wQ&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;link&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:group&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:title &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;plain&lt;/span&gt;'&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;DSC_0479.JPG&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:description &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;plain&lt;/span&gt;'&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:keywords&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:keywords&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:content &lt;/span&gt;&lt;span style="color: red"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/DSC_0479.JPG&lt;/span&gt;' &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;1600&lt;/span&gt;' &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;1074&lt;/span&gt;' &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;image/jpeg&lt;/span&gt;' &lt;span style="color: red"&gt;medium&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;image&lt;/span&gt;'&lt;span style="color: blue"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:thumbnail &lt;/span&gt;&lt;span style="color: red"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/s72/DSC_0479.JPG&lt;/span&gt;' &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;72&lt;/span&gt;' &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;49&lt;/span&gt;'&lt;span style="color: blue"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:thumbnail &lt;/span&gt;&lt;span style="color: red"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/s144/DSC_0479.JPG&lt;/span&gt;' &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;144&lt;/span&gt;' &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;97&lt;/span&gt;'&lt;span style="color: blue"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:thumbnail &lt;/span&gt;&lt;span style="color: red"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/s288/DSC_0479.JPG&lt;/span&gt;' &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;288&lt;/span&gt;' &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;'&lt;span style="color: blue"&gt;194&lt;/span&gt;'&lt;span style="color: blue"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:credit&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Joanna&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:credit&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:group&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://www.smugmug.com"&gt;Smugmug&lt;/a&gt; &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;entry&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Verbeast's photo&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;link &lt;/span&gt;&lt;span style="color: red"&gt;rel&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;alternate&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;text/html&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;http://verbeast.smugmug.com/gallery/5811621_NELr7#439421133_qFtZ5&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;content &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;html&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;p&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;a href=&amp;quot;http://verbeast.smugmug.com&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;Verbeast&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span style="color: red"&gt;&amp;amp;gt; &amp;amp;lt;&lt;/span&gt;/p&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;a href=&amp;quot;http://verbeast.smugmug.com/gallery/5811621_NELr7#439421133_qFtZ5&amp;quot; title=&amp;quot;Verbeast's photo&amp;quot;&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;img src=&amp;quot;http://verbeast.smugmug.com/photos/439421133_qFtZ5-Th.jpg&amp;quot; width=&amp;quot;150&amp;quot; height=&amp;quot;150&amp;quot; alt=&amp;quot;Verbeast's photo&amp;quot; title=&amp;quot;Verbeast's photo&amp;quot; style=&amp;quot;border: 1px solid #000000;&amp;quot; /&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;content&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;updated&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2008-12-18T22:51:58Z&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;updated&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
     &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Verbeast&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
     &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;uri&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;http://verbeast.smugmug.com&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;uri&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
   &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;http://verbeast.smugmug.com/photos/439421133_qFtZ5-Th.jpg&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;exif:DateTimeOriginal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2008-12-12 18:37:17&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;exif:DateTimeOriginal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
 &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;entry&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://www.zooomr.com"&gt;Zooomr&lt;/a&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ギンガメアジとジンベイ&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;link&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;http://www.zooomr.com/photos/chuchu/6556014/&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;link&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &lt;/span&gt;&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;a href=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;http://www.zooomr.com/photos/chuchu/&lt;span style="color: red"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;chuchu&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span style="color: red"&gt;&amp;amp;gt; &lt;/span&gt;posted a photograph:&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;br /&lt;span style="color: red"&gt;&amp;amp;gt;

        &amp;amp;lt;&lt;/span&gt;a href=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;http://www.zooomr.com/photos/chuchu/6556014/&lt;span style="color: red"&gt;&amp;amp;quot; &lt;/span&gt;class=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;image_link&lt;span style="color: red"&gt;&amp;amp;quot; &amp;amp;gt;&amp;amp;lt;&lt;/span&gt;img src=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;http://static.zooomr.com/images/6556014_00421b6456_m.jpg&lt;span style="color: red"&gt;&amp;amp;quot; &lt;/span&gt;alt=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;ギンガメアジとジンベイ&lt;span style="color: red"&gt;&amp;amp;quot; &lt;/span&gt;title=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;ギンガメアジとジンベイ&lt;span style="color: red"&gt;&amp;amp;quot;  &lt;/span&gt;/&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;br /&lt;span style="color: red"&gt;&amp;amp;gt;

      &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;pubDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Mon, 22 Dec 2008 04:14:52 +0000&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;pubDate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;author &lt;/span&gt;&lt;span style="color: red"&gt;zooomr:profile&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;http://www.zooomr.com/people/chuchu/&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;nobody@zooomr.com (chuchu)&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;guid &lt;/span&gt;&lt;span style="color: red"&gt;isPermaLink&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;tag:zooomr.com,2004:/photo/6556014&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;guid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:content &lt;/span&gt;&lt;span style="color: red"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;http://static.zooomr.com/images/6556014_00421b6456_m.jpg&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;image/jpeg&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;/&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ギンガメアジとジンベイ&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:text &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;html&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;
        &lt;/span&gt;&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;a href=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;http://www.zooomr.com/photos/chuchu/&lt;span style="color: red"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;chuchu&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span style="color: red"&gt;&amp;amp;gt; &lt;/span&gt;posted a photograph:&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;br /&lt;span style="color: red"&gt;&amp;amp;gt;

        &amp;amp;lt;&lt;/span&gt;a href=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;http://www.zooomr.com/photos/chuchu/6556014/&lt;span style="color: red"&gt;&amp;amp;quot; &lt;/span&gt;class=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;image_link&lt;span style="color: red"&gt;&amp;amp;quot; &amp;amp;gt;&amp;amp;lt;&lt;/span&gt;img src=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;http://static.zooomr.com/images/6556014_00421b6456_m.jpg&lt;span style="color: red"&gt;&amp;amp;quot; &lt;/span&gt;alt=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;ギンガメアジとジンベイ&lt;span style="color: red"&gt;&amp;amp;quot; &lt;/span&gt;title=&lt;span style="color: red"&gt;&amp;amp;quot;&lt;/span&gt;ギンガメアジとジンベイ&lt;span style="color: red"&gt;&amp;amp;quot;  &lt;/span&gt;/&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/a&lt;span style="color: red"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;br /&lt;span style="color: red"&gt;&amp;amp;gt;

      &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:text&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:thumbnail &lt;/span&gt;&lt;span style="color: red"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;http://static.zooomr.com/images/6556014_00421b6456_s.jpg&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;75&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;75&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;/&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:credit &lt;/span&gt;&lt;span style="color: red"&gt;role&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;photographer&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;chuchu&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:credit&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:category &lt;/span&gt;&lt;span style="color: red"&gt;scheme&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;urn:zooomr:tags&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;海遊館 aquarium kaiyukan osaka japan&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;media:category&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;item&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;As you can see from the above XML snippets there is no consistency in how they represent photo streams. Even though both Picasa and Zoomr use Yahoo's &lt;a href="http://en.wikipedia.org/wiki/Media_RSS"&gt;Media RSS extensions&lt;/a&gt;, they generate different markup. Picasa has the media extensions as a set of elements within a &lt;code&gt;media:group&lt;/code&gt; element that is a child of the &lt;code&gt;item&lt;/code&gt; element while Zooomr simply places a grab bag of Media RSS elements such including &lt;code&gt;media:thumbnail&lt;/code&gt; and &lt;code&gt;media:content&lt;/code&gt; as children of the &lt;code&gt;item&lt;/code&gt; element.&amp;#160; Smugmug takes the cake by simply tunneling some escaped HTML in the &lt;code&gt;atom:content&lt;/code&gt; element instead of using explicit metadata to describe the photos. &lt;/p&gt;

&lt;p&gt;The bottom line is that it isn't possible to satisfy Dave Winer's request and create a level playing field today because there are &lt;u&gt;no consistently applied standards&lt;/u&gt; for representing photo streams in RSS/Atom. This is unfortunate because it means that services have to write one off code (aka the &lt;a href="http://twitter.com/kevinmarks/statuses/1068364292"&gt;beautiful fucking snowflake problem&lt;/a&gt;) for each photo sharing site they want to integrate with. Not only is this a lot of unnecessary code, it also prevents such integration from being a simple plug and play experience for users of social aggregation services.&lt;/p&gt;

&lt;p&gt;So far, the closest thing to a standard in this space is Media RSS but as the name states it is an RSS based format and really doesn't fit with the Atom syndication format's data model. This is why Martin Atkins has started working on &lt;a href="http://www.apparently.me.uk/22448.html"&gt;Atom Media Extensions&lt;/a&gt; which is an effort to create a similar set of media extensions for the Atom syndication format. &lt;/p&gt;

&lt;p&gt;What I like about the &lt;a href="http://martin.atkins.me.uk/specs/atommedia"&gt;first draft of Atom media extensions&lt;/a&gt; is that it is focused on the basic case of syndicating audio, video and image for use in activity streams and doesn't have some of the search related and feed republishing baggage you see in related formats like Media RSS or &lt;a href="http://www.apple.com/itunes/whatson/podcasts/specs.html"&gt;iTunes RSS extensions&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The interesting question is how to get the photo sites out there to adopt consistent standards in this space? Maybe we can get Google to add it to their &lt;a href="http://www.readwriteweb.com/archives/googles_new_open_stack_sans_facebook_microsoft.php"&gt;Open Stack™&lt;/a&gt; since they've been pretty good at getting social sites to adopt their standards and have been generally good at evangelization. &lt;/p&gt;

&lt;p&gt;&lt;img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /&gt; Now Playing: &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=DMX&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;DMX&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=DMX+Ruff Ryders' Anthem&amp;amp;x=0&amp;amp;y=0"&gt;Ruff Ryders' Anthem&lt;/a&gt; &lt;img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=79610681-82d7-44b2-9433-823e032df128</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=16de470b-346e-4cd0-9669-4dbae5665a04</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=16de470b-346e-4cd0-9669-4dbae5665a04</pingback:target>
      <dc:creator>Dare Obasanjo (Carnage4Life)</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=16de470b-346e-4cd0-9669-4dbae5665a04</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=16de470b-346e-4cd0-9669-4dbae5665a04</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <title>When REST Doesn't Scale, XMPP to the Rescue?</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=16de470b-346e-4cd0-9669-4dbae5665a04</guid>
      <link>http://www.25hoursaday.com/weblog/2008/07/27/WhenRESTDoesntScaleXMPPToTheRescue.aspx</link>
      <pubDate>Sun, 27 Jul 2008 12:38:09 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;There was an interesting presentation at OSCON 2008 by Evan Henshaw-Plath and Kellan Elliott-McCrea entitled &lt;a href="http://radar.oreilly.com/2008/07/oscon-day-1-beyond-rest-buildi.html"&gt;Beyond REST? Building Data Services with XMPP PubSub&lt;/a&gt;. The presentation is embedded below. &lt;/p&gt; &lt;object style="margin:0px" width="350" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=beyond-rest-narrative-1216853401785467-9" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=beyond-rest-narrative-1216853401785467-9" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="350" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;The core argument behind the presentation can be summarized by &lt;a href="http://twitter.com/timoreilly/statuses/866400327"&gt;this tweet from Tim O'Reilly&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;&lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;On monday friendfeed polled flickr nearly 3 million times for 45000 users, only 6K of whom were logged in. Architectural mismatch. #oscon08&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;On July 21st, &lt;a href="http://www.friendfeed.com"&gt;FriendFeed&lt;/a&gt; had 45,000 users who had associated their &lt;a href="http://www.flickr.com"&gt;Flickr&lt;/a&gt; profiles with their FriendFeed account. FriendFeed polls Flickr about once every 20 – 30 minutes to see if the user has uploaded new pictures. However only about 6,000 of those users logged into Flickr that day, let alone uploaded pictures. Thus there were literally millions of HTTP requests made by FriendFeed that were totally unnecessary. &lt;/p&gt;  &lt;p&gt;Evan and Kellan's talk suggests that instead of Flickr getting almost 3 million requests from FriendFeed, it would be a more efficient model for FriendFeed to tell Flickr which users they are interested in and then listen for updates from Flickr when they upload photos. &lt;/p&gt;  &lt;p&gt;They are right. The interaction between Flickr and FriendFeed should actually be a publish-subscribe relationship instead of a polling relationship. Polling is a good idea for RSS/Atom for a few reasons&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;there are a thousands to hundreds of thousands clients that might be interested in a resource so the server keeping track of subscriptions is prohibitively expensive&lt;/li&gt;    &lt;li&gt;a lot of these end points aren't persistently connected (i.e. your desktop RSS reader isn't always running) &lt;/li&gt;    &lt;li&gt;RSS/Atom publishing is as simple as plopping a file in the right directory and letting IIS or Apache work its magic&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The situation between FriendFeed and Flickr is almost the exact opposite. Instead of thousands of clients interested in document, we have one subscriber interested in thousands of documents. Both end points are always on or are at least expected to be. The cost of developing a publish-subscribe model is one that both sides can afford. &lt;/p&gt;  &lt;p&gt;Thus this isn't a case of REST not scaling as implied by Evan and Kellan's talk. This is a case of using the wrong tool to solve your problem because it happens to work well in a different scenario. The above talk suggests using &lt;a href="http://en.wikipedia.org/wiki/XMPP"&gt;XMPP&lt;/a&gt; which is an instant messaging protocol as the publish-subscribe mechanism. In response to the talk, Joshua Schachter (founder of &lt;a href="http://del.icio.us"&gt;del.icio.us&lt;/a&gt;) suggested a less heavyweight publish-subscribe mechanism using a custom API in his post entitled &lt;a href="http://joshua.schachter.org/2008/07/beyond-rest.html"&gt;beyond REST&lt;/a&gt;. My suggestion for people who believe they have this problem would be to look at using some subset of XMPP and experimenting with off-the-shelf tools before rolling your own solution. Of course, this is an approach that totally depends on network effects. Today everyone has RSS/Atom feeds while very few services use XMPP. There isn't much point in investing in publishing as XMPP if your key subscribers can't consume it and vice versa. It will be interesting to see if the popular &amp;quot;Web 2.0&amp;quot; companies can lead the way in using XMPP for publish-subscribe of activity streams from social networks in the same way they kicked off our love affair with RESTful Web APIs. &lt;/p&gt;  &lt;p&gt;It should be noted that there are already some &amp;quot;Web 2.0&amp;quot; companies using XMPP as a way to provide a stream of updates to subscribing services to prevent the overload that comes from polling. For example, Twitter &lt;a title="Twitter and XMPP: Drinking from The Fire Hose" href="http://blog.twitter.com/2008/07/twitter-and-xmpp-drinking-from-fire.html"&gt;has confirmed&lt;/a&gt; that it provides an XMPP stream to FriendFeed, Summize, Zappos, Twittervision and Gnip. However they simply dump out every update that occurs on Twitter to these services instead of having these services subscribe to updates for specific users. This approach is quite inefficient and brings it's own set of scaling issues. &lt;/p&gt;  &lt;p&gt;The interesting question is why people are just bringing this up? Shouldn't people have already been complaining about Web-based feed readers like &lt;a href="http://reader.google.com"&gt;Google Reader&lt;/a&gt; and &lt;a href="http://www.bloglines.com"&gt;Bloglines&lt;/a&gt; for causing the same kinds of problems? I can only imagine how many millions of times a day Google Reader must fetch content from &lt;a href="http://www.typepad.com"&gt;TypePad&lt;/a&gt; and &lt;a href="http://www.wordpress.com"&gt;Wordpress.com&lt;/a&gt; but I haven't seen explicit complaints about this issue from folks like &lt;a href="http://www.dashes.com/anil"&gt;Anil Dash&lt;/a&gt; or &lt;a href="http://ma.tt"&gt;Matt Mullenweg&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Now Playing:&lt;/b&gt; &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=The Pussycat Dolls&amp;amp;field-title=&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;The Pussycat Dolls&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=The Pussycat Dolls+When I Grow Up&amp;amp;x=0&amp;amp;y=0"&gt;When I Grow Up&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=16de470b-346e-4cd0-9669-4dbae5665a04</comments>
      <category>Syndication Technology</category>
      <category>Web Development</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=8ebea3c1-8eda-495b-8da8-406c1e0927fb</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=8ebea3c1-8eda-495b-8da8-406c1e0927fb</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=8ebea3c1-8eda-495b-8da8-406c1e0927fb</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=8ebea3c1-8eda-495b-8da8-406c1e0927fb</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <title>Thoughts on Google's Proposal for Granular Updates in AtomPub</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=8ebea3c1-8eda-495b-8da8-406c1e0927fb</guid>
      <link>http://www.25hoursaday.com/weblog/2008/02/16/ThoughtsOnGooglesProposalForGranularUpdatesInAtomPub.aspx</link>
      <pubDate>Sat, 16 Feb 2008 19:29:05 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Via Sam Ruby's post &lt;a href="http://intertwingly.net/blog/2008/02/15/Embrace-Extend-then-Innovate"&gt;Embrace, Extend then Innovate&lt;/a&gt; I found a link to Joe Gregorio's post entitled &lt;a href="http://bitworking.org/news/296/How-To-Do-RESTful-Partial-Updates"&gt;How to do RESTful Partial Updates&lt;/a&gt;. Joe's post is a recommendation of how to extend the Atom Publishing Protocol (&lt;a href="http://tools.ietf.org/html/rfc5023"&gt;RFC 5023&lt;/a&gt;) to support updating the properties of an entry without having to replace the entire entry. Given that Joe works for Google on GData, I have assumed that Joe's post is Google's attempt to float a trial balloon before extending AtomPub in this way. This is a more community centric approach than the company has previously taken with &lt;a href="http://code.google.com/apis/gdata/"&gt;GData&lt;/a&gt;, &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;, etc where these protocols simply appeared out of nowhere with proprietary extensions to AtomPub with an FYI to the community &lt;a href="http://www.mailinglistarchive.com/atom-protocol@imc.org/msg10514.html"&gt;after the fact&lt;/a&gt;. &lt;/p&gt;  &lt;h4&gt;The Problem Statement&lt;/h4&gt;  &lt;p&gt;In the Atom Publishing Protocol, an &lt;code&gt;atom:entry&lt;/code&gt; represents an editable resource. When editing that resource, it is intended that an AtomPub client should download the entire entry, edit the fields it needs to change and then use a conditional PUT request to upload the changed entry. &lt;/p&gt;  &lt;p&gt;So what's the problem? Below is an example of the results one could get from invoking the &lt;a href="http://developer.facebook.com/documentation.php?v=1.0&amp;amp;method=users.getInfo"&gt;users.getInfo method&lt;/a&gt; in the Facebook REST API.&lt;/p&gt;  &lt;blockquote&gt;&lt;code&gt;     &lt;p&gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;user&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;uid&amp;gt;8055&amp;lt;/uid&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;about_me&amp;gt;This field perpetuates the glorification of the ego.&amp;#160; Also, it has a character limit.&amp;lt;/about_me&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;activities&amp;gt;Here: facebook, etc. There: Glee Club, a capella, teaching.&amp;lt;/activities&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;birthday&amp;gt;November 3&amp;lt;/birthday&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;books&amp;gt;The Brothers K, GEB, Ken Wilber, Zen and the Art, Fitzgerald, The Emporer's New Mind, The Wonderful Story of Henry Sugar&amp;lt;/books&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;current_location&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;city&amp;gt;Palo Alto&amp;lt;/city&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;state&amp;gt;CA&amp;lt;/state&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;country&amp;gt;United States&amp;lt;/country&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;zip&amp;gt;94303&amp;lt;/zip&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/current_location&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;first_name&amp;gt;Dave&amp;lt;/first_name&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;interests&amp;gt;coffee, computers, the funny, architecture, code breaking,snowboarding, philosophy, soccer, talking to strangers&amp;lt;/interests&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;last_name&amp;gt;Fetterman&amp;lt;/last_name&amp;gt;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;movies&amp;gt;Tommy Boy, Billy Madison, Fight Club, Dirty Work, Meet the Parents, My Blue Heaven, Office Space &amp;lt;/movies&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;music&amp;gt;New Found Glory, Daft Punk, Weezer, The Crystal Method, Rage, the KLF, Green Day, Live, Coldplay, Panic at the Disco, Family Force 5&amp;lt;/music&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;name&amp;gt;Dave Fetterman&amp;lt;/name&amp;gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;profile_update_time&amp;gt;1170414620&amp;lt;/profile_update_time&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;relationship_status&amp;gt;In a Relationship&amp;lt;/relationship_status&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;religion/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;sex&amp;gt;male&amp;lt;/sex&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;significant_other_id xsi:nil=&amp;quot;true&amp;quot;/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;status&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;&amp;lt;message&amp;gt;Pirates of the Carribean was an awful movie!!!&amp;lt;/message&amp;gt;          &lt;br /&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/status&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/user&amp;gt;         &lt;br /&gt;&lt;/p&gt;   &lt;/code&gt;&lt;/blockquote&gt;  &lt;p&gt;If this user was represented as an &lt;code&gt;atom:entry&lt;/code&gt; then each time an application wants to edit the user's status message it needs to download the entire data for the user with its over two dozen fields, change the status message in an in-memory representation of the XML document and then upload the entire user &lt;code&gt;atom:entry&lt;/code&gt; back to the server.&amp;#160; This is a fairly expensive way to change a status message compared to how this is approached in other RESTful protocols (e.g. &lt;a href="http://www.webdav.org/specs/rfc2518.html#METHOD_PROPPATCH"&gt;PROPPATCH&lt;/a&gt; in WebDAV). &lt;/p&gt;  &lt;h4&gt;Previous Discussions on this Topic: When the Shoe is on the Other Foot&lt;/h4&gt;  &lt;p&gt;A few months ago I brought up this issue as one of the problems encountered when using the Atom Publishing Protocol outside of blog editing contexts in my post &lt;a href="http://www.25hoursaday.com/weblog/2007/06/09/WhyGDataAPPFailsAsAGeneralPurposeEditingProtocolForTheWeb.aspx"&gt;Why GData/APP Fails as a General Purpose Editing Protocol for the Web&lt;/a&gt;. In that post I wrote &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;Lack of support for granular updates to fields of an item:&lt;/b&gt; As mentioned in the previous section editing an entry requires replacing the old entry with a new one. The expected client interaction with the server is described in &lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-15.html#rfc.section.5.4"&gt;section 5.4 of the current APP draft&lt;/a&gt; and is excerpted below.&lt;/p&gt;    &lt;blockquote&gt;&lt;i&gt;&lt;/i&gt;      &lt;h6&gt;&lt;i&gt;Retrieving a Resource&lt;/i&gt;&lt;/h6&gt;      &lt;pre&gt;&lt;i&gt;Client                                     Server&lt;br /&gt;  |                                           |&lt;br /&gt;  |  1.) GET to Member URI                    |&lt;br /&gt;  |------------------------------------------&amp;gt;|&lt;br /&gt;  |                                           |&lt;br /&gt;  |  2.) 200 Ok                               |&lt;br /&gt;  |      Member Representation                |&lt;br /&gt;  |&amp;lt;------------------------------------------|&lt;br /&gt;  |                                           |&lt;br /&gt;&lt;/i&gt;&lt;/pre&gt;

    &lt;ol&gt;
      &lt;li&gt;&lt;i&gt;The client sends a GET request to the URI of a Member Resource to retrieve its representation.&lt;/i&gt;&lt;/li&gt;

      &lt;li&gt;&lt;i&gt;The server responds with the representation of the Member Resource.&lt;/i&gt;&lt;/li&gt;
    &lt;/ol&gt;
    &lt;i&gt;&lt;/i&gt;

    &lt;h6&gt;&lt;i&gt;Editing a Resource&lt;/i&gt;&lt;/h6&gt;

    &lt;pre&gt;&lt;i&gt;Client                                     Server&lt;br /&gt;  |                                           |&lt;br /&gt;  |  1.) PUT to Member URI                    |&lt;br /&gt;  |      Member Representation                |&lt;br /&gt;  |------------------------------------------&amp;gt;|&lt;br /&gt;  |                                           |&lt;br /&gt;  |  2.) 200 OK                               |&lt;br /&gt;  |&amp;lt;------------------------------------------|&lt;br /&gt;&lt;/i&gt;&lt;/pre&gt;

    &lt;ol&gt;&lt;i&gt;&lt;/i&gt;

      &lt;li&gt;&lt;i&gt;The client sends a PUT request to store a representation of a Member Resource.&lt;/i&gt; &lt;i&gt;&lt;/i&gt;&lt;/li&gt;

      &lt;li&gt;&lt;i&gt;If the request is successful, the server responds with a status code of 200.&lt;/i&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;Can anyone spot what's wrong with this interaction? The first problem is a minor one that may prove problematic in certain cases. The problem is pointed out in the note in the &lt;a href="http://code.google.com/apis/blogger/developers_guide_protocol.html#UpdatingPosts"&gt;documentation on Updating posts on Google Blogger via GData&lt;/a&gt; which states&lt;/p&gt;

  &lt;blockquote&gt;&lt;strong&gt;IMPORTANT!&lt;/strong&gt; To ensure forward compatibility, be sure that when you &lt;code&gt;POST&lt;/code&gt; an updated entry you preserve &lt;b&gt;all&lt;/b&gt; the XML that was present when you retrieved the entry from Blogger. Otherwise, when we implement new stuff and include &lt;code&gt;&amp;lt;new-awesome-feature&amp;gt;&lt;/code&gt; elements in the feed, your client won't return them and your users will miss out! The &lt;a href="http://code.google.com/apis/gdata/clientlibs.html"&gt;Google data API client libraries&lt;/a&gt; all handle this correctly, so if you're using one of the libraries you're all set.&lt;/blockquote&gt;

  &lt;p&gt;Thus each client is responsible for ensuring that it doesn't lose any XML that was in the original &lt;code&gt;atom:entry&lt;/code&gt; element it downloaded. The second problem is more serious and should be of concern to anyone who's read &lt;a href="http://www.w3.org/1999/04/Editing/"&gt;Editing the Web: Detecting the Lost Update Problem Using Unreserved Checkout&lt;/a&gt;. The problem is that there is &lt;b&gt;data loss&lt;/b&gt; if the entry has changed between the time the client downloaded it and when it tries to PUT its changes. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That post was negatively received by many members of the AtomPub community including Joe Gregorio. Joe wrote a scathing response to my post entitled &lt;a href="http://bitworking.org/news/197/In-which-we-narrowly-save-Dare-from-inventing-his-own-publishing-protocol"&gt;In which we narrowly save Dare from inventing his own publishing protocol&lt;/a&gt;&amp;#160; where he addressed that particular issue as follows &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;The second complaint is one of data loss:&lt;/em&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;&lt;em&gt;The problem is that there is data loss if the entry has changed between the time the client downloaded it and when it tries to PUT its changes.&lt;/em&gt;&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;em&gt;Fortunately, the only real problem is that Dare seems to have only skimmed the specification. From &lt;/em&gt;&lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-15.html#edit-via-PUT"&gt;&lt;em&gt;Section 9.3&lt;/em&gt;&lt;/a&gt;&lt;em&gt;:&lt;/em&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;&lt;em&gt;To avoid unintentional loss of data when editing Member Entries or Media Link Entries, Atom Protocol clients SHOULD preserve all metadata that has not been intentionally modified, including unknown foreign markup as defined in Section 6 of [RFC4287].&lt;/em&gt;&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;em&gt;And further, from &lt;/em&gt;&lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-15.html#etags"&gt;&lt;em&gt;Section 9.5&lt;/em&gt;&lt;/a&gt;&lt;em&gt;:&lt;/em&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;&lt;em&gt;Implementers are advised to pay attention to cache controls, and to make use of the mechanisms available in HTTP when editing Resources, in particular entity-tags as outlined in [NOTE-detect-lost-update]. Clients are not assured to receive the most recent representations of Collection Members using GET if the server is authorizing intermediaries to cache them.&lt;/em&gt;&lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;p&gt;&lt;em&gt;Hey look, we actually reference the &lt;/em&gt;&lt;a href="http://www.w3.org/1999/04/Editing/"&gt;&lt;em&gt;lost update&lt;/em&gt;&lt;/a&gt;&lt;em&gt; paper that specifies how to solve this problem, right there in the spec! And Section 9.5.1 even shows an example of just such a conditional PUT failing. Who knew? And just to make this crystal clear, you can build a server that is compliant to the APP that accepts only conditional PUTs. &lt;/em&gt;&lt;a href="http://bitworking.org/news/138/Testing-the-APE"&gt;&lt;em&gt;I did&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, and it &lt;/em&gt;&lt;a href="http://intertwingly.net/wiki/pie/InteropGrid"&gt;&lt;em&gt;performed quite well at the last APP Interop&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The bottom line of Joe's response is that he didn't think it was a real problem. My assumption is that his perspective on the problem has broadened now that he has a responsibility to &lt;a href="http://code.google.com/apis/gdata/overview.html"&gt;the wide breadth of AtomPub implementations at Google&lt;/a&gt; as opposed to when his design decisions were being influenced by a home grown blogging server he wrote in his free time. &lt;/p&gt;

&lt;h4&gt;The Google Solution: Embrace, Extend then Innovate&lt;/h4&gt;

&lt;p&gt;Now that Joe thinks supporting granular updates of a resource is a valid scenario, he and the folks at Google have proposed the following solution to the problem. Joe writes&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Now if I wanted to update part of this entry, say the title, using the mechanisms in &lt;a href="http://www.ietf.org/rfc/rfc5023.txt"&gt;RFC 5023&lt;/a&gt; then I would change the value of the title element and PUT the whole modified entry back to the the URI &lt;code&gt;http://example.org/edit/first-post.atom&lt;/code&gt;. Now this document isn't large, but we'll use it to demonstrate the concepts. The first thing we want to do is add a URI Template that allows us to construct a URI to PUT changes back to:&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;entry         
        xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;
        &lt;b&gt;&lt;i&gt;xmlns:t=&amp;quot;http://blah...&amp;quot;&amp;gt;&lt;/i&gt;&lt;/b&gt;
&lt;b&gt;&lt;i&gt;&amp;lt;t:link_template ref=&amp;quot;sub&amp;quot; 
        href=&amp;quot;http://example.org/edit/first-post/{-listjoin|;|id}&amp;quot;/&amp;gt;&lt;/i&gt;&lt;/b&gt;
    &amp;lt;title&amp;gt;Atom-Powered Robots Run Amok&amp;lt;/title&amp;gt;
    &amp;lt;id&amp;gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&amp;lt;/id&amp;gt;
    &amp;lt;updated&amp;gt;2003-12-13T18:30:02Z&amp;lt;/updated&amp;gt;
    &amp;lt;author&amp;gt;&amp;lt;name&amp;gt;John Doe&amp;lt;/name&amp;gt;&amp;lt;/author&amp;gt;
    &amp;lt;content&amp;gt;Some text.&amp;lt;/content&amp;gt;
    &amp;lt;link rel=&amp;quot;edit&amp;quot;
        href=&amp;quot;http://example.org/edit/first-post.atom&amp;quot;/&amp;gt;
&amp;lt;/entry&amp;gt;&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;Then we need to add id's to each of the pieces of the document we wish to be able to individually update. For this we'll use the W3C xml:id specification:&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;entry         
        xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;
        xmlns:t=&amp;quot;http://blah...&amp;quot;&amp;gt;   
    &amp;lt;t:link_template ref=&amp;quot;sub&amp;quot; href=&amp;quot;http://example.org/edit/first-post/{-listjoin|;|id}&amp;quot;/&amp;gt;
    &amp;lt;title &lt;b&gt;&lt;u&gt;xml:id=&amp;quot;X1&amp;quot;&lt;/u&gt;&lt;/b&gt;&amp;gt;Atom-Powered Robots Run Amok&amp;lt;/title&amp;gt;
    &amp;lt;id&amp;gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&amp;lt;/id&amp;gt;
    &amp;lt;updated&amp;gt;2003-12-13T18:30:02Z&amp;lt;/updated&amp;gt;
    &amp;lt;author &lt;b&gt;&lt;u&gt;xml:id=&amp;quot;X2&amp;quot;&lt;/u&gt;&lt;/b&gt;&amp;gt;&amp;lt;name&amp;gt;John Doe&amp;lt;/name&amp;gt;&amp;lt;/author&amp;gt;
    &amp;lt;content &lt;b&gt;&lt;u&gt;xml:id=&amp;quot;X3&amp;quot;&lt;/u&gt;&lt;/b&gt;&amp;gt;Some text.&amp;lt;/content&amp;gt;
    &amp;lt;link rel=&amp;quot;edit&amp;quot;
        href=&amp;quot;http://example.org/edit/first-post.atom&amp;quot;/&amp;gt;
&amp;lt;/entry&amp;gt;&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;So if I wanted to update both the content and the title I would construct the partial update URI using the id's of the elements I want to update:&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;&lt;u&gt;http://example.org/edit/first-post/X1;X3
        &lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;And then I would PUT an entry to the URI with only those child elements:&lt;/p&gt;

  &lt;pre&gt;&lt;code&gt;PUT /edit/first-post/X1;X3
Host: example.org

&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;entry xmlns=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&amp;gt;
   &amp;lt;title xml:id=&amp;quot;X1&amp;quot;&amp;gt;False alarm on the Atom-Powered Robots things&amp;lt;/title&amp;gt;
   &amp;lt;content xml:id=&amp;quot;X3&amp;quot;&amp;gt;Sorry about that.&amp;lt;/content&amp;gt;
&amp;lt;/entry&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h4&gt;The Problems with the Google Solution: Your Shipment of FAIL has Arrived&lt;/h4&gt;

&lt;p&gt;Ignoring the fact that this spec depends on specifications that are either experimental (&lt;a href="http://tools.ietf.org/html/draft-gregorio-uritemplate-02"&gt;URI Templates&lt;/a&gt;) or not widely supported (&lt;a href="http://www.w3.org/TR/xml-id/"&gt;xml:id&lt;/a&gt;), there are still significant problems with how this approach (mis)uses the Atom Publishing Protocol. Sam Ruby eloquently points out the problems in his post &lt;a title="http://intertwingly.net/blog/2008/02/15/Embrace-Extend-then-Innovate" href="http://intertwingly.net/blog/2008/02/15/Embrace-Extend-then-Innovate"&gt;Embrace, Extend then Innovate&lt;/a&gt; where he wrote &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;With HTTP PUT, the the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server.&amp;#160; Having some servers interpret the removal of elements (such as content) as a modification, and others interpret the requests in such a way that elided elements are to be left alone is hardly uniform or self-descriptive.&amp;#160; In fact, depending on usage, it is positively stateful. &lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;I&amp;#8217;m fine with a server choosing to interpret the request anyway it sees fit.&amp;#160; As a black box, it could behave as if it updated the resource as requested and then one nanosecond later &amp;#8212; and before it processes any other requests &amp;#8212; fill in missing data with defaults, historical data, whatever.&amp;#160; My concern is with clients coding with to the assumption as to how the server works.&amp;#160; That&amp;#8217;s called coupling.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The main problem is that it changes the expected semantics of HTTP PUT in a way that not only conflicts with how PUT is typically used in other HTTP-based protocols but also how it is used in AtomPub. It's also weird that the existence of &lt;a href="http://www.w3.org/TR/xml-id/"&gt;xml:id&lt;/a&gt; in an Atom document is now used to imply special semantics (i.e. this field supports direct editing). I especially don't like that after all is said and done, the server controls which fields can be partially updated or not which seems to imply a tight coupling between clients and servers (e.g. some servers will support partial updates on all fields, some may only support partial updates on atom:title + atom:category while others will support partial updates on a different set of fields). So the code for editing a title or category changes depending on which AtomPub service you are talking to.&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;From where I stand Joe has pretty much invented yet another diff + patch protocol for XML documents. When I worked on the XML team at Microsoft, there were quite a few floating around the company including &lt;a href="http://msdn2.microsoft.com/en-us/library/ms172088(VS.71).aspx"&gt;Diffgram&lt;/a&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/ms171880.aspx"&gt;UpdateGram&lt;/a&gt;, and &lt;a href="http://msdn2.microsoft.com/en-us/library/aa302294.aspx"&gt;Patchgrams&lt;/a&gt; to name three. So I've been around the block when it comes to diff + patch formats for XML and this one has its share of issues.&amp;#160; The most eye brow raising issue with the diff + patch protocol is that half the semantics of the update are in the XML document (which elements to add/edit) while the other half are in the URL (if an ID exists in the URL but is not in the document then it is a delete). This means the XML isn't very self describing nor can it really be said that the URL is identifying a resource [more like it identifies an operation].&lt;/p&gt;

&lt;h4&gt;Actual Solution: Read the Spec &lt;/h4&gt;

&lt;p&gt;In Joe's original response to my post his suggestion was that the solution to the &amp;quot;problem&amp;quot; of lack of support for granular updates of entries in AtomPUb is to read the spec. In retrospect, I agree. If a field is important enough that it needs to be identifiable and editable then it should be its own resource. If you want to make it part of another resource then use &lt;code&gt;atom:link&lt;/code&gt; to link both resources. &lt;/p&gt;

&lt;p&gt;Case closed. Problem solved. &lt;/p&gt;
&lt;b&gt;Now Playing&lt;/b&gt;: &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Too Short"&gt;Too Short&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Too Short&amp;amp;songTerm=Couldn't Be a Better Player Than Me (feat. Lil Jon &amp;amp; The Eastside Boyz)"&gt;Couldn't Be a Better Player Than Me (feat. Lil Jon &amp;amp; The Eastside Boyz)&lt;/a&gt;&lt;/div&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView.aspx?guid=8ebea3c1-8eda-495b-8da8-406c1e0927fb</comments>
      <category>Syndication Technology</category>
      <category>XML Web Services</category>
    </item>
  </channel>
</rss>