The most notable software that I have written include the following.

dticode (2012–)

Originally started out as a project for doing second-order Total Generalised Variation (TGV2) diffusion tensor field denoising, this is an efficient C implementation of the Chambolle-Pock algorithm for a range of Total Variation (TV), Total Deformation (TD), and TGV2 regularisation (denoising) problems. OpenMP parallelisation and an OpenACC GPU implementation are included.

The code is available in a Mercurial repository on, and additional information can be found in my mathematical publications.

Ion (2000–2009)

Ion is a tiling tabbed X11 window manager designed with keyboard users in mind. It was one of the first of the “new wave" of tiling windowing environments (the other being LarsWM, with quite a different approach), and has since spawned an entire category of tiling window managers for X11— none of which really manage to reproduce the feel and functionality of Ion. Even the Split View in recent incarnations of Apple's OS X finally introduces a type of tiling into a mainstream operating system—but crucially without tabbing, thus offering severely limited usability compared to Ion.

Adapted from the original “Ion manifesto”:

Mouse-based search-and-click interfaces simply are not efficient except for some very specialised tasks and in other cases involve lots of tedious repetitive clicking and searching. While most widget-based graphical user interfaces provide keyboard shortcuts to some operations, these are often sub-optimal – for example, commands can often be superior to cryptic shortcuts – and the general application design still makes them difficult to use from the keyboard. For example, tabbing through dialog entries is difficult if the dialog is laid out in a complex fashion. Most command line and other text mode programs are simply much more usable once you get used to them, but are limited in their output capabilities. (That said, the Trackpoint pointing device, which is basically a part of keyboard, a nub between the G and H keys, mitigates some of the problems with pointing-based interfaces. It is however not found on most computers, and does not help with the hunt-and-peck aspect of the interfaces.)

Similarly it is difficult to navigate through an unorganised stack of application windows, also using the mouse. In most common window managers and operating systems it is usually left for the user to attempt to keep the windows organised instead of the window manager. As a result the user often ends up in a jungle – or at the desk the overlapping window paradigm tries to emulate. Usability simply does not equal reproducing real world paradigms in computer user interfaces.

Ion was written as an experiment on a different kind of window management model. It tries to address the navigation problem by dividing the screen into mutually non-overlapping frames that take up the whole screen. Big displays have so much space that this should be convenient and smaller displays couldn't show more than one window at a time anyway. Given the organised tree based instead of an unorganised coordinate-based frame layout, moving between the frames can be conveniently done from the keyboard. The frames may have multiple clients attached, each indicated by a tab, further increasing the organisational capabilities.

The last version of Ion may be downloaded below, but none of this software is being developed or maintained anymore. I have found more worthwhile hobbies and switched to Windows, disappointed with the “free software” movement that, wallowing in unoriginality, does not seem capable of providing a real alternative to Windows/MacOS (as opposed to a bug-ridden clone complete with a centralised software distribution mechanism).

PWM (1999–2001)

PWM was the predecessor of Ion; the first window manager to introduce tabbing (cf. “tabbed browsing”) at the window manager level. Since then this has become quite a popular organisational feature in window managers.

Riot (2004–2008)

Riot is an Information Organisation Tool, in other words an outliner, modelled after the mutt mail client. Riot is written in the purely functional programming language Haskell.


The attached sofware packages are provided to satisfy your curiosity. Don't ask me how to get them working, I can't help. (Each .asc is a GPG signature for the corresponding tarball.)