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.
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
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)
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.
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.
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)
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)
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.
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!
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!
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.
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.
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
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.
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.
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.
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)