The Caliko Inverse Kinematics Library

After around 18 months of work, I’ve finally submitted my first research paper today to the Journal of Open Research Software in the form of a software meta-paper. While the paper outlines what the library is and does, the real crux of the submission is the creation of the Caliko library itself as a ‘software artifact’.

I can’t do anything with the paper until it’s either accepted or rejected (hopefully the former!) – but if you’d like to see what the library is and does – then this video should explain things quite nicely:

And if you’d like to give the whole thing a spin, then it’s merely a click away at:

One down, five to go.


Oracle Java Certfication

I passed my 1Z0-803 Java SE 7 Programmer I exam the other day – and it was without doubt the hardest exam I’ve ever taken by a country mile.

The entire thing’s made of trick-questions, corner-cases and large ‘human-compiler’ questions which have you substituting multiple pieces of borderline-legal nonsensical code into large swathes of horribly structured and badly laid out code to mentally determine which ones result in a given set of output. Horrific.

Also, on top of having to race your way through 70 questions in two hours, there are an undisclosed number of “non-assessed questions” which don’t count towards your score – the only possible reason for these I can think of is to burn the clock and artificially inflate the fail rate, thus scoring Oracle ~$300 a pop on resits for people who need an Oracle cert for their work. What a complete and utter rort.


Nailed it – but the only way I’d ever do another Oracle certification would be if there was something big like a specific job riding on it. And even then I’d think twice about whether it’d be worth the grief.

Final rating: 0 out of 5 Rubber Chickens. Avoid like leprosy.

How to: Get Minecraft working in Linux

Minecraft Wallpaper

Attempt a quickfix?

If you’re trying to run Minecraft in Linux and it’s failing with errors like:


Then the chances are you can fix it up by performing the following actions:

  • Set your LD_LIBRARY_PATH variable with:
  • (if needs be) Get rid of OpenJDK and install the official Sun/Oracle Java binaries if required.

Know how do all that? Awesome – carry on! Not so sure? Read on! ;-D

Setting the correct JRE location

First up, check if you have Java installed by typing java -version, if it comes up with something like the below, then you’re got Java installed, now we just need to find out where:

If you didn’t get anything similar to the above you might want to install the official Oracle Java implementation, which I put together a brief step-by-step for here.

Assuming you have some variety of the Java Virtual Machine (JVM) install, check if your LD_LIBRARY_PATH environment variable is set with:

If it comes up empty, then we need to find out where Java’s installed and set it correctly. To get the correct path for where your particular Java install is located, you might be tempted to try running which java:

However, this is a little bit of a fib, as Java is part of the alternatives setup where we can have multiple versions installed at once – which means that /usr/bin/java is really a symbolic link to the true java location. To find where it’s really pointing we can either ask update-alternatives how it’s configured like so (and pick a version different version if we want to):

Or we can look closely at the /usr/bin/java symlink:

Which if we then look closely at /etc/alternatives/java then points at:

Same thing as what the alternatives config’s pointing at ;-)

Now that we have the correct path, we can set it in the following manner (remember to substitute your particular Java location into the below lines!):

For 64-bit Linux:

For 32-bit Linux:

With that done, you should be able to see that it’s set by running:

Which should give you something like:

Finally, we should be fit to launch Minecraft like this (assuming the minecraft.jar file is in your home folder):

Or, without setting the memory and classpath variables, like this:

Be aware that the LD_LIBRARY path will only be set for the current session of the current shell, so you’ll have to re-set it a lot. A quick and easy way to do this is to just knock together a quick launcher script as below (substituting your paths in) and throw it in /usr/local/bin:

Final Notes

Not being able to set a persistent LD_LIBRARY_PATH is a pain, because it won’t take if set in the ~/.profile or ~/.bash_profile or ~/.bash_rc config files (I’m not so sure about ~/.pam_environment) – which you can read about here:

There’s a fix which involves disabling ssh-agent in this bug report (see post #21 here), but really for the sake of a two line launcher script I think it’s best to just leave it be.

Happy mining and crafting! =D

How To: Install the official Oracle JRE/JDK in Linux

Installing the official Sun/Oracle Java implementations used to be as easy as installing sun-java6-* and uninstalling all the OpenJDK and IcedTea (Java plugins based on OpenJDK) packages you could find – but you can’t get the offical “Sun” packages anymore, instead you have to go get the binaries from Oracle (who bought Sun Microsystems). You can take a swiz at the possible Java implementations here if you like.

Anyways, to get and install the official JRE or JDK (I’ll assume that most people aren’t going to be developing in Java so only want the Runtime Environment and not the full Development Kit):

  1. Head on over to: and download tar.gz version of the latest JRE, which at the time of writing is 1.7 update 7 (i.e. 1.7.0_07, the Linux 64-bit version of which is called jre-7u7-linux-x64.tar.gz),
  2. Extract the downloaded archive through any way you see fit. I’ll assume you downloaded it to your Downloads folder and extracted it there for the following commands,
  3. Create a new folder for it wherever your distro likes to put Java installs, for example:
  4. Move your extracted JRE to that location using:
  5. Update your alternatives to prefer the new version of java by running (one line at a time):

    If you’re installing the JDK you’ll prolly want to set the javac (Java Compiler) binary to the new version too using:

    The number at the end of the line is the priority of this binary out of any other java/javac/javaws binaries alternatives knows about, and goes from 1 (most important – try to use first) to 100 (least important – use only as a last resort)

  6. To make sure that the update-alternatives commands take, you can also run (again, one line at a time):

  7. Finally, to check it all really took, issue:

    and you should see some output showing that the newest version of Java is in effect, like this:

Done & dusted.

Me vs. Software vs. The World, or How to transition from Alpha to Beta

Race Day
Concept (left) meets Reality (right)
Things like this are hard to write – but today has been one of the best days of my life.

I’ve spent the last two weeks writing a receipt system for a bookmakers, so they can rock up to a race meet (horses), place a big board of odds, and take and give a lot of money. I was asked to write the software to keep track of it all, and I did – by working 12 hour days and finishing on a final 22 hour coding session to get it all up and running a whole 15 minutes before leaving for “delivery”.

I wrote it in a language foreign to me (Java) so it can run on anything, I hadn’t tested it very well, and I didn’t know if it would work in the real world until it got to the point of taking multiple crisp $100 bills off gruff, semi-drunken people at the race track.

To back up a second, the game here is “doubles” – you pick a horse to win in one race, and another horse to win in any other race, and you get the multiplied odds if both horses win – for example, Race 1 Horse 2 has 10 to 1 odds, Race 3 Horse 4 has 20 to 1 odds, so you get (10 x 20) 200 to 1 odds, and if you then place $10 on that combination and both those horses win you’re in for a $2,010 return. Sounds simple enough to keep track of, right? And on paper it is – but the devil is always in the details.

So I worked on the details, and it got the the point where money was changing hands. Real money. And lots of it. All going through my software. So if things failed now, it would be… bad.

But nothing did: Every race to perfection. Every bet to the (Australian rounded) nickel. Every composite object to the correct [serialized/deserialized] binary stream, every fat-fingered illegal input handled gracefully. 0 crashes. 0 errors. 0 fuck-ups.

I won’t deny it: for how last-minute, and with how little testing got done, I got lucky – but that doesn’t change the fact that everything worked perfectly: first-time.

I knocked it out of the park.

Awesome =D