work
professional projects
Most recently, I worked for Future Publishing for over five years, primarily supporting an in-house application that decides how to serve ads on the page,
uniting the remote configurations for the page and the ads. We used XState as the base of our application, and integrated with several monitoring services,
including Prometheus for metrics, and Sentry for errors.
I also took the lead on several projects, including a crawler that checks all of our sites are meeting certain criteria of coverage.
We used Temporal to sequence a large number of complex tasks.
In-House Ad Analysis Tool
This is a react-based front-end interface for our ad handling software "Bordeaux".
It allows you to see the remote config, as well as the activity on the page,
reading from the software to display the most important behaviours for confirmation and analysis.
Before that, I worked for Simitive for over a year, making and supporting a variety of web applications for a multitude of large and small clients.
In modern projects, we used the Symfony Framework with Vue.js on the front end,
managed with WebPack and NPM. I also supported the legacy projects, based on Drupal 7.
Unfortunately all of Simitive's software is behind a login page, so no examples can be shown.
Previously, I worked for Strategy Com Inc. for two years, one as a contractor, one as an employee.
While working for Strategy Com I was responsible for the back and front-end functionality of all the websites and other digital projects.
We primarily used the Sonata Project, built on the Symfony Framework for PHP, which uses a detailed MVC setup, along with Composer for third party software.
The Strategy Website
The main difficulty in this project was the design constraints, which needed to work on all devices, have complex interactive elements, and use animation and transitions.
The JS and CSS solutions implemented give a reasonably consistent interaction over varying screen sizes and orientations, as well as using imagery and animation only when beneficial.
personal projects
A miniscule state machine written in JavaScript
Inspired by the short-fallings of XState, this state machine is tiny,
and has the most intuitive syntax possible, with minimal boiler-plate.
This state machine was designed to be controlled from outside,
being able to stop and resume a particular execution with nothing but the context.
It is also fully configurable, including the ability to add new types of node.
A react-based context menu system
A context menu system for React that not only allows for configuration of menus,
but also serves as generic action configuration and handling.
This system allows react events to bubble-up through the layers of contextual information,
and hence can allow for the configuration of behaviours from outside of components.
An indentation based abbreviation of HTML
Hyper Text Mark-up Abbreviation is a way of simplifying HTML and the
common structures we tend to build, such as tabs and forms.
The system relies on indentation instead of closure to nest elements,
and allows liberal, even JSON-like attribute definitions.
A neural net creator and visualiser
A JavaScript based application for training and visualising
standard neural nets. Using a Bootstrap drag-n-drop interface,
you can make complex neural nets with a variety of threshold functions,
and configure new problems for the nets to solve.
You can even watch the net change as it learns.
A HTML based pixel game engine
Instead of constantly redrawing the canvas, this engine uses HTML directly as pixels,
allowing for games to be genuinely interactive from the start (every entity can trigger DOM events), be styled semantically by CSS (including animations),
and to be easily programmed with a simple JavaScript framework.
interests
I enjoy making games and exploratory applications,
and use the web to make these accessible.
I'm always trying to use the most modern APIs,
and take pride in implementing things as robustly as possible,
with the future in mind.
I consider myself a reasonably well rounded person, taking
interest in nature and technology, the arts and the sciences,
in equal measure.
Programming has always been my passion because it combines limitless creativity
with complex problem solving - it keeps my mind active while
being productive.