Alex Macmillan

MobileWebGames
CV

ZRX and Marvel Move 2023

  • Games
  • Web

Zombies, Run! + Marvel™️ super heroes = ZRX + Marvel Move.

  • google cloud
  • kubernetes
  • node
  • next.js

On returning to the UK from America I rejoined Six to Start to work on two major projects:

  • Internationalisation: We released the Zombies, Run! app and audio content in French, Japanese, Spanish (LATAM), and Korean
  • A rebrand to "ZRX" to accommodate new stories made in partnership with Marvel (and better reflect the app's expanding catalogue of non-zombie "New Adventures")

Supporting a near-total rewrite of the apps, I developed a new content management and delivery system to address the many limitations of the original CMS. The new system improved performance, enabled internationalisation, reduced time spent downloading updates in app, automated and expedited many production tasks, and reduced infrastructure overhead costs.

∆V•OS 2023

  • Games

An asteroid belt mining simulator.

  • godot
  • gdscript
  • glsl

∆V•OS was an evenings-and-weekends project to scratch an itch, that it might be possible to communicate a schematic of objects in a 3D volume using a combination of colour cues and focal depth. I experimented with the idea in the Godot game engine.

This evolved into a simulation of a vessel in an asteroid belt, navigating from asteroid to asteroid to complete mining tasks. Building the simulation required solving for how to fire a rocket engine to rendezvous with a moving object.

Achieving the depth-of-field effect on thousands of asteroids involved extensive shader programming. The game also features a hidden "unscrambling" puzzle mechanic, using a video texture shader input and a lot of maths to calculate UV co-ordinates on a per-asteroid basis. The effect can be discovered in the prototype by carefully rotating the camera view while "dreaming".

Fidget 2015 for Intuary, Inc

  • Mobile
  • Web

An activity idea generator for busy parents.

  • swift
  • python
  • django
  • heroku

As a marketing experiment, in early 2015 Intuary spent a few weeks rapidly building small, free apps for kids and parents. The key was, in not knowing what might succeed, to build quickly and test early.

My app proposal was an ideas box for parents looking for ways to occupy their children. I built the app in two weeks using Swift with help from Intuary's designer Paul De Leon.

Fidget was my first experience using Swift to build an app.

The app's content was managed in a Django CMS. This enabled Intuary's content team to add and update activities, with those changes immediately reflected in the app. It also made Fidget's content accessible through the web browser, and thus indexable by Google.

Train Window Simulator 2015

  • Games

A Unity experiment in procedural terrain generation.

  • unity
  • c#

A weekend of hacking with Unity led to a pleasing result with an approximation of what you might see looking out of a train window.

The experiment makes as much use of the Unity Editor as possible. Terrain 'tiles' are defined using the Unity editor and set into multiple 'layers', which move at different speeds for a simple parallax effect. Tile markers indicate where tiles should join to create a continuous landscape.

The engine generates new tiles "just in time" as the camera moves, so that the landscape appears to go on forever while only a few dozen sprites are present in the game world at once.

The art in the prototype is from Tiny Speck's public domain Glitch art asset dump.

The Sun Stands Still 2014 for The Genesis Foundation

  • Games

A meditation on overcoming the darkest part of the year.

  • unity
  • c#
  • python
  • pillow
  • audition

Naomi Alderman invited me to build a game with her about making it through the darkest time of the year. I took the opportunity to learn the Unity game engine for the project.

Marsh Davies created the art for the game. Ryan Ike composed the music. I wrote the engine, programmed the levels and designed and recorded the game's soundscape, of which I am particularly proud.

You can play The Sun Stands Still online.

Building the game required the extraction and manipulation of hundreds of art assets, which Marsh sent to me in PSD format. I automated the asset pipeline using Python and and the pillow image library.

FarFaria 2014 for Intuary, Inc

  • Mobile
  • Web

Thousands of childrens' books on your iPhone, iPad and Android devices.

  • obj-c
  • java
  • rails
  • mongodb
  • heroku

My first project at Intuary was to port their flagship FarFaria app from iPad to Android, which I accomplished in just six weeks.

The port meant the FarFaria app needed to support phones for the first time. Judicious application of best practices helped me build a lean, reliable and performant app that supported all Android form factors from day 0.

At Intuary I frequently delivered new features by writing server, iOS and Android code. Over time I learned and helped maintain Intuary's entire tech stack, incorporating MongoDB, Heroku, Rails, and readers on iOS, Android, Kindle, Chrome OS and the web.

I rebuilt the FarFaria website with a responsive layout.

I managed my own and others' productivity by building extensive tools to assist with development, including linters, asset management tools, localization tools and extensive build automation.

In recognition of the leading role I took on the engineering team I was promoted from Senior Mobile Engineer to Director of Mobile Engineering in Q3 2015.

The Walk 2013 for Six to Start

  • Mobile
  • Games

A cataclysmic event forces you to walk 500 miles - for real.

  • java
  • opengl

Six to Start created The Walk in collaboration with the United Kingdom National Health Service and Naomi Alderman. The app records the player's activity throughout the day, accumulating distance walked to progress the player along an eventful 500-mile journey.

Alex Primavesi led the project and built the iOS version. I assisted by building the Android version with help from Babu Madhikarmi.

The app's user interface called for animated, drop-shadowed bezier paths on top of large, detailed maps, at 60fps. To achieve this on the modest hardware of the time, I wrote a custom graphics engine directly on top of OpenGL.

Zombies, Run! 2012 for Six to Start

  • Games
  • Mobile
  • Web

A mobile fitness adventure. Millions of players.

  • obj-c
  • cocos2d
  • java
  • python
  • django

Six to Start was just three people and I was the sole developer when we began work on Zombies, Run! with Naomi Alderman, thanks to the unexpected success of our (at the time) record breaking Kickstarter campaign.

Zombies, Run was my first iOS app and first mobile app. Following Season 1's incredible commercial success I rewrote most of the app for Season 2, fixing the rookie mistakes I made the first time around.

I led the expanding technical team at Six to Start as we ported the game to Android, developed the spinoff Zombies, Run! 5K Training and extended the online experience, where runners could review and share their missions.

During Seasons 1 and 2, the app was purchased by millions of players for prices between $4 and $8. Since Season 4 (released after I left the company), Six to Start has transitioned the app to a freemium model, expanding the player base even further.

Mitigating Tidal Fading 2010 for IEEE INFOCOM

  • Academic

A cost-free solution for improving long-distance over-water wifi connections.

  • python
  • excel
  • LaTeX

At Edinburgh University I worked on the Tegola research project, a testbed of long-distance over-water wireless links intended to bring high-speed internet access to remote Scottish islands otherwise neglected by the broadband revolution.

Over-water 802.11 radio signals are subject to a well-known issue of "tidal fading". The portion of the signal that reflects off the water sometimes interferes constructively, and other times destructively, with the signal that travels the direct route, depending on the height of the tide.

The signal frequency is also a factor in calculating the relative phase of the direct and reflected signal. This suggests an opportunity to mitigate the fade effect by manipulating the frequency of the signal — a simple form of cognitive radio.

I presented my findings at IEEE INFOCOM in San Diego in 2010. ResearchGate counts 14 citations of the paper.

XTS and XTS Pro 2008

  • Web

A complete box office solution used to sell over £1M in tickets.

  • python
  • web.py

I spent a lot of time at the Bedlam Theatre while I was at university, initially as a technician, later as Venue Technical Manager.

The box office ran on an aging single user Java application, which was developing bugs and performance issues that nobody knew how to fix.

I wrote a replacement box office system as a Python web application with a clean HTTP API, to enable multiple clients and for the first time, online ticket sales.

The project was a huge success and we began offering ticketing services for other performance societies at the university.

On leaving university I set up Stripe Software Solutions with Nick Morris in order to develop XTS for professional production companies. This enabled us to contribute maintenance patches and new features back to Bedlam Theatre, which continued to run XTS for several years.

With our professional careers flourishing and competing products catching up with our web-friendly solution, Nick and I wound down XTS Pro in 2014.