Open Source Projects

I’ve always been a big fan of open source, and always try and contribute where I can. In addition over the years I have created multiple small projects that I give back to the community. Here are the ones I have on GitHub:

libcec-daemon – c++ libcec uinput
A Linux daemon for connecting libcec to uinput. That is, using your TV to control your PC over HDMI!

threadnetperf – c epoll
A highly customisable high performance multi-threaded network benchmarking tool. This tool was able to max out 20Gbit/s of bandwidth using commodity multi-core hardware. This supported research that existing benchmarking tools were unable to.

js-sequence-diagrams – javascript
Draws simple SVG sequence diagrams from textual representation of the diagram.

hessian.js – node.js javascript
Node.js support for the Hessian binary web service protocol written in pure javascript. This was implemented to interface with a legacy Java service. Hessian.js is available from npm.

handy-tools – python
A collection of helpful cli tools written in python. Create histograms from raw data, create heatmaps of performance, or monitor applications with ease.

protoc-gen-php – c++ protobuf php
A PHP Protocol Buffer Generator Plugin for protoc.

nodewii – c++ node.js wii
Bindings for node.js to speak to a Wiimote. This includes a socket.io demo, of the Wiimote controlling a webpage in realtime. Read the blog article, or view my NationJS talk

jambox – c
A Linux implementation of the protocol used to communicate with the Jambox by Jawbone. This was reverse engineered from the Bluetooth protocol the official Windows application used.

libmintchip – c
Unofficial C library for interfacing with MintChips – Unfinished, and mostly an exercise in reverse engineering a protocol.

Connected-component-labelling – javascript
Simple JavaScript library that does connected-component labelling (aka blob extraction). It uses the Algorithm described in the paper “A linear-time component labelling algorithm using contour tracing technique”. This is useful for Computer Vision problems, such as identifying objects in a photo. Originally written to support a JavaScript sudoku solver (that solves directly from a photo of a puzzle).

p2psim – java
A peer-to-peer distributed hash table (DHT) simulator. This was created to support some of my distributed systems research simulating 1000 node networks.

ByteTorrent – c++
A pure C++ implementation of the BitTorrent protocol. This was a project I wrote 11 years ago, and was used by atleast one complete BitTorrent client.

php5-spotify – php c
This is a simple PHP extension that wraps some of the functionality of the C library libspotify.

ndsfs – c fuse
A FUSE application to mount Nintendo DS roms,

us-census-tools – php
A collection of scripts I’ve written to handle US Census data. For example, importing the American Community Survey (ACS) data into various databases, or converting the Census TIGER/Line® Shapefiles so they can easily be displayed on maps.

jPsyScript – java objective-C
A java implementation of PsyScript a simple programming languge for psychologists to run experiments. The original version was written in Objective-C, and I reimplementation in Java so it was portable, and could be run from within a webpage.

As well as creating projects, I have made contributions to at least the following projects:

Linux Kernel, FreeBSD, PHP, Python, Redis, libzip, Click, Chromium, archivemount, NanoHTTPd and more I just don’t remember.