Blog format update

7 years, 8 months, 17 days, 22 hours and 25 minutes ago I wrote the first post for this blog, inspired by a talk by Andrew Tridgell at 2004 on the value of a personal "junkcode" repository. I know this because I've recently gone through considerable effort to change the format of the blog and keeping the timestamps in sync was one challenge.

I've now updated to use Pelican, massaged all the old posts into reStructuredText, done a fair bit of HTML and CSS hacking and hopefully redirected all the old URLs to the correct place. Old comments didn't make the cut, but there wasn't much value there and I'm happy to outsouce to Disqus.

How things have changed! As I was writing the CSS to round the corners of some elements, I remembered back to cribbing from Slashdot HTML to do the same thing -- except in those days you used a table with blank elements in each corner with 4 different rounded-corner gif files!

Yet I'm still writing in emacs, so some things will forever remain the same I guess.

Tips and tricks for your E3 Visa

Having recently been through the process, I've managed to come out the other-side with some some advice for anyone taking this on.

  • To start out, the link for making appointments at the Australian Consulate is VisaPoint. I found it was remarkably well hidden.
  • Upon entering the country, it's quite likely the immigration officer won't be that familiar with the E3 Visa. I'd recommend you watch them and very politely correct anything you think wrong, in my case my Visa was incorrectly entered as E3-Dependent along with my wife (proving that the system doesn't actually keep referential integrity between an E3 and an E3D holders).
  • You can not get paid before receiving a social security number. You can not apply for a social security number within about 10 days of entering the country, as there is a lag between immigration and social security systems. Once you apply it will take a few weeks for the card, but you can probably go back to the office with sufficient ID within two days and receive a print-out of the number. You can call the office you filed with first and they can tell you if it's worth coming in to try it. In the absolute worst case, if things screw-up, you could be in for a long wait. Your company may be able to loan you money if things get desperate.
  • If anything really stuffs up you'll have to enter the US immigration services, which is no fun. If this happens to you in the Bay Area go straight to the San Francisco office; the San Jose office doesn't have deferred inspections so you'll probably just have to go there anyway.
  • Your dependent on the E3D Visa will need to fill out an I-765 work authorisation form. This will take up to 3 months to process; you can find out the approximate queue time here. The form doesn't appear to have been updated for E3D; I would strongly recommend getting a lawyer to file it for you so you don't stuff it up. Budget about $400. After this has been processed, the dependent will then need to file for a SSN before they can be paid.
  • Tax is a black-art. In California expect to pay something like 20-25% federal, 10% state and up to 7% more for Medicare and social security. Expect another $80/month for health insurance.
  • You can get a bank account without a SSN easily. A good way to transfer money is OzForex, but watch out for fees on the US side (you may have to do wire-transfers which cost about $10 a go, though some banks have bill-pay). The country still runs on cheques for some reason.
  • You can rent without a SSN, but it will cost you. Budget for 2 months extra rent as deposits and paying ahead.
  • A car lease is probably a good way to go. Finance will usually look at your visa and only give you a two-year loan, and with no credit that will be at a very high interest rate. In California you can get a 2 year lease on a base model new car (sticker price ~$17,000) drive-away for a down-payment of about $2500 and then $250/month plus taxes. Insurance will be about $120/month on-top of that. The beauty is you just give it back when you go home. For long holiday trips SUV rental may contribute to global warming, but is a very comfortable way to see the country.
  • In California you'll need to book in for a driving test to get a license; you can't do this in a rental car but some local driving schools offer a short introduction course and then let you use their car for the test.
  • If you're living in temporary accommodation without great facilities Dream Dinners is a good way to easily get some meals together.
  • In the Bay Area, Yelp is an awesome resource.
  • Comcast make Telstra look like a well-run, efficient and customer focused organisation!

Feel free to drop me a line if you're thinking of taking an opportunity and have any questions.

Big Bands are Back!

8pm Monday nights sees the return of the Rhino Factory to the Zodiac Hotel, 244 Pitt Street. Plenty of couches, dance floor and of course Sydney's craziest 18 piece big band. It's only 10 metres from Town Hall station, so come and support live jazz, and of course have a few beers. Check out the myspace site for more music and photos.

Work for Gelato@UNSW

We are currently looking for a person to join the Gelato@UNSW team. Read the job description; but if you are reading this, and your physical proximity is not too far from UNSW, there is a high proability you'd be interested in the job.

There will be much hacking at userspace and kernel level, though knowing your way around C and building kernels is sufficient. There will be papers involved, but it is not overly academic. You'll have time to learn, and freedom to move things in the best directions you see fit. You'll collaborate with some very smart people both here and abroad; I can speak from personal experience that the positive push of your surroundings will help you learn more than you ever could in other environments.

If you have questions, please email me at

Diamond Princess v Titanic

Anyone who has been near Circular Quay would have noticed the Diamond Princess at port in the OPT. Melinda raised the obvious question of how big it was compared to the Titanic.



Beam (width)



Passengers + Crew









Diamond Princess


37.5m (excluding bridge wing)




