GitHub Page About

Development beyond code


  • Leaning in Games With Your Webcam

    I’ve always found using Q and E to lean in FPS games awkward. I just don’t have the coordination to maintain strafing and normal movement with WASD while also using those keys. I wanted to see how difficult it would be to use my webcam to detect head tilt and translate that into in-game actions.

  • A Primer on Backups for Developers Moving to Ops

    It’s World Backup Day! Let’s dive into discussing backup strategies, whether cloud or on-prem.

    While cloud providers have made life real easy when provisioning services, the trend towards cloud has also changed what modern IT roles look like. There is often a lot of crossover between developers, network engineers and server administrators. It’s not uncommon to see developers provisioning new services, or stepping into SRE/DevOps roles. Unfortunately, sometimes this comes with the risk of gaps in skill sets. Providers have a lot of value-adds or cheap features like snapshots which are deceptive to people not familiar with IT/infrastructure planning that are now performing more of these duties. Modern cloud services don’t replace or discard traditional IT/Infrastructure processes like tiered backup strategies.

    What do your backups in the cloud look like? Sure, you have automated deployments but how long will it take to restore a service? How much data will you lose? Can you quickly roll back the changes from a rogue script? Do your backups cover a catastrophic failure of your cloud provider?

  • Working from home in the Game Development Industry

    I spent nearly 4 years working as a lead programmer in the game dev industry entirely from home, along with a team spread across the globe. With the recent fears, travel restrictions, lock downs and other chaos around the novel coronavirus, COVID-19, I thought I’d share my experiences with remote working. How a large project with a large global team managed to function with almost everyone working remotely.

    The games industry has some particular challenges with working remotely. There are the issues all companies face like IP agreements, the risk of leaks and maintaining communication. The games industry typically also has to deal with extremely large project sizes which further complicates matters.

  • RainbowRedux First Release & Status Update

    Some big news today for RainbowRedux. The first release is now available, the Unreal project has been made open source, and there is a new Discord server to follow development. Read on for more details!

  • 4 Problem Behaviours in Software Development Teams and How to Fix Them

    I’m going to outline 4 problem behaviours that I’ve noticed and experienced in my time in the game and software development industry. This is by no means an exhaustive list but they are problems I’ve seen crop up repeatedly which can have major effects on team performance and morale. I’ll talk about the issues that follow from these behaviours as well as offer insights into how to prevent them.

  • Jenkins Home Lab: Part 4 - On-Demand Linux Agents with Docker

    Today we will setup on-demand linux agents through Docker. First step, let’s install Docker.

  • Jenkins Home Lab: Part 3 - Setting up Windows Agents

    Today, since we already have a working setup of Jenkins, lets expand it to include windows agents.

  • Jenkins Home Lab: Part 2 - Setting up Linux Agents (Ubuntu & Raspberry Pi systems)

    Today we’ll look at setting up linux agents. These instructions apply to Ubuntu and Raspberry Pi / Raspbian systems, but should work for any debian based system. With some very minor tweaks these instructions should work pretty similarly for most linux systems.

  • Jenkins Home Lab: Part 1 - Setting up the Master

    Are you looking for a project this holidays? Did you get a Raspberry Pi for Christmas? Why not setup a home lab for CI/CD with Jenkins? Over the next week or so I’m going to output a series of tutorials aimed at setting up a comprehensive home lab environment for Jenkins. With this home lab you can turn any old or cheap computers into an environment to automate tasks for your side projects, sharpen your CI/CD skills, and prototype new project pipelines.

  • Texture Upscaling Pipeline

    At the beginning of the year I wrote about my initial experiments with image super resolution. This week I focused on some of the improvements I discussed and implemented a pipeline.

    I’ve written an image processing framework which I’m releasing under the MIT license. The goal is to allow rapid iteration of image processing until good results are achieved in the majority of cases reducing or eliminating the need for any manual editing of images.

    Denoised before ESRGAN and then downsampled

  • Improving Coding Standards and Quality

    Coding Standards are often thought of as style guides, however coding standards should be more than merely a style guide. Beyond just style, I believe standards should encompass everything that is used to improve code quality and reliability. This includes how code is reviewed and what automated checks should be in place (before even discussing your testing strategy).

    What goes into building a more complete set of coding standards? How can teams build a useful style guide? How can a good guide be used to improve team dynamics, rather than a tool to drown code reviews? How can tools automatically analyse code to help find bugs rather than just checking style infractions?

  • Cheap Optimization with Memoization in Python

    Memoization is a technique to cache the result of a function or program for a given input. It’s an incredibly simple optimization to make, and in the right circumstance significant speedups can be achieved.

  • Back to the Origin - A look at object bounds and floating point precision

    While working on RainbowRedux I’ve discovered the content is authored in some interesting ways. Today I’m going to talk about large distances, floating point numbers and the errors they can cause. I’ll show how I’m trying to reduce these distances and make the geometry more manageable.

    Level is far away from the origin

  • Evaluating Project Dependencies

    With dependency management tools like NPM, PIP and other similar tools it’s easy to just add another library dependency to a project without much thought. However, dependencies do add weight and cost to a project. The costs could be time, money, and potential sources of bugs. The libraries also have different levels of support. So how do you weigh up using a new library or extending an existing library? When is it appropriate to roll your own?

  • Rainbow Six Revival Project

    Rainbow Six and it’s sequel Rogue Spear are early defining games in the tactical shooter genre and the legacy remains today in Rainbow Six: Siege.

    I’ve been working on extracting data out of Rainbow Six with the goal of bringing it into a new engine and recreating the game.

    Preview of the first mission in Unreal Engine 4 First attempt in Unreal

  • Testing Texture "Super Resolution" Techniques

    After seeing Doom Neural Upscale 2X by hidfan, I became interested in testing out “super resolution” techniques on the images found in Rainbow Six and Rogue Spear.

    Super Resolution is the process of taking a smaller image and generating extra detail to output a larger resolution image without just blurring the smaller image. Although there are many varied techniques to achieve the results, in this article I will be using an open source trained network, ESRGAN (Enhanced SRGAN), and an image upscaling service called

Subscribe / RSS