Work

Former PM, loved the technical aspect so much I decided to become a Software Engineer. I'm currently working on a C++ multithreading library and a IoT management web platform.

pongx home page

PongX - Social Network

webserv home page

Web Server

atmega328p dev kit

Embedded Bootcamp

cartoon data robot

Data Scraper & Modeller

PongX - Social Network

  • pong welcome page
  • pong gameplay
  • pong tourney
  • pong chat
  • pong chat
  • pong leaderboard

Project Overview

Our team of 5 worked together to create our social media site PONGX. It featured competitive matchmaking, leaderboards, friend / block requests, chat rooms, local AI and tournaments. I was responsible for the Django backend, where I created key systems and API’s. Our development was containerised in Docker and we had automated builds, unit tests, and mandatory code reviews in our CI/CD pipeline.

Key Features

Real-time gameplay

WebSocket-based multiplayer system with smooth gameplay and minimal latency

User Management

Comprehensive user authentication, profiles, friend / block system, and 2FA

Chat system

Real-time chat with private messages and chat rooms

Competitive Matchmaking

Users MMR (matchmaking ranking) updates after each match and is then used to pair similarly skilled players

Web Server

Project Overview

A low-level C++ implementation of an HTTP/1.1 server that handles concurrent connections and processes both static and dynamic web content, developed as an academic project to demonstrate network programming fundamentals. The project showcases low-level socket programming and thread management skills through features like request multiplexing, CGI script execution, and configurable routing.

Key Features

Non-blocking I/O

HTTP/1.1 compatible server using event-driven architechture to handle many concurrent client connections

Dynamic CGI Content

Supports script executions for dynamic content generation

Configurable Virtual Servers

Supports multiple server configurations running simultaneously on different ports

Unit Testing

Comprehensive HURL API tests integrated into the CI/CD pipeline to prevent any critical bugs

Embedded Bootcamp

  • atmega pinout
  • atmega timers async
  • atmega timers
  • atmega i2c
  • atmega interrupts

Project Overview

Together with 42Chips, École 42's embedded engineering club, I took part in a series of challenges spanning two weeks, called 'The Embedded Piscine'. We relied on the ATmega328P microcontroller datasheet and the pinout diagram for our devkit, and were only permitted to change 8-bit register values manually instead of relying on high-level functions.

Key Features

Advanced Hardware Timers

Challenges required the use of CTC timers, Pulse-Width Modulation (PWM) timers, and overflow timers to interact with board components.

Two Wire Interface (I2C)

The board was connected to a AHT20 temperature and humidity sensor. We used the I2C protocol to send instructions to the sensor and receive data from the device. We could read the temperature and humidity to 0.01 and 0.03 units of precision from the 3mm chip.

Hardware Interrupts

Hardware interrupts were used to asynchronously call functions whenever users physically interacted with the board.

Data Scraper & Modeller

  • price by zip
  • rent by zip
  • code example
  • count plot
  • box plot
  • pair plot

Project Overview

A python web scraper that crawls through Seloger and BienIci for properties listed for sale or rent, and stores the data in a MySQL database. I then clean, analyse, and model the data to find the listings with the highest predicted rental yeild or investment return (ROI).

Key Features

Machine Learning

Training a quick and simple random forest model, I was able to predict the sale price of listings at 73% accuracy.

Data Wrangling and Analysis

Using Pandas, Numpy, and Seaborn I'm able to clean duplicates, identify any problems with the scraper, fix incorrect data types or invalid values, produce summary statistics, visualise measurements and relationships between variables, and find the properties with the highest expected return on investment.

Modular Design

The codebase is organised into distinct modules such as BaseScraper, BienIciScraper, and SelogerScraper. Promoting maintainability and scalability.

Contact Me