Doctor Who Series 5 and Blockbusters sheet music

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

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

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.

IPv6 Source Address Selection on Linux

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.

Singleton Java application

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

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

You see both sides. I
see your blinkers. I
am placatory. You
sense a new selfishness.

I am a dove. You
recognize the hawk. You
offer an olive branch. I
feel the thorns.

You bleed. I
see crocodile tears. I
withdraw. You
reel from the impact.

- Roger McGough

Browsing URLs and opening files

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.