Alan Lawrey


I'm a software developer from Melbourne Australia. I've previously worked at migenius, Rome2rio and Metro Trains Melbourne.

You can contact me via email or find me on Twitter or LinkedIn.

What I enjoy working on:

Previous Work

Metro Trains Melbourne SEP 2018 - AUG 2019

Metro Trains Melbourne needed a tool for monitoring real time voltages and currents for testing their new trains.

This work combined hardware installed in the field (created by my co-worker) and a server with a front end (created by me).

The hardware was made up of an industrial PC with a USB oscilloscope and 4G modem.

I worked on:

  • Creating a backend in .Net Core that received the data.
  • Creating the frontend for use on a PC or mobile, built using Typescript and React.
  • Handling displaying live data of up to 120k samples on a mobile device.
  • Storing, retrieving and processes all the data, which ranged between 40k samples per second to 120k samples per second.
  • Utilising various Amazon Web Services such as EC2 to host the server, RDS to host the database for users and config, S3 for long term storage of raw data and SQS as a backup connection should the server go down.

Rome2rio OCT 2014 - JUL 2018

Rome2rio is a travel search website used for finding and comparing different routes from anywhere in the world. It specialised in ground transport.

I worked on:

  • Adding schedule information and the ability to buy tickets directly through Rome2rio for UK trains.
  • Internal tools for modifying their data through a web UI (not pictured).
  • Expanding upon and improved the infrastructure of their tooling.
  • For two years I mentored someone which resulted in them being able to shift from a non-dev role into a junior software dev.

migenius and mental images JAN 2008 - OCT 2014

mental images are a company that specialises in photographic rendering using ray and path tracing software. After 3 years the Melbourne office split off to form the company migenius which continued to do the same work and allowed for working on stand alone products. Bloom Unit was their first product and combined the ease of using SketchUp's 3d editing with real time photographic images.
I worked on:

  • The interface between SketchUp (ruby) and Bloom Unit (C++) for keeping the 3d scene in sync.
  • The UI (Internet Explorer 6) for adjusting the render settings and configuring the materials.

We also worked on other projects for various clients:

  • Integrating Bloom Unit into Autodesk Revit for Oldcastle.
  • Web visualisation projects for Obayashi Corporation and Shimizu Corporation.
  • A product visualiser for Takemoto products. Bottle 3d Visualiser
  • A product visualiser for Christ Jewellery. Ring Configurator

Personal Projects

Pirate blockbreak clone Link

A one week project to build something from scratch and release it somewhere. Fairly basic blockbreak clone with a bit of a twist.

Main features:

  • Shoot cannonballs to break blocks, but don't let them hit you.
  • Stores high score locally.
  • Optional Slack support for posting scores.
  • Cross platform for Linux, OSX and Windows.

LOSS (Lua Operating SyStem) Github Link

A project to create an operating system that's built around using Lua with the intention of being light weight. The main use case was for a game where you may want many simple in-game operating systems that look like a *NIX shell but without actually running a VM.

Main features:

  • A modified version of the Lua VM that supports running multiple Lua States in the same thread using Boost Coroutines
  • A virtual file system the supports mounting different types of file systems.
  • A RAMFS for virtual files (such as /dev and /proc)
  • A persistent file system for long term storage.
  • A Fuse implementation that allows for mounting the persistent hard drives and modifying them outside of the VM.

LOSS v0 Github Link

An earlier attempt at creating an OS for use in a game, specifically for a space game. This was a relatively naive approach that used NLua which is a C# implementation of Lua for use in Unity.

Main features:

  • Basic shell for running Lua.
  • A simple VT100 terminal emulator that used built in Unity components for text rendering.
  • A very simple file system, however it did not support mounting.

Voxel Engine Github Link

A small voxel engine aim at being able to create and edit levels entirely within Unity. It performed well enough for the scale of the levels I wanted to created, however getting the editor tools to behave the way I wanted proved to be the most tricky aspect.

Main features:

  • Chunked editing and loading. Maps are stored as individual binary files which is optimised for updating chunks during editing.
  • Multiple different shapes beyond a cube such as ramps and different corners to allow for smoother terrain.
  • Unity editing support for creating levels without needing additional tools.

RPG Game Github Link

A topdown 2D RPG game engine written in C++ built using minimal dependencies for the purpose of learning.

This is a fairly old project now, but it does represent a lot of learning in terms of C++, integrating a scripting language, handling modding, dealing with complex UI and handling an audio system.

Main features:

  • Tile based 2D graphics with a tile overlapping system for blending between tiles.
  • Sound system that supports streaming OGG and WAV files.
  • Lua Bindings for controlling just about every aspect of the game. From how a new game is created and loaded to how a door should behave when interacted with.
  • Maps are created through Lua and has a mechanism for determining if the map is being played new or loaded from disk, allowing for map scripts to upgrade old save files.
  • A dialogue system based on The Elder Scrolls: Morrowind with topics, keywords and actions bound to those keywords.
  • HTML documentation taken from the C++ comments using a Python script.
  • In game text uses a simplistic CSS and HTML system for rich text.
  • An in game map editor for creating new levels.