Skip to main content


User login



Hosted by Sargasso Networks
World of Goo Fans!

Doctor Who Series 5 and Blockbusters sheet music

June 28, 2010 by davidc

I was trying to the transcribe the epic music from Doctor Who series 5, but it's been a very long time since I've had any musical training. So I figured I'll put it here in case someone else can do a better job. dr_series_5preview is the source MP3 I was working off - the ID3 tag claims the song is named "Every Star, Every Planet". There's also an attempt at "Quiz Wizard", the old Blockbusters theme music.

Reading the Windows Registry from Java without JNI

June 19, 2009 by davidc

Here is a class that allows you to read the Windows Registry without having to install any JNI library. It is implemented purely using introspection and will therefore compile and run on any platform. It would be possible to extend this to also write to the registry, but I didn't need this functionality. I hesistate to call this "pure Java" as it does make native calls, but it does avoid the need for external dependencies to do so.

Java Preferences using a file as the backing store

June 18, 2009 by davidc

java.util.prefs is great. Since it arrived, I've not had to worry about storing configuration in property files, or where those files should go. It abstracts away any platform differences and stores the preferences in a suitable place for the platform, e.g. in the registry under Windows.

I recently received a request to allow an application to have its configuration stored in a file instead of the registry. The user wanted it to run on any computer from a flash drive, with the configuration moving too. You can easily change the Preferences implementation using the java.util.prefs.PreferencesFactory system property, but the Sun JVM only ships with the platform-specific Preferences implementation, i.e. WindowsPreferences under Windows. I therefore needed to create my own Preferences implementation, which is detailed in this article.

Qmail looping messages around the same server

June 13, 2009 by davidc

I've been investigating why qmail has been looping some messages through the same server. Even though MX records are configured correctly, the headers indicate that it is been sent back to the same server repeatedly until it reaches the hop limit.

IPv6 Source Address Selection on Linux

May 11, 2009 by davidc

Sometimes it is desirable to have the outgoing IPv6 address on an interface selected deterministically. All else being equal, Linux will default to using the latest address added to the interface as the source address. This is generally not what you would expect or want. This article describes how to influence the source address selection under Linux.

RIPE EIX Election

May 7, 2009 by davidc

Andy Davidson is up for election as co-chair of the EIX working group at RIPE and I would invite you to vote for him.

Due to the nature of the RIPE community, it is NOT necessary for you to be a RIPE NCC member in order to vote, merely to be an interested member of the RIPE community. Simply e-mail with your name, organisation and choice of
candidates. Please do so before 10am UK time (11am European time) today. Note that, as it is a STV system, it is not necessary to vote for all three. I recommend voting only for Andy.

The election invitation, along with Andy's address, is below.

Singleton Java application

April 28, 2009 by davidc

Sometimes it is necessary to have a Java application that can only have one open instance, but still is able to handle command-line arguments (for example, requests to open a file). For native applications, this is easy to accomplish using native methods, but with Java the facilities are limited. This article describes a method to accomplish the goal using pure Java, with java.nio locking and local TCP sockets. It also explains how and why this is unnecessary under Mac OS X.

You and I

April 28, 2009 by davidc

I explain quietly. You
hear me shouting. You
try a new tack. I
feel old wounds reopen.

Browsing URLs and opening files

April 22, 2009 by davidc

Java 1.6 added a new class, java.awt.Desktop, that provides handy methods to launch a web browser to a given URL, or open a given file. However these methods are not available under earlier JREs. This article provides a cross-platform surrogate class that uses the Desktop methods where possible, and falls back to platform-dependent methods if not. It uses reflection extensively to avoid linking problems. It also provides additional *AndWarn() methods to show a JOptionPane error message upon failure.

From Dawn to Dusk

April 20, 2009 by davidc

That was it, he knew, the damn job. You went along doing the best you could, and one day you realized that you were wasting time and not doing anything at all. There were so many things you had wanted to do, so many you still wanted, and you saw clearly that you weren't doing any of them and never would, and you grew so frantic thinking about it, you could feel the panic forming inside you. You saw how immense the world was, and you realized that you were so limited it was all going to waste around you, and you felt that you had to do something quick before it was too late. There was the job and the girl. It was the job, of course, writing copy when you should be writing plays, but you couldn't get rid of the job because the job was bread and alcohol, so you got rid of the girl instead. When you added it up later you saw that you had gained nothing but had lost a great deal instead.