January 5, 2006

Open Source Frustrations

This is a tale of how a simple attempt to use a piece of open source software descended into a frustrating and unpleasnt experience. Although specific sites are mentioned herein the lessons, if any, are intended to be generic. I have come across other sites pointing to the same absent download.

A recent search for Python blogging clients took me to the Voidspace web site and thence to the Voidspace Firedrop2 page. About two screens down the enthusiastic puffery I found what purported to be a link to Firedrop's home page, but was actually Hansje Novak's open source projects page.

This did contain some material on Firedrop including a number of links to pages showing a download link, which sadly contained not a trace of firedrop2. A search for "Firedrop2 download" revealed that the package was now maintained by the author of the first link, but the only download available was a link to the Subversion repository with the rather off-putting comment "There is a public repository of the bleeding edge version, which I try not to break. ... The version in SVN is slightly more up to date than the released version. New release to follow soon !" No links to the mythical "released version", though.

OK, I've now been poking around for this tool for five minutes and so I guess I should try Firedrop. So I fire up Tortoise (the easy way to interact with Subversion repositories) and find that there's a firedrop2 branch, but nothing I can spot in the trunk (which is where stable versions normally live).

So, I figure I've now invested ten minutes in locating this frigging software, why not take a look at it. I create an empty directory and download the firedrop2 branch contents into it. Oops, no README or anything else that purports to be documentation. So, back to the web page, where I find a section on "Installing" that begins with the useful warning "Currently Firedrop2 doesn't work out of the box. You must follow these instructions. I will address this issue soon." Better than no warning at all, I suppose, and it appears that all that's required is to drop the software into a directory on the Python path, but a little less than satisfactory.

Before I go any further I scan back up the web page I've been using and spot this tip: "Firedrop2 is written in Python and uses Wax for the GUI ...". So I follow the Wax link, end up on Sourceforge and download Wax. This, it appears, uses a standard Python distutils installation, which I can handle quite easily. So, fifteen minutes after I start, I think I'm in a position to install Firedrop2. At least I can import wax from Python.

So now I have to drop Firedrop2's installation into a suitable directory and ... erm ... yes, some documentation would be useful here. Just to make sure everything's kosher it would seem sensible to try and run the tests in Firedrop's test directory (at least there are tests). The first test fails due to the absence of some file. The second fails because I've mistakenly installed the software as Firedrop2 instead of firedrop2. Ho, hum. After renaming the directory the second test succeeds, but the third fails with ValueError: too many values to unpack. This looks like pretty fundamental stuff to go wrong, and I've now spent over twenty minutes poking around in this stuff for zero net gain.

A further ten minutes poking around and I've managed to create a data file that passes the tests. Still ten further minutes and I've got the whole test rig working. However, I have to ask myself: if the tests are so crappy, how good is the software itself, and how do I get it to work without documentation and a properly working test suite. So. let me remind myself how I got here: a recommendation from someone who said:

  • Firedrop2 - The Python Blog Client.

    This is a nice blog tool that runs client side. This means you can maintain your blog offline and migrate your blog to a new server with the minimum of fuss. It has some useful plugins like an emailer and spell checker.

Really? Finally, just to confirm my suspicion that the whole deal is hopelessly broken I go into the main directory and run wxfiredrop.py, which results in the traceback

   C:\Python24\Lib\site-packages\firedrop2>wxfiredrop.py
Traceback (most recent call last):
File "C:\Python24\Lib\site-packages\firedrop2\wxfiredrop.py", line 32, in ?
from firedrop2.mainframe import MainFrame
File "C:\Python24\lib\site-packages\firedrop2\mainframe.py", line 22, in ?
from wax.tools.errordialog import ErrorDialog
ImportError: No module named tools.errordialog

I presume someone, somewhere, is using Firedrop2, but after this experience it isn't going to be me without a solid indication that its current problems have been solved. Unfortunately this kind of thing is all too common in the open source world. I can't estimate the number of times something like this has happened to me, and I can't believe it doesn't happen to other people as well. Sometimes I roll up my sleeves and start to fix the problems, but other times I just mentally shrug my shoulders and write the wasted time off to poor release engineering. In this one case I decided I'd invest a little more time in documenting my frustration, to see whether this is a common occurrence.

I can quite understand how this situation comes about, and as long as individuals are maintaining software on their own dime and in their own time we probably won't be able to do much to address the problems. If we could find some way of avoiding this situation, though, I'd be really happy. Even just regular link checking might help. Perhaps that can be one of my missions for the New Year. I'm going to try a few Python project installs and document my experiences. Hopefully this will do at least a little to improve overall quality control - or at least let some others avoid similar time-wasting experiences.

It goes without saying that if you have a working copy of Firedrop2 I'd be interested in hearing from you!

1 comment:

Steve said...

Well, that was indeed the first problem, assuming we don't mind the tests failing. I will detail my user experiences in a separate post.