Hello! I am a UK based software engineer with an interest in anything technology related, especially regarding using tech to accomplish positive impact on the world. I have done a bit of embedded development, but as you can see from the projects below I have also dabbled in some game development on the side. Check out my work below or my LinkedIn profile!


Originally started as a Contiki version of the LetMeCreate library. LMC is a collection of wrappers for common interfaces (GPIO, I2C, SPI, UART, PWM, ADC) and drivers for MikroElektronika's click boards, it's distributed as a package to be used on Imagination Technologies' Ci40 running OpenWRT. LMCIoT is designed to implement the API provided by LMC as closely as possible while running as an application in Contiki RTOS on a PIC32MX470F512H SoC. Thanks to the shared API it is possible for LMCIoT to check out drivers from its parent library and use them in almost all cases straight out of the box. This allows for the click drivers to be developed on one platform and quickly ported to another at little to no cost. In the end both libraries support about 30 different click boards. LetMeCreateIoT also adds extra functionality such as wrappers for networking (for instance UDP & TCP wrappers), and the ability to debug a program using 6lowpan connectivity.
Years active: 2016 - 2017 Language: C

IoT Carpark

A project that combines LetMeCreateIoT and AwaLWM2M device management software to connect a PIC32MX constrained device to the cloud. A motion sensor is fitted on top of the constrained device which uses Awa to register itself to a cloud server. Whenever motion is detected, and the cloud server is observing the motion resource, a notification will be sent informing of a change on the parking space covered by the sensor. Then the REST API can be used to visualise this data. Alternatively a release is available which uses a server provided in AwaLWM2M and IPC to communicate with a NodeJS app used to visualise carpark's status.
Years active: 2016 - 2017 Language: C


  • I have worked on a few abstraction in LetMeCreate to allow for better portability of driver code, plus I added driver for an SPI joystick click. LetMeCreate was used as a drivers' feed for LetMeCreateIoT and multiple patches were initially needed to make up for hardware & OS differences. Adding extra abstractions helped in making sure only a few patches were needed instead, it also ensured that any future variations of the library for new platforms would have a solid API to work with.
  • While working on my side projects I have done some commits to AwaLWM2M, mainly to bring up the Python API up to Python 3 standard, do changes to Contiki network abstraction layer made to resolve issues with caching of parsed addresses, and fix ports not being consitently saved in one endianness.
  • I have also worked on the CreatorDev fork of Contiki RTOS to fix Makefile issues, clean up and add missing functionality to I2C, and add a driver to handle multiple callbacks for the change notice interrupt.

Graphics Engine

Engine I made to be used primarily as a playground for graphics programming. Utilizes OpenGL to render 3D scenes, and currently handles lighting, shadowmapping and phong reflection model, all done via the vertex/pixel shader pipeline. I have also included abstractions to allow for different rendering APIs, such as DirectX, to be used in the future if I decide on implementing them. It was a side project I started in order to learn the basics of 3D maths in graphics programming, and play around with designing properly abstracted rendering engine to use in the future.
Years active: 2015 Language: C++


A simple platformer in Python. I used PyGame as the underlying media library to handle all system calls and interface with the rendering API, the game is split into separate engine & game modules allowing for code reuse. Levels can be created using Tiled and are loaded in via PyTMX, then the provided layer data is used to simulate collision detection with the level. I used this project as a way to play around with designing the architecture of a system and implementing it in Python.
Years active: 2015 Language: Python

Space Invaders

A Space Invaders clone which I wrote as a 7 day project with the idea of putting together a 2D engine using SFML. It is split into separate modules doing rendering, handling object lists, managing the interface, performing game simulation and collision handling.
Years active: 2015 Language: C++

Overlordess - Source Engine Modification

My first major C++ project started back in 2008, which continued (with pauses) until 2012, when development effectivelly stopped. Released later as an alpha in 2015 on Moddb. Originally was supposed to be a rather simplistic modification based on the Source Engine, in which players would be tasked with solving puzzles, while one other player would be tasked with modifying them on the fly. In time it turned into a full-blown Player vs Player modification pitting one team against a single player whose goal is to use traps & environmental hazards to stop anyone from finishing the level. I have acted as a lead for a small team of 3D and 2D artists, while my responsibilities included all of the game design, level design, level creation and gameplay programming.
Years active: 2008 - 2012, 2015 Language: C++

Manhunt - Arma 3 Mission

One of the missions I started making for my own gaming group, we could not find any Player vs Player scenarios designed for a 4-6 players group like ours which led to me starting work on one instead. Manhunt pits a small group of players - the Hunted - against a much larger enemy team - the Hunters. The smaller team has to sneak through the island avoiding detection and capture as much as possible, while their opponents can utilise various equipment to track down and eliminate them. The mission was written in Bohemia Interactive's custom scripting language called SQF.
Years active: 2015 - 2016 Language: SQF

Scavenger - Arma 3 Mission

Currently a work in progress, just like Manhunt it is supposed to be geared towards groups of 4-6 players. The teams are split evenly and both are tasked with recovering artifacts from a city occupied by hostile AI-controlled forces. All players have to deal not only with the opposing team, but also computer enemies. This forces them to make constant decisions regarding when, and how, to engage to avoid detection while sneaking through the city.
Years active: 2016 - 2017 Language: SQF