The user experience of blowing hot air

As someone who enjoys paying a lot of attention to detail and user experience, I’m always delighted by “they thought of that” moments when I come across it. This one took me 9 years to notice.

A couple of days ago I was in a 2005 BMW 3-series and I noticed something different about the climate system. It’s winter here in Australia so the temperature was set to the highest and the car was obviously warm, but there wasn’t any hot air blowing out of the face vents.

I was slightly puzzled, did a blower stop working? I toggled the face vent override button and it definitely blew hot air from the face vents, so I was slightly relieved it wasn’t broken, but turning off the button defaulting to automatic distribution definitely stops the air coming out of the face vents.


In this car, the air distribution can be independently fine-tuned to provide about 5-degrees of intensity for each of the windscreen, face and feet vents.

Looking at the air distribution configuration screen, it confirmed that the face vents were indeed off for some reason. At 28C (82.4F), some air went to the windscreen and most air went to the feet.

This was extremely odd because I was very confident the car used to blow air onto my face with the default setting.


After a bit of experimentation, I then noticed when I turned down the driver-side temperature, the air distribution changed along with the temperature. Huh?

At 16C (60.8F), most air went to the face and some went to the feet. This was what I had remembered to be normal.


Changing the temperature more confirmed this behavior.

But now I was curious, why does it do this? Unfortunately neither the BMW user manual or website made any references to this.

I then come across several anecdotal forum posts. According to those people, this is actually a subtle BMW safety feature to ensure hot air is not constantly blown on the driver’s face which might lead to driver fatigue and increases the likelihood of falling asleep at the wheel.

Although I’ve tried to get in touch with someone at BMW to confirm this, I’ve yet to hear anything back. (Note: If anyone knows someone at BMW, please pass this on.)

In the meantime, I’m inclined to believe this because I know just how much attention to detail BMW engineers put into their cars and this sounds like something they would have thought of.

The 12 step process to download Microsoft SQL Server Express 2014

The Microsoft SQL Server team has many goals. One of them is to create an industry-leading, high-performance, scalable and resilient database software. The other is to make said-software difficult to download.

In previous years, the team has employed the confusing file-name strategy. But this year, with SQL Server 2014, they have done their best work yet.


Step 1: I guess I want to “evaluate” SQL Server 2014 Express.

The hip developer guy not using his ergonomic Aeron chair instead opting for a standing desk certainly looks like he’s enjoying his SQL Server.


Step 2: Good to see there are now explanations for each of the download versions, but the “download” button turns out to be a con. Every single one of the five buttons all link to the same URL. (Hint: it’s not the actual download URL)

The two guys at the front of the office seems to be enjoying their Aeron chairs. They’re not having any of this standing desk business.


Step 3: This is definitely not the download page but there’s a green button so I must be on the right track. I get another chance to read about all the different versions of SQL Express in case I’ve changed my mind from a second ago.


Step 4: Wait, I have to log in to download this?



Step 5: Why am I filling out a form with my name and email address? No I don’t want any marketing emails from Microsoft or Microsoft’s partners. Of course this is fruitless because they’ll email anyway. “By Downloading SQL Server 2014 Express software, you may receive emails from Microsoft with SQL Server 2014 Express resources”.

And at the top of the page “if you do not want to submit your information, click Cancel” might sound like a good deal but you’ll just get sent back to the previous page without a download. It’s Microsoft’s way or the highway.

Oh and don’t forget which version of SQL Server Express you want to download. Of course there’s no description of what the versions contain on the page that actually matters.

step 6

Step 6: I want the 64-bit version. I have no idea what version “Other” might be and at this point I don’t care.

step 7

Step 7: For some reason this list selects the first item by default which happens to be “Chinese (Simplified)”. I had to double back to this page since I assumed English would be the default, like most people I would imagine. 我的中文不是很好。

step 8

Step 8: Yes! I’m done with the forms. Wait, where is my download? I need to download Akamai what? Why can’t you just serve the file over HTTP like a normal web server?


step 9

Step 9: The ultimate bait-and-switch. You thought you were downloading SQL Server, now you’re downloading Akamai NetSession. And “my_downloader_installer.exe” totally sounds like a virus.

step 10

Step 10: More button clicks.

step 11

Step 11: Of course this inconspicuous app wants outgoing firewall access. And I finally get to choose where to save “SQLEXPRWT_x64_ENU.exe”, using the legacy Windows save dialog without the handy sidebar.

step 12

Step 12:


Even after installing the almighty “downloader”, I have to track the progress of this download on a web page. What!?


Update 18/6: Microsoft’s Scott “Handyman” Hanselman has taken matters into his own hands and registered which points to a simple page of the different versions and direct HTTP download links.

MSN Messenger and AIM instant messenger war: reverse engineering and sabotage

Found this amazing Microsoft story from Twitter told first-hand by David Auerbach, a former Microsoft developer in 1998 on the MSN Messenger Service team. It’s a sleuthing story of back-and-forth reverse engineering by Microsoft and sabotage by AOL, all for one simple feature – chatting with AOL Instant Messenger friends inside MSN Messenger.

It’s a bit long but a great weekend read.

