Implementing DNS: RFCs can be sneaky

28 Mar 2020
We've all seen DNS at work. You probably used it to get to this site (if not then who are you and why do you know the IP for my site off-hand?). But how does it work? Sure there are high-level descriptions of it in most Computer Science courses the world over and certainly the internet has no shortage of hand-waving descriptions. When we get down to the finer details though, how does one really create a client that talks directly to a DNS server to get IP addresses from domain names?

Randomly valuing property: A Machi Koro investigation

26 Dec 2019
In addition to the various computer-ey things that I do, I also like to play boardgames with my friends sometimes. One such game that I like to play is Machi Koro. Machi Koro will be the topic of today's post so if you've never played it, you may want to watch a lets-play of it or something before continuing. I recently acquired my own copy of it (along with the Harbor and Millionaire's Row expansions) and started playing it with other people who'd never seen it before.

Fortunes Algorithm (Part 2): Some implementation details

31 Mar 2018
In my previous post, I gave an overview of how Fortune's algorithm works. For simplicity's sake I specifically left out details about implementation and so we'll cover some of that in this post instead. I spent far longer than I originally intended trying to write my own implementation. The main reason for this is that I was repeatedly delayed by the discovery of yet another edge-case which caused my implementation to fail.

Fortunes Algorithm: An intuitive explanation

29 Mar 2018
A voronoi diagram is a way of dividing up a space into a set of regions (which we call cells) given a set of input points (which we call sites), such that each cell contains exactly 1 site, and the points inside the cell are exactly those whose nearest site is the one inside that cell. A voronoi diagram with a site and its corresponding cell highlighted. Voronoi diagrams have an extraordinarily wide range of applications.

Sounding smooth with jitter buffers

15 Jan 2018

When discussing network connection quality, terms such as latency (or ping) and bandwidth are thrown around like its nobody's business. They do not tell the whole story however (as I discovered while working on my experimental video-conferencing program, Veek), and miss out on one property that is crucial for real-time data transmission: Jitter.

Intro to CMake

5 Sep 2017

Building C/C++ projects is clearly a non-trivial problem given the many, many, different options available for helping you do that. CMake is one of the more popular systems, and one that I've been meaning to look at for a while so if you're wondering what a CMakeList is and want a basic introduction, then read on!

Data structure internals: Hash Tables

22 Aug 2017

Hash tables: everybody's favourite way of avoiding the need to search through a list of items. But what goes on inside one? How do we achieve amortized constant time access and insertion and deletion? Well I'm so glad you asked…

JAIR Post-mortem

26 Mar 2017

Around 3 months ago I started a project to build an infinite runner in my spare time, which I titled “JAIR” (or “Just Another Infinite Runner”), purely for lack of a better idea. Yesterday I finished working on it and so I've put up a project page for it here and I thought I'd just write up some notes about how those 3 months went.

Welcome

18 Jul 2016
I see you've reached my personal site/blog. Great! I hope you enjoy your stay and that you find something of interest to you here. You can find a list of my personal projects here, and hopefully in the near future you'll be able to find some posts about things that interest me. The site isn't particularly pretty/interesting at the moment, but I'm working to change that so I hope to see you back here again sometime!