Projects

In the last few years I’ve made a bunch of projects, both to learn, and for the fun of making things. Here’s some of the most interesting ones!

GNSS "War Room"

Photo showing several windows, including a map of the earth with the locations of satellites overlaid, and other extracted statistics.

Visualising GNSS (Global Navigation Satellite System) data at QUB’s Cyber Physical Systems Lab.

Provides both a native Qt UI, along with a web UI! Features: 3D globe overlaid with satellite locations and trails (web view only), charts of signal to noise ratios for each satellite, statistics derived from the GNSS data, polar grid of satellite locations, etc. Heavily inspired by the 1983 film “WarGames”, where the “War room” part of the name comes from!

Written with Python using PyQt and pyserial, with the web UI using Flask, typescript, and three.js.

MusicDisplay

The widget on my site’s homepage that displays the music I’m currently listening to. Has 4 parts:

  • MusicBee plugin (C#, Desktop)

  • Poweramp plugin (Java, Android)

  • Backend written using Bun to receive the currently playing song, and provide websocket for the client (TypeScript, Server)

  • Web component to display the currently playing song (JavaScript, Client)

Autumn's back again by northh

WOPR Display Fork

A fork of UnexpectedMaker’s WOPR display project, implementing automatically dimming the display at night, displaying GNSS data, fixing flickering issues, improving the display of the clock, and better generation of random codes.

Was a lot of fun to solder together and figure out how development for boards like this works :D

Powered by the ESP32-based TinyS3 board, using C++.

A rectangular 7 segment LED display is sitting on a table, displaying the longitude as -5.94

weird-fe

An experimental attempt to write my own frontend for Akkoma (and anything else supporting the Mastodon API). Features:

  • Viewing replies to a post in a threaded view

  • Viewing a user’s posts, bio, etc.

  • Emoji reactions, including custom emojis

  • Quote posts

  • Akkoma’s subset of MFM

Screenshot of a thread of replies to a post

Catppuccin MusicBee

A theme for the MusicBee music player based on the very nice Catppuccin colour palettes. The project of mine I use most regularly!

Uses a combination of bash, imagemagick, xdotool, wine, and Xvfb (X virtual framebuffer) to automate creating the 112 different variations of the theme for every combination of theme/accent colour.

Screenshot of several versions of the theme, with a range of accent colours and background colours

PlanetPhysics

An n-body planetary gravitational simulator built for fun as a side project.

Uses the less accurate Euler method for integration (this is mostly mitigated by using very small step sizes), but ideally in future it should use something like the Runge-kutta methods for better accuracy.

Driver

A system for creating and improving genetic neural networks. Written entirely from scratch to allow me to better understand how simple networks function, the maths behind them, and how they can perform surprisingly well!

The physics system used is also entirely custom.

Video showing several hundred cars driving around the 2d track, with some colliding into the edges and stopping

Datapack toolkit

An easy-to-use Minecraft worldgen datapack configuration tool, made alongside Bee!

Still early in development, currently only supporting custom configuration screens, but with plenty more planned (editing structure set placement, picking biome definition providers from a set of packs)

UI showing options for editing a Minecraft datapack

Vistars restyled

A restyled version of CERN’s Vistar displays, optimised for use as background screensaver or similar! Making it easier to get cool looking beam data displayed anywhere.

In no way designed to replace the proper version - my only goal is to look cool with it :D

Graphs from the LHC Synchrotron Light Monitor

WOPR

A web app to generate an SVG with the given text using the HP1345A’s font, hosted at https://wopr.mck.is/.

Most of the credit goes to Poul-Henning Kamp for reverse engineering the HP1345A’s character generator - I’ve just strapped it to a web app to make it easier to use for simple use-cases.

A strange game. The only winning move is not to play. How about a nice game of chess?

RTWeekend

CPU raytracer written in C#. Based on the “Ray Tracing in One Weekend” book. Features:

  • Reflections (including reflections of reflections) - Refraction (e.g. light passing through glass spheres)

  • Accurate shadows

  • Depth of field

  • Multithreaded for significantly increased performance

Example output of the program, showing spheres of different sizes and different materials

Markov Fetch

A script to create a database of posts compatible with the mstdn-ebooks or pleroma-ebooks-based markov bots.

Rather than using ActivityPub outboxes and pretending to be an instance, which authorised fetch breaks, this script relies on the bot’s instance’s API to fetch copies of posts.

Screenshot of code

Personal website

The website you’re currently browsing! Built using Astro, which I’m using as a static site generator to combine my typescript, markdown, and vanilla CSS into a working site!

Made to be as lightweight as possible, with the main page being only 40kb, images and everything, having both an FCP and LCP of 0.3s.

A screenshot of the home page of this website

The Last Stand

A text adventure made as a group project for our “Web Technologies” (CSC1030) module.

I designed and wrote the majority of the CSS for the layout, along with the temperature and typewriter systems used by all other group members, along with creating the inventory and timer systems also used throughout the game.

A game in-progess, showing the player several choices for how to proceed, and an image of where they are

SandSim

A small particle/powder toy simulator. Very basic - its flaws are definitely noticeable if you’re looking for them, however it’s still a lot of fun to mess around with, seeing how much just a few simple rules can create!

Will likely return to this one in the future to improve and expand on it, and see how I can increase performance.

MusicBee install script

Screenshot of MusicBee running on linux

A script to automate setting up MusicBee (A Windows application) on linux. I wrote a whole blog post on this!

  • Automatically sets up a wineprefix with the required libraries

  • Downloads and installs the specified version of MusicBee

  • Creates an improved XDG Desktop entry

  • Installs Discordbee and Wine-Discord IPC bridge to allow the song you’re currently listening to to be displayed as a status

A2 Project

This application was my A2 coursework for Software Systems Development, written between 10/11/2020 and 14/03/2021 using C# and WPF.

See the git repo for more details and features.

Some graphs in the statistics view

CSC1028

My project for the “Computer Science Challenges” (CSC1028) module I opted to do at university, providing all sorts of metadata on a given URL. See my blog post for CSC1028 for a lot more info.

UI showing several data sources, including a SimilarWeb rank, DNS lookup, phishing/malware data, earliest archive date, and all subdomains

git-music-log

A project written as a joke to see if it was possible to store a record of what music you’re listening to as a list of git commits. Why? Because what’s more commonly used for storing changes over time than version control software like git? (Databases, but that’s not as funny)

It is possible! And you shouldn’t do it, because again, databases exist.

A log of some music tracks being played