Coding Portfolio

My GitHub Profile
Languages
- C/C++
- Python
- JavaScript (including jQuery)
- Matlab
- Common Lisp
- PureData and MaxMSP
- HTML/CSS
Web Projects
Here are some small-scale/in-browser projects that I have worked on. The source code for all of these projects, and this website, are available to view on my GitHub page.
JavaScript Etch-a-Sketch
Below you will find an piece I worked on as part of the Odin Project, in order to practice my JavaScript and jQuery skills.
The canvas is made up of HTML divs which are generated by the jQuery code, which each one changing opacity when it detects a mouse hover. This allows you to draw and shade like a pencil/etch-a-sketch hybrid.
The source code for this project can be found here.
Web Audio API Synth
Below you will find a monophonic synthesiser that can be played using your computer keyboard (unfortunately it will not work if you are using a mobile device, and due to the use of the Web Audio API, browser support is not perfect), with the keys Z to M mapped to the octave C4 to B5 and the keys Q to I mapped to the octave C5 to C6.
Master Volume
Chorus
Rate
Depth
Delay
Feedback
Output
Delay
Time
Feedback
Output
Vibrato
Rate
Depth
Filter
Frequency
Tremolo
Rate
Depth
Monophonic Web Audio Synth
All of the audio you can hear is being synthesised using the Web Audio API - there are no samples being used here. The controls are generated using the jQuery UI and jQuery is used to hold everything toether.
The source code for this project can be found here.
Project Euler

While there is a little debate as to whether the terms of Project Euler (don't share your solutions) mean you can share source code or not, I have decided to take a better safe than sorry approach and not publish anything. However, you can see my progress above.
Other Projects
Here are some details on other projects that I have worked on. These are a little harder to demonstrate inside a web-page, so the discussion will have to do more of the work. While some of the code discussed here may be published on GitHub, cleaning everything up is still very much a work in progress.
Guitar DSP
My final year project at university focused on integrated software/hardware development for music performance. As a guitarist it seemed natural that this should take the form of a guitar pedal, which can be heard below. The ultimate idea of the pedal was to create an open device that could be reprogrammed and augmented to meet the end user’s requirements using a flexible framework.
These short examples were all recorded straight out of the pedal into an interface, without an amplifier, as one was not available at the time, hence the slightly harsh and clinical sound. All of the effects work in real-time using PureData running on a Raspberry Pi for DSP. The pedal itself consisted of an Arduino Mega (a picture of an early prototype using an Uno can be seen at the top of the page), the Pi, a screen, five rotary encoders and three footswitches.
The Arduino read information from five rotary encoders and two footswitches, sent that information over a serial bus, read information back from a serial bus, and finally displayed things like delay times on an LCD screen. This bespoke hardware ran using Processing code on the Arduino, which was enhanced using some C++ libraries. While the Arduino code itself is far from perfect, it was capable of running well enough for the project, and I am currently working on a full rewrite to improve performance, readability and general code quality.
The Raspberry Pi ran the CCRMA Satellite OS, which allowed it to devote nearly all of its power to PureData. The information to and from the Arduino came directly from PureData, which ran a framework designed to allow any five effects to run together. Preset combinations could be saved and accessed at a later date, and additional effects could replace already existing ones, or even be added as new options.
The project required me to work with multiple languages and interface between them, as well as developing an architecture to allow new effects to be easily ported into my system. I also had to work through bugs on bespoke hardware, which required patience and problem solving skills.