Most of this software has been abandoned, or at best is in maintenance and only gets tweaked when something breaks. Consider this page as of historical interest rather than software you necessarily want to use.



BuGLe is a utility I use for debugging OpenGL software development. Since I’m no longer actively doing OpenGL development, I haven’t done much work on it, and it does not support the latest OpenGL versions very well.


MLSGPU is an out-of-core, GPU-accelerated implementation of the moving least-squares method of surface reconstruction. It is intended for expert users in the field of laser range scanning and digital reconstruction. For more details refer to the paper.

GPU computing


CLOGS is a library that provide radix sort, parallel prefix sum and reduction implementations for OpenCL.


OnlineCLC is a minimal tool to use the OpenCL online kernel compiler to compile kernels from the command line. It is most useful for validating the correctness of kernels, although it can also save the binary.


clrunon is a tiny library that sits between an application and the OpenCL runtime and presents only a single chosen device to the application. It is useful when an application provides no mechanism to select the OpenCL device to use but it is necessary to force it to run on a different device to the one it chooses by default.


ssbench is a set of benchmarks for GPU libraries that do sorting and scanning. It is designed to be reasonably easy to extend to similar parallel primitives.

Programming contests


I have contributed heavily to Abacus, which is software for running ACM ICPC-style contests. It is used for the South African regional of the ICPC and for the Standard Bank IT Challenge.


I am a co-author of SMS, which is an evaluation system for IOI-style contests. It was formerly used for the South African Programming Olympiad, but has now been retired. At present there is no website for SMS.



Jinamp is what I use to play music on my computer. It is GUI-less, and aimed at just getting some music playing without having a bunch of windows getting in the way. There is a command-line tool to do a few simple things like go to next track.

Rhythmbox plugins

I have written a few plugins to automate tasks for the UCT Ballroom and Latin Dancing Society:

  • LeftFeet automatically generates a playlist with a chosen mix of dances

  • RBCPF customises the play queue sidebar to show the genre

  • rbtempo allows playback speed to be customised

  • Entropy stops playing when the play queue is empty



Sunsniff runs on my router and sniffs the traffic between my Sunsynk inverter and the cloud server where it sends its telemetry, allowing me to extract my own copy of all the data.


Datagrind is a Valgrind tool that captures all read and write accesses made by a program and records them in a log file. A separate tool (dg_view), can then be used to visually represent the reads and write.

Datagrind is implemented as patches on top of Valgrind. You can read the manual page for it here. It is unfortunately unmaintained and no longer compiles on modern systems.

Offsets extractor

This is a very simple Python script that uses readelf (from binutils) to obtain DWARF information about structure sizes and offsets, and produces it on stdout in a more easily parseable (and also human-readable) form: files/

Quake mod

Years and years ago, in the dawn of time, I wrote a mod for Quake. Yes, the original Quake, in all its software-rendered 320×240 glory. It mainly adds a super-rocket, which does evil things like home in on people, but it also suffered some creeping featurism. It has a README, binary and source.


Here are some patches that I wrote many years ago, but which I no longer use myself: either because the upstream version now works, or because I no longer use the software. They probably no longer apply cleanly, and are only kept here in case someone else is still linking to them.