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.
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
Quicklinks
Quicklinks is a list of direct links to useful student resources at the University of Aberdeen.
I carefully created each link to skip the numerous pages/pop-ups you’d usually need to navigate to access the service’s login page. For example: to get to the MyCurriculum login page from the first Google result you need to go through 4 pages. Using Quicklinks you can go directly to the login page.
While there is nothing of technical merit behind Quicklinks it has been described by students as “so f**king useful” on several occasions.
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