Tag Archives: opml

Fun with River2

I decided to install Dave Winer's River2 to supplement my usual feed reading. Now that I can access it via its smart use of Dropbox, it should be good for feeds that I don't feel like I need to see every headline.

One of the things I love about River2 is that it's an app that runs in the OPML Editor, which means that it is endlessly hackable and (apropos to this post) you can fix your own bugs.

So here's a bug report. And fix. (Actually, it could be a workaround for a bug in another application, as I explain below).

  1. What I was doing: From the Tools > River2 > Pages menu, I selected a page to view (any one, it's the same bug no matter which page).
  2. What I expected to happen: I expected the selected page to open in my default web browser, Pale Moon (a Windows-optimized build of Firefox)
  3. What actually happened: Nothing. Not even an error dialog.

I immediately suspected that the problem was the communication between the OPML Editor and the Pale Moon browser. After all, there was a major bug for the longest time in Firefox's DDE implementation that required a workaround.

Bottom line: the OPML Editor's DDE implementation expects that the DDE service name is the same as the name of the executable with the filename suffix removed. So, for Excel, the service name is "excel," and for Firefox it's "firefox." But the service name is determined by the application, and the Pale Moon developers decided that its service name would be "Pale Moon," not "palemoon." A simple patch to system.verbs.builtins.webBrowser.openURL resolves the problem.

if string.lower (id) contains "palemoon" { // 2/11/11; 12:09:06 AM by DJM
 ddeName = "Pale Moon";
  return (webBrowser.callBrowser (ddeName, "WWW_OpenURL", s+",,0,0,,,,"))}

The function webBrowser.callBrowser expects ddeName to be the name of the executable, from which it attempts to remove the ".exe" suffix. Luckily, if the function is passed any string without an ".exe" suffix, it just accepts the passed string as the DDE service name.

Here's the full context:

system.verbs.builtins.webBrowser.openURL

That ",,0,0,,,," nonsense is part of the DDE message that Pale Moon expects:

Pale Moon DDE

XM Podcasts

Ron and FezCool! XM satellite radio is making some of its programming available as free podcasts. Beginning December 11, you can download XM content hosted by Bob Edwards, James Carville, Mike Krzyzewski, Barry Switzer and Opie & Anthony. But what really excites me is XM Unmasked, hosted by the extraordinarily funny Ron Bennington.

[ Expand All | Collapse All ]
  • Error reading XSL file
  • Hmmm... looks like I really need to work on the OPML browser.

    Comments on OPML 2 expanded Attribute

    In response to Dave's proposal to add an expanded attribute to the OPML 2.0 spec, I have the following thoughts.

    1. Typo: "Its optional" should be "It's optional"
    2. As a general matter, I'm not convinced that this belongs in the spec. It seems to me that display properties are the application's problem, not the file format's. Others have complained about the expansionState element for the same reason -- of course, that's a spec legacy and eliminating it would cause breakage so I'm not suggesting eliminating expansionState. But why further muddle the OPML spec? If a particular application needs to store the expansion state on a per node level, then why not create a new namespace attribute (or use an existing one)?
    3. If the expanded attribute is added to the OPML spec, I suppose there will be a forumlaic relationship between it and the expansionState element. In other words, given a certain expansionState state, I will be able to calculate the expanded attribute for each node, and vice versa. Query:
      • If expansionState is given, may a processor ignore the expanded attributes?
      • If expanded attributes are given, may (or must) expansionState be given?
      • Is it a validation error if both expansionState and expanded attributes are given, but they are inconsistent with one another?

    My 2 cents.

    Leash and Feedparser

    Maybe I'll write up something a little more formal in the future. For now, I just want to publish this in case it's useful to someone.

    Les Orchard posted a blurb that indicated that he was looking for a PHP class to perform HTTP requests with conditional GET support. Well, a while ago I was looking for that, too. Because I was working on a replacement for Magpie RSS (see below), I decided to use Snoopy as my HTTP client. I then wrote a brief extension, Leash, to provide a cache-enabled front end to Snoopy. Leash automatically caches the HTTP results, the time of the request, and the Last Modified and Etag HTTP headers. When you request a page you've previously requested, Leash first checks to see if the cached copy is older than the maximum cache age you've specified (or the default of 1 hour), and if the cache is too old, Leash performs a conditional GET. The latest version of Leash (which I bundle with Snoopy) is in my Subversion repository.

    Also in that repository is my replacement for Magpie RSS. I always liked Magpie, but it didn't quite work for me and I also wanted an OPML parser. So I wrote one. Actually, first I wrote a generic PHP XML parser. Then I wrote the OPML parser and Feed parser.

    Sorry, but I currently don't have time for documentation. Or support. That probably makes this of very limited utility to all but the most daring. If you're a PHP junkie, you'll probably be able to peruse the code and get the gist. And here's an example of how I'm using it to help manage my podcasts.

    OPML Workstation Now IntelligentTeams

    I guess I missed it, but at some point in the past few months OPML Workstation relaunched or rebranded itself IntelligentTeams. Maybe it was a soft launch? I don't know. Maybe I'm just not as tuned in anymore.

    IntelligentTeams looks like a LAMP-based OPML Community Server (but I have no idea what the underlying technology is). It's pretty rough around the edges -- a lot of new windows opening, jarring full page refreshes, links to external site to provide certain functionality -- but it's workable. Check out this page from John Palfrey.

    Microsoft Outlook 2007 Supports OPML

    Not that I'll ever use it, but it looks like Microsoft is supporting the use of OPML subscription lists in Outlook 2007. I tried NewsGator's Outlook extension, and I think Outlook is the worst conceivable way to consume the large volume of information I have in my modestly sized subscription list. But at least Microsoft is going to let Outlook users get their subscription lists out of Outlook (and into a better aggregator). They even have a step-by-step guide for exporting your RSS feeds from Outlook.

    Answer the door

    Dave Winer is looking for a developer to work on Share Your OPML.

    If you're interested, I strongly urge you to pick up the baton. I can vouch for what Dave says in his post: he's demanding, but he really invests in the people with whom he works. As long as you're not a prima donna who cannot handle tough questions about your work, Dave has a lot to offer as a teacher and a boss. Actually, boss is a terrible word for the working relationship you can expect to have with Dave. He's an articulate collaborator with an insight into users' wants and needs that I find amazing.

    Opportunity knocks. Answer the door.