El Capitan for developers

10 June 2015

In spite of the risks, I always install the latest OSX betas on my personal laptop/dev-machine. This always brings a whole host of compatability issues and broken things, but fixing/discovering these is all part of the fun! This post is a summary of issues/solutions found so far - hopefully it'll be of help to someone. I shall keep updating as I discover more.


/usr/bin is no longer writeable - not even by the root user. Although /usr/bin should be left to the OS, I'm surprised not even the root user is allowed to fiddle with it's contents. Anything that was previously installed in there will be removed during the 10.11 install.

$ sudo touch /usr/bin/test
touch: setting times of ‘/usr/bin/test’: No such file or directory


This breaks vagrant which insists on installing it's executable to /usr/bin. To fix just link the original to /usr/local/bin:

$ sudo ln -s /opt/vagrant/bin/vagrant /usr/local/bin/vagrant


My entire brew install was completely busted. The reinstall instructions recommend removing /usr/local/Cellar as well as /usr/local/.git, but this would mean unnecessarily removing everything I had installed (which was all working correctly). To fix:

$ rm -rf /usr/local/.git
$ brew cleanup
# reinstall brew via the brew.sh script

You'll also need to install the latest command line tools for Xcode 7 to upgrade anything compiled by brew.

Installing git 2.4.3 failed because OpenSSL was missing, fixed with brew install openssl.

Unfortunately some things (latest python, pypy, node) remain un-upgradeable.

Little Snitch

Little Snitch now has a nightly release with El Capitan compatability.

Benchmarking in Virtual Machines

07 April 2015

Since the earliest programming days hackers have benchmarked and compared pretty much every language/software/stack out there. These benchmarks are often shared with the public, which allows other hackers to make more informed tooling decisions based on their specific problem. Although this is an awesome feedback system, I worry that recently the quality of benchmarks has been affected...

Since the recent shifts towards "Cloud" computing, I see a lot more of these benchmarks run on top of virtual machines (/cloud servers). Unfortunately this has the potential to, and often does, skew the results. This happens because, even though a virtual machine appears as a physical, separated device, it's really a shared environment - leading to inconsistent CPU/Memory/IO resources. For production deployments this varyation is annoying but managable, however when you're benchmarking and pushing something to the edge of it's limits, the varying access to system resources can have a much more profound affect.

Of course, phyiscal boxes aren't that consistent either, it's very difficult to tell the OS to stop running all it's background processes. But the reality is they are far more consistent, with only a small variation in available system resources, and this will lead to more reliable benchmark results/comparisons. Just me make sure to close all other running userland processes if on a personal laptop/etc!

I like to think of benchmarks as a scientific experiment - one needs a control group to act as a "base". In computing you could call that "group" a device running an OS so lightweight it has a negligable affect on the available system resources. This gives a level playing field on which to benchmark/compare software.

Switching to Windows Phone

20 December 2014

A couple of months ago, while trundling along the Circle line at snails pace, it dawned on me that I rarely use more than around 5 apps on my iPhone. At the time, I was checking my emails in Mail and had just finished reading the latest blog posts on Flipboard. A couple of phone calls, a text and quick snap with Autostitch brings us to 5. Given the massive bias towards wall-of-apps style phone usage, I decided to try something a little different.

So I bought a Windows Phone, specifically a Nokia Lumia 1020. The original plan was to give it a trial, and return it when I inevitably hated it and returned to the iOS/app-crazy bubble.

But the opposite has happened; I must be in a small minority of people who actually like not having the latest apps to play around with. I am no longer distracted by my phone, but use it only to communicate or read. It's the simplicity of it that I love - I have my laptop for tinkering. This is further exaggerated by the stunning Windows Phone interface, which is definitely the most usable "phone" OS I've seen yet.

As with all things, Windows Phone is not perfect - Internet Explorer (true to it's desktop counterpart) cannot render fonts smoothly. Ironically, despite my general dislike of extra apps, I miss Citymapper a lot. There's also some issues with live tiles not updating, but I came from iOS 8 & it's beta so I'm now well used to a buggy phone ;).

The phone itself looks amazing, is built like a brick (as much as a smartphone can be anyway) and there's that 41 MP camera. It's also over a year old and a little slow at times - but the camera more than makes up for it as opposed to say, a much faster Lumia 930. More details available in the notes I made during the trial period.

All in all, I can't see myself ever returning to iOS.