Windows RSS chapter complete


My blog's been silent since Wednesday because I've been devoting every evening hour and all weekend to finishing the new chapter 6 on the Windows RSS platform for RSS and Atom in Action. I finished about 20 minutes ago and I'm ready to hand the chapter off to the editors. I think it's the longest chapter in the book (but I won't know until it is typeset). Here's the outline as it stands today:
  • Windows RSS platform overview
    • Browse, search and subscribe with IE7
    • Windows RSS platform components
      • The Feeds API
      • The Common Feed List
      • The Feed Store
      • The Download Manager
      • Microsoft's newsfeed list and sharing extensions
  • Managing subscriptions with the Common Feed List
    • Manging subscriptions
    • Keeping track of what's been read
    • Getting started with the Common Feed List
      • Adding the Feeds API to your project
      • Walking the feed folder hierarchy
    • Ceating subscriptions
      • Newsfeed update interval
      • Download enclosures or not?
    • Monitoring events
  • Parsing newsfeeds with the Feeds API
    • Simple newsfeed parsing example
    • Parsing extension elements and funky RSS
      • The Common Feed Format
      • Parsing item summaries with the Feeds API
  • Windows RSS platform newsfeed extensions
    • The Common Feed (CF) extensions
    • The Simple List Extensions (SLX)
    • The Simple Sharing Extensions (SSE)
  • Summary
I'm finished with the 1st draft, but I've still got some unanswered questions about the Windows RSS platform. I wrote to Robert Scoble and he hooked me up with Sean Lyndersay and Walter VonKoch of the Microsoft RSS team. I sent them a list of about 10 questions yesterday. If I can, I'll post the Q&A here.

Next up is the new chapter 7 on parsing feeds with ROME.

Tags: topic:[ie7], topic:[rss], topic:[atom], topic:[vista], topic:[rome]

Please host the Windows RSS Feed Normalizer

Sam Ruby: It seems self evident to me that the Microsoft Feed API is going to be important enough that people are going to want to make sure that their feeds work well with this new platform.

However, not everybody is in a position where they have ready access to a machine running Windows XP Service Pack 2 (SP2) with IE7Beta 2 Preview loaded on it.

So, to make life easier, I’ve converted Dave Johnson’s program to a web application, and I’m looking for volunteers to host it.  If you are in aposition to help with a public server, please leave a comment herewith your URL.
The Feed Normalizer makes it easy for you to see how the Windows RSS platform normalizes your feed, or any feed for that matter. Let's help the Microsoft Feeds API live up to it's package name, which, by the way, is Microsoft.Feeds.Interop.

Maybe some of the RSS Team bloggers would like to help?

Tags: topic:[ie7], topic:[rss], topic:[atom], topic:[vista]

Data loss sucks

James Snell: IE7’s feed reader support isn’t all that bad, but if MS wants developers to use it as a foundation to build new, interesting applications, MS needs to get out the way and provide an implementation that let’s developers work with the data as it exists out on the web. Normalizing subscribed feeds to their version of RSS is troublesome at best.
Tags: topic:[ie7], topic:[rss], topic:[atom], topic:[vista]

Surprise visitor at the meet-up

Congressman Brad Miller (house.gov/bradmiller) and his campaign manager PJ Puryear showed up at Cafe Cyclo tonight for the Raleigh blog meet-up to learn more about blogging and connect with fellow bloggers. How cool is that! I don't think he expected to run into a bunch of geeky tech bloggers, but despite that we had a great time talking blog search and RSS and politics (apparently, everybody present was a democrat). And, I made sure to get in a word or two about the evils of DRM and the broadcast flag. Check out Josh's and Bill's blogs for more about the evening.

Also... I almost forgot to mention that I got to take a behind the scenes look at the IBM  DeveloperWorks Roller implementation. Bill logged in and showed me around. They're still on Roller 2.0, so they don't have comment management/moderation, but they do have tagging and they've made a couple of small layout changes to the editor/admin UI.

Raleigh bloggers meet-up 6:30PM tonight at Cafe Cyclo


I forgot to post the reminder this morning, but what the heck it's not too late. Join us at Cafe Cyclo in Cameron Village to talk blogs, podcasts and whatever else is on your mind.  We meet at 6:30PM and usually break up around 9PM. Josh has the details.

Today's links [March 21, 2006]


FeedsManager.Bastardize()*


OK, I've got the latest IE7 build, the one Microsoft is handing out at MIX06. It took me a bit longer than I had expected to change my examples to compile with the new Feeds API included in the new build. They changed the Feeds namespace to Microsoft.Feeds.Interop and made a bunch of other little changes. So all I have for you tonight is one little example of weirdness.

Let's say you have a feed that uses the RSS 2.0 <description> element to hold a short summary of each item and the funky <content:encoded> element to hold the full content of each item (just like Dave Winer's Wordpress feed does). When the Feeds API reads your feed, it converts it to a normalized (but currently not valid, due to some bugs) form of RSS 2.0 that uses a mix of RSS and Atom 1.0 elements. For funky RSS elements, it uses Atom. So you end up with something like this:

