The Kanji Project

Ruby, XSLT

Being a lazy person, I decided to prioritise my study of kanji by studying the most frequently-occurring ones first. To do that, I first had to find out what they were. Here are the results. More…

Programming libraries

HTML Entities


I needed to decode HTML entities in Ruby this morning (the things like ý and so on) and couldn’t find any obvious, simple ways to do it that would handle the wide range of named entities available in HTML 4.01.

In true open source itch-scratching style, I wrote a small library to handle it. More…



The Levenshtein distance is a measure of how similar two strings s and t are, calculated as the number of deletions/insertions/substitutions needed to transform s into t. The greater the distance, the more the strings differ. More…



Metaphone encodes names into a phonetic form
such that similar-sounding names have the same or similar Metaphone encodings. More…


iPlayer Downloader

Ruby, cross-platform

A Ruby library, command-line tool, and GUI application to download programmes from the BBC iPlayer. More…

Japanese Flashcards

C++, Windows 9x/2K/XP

An old Windows flashcard program I wrote specifically for Japanese. At that time, Western versions of Windows could not display Japanese without expensive add-on software, so I rolled my own Japanese rendering subsystem. I don’t maintain the program, but the source code may be interesting or useful. More…

Ruby nopaste utility

Ruby, cross-platform

When discussing programming on IRC, it is common to use a “nopaste” site to exchange code snippets instead of dumping them into the discussion. This over-engineered Ruby program automates this process. More…

Sudoku solver

Ruby, cross-platform

As the name suggests, this is a Sudoku solver written in Ruby. More…

Wait Up

Perl, cross-platform

This program polls a server until it manages to make a connection on the specified port. It’s very simple, but I use it frequently. More…


C, Windows 9x/2K/XP

This is a skeleton Windows application that does absolutely nothing, which is more useful than it sounds. Occasionally, applications demand an application to run—Canon’s scanning toolbox is an example—even when you don’t want to run anything. Solution: use a lightweight program that does nothing at all. More…