Software Developer

I have over 8 years commercial software development experience spanning multiple industries and technologies. I would consider myself a polyglot developer but am most specialized in .NET, Node.js & Scala and prefer to work with teams embracing modern agile methodologies, microservice architectures and open source software.


My strong education in mathematics has helped me quickly accelerate my career past the usual CRUD style projects and into security & data science focussed roles. I have deployed machine learning algorithms at scale, re-architectured entire data platforms to meet modern big data demands and deployed full-stack security based on OIDC.

Lockdown Project: £50 Very Slow Movie Player
29 November 2020

A typical movie is played at 24fps, in 16 million colours over a couple of hours. The very slow movie player will play a movie at 30 frames per hour in 2-colours over days, weeks, months. I’m not planning to sit back with my popcorn and actually watch a movie on this thing. Instead, think of it as an attempt to create something interesting enough to be displayed from some very compromised, low power hardware. I think that, mounted in a nice frame you could almost call it art. Imagine the legendary Jack Rabbit Slim scene from Pulp Fiction slowly being revealed over a couple of weeks - the uncomfortable silence literally lasting an entire day. Epic.

All code is available on my Github.

Fixture Based Fluent Unit Testing
09 December 2018

Given my last few posts, you’d be forgiven for thinking this blog has an underlying testing theme. As unintended as it may be, since I’ve written yet another lightweight unit testing framework that works significantly different to my previous specification structured approach, I think it qualifies for another post. given-fixture is intended to support writing really concise but readable tests built from many small, fluent extension methods that configure a fixture for taking care of all that nasty boiler plate. Me and the rest of my team have written hundreds of unit tests with this. We seem to be having great success and continue to refine it regularly. So please take a look, it’s available on GitHub and NuGet.

Fluent Integration Testing on ASP.NET Core 2.1
27 September 2018

Microsoft have a decent, open source integration test library for MVC on ASP.NET Core 2.1, with some pretty in depth documentation. In true post evil Microsoft form, this package provides the bare minimum, lacking opinionated views on structure or choice of testing framework. This is awesome if like me you develop integration tests with a pretty strong opinion. My (current) opinion in this regard is based around a fluent style - I like my tests to be self documenting and built from reusable components. To demonstrate, I have created xunit-fixture-mvc, which can be found on GitHub and NuGet.

Specification Structured Testing
26 February 2018

Unit testing on .NET Core is pretty opinionated and messy. The wide range of frameworks and the lack of a standard structure beyond Arrange, Act, Assert doesn’t help much. My .NET unit testing opinions are well rooted in what I like to call specification structured testing. To support this, I’ve pulled together a library of base classes that provide a standard for writing concise unit tests in a specification structure, whilst leveraging existing frameworks and tooling. You can find it on GitHub and NuGet.

Emulating the GameBoy CPU on .NET
03 December 2017

This is the second part of a series of articles that I’m writing based on my experiences with my GameBoy emulator written in .NET Core; Retro.Net. This time I’ll be having a look at the core of the emulator, which implements a high level form of dynamic recompilation to emulate the Z80 derived GameBoy CPU.

Emulation on .NET
25 November 2017

Please check out my GameBoy emulator written in .NET Core; Retro.Net. Yes, a GameBoy emulator written in .NET Core. Why? Why not. I plan to do a few write-ups about my experience with this project. Firstly: why it was a bad idea.

The Modern Development Paradigm Shift
22 November 2017

When put into context by HTTP’s 25 year lifetime, or the almost 50 years worth of milliseconds added to UNIX time since the epoch, my 5 year software development career is very short. But even during this time I have seen an exponential shift in software development methodologies and technology. This has been unanimously for the better and means that we are no longer reinventing the wheel every day and are instead making cool stuff. Some teams have embraced this, accepted that what they learnt 3 years ago is now obsolete and almost useless, discarded it and moved on. Others, however have simply fallen behind.