Recreational Coding

Posted on Tue 13 February 2007 by alex in misc

I had an itch to scratch yesterday for which I engaged in a little recreational programming. I'm toying with making this a full project because it seems to be a niche not currently filled by any FLOSS.

What I need/want is an intelligent configurable auto-sync daemon for my desktop. I'm thinking a little above your current "plug your iPod in and iTunes auto syncs functionality". Features I would be aiming for would be:

  • Multi-device. A one stop shop where I can configure what happens when I plug in my pen-drive, my music player, my external USB hard-drive.
  • Recognise new hardware devices and offer to manage syncing to them. e.g. "I've just seen you plug in a 512Mb USB Pen, would you like to set-up any auto sync stuff? Yes, Later, Never"
  • Backup functions: normal rsync or call a script for extra flexibility
  • Sync music. The current solutions are sub-optimal as they involve too much manual poking and don't consider small devices well. Features like:
    • Where device storage < collection size allow smart selection, remove old tracks/albums to make space for new tracks for example.
    • Track twiddling. Examples: Chain tracks on dance albums together into one long file to avoid skipping, transcode Ogg's into Mp3's for broken players.
  • Intelligent podcast support. Example: Only keep the latest of any program on the device.

Anyone want to suggest any other usage cases?

Luckily I don't think it will be too hard to prototype something up. Gnome already deals with the ickyness of auto-mounting devices. dbus provides a neat mechanism to watch for these hotplug events. I can probably hack stuff like file tagging into Nautilus using it's script interface. I had a quick play with Python last night and I think it has all the bindings I need. I think it's a small enough project to learn a new language while not being performance critical enough to need a hardcore C implementation.