Projects

Bash · Zsh · CLI

whatdidi - command line history search tool

A command-line tool that searches your shell history, with unique filtering, persistent settings and self-updating.

View details
Dynamic programming Greedy 27 t limit #1 13.9 t 13.1 t 27.0 t 24.2 t #2 13.6 t 13.4 t 27.0 t 23.4 t #3 10.4 t 16.6 t 27.0 t 23.3 t #4 10.9 t 16.1 t 27.0 t 22.7 t
Python · NumPy · tkinter

Granite block allocator

A desktop tool that packs granite blocks into containers, loading each one as close to its weight limit as possible.

View details
CPU datapath schematic: decoder, register file, ALU and flag generation
Digital Logic · RISC Assembly

Custom 16-bit CPU with pipelining and interrupts

A 16-bit RISC-style CPU built up from logic gates, with a 2-stage pipeline, hardware interrupts and hand-written assembly programs.

View details
Bash · macOS · Linux

Custom macOS/Linux setup script

A one-command script that turns a fresh macOS or Ubuntu/Debian machine into a ready-to-use development environment.

View details
Java · Concurrency · JUnit

Multi-threaded game simulation in Java

A multi-threaded card game simulation with a custom cyclic barrier for thread synchronisation, fully unit tested.

View details
t-SNE and PCA plots of handwritten digit clusters
Python · scikit-learn

Fundamentals of Machine Learning

A logistic regression classifier for handwritten digits, exploring PCA, t-SNE and UMAP for dimensionality reduction.

View details
Battleships game board during play
Python · Flask

Web Player vs AI Battleships game

A web-based battleships game: place your ships interactively, then battle an AI opponent.

View details
Lift simulator window showing floors, waiting passengers and lift status
Python · tkinter

Custom lift simulator

A lift simulator with a GUI and customisable parameters such as lift capacity and number of floors.

View details
Arduino · LTspice · Circuits

Electrical Engineering Group Design Project

A remote-controlled rover that detects infrared, radio and magnetic signals, from circuit design to Arduino code.

View details
Memory throughput benchmark: containers near native, virtual machines well below
LaTeX · Operating Systems

Why is Software OS-Specific?

A technical presentation on why applications get tied to one operating system, evaluating translation layers, containers and Electron as cross-platform solutions.

View details