A static export of the old Wordpress site, so things may be a little funky

Technology, politics, life

Good wireless headphones may never exist

I love good headphones but I don’t love the wire. I want good wireless headphones.

I have been seduced by the idea of not having dangling cables between me and what I’m listening to. That’s a shame because the copper wire in headphone cables is pretty good at transmitting audio. It’s reliable, reproduces the original audio almost perfectly and requires negligible power to operate.

When I say I want good wireless headphones I’m really saying I want wired headphones with the cable replaced by some magical feature that makes the space between my headphones and the audio source transmit audio like a wire no matter where I am.

That’s why I’ll never have good wireless headphones.

Let’s assume Bluetooth wireless headphones are the current state of the art and look at two of the main obstacles.

Firstly, even if your headphones are right next to your laptop they can’t be guaranteed to work. Bluetooth uses a range of the radio spectrum that is shared with all kinds of other things. WiFi routers and cordless telephones are usually well-behaved occupants of this part of the spectrum but they can introduce errors, or otherwise reduce the bandwidth available to send full quality audio. Bluetooth is also susceptible to radio interference that is generated by misbehaving household appliances like microwave ovens.

You could argue that mobile 3G and 4G wireless encounter many of the same obstacles yet work admirably for audio. Unlike Bluetooth’s 2.4GHz bazaar, mobile network spectrum is reserved almost entirely for mobile radio and it’s policed to provide reliability and safety. Also, one end of the wireless mobile phone connection is almost always fixed in well-surveyed space.

The second issue is physical impediments. Humans are mobile bags of meat and fluid that absorb and distort Bluetooth wireless. Even when Bluetooth gets through a human it may then have to traverse walls, cars, trees, handbags, tinfoil hats, backpacks or a universe of other obstacles.

And it has to navigate them perfectly or it is not a good wireless headphone.

Brainsnorkel back from the dead

Last week my very old hosting service was hacked to serve ads and partially deny administrative access.

Everything important was backed up so I was able to restore everything quickly. Score one for having regular backups that you don’t have to think about. Shout out to backing up to DropBox and OneDrive regularly.

This site took a little longer because I had been neglecting it for a while and had none of this new-fangled easy and reliable backup software. I had an old posts  backup, so what you’re seeing is a hand-restored

There is Unicode conversion weirdness and missing links, but it’s back. I’m not going to bother about restoring the old pages unless there is rioting in the streets.

Do you want to resume this resume?

My employer for the last 18 years is waving farewell to me in April. This may explain my sudden uptick in blog posting frequency. My employer is giving me a soft landing with four months notice and a termination package. Part of my package is access to Career Transition Support consultants. I have decided to look past their euphamistic service description and talk to them about me.

I have been asked to bring along my resume for assessment.

This presents a problem. My resume has not been edited or added to for nearly 15 years. I’d like to think that my reputation alone would get me any job I would apply for, but I know that’s not true. It is time to build a new resume from scratch.

I have reviewed hundreds of resumes in the past decade. I think I know what a good one looks like, but I also know I have been focussed on the content and not the form of the documents. Rather than deconstruct and reproduce the traditional form I thought I would articulate some of the requirements I have for my own resume.

  • I am the first page of my resume. My first page should mention all of my best attibutes and my starring roles because most people don’t read to page two if they’re not hooked on you by the first page, and the first page is the page that spends the most in front of your prospective employer as it sits on the desk between you in an interview, or on the screen of someone assessing multiple candidates.
  • The front page should state who I am, what I am looking for, and what I am good at. That way my time is not wasted interviewing for a position I don’t want.
  • Anything I did more than five years ago should be summarised to points that could assist me in my future career. This is because my memory of the fine detail of events five years ago is unlikely to impress an interviewer.
    Make sure the whole document is short and easy to read. Because no matter who you are if it takes more than four or five pages to explain what you are good at then I’m not hiring you.
  • Once I have built my resume, how will I know it is acceptable before I release it into the wild?

