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?
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.
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.
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.
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.
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!
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…
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.
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!