Blog.
Recent Posts
Modernising device live migration at Nutanix
September 19, 2023 13 minFor the last 12 weeks, I’ve been working at Nutanix as a Software Engineer Intern on their hypervi...
How to survive your first year of CompSci at Cambridge
June 17, 2023 25 minMy first year at Cambridge has been nothing short of absolutely incredible. I’ve made some amazing...
Optimising content moderators with ML in Switzerland
March 30, 2023 12 minLast week, I had the privilege of participating in START Hack 2023, a 36-hour hackathon hosted by ST...
All Posts
Modernising device live migration at Nutanix
September 19, 2023 • 13 minute readFor the last 12 weeks, I’ve been working at Nutanix as a Software Engineer Intern on their hypervi...
How to survive your first year of CompSci at Cambridge
June 17, 2023 • 25 minute readMy first year at Cambridge has been nothing short of absolutely incredible. I’ve made some amazing...
Optimising content moderators with ML in Switzerland
March 30, 2023 • 12 minute readLast week, I had the privilege of participating in START Hack 2023, a 36-hour hackathon hosted by ST...
Exploring garbage collection in V8 with WebGL
January 7, 2023 • 12 minute readOver the Christmas break, I’ve been working on a game engine called TSGL, using TypeScript and Web...
Can you learn to better predict the future?
November 20, 2022 • 7 minute readI spent the last weekend participating in HackX, a hackathon hosted by the Cambridge Existential Ris...
How to learn another programming language
November 14, 2022 • 10 minute readPlenty of people have already written about how to learn to program, but there are comparatively few...
Building Stuart, a blazingly-fast static site generator
September 3, 2022 • 14 minute readA few weeks ago, I watched a video introducing me to Hugo, a static site generator written in Go tha...
How I built Equion, the mathematician's Discord
August 11, 2022 • 11 minute readLast week, I made Equion, one of my longest-running projects, open-source. Originally designed to he...
How are mutexes implemented in Rust?
July 16, 2022 • 11 minute readMutual exclusion locks, or mutexes, are a vital component of any multi-threaded program. In this pos...
Implementing atomics from scratch in Rust
July 8, 2022 • 10 minute readWhen talking about multi-threaded applications and concurrency, we often hear the term “atomic”....
Migrating TidesX to Cloudflare Workers and Workers KV
June 21, 2022 • 7 minute readThe recent heatwave here in the UK brought huge growth to TidesX, my tide times app which serves ove...
Two-factor authentication from scratch with TOTP
June 8, 2022 • 6 minute readTwo-factor authentication is a vital part of securing any account. By requiring a secondary code to ...
Dynamically generating embed images for Gatsby
May 29, 2022 • 6 minute readOne of the most important things about a blog is encouraging people to read it. A vital part of this...
Creating a blog with Gatsby
May 25, 2022 • 3 minute readWith the A-level exam season in full swing, I’ve been finding more and more creative ways to procr...