Knowledge management on your keychain.

Thank goodness for referrers. They bring in the porn spam, sure, but they also bring in wonderful news of the world. How could I have missed this incredible technological acheivement:

Le Danois: A wiki and weblog placed on a USB key, is that possible? The answer seems to be yes. I have put a bundle of Roller weblogger, JSPWiki, HSQLDB (file based database) and Tomcat on the USB key and I am currently testing it.


BlogWave is an interesting .Net based blog app that supports the scheduled generation and publishing of RSS feeds variety of sources, including blogs and NNTP, to a variety of destinations, including blogs, FTP, and plain old directories. It supports plugins so you can implement your own source and destination adapters. Sounds a lot like eSyndication, but for newsfeeds only.

Why I hate Wikis

Jimmo explains why he hates Wikis

Identifying Atom

Mark Pilgrim explains Atom identity issues

The two concerts that I attended were arranged by a friend of mine who was working in Armenia. He keeps up with new releases and concerts by watching music news sites and Pollstar. From half a world away, he had more awareness of local music happenings than I do. I'm just not that hip to the scene.

What I need is something like is a site that is designed to keep you in touch with your favorite music - sort of a personal music portal/aggregator. The spyware-free SonicBreakdown client scans your music collection, uploads that information to the site, and then keeps you informed of nearby concerts, upcoming television appearances, new releases, and music news about the artists in your collection. It does this by using RSS from a variety of music news sites and Web services provided by Amazon, Pollstar, and others. I wish I had signed up earlier, then I would have known that Sonic Youth is playing the Cradle tonight. Now, if only I could subscribe to SonicBreakdown feeds in BlogLines...

The Dead @ Raleigh

The Dead show was a lot of fun. With the addition of guitarists Warren Haynes and Jimmy Herring, new keyboard player Jeff Chimenti, and Branford Marsalis on sax and clarinet the Dead has a very different sound than the Grateful Dead had in the 90's. The band seems more together and more "tight" but is still has the ability to veer off into wildly improvisational trippy jam territory and then bring it all back home again. Overall the music was good and the Dead songs they played were generally excellent, but there were times when the new songs ventured a little too far into the southern rock sound for my tastes. I'm not that big a fan of southern rock, unless you count REM, the B-52s, and The Connells. Overall review: two thumbs up. (see also: photos and set-list).

Masters of slow motion

No blogging or any other productive work for me tonight - I'm going to see 'the Dead.' That's something I haven't done since June 18, 1995. Ok, it is not really the Dead without Jerry, but it is as close as you can get these days (Dark Star Orchestra not withstanding).

Another interesting blog app.

CNet - RSS Gets Down to Business: The RSSCalendar program allows users to convert and publish their calendar data as an RSS feed. Friends, co-workers and customers can subscribe to the calendar feed and automatically receive notices of new appointments, which can be viewed through an RSS reader or imported to a Web-based calendar or Microsoft Outlook.

Geary vs. Raible

Noted Java expert, author, and stand-up comedian David Geary uses his new JRoller blog to answer Matt's Raible's complaints about JSF in point-by-point fashion. See also, the Server Side flame-a-thread on Matt's post. Nice to see some spirited discussion of JSF. BTW, I just bought Geary's new JSF book: Core Java Server Faces.

Blog apps roundup

Some interesting blog apps that I noticed this week:

  • mOlympics: Russell Beattie introduced mOlympics, a blog aggregator that combines Olympics related news stories into a mobile-friendly news portal. Russell's aggregator allows him to set up an "aggregated mobile news site for any topic." Each story is avaliable in regular Web flavor and WML via Googles WML proxy service. Russell wonders about the legality of aggregator content created by others without their permission, and so do I.

  • Simon Brown released an early verison of his Pebble-specific Deskblog product. The screenshots look very nice.

  • Erik Hatcher reviews Mike Clark's new book Pragmatic Automation and mentions that the book includes a blog app that enables Cruise Control to RSS. On first glance, it appears that the blog app is simply a Log4J appender that writes to RSS format.

Hurricane Charley

The storm that devastated Florida and that appeared to be making a run at Raleigh fizzled out, fell apart, and passed right by. We got quite a lot of rain over the last couple of days due to the twin storms and we had to keep an eye on the new last night due to the tornado warnings, but that is the extent of the damage in Raleighwood. We lucked out on this one and so did Jamaica.

Osbald's Roller hacks

Richard Osbaldeston has been doing some Roller macro hacking. His most recent post on the topic explains how to set the title of your Roller weblog to be the same as the title of your most recent weblog entry. We'll have to work on that because it really shouldn't be that hard to do.

Udell on tagging discipline

Web as platform noodling

Kottke on feed processing/filtering/formatting

Personal vs. corporate blogging

