About

Hello! I am a UK based DevOps engineer who's looking for ways to use tech to do social good, utilise it to to empower communities and, simply put, leave the world a better place. I'm also looking forward to seeing how we can bring worlds and stories to life using interactive mediums, particularly games and virtual reality.

I have clocked 4+ years of experience as a software engineer, out of that I've worked in embedded development & automated testing of hardware for almost 2 years. Outside of that my roles have been a mix of of infrastructure work (heavily AWS centric), full-stack and building CI/CD pipelines. I love obscure shell commands, whales carrying containers and anything DevOps related. There's plenty of that & more in my CV!

As you can tell from my projects I'm quite a devoted gamer with a few hobbyist gamedev projects under my belt. You might also find me at various meetups around London involving volunteering, board games or social tech (or, ideally, all 3!). Feel free to say hi if you ever run into me there!


Visapp

Holders of Tier 2 & Tier 5 visas in the UK can only access the list of potential sponsors by checking a PDF on the Home Office's website. This makes it extremely difficult to find companies within a specific industry, location or field. Additionally, companies themselves often do not know if they can hire a non-EU national, meaning any job advert needs to be cross referenced with the sponsors list to double check if a Visa holder can apply for it.

To fix this problem the application serves the newest sponsors list in a table, together with Company House info about the sponsor's industry, as well as collects data from online jobs boards to map them to existing sponsors. The user can then filter through the app's content by category, location, company name and see what positions are available at which companies. In the future the website will act as a one-stop shop for information about the sponsorship process, timelines for Indefinite Leave to Remain applications, and generally how to obain a Visa in the UK - all tailored to the user's situation based on the data they provide.

Built utilising serverless technologies - AWS Lambda, API Gateway, CloudFront - the app also uses EC2 for daily scraping of sponsors and jobs. Those are converted by a set of scripts to fuzzy match company names to sponsor names, then saved to S3 for archiving as well as pushed into an RDS. The whole setup was designed to take advantage of AWS Free Tier while providing scalable & highly available infrastructure.

AWS | NodeJS | React

LetMeCreateIoT

A spin-off of my colleague's LetMeCreate library which he wrote as a set of wrappers to communicate between Imagination Technologies' Ci40 board and MikroElektronika's click boards. It included a set of Linux C wrappers for common communication protocols (for example I2C, SPI, GPIO) as well as drivers for specific click boards.

LetMeCreateIoT was written with the idea of preserving LetMeCreate's API but implementing it for Contiki RTOS. The RTOS is then run on a constrained device based on the PIC32 system on chip. This way code could be prototyped on the Ci40 first, and then moved to Contiki with little to no changes. Similarly, writing click board drivers meant they were immediately available for both platforms. Prime example was my colleague's implementation of a display controller board that worked out of the box on both platforms.

On top of that the library provided wrappers for UDP/TCP communication as well as functionality to send live logs over the SoC's embedded low power radio. This meant the standard output was always easily available. Accessing it any other way was quite cumbersome since it required soldering wires and buying a dedicated UART board.

Embedded C | Contiki | PIC32 SoC | 6LoWPAN

IoT Carpark

A project that combines LetMeCreateIoT and AwaLWM2M device management software. The aim was to connect a constrained device to a cloud server, and use LWM2M to communicate the device's sensors' state. Since a motion sensor was fitted on top of it, which updated its status on the cloud whenever it was trigged, we were able to react whenever motion was detected.

The project includes a NodeJS app that could be run side-by-side with an AwaLWM2M server, this way the webapp can use interprocess comunication to access all sensors' states. Then it displays dynamically which spaces are taken, with a free spot shown if there's no motion, and a car if motion is detected.

Embedded C | Lightweight M2M | NodeJS

