Of all the government travel advisory publications released by various nations, the Australian Smarttraveller site is probably one of the most extensive. It contains comprehensive descriptions about the conditions of almost every country in the world, and many destinations also have detailed intranational maps which highlight the travel advice for certain regions, cities, routes, or other features. For example, here is the map for Asia as of October 2022:

Smartttraveller map of asia

A switch to Jekyll

I have migrated this website again, and now it’s a static site generated by Jekyll and served by GitHub Pages! Hopefully I won’t have to perform another migration any time soon.

Having existed for almost 15 years now, this website has had a long history of backends. Initially, I used a custom blogging system which I developed in PHP (all the rage back in 2008). Eventually, that got way too cumbersome to maintain, and I moved it to WordPress. After a while of that, however, I found WordPress too feature-heavy and complex, especially in the theme (since WordPress themes are just PHP files) and editor (it’s basically a full WYSIWYG page designer now) departments. Therefore, in 2016 I migrated once again to Ghost, which this site has thus been using until shortly before this post was published.


The Planck keyboard

Somehow, a while ago I became interested in small and unusual keyboards. Usually they came as PCB kits which required each key switch to be individually soldered, however, and it seemed tedious to me to have to solder (number of keys) * 2 points on the PCB for the switches (not to mention diodes as well), especially if de-soldering was required later.

Some time after that, however, pre-soldered “hot-swappable” keyboard PCB kits, which come assembled in a form that allows switches to be directly plugged in without the need for any additional soldering, became more prevalent, and the kits for some of the keyboards I had previously been interested in were updated to contain such PCBs. Therefore, I recently bought a fairly well-known “40%” keyboard, the OLKB Planck, from Drop (Massdrop).


Writing "hello world" in x86 machine code for Linux with Elfhex

In a previous post, I described my Elfhex project, a simple machine code “assembler” which takes source files containing machine code, represented using hex bytes, and produces executable ELF binaries. While it may seem that it would be quite tedious to produce a working program using this tool, simple executables are not too hard to achieve. In this post, we will use Elfhex to write and “assemble” a simple “hello world” program in x86 machine code, targeting the Linux operating system.



While the project was actually undertaken several months ago, I have not written about my Elfhex machine code “assembler” on this blog yet. Elfhex is a small language and “assembler”, which accepts source files containing machine code (or really, any sequence of bytes, represented by their hex values), and prepends the ELF header (hence the name) in such a way to make the resulting binary executable on an OS that uses the ELF format (e.g. Linux). In order to make this a bit less tedious, the language also contains a number of utilities, such as labels and references, fragments (macros), that make the program construction process easier. Nevertheless, it does not support mnemonics or other typical “assembly language” constructs, and in that manner could be said to be architecture-agnostic as well.

Why did I make Elfhex? Well, I thought it would be interesting to use.


The three types of Wikipedia [citation needed]

Burning plastic may produce toxic fumes.[citation needed]

“I have no doubts as to the veracity of this statement, however it would be nice if there was a cititation so people could click on it and learn more about the topic.”

The population of Australia is 23 million.[citation needed]

“This seems plausible, but I really have no idea how true this sentence is, so if someone could provide a source for it that would be great.”

The Earth is flat.[citation needed]

“The only reason why I didn’t delete this outrageous and patently false assertion outright is because I was too afraid of the edit war that would follow.”

Vim with Colemak

:set langmap=nj,ek,il,ln,je,ki,NJ,LN

Much better! In this case insert has been mapped to k, since i has been mapped to one of the movement keys.

A simple demonstration of virtual memory

In discussion, it appears many people are unclear on how memory (RAM) is managed in modern OSs, and in particular the concept of virtual memory and its implications for a process. Also, how virtual memory is not the same as paging/swapping (or RAM, or ‘storage’, or the memory used by virtual machines, etc.).

Many modern computer architectures (e.g., x86-64) possess a Memory Management Unit (MMU) that translates memory addresses as used by processes running on the computer into physical addresses. The memory seen by processes, therefore, is only virtual memory. This allows an OS to present a contiguous and isolated virtual memory space to each process, irrespective of what else is running on the machine—each process in effect thinks it has all the memory to itself. This is simply demonstrated by the program below, which when compiled (on, e.g., Linux x86-64) will show the same memory address holding two different values ‘simultaneously’!

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
  int a, i;
  if (fork()) sleep(1);
  a = getpid();
  for (i = 0; i < 4; i++) {
    printf("pid=%i: &a=%p, a=%i\n", getpid(), &a, a);
  return 0;


Nuclear throne

A game I consistently play from time to time is Nuclear Throne, a fairly addictive twin-stick shooter where you try to reach the eponymous Nuclear Throne. Which you won’t, since the game is fairly hard too. It’s also one of the most highly rated games on Steam with a 96% approval rating (while not being super-niche)—which means it must be good, right?

The basic premise of the game is that you move through procedurally generated levels while fighting enemies from a top-down perspective with various randomly-obtained weapons. As you reach higher levels, the enemies get harder but you are also able to obtain better weapons (still randomly, from chests), leading to an interesting power balance. Eventually (if you get that far) you are facing off against green blobs firing virtually insta-kill plasma balls while running away against other green blobs with insta-kill bite attacks. But you have a nuclear missile-launching bazooka. If you are lucky. Otherwise you have a really slow-firing crossbow. And then you die… probably.

Nuclear Throne screenshot

The game by itself only has local co-op, but there is a fairly good online multiplayer mod for the game that enables two people to play together over the internet. It even works with the the Steam friends list for invites, which is pretty good.

Also of note from the developers of the game is Super Crate Box, which is free and also very addictive.


My current hosting provider—decently priced VPSs, and they have a Sydney datacentre for those of us down under.