Blog.

Read about my thoughts and experiences on various topics, including software development, technology, Cambridge and more.

Recent Posts

All Posts

Calling JavaScript functions from Rust by embedding V8

27 January 2024 10 minute read

Being the language of the web, JavaScript seems to be everywhere and do everything. And sometimes, a...

Youngest Player Starts: Board Games and Markov Chains

3 January 2024 14 minute read

Over Christmas, I’ve spent a fair bit of time playing board games with my family. However, being m...

The dodgy security of biometric passports

14 December 2023 10 minute read

If you have a passport, chances are it’s insecure. Within a decade, it’ll probably track your ev...

Modernising device live migration at Nutanix

19 September 2023 13 minute read

For 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

17 June 2023 24 minute read

My first year at Cambridge has been nothing short of absolutely incredible. I’ve made some amazing...

Optimising content moderators with ML in Switzerland

30 March 2023 12 minute read

Last 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

7 January 2023 12 minute read

Over 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?

20 November 2022 7 minute read

I spent the last weekend participating in HackX, a hackathon hosted by the Cambridge Existential Ris...

How to learn another programming language

14 November 2022 10 minute read

Plenty of people have already written about how to learn to program, but there are comparatively few...

Building Stuart, a blazingly-fast static site generator

3 September 2022 14 minute read

A 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

11 August 2022 11 minute read

Last week, I made Equion, one of my longest-running projects, open-source. Originally designed to he...

How are mutexes implemented in Rust?

16 July 2022 11 minute read

Mutual exclusion locks, or mutexes, are a vital component of any multi-threaded program. In this pos...

Implementing atomics from scratch in Rust

8 July 2022 10 minute read

When talking about multi-threaded applications and concurrency, we often hear the term “atomic”....

Migrating TidesX to Cloudflare Workers and Workers KV

21 June 2022 7 minute read

The 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

8 June 2022 6 minute read

Two-factor authentication is a vital part of securing any account. By requiring a secondary code to ...

Dynamically generating embed images for Gatsby

29 May 2022 5 minute read

One of the most important things about a blog is encouraging people to read it. A vital part of this...

Creating a blog with Gatsby

25 May 2022 3 minute read

With the A-level exam season in full swing, I’ve been finding more and more creative ways to procr...

That's all the posts so far!