Projects
Here are a few of the more interesting and complete projects I've worked on in my own time. I can also be found on GitHub.
These project pages are currently works in progress and may be incomplete. Additionally, many of these projects have no build instructions yet, as I did not initially intend them for public consumption. Over time, I intend to fix this issue.
Miscellaneous
- aerend
- A ground-up networked graphical interface system for Linux
- lr0
- An LR(0) parse table generator and general-purpose parser
- Rex
- An interpreted functional programming language
- textc
- A system for compiling text files from raw text and program output
- Convolute
- Classic garbled-text CAPTCHA, just like the good old days
- ImageSegmentor
- Splits images into regions of block colour using k-means clustering
- mpvctl
- A shell script for controlling mpv
- Harmonograph
- A web-based harmonograph for visualising and listening to musical intervals
- Bézier
- Creates interactive and colourful Bézier curves
- fexp
- A file explorer that I wrote to teach myself Java
Networks and communication
3D graphics
- Raytracer
- A Java raytracer, with spheres, relection, refraction, texture mapping, Phong illumination and more
- JThree
- A 3D scanline rasteriser which I made for my A-level Computer Science coursework, and since used in some of my other projects
- Raytracer JS
- A JavaScript raytracer, featuring spheres, tori, reflections and Phong illumination
- Pathtracer
- A naïve Java pathtracer
- Peaks
- Creates a random landscape that you can look around from a bird's eye view using the mouse
Physics simulations
- string
- An interactive elastic string simulation
- Lorenz
- Plots the (often chaotic) Lorenz systems
- Double pendulum
- A configurable double pendulum simulation
- BallDemo
- Simulates a ball rolling inside a paraboloidal bowl
- Rolling
- Simulates a ball rolling inside a configurable track
- Differential equation plotter
- Plots (well-behaved for some definition of that) differential equations using the Forward Euler method