I spend a lot of time thinking about coding, computational thinking, and how we teach it. I'm the creator of Erase All Kittens, an open-source game that teaches children aged 8+ to code. As a teacher/facilitator, I've run courses on web programming for beginners, taught business executives to build their own IoT devices, and introduced 7-year-olds to game design.
In my role as Software Engineer, I helped design, develop, and architect a rewrite of Music Glue's e-commerce system using React, Node.js, GraphQL, and Ruby.
I led work on the new platform's theming system which let users customise their website without having to write code. This involved writing RESTful Microservices with Node and Postgres, integrating with a large Ruby on Rails app, and writing a UI with React, Redux, Relay, and Immutable.js.
I also architected the light-weight React/Redux shop front-end used on all Music Glue stores. Keeping within our performance budget here was an interesting challenge, but the result was a very fast, simple system.
One of the more interesting challenges was scale. Music Glue's platform needs to deal with an event like a major band announcing a stadium tour, where hundreds of thousands of tickets might be sold in just a few minutes. I worked to profile and optimise the use of PostgreSQL by our microservices; and designed & implemented a caching strategy using Memcached for our GraphQL API.
- Project Management
As co-founder & CTO, I was responsible for all the technical work on our product Erase All Kittens, a web-based game that teaches children how to code. I started the project in my bedroom, and by the time I left we had introduced hundreds of thousands of children to code.
As well as implementing the engine, I was responsible for most of the in-game UI & UX design, writing all the educational content & curriculum, level & puzzle design, some character & UI animation, and project management.
As a developer at Decoded I worked on a range of internal and external software products. I designed and built a live code editor for Decoded's coding workshops. It was written with a real-time framework called Derby.js, using MongoDB, Redis, and Stylus. Users could open their project on a phone and watch it update live via websockets with Socket.io as they worked.
I also built internal business-management tools in Angular.js and Node.js using a BDD approach. I maintained the existing website and course infrastructure (PHP and MySQL); and wrote a tool in Go that would automatically synchronise company data between a PostgreSQL database and Salesforce.
Projects, Prototypes, Talks
Recently, I've been at ADA National College for Digital Skills, designing and delivering courses on web programming and game design.
Watch on Skills Matter. A short talk on our use of GraphQL at Music Glue. I looked at how we had made error handling an explicit part of our data schema for extra resilience if a back-end service went down.
A prototype exploring a way to visualise and explain computational thinking as transformations of streams of data. I decided not to take this prototype any further, but plan to integrate some of the ideas into a future project. Check out the code on GitHub.
Using Redux—with its focus on immutability—with a physics engine that relied on mutating objects (Matter.js) was an interesting challenge. In the end, I kept all the important data in Redux, synchronising it with the physics engine when the store updated.
This was my first time using a third-party renderer with React: react-pixi, which attempts to let you use React with Pixi.js (my favourite 2D renderer for the browser). The integration wasn't quite as smooth as I'd like, but I learnt a lot from reading the source and I'm excited for the official renderer API that's coming with React Fiber.
Although it was implemented hastily, Oulipo did its job well. The screenplay-inspired syntax was easy for my collaborators to use, and they wrote some great dialogue. Check out the source code and some examples on GitHub.