Here's a few projects and products I've worked on over the years...

Python Charmers course materials


In my work with Python Charmers I've created a lot of different training materials for various clients. Some topics I have extensively prepared include:

  • Concurrency
    • Concurrency paradigms, Asyncio, Threads, multiprocessing, impact of the GIL.
  • API development
    • API architecture, OpenAPI, documentation
  • Web development
    • Flask, SQLAlchemy, Jinja templates
  • Network and systems engineering
    • DNSpython, Fabric, psutil, sockets
  • Implementation details
    • CPython, memory management
  • Timezones
  • Testing and linting

Python memory management poster

Along with Alysha Iannetta we created a poster about how CPython manages memory that I presented in the PyCon 2019 poster session.

The high resolution file can be found here: Hi res poster

Persephone Automated Transcription tool


Source code:

A tool to automatically transcribe audio to phonetic transcriptions. This tool allows you to train your own speech to phonetic transcription models using your own labelled training data.



GitHub repository: mmap_backed_arrays

I created this library to make it easier to interact with MMAP from Python. This library allows people to use MMAP backing for their Python datatypes with a standard library Array like interface. There are 2 main use cases of low level interactions with the memory that drove the project:

  • Interprocess communications, useful when considering the limitations of concurrency with some Python implementations. (This library provides a way to get shared memory across processes and avoids issues with multiprocessing)
  • Lower level operations with memory that can be needed with embedded devices due to not having higher level interfaces.

See this blog post about getting the mmap array library on PyPi.

MDB translator

I created a microcontroller based translator for the Multidrop Bus protocol (MDB) for connecting vending machines to embedded linux devices. This enabled modern embedded linux devices to connect to vending machines directly.

There were a few interesting challenges that were overcome with this project:

  • The MDB protocol expects responses within 5ms, this response latency can't be guaranteed on the non-real-time embedded linux operating systems we needed to interact with.
  • The MDB protocol is 9 bit but we were using low power 8 bit microcontrollers to reduce manufacturing cost and also power consumption.

I learned a great deal about embedded systems and circuit design through designing the circuit layout and firmware used by this project. I also learned a variety of details about AVR-GCC and how to deal with issues with placing strings in PROGMEM. Because this project was done at work it is not in the public domain.

Programmable quizzes

GitHub repository: Programmable quizzes

A Python framework to let people program quiz materials. This package came about as a response to the frustrations I had with maintaining the multiple different versions of similar assessment materials found when I was teaching Calculus at Melbourne University.

By creating data types that allow you to represent the concepts that are present in quizzes you gain a lot of power. This lets you do things like automate small changes to questions, for example changing numbers/dates/names/etc and bigger things like creating dynamic questions along with their answers in marking sheets.

It also lets you create templates that have the styling you want with your assessment materials and then keeps that separate from the population of the questions. This is a popular technique in the web development world and I thought it was very applicable to this domain as well.

Footbag instructional site

Currently inactive/unmaintained, please contact me if you would like to maintain this!

Site: Footbag encyclopedia

GitHub repository: footbag-db.

An old hobby of mine is footbag, this was an attempt at putting together the first online footbag instructional encyclopedia with ease of finding relevant information as a main priority. The goal was to make it as easy as possible for people to find the information about the techniques they wanted, even if they didn't know the exact names or nicknames of the techniques, all you needed to know was how to describe the components of a technique to search.