Archive for March, 2008

Luke, if you’re reading…

The book was called The House of God.  Nervousness makes me forget things!

Damo

I like this codepath

if (thisWeekend.Contains(easter))
{
  thursday = friday;
  tuesday = monday;
}

IE8 and Standards

Joel on Software has an absolutely magnificent article explaining the difficult situation Microsoft is in with Internet Explorer 8.

Essentially, he explains how and why the web browser is in a no-win situation. Microsoft can enforce “standards” and allow existing web pages to break if they don’t meet the standards (something no browser has done before) or they can continue to be backwards compatible and support all those workarounds people have been putting in for years to make-it-work-for-browser-X.

If they choose the first option, which is their current plan, they’ll have a hard time convincing the developers of all those existing websites (if they’re around any more) to update their sites to conform to the HTML4 and CSS1 standards amongst others. If not, all those webpages will work, but what’s the point of standards if they’re not enforced?

It’s a longish article, but it’s very well written and it provides great insight if you’re a web developer.

Damo

Transparent wireless

Let’s be honest, wireless connectivity is awesome. It’s fairly easy to set up, and it basically means you can roam all over the place while on the Internet.

I have a secure wireless LAN set up at home, another one at work and even another one accessible to me at uni. In case that isn’t enough, my mobile phone has a wireless broadband plan and I have a Vodafone USB modem from work for mobile broadband as well. Occasionally, if I’m sitting at my desk at work, I’ll plug my laptop in just to get that little bit more speed.

It’s convenient that I have so many wireless connections available to me, but it’s not as convenient as it could be. And that’s what technology is all about, right?

My laptop can connect to one of three WiFi networks, and they usually connect pretty transparently if they’re available. I turn the computer on, it finds a known wireless network and connects. The uni connection is the only exception and that’s just due to the security they’ve got in place. If need be, my laptop can also connect to one of two mobile broadband connections - one through my mobile phone via Bluetooth, and one via the USB modem. In these cases, I have to tell it to connect and provide the credentials every time.

Wouldn’t it be good if I could just set up all of these connections once and let my laptop decide what connection it wanted to use? I’d happily provide credentials to use for each connection and I’ll even order them in terms of preference.

I’m no network engineer, but I’m sure it can’t be too difficult to write some software to handle all of this for me? Identify which connections are available, use the one with the highest preference, and fail-over relatively silently to an alternative if it becomes unavailable. If it becomes available again, then reconnect and start using it.

Has anyone encountered a system that can do this nicely?

Damo

Efficiency is all perception

A couple of things today prompted me to write about this. The first and main one was an article on Coding Horror about actual vs perceived performance.

The premise of the article and the study it references is that a user’s perception of the speed of an operation is often more important than the actual speed of the operation.

This all harks back to a core software designer rule - effective feedback.

In short, if a user can see that something is happening, they’re less concerned with the time it takes. This realisation no doubt led to the plethora of spinning images around the web that let you know an asynchronous request is happening. Does the rotating wheel indicate how long it will take or whether it’s actually doing anything at all? No, of course not, but it is effective feedback and it inspires confidence from the user.

One of the first bits of code I wrote when I arrived at my current job was a function in an ASP.Net application that retrieved a credit report for a client. Its efficiency relied 100% on the efficiency of a server somewhere in New Zealand (there’s now an Australian server). I didn’t (and still don’t) know before request time whether it will be available or how long the request will take if it is. I know very little about the service apart from the message it expects and the response it will hopefully give me.

At first, there were a few complaints about how long the function took. Unlike everything else in the system, it didn’t respond straight away. On average, it only really took a few seconds, but it was long enough that some users wondered what was happening. Predictably, when I added a small chunk of javascript that showed a “Retrieving credit file” message and a pretty rotating circle, the complaints stopped. Because something was happening while they were waiting, albeit a simple animated gif, people were less concerned with the time it took.

I did say there were two things that prompted this post didn’t I? The second was a discussion I was having with a mate about efficient methods of storing, retrieving, and sorting data. It made me think that even if you refactored your code to cut down your search from say, O(n2) to O(n log n), would your users be any happier than if you added some javascript to distract them? It’s often worth investigating I think.

Damo

Finally…

If you’re sick of constantly hearing predictions of what technology is going to be able to do in the future only to get there (to the future) and find yourself wanting, check this out:

http://www.legitreviews.com/article/475/1/

Yeah, that’s right - it’s a peripheral for a computer that READS YOUR MIND!!

Now where’s my flying car?

Damo