Here, I've collected some of the projects I've worked on over my time as a programmer. Not all pieces are production-quality, but all should hopefully demonstrate some useful or interesting thing I've learnt!
To keep better track of my finances, I built a serverless budget tracker using Python on AWS Lambda functions, called when I spend money or request information about my spending. Data is stored in a DynamoDB table and optionally written to a Google Sheets document.
As part of my interview process for a fintech company in London, I wrote an idiomatic web crawler in Python. It produces a dictionary of asset links, allows for a maximum recursion depth and detects cycles.
In the spirit of py.test, I wrote a set of testing tools complete with mocking, patching and batching test cases. Although complex monkey-patching and introspection lie underneath, the developer experience is surprisingly simple.
After learning about C++'s excellent Enum type, I decided to improve on Python's own lacklustre enum syntax. This project is for toy purposes only, but includes some deep metaprogramming and specialised language features.
Tinybuf is an ongoing project inspired by Google's ProtoBuf and Cap'n Proto. When complete, it will be a highly efficient serialisation protocol for structured data into binary format.
A lot of projects I undertake in Python don't make it onto GitHub as production-ready code, but they might well merit a blog post! Over the years I've written about composable partial functions, serverless architecture, natural language processing for text games, language features like string formatting and design patterns.
MacOS Security Modal
One day, a particular Slack notification kept appearing. I started typing in my password without even thinking about it. This made me wonder – what would happen if the notification wasn't really from Slack at all?
This website, which should be nice and responsive, uses CSS grid and flexbox as well as a bunch of responsive typography to (hopefully!) look good on all screen sizes, from tiny mobile devices to ultrawide desktops.
Working with Jenkins made me crave a simpler, prettier interface for continuous integration systems. This design was my attempt at a design for a well-integrated, easy-to-understand CI system!
A simple one: flags of the world, each created using only one (empty!) div. It's a fun puzzle, especially with more complicated flags!
In the same vein as the flags, this was an attempt to draw a container ship using CSS with as little HTML as possible!
While learning about best practices in typography, I found it useful to copy or create examples from books. These took the form of "font showcases", which displayed a font as well as possible, with attention to line spacing, rendering techniques and font size for screens.
Using CSS keyframe-based animation combined with 3d transformations gives a great retro-looking result!
Lock & Key
Inspired by Batman unlocking the BatCave with a piano, I made an authentication system using a MIDI keyboard at a hackathon. Later, I extended the system so it really did authenticate with a backend and exchange secret keys.
A more full-featured version the Mini Metro style animations on this website, MetroJS animates a London Underground tube map (rendered onto an HTML5 canvas) to show trains moving between stations.
Although I've now left jQuery behind in favour of frontend frameworks like Vue and Elm, I was very happy with this choice-based browser game I built using jQuery called 5:28.
For my first time using Three.JS for WebGL, I decided to play with the shadow map and use multiple directional light sources for a realistically lighted – if minimal – scene.
This Cube Wave is simpler than it looks – each bar's height is governed by the current time as well as its distance from the center. Given these two variables and some Processing/P5 rendering, we get this cool effect!
As part of my budget tracker, I built a web dashboard in Elm with a burndown chart and a table with my top 5 spending categories.
Also part of the budget tracker, I built a searchable, sortable table using Elm. The realtime updates are highly performant even in tables of thousands of rows.
Elm's inbuilt support for WebSockets make it a perfect candidate for building highly performant webapps which can update in realtime. This simple chat app demonstrates how easy it is to use websockets in Elm.
In order to render deep Mandelbrot zoom videos of high resolution, I wrote a C program to generate alternating frames in parallel on all 8 cores of my machine, then used some maths and bash scripting to stitch them together into an HD video.
While learning C for the first time, I wrote a simple implementation of a hashtable. I then used a Jupyter notebook to analyse its performance and detect its bottlenecks – which turn out to be rather obvious!