I like to believe I'm a software engineer. The languages that I use in my everyday work are primarily C++ and Haskell, although I also end up writing a lot of Python and JavaScript. My current editor of choice is Visual Studio Code, but I still use Emacs on the side for those irreplaceable modes. Linux has almost always been my main operating system both personally and professionally, with some Unix thrown in for variety.

I currently work at Neo Technologies as the Technical Director.

Projects I've worked on

I have had the fortune of working on a wide range of projects in different industries: from film processing to industry automation to property management.

  • We built some accelerated post-processing software during the emergence of digital footage in the film industry, where we produced a suite of effects tools that delivered high-fidelity at real-time speeds.
  • Industrial automation: design and prototyping of control boards and embedded software development. This projected was concerned with fluid control in chemical and waste processing, and included both user interfaces and custom controllers.
  • A tool to assist in the sale of commercial properties. The dominant element of this project was a calculator for commercial property investment which could perform goal-seeking of multiple variables.
  • Automated investment opportunity set optimization for commercial property investors. This involved searching a large set of opportunities, constrained by various parameters such as capital, preferred yields, LTV preferences, rent cover and so on.
  • Contact centre automation, driving two contact centres in the UK. We built an adaptive dialler and campaign solution for the full automation of the contact centres at Inchora Home.
  • A PCI-DSS de-scoping solution.

These projects have led to a fairly wide ranging experience:

  • Lead system design: both small, resource bound embedded systems and medium-scale information systems.
  • Low-level system development, including graphics pipeline optimization, JIT and assembly.
  • I've built a few custom Unix (and later Linux) kernels for custom and proprietary hardware.
  • Electronic design including schematic capture and PCB layout for prototype devices.
  • Network development, mainly with Ethernet networks spanning the physical and link-layer to transport and protocol design.
  • Firmware development for embedded systems: working with microcontrollers and FPGAs.
  • Working with higher-order functional programming languages (mainly Haskell) and some work with automated deduction tools.
  • User interface development in terminal applications and GTK; later moving to web-application development for my sins.