“Feed Your Reader” Firefox Feed Extension

When Firefox added RSS support, I had mixed reactions. On the one hand, I was excited by the boost RSS would receive by being supported in a popular browser. But on the other hand, for obvious reasons I wasn’t wild about how Firefox built RSS into the browser without enabling users to choose an external RSS reader.

So, I was glad when several FeedDemon customers talking about building an extension to enable FeedDemon to take advantage of the new Firefox RSS features.

Michael Koziarski rose to the challenge and created Feed Your Reader, a Firefox extension that enables you to skip the “Live Bookmarks” feature and instead subscribe to a feed in FeedDemon – or any other RSS reader that supports the feed:// protocol. Which means that even though the extension was designed with FeedDemon in mind, it’s not specific to FeedDemon. For example, initial tests show that it also works with NetNewsWire on the Mac.

Once this extension is installed, you’ll see an additional “FYR” icon in Firefox’s status bar right next to the existing RSS icon. Clicking the FYR icon displays a menu of auto-discovered feeds, and clicking one of these feeds will display FeedDemon’s “New Channel” wizard to subscribe to it.

Details on Feed Your Reader are here, and the project page is here. If you’re viewing this in Firefox, the download link to the XPI (extension) is here.

My thanks to Michael for taking the time to create this very useful extension!

Update on “RSS is broken”

Robert Scoble stirred up plenty of discussion (including in my own blog) when he explained that MSDN’s full-text feeds were reduced to excerpts because “RSS is broken“. In his post, Scoble states:

“Bandwidth usage was growing faster than MSDN’s ability to pay for, or keep up with, the bandwidth. Terrabytes of bandwidth were being used up by RSS.”

However, Sara Williams – head of MSDN – posted a clarification in which she says:

“our RSS traffic is neglible compared to all the traffic generated by Windows Update, MSN, downloads, and the rest of microsoft.com. “

In the meantime, full-text posts are back. So…perhaps the RSS sky isn’t falling after all?

Automatic feed unsubscibe

Dave Winer asks about automatic unsubscribing from a feed, and it’s an interesting question. If a feed is no longer updated, how should the publisher tell aggregators to unsubscribe from it? I think the simplest solution is for the server to return HTTP status code 410, as recommended here and here. An aggregator that receives a 410 for a specific feed should then automatically unsubscribe from it.

This will be supported in the next build of FeedDemon, and I believe it’s already supported by several other aggregators. In FeedDemon’s case, the user will be prompted to unsubscribe, since automatically unsubscribing would remove the feed from FeedDemon’s cache – losing the user’s history of that feed’s postings. If the user chooses not to unsubscribe, FeedDemon will disable updating for that feed.

Dynamic RSS Feeds and Bandwidth Consumption

Scoble has been writing about RSS bandwidth concerns lately, so I thought I’d once again post on this topic. I’ve posted before about using conditional HTTP Get (If-Modified-Since) to decrease RSS bandwidth consumption, but here’s a simple recap of how this works:

Almost all aggregators store the date/time that a feed was last updated, and they pass this to the HTTP server via the If-Modified-Since HTTP header the next time they request the feed. If the feed hasn’t changed since that date/time, the server returns an HTTP status code 304 to let the aggregator know the feed hasn’t changed. So, the feed isn’t re-downloaded when it hasn’t changed, resulting in very little unnecessary bandwidth usage.

This sounds simple enough, but there’s a big problem here: many high-traffic RSS feeds are created dynamically through server-side code, and the HTTP server won’t automatically support conditional HTTP get for dynamic feeds. So, all too often the feed is rebuilt each and every time it’s requested – which is obviously a huge waste of both bandwidth and CPU time. One solution is to write your own code to return a 304 based on the If-Modified-Since header, but in many cases it makes more sense to use a static feed that’s rebuilt only when new information needs to be added to it. For example, my FeedDemon FAQ feed is a static RSS file that’s rebuilt whenever I add a new entry to the FeedDemon FAQ. This way, my HTTP server takes care of the If-Modified-Since comparison, and there’s no unnecessary regeneration of the feed.

However, while this works well for feeds that don’t require many updates, it’s not the best approach for feeds that need to be updated more frequently. This is the problem I faced with my support forum feeds, which are created dynamically from information stored in a SQL Server database. Since new forums posts are often made every few minutes, I decided to use server-side code to limit how often aggregators can download the feeds. Almost all aggregators support conditional HTTP get, so I simply check the If-Modified-Since date/time, and if it’s within the last 15 minutes I return a 304 to tell the aggregator the feed hasn’t changed – even if it has. This prevents aggregators from downloading the entire feed more often than once every 15 minutes.

Here’s a snippet of the ASP.NET code I use to do this:

  Dim dtNowUnc As DateTime = DateTime.Now().ToUniversalTime
  Dim sDtModHdr = Request.Headers.Get("If-Modified-Since")
  ' does header contain If-Modified-Since?
  If (sDtModHdr "") And IsDate(sDtModHdr) Then
    ' convert to UNC date
    Dim dtModHdrUnc As DateTime = Convert.ToDateTime(sDtModHdr).ToUniversalTime
    ' if it was within the last 15 minutes, return 304 and exit
    If DateTime.Compare(dtModHdrUnc, dtNowUnc.AddMinutes(-15)) > 0 Then
      Response.StatusCode = 304
      Response.End()
      Exit Sub
    End If
  End If
  ' add Last-modified to header - FeedDemon stores this with cached feed so it's
  ' passed to the server the next time the feed is updated
  Response.AddHeader("Last-modified", dtNowUnc.ToString("r"))

Now, I’ll be the first to admit it’s not the most elegant hack, but so far it has worked very well for me. I considered checking the date/time of the most recent forum post and using that for the If-Modified-Since comparison, but that would’ve required a database hit each time the feed was requested, so I opted for the less precise but more CPU-friendly solution.

Bradbury Software’s RSS Feeds

I recently added a feeds page to my site which lists all of Bradbury Software’s feeds. If you’re using FeedDemon or another aggregator which supports the feed protocol, just click a FEED button to subscribe:

Blog Feeds

[RSS Feed]  FeedDemon Tips
[RSS Feed]  TopStyle Tips
[RSS Feed]  Nick Bradbury’s Blog
[RSS Feed]  Nick Bradbury’s "Dexter" Comic Strip
[RSS Feed]  Comments feed for Nick’s blog

Product FAQs

[RSS Feed]  FeedDemon FAQ
[RSS Feed]  TopStyle FAQ

Official Support Forums

[RSS Feed]  Announcements
[RSS Feed]  FeedDemon Feature Requests
[RSS Feed]  FeedDemon Support
[RSS Feed]  TopStyle Feature Requests
[RSS Feed]  TopStyle Support

User-supported Forums

[RSS Feed]  Web Authoring Forum
[RSS Feed]  Open Discussion

MSN Music Feeds

Microsoft’s MSN Music beta offers RSS feeds. As Dave Winer points out, the Top 100 songs feed has enclosures with excerpts of the songs, which means you can play them by clicking the paperclip icon in FeedDemon’s newspaper.

It’s a shame, though, that these feeds have so many errors in them. Hopefully Microsoft will fix these problems, since their use of malformed dates means FeedDemon won’t show the publication date of each item.