Projects

I’ve made a whole bunch of projects for fun and to learn in the last few years, including a few from university too. Here’s a list of most of them!

GNSS "War Room"

Current final year project to display GNSS (Global Navigation Satellite System) data on a matrix of displays in QUB’s Cyber Physical Systems Lab.

Primarily focused on providing a Qt desktop UI, however a demo (in testing, may not be up to date) of the web UI is also available! Currently features: 3d globe overlayed 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! The GNSS War Room code is available if you want to see the current progress.

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

weird-fe

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

Written partly to experiment with whatever ideas I found interesting at the time, meaning the frontend is served as a completely static site, and heavily uses web components for rendering the UI. Written almost entirely from scratch to gain more experience working with a limited set of tools and see how things work as low a level is possible for a web app.

Supports:

  • Viewing posts (with attatchments, content warnings, etc)
  • Viewing replies to a post in a threaded view
  • Viewing a user’s posts, bio, etc.
  • Viewing an instance’s federated timeline
  • Emoji reactions, including custom emojis
  • Quote posts
  • Akkoma’s subset of MFM

weird-fe code

Screenshot of a thread of replies to a post

MusicDisplay

The widget on my site’s homepage that displays the music I’m currently listening to, that I also wrote a blog post on. Has 4 parts:

  • A MusicBee plugin written in C# to send the currently playing song to a server (Desktop)

  • A Poweramp plugin/Android app to send the currently playing song to a server (Android)

  • A server written in TypeScript with Bun to receive the currently playing song, and provide an API and/or websocket for the client (Server)

  • A web component written with vanilla JS and CSS to display the currently playing song (Client)

Autumn's back again by northh

Markov Fetch

A script to create a database of posts compatible with the mstdn-ebooks or pleroma-ebooks-based markov bots, that supports instances using secure/authorised fetch. 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.

Authorised-markov-fetch code

Screenshot of code

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.

Catppuccin-MusicBee code and releases

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.

Includes several pre-set situations, including a fictional but nice-looking system (shown), a stable 3-body figure-8 system, a binary star system, and our solar system to scale (with and without moons)

PlanetPhysics code

Driver

A from-scratch application with several parts:

  • A 2D arcade-style driving simulation that feels fun to drive around in
  • 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 end result of which is networks which can drive a car pretty well based on only a handful of sensors (5 distances to the edge of the track at different angles by default)

Driver code

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

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.

Source code not currently available, as it’s related to my final year project, and I need to check that won’t cause any issues.

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

RTWeekend

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

  • Reflections (inc. reflections of reflections) - Refraction (e.g. light passing through glass spheres)
  • Accurate shadows
  • Depth of field
  • Multithreaded for significantly increaded performance

Although performance could significantly be improved by running the processing on the GPU, it was still a very fun project!

Raytracer code

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

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.

You can read why I picked Astro, or look at how this site has changed over time!

Website code

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. I also worked with them to create the inventory and timer systems also used throughout the game.

We worked great as a group, and stuck together for several group projects after this one.

Last Stand Code, or play The Last Stand here!

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 noticable 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.

PowderSim code

MusicBee install script

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

MusicBee install script here

Screenshot of MusicBee running on linux

A2 Project

This application was my A2 coursework project 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

This is still a project I’m very proud of - It’s got a few minor flaws, but it has some features I put a lot of work into and I’m very happy with the end result.

A2 Project Code

Some graphs in the statistics view

CSC1028

My project for the “Compute 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.

CSC1028 code

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 seemingly is possible! And you shouldn’t do it, because again, databases exist.

git-music-log code

A log of some music tracks being played

WebGenJava

The program I wrote to convert markdown to HTML for a previous version of this website. Although there are already existing solutions that offer this sort of functionality (eg pandoc), I wanted something that gave me slightly more control over the result.

WebGenJava code (Please, don’t use it)