Item contains

<description>
    Short summary of item content
</description>
<content:encoded>
   Full content of the item
</content:encoded>

Feed API normalizes to

<atom:summary type="html">
   Short summary of item content
</atom:summary>
<description>
   Full content of the item
</description>

The old switcharoo, eh?

Here's a more complete example: a source feed in RSS 2.0 format and the same feed in Feeds API normalized normalized format. I've also got an Atom example: source and normalized.

That's pretty weird alright, but they're on the right track. They're using Atom elements to model RSS. Now, if they'd just follow that line of thinking to it's logical conclusion and use Atom as the normalized feed format, they might actually be able to please the assholes and protect the morons of this world.

Tags: topic:[rss], topic:[atom], topic:[feeds], topic:[ie7], topic:[vista], topic:[mix06]

* The title of this post refers to the FeedsManager.Normalize() method which takes an Atom 0.3, Atom 1.0, RSS 1.0 or RSS 2.0 feed and normalizes it to Feeds API RSS 2.0 format. To be clear about this, I'm using this little C# program to get at the normalized feeds:
using System;
using System.Xml;
using System.IO;
using Microsoft.Feeds.Interop;
namespace BlogApps_Chapter06 {
class Normalize {
static void Main(string[] args) {
string url = args[0];
FeedsManager fm = new FeedsManagerClass();
IFeedFolder rootFolder = (IFeedFolder)fm.RootFolder;
IFeed feed = null;
if (!fm.IsSubscribed(url)) {
feed = (IFeed)rootFolder.CreateFeed(url, url);
} else {
feed = (IFeed)fm.GetFeedByUrl(url);
}
feed.Download();
string xml = feed.Xml(feed.itemCount,
FEEDS_XML_SORT_PROPERTY.FXSP_PUBDATE,
FEEDS_XML_SORT_ORDER.FXSD_ASCENDING,
FEEDS_XML_FILTER_FLAGS.FXFF_ALL,
FEEDS_XML_INCLUDE_FLAGS.FXIF_CF_EXTENSIONS);
StreamWriter sw = new StreamWriter(File.OpenWrite(args[1]));
sw.Write(xml);
sw.Close();
}
}

}

New build of IE7 is available


I spent the weekend writing about IE7 and the Microsoft Feeds API -- and my chapter is due at the end of the week, so this is perfect timing for a new build. I'll re-run my experiments with the new one and tell you about some other "interesting" findings later tonight. The closer I look, the funkier it gets.

Roller swallows IBM



Yum, very tasty. What's for dessert?

I fully agree with James, BTW.

Re: Experimenting with the MS Feeds API


I'm seeing lots of interest in my MS Feeds API post yesterday, sparked by links from Sam Ruby, Dave Winer and Randy Morin. Some people might have gotten the impression that I was criticizing the decisions Microsoft made in mapping RSS elements and extension elements to the Feeds API object model. I wasn't.

I think Microsoft made pretty good choices, given the simplified object model that they're working with. If somebody is using funky RSS, then they mean it. For example, if somebody declares the Content Module namespace and uses the <content:encoded> namespace in their feed, then that's probably the content that they want folks to use. I think that's the philosophy Microsoft used in making those decisions, except for prefering <pubDate> over <dc:date>, which I don't understand.

