Below are all the coding projects I am currently working on or have worked on in the past. Most projects are open source, where permitted.

This page is a few years out of date as I’m happily employed right now. My GitHub account would be the best place to find what I’m working on.

All Aberdeen Uni Akka LaTeX Lumen PHP Python Reddit Redis Redshift Scala Web App WordPress

Trendsetter Notifications

Scala Akka Redshift

WP-Librarian

WordPress PHP

Actypus

Lumen PHP Web App

Pyroon

Reddit Python Web App

Hypervote

Lumen PHP

GhostBird

Python Redis Web App

Chomskey

Web App

GifSound 2

Web App Reddit

WP-Librarian Dev Kit

WordPress PHP

Quicklinks

Aberdeen Uni

University of Aberdeen Beamer Theme

LaTeX Aberdeen Uni

University of Aberdeen Subreddit

Reddit Aberdeen Uni

Trendsetter Notifications

While interning at Shazam I worked on trendsetter notifications. These are push notifications sent to the first users who Shazamed a song which went on to become popular.

I built a data pipeline using Akka Streams and Redshift to:

  • Identify songs which had hit a milestone number of Shazams

  • Identify and profile the trendsetter users behind each song

  • Build customised push notifications from each user's profile.

WP-Librarian

WP-Librarian is an inventory management system built as a WordPress plugin. It allows anyone with a WordPress installation to manage a library of books, DVDs or other physical media. With WP-Librarian a small club or organisation can easily organise their books and showcase their library on their website.

WP-Librarian is my oldest major coding project, started over the summer of 2014. I was unable to find a decent library management system for WordPress (for a uni society) so I made one myself.

Features

  • A library management dashboard that dynamically generates pages from a JSON API

  • Sortable, searchable book, library patron, loan and fine tables using Dynatable

  • A ~50 page wiki documenting the custom WordPress event hooks, post types, releases and other plugin information

Lessons Learned

  • Documentation is an essential part of any sizeable project

  • APIs and hooks allow your application to be extended. If those applications follow suit then even more services can be built on top of them!

  • A thriving community makes developing with a language/framework/etc. considerably easier

Actypus

Actypus is a sports matchmaking service and social network. Think of it as Tinder for sport rather than lovemaking. Actypus generates matches between users based on their preferences so they can play sports together. Based on how users rate the matches the service learns how to generate better future matches. Actypus uses the PHP micro-framework Lumen to create a REST API which is then accessed by the web application front-end.

Actypus was created as a group project for our third year software engineering project, based on an idea of the team leader’s.

Features

  • Custom templating engine to generate webpage components

  • Fully responsive. Scales to smartphone, tablet and desktop

  • Uses Material Design Lite for a slick interface

  • Integrates Google Indentity Toolkit to avoid needing a user accounts system

Lessons Learned

  • Peer code review is essential to ensuring code quality on large projects

  • Never let a developer merge their own branch into dev

  • Kanban is an effective way of managing work provided the process is regularly reviewed and refactored

Pyroon

Redditors have an in-joke, called a switch-a-roo, whereby they choose the more rediculous interpretation of an ambigious statement. Interpreting “6 foot dog” to mean a dog with 6 feet would be a prime example. When someone notices this they say “ah, the old switch-a-roo” (or dog-a-roo in this instance) and link to the last switch-a-roo. This creates a directed graph spanning hundreds of posts and many different communities.

Pyroon was a week long project to build an interactive graph of these “roos”.

Features

  • Parsing logic to pull the roo name out of each comment

  • Fallback to unofficial Reddit archive to recover deleted comments

  • Ability to merge multiple roo graphs (to skip gaps between unrecoverable comments)

  • Interactive roo graph using Cytoscape.js

Lessons Learned

  • Social media data is very messy

  • Some users had created entire “fake” roo graphs, just to rickroll other users

Hypervote

Hypervote is a web based live approval voting system built using the PHP micro-framework Lumen. Users visit the website during an event and can vote to approve, disapprove or remain neutral on the current event’s proceedings. A live graph then shows users how the crowd is reacting to the event.