So the Diamond Princess is about 10% longer and over twice as wide, and weighs about 2.5 times as much. Apparently they both had the same top speed of 23 knots. The height I'm not sure about; the Wikipeida article says the height is from waterline to top deck but the other article doesn't specify. From looking at it, it certainly could be 60m from waterline to top deck, it is extremely tall. This at least gives you some perspective if you get to see it up close; however I think there are other ones just like it, I seem to remember seeing something very similar parked outside Venice.


After a request I enabled comments. I also tied a script into mutt so I can delete comments when I'm notified of them. So the comment policy is pretty much "I decide".

I hope the spam stays away and interesting people visit, but we'll see. I may sound old fashioned but I still prefer email.

To keep some technical content, note the file distributed with the Pyblosxom 1.2.1 contrib collection is not the latest, and if you are getting issues with "Mapping Key Not Found" when you post a comment, remove the call to decode_form (hack) or otherwise figure out what the blog charset encoding/decoding is trying to do (nice, but if you only care about English I don't think it will bother you).

on computer science

CTD posts a question from a school exam, which appears to come down to a syntax error (I didn't pick it, someone in the blog comments did).

Apart from illustrating that not much has changed since I did computer science at school in 1997, it is an example of everything that is wrong with teaching computer science.

You'll think I'm crazy, but maybe we should rename computer science computer art-economics. Firstly, you'll notice that their is a fair bit of maths and science behind both of those fields, but it is not the primary focus of either.

Both artistry and programming are about plucking something out of your head and representing in some tangible form. Just as we can look at a piece of art and decide if it is a good or bad representation of what the artist had conceived, we can look at an algorithm represented in code and decide if it is an elegant solution to a problem.

The senior English department does not teach you to write by presenting you with grammatical errors and marking you on how many mis-placed apostrophes you find. The music department doesn't teach you to listen for the slip of a finger in a concerto and the art department doesn't make you study the five rough drafts of the Mona Lisa. In all of these departments their goal is to open your mind to the cornerstones of their fields and give you a foothold and the skills to hang on, from which you can climb as high as you want.

Standard algorithms and data structures are the cornerstones of computer science. The skills to hang on are teaching you a language with which to express these ideas. Binary logic is the basis of everything that gets built on top; the way 'and', 'not' and 'or' can be made to conspire and build most anything imaginable should be your first stop.

In other ways, however, computer science is much more like economics. Anyone who has studied economics will very quickly realise that playing around with the economy comes down to two things -- you either do something more efficiently (get more output from the same input) or accept a trade off (get less of one thing for more of something else).

A computer only has so many cycles per second to crunch through data. It only has so much RAM, cache, TLB slots, memory bandwidth, disk space, network bandwidth. When you write your algorithm, you either need to find a way to somehow be more efficient with your resources, or take a trade off.

Understanding where you can get efficiencies starts by learning about algorithms. We formalise this with big-O notation, but you don't need to know about that to realise a quick sort gets the job done faster than a bubble sort. When you get really smart, you start coming up with your own ideas that are better than anyone has ever thought of before.

Understanding tradeoffs is what makes you a programmer. You need to understand what is happening from what you write down to the way the instructions get issued into the processor. You need to understand what the operating system is doing between your program and the hardware, and any of the myriad of other variables that happen on a modern computer. Think of all the others things you understand to make good decisions; networking, databases, electronics, mathematics. How to make a good interface is as much about psychology as anything else.

This is an absolute gold mine of material, and exposes you to everything that modern computer science is about. There is an infinite number of exams without one stupid "find the syntax error" question.

Our goal should be striving to open the eyes of the next generation of hackers to the amazing world that lives beneath their keyboard. If things are anything like when I was at school, the only wonderment was wondering what the hell I was doing sitting in this class when it looked so nice outside!

NICTA and Qualcomm

As you will soon hopefully be aware, the Embedded Systems and Real Time Operating Systems group (the research group that Gelato@UNSW is embedded in) within National ICT Australia today released news that they are partnering with Qualcomm on some chipset solutions. Many of you will know people like Gernot and the hacker-extrondiare Benno who made this all possible (while I had nothing to do with it at all).

The essence of this announcement is the tiny microkernel L4 with an operating system layer Iguana wrapped around it. On top of this you can run a modified version of Linux, called Wombat.

This is important for a number of reasons. From a technical point of view, memory protection in embedded systems isn't generally a given -- any process can kill another, making things often very hard to debug. Using this operating system stack you get full memory protection. Secondly, it is possible, and work is ongoing, to formally verify the L4 microkernel. This means that it will have been shown, much as in the way of a mathematical proof, that it works. For your embedded system, which might be stuck somewhere that the reset button is very hard to reach, this is a great reassurance. Lastly, having a modified version of Linux available means there are a number of possibilities for you not having to re-write legacy code. You also avoid licensing issues around using something like ucLinux, which are a big concern to many embedded systems players.

From a non-technical point of view, this represents around 10 years of hard work from various people involved in what has been known as the Keg lab, after the tiny room it all started from in the UNSW Electrical Engineering building. It means that people in Australia are doing really interesting systems work and coming up with products that really stand out and customers want (I can't say more, but be sure that the Qualcomm partnership will not be the last). You should be excited, because starting to commercialise research projects is a push in the right direction to becoming a powerhouse of innovation like so many of the famous American universities. And if you have youth on your side, enrol at UNSW, do the various operating systems courses and come and join us on NICTA Level 6 -- the view is great!