Get someone I trust, who does not fear offending me, to read and criticise it. Because I can not tell when I have left out necessary detail, used corporate vernacular when plain English would do, or left out some significant gem of experience.
Thankfully Ms J is expert in all of these things and has promised to be merciless.

I still have areas of uncertainty. For instance, I don’t know if I should specify the positions I am looking for. I don’t want to limit my options. Being too prescriptive could eliminate me from consideration for fascinating jobs with hard to write job descriptions. Being too vague about my objectives makes employers unsure if I really want a position. Maybe I won’t be considered for a good position that I don’t mention by the correct keyword.

I guess that’s what a “Career Transition Support” consultant can help me with.

Time lapse of The Gateway to India

At the end of a trip to India in Nov-Dec 2014 I decided to give myself a little luxury with a night in the Taj Palace in Mumbai. The view from my hotel window was perfect for Hyperlapse.

Left click murder on the bluetooth express


  • MacBook 13″ Laptop connected to an external display, external keyboard, USB headset, USB backup drive, wireless network, wired network and a bluetooth mouse
  • My home office
    Daytime Population: 1 me, 1 cavoodle, 1 cat

Events leading up to problem:

  • No configuration changes or software updates for over a week
  • Everything working fine when I left my computer to make a cup of tea for 5-10 minutes and returned to find the symptoms below


  • I can’t left click on anything. Not with the trackpad, not with the mouse
    • This is very frustrating. You can’t easily launch, close or do much that is useful – even to diagnose problems
  • The keyboard still works, so I can type things and use keyboard shortcuts
    • I started to Google Mac Accessibility options so I could accessibility my way around diagnosing this problem
  • I can right-click things

What now?

I began the problem isolation process, poking around, turning things on and off… trying to get to the minimum configuration that showed the symptom.

Until I noticed I had two bluetooth mice.

Crazy! I thought. This Mac has gone insane. I rebooted it and reset the NVRAM and it came back up with two bluetooth mice.

Now, like Agatha Christie, I will reveal to you that one clue that might have made it obvious to you from the beginning.

Cleaners worked on my home office yesterday. They moved my laptop bag so that it was balancing on another bag. I had repositioned it in a safe location when I went to get tea.

Hey, didn’t I put my old bluetooth mouse in my laptop bag?

I hunted around in the bag and sure enough my old backup bluetooth mouse had switched on when I moved the bag. It had been squished so the mouse button was held down.

Coming clean

This is probably something experienced all the time by road warriors with a wireless mouse, but I needed to write it down for google-fu and my future self.

Death by radix

This post is reinforcement of a programming trap I should avoid in future, and punishment for selecting poor test cases. It’s not a bug of epic proportions, so move along if you have better things to laugh at than a bug in my Daily WTF-candidate code.

I threw together a simple booking calendar that uses a touch of JavaScript to make it a little more animated than a basic web form on cheapo PHP hosting. Part of the magic of this calendar is that it creates a string of the form “Your booking is for one night from Wednesday July 13th 2011, departing Thursday July 14th 2011” to help reinforce to the user that the correct dates have been understood by the booking system.

When I implemented this booking calendar it appeared to work nicely. Nonetheless, I wrote test cases for it. When there were plenty of tests and they all passed I was feeling smug that my JavaScript was probably provably better quality than most of the JavaScript in existence given it had tests.

It operated for a few months with no complaint. Then there were several reports in one week that the code wasn’t generating the correct weekday.

“Inconceivable!” I thought.

I tried it myself with the dates users complained about and found it was generating crazy weekdays. I checked, and my regression tests were passing just fine. I then plugged the reported problem dates into my test suite. My old test cases succeeded and the new ones failed.

So, down to diagnosis.

The “bulk” of the code is pulling the date string apart so I can use date-related utility functions. The problem was my use of parseInt().  

parseInt() parses a string and returns an integer. I discovered that it works fine for some months (01, 02, 03, 04, 05, 06, 07, 10, 11, & 12) and not for 08 and 09. This is because parseInt() assumes that if the string it is parsing begins with a 0, then it’s an octal number. That works for 01-07 because they generate the same number whether you parse them as octal or not. 11 and 12 work because parseInt() correctly guesses that they are base 10. 08 and 09 are automatically detected as octal, but they fail to parse as octal numbers. I used the error return value to populate the month in a Date object which dutifully interpreted the value as December. The weekdays were right… for December.

