my work web page
(including stuff about email, especially in Cambridge University)
my blog (in which I mostly write about things I'm working on)
my Twitter account (to which I feed my link log and a steady diet of retweets)
my link log (wildly weird and wonderful)
My git repositories on chiark and on github;
My git server at work.
I am a Unix system developer from Cambridge. I work at the University of Cambridge Information Services, helping to look after the central DNS and email servers. I am married to Rachel and we have two children.
I have some small pages about my name, my email address, and what I look like.
My PGP key fingerprint is:
pub 4096R/0x72F3EE0B78D9305F 2017-04-04 uid Tony Finch <firstname.lastname@example.org> uid Tony Finch <fanf@FreeBSD.org> uid Tony Finch <email@example.com> uid Tony Finch <firstname.lastname@example.org> uid Tony Finch <email@example.com> sub 4096R/0xE5C9200855317719 2017-04-04
(transition statement from old key)
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. We use it at Cambridge as part of our 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.
Uplift from SCCS to git. If you are ever in the unfortunate situation of having to work with an old SCCS repository, I have a suite of scripts to convert SCCS to git which you might find helpful.
Conway's Game of Life - I have a description of the evolution of my nice little implementation and various unfinished experiments.
picoro - tiny coroutine implementations in pure 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.
$dotat: doc/web/homepage.html,v 1.112 2017/04/04 16:44:14 fanf2 Exp $