Mark Pilgrim explains the difference.

Lance on the perfect weblog system

and gender issues

Finally... Interactive JavaDocs

- Javalobby launches with comments and RSS.

Sealing deals faster... with Roller.

Business Week: Jonathan Schwartz, president and chief operating officer of server maker Sun Microsystems (SUNW ), first suspected that his blog was a success when his salespeople began reporting that customers were reading his posts and sealing deals faster.

Schwartz saw that as irrefutable proof that his blog, started on June 28, was a gold mine.

How Rome works.

I spent some time exploring the new Rome feed parser for Java and trying to understand how it works. Along the way, I put together the following class diagram and notes on the parsing process. I provide some pointers into the Rome 0.3 Javadocs, but, because this summary is based on the latest Rome codebase from CVS you will notice that some class and interface names have changed.

You don't need to know this stuff to use Rome, but it you are interested in internals you might find it interesting.

Notes on the Rome parsing process

Rome is based around an idealized and abstract model of a Newsfeed or "Syndication Feed." Rome can parse any format of Newsfeed, including RSS variants and Atom, into this model. Rome can convert from model representation to any of the same Newfeed output formats.

Internally, Rome defines intermediate object models for specific Newsfeed formats, or "Wire Feed" formats, including both Atom and all RSS variants. For each format, there is a separate JDOM based parser class that parses XML into an intermediate model. Rome provides "converters" to convert between the intermediate Wire Feed models and the idealized Syndication Feed model.

Rome makes no attempt at Pilgrim-style liberal XML parsing. If a Newsfeed is not valid XML, then Rome will fail. Perhaps, as Kevin Burton suggests, parsing errors in Newsfeeds can and should be corrected. Kevin suggests that, when the parse fails, you can correct the problem and parse again. (BTW, I have some sample code that shows how to do this, but it only works with Xerces - Crimsom's SAXParserException does not have reliable error line and column numbers.)

Here is what happens during Rome Newsfeed parsing:

diagram of Rome classes and the parsing process.
  1. Your code calls SyndFeedInput to parse a Newsfeed, for example (see also Using Rome to read a syndication feed):
  2. URL feedUrl = new URL("file:blogging-roller.rss");
    SyndFeedInput input = new SyndFeedInput();
    SyndFeed feed = InputStreamReader(feedUrl.openStream()));
  3. SyndFeedInput delegates to WireFeedInput to do the actual parsing.
  4. WireFeedInput uses a PluginManager of class FeedParsers to pick the right parser to use to parse the feed and then calls that parser to parse the Newsfeed.
  5. The appropriate parser parses the Newsfeed parses the feed, using JDom, into a WireFeed. If the Newsfeed is in an RSS format, the the WireFeed is of class Channel and contains Items, Clouds, and other RSS things from the com.sun.syndication.feed.rss package. Or, on the other hand, if the Newsfeed is in Atom format, then the WireFeed is of class Feed from the com.sun.syndication.atom package. In the end, WireFeedInput returns a WireFeed.
  6. SyndFeedInput uses the returned WireFeedInput to create a SyndFeedImpl. Which implements SyndFeed. SyndFeed is an interface, the root of an abstraction that represents a format independent Newsfeed.
  7. SyndFeedImpl uses a Converter to convert between the format specific WireFeed representation and a format-independent SyndFeed.
  8. SyndFeedInput returns to you a SyndFeed containing the parsed Newsfeed.
Other Rome features

Rome supports Newsfeed extension modules for all formats that also support modules: RSS 1.0, RSS 2.0, and Atom. Standard modules such as Dublic Core and Syndication are supported and you can define your own custom modules too.

Rome also supports Newsfeed output and for each Newsfeed format provides a "generator" class that can take a Syndication Feed model and produce from it Newsfeed XML.

Learning more

I've linked to a number of the Rome 0.3 Tutorials, here is the full list from the Rome Wiki:

  1. Using Rome to read a syndication feed
  2. Using Rome to convert a syndication feed from one type to another
  3. Using Rome to aggregate many syndication feeds into a single one
  4. Using Rome to create and write a feed
  5. Defining a Custom Module bean, parser and generator

Overall, Rome looks really good. It is obvious that a lot of thought has gone into design and a lot of work has been done on implementation (and docs). Rome is well on the way to "ending syndication feed confusion by supporting all of 'em" for us Java heads.

Please leave a comment if I have gotten something wrong.

Hey, I wrote that


I just had a "hey, I wrote that!" moment. I was reading a Windley post about an OSCon 2004 talk about the open source GRASS GIS, I followed a link to the slides, and found my self looking at a screenshot of d.profile, a program I wrote back in 1990. I've been doing this open source stuff for a long time.

« Previous page | Main | Next page »