a recent diversion

October 30, 2010

Over the last couple of weeks, with the kind sponsorship of Johan Allard of Allard Consulting, I’ve been working on an implementation of some aspects of VMware Tools in the OpenBSD kernel. From 4.9 on, the VMware host will be able to shut down and reboot OpenBSD guests, and it will be notified of the guest’s hostname and primary IPv4 address.
Not having done much kernel development before, and not being much of an OpenBSD user, this was quite a learning experience. I rarely have problems diving into unfamiliar code, but I found it better – cleaner, simpler, easier to understand – than most code bases I’ve dealt with. The developers I dealt with were all friendly, responsive, and willing to offer thoughtful feedback. I’m hoping I’ll find excuses to do more work on OpenBSD in the future.

Something you see from time to time if you read as many bug reports as I do: people acting surprised (or even offended) at suggestions that they might fix a problem or implement a new feature themselves.

Sure, “patches welcome” is pretty weak as a blanket response to any kind of feature request, but when the submitter has a detailed idea of how it might work, and wants to impress upon you how important their request is, I think it’s entirely reasonable to suggest that they could put some effort in themselves.

Even if you’re unfamiliar with the language, you don’t know the libraries, or whatever other obstacles there might be.. you have to start somewhere. The line between “developer” and “non-developer” is a faint one, and by placing yourself on the non-developer side of it, you’re just giving yourself an excuse not to participate.

If you have a clearly stated goal in mind, motivation to achieve it, and guidance from someone with the required skills and knowledge, I think you’re in an excellent position to learn. Most of us get started without one or more of those factors – hacking on personal projects with only equally clueless peers to guide us, or completing uninspiring coursework along with hundreds of classmates.

Even if you can’t finish it yourself, I think it’s a pretty common trait among hackers that we’re much more likely to help someone who helps themselves.

This was a pretty boring release, aside from the previously mentioned cover art search business. It mostly exists so that distributions don’t need to carry around a heap of patches, and to potentially act as a branch point for further 0.12.x releases if it seems like a good idea to have a stable release stream.

Last year, I bought myself a new laptop, after bidding farewell to my stalwart ibook that had served me since 2004. The keyboard layout on the Lenovo X200 is pretty good, with the tiny exception that the F1 key is right about where I want Escape to be. Since I use vim and gnome-terminal, this resulted in lots of unwanted yelp windows all over the place.

After a week or two of this, I figured there had to be a way to disable the F1 = help keyboard binding, not just in a few apps, but everywhere. Devhelp eventually coughed up the answer: a GTK+ module, g_signal_add_emission_hook, and GtkUIManager::actions-changed. Any time a GtkUIManager changes its set of actions, I could dig through them all, find the HelpContents action, and remove its accel path.

Of course, by the time I got around to implementing it, I’d mostly adjusted to the key layout and didn’t really suffer from the problem any more. Nevertheless, here it is. It’s WTFPL licensed, and it contains installation instructions.

After a bit of looking around for alternatives, I decided to dust off some old code I wrote to search last.fm for cover art images. My attempt at complying with the terms of service (which I’ll note that I took much more seriously than other music players have) is to require a last.fm account to be specified in the configuration, and to display the last.fm logo as a tooltip on the resulting images. It’s not great, but I think it’s about the best we can do.

I’m probably going to put out a mostly-bugfix release shortly, then get on with merging the media player sync code (it’s almost ready, I swear), a significant rewrite of the metadata backend (no more apologising for the poor handling of APE tags), switching to libdmapsharing for DAAP support, and some major improvements to the way we do track transfer.

Last weekend I released Rhythmbox 0.12.7. Aside from the usual assortment of bug fixes and platform updates (now almost GSEAL-ready!), we finally added support for artist and album sort-names, thanks to Jamie Nicol, who finished off a rusty old patch I started a while ago; I ripped out the mostly-broken ReplayGain code and replaced it with a new plugin that adds the GStreamer rgvolume and rglimiter elements into the playback pipeline; Adam Zimmerman added support for Magnatune streaming and download accounts and updated the plugin to work with Magnatune’s new purchasing process.

The major disappointment with this release is that cover art searching doesn’t work. The story here is that we switched from Amazon to Discogs due to API changes that we couldn’t deal with, then some time later the Discogs folks started blocking our search requests, along with XBMC and boxee, due to the load they were placing on their search servers. I’m not sure what other options we have. Last.fm would work, and their API is nice and simple, but their terms of service are awkward for desktop applications.

Things that are likely to appear in the next release: working album art search, more ReplayGain stuff, and possibly media player synchronization from Paul Bellamy’s GSoC project last year.