Projects


2023-

tomlz

Lumin is the software that runs this website and is written in Rust. In 2023 I decided I wanted to blog more often but ended up letting myself blunder into a yakshave:

  • I started writing my blog post but I noticed I didn't have a dark theme
  • So I started editing the CSS. It quickly became clear I hadn't written it very well the first time
  • So naturally I decided to redo the CSS entirely using a framework
  • I quickly noticed my code listings only work in light mode, and the highlighter I used didn't support having two different themes
  • So I looked at using other static site generators
At this point I decided I might as well write my own!

Although currently Lumin generates the site and serves it (mostly) statically I am hoping in the future to extend it with full text search and other more dynamic features.

It is available on Github.

Technologies/skills used: Rust, Tokio, Axum


2022-

tomlz

tomlz is a Zig package for parsing TOML files - a commonly used format for configuration files. My goal was to have it be the most well tested Zig TOML library so I wrote my own unit tests, example files I wanted to be able to parse and found some standard-ish tests.

To make sure that the package was able to be used on untrusted input I also ran a fuzzer on it. Fuzzing support is a bit hit and miss in Zig but I managed to get AFL++ working. It found a few crashes which I fixed up.

It is available on Github.

Technologies/skills used: Zig, unit testing, integration testing, AFL++ fuzzing


2014-2022

rs-tiled

rs-tiled is a Rust crate that reads in maps created using the Tiled Map Editor. It can then be used in games (such as the one above). I have passed maintenance of this project on to members of the mapeditor organisation.

It is available on Github.

Technologies used: Rust


2021-

Siliconia

Siliconia is a project to display open source LiDAR data of Britain. This involves parsing ASC files efficiently, displaying them as a 3d model using Vulkan and being able to move around using a first person camera. I also added a simple UI for controlling the camera using imgui.

It is available on Github.

Technologies used: C++, Vulkan


2018-

Timmy

Timmy is a timesheets application I wrote to allow me to track how long I was spending on projects. It was important that I could access it any where as I worked on multiple different devices in different locations, so I decided to write it as a web app. I had some previous experience with React but chose Ember for this project, with a REST backend written in Rust using Rocket (the web framework) and Diesel (the ORM).

Its features include:

  • Creating projects
  • Timing "activities" using a stopwatch
  • Adding previous activities using human dates (eg. "two hours ago")
  • Visualising the information, such as hours spent on each day of the week or each hour of the day, most common tags and a gantt chart (done using Chart.js)
  • User authentication
  • Responsive design

The code is available on Github.

Technologies used: Ember, Rust, Rocket, Diesel, Chart.js, Javascript, CSS, Flexbox


2017

Grubhub

Grubhub is a food sharing website created by me, and four others as part of the Group Project module at Durham University. There were a number of requirements, such as user authentication, food search, displaying the food's location on a map, chat, and a responsive design. We met all these requirements and also suggested extra features which we then implemented. Before we started work we had to produce a project plan including a list of system requirements, a timetable, domain research and implementation details.

I mainly worked on the backend, which was written using CakePHP with a MySQL database, although we all did swap roles as the deadline drew closer and the more advance features needed to be implemented.

The code is available on Gitlab.

Technologies used: CakePHP, MySQL


2012

Imageception

Imageception was created during Young Rewired State 2012 - a hack week using open datafor coders under the age of eighteen. The idea behind Imageception was to create images out of other images - to create a sort of mosaic effect that can be zoomed in on to reveal smaller pictures.

I needed a large bank of pictures so I created a script that took a tag, searched Flickr for it and then downloaded all the Creative Commons pictures with that tag. Another Python script then took a source image, went through each pixel and found the image that had the most similar average colour and used that as the new "pixel".

I then created a small website using Flask that allowed you to upload your own image, choose a set of smaller images and then generate a picture. It also allowed you to click on one of the smaller images to apply the same process to that image, hence Imageception.

The code is available on Github.

Technologies used: Python, Flask, Python Image Library, The Flickr API


2010

StartJapanese!

In secondary school I studied Japanese for a short time. I decided to make an app for Android to aid me learn Hiragana and Katakana. StartJapanese is a basic flashcards app with the two alphabets included as flashcard decks. The app can randomise decks, test the cards you know least first and offers question and revision modes. There is also the ability to add decks.

It is available on the play store. The app was designed in 2011 for small screens, so is a bit dated.

Technologies used: Java, Android, SQL