Present Perfect


Picture Gallery
Present Perfect

music system blocked

Filed under: Hacking — Thomas @ 18:41


The last few months, as a result of summer, holidays, and catching up with work backlog has made it impossible to spend any useful time on my music programming. I have the various pieces in halfway-finished state. I should do a first release of the cd ripper I made; the mixer sort-of-works-most-of-the-time but is still command line and does not have play controls; a Django-based rewrite of DAD is pretty much functional up to the point where I can rate tracks and migrate the old DAD database; and I bought the LEGO mindstorms set to make the CD ripper robot.

However, I still had one nagging problem I wasn't sure yet how I would end up dealing with. The problem is conceptually simple.

I want to rate tracks on different computers and have this be synchronized to all of them.

There's two parts to this problem. One is 'what is the same track' ? Linking properly to a database of unique id's would be the best way to do this, and it seems MusicBrainz over the years has evolved to more or less solve that problem. I should still run more tests over my collection, but it seems I can resolve most of the duplicate tracks I own to the same 'song'.

The second problem is a technology problem - how do you synchronize database information between the various machines - my work and home desktop, my laptop, the elisa/##moovida box I have, Kristien's ipod, my N800, and my future car player ?

Well, it seems I haven't been paying attention to databases recently, and I also didn't really look into Stuart's musings about desktop CouchDB. Recently when Marc-André Lureau arrived in Barcelona and we went out for dinner, Zaheer and him upon hearing my sad tale of woe brought up CouchDB again.

All I remembered from a brief look at CouchDB is that it was a schemaless document store written in Erlang. For some reason I completely missed the replication mechanism and conflict resolution it has built-in, which to date has been the closest match to what I think I need for my application.

So I've been reading the CouchDB manual recently, which has given me once again that same warm fuzzy feeling as when I originally got turned on to GStreamer (by reading the excellent manual at the time) and Twisted (same thing, the docs did it for me).

And now I'm torn. Switching to CouchDB might be the right move, but I don't know if it is. I have no idea how I should restructure the applications around it, how I should store the data the best way in CouchDB, and so on. The main reason for wanting to switch would definately be the replication model. Not having SQL or a reasonable way of querying the data (at least as far as I can tell currently, unless all data for a track would be stored in a single document) is a big turnoff.

So I'm wondering what other options are out there, or how people have solved similar problems ? Is CouchDB's replication system a side effect of their design and RESTful API ? Or is that kind of replication possible in a more structured database ? Is it possible to put lipstick on the pig that is traditional SQL to have replication between sometimes-online computers a reality ? Are there other database servers out there that may be a better fit ?

I've been Googling a little, finding things like Cassandra (interestingly also an Apache incubator project like CouchDB), Project Voldemort, Persevere, Hypertable, Redis, Tokyo Cabinet, and probably some more.

I'm not even sure what the right search terms are for the features I want. It seems eventually consistent is one of them (as in - eventually the separate databases on each machine will end up having the same data), although in my case the eventually would come from the machines not always being able to directly communicate by design, not just because of an operating failure.

In the meantime, I am paralyzed with the choice between staying with Django for a while more as I develop some more features (and manually syncing the database between computers) or already porting to something like CouchDB.

I am seriously considering learning CouchDB a bit better, possibly starting with a rewrite of yagtd against a CouchDB database - it seems such an obvious match. I currently manage my yagtd todo.txt file in subversion, and having to commit and update is pure mental friction, not to mention resolving conflicts when I forgot to do the commit/update in the first place.

I would think that a GTD task list would be a perfect match for CouchDB's document model and replication strategy, and would definately correctly solve the generic task list problem.

Enrich my vocabulary and choice of options! Suggest stuff in the comments.

Mew, you crazy Danish band

Filed under: Music — Thomas @ 16:29


Apparently, the first track off Mew's new album is called New Terrain, and when the song is played backwards, it's an entirely different song called Nervous. Obviously this stretches the concept of 'song' a little, but both songs definitely have their own lyrics that you can somewhat make out.

Oh, you crazy Danish indie band! Your raised fist against my new music app will have to be dealt with somehow, but I don't think I will add the concept of 'this track is this section of audiofile, but played backwards' just yet until I can find at least one more case of this kind of craziness!

For now, I will probably make do by reversing the file to a second flac file, and labelling it as an extra bonus track or something.

But still, awesome attempt from a brave band! Luckily I already had tickets for their fall show in Belgium, finally!

View from this week’s office

Filed under: Belgium,Work — Thomas @ 12:19


The phone doesn't take great pictures, but I'm sure you get the idea:


A nice, inspiring view.

Lazy Sunday

Filed under: Belgium,Life — Thomas @ 23:05


Woke up around 10.30 at my parent's place in Gent, after a birthday. Went to Evergem to have a brunch with my godson and his parents. Drove to Beerse, in the Kempen, for the baby shower of Willeke's fourth kid. Gorged myself on candy.

Drove back to Mariakerke for a tango evening at the enchanging Parkkaffee, a place where I used to play with the boy scouts as a kid. Our teachers were there too. Kids recognizing Kristien were all nice and polite and either asked for autographs or came to bring them pictures they made.

Then drove off to the coast to the seaside house my parents bought last year, which they've done up wonderfully, and now has a little garden area with a fishpond, and a bunch of sewage tubes where they grow their herbs, an idea I definitely must steal.

Belgium is so wonderfully tiny, you can get pretty much anywhere in under two hours!

Tomorrow I will work from the first time from this house by the sea, and it looks like everything is ready and working here to do so. Awesome!

Bonus: there's a maintained pool here and because the weather's been so good, they will keep it open next week for one more week than usual.

tao-release package and site update

Filed under: Fedora — Thomas @ 15:33


This morning I wanted to upgrade my laptop to F11 after both my work and home desktops had been upgraded to F11 64-bit a while back.

Since a few releases I've been maintaining and extending my own upgrade guide which makes the process decidedly less painful. In the past I would have my flow interrupted for a few weeks as I ran into yet another thing that wasn't installed or set up. Now I can just put myself in 'machine upgrade' mode and follow the instructions, and adapt them as I go.

Two particular things were annoying this time so I fixed them permanently and crossed off some todo items from my GTD list in the process.

First of all, since the laptop is i386 as opposed to the x86_64 installs I had previously, I hadn't yet rebuilt packages that I maintain for i386. So I started rebuilding them. And then I realized that I shouldn't rebuilt noarch packages, I should fix my packaging symlink script to take those into account too.

So, converted my ugly shell script into a slightly less ugly python script that finally is smart enough to put any noarch rpm into the package repos for all archs.

Then I rebuilt the arch packages, and finally created a tao-release rpm so that enabling my repo can now be a one-click install. Should have done this a long time ago.

As you might expect, no promises on quality in that repo, but I use it myself over a bunch of machines, and drop packages there of projects I work on, or packages I still need to submit to Fedora.

While I was on a roll, I also finally updated those package pages and links, dropped the links to the pre-Fedora-9 packages (though they're all still there if you browse), upgraded from WordPress 2.8.0 to 2.8.4 (still a huge drag).

Anyways, a good start to a Saturday after the worst migraine attack I've ever had last night. My back feels like it's welded shut, but hey, today seems to be an ok day.

Next Page »