A channel changer for the Bloglines river of news

Blog readers offer two basic navigational styles. There's the two- or three-pane format that's also commonly used in mail clients, and then there's what Dave Winer has called the river of news format, where everything appears in one scrollable view. I favor the latter for the reasons Dave cites:

To me, this more approximates the way I read a print newspaper, actually it's the way I wish I could read a print newspaper -- instead of having to go to the stories, they come to me. This makes it easier for me to use my brain's powerful scanning mechanism.
So I use Bloglines in "river of news" mode, which is invoked by the doLoadAll function that's attached to the n Updated Feeds link. You can make this the default using a simple Greasemonkey script from Mark Pilgrim, by the way. But note that if you do, an instance of Bloglines left running in one browser will consume all unread items, and leave none for another instance running elsewhere.

For a while now, I've been wanting to amp up my ability to scan the river of news in Bloglines. So I wrote a Greasemonkey script that adds a next channel link to the per-channel linkbar, like so:

This lets me park the mouse pointer in one place and snap from channel to channel. When a feed presents one or more items that fit within the page, I can absorb it all in a glance, then click the next channel link to advance. Or I can just scroll when I want to, so I get the best of both worlds.

I've also added a next channel line at the end of each channel's items, so that if a channel presents more than a screenful of stuff, I don't have to go backwards to synch to the next linkbar.

It's quite handy, and as usual I'm delighted to be able to do this kind of thing with Firefox and Greasemonkey. But as I worked through the exercise, I couldn't help imagining more productive ways to achieve the same effects.

For example, my original idea was to use keyboard controls, such as CTRL-n for next channel and META-n for next item. If there's a cross-browser solution that works reliably, and doesn't interfere with other functions -- like Firefox's find-as-you-type -- I'd love to see it. In general, though, writing keystroke handlers for browser-based applications seems to be a black art.

I did come up with a link-based solution for per-item navigation, but it introduced more clutter than seemed warranted. And the DOM gymnastics required were daunting. One obstacle was the inability to use XPath queries in a recursive manner -- for example, query first for channel nodes, and then query within them. I depend on this heavily in libxml; Firefox's XPath implementation seems to only work on the whole document.

When trying to debug an XPath query, I hit another snag. After exhausting every other possibility, I finally thought to tidy up and validate the Bloglines-emitted HTML. It turns out there was a spurious </div> tag in the item section which the browser ignores, but which made the XPath implementation choke. It's possible to fix this on the fly, and I tried that, but Greasemonkey didn't like having the whole page yanked out from underneath it and rewritten.

Discovering which URL to attach the filter to, namely this one:

www.bloglines.com/myblogs_display?all=1

was also a bit of a headscratcher.

Now, of course, Bloglines wasn't designed to facilitate this kind of user customization. I'm thankful that I can do it, and I take none of this for granted. I do wonder, though, about remix-friendly design and the kinds of browser innovations that would facilitate that.


Former URL: http://weblog.infoworld.com/udell/2005/09/26.html#a1308