I set myself the goal of finishing the project in one day, I’ve managed to get done enough in that time period, and I’m pretty happy with how it turned out. I came up with several ideas for how to improve it in the process, namely letting you create a bookmark that immediately saved a page for a set duration without further interaction, and integration with twitter.
It’s very minimal in a lot of ways, and that’s sort of the point. It’s actually fairly easy to interface with: you give it data in one end, and when the timeout expires it spits them out as rss. I’m considering spending another day at some point to allow it to push data when the timeout expires, or to provide alternative interfaces to the resulting pages.
The new toy I got for christmas was a novation Launchpad. It’s a Midi controller developed specifically for ableton live, and is able to both generate midi data or trigger program actions.
Since my current computer is running ubuntu, I was planning to use it in that context, but the device uses its own protocol to communicate at the USB level. Luckily, the protocol is not a difficult one, in that it is stateless, and consists entirely of sending specific 3-byte sequences to the device. With that in mind, I started reading through documentation to figure out what it would take to develop a linux driver that was compatible with the protocol.
Two days later I have a reasonably stable kernel module, and a basic midi driver for the launchpad running under linux. I’ve placed the work as a google code project, and it is available for perusal: http://code.google.com/p/launchpadd/
The coding was really interesting, since it was my first experience writing a kernel module. The kernel environment has always scared me and perhaps rightly so, since I did cause several hard crashes while I was developing this code, but overall it was not unpleasant. The device did almost everything I wanted using the skeleton USB driver provided in the kernel source, with the one exception that the included driver did not support polling for events. Since I wanted to allow for non-blocking reads to the device I switched it’s queues so that it would properly hook up with the character device polling interface.
My eventual goal is to use the launchpad as a control device for my computer, showing and allowing for control of things like virtual desktop, volume, email, battery, and clipboards. I’ve already written a couple of these functions, and hope to have it essentially finished by the end of winter break when I go back to school. This has been one of the most fun programming projects I’ve undertaken in a while, since I get the excuse to write in several different contexts, and bring in several of the concepts like sockets and selecting that I got excited by in the fall.