<?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:wfw="http://wellformedweb.org/CommentAPI/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Dare Obasanjo's weblog - 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>Thu, 14 Mar 2013 06:08:31 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.12105.0</generator>
    <managingEditor>kpako@yahoo.com</managingEditor>
    <webMaster>kpako@yahoo.com</webMaster>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=36ec8495-3747-4729-a6e1-096627d93f74</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,36ec8495-3747-4729-a6e1-096627d93f74.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,36ec8495-3747-4729-a6e1-096627d93f74.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=36ec8495-3747-4729-a6e1-096627d93f74</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The problem with Google Reader was that by the time you solve <a href="http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx">all
of the problems with the RSS experience</a>, you’ve effectively invented Twitter. 
</p>
        <p>
And Jack Dorsey already did that. 
</p>
        <p>
          <img title="Note" alt="Note" src="http://www.25hoursaday.com/weblog/images/music_note.gif" /> Now
Playing: <a href="http://www.youtube.com/watch?v=KY44zvhWhp4">Lil Wayne - Love Me
(featuring Drake &amp; Future)</a><img title="Note" alt="Note" src="http://www.25hoursaday.com/weblog/images/music_note.gif" /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=36ec8495-3747-4729-a6e1-096627d93f74" />
      </body>
      <title>Some Thoughts on the Death of Google Reader</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,36ec8495-3747-4729-a6e1-096627d93f74.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2013/03/14/SomeThoughtsOnTheDeathOfGoogleReader.aspx</link>
      <pubDate>Thu, 14 Mar 2013 06:08:31 GMT</pubDate>
      <description>&lt;p&gt;
The problem with Google Reader was that by the time you solve &lt;a href="http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx"&gt;all
of the problems with the RSS experience&lt;/a&gt;, you’ve effectively invented Twitter. 
&lt;/p&gt;
&lt;p&gt;
And Jack Dorsey already did that. 
&lt;/p&gt;
&lt;p&gt;
&lt;img title="Note" alt="Note" src="http://www.25hoursaday.com/weblog/images/music_note.gif"&gt; Now
Playing: &lt;a href="http://www.youtube.com/watch?v=KY44zvhWhp4"&gt;Lil Wayne - Love Me
(featuring Drake &amp;amp; Future)&lt;/a&gt; &lt;img title="Note" alt="Note" src="http://www.25hoursaday.com/weblog/images/music_note.gif"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=36ec8495-3747-4729-a6e1-096627d93f74" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,36ec8495-3747-4729-a6e1-096627d93f74.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <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,guid,c41de3bd-5d5d-446e-91ea-32b7925c3845.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,c41de3bd-5d5d-446e-91ea-32b7925c3845.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently I came across two blogs I thought were interesting and would love to follow
regularly; <a href="http://www.cdixon.org">Chris Dixon's blog</a> and the <a href="http://windowsteamblog.com/blogs/windowslive/">Inside
Windows Live blog</a>. What surprised me was that my first instinct was to see if
they were on Twitter instead of adding their RSS feeds to <a href="http://www.rssbandit.org">my
favorite RSS reader</a>. 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. 
</p>
        <p>
I realized it comes down to two things, one I’ve mentioned before and the second which
dawned on me recently
</p>
        <ol>
          <li>
            <p>
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 <a href="http://www.25hoursaday.com/weblog/2009/08/26/TheTop5ReasonsRSSReadersWentWrong.aspx">The
Top 5 Reasons RSS Readers Went Wrong</a>. 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. 
</p>
          </li>
          <li>
            <p>
The mobile experience for consuming Twitter streams is all sorts of awesome. I currently
use <a href="http://echofon.com/">Echofon</a> to consume Twitter on my phone and have
used <a href="http://iconfactory.com/software/twitterrific/">Twitterific</a> which
is also excellent. I’ve also heard people say lots of good things about <a href="http://www.atebits.com/tweetie-iphone/">Tweetie</a>.
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. 
</p>
          </li>
        </ol>
        <p>
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 <a href="http://www.techcrunch.com/2009/07/16/twitters-internal-strategy-laid-bare-to-be-the-pulse-of-the-planet/">the
Twitter team hates people using it as a platform for rebroadcasting RSS feeds</a>. 
</p>
        <p>
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. 
</p>
        <p>
As I thought about which web app could be closest to doing this today I landed on <a href="http://brizzly.com/">Brizzly</a> and <a href="http://seesmic.com/web">Seesmic
Web</a>. 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. 
</p>
        <p>
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 <a href="http://www.twitter.com">http://www.twitter.com</a> 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.  
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=c41de3bd-5d5d-446e-91ea-32b7925c3845" />
      </body>
      <title>Brizzly, Seesmic Web and the Future of RSS</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,c41de3bd-5d5d-446e-91ea-32b7925c3845.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=c41de3bd-5d5d-446e-91ea-32b7925c3845" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,c41de3bd-5d5d-446e-91ea-32b7925c3845.aspx</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,guid,471b97f6-5aec-497f-ac21-b240034dbd98.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,471b97f6-5aec-497f-ac21-b240034dbd98.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
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). 
</p>
        <p>
The first post I was on this topic was from Fred Wilson in his post <a href="http://www.avc.com/a_vc/2009/12/open-apis-and-open-standards.html">Open
APIs and Open Standards</a> where he writes 
</p>
        <blockquote>
          <p>
            <em>As </em>
            <a href="http://www.scripting.com/stories/2009/12/17/howOpenStandardsAreCreated.html">
              <em>Dave
Winer has been pointing out</em>
            </a>
            <em> in recent weeks, there is something quite
interesting happening in the blogging/microblogging world.</em>
          </p>
          <p>
            <em>First </em>
            <a href="http://www.scripting.com/stories/2009/12/17/howOpenStandardsAreCreated.html">
              <em>WordPress
allowed posting and reading wordpress blogs via the Twitter API</em>
            </a>
            <em>.</em>
          </p>
          <p>
            <em>Then yesterday </em>
            <a href="http://staff.tumblr.com/post/287703110/api">
              <em>our
portfolio company Tumblr did the same</em>
            </a>
            <em>.</em>
          </p>
          <p>
            <a href="http://twitter.com/johnBorthwick">
              <em>John Borthwick</em>
            </a>
            <em> 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.</em>
          </p>
          <p>
            <em>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</em>
          </p>
        </blockquote>
        <p>
Anil Dash quickly followed up by declaring <a href="http://dashes.com/anil/2009/12/the-twitter-api-is-finished.html">The
Twitter API is Finished. Now What?</a> and stating 
</p>
        <blockquote>
          <p>
            <em>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.</em>
          </p>
          <p>
            <em>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?</em>
          </p>
        </blockquote>
        <p>
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.
</p>
        <p>
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. 
</p>
        <p>
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 "standard".
This is basically what happened during the RSS vs. Atom days where Dave Winer declared
that <a href="http://www.reallysimplesyndication.com/2005/04/08">RSS is Frozen</a>.
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 <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">preemptively
flaming Facebook</a> 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; websites. 
</p>
        <p>
Things get even more interesting if Facebook actually did decide to create their own
fork or "profile" of the Twitter API due to community pressure to support
their scenarios. Given how this has gone down in the past such as <a title="Workbench | RSS Means Never Being Board" href="http://workbench.cadenhead.org/news/2860/rss-means-never-being-board">the
conflict between Dave Winer and the RSS Advisory board</a> or more recently <a title="WRAP, and the Demise of the OAuth Community" href="http://hueniverse.com/2009/11/wrap-and-the-demise-of-the-oauth-community/">Eran
Hammer-Lahav's strong negative reaction to the creation of OAuth WRAP</a> 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 <a href="http://en.wikipedia.org/wiki/Kumbaya">Kumbaya</a>. 
</p>
        <p>
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. <a href="http://www.blogger.com/developers/api/1_docs/">Google
deprecated the Blogger API</a> 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 <a href="http://www.xmlrpc.com/metaWeblogApi">MetaWeblog
API</a>. About two weeks ago <a title="Facebook Developers | Developer Roadmap: Keeping You Up to Date" href="http://developers.facebook.com/news.php?blog=1&amp;story=341">Facebook
confirmed that they were deprecating a number of APIs used for interacting with the
news feed</a>. 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. 
</p>
        <p>
The bottom line is that it isn't as simple as saying "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". 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 <em>worst</em> possible way to do so.
</p>
        <p>
          <img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /> Now
Playing: <a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;unfiltered=1&amp;field-keywords=&amp;field-artist=Eminem&amp;field-title=Stolen&amp;field-label=&amp;field-binding=&amp;sort=relevancerank&amp;Adv-Srch-Music-Album-Submit.x=19&amp;Adv-Srch-Music-Album-Submit.y=6">Eminem</a> - <a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;field-keywords=Eminem+Hell Breaks Loose&amp;x=0&amp;y=0">Hell
Breaks Loose</a><img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=471b97f6-5aec-497f-ac21-b240034dbd98" />
      </body>
      <title>Some Thoughts on the Twitter API as a "standard API" for microblogging</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,471b97f6-5aec-497f-ac21-b240034dbd98.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=471b97f6-5aec-497f-ac21-b240034dbd98" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,471b97f6-5aec-497f-ac21-b240034dbd98.aspx</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,guid,53357874-aea4-4c84-bba2-981c05fba933.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,53357874-aea4-4c84-bba2-981c05fba933.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
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 <a href="http://www.abstractioneer.org/2009/10/salmon-protocol-introducing-salmon.html">The
Salmon Protocol: Introducing the Salmon Project</a>. Key parts of his post are excerpted
below 
</p>
        <blockquote>
          <p>
            <em>A few days ago, at the </em>
            <a href="http://www.readwriteweb.com/archives/real_time_web_event.php">
              <em>Real
Time Web Summit</em>
            </a>
            <em>, we had a session about </em>
            <a href="http://salmon-protocol.org/">
              <em>Salmon</em>
            </a>
            <em>,
a protocol for re-aggregated distributed conversations around web content.  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 </em>
            <a href="http://www.google.com/url?q=http%3A%2F%2Fblog.louisgray.com%2F2009%2F10%2Fproposed-salmon-protocol-aims-to-unify.html&amp;sa=D&amp;sntz=1&amp;usg=AFrqEze-c491wB5WhBBdf1Io_6ryFbeofA">
              <em>"Proposed
Salmon Protocol aims to unify Conversations on the Web"</em>
            </a>
            <em>. Adina Levin's </em>
            <a href="http://www.alevin.com/?p=1806">
              <em>"Salmon
- Re-assembling distributed conversations"</em>
            </a>
            <em> 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 </em>
            <a href="http://salmon-protocol.org/">
              <em>salmon-protocol.org</em>
            </a>
            <em> with
an open source project, </em>
            <a href="http://salmon-protocol.googlecode.com/">
              <em>salmon-protocol.googlecode.com</em>
            </a>
            <em>,
and a mailing list, </em>
            <a href="http://groups.google.com/group/salmon-protocol">
              <em>groups.google.com/group/salmon-protocol</em>
            </a>
            <em>.</em>
          </p>
        </blockquote>
        <p>
Louis Gray’s post on the topic includes an embedded presentation which captures the
essence of the protocol
</p>
        <iframe height="451" src="http://docs.google.com/present/embed?id=dfjqf7vg_5cc7c976f&amp;size=m" frameborder="0" width="555">
        </iframe>
        <p>
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 <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">RSS
Bandit integrates with Facebook</a>. 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 <a title="Facebook Developer Wiki: Using Activity Streams" href="http://wiki.developers.facebook.com/index.php/Using_Activity_Streams">getting
data back in the Activity Stream format</a> 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. 
</p>
        <p>
The Salmon Protocol aims to address this problem by piggybacking on <a href="http://code.google.com/p/pubsubhubbub/">PubSubHubBub</a> as
a way for applications to get real-time updates on comments on items in an activity
stream not just updates on new activities. 
</p>
        <p>
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  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. 
</p>
        <p>
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 <a href="http://www.salmon-protocol.org/salmon-protocol-summary">Salmon
Protocol Summary</a> to see how it addresses these problems. 
</p>
        <p>
The meat of the Salmon Protocol format is excerpted below 
</p>
        <blockquote>
          <p>
            <em>A source provides an RSS/Atom feed of content. It includes a Salmon link in its
feed:</em>
          </p>
          <p>
            <code>
              <em>&lt;link rel="salmon" href="http://example.org/salmon-endpoint"/&gt;</em>
            </code>
          </p>
          <p>
            <em>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.</em>
          </p>
          <p>
            <em>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:</em>
          </p>
          <p>
            <code>
              <em>POST /salmon-endpoint HTTP/1.1</em>
            </code>
          </p>
          <p>
            <code>
              <em>Host: example.org</em>
            </code>
          </p>
          <p>
            <code>
              <em>Content-Type: application/atom+xml</em>
            </code>
          </p>
          <p>
            <code>
              <em>&lt;?xml version='1.0' encoding='UTF-8'?&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;entry xmlns='http://www.w3.org/2005/Atom'&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;author&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>      &lt;name&gt;John Doe&lt;/name&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>      &lt;uri&gt;acct:johndoe@aggregator-example.com&lt;/uri&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;/author&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;content&gt;Yes, but what about the llamas?&lt;/content&gt;  </em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;id&gt;tag:aggregator-example.com,2009:cmt-441071406174557701&lt;/id&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;updated&gt;2009-09-28T18:30:02Z&lt;/updated&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0'</em>
            </code>
          </p>
          <p>
            <code>
              <em>       ref='tag:example.org,1999:id-22717401685551851865'/&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;sal:signature xmlns:sal='http://salmonprotocol.org/ns/1.0'&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>        e55bee08b4c643bc8aedf122f606f804269b7bc7</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;/sal:signature&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>    &lt;title/&gt;</em>
            </code>
          </p>
          <p>
            <code>
              <em>&lt;/entry&gt;</em>
            </code>
          </p>
        </blockquote>
        <p>
The commenter is identified in the published comment using the <a href="http://atompub.org/rfc4287.html#element.uri">atom:uri
element</a>. 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  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. 
</p>
        <p>
The workflow for dealing with spam comments is described as follows 
</p>
        <blockquote>
          <p>
            <em>A major concern with this type of distributed protocol is how to prevent spam
and abuse.  Salmon provides building blocks to allow in-depth defense against
attacks.  Specifically, every salmon has a verifiable author and user agent. 
The basic security flow when salmon swims upstream looks like this:</em>
          </p>
          <ol>
            <li>
              <em>
                <b>aggregator-example.com</b>: "Here is a salmon, authored and signed by
'acct:johndoe@aggregator-example.com'; please accept it." </em>
            </li>
            <li>
              <em>
                <b>Recipient</b>: "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." </em>
            </li>
            <li>
              <em>
                <b>Recipient</b>: Uses Webfinger/XRD to discover salmon validation service for
acct:johndoe@aggregator-example.com, which turns out to be hosted by aggregator-example.com.</em>
            </li>
            <li>
              <em>
                <b>Recipient</b>: "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." (Returns HTTP 200 to aggregator-example.com)</em>
            </li>
          </ol>
          <p>
            <em>The flow can get more complicated, especially if the aggregator is not also providing
identity services for the user.  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.  The signature check means that the given author (johndoe
in this case) signed the salmon with the given id, parent id, and timestamp. 
It does not attempt to do a full, XML-DSig style verification, though such a service
is another reasonable extension.</em>
          </p>
        </blockquote>
        <p>
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 <a href="http://code.google.com/p/webfinger/">WebFinger</a> 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. 
</p>
        <p>
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? 
</p>
        <p>
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 <a href="http://scobleizer.com/">Robert
Scoble's blog</a> 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 <u>and</u> 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? 
</p>
        <p>
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. 
</p>
        <p>
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. 
</p>
        <p>
          <img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /> Now
Playing: <a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;unfiltered=1&amp;field-keywords=&amp;field-artist=Chris Brown&amp;field-title=Stolen&amp;field-label=&amp;field-binding=&amp;sort=relevancerank&amp;Adv-Srch-Music-Album-Submit.x=19&amp;Adv-Srch-Music-Album-Submit.y=6">Chris
Brown</a> - <a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;field-keywords=Chris Brown+I Can Transform Ya (feat. Lil Wayne)&amp;x=0&amp;y=0">I
Can Transform Ya (feat. Lil Wayne)</a><img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=53357874-aea4-4c84-bba2-981c05fba933" />
      </body>
      <title>Real-time, Distributed Conversations: Some Thoughts on the Salmon Protocol</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,53357874-aea4-4c84-bba2-981c05fba933.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=53357874-aea4-4c84-bba2-981c05fba933" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,53357874-aea4-4c84-bba2-981c05fba933.aspx</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,guid,3983bf7d-405e-4cf9-939a-1b9f9664e5f1.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,3983bf7d-405e-4cf9-939a-1b9f9664e5f1.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sam Diaz over at ZDNet wrote the following in a blog entry titled <a href="http://blogs.zdnet.com/BTL/?p=23276">RSS:
A good idea at the time but there are better ways now</a> in response to an announcement
of a new feature in Google Reader
</p>
        <blockquote>
          <p>
            <em>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.</em>
          </p>
          <p>
            <em>I catch headlines on </em>
            <a href="http://news.yahoo.com">
              <em>Yahoo News</em>
            </a>
            <em> and </em>
            <a href="http://news.google.com">
              <em>Google
News</em>
            </a>
            <em>. I have a pretty extensive lineup of browser bookmarks to take me
to sites that I scan throughout the day. </em>
            <a href="http://www.techmeme.com">
              <em>Techmeme</em>
            </a>
            <em> 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.</em>
          </p>
          <p>
            <em> </em>
            <a href="http://i.zdnet.com/blogs/google-reader-1000.jpg">
              <em>
                <img title="google-reader-1000" alt="" src="http://i.zdnet.com/blogs/google-reader-1000.jpg" width="475" height="282" />
              </em>
            </a>
          </p>
          <p>
            <em>The truth of the matter is that RSS readers are <font color="#ff0000">a Web 1.0
tool</font>, an aggregator of news headlines that never really caught on with the
mainstream </em>
            <a href="http://blogs.zdnet.com/BTL/?p=23245">
              <em>the way Twitter
and Facebook have</em>
            </a>
            <em>.</em>
          </p>
        </blockquote>
        <p>
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; Techmeme). I’ve listed some of my gripes with RSS readers
including the one I wrote (<a href="http://www.rssbandit.org">RSS Bandit</a>) in the
past and will reiterate some of these points below 
</p>
        <ol>
          <li>
            <p>
Dave Winer was right about <a href="http://www.reallysimplesyndication.com/riverOfNews">River
of News style aggregators</a>. 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. 
</p>
          </li>
          <li>
            <p>
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; 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 <a href="http://googlereader.blogspot.com/2009/07/following-liking-and-people-searching.html">recently
added a “like” feature</a> 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.
</p>
          </li>
          <li>
            <p>
As Dave McClure once ranted, <a href="http://500hats.typepad.com/500blogs/2009/05/the-faces-the-faces-its-all-about-the-fking-faces-or-the-avatars-icons.html">it's
all about the faces</a>. 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. 
</p>
          </li>
          <li>
            <p>
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 <a href="http://techmeme.com">Techmeme</a> 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.  
</p>
          </li>
          <li>
            <p>
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. 
</p>
          </li>
        </ol>
        <p>
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; standard infrastructure
of the Web. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=3983bf7d-405e-4cf9-939a-1b9f9664e5f1" />
      </body>
      <title>The Top 5 Reasons RSS Readers Went Wrong</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,3983bf7d-405e-4cf9-939a-1b9f9664e5f1.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=3983bf7d-405e-4cf9-939a-1b9f9664e5f1" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,3983bf7d-405e-4cf9-939a-1b9f9664e5f1.aspx</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,guid,d3194710-ed74-45a5-b2b3-a13a86f540e4.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,d3194710-ed74-45a5-b2b3-a13a86f540e4.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Farhad Manjoo has an article on Slate entitled <a href="http://slate.com/id/2217353">Kill
your RSS reader</a> which captures a growing sentiment I’ve had for a while and ranted
about during <a title="Feed Me: Bite Size Info for a Hungry Internet" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;id=IAP0900837">a
recent panel at SXSW</a>. Below are a few key excerpts from Farhad’s article that
resonate strongly with me 
</p>
        <blockquote>
          <p>
            <i>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 <a href="http://www.bloglines.com/" target="_blank">Bloglines</a>,
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! </i>
            <br />
... 
<br /><i>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.</i></p>
          <i>
            <p>
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 
</p>
organizing<i> my reader. </i></i>
        </blockquote>
        <p>
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 <a href="http://www.twitter.com">Twitter</a>, <a href="http://www.techmeme.com">Techmeme</a> and <a href="http://planet.intertwingly.net/">Planet
Intertwingly</a>. 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. 
</p>
        <p>
The problem is that the RSS readers I use regularly, <a href="http://reader.google.com">Google
Reader</a> and <a href="http://www.rssbandit.org">RSS Bandit</a>, 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 <u><b>BOLD</b></u> unread messages
indicator silently nagging you about the stuff you haven’t done yet. 
</p>
        <p>
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 <a title="Why Email Clients Need to Change" href="http://gigaom.com/2009/04/24/why-email-clients-need-to-change/">there
is a lot of room for improvement</a>. 
</p>
        <p>
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 <a href="http://www.reallysimplesyndication.com/riverOfNews">“River
of News” style aggregators for several years</a> 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. 
</p>
        <p>
Looking back at the time I’ve spent working on <a href="http://www.rssbandit.org">RSS
Bandit</a>, 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
</p>
        <ul>
          <li>
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.</li>
          <li>
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</li>
        </ul>
        <p>
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; Facebook take over as how people keep up to date with
what’s going on with the people and content they care about. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=d3194710-ed74-45a5-b2b3-a13a86f540e4" />
      </body>
      <title>RSS readers modeled after email clients are fundamentally broken</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,d3194710-ed74-45a5-b2b3-a13a86f540e4.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=d3194710-ed74-45a5-b2b3-a13a86f540e4" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,d3194710-ed74-45a5-b2b3-a13a86f540e4.aspx</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,guid,65469949-ceda-4c41-bd10-871ebcfe4994.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,65469949-ceda-4c41-bd10-871ebcfe4994.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Over the past two weeks I participated in panels at both the <a href="http://sxsw.com/interactive/talks/schedule?action=show&amp;id=IAP0900837">SXSW</a> and <a href="http://videos.visitmix.com/MIX09/T28F">MIX
09</a> 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 <a href="http://www.friendfeed.com">Friendfeed</a>.
This functionality now exists on many social networking sites and related services
including <a href="http://venturebeat.com/2008/04/15/facebook-is-kinda-competing-with-friendfeed-like-it-kinda-competes-with-twitter/">Facebook</a>, <a href="http://www.yprofileblog.com/blog/2009/01/16/share-updates-from-other-sites-on-your-yahoo-profile/">Yahoo!
Profile</a> and the <a href="http://windowslivewire.spaces.live.com/blog/cns!2F7EB29B42641D59!30283.entry">Windows
Live Profile</a>.  
</p>
        <p>
In general, the model is to receive or retrieve user updates from a social media site
like <a href="http://www.flickr.com">Flickr</a> 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. 
</p>
        <p>
          <img src="http://4vwitg.bay.livefilestore.com/y1ppBa0_Ong9d3SNFupBAw8dsr4g3Vk9XLzJ9zzTBzKDVBzRh41RSmbX3otcIodYi05_x47vlFLngo/sharing.jpg" width="650" height="418" />
        </p>
        <p>
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. 
</p>
        <p>
There are two problems that sites have to deal with in this model 
</p>
        <ol>
          <li>
            <p>
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.  There
is the money quote from last year that <a href="http://friendfeed.com/e/6039f854-7030-0f20-747c-55580487bfe8/FriendFeed-crawled-Flickr-2-7M-times-for-a-grand/">FriendFeed
polled Flickr 2.7 million times a day to retrieve a total of less than 7,000 updates</a>.
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 <a href="http://twitter.com/kevinmarks/statuses/1068364292">the
beautiful f-ing snowflake API problem</a>). 
</p>
          </li>
          <li>
            <p>
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 <a href="http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx">radically
different schemas for representing the same data</a>.  
</p>
          </li>
        </ol>
        <p>
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. 
</p>
        <p>
While I was at SXSW, I met one of the folks from <a href="http://www.gnipcentral.com/">Gnip</a> 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. 
</p>
        <p>
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. 
</p>
        <p>
          <img src="http://4vwitg.bay.livefilestore.com/y1p7GjK_fldHTQvD9irJt2cJseijhH_4vdlxBXUjMZvpBzPZVsV4fP-8OpOIcJGUaJMR3nbga0q-9I/gnip.png" />
        </p>
        <p>
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. 
</p>
        <p>
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.  
</p>
        <p>
What do you think of Gnip's service and the problem space in general? 
</p>
        <p>
          <img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /> Now
Playing: <a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;unfiltered=1&amp;field-keywords=&amp;field-artist=Eamon&amp;field-title=&amp;field-label=&amp;field-binding=&amp;sort=relevancerank&amp;Adv-Srch-Music-Album-Submit.x=19&amp;Adv-Srch-Music-Album-Submit.y=6">Eamon</a> – <a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;field-keywords=Eamon+Fuck It (I Don't Want You Back) &amp;x=0&amp;y=0">F**k
It (I Don't Want You Back) </a><img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=65469949-ceda-4c41-bd10-871ebcfe4994" />
      </body>
      <title>Sharing social activity streams across the Web: How Gnip fits in</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,65469949-ceda-4c41-bd10-871ebcfe4994.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=65469949-ceda-4c41-bd10-871ebcfe4994" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,65469949-ceda-4c41-bd10-871ebcfe4994.aspx</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,guid,db553491-ebe9-47fe-a1ac-02e09232f02d.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,db553491-ebe9-47fe-a1ac-02e09232f02d.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Bill de hÓra has a blog post entitled <a href="http://www.dehora.net/journal/2009/01/10/format-debt-what-you-cant-say/">Format
Debt: what you can't say</a> where he writes
</p>
        <blockquote>
          <p>
            <em>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.</em>
          </p>
          <p>
            <em>If we take the example of MediaRSS, </em>
            <a href="http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx">
              <em>which
is not consistenly used or placed in syndication and API formats</em>
            </a>
            <em>, that
class of problem more or less evaporates via RDF. Likewise if we take the </em>
            <a href="http://mashable.com/2008/03/25/windows-live-data-portability/">
              <em>current
Zoo</em>
            </a>
            <em> of </em>
            <a href="http://groups.google.com/group/microformats/browse_thread/thread/559cb4d06dc50c30">
              <em>contact
formats</em>
            </a>
            <em> and our seeming </em>
            <a href="http://factoryjoe.com/blog/2008/03/11/portable-contact-lists-and-the-case-against-xfn/">
              <em>inability
to commit to one</em>
            </a>
            <em>, RDF/OWL </em>
            <a href="http://www.w3.org/TR/owl-ref/#IndividualIdentity">
              <em>can
enable a declarative mapping between them</em>
            </a>
            <em>. 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.</em> 
</p>
        </blockquote>
        <p>
I've always found this particular argument by RDF proponents to be suspect. When I
complained about the <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">the
lack of standards for representing rich media in Atom feeds</a>, the thrust of the
complaint is that you can't just plugin a feed from <a href="http://picasaweb.google.com/">Picassa</a> into
a service that understands how to process feeds from <a href="http://www.zooomr.com">Zooomr</a> without
making changes to the service or the input feed. 
</p>
        <p>
RDF proponents  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 <a href="http://www.w3.org/TR/owl-features/">OWL
Web Ontology Language</a>.  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; <a href="http://www.w3.org/TR/xslt">XSL
Transformations (XSLT)</a>. 
</p>
        <p>
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 <strike>better</strike><i>cheaper</i> to have the developer write declarative
mappings like OWL or XSLT instead of writing new parsing code in their language of
choice. 
</p>
        <p>
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. 
</p>
        <p>
          <img style="vertical-align: middle;" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /> Now
Playing: <a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;unfiltered=1&amp;field-keywords=&amp;field-artist=Lady%20GaGa%20&amp;%20Colby%20O%27Donis&amp;field-title=&amp;field-label=&amp;field-binding=&amp;sort=relevancerank&amp;Adv-Srch-Music-Album-Submit.x=19&amp;Adv-Srch-Music-Album-Submit.y=6">Lady
GaGa &amp; Colby O'Donis</a> - <a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;field-keywords=Lady%20GaGa%20&amp;%20Colby%20O%27Donis+Just%20Dance&amp;x=0&amp;y=0">Just
Dance</a><img style="vertical-align: middle;" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=db553491-ebe9-47fe-a1ac-02e09232f02d" />
      </body>
      <title>Can RDF really save us from data format proliferation?</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,db553491-ebe9-47fe-a1ac-02e09232f02d.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=db553491-ebe9-47fe-a1ac-02e09232f02d" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,db553491-ebe9-47fe-a1ac-02e09232f02d.aspx</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,guid,79610681-82d7-44b2-9433-823e032df128.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,79610681-82d7-44b2-9433-823e032df128.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
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 <a href="http://www.flickr.com">Flickr</a> and <a href="http://www.photobucket.com">PhotoBucket</a> or
even blog posts from a regular RSS/Atom feed onto your Windows Live profile. You can
see this in action on <a href="http://cid-616444ee7a34f417.profile.live.com">my Windows
Live profile</a>. 
</p>
        <p>
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 <a href="http://www.scripting.com/stories/2008/11/30/friendfeedAndLevelPlayingF.html">FriendFeed
and level playing fields</a> where he writes 
</p>
        <blockquote>
          <p>
            <em>Consider this screen (click on it to see the detail): </em>
            <a href="http://www.scripting.com/stories/2008/11/30/friendfeedAndLevelPlayingF.html#p2">
              <em>
                <img border="0" alt="Permalink to this paragraph" src="http://www.scripting.com/images/2001/09/20/sharpPermaLink3.gif" width="6" height="9" />
              </em>
            </a>
          </p>
          <p>
            <a name="p3">
            </a>
            <a href="http://images.scripting.com/archiveScriptingCom/2008/11/30/ffbigscreen.gif">
              <em>
                <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" />
              </em>
            </a>
            <em>
            </em>
            <a href="http://www.scripting.com/stories/2008/11/30/friendfeedAndLevelPlayingF.html#p3">
              <em>
                <img border="0" alt="Permalink to this paragraph" src="http://www.scripting.com/images/2001/09/20/sharpPermaLink3.gif" width="6" height="9" />
              </em>
            </a>
          </p>
          <p>
            <a name="p4">
            </a>
            <em>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 "Blog" 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. </em>
            <a href="http://www.scripting.com/stories/2008/11/30/friendfeedAndLevelPlayingF.html#p4">
              <em>
                <img border="0" alt="Permalink to this paragraph" src="http://www.scripting.com/images/2001/09/20/sharpPermaLink3.gif" width="6" height="9" />
              </em>
            </a>
          </p>
          <p>
            <a name="p5">
            </a>
            <em>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.</em>
            <br />
          </p>
        </blockquote>
        <p>
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 <a href="http://twitter.com/kradcliffe/statuses/1038688717">Kevin Radcliffe</a> 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. 
</p>
        <p>
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. 
</p>
        <p>
          <a href="http://picasaweb.google.com/">Picassa</a>
        </p>
        <pre class="code">
          <span style="color: blue">&lt;</span>
          <span style="color: #a31515">item</span>
          <span style="color: blue">&gt;
&lt;</span>
          <span style="color: #a31515">guid </span>
          <span style="color: red">isPermaLink</span>
          <span style="color: blue">=</span>'<span style="color: blue">false</span>'<span style="color: blue">&gt;</span>http://picasaweb.google.com/data/entry/base/user/bo.so.po.ro.sie/albumid/5280893965532109969/photoid/5280894045331336242?alt=rss<span style="color: red">&amp;amp;</span>hl=en_US<span style="color: blue">&lt;/</span><span style="color: #a31515">guid</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">pubDate</span><span style="color: blue">&gt;</span>Wed,
17 Dec 2008 22:45:59 +0000<span style="color: blue">&lt;/</span><span style="color: #a31515">pubDate</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">atom:updated</span><span style="color: blue">&gt;</span>2008-12-17T22:45:59.000Z<span style="color: blue">&lt;/</span><span style="color: #a31515">atom:updated</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">category </span><span style="color: red">domain</span><span style="color: blue">=</span>'<span style="color: blue">http://schemas.google.com/g/2005#kind</span>'<span style="color: blue">&gt;</span>http://schemas.google.com/photos/2007#photo<span style="color: blue">&lt;/</span><span style="color: #a31515">category</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">title</span><span style="color: blue">&gt;</span>DSC_0479.JPG<span style="color: blue">&lt;/</span><span style="color: #a31515">title</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">description</span><span style="color: blue">&gt;</span><span style="color: red">&amp;lt;</span>table<span style="color: red">&amp;gt;&amp;lt;</span>tr<span style="color: red">&amp;gt;&amp;lt;</span>td
style="padding: 0 5px"<span style="color: red">&amp;gt;&amp;lt;</span>a
href="http://picasaweb.google.com/bo.so.po.ro.sie/DosiaIPomaraCze#5280894045331336242"<span style="color: red">&amp;gt;&amp;lt;</span>img
style="border:1px solid #5C7FB9" src="http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/s288/DSC_0479.JPG"
alt="DSC_0479.JPG"/<span style="color: red">&amp;gt;&amp;lt;</span>/a<span style="color: red">&amp;gt;&amp;lt;</span>/td<span style="color: red">&amp;gt;&amp;lt;</span>td
valign="top"<span style="color: red">&amp;gt;&amp;lt;</span>font color="#6B6B6B"<span style="color: red">&amp;gt;</span>Date: <span style="color: red">&amp;lt;</span>/font<span style="color: red">&amp;gt;&amp;lt;</span>font
color="#333333"<span style="color: red">&amp;gt;</span>Dec 17, 2008 10:56
AM<span style="color: red">&amp;lt;</span>/font<span style="color: red">&amp;gt;&amp;lt;</span>br/<span style="color: red">&amp;gt;&amp;lt;</span>font
color=\"#6B6B6B\"<span style="color: red">&amp;gt;</span>Number of Comments
on Photo:<span style="color: red">&amp;lt;</span>/font<span style="color: red">&amp;gt;&amp;lt;</span>font
color=\"#333333\"<span style="color: red">&amp;gt;</span>0<span style="color: red">&amp;lt;</span>/font<span style="color: red">&amp;gt;&amp;lt;</span>br/<span style="color: red">&amp;gt;&amp;lt;</span>p<span style="color: red">&amp;gt;&amp;lt;</span>a
href="http://picasaweb.google.com/bo.so.po.ro.sie/DosiaIPomaraCze#5280894045331336242"<span style="color: red">&amp;gt;&amp;lt;</span>font
color="#3964C2"<span style="color: red">&amp;gt;</span>View Photo<span style="color: red">&amp;lt;</span>/font<span style="color: red">&amp;gt;&amp;lt;</span>/a<span style="color: red">&amp;gt;&amp;lt;</span>/p<span style="color: red">&amp;gt;&amp;lt;</span>/td<span style="color: red">&amp;gt;&amp;lt;</span>/tr<span style="color: red">&amp;gt;&amp;lt;</span>/table<span style="color: red">&amp;gt;</span><span style="color: blue">&lt;/</span><span style="color: #a31515">description</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">enclosure </span><span style="color: red">type</span><span style="color: blue">=</span>'<span style="color: blue">image/jpeg</span>' <span style="color: red">url</span><span style="color: blue">=</span>'<span style="color: blue">http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/DSC_0479.JPG</span>' <span style="color: red">length</span><span style="color: blue">=</span>'<span style="color: blue">0</span>'<span style="color: blue">/&gt;
&lt;</span><span style="color: #a31515">link</span><span style="color: blue">&gt;</span>http://picasaweb.google.com/lh/photo/PORshBK0wdBV0WPl27g_wQ<span style="color: blue">&lt;/</span><span style="color: #a31515">link</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">media:group</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">media:title </span><span style="color: red">type</span><span style="color: blue">=</span>'<span style="color: blue">plain</span>'<span style="color: blue">&gt;</span>DSC_0479.JPG<span style="color: blue">&lt;/</span><span style="color: #a31515">media:title</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">media:description </span><span style="color: red">type</span><span style="color: blue">=</span>'<span style="color: blue">plain</span>'<span style="color: blue">&gt;&lt;/</span><span style="color: #a31515">media:description</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">media:keywords</span><span style="color: blue">&gt;&lt;/</span><span style="color: #a31515">media:keywords</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">media:content </span><span style="color: red">url</span><span style="color: blue">=</span>'<span style="color: blue">http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/DSC_0479.JPG</span>' <span style="color: red">height</span><span style="color: blue">=</span>'<span style="color: blue">1600</span>' <span style="color: red">width</span><span style="color: blue">=</span>'<span style="color: blue">1074</span>' <span style="color: red">type</span><span style="color: blue">=</span>'<span style="color: blue">image/jpeg</span>' <span style="color: red">medium</span><span style="color: blue">=</span>'<span style="color: blue">image</span>'<span style="color: blue">/&gt;
&lt;</span><span style="color: #a31515">media:thumbnail </span><span style="color: red">url</span><span style="color: blue">=</span>'<span style="color: blue">http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/s72/DSC_0479.JPG</span>' <span style="color: red">height</span><span style="color: blue">=</span>'<span style="color: blue">72</span>' <span style="color: red">width</span><span style="color: blue">=</span>'<span style="color: blue">49</span>'<span style="color: blue">/&gt;
&lt;</span><span style="color: #a31515">media:thumbnail </span><span style="color: red">url</span><span style="color: blue">=</span>'<span style="color: blue">http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/s144/DSC_0479.JPG</span>' <span style="color: red">height</span><span style="color: blue">=</span>'<span style="color: blue">144</span>' <span style="color: red">width</span><span style="color: blue">=</span>'<span style="color: blue">97</span>'<span style="color: blue">/&gt;
&lt;</span><span style="color: #a31515">media:thumbnail </span><span style="color: red">url</span><span style="color: blue">=</span>'<span style="color: blue">http://lh4.ggpht.com/_xRL2P3zJJOw/SUmBJ6RzLDI/AAAAAAAABX8/MkPUBcKqpRY/s288/DSC_0479.JPG</span>' <span style="color: red">height</span><span style="color: blue">=</span>'<span style="color: blue">288</span>' <span style="color: red">width</span><span style="color: blue">=</span>'<span style="color: blue">194</span>'<span style="color: blue">/&gt;
&lt;</span><span style="color: #a31515">media:credit</span><span style="color: blue">&gt;</span>Joanna<span style="color: blue">&lt;/</span><span style="color: #a31515">media:credit</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">media:group</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">item</span><span style="color: blue">&gt;</span></pre>
        <a href="http://11011.net/software/vspaste">
        </a>
        <p>
          <a href="http://www.smugmug.com">Smugmug</a>
        </p>
        <pre class="code">
          <span style="color: blue">&lt;</span>
          <span style="color: #a31515">entry</span>
          <span style="color: blue">&gt;
&lt;</span>
          <span style="color: #a31515">title</span>
          <span style="color: blue">&gt;</span>Verbeast's
photo<span style="color: blue">&lt;/</span><span style="color: #a31515">title</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">link </span><span style="color: red">rel</span><span style="color: blue">=</span>"<span style="color: blue">alternate</span>" <span style="color: red">type</span><span style="color: blue">=</span>"<span style="color: blue">text/html</span>" <span style="color: red">href</span><span style="color: blue">=</span>"<span style="color: blue">http://verbeast.smugmug.com/gallery/5811621_NELr7#439421133_qFtZ5</span>"<span style="color: blue">/&gt;
&lt;</span><span style="color: #a31515">content </span><span style="color: red">type</span><span style="color: blue">=</span>"<span style="color: blue">html</span>"<span style="color: blue">&gt;</span><span style="color: red">&amp;lt;</span>p<span style="color: red">&amp;gt;&amp;lt;</span>a
href="http://verbeast.smugmug.com"<span style="color: red">&amp;gt;</span>Verbeast<span style="color: red">&amp;lt;</span>/a<span style="color: red">&amp;gt;
&amp;lt;</span>/p<span style="color: red">&amp;gt;&amp;lt;</span>a href="http://verbeast.smugmug.com/gallery/5811621_NELr7#439421133_qFtZ5"
title="Verbeast's photo"<span style="color: red">&amp;gt;&amp;lt;</span>img
src="http://verbeast.smugmug.com/photos/439421133_qFtZ5-Th.jpg" width="150"
height="150" alt="Verbeast's photo" title="Verbeast's photo"
style="border: 1px solid #000000;" /<span style="color: red">&amp;gt;&amp;lt;</span>/a<span style="color: red">&amp;gt;</span><span style="color: blue">&lt;/</span><span style="color: #a31515">content</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">updated</span><span style="color: blue">&gt;</span>2008-12-18T22:51:58Z<span style="color: blue">&lt;/</span><span style="color: #a31515">updated</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">author</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">name</span><span style="color: blue">&gt;</span>Verbeast<span style="color: blue">&lt;/</span><span style="color: #a31515">name</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">uri</span><span style="color: blue">&gt;</span>http://verbeast.smugmug.com<span style="color: blue">&lt;/</span><span style="color: #a31515">uri</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">author</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">id</span><span style="color: blue">&gt;</span>http://verbeast.smugmug.com/photos/439421133_qFtZ5-Th.jpg<span style="color: blue">&lt;/</span><span style="color: #a31515">id</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">exif:DateTimeOriginal</span><span style="color: blue">&gt;</span>2008-12-12
18:37:17<span style="color: blue">&lt;/</span><span style="color: #a31515">exif:DateTimeOriginal</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">entry</span><span style="color: blue">&gt;</span></pre>
        <a href="http://11011.net/software/vspaste">
        </a>
        <p>
          <a href="http://www.zooomr.com">Zooomr</a>
        </p>
        <pre class="code">
          <span style="color: blue"> &lt;</span>
          <span style="color: #a31515">item</span>
          <span style="color: blue">&gt;
&lt;</span>
          <span style="color: #a31515">title</span>
          <span style="color: blue">&gt;</span>ギンガメアジとジンベイ<span style="color: blue">&lt;/</span><span style="color: #a31515">title</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">link</span><span style="color: blue">&gt;</span>http://www.zooomr.com/photos/chuchu/6556014/<span style="color: blue">&lt;/</span><span style="color: #a31515">link</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">description</span><span style="color: blue">&gt; </span><span style="color: red">&amp;lt;</span>a
href=<span style="color: red">&amp;quot;</span>http://www.zooomr.com/photos/chuchu/<span style="color: red">&amp;quot;&amp;gt;</span>chuchu<span style="color: red">&amp;lt;</span>/a<span style="color: red">&amp;gt; </span>posted
a photograph:<span style="color: red">&amp;lt;</span>br /<span style="color: red">&amp;gt;
&amp;lt;</span>a href=<span style="color: red">&amp;quot;</span>http://www.zooomr.com/photos/chuchu/6556014/<span style="color: red">&amp;quot; </span>class=<span style="color: red">&amp;quot;</span>image_link<span style="color: red">&amp;quot;
&amp;gt;&amp;lt;</span>img src=<span style="color: red">&amp;quot;</span>http://static.zooomr.com/images/6556014_00421b6456_m.jpg<span style="color: red">&amp;quot; </span>alt=<span style="color: red">&amp;quot;</span>ギンガメアジとジンベイ<span style="color: red">&amp;quot; </span>title=<span style="color: red">&amp;quot;</span>ギンガメアジとジンベイ<span style="color: red">&amp;quot; </span>/<span style="color: red">&amp;gt;&amp;lt;</span>/a<span style="color: red">&amp;gt;&amp;lt;</span>br
/<span style="color: red">&amp;gt; </span><span style="color: blue">&lt;/</span><span style="color: #a31515">description</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">pubDate</span><span style="color: blue">&gt;</span>Mon,
22 Dec 2008 04:14:52 +0000<span style="color: blue">&lt;/</span><span style="color: #a31515">pubDate</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">author </span><span style="color: red">zooomr:profile</span><span style="color: blue">=</span>"<span style="color: blue">http://www.zooomr.com/people/chuchu/</span>"<span style="color: blue">&gt;</span>nobody@zooomr.com
(chuchu)<span style="color: blue">&lt;/</span><span style="color: #a31515">author</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">guid </span><span style="color: red">isPermaLink</span><span style="color: blue">=</span>"<span style="color: blue">false</span>"<span style="color: blue">&gt;</span>tag:zooomr.com,2004:/photo/6556014<span style="color: blue">&lt;/</span><span style="color: #a31515">guid</span><span style="color: blue">&gt;</span><span style="color: blue"> &lt;</span><span style="color: #a31515">media:content </span><span style="color: red">url</span><span style="color: blue">=</span>"<span style="color: blue">http://static.zooomr.com/images/6556014_00421b6456_m.jpg</span>" <span style="color: red">type</span><span style="color: blue">=</span>"<span style="color: blue">image/jpeg</span>" <span style="color: blue">/&gt;
&lt;</span><span style="color: #a31515">media:title</span><span style="color: blue">&gt;</span>ギンガメアジとジンベイ<span style="color: blue">&lt;/</span><span style="color: #a31515">media:title</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">media:text </span><span style="color: red">type</span><span style="color: blue">=</span>"<span style="color: blue">html</span>"<span style="color: blue">&gt; </span><span style="color: red">&amp;lt;</span>a
href=<span style="color: red">&amp;quot;</span>http://www.zooomr.com/photos/chuchu/<span style="color: red">&amp;quot;&amp;gt;</span>chuchu<span style="color: red">&amp;lt;</span>/a<span style="color: red">&amp;gt; </span>posted
a photograph:<span style="color: red">&amp;lt;</span>br /<span style="color: red">&amp;gt;
&amp;lt;</span>a href=<span style="color: red">&amp;quot;</span>http://www.zooomr.com/photos/chuchu/6556014/<span style="color: red">&amp;quot; </span>class=<span style="color: red">&amp;quot;</span>image_link<span style="color: red">&amp;quot;
&amp;gt;&amp;lt;</span>img src=<span style="color: red">&amp;quot;</span>http://static.zooomr.com/images/6556014_00421b6456_m.jpg<span style="color: red">&amp;quot; </span>alt=<span style="color: red">&amp;quot;</span>ギンガメアジとジンベイ<span style="color: red">&amp;quot; </span>title=<span style="color: red">&amp;quot;</span>ギンガメアジとジンベイ<span style="color: red">&amp;quot; </span>/<span style="color: red">&amp;gt;&amp;lt;</span>/a<span style="color: red">&amp;gt;&amp;lt;</span>br
/<span style="color: red">&amp;gt; </span><span style="color: blue">&lt;/</span><span style="color: #a31515">media:text</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">media:thumbnail </span><span style="color: red">url</span><span style="color: blue">=</span>"<span style="color: blue">http://static.zooomr.com/images/6556014_00421b6456_s.jpg</span>" <span style="color: red">height</span><span style="color: blue">=</span>"<span style="color: blue">75</span>" <span style="color: red">width</span><span style="color: blue">=</span>"<span style="color: blue">75</span>" <span style="color: blue">/&gt;
&lt;</span><span style="color: #a31515">media:credit </span><span style="color: red">role</span><span style="color: blue">=</span>"<span style="color: blue">photographer</span>"<span style="color: blue">&gt;</span>chuchu<span style="color: blue">&lt;/</span><span style="color: #a31515">media:credit</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">media:category </span><span style="color: red">scheme</span><span style="color: blue">=</span>"<span style="color: blue">urn:zooomr:tags</span>"<span style="color: blue">&gt;</span>海遊館
aquarium kaiyukan osaka japan<span style="color: blue">&lt;/</span><span style="color: #a31515">media:category</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">item</span><span style="color: blue">&gt;</span></pre>
        <a href="http://11011.net/software/vspaste">
        </a>
        <p>
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 <a href="http://en.wikipedia.org/wiki/Media_RSS">Media
RSS extensions</a>, they generate different markup. Picasa has the media extensions
as a set of elements within a <code>media:group</code> element that is a child of
the <code>item</code> element while Zooomr simply places a grab bag of Media RSS elements
such including <code>media:thumbnail</code> and <code>media:content</code> as children
of the <code>item</code> element.  Smugmug takes the cake by simply tunneling
some escaped HTML in the <code>atom:content</code> element instead of using explicit
metadata to describe the photos. 
</p>
        <p>
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 <u>no consistently applied standards</u> for
representing photo streams in RSS/Atom. This is unfortunate because it means that
services have to write one off code (aka the <a href="http://twitter.com/kevinmarks/statuses/1068364292">beautiful
fucking snowflake problem</a>) 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.
</p>
        <p>
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 <a href="http://www.apparently.me.uk/22448.html">Atom
Media Extensions</a> which is an effort to create a similar set of media extensions
for the Atom syndication format. 
</p>
        <p>
What I like about the <a href="http://martin.atkins.me.uk/specs/atommedia">first draft
of Atom media extensions</a> 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 <a href="http://www.apple.com/itunes/whatson/podcasts/specs.html">iTunes
RSS extensions</a>. 
</p>
        <p>
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 <a href="http://www.readwriteweb.com/archives/googles_new_open_stack_sans_facebook_microsoft.php">Open
Stack™</a> since they've been pretty good at getting social sites to adopt their standards
and have been generally good at evangelization. 
</p>
        <p>
          <img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /> Now
Playing: <a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;unfiltered=1&amp;field-keywords=&amp;field-artist=DMX&amp;field-title=&amp;field-label=&amp;field-binding=&amp;sort=relevancerank&amp;Adv-Srch-Music-Album-Submit.x=19&amp;Adv-Srch-Music-Album-Submit.y=6">DMX</a> - <a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;field-keywords=DMX+Ruff Ryders' Anthem&amp;x=0&amp;y=0">Ruff
Ryders' Anthem</a><img style="vertical-align: middle" title="Note" alt="Note" src="http://shared.live.com/HjKMzTS-xzcms40%21CabizA/emoticons/music_note.gif" /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=79610681-82d7-44b2-9433-823e032df128" />
      </body>
      <title>Representing Rich Media and Social Network Activities in RSS/Atom Feeds</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,79610681-82d7-44b2-9433-823e032df128.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=79610681-82d7-44b2-9433-823e032df128" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,79610681-82d7-44b2-9433-823e032df128.aspx</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,guid,16de470b-346e-4cd0-9669-4dbae5665a04.aspx</pingback:target>
      <dc:creator>Dare Obasanjo</dc:creator>
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,16de470b-346e-4cd0-9669-4dbae5665a04.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There was an interesting presentation at OSCON 2008 by Evan Henshaw-Plath and Kellan
Elliott-McCrea entitled <a href="http://radar.oreilly.com/2008/07/oscon-day-1-beyond-rest-buildi.html">Beyond
REST? Building Data Services with XMPP PubSub</a>. The presentation is embedded below. 
</p>
        <object style="margin:0px" width="350" height="355">
          <param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=beyond-rest-narrative-1216853401785467-9" />
          <param name="allowFullScreen" value="true" />
          <param name="allowScriptAccess" value="always" />
          <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">
          </embed>
        </object>
        <p>
The core argument behind the presentation can be summarized by <a href="http://twitter.com/timoreilly/statuses/866400327">this
tweet from Tim O'Reilly</a></p>
        <blockquote>
        </blockquote>
        <blockquote>
          <p>
            <em>On monday friendfeed polled flickr nearly 3 million times for 45000 users, only
6K of whom were logged in. Architectural mismatch. #oscon08</em>
          </p>
        </blockquote>
        <p>
On July 21st, <a href="http://www.friendfeed.com">FriendFeed</a> had 45,000 users
who had associated their <a href="http://www.flickr.com">Flickr</a> 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. 
</p>
        <p>
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. 
</p>
        <p>
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
</p>
        <ul>
          <li>
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</li>
          <li>
a lot of these end points aren't persistently connected (i.e. your desktop RSS reader
isn't always running) 
</li>
          <li>
RSS/Atom publishing is as simple as plopping a file in the right directory and letting
IIS or Apache work its magic</li>
        </ul>
        <p>
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. 
</p>
        <p>
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 <a href="http://en.wikipedia.org/wiki/XMPP">XMPP</a> which
is an instant messaging protocol as the publish-subscribe mechanism. In response to
the talk, Joshua Schachter (founder of <a href="http://del.icio.us">del.icio.us</a>)
suggested a less heavyweight publish-subscribe mechanism using a custom API in his
post entitled <a href="http://joshua.schachter.org/2008/07/beyond-rest.html">beyond
REST</a>. 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 "Web
2.0" 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. 
</p>
        <p>
It should be noted that there are already some "Web 2.0" 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 <a title="Twitter and XMPP: Drinking from The Fire Hose" href="http://blog.twitter.com/2008/07/twitter-and-xmpp-drinking-from-fire.html">has
confirmed</a> 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. 
</p>
        <p>
The interesting question is why people are just bringing this up? Shouldn't people
have already been complaining about Web-based feed readers like <a href="http://reader.google.com">Google
Reader</a> and <a href="http://www.bloglines.com">Bloglines</a> for causing the same
kinds of problems? I can only imagine how many millions of times a day Google Reader
must fetch content from <a href="http://www.typepad.com">TypePad</a> and <a href="http://www.wordpress.com">Wordpress.com</a> but
I haven't seen explicit complaints about this issue from folks like <a href="http://www.dashes.com/anil">Anil
Dash</a> or <a href="http://ma.tt">Matt Mullenweg</a>. 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <b>Now Playing:</b>
          <a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;unfiltered=1&amp;field-keywords=&amp;field-artist=The Pussycat Dolls&amp;field-title=&amp;field-label=&amp;field-binding=&amp;sort=relevancerank&amp;Adv-Srch-Music-Album-Submit.x=19&amp;Adv-Srch-Music-Album-Submit.y=6">The
Pussycat Dolls</a> - <a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;field-keywords=The Pussycat Dolls+When I Grow Up&amp;x=0&amp;y=0">When
I Grow Up</a></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=16de470b-346e-4cd0-9669-4dbae5665a04" />
      </body>
      <title>When REST Doesn't Scale, XMPP to the Rescue?</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,16de470b-346e-4cd0-9669-4dbae5665a04.aspx</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;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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=16de470b-346e-4cd0-9669-4dbae5665a04" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,16de470b-346e-4cd0-9669-4dbae5665a04.aspx</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,guid,8ebea3c1-8eda-495b-8da8-406c1e0927fb.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,8ebea3c1-8eda-495b-8da8-406c1e0927fb.aspx</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>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Via Sam Ruby's post <a href="http://intertwingly.net/blog/2008/02/15/Embrace-Extend-then-Innovate">Embrace,
Extend then Innovate</a> I found a link to Joe Gregorio's post entitled <a href="http://bitworking.org/news/296/How-To-Do-RESTful-Partial-Updates">How
to do RESTful Partial Updates</a>. Joe's post is a recommendation of how to extend
the Atom Publishing Protocol (<a href="http://tools.ietf.org/html/rfc5023">RFC 5023</a>)
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 <a href="http://code.google.com/apis/gdata/">GData</a>, <a href="http://code.google.com/apis/opensocial/">OpenSocial</a>,
etc where these protocols simply appeared out of nowhere with proprietary extensions
to AtomPub with an FYI to the community <a href="http://www.mailinglistarchive.com/atom-protocol@imc.org/msg10514.html">after
the fact</a>. 
</p>
        <h4>The Problem Statement
</h4>
        <p>
In the Atom Publishing Protocol, an <code>atom:entry</code> 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. 
</p>
        <p>
So what's the problem? Below is an example of the results one could get from invoking
the <a href="http://developer.facebook.com/documentation.php?v=1.0&amp;method=users.getInfo">users.getInfo
method</a> in the Facebook REST API.
</p>
        <blockquote>
          <code>
            <p>
              <br />
   &lt;user&gt; 
<br />
    &lt;uid&gt;8055&lt;/uid&gt; 
<br />
    &lt;about_me&gt;This field perpetuates the glorification of the
ego.  Also, it has a character limit.&lt;/about_me&gt; 
<br />
    &lt;activities&gt;Here: facebook, etc. There: Glee Club, a capella,
teaching.&lt;/activities&gt;    
<br />
    &lt;birthday&gt;November 3&lt;/birthday&gt; 
<br />
    &lt;books&gt;The Brothers K, GEB, Ken Wilber, Zen and the Art,
Fitzgerald, The Emporer's New Mind, The Wonderful Story of Henry Sugar&lt;/books&gt; 
<br />
    &lt;current_location&gt; 
<br />
      &lt;city&gt;Palo Alto&lt;/city&gt; 
<br />
      &lt;state&gt;CA&lt;/state&gt; 
<br />
      &lt;country&gt;United States&lt;/country&gt; 
<br />
      &lt;zip&gt;94303&lt;/zip&gt; 
<br />
    &lt;/current_location&gt;    
<br />
    &lt;first_name&gt;Dave&lt;/first_name&gt;       
<br />
     &lt;interests&gt;coffee, computers, the funny, architecture,
code breaking,snowboarding, philosophy, soccer, talking to strangers&lt;/interests&gt; 
<br />
     &lt;last_name&gt;Fetterman&lt;/last_name&gt;   
<br />
     &lt;movies&gt;Tommy Boy, Billy Madison, Fight Club, Dirty
Work, Meet the Parents, My Blue Heaven, Office Space &lt;/movies&gt; 
<br />
     &lt;music&gt;New Found Glory, Daft Punk, Weezer, The Crystal
Method, Rage, the KLF, Green Day, Live, Coldplay, Panic at the Disco, Family Force
5&lt;/music&gt; 
<br />
     &lt;name&gt;Dave Fetterman&lt;/name&gt;  
<br />
     &lt;profile_update_time&gt;1170414620&lt;/profile_update_time&gt; 
<br />
     &lt;relationship_status&gt;In a Relationship&lt;/relationship_status&gt; 
<br />
     &lt;religion/&gt; 
<br />
     &lt;sex&gt;male&lt;/sex&gt; 
<br />
     &lt;significant_other_id xsi:nil="true"/&gt; 
<br />
     &lt;status&gt; 
<br />
       <font color="#ff0000">&lt;message&gt;Pirates
of the Carribean was an awful movie!!!&lt;/message&gt; 
<br /></font>     &lt;/status&gt;    
<br />
   &lt;/user&gt; 
<br /></p>
          </code>
        </blockquote>
        <p>
If this user was represented as an <code>atom:entry</code> 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 <code>atom:entry</code> back to
the server.  This is a fairly expensive way to change a status message compared
to how this is approached in other RESTful protocols (e.g. <a href="http://www.webdav.org/specs/rfc2518.html#METHOD_PROPPATCH">PROPPATCH</a> in
WebDAV). 
</p>
        <h4>Previous Discussions on this Topic: When the Shoe is on the Other Foot
</h4>
        <p>
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 <a href="http://www.25hoursaday.com/weblog/2007/06/09/WhyGDataAPPFailsAsAGeneralPurposeEditingProtocolForTheWeb.aspx">Why
GData/APP Fails as a General Purpose Editing Protocol for the Web</a>. In that post
I wrote 
</p>
        <blockquote>
          <p>
            <b>Lack of support for granular updates to fields of an item:</b> 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 <a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-15.html#rfc.section.5.4">section
5.4 of the current APP draft</a> and is excerpted below.
</p>
          <blockquote>
            <i>
            </i>
            <h6>
              <i>Retrieving a Resource</i>
            </h6>
            <pre>
              <i>Client Server<br />
| |<br />
| 1.) GET to Member URI |<br />
|------------------------------------------&gt;|<br />
| |<br />
| 2.) 200 Ok |<br />
| Member Representation |<br />
|&lt;------------------------------------------|<br />
| |<br /></i>
            </pre>
            <ol>
              <li>
                <i>The client sends a GET request to the URI of a Member Resource to retrieve its
representation.</i>
              </li>
              <li>
                <i>The server responds with the representation of the Member Resource.</i>
              </li>
            </ol>
            <i>
            </i>
            <h6>
              <i>Editing a Resource</i>
            </h6>
            <pre>
              <i>Client Server<br />
| |<br />
| 1.) PUT to Member URI |<br />
| Member Representation |<br />
|------------------------------------------&gt;|<br />
| |<br />
| 2.) 200 OK |<br />
|&lt;------------------------------------------|<br /></i>
            </pre>
            <ol>
            </ol>
            <i>
            </i>
            <li>
              <i>The client sends a PUT request to store a representation of a Member Resource.</i>
              <i>
              </i>
            </li>
            <li>
              <i>If the request is successful, the server responds with a status code of 200.</i>
            </li>
          </blockquote>
          <p>
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 <a href="http://code.google.com/apis/blogger/developers_guide_protocol.html#UpdatingPosts">documentation
on Updating posts on Google Blogger via GData</a> which states
</p>
          <blockquote>
            <strong>IMPORTANT!</strong> To ensure forward compatibility, be sure that
when you <code>POST</code> an updated entry you preserve <b>all</b> the XML that was
present when you retrieved the entry from Blogger. Otherwise, when we implement new
stuff and include <code>&lt;new-awesome-feature&gt;</code> elements in the feed, your
client won't return them and your users will miss out! The <a href="http://code.google.com/apis/gdata/clientlibs.html">Google
data API client libraries</a> all handle this correctly, so if you're using one of
the libraries you're all set.</blockquote>
          <p>
Thus each client is responsible for ensuring that it doesn't lose any XML that was
in the original <code>atom:entry</code> element it downloaded. The second problem
is more serious and should be of concern to anyone who's read <a href="http://www.w3.org/1999/04/Editing/">Editing
the Web: Detecting the Lost Update Problem Using Unreserved Checkout</a>. The problem
is that there is <b>data loss</b> if the entry has changed between the time the client
downloaded it and when it tries to PUT its changes. 
</p>
        </blockquote>
        <p>
That post was negatively received by many members of the AtomPub community including
Joe Gregorio. Joe wrote a scathing response to my post entitled <a href="http://bitworking.org/news/197/In-which-we-narrowly-save-Dare-from-inventing-his-own-publishing-protocol">In
which we narrowly save Dare from inventing his own publishing protocol</a>  where
he addressed that particular issue as follows 
</p>
        <blockquote>
          <p>
            <em>The second complaint is one of data loss:</em>
          </p>
          <blockquote>
            <p>
              <em>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.</em>
            </p>
          </blockquote>
          <p>
            <em>Fortunately, the only real problem is that Dare seems to have only skimmed the
specification. From </em>
            <a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-15.html#edit-via-PUT">
              <em>Section
9.3</em>
            </a>
            <em>:</em>
          </p>
          <blockquote>
            <p>
              <em>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].</em>
            </p>
          </blockquote>
          <p>
            <em>And further, from </em>
            <a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-15.html#etags">
              <em>Section
9.5</em>
            </a>
            <em>:</em>
          </p>
          <blockquote>
            <p>
              <em>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.</em>
            </p>
          </blockquote>
          <p>
            <em>Hey look, we actually reference the </em>
            <a href="http://www.w3.org/1999/04/Editing/">
              <em>lost
update</em>
            </a>
            <em> 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. </em>
            <a href="http://bitworking.org/news/138/Testing-the-APE">
              <em>I
did</em>
            </a>
            <em>, and it </em>
            <a href="http://intertwingly.net/wiki/pie/InteropGrid">
              <em>performed
quite well at the last APP Interop</em>
            </a>
            <em>.</em>
          </p>
        </blockquote>
        <p>
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 <a href="http://code.google.com/apis/gdata/overview.html">the wide
breadth of AtomPub implementations at Google</a> as opposed to when his design decisions
were being influenced by a home grown blogging server he wrote in his free time. 
</p>
        <h4>The Google Solution: Embrace, Extend then Innovate
</h4>
        <p>
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
</p>
        <blockquote>
          <p>
Now if I wanted to update part of this entry, say the title, using the mechanisms
in <a href="http://www.ietf.org/rfc/rfc5023.txt">RFC 5023</a> then I would change
the value of the title element and PUT the whole modified entry back to the the URI <code>http://example.org/edit/first-post.atom</code>.
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:
</p>
          <pre>
            <code>&lt;?xml version="1.0"?&gt; &lt;entry xmlns="http://www.w3.org/2005/Atom" <b><i>xmlns:t="http://blah..."&gt;</i></b><b><i>&lt;t:link_template
ref="sub" href="http://example.org/edit/first-post/{-listjoin|;|id}"/&gt;</i></b> &lt;title&gt;Atom-Powered
Robots Run Amok&lt;/title&gt; &lt;id&gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&lt;/id&gt;
&lt;updated&gt;2003-12-13T18:30:02Z&lt;/updated&gt; &lt;author&gt;&lt;name&gt;John
Doe&lt;/name&gt;&lt;/author&gt; &lt;content&gt;Some text.&lt;/content&gt; &lt;link
rel="edit" href="http://example.org/edit/first-post.atom"/&gt;
&lt;/entry&gt;</code>
          </pre>
          <p>
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:
</p>
          <pre>
            <code>&lt;?xml version="1.0"?&gt; &lt;entry xmlns="http://www.w3.org/2005/Atom"
xmlns:t="http://blah..."&gt; &lt;t:link_template ref="sub" href="http://example.org/edit/first-post/{-listjoin|;|id}"/&gt;
&lt;title <b><u>xml:id="X1"</u></b>&gt;Atom-Powered Robots Run Amok&lt;/title&gt;
&lt;id&gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&lt;/id&gt; &lt;updated&gt;2003-12-13T18:30:02Z&lt;/updated&gt;
&lt;author <b><u>xml:id="X2"</u></b>&gt;&lt;name&gt;John Doe&lt;/name&gt;&lt;/author&gt;
&lt;content <b><u>xml:id="X3"</u></b>&gt;Some text.&lt;/content&gt; &lt;link
rel="edit" href="http://example.org/edit/first-post.atom"/&gt;
&lt;/entry&gt;</code>
          </pre>
          <p>
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:
</p>
          <p>
            <strong>
              <u>http://example.org/edit/first-post/X1;X3 
<br /></u>
            </strong>
          </p>
          <p>
And then I would PUT an entry to the URI with only those child elements:
</p>
          <pre>
            <code>PUT /edit/first-post/X1;X3 Host: example.org &lt;?xml version="1.0"?&gt;
&lt;entry xmlns="http://www.w3.org/2005/Atom"&gt; &lt;title xml:id="X1"&gt;False
alarm on the Atom-Powered Robots things&lt;/title&gt; &lt;content xml:id="X3"&gt;Sorry
about that.&lt;/content&gt; &lt;/entry&gt;</code>
          </pre>
        </blockquote>
        <h4>The Problems with the Google Solution: Your Shipment of FAIL has Arrived
</h4>
        <p>
Ignoring the fact that this spec depends on specifications that are either experimental
(<a href="http://tools.ietf.org/html/draft-gregorio-uritemplate-02">URI Templates</a>)
or not widely supported (<a href="http://www.w3.org/TR/xml-id/">xml:id</a>), 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 <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">Embrace,
Extend then Innovate</a> where he wrote 
</p>
        <blockquote>
          <p>
            <em>With HTTP PUT, the the enclosed entity SHOULD be considered as a modified version
of the one residing on the origin server.  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.  In fact, depending on usage, it is positively stateful. </em>
          </p>
          <p>
            <em>I’m fine with a server choosing to interpret the request anyway it sees
fit.  As a black box, it could behave as if it updated the resource as requested
and then one nanosecond later — and before it processes any other requests —
fill in missing data with defaults, historical data, whatever.  My concern is
with clients coding with to the assumption as to how the server works.  That’s
called coupling.</em>
          </p>
        </blockquote>
        <p>
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 <a href="http://www.w3.org/TR/xml-id/">xml:id</a> 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.   
</p>
        <p>
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 <a href="http://msdn2.microsoft.com/en-us/library/ms172088(VS.71).aspx">Diffgram</a>, <a href="http://msdn2.microsoft.com/en-us/library/ms171880.aspx">UpdateGram</a>,
and <a href="http://msdn2.microsoft.com/en-us/library/aa302294.aspx">Patchgrams</a> 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.  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].
</p>
        <h4>Actual Solution: Read the Spec 
</h4>
        <p>
In Joe's original response to my post his suggestion was that the solution to the
"problem" 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 <code>atom:link</code> to link both resources. 
</p>
        <p>
Case closed. Problem solved. 
</p>
        <b>Now Playing</b>: <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Too Short">Too
Short</a> - <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Too Short&amp;songTerm=Couldn't Be a Better Player Than Me (feat. Lil Jon &amp; The Eastside Boyz)">Couldn't
Be a Better Player Than Me (feat. Lil Jon &amp; The Eastside Boyz)</a><img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8ebea3c1-8eda-495b-8da8-406c1e0927fb" /></body>
      <title>Thoughts on Google's Proposal for Granular Updates in AtomPub</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,8ebea3c1-8eda-495b-8da8-406c1e0927fb.aspx</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;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;
&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;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8ebea3c1-8eda-495b-8da8-406c1e0927fb" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,8ebea3c1-8eda-495b-8da8-406c1e0927fb.aspx</comments>
      <category>Syndication Technology</category>
      <category>XML Web Services</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=8d7e7c40-1d8d-44c6-b397-775290bc22a9</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,8d7e7c40-1d8d-44c6-b397-775290bc22a9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,8d7e7c40-1d8d-44c6-b397-775290bc22a9.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=8d7e7c40-1d8d-44c6-b397-775290bc22a9</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
I just realized that the current released version of <a href="http://www.rssbandit.org/">RSS
Bandit</a> doesn’t have a working code name based on a character from the X-Men comic
book. The previous 1.5.0.17 release was codenamed <a href="http://en.wikipedia.org/wiki/Kitty_Pryde">ShadowCat</a> while
the next release is codenamed <a href="http://en.wikipedia.org/wiki/Jean_Grey#Phoenix">Phoenix</a>.
Since the v1.6.0.x releases have been an interim releases on the road to Phoenix,
I’ve decided to give them the codename <a href="http://en.wikipedia.org/wiki/Jean_Grey">Jean
Grey</a> retroactively. Now, on to the updates. 
</p>
        <p>
          <strong>
            <em>Jean Grey (v1.6.0.x) Update</em>
          </strong>
        </p>
        <p>
The last bug fix release of <a href="http://www.rssbandit.org/">RSS Bandit</a> fixed
a few bugs but introduced a couple of even worse bugs [depending on your perspective].
We’ve shipped version 1.6.0.2 that addresses the following issues 
</p>
        <ul>
          <li>
Application crashes with AccessViolationException on startup on Windows XP.  </li>
          <li>
Application crashes and red 'X' shows in feed subscriptions window on Windows XP.
 </li>
          <li>
User's credentials are not used when accessing feeds via a proxy server leading to
proxy errors when fetching feeds.  </li>
          <li>
Duplicate feed URLs not detected if they differ by trailing slash or "www." in the
host name </li>
          <li>
Application crashes when displaying an error dialog when a certificate issue is detected
with a secure feed.</li>
        </ul>
        <p>
The first three issues are regressions that were introduced as part of refactoring
the code and making it work better on Windows Vista. Yet another data point that shows
that you can never have too many unit tests and that beta testing isn’t a bad
idea either. 
</p>
        <p>
You can download the new release from <a href="http://downloads.sourceforge.net/rssbandit/RssBandit1.6.0.2_Installer.zip">http://downloads.sourceforge.net/rssbandit/RssBandit1.6.0.2_Installer.zip</a></p>
        <p>
          <strong>
            <em>Phoenix (v2.0)  Update</em>
          </strong>
        </p>
        <p>
I’m continuing with my plan to make <a href="http://www.rssbandit.org/">RSS
Bandit</a> a desktop client for Web based feed readers like <a href="http://www.newsgator.com/">NewsGator
Online</a> and <a href="http://reader.google.com/">Google Reader</a>. I’ve been slightly
sidetracked by the realization that it would be pretty poor form for a Microsoft employee
to write an application that synchronized with Google’s RSS reader but not any of
Microsoft’s, even if it is a side project. My current coding project is to integrate
with the <a href="http://msdn2.microsoft.com/en-us/library/ms686418.aspx">Windows
RSS platform</a> which would allow one to manipulate the same set of
feeds in <a href="http://www.rssbandit.org/">RSS Bandit</a>, Internet Explorer 7 and
Outlook 2007. The good news is that with Outlook 2007 integration, you also get Exchange
synchronization for free. 
</p>
        <p>
The bad news has been having to use the RSS reading features of Internet Explorer
7 and Outlook 2007 on a regular basis as a way of <a href="http://en.wikipedia.org/wiki/Eat_one's_own_dog_food">eating
my own dog food</a> with regards to the integration features. It’s pretty stunning to
see not one but two RSS reading applications that assume “mark all items
as read” or “delete all feeds” are actions that users <u><strong>never</strong></u> have
to take. When you have <a href="http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/">people
writing shell scripts to perform basic tasks in your application</a> then it is a
clear sign that somewhere along the line, the user experience for that particular
set of features got the shaft.  
</p>
        <p>
I’m about half way through the integration after which I’ll continue with integrating with <a href="http://reader.google.com/">Google
Reader</a> and finally <a href="http://www.newsgator.com/">NewsGator Online</a> using
an Outlook + Exchange style model. While I’m working on this, both <a href="http://msdn2.microsoft.com/en-us/library/aa480062.aspx">Oren</a> and <a href="http://www.rendelmann.info/blog/">Torsten</a> will
be mapping out the rewrite of the graphical user interface using <a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation">WPF</a>.
I’ll probably need to buy a book on XAML or something in the next few months so I
can contribute to this effort. The only thing I’ve heard about any of the various
books about the subject on the market is that <a href="http://pluralsight.com/blogs/dbox/archive/2008/01/27/50054.aspx">they
all seem to have had their forewords written by Don Box</a>. Does anyone have recommendations
on which book or website I should use to start learning XAML + WPF? 
</p>
        <p>
          <strong>Now playing:</strong>
          <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Eminem">Eminem</a> - <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Sing For The Moment&amp;artistTerm=Eminem">Sing
For The Moment</a></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8d7e7c40-1d8d-44c6-b397-775290bc22a9" />
      </body>
      <title>RSS Bandit Update: v1.6.0.2 Ships and Integrating with RSS feeds in Outlook/Exchange</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,8d7e7c40-1d8d-44c6-b397-775290bc22a9.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2008/02/09/RSSBanditUpdateV1602ShipsAndIntegratingWithRSSFeedsInOutlookExchange.aspx</link>
      <pubDate>Sat, 09 Feb 2008 04:00:19 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I just realized that the current released version of &lt;a href="http://www.rssbandit.org/"&gt;RSS
Bandit&lt;/a&gt; doesn’t have a working code name based on a character from the X-Men comic
book. The previous 1.5.0.17 release was codenamed &lt;a href="http://en.wikipedia.org/wiki/Kitty_Pryde"&gt;ShadowCat&lt;/a&gt; while
the next release is codenamed &lt;a href="http://en.wikipedia.org/wiki/Jean_Grey#Phoenix"&gt;Phoenix&lt;/a&gt;.
Since the v1.6.0.x releases have been an interim releases on the road to Phoenix,
I’ve decided to give them the codename &lt;a href="http://en.wikipedia.org/wiki/Jean_Grey"&gt;Jean
Grey&lt;/a&gt; retroactively. Now, on to the updates. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Jean Grey (v1.6.0.x) Update&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The last bug fix release of &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt; fixed
a few bugs but introduced a couple of even worse bugs [depending on your perspective].
We’ve shipped version 1.6.0.2 that addresses the following issues 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Application crashes with AccessViolationException on startup on Windows XP. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Application crashes and red 'X' shows in feed subscriptions window on Windows XP.
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
User's credentials are not used when accessing feeds via a proxy server leading to
proxy errors when fetching feeds.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Duplicate feed URLs not detected if they differ by trailing slash or "www." in the
host name&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Application crashes when displaying an error dialog when a certificate issue is detected
with a secure feed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The first three issues are regressions that were introduced as part of refactoring
the code and making it work better on Windows Vista. Yet another data point that shows
that you can never have too many unit tests and&amp;nbsp;that beta testing isn’t a bad
idea either. 
&lt;/p&gt;
&lt;p&gt;
You can download the new release from &lt;a href="http://downloads.sourceforge.net/rssbandit/RssBandit1.6.0.2_Installer.zip"&gt;http://downloads.sourceforge.net/rssbandit/RssBandit1.6.0.2_Installer.zip&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Phoenix (v2.0)&amp;nbsp; Update&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I’m&amp;nbsp;continuing with my&amp;nbsp;plan to make &lt;a href="http://www.rssbandit.org/"&gt;RSS
Bandit&lt;/a&gt; a desktop client for Web based feed readers like &lt;a href="http://www.newsgator.com/"&gt;NewsGator
Online&lt;/a&gt; and &lt;a href="http://reader.google.com/"&gt;Google Reader&lt;/a&gt;. I’ve been slightly
sidetracked by the realization that it would be pretty poor form for a Microsoft employee
to write an application that synchronized with Google’s RSS reader but not any of
Microsoft’s, even if it is a side project. My current coding project is to integrate
with the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms686418.aspx"&gt;Windows
RSS platform&lt;/a&gt;&amp;nbsp;which would allow one to&amp;nbsp;manipulate&amp;nbsp;the same set of
feeds in &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt;, Internet Explorer 7 and
Outlook 2007. The good news is that with Outlook 2007 integration, you also get Exchange
synchronization for free. 
&lt;/p&gt;
&lt;p&gt;
The bad news has been having to use&amp;nbsp;the RSS reading features of Internet Explorer
7 and Outlook 2007 on a regular basis as a way of &lt;a href="http://en.wikipedia.org/wiki/Eat_one's_own_dog_food"&gt;eating
my own dog food&lt;/a&gt;&amp;nbsp;with regards to the integration features. It’s pretty stunning&amp;nbsp;to
see&amp;nbsp;not one but two&amp;nbsp;RSS reading applications that assume “mark all items
as read” or “delete all feeds”&amp;nbsp;are actions that users &lt;u&gt;&lt;strong&gt;never&lt;/strong&gt;&lt;/u&gt; have
to take. When you have &lt;a href="http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/"&gt;people
writing shell scripts to perform basic tasks in your application&lt;/a&gt; then it is a
clear sign that somewhere along the line, the user experience&amp;nbsp;for that particular
set of features got the&amp;nbsp;shaft.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I’m about half way through the integration after which I’ll continue with&amp;nbsp;integrating&amp;nbsp;with &lt;a href="http://reader.google.com/"&gt;Google
Reader&lt;/a&gt;&amp;nbsp;and finally &lt;a href="http://www.newsgator.com/"&gt;NewsGator Online&lt;/a&gt;&amp;nbsp;using
an Outlook + Exchange style model. While I’m working on this,&amp;nbsp;both &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480062.aspx"&gt;Oren&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.rendelmann.info/blog/"&gt;Torsten&lt;/a&gt;&amp;nbsp;will
be mapping out the rewrite of the graphical user interface using &lt;a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;WPF&lt;/a&gt;.
I’ll probably need to buy a book on XAML or something in the next few months so I
can contribute to this effort. The only thing I’ve heard about any of the various
books about the subject on the market is that &lt;a href="http://pluralsight.com/blogs/dbox/archive/2008/01/27/50054.aspx"&gt;they
all seem to have had their forewords written by Don Box&lt;/a&gt;. Does anyone have&amp;nbsp;recommendations
on which book or website I should use to start learning XAML + WPF? 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Now playing:&lt;/strong&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Eminem"&gt;Eminem&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Sing For The Moment&amp;amp;artistTerm=Eminem"&gt;Sing
For The Moment&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8d7e7c40-1d8d-44c6-b397-775290bc22a9" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,8d7e7c40-1d8d-44c6-b397-775290bc22a9.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=fdef9078-7e99-4550-9294-8c3c4d77354a</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,fdef9078-7e99-4550-9294-8c3c4d77354a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,fdef9078-7e99-4550-9294-8c3c4d77354a.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=fdef9078-7e99-4550-9294-8c3c4d77354a</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
It seems I missed the news when this happened last week but according to Greg Reinacker’s
post <a href="http://www.rassoc.com/gregr/weblog/2008/01/09/newsgators-rss-clients-are-now-free/">NewsGator’s
RSS clients are now free!</a> 
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>We’ve got a lot of big news today at NewsGator.</em>
          </p>
          <p>
            <em>First, we’ve got new releases of our most popular applications: </em>
            <a href="http://www.newsgator.com/Individuals/FeedDemon/Default.aspx">
              <em>FeedDemon
2.6</em>
            </a>
            <em>, </em>
            <a href="http://www.newsgator.com/Individuals/NetNewsWire/Default.aspx">
              <em>NetNewsWire
3.1</em>
            </a>
            <em>, </em>
            <a href="http://www.newsgator.com/Individuals/NewsGatorInbox/Default.aspx">
              <em>Inbox
3.0 (beta)</em>
            </a>
            <em>, and </em>
            <a href="http://www.newsgator.com/Individuals/NewsGatorGo/Default.aspx">
              <em>NewsGator
Go! for Windows Mobile 2.0</em>
            </a>
            <em>. Each of these is a pretty major release on
its own - tons of new features in all of them.</em>
          </p>
          <p>
            <em>But second, every one of those applications is now free! Free as in beer, that
is. And add to the free list </em>
            <a href="http://www.newsgator.com/Individuals/NewsGatorGo/Default.aspx">
              <em>NewsGator
Go! for BlackBerry</em>
            </a>
            <em> as well. And not only are they free, but our online
services (including synchronization) are now free as well! Not to mention our </em>
            <a href="http://m.newsgator.com/">
              <em>iPhone
reader</em>
            </a>
            <em>, </em>
            <a href="http://m.newsgator.com/">
              <em>HTML mobile reader</em>
            </a>
            <em>,
and all of the other applications that are part of our online platform.</em>
          </p>
        </blockquote>
        <p dir="ltr">
According to Greg and <a href="http://nick.typepad.com/blog/2008/01/free-demon-yes.html">Nick
Bradbury</a>, the reason they are doing this is because the bulk of their profits/revenues
come from selling Enterprise licenses and the desktop readers are now being used as
advertising to get enterprise customers. 
</p>
        <p dir="ltr">
They also mention that the other reason they are giving away their desktop application
is that they see a lot of financial value from collecting information
about what feeds their users are reading. My assumption was that this is because
the demographic data is being resold to marketers although both Greg and Nick make
it seem like the collection of this data is benign and only used for end user facing
features. 
</p>
        <p dir="ltr">
Anyway, this is pretty great news for fans of desktop RSS readers. If I didn’t already
have <a href="http://www.rssbandit.org/">RSS Bandit</a>, FeedDemon would be my
first choice when it comes to a desktop RSS reader for Windows. I also like the
fact that we get a <font color="#ff0000"><em>shout out</em></font> as part of the
setup experience for FeedDemon which is shown below 
</p>
        <img src="http://byfiles.storage.live.com/y1pWYp_OEZ-BSX26NjN9GSgApzcG0rVEe9bf_EHbJmoJFAtDoCpkQyh91xAegZdI2t1h0G_oFWE_f4" />
        <p dir="ltr">
Thanks for the shout out Nick. <img title="Smile" style="VERTICAL-ALIGN: middle" alt="Smile" src="http://shared.live.com/QGncRMHLLpIcOfCh--4aMA/emoticons/smile_regular.gif" /></p>
        <p dir="ltr">
Now that these apps are free, it does encourage us to step our game up with <a href="http://www.rssbandit.org/">RSS
Bandit</a>. Right now, my thinking is that official version number for the release
currently codenamed <em>Phoenix</em> will be <strong>RSS Bandit 2.0</strong>. This
release will be deserve the monicker “2.0” for two reasons 
</p>
        <ol dir="ltr">
          <li>
            <div>The user interface will be completely rewritten from scratch by <a href="http://msdn2.microsoft.com/en-us/library/aa480062.aspx">Oren</a> and <a href="http://www.rendelmann.info/blog/">Torsten</a> using
WPF. 
</div>
          </li>
          <li>
            <div>The application will become capable of being a full-blown desktop client to both <a href="http://reader.google.com/">Google
Reader</a> and <a href="http://www.newsgator.com/">NewsGator Online</a>. 
</div>
          </li>
        </ol>
        <p>
If I seem to have been blogging less, it is because I’ve been spending more time reading
about code, thinking about code and writing code in my free time. I can’t wait to
get the first beta out to you guys in a few months. 
</p>
        <p>
          <strong>Now playing:</strong>
          <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Kid Rock">Kid
Rock</a> - <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Welcome To The Party (Ode 2 the Old School)&amp;artistTerm=Kid Rock">Welcome
To The Party (Ode 2 the Old School)</a></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=fdef9078-7e99-4550-9294-8c3c4d77354a" />
      </body>
      <title>FeedDemon and NetNewsWire are now Free</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,fdef9078-7e99-4550-9294-8c3c4d77354a.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2008/01/17/FeedDemonAndNetNewsWireAreNowFree.aspx</link>
      <pubDate>Thu, 17 Jan 2008 04:00:03 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
It seems I missed the news when this happened last week but according to Greg Reinacker’s
post &lt;a href="http://www.rassoc.com/gregr/weblog/2008/01/09/newsgators-rss-clients-are-now-free/"&gt;NewsGator’s
RSS clients are now free!&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;em&gt;We’ve got a lot of big news today at NewsGator.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;First, we’ve got new releases of our most popular applications: &lt;/em&gt;&lt;a href="http://www.newsgator.com/Individuals/FeedDemon/Default.aspx"&gt;&lt;em&gt;FeedDemon
2.6&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, &lt;/em&gt;&lt;a href="http://www.newsgator.com/Individuals/NetNewsWire/Default.aspx"&gt;&lt;em&gt;NetNewsWire
3.1&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, &lt;/em&gt;&lt;a href="http://www.newsgator.com/Individuals/NewsGatorInbox/Default.aspx"&gt;&lt;em&gt;Inbox
3.0 (beta)&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, and &lt;/em&gt;&lt;a href="http://www.newsgator.com/Individuals/NewsGatorGo/Default.aspx"&gt;&lt;em&gt;NewsGator
Go! for Windows Mobile 2.0&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Each of these is a pretty major release on
its own - tons of new features in all of them.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;But second, every one of those applications is now free! Free as in beer, that
is. And add to the free list &lt;/em&gt;&lt;a href="http://www.newsgator.com/Individuals/NewsGatorGo/Default.aspx"&gt;&lt;em&gt;NewsGator
Go! for BlackBerry&lt;/em&gt;&lt;/a&gt;&lt;em&gt; as well. And not only are they free, but our online
services (including synchronization) are now free as well! Not to mention our &lt;/em&gt;&lt;a href="http://m.newsgator.com/"&gt;&lt;em&gt;iPhone
reader&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, &lt;/em&gt;&lt;a href="http://m.newsgator.com/"&gt;&lt;em&gt;HTML mobile reader&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,
and all of the other applications that are part of our online platform.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr&gt;
According&amp;nbsp;to Greg and &lt;a href="http://nick.typepad.com/blog/2008/01/free-demon-yes.html"&gt;Nick
Bradbury&lt;/a&gt;, the reason they are doing this is because the bulk of their profits/revenues
come from selling Enterprise licenses and the desktop readers are now being used as
advertising to get enterprise customers. 
&lt;/p&gt;
&lt;p dir=ltr&gt;
They also mention that the other reason they are giving away their desktop application
is that they see&amp;nbsp;a lot of financial&amp;nbsp;value&amp;nbsp;from collecting&amp;nbsp;information
about what feeds their users&amp;nbsp;are reading. My assumption was that this is because
the demographic data is being resold to marketers although both Greg and Nick make
it seem like the collection of this data is benign and only used for end user facing
features.&amp;nbsp;
&lt;/p&gt;
&lt;p dir=ltr&gt;
Anyway, this is pretty great news for fans of desktop RSS readers. If I didn’t&amp;nbsp;already
have &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt;,&amp;nbsp;FeedDemon would be my
first choice when it comes to a desktop&amp;nbsp;RSS reader for Windows. I also like the
fact that we get a &lt;font color=#ff0000&gt;&lt;em&gt;shout out&lt;/em&gt;&lt;/font&gt; as part of the setup
experience for&amp;nbsp;FeedDemon which is shown below 
&lt;/p&gt;
&lt;img src="http://byfiles.storage.live.com/y1pWYp_OEZ-BSX26NjN9GSgApzcG0rVEe9bf_EHbJmoJFAtDoCpkQyh91xAegZdI2t1h0G_oFWE_f4"&gt;&gt; 
&lt;p dir=ltr&gt;
Thanks for the shout out Nick. &lt;img title=Smile style="VERTICAL-ALIGN: middle" alt=Smile src="http://shared.live.com/QGncRMHLLpIcOfCh--4aMA/emoticons/smile_regular.gif"&gt; 
&lt;/p&gt;
&lt;p dir=ltr&gt;
Now that these apps are free, it does encourage us to step our game up with &lt;a href="http://www.rssbandit.org/"&gt;RSS
Bandit&lt;/a&gt;. Right now, my thinking is that official version number for the release
currently codenamed &lt;em&gt;Phoenix&lt;/em&gt; will be &lt;strong&gt;RSS Bandit 2.0&lt;/strong&gt;. This
release will be deserve the monicker “2.0” for two reasons 
&lt;/p&gt;
&lt;ol dir=ltr&gt;
&lt;li&gt;
&lt;div&gt;The user interface will be completely rewritten from scratch by &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480062.aspx"&gt;Oren&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.rendelmann.info/blog/"&gt;Torsten&lt;/a&gt;&amp;nbsp;using
WPF. 
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;The application will become capable of being a full-blown desktop client to both &lt;a href="http://reader.google.com/"&gt;Google
Reader&lt;/a&gt; and &lt;a href="http://www.newsgator.com/"&gt;NewsGator Online&lt;/a&gt;. 
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
If I seem to have been blogging less, it is because I’ve been spending more time reading
about code, thinking about code and writing code in my free time. I can’t wait to
get the first beta out to you guys in a few months. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Now playing:&lt;/strong&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Kid Rock"&gt;Kid
Rock&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Welcome To The Party (Ode 2 the Old School)&amp;amp;artistTerm=Kid Rock"&gt;Welcome
To The Party (Ode 2 the Old School)&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=fdef9078-7e99-4550-9294-8c3c4d77354a" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,fdef9078-7e99-4550-9294-8c3c4d77354a.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=ef56b8a5-27da-43ee-b3cb-7d848b9fd5f2</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,ef56b8a5-27da-43ee-b3cb-7d848b9fd5f2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,ef56b8a5-27da-43ee-b3cb-7d848b9fd5f2.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=ef56b8a5-27da-43ee-b3cb-7d848b9fd5f2</wfw:commentRss>
      <slash:comments>9</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
          <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Success&amp;artistTerm=Jay-Z">
          </a>
        </p>
        <p>
The top story in <a href="http://www.rssbandit.org/">my favorite aggregator</a> today
is the announcement on Scott Guthrie’s blog of the <a href="http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-3-5-extensions-ctp-preview-released.aspx">ASP.NET
3.5 Extensions CTP Preview</a>. Normally, announcements related to ASP.NET would
not interest me except this time is an interesting item in the list of technologies
being released 
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <font face="Arial">
              <u>ADO.NET Data Services</u>: In parallel with the ASP.NET Extensions
release we will also be releasing the ADO.NET Entity Framework.  This provides
a modeling framework that enables developers to define a conceptual model of a database
schema that closely aligns to a real world view of the information.  We will
also be shipping a new set of data services (codename "Astoria") that make it easy
to expose REST based API endpoints from within your ASP.NET applications.</font>
          </p>
        </blockquote>
        <p>
Wow. It looks like Astoria has quickly moved from being an experimental
project to see what it would like to place RESTful interfaces on top of SQL Server
database to being very close to shipping a production version.  I dug around
for more posts about <strike>Astoria</strike> ADO.NET Data Services so I could find
out what was in the CTP and came across two posts from Mike Flasko and Andy Conrad
respectively. 
</p>
        <p>
In his post entitled <a href="http://blogs.msdn.com/astoriateam/archive/2007/12/10/ado-net-data-services-project-astoria-ctp-is-released.aspx">ADO.NET
Data Services ("Project Astoria") CTP is Released</a> on the ADO.NET Data Services
team blog Mike Flasko writes
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>The following features are in this CTP:</em>
          </p>
          <ul>
            <li>
              <em>Support to create ADO.NET Data Services backed by: </em>
              <ul>
                <li>
                  <em>A relational database by leveraging the </em>
                  <a href="http://blogs.msdn.com/adonet/archive/2007/12/05/ado-net-entity-framework-beta-3-rleased.aspx">
                    <em>Entity
Framework</em>
                  </a>
                  <em>.  </em>
                </li>
                <li>
                  <em>Any data source (file, web service, custom store, application logic layer, etc) </em>
                </li>
              </ul>
            </li>
            <li>
              <em>Serialization Formats: </em>
            </li>
            <ul>
              <li>
                <em>Industry standard AtomPub serialization </em>
              </li>
              <li>
                <em>JSON serialization</em>
              </li>
            </ul>
            <li>
              <em>Simple HTTP interface </em>
              <ul>
                <li>
                  <em>Any platform with an HTTP stack can easily consume a data service </em>
                </li>
                <li>
                  <em>Designed to leverage HTTP semantics and infrastructure already deployed at large</em>
                </li>
              </ul>
            </li>
            <li>
              <em>Client libraries: </em>
              <ul>
                <li>
                  <em>.NET Framework </em>
                </li>
                <li>
                  <em>ASP.NET AJAX </em>
                </li>
                <li>
                  <em>Silverlight (coming soon)</em>
                </li>
              </ul>
            </li>
          </ul>
        </blockquote>
        <p>
This is sick. With Astoria I can expose my relational database or even a
local just an XML file using a RESTful interface that utilizes the
Atom Publishing Protocol or JSON. I am somewhat amused that one of the options is
placing a RESTful interface over a SOAP Web Service. My, how times have changed… 
</p>
        <p>
It is pretty cool that Microsoft is the first major database vendor to bring <a href="http://www.xml.com/pub/a/2005/09/21/atom-store-web-database.html">the
dream of the Atom store</a> to fruition. I also like that one of the side effects
of this is that there is now an AtomPub client library for .NET Framework. <img title="Smile" style="VERTICAL-ALIGN: middle" alt="Smile" src="http://shared.live.com/QGncRMHLLpIcOfCh--4aMA/emoticons/smile_regular.gif" /></p>
        <p>
Andy Conrad has a blog post entitled <a href="http://blogs.msdn.com/aconrad/archive/2007/12/10/linq-to-rest.aspx">Linq
to REST</a> which gives an idea of what happens when you combine the Astoria
client library with the Language Integrated Query (LINQ) features of C# 3.0 
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
          </p>
          <div class="CodeFormatContainer">
            <pre class="csharpcode">
              <code> [OpenObject(<span class="str">"PropBag"</span>)] <span class="kwrd">public</span><span class="kwrd">class</span> Product{ <span class="kwrd">private</span> Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt;
propBag = <span class="kwrd">new</span> Dictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt;();
[Key] <span class="kwrd">public</span><span class="kwrd">int</span> ProductID { get;
set; } </code>
              <code>
                <span class="kwrd">public</span>
                <span class="kwrd">string</span> ProductName
{ get; set; } <span class="kwrd">public</span><span class="kwrd">int</span> UnitsInStock
{ get; set; } <span class="kwrd">public</span> IDictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt;
PropBag { get { <span class="kwrd">return</span> propBag; } } }
</code>
            </pre>
          </div>
          <p>
        <span class="kwrd">static</span><span class="kwrd">void</span> Main(<span class="kwrd">string</span>[]
args){<br />
            WebDataContext
context = <span class="kwrd">new</span> WebDataContext(<span class="str">"http://localhost:18752/Northwind.svc"</span>);<br />
            <font color="#ff0000">var
query = from p <span class="kwrd">in</span> context.CreateQuery&lt;Product&gt;(<span class="str">"Products"</span>)<br />
                        <span class="kwrd">where</span> p.UnitsInStock
&gt; 100<br />
                       
select p;<br /></font><br />
            <span class="kwrd">foreach</span> (Product
p <span class="kwrd">in</span> query){<br />
               
Console.WriteLine(p.ProductName + <span class="str">" , UnitsInStock= "</span> + p.UnitsInStock);<br />
            }<br /><br />
        } 
</p>
          <p>
            <em>If you hover over the query variable, you will actually see the Astoria URI which
the Linq query is translated into by the Astoria client library:</em>
          </p>
          <p>
            <a title="http://localhost:18752/Northwind.svc/Products?$filter=(UnitsInStock)%20gt%20(100)" href="http://localhost:18752/Northwind.svc/Products?$filter=%28UnitsInStock%29%20gt%20%28100%29">
              <em>http://localhost:18752/Northwind.svc/Products?$filter=(UnitsInStock)%20gt%20(100)</em>
            </a>
          </p>
          <p>
            <em>So, there you go.  Linq to Astoria's RESTFUL API.  In other words, Linq
to REST.</em>  
</p>
        </blockquote>
        <p>
Like I said earlier, this is <strong>sick</strong>. I need to holla at Andy and see
if there is a dependency on the Atom feed containing Microsoft specific extensions
or whether this Linq to REST capability can be utilized over any arbitrary Atom feed. 
</p>
        <p>
          <strong>Now playing:</strong>
          <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Jay-Z">Jay-Z</a> - <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Success (feat. Nas)&amp;artistTerm=Jay-Z">Success
(feat. Nas)</a></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=ef56b8a5-27da-43ee-b3cb-7d848b9fd5f2" />
      </body>
      <title>ADO.NET Data Services (Astoria) Transforms SQL Server into an Atom Store</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,ef56b8a5-27da-43ee-b3cb-7d848b9fd5f2.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2007/12/11/ADONETDataServicesAstoriaTransformsSQLServerIntoAnAtomStore.aspx</link>
      <pubDate>Tue, 11 Dec 2007 13:21:29 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Success&amp;amp;artistTerm=Jay-Z"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The top story in &lt;a href="http://www.rssbandit.org/"&gt;my favorite aggregator&lt;/a&gt; today
is the announcement on Scott Guthrie’s blog of the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-3-5-extensions-ctp-preview-released.aspx"&gt;ASP.NET
3.5 Extensions CTP Preview&lt;/a&gt;. Normally, announcements&amp;nbsp;related to ASP.NET would
not interest me except this time is an interesting item in the list of technologies
being released 
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;font face=Arial&gt;&lt;u&gt;ADO.NET Data Services&lt;/u&gt;: In parallel with the ASP.NET Extensions
release we will also be releasing the ADO.NET Entity Framework.&amp;nbsp; This provides
a modeling framework that enables developers to define a conceptual model of a database
schema that closely aligns to a real world view of the information.&amp;nbsp; We will
also be shipping a new set of data services (codename "Astoria") that make it easy
to expose REST based API endpoints from within your ASP.NET applications.&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Wow. It looks like Astoria has&amp;nbsp;quickly moved from being&amp;nbsp;an experimental
project to see what it would like to place RESTful interfaces on top of SQL Server
database to being&amp;nbsp;very close to shipping a production version.&amp;nbsp; I dug around
for more posts about &lt;strike&gt;Astoria&lt;/strike&gt; ADO.NET Data Services so I could find
out what was in the CTP and came across two posts from Mike Flasko and Andy Conrad
respectively. 
&lt;/p&gt;
&lt;p&gt;
In his post entitled &lt;a href="http://blogs.msdn.com/astoriateam/archive/2007/12/10/ado-net-data-services-project-astoria-ctp-is-released.aspx"&gt;ADO.NET
Data Services ("Project Astoria") CTP is Released&lt;/a&gt;&amp;nbsp;on the ADO.NET Data Services
team blog Mike Flasko writes
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;em&gt;The following features are in this CTP:&lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Support to create ADO.NET Data Services backed by: &lt;/em&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;A relational database by leveraging the &lt;/em&gt;&lt;a href="http://blogs.msdn.com/adonet/archive/2007/12/05/ado-net-entity-framework-beta-3-rleased.aspx"&gt;&lt;em&gt;Entity
Framework&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&amp;nbsp; &lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Any data source (file, web service, custom store, application logic layer, etc) &lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Serialization Formats: &lt;/em&gt;
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Industry standard AtomPub serialization &lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;JSON serialization&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;em&gt;Simple HTTP interface &lt;/em&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Any platform with an HTTP stack can easily consume a data service &lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Designed to leverage HTTP semantics and infrastructure already deployed at large&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Client libraries: &lt;/em&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;.NET Framework &lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;ASP.NET AJAX &lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Silverlight (coming soon)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
This is sick. With Astoria I can&amp;nbsp;expose my relational database&amp;nbsp;or even a
local just an XML file using a&amp;nbsp;RESTful interface that&amp;nbsp;utilizes&amp;nbsp;the
Atom Publishing Protocol or JSON. I am somewhat amused that one of the options is
placing a RESTful interface over a SOAP Web Service. My, how times have changed… 
&lt;/p&gt;
&lt;p&gt;
It is pretty cool that Microsoft is the first major database vendor to bring &lt;a href="http://www.xml.com/pub/a/2005/09/21/atom-store-web-database.html"&gt;the
dream of the Atom store&lt;/a&gt; to fruition. I also like that one of the side effects
of this is that there is now an AtomPub client library for .NET Framework. &lt;img title=Smile style="VERTICAL-ALIGN: middle" alt=Smile src="http://shared.live.com/QGncRMHLLpIcOfCh--4aMA/emoticons/smile_regular.gif"&gt; 
&lt;/p&gt;
&lt;p&gt;
Andy Conrad has a blog post entitled &lt;a href="http://blogs.msdn.com/aconrad/archive/2007/12/10/linq-to-rest.aspx"&gt;Linq
to REST&lt;/a&gt; which gives an idea&amp;nbsp;of what happens when you combine the&amp;nbsp;Astoria
client library with the Language Integrated Query (LINQ) features of C# 3.0 
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;div class=CodeFormatContainer&gt;&lt;pre class=csharpcode&gt;&lt;code&gt; [OpenObject(&lt;span class=str&gt;"PropBag"&lt;/span&gt;)] &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;class&lt;/span&gt; Product{ &lt;span class=kwrd&gt;private&lt;/span&gt; Dictionary&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;object&lt;/span&gt;&amp;gt;
propBag = &lt;span class=kwrd&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;object&lt;/span&gt;&amp;gt;();
[Key] &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;int&lt;/span&gt; ProductID { get;
set; } &lt;/code&gt;&lt;code&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;string&lt;/span&gt; ProductName
{ get; set; } &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;int&lt;/span&gt; UnitsInStock
{ get; set; } &lt;span class=kwrd&gt;public&lt;/span&gt; IDictionary&amp;lt;&lt;span class=kwrd&gt;string&lt;/span&gt;, &lt;span class=kwrd&gt;object&lt;/span&gt;&amp;gt;
PropBag { get { &lt;span class=kwrd&gt;return&lt;/span&gt; propBag; } } }
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=kwrd&gt;static&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; Main(&lt;span class=kwrd&gt;string&lt;/span&gt;[]
args){&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebDataContext
context = &lt;span class=kwrd&gt;new&lt;/span&gt; WebDataContext(&lt;span class=str&gt;"http://localhost:18752/Northwind.svc"&lt;/span&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#ff0000&gt;var
query = from p &lt;span class=kwrd&gt;in&lt;/span&gt; context.CreateQuery&amp;lt;Product&amp;gt;(&lt;span class=str&gt;"Products"&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=kwrd&gt;where&lt;/span&gt; p.UnitsInStock
&amp;gt; 100&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
select p;&lt;br&gt;
&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=kwrd&gt;foreach&lt;/span&gt; (Product
p &lt;span class=kwrd&gt;in&lt;/span&gt; query){&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Console.WriteLine(p.ProductName + &lt;span class=str&gt;" , UnitsInStock= "&lt;/span&gt; + p.UnitsInStock);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;
&lt;/p&gt;
&gt; 
&lt;p&gt;
&lt;em&gt;If you hover over the query variable, you will actually see the Astoria URI which
the Linq query is translated into by the Astoria client library:&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a title=http://localhost:18752/Northwind.svc/Products?$filter=(UnitsInStock)%20gt%20(100) href="http://localhost:18752/Northwind.svc/Products?$filter=%28UnitsInStock%29%20gt%20%28100%29"&gt;&lt;em&gt;http://localhost:18752/Northwind.svc/Products?$filter=(UnitsInStock)%20gt%20(100)&lt;/em&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;So, there you go.&amp;nbsp; Linq to Astoria's RESTFUL API.&amp;nbsp; In other words, Linq
to REST.&lt;/em&gt;&amp;nbsp; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Like I said earlier, this is &lt;strong&gt;sick&lt;/strong&gt;. I need to holla at Andy and see
if there is a dependency on the Atom feed containing Microsoft specific extensions
or whether this Linq to REST capability can be utilized over any arbitrary Atom feed. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Now playing:&lt;/strong&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Jay-Z"&gt;Jay-Z&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Success (feat. Nas)&amp;amp;artistTerm=Jay-Z"&gt;Success
(feat. Nas)&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=ef56b8a5-27da-43ee-b3cb-7d848b9fd5f2" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,ef56b8a5-27da-43ee-b3cb-7d848b9fd5f2.aspx</comments>
      <category>Syndication Technology</category>
      <category>XML Web Services</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=98477176-3d0b-4e35-a808-d05a7c725005</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,98477176-3d0b-4e35-a808-d05a7c725005.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,98477176-3d0b-4e35-a808-d05a7c725005.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=98477176-3d0b-4e35-a808-d05a7c725005</wfw:commentRss>
      <slash:comments>12</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <i>
            <b>Disclaimer:</b> This post does not reflect the opinions, thoughts, strategies
or future intentions of my employer. These are solely my personal opinions. If you
are seeking official position statements from Microsoft, please go <a href="http://www.microsoft.com/presspass">here</a>.</i>
        </p>
        <p>
One of the Google folks working on <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> sent
me a message via <a href="http://www.facebook.com">Facebook</a> asking what I thought
about the technical details of the recent announcements. Since my day job is working
on social networking platforms for Web properties at Microsoft and I'm deeply interested
in RESTful protocols, this is something I definitely have some thoughts about. Below
is what started off as a private message but ended up being long enough to be it's
own blog post. 
</p>
        <h4>First Impressions 
</h4>
        <p>
In reading the <a href="http://code.google.com/apis/opensocial/docs/index.html">OpenSocial
API documentation</a> it seems clear that is intended to be the functional equivalent
of <a href="http://developer.facebook.com">the Facebook platform</a>. Instead
of the <a href="http://wiki.developers.facebook.com/index.php/API">Facebook users
and friends APIs</a>, we get the <a href="http://code.google.com/apis/opensocial/docs/gdata/people/developers_guide_protocol.html">OpenSocial
People and Friends Data API</a>. Instead of the <a href="http://developer.facebook.com/documentation.php?v=1.0&amp;method=feed.publishStoryToUser">Facebook
feed API</a>, we get the <a href="http://code.google.com/apis/opensocial/docs/gdata/activities/developers_guide_protocol.html">OpenSocial
Activities API</a>. Instead of the <a href="http://wiki.developers.facebook.com/index.php/Data_Store_API_documentation">Facebook
Data Store API</a>, we get the <a href="http://code.google.com/apis/opensocial/docs/gdata/persistence/developers_guide_protocol.html">OpenSocial
Persistence Data API</a>. Instead of <a href="http://developer.facebook.com/documentation.php?doc=fql">FQL</a> as
a friendly alternative to the various REST APIs we get <a href="http://code.google.com/apis/opensocial/docs/javascript/reference/">a
JavaScript object model</a>.   
</p>
        <p>
In general, I personally prefer the Facebook platform to OpenSocial. This is
due to three reasons 
</p>
        <ul>
          <li>
There is no alternative to the <a href="http://developer.facebook.com/anatomy.php">deep
integration into the Web site's user experience</a> that is facilitated with <a href="http://wiki.developers.facebook.com/index.php/FBML">FBML</a>.   
</li>
          <li>
I prefer idiomatic XML to tunnelling data through Atom feeds in ways that [in
my opinion] add unnecessary cruft. 
</li>
          <li>
The Facebook APIs encourage developers to build social and item relationship graphs
within their application while the OpenSocial seems only concerned with developers
stuffing data in key/value pairs. 
</li>
        </ul>
        <h4>The Javascript API
</h4>
        <p>
At first I assumed the <a href="http://code.google.com/apis/opensocial/docs/javascript/reference/">OpenSocial
JavaScript API</a> would provide similar functionality to <a href="http://wiki.developers.facebook.com/index.php/FBML">FBML</a> given
the large number of sound bites quoting Google employees stating that instead of "proprietary
markup" you could use "standard JavaScript" to build <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> applications.
However it seems the JavaScript API is simply a wrapper on top of the various REST
APIs. I'm sure there's some comment one could make questioning if REST APIs are
so simple why do developers feel the need to hide them behind object models? 
</p>
        <p>
Given the varying features and user interface choices in social networking sites,
it is unsurprising that there is no rich mechanism specified for adding entry points
to the application into the container sites user interface. However it is surprising
that <em>no user interface hooks are specified</em> at all. This is surprising
given that there are some common metaphors in social networking sites (e.g. a
profile page, a friends list, etc) which can be interacted with in a standard
way.  It is also shocking that Google attacked Facebook's use of "proprietary
markup" only to not even ship an equivalent feature. 
</p>
        <h4>The People and Friends Data API 
</h4>
        <p>
The <a href="http://code.google.com/apis/opensocial/docs/gdata/people/reference.html">People
and Friends Data API</a> is used to retrieve information about a user or the user's friends
as an Atom feed. Each user is represented as an <code>atom:entry</code> which is a <a href="http://code.google.com/apis/opensocial/docs/gdata/people/reference.html#Elements">PersonKind</a> (which
should not be confused with an <a href="http://tools.ietf.org/html/rfc4287#section-3.2">Atom
person construct</a>). It is expected that the URL structure for accessing people
and friends feeds will be of the form  <code>http://&lt;domain&gt;/feeds/people/&lt;userid&gt;</code> and <code>http://&lt;domain&gt;/feeds/people/&lt;userid&gt;/friends</code> respectively. 
</p>
        <p>
Compare the following response to a request for a user's information using OpenSocial
with the equivalent Facebook API call response.
</p>
        <blockquote>
          <pre>GET http://orkut.com/feeds/people/14358878523263729569</pre>
          <pre>&lt;entry xmlns='http://www.w3.org/2005/Atom' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005'&gt;<br />
&lt;id&gt;http://sandbox.orkut.com:80/feeds/people/14358878523263729569&lt;/id&gt;<br />
&lt;updated&gt;2007-10-28T14:01:29.948-07:00&lt;/updated&gt;<br />
&lt;title&gt;Elizabeth Bennet&lt;/title&gt;<br />
&lt;link rel='thumbnail' type='image/*' href='http://img1.orkut.com/images/small/1193601584/115566312.jpg'/&gt;<br />
&lt;link rel='alternate' type='text/html' href='http://orkut.com/Profile.aspx?uid=17583631990196664929'/&gt;<br />
&lt;link rel='self' type='application/atom+xml' href='http://sandbox.orkut.com:80/feeds/people/14358878523263729569'/&gt;<br />
&lt;georss:where&gt;<br />
&lt;gml:Point xmlns:gml='http://www.opengis.net/gml'&gt;<br />
&lt;gml:pos&gt;51.668674 -0.066235&lt;/gml:pos&gt;<br />
&lt;/gml:Point&gt;<br />
&lt;/georss:where&gt;<br />
&lt;gd:extendedProperty name='lang' value='en-US'/&gt;<br />
&lt;gd:postalAddress/&gt;<br />
&lt;/entry&gt;</pre>
        </blockquote>
        <p>
Below is the what the above information would look like if returned by Facebook's <a href="http://developer.facebook.com/documentation.php?v=1.0&amp;method=users.getInfo">users.getInfo</a> method
</p>
        <blockquote>
          <p>
GET 
</p>
          <pre>&lt;users_getInfo_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true"&gt;<br />
&lt;user&gt;<br />
&lt;uid&gt;14358878523263729569&lt;/uid&gt;<br />
&lt;current_location&gt;<br />
&lt;city&gt;Palo Alto&lt;/city&gt;<br />
&lt;state&gt;CA&lt;/state&gt;<br />
&lt;country&gt;United States&lt;/country&gt;<br />
&lt;zip&gt;94303&lt;/zip&gt;<br />
&lt;/current_location&gt;<br />
&lt;first_name&gt;Elizabeth&lt;/first_name&gt;<br />
&lt;is_app_user&gt;1&lt;/is_app_user&gt;<br />
&lt;has_added_app&gt;1&lt;/has_added_app&gt;<br />
&lt;pic&gt;http://photos-055.facebook.com/ip007/profile3/1271/65/s8055_39735.jpg&lt;/pic&gt;<br />
&lt;/user&gt;<br />
&lt;/users_getInfo_response&gt;</pre>
        </blockquote>
        <p>
I've already mentioned that I prefer idiomatic XML to tunnelling data through Atom
feeds. Comparing the readability of both examples should explain why. 
</p>
        <h4>The Activities Data API 
</h4>
        <p>
A number of social networking sites now provide a feature which enables users to see
the recent activities of members of their social network in an activity stream. The <a href="http://www.facebook.com/sitetour/homepage.php">Facebook
news feed</a>, <a href="http://en.blog.orkut.com/2007/09/whats-new-with-your-orkut-friends.html">Orkut's
updates from your friends</a>, and the <a href="http://robdolin.spaces.live.com/blog/cns%213C8CA60F8F925FEC%21884.entry">Windows
Live Spaces what's new page</a> are all examples of this feature. The <a href="http://code.google.com/apis/opensocial/docs/gdata/activities/developers_guide_protocol.html">OpenSocial
Activities Data API</a> provides a mechanism for OpenSocial applications to access
and update this activity stream as an Atom feed. All of the users activities or all
activities from a specific application can be accessed using URIs of the form  <code>http://&lt;domain&gt;/activities/feeds/activities/user/&lt;userID&gt;</code> and <code><code>http://&lt;domain&gt;/activities/feeds/activities/user/&lt;userID&gt;/source/&lt;sourceID&gt;</code></code> respectively.  
</p>
        <p>
Currently there is no reference documentation on this API. My assumption is that since
Orkut is the only OpenSocial site that supports this feature, it is difficult to produce
a spec that will work for other services without it being a verbatim description of
Orkut's implementation. 
</p>
        <p>
There are some notes on how Orkut attempts to prevents applications from spamming a
user's activity stream. For one, applications are only allowed to update the activity
stream for their source directly instead of the activity stream for the user. I assume
that Google applies some filter to the union of all the source specific activity streams
before generating the user's activity feed to eliminate spam. Secondly, applications
are monitored to see if they post too many messages to the activity stream or if they
post promotional messages instead of the user's activities to the stream. All of this
makes it seem difficult to see how one could specify the behavior of this API and
feature set reliably for a diverse set of social networking sites. 
</p>
        <h4>The Persistence Data API 
</h4>
        <p>
The <a href="http://code.google.com/apis/opensocial/docs/gdata/persistence/reference.html">OpenSocial
Persistence API</a> allows applications to store and retrieve key&lt;-&gt;value
pairs that are either user-specific or are global to the application. An example of
the former is a listing of company name and stock ticker pairs
while an example of the latter is a user's stock portfolio. The feed of global key&lt;-&gt;value
pairs for an application can be accessed at a URL of the form <code>http://&lt;domain&gt;/feeds/apps/<em>&lt;appID&gt;</em>/persistence/global</code> for
the entire feed and <code>http://&lt;domain&gt;/feeds/apps/<em>&lt;appID&gt;</em>/persistence/global/&lt;key&gt;</code> if
seeking a particular key&lt;-&gt;value pair. User-specific key&lt;-&gt;value pairs
are available at the URL of the form <code>http://&lt;domain&gt;/feeds/apps/<em>&lt;appID&gt;</em>/persistence/&lt;userID&gt;/instance/&lt;instanceID&gt;</code>. 
</p>
        <p>
This is probably the least interesting aspect of the API. A simple persistence API
like this is useful for applications with simple storage needs that need to store
user preferences or simple textual data that is needed by the application. However
you aren't going to use this as the data storage platform for applications like <a href="http://apps.facebook.com/ilike">iLike</a>, <a href="http://apps.facebook.com/flixster/">Flixster</a> or <a href="http://apps.facebook.com/scrabulous">Scrabulous</a>. 
</p>
        <p>
However I will add that an Atom feed seems like a horrible representation for a list
of key&lt;-&gt;value pairs. It's so bad that the documentation doesn't provide an
example of such a feed. 
</p>
        <h4>Hosting OpenSocial Applications
</h4>
        <p>
The <a href="http://code.google.com/apis/opensocial/container.html">documentation
on hosting OpenSocial applications</a> implies that any site that can host Google
gadgets can also host OpenSocial applications. In practice, it means that any site
that you can place a &lt;script&gt; element on can point to a gadget and thus render
it. Whether the application will actually work will depend on whether the hosting
service has actually implemented the OpenSocial Service Provider Interface (SPI). 
</p>
        <p>
Unfortunately, the documentation on implementing the OpenSocial SPI is missing in
action. From the Google site 
</p>
        <blockquote>
          <p>
            <em>To host OpenSocial apps, your website must support the SPI side of the OpenSocial
APIs. Usually your SPI will connect to your own social network, so that an OpenSocial
app added to your website automatically uses your site's data. However, it is possible
to use data from another social network as well, should you prefer. Soon, we will
provide a development kit with documentation and code to better support OpenSocial
websites, along with a sample sandbox which implements the OpenSocial SPI using in-memory
storage. The SPI implements: </em>
          </p>
          <ul>
            <li>
              <em>Adding and removing friends </em>
            </li>
            <li>
              <em>Adding and removing apps </em>
            </li>
            <li>
              <em>Storing activities </em>
            </li>
            <li>
              <em>Retrieving activity streams for self and friends </em>
            </li>
            <li>
              <em>Storing and retrieving per-app and per-app-per-user data </em>
            </li>
          </ul>
          <p>
            <em>The OpenSocial website development kit will include full SPI documentation. It
will provide open source reference implementations for both client and server components.</em>
          </p>
        </blockquote>
        <p>
I assume that the meat of the OpenSocial SPI is documentation is just more detailed
rules about how to implement the REST APIs described above. The interesting bits will
likely be the reference implementations of the API which will likely become the de
facto standard implementations instead of encouraging dozens of buggy incompatible
versions of the OpenSocial API to bloom.    
</p>
        <h4>Conclusion
</h4>
        <p>
In general I believe that any effort to standardize the widget/gadget APIs exposed
by various social networking sites and AJAX homepages (e.g. iGoogle, Netvibes, Live.com,
etc) is a good thing. Niall Kennedy has an excellent series of articles on <a href="http://www.niallkennedy.com/blog/archives/2007/07/web-widget-formats.html">Web
Widget formats</a> and <a href="http://www.niallkennedy.com/blog/archives/2007/07/widget-data-formats.html">Web
Widget update technologies</a> that shows how diverse and disparate the technologies
that developers have to learn and utilize when they want to build widgets for
various sites. Given that Web widgets are now a known quantity, the time is ripe for
some standardization. 
</p>
        <p>
That said, there are a number of things that give me cause to pause with regards
to <a href="http://code.google.com/apis/opensocial/">OpenSocial</a></p>
        <ol>
          <li>
            <p>
A common practice in the software industry today is to prefix "Open" to the name of
your technology which automatically gives it an aura of goodness while attempting
to paint competing technologies as being evil and "closed". Examples include OpenDocument,
OpenID, OpenXML, OAuth, etc. In this case, <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> is
being positioned as an "open" alternative to the <a href="http://developer.facebook.com">Facebook
platform</a>.  However as bloggers like Shelley Powers, Danny Ayers and Russell
Beattie have pointed out, there isn't much "open" about <a href="http://code.google.com/apis/opensocial/">OpenSocial</a>.
Russell Beattie asks in his post <a href="http://www.russellbeattie.com/blog/where-the-hell-is-the-container-api">Where
the hell is the Container API?</a></p>
            <blockquote>
              <em>Would people be jumping on this bandwagon so readily if it was Microsoft
unilaterally coming up with an API, holding secret meetings geared towards undercutting
the market leader, and then making sure that only those anointed partners get a head
start on launch day by making sure a key part of the API isn't released - even in
alpha. (It obviously exists already, all the partners have that spec and even sample
code, I'm sure. The rest of us don't get access yet, until the GOOG says otherwise).</em>
            </blockquote>
            <p>
Let's say we ignore that the process for creating the technology was not "open" nor
have key aspects of the technology even been unveiled [which makes this more of a
FUD announcement to take the wind out of Facebook's sails than an actual technology
announcement], is the technology itself open? Shelley Powers points out her post <a href="http://burningbird.net/technology/terms/">Terms</a> that
</p>
            <blockquote>
              <em>Perhaps the world will read the terms of use of the API, and realize <font color="#ff0000">this
is not an open API; this is a free API, owned and controlled by one company only:
Google</font>. Hopefully, the world will remember another time when Google offered
a free API and then pulled it. Maybe the world will also take a deeper look and realize
that the functionality is dependent on Google hosted technology, which has its own
terms of service (including adding ads at the discretion of Google), and that building
an OpenSocial application ties Google into your application, and Google into every
social networking site that buys into the Dream.</em>
            </blockquote>
            <p>
Google has announced a technology platform that is every bit as proprietary as Facebook's.
The only difference is that they've cut deals with some companies to utilize their
proprietary platform while Facebook's platform is only for use on <a href="http://www.facebook.com/">the
Facebook site</a>. <span style="background-color: yellow;">If Zuckerburg <a href="http://www.techcrunch.com/2007/11/02/ok-heres-at-least-part-of-what-facebook-is-announcing-on-tuesday/">announces
next week</a> that the Facebook platform is freely implementable by any 3rd party
Web site, where does that leave <a href="http://code.google.com/apis/opensocial/">OpenSocial</a>?</span> After
all, the <a href="http://developer.facebook.com">Facebook platform</a> is actually
a proven, working system with complete documentation instead of the incomplete rush
job that <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> clearly
is right now. 
</p>
            <p>
There are all sorts of forums for proposing and discussing <b>open</b> Web technologies
including the IETF, W3C, OASIS and even ECMA. Until all of the underlying technologies
in<a href="http://code.google.com/apis/opensocial/"> OpenSocial</a> have
been handed over to one or more of these standards bodies, this is a case of the proprietary
pot calling the proprietary kettle black. 
</p>
          </li>
          <li>
            <p>
One of the things that comes along with <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> is
that Google has now proposed <a href="http://code.google.com/apis/gdata/">GData</a> as
the standard protocol for interacting with social graphs on the Web. This is something
that I've been worried about for a while and I've written a <a href="http://www.25hoursaday.com/weblog/2007/06/09/WhyGDataAPPFailsAsAGeneralPurposeEditingProtocolForTheWeb.aspx">couple
of</a> <a href="http://www.25hoursaday.com/weblog/2007/06/11/GDataIsntABestPracticeImplementationOfTheAtomPublishingProtocol.aspx">blog</a> <a href="http://www.25hoursaday.com/weblog/2007/10/10/OneProtocolToRuleThemAllAndInTheDarknessBindThem.aspx">posts</a> to
address this topic because it is not clear that the Atom Publishing Protocol
upon which GData is based works well outside it's original purpise of editing
blog posts and the like. I'm not the only one that feels this way. 
</p>
            <p>
Danny Ayers wrote in his post <a href="http://dannyayers.com/2007/11/02/open-social">Open?
Social?</a></p>
            <blockquote>
              <p>
However the <a href="http://code.google.com/apis/opensocial/docs/gdata/people/reference.html#Elements">People
Data API</a> is cruel and unusual. It first stretches Atom until it creaks with <em>"each
entry in the People or Friends feed is a PersonKind";</em> then gives a further tug 
(a person's name is represented using atom:title) then extends it even more (a person's
email is gd:email) and finally mops up all the blood, sweat and dribble: 
</p>
              <p>
Key value parameters - gd:extendedProperty - "<em>As different social networks and
other sources of People data have many different named fields, this provides a way
for them to be passed on generally. Agreeing on common naming conventions is to be
decided in future.</em>" 
</p>
              <p>
Got to admire the attempt, but (to mix the metaphorical namespaces) silk purses don't
make very good sow's ears either.
</p>
            </blockquote>
            <p>
In addition, AtomPub geek extraordinairre, Tim Bray wrote in his blog post entitled <a href="http://www.tbray.org/ongoing/When/200x/2007/06/17/Web3S#p-2">Web3S</a></p>
            <blockquote>
              <em>If you decide you totally can’t model your world as collections of
entries populated with hyperlinks to express relationships, well then I guess APP’s
not for you. And at the level of engineering intuition, I have to say that a monster
online address book does feel different at a deep level from most online “publications”
(I thought that was why we had LDAP... but I repeat myself).</em>
            </blockquote>
            <p>
Now that we have AtomPub/GData as a de facto standard protocol for accessing various
kinds of non-microcontent data on the Web as a reality, I'm done debating its suitability
for the task since the horse has already left the barn. However I will continue to
ask <a href="http://www.25hoursaday.com/weblog/2007/11/01/WhenWillGDataBeRFC5023Compliant.aspx">when
will GData be RFC 5023 compliant</a>?
</p>
          </li>
          <li>
            <p>
At the end of the day, the most disappointing thing about <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> is
that it doesn't really further the conversation about actual interoperability across
social networking sites. If I use Orkut, I still need a MySpace account to interact
with my friends on that site. Some people have claimed that <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> will
enable routing around such lock-in via applications like <a href="http://apps.facebook.com/ilike">iLike</a> and <a href="http://apps.facebook.com/flixster">Flixster</a> which
have their own social networks and thus could build cross-site social networking services
since they will be hosted on multiple social networking sites. However the tough part
of this problem is how a hosted application knows that <a href="http://carnage4life.spaces.live.com">carnage4life@windowslivespaces</a> is
the same user as <a href="http://www.facebook.com/p/Dare_Obasanjo/500050028">DareObasanjo@Facebook</a>?
It seems OpenSocial completely punts on satisfying this scenario even though it wouldn't
be hard to add this as a requirement of the system. I guess the various applications
can create their own user account systems and then do the cross-site social network
bridging that way, which sucks because it will be a lot of duplicative work and will
require users to create even more accounts with various services. 
</p>
            <p>
Given that the big widget vendors like <a href="http://ilike.com/">iLike</a>, <a href="http://www.slide.com">Slide</a> and <a href="http://www.rockyou.com">RockYou</a> already
have their users creating accounts on their sites that can be tied back to which social
networking site the user utilizes their widgets on, this might be a moot point.
Wouldn't it be mad cool if the <a href="http://apps.facebook.com/topeight/">Top
Friends Facebook application</a> could also show your top friends from <a href="http://www.myspace.com">MySpace</a> or <a href="http://www.orkut.com">Orkut</a>?
I suspect the valuation of various widget companies will be revised upwards in the
coming months. 
</p>
          </li>
          <li>
            <p>
There is no mention of a user-centric application authorization model. Specifically,
there is no discussion of how users grant and revoke permission to access their personal
data to various OpenSocial applications. Regular readers of my blog are familiar with
my mantra of <a href="http://www.25hoursaday.com/weblog/2007/09/02/PutTheUserInControlOtherwiseThingsFallApart.aspx">putting
the user in control</a> which is why I've been so enthusiastic about <a href="http://www.25hoursaday.com/weblog/2007/10/06/OAuth10IsHereDelegatedAuthorityComesToMashups.aspx">OAuth</a>.
Although there is some mention of <a href="http://code.google.com/apis/accounts/AuthForWebApps.html">Google's
Authentication for Web Application</a> in the documentation, this seems specific to
Google's implementation of OpenSocial hosting and it is unclear to me that we should
expect that this is the same model that will be utilized by MySpace, Bebo, TypePad
or any of the other social networking sites that have promised to implement <a href="http://code.google.com/apis/opensocial/">OpenSocial</a>.
On the other hand, Facebook has a well thought out <a href="http://wiki.developers.facebook.com/index.php/Extended_application_permission">applications
permission model</a> and I would have thought it would be quite easy to simply reverse
engineer that and add it to the OpenSocial spec than to simply punt on this problem. 
</p>
          </li>
        </ol>
        <p>
Despite these misgivings, I think this is a step in the right direction. Web widget
and social graph APIs need to be standardized across the Web. 
</p>
        <p>
          <strong>PS:</strong> I've subscribed to the <a href="http://opensocialapis.blogspot.com/">Google
OpenSocial blog</a>. So far there have only been posts by clueless marketing types
but I'm sure interesting technical information that addresses some of the points above
will be forthcoming. 
</p>
        <script>
digg_url = 'http://digg.com/tech_news/Google_OpenSocial_Technical_Overview_and_Critique';
</script>
        <script src="http://digg.com/api/diggthis.js">
        </script>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=98477176-3d0b-4e35-a808-d05a7c725005" />
      </body>
      <title>Google OpenSocial: Technical Overview and Critique</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,98477176-3d0b-4e35-a808-d05a7c725005.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2007/11/03/GoogleOpenSocialTechnicalOverviewAndCritique.aspx</link>
      <pubDate>Sat, 03 Nov 2007 19:23:12 GMT</pubDate>
      <description>&lt;p&gt;
&lt;i&gt;&lt;b&gt;Disclaimer:&lt;/b&gt; This post does not reflect the opinions, thoughts, strategies
or future intentions of my employer. These are solely my personal opinions. If you
are seeking official position statements from Microsoft, please go &lt;a href="http://www.microsoft.com/presspass"&gt;here&lt;/a&gt;.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
One of the Google folks working on &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt; sent
me a message via &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt; asking what I thought
about the technical details of the recent announcements. Since my day job is working
on social networking platforms for Web properties at Microsoft and I'm deeply interested
in RESTful protocols, this is something I definitely have some thoughts about. Below
is what started off as a private message but ended up being long enough to be it's
own blog post. 
&lt;/p&gt;
&lt;h4&gt;First Impressions 
&lt;/h4&gt;
&lt;p&gt;
In reading the &lt;a href="http://code.google.com/apis/opensocial/docs/index.html"&gt;OpenSocial
API documentation&lt;/a&gt; it seems clear that is intended to be the functional equivalent
of&amp;nbsp;&lt;a href="http://developer.facebook.com"&gt;the Facebook platform&lt;/a&gt;. Instead
of the &lt;a href="http://wiki.developers.facebook.com/index.php/API"&gt;Facebook&amp;nbsp;users
and friends&amp;nbsp;APIs&lt;/a&gt;, we get the &lt;a href="http://code.google.com/apis/opensocial/docs/gdata/people/developers_guide_protocol.html"&gt;OpenSocial
People and Friends Data API&lt;/a&gt;. Instead of the &lt;a href="http://developer.facebook.com/documentation.php?v=1.0&amp;amp;method=feed.publishStoryToUser"&gt;Facebook
feed API&lt;/a&gt;, we get the &lt;a href="http://code.google.com/apis/opensocial/docs/gdata/activities/developers_guide_protocol.html"&gt;OpenSocial
Activities API&lt;/a&gt;. Instead of the &lt;a href="http://wiki.developers.facebook.com/index.php/Data_Store_API_documentation"&gt;Facebook
Data Store API&lt;/a&gt;, we get the &lt;a href="http://code.google.com/apis/opensocial/docs/gdata/persistence/developers_guide_protocol.html"&gt;OpenSocial
Persistence Data API&lt;/a&gt;. Instead of &lt;a href="http://developer.facebook.com/documentation.php?doc=fql"&gt;FQL&lt;/a&gt; as
a friendly alternative to the various REST APIs&amp;nbsp;we get &lt;a href="http://code.google.com/apis/opensocial/docs/javascript/reference/"&gt;a
JavaScript object model&lt;/a&gt;.&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
In general, I personally prefer the Facebook&amp;nbsp;platform to OpenSocial. This is
due to three reasons 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
There is no alternative to the&amp;nbsp;&lt;a href="http://developer.facebook.com/anatomy.php"&gt;deep
integration into the Web site's user experience&lt;/a&gt; that is facilitated with &lt;a href="http://wiki.developers.facebook.com/index.php/FBML"&gt;FBML&lt;/a&gt;.&amp;nbsp;&amp;nbsp; 
&lt;/li&gt;
&lt;li&gt;
I prefer idiomatic XML to tunnelling&amp;nbsp;data through Atom feeds in ways that [in
my opinion] add&amp;nbsp;unnecessary cruft. 
&lt;/li&gt;
&lt;li&gt;
The Facebook APIs encourage developers to build social and item relationship graphs
within their application while the OpenSocial seems only concerned with developers
stuffing data in key/value pairs. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;The Javascript API
&lt;/h4&gt;
&lt;p&gt;
At first I assumed the &lt;a href="http://code.google.com/apis/opensocial/docs/javascript/reference/"&gt;OpenSocial
JavaScript API&lt;/a&gt; would provide similar functionality to&amp;nbsp;&lt;a href="http://wiki.developers.facebook.com/index.php/FBML"&gt;FBML&lt;/a&gt;&amp;nbsp;given
the large number of sound bites quoting Google employees stating that instead of "proprietary
markup" you could use "standard JavaScript" to build &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;&amp;nbsp;applications.
However it seems the JavaScript API is simply a wrapper on top of the various REST
APIs. I'm sure there's some comment one could make&amp;nbsp;questioning if REST APIs are
so simple why do developers feel the need to hide them behind object models? 
&lt;/p&gt;
&lt;p&gt;
Given the varying features and user interface choices in social networking sites,
it is unsurprising that there is no rich mechanism specified for adding entry points
to the application into the container sites user interface. However it is surprising
that &lt;em&gt;no user interface hooks are specified&lt;/em&gt; at all.&amp;nbsp;This is surprising
given&amp;nbsp;that there are some common metaphors in social networking sites (e.g. a
profile page, a friends list, etc)&amp;nbsp;which can be interacted with in a standard
way. &amp;nbsp;It is also shocking that Google attacked Facebook's use of "proprietary
markup" only to not even ship an equivalent feature. 
&lt;/p&gt;
&lt;h4&gt;The People and Friends Data API&amp;nbsp;
&lt;/h4&gt;
&lt;p&gt;
The &lt;a href="http://code.google.com/apis/opensocial/docs/gdata/people/reference.html"&gt;People
and Friends Data API&lt;/a&gt; is used to retrieve information about a user or the user's&amp;nbsp;friends
as an Atom feed. Each user is represented as an &lt;code&gt;atom:entry&lt;/code&gt; which is a &lt;a href="http://code.google.com/apis/opensocial/docs/gdata/people/reference.html#Elements"&gt;PersonKind&lt;/a&gt; (which
should not be confused with an &lt;a href="http://tools.ietf.org/html/rfc4287#section-3.2"&gt;Atom
person construct&lt;/a&gt;). It is expected that the URL structure for accessing people
and friends feeds will be of the form&amp;nbsp; &lt;code&gt;http://&amp;lt;domain&amp;gt;/feeds/people/&amp;lt;userid&amp;gt;&lt;/code&gt; and &lt;code&gt;http://&amp;lt;domain&amp;gt;/feeds/people/&amp;lt;userid&amp;gt;/friends&lt;/code&gt; respectively. 
&lt;/p&gt;
&lt;p&gt;
Compare the following response to a request&amp;nbsp;for a user's information using OpenSocial
with the equivalent Facebook API call response.
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;GET http://orkut.com/feeds/people/14358878523263729569&lt;/pre&gt;&lt;pre&gt;&amp;lt;entry xmlns='http://www.w3.org/2005/Atom' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005'&amp;gt;&lt;br&gt;
&amp;lt;id&amp;gt;http://sandbox.orkut.com:80/feeds/people/14358878523263729569&amp;lt;/id&amp;gt;&lt;br&gt;
&amp;lt;updated&amp;gt;2007-10-28T14:01:29.948-07:00&amp;lt;/updated&amp;gt;&lt;br&gt;
&amp;lt;title&amp;gt;Elizabeth Bennet&amp;lt;/title&amp;gt;&lt;br&gt;
&amp;lt;link rel='thumbnail' type='image/*' href='http://img1.orkut.com/images/small/1193601584/115566312.jpg'/&amp;gt;&lt;br&gt;
&amp;lt;link rel='alternate' type='text/html' href='http://orkut.com/Profile.aspx?uid=17583631990196664929'/&amp;gt;&lt;br&gt;
&amp;lt;link rel='self' type='application/atom+xml' href='http://sandbox.orkut.com:80/feeds/people/14358878523263729569'/&amp;gt;&lt;br&gt;
&amp;lt;georss:where&amp;gt;&lt;br&gt;
&amp;lt;gml:Point xmlns:gml='http://www.opengis.net/gml'&amp;gt;&lt;br&gt;
&amp;lt;gml:pos&amp;gt;51.668674 -0.066235&amp;lt;/gml:pos&amp;gt;&lt;br&gt;
&amp;lt;/gml:Point&amp;gt;&lt;br&gt;
&amp;lt;/georss:where&amp;gt;&lt;br&gt;
&amp;lt;gd:extendedProperty name='lang' value='en-US'/&amp;gt;&lt;br&gt;
&amp;lt;gd:postalAddress/&amp;gt;&lt;br&gt;
&amp;lt;/entry&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
Below is the what the above information would look like if returned by Facebook's &lt;a href="http://developer.facebook.com/documentation.php?v=1.0&amp;amp;method=users.getInfo"&gt;users.getInfo&lt;/a&gt; method
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
GET 
&lt;/p&gt;
&lt;pre&gt;&amp;lt;users_getInfo_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true"&amp;gt;&lt;br&gt;
&amp;lt;user&amp;gt;&lt;br&gt;
&amp;lt;uid&amp;gt;14358878523263729569&amp;lt;/uid&amp;gt;&lt;br&gt;
&amp;lt;current_location&amp;gt;&lt;br&gt;
&amp;lt;city&amp;gt;Palo Alto&amp;lt;/city&amp;gt;&lt;br&gt;
&amp;lt;state&amp;gt;CA&amp;lt;/state&amp;gt;&lt;br&gt;
&amp;lt;country&amp;gt;United States&amp;lt;/country&amp;gt;&lt;br&gt;
&amp;lt;zip&amp;gt;94303&amp;lt;/zip&amp;gt;&lt;br&gt;
&amp;lt;/current_location&amp;gt;&lt;br&gt;
&amp;lt;first_name&amp;gt;Elizabeth&amp;lt;/first_name&amp;gt;&lt;br&gt;
&amp;lt;is_app_user&amp;gt;1&amp;lt;/is_app_user&amp;gt;&lt;br&gt;
&amp;lt;has_added_app&amp;gt;1&amp;lt;/has_added_app&amp;gt;&lt;br&gt;
&amp;lt;pic&amp;gt;http://photos-055.facebook.com/ip007/profile3/1271/65/s8055_39735.jpg&amp;lt;/pic&amp;gt;&lt;br&gt;
&amp;lt;/user&amp;gt;&lt;br&gt;
&amp;lt;/users_getInfo_response&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
I've already mentioned that I prefer idiomatic XML to tunnelling data through Atom
feeds. Comparing the readability of both examples should explain why. 
&lt;/p&gt;
&lt;h4&gt;The&amp;nbsp;Activities Data API&amp;nbsp;
&lt;/h4&gt;
&lt;p&gt;
A number of social networking sites now provide a feature which enables users to see
the recent activities of members of their social network in an activity stream. The &lt;a href="http://www.facebook.com/sitetour/homepage.php"&gt;Facebook
news feed&lt;/a&gt;, &lt;a href="http://en.blog.orkut.com/2007/09/whats-new-with-your-orkut-friends.html"&gt;Orkut's
updates from your friends&lt;/a&gt;, and the &lt;a href="http://robdolin.spaces.live.com/blog/cns%213C8CA60F8F925FEC%21884.entry"&gt;Windows
Live Spaces what's new page&lt;/a&gt; are all examples of this feature. The &lt;a href="http://code.google.com/apis/opensocial/docs/gdata/activities/developers_guide_protocol.html"&gt;OpenSocial
Activities Data API&lt;/a&gt; provides a mechanism for OpenSocial applications to access
and update this activity stream as an Atom feed. All of the users activities or all
activities from a specific application can be accessed using&amp;nbsp;URIs of the form&amp;nbsp; &lt;code&gt;http://&amp;lt;domain&amp;gt;/activities/feeds/activities/user/&amp;lt;userID&amp;gt;&lt;/code&gt; and &lt;code&gt;&lt;code&gt;http://&amp;lt;domain&amp;gt;/activities/feeds/activities/user/&amp;lt;userID&amp;gt;/source/&amp;lt;sourceID&amp;gt;&lt;/code&gt;&lt;/code&gt; respectively.&amp;nbsp;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Currently there is no reference documentation on this API. My assumption is that since
Orkut is the only OpenSocial site that supports this feature, it is difficult to produce
a spec that will work for other services without it being a verbatim description of
Orkut's implementation. 
&lt;/p&gt;
&lt;p&gt;
There are some notes on how Orkut attempts to prevents applications from spamming&amp;nbsp;a
user's activity stream. For one, applications are only allowed to update the activity
stream for their source directly instead of the activity stream for the user. I assume
that Google applies some filter to the union of all the source specific activity streams
before generating the user's activity feed to eliminate spam. Secondly, applications
are monitored to see if they post too many messages to the activity stream or if they
post promotional messages instead of the user's activities to the stream. All of this
makes it seem difficult to see how one could specify the behavior of this API and
feature set reliably for a diverse set of social networking sites. 
&lt;/p&gt;
&lt;h4&gt;The Persistence Data API&amp;nbsp;
&lt;/h4&gt;
&lt;p&gt;
The &lt;a href="http://code.google.com/apis/opensocial/docs/gdata/persistence/reference.html"&gt;OpenSocial
Persistence API&lt;/a&gt;&amp;nbsp;allows applications to store and retrieve key&amp;lt;-&amp;gt;value
pairs that are either user-specific or are global to the application. An example of
the former is a listing of&amp;nbsp;company&amp;nbsp;name&amp;nbsp;and&amp;nbsp;stock ticker&amp;nbsp;pairs
while an example of the latter is a user's stock portfolio. The feed of global key&amp;lt;-&amp;gt;value
pairs for an application can be accessed at a URL of the form&amp;nbsp;&lt;code&gt;http://&amp;lt;domain&amp;gt;/feeds/apps/&lt;em&gt;&amp;lt;appID&amp;gt;&lt;/em&gt;/persistence/global&lt;/code&gt; for
the entire feed and &lt;code&gt;http://&amp;lt;domain&amp;gt;/feeds/apps/&lt;em&gt;&amp;lt;appID&amp;gt;&lt;/em&gt;/persistence/global/&amp;lt;key&amp;gt;&lt;/code&gt; if
seeking a particular key&amp;lt;-&amp;gt;value pair. User-specific key&amp;lt;-&amp;gt;value pairs
are available at the URL of the form &lt;code&gt;http://&amp;lt;domain&amp;gt;/feeds/apps/&lt;em&gt;&amp;lt;appID&amp;gt;&lt;/em&gt;/persistence/&amp;lt;userID&amp;gt;/instance/&amp;lt;instanceID&amp;gt;&lt;/code&gt;. 
&lt;/p&gt;
&lt;p&gt;
This is probably the least interesting aspect of the API. A simple persistence API
like this is useful for applications with simple storage needs that need to store
user preferences or simple&amp;nbsp;textual data that is needed by the application. However
you aren't going to use this as the data storage platform for applications like &lt;a href="http://apps.facebook.com/ilike"&gt;iLike&lt;/a&gt;, &lt;a href="http://apps.facebook.com/flixster/"&gt;Flixster&lt;/a&gt; or &lt;a href="http://apps.facebook.com/scrabulous"&gt;Scrabulous&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
However I will add that an Atom feed seems like a horrible representation for a list
of key&amp;lt;-&amp;gt;value pairs. It's so bad that the documentation doesn't provide an
example of such a feed. 
&lt;/p&gt;
&lt;h4&gt;Hosting OpenSocial Applications
&lt;/h4&gt;
&lt;p&gt;
The &lt;a href="http://code.google.com/apis/opensocial/container.html"&gt;documentation
on hosting OpenSocial applications&lt;/a&gt; implies that any site that can host Google
gadgets can also host OpenSocial applications. In practice, it means that any site
that you can place a &amp;lt;script&amp;gt; element on can point to a gadget and thus&amp;nbsp;render
it. Whether the application will actually work will depend on whether the hosting
service has actually implemented the OpenSocial Service Provider Interface (SPI). 
&lt;/p&gt;
&lt;p&gt;
Unfortunately, the documentation on implementing the OpenSocial SPI is missing in
action. From the Google site 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;To host OpenSocial apps, your website must support the SPI side of the OpenSocial
APIs. Usually your SPI will connect to your own social network, so that an OpenSocial
app added to your website automatically uses your site's data. However, it is possible
to use data from another social network as well, should you prefer. Soon, we will
provide a development kit with documentation and code to better support OpenSocial
websites, along with a sample sandbox which implements the OpenSocial SPI using in-memory
storage. The SPI implements: &lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Adding and removing friends &lt;/em&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Adding and removing apps &lt;/em&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Storing activities &lt;/em&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Retrieving activity streams for self and friends &lt;/em&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Storing and retrieving per-app and per-app-per-user data &lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;em&gt;The OpenSocial website development kit will include full SPI documentation. It
will provide open source reference implementations for both client and server components.&lt;/em&gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I assume that the meat of the OpenSocial&amp;nbsp;SPI is documentation is just more detailed
rules about how to implement the REST APIs described above. The interesting bits will
likely be the reference implementations of the API which will likely become the de
facto standard implementations instead of&amp;nbsp;encouraging dozens of&amp;nbsp;buggy incompatible
versions of the OpenSocial API to bloom.&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;h4&gt;Conclusion
&lt;/h4&gt;
&lt;p&gt;
In general I believe that any effort to standardize the widget/gadget APIs exposed
by various social networking sites and AJAX homepages (e.g. iGoogle, Netvibes, Live.com,
etc) is a good thing. Niall Kennedy has an excellent series of articles on &lt;a href="http://www.niallkennedy.com/blog/archives/2007/07/web-widget-formats.html"&gt;Web
Widget formats&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.niallkennedy.com/blog/archives/2007/07/widget-data-formats.html"&gt;Web
Widget update technologies&lt;/a&gt; that shows how diverse and disparate the&amp;nbsp;technologies
that developers have to learn and utilize when&amp;nbsp;they want to build widgets for
various sites. Given that Web widgets are now a known quantity, the time is ripe for
some standardization. 
&lt;/p&gt;
&lt;p&gt;
That said, there are a number of things that give me cause to pause with&amp;nbsp;regards
to&amp;nbsp;&lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt; 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
A common practice in the software industry today is to prefix "Open" to the name of
your technology which automatically gives it an aura of goodness while attempting
to paint competing technologies as being evil and "closed". Examples include OpenDocument,
OpenID, OpenXML, OAuth, etc. In this case, &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt; is
being positioned as an "open" alternative to the &lt;a href="http://developer.facebook.com"&gt;Facebook
platform&lt;/a&gt;. &amp;nbsp;However as bloggers like Shelley Powers, Danny Ayers and Russell
Beattie have pointed out, there isn't much "open" about &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;.
Russell Beattie asks in his post &lt;a href="http://www.russellbeattie.com/blog/where-the-hell-is-the-container-api"&gt;Where
the hell is the Container API?&lt;/a&gt; 
&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;Would people be jumping on this bandwagon so readily if it was Microsoft
unilaterally coming up with an API, holding secret meetings geared towards undercutting
the market leader, and then making sure that only those anointed partners get a head
start on launch day by making sure a key part of the API isn't released - even in
alpha. (It obviously exists already, all the partners have that spec and even sample
code, I'm sure. The rest of us don't get access yet, until the GOOG says otherwise).&lt;/em&gt;&lt;/blockquote&gt; 
&lt;p&gt;
Let's say we ignore that the process for creating the technology was not "open" nor
have key aspects of the technology even been unveiled [which makes this more of a
FUD announcement to take the wind out of Facebook's sails than an actual technology
announcement], is the technology itself open? Shelley Powers points out her post &lt;a href="http://burningbird.net/technology/terms/"&gt;Terms&lt;/a&gt; that
&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;Perhaps the world will read the terms of use of the API, and realize &lt;font color="#ff0000"&gt;this
is not an open API; this is a free API, owned and controlled by one company only:
Google&lt;/font&gt;. Hopefully, the world will remember another time when Google offered
a free API and then pulled it. Maybe the world will also take a deeper look and realize
that the functionality is dependent on Google hosted technology, which has its own
terms of service (including adding ads at the discretion of Google), and that building
an OpenSocial application ties Google into your application, and Google into every
social networking site that buys into the Dream.&lt;/em&gt; &lt;/blockquote&gt; 
&lt;p&gt;
Google has announced a technology platform that is every bit as proprietary as Facebook's.
The only difference is that they've cut deals with some companies to utilize their
proprietary platform while Facebook's platform is only for use on &lt;a href="http://www.facebook.com/"&gt;the
Facebook site&lt;/a&gt;. &lt;span style="background-color: yellow;"&gt;If Zuckerburg &lt;a href="http://www.techcrunch.com/2007/11/02/ok-heres-at-least-part-of-what-facebook-is-announcing-on-tuesday/"&gt;announces
next week&lt;/a&gt; that the Facebook platform is freely implementable by any 3rd party
Web site, where does that leave &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;?&lt;/span&gt; After
all, the&amp;nbsp;&lt;a href="http://developer.facebook.com"&gt;Facebook platform&lt;/a&gt; is actually
a proven, working system with complete documentation instead of the incomplete rush
job that &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;&amp;nbsp;clearly
is right now. 
&lt;/p&gt;
&lt;p&gt;
There are all sorts of forums for proposing and discussing &lt;b&gt;open&lt;/b&gt; Web technologies
including the IETF, W3C, OASIS and even ECMA. Until all of the underlying technologies
in&lt;a href="http://code.google.com/apis/opensocial/"&gt;&amp;nbsp;OpenSocial&lt;/a&gt;&amp;nbsp;have
been handed over to one or more of these standards bodies, this is a case of the proprietary
pot calling the proprietary kettle black. 
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
One of the things that comes along with &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;&amp;nbsp;is
that Google has now proposed &lt;a href="http://code.google.com/apis/gdata/"&gt;GData&lt;/a&gt; as
the standard protocol for interacting with social graphs on the Web. This is something
that I've been worried about for a while and I've written a &lt;a href="http://www.25hoursaday.com/weblog/2007/06/09/WhyGDataAPPFailsAsAGeneralPurposeEditingProtocolForTheWeb.aspx"&gt;couple
of&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.25hoursaday.com/weblog/2007/06/11/GDataIsntABestPracticeImplementationOfTheAtomPublishingProtocol.aspx"&gt;blog&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.25hoursaday.com/weblog/2007/10/10/OneProtocolToRuleThemAllAndInTheDarknessBindThem.aspx"&gt;posts&lt;/a&gt; to
address this topic because it is&amp;nbsp;not clear that the Atom Publishing Protocol
upon which GData is based works well outside&amp;nbsp;it's original purpise&amp;nbsp;of editing
blog posts and the like. I'm not the only one that feels this way. 
&lt;/p&gt;
&lt;p&gt;
Danny Ayers wrote in his post &lt;a href="http://dannyayers.com/2007/11/02/open-social"&gt;Open?
Social?&lt;/a&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
However the &lt;a href="http://code.google.com/apis/opensocial/docs/gdata/people/reference.html#Elements"&gt;People
Data API&lt;/a&gt; is cruel and unusual. It first stretches Atom until it creaks with &lt;em&gt;"each
entry in the People or Friends feed is a PersonKind";&lt;/em&gt; then gives a further tug&amp;nbsp;
(a person's name is represented using atom:title) then extends it even more (a person's
email is gd:email) and finally mops up all the blood, sweat and dribble: 
&lt;/p&gt;
&lt;p&gt;
Key value parameters - gd:extendedProperty - "&lt;em&gt;As different social networks and
other sources of People data have many different named fields, this provides a way
for them to be passed on generally. Agreeing on common naming conventions is to be
decided in future.&lt;/em&gt;" 
&lt;/p&gt;
&lt;p&gt;
Got to admire the attempt, but (to mix the metaphorical namespaces) silk purses don't
make very good sow's ears either.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
In addition, AtomPub geek extraordinairre, Tim Bray wrote in his blog post entitled&amp;nbsp;&lt;a href="http://www.tbray.org/ongoing/When/200x/2007/06/17/Web3S#p-2"&gt;Web3S&lt;/a&gt; 
&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;If you decide you totally can’t model your world as collections of
entries populated with hyperlinks to express relationships, well then I guess APP’s
not for you. And at the level of engineering intuition, I have to say that a monster
online address book does feel different at a deep level from most online “publications”
(I thought that was why we had LDAP... but I repeat myself).&lt;/em&gt;&lt;/blockquote&gt; 
&lt;p&gt;
Now that we have AtomPub/GData as a de facto standard protocol for accessing various
kinds of non-microcontent data on the Web as a reality, I'm done debating its suitability
for the task since the horse has already left the barn. However I will continue to
ask &lt;a href="http://www.25hoursaday.com/weblog/2007/11/01/WhenWillGDataBeRFC5023Compliant.aspx"&gt;when
will GData be RFC 5023 compliant&lt;/a&gt;?
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
At the end of the day, the most disappointing thing about &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;&amp;nbsp;is
that it doesn't really further the conversation about actual interoperability across
social networking sites. If I use Orkut, I still need a MySpace account to interact
with my friends on that site. Some people have claimed that &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;&amp;nbsp;will
enable routing around such lock-in via applications like &lt;a href="http://apps.facebook.com/ilike"&gt;iLike&lt;/a&gt; and &lt;a href="http://apps.facebook.com/flixster"&gt;Flixster&lt;/a&gt; which
have their own social networks and thus could build cross-site social networking services
since they will be hosted on multiple social networking sites. However the tough part
of this problem is how a hosted application knows that &lt;a href="http://carnage4life.spaces.live.com"&gt;carnage4life@windowslivespaces&lt;/a&gt; is
the same user&amp;nbsp;as &lt;a href="http://www.facebook.com/p/Dare_Obasanjo/500050028"&gt;DareObasanjo@Facebook&lt;/a&gt;?
It seems OpenSocial completely punts on satisfying this scenario even though it wouldn't
be hard to add this as a requirement of the system. I guess the various applications
can create their own user account systems and then do the cross-site social network
bridging that way, which sucks because it will be a lot of duplicative work and will
require users to create even more accounts with various services. 
&lt;/p&gt;
&lt;p&gt;
Given that the big widget vendors like &lt;a href="http://ilike.com/"&gt;iLike&lt;/a&gt;, &lt;a href="http://www.slide.com"&gt;Slide&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.rockyou.com"&gt;RockYou&lt;/a&gt; already
have their users creating accounts on their sites that can be tied back to which social
networking site the user utilizes their widgets&amp;nbsp;on, this might be a moot point.
Wouldn't it be mad cool if the&amp;nbsp;&lt;a href="http://apps.facebook.com/topeight/"&gt;Top
Friends Facebook application&lt;/a&gt; could also show your top friends from &lt;a href="http://www.myspace.com"&gt;MySpace&lt;/a&gt; or &lt;a href="http://www.orkut.com"&gt;Orkut&lt;/a&gt;?
I suspect the valuation of various widget companies will be revised upwards in the
coming months. 
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
There is no mention of a user-centric application authorization model. Specifically,
there is no discussion of how users grant and revoke permission to access their personal
data to various OpenSocial applications. Regular readers of my blog are familiar with
my mantra of &lt;a href="http://www.25hoursaday.com/weblog/2007/09/02/PutTheUserInControlOtherwiseThingsFallApart.aspx"&gt;putting
the user in control&lt;/a&gt; which is why I've been so enthusiastic about &lt;a href="http://www.25hoursaday.com/weblog/2007/10/06/OAuth10IsHereDelegatedAuthorityComesToMashups.aspx"&gt;OAuth&lt;/a&gt;.
Although there is some mention of &lt;a href="http://code.google.com/apis/accounts/AuthForWebApps.html"&gt;Google's
Authentication for Web Application&lt;/a&gt; in the documentation, this seems specific to
Google's implementation of OpenSocial hosting and it is unclear to me that we should
expect that this is the same model that will be utilized by MySpace, Bebo, TypePad
or any of the other social networking sites that have promised to implement &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;.
On the other hand, Facebook has a well thought out &lt;a href="http://wiki.developers.facebook.com/index.php/Extended_application_permission"&gt;applications
permission model&lt;/a&gt; and I would have thought it would be quite easy to simply reverse
engineer that and add it to the OpenSocial spec than to simply punt on this problem. 
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Despite these misgivings, I think this is a step in the right direction. Web widget
and social graph APIs need to be standardized across the Web. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;PS:&lt;/strong&gt; I've subscribed to the &lt;a href="http://opensocialapis.blogspot.com/"&gt;Google
OpenSocial blog&lt;/a&gt;. So far there have only been posts by clueless marketing types
but I'm sure interesting technical information that addresses some of the points above
will be forthcoming. 
&lt;/p&gt;
&lt;script&gt;
digg_url = 'http://digg.com/tech_news/Google_OpenSocial_Technical_Overview_and_Critique';
&lt;/script&gt;
&lt;script src="http://digg.com/api/diggthis.js"&gt;&lt;/script&gt;&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=98477176-3d0b-4e35-a808-d05a7c725005" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,98477176-3d0b-4e35-a808-d05a7c725005.aspx</comments>
      <category>Competitors/Web Companies</category>
      <category>Platforms</category>
      <category>Syndication Technology</category>
      <category>XML Web Services</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=08da3c3f-1c12-4887-85b7-aaa8ba1b3012</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,08da3c3f-1c12-4887-85b7-aaa8ba1b3012.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,08da3c3f-1c12-4887-85b7-aaa8ba1b3012.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=08da3c3f-1c12-4887-85b7-aaa8ba1b3012</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
James Snell has a blog post entitled <a href="http://www.snellspace.com/wp/?p=788">Batch!</a> which
talks about the <a href="http://code.google.com/apis/gdata/batch.html">Batch processing
model in GData APIs</a>. He provides a sample of a GData batch request and points
out the following 
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>If the mere sight of this doesn’t give you shivers and shakes, let me give you
a few reasons why it should:</em>
          </p>
          <ol>
            <li>
              <em>It’s not valid Atom. Note the first entry in the feed for instance. An Atom entry
has an id, a title, some content, an author, some links, maybe some categories, etc.
If the type of objects you want to represent does not also have those things, Atom
is not the right format to use.</em>
            </li>
            <li>
              <em>It only works with Atom. What about binary resources like Jpeg’s? I guess we could
base64 encode the binary data and stuff that into our invalid Atom entries but doing
so would suck.</em>
            </li>
            <li>
              <em>We can’t use Etag’s and conditional requests</em>
            </li>
            <li>
              <em>I’m sure there are more reasons but these should be enough to convince you that <font color="#ff0000">a
better approach is needed.</font></em>
            </li>
          </ol>
        </blockquote>
        <p dir="ltr">
In a previous post I entitled <a href="http://www.25hoursaday.com/weblog/2007/10/10/OneProtocolToRuleThemAllAndInTheDarknessBindThem.aspx">One
Protocol to Rule Them All and in the Darkness Bind Them</a> I pointed out that
since the <a href="http://tools.ietf.org/html/rfc5023">Atom Publishing Protocol</a> is
not a good fit for interacting with data types that aren’t microcontent, it would
need to be embraced and extended to satisfy those needs. In addition, this leads to
problems because different vendors will embrace and extend it in different ways which
fragments interoperability. 
</p>
        <p dir="ltr">
An alternative approach would be for vendors to utilize protocols that are better
suited for the job instead of creating incompatible versions of a standard protocol.
However the response I’ve seen from various people is that it is better if we have
multiple <em>slightly incompatible</em> implementations of a single standard than
multiple <strong>completely incompatible</strong> proprietary technologies. I’ve taken
to calling this “<em>the </em><a href="http://en.wikipedia.org/wiki/OpenDocument"><em>ODF</em></a><em> vs. </em><a href="http://en.wikipedia.org/wiki/Office_Open_XML"><em>OOXML</em></a><em> lesson”</em>.
This also explains why there was so much heat in the <a href="http://www.news.com/2100-1032-5157662.html">RSS
vs. Atom debates</a> but not so much when it came to debates over <a href="http://dannyayers.com/2005/06/28/apple-itunes-podcasting/">Yahoo’s
podcasting extensions vs. Apple’s podcasting extensions</a> to RSS. 
</p>
        <p dir="ltr">
Let’s say we now take it as a given that there will be multiple proprietary extensions
to a standard protocol and this is preferable to the alternative, what should we have
as the ground rules to ensure interoperability isn’t completely thrown out the windows?
A fundamental ground rule should be that vendors should actually provide
standards compliant implementations of the protocol before deciding to embrace and
extend it. That way clients and services that conform to the standard can interoperate
with them. In this regard, <a href="http://code.google.com/apis/gdata/">GData</a> falls
down horribly as James Snell points out. 
</p>
        <p dir="ltr">
Given that <a href="http://googledataapis.blogspot.com/2007/10/posted-by-joe-gregorio-google-data-apis.html">Joe
Gregorio now works at Google</a> and is a <a href="http://www.ietf.org/rfc/rfc5023.txt">co-author
of RFC 5023</a>, I assume it is just a matter of time before Google fixes this brokenness.
The only question is when? 
</p>
        <p dir="ltr">
          <strong>PS:</strong> Defining support for batch operations in a standard way is going
to be rather difficult primarily because of how to deal with failure modes. The
fact that there is always <a href="http://www.25hoursaday.com/weblog/2007/10/10/WhenDatabasesLieConsistencyVsAvailabilityInDistributedSystems.aspx">the
struggle between consistency and availability in distributed systems</a> means that
some folks will want a failure in any of the batched operations to result in the equivalent
of a rollback while there are others that don’t care if one or two out of a batch of
fifty operations fails. Then there are some folks in the middle for whom “it depends
on the context” for which kind of failure mode they want.  
</p>
        <p>
          <strong>Now playing:</strong>
          <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Method Man">Method
Man</a> - <a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Say (feat. Lauryn Hill)&amp;artistTerm=Method Man">Say
(feat. Lauryn Hill)</a></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=08da3c3f-1c12-4887-85b7-aaa8ba1b3012" />
      </body>
      <title>When Will GData Be RFC 5023 Compliant?</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,08da3c3f-1c12-4887-85b7-aaa8ba1b3012.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2007/11/01/WhenWillGDataBeRFC5023Compliant.aspx</link>
      <pubDate>Thu, 01 Nov 2007 03:00:01 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
James Snell has a blog post entitled &lt;a href="http://www.snellspace.com/wp/?p=788"&gt;Batch!&lt;/a&gt; which
talks about the &lt;a href="http://code.google.com/apis/gdata/batch.html"&gt;Batch processing
model in GData APIs&lt;/a&gt;. He provides a sample of a GData batch request and points
out the following 
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;em&gt;If the mere sight of this doesn’t give you shivers and shakes, let me give you
a few reasons why it should:&lt;/em&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;It’s not valid Atom. Note the first entry in the feed for instance. An Atom entry
has an id, a title, some content, an author, some links, maybe some categories, etc.
If the type of objects you want to represent does not also have those things, Atom
is not the right format to use.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;It only works with Atom. What about binary resources like Jpeg’s? I guess we could
base64 encode the binary data and stuff that into our invalid Atom entries but doing
so would suck.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;We can’t use Etag’s and conditional requests&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;I’m sure there are more reasons but these should be enough to convince you that &lt;font color=#ff0000&gt;a
better approach is needed.&lt;/font&gt;&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr&gt;
In a previous post I entitled&amp;nbsp;&lt;a href="http://www.25hoursaday.com/weblog/2007/10/10/OneProtocolToRuleThemAllAndInTheDarknessBindThem.aspx"&gt;One
Protocol to Rule Them All and in the Darkness Bind Them&lt;/a&gt;&amp;nbsp;I pointed out that
since the &lt;a href="http://tools.ietf.org/html/rfc5023"&gt;Atom Publishing Protocol&lt;/a&gt; is
not a good fit for interacting with data types that aren’t microcontent, it would
need to be embraced and extended to satisfy those needs. In addition, this leads to
problems because different vendors will embrace and extend it in different ways which
fragments interoperability. 
&lt;/p&gt;
&lt;p dir=ltr&gt;
An alternative approach would be for vendors to utilize protocols that are better
suited for the job instead of creating incompatible versions of a standard protocol.
However the response I’ve seen from various people is that it is better if we have
multiple &lt;em&gt;slightly incompatible&lt;/em&gt; implementations of a single standard than
multiple &lt;strong&gt;completely incompatible&lt;/strong&gt; proprietary technologies. I’ve taken
to calling this “&lt;em&gt;the &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/OpenDocument"&gt;&lt;em&gt;ODF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; vs. &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Office_Open_XML"&gt;&lt;em&gt;OOXML&lt;/em&gt;&lt;/a&gt;&lt;em&gt; lesson”&lt;/em&gt;.
This also explains why there was so much heat in the &lt;a href="http://www.news.com/2100-1032-5157662.html"&gt;RSS
vs. Atom debates&lt;/a&gt; but not so much when it came to debates over &lt;a href="http://dannyayers.com/2005/06/28/apple-itunes-podcasting/"&gt;Yahoo’s
podcasting extensions vs. Apple’s podcasting extensions&lt;/a&gt;&amp;nbsp;to RSS. 
&lt;/p&gt;
&lt;p dir=ltr&gt;
Let’s say we now take it as a&amp;nbsp;given that there will be multiple proprietary extensions
to a standard protocol and this is preferable to the alternative, what should we have
as the ground rules to ensure interoperability isn’t completely thrown out the windows?
A fundamental ground rule&amp;nbsp;should&amp;nbsp;be that vendors should actually provide
standards compliant implementations of the protocol before deciding to embrace and
extend it. That way clients and services that conform to the standard can interoperate
with them. In this regard, &lt;a href="http://code.google.com/apis/gdata/"&gt;GData&lt;/a&gt; falls
down horribly as James Snell points out. 
&lt;/p&gt;
&lt;p dir=ltr&gt;
Given that &lt;a href="http://googledataapis.blogspot.com/2007/10/posted-by-joe-gregorio-google-data-apis.html"&gt;Joe
Gregorio now works at Google&lt;/a&gt; and is a &lt;a href="http://www.ietf.org/rfc/rfc5023.txt"&gt;co-author
of RFC 5023&lt;/a&gt;, I assume it is just a matter of time before Google fixes this brokenness.
The only question is when? 
&lt;/p&gt;
&lt;p dir=ltr&gt;
&lt;strong&gt;PS:&lt;/strong&gt; Defining support for batch operations in a standard way is going
to be&amp;nbsp;rather difficult primarily because of how to deal with failure modes. The
fact that there is always &lt;a href="http://www.25hoursaday.com/weblog/2007/10/10/WhenDatabasesLieConsistencyVsAvailabilityInDistributedSystems.aspx"&gt;the
struggle between consistency and availability in distributed systems&lt;/a&gt; means that
some folks will want a failure in any of the batched operations to result in the equivalent
of a rollback while there are others that don’t care if one or two out of a batch&amp;nbsp;of
fifty operations fails. Then there are some folks in the middle for whom “it depends
on the context” for which kind of failure mode they want. &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Now playing:&lt;/strong&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Method Man"&gt;Method
Man&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Say (feat. Lauryn Hill)&amp;amp;artistTerm=Method Man"&gt;Say
(feat. Lauryn Hill)&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=08da3c3f-1c12-4887-85b7-aaa8ba1b3012" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,08da3c3f-1c12-4887-85b7-aaa8ba1b3012.aspx</comments>
      <category>Syndication Technology</category>
      <category>XML Web Services</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=aa5a212a-1006-4886-aaa1-f7ac62adef09</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,aa5a212a-1006-4886-aaa1-f7ac62adef09.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,aa5a212a-1006-4886-aaa1-f7ac62adef09.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=aa5a212a-1006-4886-aaa1-f7ac62adef09</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
With the hubbub now settling down down I decided to go back and try out <a href="http://pipes.yahoo.com">Yahoo!
Pipes</a>. For a while, I've wanted a feed for articles by <a href="http://www.huffingtonpost.com/chris-kelly/watching-the-submarine-ra_b_40833.html">Chris
Kelly</a> over on <a href="http://www.huffingtonpost.com/">Huffington Post</a> so
I decided to build that.  After a couple of false starts I created <a href="http://pipes.yahoo.com/pipes/9hXap4zG2xG5ndmfrscPhQ/run?_render=rss">the
feed</a> which currently doesn't have any items because there aren't any posts by
Chris Kelly in the Huffington Post feed. 
</p>
        <p>
Now that I've actually used the service I'm pretty surprised that anyone thinks that
this is a service that non-geeks will use. Programming with flowcharts to process
RSS feeds seems even geekier than <a href="http://www.startrekexp.com/index.php?p=what&amp;sloc=weddings">having
a Star Trek wedding</a> which was my previous bar for geekiest thing ever. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=aa5a212a-1006-4886-aaa1-f7ac62adef09" />
      </body>
      <title>Created my first Yahoo! Pipe</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,aa5a212a-1006-4886-aaa1-f7ac62adef09.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2007/02/27/CreatedMyFirstYahooPipe.aspx</link>
      <pubDate>Tue, 27 Feb 2007 18:15:07 GMT</pubDate>
      <description>&lt;p&gt;
With the hubbub now settling down down I decided to go back and try out &lt;a href="http://pipes.yahoo.com"&gt;Yahoo!
Pipes&lt;/a&gt;. For a while, I've wanted a feed for articles by &lt;a href="http://www.huffingtonpost.com/chris-kelly/watching-the-submarine-ra_b_40833.html"&gt;Chris
Kelly&lt;/a&gt; over on &lt;a href="http://www.huffingtonpost.com/"&gt;Huffington Post&lt;/a&gt; so
I decided to build that.&amp;nbsp; After a couple of false starts I created &lt;a href="http://pipes.yahoo.com/pipes/9hXap4zG2xG5ndmfrscPhQ/run?_render=rss"&gt;the
feed&lt;/a&gt; which currently doesn't have any items because there aren't any posts by
Chris Kelly in the Huffington Post feed. 
&lt;/p&gt;
&lt;p&gt;
Now that I've actually used the service I'm pretty surprised that anyone thinks that
this is a service that non-geeks will use. Programming with flowcharts to process
RSS feeds seems even geekier than &lt;a href="http://www.startrekexp.com/index.php?p=what&amp;amp;sloc=weddings"&gt;having
a Star Trek wedding&lt;/a&gt; which was my previous bar for geekiest thing ever. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=aa5a212a-1006-4886-aaa1-f7ac62adef09" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,aa5a212a-1006-4886-aaa1-f7ac62adef09.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=0f5a5e02-a301-4ef2-9da3-e434fd81bb83</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,0f5a5e02-a301-4ef2-9da3-e434fd81bb83.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,0f5a5e02-a301-4ef2-9da3-e434fd81bb83.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=0f5a5e02-a301-4ef2-9da3-e434fd81bb83</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While everyone else was raving about the fact that <a href="http://blogs.feedburner.com/feedburner/archives/2007/02/the_google_effect.php">Feedburner
can now count RSS subscribers coming from Google reader</a> I've been noticing that
there was another discrepancy in the Feedburner data that didn't seem to be accounted
for. Below is a screenshot of number of hits from Web browsers on my RSS feed 
</p>
        <img src="http://www.25hoursaday.com/weblog/content/binary/feedburner.JPG" border="0" />
        <p>
It seems pretty unlikely that people have clicked on my RSS feed over 5000 times today.
At first I thought <a href="http://www.feedburner.com/">Feedburner</a> was miscounting
feeds that had been subscribed from IE 7 but a quick look in <a href="http://www.fiddlertool.com/">Fiddler</a> shows
that IE 7 requests feeds using Windows-RSS-Platform as the User-Agent and is correctly
counted by <a href="http://www.feedburner.com">Feedburner</a>. 
</p>
        <p>
So I sent some mail to <a href="http://www.burningdoor.com/eric/">Eric Lunt</a> who's
a co-founder and the  CTO of <a href="http://www.feedburner.com">Feedburner</a> to
see if he knew what was wrong. He let me know that the problem is that <a href="http://www.microsoft.com/outlook/">Outlook
2007</a> doesn't identify itself in the User-Agent string and instead <i>pretends
to be Internet Explorer 7</i>. This means there is no way to separate out accesses
of your feed from <a href="http://www.microsoft.com/outlook/">Outlook 2007</a> from
people clicking on your feed in IE 7. 
</p>
        <p>
This seems like a fairly rookie mistake to ship in a bigtime product like Outlook.
I don't have the latest version installed so I can't confirm that this is truly the
case but if it is I hope they plan to fix this soon. It's really lame to not identify
your product correctly in the User-Agent string. 
<br />
... 
<br />
Oops. I should have done a search before sending out mail. It looks like this was
already covered in a blog post entitled <a href="http://blogs.msdn.com/michael_affronti/archive/2006/10/10/RSS-_2600_-the-user_2D00_agent-string.aspx">Outlook,
RSS, &amp; the user-agent string</a> by Michael Affronti who was the PM for RSS in
Outlook 2007. He wrote 
</p>
        <blockquote>
          <i>For Outlook 2007 we will unfortunately not be able to report any custom
user agent string for our RSS aggregation.  Due to the way we integrate with
IE across many parts of the application (the WININET stack is the underlying infrastructure
for all of Outlook’s internet communication), we cannot easily and safely change the
way we broadcast ourselves when connecting to external servers.  To do so would
require a fundamental change in the way the WININET stack is called from Outlook and
could affect all of the Office applications.  The scope of this fix is unfortunately
outside of what we can provide this release.</i>
        </blockquote>
        <p>
I guess this won't be fixed anytime soon, if ever. Anyway, I hope this post helps
out other users of <a href="http://www.feedburner.com/">Feedburner</a> who've also
been curious about their weird number of hits supposedly from IE 7.  
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=0f5a5e02-a301-4ef2-9da3-e434fd81bb83" />
      </body>
      <title>Why Feedburner Doesn't Count Outlook 2007 Subscribers</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,0f5a5e02-a301-4ef2-9da3-e434fd81bb83.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2007/02/19/WhyFeedburnerDoesntCountOutlook2007Subscribers.aspx</link>
      <pubDate>Mon, 19 Feb 2007 01:11:56 GMT</pubDate>
      <description>&lt;p&gt;
While everyone else was raving about the fact that &lt;a href="http://blogs.feedburner.com/feedburner/archives/2007/02/the_google_effect.php"&gt;Feedburner
can now count RSS subscribers coming from Google reader&lt;/a&gt; I've been noticing that
there was another discrepancy in the Feedburner data that didn't seem to be accounted
for. Below is a screenshot of number of hits from Web browsers on my RSS feed 
&lt;/p&gt;
&lt;img src="http://www.25hoursaday.com/weblog/content/binary/feedburner.JPG" border="0"&gt; 
&lt;p&gt;
It seems pretty unlikely that people have clicked on my RSS feed over 5000 times today.
At first I thought &lt;a href="http://www.feedburner.com/"&gt;Feedburner&lt;/a&gt; was miscounting
feeds that had been subscribed from IE 7 but a quick look in &lt;a href="http://www.fiddlertool.com/"&gt;Fiddler&lt;/a&gt; shows
that IE 7 requests feeds using Windows-RSS-Platform as the User-Agent and is correctly
counted by &lt;a href="http://www.feedburner.com"&gt;Feedburner&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
So I sent some mail to &lt;a href="http://www.burningdoor.com/eric/"&gt;Eric Lunt&lt;/a&gt; who's
a co-founder and the&amp;nbsp; CTO of &lt;a href="http://www.feedburner.com"&gt;Feedburner&lt;/a&gt; to
see if he knew what was wrong. He let me know that the problem is that &lt;a href="http://www.microsoft.com/outlook/"&gt;Outlook
2007&lt;/a&gt; doesn't identify itself in the User-Agent string and instead &lt;i&gt;pretends
to be Internet Explorer 7&lt;/i&gt;. This means there is no way to separate out accesses
of your feed from &lt;a href="http://www.microsoft.com/outlook/"&gt;Outlook 2007&lt;/a&gt; from
people clicking on your feed in IE 7. 
&lt;/p&gt;
&lt;p&gt;
This seems like a fairly rookie mistake to ship in a bigtime product like Outlook.
I don't have the latest version installed so I can't confirm that this is truly the
case but if it is I hope they plan to fix this soon. It's really lame to not identify
your product correctly in the User-Agent string. 
&lt;br&gt;
... 
&lt;br&gt;
Oops. I should have done a search before sending out mail. It looks like this was
already covered in a blog post entitled &lt;a href="http://blogs.msdn.com/michael_affronti/archive/2006/10/10/RSS-_2600_-the-user_2D00_agent-string.aspx"&gt;Outlook,
RSS, &amp;amp; the user-agent string&lt;/a&gt; by Michael Affronti who was the PM for RSS in
Outlook 2007. He wrote 
&lt;/p&gt;
&lt;blockquote&gt; &lt;i&gt;For Outlook 2007 we will unfortunately not be able to report any custom
user agent string for our RSS aggregation.&amp;nbsp; Due to the way we integrate with
IE across many parts of the application (the WININET stack is the underlying infrastructure
for all of Outlook’s internet communication), we cannot easily and safely change the
way we broadcast ourselves when connecting to external servers.&amp;nbsp; To do so would
require a fundamental change in the way the WININET stack is called from Outlook and
could affect all of the Office applications.&amp;nbsp; The scope of this fix is unfortunately
outside of what we can provide this release.&lt;/i&gt;&lt;/blockquote&gt; 
&lt;p&gt;
I guess this won't be fixed anytime soon, if ever. Anyway, I hope this post helps
out other users of &lt;a href="http://www.feedburner.com/"&gt;Feedburner&lt;/a&gt; who've also
been curious about their weird number of hits supposedly from IE 7.&amp;nbsp; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=0f5a5e02-a301-4ef2-9da3-e434fd81bb83" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,0f5a5e02-a301-4ef2-9da3-e434fd81bb83.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=258d634c-df5e-4420-a986-3e9d87a8f6da</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,258d634c-df5e-4420-a986-3e9d87a8f6da.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,258d634c-df5e-4420-a986-3e9d87a8f6da.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=258d634c-df5e-4420-a986-3e9d87a8f6da</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A couple of blogs I'm subscribed to are pimping the brand new <a href="http://pipes.yahoo.com/">Yahoo!
Pipes</a> which I unfortunately can't seem to access right now. You can read some
of the hype in blog posts like Jeremy Zawodny's <a href="http://jeremy.zawodny.com/blog/archives/008513.html">Yahoo!
Pipes: Unlocking the Data Web</a> and Tim O'Reilly's <a href="http://radar.oreilly.com/archives/2007/02/pipes_and_filte.html">Pipes
and Filters for the Internet</a> where it is described as "milestone in the history
of the internet". I'd have loved to try out the service giving my interest in mashups
and feed syndication but the site seems to be down or is just really, really slow. 
</p>
        <p>
As Dave Winer writes in his post <a href="http://stories.scripting.com/2007/02/08/pipesInvestigation.html">Pipes
Investigation</a></p>
        <blockquote>
          <p>
            <i>I see that Yahoo has a new web app, called <a href="http://pipes.yahoo.com/">Pipes</a>,
that looks to me like a feed construction kit. It takes RSS inputs, processes them
in ways that are specified by the user, and produces feeds as its output. 
<br />
... 
<br />
From a quick persual of the functionality last night and the fact that the server
isn't responding right now (5:45AM Pacific), it seems this app <font color="#ff0000">uses
lots of CPU on the server</font>. </i>
          </p>
        </blockquote>
        <p>
As someone who works on large scale online services for a living, Yahoo! Pipes seems
like a scary proposition. It combines providing a service that is known for causing
scale issues due to heavy I/O requirements (i.e. serving RSS feeds) with one that
is known for scaling issues due to heavy CPU <b>and </b>I/O requirements (i.e. user-defined
queries over rapidly changing data). I suspect that this combination of features makes <a href="http://pipes.yahoo.com/">Yahoo!
Pipes</a> resistant to popular caching techniques especially if the screenshot below
is any indication of the amount of flexibility [and thus processing power required]
that is given to users in creating queries. 
<br /></p>
        <img src="http://www.25hoursaday.com/weblog/content/binary/yahoopipe.JPG" border="0" />
        <p>
Really interesting idea though. I agree with Dave Winer that this is definitely fodder
for geeks and not the average Web user. After all, RSS still hasn't crossed the adoption
chasm with average Web users let alone an RSS feed remixing service. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=258d634c-df5e-4420-a986-3e9d87a8f6da" />
      </body>
      <title>The Problem with Web Scale: Yahoo! Pipes</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,258d634c-df5e-4420-a986-3e9d87a8f6da.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2007/02/08/TheProblemWithWebScaleYahooPipes.aspx</link>
      <pubDate>Thu, 08 Feb 2007 16:47:10 GMT</pubDate>
      <description>&lt;p&gt;
A couple of blogs I'm subscribed to are pimping the brand new &lt;a href="http://pipes.yahoo.com/"&gt;Yahoo!
Pipes&lt;/a&gt; which I unfortunately can't seem to access right now. You can read some
of the hype in blog posts like Jeremy Zawodny's &lt;a href="http://jeremy.zawodny.com/blog/archives/008513.html"&gt;Yahoo!
Pipes: Unlocking the Data Web&lt;/a&gt; and Tim O'Reilly's &lt;a href="http://radar.oreilly.com/archives/2007/02/pipes_and_filte.html"&gt;Pipes
and Filters for the Internet&lt;/a&gt; where it is described as "milestone in the history
of the internet". I'd have loved to try out the service giving my interest in mashups
and feed syndication but the site seems to be down or is just really, really slow. 
&lt;/p&gt;
&lt;p&gt;
As Dave Winer writes in his post &lt;a href="http://stories.scripting.com/2007/02/08/pipesInvestigation.html"&gt;Pipes
Investigation&lt;/a&gt; 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;I see that Yahoo has a new web app, called &lt;a href="http://pipes.yahoo.com/"&gt;Pipes&lt;/a&gt;,
that looks to me like a feed construction kit. It takes RSS inputs, processes them
in ways that are specified by the user, and produces feeds as its output. 
&lt;br&gt;
... 
&lt;br&gt;
From a quick persual of the functionality last night and the fact that the server
isn't responding right now (5:45AM Pacific), it seems this app &lt;font color="#ff0000"&gt;uses
lots of CPU on the server&lt;/font&gt;.&amp;nbsp;&lt;/i&gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
As someone who works on large scale online services for a living, Yahoo! Pipes seems
like a scary proposition. It combines providing a service that is known for causing
scale issues due to heavy I/O requirements (i.e. serving RSS feeds) with one that
is known for scaling issues due to heavy CPU &lt;b&gt;and &lt;/b&gt;I/O requirements (i.e. user-defined
queries over rapidly changing data). I suspect that this combination of features makes &lt;a href="http://pipes.yahoo.com/"&gt;Yahoo!
Pipes&lt;/a&gt; resistant to popular caching techniques especially if the screenshot below
is any indication of the amount of flexibility [and thus processing power required]
that is given to users in creating queries. 
&lt;br&gt;
&lt;/p&gt;
&lt;img src="http://www.25hoursaday.com/weblog/content/binary/yahoopipe.JPG" border="0"&gt; 
&lt;p&gt;
Really interesting idea though. I agree with Dave Winer that this is definitely fodder
for geeks and not the average Web user. After all, RSS still hasn't crossed the adoption
chasm with average Web users let alone an RSS feed remixing service. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=258d634c-df5e-4420-a986-3e9d87a8f6da" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,258d634c-df5e-4420-a986-3e9d87a8f6da.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=3931a573-fe78-4e23-8b1d-4a7c8568cefc</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,3931a573-fe78-4e23-8b1d-4a7c8568cefc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,3931a573-fe78-4e23-8b1d-4a7c8568cefc.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=3931a573-fe78-4e23-8b1d-4a7c8568cefc</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've noticed that some problems with viewing feeds of sites hosted on <a href="http://www.typepad.com">TypePad</a> for
the past few months in <a href="http://www.rssbandit.org">RSS Bandit</a>. The problem
was that every other post in a feed would display raw markup instead of correctly
rendered HTML. I decided to look into the problem this morning and tracked down the
problem. Take a look at <a href="http://blog.flickr.com/flickrblog/atom.xml">http://blog.flickr.com/flickrblog/atom.xml</a>.
Here are relevant excerpts from the feed 
</p>
        <blockquote>
          <pre>
            <code>
              <br />
              <font color="#ff0000">&lt;content <b>type="html"</b> xml:lang="en-ca" xml:base="http://blog.flickr.com/flickrblog/"&gt;</font>
              <br />
&amp;lt;div xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&amp;lt;p&amp;gt;&amp;&amp;nbsp;&amp;lt;/p&amp;gt;<br />
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://www.flickr.com/gift/&amp;quot;&amp;gt;&amp;lt;img
border=&amp;quot;0&amp;quot; src=&amp;quot;http://us.i1.yimg.com/us.yimg.com/i/ww/news/2006/12/12/gtfof.gif&amp;quot;
style=&amp;quot;padding-bottom: 6px;&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;<br />
&amp;lt;p&amp;gt;It&amp;#39;s now easier than ever to spread joy this holiday season
by giving the &amp;lt;a href=&amp;quot;http://www.flickr.com/gift/&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Gift
of Flickr&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt;. You can purchase a special activation
code that you can give to anyone, whether or not they have an existing Flickr account.
We&amp;#39;ve even created a special Gift Certificate card that you can print out
yourself, fold up and stuff in a stocking, under a tree or hidden away for after the
candles are lit (of course, you can also send the gift code in an email).&amp;lt;/p&amp;gt;<br /><br />
&amp;lt;p&amp;gt;And it&amp;#39;s even better to give the gift of Flickr since now
your recipients will get &amp;lt;a href=&amp;quot;http://www.flickr.com/help/limits/#28&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;unlimited
uploads&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt; — the two gigabyte monthly limit
is no more (&amp;lt;em&amp;gt;yep, pro users have no limits on how many photos they
can upload&amp;lt;/em&amp;gt;)! At the same time, we&amp;#39;ve upped the limit for
free account members as well, from &amp;lt;a href=&amp;quot;http://www.flickr.com/help/limits/#28&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;20MB
per month up to 100MB&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt; (yep, five times more)!&amp;lt;/p&amp;gt;<br /><br />
&amp;lt;p&amp;gt;The Flickr team also wants to take this opportunity to thank you
for a wonderful year and wish you and yours all the best of the season. Yay!&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;<br /><font color="#ff0000"><b>&lt;/content&gt;</b></font><br />
...<br /><font color="#008000">&lt;content <b>type="xhtml"</b> xml:lang="en-ca" xml:base="http://blog.flickr.com/flickrblog/"&gt;</font><br />
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/eye_spied/313572883/"
title="Photo Sharing"&gt;&lt;img width="500" height="357" border="0" src="http://static.flickr.com/117/313572883_8af0cddbc7.jpg"
alt="Dec 2 2006 208 copy" /&gt;&lt;/a&gt;&lt;/p&gt;<br /><br />
&lt;p&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/mrtwism/71294604/"&gt;&lt;img
width="500" height="375" border="0" alt="riding" src="http://static.flickr.com/34/71294604_b887c01815.jpg"
/&gt;&lt;/a&gt;&lt;/p&gt;<br /><br />
&lt;p&gt;See more photos in the &lt;a href="http://www.flickr.com/photos/tags/biggame/clusters/cal-berkeley-stanford/"&gt;"Berkeley,"
"Stanford," "big game" cluster&lt;/a&gt;.&lt;/p&gt;<br /><br />
&lt;p&gt;Photos from &lt;a href="http://www.flickr.com/photos/eye_spied/" title="Link
to caryniam's photos"&gt;caryniam&lt;/a&gt; and &lt;a title="Link to mrtwism's photos"
href="http://www.flickr.com/photos/mrtwism/"&gt;mrtwism&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;<br /><font color="#008000">&lt;/content&gt;</font><br /></code>
          </pre>
        </blockquote>
        <p>
So the first mystery is solved. The reason some posts look OK and some don't is that
for some reason TypePad seems to alternate between escaped HTML and well-formed XHTML
as the content of an entry in the feed. When the feed uses well-formed XHTML the item
looks fine but when it uses escaped HTML it looks like crap. The next question is
why the items aren't rendered correctly when escaped HTML is used. 
<br /></p>
        <p>
So I referred to <a href="http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html#rfc.section.3.1">section
3.1 of the Atom 0.3 specification</a> and saw the following 
</p>
        <blockquote>
          <h3>
            <a name="rfc.section.3.1.2">3.1.2</a>  "mode" Attribute 
</h3>
          <p>
            <a name="rfc.section.3.1.2.p.1">
            </a>Content constructs MAY have a "mode" attribute,
whose value indicates the method used to encode the content. When present, this attribute's
value MUST be listed below. If not present, its value MUST be considered to be "xml". 
</p>
          <p>
            <a name="rfc.section.3.1.2.p.2">
            </a>
          </p>
          <dl>
            <dt style="margin-top: 0.5em;">"xml": </dt>
            <dd>A mode attribute with the value "xml" indicates that the element's content is
inline xml (for example, namespace-qualified XHTML). 
</dd>
            <dt style="margin-top: 0.5em;">"escaped": </dt>
            <dd>A mode attribute with the value "escaped" indicates that the element's content
is an escaped string. Processors MUST unescape the element's content before considering
it as content of the indicated media type. 
</dd>
            <dt style="margin-top: 0.5em;">"base64": </dt>
            <dd>A mode attribute with the value "base64" indicates that the element's content
is base64-encoded <a href="http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html#RFC2045" title="Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies">[RFC2045]</a>.
Processors MUST decode the element's content before considering it as content of the
the indicated media type. 
</dd>
          </dl>
        </blockquote>
        <p>
To prevent aggregators from having to use their psychic powers to determine when an
item contains plain text or escaped HTML, the Atom folks introduced a <code>mode</code> attribute
that indicated whether the content should be treated as is or should be unescaped.
As you can see the default value for this is <b>not</b> "escaped". Since the TypePad
Atom feeds do not state that the HTML content is escaped then the aggregator is not
expected to unescape the content before rendering it. Second mystery solved. Buggy
feeds are the culprit.  
</p>
        <p>
Even though these feeds are broken it is probably faster for me to special case feeds
from<a href="http://www.typepad.com">TypePad</a> than trying to track down and convince
the folks at SixApart that this is a bug worth fixing. This issue will be fixed in
the next beta of the <i>Jubilee</i> release of <a href="http://www.rssbandit.org/">RSS
Bandit</a>.
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=3931a573-fe78-4e23-8b1d-4a7c8568cefc" />
      </body>
      <title>Issues with TypePad's Atom 0.3 Feeds</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,3931a573-fe78-4e23-8b1d-4a7c8568cefc.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/12/14/IssuesWithTypePadsAtom03Feeds.aspx</link>
      <pubDate>Thu, 14 Dec 2006 17:09:18 GMT</pubDate>
      <description>&lt;p&gt;
I've noticed that some problems with viewing feeds of sites hosted on &lt;a href="http://www.typepad.com"&gt;TypePad&lt;/a&gt; for
the past few months in &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt;. The problem
was that every other post in a feed would display raw markup instead of correctly
rendered HTML. I decided to look into the problem this morning and tracked down the
problem. Take a look at &lt;a href="http://blog.flickr.com/flickrblog/atom.xml"&gt;http://blog.flickr.com/flickrblog/atom.xml&lt;/a&gt;.
Here are relevant excerpts from the feed 
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre&gt;&lt;code&gt;
&lt;br&gt;
&lt;font color="#ff0000"&gt;&amp;lt;content &lt;b&gt;type="html"&lt;/b&gt; xml:lang="en-ca" xml:base="http://blog.flickr.com/flickrblog/"&amp;gt;&lt;/font&gt;
&lt;br&gt;
&amp;amp;lt;div xmlns=&amp;amp;quot;http://www.w3.org/1999/xhtml&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;amp;&amp;amp;nbsp;&amp;amp;lt;/p&amp;amp;gt;&lt;br&gt;
&amp;amp;lt;div style=&amp;amp;quot;text-align: center;&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;a href=&amp;amp;quot;http://www.flickr.com/gift/&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;img
border=&amp;amp;quot;0&amp;amp;quot; src=&amp;amp;quot;http://us.i1.yimg.com/us.yimg.com/i/ww/news/2006/12/12/gtfof.gif&amp;amp;quot;
style=&amp;amp;quot;padding-bottom: 6px;&amp;amp;quot; /&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;br&gt;
&amp;amp;lt;p&amp;amp;gt;It&amp;amp;#39;s now easier than ever to spread joy this holiday season
by giving the &amp;amp;lt;a href=&amp;amp;quot;http://www.flickr.com/gift/&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;Gift
of Flickr&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;. You can purchase a special activation
code that you can give to anyone, whether or not they have an existing Flickr account.
We&amp;amp;#39;ve even created a special Gift Certificate card that you can print out
yourself, fold up and stuff in a stocking, under a tree or hidden away for after the
candles are lit (of course, you can also send the gift code in an email).&amp;amp;lt;/p&amp;amp;gt;&lt;br&gt;
&lt;br&gt;
&amp;amp;lt;p&amp;amp;gt;And it&amp;amp;#39;s even better to give the gift of Flickr since now
your recipients will get &amp;amp;lt;a href=&amp;amp;quot;http://www.flickr.com/help/limits/#28&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;unlimited
uploads&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt; — the two gigabyte monthly limit
is no more (&amp;amp;lt;em&amp;amp;gt;yep, pro users have no limits on how many photos they
can upload&amp;amp;lt;/em&amp;amp;gt;)! At the same time, we&amp;amp;#39;ve upped the limit for
free account members as well, from &amp;amp;lt;a href=&amp;amp;quot;http://www.flickr.com/help/limits/#28&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;20MB
per month up to 100MB&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt; (yep, five times more)!&amp;amp;lt;/p&amp;amp;gt;&lt;br&gt;
&lt;br&gt;
&amp;amp;lt;p&amp;amp;gt;The Flickr team also wants to take this opportunity to thank you
for a wonderful year and wish you and yours all the best of the season. Yay!&amp;amp;lt;/p&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;br&gt;
&lt;font color="#ff0000"&gt;&lt;b&gt;&amp;lt;/content&amp;gt;&lt;/b&gt;&lt;/font&gt;
&lt;br&gt;
...&lt;br&gt;
&lt;font color="#008000"&gt;&amp;lt;content &lt;b&gt;type="xhtml"&lt;/b&gt; xml:lang="en-ca" xml:base="http://blog.flickr.com/flickrblog/"&amp;gt;&lt;/font&gt;
&lt;br&gt;
&amp;lt;div xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&amp;lt;p&amp;gt;&amp;lt;a href="http://www.flickr.com/photos/eye_spied/313572883/"
title="Photo Sharing"&amp;gt;&amp;lt;img width="500" height="357" border="0" src="http://static.flickr.com/117/313572883_8af0cddbc7.jpg"
alt="Dec 2 2006 208 copy" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br&gt;
&lt;br&gt;
&amp;lt;p&amp;gt;&amp;lt;a title="Photo Sharing" href="http://www.flickr.com/photos/mrtwism/71294604/"&amp;gt;&amp;lt;img
width="500" height="375" border="0" alt="riding" src="http://static.flickr.com/34/71294604_b887c01815.jpg"
/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br&gt;
&lt;br&gt;
&amp;lt;p&amp;gt;See more photos in the &amp;lt;a href="http://www.flickr.com/photos/tags/biggame/clusters/cal-berkeley-stanford/"&amp;gt;"Berkeley,"
"Stanford," "big game" cluster&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&lt;br&gt;
&lt;br&gt;
&amp;lt;p&amp;gt;Photos from &amp;lt;a href="http://www.flickr.com/photos/eye_spied/" title="Link
to caryniam's photos"&amp;gt;caryniam&amp;lt;/a&amp;gt; and &amp;lt;a title="Link to mrtwism's photos"
href="http://www.flickr.com/photos/mrtwism/"&amp;gt;mrtwism&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
&lt;font color="#008000"&gt;&amp;lt;/content&amp;gt;&lt;/font&gt;
&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So the first mystery is solved. The reason some posts look OK and some don't is that
for some reason TypePad seems to alternate between escaped HTML and well-formed XHTML
as the content of an entry in the feed. When the feed uses well-formed XHTML the item
looks fine but when it uses escaped HTML it looks like crap. The next question is
why the items aren't rendered correctly when escaped HTML is used. 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
So I referred to &lt;a href="http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html#rfc.section.3.1"&gt;section
3.1 of the Atom 0.3 specification&lt;/a&gt; and saw the following 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;h3&gt;&lt;a name="rfc.section.3.1.2"&gt;3.1.2&lt;/a&gt;&amp;nbsp; "mode" Attribute 
&lt;/h3&gt;
&lt;p&gt;
&lt;a name="rfc.section.3.1.2.p.1"&gt;&lt;/a&gt;Content constructs MAY have a "mode" attribute,
whose value indicates the method used to encode the content. When present, this attribute's
value MUST be listed below. If not present, its value MUST be considered to be "xml". 
&lt;/p&gt;
&lt;p&gt;
&lt;a name="rfc.section.3.1.2.p.2"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt style="margin-top: 0.5em;"&gt;"xml": &lt;/dt&gt;
&lt;dd&gt;A mode attribute with the value "xml" indicates that the element's content is
inline xml (for example, namespace-qualified XHTML). 
&lt;/dd&gt;
&lt;dt style="margin-top: 0.5em;"&gt;"escaped": &lt;/dt&gt;
&lt;dd&gt;A mode attribute with the value "escaped" indicates that the element's content
is an escaped string. Processors MUST unescape the element's content before considering
it as content of the indicated media type. 
&lt;/dd&gt;
&lt;dt style="margin-top: 0.5em;"&gt;"base64": &lt;/dt&gt;
&lt;dd&gt;A mode attribute with the value "base64" indicates that the element's content
is base64-encoded &lt;a href="http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html#RFC2045" title="Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies"&gt;[RFC2045]&lt;/a&gt;.
Processors MUST decode the element's content before considering it as content of the
the indicated media type. 
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
To prevent aggregators from having to use their psychic powers to determine when an
item contains plain text or escaped HTML, the Atom folks introduced a &lt;code&gt;mode&lt;/code&gt; attribute
that indicated whether the content should be treated as is or should be unescaped.
As you can see the default value for this is &lt;b&gt;not&lt;/b&gt; "escaped". Since the TypePad
Atom feeds do not state that the HTML content is escaped then the aggregator is not
expected to unescape the content before rendering it. Second mystery solved. Buggy
feeds are the culprit.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Even though these feeds are broken it is probably faster for me to special case feeds
from&lt;a href="http://www.typepad.com"&gt;TypePad&lt;/a&gt; than trying to track down and convince
the folks at SixApart that this is a bug worth fixing. This issue will be fixed in
the next beta of the &lt;i&gt;Jubilee&lt;/i&gt; release of &lt;a href="http://www.rssbandit.org/"&gt;RSS
Bandit&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=3931a573-fe78-4e23-8b1d-4a7c8568cefc" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,3931a573-fe78-4e23-8b1d-4a7c8568cefc.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=e3ea99a1-57e1-48cd-8545-91100755386d</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,e3ea99a1-57e1-48cd-8545-91100755386d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,e3ea99a1-57e1-48cd-8545-91100755386d.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=e3ea99a1-57e1-48cd-8545-91100755386d</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Shelley Powers has a good pair of posts critical of <a href="http://www.techmeme.com">TechMeme</a>,
a technology <a href="http://mashable.com/2006/02/03/the-rise-of-the-memetrackers/">meme-tracker</a>.
In her post entitled <a href="http://just.shelleypowers.com/technology/techmeme-tells-us-to-feed-the-daddy">Techmeme
tells us to Feed the Daddy</a> she writes
</p>
        <blockquote>
          <p>
            <i>Techmeme heard the recent discussion about sites not appearing, and responds with
a post (at http://blog.memeorandum.com/061115/how-to-show-up) on how to show up on
techmeme. The money shot:</i>
          </p>
          <blockquote>
            <p>
              <i>Early on I noticed my system occasionally missed good posts from blogs that link
back to my sites. So recently I extended my system to take referrals into account. <b>Now
if your blog or news article sends a moderate level of traffic to one of my sites,
it will be evaluated for inclusion.</b> Linking certainly doesn't guarantee you'll
appear, since all posts are run though the usual tests for newsworthiness. In fact,
extra steps to avoid spam are now in effect since faked referrals and splogs are already
commonplace. So in summary, sending memeorandum (or Techmeme or…) visitors is another
way to "enable discovery of your post". </i>
            </p>
          </blockquote>
          <i>In other words, if you puff up Gabe Riviera's empire, giving it lots
of Google rank, as well as do all the marketing for him (such as techmeme's primary
gatekeeper, Scoble, for whom Riviera sends special love and kisses), you might be
able to 'buy' your way into being listed.</i>
        </blockquote> I'm not sure what the goals
of TechMeme are but it seems rather weird to use link exchange as a mechanism for
getting sites into TechMeme's index. I doubt that will improve the 'quality' of the
service and instead seems like a rather tacky 'scratch-my-back-and-I'll-scratch-yours"
ploy. If the intent is to determine if the site has enough traffic to be worth including,
why not look at its <a href="http://www.alexa.com">Alexa</a> statistics or <a href="http://www.technorati.com">Technorati</a> rank
[as flawed as they are] instead of requesting a tit-for-tat link exchange? I think
Gabe got some bad advice there. 
<p>
In her followup post entitled <a href="http://just.shelleypowers.com/technology/feed-your-daddy-follow-up/">Feed
your Daddy Follow-up</a>, Shelley adds 
</p><blockquote><p><i>I wouldn't 'fix' Techmeme. What I would like to see is a growth in sites that provide
topic aggregations, each using its own metrics and filtering algorithms. The more
of these there are, the more likely we'll see a more fair distribution of attention,
as well as a greater variety of stories, and <a href="http://www.searchmarketinggurus.com/search_marketing_gurus/2006/11/techmeme_feed_m.html">more
timely ones at that</a>. In history, a way to discover an unbiased view of a fact
or an event is to seek out at least three separate sources of information. The same
can be said of topic aggregators. More than three; I'd actually like to see at least
five.</i></p><p><i>One of the biggest problems with Techmeme is that it is asserted to be the 'ultimate
authority' on what are the top stories in technology (or politics for Memeorandum).
Yet according to it, 30% of us spend all of our time talking about Google, 10% of
us discuss new startup funding, 10% talk about Microsoft, how it is, or is not clued;
probably about 15% of us talk about some variation of gadget, typically iPod and now
Zune; the rest talk about Techcrunch, Scoble, Second Life, or Techcrunch and Scoble <em>in</em> a
Second Life. I could go on, but the point is that Techmeme is based more or less on
seeded terms and seeded webloggers, and it can't shake that influence. As such, it
provides an incredibly skewed look at the tech area of weblogging–completely ignoring
most of what is truly technology. </i></p><i>Techmeme serves a purpose for those who are into Google and VC and San Francisco
and startups and money, and Michael Arrington and Calacanis, and Scoble and the scene
there, and that's fine. But that doesn't make it an authority on what's important,
interesting, or even timely.</i></blockquote><p>
As usual Shelley hits the nail on the head. <a href="http://www.techmeme.com/">TechMeme</a> is
good at what it does, gathering the popular or interesting links among the Silicon
Valley blogger crowd. However this is just one particular view into the technology
industry and specifically the technology blogosphere. Most of the content isn't particularly
relevant if you aren't a regular reader of sites like <a href="http://www.techcrunch.com">TechCrunch</a> and <a href="http://scobleizer.wordpress.com">Robert
Scoble's blog</a>.
</p><p>
Me, I personally would prefer a meme tracker that was heavy on bloggers like <a href="http://intertwingly.net/blog/">Sam
Ruby</a>, <a href="http://www.tbray.org/ongoing/">Tim Bray</a> and <a href="http://weblog.infoworld.com/udell/">Jon
Udell</a> instead of the large number of PR hacks and VCs that populate <a href="http://www.techmeme.com/">TechMeme</a>.
Where I disagree with Shelley is that I don't think the answer is more meme trackers
each with their own bias yet which will likely overlap significantly. We already have
that today, if you read sites like <a href="http://www.techmeme.com/">TechMeme</a>, <a href="http://www.tailrank.com/">TailRank</a> and <a href="http://www.megite.com/index.php?section=technology">Megite</a>.
I think the future is in personalization and not more news aggregator whose bias you
can't control. 
</p><img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=e3ea99a1-57e1-48cd-8545-91100755386d" /></body>
      <title>Shelley Powers on the Problem with TechMeme</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,e3ea99a1-57e1-48cd-8545-91100755386d.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/11/16/ShelleyPowersOnTheProblemWithTechMeme.aspx</link>
      <pubDate>Thu, 16 Nov 2006 23:43:15 GMT</pubDate>
      <description>&lt;p&gt;
Shelley Powers has a good pair of posts critical of &lt;a href="http://www.techmeme.com"&gt;TechMeme&lt;/a&gt;,
a technology &lt;a href="http://mashable.com/2006/02/03/the-rise-of-the-memetrackers/"&gt;meme-tracker&lt;/a&gt;.
In her post entitled &lt;a href="http://just.shelleypowers.com/technology/techmeme-tells-us-to-feed-the-daddy"&gt;Techmeme
tells us to Feed the Daddy&lt;/a&gt; she writes
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;Techmeme heard the recent discussion about sites not appearing, and responds with
a post (at http://blog.memeorandum.com/061115/how-to-show-up) on how to show up on
techmeme. The money shot:&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;Early on I noticed my system occasionally missed good posts from blogs that link
back to my sites. So recently I extended my system to take referrals into account. &lt;b&gt;Now
if your blog or news article sends a moderate level of traffic to one of my sites,
it will be evaluated for inclusion.&lt;/b&gt; Linking certainly doesn't guarantee you'll
appear, since all posts are run though the usual tests for newsworthiness. In fact,
extra steps to avoid spam are now in effect since faked referrals and splogs are already
commonplace. So in summary, sending memeorandum (or Techmeme or…) visitors is another
way to "enable discovery of your post". &lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; &lt;i&gt;In other words, if you puff up Gabe Riviera's empire, giving it lots
of Google rank, as well as do all the marketing for him (such as techmeme's primary
gatekeeper, Scoble, for whom Riviera sends special love and kisses), you might be
able to 'buy' your way into being listed.&lt;/i&gt;&lt;/blockquote&gt; I'm not sure what the goals
of TechMeme are but it seems rather weird to use link exchange as a mechanism for
getting sites into TechMeme's index. I doubt that will improve the 'quality' of the
service and instead seems like a rather tacky 'scratch-my-back-and-I'll-scratch-yours"
ploy. If the intent is to determine if the site has enough traffic to be worth including,
why not look at its &lt;a href="http://www.alexa.com"&gt;Alexa&lt;/a&gt; statistics or &lt;a href="http://www.technorati.com"&gt;Technorati&lt;/a&gt; rank
[as flawed as they are] instead of requesting a tit-for-tat link exchange? I think
Gabe got some bad advice there. 
&lt;p&gt;
In her followup post entitled &lt;a href="http://just.shelleypowers.com/technology/feed-your-daddy-follow-up/"&gt;Feed
your Daddy Follow-up&lt;/a&gt;, Shelley adds 
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;I wouldn't 'fix' Techmeme. What I would like to see is a growth in sites that provide
topic aggregations, each using its own metrics and filtering algorithms. The more
of these there are, the more likely we'll see a more fair distribution of attention,
as well as a greater variety of stories, and &lt;a href="http://www.searchmarketinggurus.com/search_marketing_gurus/2006/11/techmeme_feed_m.html"&gt;more
timely ones at that&lt;/a&gt;. In history, a way to discover an unbiased view of a fact
or an event is to seek out at least three separate sources of information. The same
can be said of topic aggregators. More than three; I'd actually like to see at least
five.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;One of the biggest problems with Techmeme is that it is asserted to be the 'ultimate
authority' on what are the top stories in technology (or politics for Memeorandum).
Yet according to it, 30% of us spend all of our time talking about Google, 10% of
us discuss new startup funding, 10% talk about Microsoft, how it is, or is not clued;
probably about 15% of us talk about some variation of gadget, typically iPod and now
Zune; the rest talk about Techcrunch, Scoble, Second Life, or Techcrunch and Scoble &lt;em&gt;in&lt;/em&gt; a
Second Life. I could go on, but the point is that Techmeme is based more or less on
seeded terms and seeded webloggers, and it can't shake that influence. As such, it
provides an incredibly skewed look at the tech area of weblogging–completely ignoring
most of what is truly technology. &lt;/i&gt;
&lt;/p&gt;
&lt;i&gt;Techmeme serves a purpose for those who are into Google and VC and San Francisco
and startups and money, and Michael Arrington and Calacanis, and Scoble and the scene
there, and that's fine. But that doesn't make it an authority on what's important,
interesting, or even timely.&lt;/i&gt; &lt;/blockquote&gt; 
&lt;p&gt;
As usual Shelley hits the nail on the head. &lt;a href="http://www.techmeme.com/"&gt;TechMeme&lt;/a&gt; is
good at what it does, gathering the popular or interesting links among the Silicon
Valley blogger crowd. However this is just one particular view into the technology
industry and specifically the technology blogosphere. Most of the content isn't particularly
relevant if you aren't a regular reader of sites like &lt;a href="http://www.techcrunch.com"&gt;TechCrunch&lt;/a&gt; and &lt;a href="http://scobleizer.wordpress.com"&gt;Robert
Scoble's blog&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Me, I personally would prefer a meme tracker that was heavy on bloggers like &lt;a href="http://intertwingly.net/blog/"&gt;Sam
Ruby&lt;/a&gt;, &lt;a href="http://www.tbray.org/ongoing/"&gt;Tim Bray&lt;/a&gt; and &lt;a href="http://weblog.infoworld.com/udell/"&gt;Jon
Udell&lt;/a&gt; instead of the large number of PR hacks and VCs that populate &lt;a href="http://www.techmeme.com/"&gt;TechMeme&lt;/a&gt;.
Where I disagree with Shelley is that I don't think the answer is more meme trackers
each with their own bias yet which will likely overlap significantly. We already have
that today, if you read sites like &lt;a href="http://www.techmeme.com/"&gt;TechMeme&lt;/a&gt;, &lt;a href="http://www.tailrank.com/"&gt;TailRank&lt;/a&gt; and &lt;a href="http://www.megite.com/index.php?section=technology"&gt;Megite&lt;/a&gt;.
I think the future is in personalization and not more news aggregator whose bias you
can't control. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=e3ea99a1-57e1-48cd-8545-91100755386d" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,e3ea99a1-57e1-48cd-8545-91100755386d.aspx</comments>
      <category>Social Software</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=dbdf11c1-d575-4ed3-8050-dad341f61283</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,dbdf11c1-d575-4ed3-8050-dad341f61283.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,dbdf11c1-d575-4ed3-8050-dad341f61283.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=dbdf11c1-d575-4ed3-8050-dad341f61283</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had some DNS issues last week because I forgot to renew my domain name registration.
According to my <a href="http://www.feedburner.com/fb/a/home">FeedBurner</a> statistics
page, one of the consequences of this lapse on my part is that I've lost about 1,000
subscribers to my feed on <a href="http://www.rojo.com">Rojo</a>. It looks like they
may have decommissioned my feed in their service once the domain name stopped resolving
after a couple of hours. This seems like a reasonable thing to do. 
</p>
        <p>
I've sent some mail to the <a href="http://www.rojo.com/">Rojo</a> folks through their
feedback email address but don't hold out much for ever getting a response. It may
be that there is nothing for them to fix since the relationship between my feed and
the subscribers may have been deleted from their database once my domain was considered
to be gone. 
<br /></p>
        <p>
Anyway, if you are a <a href="http://www.rojo.com/">Rojo</a> user wondering why my
feed disappeared from you subscription list, now you know.  
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=dbdf11c1-d575-4ed3-8050-dad341f61283" />
      </body>
      <title>Lost All My Rojo Subscribers</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,dbdf11c1-d575-4ed3-8050-dad341f61283.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/10/30/LostAllMyRojoSubscribers.aspx</link>
      <pubDate>Mon, 30 Oct 2006 14:38:42 GMT</pubDate>
      <description>&lt;p&gt;
I had some DNS issues last week because I forgot to renew my domain name registration.
According to my &lt;a href="http://www.feedburner.com/fb/a/home"&gt;FeedBurner&lt;/a&gt; statistics
page, one of the consequences of this lapse on my part is that I've lost about 1,000
subscribers to my feed on &lt;a href="http://www.rojo.com"&gt;Rojo&lt;/a&gt;. It looks like they
may have decommissioned my feed in their service once the domain name stopped resolving
after a couple of hours. This seems like a reasonable thing to do. 
&lt;/p&gt;
&lt;p&gt;
I've sent some mail to the &lt;a href="http://www.rojo.com/"&gt;Rojo&lt;/a&gt; folks through their
feedback email address but don't hold out much for ever getting a response. It may
be that there is nothing for them to fix since the relationship between my feed and
the subscribers may have been deleted from their database once my domain was considered
to be gone. 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Anyway, if you are a &lt;a href="http://www.rojo.com/"&gt;Rojo&lt;/a&gt; user wondering why my
feed disappeared from you subscription list, now you know.&amp;nbsp; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=dbdf11c1-d575-4ed3-8050-dad341f61283" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,dbdf11c1-d575-4ed3-8050-dad341f61283.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=6b921702-5c78-4d80-8ecf-c9ba483fb531</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,6b921702-5c78-4d80-8ecf-c9ba483fb531.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,6b921702-5c78-4d80-8ecf-c9ba483fb531.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=6b921702-5c78-4d80-8ecf-c9ba483fb531</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Tim Bray has a blog post entitled <a href="http://www.tbray.org/ongoing/When/200x/2006/10/06/On-Comments" title="On Comments">On
Comments</a> where he writes
</p>
        <blockquote>
          <p>
            <i>I’ve had comments running for a few days here now (I prefer to say “contributions”,
but whatever). People are irritated at me because an <span class="o">ongoing</span> fragment
shows up as unread in their feed-reader whenever a new comment comes in. I’m not sure
what the right thing to do is. This piece outlines a few options and asks the community
for discussion.</i>
          </p>
        </blockquote>
        <p>
This is one of the reasons I've given about disliking the <code>atom:updated</code> element
in blog posts like <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=47aefdfb-5e9a-4cac-8de6-4caea21dab06%20">Indicating
Updated Items in RSS Bandit</a>. It should be up to the user to decide what count
as 'significant' updates that warrant marking the item as changed or new in the user
interface, not the publisher. Tim thinks that new comments in a blog post should lead
to the reader being notified by their aggregator, I think this should only be the
case when the user has explicitly opted in for notifications on changed new comments.
This doesn't extend to updates because the definition of what counts as a 'significant'
update is going to vary from publisher to publisher and from user to user. 
<br /></p>
        <p>
My advice to Tim is to  use the <a href="http://ietfreport.isoc.org/all-ids/draft-snell-atompub-feed-thread-12.txt">Atom
threading extensions</a> which provides explicit mechanisms for indicating changes
to the number of comments and provides a way to link to comment feeds as opposed to
hacks like changing the value of <code>atom:updated</code> or putting the comments
into the <code>atom:content</code> of the entry. Those both sound like recipes for
a negative user experience when reading his blog in many aggregators. 
</p>
        <p>
The title of this blog post is probably harsher than I intend. I think it is useful
to have a last modified date in the form of <code>atom:updated</code> on items in
a feed. What I disagree with is impacting the user experience based on changes to
that element. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=6b921702-5c78-4d80-8ecf-c9ba483fb531" />
      </body>
      <title>Why I Don't Like atom:updated</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,6b921702-5c78-4d80-8ecf-c9ba483fb531.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/10/07/WhyIDontLikeAtomupdated.aspx</link>
      <pubDate>Sat, 07 Oct 2006 01:33:42 GMT</pubDate>
      <description>&lt;p&gt;
Tim Bray has a blog post entitled &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/10/06/On-Comments" title="On Comments"&gt;On
Comments&lt;/a&gt; where he writes
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;I’ve had comments running for a few days here now (I prefer to say “contributions”,
but whatever). People are irritated at me because an &lt;span class="o"&gt;ongoing&lt;/span&gt; fragment
shows up as unread in their feed-reader whenever a new comment comes in. I’m not sure
what the right thing to do is. This piece outlines a few options and asks the community
for discussion.&lt;/i&gt; 
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
This is one of the reasons I've given about disliking the &lt;code&gt;atom:updated&lt;/code&gt; element
in blog posts like &lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=47aefdfb-5e9a-4cac-8de6-4caea21dab06%20"&gt;Indicating
Updated Items in RSS Bandit&lt;/a&gt;. It should be up to the user to decide what count
as 'significant' updates that warrant marking the item as changed or new in the user
interface, not the publisher. Tim thinks that new comments in a blog post should lead
to the reader being notified by their aggregator, I think this should only be the
case when the user has explicitly opted in for notifications on changed new comments.
This doesn't extend to updates because the definition of what counts as a 'significant'
update is going to vary from publisher to publisher and from user to user. 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
My advice to Tim is to&amp;nbsp; use the &lt;a href="http://ietfreport.isoc.org/all-ids/draft-snell-atompub-feed-thread-12.txt"&gt;Atom
threading extensions&lt;/a&gt; which provides explicit mechanisms for indicating changes
to the number of comments and provides a way to link to comment feeds as opposed to
hacks like changing the value of &lt;code&gt;atom:updated&lt;/code&gt; or putting the comments
into the &lt;code&gt;atom:content&lt;/code&gt; of the entry. Those both sound like recipes for
a negative user experience when reading his blog in many aggregators. 
&lt;/p&gt;
&lt;p&gt;
The title of this blog post is probably harsher than I intend. I think it is useful
to have a last modified date in the form of &lt;code&gt;atom:updated&lt;/code&gt; on items in
a feed. What I disagree with is impacting the user experience based on changes to
that element. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=6b921702-5c78-4d80-8ecf-c9ba483fb531" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,6b921702-5c78-4d80-8ecf-c9ba483fb531.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=9428449e-c5da-4dba-b2a5-d2c67734c359</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,9428449e-c5da-4dba-b2a5-d2c67734c359.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,9428449e-c5da-4dba-b2a5-d2c67734c359.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=9428449e-c5da-4dba-b2a5-d2c67734c359</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Niall Kennedy has a blog post entitled <a href="http://www.niallkennedy.com/blog/archives/2006/09/authenticated-private-feeds.html" title="Authenticated and private feeds">Authenticated
and private feeds</a> where he writes
</p>
        <blockquote>
          <p>
            <i>Examples of private feeds intended for 1:1 communication include bank balances,
e-mail notifications, project status, and the latest bids on that big contract. Data
in the wrong hands could be dangerous, and many companies will stay away from the
feed syndication space until they feel their users' personal data is secure.</i>
          </p>
          <p>
            <i>A private feed's data could be exposed in a variety of ways. A desktop aggregator's
feed content might be available to other users on the same computer, either through
directory access or desktop search. An online aggregator might expose a feed and its
content in search results or a preview mode.</i>
            <br />
...<br /><i>A feed publisher could whitelist the user-agents it knows comply with its access
policies. <acronym title="secure socket layer">SSL</acronym> encryption might not
be a bad idea either as shared aggregation spaces might not store content requested
over HTTPS. It would place extra load on the server as each request requires extra
processing, but if the alternative is placing your customer's data in the Yahoo! search
index then that's not such a bad thing.</i></p>
          <p>
            <i>I believe large publishers such as <a href="http://www.salesforce.com/">Salesforce.com</a> or <a href="http://www.ebay.com/">eBay</a> would
produce more feed content if they knew their customers' data was kept private and
secure. There's a definite demand for more content transmitted over feed syndication
formats but it will take the cooperation and collaboration of security formats and
consistent aggregation practices to really move the needle in the right direction.</i>
          </p>
        </blockquote>
        <p>
How to properly support private and authenticated feeds is a big problem which Niall
highlights but fails to go into much detail on why it is hard. The main problem is
that the sites providing the feed have to be sure that the application consuming the
feed is secure. At the end of the day, can <a href="http://www.bankofamerica.com">Bank
of America</a> trust that <a href="http://www.rssbandit.org">RSS Bandit</a> or <a href="http://www.bloglines.com">Bloglines</a> is
doing a good job of adequately protecting the feed from spyware or malicious hackers? 
</p>
        <p>
More importantly, even <b>if </b>they certify these applications in some way how can
they verify that the applications are the ones accessing the feed? Niall mentions
white listing user agents but those are trivial to spoof. With Web-based readers,
one can whitelist their IP range but there isn't a good way to verify that the desktop
application accessing your web server is really who the user agent string says it
is. 
</p>
        <p>
This seems to be yet another example of where Web-based software trumps desktop software. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=9428449e-c5da-4dba-b2a5-d2c67734c359" />
      </body>
      <title>Niall Kennedy on Private and Authenticated Feeds </title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,9428449e-c5da-4dba-b2a5-d2c67734c359.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/09/18/NiallKennedyOnPrivateAndAuthenticatedFeeds.aspx</link>
      <pubDate>Mon, 18 Sep 2006 17:10:13 GMT</pubDate>
      <description>&lt;p&gt;
Niall Kennedy has a blog post entitled &lt;a href="http://www.niallkennedy.com/blog/archives/2006/09/authenticated-private-feeds.html" title="Authenticated and private feeds"&gt;Authenticated
and private feeds&lt;/a&gt; where he writes
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;Examples of private feeds intended for 1:1 communication include bank balances,
e-mail notifications, project status, and the latest bids on that big contract. Data
in the wrong hands could be dangerous, and many companies will stay away from the
feed syndication space until they feel their users' personal data is secure.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;A private feed's data could be exposed in a variety of ways. A desktop aggregator's
feed content might be available to other users on the same computer, either through
directory access or desktop search. An online aggregator might expose a feed and its
content in search results or a preview mode.&lt;/i&gt;
&lt;br&gt;
...&lt;br&gt;
&lt;i&gt;A feed publisher could whitelist the user-agents it knows comply with its access
policies. &lt;acronym title="secure socket layer"&gt;SSL&lt;/acronym&gt; encryption might not
be a bad idea either as shared aggregation spaces might not store content requested
over HTTPS. It would place extra load on the server as each request requires extra
processing, but if the alternative is placing your customer's data in the Yahoo! search
index then that's not such a bad thing.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;I believe large publishers such as &lt;a href="http://www.salesforce.com/"&gt;Salesforce.com&lt;/a&gt; or &lt;a href="http://www.ebay.com/"&gt;eBay&lt;/a&gt; would
produce more feed content if they knew their customers' data was kept private and
secure. There's a definite demand for more content transmitted over feed syndication
formats but it will take the cooperation and collaboration of security formats and
consistent aggregation practices to really move the needle in the right direction.&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
How to properly support private and authenticated feeds is a big problem which Niall
highlights but fails to go into much detail on why it is hard. The main problem is
that the sites providing the feed have to be sure that the application consuming the
feed is secure. At the end of the day, can &lt;a href="http://www.bankofamerica.com"&gt;Bank
of America&lt;/a&gt; trust that &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt; or &lt;a href="http://www.bloglines.com"&gt;Bloglines&lt;/a&gt; is
doing a good job of adequately protecting the feed from spyware or malicious hackers? 
&lt;/p&gt;
&lt;p&gt;
More importantly, even &lt;b&gt;if &lt;/b&gt;they certify these applications in some way how can
they verify that the applications are the ones accessing the feed? Niall mentions
white listing user agents but those are trivial to spoof. With Web-based readers,
one can whitelist their IP range but there isn't a good way to verify that the desktop
application accessing your web server is really who the user agent string says it
is. 
&lt;/p&gt;
&lt;p&gt;
This seems to be yet another example of where Web-based software trumps desktop software. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=9428449e-c5da-4dba-b2a5-d2c67734c359" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,9428449e-c5da-4dba-b2a5-d2c67734c359.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=4a8c6fe3-9f2d-4fd3-9f8b-6c9c33b8a6f8</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,4a8c6fe3-9f2d-4fd3-9f8b-6c9c33b8a6f8.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,4a8c6fe3-9f2d-4fd3-9f8b-6c9c33b8a6f8.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=4a8c6fe3-9f2d-4fd3-9f8b-6c9c33b8a6f8</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Gabe Rivera, author of <a href="http://www.techmeme.com">Techmeme</a>, has a blog
post entitled <a href="http://efuddle.com/2006/09/04-18:31#20060904-18:31">Why I don't
offer a personal filter</a> where he writes 
</p>
        <blockquote>
          <p>
            <i>I'm facing another round of inquiries on personal filtering, mostly from Techmeme
fans who've read <a href="http://ross.typepad.com/blog/2006/09/between_popular.html">Ross
Mayfield's</a> or <a href="PermaLink.aspx?guid=a7412a5a-1576-4109-85f8-076defa2bf91">Dare
Obasanjo's</a><a href="http://blog.softtechvc.com/2005/09/more_thoughts_o.html">Jeff
Clavier</a> and <a href="http://www.sauria.com/blog/2005/09/22">Ted Leung</a> nearly
a year ago!)</i> recent thoughts on the matter. (Just for the record, the first round
included requests from 
</p>
          <p>
            <i>Why don't I offer a personal filter service aka "meMeme" aka "my.memeorandum"?
Briefly, filters based on the editorial approach used for Techmeme/memeorandum don't
work well outside of a few topic domains (like politics and tech), because cross linking
is typically too sparse to produce a compelling mix of news. Sam Ruby <a href="http://www.intertwingly.net/blog/2006/09/03/MeMeme">unintentionally
confirmed</a> this yesterday should you pause to consider what sort of daily news
selection could be derived from his <a href="http://intertwingly.net/stories/2006/09/03/meMeme.out">Venus
output</a>. While it's true that cross linking is dense in some blogospheres, these
are largely the same domains already covered by my existing sites.</i>
          </p>
          <p>
            <i>Why not try editorial approaches based on new kinds of semantic analyses? My belief
is that the requisite technology is harder than anything powering Google News, Topix,
or my current sites. Attempts based on current technologies come up woefully short,
with the resulting "Daily Me" consisting of a seemingly random mix of content missing
most or all "must have" articles and posts. And having the "must haves" is essential
for winning the earlier adopter types that would dominate the userbase of such a filter
in the first place.</i>
          </p>
        </blockquote>
        <p>
I reread the output from Sam's blogroll and it reminded me that there is a difference
between the scenarios that sites like <a href="http://www.techmeme.com">Techmeme</a> and <a href="http://www.tailrank.com">Tailrank</a> are
interested in and the goals of a personalized meme tracker. Here are a copuple of
questions to get you started on understanding the differences in implementation choices
one might make between implementing a personalized meme tracker vs. a topic specific
memetracker, 
<br /></p>
        <ol>
          <li>
            <p>
Q: How do you deal with "noise" links such as <a href="http://del.icio.us/tag/rest">http://del.icio.us/tag/rest</a> or <a href="http://www.technorati.com/tag/AJAX">http://www.technorati.com/tag/AJAX</a> which
may be common in the feeds the user is interested in? 
</p>
            <p>
A: In both cases, it would seem the first step is to hard code the application to
understand certain kinds of links as "noise". The interesting question is how to deal
with the introduction of new types of "noise" links to the ecosystem. A web-based
application may be easily updated as new "noisy" links enter the system but things
are a bit more difficult for a desktop application. Perhaps allowing users to nominate
certain classes of links as noise? 
</p>
          </li>
          <li>
            <p>
Q: What 'class' of news items or blog posts should be used in evaluating what is [currently]
popular? 
</p>
            <p>
A: It is quite obvious that simply using the entirety of the posts from a particular
feed to calculate a links popularity is flawed. Using that metric, I suspect that
links such as <a href="http://adaptivepath.com/publications/essays/archives/000385.php">http://adaptivepath.com/publications/essays/archives/000385.php</a> or <a href="http://scobleizer.wordpress.com/2006/06/10/correcting-the-record-about-microsoft/">http://scobleizer.wordpress.com/2006/06/10/correcting-the-record-about-microsoft/</a> would
always be the most popular links from my blogroll. Using a specific date or time range
(e.g. over the past 24-48 hours) seems to be what sites such as <a href="http://www.techmeme.com/">Techmeme</a> and <a href="http://www.tailrank.com/">Tailrank</a> seem
to do. An aggregator such as <a href="http://www.rssbandit.org">RSS Bandit</a> or <a href="http://www.newsgator.com/NGOLProduct.aspx?ProdId=FeedDemon">FeedDemon</a> may
use other techniques such as only using 'unread' items to calculate currently popular
topics. 
</p>
          </li>
          <li>
            <p>
Q: How do you deal with link blogs?
</p>
            <p>
A: A number of people in my blogroll have blog posts that are basically a repost of
al the links they have posted to <a href="http://del.icio.us">del.icio.us</a> that
day (e.g. <a href="http://www.redmonk.com/sogrady/archives/002147.html">Stephen O'Grady</a> and <a href="http://www.markbaker.ca/blog/2006/08/24/links-for-2006-08-24/">Mark
Baker</a>). Sites like <a href="http://www.techmeme.com/">Techmeme</a> and <a href="http://www.tailrank.com/">Tailrank</a> filter
these posts because no one wants to see a bunch of headlines that are all of the form
'links for 2006-09-05' with no real content. On the other hand, if a large number
of folks in my blogroll are linking to a particular news item then it is likely to
be interesting to me regardless of whether there 'meaty' blog posts behind their links
or just linkblog style postings. 
</p>
          </li>
        </ol>
        <p>
These are a couple of the queestions that I've been pondering since I started thinking
about this feature a couple of months ago. At the end of the day I think that although
Gabe's perspective is useful since he did build the site that inspired this thinking,
the scenarios are different enough to change some of the implementation choices in
ways that may seem surprising to some. 
<br /></p>
        <p>
          <b>PS:</b> It seems Sam has already turned Gabe's feedback into code based on reading
his blog post <a href="http://intertwingly.net/blog/2006/09/05/MeMeme-2-0">MeMeme
2.0</a>. There are definitely interesting times ahead. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=4a8c6fe3-9f2d-4fd3-9f8b-6c9c33b8a6f8" />
      </body>
      <title>Jubilee Thoughts: More on Personalized Meme Tracking</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,4a8c6fe3-9f2d-4fd3-9f8b-6c9c33b8a6f8.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/09/05/JubileeThoughtsMoreOnPersonalizedMemeTracking.aspx</link>
      <pubDate>Tue, 05 Sep 2006 19:58:25 GMT</pubDate>
      <description>&lt;p&gt;
Gabe Rivera, author of &lt;a href="http://www.techmeme.com"&gt;Techmeme&lt;/a&gt;, has a blog
post entitled &lt;a href="http://efuddle.com/2006/09/04-18:31#20060904-18:31"&gt;Why I don't
offer a personal filter&lt;/a&gt; where he writes 
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;I'm facing another round of inquiries on personal filtering, mostly from Techmeme
fans who've read &lt;a href="http://ross.typepad.com/blog/2006/09/between_popular.html"&gt;Ross
Mayfield's&lt;/a&gt; or &lt;a href="PermaLink.aspx?guid=a7412a5a-1576-4109-85f8-076defa2bf91"&gt;Dare
Obasanjo's&lt;/a&gt;&lt;a href="http://blog.softtechvc.com/2005/09/more_thoughts_o.html"&gt;Jeff
Clavier&lt;/a&gt; and &lt;a href="http://www.sauria.com/blog/2005/09/22"&gt;Ted Leung&lt;/a&gt; nearly
a year ago!)&lt;/i&gt; recent thoughts on the matter. (Just for the record, the first round
included requests from 
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Why don't I offer a personal filter service aka "meMeme" aka "my.memeorandum"?
Briefly, filters based on the editorial approach used for Techmeme/memeorandum don't
work well outside of a few topic domains (like politics and tech), because cross linking
is typically too sparse to produce a compelling mix of news. Sam Ruby &lt;a href="http://www.intertwingly.net/blog/2006/09/03/MeMeme"&gt;unintentionally
confirmed&lt;/a&gt; this yesterday should you pause to consider what sort of daily news
selection could be derived from his &lt;a href="http://intertwingly.net/stories/2006/09/03/meMeme.out"&gt;Venus
output&lt;/a&gt;. While it's true that cross linking is dense in some blogospheres, these
are largely the same domains already covered by my existing sites.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Why not try editorial approaches based on new kinds of semantic analyses? My belief
is that the requisite technology is harder than anything powering Google News, Topix,
or my current sites. Attempts based on current technologies come up woefully short,
with the resulting "Daily Me" consisting of a seemingly random mix of content missing
most or all "must have" articles and posts. And having the "must haves" is essential
for winning the earlier adopter types that would dominate the userbase of such a filter
in the first place.&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I reread the output from Sam's blogroll and it reminded me that there is a difference
between the scenarios that sites like &lt;a href="http://www.techmeme.com"&gt;Techmeme&lt;/a&gt; and &lt;a href="http://www.tailrank.com"&gt;Tailrank&lt;/a&gt; are
interested in and the goals of a personalized meme tracker. Here are a copuple of
questions to get you started on understanding the differences in implementation choices
one might make between implementing a personalized meme tracker vs. a topic specific
memetracker, 
&lt;br&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
Q: How do you deal with "noise" links such as &lt;a href="http://del.icio.us/tag/rest"&gt;http://del.icio.us/tag/rest&lt;/a&gt; or &lt;a href="http://www.technorati.com/tag/AJAX"&gt;http://www.technorati.com/tag/AJAX&lt;/a&gt; which
may be common in the feeds the user is interested in? 
&lt;/p&gt;
&lt;p&gt;
A: In both cases, it would seem the first step is to hard code the application to
understand certain kinds of links as "noise". The interesting question is how to deal
with the introduction of new types of "noise" links to the ecosystem. A web-based
application may be easily updated as new "noisy" links enter the system but things
are a bit more difficult for a desktop application. Perhaps allowing users to nominate
certain classes of links as noise? 
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Q: What 'class' of news items or blog posts should be used in evaluating what is [currently]
popular? 
&lt;/p&gt;
&lt;p&gt;
A: It is quite obvious that simply using the entirety of the posts from a particular
feed to calculate a links popularity is flawed. Using that metric, I suspect that
links such as &lt;a href="http://adaptivepath.com/publications/essays/archives/000385.php"&gt;http://adaptivepath.com/publications/essays/archives/000385.php&lt;/a&gt; or &lt;a href="http://scobleizer.wordpress.com/2006/06/10/correcting-the-record-about-microsoft/"&gt;http://scobleizer.wordpress.com/2006/06/10/correcting-the-record-about-microsoft/&lt;/a&gt; would
always be the most popular links from my blogroll. Using a specific date or time range
(e.g. over the past 24-48 hours) seems to be what sites such as &lt;a href="http://www.techmeme.com/"&gt;Techmeme&lt;/a&gt; and &lt;a href="http://www.tailrank.com/"&gt;Tailrank&lt;/a&gt; seem
to do. An aggregator such as&amp;nbsp;&lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt; or &lt;a href="http://www.newsgator.com/NGOLProduct.aspx?ProdId=FeedDemon"&gt;FeedDemon&lt;/a&gt; may
use other techniques such as only using 'unread' items to calculate currently popular
topics. 
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Q: How do you deal with link blogs?
&lt;/p&gt;
&lt;p&gt;
A: A number of people in my blogroll have blog posts that are basically a repost of
al the links they have posted to &lt;a href="http://del.icio.us"&gt;del.icio.us&lt;/a&gt; that
day (e.g. &lt;a href="http://www.redmonk.com/sogrady/archives/002147.html"&gt;Stephen O'Grady&lt;/a&gt; and &lt;a href="http://www.markbaker.ca/blog/2006/08/24/links-for-2006-08-24/"&gt;Mark
Baker&lt;/a&gt;). Sites like &lt;a href="http://www.techmeme.com/"&gt;Techmeme&lt;/a&gt; and &lt;a href="http://www.tailrank.com/"&gt;Tailrank&lt;/a&gt; filter
these posts because no one wants to see a bunch of headlines that are all of the form
'links for 2006-09-05' with no real content. On the other hand, if a large number
of folks in my blogroll are linking to a particular news item then it is likely to
be interesting to me regardless of whether there 'meaty' blog posts behind their links
or just linkblog style postings. 
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
These are a couple of the queestions that I've been pondering since I started thinking
about this feature a couple of months ago. At the end of the day I think that although
Gabe's perspective is useful since he did build the site that inspired this thinking,
the scenarios are different enough to change some of the implementation choices in
ways that may seem surprising to some. 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;PS:&lt;/b&gt; It seems Sam has already turned Gabe's feedback into code based on reading
his blog post &lt;a href="http://intertwingly.net/blog/2006/09/05/MeMeme-2-0"&gt;MeMeme
2.0&lt;/a&gt;. There are definitely interesting times ahead. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=4a8c6fe3-9f2d-4fd3-9f8b-6c9c33b8a6f8" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,4a8c6fe3-9f2d-4fd3-9f8b-6c9c33b8a6f8.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=a7412a5a-1576-4109-85f8-076defa2bf91</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,a7412a5a-1576-4109-85f8-076defa2bf91.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,a7412a5a-1576-4109-85f8-076defa2bf91.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=a7412a5a-1576-4109-85f8-076defa2bf91</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
About six months ago, I wrote a blog post entitled <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=96bc9d08-aee6-4f39-a7db-f4a2941d4700">Jubilee
Thoughts: Tracking Hot Topics</a> where I talked about adding meme tracking functionality
similar to the features of <a href="http://www.techmeme.com">Memeorandum</a> and <a href="http://www.tailrank.com">TailRank</a> to <a href="http://www.rssbandit.com">RSS
Bandit</a>. Since I wrote that blog post I haven't written a lick of code that actually
does this but I've thought and talked about it a lot. While all I've done is talk
I can't help but notice that a few others have been writing code while I've been pontificating
in my blog. 
</p>
        <p>
In his blog post entitled <a href="http://nick.typepad.com/blog/2006/08/spyder_spots_a_.html">Spyder
Spots a Memetracker</a> Nick Bradbury writes
</p>
        <blockquote>
          <p>
            <i>Andy "Spyder" Herron <a href="http://spyder.wordpress.com/2006/08/31/feeddemon-introduces-a-desktop-meme-tracker/">writes
about the "personal memetracker"</a> that's hidden in <a href="http://nick.typepad.com/blog/2006/08/ann_feeddemon_2.html">FeedDemon
2.0.0.25.</a></i>
          </p>
          <p>
            <i>I had hoped to complete this feature by now, but as Andy points out, it still needs
some work (which is why I hid it and gave it a "beta" label). If you'd like to try
it out, select "Popular Topics" from the Browse menu (or just add the "Popular Topics"
toolbutton to the toolbar above FeedDemon's browser).</i>
          </p>
          <i>I should add that this feature will probably be useful only to people who subscribe
to a lot of feeds since it relies on common links to determine popularity. So if you're
not subscribed to feeds which link to the same articles, chances are it won't show
you any results.</i>
        </blockquote>
        <p>
In another blog post entitled <a href="http://www.intertwingly.net/blog/2006/09/03/MeMeme">MeMeme</a> Sam
Ruby writes 
</p>
        <blockquote>
          <blockquote>
            <i>
              <b> Ross Mayfield</b>: Cue up not what is popular, or what
the people I subscribed to produced.  Cue up what my social network has found
interesting.</i>
            <br />
          </blockquote>
          <i>Herewith, a simple demonstration of what aggressive canonicalization
can produce.  Venus may be in Python, but suppose I’m in a Ruby mood.  The
cache is simply files in Atom 1.0 format, with all textual content normalized to XHTML.<br /><br />
Lets make a few simplifying assumptions: all posts are created equal, each post can
only vote once for any given link (this also takes care of things like summaries which
partially repeat content), posts implicitly vote (once!) for themselves, and the weight
of a vote degrades as the square of the distance between when the post was made and
now.<br /><br />
Here’s the <a href="http://intertwingly.net/stories/2006/09/03/meMeme.rb">code</a>,
and here’s a snapshot of the <a href="http://intertwingly.net/stories/2006/09/03/meMeme.out">output</a>. 
The output took 6.239 elapsed seconds to produce on my laptop.  I still have
more work to do to eliminate some of the self-referential links (in fact, I a priori
removed Bob Sutor’s blog from the analysis as it otherwise he would dominate the results). 
But I am confident that this is solvable, in fact, I am working on expanding what
filters can do.  I’ll post more on that shortly.</i>
        </blockquote>
        <p>
With both Sam and Nick on the case, I'm quite sure that within the next few months
it will be taken for granted that one of the features of news aggregator is to provide
personalized meme tracking. Although I'm sure that we'll all use the same set of basic
rules for providing this feature, I suspect that the problems that we are trying to
solve will end up being different which will influence how we'll implement the feature. 
</p>
        <p>
For example, the main reason I want this feature isn't to track what the popular topics
are across multiple blogs but instead to find what the popular topics are across aggregated
blog feeds such as <a href="http://blogs.msdn.com">blogs.msdn.com</a> and the numerous <a href="http://www.planetplanet.org/">planet
sites</a>. In reading Sam's blog it seems he'd consider the same feed linking to the
same news items as spam to filter out while I consider it be the only part of the
feature I'd use. This issue illustrates the main problems I've had with designing
the feature in my head. What "knobs" or options should we give users to control how
the meme tracker decides what is interesting or not vs. what should be ignored when
generating the list of 'hot topics' (e.g. the various meme trackers have said they
filter out link blogs since they tend to dominate the results as well)? 
</p>
        <p>
Since I've decided to be more focused with regards to <a href="http://www.rssbandit.org">RSS
Bandit</a> development, I won't touch this feature until <a href="http://en.wikipedia.org/wiki/Podcasting">podcasting</a> support
is done. However I'd like to hear thoughts from our users in the meantime. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=a7412a5a-1576-4109-85f8-076defa2bf91" />
      </body>
      <title>Jubilee Thoughts: Personalized Meme Tracking</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,a7412a5a-1576-4109-85f8-076defa2bf91.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/09/04/JubileeThoughtsPersonalizedMemeTracking.aspx</link>
      <pubDate>Mon, 04 Sep 2006 02:42:48 GMT</pubDate>
      <description>&lt;p&gt;
About six months ago, I wrote a blog post entitled &lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=96bc9d08-aee6-4f39-a7db-f4a2941d4700"&gt;Jubilee
Thoughts: Tracking Hot Topics&lt;/a&gt; where I talked about adding meme tracking functionality
similar to the features of &lt;a href="http://www.techmeme.com"&gt;Memeorandum&lt;/a&gt; and &lt;a href="http://www.tailrank.com"&gt;TailRank&lt;/a&gt; to &lt;a href="http://www.rssbandit.com"&gt;RSS
Bandit&lt;/a&gt;. Since I wrote that blog post I haven't written a lick of code that actually
does this but I've thought and talked about it a lot. While all I've done is talk
I can't help but notice that a few others have been writing code while I've been pontificating
in my blog. 
&lt;/p&gt;
&lt;p&gt;
In his blog post entitled &lt;a href="http://nick.typepad.com/blog/2006/08/spyder_spots_a_.html"&gt;Spyder
Spots a Memetracker&lt;/a&gt; Nick Bradbury writes
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;Andy "Spyder" Herron &lt;a href="http://spyder.wordpress.com/2006/08/31/feeddemon-introduces-a-desktop-meme-tracker/"&gt;writes
about the "personal memetracker"&lt;/a&gt; that's hidden in &lt;a href="http://nick.typepad.com/blog/2006/08/ann_feeddemon_2.html"&gt;FeedDemon
2.0.0.25.&lt;/a&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;I had hoped to complete this feature by now, but as Andy points out, it still needs
some work (which is why I hid it and gave it a "beta" label). If you'd like to try
it out, select "Popular Topics" from the Browse menu (or just add the "Popular Topics"
toolbutton to the toolbar above FeedDemon's browser).&lt;/i&gt;
&lt;/p&gt;
&lt;i&gt;I should add that this feature will probably be useful only to people who subscribe
to a lot of feeds since it relies on common links to determine popularity. So if you're
not subscribed to feeds which link to the same articles, chances are it won't show
you any results.&lt;/i&gt;&lt;/blockquote&gt; 
&lt;p&gt;
In another blog post entitled &lt;a href="http://www.intertwingly.net/blog/2006/09/03/MeMeme"&gt;MeMeme&lt;/a&gt; Sam
Ruby writes 
&lt;/p&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&lt;b&gt; Ross Mayfield&lt;/b&gt;: Cue up not what is popular, or what
the people I subscribed to produced.&amp;nbsp; Cue up what my social network has found
interesting.&lt;/i&gt;
&lt;br&gt;
&lt;/blockquote&gt;&lt;i&gt;Herewith, a simple demonstration of what aggressive canonicalization
can produce.&amp;nbsp; Venus may be in Python, but suppose I’m in a Ruby mood.&amp;nbsp; The
cache is simply files in Atom 1.0 format, with all textual content normalized to XHTML.&lt;br&gt;
&lt;br&gt;
Lets make a few simplifying assumptions: all posts are created equal, each post can
only vote once for any given link (this also takes care of things like summaries which
partially repeat content), posts implicitly vote (once!) for themselves, and the weight
of a vote degrades as the square of the distance between when the post was made and
now.&lt;br&gt;
&lt;br&gt;
Here’s the &lt;a href="http://intertwingly.net/stories/2006/09/03/meMeme.rb"&gt;code&lt;/a&gt;,
and here’s a snapshot of the &lt;a href="http://intertwingly.net/stories/2006/09/03/meMeme.out"&gt;output&lt;/a&gt;.&amp;nbsp;
The output took 6.239 elapsed seconds to produce on my laptop.&amp;nbsp; I still have
more work to do to eliminate some of the self-referential links (in fact, I a priori
removed Bob Sutor’s blog from the analysis as it otherwise he would dominate the results).&amp;nbsp;
But I am confident that this is solvable, in fact, I am working on expanding what
filters can do.&amp;nbsp; I’ll post more on that shortly.&lt;/i&gt;&lt;/blockquote&gt; 
&lt;p&gt;
With both Sam and Nick on the case, I'm quite sure that within the next few months
it will be taken for granted that one of the features of news aggregator is to provide
personalized meme tracking. Although I'm sure that we'll all use the same set of basic
rules for providing this feature, I suspect that the problems that we are trying to
solve will end up being different which will influence how we'll implement the feature. 
&lt;/p&gt;
&lt;p&gt;
For example, the main reason I want this feature isn't to track what the popular topics
are across multiple blogs but instead to find what the popular topics are across aggregated
blog feeds such as &lt;a href="http://blogs.msdn.com"&gt;blogs.msdn.com&lt;/a&gt; and the numerous &lt;a href="http://www.planetplanet.org/"&gt;planet
sites&lt;/a&gt;. In reading Sam's blog it seems he'd consider the same feed linking to the
same news items as spam to filter out while I consider it be the only part of the
feature I'd use. This issue illustrates the main problems I've had with designing
the feature in my head. What "knobs" or options should we give users to control how
the meme tracker decides what is interesting or not vs. what should be ignored when
generating the list of 'hot topics' (e.g. the various meme trackers have said they
filter out link blogs since they tend to dominate the results as well)? 
&lt;/p&gt;
&lt;p&gt;
Since I've decided to be more focused with regards to &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt; development, I won't touch this feature until &lt;a href="http://en.wikipedia.org/wiki/Podcasting"&gt;podcasting&lt;/a&gt; support
is done. However I'd like to hear thoughts from our users in the meantime. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=a7412a5a-1576-4109-85f8-076defa2bf91" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,a7412a5a-1576-4109-85f8-076defa2bf91.aspx</comments>
      <category>RSS Bandit</category>
      <category>Social Software</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=0f206e2c-a9a7-476e-a8b5-2e8caf5df83e</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,0f206e2c-a9a7-476e-a8b5-2e8caf5df83e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,0f206e2c-a9a7-476e-a8b5-2e8caf5df83e.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=0f206e2c-a9a7-476e-a8b5-2e8caf5df83e</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just read the rather brief <a href="http://www.bloglines.com/about/specs/fac-1.0">Feed
Access Control RSS and ATOM specification</a> from the <a href="http://www.bloglines.com">Bloglines</a> team.
It defines the <code>access:control</code> element as 
</p>
        <blockquote>
          <b>
            <i>&lt;access:restriction&gt; element</i>
          </b>
          <br />
          <i>Sub element of &lt;rss&gt; or &lt;feed&gt;. Used to indicate the re-distribution
restrictions for a feed. The 'relationship' attribute is used to indicate whether
a feed will 'allow' or 'deny' access.</i>
          <p>
          </p>
          <p>
            <i>To 'allow' access means a feed may be redistributed to other public sources, including
search. To allow access, for example:</i>
          </p>
          <pre>
            <i> &lt;access:restriction relationship="allow" /&gt;</i>
          </pre>
          <p>
            <i>To 'deny' access means a feed should not be redistributed to other public sources,
including search. To deny access, for example:</i>
          </p>
          <pre>
            <i> &lt;access:restriction relationship="deny" /&gt;</i>
          </pre>
          <p>
            <i>The default relationship is to allow access. However, if a feed is currently set
to 'deny', the relationship must be explicitly set back to 'allow' for it to be registered
(Simply ommiting it from the feed is not sufficient to turn access back on).</i>
          </p>
        </blockquote>
        <p>
The problem with this 'specification' is that it says nothing about its goals, scenarios
or expected use cases. Without these it is hard to tell whether this is a good idea
or a bad idea. <a href="http://dannyayers.com/2006/08/02/in-band-robots">Danny Ayers
points out</a> that this mimics the behavior of the <a href="http://www.robotstxt.org/wc/meta-user.html">Robots
META tag</a> that can be placed in HTML pages. I guess this means it prevents
search engines from indexing your page and showing it in search results which makes
sense in certain <i>limited</i> scenarios. For example, it makes sense to exclude
a search engine from indexing the search results page of another search engine or
the RSS feed of some search results. Hints like the <a href="http://www.robotstxt.org/wc/meta-user.html">Robots
META tag</a> and <a href="http://www.robotstxt.org/wc/exclusion.html#robotstxt">robots.txt</a> are
good ways to prevent this from happening for HTML pages. I guess this proposal does
the same for RSS and Atom feeds. 
</p>
        <p>
On the other hand, it is definitely not an <b>access control mechanism</b>. You wouldn't
want your bank to tell you that the way that they prevent anyone from viewing your
bank account details is via <a href="http://www.robotstxt.org/wc/exclusion.html#robotstxt">robots.txt</a> would
you? 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=0f206e2c-a9a7-476e-a8b5-2e8caf5df83e" />
      </body>
      <title>Some Thoughts On Bloglines Feed Access Control Proposal</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,0f206e2c-a9a7-476e-a8b5-2e8caf5df83e.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/08/03/SomeThoughtsOnBloglinesFeedAccessControlProposal.aspx</link>
      <pubDate>Thu, 03 Aug 2006 16:43:22 GMT</pubDate>
      <description>&lt;p&gt;
I just read the rather brief &lt;a href="http://www.bloglines.com/about/specs/fac-1.0"&gt;Feed
Access Control RSS and ATOM specification&lt;/a&gt; from the &lt;a href="http://www.bloglines.com"&gt;Bloglines&lt;/a&gt; team.
It defines the &lt;code&gt;access:control&lt;/code&gt; element as 
&lt;/p&gt;
&lt;blockquote&gt; &lt;b&gt;&lt;i&gt;&amp;lt;access:restriction&amp;gt; element&lt;/i&gt;&lt;/b&gt;
&lt;br&gt;
&lt;i&gt;Sub element of &amp;lt;rss&amp;gt; or &amp;lt;feed&amp;gt;. Used to indicate the re-distribution
restrictions for a feed. The 'relationship' attribute is used to indicate whether
a feed will 'allow' or 'deny' access.&lt;/i&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;To 'allow' access means a feed may be redistributed to other public sources, including
search. To allow access, for example:&lt;/i&gt;
&lt;/p&gt;
&lt;pre&gt;&lt;i&gt; &amp;lt;access:restriction relationship="allow" /&amp;gt;&lt;/i&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;i&gt;To 'deny' access means a feed should not be redistributed to other public sources,
including search. To deny access, for example:&lt;/i&gt;
&lt;/p&gt;
&lt;pre&gt;&lt;i&gt; &amp;lt;access:restriction relationship="deny" /&amp;gt;&lt;/i&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;i&gt;The default relationship is to allow access. However, if a feed is currently set
to 'deny', the relationship must be explicitly set back to 'allow' for it to be registered
(Simply ommiting it from the feed is not sufficient to turn access back on).&lt;/i&gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The problem with this 'specification' is that it says nothing about its goals, scenarios
or expected use cases. Without these it is hard to tell whether this is a good idea
or a bad idea. &lt;a href="http://dannyayers.com/2006/08/02/in-band-robots"&gt;Danny Ayers
points out&lt;/a&gt; that this mimics the behavior of the &lt;a href="http://www.robotstxt.org/wc/meta-user.html"&gt;Robots
META tag&lt;/a&gt; that can be placed in HTML pages.&amp;nbsp;I guess this means it prevents
search engines from indexing your page and showing it in search results which makes
sense in certain &lt;i&gt;limited&lt;/i&gt; scenarios. For example, it makes sense to exclude
a search engine from indexing the search results page of another search engine or
the RSS feed of some search results. Hints like the &lt;a href="http://www.robotstxt.org/wc/meta-user.html"&gt;Robots
META tag&lt;/a&gt; and&amp;nbsp;&lt;a href="http://www.robotstxt.org/wc/exclusion.html#robotstxt"&gt;robots.txt&lt;/a&gt; are
good ways to prevent this from happening for HTML pages. I guess this proposal does
the same for RSS and Atom feeds. 
&lt;/p&gt;
&lt;p&gt;
On the other hand, it is definitely not an &lt;b&gt;access control mechanism&lt;/b&gt;. You wouldn't
want your bank to tell you that the way that they prevent anyone from viewing your
bank account details is via &lt;a href="http://www.robotstxt.org/wc/exclusion.html#robotstxt"&gt;robots.txt&lt;/a&gt; would
you? 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=0f206e2c-a9a7-476e-a8b5-2e8caf5df83e" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,0f206e2c-a9a7-476e-a8b5-2e8caf5df83e.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=d3989d63-5962-4761-a938-f29bec2bbfee</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,d3989d63-5962-4761-a938-f29bec2bbfee.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,d3989d63-5962-4761-a938-f29bec2bbfee.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=d3989d63-5962-4761-a938-f29bec2bbfee</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yesterday, I spent way too much time trying to figure out how to import an OPML feed
list into <a href="http://www.bloglines.com">Bloglines</a> from the UI before giving
up and performing a Web search to find out the how to do it. Below is a screenshot
of the key choices one has for managing ones feeds in <a href="http://www.bloglines.com">Bloglines</a>. 
</p>
        <p>
          <img src="http://www.25hoursaday.com/weblog/content/binary/bloglines.JPG" border="0" />
        </p>
        <p>
And this is what the Bloglines FAQ has in response to the question <a href="http://www.bloglines.com/help/faq#import">How
Can I Import An Existing List of Subscriptions?</a></p>
        <blockquote>
          <i>Once you have registered with Bloglines and replied to the confirmation
email, click on the <b>My Feeds</b> tab at the top of the screen. Then, click on the
Edit link. At the bottom of the left panel will be a link to import subscriptions.
The subscription list must be in OPML format.</i>
        </blockquote> Why is importing a
feed list an 'Edit' operation and not an 'Add'? Who designs this crud? 
<br /><img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=d3989d63-5962-4761-a938-f29bec2bbfee" /></body>
      <title>Bloglines UI Faux Pas</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,d3989d63-5962-4761-a938-f29bec2bbfee.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/07/18/BloglinesUIFauxPas.aspx</link>
      <pubDate>Tue, 18 Jul 2006 16:12:25 GMT</pubDate>
      <description>&lt;p&gt;
Yesterday, I spent way too much time trying to figure out how to import an OPML feed
list into &lt;a href="http://www.bloglines.com"&gt;Bloglines&lt;/a&gt; from the UI before giving
up and performing a Web search to find out the how to do it. Below is a screenshot
of the key choices one has for managing ones feeds in &lt;a href="http://www.bloglines.com"&gt;Bloglines&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.25hoursaday.com/weblog/content/binary/bloglines.JPG" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
And this is what the Bloglines FAQ has in response to the question &lt;a href="http://www.bloglines.com/help/faq#import"&gt;How
Can I Import An Existing List of Subscriptions?&lt;/a&gt; 
&lt;/p&gt;
&lt;blockquote&gt;&lt;i&gt;Once you have registered with Bloglines and replied to the confirmation
email, click on the &lt;b&gt;My Feeds&lt;/b&gt; tab at the top of the screen. Then, click on the
Edit link. At the bottom of the left panel will be a link to import subscriptions.
The subscription list must be in OPML format.&lt;/i&gt;&lt;/blockquote&gt; Why is importing a
feed list an 'Edit' operation and not an 'Add'? Who designs this crud? 
&lt;br&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=d3989d63-5962-4761-a938-f29bec2bbfee" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,d3989d63-5962-4761-a938-f29bec2bbfee.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=9dfd7f81-46e1-4ed1-8320-7b0338fedacf</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,9dfd7f81-46e1-4ed1-8320-7b0338fedacf.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,9dfd7f81-46e1-4ed1-8320-7b0338fedacf.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=9dfd7f81-46e1-4ed1-8320-7b0338fedacf</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Nathan Torkington has a blog post entitled <a href="http://radar.oreilly.com/archives/2006/07/a_week_in_the_valley_gdata.html">A
Week in the Valley: GData</a> on the O'Reilly Radar blog that talks about the growth
of the usage of <a href="http://code.google.com/apis/gdata/">GData</a> &amp; the <a href="http://www.ietf.org/ids.by.wg/atompub.html">Atom
Publishing Protocol</a> within Google as well as Marc Lukovsky's take on how this
compared to his time at Microsoft working on <a href="http://www.microsoft.com/presspass/features/2001/mar01/03-19hailstorm.mspx">Hailstorm</a>.
Nat writes 
</p>
        <blockquote>
          <i>They're building APIs to your Google-stored data via GData, and it's
all very reminiscent of HailStorm. Mark, of course, was the architect of that. So
why's he coming up with more strategies to the same ends? I figure he's hoping Google
won't screw it up by being greedy, the way Microsoft did...The reaction to the <a href="http://code.google.com/apis/gdata/calendar.html">GData
APIs for Calendar</a> have been very positive. This is in contrast to HailStorm, of
course, which was distrusted and eventually morphed its way through different product
names into oblivion. Noting that Mark's trying again with the idea of open APIs to
your personal data, I joked that GData should really be "GStorm". Mark deadpanned,
" I wanted to call it ShitStorm but it didn't fly with marketing".</i>
          <b>
          </b>
        </blockquote>
        <p>
Providing APIs to access and manipulate data owned by your users is a good thing.
It extends the utility of the data outside that of the Web applications that may be
the primary consumer of the data and it creates an ecosystem of applications that
harness the data. This is beneficial to customers as can be seen by looking around
today at the success of APIs such as the <a href="http://www.xmlrpc.com/metaWeblogApi">MetaWeblog
API</a>, <a href="http://www.flickr.com/services/api/">Flickr API</a> or <a href="http://del.icio.us/help/api/">del.icio.us
API</a>. 
<br /></p>
        <p dir="ltr">
Five years ago, while interning at Microsoft, I saw a demo about Hailstorm in which
a user visiting an online CD retailer was showed an ad for a concert they'd be interested
in based on their music preferences in Hailstorm. The thinking here was that it would
be win-win because (i) all the user's data is entered and stored in one place which
is convenient for the user (ii) the CD retailer can access the user's preferences
from Hailstorm and cut a deal with the concert ticket provider to show their ads based
on user preferences and (iii) the concert ticket provider gets their ads shown in
a very relevant context.
</p>
        <p>
The big problem with Hailstorm is that it assumed that potential Hailstorm partners
such as retailers and other businesses would give up their customer data to Microsoft.
As expected most of them told Microsoft to take a long walk of a short pier. 
</p>
        <p>
Unfortunately Microsoft didn't take the step of opening up these APIs to its online
services such as Hotmail and MSN Messenger but instead quietly canned the project.
Fast forward a few years later and the company is now <a href="http://dev.live.com/">playing
catchup</a> to ideas it helped foster. Amusingly, people like <a href="http://mark-lucovsky.blogspot.com/">Mark
Lucovsky</a> and <a href="http://vicgundotra.com/">Vic Gundotra</a> who were influential
during the Hailstorm days at Microsoft are now at Google rebuilding the same thing. 
</p>
        <p>
I've taken a look at <a href="http://code.google.com/apis/gdata/">GData</a> and have
begun to question the wisdom of using Atom/RSS as the baseline for information interchange
on the Web. Specifically, I have the same issues as <a href="http://www.unto.net/unto/opensearch/more-on-rss-and-atom/#comment-1486">Steven
Ickman raised in a comment on DeWitt Clinton's blog</a> where he wrote 
</p>
        <blockquote>
          <p>
            <i>From a search perspective I’d argue that the use of either format, RSS or Atom,
is pretty much a hack. I think OpenSearch is awesome and I understand the motivators
driving the format choices but it still feels like a hack to me.</i>
          </p>
          <p>
            <i>Just like you I want to see rich structured results returned for queries but both
formats basically limit you to results of a single type and contain a few known fields
(i.e. link, title, subject, author, date, &amp; enclosure) that are expected to be
common across all items.</i>
          </p>
          <p>
            <i>Where do we put the 100+ Outlook defined contact fields and how do we know that
a result is a contact and not an appointment or auction? Vista has almost 1000 properties
defined in its schema so how do we convey that much metadata in a loseless way? Embedded
Microformats are a great sugestion for how to deal with richer content but it sort
of feels like a hack on top of a hack to me? What’s the Microformat for an auction?
Do I have to wait a year for some committee to arrive at joint aggreement on what
attributes define an auction before I can return structured auction results?</i>
          </p>
        </blockquote>
        <p>
When you have a hammer, everything looks like a nail. It seems Steven Ickman and I
reviewed OpenSearch/GData/Atom with the same critical lens and came away with the
same list of issues. The only thing I'd change in his criticism is the claim that
both formats (RSS &amp; Atom) limit you to results of a single type, that isn't the
case. Nothing stops a feed from containing data of wildly varying types. For example,
a <a href="http://spaces.msn.com/carnage4life/feed.rss">typical MSN Spaces RSS feed</a> contains
items that represent blog posts, photo albums, music lists, and book lists which are
all very different types. 
</p>
        <p>
The inability to represent hierarchical data in a natural manner is a big failing
of both formats. I've seen the <a href="http://www.ietf.org/internet-drafts/draft-snell-atompub-feed-thread-12.txt">Atom
Threading Extensions</a> but that seems to be a very un-XML way for an XML format
to represent hierarchy. Especially given how complicated <a href="http://www.jwz.org/doc/threading.html">message
threading algorithms</a> can be for clients to implement. 
</p>
        <p>
It'll be interesting to see how Google tackles these issues in <a href="http://code.google.com/apis/gdata/">GData</a>. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=9dfd7f81-46e1-4ed1-8320-7b0338fedacf" />
      </body>
      <title>On GData and Hailstorm</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,9dfd7f81-46e1-4ed1-8320-7b0338fedacf.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/07/15/OnGDataAndHailstorm.aspx</link>
      <pubDate>Sat, 15 Jul 2006 21:25:36 GMT</pubDate>
      <description>&lt;p&gt;
Nathan Torkington has a blog post entitled &lt;a href="http://radar.oreilly.com/archives/2006/07/a_week_in_the_valley_gdata.html"&gt;A
Week in the Valley: GData&lt;/a&gt; on the O'Reilly Radar blog that talks about the growth
of the usage of &lt;a href="http://code.google.com/apis/gdata/"&gt;GData&lt;/a&gt; &amp;amp; the &lt;a href="http://www.ietf.org/ids.by.wg/atompub.html"&gt;Atom
Publishing Protocol&lt;/a&gt; within Google as well as Marc Lukovsky's take on how this
compared to his time at Microsoft working on &lt;a href="http://www.microsoft.com/presspass/features/2001/mar01/03-19hailstorm.mspx"&gt;Hailstorm&lt;/a&gt;.
Nat writes 
&lt;/p&gt;
&lt;blockquote&gt;&lt;i&gt;They're building APIs to your Google-stored data via GData, and it's
all very reminiscent of HailStorm. Mark, of course, was the architect of that. So
why's he coming up with more strategies to the same ends? I figure he's hoping Google
won't screw it up by being greedy, the way Microsoft did...The reaction to the &lt;a href="http://code.google.com/apis/gdata/calendar.html"&gt;GData
APIs for Calendar&lt;/a&gt; have been very positive. This is in contrast to HailStorm, of
course, which was distrusted and eventually morphed its way through different product
names into oblivion. Noting that Mark's trying again with the idea of open APIs to
your personal data, I joked that GData should really be "GStorm". Mark deadpanned,
" I wanted to call it ShitStorm but it didn't fly with marketing".&lt;/i&gt;&lt;b&gt; &lt;/b&gt;&lt;/blockquote&gt; 
&lt;p&gt;
Providing APIs to access and manipulate data owned by your users is a good thing.
It extends the utility of the data outside that of the Web applications that may be
the primary consumer of the data and it creates an ecosystem of applications that
harness the data. This is beneficial to customers as can be seen by looking around
today at the success of APIs such as the &lt;a href="http://www.xmlrpc.com/metaWeblogApi"&gt;MetaWeblog
API&lt;/a&gt;, &lt;a href="http://www.flickr.com/services/api/"&gt;Flickr API&lt;/a&gt; or &lt;a href="http://del.icio.us/help/api/"&gt;del.icio.us
API&lt;/a&gt;. 
&lt;br&gt;
&lt;/p&gt;
&lt;p dir="ltr"&gt;
Five years ago, while interning at Microsoft, I saw a demo about Hailstorm in which
a user visiting an online CD retailer was showed an ad for a concert they'd be interested
in based on their music preferences in Hailstorm. The thinking here was that it would
be win-win because (i) all the user's data is entered and stored in one place which
is convenient for the user (ii) the CD retailer can access the user's preferences
from Hailstorm and cut a deal with the concert ticket provider to show their ads based
on user preferences and (iii) the concert ticket provider gets their ads shown in
a very relevant context.
&lt;/p&gt;
&lt;p&gt;
The big problem with Hailstorm is that it assumed that potential Hailstorm partners
such as retailers and other businesses would give up their customer data to Microsoft.
As expected most of them told Microsoft to take a long walk of a short pier.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Unfortunately Microsoft didn't take the step of opening up these APIs to its online
services such as Hotmail and MSN Messenger but instead quietly canned the project.
Fast forward a few years later and the company is now &lt;a href="http://dev.live.com/"&gt;playing
catchup&lt;/a&gt; to ideas it helped foster. Amusingly, people like &lt;a href="http://mark-lucovsky.blogspot.com/"&gt;Mark
Lucovsky&lt;/a&gt; and &lt;a href="http://vicgundotra.com/"&gt;Vic Gundotra&lt;/a&gt; who were influential
during the Hailstorm days at Microsoft are now at Google rebuilding the same thing. 
&lt;/p&gt;
&lt;p&gt;
I've taken a look at &lt;a href="http://code.google.com/apis/gdata/"&gt;GData&lt;/a&gt; and have
begun to question the wisdom of using Atom/RSS as the baseline for information interchange
on the Web. Specifically, I have the same issues as &lt;a href="http://www.unto.net/unto/opensearch/more-on-rss-and-atom/#comment-1486"&gt;Steven
Ickman raised in a comment on DeWitt Clinton's blog&lt;/a&gt; where he wrote 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;From a search perspective I’d argue that the use of either format, RSS or Atom,
is pretty much a hack. I think OpenSearch is awesome and I understand the motivators
driving the format choices but it still feels like a hack to me.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Just like you I want to see rich structured results returned for queries but both
formats basically limit you to results of a single type and contain a few known fields
(i.e. link, title, subject, author, date, &amp;amp; enclosure) that are expected to be
common across all items.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Where do we put the 100+ Outlook defined contact fields and how do we know that
a result is a contact and not an appointment or auction? Vista has almost 1000 properties
defined in its schema so how do we convey that much metadata in a loseless way? Embedded
Microformats are a great sugestion for how to deal with richer content but it sort
of feels like a hack on top of a hack to me? What’s the Microformat for an auction?
Do I have to wait a year for some committee to arrive at joint aggreement on what
attributes define an auction before I can return structured auction results?&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
When you have a hammer, everything looks like a nail. It seems Steven Ickman and I
reviewed OpenSearch/GData/Atom with the same critical lens and came away with the
same list of issues. The only thing I'd change in his criticism is the claim that
both formats (RSS &amp;amp; Atom) limit you to results of a single type, that isn't the
case. Nothing stops a feed from containing data of wildly varying types. For example,
a &lt;a href="http://spaces.msn.com/carnage4life/feed.rss"&gt;typical MSN Spaces RSS feed&lt;/a&gt; contains
items that represent blog posts, photo albums, music lists, and book lists which are
all very different types. 
&lt;/p&gt;
&lt;p&gt;
The inability to represent hierarchical data in a natural manner is a big failing
of both formats. I've seen the &lt;a href="http://www.ietf.org/internet-drafts/draft-snell-atompub-feed-thread-12.txt"&gt;Atom
Threading Extensions&lt;/a&gt; but that seems to be a very un-XML way for an XML format
to represent hierarchy. Especially given how complicated &lt;a href="http://www.jwz.org/doc/threading.html"&gt;message
threading algorithms&lt;/a&gt; can be for clients to implement. 
&lt;/p&gt;
&lt;p&gt;
It'll be interesting to see how Google tackles these issues in &lt;a href="http://code.google.com/apis/gdata/"&gt;GData&lt;/a&gt;. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=9dfd7f81-46e1-4ed1-8320-7b0338fedacf" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,9dfd7f81-46e1-4ed1-8320-7b0338fedacf.aspx</comments>
      <category>Competitors/Web Companies</category>
      <category>Syndication Technology</category>
      <category>XML Web Services</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=c361c55f-0332-40e8-b8b1-458eb2b0ca91</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,c361c55f-0332-40e8-b8b1-458eb2b0ca91.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,c361c55f-0332-40e8-b8b1-458eb2b0ca91.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=c361c55f-0332-40e8-b8b1-458eb2b0ca91</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
About two weeks ago, Greg Reinacker wrote about NewsGator's past, present and future
in two blog posts entitled <a href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=810">NewsGator
platform roadmap - Part I (a look back) </a>and <a href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=811">NewsGator
platform roadmap - Part II (a look forward)</a>. The blog posts are a good look at
the achievements of a company that has gone from a one-man shop building an RSS reading
plugin for Outlook into being the dominant syndication platform company on almost
any platform from Windows &amp; Mac to the Web &amp; mobile phones. If you are interested
in XML syndication, then Greg's posts are bookmark-worthy since they describe the
future plans of a company that probably has the best minds building RSS/Atom applications
working there today. Below are some excerpts from his posts in my areas of interest 
</p>
        <blockquote>
          <p>
            <i>
              <strong>NewsGator Online</strong>
            </i>
          </p>
          <p>
            <i>As I said 16 months ago, the proposed feature list is long and distinguished -
and it still is.  There is so much to do here...some of the short-term planned
additions range from more interactive feed discovery mechanisms (based on the larger
community of users and their subscriptions), to completely different user interface
paradigms (where a user could potentially select from different options, each catering
to a different kind of user). 
<br /></i>
          </p>
          <p>
            <i>A larger initiative is around the whole paradigm. Techies aside, users don't want
to think about feeds, and subscriptions, and searching for content...Given all that,
we're really rethinking the way we present information to the user, and the way users
discover new information.  We're designing ways for people to participate in
a larger community if they wish, and get more value out of the content they consume,
at the point they discover it.  While we all have our own set of feeds, and we
all participate to some extent in the larger ecosystem, there is a lot of potential
in linking people with similar interests to each other.  Some users will continue
to use our system as they always have - and others will use it in completely different
ways.  We're testing a couple of approaches on this right now - I think
it's truly a game-changer.</i>
          </p>
          <p>
            <i>
              <strong>NewsGator Inbox, FeedDemon, NetNewsWire</strong>
            </i>
          </p>
          <p>
            <i>As I mentioned before, the enthusiasm around these products has continued to grow
- people obviously see the value in a rich, synchronized, offline-capable user experience
for consuming content.  Moving forward, online integration will get tighter,
and more complete - ranging from the low hanging fruit like FeedDemon "News Bins"
becoming Clippings (and thus synchronize with the entire platform), to more involved
features like analytics-related features (recommendations, interest-based surfacing,
etc.) and community-related features.<br />
...<br /><strong>NewsGator core platform</strong></i>
          </p>
          <p>
            <i>This is the heart of our entire product line (with the exception of NewsGator Enterprise
Server).  Moving forward, we're investing a lot in the platform.  We're
building out more support for deep analytics (which we can use to deliver different
kinds of user experience), and building out a much deeper metadata engine (which means
if a client retrieves content from our system, they'll get much richer data than they
otherwise would).  We'll have other ways to "slice" our data to get what you
need, without having to subscribe to hundreds of feeds.</i>
          </p>
          <p>
            <i>The API has been very successful, and we process millions of API calls per day
from client applications, web services, and private label clients.  This traffic
actually makes up a large percentage of our overall system traffic - which I think
is a testament to the popularity and utility of the API.  Moving forward here,
we're obviously very committed to the API story, and we'll continue to enhance it
as we add platform capabilities.</i>
          </p>
        </blockquote>
        <p>
There's lots of good stuff here. The first thing that pops out at me is that while
a bunch of startups these days tend to proclaim the death of desktop software, NewsGator
is actually seeing the best of both worlds and improving the quality of the desktop
experience by harnessing a Web-based platform. It's not Web-based software replacing
desktop software, it's desktop software becoming better by working in tandem with
APIs and applications on the Web. When Ray Ozzie talks about <a href="http://radar.oreilly.com/archives/2005/11/live_software.html">"live
software"</a>, NewsGator is the company that leaps most readily to my mind. 
</p>
        <p>
I like the idea of making discovery of new content more of a social experience. It'd
be interesting to see what would happen if NewsGator Online had a <a href="http://del.icio.us/">del.icio.us-inspired</a> interface
for browsing and subscribing to people's feeds. I notice that Gordon Weakliem who
works on the <a href="http://www.newsgator.com/ngs/api/">NewsGator API</a> recently
wrote a post entitled <a href="http://www.agileprogrammer.com/eightytwenty/archive/2006/07/06/16772.aspx">Needles
in Haystacks</a> where he talks about serendipitous discovery of new websites by browsing
bookmarks of people with similar interests to him in <a href="http://del.icio.us/">del.icio.us</a>.
I'm sure it's just a matter of time before NewsGator adds these features to their
platform. 
</p>
        <p>
I also like the idea of exposing richer metadata in the <a href="http://www.newsgator.com/ngs/api/">NewsGator
API</a> especially if it relates to the social features that they plan to unveil in
the next couple of months. Unfortunately, I've never been able to get the NewsGator
API to work quite right with <a href="http://www.rssbandit.org">RSS Bandit</a> but
I'll be revisiting that code later in the summer. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=c361c55f-0332-40e8-b8b1-458eb2b0ca91" />
      </body>
      <title>Some Thoughts on the Newsgator Roadmap</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,c361c55f-0332-40e8-b8b1-458eb2b0ca91.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/07/09/SomeThoughtsOnTheNewsgatorRoadmap.aspx</link>
      <pubDate>Sun, 09 Jul 2006 16:32:07 GMT</pubDate>
      <description>&lt;p&gt;
About two weeks ago, Greg Reinacker wrote about NewsGator's past, present and future
in two blog posts entitled &lt;a href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=810"&gt;NewsGator
platform roadmap - Part I (a look back) &lt;/a&gt;and &lt;a href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=811"&gt;NewsGator
platform roadmap - Part II (a look forward)&lt;/a&gt;. The blog posts are a good look at
the achievements of a company that has gone from a one-man shop building an RSS reading
plugin for Outlook into being the dominant syndication platform company on almost
any platform from Windows &amp;amp; Mac to the Web &amp;amp; mobile phones. If you are interested
in XML syndication, then Greg's posts are bookmark-worthy since they describe the
future plans of a company that probably has the best minds building RSS/Atom applications
working there today. Below are some excerpts from his posts in my areas of interest 
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;&lt;strong&gt;NewsGator Online&lt;/strong&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;As I said 16 months ago, the proposed feature list is long and distinguished -
and it still is.&amp;nbsp; There is so much to do here...some of the short-term planned
additions range from more interactive feed discovery mechanisms (based on the larger
community of users and their subscriptions), to completely different user interface
paradigms (where a user could potentially select from different options, each catering
to a different kind of user). 
&lt;br&gt;
&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;A larger initiative is around the whole paradigm. Techies aside, users don't want
to think about feeds, and subscriptions, and searching for content...Given all that,
we're really rethinking the way we present information to the user, and the way users
discover new information.&amp;nbsp; We're designing ways for people to participate in
a larger community if they wish, and get more value out of the content they consume,
at the point they discover it.&amp;nbsp; While we all have our own set of feeds, and we
all participate to some extent in the larger ecosystem, there is a lot of potential
in linking people with similar interests to each other.&amp;nbsp; Some users will continue
to use our system as they always have - and others will use it in completely different
ways.&amp;nbsp;&amp;nbsp;We're testing a couple of approaches on this right now -&amp;nbsp;I think
it's truly a game-changer.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;&lt;strong&gt;NewsGator Inbox, FeedDemon, NetNewsWire&lt;/strong&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;As I mentioned before, the enthusiasm around these products has continued to grow
- people obviously see the value in a rich, synchronized, offline-capable user experience
for consuming content.&amp;nbsp; Moving forward, online integration will get tighter,
and more complete - ranging from the low hanging fruit like FeedDemon "News Bins"
becoming Clippings (and thus synchronize with the entire platform), to more involved
features like analytics-related features (recommendations, interest-based surfacing,
etc.) and community-related features.&lt;br&gt;
...&lt;br&gt;
&lt;strong&gt;NewsGator core platform&lt;/strong&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;This is the heart of our entire product line (with the exception of NewsGator Enterprise
Server).&amp;nbsp; Moving forward, we're investing a lot in the platform.&amp;nbsp; We're
building out more support for deep analytics (which we can use to deliver different
kinds of user experience), and building out a much deeper metadata engine (which means
if a client retrieves content from our system, they'll get much richer data than they
otherwise would).&amp;nbsp; We'll have other ways to "slice" our data to get what you
need, without having to subscribe to hundreds of feeds.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;The API has been very successful, and we process millions of API calls per day
from client applications, web services, and private label clients.&amp;nbsp; This traffic
actually makes up a large percentage of our overall system traffic - which I think
is a testament to the popularity and utility of the API.&amp;nbsp; Moving forward here,
we're obviously very committed to the API story, and we'll continue to enhance it
as we add platform capabilities.&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
There's lots of good stuff here. The first thing that pops out at me is that while
a bunch of startups these days tend to proclaim the death of desktop software, NewsGator
is actually seeing the best of both worlds and improving the quality of the desktop
experience by harnessing a Web-based platform. It's not Web-based software replacing
desktop software, it's desktop software becoming better by working in tandem with
APIs and applications on the Web. When Ray Ozzie talks about &lt;a href="http://radar.oreilly.com/archives/2005/11/live_software.html"&gt;"live
software"&lt;/a&gt;, NewsGator is the company that leaps most readily to my mind. 
&lt;/p&gt;
&lt;p&gt;
I like the idea of making discovery of new content more of a social experience. It'd
be interesting to see what would happen if NewsGator Online had a &lt;a href="http://del.icio.us/"&gt;del.icio.us-inspired&lt;/a&gt; interface
for browsing and subscribing to people's feeds. I notice that Gordon Weakliem who
works on the &lt;a href="http://www.newsgator.com/ngs/api/"&gt;NewsGator API&lt;/a&gt; recently
wrote a post entitled &lt;a href="http://www.agileprogrammer.com/eightytwenty/archive/2006/07/06/16772.aspx"&gt;Needles
in Haystacks&lt;/a&gt; where he talks about serendipitous discovery of new websites by browsing
bookmarks of people with similar interests to him in &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;.
I'm sure it's just a matter of time before NewsGator adds these features to their
platform. 
&lt;/p&gt;
&lt;p&gt;
I also like the idea of exposing richer metadata in the &lt;a href="http://www.newsgator.com/ngs/api/"&gt;NewsGator
API&lt;/a&gt; especially if it relates to the social features that they plan to unveil in
the next couple of months. Unfortunately, I've never been able to get the NewsGator
API to work quite right with &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt; but
I'll be revisiting that code later in the summer. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=c361c55f-0332-40e8-b8b1-458eb2b0ca91" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,c361c55f-0332-40e8-b8b1-458eb2b0ca91.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=ae2b73e2-16a6-4d33-8dc7-f164a4f2c372</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,ae2b73e2-16a6-4d33-8dc7-f164a4f2c372.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,ae2b73e2-16a6-4d33-8dc7-f164a4f2c372.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=ae2b73e2-16a6-4d33-8dc7-f164a4f2c372</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.crunchnotes.com/">Mike Arrington</a> of <a href="http://www.techcrunch.com">TechCrunch</a> fame
has a blog post entitled where he lays out the demographics of the various RSS readers
used to subscribe to his feed. Below is an excerpt of his post and a partial screenshot
of his <a href="http://www.feedburner.com">FeedBurner</a> statistics showing the top
fourteen feed readers used to access the <a href="http://www.techcrunch.com/">TechCrunch</a> feed 
<br /></p>
        <blockquote>
          <i>
            <a href="http://www.mozilla.com/firefox/">Firefox</a> (including <a href="http://www.flock.com/">Flock</a>)
accounts for 20% of feed readers. <a href="http://www.bloglines.com/">Bloglines</a> is
in second place with 13%, followed by <a href="http://www.newsgator.com/">NewsGator</a> at
12%, <a href="http://www.rojo.com/">Rojo</a> at 8%, <a href="http://www.feedreader.com/">FeedReader</a> at
7%, and <a href="http://www.www.netvibes.com/">Netvibes</a> at 7%. Other notables
include <a href="http://www.pageflakes.com/">Pageflakes</a>, <a href="http://www.pluck.com/">Pluck</a> and <a href="http://www.attensa.com/">Attensa</a>.
If you add NetNewsWire to the core NewsGator stats, NewsGator is actually bigger than
bloglines.<br />
...<br /><img src="http://www.25hoursaday.com/weblog/content/binary/mike_arrington_feedburner_stats.jpg" /></i>
        </blockquote>
        <p>
The feed reader statistics are surprising to me both for the feed readers that show
up in the list and for those that don't. For example, I'm surprised to see <a href="http://www.feedreader.com/">FeedReader</a> at
#5 yet not see <a href="http://www.feeddemon.com/">FeedDemon</a> in the top 14. Similarly,
the popularity of AJAX home pages like <a href="http://www.pageflakes.com/">Pageflakes</a> and <a href="http://www.www.netvibes.com/">Netvibes</a> over
those from the big 3 (Google/Yahoo/Microsoft) is also unexpected. Of course, these
statistics might be skewed because <a href="http://www.techcrunch.com/">TechCrunch</a> is
one of the default feeds in <a href="http://www.www.netvibes.com/">Netvibes</a>. A
final surprise is that <a href="http://www.newsgator.com/ngs/">NewsGator Online</a> is
almost as popular as <a href="http://www.bloglines.com">Bloglines</a> among readers
of <a href="http://www.techcrunch.com/">TechCrunch</a>.This seems to mean that the
latter is finally getting a lot of cred among the early adopter crowd especially since
the former has been slow to update in the past year. 
</p>
        <p>
For a completely different set of demographics, here are the top 14 feed readers used
to access <a href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetRss">my
RSS feed</a> according to FeedBurner.
</p>
        <img src="http://www.25hoursaday.com/weblog/content/binary/my_feedburner_stats.jpg" />
        <p>
I wonder what conclusion you draw from how different the distribution of feed readers
is in the above screenshots. For example, I think the fact that a bunch of Microsoft
employees and developers on Microsoft's platfoms read my blog explains why there are
multiple instances of feed readers based on the <a href="http://msdn.microsoft.com/netframework/">.NET
Framework</a> in the above list. In addition, I suspect this also explains why there
is an entry for the <a href="http://blogs.msdn.com/ie/archive/2006/02/01/522481.aspx">Windows
RSS platform</a> in the top 10 applications hitting my feed.  
</p>
        <p>
On the flip side, I have no explanation for why it seems that <a href="http://www.newsgator.com/ngs/">NewsGator
Online</a> is half as popular as <a href="http://www.bloglines.com">Bloglines</a> among
the readers of my blog.
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=ae2b73e2-16a6-4d33-8dc7-f164a4f2c372" />
      </body>
      <title>What Do Your Feed Subscribers Say About You?</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,ae2b73e2-16a6-4d33-8dc7-f164a4f2c372.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/07/04/WhatDoYourFeedSubscribersSayAboutYou.aspx</link>
      <pubDate>Tue, 04 Jul 2006 15:05:44 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.crunchnotes.com/"&gt;Mike Arrington&lt;/a&gt; of &lt;a href="http://www.techcrunch.com"&gt;TechCrunch&lt;/a&gt; fame
has a blog post entitled where he lays out the demographics of the various RSS readers
used to subscribe to his feed. Below is an excerpt of his post and a partial screenshot
of his &lt;a href="http://www.feedburner.com"&gt;FeedBurner&lt;/a&gt; statistics showing the top
fourteen feed readers used to access the &lt;a href="http://www.techcrunch.com/"&gt;TechCrunch&lt;/a&gt; feed 
&lt;br&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt; (including &lt;a href="http://www.flock.com/"&gt;Flock&lt;/a&gt;)
accounts for 20% of feed readers. &lt;a href="http://www.bloglines.com/"&gt;Bloglines&lt;/a&gt; is
in second place with 13%, followed by &lt;a href="http://www.newsgator.com/"&gt;NewsGator&lt;/a&gt; at
12%, &lt;a href="http://www.rojo.com/"&gt;Rojo&lt;/a&gt; at 8%, &lt;a href="http://www.feedreader.com/"&gt;FeedReader&lt;/a&gt; at
7%, and &lt;a href="http://www.www.netvibes.com/"&gt;Netvibes&lt;/a&gt; at 7%. Other notables
include &lt;a href="http://www.pageflakes.com/"&gt;Pageflakes&lt;/a&gt;, &lt;a href="http://www.pluck.com/"&gt;Pluck&lt;/a&gt; and &lt;a href="http://www.attensa.com/"&gt;Attensa&lt;/a&gt;.
If you add NetNewsWire to the core NewsGator stats, NewsGator is actually bigger than
bloglines.&lt;br&gt;
...&lt;br&gt;
&lt;img src="http://www.25hoursaday.com/weblog/content/binary/mike_arrington_feedburner_stats.jpg"&gt;&lt;/i&gt;&lt;/blockquote&gt; 
&lt;p&gt;
The feed reader statistics are surprising to me both for the feed readers that show
up in the list and for those that don't. For example, I'm surprised to see &lt;a href="http://www.feedreader.com/"&gt;FeedReader&lt;/a&gt; at
#5 yet not see &lt;a href="http://www.feeddemon.com/"&gt;FeedDemon&lt;/a&gt; in the top 14. Similarly,
the popularity of AJAX home pages like &lt;a href="http://www.pageflakes.com/"&gt;Pageflakes&lt;/a&gt; and &lt;a href="http://www.www.netvibes.com/"&gt;Netvibes&lt;/a&gt; over
those from the big 3 (Google/Yahoo/Microsoft) is also unexpected. Of course, these
statistics might be skewed because &lt;a href="http://www.techcrunch.com/"&gt;TechCrunch&lt;/a&gt; is
one of the default feeds in &lt;a href="http://www.www.netvibes.com/"&gt;Netvibes&lt;/a&gt;. A
final surprise is that &lt;a href="http://www.newsgator.com/ngs/"&gt;NewsGator Online&lt;/a&gt; is
almost as popular as &lt;a href="http://www.bloglines.com"&gt;Bloglines&lt;/a&gt; among readers
of &lt;a href="http://www.techcrunch.com/"&gt;TechCrunch&lt;/a&gt;.This seems to mean that the
latter is finally getting a lot of cred among the early adopter crowd especially since
the former has been slow to update in the past year. 
&lt;/p&gt;
&lt;p&gt;
For a completely different set of demographics, here are the top 14 feed readers used
to access &lt;a href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetRss"&gt;my
RSS feed&lt;/a&gt; according to FeedBurner.
&lt;/p&gt;
&lt;img src="http://www.25hoursaday.com/weblog/content/binary/my_feedburner_stats.jpg"&gt;
&lt;p&gt;
I wonder what conclusion you draw from how different the distribution of feed readers
is in the above screenshots. For example, I think the fact that a bunch of Microsoft
employees and developers on Microsoft's platfoms read my blog explains why there are
multiple instances of feed readers based on the &lt;a href="http://msdn.microsoft.com/netframework/"&gt;.NET
Framework&lt;/a&gt; in the above list. In addition, I suspect this also explains why there
is an entry for the &lt;a href="http://blogs.msdn.com/ie/archive/2006/02/01/522481.aspx"&gt;Windows
RSS platform&lt;/a&gt; in the top 10 applications hitting my feed.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
On the flip side, I have no explanation for why it seems that &lt;a href="http://www.newsgator.com/ngs/"&gt;NewsGator
Online&lt;/a&gt; is half as popular as &lt;a href="http://www.bloglines.com"&gt;Bloglines&lt;/a&gt; among
the readers of my blog.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=ae2b73e2-16a6-4d33-8dc7-f164a4f2c372" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,ae2b73e2-16a6-4d33-8dc7-f164a4f2c372.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=96747d35-9190-483b-95e2-5b1ccab48df2</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,96747d35-9190-483b-95e2-5b1ccab48df2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,96747d35-9190-483b-95e2-5b1ccab48df2.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=96747d35-9190-483b-95e2-5b1ccab48df2</wfw:commentRss>
      <slash:comments>9</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Seeing <a href="http://weblog.infoworld.com/udell/2006/06/03.html#a1461">Jon Udell's
post about having difficulty with the Google PR team</a> with regards to discussing
the <a href="http://code.google.com/apis/gdata/">Google GData API</a> reminded me
that I needed to write down some of my thoughts on extending RSS and Atom based on
looking at GData. There are basically three approaches one can take when deciding
to extend an XML syndication format such as RSS or Atom 
</p>
        <ol>
          <li>
            <p>
              <u>Add extension elements in a different namespace:</u> This is the <a href="http://blogs.law.harvard.edu/tech/rss#extendingRss">traditional
approach to extending RSS</a> and it involves adding new elements as children of the <code>item</code> or <code>atom:entry</code> element
which carry application/context specific data beyond that provided by the RSS/Atom
elements. Microsoft's <a href="http://msdn.microsoft.com/xml/rss/sse/">Simple Sharing
Extensions</a>, Apple's <a href="http://www.apple.com/itunes/podcasts/techspecs.html">iTunes
RSS extensions</a>, Yahoo's <a href="http://search.yahoo.com/mrss">Media RSS extensions</a> and
Google's <a href="http://code.google.com/apis/gdata/common-elements.html">GData common
elements</a> all follow this model. 
<br /></p>
          </li>
          <li>
            <p>
              <u>Provide links to alternate documents/formats as payload:</u> This approach involves
providing links to additional data or metadata from an item in the feed. <a href="http://en.wikipedia.org/wiki/Podcasting">Podcasting</a> is
the canonical example of this technique. One argument for this approach is that instead
of coming up with extension elements that replicate existing file formats, one should
simply embed links to files in the appropriate formats. This argument has been used
in various discussions on syndicating calendar information (i.e. <a href="http://tools.ietf.org/html/2445">iCalendar</a> payloads)
and contact lists (i.e. <a href="http://en.wikipedia.org/wiki/Vcard">vCard</a> payloads).
See James Snell's post <a href="http://www.snellspace.com/wp/?p=306">Notes: Atom and
the Google Data API</a> for more on this topic. 
<br /></p>
          </li>
          <li>
            <p>
              <u>Embed microformats in [X]HTML content:</u> A <a href="http://microformats.org/about/">microformat</a> is
structured data embedded within another markup language (typically HTML/XHTML). This
allows one to represent both human-readable data and machine-readable data in a single
document. The <a href="http://www.structuredblogging.org/formats.php">Structured Blogging
initiative</a> is an example of this technique. 
<br /></p>
          </li>
        </ol>
        <p>
All three approaches have their pros and cons. Option #1 is problematic because it
encourages a proliferation of duplicative extensions and may lead to fragmenting the
embedded data into multiple unrelated elements instead of a single document/format.
Option #2 requires RSS/Atom clients to either build parsers for non-syndication formats
or rely on external libraries for consuming information in the feed. The problem with
Option #3 above is that it introduces a dependency on an HTML/XHTML parser for extracting
the embedded data from the content of the feed. 
</p>
        <p>
From my experience with <a href="http://www.rssbandit.org">RSS Bandit</a>, I have
a preference for Option #1 although there is a certain architectural purity with Option
#2 which appeals to me. What do the XML syndication geeks in the audience think about
this? 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=96747d35-9190-483b-95e2-5b1ccab48df2" />
      </body>
      <title>Extending RSS and Atom: What is the Best Way?</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,96747d35-9190-483b-95e2-5b1ccab48df2.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/06/05/ExtendingRSSAndAtomWhatIsTheBestWay.aspx</link>
      <pubDate>Mon, 05 Jun 2006 18:55:01 GMT</pubDate>
      <description>&lt;p&gt;
Seeing &lt;a href="http://weblog.infoworld.com/udell/2006/06/03.html#a1461"&gt;Jon Udell's
post about having difficulty with the Google PR team&lt;/a&gt; with regards to discussing
the &lt;a href="http://code.google.com/apis/gdata/"&gt;Google GData API&lt;/a&gt; reminded me
that I needed to write down some of my thoughts on extending RSS and Atom based on
looking at GData. There are basically three approaches one can take when deciding
to extend an XML syndication format such as RSS or Atom 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
&lt;u&gt;Add extension elements in a different namespace:&lt;/u&gt; This is the &lt;a href="http://blogs.law.harvard.edu/tech/rss#extendingRss"&gt;traditional
approach to extending RSS&lt;/a&gt; and it involves adding new elements as children of the &lt;code&gt;item&lt;/code&gt; or &lt;code&gt;atom:entry&lt;/code&gt; element
which carry application/context specific data beyond that provided by the RSS/Atom
elements. Microsoft's &lt;a href="http://msdn.microsoft.com/xml/rss/sse/"&gt;Simple Sharing
Extensions&lt;/a&gt;, Apple's &lt;a href="http://www.apple.com/itunes/podcasts/techspecs.html"&gt;iTunes
RSS extensions&lt;/a&gt;, Yahoo's &lt;a href="http://search.yahoo.com/mrss"&gt;Media RSS extensions&lt;/a&gt; and
Google's &lt;a href="http://code.google.com/apis/gdata/common-elements.html"&gt;GData common
elements&lt;/a&gt; all follow this model. 
&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;u&gt;Provide links to alternate documents/formats as payload:&lt;/u&gt; This approach involves
providing links to additional data or metadata from an item in the feed. &lt;a href="http://en.wikipedia.org/wiki/Podcasting"&gt;Podcasting&lt;/a&gt; is
the canonical example of this technique. One argument for this approach is that instead
of coming up with extension elements that replicate existing file formats, one should
simply embed links to files in the appropriate formats. This argument has been used
in various discussions on syndicating calendar information (i.e. &lt;a href="http://tools.ietf.org/html/2445"&gt;iCalendar&lt;/a&gt; payloads)
and contact lists (i.e. &lt;a href="http://en.wikipedia.org/wiki/Vcard"&gt;vCard&lt;/a&gt; payloads).
See James Snell's post &lt;a href="http://www.snellspace.com/wp/?p=306"&gt;Notes: Atom and
the Google Data API&lt;/a&gt; for more on this topic. 
&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;u&gt;Embed microformats in [X]HTML content:&lt;/u&gt; A &lt;a href="http://microformats.org/about/"&gt;microformat&lt;/a&gt; is
structured data embedded within another markup language (typically HTML/XHTML). This
allows one to represent both human-readable data and machine-readable data in a single
document. The &lt;a href="http://www.structuredblogging.org/formats.php"&gt;Structured Blogging
initiative&lt;/a&gt; is an example of this technique. 
&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
All three approaches have their pros and cons. Option #1 is problematic because it
encourages a proliferation of duplicative extensions and may lead to fragmenting the
embedded data into multiple unrelated elements instead of a single document/format.
Option #2 requires RSS/Atom clients to either build parsers for non-syndication formats
or rely on external libraries for consuming information in the feed. The problem with
Option #3 above is that it introduces a dependency on an HTML/XHTML parser for extracting
the embedded data from the content of the feed. 
&lt;/p&gt;
&lt;p&gt;
From my experience with &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt;, I have
a preference for Option #1 although there is a certain architectural purity with Option
#2 which appeals to me. What do the XML syndication geeks in the audience think about
this? 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=96747d35-9190-483b-95e2-5b1ccab48df2" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,96747d35-9190-483b-95e2-5b1ccab48df2.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=0fa916f1-4081-46a0-9020-e3fbc488caac</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,0fa916f1-4081-46a0-9020-e3fbc488caac.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,0fa916f1-4081-46a0-9020-e3fbc488caac.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=0fa916f1-4081-46a0-9020-e3fbc488caac</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last week there was an <a href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=808">outage
on NewsGator Online</a>. This outage didn't just affect people who use the <a href="https://www.newsgator.com/ngs/si.aspx">NewsGator
Online</a> but also users of their desktop readers such as <a href="http://www.feeddemon.com/">FeedDemon</a> which
synchronize the users feed state between the desktop and the web-based reader. 
</p>
        <p>
In his post <a href="http://nick.typepad.com/blog/2006/04/dealing_with_co.html">Dealing
with Connectivity Issues in Desktop Applications</a> Nick Bradbury writes 
</p>
        <blockquote>
          <i> One of the more frustrating challenges when designing a desktop application
that connects to the Internet is figuring out how to deal with connectivity issues
caused by firewalls, proxy servers and server outages.<br />
...<br />
And as we discovered last week, when your application relies on a server-side API,
it has to be able to deal with the server being unavailable without significantly
impacting the customer. This was something FeedDemon 2.0 failed to do, and I have
to take the blame for this. Because of my poor design, synchronized feeds couldn't
be updated while our server was down, and to make matters worse, FeedDemon kept displaying
a "synchronization service unavailable" message every time it tried to connect - so
not only could you not get new content, but you were also bombarded with error messages
you could do nothing about.</i>
        </blockquote>
        <p>
A couple of months ago I wrote a blog post entitled <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=1da20ddb-e88d-4cf9-8171-bf75bdbd021c">The
Newsgator API Continues to Frustrate Me</a> where I complained about the fact that
Newsgator Online assumes that clients that synchronize with it actually just fetch
all their data from Newsgator Online including feed content. This is a bad design
decision because it means that they expected all desktop clients who synchronize with
the web-based reader to have a single point of failure. As someone who's day job is
working on the platforms that power a number of Windows Live services, I know from
experience that service outages are a fact of life. In addition, I also know that
you don't want clients making requests to your service unless they absolutely have
to. This is not a big deal at first but once you get enough clients you start wanting
them to do as much data retrieval and processing as they can without hitting your
service. Having a desktop feed reader rely on a web service for fetching feeds instead
of having it fetch feeds itself needlessly increases the costs of running your online
service and doesn't buy your customers a significantly improved user experience.  
</p>
        <p>
I've bumped into <a href="http://www.rassoc.com/gregr/weblog/">Greg Reinacker</a> since
I complained about the Newsgator API and he's been adamant about the correctness of
their design decisions. I hope the fallout from the recent outage makes them rethink
some of the design of Newsgator's RSS platform. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=0fa916f1-4081-46a0-9020-e3fbc488caac" />
      </body>
      <title>Lessons from the NewsGator Outage</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,0fa916f1-4081-46a0-9020-e3fbc488caac.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/04/25/LessonsFromTheNewsGatorOutage.aspx</link>
      <pubDate>Tue, 25 Apr 2006 17:03:41 GMT</pubDate>
      <description>&lt;p&gt;
Last week there was an &lt;a href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=808"&gt;outage
on NewsGator Online&lt;/a&gt;. This outage didn't just affect people who use the &lt;a href="https://www.newsgator.com/ngs/si.aspx"&gt;NewsGator
Online&lt;/a&gt; but also users of their desktop readers such as &lt;a href="http://www.feeddemon.com/"&gt;FeedDemon&lt;/a&gt; which
synchronize the users feed state between the desktop and the web-based reader. 
&lt;/p&gt;
&lt;p&gt;
In his post &lt;a href="http://nick.typepad.com/blog/2006/04/dealing_with_co.html"&gt;Dealing
with Connectivity Issues in Desktop Applications&lt;/a&gt; Nick Bradbury writes 
&lt;/p&gt;
&lt;blockquote&gt;&lt;i&gt; One of the more frustrating challenges when designing a desktop application
that connects to the Internet is figuring out how to deal with connectivity issues
caused by firewalls, proxy servers and server outages.&lt;br&gt;
...&lt;br&gt;
And as we discovered last week, when your application relies on a server-side API,
it has to be able to deal with the server being unavailable without significantly
impacting the customer. This was something FeedDemon 2.0 failed to do, and I have
to take the blame for this. Because of my poor design, synchronized feeds couldn't
be updated while our server was down, and to make matters worse, FeedDemon kept displaying
a "synchronization service unavailable" message every time it tried to connect - so
not only could you not get new content, but you were also bombarded with error messages
you could do nothing about.&lt;/i&gt;&lt;/blockquote&gt; 
&lt;p&gt;
A couple of months ago I wrote a blog post entitled &lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=1da20ddb-e88d-4cf9-8171-bf75bdbd021c"&gt;The
Newsgator API Continues to Frustrate Me&lt;/a&gt; where I complained about the fact that
Newsgator Online assumes that clients that synchronize with it actually just fetch
all their data from Newsgator Online including feed content. This is a bad design
decision because it means that they expected all desktop clients who synchronize with
the web-based reader to have a single point of failure. As someone who's day job is
working on the platforms that power a number of Windows Live services, I know from
experience that service outages are a fact of life. In addition, I also know that
you don't want clients making requests to your service unless they absolutely have
to. This is not a big deal at first but once you get enough clients you start wanting
them to do as much data retrieval and processing as they can without hitting your
service. Having a desktop feed reader rely on a web service for fetching feeds instead
of having it fetch feeds itself needlessly increases the costs of running your online
service and doesn't buy your customers a significantly improved user experience.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I've bumped into &lt;a href="http://www.rassoc.com/gregr/weblog/"&gt;Greg Reinacker&lt;/a&gt; since
I complained about the Newsgator API and he's been adamant about the correctness of
their design decisions. I hope the fallout from the recent outage makes them rethink
some of the design of Newsgator's RSS platform. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=0fa916f1-4081-46a0-9020-e3fbc488caac" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,0fa916f1-4081-46a0-9020-e3fbc488caac.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=8e307928-e4a5-4fbd-afff-ab005f07ec22</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,8e307928-e4a5-4fbd-afff-ab005f07ec22.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,8e307928-e4a5-4fbd-afff-ab005f07ec22.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=8e307928-e4a5-4fbd-afff-ab005f07ec22</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Via <a href="http://weblog.burningbird.net/2006/04/08/look-who-came-in-from-the-cold/">Shelley
Powers</a> I found out that Mark Pilgrim has restarted his blog with a new post entitled <a href="http://diveintomark.org/archives/2006/04/07/bath">After
the Bath</a>. Ironically, I didn't find this out from <a href="http://www.rssbandit.org">my
favorite RSS reader</a> because it correctly supports the <a href="http://www.intertwingly.net/blog/2004/06/13/Gone-Really-I-mean-it">HTTP
410(GONE) status code</a> which Mark's feed has been returning for over a year. 
</p>
        <p>
Mark Pilgrim's feed being resurrected from the dead is another example of why simply
implementing support for Web specifications as written sometimes bites you on the
butt. :) 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8e307928-e4a5-4fbd-afff-ab005f07ec22" />
      </body>
      <title>Mark Pilgrim is Back</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,8e307928-e4a5-4fbd-afff-ab005f07ec22.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/04/10/MarkPilgrimIsBack.aspx</link>
      <pubDate>Mon, 10 Apr 2006 13:53:05 GMT</pubDate>
      <description>&lt;p&gt;
Via &lt;a href="http://weblog.burningbird.net/2006/04/08/look-who-came-in-from-the-cold/"&gt;Shelley
Powers&lt;/a&gt; I found out that Mark Pilgrim has restarted his blog with a new post entitled &lt;a href="http://diveintomark.org/archives/2006/04/07/bath"&gt;After
the Bath&lt;/a&gt;. Ironically, I didn't find this out from &lt;a href="http://www.rssbandit.org"&gt;my
favorite RSS reader&lt;/a&gt; because it correctly supports the &lt;a href="http://www.intertwingly.net/blog/2004/06/13/Gone-Really-I-mean-it"&gt;HTTP
410(GONE) status code&lt;/a&gt; which Mark's feed has been returning for over a year. 
&lt;/p&gt;
&lt;p&gt;
Mark Pilgrim's feed being resurrected from the dead is another example of why simply
implementing support for Web specifications as written sometimes bites you on the
butt. :) 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8e307928-e4a5-4fbd-afff-ab005f07ec22" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,8e307928-e4a5-4fbd-afff-ab005f07ec22.aspx</comments>
      <category>Mindless Link Propagation</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=1d3eb374-1582-42df-9881-a00d3bd3fabb</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,1d3eb374-1582-42df-9881-a00d3bd3fabb.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,1d3eb374-1582-42df-9881-a00d3bd3fabb.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=1d3eb374-1582-42df-9881-a00d3bd3fabb</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I stopped paying attention to the <a href="http://www.google.com/search?q=syndication+wars">syndication
wars</a> a couple of months ago. I barely have time to stay on top of all the stuff
I have to worry about as part of my day job let alone keeping track of the pointlessness
that is the Atom vs. RSS debate. Unfortunately, every once in a while something happens
that forces me to pay attention because I'm also the project lead for <a href="http://www.rssbandit.org">RSS
Bandit</a>. 
</p>
        <p>
One cool thing about XML syndication formats like RSS and Atom is that they are easily
extensible. This means that anyone can come up with a new extension to the RSS/Atom
formats which adds a new feature but is ignored by feed readers that don't understand
the extension. Some of my favorite extensions are <a href="http://web.resource.org/rss/1.0/modules/slash/">slash:comments</a> which
provides a count of the number of comments in a feed and <a href="http://wellformedweb.org/news/wfw_namespace_elements/">wfw:commentRss</a> which
provides the URL to the feed for the comments to a blog post in the feed. One of my
work items for the next version of <a href="http://www.rssbandit.org">RSS Bandit</a> is
to make it easier for people to 'watch' the comments for a blog post they are interested
in if it supports these extensions. That way I can get get a notification everytime
some comment thread I am interested in gets new posts directly from my aggregator
instead of using other tools like <a href="http://www.cocomment.com/">CoComment</a>. 
</p>
        <p>
A few days ago Sam Ruby posted an entry entitled <a href="http://www.intertwingly.net/blog/2006/03/31/Rogers-Switches">Rogers
Switches!</a> where he mentioned that he now redirects all requests for his RSS feeds
to his Atom feed. This meant that in <a href="http://www.rssbandit.org">RSS Bandit</a> I
now no longer see the comment count for the blog posts in Sam's feed nor can I view
the comments to his posts directly within my aggregator. Sam and I had the following
exchange in his blog comments when I discovered the ramifications of his change 
<br /></p>
        <blockquote>
          <p>
            <i>I was trying to figure out if I’d introduced a bug in RSS Bandit to make your comment
count and inline comments disappear. Instead, it seems you have made your feed less
useful as part of the fallout of yet another iteration of the eternal pissing match
which is the XML syndication wars. </i>
          </p>
          <p>
            <i>
              <b>sigh</b>
            </i>
          </p>
          <i>Posted by <a title="tide502.microsoft.com" href="../weblog">Dare Obasanjo</a> at <a href="http://www.intertwingly.net/blog/2006/03/31/Rogers-Switches#c1144110316">20:25</a><br /></i>
          <hr />
          <div class="comment">
            <i>Dare, is this is your way of saying that you don’t intend
to support the <a href="http://www1.tools.ietf.org/wg/atompub/draft-snell-atompub-feed-thread-06.txt">Feed
Thread Extension</a>?  I’d think that you would be <a href="http://www.majordojo.com/2006/01/implementing_ja.php">on
the watch</a> for it. 
<br /><br />
Posted by <a title="cpe-066-057-027-065.nc.res.rr.com" href="http://www.intertwingly.net/blog/">Sam
Ruby</a> at <a href="http://www.intertwingly.net/blog/2006/03/31/Rogers-Switches#c1144116527">22:08</a></i>
          </div>
        </blockquote>
        <p>
I looked at the draft of the <a href="http://www1.tools.ietf.org/wg/atompub/draft-snell-atompub-feed-thread-06.txt">Feed
Thread Extension specification</a> Sam linked to and it seems like a reinvention of
the functionality provided by the <a href="http://web.resource.org/rss/1.0/modules/slash/">slash:comments</a>, <a href="http://wellformedweb.org/news/wfw_namespace_elements/">wfw:commentRss</a> and <a href="http://web.resource.org/rss/1.0/modules/annotation/">annotate:reference</a> extensions.
Great, not only do we now have to deal with the an increase in the number of competing
XML syndication formats due to the Atom process ...<i>By the way, have you seen the <a href="http://photomatt.net/2006/03/19/invalid-atom">Atom
0.3 vs. Atom 1.0</a> debate? <a href="http://www.google.com/search?q=+site:www.25hoursaday.com+carnage4life+atom+0.3+atom+1.0">I
told you so</a>...</i> we now also have to deal with duplicates of all the popular
RSS extensions as well? Give me a break! 
</p>
        <p>
That said, you can expect support for these new extensions in the next version of <a href="http://www.rssbandit.org">RSS
Bandit</a>. At the end of the day, what matters is building useful software for our
users regardless of how many petty annoyances are thrown in our way on the road there. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=1d3eb374-1582-42df-9881-a00d3bd3fabb" />
      </body>
      <title>Pointless Reinvention of the Wheel</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,1d3eb374-1582-42df-9881-a00d3bd3fabb.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/04/04/PointlessReinventionOfTheWheel.aspx</link>
      <pubDate>Tue, 04 Apr 2006 17:27:17 GMT</pubDate>
      <description>&lt;p&gt;
I stopped paying attention to the &lt;a href="http://www.google.com/search?q=syndication+wars"&gt;syndication
wars&lt;/a&gt; a couple of months ago. I barely have time to stay on top of all the stuff
I have to worry about as part of my day job let alone keeping track of the pointlessness
that is the Atom vs. RSS debate. Unfortunately, every once in a while something happens
that forces me to pay attention because I'm also the project lead for &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
One cool thing about XML syndication formats like RSS and Atom is that they are easily
extensible. This means that anyone can come up with a new extension to the RSS/Atom
formats which adds a new feature but is ignored by feed readers that don't understand
the extension. Some of my favorite extensions are &lt;a href="http://web.resource.org/rss/1.0/modules/slash/"&gt;slash:comments&lt;/a&gt; which
provides a count of the number of comments in a feed and &lt;a href="http://wellformedweb.org/news/wfw_namespace_elements/"&gt;wfw:commentRss&lt;/a&gt; which
provides the URL to the feed for the comments to a blog post in the feed. One of my
work items for the next version of &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt; is
to make it easier for people to 'watch' the comments for a blog post they are interested
in if it supports these extensions. That way I can get get a notification everytime
some comment thread I am interested in gets new posts directly from my aggregator
instead of using other tools like &lt;a href="http://www.cocomment.com/"&gt;CoComment&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
A few days ago Sam Ruby posted an entry entitled &lt;a href="http://www.intertwingly.net/blog/2006/03/31/Rogers-Switches"&gt;Rogers
Switches!&lt;/a&gt; where he mentioned that he now redirects all requests for his RSS feeds
to his Atom feed. This meant that in &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt; I
now no longer see the comment count for the blog posts in Sam's feed nor can I view
the comments to his posts directly within my aggregator. Sam and I had the following
exchange in his blog comments when I discovered the ramifications of his change 
&lt;br&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;I was trying to figure out if I’d introduced a bug in RSS Bandit to make your comment
count and inline comments disappear. Instead, it seems you have made your feed less
useful as part of the fallout of yet another iteration of the eternal pissing match
which is the XML syndication wars. &lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;&lt;b&gt;sigh&lt;/b&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;i&gt;Posted by &lt;a title="tide502.microsoft.com" href="../weblog"&gt;Dare Obasanjo&lt;/a&gt; at &lt;a href="http://www.intertwingly.net/blog/2006/03/31/Rogers-Switches#c1144110316"&gt;20:25&lt;/a&gt;
&lt;br&gt;
&lt;/i&gt; 
&lt;hr&gt;
&lt;div class="comment"&gt;&lt;i&gt;Dare, is this is your way of saying that you don’t intend
to support the &lt;a href="http://www1.tools.ietf.org/wg/atompub/draft-snell-atompub-feed-thread-06.txt"&gt;Feed
Thread Extension&lt;/a&gt;?&amp;nbsp; I’d think that you would be &lt;a href="http://www.majordojo.com/2006/01/implementing_ja.php"&gt;on
the watch&lt;/a&gt; for it. 
&lt;br&gt;
&lt;br&gt;
Posted by &lt;a title="cpe-066-057-027-065.nc.res.rr.com" href="http://www.intertwingly.net/blog/"&gt;Sam
Ruby&lt;/a&gt; at &lt;a href="http://www.intertwingly.net/blog/2006/03/31/Rogers-Switches#c1144116527"&gt;22:08&lt;/a&gt;&lt;/i&gt; 
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I looked at the draft of the &lt;a href="http://www1.tools.ietf.org/wg/atompub/draft-snell-atompub-feed-thread-06.txt"&gt;Feed
Thread Extension specification&lt;/a&gt; Sam linked to and it seems like a reinvention of
the functionality provided by the &lt;a href="http://web.resource.org/rss/1.0/modules/slash/"&gt;slash:comments&lt;/a&gt;, &lt;a href="http://wellformedweb.org/news/wfw_namespace_elements/"&gt;wfw:commentRss&lt;/a&gt; and &lt;a href="http://web.resource.org/rss/1.0/modules/annotation/"&gt;annotate:reference&lt;/a&gt; extensions.
Great, not only do we now have to deal with the an increase in the number of competing
XML syndication formats due to the Atom process ...&lt;i&gt;By the way, have you seen the &lt;a href="http://photomatt.net/2006/03/19/invalid-atom"&gt;Atom
0.3 vs. Atom 1.0&lt;/a&gt; debate? &lt;a href="http://www.google.com/search?q=+site:www.25hoursaday.com+carnage4life+atom+0.3+atom+1.0"&gt;I
told you so&lt;/a&gt;...&lt;/i&gt; we now also have to deal with duplicates of all the popular
RSS extensions as well? Give me a break! 
&lt;/p&gt;
&lt;p&gt;
That said, you can expect support for these new extensions in the next version of &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt;. At the end of the day, what matters is building useful software for our
users regardless of how many petty annoyances are thrown in our way on the road there. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=1d3eb374-1582-42df-9881-a00d3bd3fabb" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,1d3eb374-1582-42df-9881-a00d3bd3fabb.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=4fd65bb1-2c59-44e5-aa97-75eea61487cb</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,4fd65bb1-2c59-44e5-aa97-75eea61487cb.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,4fd65bb1-2c59-44e5-aa97-75eea61487cb.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=4fd65bb1-2c59-44e5-aa97-75eea61487cb</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thanks to numerous reports from <a href="http://www.rssbandit.org">RSS Bandit</a> users
it has come to my attention that the Atom feeds provided by Google's <a href="http://www.blogger.com">Blogger</a> are
invalid and in many cases aren't even well-formed XML. Please fix this. I'm tired
of dealing with threads like <a href="http://www.rssbandit.org/forum/topic.asp?TOPIC_ID=1198">Blogspot
feeds - XML Failure</a> in our support forums. 
</p>
        <p>
If you'd like an example of what is wrong with your feeds. Click on <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml">http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml</a> which
shows the results of validating the feed for <a href="http://nothing-more.blogspot.com">Derek
Denny-Brown's blog</a>. Below is the list of errors returned 
</p>
        <blockquote>
          <p>
            <i>This feed does not validate.</i>
          </p>
          <ul>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l4">line
4</a>, column 0: <span class="message">This feed uses an obsolete namespace</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/ObsoleteNamespace.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;feed xmlns="http://purl.org/atom/ns#" version="0.3" xml:lang="en-US"&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l4">line
4</a>, column 0: <span class="message">Unexpected version attribute on feed element</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UnexpectedAttribute.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;feed xmlns="http://purl.org/atom/ns#" version="0.3" xml:lang="en-US"&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l7">line
7</a>, column 0: <span class="message">type attribute must be "text", "html", or "xhtml"</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/InvalidTextType.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;title mode="escaped" type="text/html"&gt;only this, and nothing
more&lt;/title&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l7">line
7</a>, column 0: <span class="message">Unexpected mode attribute on title element</span> (7
occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UnexpectedAttribute.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;title mode="escaped" type="text/html"&gt;only this, and nothing
more&lt;/title&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l8">line
8</a>, column 0: <span class="message">Undefined feed element: tagline</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;tagline mode="escaped" type="text/html"&gt;irregular eccentic
eclecticisms, di ...<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l11">line
11</a>, column 0: <span class="message">Undefined feed element: modified</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;modified&gt;2006-03-27T00:01:47Z&lt;/modified&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l12">line
12</a>, column 0: <span class="message">Unexpected url attribute on generator element</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UnexpectedAttribute.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;generator url="http://www.blogger.com/" version="5.15"&gt;Blogger&lt;/generator&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l13">line
13</a>, column 0: <span class="message">Undefined feed element: info</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;info mode="xml" type="text/html"&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l4">line
4</a>, column 0: <span class="message">Missing feed element: updated</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/MissingElement.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;feed xmlns="http://purl.org/atom/ns#" version="0.3" xml:lang="en-US"&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l22">line
22</a>, column 0: <span class="message">Undefined entry element: issued</span> (6
occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;issued&gt;2006-03-26T15:25:00-08:00&lt;/issued&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l23">line
23</a>, column 0: <span class="message">Undefined entry element: modified</span> (6
occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;modified&gt;2006-03-27T00:01:47Z&lt;/modified&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l24">line
24</a>, column 0: <span class="message">Undefined entry element: created</span> (6
occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;created&gt;2006-03-27T00:01:47Z&lt;/created&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l27">line
27</a>, column 0: <span class="message">type attribute must be "text", "html", or
"xhtml"</span> (6 occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/error/InvalidTextType.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;title mode="escaped" type="text/html"&gt;You call that Democracy?&lt;/title&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l36">line
36</a>, column 0: <span class="message">Missing entry element: updated</span> (5 occurrences)
[<a title="more information about this error" href="http://feedvalidator.org/docs/error/MissingElement.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;/entry&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <font color="#ff0000">
                  <i>
                    <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l153">line
153</a>, column 156: <span class="message">XML parsing error: &lt;unknown&gt;:153:156:
unbound prefix</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/error/SAXError.html">help</a>]</i>
                </font>
              </p>
              <blockquote>
                <pre>
                  <i>
                    <font color="#ff0000">... S-X's niceties. If I knew people on
the &lt;st1:place st="on"&gt;Vista&lt;/st1:pl ...</font>
                    <br />
                                             <span class="marker">^</span></i>
                </pre>
              </blockquote>
            </li>
          </ul>
          <p>
            <i>In addition, this feed has issues that may cause problems for some users. We recommend
fixing these issues.</i>
          </p>
          <ul>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l5">line
5</a>, column 134: <span class="message">service.post is not a registered link relationship</span> (2
occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/warning/UnregisteredAtomLinkRel.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>... hing more" type="application/atom+xml"/&gt;<br />
                                             <span class="marker">^</span></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l7">line
7</a>, column 66: <span class="message">text/html type used for a document fragment</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/warning/HtmlFragment.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;title mode="escaped" type="text/html"&gt;only this, and nothing
more&lt;/title&gt;<br />
                                                                  <span class="marker">^</span></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l4">line
4</a>, column 0: <span class="message">Missing atom:link with rel="self"</span> [<a title="more information about this error" href="http://feedvalidator.org/docs/warning/MissingSelf.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;feed xmlns="http://purl.org/atom/ns#" version="0.3" xml:lang="en-US"&gt;<br /></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l18">line
18</a>, column 150: <span class="message">service.edit is not a registered link relationship</span> (6
occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/warning/UnregisteredAtomLinkRel.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>... emocracy?" type="application/atom+xml"/&gt;<br />
                                             <span class="marker">^</span></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l27">line
27</a>, column 63: <span class="message">text/html type used for a document fragment</span> (6
occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/warning/HtmlFragment.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;title mode="escaped" type="text/html"&gt;You call that Democracy?&lt;/title&gt;<br />
                                                               <span class="marker">^</span></i>
                </pre>
              </blockquote>
            </li>
            <li>
              <p>
                <i>
                  <a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l29">line
29</a>, column 0: <span class="message">application/xhtml+xml type used for a document
fragment</span> (6 occurrences) [<a title="more information about this error" href="http://feedvalidator.org/docs/warning/HtmlFragment.html">help</a>]</i>
              </p>
              <blockquote>
                <pre>
                  <i>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;</i>
                  <br />
                </pre>
              </blockquote>
            </li>
          </ul>
        </blockquote>
        <p>
Thanks for listening. 
<br /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=4fd65bb1-2c59-44e5-aa97-75eea61487cb" />
      </body>
      <title>Open Letter to the Google Blogger Team</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,4fd65bb1-2c59-44e5-aa97-75eea61487cb.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/03/27/OpenLetterToTheGoogleBloggerTeam.aspx</link>
      <pubDate>Mon, 27 Mar 2006 18:09:42 GMT</pubDate>
      <description>&lt;p&gt;
Thanks to numerous reports from &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt; users
it has come to my attention that the Atom feeds provided by Google's &lt;a href="http://www.blogger.com"&gt;Blogger&lt;/a&gt; are
invalid and in many cases aren't even well-formed XML. Please fix this. I'm tired
of dealing with threads like &lt;a href="http://www.rssbandit.org/forum/topic.asp?TOPIC_ID=1198"&gt;Blogspot
feeds - XML Failure&lt;/a&gt; in our support forums. 
&lt;/p&gt;
&lt;p&gt;
If you'd like an example of what is wrong with your feeds. Click on &lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml"&gt;http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml&lt;/a&gt; which
shows the results of validating the feed for &lt;a href="http://nothing-more.blogspot.com"&gt;Derek
Denny-Brown's blog&lt;/a&gt;. Below is the list of errors returned 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;This feed does not validate.&lt;/i&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l4"&gt;line
4&lt;/a&gt;, column 0: &lt;span class="message"&gt;This feed uses an obsolete namespace&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/ObsoleteNamespace.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;feed xmlns="http://purl.org/atom/ns#" version="0.3" xml:lang="en-US"&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l4"&gt;line
4&lt;/a&gt;, column 0: &lt;span class="message"&gt;Unexpected version attribute on feed element&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UnexpectedAttribute.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;feed xmlns="http://purl.org/atom/ns#" version="0.3" xml:lang="en-US"&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l7"&gt;line
7&lt;/a&gt;, column 0: &lt;span class="message"&gt;type attribute must be "text", "html", or "xhtml"&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/InvalidTextType.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;title mode="escaped" type="text/html"&amp;gt;only this, and nothing
more&amp;lt;/title&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l7"&gt;line
7&lt;/a&gt;, column 0: &lt;span class="message"&gt;Unexpected mode attribute on title element&lt;/span&gt; (7
occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UnexpectedAttribute.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;title mode="escaped" type="text/html"&amp;gt;only this, and nothing
more&amp;lt;/title&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l8"&gt;line
8&lt;/a&gt;, column 0: &lt;span class="message"&gt;Undefined feed element: tagline&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;tagline mode="escaped" type="text/html"&amp;gt;irregular eccentic
eclecticisms, di ...&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l11"&gt;line
11&lt;/a&gt;, column 0: &lt;span class="message"&gt;Undefined feed element: modified&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;modified&amp;gt;2006-03-27T00:01:47Z&amp;lt;/modified&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l12"&gt;line
12&lt;/a&gt;, column 0: &lt;span class="message"&gt;Unexpected url attribute on generator element&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UnexpectedAttribute.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;generator url="http://www.blogger.com/" version="5.15"&amp;gt;Blogger&amp;lt;/generator&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l13"&gt;line
13&lt;/a&gt;, column 0: &lt;span class="message"&gt;Undefined feed element: info&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;info mode="xml" type="text/html"&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l4"&gt;line
4&lt;/a&gt;, column 0: &lt;span class="message"&gt;Missing feed element: updated&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/MissingElement.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;feed xmlns="http://purl.org/atom/ns#" version="0.3" xml:lang="en-US"&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l22"&gt;line
22&lt;/a&gt;, column 0: &lt;span class="message"&gt;Undefined entry element: issued&lt;/span&gt; (6
occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;issued&amp;gt;2006-03-26T15:25:00-08:00&amp;lt;/issued&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l23"&gt;line
23&lt;/a&gt;, column 0: &lt;span class="message"&gt;Undefined entry element: modified&lt;/span&gt; (6
occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;modified&amp;gt;2006-03-27T00:01:47Z&amp;lt;/modified&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l24"&gt;line
24&lt;/a&gt;, column 0: &lt;span class="message"&gt;Undefined entry element: created&lt;/span&gt; (6
occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/UndefinedElement.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;created&amp;gt;2006-03-27T00:01:47Z&amp;lt;/created&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l27"&gt;line
27&lt;/a&gt;, column 0: &lt;span class="message"&gt;type attribute must be "text", "html", or
"xhtml"&lt;/span&gt; (6 occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/InvalidTextType.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;title mode="escaped" type="text/html"&amp;gt;You call that Democracy?&amp;lt;/title&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l36"&gt;line
36&lt;/a&gt;, column 0: &lt;span class="message"&gt;Missing entry element: updated&lt;/span&gt; (5 occurrences)
[&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/MissingElement.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;/entry&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;font color="#ff0000"&gt;&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l153"&gt;line
153&lt;/a&gt;, column 156: &lt;span class="message"&gt;XML parsing error: &amp;lt;unknown&amp;gt;:153:156:
unbound prefix&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/error/SAXError.html"&gt;help&lt;/a&gt;]&lt;/i&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&lt;font color="#ff0000"&gt;... S-X's niceties. If I knew people on
the &amp;lt;st1:place st="on"&amp;gt;Vista&amp;lt;/st1:pl ...&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="marker"&gt;^&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;i&gt;In addition, this feed has issues that may cause problems for some users. We recommend
fixing these issues.&lt;/i&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l5"&gt;line
5&lt;/a&gt;, column 134: &lt;span class="message"&gt;service.post is not a registered link relationship&lt;/span&gt; (2
occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/warning/UnregisteredAtomLinkRel.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;... hing more" type="application/atom+xml"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="marker"&gt;^&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l7"&gt;line
7&lt;/a&gt;, column 66: &lt;span class="message"&gt;text/html type used for a document fragment&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/warning/HtmlFragment.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;title mode="escaped" type="text/html"&amp;gt;only this, and nothing
more&amp;lt;/title&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="marker"&gt;^&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l4"&gt;line
4&lt;/a&gt;, column 0: &lt;span class="message"&gt;Missing atom:link with rel="self"&lt;/span&gt; [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/warning/MissingSelf.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;feed xmlns="http://purl.org/atom/ns#" version="0.3" xml:lang="en-US"&amp;gt;&lt;br&gt;
&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l18"&gt;line
18&lt;/a&gt;, column 150: &lt;span class="message"&gt;service.edit is not a registered link relationship&lt;/span&gt; (6
occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/warning/UnregisteredAtomLinkRel.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;... emocracy?" type="application/atom+xml"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="marker"&gt;^&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l27"&gt;line
27&lt;/a&gt;, column 63: &lt;span class="message"&gt;text/html type used for a document fragment&lt;/span&gt; (6
occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/warning/HtmlFragment.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;title mode="escaped" type="text/html"&amp;gt;You call that Democracy?&amp;lt;/title&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="marker"&gt;^&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;i&gt;&lt;a href="http://feedvalidator.org/check?url=http://nothing-more.blogspot.com/atom.xml#l29"&gt;line
29&lt;/a&gt;, column 0: &lt;span class="message"&gt;application/xhtml+xml type used for a document
fragment&lt;/span&gt; (6 occurrences) [&lt;a title="more information about this error" href="http://feedvalidator.org/docs/warning/HtmlFragment.html"&gt;help&lt;/a&gt;]&lt;/i&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;&amp;lt;div xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;/i&gt;
&lt;br&gt;
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Thanks for listening. 
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=4fd65bb1-2c59-44e5-aa97-75eea61487cb" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,4fd65bb1-2c59-44e5-aa97-75eea61487cb.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=3b3b882e-a2bd-4b4e-a6b2-dd9337c33e3e</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,3b3b882e-a2bd-4b4e-a6b2-dd9337c33e3e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,3b3b882e-a2bd-4b4e-a6b2-dd9337c33e3e.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=3b3b882e-a2bd-4b4e-a6b2-dd9337c33e3e</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently there was a question asked on the RSS Bandit forums from a user who was <a href="http://www.rssbandit.org/forum/topic.asp?TOPIC_ID=1161">Unable
to Import RSSBandit-Exported OPML into IE7</a>. The question goes 
</p>
        <blockquote>
          <p>
            <i> I exported my feeds from RSSBandit 1.3.0.42 to an OPML file in hopes of trying
the feed support in IE7. IE7 seems to try to import, but ultimately tells me no feeds
were imported. The exported file must have over a 100 feeds, so it's not that. Has
anyone else been able to import feeds from RSSBandit into IE7?</i>
          </p>
        </blockquote>
        <p>
I got an answer for why this is the case from the Internet Explorer's RSS team. 
The reason is provided in the the <a href="http://www.rssbandit.org">RSS Bandit</a> bug
report, <a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1432628&amp;group_id=96589&amp;atid=615248">Support
type="rss" for export of feeds</a>, where I found out that somewhere along the line
someone came up with the convention of adding a <code>type="rss"</code> attribute
to indicate which were the RSS feeds in an OPML file. The Internet Explorer RSS team
has decided to enforce this convention for indicating RSS feeds in an OPML file and
will ignore entries that don't have this annotation. 
<br /></p>
        <p>
Since <a href="http://www.rssbandit.org">RSS Bandit</a> supports both RSS/Atom feeds
and USENET newsgroups, I can see the need to be able to differentiate which are the
feeds in an OPML file without having applications probe each URL. However I do think
that <code>type="rss"</code> is a misnomer since it should also apply to Atom feeds.
Perhaps <code>type="feed"</code> instead? 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=3b3b882e-a2bd-4b4e-a6b2-dd9337c33e3e" />
      </body>
      <title>Why IE 7 Can't Import OPML Files from RSS Bandit</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,3b3b882e-a2bd-4b4e-a6b2-dd9337c33e3e.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/02/18/WhyIE7CantImportOPMLFilesFromRSSBandit.aspx</link>
      <pubDate>Sat, 18 Feb 2006 18:30:55 GMT</pubDate>
      <description>&lt;p&gt;
Recently there was a question asked on the RSS Bandit forums from a user who was &lt;a href="http://www.rssbandit.org/forum/topic.asp?TOPIC_ID=1161"&gt;Unable
to Import RSSBandit-Exported OPML into IE7&lt;/a&gt;. The question goes 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt; I exported my feeds from RSSBandit 1.3.0.42 to an OPML file in hopes of trying
the feed support in IE7. IE7 seems to try to import, but ultimately tells me no feeds
were imported. The exported file must have over a 100 feeds, so it's not that. Has
anyone else been able to import feeds from RSSBandit into IE7?&lt;/i&gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I got an answer for why this is the case from the Internet Explorer's RSS team.&amp;nbsp;
The reason is provided in the the &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt; bug
report, &lt;a href="http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1432628&amp;amp;group_id=96589&amp;amp;atid=615248"&gt;Support
type="rss" for export of feeds&lt;/a&gt;, where I found out that somewhere along the line
someone came up with the convention of adding a&amp;nbsp;&lt;code&gt;type="rss"&lt;/code&gt; attribute
to indicate which were the RSS feeds in an OPML file. The Internet Explorer RSS team
has decided to enforce this convention for indicating RSS feeds in an OPML file and
will ignore entries that don't have this annotation. 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Since &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt; supports both RSS/Atom feeds
and USENET newsgroups, I can see the need to be able to differentiate which are the
feeds in an OPML file without having applications probe each URL. However I do think
that &lt;code&gt;type="rss"&lt;/code&gt; is a misnomer since it should also apply to Atom feeds.
Perhaps &lt;code&gt;type="feed"&lt;/code&gt; instead? 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=3b3b882e-a2bd-4b4e-a6b2-dd9337c33e3e" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,3b3b882e-a2bd-4b4e-a6b2-dd9337c33e3e.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=70428148-8697-4f55-bdf6-04e7b802d5be</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,70428148-8697-4f55-bdf6-04e7b802d5be.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,70428148-8697-4f55-bdf6-04e7b802d5be.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=70428148-8697-4f55-bdf6-04e7b802d5be</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Work has been quite hectic the past few weeks so I've gotten behind on checking out
the sexy new startups coming out of Silicon Valley. The startup that has recently
caught my interest is <a href="http://www.edgeio.com/">Edgeio</a>, the brain child
of Mike Arrington of <a href="http://www.techcrunch.com/">TechCrunch</a>. 
</p>
        <p>
The most succint post I've found on the company is <a href="http://mashable.com/2006/02/12/edgeio-mikes-little-ebay-killer/">Edgeio
- Mike’s Little eBay Killer</a> by Pete Cashmore where he writes 
</p>
        <blockquote>
          <p>
            <i>Essentially, Edgeio is an aggregator for classified listings. You can write a classified
ad on your blog, tag it with "listing" and let Edgeio pick it up from your feed. Add
a few more tags to describe your ad and Edgeio will grab those too. The service will
pick up anything tagged with "listing" and obviously that raises the question of spam.
But after speaking to Mike, I’m pretty sure he’s on top of it. For instance, you can
claim your blog on Edgeio, just like on <a href="http://technorati.com/signup/?f=blogclaim">Technorati</a>.
Claiming your blog means that you are now a "member" and your listings are considered
more trustworthy. There are also automated ways to remove the worst of the spam. And
then there are the user-powered methods - "report spam" buttons and the like.</i>
            <br />
...<br /><i>Last of all: the business model. Unlike about 90% of the stuff that gets labelled
(tagged?) Web 2.0, Edgeio actually has one. Actually it has a few, but the main monetization
method appears to be sponsored listings - pay 25 cents a day to get your listing bumped
up to the top. I would have been tempted to pursue a transaction-based model (ie.
you take a cut from every sale), but I can see why Edgeio isn’t taking that path for
now - handling transactions is a huge job and requires a reputation system, among
other things. (And if Edgeio did build a reputation system, I’m pretty sure it would
be <a href="http://mashable.com/2005/11/11/actually-mary-reputations-are-portable/">portable</a>).</i></p>
          <p>
            <i>Calling Edgeio an eBay killer is probably a bit hyperbolic, but I do think it points
the way to how decentralization will undermine the centralized business models of
old. Your little walled garden will never be as large, rich and varied as the content
that exists out on the open web.</i>
          </p>
        </blockquote> As you can expect from a "<i>Web 2.0 blog</i>", Pete Cashmore's post
is full of hyperbole and leaps of faith but there are some interesting ideas here
nonetheless. From a technology perspective I assume that <a href="http://www.edgeio.com/">Edgeio</a> depends
on <a href="http://www.microformats.org/">microformats</a> just like other metadata-in-your-blog-post
initiatives such as <a href="http://structuredblogging.org/">Structured Blogging</a>.
This indicates to me that there now seems to be general consensus amongst the Silicon
Valley startup crowd that building a company based on searching blogs and <a href="http://www.catb.org/%7Eesr/jargon/html/S/screen-scraping.html">screen
scraping</a> their HTML such as <a href="http://www.pubsub.com/">PubSub</a> and <a href="http://www.technorati.com">Technorati</a> have
done is the new hotness. 
<p></p><p>
The more interesting thing to me is that the folks at <a href="http://www.edgeio.com/">Edgeio</a> are
implying that there is a market for a 'Make this blog post a classified listing' checkbox
in traditional blog posting tools. From my perspective as someone who works closely
with the <a href="http://spaces.msn.com">MSN Spaces</a> and <a href="http://expo.live.com">Windows
Live Expo</a> teams this sounds very interesting. There is already some integration
planned between both services but I'm not sure this is one of the options that was
considered. I wonder how much user validation of this beilief Mike Arrington and company
did before going ahead with launching their startup? 
</p><p>
As far as business models go, I find it hard to imagine why anyone would consider
this an eBay killer. I'm not going to claim that people posting things for sale on
their blog and then having that picked up by classified listing services is inferior
to eBay's model. However, I wonder why anyone thinks that services like <a href="http://www.ebay.com">eBay</a>, <a href="http://www.craigslist.org/">Craig's
List</a> and <a href="http://expo.live.com">Windows Live Expo</a> wouldn't jump into
this market if it turned out to be profitable. Since there doesn't seem to be any
barrier to entry, ability to write a Web crawler and minor HTML parsing is all that
is required, I wouldn't start eulogizing  <a href="http://www.ebay.com/">eBay</a> just
yet.  
</p><img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=70428148-8697-4f55-bdf6-04e7b802d5be" /></body>
      <title>Edgeio: An eBay Killer or Just Another Lame Startup?</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,70428148-8697-4f55-bdf6-04e7b802d5be.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/02/13/EdgeioAnEBayKillerOrJustAnotherLameStartup.aspx</link>
      <pubDate>Mon, 13 Feb 2006 16:24:24 GMT</pubDate>
      <description>&lt;p&gt;
Work has been quite hectic the past few weeks so I've gotten behind on checking out
the sexy new startups coming out of Silicon Valley. The startup that has recently
caught my interest is &lt;a href="http://www.edgeio.com/"&gt;Edgeio&lt;/a&gt;, the brain child
of Mike Arrington of &lt;a href="http://www.techcrunch.com/"&gt;TechCrunch&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
The most succint post I've found on the company is &lt;a href="http://mashable.com/2006/02/12/edgeio-mikes-little-ebay-killer/"&gt;Edgeio
- Mike’s Little eBay Killer&lt;/a&gt; by Pete Cashmore where he writes 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;Essentially, Edgeio is an aggregator for classified listings. You can write a classified
ad on your blog, tag it with "listing" and let Edgeio pick it up from your feed. Add
a few more tags to describe your ad and Edgeio will grab those too. The service will
pick up anything tagged with "listing" and obviously that raises the question of spam.
But after speaking to Mike, I’m pretty sure he’s on top of it. For instance, you can
claim your blog on Edgeio, just like on &lt;a href="http://technorati.com/signup/?f=blogclaim"&gt;Technorati&lt;/a&gt;.
Claiming your blog means that you are now a "member" and your listings are considered
more trustworthy. There are also automated ways to remove the worst of the spam. And
then there are the user-powered methods - "report spam" buttons and the like.&lt;/i&gt; 
&lt;br&gt;
...&lt;br&gt;
&lt;i&gt;Last of all: the business model. Unlike about 90% of the stuff that gets labelled
(tagged?) Web 2.0, Edgeio actually has one. Actually it has a few, but the main monetization
method appears to be sponsored listings - pay 25 cents a day to get your listing bumped
up to the top. I would have been tempted to pursue a transaction-based model (ie.
you take a cut from every sale), but I can see why Edgeio isn’t taking that path for
now - handling transactions is a huge job and requires a reputation system, among
other things. (And if Edgeio did build a reputation system, I’m pretty sure it would
be &lt;a href="http://mashable.com/2005/11/11/actually-mary-reputations-are-portable/"&gt;portable&lt;/a&gt;).&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Calling Edgeio an eBay killer is probably a bit hyperbolic, but I do think it points
the way to how decentralization will undermine the centralized business models of
old. Your little walled garden will never be as large, rich and varied as the content
that exists out on the open web.&lt;/i&gt; 
&lt;/p&gt;
&lt;/blockquote&gt; As you can expect from a "&lt;i&gt;Web 2.0 blog&lt;/i&gt;", Pete Cashmore's post
is full of hyperbole and leaps of faith but there are some interesting ideas here
nonetheless. From a technology perspective I assume that &lt;a href="http://www.edgeio.com/"&gt;Edgeio&lt;/a&gt; depends
on &lt;a href="http://www.microformats.org/"&gt;microformats&lt;/a&gt; just like other metadata-in-your-blog-post
initiatives such as &lt;a href="http://structuredblogging.org/"&gt;Structured Blogging&lt;/a&gt;.
This indicates to me that there now seems to be general consensus amongst the Silicon
Valley startup crowd that building a company based on searching blogs and &lt;a href="http://www.catb.org/%7Eesr/jargon/html/S/screen-scraping.html"&gt;screen
scraping&lt;/a&gt; their HTML such as &lt;a href="http://www.pubsub.com/"&gt;PubSub&lt;/a&gt; and &lt;a href="http://www.technorati.com"&gt;Technorati&lt;/a&gt; have
done is the new hotness. 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The more interesting thing to me is that the folks at &lt;a href="http://www.edgeio.com/"&gt;Edgeio&lt;/a&gt; are
implying that there is a market for a 'Make this blog post a classified listing' checkbox
in traditional blog posting tools. From my perspective as someone who works closely
with the &lt;a href="http://spaces.msn.com"&gt;MSN Spaces&lt;/a&gt; and &lt;a href="http://expo.live.com"&gt;Windows
Live Expo&lt;/a&gt; teams this sounds very interesting. There is already some integration
planned between both services but I'm not sure this is one of the options that was
considered. I wonder how much user validation of this beilief Mike Arrington and company
did before going ahead with launching their startup? 
&lt;/p&gt;
&lt;p&gt;
As far as business models go, I find it hard to imagine why anyone would consider
this an eBay killer. I'm not going to claim that people posting things for sale on
their blog and then having that picked up by classified listing services is inferior
to eBay's model. However, I wonder why anyone thinks that services like &lt;a href="http://www.ebay.com"&gt;eBay&lt;/a&gt;, &lt;a href="http://www.craigslist.org/"&gt;Craig's
List&lt;/a&gt; and &lt;a href="http://expo.live.com"&gt;Windows Live Expo&lt;/a&gt; wouldn't jump into
this market if it turned out to be profitable. Since there doesn't seem to be any
barrier to entry, ability to write a Web crawler and minor HTML parsing is all that
is required, I wouldn't start eulogizing&amp;nbsp; &lt;a href="http://www.ebay.com/"&gt;eBay&lt;/a&gt; just
yet.&amp;nbsp; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=70428148-8697-4f55-bdf6-04e7b802d5be" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,70428148-8697-4f55-bdf6-04e7b802d5be.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=18b01dd5-54fc-4667-8854-820c4c5f8e36</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,18b01dd5-54fc-4667-8854-820c4c5f8e36.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,18b01dd5-54fc-4667-8854-820c4c5f8e36.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=18b01dd5-54fc-4667-8854-820c4c5f8e36</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I've recently been thinking about the overlap
and differences between applications for reading email and applications for reading
RSS. I started thinking more about this topic after reading the following excerpted
blog posts. 
<p>
In his blog post <a href="http://www.netcrucible.com/blog/PermaLink,guid,0b637381-ad70-433c-b75f-1d12530ef37d.aspx">The
RSS Experience in IE7</a> Joshua Allen wrote 
</p><blockquote><p>
Dare says as much; IE7 was <b xmlns="http://www.w3.org/1999/xhtml">not intended to
replace tools like RSS Bandit, NewsGator, or Outlook 12.</b> It's not a matter of
trying to keep small ISVs in business, as much as a decision to put the RSS-Bandit
style reading experience in the products where it belongs; namely Outlook and OE.
IE7 doesn't read NNTP feeds either; that's what OE is for. 
</p></blockquote><p>
In his blog post <a href="http://www.shahine.com/omar/PermaLink,guid,f6bba62f-4498-4549-b9f4-016a9cbc6f93.aspx">Email
is Abused</a> Omar Shahine wrote 
</p><blockquote><p>
I firmly believe that email is a fantastic tool, and that it’s also heavily abused
in the work place. More often than not, what you hear when you send an email is <strong><em>deafening
silence</em></strong> or a flurry of incomprehensible replies breaking threading and
screwing up the conversation flow. 
</p><p>
It is my firm belief that many folks don’t have any system for dealing with their
email. They get overwhelmed by the amount of mail that they have, and as a result
are unpredictable in getting back to you (if they do). 
</p><p>
What this means is that not only do you have to manage <em><strong>your inbox</strong></em>,
but you have to manage <em><strong>their inbox</strong></em>. I’ve started to write
things down that I want to talk to people about, and every so often, walk into their
offices and talk about the issues. It’s weird as this is what I used to do long before
email got crazy. 
</p></blockquote><p>
On the one hand, Joshua Allen argues that consuming RSS feeds should be the purvey
of traditional mail readers. On the other, Omar Shahine points out that traditional
mail readers do a poor job of enabling people to manage information overload in environments
with high rates of information flow. I agree 100% with the implications of Omar's
post. Traditional 3-pane mail readers do a very poor job of enabling people keep on
top of the information they consume. Thus, I think it's a bad idea to add yet another
fire hose of information into the mix (i.e. making a traditional mail reader like
Outlook my primary RSS reader). 
</p><p>
I've not always been of this opinion. A few years ago I wrote a blog post entitled <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=49b86cd7-a539-4c9a-8152-81e2d82c0170">RSS,
WinFS and Building a Universal Information Client</a> where I discussed the concept
of a <i>universal information aggregator</i> and argued that Outlook was the closest
application to what I envisioned. Since then I've become familiar with the term <a href="http://www.broadbandmechanics.com/DLA.htm">digital
lifestyle aggregator (DLA)</a> which is similar to and better defined than my idea
of a <i>universal information aggregator</i>. I believe that the DLA concept gives
a clear idea of what information aggregators such as <a href="http://en.wikipedia.org/wiki/Personal_information_manager">personal
information managers</a> and RSS readers should evolve into. 
</p><p>
Why did I change my mind about Outlook being the ideal DLA? Well, the longer I worked
on <a href="http://www.rssbandit.org">RSS Bandit</a>, the more I felt that mimicing
Outlook in its entirety wasn't the right approach for approaching building an RSS
reader. I mentioned some of the problems I have with the Outlook model in my post <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=caa63ed7-eedd-442e-a767-e6d6f2b2416d">The
Problem With RSS Readers Inspired By Outlook</a> where I wrote 
</p><blockquote><p>
The major problem is that the Outlook mail reading paradigm has a fundamental assumption
which turns out to be flawed. <em>It assumes you want to read every item you get in
your inbox</em>. This flawed assumption leads to the kind of information overload
that hampers the productivity of lots of people I know at work. I've met several people
who seem to always have hundreds unread items in their email inbox. For this reason
I always have to learn who's easier to reach via IM or swinging by their office in
person than sending them mail. 
</p><p>
Most people I know get four classes of messages in their information aggregators
(I am lumping reading email, reading news and reading RSS/Atom feeds into a single
category). These are 
</p><p>
1. notifications (checkin mails, comments to my blog, etc)<br />
2. headlines (email newsletters, feeds from news sites, etc) 
<br />
3. messages sent directly to me or that is similarly relevant<br />
4. messages sent to an interest group I am a part of (XML-DEV mailing list, comp.text.xml
newsgroup, etc) 
</p><p>
The problem is that the typical Outlook inspired information aggregator treats all
of the above as being of equal relevance. Even though Outlook does provide mechanisms
for managing assigning relevance to incoming messages, they are either hard to find
or cumbersome to use. 
</p><p>
This is definitely one of the areas that needs to be improved in the world of information
aggregators in general and RSS/Atom readers in particular. 
</p></blockquote><p>
The bottom line is that I think that traditional mail readers do a poor job of enabling
people to manage the amount of information they consume today. With RSS, we've had
the opportunity to experiment with different models of presenting information to users
from "river of news" style aggregators to personalized portal pages instead of sticking
to the traditional 2  or 3 pane readers which dominate email and news readers. 
<br /></p><p>
Unfortunately, the major browser vendors haven't gotten in on the act. Instead of
using RSS as an opportunity to explore new ways of presenting information to users
we've seen rather lame attempts at RSS integration into the browser such as Firefox's <a href="http://www.mozilla.com/firefox/livebookmarks.html">Live
Bookmarks feature</a> and the upcoming integration of RSS into IE 7 which is just
slightly better. 
</p><p>
So where are we? The major browsers have punted on solving the information overload
problem caused by RSS while integrating it into their products. Similarly, mail readers
already suck at dealing with email information overload let alone when RSS feeds are
added to the mix. As it stands, I'm not sure where we're going to from here. In the
meantime, I'm going to start exploring alternative Web browsers like <a href="http://www.flock.com">Flock</a>.
Perhaps they'll be bolder in re-imagining how to improve the overall experience of
people using the World Wide Web today. 
</p><img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=18b01dd5-54fc-4667-8854-820c4c5f8e36" /></body>
      <title>Email and RSS </title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,18b01dd5-54fc-4667-8854-820c4c5f8e36.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/02/07/EmailAndRSS.aspx</link>
      <pubDate>Tue, 07 Feb 2006 00:35:41 GMT</pubDate>
      <description>I've recently been thinking about the overlap and differences between
applications for reading email and applications for reading RSS. I
started thinking more about this topic after reading the following
excerpted blog posts. &lt;p&gt;
In his blog post &lt;a href="http://www.netcrucible.com/blog/PermaLink,guid,0b637381-ad70-433c-b75f-1d12530ef37d.aspx"&gt;The
RSS Experience in IE7&lt;/a&gt; Joshua Allen wrote 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Dare says as much; IE7 was &lt;b xmlns="http://www.w3.org/1999/xhtml"&gt;not intended to
replace tools like RSS Bandit, NewsGator, or Outlook 12.&lt;/b&gt; It's not a matter of
trying to keep small ISVs in business, as much as a decision to put the RSS-Bandit
style reading experience in the products where it belongs; namely Outlook and OE.
IE7 doesn't read NNTP feeds either; that's what OE is for. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
In his blog post &lt;a href="http://www.shahine.com/omar/PermaLink,guid,f6bba62f-4498-4549-b9f4-016a9cbc6f93.aspx"&gt;Email
is Abused&lt;/a&gt; Omar Shahine wrote 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
I firmly believe that email is a fantastic tool, and that it’s also heavily abused
in the work place. More often than not, what you hear when you send an email is &lt;strong&gt;&lt;em&gt;deafening
silence&lt;/em&gt;&lt;/strong&gt; or a flurry of incomprehensible replies breaking threading and
screwing up the conversation flow. 
&lt;/p&gt;
&lt;p&gt;
It is my firm belief that many folks don’t have any system for dealing with their
email. They get overwhelmed by the amount of mail that they have, and as a result
are unpredictable in getting back to you (if they do). 
&lt;/p&gt;
&lt;p&gt;
What this means is that not only do you have to manage &lt;em&gt;&lt;strong&gt;your inbox&lt;/strong&gt;&lt;/em&gt;,
but you have to manage &lt;em&gt;&lt;strong&gt;their inbox&lt;/strong&gt;&lt;/em&gt;. I’ve started to write
things down that I want to talk to people about, and every so often, walk into their
offices and talk about the issues. It’s weird as this is what I used to do long before
email got crazy. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
On the one hand, Joshua Allen argues that consuming RSS feeds should be the purvey
of traditional mail readers. On the other, Omar Shahine points out that traditional
mail readers do a poor job of enabling people to manage information overload in environments
with high rates of information flow. I agree 100% with the implications of Omar's
post. Traditional 3-pane mail readers do a very poor job of enabling people keep on
top of the information they consume. Thus, I think it's a bad idea to add yet another
fire hose of information into the mix (i.e. making a traditional mail reader like
Outlook my primary RSS reader). 
&lt;/p&gt;
&lt;p&gt;
I've not always been of this opinion. A few years ago I wrote a blog post entitled &lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=49b86cd7-a539-4c9a-8152-81e2d82c0170"&gt;RSS,
WinFS and Building a Universal Information Client&lt;/a&gt; where I discussed the concept
of a &lt;i&gt;universal information aggregator&lt;/i&gt; and argued that Outlook was the closest
application to what I envisioned. Since then I've become familiar with the term &lt;a href="http://www.broadbandmechanics.com/DLA.htm"&gt;digital
lifestyle aggregator (DLA)&lt;/a&gt; which is similar to and better defined than my idea
of a &lt;i&gt;universal information aggregator&lt;/i&gt;. I believe that the DLA concept gives
a clear idea of what information aggregators such as &lt;a href="http://en.wikipedia.org/wiki/Personal_information_manager"&gt;personal
information managers&lt;/a&gt; and RSS readers should evolve into. 
&lt;/p&gt;
&lt;p&gt;
Why did I change my mind about Outlook being the ideal DLA? Well, the longer I worked
on &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt;, the more I felt that mimicing
Outlook in its entirety wasn't the right approach for approaching building an RSS
reader. I mentioned some of the problems I have with the Outlook model in my post &lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=caa63ed7-eedd-442e-a767-e6d6f2b2416d"&gt;The
Problem With RSS Readers Inspired By Outlook&lt;/a&gt; where I wrote 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
The major problem is that the Outlook mail reading paradigm has a fundamental assumption
which turns out to be flawed. &lt;em&gt;It assumes you want to read every item you get in
your inbox&lt;/em&gt;. This flawed assumption leads to the kind of information overload
that hampers the productivity of lots of people I know at work. I've met several people
who seem to always have hundreds unread items in their email inbox. For this reason
I always have to learn who's easier to reach via IM or swinging by their office in
person than sending them mail. 
&lt;/p&gt;
&lt;p&gt;
Most people I know get&amp;nbsp;four classes of messages in their information aggregators
(I am lumping reading email, reading news and reading RSS/Atom feeds into a single
category). These are 
&lt;/p&gt;
&lt;p&gt;
1. notifications (checkin mails, comments to my blog, etc)&lt;br&gt;
2. headlines (email newsletters, feeds from news sites, etc) 
&lt;br&gt;
3.&amp;nbsp;messages sent directly to me or that is similarly relevant&lt;br&gt;
4. messages sent to an interest group I am a part of (XML-DEV mailing list,&amp;nbsp;comp.text.xml
newsgroup, etc) 
&lt;/p&gt;
&lt;p&gt;
The problem is that the typical Outlook inspired information aggregator treats all
of the above as being of equal relevance. Even though Outlook does provide mechanisms
for managing assigning relevance to incoming messages, they are either hard to find
or cumbersome to use. 
&lt;/p&gt;
&lt;p&gt;
This is definitely one of the areas that needs to be improved in the world of&amp;nbsp;information
aggregators in general and RSS/Atom readers in particular. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The bottom line is that I think that traditional mail readers do a poor job of enabling
people to manage the amount of information they consume today. With RSS, we've had
the opportunity to experiment with different models of presenting information to users
from "river of news" style aggregators to personalized portal pages instead of sticking
to the traditional 2&amp;nbsp; or 3 pane readers which dominate email and news readers. 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Unfortunately, the major browser vendors haven't gotten in on the act. Instead of
using RSS as an opportunity to explore new ways of presenting information to users
we've seen rather lame attempts at RSS integration into the browser such as Firefox's &lt;a href="http://www.mozilla.com/firefox/livebookmarks.html"&gt;Live
Bookmarks feature&lt;/a&gt; and the upcoming integration of RSS into IE 7 which is just
slightly better. 
&lt;/p&gt;
&lt;p&gt;
So where are we? The major browsers have punted on solving the information overload
problem caused by RSS while integrating it into their products. Similarly, mail readers
already suck at dealing with email information overload let alone when RSS feeds are
added to the mix. As it stands, I'm not sure where we're going to from here. In the
meantime, I'm going to start exploring alternative Web browsers like &lt;a href="http://www.flock.com"&gt;Flock&lt;/a&gt;.
Perhaps they'll be bolder in re-imagining how to improve the overall experience of
people using the World Wide Web today. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=18b01dd5-54fc-4667-8854-820c4c5f8e36" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,18b01dd5-54fc-4667-8854-820c4c5f8e36.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=f872c4bf-82c7-4222-a733-b9f212e0c3c4</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,f872c4bf-82c7-4222-a733-b9f212e0c3c4.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,f872c4bf-82c7-4222-a733-b9f212e0c3c4.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=f872c4bf-82c7-4222-a733-b9f212e0c3c4</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Nick Bradbury has a post entitled <a href="http://nick.typepad.com/blog/2006/02/feedback_on_ie7.html">Feedback
on IE7 Beta 2 from the Developer of FeedDemon</a> where he gives a lot of good feedback
on the recently released IE 7 beta from his perspective as the developer of an RSS
reader. Although I've given some feedback on the RSS reading functionality of 
the IE 7 beta, I realize it would be more valuable to give my thoughts on the Winows
RSS platform since this is supposed to make the job of people like me who've built
RSS readers better. Below is a smattering of feedback divided into pros and cons of
using the Windows RSS platform versus using the version we've built for <a href="http://www.rssbandit.org">RSS
Bandit</a>. Note that as Nick says in his post given that I've already written a lot
of the ugly code needed to handle feed downloading, caching, parsing, etc. actually
switching to use the Windows RSS platform is a load of unnecessary work for me. My
feedback is based on the kind of support I'd need from the platform to implement the
scenarios currently supported by <a href="http://www.rssbandit.org/">RSS Bandit</a> . 
</p>
        <p>
          <u>PRO</u>
        </p>
        <ul>
          <li>
COM API  was very straightforward to interact with from  .NET applications 
<br /></li>
          <li>
Built-in support for downloading enclosures in the background is nice</li>
          <li>
Good support for asynchronously downloading feeds. This means application developers
don't need to write a bunch of multithreaded/asynchronous code themselves. That is
definitely a godsend.</li>
          <li>
One can serialize feed objects to  XML 
<br /></li>
        </ul>
        <p>
          <u>CON</u>
        </p>
        <ul>
          <li>
No support for application specific feeds. The Common Feed List assumes that user
needs to use the same list of feeds in the various applications used for subscribing
to feeds. I think this assumption is fundamentally flawed. I might use one application
for downloading podcasts (e.g. iTunes), another for reading blogs (e.g. RSS Bandit),
and yet another for browsing photo feeds. Since it doesn't make sense for my blogs
to show up in iTunes, it would be cool if I could identify either the type of feed
(podcast, text-based, etc) or the favored application for reading the feed via the
API. 
<br /></li>
          <li>
No support for password protected feeds. The number of password protected feeds on
the Web continues to grow, Web sites such as GMail and LiveJournal provide authenticated
feeds for users today. As the usage of syndication technologies like RSS continues
to grow, the need to support authentication by feed readers will also grow as well.
I can imagine a day when I can subscribe to a password protected feed from my bank
or credit card company. Not having support for this today is a non-starter. 
<br /></li>
          <li>
Support for obtaining XML elements which aren't supported by the API. It would be
nice if there was a property for obtaining extension elements in a feed that didn't
involve having to convert the feed object to XML then using XPath. Being able to perform
a call like  Feed.GetItem("http://wellformedweb.org/CommentAPI/ ", "commentRss")
to get an element which isn't mapped to a property in the Feed object is a lot more
desirable than writing DOM or XPath code to extract that element from the results
of calling Feed.Xml 
<br /></li>
          <li>
No ability to append application specific metadata to feeds. <a href="http://www.rssbandit.org/">RSS
Bandit</a> supports notions like flagging items and we'd need some way to indicate
that items are flagged if we are using the API. 
<br /></li>
        </ul>
        <p>
Most of this is just based on reading the <a href="http://msdn.microsoft.com/library/en-us/FeedsAPI/rss/overviews/entry.asp">Using
the Microsoft Feeds API</a> document on MSDN. I'm sure I'd have more feedback if I
took a pass at replacing all the feed processing code in <a href="http://www.rssbandit.org/">RSS
Bandit</a> with the Windows RSS platform. However I don't think I'll have time to
do that anytime soon. 
<br /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=f872c4bf-82c7-4222-a733-b9f212e0c3c4" />
      </body>
      <title>Feedback on Windows RSS Platform from the Developer of RSS Bandit</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,f872c4bf-82c7-4222-a733-b9f212e0c3c4.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/02/04/FeedbackOnWindowsRSSPlatformFromTheDeveloperOfRSSBandit.aspx</link>
      <pubDate>Sat, 04 Feb 2006 19:55:28 GMT</pubDate>
      <description>&lt;p&gt;
Nick Bradbury has a post entitled &lt;a href="http://nick.typepad.com/blog/2006/02/feedback_on_ie7.html"&gt;Feedback
on IE7 Beta 2 from the Developer of FeedDemon&lt;/a&gt; where he gives a lot of good feedback
on the recently released IE 7 beta from his perspective as the developer of an RSS
reader. Although I've given some feedback on the RSS reading functionality of&amp;nbsp;
the IE 7 beta, I realize it would be more valuable to give my thoughts on the Winows
RSS platform since this is supposed to make the job of people like me who've built
RSS readers better. Below is a smattering of feedback divided into pros and cons of
using the Windows RSS platform versus using the version we've built for &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt;. Note that as Nick says in his post given that I've already written a lot
of the ugly code needed to handle feed downloading, caching, parsing, etc. actually
switching to use the Windows RSS platform is a load of unnecessary work for me. My
feedback is based on the kind of support I'd need from the platform to implement the
scenarios currently supported by &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt; . 
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;PRO&lt;/u&gt; 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
COM API&amp;nbsp; was very straightforward to interact with from&amp;nbsp; .NET applications 
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Built-in support for downloading enclosures in the background is nice&lt;/li&gt;
&lt;li&gt;
Good support for asynchronously downloading feeds. This means application developers
don't need to write a bunch of multithreaded/asynchronous code themselves. That is
definitely a godsend.&lt;/li&gt;
&lt;li&gt;
One can serialize feed objects to&amp;nbsp; XML 
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;u&gt;CON&lt;/u&gt; 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
No support for application specific feeds. The Common Feed List assumes that user
needs to use the same list of feeds in the various applications used for subscribing
to feeds. I think this assumption is fundamentally flawed. I might use one application
for downloading podcasts (e.g. iTunes), another for reading blogs (e.g. RSS Bandit),
and yet another for browsing photo feeds. Since it doesn't make sense for my blogs
to show up in iTunes, it would be cool if I could identify either the type of feed
(podcast, text-based, etc) or the favored application for reading the feed via the
API. 
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
No support for password protected feeds. The number of password protected feeds on
the Web continues to grow, Web sites such as GMail and LiveJournal provide authenticated
feeds for users today. As the usage of syndication technologies like RSS continues
to grow, the need to support authentication by feed readers will also grow as well.
I can imagine a day when I can subscribe to a password protected feed from my bank
or credit card company. Not having support for this today is a non-starter. 
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Support for obtaining XML elements which aren't supported by the API. It would be
nice if there was a property for obtaining extension elements in a feed that didn't
involve having to convert the feed object to XML then using XPath. Being able to perform
a call like&amp;nbsp; Feed.GetItem("http://wellformedweb.org/CommentAPI/ ", "commentRss")
to get an element which isn't mapped to a property in the Feed object is a lot more
desirable than writing DOM or XPath code to extract that element from the results
of calling Feed.Xml 
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
No ability to append application specific metadata to feeds. &lt;a href="http://www.rssbandit.org/"&gt;RSS
Bandit&lt;/a&gt; supports notions like flagging items and we'd need some way to indicate
that items are flagged if we are using the API. 
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Most of this is just based on reading the &lt;a href="http://msdn.microsoft.com/library/en-us/FeedsAPI/rss/overviews/entry.asp"&gt;Using
the Microsoft Feeds API&lt;/a&gt; document on MSDN. I'm sure I'd have more feedback if I
took a pass at replacing all the feed processing code in &lt;a href="http://www.rssbandit.org/"&gt;RSS
Bandit&lt;/a&gt; with the Windows RSS platform. However I don't think I'll have time to
do that anytime soon. 
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=f872c4bf-82c7-4222-a733-b9f212e0c3c4" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,f872c4bf-82c7-4222-a733-b9f212e0c3c4.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=8b4c6e9f-74cd-45ce-a7a2-a452707c1e6d</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,8b4c6e9f-74cd-45ce-a7a2-a452707c1e6d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,8b4c6e9f-74cd-45ce-a7a2-a452707c1e6d.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=8b4c6e9f-74cd-45ce-a7a2-a452707c1e6d</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A few days ago, in my blog post entitled <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=ab90c1f1-bfe8-46f4-b10d-7736cdbfd2e2">Some
Thoughts on the IE 7 Beta 2 Preview release</a> I described the RSS features of IE
7 as unsatisfactory and disappointing. It seems I'm not the only one who dislikes
what the Internet Explorer team has done with RSS. 
<br /></p>
        <p>
In his post <a href="http://publishing2.com/2006/02/02/rss-is-a-glorified-favorites-feature/">RSS
Is a Glorified "Favorites" Feature</a> Scott Karp writes
</p>
        <blockquote>
          <p>
            <i>
              <a href="http://www.microsoft.com/windows/IE/ie7/ie7betaredirect.mspx">RSS is in
Internet Explorer 7</a>!!! The blogosphere is shouting from the rooftops. Yawn. I
tried RSS in IE7, and it highlights the true shortcoming of current RSS applications
— it’s really not much of an improvement over “favorites” or “bookmarks.”</i>
          </p>
          <p>
            <i>IE7 goes so far as to put the RSS reader in same menu as favorites (or as <a href="http://www.makeyougohmm.com/20060201/2899/">TDavid
puts i</a>t “A separate “Feed Center” exists inside the Favorites area.”), which appears
in a left-hand navigation column.</i>
          </p>
          <p>
            <i>So what’s the real innovation over Favorites/Bookmarks in terms of user experience?
That it “automatically updates”? That I can get everything all in one place? That
it highlights what’s new?</i>
          </p>
          <p>
            <i>
            </i>
          </p>
        </blockquote>
        <p>
In his post <a href="http://paul.kedrosky.com/archives/002522.html">RSS Really Sucks</a> Paul
Kedrosky writes
</p>
        <blockquote>
          <i>A while back I wrote that <a href="http://paul.kedrosky.com/archives/002319.html">RSS
sucks</a>, and now that I've had some more time to think about it I've come to a deeper
and more nuanced conclusion: RSS </i>
          <i>Really Sucks. The point was driven home recently
as I read articles by people arguing that IE7 from Microsoft does RSS well enough
to kill off a few standalone aggregators. I suppose, although that's a little like
saying that buggy whips drive milk-wagons so well that people will soon stop using
willow branches to goad horses.<br /><br />
Why? Because, as Scott Karp <a href="http://publishing2.com/2006/02/02/rss-is-a-glorified-favorites-feature/">points</a> out,
the IE7 RSS implementation is as glorified "favorites" -- bookmarks, in other words.
And they are particularly irritating bookmarks, ones that continually change and needle
you as more "information" (I use that advisedly) comes beeping and streaming into
your computer. </i>
        </blockquote>
        <p>
The main reason I am so irritated by IE 7's lackluster user experience around RSS
is that you only get one chance to make a first impression. Using IE 7 will be the
first time millions of people will be introduced to RSS and it would be unfortunate
if they come away from thinking that is potentially transformative and liberating
technology is simply a kind of "bookmarks that nag you all the time" feature. 
</p>
        <p>
I've heard some people say that if Microsoft integrates a high quality RSS reader
into the browser then it would kill the desktop aggregator market which is the kind
of thing Microsoft gets in legal trouble for all the time. My response? That is <a href="http://headrush.typepad.com/creating_passionate_users/2006/01/death_by_riskav.html">Death
by Risk Aversion</a>. What matters is making end users happy, not worrying about making
features that suck just enough that people have to go out and buy software that does
the job well so we don't get in legal trouble.  
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8b4c6e9f-74cd-45ce-a7a2-a452707c1e6d" />
      </body>
      <title>More People Underwhelmed by RSS Support in IE 7</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,8b4c6e9f-74cd-45ce-a7a2-a452707c1e6d.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/02/03/MorePeopleUnderwhelmedByRSSSupportInIE7.aspx</link>
      <pubDate>Fri, 03 Feb 2006 12:36:44 GMT</pubDate>
      <description>&lt;p&gt;
A few days ago, in my blog post entitled &lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=ab90c1f1-bfe8-46f4-b10d-7736cdbfd2e2"&gt;Some
Thoughts on the IE 7 Beta 2 Preview release&lt;/a&gt; I described the RSS features of IE
7 as unsatisfactory and disappointing. It seems I'm not the only one who dislikes
what the Internet Explorer team has done with RSS. 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
In his post &lt;a href="http://publishing2.com/2006/02/02/rss-is-a-glorified-favorites-feature/"&gt;RSS
Is a Glorified "Favorites" Feature&lt;/a&gt; Scott Karp writes
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;&lt;a href="http://www.microsoft.com/windows/IE/ie7/ie7betaredirect.mspx"&gt;RSS is in
Internet Explorer 7&lt;/a&gt;!!! The blogosphere is shouting from the rooftops. Yawn. I
tried RSS in IE7, and it highlights the true shortcoming of current RSS applications
— it’s really not much of an improvement over “favorites” or “bookmarks.”&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;IE7 goes so far as to put the RSS reader in same menu as favorites (or as &lt;a href="http://www.makeyougohmm.com/20060201/2899/"&gt;TDavid
puts i&lt;/a&gt;t “A separate “Feed Center” exists inside the Favorites area.”), which appears
in a left-hand navigation column.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;So what’s the real innovation over Favorites/Bookmarks in terms of user experience?
That it “automatically updates”? That I can get everything all in one place? That
it highlights what’s new?&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
In his post &lt;a href="http://paul.kedrosky.com/archives/002522.html"&gt;RSS Really Sucks&lt;/a&gt; Paul
Kedrosky writes
&lt;/p&gt;
&lt;blockquote&gt;&lt;i&gt;A while back I wrote that &lt;a href="http://paul.kedrosky.com/archives/002319.html"&gt;RSS
sucks&lt;/a&gt;, and now that I've had some more time to think about it I've come to a deeper
and more nuanced conclusion: RSS &lt;/i&gt;&lt;i&gt;Really Sucks. The point was driven home recently
as I read articles by people arguing that IE7 from Microsoft does RSS well enough
to kill off a few standalone aggregators. I suppose, although that's a little like
saying that buggy whips drive milk-wagons so well that people will soon stop using
willow branches to goad horses.&lt;br&gt;
&lt;br&gt;
Why? Because, as Scott Karp &lt;a href="http://publishing2.com/2006/02/02/rss-is-a-glorified-favorites-feature/"&gt;points&lt;/a&gt; out,
the IE7 RSS implementation is as glorified "favorites" -- bookmarks, in other words.
And they are particularly irritating bookmarks, ones that continually change and needle
you as more "information" (I use that advisedly) comes beeping and streaming into
your computer. &lt;/i&gt;&lt;/blockquote&gt; 
&lt;p&gt;
The main reason I am so irritated by IE 7's lackluster user experience around RSS
is that you only get one chance to make a first impression. Using IE 7 will be the
first time millions of people will be introduced to RSS and it would be unfortunate
if they come away from thinking that is potentially transformative and liberating
technology is simply a kind of "bookmarks that nag you all the time" feature. 
&lt;/p&gt;
&lt;p&gt;
I've heard some people say that if Microsoft integrates a high quality RSS reader
into the browser then it would kill the desktop aggregator market which is the kind
of thing Microsoft gets in legal trouble for all the time. My response? That is &lt;a href="http://headrush.typepad.com/creating_passionate_users/2006/01/death_by_riskav.html"&gt;Death
by Risk Aversion&lt;/a&gt;. What matters is making end users happy, not worrying about making
features that suck just enough that people have to go out and buy software that does
the job well so we don't get in legal trouble.&amp;nbsp; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8b4c6e9f-74cd-45ce-a7a2-a452707c1e6d" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,8b4c6e9f-74cd-45ce-a7a2-a452707c1e6d.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=12602934-bf5a-4fb7-a633-70cebb26ea9d</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,12602934-bf5a-4fb7-a633-70cebb26ea9d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,12602934-bf5a-4fb7-a633-70cebb26ea9d.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=12602934-bf5a-4fb7-a633-70cebb26ea9d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In his post <a href="http://spaces.msn.com/mike/Blog/cns%21FBABF8E542F5D5DB%215450.entry">Thanks
Bloglines</a> Mike Torres writes
</p>
        <blockquote>
          <div>
            <i>Over the course of the last few days, we noticed a problem in the way <a href="http://www.bloglines.com/">Bloglines </a>was
displaying feeds from MSN Spaces.  This problem was due to our recent URL
change and the way we're redirecting visitors from <a href="http://spaces.msn.com/members/mike">http://spaces.msn.com/members/mike</a> (as
an example) to <a href="http://spaces.msn.com/mike">http://spaces.msn.com/mike</a>. 
Instead of providing the absolute URL to the RSS feed when Bloglines and others requested
the feed, we're only returning the relative URL (i.e. "/mike").</i>
          </div>
          <div>
            <i> </i>
          </div>
          <div>
            <i>Because of this, Bloglines had to turn around a fix to support relative
URL redirects in record time.  Within just a couple of hours of contacting
them, they had diagnosed the issue, fixed up all the Spaces feeds in their
entire system, and patched the redirect logic to make sure it wouldn't happen
again.  During this time, the subscriber lists/counts associated with a feed weren't
updated for a little while (my 362 subscribers showed as 9, but my ego wasn't
bruised) and they even did the extra work to merge "new" feeds with "old" feeds (because
when the feed broke, and someone subscribed to the correct feed, Bloglines then had
two records for the 'same' feed).</i>
          </div>
          <div>
            <i> </i>
          </div>
          <div>
            <i>In short, this was <strong>truly great work</strong> by <a href="http://www.wingedpig.com/">Mark
Fletcher </a>and the <a href="http://www.bloglines.com/">Bloglines </a>staff. 
Sorry guys for keeping you up so late on a Tuesday night!  We'll
be making a change to the way we redirect shortly just to make sure this won't be
a problem for anyone else in the future.  And for you Bloglines users, you should
be back to normal for any MSN Spaces feeds in your list!</i>
          </div>
        </blockquote>
        <p>
Mike and I exchanged mail with Mark Fletcher about this issue on Tuesday, and as he
writes we were both grateful and impressed at how quickly the Bloglines folks made
changes to fix the consequences of a bug in how we were sending HTTP redirects. Mad
props to Mark Fletcher and the folks at Bloglines. You guys definitely rock. 
<br /></p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=12602934-bf5a-4fb7-a633-70cebb26ea9d" />
      </body>
      <title>Thank You to Mark Fletcher and the Bloglines Crew</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,12602934-bf5a-4fb7-a633-70cebb26ea9d.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/02/02/ThankYouToMarkFletcherAndTheBloglinesCrew.aspx</link>
      <pubDate>Thu, 02 Feb 2006 19:50:02 GMT</pubDate>
      <description>&lt;p&gt;
In his post &lt;a href="http://spaces.msn.com/mike/Blog/cns%21FBABF8E542F5D5DB%215450.entry"&gt;Thanks
Bloglines&lt;/a&gt; Mike Torres writes
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;div&gt;&lt;i&gt;Over the course of the last few days, we noticed a problem in the way &lt;a href="http://www.bloglines.com/"&gt;Bloglines &lt;/a&gt;was
displaying feeds from MSN Spaces.&amp;nbsp; This problem&amp;nbsp;was due to our recent URL
change and the way we're&amp;nbsp;redirecting visitors from &lt;a href="http://spaces.msn.com/members/mike"&gt;http://spaces.msn.com/members/mike&lt;/a&gt; (as
an example) to &lt;a href="http://spaces.msn.com/mike"&gt;http://spaces.msn.com/mike&lt;/a&gt;.&amp;nbsp;
Instead of providing the absolute URL to the RSS feed when Bloglines and others requested
the feed, we're only returning the relative URL&amp;nbsp;(i.e. "/mike").&lt;/i&gt;
&lt;/div&gt;
&lt;div&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;
&lt;/div&gt;
&lt;div&gt;&lt;i&gt;Because of this,&amp;nbsp;Bloglines had to turn around a fix to support relative
URL redirects in record time.&amp;nbsp; Within just a couple of&amp;nbsp;hours of contacting
them, they had&amp;nbsp;diagnosed the issue, fixed up all the Spaces&amp;nbsp;feeds in their
entire&amp;nbsp;system, and patched the redirect logic to make sure it wouldn't happen
again.&amp;nbsp; During this time, the subscriber lists/counts associated with a feed&amp;nbsp;weren't
updated for a little while (my 362 subscribers showed as 9, but my ego&amp;nbsp;wasn't
bruised) and they even did the extra work to merge "new" feeds with "old" feeds (because
when the feed broke, and someone subscribed to the correct feed,&amp;nbsp;Bloglines then&amp;nbsp;had
two&amp;nbsp;records for the 'same' feed).&lt;/i&gt;
&lt;/div&gt;
&lt;div&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;
&lt;/div&gt;
&lt;div&gt;&lt;i&gt;In short, this was &lt;strong&gt;truly great work&lt;/strong&gt; by &lt;a href="http://www.wingedpig.com/"&gt;Mark
Fletcher &lt;/a&gt;and the &lt;a href="http://www.bloglines.com/"&gt;Bloglines &lt;/a&gt;staff.&amp;nbsp;
Sorry guys for&amp;nbsp;keeping you&amp;nbsp;up so late on a Tuesday night!&amp;nbsp;&amp;nbsp;We'll
be making a change to the way we redirect shortly just to make sure this won't be
a problem for anyone else in the future.&amp;nbsp; And for you Bloglines users, you should
be back to normal for any MSN Spaces feeds in your list!&lt;/i&gt;
&lt;/div&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Mike and I exchanged mail with Mark Fletcher about this issue on Tuesday, and as he
writes we were both grateful and impressed at how quickly the Bloglines folks made
changes to fix the consequences of a bug in how we were sending HTTP redirects. Mad
props to Mark Fletcher and the folks at Bloglines. You guys definitely rock. 
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=12602934-bf5a-4fb7-a633-70cebb26ea9d" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,12602934-bf5a-4fb7-a633-70cebb26ea9d.aspx</comments>
      <category>Syndication Technology</category>
      <category>Windows Live</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=8872eeef-8706-434e-af3b-e20826d9a673</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,8872eeef-8706-434e-af3b-e20826d9a673.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,8872eeef-8706-434e-af3b-e20826d9a673.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=8872eeef-8706-434e-af3b-e20826d9a673</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In a recent post on the <a href="http://www.rssbandit.org/forum/default.asp">RSS Bandit
forums</a> entitled <a href="http://www.rssbandit.org/forum/topic.asp?TOPIC_ID=1130">Microsoft
Feeds API</a>, one of our users asked when we plan to take addvantage of the Windows
RSS Platform. Specifically the question asked was
</p>
        <blockquote>
          <p>
            <i>I downloaded IE7 beta 2 preview and one of the new features is feed support. There
really is no comparison between RSS Bandit and the minimilist support IE7 provideds
however it is my understanding that there is more to the feed support then the basic
UI IE provides. Apparently the Feed API is highly integrated into Vista and has been
backported to XP as part of IE7. I would like to suggest (and I have no idea if this
is even possible) that RSS Bandit embrace this new API. It's in it's early stages
and I'd like to see it mature with the help of RSS Bandit into a usable common feed
store for any number of apps (RSS Bandit, IE, plus anything else that decides to use
it like the sample screensaver app in the API documentation.) Perhaps that's asking
too much but I figured I should at least put the idea out there. It would be really
great if, while surfing the net in IE I could subscribe to rss feeds using the IE
mechanism, maybe take a quick look through them in IE, then later go back in RSS Bandit
and be able to use the much more powerful features (such as stored searches, and folder
aggregation) without having to have two copies of my actual feed lists to maintain.<br /><br />
Here's a link to the only info I could find on it so far:<br /><a href="http://msdn.microsoft.com/library/en-us/FeedsAPI/rss/rss_entry.asp" target="_blank">http://msdn.microsoft.com/library/en-us/FeedsAPI/rss/rss_entry.asp</a></i>
          </p>
        </blockquote>
        <p>
To the various people who have asked this question [including my friends on the IE
team], the answer is <b>YES</b> we will support the Windows RSS Platform. As Walter,
wrote in his post on <a href="http://blogs.msdn.com/rssteam/archive/2006/02/02/522642.aspx">Windows
RSS Platform</a> there are 3 main components of the platform; the Common Feed List,
Feed Synchronization Engine, and Feed Store. Ideally I'd like to use all 3 in <a href="http://www.rssbandit.org">RSS
Bandit</a> but suspect that it'll be difficult to switch to using the Feed Synchronization
Engine or the Feed Store provided by the Windows RSS platform. For example, our feed
synchronization engine supports subscribing to USENET newsgroups which I doubt the
Feed Syncrhonization Engine in the Windows RSS platform supports. On the other hand,
it should be straightforward to satisfy the scenario requested in the quoted post
where items subscribed in IE 7 are reflected in <a href="http://www.rssbandit.org">RSS
Bandit</a> and vice versa. 
</p>
        <p>
I need to work out the user interface with <a href="http://www.rendelmann.info/blog/">Torsten</a> but
it should be easy for us to support the Common Feed List. My current thinking is that
we'll have a special folder for "My Internet Explorer Subscriptions" as opposed to
mirroring the entire feed list in <a href="http://www.rssbandit.org/">RSS Bandit</a> within
IE 7 and vice versa. Thoughts? 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8872eeef-8706-434e-af3b-e20826d9a673" />
      </body>
      <title>RSS Bandit and the Windows RSS Platform</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,8872eeef-8706-434e-af3b-e20826d9a673.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2006/02/02/RSSBanditAndTheWindowsRSSPlatform.aspx</link>
      <pubDate>Thu, 02 Feb 2006 19:41:29 GMT</pubDate>
      <description>&lt;p&gt;
In a recent post on the &lt;a href="http://www.rssbandit.org/forum/default.asp"&gt;RSS Bandit
forums&lt;/a&gt; entitled &lt;a href="http://www.rssbandit.org/forum/topic.asp?TOPIC_ID=1130"&gt;Microsoft
Feeds API&lt;/a&gt;, one of our users asked when we plan to take addvantage of the Windows
RSS Platform. Specifically the question asked was
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;I downloaded IE7 beta 2 preview and one of the new features is feed support. There
really is no comparison between RSS Bandit and the minimilist support IE7 provideds
however it is my understanding that there is more to the feed support then the basic
UI IE provides. Apparently the Feed API is highly integrated into Vista and has been
backported to XP as part of IE7. I would like to suggest (and I have no idea if this
is even possible) that RSS Bandit embrace this new API. It's in it's early stages
and I'd like to see it mature with the help of RSS Bandit into a usable common feed
store for any number of apps (RSS Bandit, IE, plus anything else that decides to use
it like the sample screensaver app in the API documentation.) Perhaps that's asking
too much but I figured I should at least put the idea out there. It would be really
great if, while surfing the net in IE I could subscribe to rss feeds using the IE
mechanism, maybe take a quick look through them in IE, then later go back in RSS Bandit
and be able to use the much more powerful features (such as stored searches, and folder
aggregation) without having to have two copies of my actual feed lists to maintain.&lt;br&gt;
&lt;br&gt;
Here's a link to the only info I could find on it so far:&lt;br&gt;
&lt;a href="http://msdn.microsoft.com/library/en-us/FeedsAPI/rss/rss_entry.asp" target="_blank"&gt;http://msdn.microsoft.com/library/en-us/FeedsAPI/rss/rss_entry.asp&lt;/a&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
To the various people who have asked this question [including my friends on the IE
team], the answer is &lt;b&gt;YES&lt;/b&gt; we will support the Windows RSS Platform. As Walter,
wrote in his post on &lt;a href="http://blogs.msdn.com/rssteam/archive/2006/02/02/522642.aspx"&gt;Windows
RSS Platform&lt;/a&gt; there are 3 main components of the platform; the Common Feed List,
Feed Synchronization Engine, and Feed Store. Ideally I'd like to use all 3 in &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt; but suspect that it'll be difficult to switch to using the Feed Synchronization
Engine or the Feed Store provided by the Windows RSS platform. For example, our feed
synchronization engine supports subscribing to USENET newsgroups which I doubt the
Feed Syncrhonization Engine in the Windows RSS platform supports. On the other hand,
it should be straightforward to satisfy the scenario requested in the quoted post
where items subscribed in IE 7 are reflected in &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt; and vice versa. 
&lt;/p&gt;
&lt;p&gt;
I need to work out the user interface with &lt;a href="http://www.rendelmann.info/blog/"&gt;Torsten&lt;/a&gt; but
it should be easy for us to support the Common Feed List. My current thinking is that
we'll have a special folder for "My Internet Explorer Subscriptions" as opposed to
mirroring the entire feed list in &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt; within
IE 7 and vice versa. Thoughts? 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=8872eeef-8706-434e-af3b-e20826d9a673" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,8872eeef-8706-434e-af3b-e20826d9a673.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=7e81f95e-06fd-4877-ad03-7343268d167f</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,7e81f95e-06fd-4877-ad03-7343268d167f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,7e81f95e-06fd-4877-ad03-7343268d167f.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=7e81f95e-06fd-4877-ad03-7343268d167f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Niall Kennedy has a blog post entitled <a href="http://www.niallkennedy.com/blog/archives/2005/12/google-api-feeds.html">Exclusive:
Google to offer feed API</a> where he reveals 
</p>
        <blockquote>
          <p>
            <i>Google plans to offer a feed reader <acronym title="Application Programming Interface">API</acronym> to
allow third-party developers to build new views of feed data on top of Google's backend.
The new <acronym>API</acronym>s will include synchronization, feed-level and item-level
tagging, per-item read and unread status, as well as rich media enclosure and metadata
handling. Google Reader <acronym title="Product Manager">PM</acronym> Jason Shellen
and engineer Chris Wetherell both confirmed Google's plans after I posted <a href="http://www.niallkennedy.com/blog/archives/2005/12/google_reader_a.html">my
reverse-engineering analysis of the Google Reader backend</a>.</i>
          </p>
          <p>
            <i>The new <acronym>API</acronym>s will allow aggregator developers to build new views
and interactions on top of Google's data. Google currently has at least <a href="http://www.niallkennedy.com/blog/archives/2005/12/google_reader_a.html#comment8093">two
additional Google Reader views running on current development builds</a>.</i>
          </p>
          <p>
            <i>Google may offer public access to the feed <acronym>API</acronym> as early as next
month. Shellen said the team wants to nail a few more bugs before publicly making
the service available to the world.</i>
            <br />
...<br /><i>Google's new offering is direct competition to <a href="http://www.newsgator.com/ngs/api/default.aspx">NewsGator's
synchronization <acronym>API</acronym>s</a> but are easier to code against (no 
<abbr title="Simple Object Access Protocol">
SOAP
</abbr>
required). Google currently does not have the same reach across devices as NewsGator
but an easy-to-use <acronym>API</acronym> from the guys who brought you the Blogger <acronym>API</acronym> and
"Blog This!" might really shake up the feed aggregator ecosystem.</i></p>
          <p>
          </p>
        </blockquote>
        <p>
As someone who's been thinking about <a href="http://www.25hoursaday.com/draft-obasanjo-siam-01.html">synchronization
between RSS readers for a few years</a> I definitely see this as a welcome development.
The <a href="http://www.bloglines.com/services/api/sync">Bloglines sync API</a> is
too limited in its functionality to be useful while the <a href="http://www.newsgator.com/ngs/api/default.aspx">NewsGator
API</a> is both complex and designed with too many assumptions to be widely usable.
However, unlike Niall, I blame the complexity of the <a href="http://www.newsgator.com/ngs/api/default.aspx">NewsGator
API</a> on the data model and expected data flow than on whether it uses SOAP versus
Plain Old XML (POX) as the wire format. 
</p>
        <p>
Once the Google Reader API ships, I'll definitely investigate the feasibility of adding
support for it to the Jubilee release of <a href="http://www.rssbandit.org">RSS Bandit</a>. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=7e81f95e-06fd-4877-ad03-7343268d167f" />
      </body>
      <title>Google Reader API Coming Soon? </title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,7e81f95e-06fd-4877-ad03-7343268d167f.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2005/12/27/GoogleReaderAPIComingSoon.aspx</link>
      <pubDate>Tue, 27 Dec 2005 17:40:41 GMT</pubDate>
      <description>&lt;p&gt;
Niall Kennedy has a blog post entitled &lt;a href="http://www.niallkennedy.com/blog/archives/2005/12/google-api-feeds.html"&gt;Exclusive:
Google to offer feed API&lt;/a&gt; where he reveals 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;Google plans to offer a feed reader &lt;acronym title="Application Programming Interface"&gt;API&lt;/acronym&gt; to
allow third-party developers to build new views of feed data on top of Google's backend.
The new &lt;acronym&gt;API&lt;/acronym&gt;s will include synchronization, feed-level and item-level
tagging, per-item read and unread status, as well as rich media enclosure and metadata
handling. Google Reader &lt;acronym title="Product Manager"&gt;PM&lt;/acronym&gt; Jason Shellen
and engineer Chris Wetherell both confirmed Google's plans after I posted &lt;a href="http://www.niallkennedy.com/blog/archives/2005/12/google_reader_a.html"&gt;my
reverse-engineering analysis of the Google Reader backend&lt;/a&gt;.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;The new &lt;acronym&gt;API&lt;/acronym&gt;s will allow aggregator developers to build new views
and interactions on top of Google's data. Google currently has at least &lt;a href="http://www.niallkennedy.com/blog/archives/2005/12/google_reader_a.html#comment8093"&gt;two
additional Google Reader views running on current development builds&lt;/a&gt;.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Google may offer public access to the feed &lt;acronym&gt;API&lt;/acronym&gt; as early as next
month. Shellen said the team wants to nail a few more bugs before publicly making
the service available to the world.&lt;/i&gt; 
&lt;br&gt;
...&lt;br&gt;
&lt;i&gt;Google's new offering is direct competition to &lt;a href="http://www.newsgator.com/ngs/api/default.aspx"&gt;NewsGator's
synchronization &lt;acronym&gt;API&lt;/acronym&gt;s&lt;/a&gt; but are easier to code against (no 
&lt;abbr title="Simple Object Access Protocol"&gt;
SOAP
&lt;/abbr&gt;
required). Google currently does not have the same reach across devices as NewsGator
but an easy-to-use &lt;acronym&gt;API&lt;/acronym&gt; from the guys who brought you the Blogger &lt;acronym&gt;API&lt;/acronym&gt; and
"Blog This!" might really shake up the feed aggregator ecosystem.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
As someone who's been thinking about &lt;a href="http://www.25hoursaday.com/draft-obasanjo-siam-01.html"&gt;synchronization
between RSS readers for a few years&lt;/a&gt; I definitely see this as a welcome development.
The &lt;a href="http://www.bloglines.com/services/api/sync"&gt;Bloglines sync API&lt;/a&gt; is
too limited in its functionality to be useful while the &lt;a href="http://www.newsgator.com/ngs/api/default.aspx"&gt;NewsGator
API&lt;/a&gt; is both complex and designed with too many assumptions to be widely usable.
However, unlike Niall, I blame the complexity of the &lt;a href="http://www.newsgator.com/ngs/api/default.aspx"&gt;NewsGator
API&lt;/a&gt; on the data model and expected data flow than on whether it uses SOAP versus
Plain Old XML (POX) as the wire format. 
&lt;/p&gt;
&lt;p&gt;
Once the Google Reader API ships, I'll definitely investigate the feasibility of adding
support for it to the Jubilee release of &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt;. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=7e81f95e-06fd-4877-ad03-7343268d167f" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,7e81f95e-06fd-4877-ad03-7343268d167f.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=870b48a7-4f60-4d98-9599-0b6747975b24</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,870b48a7-4f60-4d98-9599-0b6747975b24.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,870b48a7-4f60-4d98-9599-0b6747975b24.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=870b48a7-4f60-4d98-9599-0b6747975b24</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We were planning to ship a bugfix release of <a href="http://www.rssbandit.org">RSS
Bandit</a> before Christmas which fixed all the major issues reported in the recently <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=4e452051-706b-4464-92b8-52221fca8077">Nightcrawler
edition of RSS Bandit</a>. 
</p>
        <p>
Unfortunately, it seems that either due to complexity or buginess I simply can't get
the <a href="http://www.newsgator.com/ngs/api/overview.aspx">NewsGator API</a> to
perform the straightforward task of marking something as read in <a href="http://www.newsgator.com/ngs/default.aspx">NewsGator
Online</a> which was viewed in <a href="http://www.rssbandit.org">RSS Bandit</a>.
I spent all of yesterday afternoon plus a couple of hours this morning working on
it and I've finally given up. This feature simply won't work in the bugfix release
shipping later this week. Maybe I'll have better luck when we ship the <a href="http://www.rssbandit.org/ow.asp?RoadMap#h13">Jubilee
release</a>. 
</p>
        <p>
To make myself feel better, I'll work on fixing some of the <a href="http://weblog.philringnalda.com/2005/12/18/who-knows-a-title-from-a-hole-in-the-ground">Atom
parsing bugs reported by Phil Ringnalda</a> and the <a href="http://www.rssbandit.org/forum/topic.asp?TOPIC_ID=1041">issues
with password protected newsgroups</a>. Nothing like having your self-worth defined
by how many bugs you close in a database on SourceForge. 
</p>
        <p>
          <b>Update:</b> So not only have I already fixed the newsgroup issues and the problems
with parsing Atom feeds pointed out by Phil Ringnalda but I just got pinged by <a href="http://agileprogrammer.com/eightytwenty/">Gordon
Weakliem</a> who is the developer of the NewsGator API. Perhaps my Christmas can be
salvaged after all. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=870b48a7-4f60-4d98-9599-0b6747975b24" />
      </body>
      <title>How the NewsGator API Ruined my Christmas (Updated)</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,870b48a7-4f60-4d98-9599-0b6747975b24.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2005/12/19/HowTheNewsGatorAPIRuinedMyChristmasUpdated.aspx</link>
      <pubDate>Mon, 19 Dec 2005 21:59:02 GMT</pubDate>
      <description>&lt;p&gt;
We were planning to ship a bugfix release of &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt; before Christmas which fixed all the major issues reported in the recently &lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=4e452051-706b-4464-92b8-52221fca8077"&gt;Nightcrawler
edition of RSS Bandit&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Unfortunately, it seems that either due to complexity or buginess I simply can't get
the &lt;a href="http://www.newsgator.com/ngs/api/overview.aspx"&gt;NewsGator API&lt;/a&gt; to
perform the straightforward task of marking something as read in &lt;a href="http://www.newsgator.com/ngs/default.aspx"&gt;NewsGator
Online&lt;/a&gt; which was viewed in &lt;a href="http://www.rssbandit.org"&gt;RSS Bandit&lt;/a&gt;.
I spent all of yesterday afternoon plus a couple of hours this morning working on
it and I've finally given up. This feature simply won't work in the bugfix release
shipping later this week. Maybe I'll have better luck when we ship the &lt;a href="http://www.rssbandit.org/ow.asp?RoadMap#h13"&gt;Jubilee
release&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
To make myself feel better, I'll work on fixing some of the &lt;a href="http://weblog.philringnalda.com/2005/12/18/who-knows-a-title-from-a-hole-in-the-ground"&gt;Atom
parsing bugs reported by Phil Ringnalda&lt;/a&gt; and the &lt;a href="http://www.rssbandit.org/forum/topic.asp?TOPIC_ID=1041"&gt;issues
with password protected newsgroups&lt;/a&gt;. Nothing like having your self-worth defined
by how many bugs you close in a database on SourceForge. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Update:&lt;/b&gt; So not only have I already fixed the newsgroup issues and the problems
with parsing Atom feeds pointed out by Phil Ringnalda but I just got pinged by &lt;a href="http://agileprogrammer.com/eightytwenty/"&gt;Gordon
Weakliem&lt;/a&gt; who is the developer of the NewsGator API. Perhaps my Christmas can be
salvaged after all. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=870b48a7-4f60-4d98-9599-0b6747975b24" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,870b48a7-4f60-4d98-9599-0b6747975b24.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=bd4c3aca-37b7-4f82-99ba-92a4bc4a72d9</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,bd4c3aca-37b7-4f82-99ba-92a4bc4a72d9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,bd4c3aca-37b7-4f82-99ba-92a4bc4a72d9.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=bd4c3aca-37b7-4f82-99ba-92a4bc4a72d9</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Alan Kleymeyer has a post entitled <a href="http://kleymeyer.typepad.com/blog/2005/12/newsgator_onlin.html">NewsGator
Online</a> where he writes 
</p>
        <blockquote>
          <p>
            <i>I've switched my online news aggregator from <a href="http://www.bloglines.com/">Bloglines</a> to <a href="http://www.newsgator.com/">Newsgator</a>. 
First, I wanted to try it out and compare it to Bloglines.  I like the interface
better, especially in how you mark things as read.  I've swithched for good. 
I mainly switched so that I can continue using <a href="http://www.rssbandit.org/">RSS
Bandit</a> and get the benefit of syncing between it and an online news aggregator
(supported in latest RSS Bandit 1.3.0.38 release)</i>
          </p>
        </blockquote>
        <p>
Alan's post describes exactly why creating APIs for your online service and treating
it as a Web platform and not just a web site is important. What would you rather use,
a web-based aggregator which provides limited integration with a few desktop aggregators
(i.e.<a href="http://bloglines.com/">Bloglines</a>) OR a web-based aggregator which
provides full integration with a variety of free and payware aggregators including <a href="http://www.rssbandit.org">RSS
Bandit</a>, <a href="http://ranchero.com/netnewswire/">NetNewsWire</a> and <a href="http://www.bradsoft.com/feeddemon/">FeedDemon</a>?
Building out a Web platform is about giving users choice which is what the NewsGator
guys have done by providing the <a href="http://www.newsgator.com/ngs/api/default.aspx">NewsGator
API</a>. 
</p>
        <p>
The canonical example of the power of Web APIs and Web platforms is RSS. Providing
an RSS feed liberates your readers from the limitations of using one application (the
Web browser) and one user interface (your HTML website) to view your content. They
can consume it on their own terms using the applications that best fit their needs.
Blogging wouldn't be as popular as it is today if not for this most fundamental of
web services. 
</p>
        <p>
The topic of <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=ff9e7686-fe87-400b-a09c-fe449547d13c">my
ThinkWeek paper</a> was turning Web <i>sites</i> into Web <b>platforms</b> and I was
hoping to get to give a presentation about it at next year's <a href="http://conferences.oreillynet.com/etech/">O'Reilly
Emerging Technology Conference</a> but it got rejected. I guess I'll just have to
keep shopping it around. Perhaps I can get it into <a href="http://www.gnomedex.com/">Gnomedex</a> or <a href="http://www.mix06.com/">Mix
'06</a>. :) 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=bd4c3aca-37b7-4f82-99ba-92a4bc4a72d9" />
      </body>
      <title>The Value of Web Platforms: Bloglines vs. Newsgator Online</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,bd4c3aca-37b7-4f82-99ba-92a4bc4a72d9.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2005/12/15/TheValueOfWebPlatformsBloglinesVsNewsgatorOnline.aspx</link>
      <pubDate>Thu, 15 Dec 2005 18:58:55 GMT</pubDate>
      <description>&lt;p&gt;
Alan Kleymeyer has a post entitled &lt;a href="http://kleymeyer.typepad.com/blog/2005/12/newsgator_onlin.html"&gt;NewsGator
Online&lt;/a&gt; where he writes 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt;I've switched my online news aggregator from &lt;a href="http://www.bloglines.com/"&gt;Bloglines&lt;/a&gt; to &lt;a href="http://www.newsgator.com/"&gt;Newsgator&lt;/a&gt;.&amp;nbsp;
First, I wanted to try it out and compare it to Bloglines.&amp;nbsp; I like the interface
better, especially in how you mark things as read.&amp;nbsp; I've swithched for good.&amp;nbsp;
I mainly switched so that I can continue using &lt;a href="http://www.rssbandit.org/"&gt;RSS
Bandit&lt;/a&gt; and get the benefit of syncing between it and an online news aggregator
(supported in latest RSS Bandit 1.3.0.38 release)&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Alan's post describes exactly why creating APIs for your online service and treating
it as a Web platform and not just a web site is important. What would you rather use,
a web-based aggregator which provides limited integration with a few desktop aggregators
(i.e.&lt;a href="http://bloglines.com/"&gt;Bloglines&lt;/a&gt;) OR a web-based aggregator which
provides full integration with a variety of free and payware aggregators including &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt;, &lt;a href="http://ranchero.com/netnewswire/"&gt;NetNewsWire&lt;/a&gt; and &lt;a href="http://www.bradsoft.com/feeddemon/"&gt;FeedDemon&lt;/a&gt;?
Building out a Web platform is about giving users choice which is what the NewsGator
guys have done by providing the&amp;nbsp;&lt;a href="http://www.newsgator.com/ngs/api/default.aspx"&gt;NewsGator
API&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
The canonical example of the power of Web APIs and Web platforms is RSS. Providing
an RSS feed liberates your readers from the limitations of using one application (the
Web browser) and one user interface (your HTML website) to view your content. They
can consume it on their own terms using the applications that best fit their needs.
Blogging wouldn't be as popular as it is today if not for this most fundamental of
web services. 
&lt;/p&gt;
&lt;p&gt;
The topic of &lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=ff9e7686-fe87-400b-a09c-fe449547d13c"&gt;my
ThinkWeek paper&lt;/a&gt; was turning Web &lt;i&gt;sites&lt;/i&gt; into Web &lt;b&gt;platforms&lt;/b&gt; and I was
hoping to get to give a presentation about it at next year's &lt;a href="http://conferences.oreillynet.com/etech/"&gt;O'Reilly
Emerging Technology Conference&lt;/a&gt; but it got rejected. I guess I'll just have to
keep shopping it around. Perhaps I can get it into &lt;a href="http://www.gnomedex.com/"&gt;Gnomedex&lt;/a&gt; or &lt;a href="http://www.mix06.com/"&gt;Mix
'06&lt;/a&gt;. :) 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=bd4c3aca-37b7-4f82-99ba-92a4bc4a72d9" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,bd4c3aca-37b7-4f82-99ba-92a4bc4a72d9.aspx</comments>
      <category>Syndication Technology</category>
      <category>Web Development</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=1da20ddb-e88d-4cf9-8171-bf75bdbd021c</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,1da20ddb-e88d-4cf9-8171-bf75bdbd021c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,1da20ddb-e88d-4cf9-8171-bf75bdbd021c.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=1da20ddb-e88d-4cf9-8171-bf75bdbd021c</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The number one problem that faces developers of feed readers is how to identify posts.
How does a feed reader tell a new post from an old one whose title or permalink changed?
In general how you do this is to pick a unique identifier from the metadata of the
feed item to use to tell it apart from others. If you are using the Atom 0.3 &amp;
1.0 syndication formats the identifier is the &lt;atom:id&gt; element, for RSS 1.0
it is the <code>rdf:about</code> attribute and for RSS 0.9x &amp; RSS 2.0 it is the
&lt;guid&gt; element. 
</p>
        <p>
The problem is that many RSS 0.9x &amp; 2.0 feeds do not have a &lt;guid&gt; element
which usually means a feed reader has to come up with its own custom mechanism for
identifying items. In many cases, using the &lt;link&gt; element is enough because
most items in a feed map to a single web resource with a permalink URL. In some pathological
cases, a feed may not have &lt;guid&gt; or &lt;link&gt; OR even worse may use the
same value in the &lt;link&gt; element for each item in the feed. In such
cases, feed readers usually resort to heuristics which are guaranteed to be wrong
at least some of the time. 
</p>
        <p>
So what does this have to do with the <a href="http://www.newsgator.com/ngs/api/default.aspx">Newsgator
API</a>? Users of recent versions of <a href="http://www.rssbandit.org/">RSS Bandit</a> can
synchronize the state of their RSS feeds with <a href="http://www.newsgator.com/">Newsgator
Online</a> using the Newsgator API. Where things get tricky is that this means that
both the <a href="http://www.rssbandit.org/">RSS Bandit</a> and <a href="http://www.newsgator.com/">Newsgator
Online</a> either need to use the same techniques for identifying posts OR have
a common way to map between their identification mechanisms. When I first used the
API, I noticed that Newsgator has it's own notion of a "Newsgator ID" which it expects
clients to use. In fact, it's worse than that. Newsgator Online assumes that clients
that synchronize with it actually just fetch all their data from Newsgator Online
including feed content. This is a pretty big assumption to make but I'm sure it made
it easier to solve a bunch of tricky development problems for their various products.
Instead of worrying about keeping data and algorithms on the clients in
sync with the server, they just replace all the data on the client with the server
data as part of the 'synchronization' process. 
</p>
        <p>
Now that I've built an application that deviates from this fundamental assumption
I've been having all sorts of interesting problems. The most recent being that some
users complained that read/unread state wasn't being synced via the Newsgator API.
When I investigated it turned out that this is because I use &lt;guid&gt; elements
to identify posts in <a href="http://www.rssbandit.org/">RSS Bandit</a> while
the <a href="http://www.newsgator.com/ngs/api/default.aspx">Newsgator API</a> uses
the "Newsgator ID". Even worse is that they don't even expose the original &lt;guid&gt;
element in the returned feed items. So now it looks like fixing the read/unread not
being synced bug involves bigger and more fundamental changes than I expected. More
than likely I'll have to switch to using &lt;link&gt; elements as unique identifiers
since it looks like the <a href="http://www.newsgator.com/ngs/api/default.aspx">Newsgator
API</a> doesn't throw those away. 
</p>
        <p>
Frustrating.
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=1da20ddb-e88d-4cf9-8171-bf75bdbd021c" />
      </body>
      <title>The Newsgator API Continues to Frustrate Me</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,1da20ddb-e88d-4cf9-8171-bf75bdbd021c.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2005/12/12/TheNewsgatorAPIContinuesToFrustrateMe.aspx</link>
      <pubDate>Mon, 12 Dec 2005 01:05:00 GMT</pubDate>
      <description>&lt;p&gt;
The number one problem that faces developers of feed readers is how to identify posts.
How does a feed reader tell a new post from an old one whose title or permalink changed?
In general how you do this is to pick a unique identifier from the metadata of the
feed item to use to tell it apart from others. If you are using the Atom 0.3 &amp;amp;
1.0 syndication formats the identifier is the &amp;lt;atom:id&amp;gt; element, for RSS 1.0
it is the &lt;code&gt;rdf:about&lt;/code&gt; attribute and for RSS 0.9x &amp;amp; RSS 2.0 it is the
&amp;lt;guid&amp;gt; element. 
&lt;/p&gt;
&lt;p&gt;
The problem is that many RSS 0.9x &amp;amp; 2.0 feeds do not have a &amp;lt;guid&amp;gt; element
which usually means a feed reader has to come up with its own custom mechanism for
identifying items. In many cases, using the &amp;lt;link&amp;gt; element is enough because
most items in a feed map to a single web resource with a permalink URL. In some pathological
cases, a feed may not have &amp;lt;guid&amp;gt; or &amp;lt;link&amp;gt; OR even worse may use the
same value&amp;nbsp;in the &amp;lt;link&amp;gt; element&amp;nbsp;for each item in the feed. In such
cases, feed readers usually resort to heuristics which are guaranteed to be wrong
at least some of the time. 
&lt;/p&gt;
&lt;p&gt;
So what does this have to do with the &lt;a href="http://www.newsgator.com/ngs/api/default.aspx"&gt;Newsgator
API&lt;/a&gt;? Users of recent versions of &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt; can
synchronize the state of their RSS feeds with &lt;a href="http://www.newsgator.com/"&gt;Newsgator
Online&lt;/a&gt; using the Newsgator API. Where things get tricky is that this means that
both the &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.newsgator.com/"&gt;Newsgator
Online&lt;/a&gt;&amp;nbsp;either need to use the same techniques for identifying posts OR have
a common way to map between their identification mechanisms. When I first used the
API, I noticed that Newsgator has it's own notion of a "Newsgator ID" which it expects
clients to use. In fact, it's worse than that. Newsgator Online assumes that clients
that synchronize with it actually just fetch all their data from Newsgator Online
including feed content. This is a pretty big assumption to make but I'm sure it made
it easier to solve a bunch of tricky development problems for their various products.
Instead of worrying about keeping&amp;nbsp;data and algorithms&amp;nbsp;on the clients in
sync with the server, they just replace all the data on the client with the server
data as part of the 'synchronization' process. 
&lt;/p&gt;
&lt;p&gt;
Now that I've built an application that deviates from this fundamental assumption
I've been having all sorts of interesting problems. The most recent being that some
users complained that read/unread state wasn't being synced via the Newsgator API.
When I investigated it turned out that this is because I use &amp;lt;guid&amp;gt; elements
to identify posts in &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt;&amp;nbsp;while
the &lt;a href="http://www.newsgator.com/ngs/api/default.aspx"&gt;Newsgator API&lt;/a&gt;&amp;nbsp;uses
the "Newsgator ID". Even worse is that they don't even expose the original &amp;lt;guid&amp;gt;
element in the returned feed items. So now it looks like fixing the read/unread not
being synced bug involves bigger and more fundamental changes than I expected. More
than likely I'll have to switch to using &amp;lt;link&amp;gt; elements as unique identifiers
since it looks like the &lt;a href="http://www.newsgator.com/ngs/api/default.aspx"&gt;Newsgator
API&lt;/a&gt; doesn't throw those away. 
&lt;/p&gt;
&lt;p&gt;
Frustrating.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=1da20ddb-e88d-4cf9-8171-bf75bdbd021c" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,1da20ddb-e88d-4cf9-8171-bf75bdbd021c.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=58a4ebe0-b6bf-4cb1-bdcf-0f46baf76dbb</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,58a4ebe0-b6bf-4cb1-bdcf-0f46baf76dbb.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,58a4ebe0-b6bf-4cb1-bdcf-0f46baf76dbb.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=58a4ebe0-b6bf-4cb1-bdcf-0f46baf76dbb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">From TechCrunch we learn <a href="http://www.techcrunch.com/2005/11/29/rss-is-now-integrated-into-yahoo-mail-and-alerts/%20">RSS
is Now Integrated into Yahoo Mail and Alerts</a>. This is a great addition to the
service and something I'll definitely be trying out in my Yahoo! Mail account once
it is available. I wonder if they'll provide an API to allow desktop RSS readers to
synchronize their state like <a href="http://www.bloglines.com/services/api/">Bloglines</a> and <a href="http://www.newsgator.com/ngs/api/default.aspx">Newsgator
Online</a> do? 
<p></p><p>
The following is an excerpt from Michael Arrington's post on the announcement<br /></p><blockquote><i><p>
Yahoo gathered a small group of bloggers, press and others at Sauce in San Francisco
tonight to announce the launch of two new RSS products. They have integrated an RSS
reader directly into <a href="http://mail.yahoo.com/">Yahoo Mail</a> Beta, and are
expanding <a href="http://alerts.yahoo.com/">Alerts</a> to include RSS feeds.
</p><p>
These are significant new products, aimed squarely at new and mainstream RSS users.
The service is not live as of the time I am posting this. I’ve added a screen shot
picture from the live demo.
</p><h2>Mail
</h2><p><img class="shot" style="float: left;" alt="" src="http://www.techcrunch.com/wp-content/yahoorssmail.jpg" />Yahoo
has deeply integrated RSS into the Yahoo Mail beta experience. Directly below the
email folders are “RSS folders”. Clicking on the top folder show all posts in a “river
of news” format, meaning all posts for all subscribed feeds are listed in the order
they have appeared in feeds. 
</p><p>
Each feed also has its own folder, allowing the user to read feeds individually (more
like bloglines).
</p><p>
A post from any feed is treated exactly like an email - any post can be forwarded
as an email or dragged into a folder and saved. All of the great AJAX functionality
already working in Yahoo’s Mail beta works with the new RSS functionality as well.
</p><p>
Adding feeds is straightforward - include the feed URL or choose from a number of
popular feeds.
</p></i></blockquote><p><br /></p><img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=58a4ebe0-b6bf-4cb1-bdcf-0f46baf76dbb" /></body>
      <title>Yahoo! Mail and RSS</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,58a4ebe0-b6bf-4cb1-bdcf-0f46baf76dbb.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2005/11/30/YahooMailAndRSS.aspx</link>
      <pubDate>Wed, 30 Nov 2005 17:35:56 GMT</pubDate>
      <description>From TechCrunch we learn &lt;a href="http://www.techcrunch.com/2005/11/29/rss-is-now-integrated-into-yahoo-mail-and-alerts/%20"&gt;RSS
is Now Integrated into Yahoo Mail and Alerts&lt;/a&gt;. This is a great addition to the
service and something I'll definitely be trying out in my Yahoo! Mail account once
it is available. I wonder if they'll provide an API to allow desktop RSS readers to
synchronize their state like &lt;a href="http://www.bloglines.com/services/api/"&gt;Bloglines&lt;/a&gt; and &lt;a href="http://www.newsgator.com/ngs/api/default.aspx"&gt;Newsgator
Online&lt;/a&gt; do? 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The following is an excerpt from Michael Arrington's post on the announcement&lt;br&gt;
&lt;/p&gt;
&lt;blockquote&gt; &lt;i&gt; 
&lt;p&gt;
Yahoo gathered a small group of bloggers, press and others at Sauce in San Francisco
tonight to announce the launch of two new RSS products. They have integrated an RSS
reader directly into &lt;a href="http://mail.yahoo.com/"&gt;Yahoo Mail&lt;/a&gt; Beta, and are
expanding &lt;a href="http://alerts.yahoo.com/"&gt;Alerts&lt;/a&gt; to include RSS feeds.
&lt;/p&gt;
&lt;p&gt;
These are significant new products, aimed squarely at new and mainstream RSS users.
The service is not live as of the time I am posting this. I’ve added a screen shot
picture from the live demo.
&lt;/p&gt;
&lt;h2&gt;Mail
&lt;/h2&gt;
&lt;p&gt;
&lt;img class="shot" style="float: left;" alt="" src="http://www.techcrunch.com/wp-content/yahoorssmail.jpg"&gt;Yahoo
has deeply integrated RSS into the Yahoo Mail beta experience. Directly below the
email folders are “RSS folders”. Clicking on the top folder show all posts in a “river
of news” format, meaning all posts for all subscribed feeds are listed in the order
they have appeared in feeds. 
&lt;/p&gt;
&lt;p&gt;
Each feed also has its own folder, allowing the user to read feeds individually (more
like bloglines).
&lt;/p&gt;
&lt;p&gt;
A post from any feed is treated exactly like an email - any post can be forwarded
as an email or dragged into a folder and saved. All of the great AJAX functionality
already working in Yahoo’s Mail beta works with the new RSS functionality as well.
&lt;/p&gt;
&lt;p&gt;
Adding feeds is straightforward - include the feed URL or choose from a number of
popular feeds.
&lt;/p&gt;
&lt;/i&gt; &lt;/blockquote&gt; 
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=58a4ebe0-b6bf-4cb1-bdcf-0f46baf76dbb" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,58a4ebe0-b6bf-4cb1-bdcf-0f46baf76dbb.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=694ff67b-6a9d-4656-a390-92916ebb758e</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,694ff67b-6a9d-4656-a390-92916ebb758e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,694ff67b-6a9d-4656-a390-92916ebb758e.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=694ff67b-6a9d-4656-a390-92916ebb758e</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In his post <a href="http://spaces.msn.com/members/rayozzie/Blog/cns%211pyct_cYtbBtOBPDVAumMEdw%21175.entry">Really
Simple Sharing</a>, Ray Ozzie announced <a href="http://msdn.microsoft.com/xml/rss/sse/">Simple
Sharing Extensions for RSS and OPML</a>. He writes 
</p>
        <blockquote>
          <p>
            <i> As an industry, we have simply not designed our calendaring and directory software
and services for this “mesh” model. The websites, services and servers we build seem
to all want to be the “owner” and “publisher”; it’s really inconsistent with the model
that made email so successful, and the loosely-coupled nature of the web. </i>
          </p>
          <p>
            <i>Shortly after I started at Microsoft, I had the opportunity to meet with the people
behind Exchange, Outlook, MSN, Windows Mobile, Messenger, Communicator, and more.
We brainstormed about this “meshed world” and how we might best serve it - a world
where each of these products and others’ products could both manage these objects
and synchronize each others’ changes. We thought about how we might prototype such
a thing as rapidly as possible – to get the underpinnings of data synchronization
working so that we could spend time working on the user experience aspects of the
problem – a much better place to spend time than doing plumbing.</i>
          </p>
          <p>
            <i>There are many great item synchronization mechanisms out there (and at Microsoft),
but we decided we’d never get short term network effects among products if we selected
something complicated – even if it were powerful. What we really longed for was "the
RSS of synchronization" ... something simple that would catch on very quickly. </i>
          </p>
          <p>
            <i>Using RSS itself as-is for synchronization wasn't really an option. That is, RSS
is primarily about syndication - unidirectional publishing - while in order to accomplish
the “mesh” sharing scenarios, we'd need bi-directional (actually, multi-directional)
synchronization of items. But RSS is compelling because of the power inherent in its
simplicity. 
<br />
...<br />
And so we created an RSS extension that we refer to as Simple Sharing Extensions or
SSE. In just a few weeks time, several Microsoft product groups and my own 'concept
development group' built prototypes and demos, and found that it works and interoperates
quite nicely. </i>
          </p>
          <p>
          </p>
          <p>
            <i>We’re pretty excited about the extension - well beyond the uses that catalyzed
its creation. It’s designed in such a way that the minimum implementation is <i>incredibly
easy</i>, and so that higher-level capabilities such as conflict handling can be implemented
in those applications that want to do such things. </i>
          </p>
        </blockquote>
        <p>
The model behind SSE is pretty straightforward; to sychronize data across multiple
sources, each end point provides a feed and the subscribes to the feeds provided by
the other end point(s).  I hate to sound like a fanboy but SSE is an example
of how Ray Ozzie showed up at Microsoft and just started kicking butt. I've been on
the periphery of some of the discussions of SSE and reviewed early drafts of the spec.
It's been impressive seeing how much quick progress Ray made internally on getting
this idea polished and evangelized.<br /></p>
        <p>
The spec looks good modulo the issues that tend to dog Microsoft when it ships specs
like this. For example,  is a lack of detail around data types (e.g. nowhere
is the date format used by the spec documented although you can assume it's RFC 822
dates based on the examples) and there is also the lack of any test sites that have
feeds which use this format so enterprising hackers can quickly write some code to
prototype implementations and try out ideas. 
</p>
        <p>
Sam Ruby has posted a blog entry critical of Microsoft's practices when it publishes
RSS extension specifications in his post <a href="http://www.intertwingly.net/blog/2005/11/21/This-is-Sharing">This
is Sharing?</a> where he writes 
</p>
        <blockquote>
          <p xmlns="http://www.w3.org/1999/xhtml">
            <i>The first attribute that the the <a href="http://msdn.microsoft.com/xml/rss/sse/">Simple
Sharing Extensions for RSS and OPML</a> is to “treat the item list as an ordered set”. 
This sounds like something from the <a href="http://www.intertwingly.net/blog/2005/06/24/Simple-List-Questions">Simple
List Extensions Specification</a> that was also <a href="http://www.intertwingly.net/blog/2005/06/29/Undecipherable-Specification-Error#Conversations">hatched
in private and then unleashed with great fanfare</a> about five months ago. Sure a <a href="http://radio.weblogs.com/0001011/2005/06/25.html#a10467">wiki</a> was
set up, but any questions posted there were promptly ignored.  The cone of silence
has been so impenetrable that even <a href="http://www.intertwingly.net/blog/2005/07/27/FireWire">invoking
the name Scoble</a> turns out to be ineffective.</i>  
</p>
          <p xmlns="http://www.w3.org/1999/xhtml">
            <i>Now the <a href="http://msdn.microsoft.com/longhorn/understanding/rss/simplefeedextensions/">Simple
List Extensions Specification</a> URI redirects to an ad for <a href="http://msdn.microsoft.com/windowsvista/">vaporware</a>. 
Some things <a href="http://www.w3.org/Provider/Style/URI">never change</a>.</i>
          </p>
          <p xmlns="http://www.w3.org/1999/xhtml">
            <i>Should we wait for version 3.0?</i>
          </p>
        </blockquote>
        <p>
I agree with all of Sam's feedback. Hopefully Microsoft will do better this time around. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=694ff67b-6a9d-4656-a390-92916ebb758e" />
      </body>
      <title>Microsoft Announces Simple Sharing Extensions for RSS and OPML</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,694ff67b-6a9d-4656-a390-92916ebb758e.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2005/11/21/MicrosoftAnnouncesSimpleSharingExtensionsForRSSAndOPML.aspx</link>
      <pubDate>Mon, 21 Nov 2005 19:21:26 GMT</pubDate>
      <description>&lt;p&gt;
In his post &lt;a href="http://spaces.msn.com/members/rayozzie/Blog/cns%211pyct_cYtbBtOBPDVAumMEdw%21175.entry"&gt;Really
Simple Sharing&lt;/a&gt;, Ray Ozzie announced &lt;a href="http://msdn.microsoft.com/xml/rss/sse/"&gt;Simple
Sharing Extensions for RSS and OPML&lt;/a&gt;. He writes 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;i&gt; As an industry, we have simply not designed our calendaring and directory software
and services for this “mesh” model. The websites, services and servers we build seem
to all want to be the “owner” and “publisher”; it’s really inconsistent with the model
that made email so successful, and the loosely-coupled nature of the web. &lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Shortly after I started at Microsoft, I had the opportunity to meet with the people
behind Exchange, Outlook, MSN, Windows Mobile, Messenger, Communicator, and more.
We brainstormed about this “meshed world” and how we might best serve it - a world
where each of these products and others’ products could both manage these objects
and synchronize each others’ changes. We thought about how we might prototype such
a thing as rapidly as possible – to get the underpinnings of data synchronization
working so that we could spend time working on the user experience aspects of the
problem – a much better place to spend time than doing plumbing.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;There are many great item synchronization mechanisms out there (and at Microsoft),
but we decided we’d never get short term network effects among products if we selected
something complicated – even if it were powerful. What we really longed for was "the
RSS of synchronization" ... something simple that would catch on very quickly. &lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Using RSS itself as-is for synchronization wasn't really an option. That is, RSS
is primarily about syndication - unidirectional publishing - while in order to accomplish
the “mesh” sharing scenarios, we'd need bi-directional (actually, multi-directional)
synchronization of items. But RSS is compelling because of the power inherent in its
simplicity. 
&lt;br&gt;
...&lt;br&gt;
And so we created an RSS extension that we refer to as Simple Sharing Extensions or
SSE. In just a few weeks time, several Microsoft product groups and my own 'concept
development group' built prototypes and demos, and found that it works and interoperates
quite nicely. &lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;We’re pretty excited about the extension - well beyond the uses that catalyzed
its creation. It’s designed in such a way that the minimum implementation is &lt;i&gt;incredibly
easy&lt;/i&gt;, and so that higher-level capabilities such as conflict handling can be implemented
in those applications that want to do such things. &lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The model behind SSE is pretty straightforward; to sychronize data across multiple
sources, each end point provides a feed and the subscribes to the feeds provided by
the other end point(s).&amp;nbsp; I hate to sound like a fanboy but SSE is an example
of how Ray Ozzie showed up at Microsoft and just started kicking butt. I've been on
the periphery of some of the discussions of SSE and reviewed early drafts of the spec.
It's been impressive seeing how much quick progress Ray made internally on getting
this idea polished and evangelized.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
The spec looks good modulo the issues that tend to dog Microsoft when it ships specs
like this. For example,&amp;nbsp; is a lack of detail around data types (e.g. nowhere
is the date format used by the spec documented although you can assume it's RFC 822
dates based on the examples) and there is also the lack of any test sites that have
feeds which use this format so enterprising hackers can quickly write some code to
prototype implementations and try out ideas. 
&lt;/p&gt;
&lt;p&gt;
Sam Ruby has posted a blog entry critical of Microsoft's practices when it publishes
RSS extension specifications in his post &lt;a href="http://www.intertwingly.net/blog/2005/11/21/This-is-Sharing"&gt;This
is Sharing?&lt;/a&gt; where he writes 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;i&gt;The first attribute that the the &lt;a href="http://msdn.microsoft.com/xml/rss/sse/"&gt;Simple
Sharing Extensions for RSS and OPML&lt;/a&gt; is to “treat the item list as an ordered set”.&amp;nbsp;
This sounds like something from the &lt;a href="http://www.intertwingly.net/blog/2005/06/24/Simple-List-Questions"&gt;Simple
List Extensions Specification&lt;/a&gt; that was also &lt;a href="http://www.intertwingly.net/blog/2005/06/29/Undecipherable-Specification-Error#Conversations"&gt;hatched
in private and then unleashed with great fanfare&lt;/a&gt; about five months ago. Sure a &lt;a href="http://radio.weblogs.com/0001011/2005/06/25.html#a10467"&gt;wiki&lt;/a&gt; was
set up, but any questions posted there were promptly ignored.&amp;nbsp; The cone of silence
has been so impenetrable that even &lt;a href="http://www.intertwingly.net/blog/2005/07/27/FireWire"&gt;invoking
the name Scoble&lt;/a&gt; turns out to be ineffective.&lt;/i&gt;&amp;nbsp; 
&lt;/p&gt;
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;i&gt;Now the &lt;a href="http://msdn.microsoft.com/longhorn/understanding/rss/simplefeedextensions/"&gt;Simple
List Extensions Specification&lt;/a&gt; URI redirects to an ad for &lt;a href="http://msdn.microsoft.com/windowsvista/"&gt;vaporware&lt;/a&gt;.&amp;nbsp;
Some things &lt;a href="http://www.w3.org/Provider/Style/URI"&gt;never change&lt;/a&gt;.&lt;/i&gt;
&lt;/p&gt;
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;i&gt;Should we wait for version 3.0?&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I agree with all of Sam's feedback. Hopefully Microsoft will do better this time around. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=694ff67b-6a9d-4656-a390-92916ebb758e" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,694ff67b-6a9d-4656-a390-92916ebb758e.aspx</comments>
      <category>Syndication Technology</category>
    </item>
    <item>
      <trackback:ping>http://www.25hoursaday.com/weblog/Trackback.aspx?guid=7a01ea38-6937-453a-bab1-0660f027979c</trackback:ping>
      <pingback:server>http://www.25hoursaday.com/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.25hoursaday.com/weblog/PermaLink,guid,7a01ea38-6937-453a-bab1-0660f027979c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.25hoursaday.com/weblog/CommentView,guid,7a01ea38-6937-453a-bab1-0660f027979c.aspx</wfw:comment>
      <wfw:commentRss>http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=7a01ea38-6937-453a-bab1-0660f027979c</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Nick Bradbury has a post entitled <a href="http://nick.typepad.com/blog/2005/11/an_attention_na.html">An
Attention Namespace for OPML</a> where he writes 
</p>
        <blockquote>
          <i>In <a href="http://nick.typepad.com/blog/2005/11/attentionopml_o.html">a
recent post</a> I said that OPML would be a great format for sharing <a href="http://blogs.zdnet.com/Gillmor/index.php?p=74">attention
data</a>, but I wasn't sure whether this would be possible due to uncertainty over
OPML's support for namespaces. 
<br />
... 
<br />
As I mentioned previously, FeedDemon <a href="http://nick.typepad.com/blog/2005/10/feeddemon_16_fe.html">already
stores attention data in OPML</a>, but it uses a proprietary <code>fd:</code> namespace
which relies on attributes that make little sense outside of FeedDemon. What I propose
is that aggregator users and developers have an open discussion about what specific
attention data could (and should) be collected by aggregators. </i>
          <p>
            <i>Although there's a <strong>lot</strong> of attention data that <em>could</em> be
stored in OPML, my recommendation is that we keep it simple - otherwise, we risk seeing
each aggregator support a different subset of attention data. So rather than come
up with a huge list of attributes, I'll start by recommending a single piece of attention
data: <strong>rank</strong>.</i>
          </p>
          <p>
            <i>We need a way to rank feeds that makes sense across aggregators, so that when you
export OPML from one aggregator, the aggregator you import into would know which feeds
you're paying the most attention to. This could be used for any number of things -
recommending related feeds, giving higher ranked feeds higher priority in feed listings,
etc.</i>
          </p>
          <p>
            <i>Although user interface and workflow differences require each aggregator to have
its own <em>algorithm</em> for ranking feeds, we should be able to define a ranking
attribute that makes sense to every aggregator. In FeedDemon's case, a simple scale
(say, 0-100) would work: feeds you rarely read would get be ranked closer to zero,
while feeds you read all the time would be ranked closer to 100. Whether this makes
sense outside of FeedDemon remains to be seen, so I'd love to hear from developers
of other aggregators about this.</i>
          </p>
        </blockquote>
        <p>
I used be the program manager responsible for a number of XML technologies in the
.NET Framework while I was on the XML team at Microsoft. The technology I spent the
most time working with was the <a href="http://www.w3.org/TR/xmlschema-1/">XML Schema
Definition Language (XSD)</a>. After working with XSD for about three years, I came
to the conclusion that XSD has held back the proliferation and advancement of XML
technologies by about two or three years. The lack of adoption of web services technologies
like SOAP and WSDL on the world wide web is primarily due to the complexity of XSD.
The fact that XQuery has spent over 5 years in standards committees and has evolved
to become a technology too complex for the average XML developer is also primarily
the fault of XSD.  This is because XSD is extremely complex and yet is rather
inflexible with minimal functionality. This state of affairs is primarily due to its
nature as a one size fits all technology with too many contradictory design objectives.
In my opinion, the W3C XML Schema Definition language is a victim of premature standardization.
The XML world needed experiment more with various XML schema languages like <a href="http://www.ltg.ed.ac.uk/%7Eht/XMLData-Reduced.htm">XDR</a> and <a href="http://www.oasis-open.org/committees/relax-ng/">RELAX
NG</a> before we decided to settle down and come up with a standard. 
</p>
        <p>
So what does this have to do with attention data and XML? Lots. We are a long way
from standardization. We aren't even well into the experimentation stage yet. How
many feed readers do a good job of giving you an idea of which among the various new
items in your RSS inbox are worth reading? How many of them do a good job suggesting
new feeds for you to read based on your reading habits? Until we get to a point where
such features are common place in feed readers, it seems like putting the cart way
before the horse to start talking about standardizing the XML representation of these
features. 
</p>
        <p>
Let's look at the one field Nick talks about standardizing; rank. He wants all readers
to track 'rank' using a numeric scale of 1-100. This seems pretty arbitrary. In <a href="http://www.rssbandit.org">RSS
Bandit</a>, users can flag posts as Follow Up, Review, Read, Reply or Forward. How
does that map to a numeric scale? It doesn't. If I allowed users to prioritize feeds,
it wouldn't be in a way that would map cleanly to a numeric scale.  
</p>
        <p>
My advice to Nick and others who are entertaining ideas around standardizing attention
data in OPML; go build some features first and see which ones work for end users and
which ones don't. Once we've figured that out amongst multiple readers with diverse
user bases, then we can start thinking about standardization. 
</p>
        <img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=7a01ea38-6937-453a-bab1-0660f027979c" />
      </body>
      <title>The Perils of Premature Standardization: Attention Data and OPML</title>
      <guid isPermaLink="false">http://www.25hoursaday.com/weblog/PermaLink,guid,7a01ea38-6937-453a-bab1-0660f027979c.aspx</guid>
      <link>http://www.25hoursaday.com/weblog/2005/11/20/ThePerilsOfPrematureStandardizationAttentionDataAndOPML.aspx</link>
      <pubDate>Sun, 20 Nov 2005 20:01:14 GMT</pubDate>
      <description>&lt;p&gt;
Nick Bradbury has a post entitled &lt;a href="http://nick.typepad.com/blog/2005/11/an_attention_na.html"&gt;An
Attention Namespace for OPML&lt;/a&gt; where he writes 
&lt;/p&gt;
&lt;blockquote&gt;&lt;i&gt;In &lt;a href="http://nick.typepad.com/blog/2005/11/attentionopml_o.html"&gt;a
recent post&lt;/a&gt; I said that OPML would be a great format for sharing &lt;a href="http://blogs.zdnet.com/Gillmor/index.php?p=74"&gt;attention
data&lt;/a&gt;, but I wasn't sure whether this would be possible due to uncertainty over
OPML's support for namespaces. 
&lt;br&gt;
... 
&lt;br&gt;
As I mentioned previously, FeedDemon &lt;a href="http://nick.typepad.com/blog/2005/10/feeddemon_16_fe.html"&gt;already
stores attention data in OPML&lt;/a&gt;, but it uses a proprietary &lt;code&gt;fd:&lt;/code&gt; namespace
which relies on attributes that make little sense outside of FeedDemon. What I propose
is that aggregator users and developers have an open discussion about what specific
attention data could (and should) be collected by aggregators. &lt;/i&gt;
&lt;p&gt;
&lt;i&gt;Although there's a &lt;strong&gt;lot&lt;/strong&gt; of attention data that &lt;em&gt;could&lt;/em&gt; be
stored in OPML, my recommendation is that we keep it simple - otherwise, we risk seeing
each aggregator support a different subset of attention data. So rather than come
up with a huge list of attributes, I'll start by recommending a single piece of attention
data: &lt;strong&gt;rank&lt;/strong&gt;.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;We need a way to rank feeds that makes sense across aggregators, so that when you
export OPML from one aggregator, the aggregator you import into would know which feeds
you're paying the most attention to. This could be used for any number of things -
recommending related feeds, giving higher ranked feeds higher priority in feed listings,
etc.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Although user interface and workflow differences require each aggregator to have
its own &lt;em&gt;algorithm&lt;/em&gt; for ranking feeds, we should be able to define a ranking
attribute that makes sense to every aggregator. In FeedDemon's case, a simple scale
(say, 0-100) would work: feeds you rarely read would get be ranked closer to zero,
while feeds you read all the time would be ranked closer to 100. Whether this makes
sense outside of FeedDemon remains to be seen, so I'd love to hear from developers
of other aggregators about this.&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I used be the program manager responsible for a number of XML technologies in the
.NET Framework while I was on the XML team at Microsoft. The technology I spent the
most time working with was the &lt;a href="http://www.w3.org/TR/xmlschema-1/"&gt;XML Schema
Definition Language (XSD)&lt;/a&gt;. After working with XSD for about three years, I came
to the conclusion that XSD has held back the proliferation and advancement of XML
technologies by about two or three years. The lack of adoption of web services technologies
like SOAP and WSDL on the world wide web is primarily due to the complexity of XSD.
The fact that XQuery has spent over 5 years in standards committees and has evolved
to become a technology too complex for the average XML developer is also primarily
the fault of XSD.&amp;nbsp; This is because XSD is extremely complex and yet is rather
inflexible with minimal functionality. This state of affairs is primarily due to its
nature as a one size fits all technology with too many contradictory design objectives.
In my opinion, the W3C XML Schema Definition language is a victim of premature standardization.
The XML world needed experiment more with various XML schema languages like &lt;a href="http://www.ltg.ed.ac.uk/%7Eht/XMLData-Reduced.htm"&gt;XDR&lt;/a&gt; and &lt;a href="http://www.oasis-open.org/committees/relax-ng/"&gt;RELAX
NG&lt;/a&gt; before we decided to settle down and come up with a standard. 
&lt;/p&gt;
&lt;p&gt;
So what does this have to do with attention data and XML? Lots. We are a long way
from standardization. We aren't even well into the experimentation stage yet. How
many feed readers do a good job of giving you an idea of which among the various new
items in your RSS inbox are worth reading? How many of them do a good job suggesting
new feeds for you to read based on your reading habits? Until we get to a point where
such features are common place in feed readers, it seems like putting the cart way
before the horse to start talking about standardizing the XML representation of these
features. 
&lt;/p&gt;
&lt;p&gt;
Let's look at the one field Nick talks about standardizing; rank. He wants all readers
to track 'rank' using a numeric scale of 1-100. This seems pretty arbitrary. In &lt;a href="http://www.rssbandit.org"&gt;RSS
Bandit&lt;/a&gt;, users can flag posts as Follow Up, Review, Read, Reply or Forward. How
does that map to a numeric scale? It doesn't. If I allowed users to prioritize feeds,
it wouldn't be in a way that would map cleanly to a numeric scale.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
My advice to Nick and others who are entertaining ideas around standardizing attention
data in OPML; go build some features first and see which ones work for end users and
which ones don't. Once we've figured that out amongst multiple readers with diverse
user bases, then we can start thinking about standardization. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.25hoursaday.com/weblog/aggbug.ashx?id=7a01ea38-6937-453a-bab1-0660f027979c" /&gt;</description>
      <comments>http://www.25hoursaday.com/weblog/CommentView,guid,7a01ea38-6937-453a-bab1-0660f027979c.aspx</comments>
      <category>RSS Bandit</category>
      <category>Syndication Technology</category>
    </item>
  </channel>
</rss>