The problem is, the Feeds API object model is a little too simple. Like RSS 2.0, it doesn't model the common things that bloggers do like having both a summary and content for each item, or having  name and/or e-mail address for each author. That's why people use extensions like the <content:encoded> and <dc:creator> (or prefer Atom, which does a better job of modeling those common things). I hope Microsoft will fix this by improving the object model and if they do, they won't have to make as many choices about which elements to use.

Snarkstream


Robert writes that my snarky "get a clue" comment about Google and Atom in my del.icio.us bookmark collection is inappropriate, constitutes harassment and is "the sort of behavior the Atom community is supposedly above." Has he got a point? Do I owe Google an apology?

Experimenting with the MS Feeds API


The Windows RSS platform includes a Feeds API that parses all forms of RSS and Atom to a simplified  object model.

For example, an Item object has an Author property and not an author name, author e-mail and author URI which are all possible in Atom. And, an Item object has a Description field and not description and content (as in Wordpress feeds) or summary and content (as in Atom feeds).

So, how does the Feeds API decide how to map elements to this  simplified object model? I did some C# experiments and here are some of my findings. Note that the Feeds API is beta software and will certainly change for the better (I hope) by the time it is released in IE7 and Windows Vista.

 Item contains
 Feeds API returns
<dc:creator>dave</dc:creator>  item.Author = "dave"
<author>dave@example.com</author> item.Author = "dave@example.com"
<author>dave@example.com</author>
<dc:creator>dave</dc:creator>

item.Author = "dave"
   (prefers funky RSS)
<description>my desc</description>
<content:encoded>my content</content:encoded>
item.Description = "my content"
   (prefers funky RSS)
<pubDate>
   Thu, 9 Mar 2006 23:13:04 -0500
</pubdate>
item.Date =
   "
3/10/2006 4:13:04 AM"
   (uses GMT)
<pubDate>
  
Thu, 9 Mar 2006 23:13:04 -0500
</pubdate>
<dc:date>

   2004-08-19T11:54:37-08:00

</dc:date>
item.Date =
   "
3/10/2006 4:13:04 AM"

   (prefers core RSS element)
<atom:summary>my summary</atom:summary>
<atom:content>my content</atom:content>
item.Description = "my content"

First, it's interesting that those funky RSS elements that Winer dislikes are preferred over the core RSS elements in important places. And second, what if you're not happy with Microsoft's mapping choices in this area?

