For pretty much as long as I’ve had a computer, I’ve been involved with some sort of community. I’ve met a lot of really cool people and have been involved in everything from the Amiga demoscene to Linux and Solaris User groups, open source projects like OpenCSW & and I’ve also been running this website for 20 years!

I also love making things in my spare time and have created several projects of my own over the years that I’m particularly proud of. This page highlights some of my favourite things I’ve been working on, from old 8-bit code for computers released in the 1980s to tools for working with Docker containers.

tnfs A community BBS-like site that runs natively on the 8-bit Sinclair Spectrum computer. Offers 16,000+ games, and tons of other features like messages, comments and articles. Featured in The Spectrum Show #107 on YouTube, and you can now access the TNFS site through an emulated ZX Spectrum running in a web browser at!

It’s a sort of “website” for the old ZX Spectrum computer that many of us in the UK grew up with in the 80s. I got my first spectrum when I was around 6-7 years old, complete with cassette recorder and a bunch of old tapes. From then on, I was hooked. I realised even at that age that I loved computers and really wanted to work with them when I grew up. Well, many decades have passed and whilst I still don’t consider myself a “grown up”, I am very lucky to still work in the industry, doing what I love. Only these days it’s more Kubernetes and spinning infrastructure up through CI/CD than it is loading games from cassette tape.

With so much complexity in modern systems, sometimes it’s a lot of fun to go back to simpler times. I’ve written before about how much “soul” these old computers have. My Spectrum and Amiga got me through some rough times and have given me so much enjoyment through the years. I credit those communities with feeding my curiosity and developing my interest in programming, so I thought it would be nice to give something back. It’s been a lot of fun remembering all the Sinclair BASIC hacks and tricks I used 35-odd years ago and an absolute delight to see those first users and messages popping up.


tiller Tiller is a tool that was written in Ruby to build easily-configurable Docker containers.

I wrote it to solve a problem I had with managing non cloud-native software in containers, and figured others might find it useful too. I released it and soon had real users and contributors submitting reports, patches and improvements. At the time of writing, it’s had nearly 250,000 downloads from RubyGems, 320 Github stars, 11 pull requests from other developers merged, and over 2,000 lines of documentation written plus many blog posts.

Oh, and endless confusion because the Helm guys used the “tiller” name for their in-cluster Kubernetes agent in the 2.x days. But I used it first, so I get to be all hipster about it ;)

Anyway, it’s small fry in the terms of open source projects and is pretty much stalled at the moment, but it was a great experience and I learned a lot about Ruby, CI/CD builds, test-driven development (I’m particularly pleased with my CLI-driven test cases and fixtures), and managing a small community of contributors and users. Thanks for all the good times everyone!


setcmd SetCmd is a system utility written in C, originally for the modern PowerPC based AmigaOS 4.x. It lets you quickly and easily switch between different versions of installed software.

I developed it both to solve a problem I had and to accompany a series of blog posts exploring the next-gen AmigaOS. I used it as an experiment to learn how to develop, package and distribute software for AmigaOS, as well as re-learning the C language along the way. I wanted to make the tool as Amiga-native as possible, so this meant things like:

  • Providing an LISP-style Installer script to install the software
  • Documentation in AmigaGuide format
  • Using AmigaOS 4.x SDK functions and standards instead of “portable” C (options parsing via IDOS->ReadArgs instead of just pulling things out of argc, shell output through IDOS->Printf instead of printf in the C standard library, etc.)

I’ve since started porting it over to classic 16/32-bit 68k-based Amigas running OS 3.x, developing across Windows & Visual Studio as well as natively on my A1200 and X5000. I’ve learned so much about the inner workings of AmigaOS in this project, and have even deeper admiration for the sheer beauty of what the Amiga engineers managed to create back in the 1980s. Truly a machine ahead of its time and an absolute joy to develop for.