Sure enough, none of my test data contained a date in August or September.

The main fix is that the parseInt() function takes a second optional argument that sets the radix to use and stops it from guessing.

I’m still trying to think of a situation when you might want parseInt() to guess the radix for you.

Beam “Slavery to Star trek” to Edinburgh

What use is my dormant blog if not for blegging?

My friend Andreea Kindryd started doing stand-up comedy at age 68 and has recently started performing an amazing autobiographical show. After great reviews at the Adelaide Festival she has the chance to perform “Slavery to Star Trek” at the Edinburgh Festival this year, but she needs some help to get there (and back).

Come along to a performance in Sydney later this month, or visit the Pozible project pageand pledge a little support.

Improved boot times: Vista vs Windows 7

I think it was Andrew who pointed me to Soluto as a method of improving boot times on Windows PCs.

I have mentioned before that my Vista-running X61 tablet takes a while to boot. Soluto measured boot time at just over 10 minutes. I followed its advice, and through delaying and removing various crapware and legitimate startup programs I got boot time down to 5 minutes and 10 seconds.

Emboldened, this weekend I took some advice from Ian’s comments on my last post and shelled out AU$300 for a copy of Windows 7 Professional (upgrade).

Now, with a few tweaks recommended by Soluto I’m recording a consistent boot time of 1 minute 35 seconds.

My aging tablet feels like new again (during boot).

Update: Actually, it feels pretty snappy since the Windows 7 makeover and some hybrid SSD drive loving. Boot time is now a shade under a minute and application launches are snappier than they’ve ever been.

The Lenovo X61 Tablet three years later

In a previous post I had talked about the rate of decay and the usefulness of a fairly shiny new X61 tablet. Now three years later it’s time for a quick update on how it’s travelling.

Lenovo Thinkpad X61 Tablet

As you can see, the tablet is pretty much the same as it was at 3 months old. There are legends about how hard-wearing ThinkPads are. After lugging it back and forth from work, and on vacations, for three years it’s looking like a role model for laptop longevity.

The screen is a bit blotchy with grease now, I haven’t found a good cleaner that I trust to not melt or damage the surface, so I put up with a dirty screen. The screen is also pulled away at the bottom exposing some glue that picks up dust and won’t let it go, but the problem is just aesthetic.

The pen is still held together by sticky tape.

The hard disk is now a 500GB Seagate 7200rpm drive, and I have added 4GB of RAM. The battery is now a non-Lenovo battery that works fine except that the Lenovo power management software courteously questions my commitment to safety and morality every time I log in. The original battery went stone cold dead with error messages from the power management system along the lines of “Get this battery thing outta me NOW! Stat!” when it was just over 2 years old.

None of the keys have come off the keyboard. The marvellous screen-rotating and reversing hinge feels as firm as the day it came out of the box.

The biggest problem is still Vista and the load of Lenovo crapware required to keep it alive. It has always taken a long while to boot and get settled (5-10 minutes), so I’m tempted to start from scratch with Windows 7, but haven’t made the investment in time yet.

Blog moved!

After checking the PHP options and benchmarking hosting & database speeds at’s dirt cheap hosting against options at the dirt cheap hosting I have at I decided to move Brainsnorkel to the garish world of GoDaddy.

While moving I found a couple of things of interest.

  1. That the Freshy2 theme I use has been bequeathed to the open source community by its creator, so I will move to a newer theme when I find one and modify it to taste. (Ignore the WordPress 2.9 incompatibilities for now, ok?)
  2. That exporting MySQL defaults to latin character encoding, and phpMyAdmin defaults to utf8 for import.
  3. That TPG has one of the slowest to update DNS servers in the world:

    sh-3.2$ nslookup
    Non-authoritative answer:
    sh-3.2$ nslookup
    Non-authoritative answer:

Page 1 of 40

Powered by WordPress & Theme by Anders Norén