South African Number Formats

A friend of mine recently asked for help with Excel number formatting. His version of Excel was using a comma for the decimal point and it was irritating him as it seemed wrong. I then saw the use of spaces for the thousands separator and figured it was using the wrong region settings. It turned out that the region settings were correct and we had both been subjected to the Americanisation of a standard. I found that other people had experienced a similar problem. Technically speaking, the official format for numbers in South Africa is spaces for the thousands separator and a comma for the decimal mark.

1 234 567,89

The American variation that we had become used to is commas for the thousands separator and a full stop for the decimal point.


In programming, I have only ever seen the use of the full stop for the decimal mark, and no thousands separator. However when printing numbers for humans to read, its important to use the thousands separator and to use a number format that the largest group of readers will easily understand.

If your readers are South African, this handy JavaScript function will format your numbers correctly with 2 decimal places, which is mostly useful for displaying currency values. This code is a modified version of this script.

function za_format(number) {
  number = parseInt(number).toFixed(2);
  number += '';
  var x = number.split('.');
  var x1 = x[0];
  var x2 = x.length > 1 ? ',' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + ' ' + '$2');
  return x1 + x2;

Rating our Presidents

As any person who reads the news in South Africa, I’m prone to the problem of having a two week memory of news that made headlines. But our brains fool us into thinking that we remember more of the past and are better able to predict the future. At the time of writing this (17 Feb 2013), the following news items about Jacob Zuma were published:

As with all quick news reports, it tends to focus on a particular issue that will be newsworthy and helps confirm people’s biases, whichever way they may lean. You seldom get a clear picture of the track record of a president, only a snapshot of current sentiment. It seems to me, the job of a president that wants to stay is power is to first manage public opinion, and then to be in charge of running the country. How do you tell if they are doing a good job on the second part? At this point, I read a lot of negative sentiment around Jacob Zuma. The usual “the country is falling apart” rhetoric mixed with cultural biases around his behaviour that is contrary to what is deemed acceptable.. Also there are our biases towards viewing short term change in economic indicators as representative of a longer term trend. When the Rand weakens against the dollar or inflation goes up, without looking at a much longer timeline, these data point blips shouldn’t matter. Any short term negative change is usually highlighted in the news and tends to cloud the view of actual job performance.

Continue reading “Rating our Presidents”

Monitoring System Dashboard

three6five probe dashboard

Another three6five related project was the requirement to create a dashboard for our support team to have an overview of all the probes that we have deployed on site at our customers. Specifically it needed to firstly highlight any probes that are not functioning, and then any services on an active probe that are not functioning.

This will live on a big TV screen in our support centre and can be seen from anywhere in the office. While we send out notifications, its good to have a easy to view list of all the issues that are being dealt with. Continue reading “Monitoring System Dashboard”

Path Elevation Calculator


A colleague of mine at three6five recently asked if it would be possible to get elevation data for a path between 2 points using the Gooogle Elevation Service. Since we’re mostly Mac users, it is difficult to get useful path profile software to run that doesn’t require that you run Windows. After a quick look at the format the data is returned by the Google Maps API, I realised that it should be fairly straight forward to produce a graph of it in D3. That graph would effectively be a contour of the land for a line between 2 specific points.

Add a mast and Freznal Zone and you have working wireless path propagation plotter.

Honey Pot Project


At three6five, we undertook a project to put run honey pot server on a local internet connection to see what the threat levels are. This a self guided presentation to take you through the results. This was my first real exploration of the D3 library. The actual presentation framework also uses D3 and something called Stack by Mike Bostock, one very clever dude!

South African Census Data Explorer


With the publication of the final data for the South African 2011 Census, I built an interactive application using D3 and the published census data to try make the presentation of the information more useful. The issue with the census data is that it has either been summarised and presented in a PDF document with a particular view in mind, or you have to go digging into the data yourself to find what you are looking for. Assuming of course that you know what you are looking for before hand.

I was looking for a way to present a fair amount of information on a single screen while allowing interactivity and exploration. This allows you to play and discover new aspects of the data that you may not have previously thought about.

The first interesting anomaly I found was a decline in the number of children born in 2001. I have no idea why that is, if its a data problem or clear indication of alien abductions, but this presentation format allowed me to more easily think of questions to ask about the South African population.

census data point

The census data was pulled from the Statistics South Africa website and converted to JSON format using python. There was some inconsistency in the presentation format of the data between the different years, so some data had to be discarded. This was never more tha 1% of the total available data though.

The rest of the application is written entirely in Javascript using D3.