After we finished the user part of the program, we had some down- time while waiting for the server team to finish the Hotmail integration. We fixed every bug we could find, and then I added another little feature just for fun. One of the problems Microsoft foresaw was getting new users to join Messenger when so many people already used the other chat programs. The trouble was that the programs, then as now, didn’t talk to one another; AOL didn’t talk to Yahoo, which didn’t talk to ICQ, and none of them, of course, would talk to Messenger. AOL had the largest user base, so we discussed the possibility of adding code to allow Messenger to log in to two servers simultaneously, Microsoft’s and AOL’s, so that you could see your Messenger and AIM buddies on a single list and talk to AIM buddies via Messenger. We called it “interop.”

Our client took the surrounding boilerplate and packaged up text messages in it, then sent it to the AOL servers. Did AOL notice that there were some odd messages heading their way from Redmond? Probably not. They had a hundred million users, and after all I was using their own protocol. I didn’t even send that many messages. My program manager and I thought this little stunt would be deemed too dubious by management and taken out of the product before it shipped. But management liked the feature. On July 22, 1999, Microsoft entered the chat markets with MSN Messenger Service. Our AOL “interop” was in it.

So I took the AIM client and checked for differences in what it was sending, then changed our client to mimic it once again. They’d switch it up again; they knew their client, and they knew what it was coded to do and what obscure messages it would respond to in what ways. Every day it’d be something new. At one point they threw in a new protocol wrinkle but cleverly excepted users logging on from Microsoft headquarters, so that while all other Messenger users were getting an error message, we were sitting at Microsoft and not getting it. After an hour or two of scratching our heads, we figured it out.

The messenger war was a rush. Coming in each morning to see whether the client still worked with AOL was thrilling. I’d look through reams of protocol messages to figure out what had changed, fix the client, and try to get an update out the same day. I felt that I was in an Olympic showdown with some unnamed developers over at AOL. I had no idea who my adversaries were, but I had been challenged and I wanted to win.

Image credit: Robert Ian Hawdon

Google Chrome 35 beta adds much needed DirectWrite font rendering on Windows

Web designers rejoice. The jaggies are gone!

Fonts in Chrome on Windows no longer look like they’re from the XP-era. Thanks to a new experimental flag added to the latest version of the Google Chrome beta (35.0.1916.27 beta-m), Chrome is finally rendering fonts with the advanced DirectWrite font rendering engine.

For a before and after comparison, here’s one I compiled with the website. The effect is most noticeable on big curves like the “a” and bends of the question mark.


Simply open the Chrome experiments screen chrome://flags/#enable-direct-write and “Enable DirectWrite“, then relaunch Chrome for the change to take effect.


Making a Google Glass app with C# on Xamarin: PTVGlass

Missing the train by just a minute is mildly frustrating. Every time I see the train roll away from the platform as I walk towards the station makes me wonder what if I had walked a little bit faster or paced up the escalator. (This dilemma keeps me up at night)

Of course there are plenty of cool mobile apps with public transport timetables but pulling out a phone and fiddling about while I’m walking is more trouble than its worth.

After two nights of hacking, I can now access Melbourne’s bus, train and tram timetables while I’m walking to the station with voice and geolocation, thanks to my Google Glass app PTVGlass! I’ll be the Glasshole shouting “trams near me” in the city.



Download the source code

I’m making the Xamarin/C# source code freely available on GitHub along with the Glass APK for sideloading.

Unfortunately I know the number of Google Glass Explorers in Melbourne will be in the single digits so this app has very little commercial value. I’m hoping someone can critique my code or be inspired to create more Google Glass apps.

Falling in love with Xamarin

A couple of weeks ago, the state government agency Public Transport Victoria released the first version of their Timetable API. I knew I just had to make an app for Google Glass. Except one problem, I didn’t know Java or how to write Android apps.

Unlike my previous Google Glass apps using the Mirror API which allows web developers to develop apps in the form of Glass push notifications, this particular scenario required a native GDK app which could be initiated through voice and menu commands.

I tried a good effort to quickly get my head around Android development, but the tooling and documentation was simply sub-par compared to C# and .NET development. I’m sure the Glass Development Kit would be a piece of cake for any Android developer but learning Java, Android and the GDK all at once was just too much.

In an amazing coincidence, around the same time rumors of Microsoft acquiring Xamarin floated. I wasn’t entirely familiar with the Xamarin product at the time, but my eyes opened when I saw they supported developing for Google Glass using C# and Visual Studio piqued my interest.

Even as a C# noob, I could appreciate the straightforwardness of C#. (Objective-C makes me want to cry.)

Android Screen Monitor (28)

Although I was skeptical of Xamarin Studio at first, I’m pleasantly surprised by the capabilities of the tooling. It was like Visual Studio Lite. Intellisense for the full Android SDK, multi-threaded breakpoints, variable explorers and integrated device deploys and debugging.

ptvglass debug

I have to admit the only weak aspect of developing with Xamarin is the documentation. Xamarin tries its best in its developer guides to provide an overview of the fundamentals in C#, but this is obviously no match to the official documentation in the native language. Surprisingly though StackOverflow was quite saturated with Xamarin questions and answers which helped with the small quirks here and there.

Unfortunately the current Xamarin licensing cost (upwards from $299 to $999 a year) would scare off most hobbyist developers. If the rumors of Microsoft’s acquisition are true, I certainly look forward to Microsoft opening up access for this amazing technology and tools to more developers via MSDN and the Visual Studio Express programs.

Microsoft already has the best developer tools on Windows. Now imagine if their tools were also the best in class for the competing but dominant mobile platforms.