For example, how do you get both description and content from those Wordpress feeds? Wordpress (and Typepad) uses the <description> element as a summary and the funky <content:encoded> element for the full content (see Winer's own Wordpress.com feed for example). You've got to parse the XML yourself. The Feeds API tries to makes that easy by providing both the XML for the entire feed and the XML fragment for each item, but I think most developers would prefer to have a more complete object model.

See also: What's up with the Windows RSS Platform

Tags: topic:[rss], topic:[atom], topic:[feeds], topic:[ie7], topic:[vista]

The never ending story of RSS and Atom in Action


You know last week, when I said the book was ready to go to the printers and would be available this week as an e-book? We'll, I was wrong.

While we waited for Atom protocol to stabilize, things changed in the world of C# and Java feed APIs. Microsoft introduced the Windows RSS platform and a pre-release of the Windows Feeds API is available in the IE7 beta. And ROME has come along way too; now with Atom format 1.0 support and a growing list of extension modules. We decided that we just couldn't publish a book on RSS and Atom without covering the Windows RSS platform and ROME in-depth. So now I'm under the gun again, writing away into the wee hours of the night. I should be done by April 14th and, with luck, the book will be out in late May, just in time for JavaOne. That explains my sudden interest in the Windows RSS platform.

The kids hate it, but I think it's for the best. Manning will have the very first book that covers the Atom protocol (with a working client and server), the Windows RSS platform and ROME in-depth. It'll definitely be worth the wait.

Tags: topic:[atom], topic:[rss], topic:[ie7], topic:[atom protocol]

Today's links [March 13, 2006]

  • Windows RSS Platform
    Niall Kennedy also blogged about Windows RSS plaform this past weekend
  • Common Feed Errors
    Sam Ruby posts "An analysis of a week’s work of click-throughs on Feed Validator"

JGRASS


grass logoI just heard from the JavaPosse podcast that the GRASS Geographic Information System (GIS) is back with a new Java/Swing based front-end called JGRASS. The screenshots look pretty nice. Just, so you don't have to endure the absolutely horiffic ad-packed Sys-Con web site, which is linked to in the JavaPosse #40 show notes, here are some better links JGRASS information:
Why do I care? GRASS was my life for most of my early career and I worked with John Prestion in Kingston, Jamaica for over a year. I mentioned GRASS recently  in the eWeek interview and I've mentioned it here on the blog a couple of times before: 1993, Hey, I wrote that and That was fun.

IBM developerWorks: powered by Roller

Bill Higgins makes the first post. Very cool!

What's up with the Windows RSS platform?


The Windows RSS Platform (or Feeds API) is the feed handling engine that powers the new RSS features in IE7. It will also be included in Windows Vista for use by other applications. Note that here, RSS is a generic term meant to include both RSS and Atom -- the Feeds API supports both. The Feeds API is packaged in a DLL called msfeeds.dll and available to programmers as a set of dual-interface COM objects. Here are the features exposed via the Feeds API.
  • Common feed list: list of feeds for current user, organized as folder hierarchy.
  • Feed store: local cache of feeds, feeds available via abstract object model
  • Download engine: for managing and monitoring large enclosure downloads
  • RSS sharing extensions: new XML elements to support bi-directional sync via RSS

The Feeds API gives you access to the current user's feed subscription list, a feed parser that can handle any form of RSS and Atom as well as the IE7 podcast download engine. The parser parses feeds to an abstract object model designed to represent any sort of feed. It handles funky RSS and in some cases prefers the funky elements (e.g. <content:escape> over <description>).

I'd like to learn more about how the Feeds API decides which elements to use, how sync works, and how the whole package compares to the premier Java Feeds API ROME. So, I've downloaded IE7 and started experimenting with the API from C#. I'll be posting more on this topic in the next week or two.

Here are some of the references I've been using to understand the API:

Feeds API docs, specs and whitepapers from Microsoft 

Microsoft employee blogs about the RSS platform

Other blogs about it

Update1: added a couple of new links suggested by Mark Woodman
Update2: added reference to Simple List Extensions
Update3: added link to RSS in Windows Vista presentaton

Tags: topic:[atom], topic:[rss], topic:[ie7], topic:[atom protocol]

Spring weekend

Since the book was supposed to be finished by Friday (more on that later), Andi and her friends left town for a girls beach weekend at Topsail Island. So the boys and I have been fending for ourselves and enjoying a beautiful early spring weekend with temps in the high 70s.

On Friday night we went to dinner early, around 5:30PM, hoping to get an outside table at Mellow Mushroom. The patio was packed with after-workers and college kids, so we settled for an inside table. After eating half a pie and a small hill of black olives, we took a long walk around the Glenwood South area stopping for ice cream at Turkish Delights.


Today, I strapped the bikes on the back of the van and we drove down to Meredith College to ride the NC Museum of Art trail. The kids love the bike bridge. Fortunately, Leo at three is still light enough to ride in the bike seat. We took a ride, crossed the bridge and then walked through some of the outdoor pieces, that's one in the (Treo phone) photo above. After that, we went inside to walk through the European collection. It was a quick walk. Alex and Linus are old enough to appreciate the paintings, but Leo no so much. Then we made our way home. All and all a very nice way to spend a warm spring afternoon.

Ning's Atom protocol based API


The other week, we got the news that the Lucene search engine team chose Atom protocol for it's new Lucene-WS web services interface. Now, Web 2.0 darling Ning.com has joined the Atom protocol club with the Ning Atom API. Is Atom protocol generic enough to become the standard for REST based web services? Via Sam Ruby.

eWeek: Sun's Open-Source Roller Keeps Blogs Rolling


Daryl Taft of eWeek interviewed me a couple of weeks ago and the resulting article Sun's Open-Source Roller Keeps Blogs Rolling was published today. The article covers Roller history, Apache Roller status, RSS and Atom in Action, the Blogapps project of RSS and Atom utilities and even mentions my year and a half honeymoon in Jamaica as a GRASS consultant. I'm very happy to get some more publicity for Roller and for the book, which will be officiallly complete tomorrow, available in e-book form next week and hopefully printed later this month.

« Previous page | Main | Next page »