Julian's photo Hi there! I'm Julian M Bucknall, a programmer by trade, an actor by ambition, and an algorithms guy by osmosis. I chat here about pretty much everything but those occupations. Unless you're really lucky...

Most recently this is what I've come up with:

Back in the day: a PC Card adapter for USB 2.0

Time for a quick giggle as I look at some old hardware I used to use, some 14 years ago, before I take it off to recycling. This past weekend, in a box at the back of the cupboard, I found this:

PC Card adapter for 2 USB 2.0 ports - top

It’s an adapter for a laptop that didn’t have USB 2.0 ports but that did have a PC Card slot.

PC Card adapter for 2 USB 2.0 ports - end

Way back when, that’s exactly what I had: a big chunky laptop with USB 1.1 ports but no USB 2.0 ports. The laptop was recycled ages ago, but the card adapter lived on until now.

I also found a couple of Microsoft Wireless Adapters that used the same physical interface, because, yes, back then my laptop had a wired network adapter, but not a wireless one (nowadays, it’s the exact opposite in these new ultra-slim laptops):

PC Card wireless adapter

Scary stuff…

Album cover for Ancient and ModernNow playing:
Dudley, Anne - Tallis' Canon
(from Ancient and Modern)

Another chapter from the “Don’t be clever” coding style

A short and quick example of some baffling coding today. It so happens this past weekend I was updating some HTML and CSS and JavaScript on this site. One of the JavaScript source files (luckily not written by me) had this:

function $$(id) {
    if (id.substring(1, 0) != "#")
        id = "#" + id;

    return $(id)[0];

Start Well Your Day - Whut?So, in other words, it takes an element id, makes sure it starts with a ‘#’, calls jQuery to return the elements with that id (of which there should be one only, of course), and then returns the DOM element for the first item in the jQuery object array. Not so bad, except…

1. ‘$$’ is a crap name for a function, sorry. Yes, I get that it calls jQuery, er, safely, but it just looks weird. And unlike $(), it returns a DOM element and not a jQuery object. This caught me out elsewhere and is the topic of another post.

2. It uses ‘!=’ and not ‘!==’, something that rubs me up the wrong way in a Lint sense.

3. What the heck are those two parameters to substring()? Yeah, I get that it’s getting the first character in the string, but that call just looks wrong.

That latter one actually got me to go to Mozilla Developer Network and look up the damn function. Look, there are two substring-type functions in JavaScript: substring() and substr(). The first gets a substring from a string given the starting index and the ending index (the character for which is not included in the returned substring), and the second gets a substring given the starting index and the number of characters. Already, we have to try and remember the calling syntax for two extremely similar functions, and also the edge cases for them both. For example, if the starting index for the first is less than 0, it’s assumed to mean 0; whereas if the starting index is less than 0 for the second, it’s assumed to count from the end of the string. See what I mean?

It turns out that substring() has the nice behavior that if the ending index is less than the starting index, the function will swap them over before using them. Fine, I’d completely forgotten that fact, if I ever knew it anyway. But, why the hell the writer of this function didn’t call id.substring(0, 1), which I would have just understood implicitly (either as starting at 0 up to index 1, or, “wrongly”, as starting at zero for one character), I’ll never know. The parameters are hard-coded after all, and in a way to make the code maintainer stop and doubt his experience or sanity.


Album cover for The SinglesNow playing:
Pretenders - Don't Get Me Wrong
(from The Singles)

Installing Yosemite like a pro

Way back when, I bought a black MacBook and an iPod Touch. I was – har, har – going to learn how to write Objective-C and earn millions selling apps. You know the kind of thing:

  1. Learn Objective-C
  2. PROFIT!!!!

Amsterdam canal bridgeExcept Objective-C is a right royal pain in the neck – and this is coming from someone who loves JavaScript. Anyway, after a year or so, I had a better plan: use a Mac as my main laptop and get used to the Mac way. I bought a unibody 13-inch MacBook Pro, mid-2010 version, speediest CPU at the time, upgraded it to 8GB and a hybrid 500GB drive from Seagate, and used it as my main machine for about 8 months, trying to love the Mac ecosystem. I sold the BlackBook a little later.

Via some time using VMWare Fusion, I ended up with a Bootcamp partition and used mainly Windows 7. But I found the Mac keyboard to be not ideal (plus some other niggles) and so in mid-2011 I bought a Dell XPS 15z instead. The MacBook Pro was sidelined, with me booting it every now and then to update it and back it up. Still in the back of my mind was the thought of writing iOS apps and so I didn’t get rid of it completely.

Fast forward to now.

I have a Xamarin license from work. It’s time to play around writing iOS apps but with C# instead. Much better. However, carting around a 4.5 lb MacBook Pro as well as my Dell XPS 12 when I travel doesn’t tempt me. Since the Mac side of things is only for compiling and uploading to an iOS device (aka, my phone or my iPad), it makes sense to get the smallest lightest Mac I can find, viz the MacBook Air 11. And that’s what I did: I bought a second-hand machine off of eBay (it hasn’t changed substantially since the mid-2013 release and that’s what I bought) and to offset the cost it’s time to sell the MacBook Pro.

Of course:

  1. I’m going to wipe and install Yosemite on the second-hand MacBook Air 11 – I trust no one when it comes to OSes and malware.
  2. I’m going to wipe and install Yosemite on my MacBook Pro before selling it – you ain’t getting my data, albeit 3-year-old data.

Hmm. It behooves me to optimize here, perhaps.

After backing up my MacBook Pro, I rebooted into the Disk Utility (press ⌘ and R while the machine boots). Here I erased the whole drive – select “Mac OS Extended (Journaled)” for the disk format and give the disk a name – and then selected the option to Install OS X. (Note: you will have to be connected to a network since the install process has to download the OS installer – WiFi is fine.) It then installed Mavericks. Nooooo! That’s not what I want!

It turns out that in order to install Yosemite (that is, OS X 10.10) at the moment as a fresh install (and not as an upgrade), you have to do something different: you have to create a bootable drive with the Yosemite installer on it. Generally this is a USB drive; 8GB will do just fine. So, go find one of those freebie USB drives you have stashed away in a drawer.

I went through the new install process on Mavericks (basically which country, which language, etc) and then downloaded the install for Yosemite. And now the easy fun part: there is a way to type in a bunch of commands into a terminal to create a bootable USB drive and then copy the Yosemite install on it, but fooey to that. I downloaded DiskMaker X and it did everything for me. At the end of 10 minutes or so, it had reformatted my USB drive and had copied the relevant parts of the Yosemite install onto it. And the best bit? It went and found the install program itself, I didn’t have to browse and point to a particular folder. So now I had a bootable USB drive with the Yosemite installer on it.

Now it was even easier: reboot the Pro with the USB drive plugged in. This time, just press the Option/Alt key when you reboot. It’ll show the bootable drives, so select the USB drive and boot from that. Select Disk Utility, erase the main drive again (same parameters), and then install Yosemite. Bingo. After about 15 minutes I had a MacBook Pro with a Yosemite clean install and waiting at the registration details prompt. All ready for the lucky person who will be buying this machine from me on eBay.

Now to do the same on my new MacBook Air. The USB drive I’ve just created will work just fine there as well: no need for all the shenanigans above again. After that, it’s time to install Xamarin and go play.

Album cover for AffectionNow playing:
Stansfield, Lisa - My Apple Heart
(from Affection)

The Talented Mr Steve

So this happened…

Gently photoshopped building ('BLDG') signThe phone rings. The caller id says “STS” from 949-203-0674. I know who it is; I track scam phone numbers: it’s a hobby when you work from home. I answer.

“Hi, this is Julian.”

Clicks, buzzes, then: “Hello, this is Steve from [somefakename]’s Tech Support Department.”

“Oh, yes?”

“We’ve noticed that something is wrong with your computer. My error report says it is no longer updating.”

“Interesting. Which one?”


“I have three I use regularly. Which one?”

A worried silence.

“Look, all my computers have unique names. Surely your error report gives the computer name.”

“No.” Furious thinking, almost a hum on the line. “The guys in the server room don’t release that information to us.”

Ooh, nice comeback.

“Maybe it’s not my computer. What’s the IP address for the error report? Surely, it gives you that? Otherwise how do you match up the computer to my phone number?”

He’s getting a little more worried now. Glibness pays off again.

“They don’t give us that. Besides which all your computers are using the same IP address.”

Clever! Avoiding the question, but I’m starting to like this scam artist. I’m actually doing some development using a couple of machines at this moment, but before I say anything, he comes back with:

“It’s for the Windows System. It is no longer updating.”

Neat answer: coincidentally I’m running a Windows laptop and a MacBook Pro. The fun of Xamarin, dont’cha know. I play him along a little bit more.

“Oh dear. Which version of Windows are you talking about?”

“Windows 7.”

“Oh, good. I’m running Windows 8.1.”

“It’s for that one.”

Major overreach. Time to smack him a little more.

“In fact I just pulled up Windows Update, and as I thought Tuesday was Windows Update day for October and I updated everything. The screen also tells me that it checked for updates this morning as well and there were none.”

“This has happened since then. I’ll show you.”

At this point I was done. His script would then have gone like this: start a Command Prompt, type such-and-such command into it, which starts up Event Viewer, point out all the scary events in it (all of which are pretty boring and mundane, but catalogued like Warning and Error), persuade me to download an app that’ll allow him to take over my machine, when he installs malware and convinces me to pony up $300 for something to remove it. Bzzzt, got better things to do with my life.

“So, to recap. Your error report says that a Windows computer here is no longer updating properly. Yet you cannot say which computer it is, or even what my IP address is such that it would lead you to believe that one of my computers is at fault. You can’t even get the Windows version right. You can’t even say how you’ve married up this rogue computer of mine with my telephone number leading you to phone me in the first place. In short, you are lying to me and I think you’d better go find another sucker to defraud. Bye.”

“Thank you and goodbye.” Click.

At least he was polite to the end.

Seriously – and I’m not talking to my tech readers here who already know this – if someone phones you up out of the blue saying there’s something wrong with your computer, stop and think: how have they matched up your computer with your phone number? Not possible, my friends. It’s a scam, pure and simple. But once they have persuaded you to install something you know nothing about on your PC, they own it. Period. You’ll be fleeced to get it back. So don’t let them.

Album cover for The Royal ScamNow playing:
Steely Dan - The Royal Scam
(from The Royal Scam)

Cloud, cloud, everywhere

So I got an iPhone 6 the other day. Bully for me, I can hear you say, but this isn’t about that. It’s about the fact that Apple, in preparation for iOS 8, changed the limits and functionality on their cloud storage offering, iCloud. With all the iOS devices in the house, a while back I had to pay for extra storage to enable backups for them all. That storage was just upgraded at no extra cost to 20GB. Time, I thought to myself, to check on all the cloud storage subscriptions I actually...

Read more »

Saying goodbye to Eurydice

A couple of weeks ago, just before we disappeared off on vacation, Eury crashed. Before you start imagining car wrecks and the like, let me explain that Eury was our oldest cat. He was 18 years and 4 months old, which, for a cat, is way up there in terms of age. And by crashed I mean that, finally, all of his ailments – and let me tell you this cat had them all, pretty much – caught up with him and there was nothing more we could do. Eury was one of the original two kittens we bought...

Read more »

Restoring old negatives: the bad and the not quite so bad.

As hinted a couple of blog posts ago ( From ‘57 to 57 ), I’ve been resurrecting a stash of old film negatives from those halcyon days when I first started learning about photography after I’d bought an SLR. And by “resurrecting” I mean separating them from the stuck-together block some of them had become. A couple of people have asked me what I did, so a quick post is in order. In essence, the film processing service I used back in the day (30-35 years ago, note) put...

Read more »

Amsterdam canal houses

Back in April this year, we went and stayed in Amsterdam for a few days. We were at the Hotel Pulitzer on Prinsengracht – although our room overlooked Keizersgracht at the rear of the hotel – and one of our pastimes was to look at the canal houses, which ones we liked, which ones not so much. On the last day we were there, I suddenly decided that I should photograph a whole bunch of them as we walked around, and create a collage of the best houses. Of course, it was that day it decided...

Read more »

From ’57 to 57

A couple of months ago I celebrated my birthday; it happens every year. This is not about that event particularly, but more about changes over time and how I’ve almost become inured to the wonder embodied in those changes. To take a quick example: I was born in the same year that the Space Age started. In October of that year, the Russians launched Sputnik 1 (Спу́тник-1). These days, although truth be told I hardly think about it, I use several effects of that momentous launch daily. No, I’m...

Read more »

The rise and fall of my Jungle Disk

Quite a while ago (I was surprised when I looked it up: 2008) I subscribed to a backup app called Jungle Disk. The interesting thing about it was (a) it used Amazon S3 (then relatively new) as a backup store, and (b) you subscribed to it at a rate of a mere $1 per month. So, in essence, it’s an online backup program and it allowed me to keep documents and photos – about 6 folder trees in all – somewhere else than a local backup drive. It was the “house burns down” option...

Read more »



About Me

I'm Julian M Bucknall, an ex-pat Brit living in Colorado, an atheist, a microbrew enthusiast, a Volvo 1800S owner, a Pet Shop Boys fanboy, a slide rule and HP calculator collector, an amateur photographer, a Altoids muncher.


I'm Chief Technology Officer at Developer Express, a software company that writes some great controls and tools for .NET and Delphi. I'm responsible for the technology oversight and vision of the company.


Validate markup as HTML5 (beta)     Validate CSS

Bottom swirl