Maybe they're not as bad as I thought
The iPod situation is now mostly fixed. I was able to figure out how iTunes gets the iPod serial number (and other info) with the help of a USB monitoring tool and Matt Dharm (the usb-storage guy). After that, Aaron used the metric ton of SysInfo samples you guys sent in to get a serial number → model number mapping.
To get info about (recent) device, iTunes requests an xml document from it over USB. I saw this in the USB trace I had, but the data was nowhere on the disk exposed by USB Mass Storage. Puzzling. Not really knowing much about USB MC, I enlisted the help of Matt, who obviously knows a lot more. He informed me that it was requesting the data using a special SCSI INQUIRY command, and I could probably use SG_IO to get it out. I ran sg_inq on my iPod with the right parameters, and out came the xml. Success! After that I wrote a hal method for libipoddevice to pull the info out (since you need to be root), and the rest was just parsing the xml and doing the serial → model mapping.
Even though it was a fairly painful couple of days trying to fix this, I’m pretty happy with the result. The xml from the device includes some really tasty stuff, including information on the image formats for cover art and photos. We are using this data now in ipod-sharp instead of the static table we had before, which will be really great for maintenance. New iPods with previously unknown image formats will Just Work! There is also data on the video formats, which I will soon use to add video support to Dopi
Why I hate Apple (still)
For a while now I’ve been getting reports of people having a strange problem using their iPod with Banshee or Dopi. There is a file on the device that we use to get things like the model number, which tells us what sort of iPod we’re dealing with. That file has been removed or set to 0 length on newer firmwares, and I was just yesterday able to reproduce it after upgrading and restoring my iPod Video. Since it wasn’t stored on the filesystem anymore, I started poking around the firmware parition, and found several copies of it there. Unfortunately it seems to appear in different places depending on the device, so I haven’t yet found a reliable way of getting that stuff out. We’ll eventually figure it out, though, and at that point things should start working again. I have a totally gross solution which runs strings(1) on the partition, but I don’t think it will come to that :)
Regular expressions
An introduction to Regular Expressions. This speech illustrates:
- regular expressions language main rules
- regexps with c++ (with boost library)
- regexps with python
- regexps with perl
- regexps with bash
Up to 10 times more sharing or more!
I released a new version of Tangerine tonight. The biggest change is that you can now share the songs stored in your music player’s collection. So if you add some songs to your library in Banshee, they will automatically be shared by Tangerine. Rhythmbox and Amarok are also supported.

The config dialog allows you to select a music player
iTunes 7
iTunes 7 was announced today, which means more ipod-sharp breakage. It doesn’t look like anything really changed except the database version, so I’ve bumped that and released 0.6.1. The music sharing stuff in iTunes hasn’t changed for ages, so Tangerine still works fine.
YUMier Than Bacardi
When I was in Boston last week, my cohorts and I whipped up something wonderful: a rug interface for yum. We call it ‘rum’, and it has nearly all the features of the original (used with rcd) rug. “zOMG!!! WHY?!!11”, you ask? Well, after using and working on rug/rcd/zmd for the past 3 or 4 years, we simply can’t use anything else. It’s a sickness. So what’s in it for you, the average yum user?
- The world-renowned, award-winning, ‘search’ command
- “tilde” support (rum in foo bar ~baz), which allows you to add and remove packages at the same time
- Easily add/remove/enable/disable repositories. Never edit a config file again!
- Persistent package locks (known as ‘excludes’ in the yum world)
- New commands are easily added. Just drop a python file in the appropriate place, and it is automatically added to the rum interface.
You can download RPMs for FC5-i386, FC6-i386, and SuSE 10.x-i586. For you adventurous build-from-source types, a tarball is here. Enjoy!
blowing up Pluto
hpj: I am in favor of this idea. We could even use a few of the ~10k nuclear weapons!
muthafuckin' tangerines on a muthafuckin' plane^Wwindows
This weekend I spent some more time making Tangerine work on Windows. I built Bonjour from scratch so I could distribute the binaries, and polished up the Tangerine installer as well. I gave it a good deal of testing, but there might be something I missed still. The Windows version includes a plugin for finding songs automatically through Google Desktop.

The preferences window for Tangerine (under Windows)
Update: I just put up a new version which fixes a bunch of issues I found. It also adds the missing features to the config window and hopefully makes it look a little nicer. Updated screenshot above.
Update 2: Another updated version up with more bug fixes. I don’t have a bug tracker set up, but if you guys hit any problems just email me (snorp@snorp.net).
Blogging-Tool and activities in the meantime
Anyone with a good suggestion for a _usable_ blogging tool that also allows adding pictures without clicking hundreds of buttons for each?
This and the fact that some features of the crappy web frontend of Blogger did not work at all were the reasons I did not post recently and why I will make all this here less frequent and shorter.
In the meantime I had a meeting with a black bear in the wilderness. It seems the bear was at least as surprised meeting me there as I was meeting him. Thus we both just looked at each other and after some time of mutual inspection we just continued our way.
Yesterday I was hiking this mountain.