A bit about me

I am a Unix system developer from Cambridge. I work on BIND9 at the Internet Systems Consortium (isc.org).

For many years I worked at the University of Cambridge at first helping to run the central email services, and in later years running the University’s DNS.

I am married to Rachel and we have two children.

I have some small pages about my name, my email address, my pgp keys, and what I look like.

Some of my software

unifdef selectively removes C preprocessor conditionals. My version of this program now shipped by all the BSDs (including Mac OS X) and is used by the Linux kernel build system.

nsdiff creates an nsupdate script from DNS zone file differences. I used it at Cambridge as part of the DNS update process.

nsnotifyd handles DNS NOTIFY messages by running a command. It’s a general-purpose tool for responding quickly to DNS changes. It comes with several example applications.

qp tries are a data structure for associating values with string keys. They are smaller and faster than crit-bit tries.

regpg safely stores server secrets using gpg, so you can keep them in version control.

Uplift from SCCS to git. If you are ever in the unfortunate situation of having to work with an old SCCS repository, I have suite of scripts to convert SCCS to git which you might find helpful. (I have done this twice now.) Contact me for more information.

Conway’s Game of Life I have a description of the evolution of my nice little implementation and various unfinished experiments.

picoro - tiny and bonkers coroutine implementations in “standard” (but dangerous) C. I wrote an accompanying article, coroutines in 20 lines of standard C.

Counting the days - tiny routines for converting Gregorian dates into linear counts, like Julian day numbers or Unix time_t. The date of the count - a small routine for converting linear day counts into Gregorian dates.

FizzBuzz with higher-order cpp macros and ELF linker sets - very DRY solutions to a silly exercise.

I have a directory containing various other bits of code.

I was one of the winners of the 1998/9 International Obfuscated C Code Competition.

Simon Tatham has a description of his really nice mergesort algorithm for linked lists which sorts in place with O(1) overhead and only uses forward links. In October 2005 I wrote another description of the algorithm which I think is easier to understand.

Exim is Turing-equivalent. I wrote a little demo which includes an informal description of how to translate a Turing machine into an Exim configuration, and an example configuration that implements combinator reduction like my IOCCC winner mentioned above.

Thanks to Ian Jackson for hosting these pages on chiark.