Contributions

  • A few fixes, an SPI joystick driver, and extra abstractions for LetMeCreate to allow for better portability of driver code. Since we were trying to ensure easy portability of driver code any hardware & OS differences required hiding them away behind extra LMC API calls, and limited the amount of patches needed to port the driver code. Additionally if we ever wanted to migrate to a new OS (eg. RIOT) it meant we already had a solid and stable API to implement to make the code portable.
  • Various commits to AwaLWM2M, mainly to make the Python API compatible with both Python 2 and 3, fixes to Contiki network abstraction layer made to resolve issues with caching of parsed addresses, and fix ports not being consistently saved in one endianness.
  • Changes submitted to 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 CN interrupt.

Graphics Engine

A fun side project I used to play around with 3D graphics - using OpenGL's rendering pipelines, writing shaders and handling lighting. The goal was to learn more about 3D math for graphics programming as well as design something that would be fairly extensible in the future (eg. to implement DirectX support).

The engine can render fairly simple scenes with lighting & shading enabled. For shadows it uses shadowmaps, but also includes a phong reflection model to render surface reflections. All of the rendering is handled via a proper vertex and pixel shader pipeline with shaders written in GLSL.

C++ | OpenGL | GLSL

pyPlatformer

Something I started working on in 2015 before & after starting my new position as a system assurance engineer at Imagination Technologies. The goal was to refresh my Python skill and have a go at writing a component-based game engine (Unity-style) rather than an inheritance based one. The latter was more of my area of expertise due to a few years of working with the Source Engine. For the media library handling system calls, rendering and input/output I used PyGame and split the game into separate engine & game modules for easier code re-use. Thanks to PyTMX levels can be built quickly using Tiled and imported straight into the game.
Python | PyGame

Space Invaders

A clone of the classic Space Invaders arcade game, originally it was an interview challenge for a gamedev job I applied to in 2014. The goal was to build a fully working game in 7 days, but with enough abstraction to allow for easy plugging in of different implementations of the engine components (renderer, user interface manager etc.). For handling low level input/output and rendering calls I used SFML

Plus, it's Space Invaders, and who doesn't like Space Invaders!

C++ | SFML

Valve's Source Engine Mod

My first major C++ project started back in 2008 while I was still in high school. It continued (with pauses) until 2012, when development effectively stopped until I cleaned it up before releasing as a perpetual alpha in 2015 on ModDB.

Originally the mod was meant to be fairly simple - the players were tasked with solving puzzles, while one other player was supposed to randomise them by changing the puzzles on the fly. As development went on 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. The traps included suicidal, mechanical pigeons, exploding, flying orbs talking with my friend's voice and giant, human-eating blenders.

While working on the mod I 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.

C++ | Source Engine | Valve Hammer Editor

Manhunt - Arma 3 mission

My gaming group started running into issues where we couldn't find any Player vs Player scenarios designed for our group's size - which is about 4-6 people playing at a time. Disappointed I figured the best around this is to write my own mission 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, accomplish objectives (usually those involve just getting to a specific place), and finally extract via a helicopter. Their opponents have access to light vehicles, helicopters and are constantly being informed about the rough are where to look. This means that the Hunted have to be careful about the path they choose through the island, as well as have to make choices about sacrificing stealth in favour of speed.

Countless evenings were lost playing this game mode, and even more trying to fix various gameplay issues or fighting Bohemia Interactive's SQF syntax. In the end I decided to share the mission via the Steam Workshop .

SQF | Arma 3 Eden Editor

Scavenger - Arma 3 mission

An early prototype that never received a proper test run. As a follow up to Manhunt I decided to try a more symmetric Player vs Player approach, but with AI added to the mix to balance the lack of human opponents. The mission is still geared towards groups of 4-6 players.

Players are evenly split between two teams, both are tasked with recovering briefcases from the city of Vorkuta. The city, however, is occupied by AI which patrols the streets and positions snipers on the roofs. The players have to either deal with the AI guards, or sneak past them whenever possible. This also means that running into the opposing team might require holding fire and cooperating to avoid mutually assured deaths.

SQF | Arma 3 Eden Editor