Blog
-
Python Web App Code Design at Hypothesis
Slides from a code design workshop for our Python, Pyramid web apps at Hypothesis. -
An Opinionated tox.ini File
Automate all of your Python project's tasks with a succinct tox.ini file. -
Managing Your Project's Virtualenvs with Tox
A comprehensive beginner's introduction to Tox. -
Unattended Upgrades on Ubuntu
How to configure an Ubuntu server to automatically keep itself up to date and send you email notifications. -
PDF Fingerprinting
How to uniquely identify a PDF file, independent of the path or URL the file is currently at, and even after the file has been edited, using PDF.js's "fingerprint" algorithm in JavaScript or Python. -
Python Unit Testing
A series of Python unit testing tutorials covering pytest, factory_boy, mock, and unit vs integrated tests. -
Code Review
How to make code reviews a more pleasant and empowering experience for everyone involved. -
Pyblosxom on Ubuntu with Gunicorn & Nginx
How to set up a Pyblosxom blog on Ubuntu using the Gunicorn WSGI server and Nginx web server. -
git-crypt
How to encrypt the contents of a git repo with git-crypt. -
Background Tasks as Simple Web Services
The design of the broken link checker API for CKAN. -
A Broken Link Checker Plugin for CKAN
Check your CKAN site for broken links and produce a report. -
Functional Core, Imperative Shell
How to write very testable code using the functional core, imperative shell technique. -
The Network as the Database
Store work-in-progress user data in the network, instead of in your database. -
The Open Knowledge Data Packager
An open source web app for creating and publishing tabular data packages. -
A Mozilla Persona Plugin for CKAN
Login to CKAN sites without creating an account, using Mozilla Persona.
Projects
Find Me (2011)
An iPad game for children with autism. App store: pro version, free version. BBC news article, journal paper.
Story Maps (2005–2011)
A story authoring application for children, developed for my PhD thesis.
CKAN Tutorials (2014, archived copies)
Plugin writing, theming, JavaScript and internationalisation tutorials for CKAN. I also wrote the documentation guidelines, API guide and contributing guide, and workshops such as open data licensing.
Edinburgh University Java Screencasts (2008)
Screencasts for the MSc course Introduction to Java Programming: 1. Objects and classes, 2. Understanding class definitions, 3. Object interaction, 4. Grouping objects, 5. More sophisticated behaviour, 6. Well-behaved objects, 7. Designing classes, 8. Improving structure with inheritance, 9. More about inheritance, 10. Further abstraction techniques, 11. Building graphical user interfaces.
PandaSteer (2006)
Computer game characters that follow, chase, flee, and avoid obstacles and collisions. Also PandaZUI, a zoomable user-interface framework.
Losser (2014)
A little JSON to CSV converter.
Dead or Alive (2014)
Check websites for broken links.
Data Packager (2014)
A web app for making tabular data packages.
OAuth 2.0 Support for CKAN (2014)
Login to CKAN sites using OAuth 2.0.
Mozilla Persona Support for CKAN (2014)
Login to CKAN sites using Mozilla Persona.
Snapshotter (2011–present)
Very easy incremental snapshot backups.
Terminal Velocity (2012)
A fast note-taking app for the UNIX terminal.
Forest (circa 2010, archived copy)
Website for Forest, a free arts and events space masquerading as a vegetarian café.
PyBlosxom (2005–2015)
My PyBlosxom plugins and themes: mtimecache, drafts, HTML5 theme, tumblelog, metadate, markdown, Vessel and Scribbish.
Ottawa No Sweat Coalition (circa 2005, archived copy)
Website for Ottawa No Sweat Coalition.
Infoseed (circa 2007, archived copy)
Website for Infoseed hacklab.
DWM (2015)
My DWM config.
Navigating 3D Environments (2004, PDF)
A computer game character that navigates complex 3D environments (Quake III levels), created for my undergraduate dissertation.