My personal academic interests in computing are focused on nonlinear dynamics, distributed & software defined networking, information theory and complexity & emergent behaviours. Relatedly, I study both the technological and social aspects of security, encryption, anonymity and privacy and their implementation in web based communications. I am also concerned with social and historical topics within computing, such as as the development of encryption/cryptography, the origins of personal computing and the role of technology in labour dynamics.
I'm also enthusiastic about mathematics, physics and baking bread.
A single page app built out of frustration with the lack of functionality and bad aesthetics of other online timers. Allows multiple timers at once, for more complex cooking tasks. Each timer is customisable so that differentation between them is easy. Hosted at multitimer.io and the code is available on Github.
A custom weather station, built with Arduino and Crate. Measures temperature, humidity, atmospheric pressure and luminosity at 10 minute intervals and pushes to a Crate database for use in weather trend visualisation. Currently in development. Code and hardware schematics are available on Github.
C++, Arduino, Hardware Prototyping, Databases
A website built with Python, using the Flask microframework. The aim of Museumzeit is to display, at a glance, the opening hours of museums/art galleries of interest in a given city. Still under development. Hosted on Heroku and the code is available on Github.
Python, Flask, SQL, HTML5/CSS3, jQuery
A custom minimalist 2 column mobile-friendly wordpress theme, with emerald green accents and an owl. Emphasis on using spacing and typography to present large bodies of text. Degrades gracefully on mobile resolutions so that the right hand column becomes a collapsed accordian menu at the bottom of the page. Developed for Notes & Commentaries and the theme is available on Github.
HTML5/CSS3, Wordpress Theme Development, Responsive Design, jQuery, PHP
At some point in 2015, Twitter removed the feature that lets users set a background image or colour for their main timeline view and replaced it with a solid bright grey. I felt like it was a poor decision from a usability point of view - the bright colour hurt my eyes and didn't provide enough of a contrast with the content around it.
In response, I wrote a chrome extension to allow me to add a background image back into the CSS of the page. It was originally for personal use but grew fairly popular, so I have endevoured to maintain and improve it by adding in user-friendly settings, tiling and solid colour backgrounds. I also improved the extension so that it used Chrome's localStorage API to store the base64 representation of a chosen image which was then injected into the Twitter homepage CSS - in order not to violate Twitter's content security policy.
DISC (Distributed and Secure Communications) was my final year project for my BSc Software Engineering degree. It came about through the intersection of my studies on security, anonymity and peer-to-peer communication.
DISC allowed users to set up peer-to-peer text-based communication networks, encrypted end-to-end and transmitted through the I2P anonymisation network, using I2P's Java Sockets API. Encryption of messages was done between nodes using public key cryptography and Diffie-Hellman key exchange. Encrypted messages were propagated through a DISC network via an encryption layering system inspired by Tor's onion routing scheme.
The development process took place over my final year of University and involved large amounts of self-directed research, planning, prototyping and testing. This also involved writing up a large and detailed report about each of these processes. The final grade for this project was 85% (Grade A).
Since it was a major University project, I cannot make the code or the report open source, though it can be shared on request.
Java, Encryption, Peer-to-Peer Communication, Prototyping-based Software Development
This project started out as a small experiment with pixel colour manipulation in Processing. I found that by averaging the pixel colour in triangular sections across an image, I could produce a simple but interesting looking pixelisation. The result looked a little crystalline.
I then rewrote this experiment from Processing (which is Java based) to Python, and integrated it with the Twitter API using the Tweepy library. The script retrieves all tweets sent to the bot (since a given ID) and goes through each tweet. If the tweet contains an image, it is used as the scripts input and the result is sent back to the original tweeter. This script runs at set intervals as a cron job on my Raspberry Pi.
The code for this project is availiable on Github.
Processing, Python, Image Manipulation, Twitter API
Bug Generator is a Processing sketch that I made to generate interesting patterns for backgrounds. It uses perlin noise for x and y values and mirrors these horizontally. The semi-transparent segments that are drawn with each perlin noise step look vaguely insect-like, hence the name.
I also created a variant of this project that allows for the loading of a music file. It uses the same perlin noise based positoning, but also pulses the background based on beat detection and sets the radius of the segments based on the maximum value in the player's mix buffer. Here is a video example of it working:
Java, Processing, Audio Visualisation
Here are some smaller, miscellaneous projects:
I'm currently interested in collaborating with cool and welcoming open-source projects. Feel free to contact me.