You know the Linux desktop is going mainstream when…

30 December 2007

…when you start seeing Linux boxes for sale in your local electronic goods store.

I went to The Good Guys in Campbelltown today, looking for a Bluetooth headset, when I noticed that one of the Acer laptops on display had a familiar picture of a satellite in space on the screen. Curious, I moved the mouse slightly, and discovered that it was running Ubuntu 7.10!

The shop assistant that came up to us said that the laptop only cost $699, and it had been selling extremely well. The laptop appeared to be fully configured, with its wireless adapter appearing to be configured by ndiswrapper.

Flash 9 r115 supports MPEG-4

27 December 2007

I just discovered that Flash 9 r115 (a.k.a. Update 3) now supports MPEG-4 video streaming, meaning you no longer have to use the not-so-crisp FLV format.

IE8 will pass the Acid2 test

20 December 2007

According to the Internet Explorer blog, IE8, currently in development, passes the Acid2 test. This is great news for everybody: web developers and web users in the general public.

Sorry folks

16 December 2007

I’ve decided I no longer want to use my blog feed with FeedBurner, but unfortunately, they only offer redirection to my main feed for 30 days, so any subscribers to my blog will need to manually change their feed subscription to the following URL:

http://jeremy.visser.name/feed

New subscribers are, as always, welcome. :)

Gmail uses JavaScripty permalinks

12 December 2007

Gmail, the awesome webmail service from Google, has been rolling out a massive code refresh over the last couple of weeks.

Messages are now prefetched, so when you click an email conversation, it comes up straight away — no waiting for it to load — which is very pleasant. Also, they have a revamped contacts manager, which looks pretty slick (but is not very intuitive to use, as the buttons are all in the wrong positions). But my favourite feature as a result of all of this is the addition of hash links to the address bar.

If I go to, say Contacts, in Gmail, the URL in my address bar will appear as:

https://mail.google.com/mail/#contacts

If I then go to, an email conversation, it will look something like this:

https://mail.google.com/mail/#inbox/116cdf2dbd05259b

If I bookmark those links, when I open the browser, Gmail will open in the right page.

Previously, Gmail kept the same URL (https://mail.google.com/mail/) for no matter where you were in the site, because everything was loaded by JavaScript on the fly, and they couldn’t be bothered about making “permalinks”. This was a metaphorical nightmare, because if you navigated to a particular email, bookmarked the page (Ctrl+D), then came back later, Gmail would unceremoniously dump you back to your Inbox, leaving you bewildered as to what happened.

A lot of people familiar with today’s web applications tend to have an attitude of Well, duh! It’s a web application. Of course you can’t bookmark stuff — it’s all JavaScript. However, that’s only because today’s web savvy people have simply learned to accept this unintuitive behaviour as the norm: if you try and bookmark a page in a web application, it’ll probably break. As Gmail has now shown, this is preventable.

Hash-links don’t actually cause page reloading. If, say, Gmail changes the URL in your address bar from https://mail.google.com/mail/#contacts to https://mail.google.com/mail/#settings, this will not cause a full refresh, because only the part after the # in the URL has changed.

Hash links are normally used for navigating to specific parts of a document. For example, if I had the following in an HTML document:

<p id="conclusion">In closing, I look good in red.</p>

The following URL would cause the browser to automatically scroll to the paragraph:

whatever.html#conclusion

However, hash links don’t necessarily have to work like that. Web applications like Gmail can simply use the bit after the # for storing little bits of information, like what page you’re on. It’s very easy to do in JavaScript:

var split = document.location.href.split("#");
var hashstuff = split[1];
// then, you do stuff with hashstuff