Hypervote was created to improve my understanding of Lumen. When working on Actypus my efforts were focused on the front-end. Given I planned to use Lumen for 10 Minutes to Meston, a text adventure game, I wanted to work on a small project first to get used to the framework.

GhostBird

GhostBird is a live graph of music being Shazamed (recognised using the Shazam app) around the world. It augments the Shazam stream with genre data using the public Discogs API.

Features

  • GhostBird’s three separate microservices services communate via a Redis cache

  • GhostBird’s live graph (based on Hypervote) uses a web.py API back-end

  • Caches track genres to greatly reduce Discogs API calls

Lessons Learned

  • Redis is a fantastic caching service

  • Pop music is unsurprisingly the most popularly Shazamed genre of music

Chomskey

Chomskey [sic] is a dynamic online keyboard. Chomskey allows users to select a keyboard layout or create their own and then type using that layout.

Chomskey was created so that people could use keyboard layouts not installed on their system, specifically the International Phonetic Alphabet keyboard. While there are existing tools for accessing IPA symbols I couldn’t find any that had the ease of having an actual keyboard layout installed. Chomskey allows you to use your keyboard layouts on any computer, for the linguist on the go.

Features

  • A Beautiful logo homage to the film Zardoz

  • A cascading priority system for deciding what key should be typed. Allows for partial/incomplete keyboard layouts

Lessons Learned

  • Unicode support in JavaScript is less than ideal

GifSound 2

GifSound 2 is a website for combining animated gifs (such as a cat running) with sounds (such as the Chariots of Fire song).

GifSound 2 was an attempt to improve GIFSound.com. I am a big fan of the quirky gifsounds on /r/GifSound but found that buffering media or a slow computer could ruin the joke. Just like a regular joke the timing is everything and so the sound coming in 5 seconds before the gif starts playing can ruin an otherwise funny gifsound. GifSound 2 solves this by pausing and hiding the gifsound until both gif and sound are suitably buffered.

Unfortunately I made the critical mistake of not talking to the major stakeholders first. It turned out that the mods of /r/GifSound were already working on an improved version of GIFSound.com. While GifSound 2 never got to achieve its true potential I learned a lot while making it.

Features

  • Modular media plugins, allowing support for new media types to be added easily

  • Syncs gif and sound start times

  • No server-side code

Lessons Learned

  • Always consult the key stakeholders early on

  • YouTube has a much better embedding API than SoundCloud

WP-Librarian Dev Kit

The WP-Librarian Development Kit is a tool for automatically minifying WP-Librarian’s assets and generating fixtures (testing data) for easier testing. The Dev Kit uses WP-Librarian’s event hooks to add its own pages/tabs to WP-Librarian’s dashboard and settings page. The Development Kit uses the ISBNdb API to generate items in the library using real world books and authors. Library patrons are generated using procedurally generated people from the Database test data generator.

The WP-Librarian Development Kit is one of my older projects.

Features

  • Uses ISBNdb API to test with real books and authors

  • Breaks up fixture generation into multiple stages to avoid PHP timeout

University of Aberdeen Beamer Theme

The University of Aberdeen Beamer Colour Theme adds the university’s branding and colour scheme to beamer slides.

The point of this project was to provide a helpful resource to anyone looking to make appropriately branded UoA teaching material or presentations.

Features

  • Compatible with multiple Beamer themes

  • Colourblind friendly colours

University of Aberdeen Subreddit

The subreddit uses a customised version of the Reddit theme Naut, based on the university’s branding guidelines.

I had noticed that the sole moderator of the community run subreddit wasn’t responding to messages. I requested the subreddit and was given control of it by Reddit’s Administrators. I set up a private subreddit /r/UoACSS to customise Naut with university colours before applying the changes to the public subreddit with an announcement post.

Wolfgun Music Subreddit

The subreddit /r/wolfgunmusic is a fanmade community about the electric musician Wolfgun. I noticed the subreddit’s old CSS was making the subreddit hard to use and thought it might hurt the community’s growth.

I got permission to revamp the sub from the head moderator then created a new style using a heavily modified version of Naut. Once it was ready and approved I pushed it live and asked for feedback from the community.

Features

  • In keeping with dark/sci-fi theme of Wolfgun branding

  • Maintains Reddit’s colour theming for usability