April 2006 Archives

The Windows XPerience

| No Comments

I needed to read some PDFs on the Windows XP I use at work for testing. (Fortunately it is not my primary workstation.) So I go to the Adobe site and click on the "download Acrobat reader" link. And I was reminded yet again about the Windows user experience, and some of the many reasons I don't like it. How do people put up with this crap...?

Having clicked on the link to download Acrobat Reader, it downloaded a 6.8MB installer, which didn't take too long, and was a reasonable size for a viewer. But when I double-click to run the installer, it turns out that it is some download manager utility, and not the Acrobat program at all. It then proceeds to download a further 28Mb of stuff. Finally, when it has finished downloading and starts the installer, it comes up not with Acrobat but with a Yahoo Toolbar installer!

I never intended to download a "Yahoo Toolbar", I never asked for it, and there was no warning it was going to happen. I have been duped! And I'm sure that many unsuspecting users would simply click "Next" without reading just what it was they were installing - or what kinds of insidious EULAs they were agreeing to. I cancel it, expecting the real Acrobat installed to finally come up.

But - no. Then it comes up with a "Photoshop Album Starter Edition", whatever that is. I certainly never asked for it, and I didn't want to download the 6.8Mb for that either. I click Cancel, and after some nagging, this unwanted intruder goes away.

Finally, Acrobat itself gets installed. So now I finally have Acrobat Reader - yay. And it is taking up 96.6MB on my hard drive. For a viewer, fer crying out loud! Can you say "bloatware"?

To compare, the free/open xpdf utility for X/Unix systems, is only 1.6Mb. And on the Mac, the Preview tool is 3.0Mb. (This doesn't include system libraries already installed of course.)

Is it normal for Windows users to be hijacked like this? To be hoodwinked into installing extra toolbars, gizmos, useless junk to clutter up your systray? It's no wonder people end up with so much crap installed. I am certainly surprised that a large and reputable vendor such as Adobe would resort to treating their users in this way.

Is this the experience you want as a user? Or would you like a little respect?

Okay, breathe slowly... I think I'm calm now...

What went wrong?

| No Comments

Writing good diagnostic error messages is hard. But it's worth the effort. And there's also some side benefits if you take the time, and it's not just avoiding hate-mail from your users.

How many times have you run some software, only to have it fail with a message:


Unknown Error: -3

[Abort] [Retry]

There should be a third button: "Punch the developer who couldn't be bothered to put in a decent error message."

But it's actually hard to write good error handling, and that's why so many people don't. Either that, or they are coding demigods who are so confident in their code they know it will never fail. But a quick browse of the UI Hall of Shame is enough to prove the point that even proprietary commercial developers goof up.

I'm just now writing a tool to import data into our software from CSV files. And the variety of flavours of CSV, combined with different field labels, column ordering, field aliases, is staggering. Add to that some fields are required, some optional, some should be ignored, then there are user-defined columns that come after the required ones we know about. So a simple task as "import from CSV" turns out to be pretty complicated, and giving the user meaningful feedback to guide them to the problem is particularly tricky.

So to make things easier for the user, I've tried to be really friendly and provide comprehensive diagnostics. This means checking every possible way things could go wrong, and ensuring that you have sufficient context in your code at each point to be able to provide meaningful errors.

So - which error message would you prefer to see when importing your data?

  • Error: invalid field DS5301
  • Unexpected field 'DS5301' in header at column 11. Looking for required fields, still haven't found: id, family.

It takes time to craft an error message that reads like an actual English sentence, and conveys not only what went wrong but where and why, and what the software was expecting to find instead. Error codes might be useful for the developer, but it's useless for the user.

So the bonus you get if you do write decent error messages? It guides you to write your test cases, of course! So after I added the above check to ensure all the required fields had been read before the user-defined fields, I wrote a data file that would trigger that error. Now I've got regression testing, and I can make sure that the error gets picked up. All this work for those ungrateful users...

Behold the BuildBot!

| No Comments

I'm working on some software that needs to run on multiple platforms. Periodically doing manual checkouts on each system, building, testing, fixing, yada yada, it all gets a bit tired after a while. So, being a lazy hacker, I decided to automate things, and went off in search of a tool.

Being a huge Python fan helps, and it didn't take long at all before I came across BuildBot, which happens to be implemented in Python, but can drive just about any sort of project you care to throw at it. I installed
yesterday, and I'm well impressed.

Installing BuildBot is pretty easy (the included instructions cover pretty much all you need). It's not much beyond installing the dependencies (ZopeInterface and Twisted), then doing the old two-step, of untarring the source then:


python setup.py install --prefix=/usr/local

The configuring, that is the tricky bit - and necessarily so, since that is the part that is completely dependent upon your own source code, configurations, build styles, etc. Fortunately, BuildBot is extremely flexible and provides support for all sorts of different build styles and configurations. For example, you can configure it to do a nightly checkout of the subversion trunk, build it, and run all the unit tests. The results from each step are logged, and you can see the status of everything in a colour-coded web page.

The architecture is simple: you have a central Build Master, which controls everything. It is responsible for monitoring for changes, producing reports, handling emails, scheduling jobs, sending out build jobs, collating the results, and so on.

You have one or more Build Slaves, which connect to the build master (in a star topology) and build jobs as requested. So you can simply set up a slave on each platform you wish to support (in our case it's Solaris, Linux, Mac and Windows).

I had a basic system up and running pretty quickly, and spent a few hours getting the settings right for our project. It's important to sort out environmental considerations, as getting things set up to auto-build can often highlight assumptions about where files are to be found, environment variables that are (not) set, and so on. Fixing all these issues however makes for a better system all round.

I did have one nasty problem, however - for some reason, on Solaris the the slaves were unable to detect when the child processes had exited, so it looked like they were hanging. The solution was to disable pty (pseudo-tty) support in the slave's .tac file, thus:


usepty = 0

I found this article on BuildBot particularly useful.

Emma & Gavin - 2006

| No Comments

Wedding Details

Here you will find all the latest details on our wedding arrangements, which is updated from time to time as required.

The Day

Oak Tree
  • Saturday the 20th of May 2006
  • Ceremony at 5pm sharp under the old Oak Tree
  • Wet/windy weather alternative: The Barrell Room
  • Cocktails from around 6pm in the Restaurant

The Venue

Fulford Road Wonga Park 3115

Kellybrook is a lovely winery in the Yarra Valley, a leisurely 40 minutes drive from Melbourne.

Directions

We have tried to make these directions comprehensible, but they are no substitute for your own map!

  • Get yourself to Warrandyte, Map 35 C2.
  • You will most likely be on Heidelberg-Warrandyte Rd, which you follow east through the shops, where it changes at the little roundabout into Ringwood-Warrandyte Road. Keep going for about 1km.
  • At the roundabout, take the left to Jumping Creek Road.
  • Follow Jumping Creek Road for a few kilometres.
  • Turn left into Dudley Road (just after Yarra Rd on your right), follow around a few bends.
  • Turn right into Fulford Road (the next turn after the primary school on your left), and you will see the vineyard up on the hill on the left. Follow the road up the hill and around the bend to the left. You will see the sign and entrance just after the building.

  • Parking is down the right-hand side of the restaurant.

For people with limited mobility: There are a number of stairs between the Oak Tree and the Restaurant. You can enter the top of the property at street level and proceed directly to the Oak Tree around the left side of the restaurant. Please contact us for more information.

Useful Resources

Cocktails

We look forward to a warm evening in the Restaurant, in the form of a cocktail reception. The meal will be largely vegetarian - please let us know if you have any particular dietary requirements.

Wedding Registry

We are in the process of establishing a registry.