I am a Unix system developer from Cambridge.
I work on BIND9 at
the Internet Systems Consortium (
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, me on social media, and what I look like.
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
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. My main project at ISC is adapting a qp-trie for use in BIND.
regpg safely stores server secrets using gpg, so you can keep them in version control.
Date, Time, and Leap Seconds - a collection of my articles and programs on these topics.
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.
I have a directory containing various ancient unloved 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.
Thanks to Ian Jackson for hosting these pages on chiark.