The Misleading Error Message Strikes Again
We've got a stock standard Windows 2008 virtual hard drive image at work that I wanted to make some additions to and generally polish up into a decent developer image. The install media was the "Windows Server 2008 Datacenter, Enterprise and Standard (x86) - DVD (English)" ISO sourced from MSDN.
I noticed that the image had not yet been activated, so I set out to rectify the situation. Hopping into the system settings in control panel, I navigated down the the section on product key information and clicked on the link to activate windows. Unfortunately this process errored out with the following message:
Code: 0x8007232B
Description: DNS name does not exist.
I immediately checked network connectivity. Can I get to google? Yes. Can I resolve MS addresses? Yes. Hmm.
Then I happened to notice some text in the bottom right hand corner of my desktop:
Windows Server(R) 2008 Standard
Evaluation copy. Build 6002
Evaluation copy? That means that my product key is not going to be valid. So I grabbed a new product key from MSDN, entered that in and tried the activation process again. Success!
After all that I still can't figure out what a DNS error has to do with a product key being invalid. I would have been more than happy with something along the lines of "Unable to activate due to invalid product key". They may as well have told me that activation failed due to insufficient vegemite.
Get Back
I've been using the Firefox 3.0 beta since I upgraded to Ubuntu 8.04, as it came as a standard package, but until now I had no idea that version 3.0 had a significantly different UI from 2.0. In fact, I only found out when I saw recent Flickr posts showing a Firefox comparison chart with a list of "advantageous" features. One in particular stuck out:
Large "back" button, the result of decades of market research
Large back button? I couldn't see a large back button on my Ubuntu install, even though I was running the latest 3.0 release. What were they talking about?
After installing Firefox 3.0 on my Windows 2003 machine at work I soon found out: They've enlarged the back button, presumably because it's the most commonly hit icon in the tool bar, and it looks pretty cool. I must say that I don't use the back button much, I'm more of a "delete key == back" kinda guy, but it's a nice touch.
Apparently there's a bit of backlash against this new feature, but at least they're trying. It's certainly less jarring than IE7's "hide the menu" approach to UI innovation, and it makes quite a lot of sense from a practical point of view.
I've now upgraded my Mac and XP machines to Firefox 3.0, and I'm enjoying the new UI. As an aside, and regardless of John Gruber's list of gripes, I still think that Firefox 3.0 on the Mac is a huge step forward in comparison to what they had. Versions 2.0 and 3.0 are like chalk and cheese. But I digress..
So why didn't my Linux install have this spiffy new button? Well, it turns out that Firefox 3.0 on Linux is one of the latest applications to get the Tango treatment. Tango is an attempt to bring some order to the world of open source applications by giving them a sense of consistency. This is actually a great idea, and it's done wonders for applications such as OpenOffice.Org and The GIMP, which now look somewhat respectable. There's a showroom full of projects that have had a Tango related makeover, and most of the featured applications are much better off with the new icon set.
This is all well and good, but what about Firefox? It's probably the biggest open source project in next to Linux itself, and yet it's not yet mentioned in the Tango Showroom. Surely there's a reason for this?
Well, a potential reason becomes fairly obvious once you actually open up the browser. The very first page that pops up has a picture of what the new theme looks like on Windows Vista, which is a stark contrast to what you are seeing in your native browser window.
See what I mean? The "standard icon" idea that has worked so well for OpenOffice.Org, The GIMP and VMWare Workstation has given us a fairly plain browser that has lost all traces of the innovation that the Firefox team were trying to implement. It looks pedestrian and boring, in fact if it wasn't for the deli.cio.us plugin icons I think I'd never get any work done, as a mere glance at my Firefox toolbar would send me straight to sleep.
It's sad that the most interesting, and therefore the one most likely to draw your attention at a casual glance, icon in the standard set now being the home icon. Although it is much more visually appealing than the plain forward and back arrows, it's a button that I can't remember ever clicking. Not even once. There are no paint brushes or printers to mix things up and keep your eye from settling on a useless feature that you've never wanted and will never need.
The great thing about Firefox is that you can apply a theme to get it to look however you want, so you would think that I would have no need to complain. I could just pick a theme from the Firefox website and would be happy, right? Well, yes and no. There's no "official" theme from Firefox that delivers similar functionality for Linux. There might very well be a 3rd party theme that will make my browser act like this (I did look for one without success, but that's another story altogether), but that still doesn't change the fact that the Firefox team have taken a vastly different approach to their Linux UI when compared to OSX and Windows, one which flies in the face of their obvious urge to innovate.
Alex Faaborg spoke about how they wanted to integrate with the host OS as much as possible on the proprietary platforms, and that didn't stop them from making the forward and back buttons look absolutely nothing like any native control on XP, Vista or OSX, so their integration manifesto couldn't have been that rigid. With Linux they have gone for total homogonisation, where as OSX and Windows have an "integrated, but with individual flair" feel. They haven't had all the life sucked out of them by a desire to conform to the nth degree. Standards are great, and are certainly needed on Linux given the diverse nature of the different window managers, but they shouldn't be used to stifle ideas and discourage creativity.
Your Application is CRUD!
How many times have you heard that a tool will save you heaps of time because it automatically generates some sort of CRUD layer for you? Depending on how good you've been for Santa you could get a generated data layer, service layer or even an entire application. Great! More time for coffee!
Well, yes and no.
Most of the CRUD frameworks organise themselves around the concept of creating, reading, updating and deleting a record in a database table. Administrative functions that exist to keep the actual line of business operations ticking over tend to fit this scenario perfectly. So now we have a bunch of frameworks and tools that can help us generate our generic record administration (users, customers etc) and reference data maintenance modules. What about the rest of the application?
Deciding to develop a CRUD Orientated Application (I can't believe I just coined the acronym "CRUDOA") lets you off the hook with regards to many important design decisions. You don't have to care about user experience or business process improvement, because your approach has already been decided. One thin facade around the database coming right up!
Most business users are concerned with performing business functionality. This usually takes the form of some sort of operation or work flow step that forms part of a larger process. They don't care whether the operation creates a record in 1 table or 40. This is usually where the aforementioned business process improvement and user experience analysis is required to make sure that your users don't end up throwing their monitors through the window in frustration.
Obviously if you have any desire to avoid having rotten fruit pelted at you by disgruntled users then you're going to want to put some thought into how they use the system. A generated framework that only has one paradigm (that of editing a row in a database table) greatly restricts your ability to do this. This effectively puts a generated CRUD layer out of the running for any part of the system that is not solely concerned with record maintenance. Then again if you're a developer working on Toad or SQL Server Management Studio then your entire system may consist of record maintenance, and you can probably stop reading this post as large portions of your system will be orientated around exactly that.
So if the real meaty bits of line of business applications are not suited to CRUDOA then why are we constantly looking for ways of aligning our architecture along that path? Why would be use a CRUD data access layer if we rarely perform CRUD operations? Why would we generate a CRUD service layer and UI to feed into that CRUD data layer if it's not a suitable paradigm?
We do this because the tools generate the code for us, and generated code is awfully tempting to use. After all, it's sitting right there and all you had to do is press a button to get a large section of functionality for free. Only it's not actually free, because our requirements often force us to stray from the golden path offered by the CRUD tools, meaning we then have to spend a large portion of our time trying to shoe horn a domain operation or cross entity transaction script into a CRUD approach.
The good news is that a lot of the tools only generate CRUD as a default. There's no reason you can't create an operation-orientated Rails site. You also don't have to accept the default SQL that is generated by your favourite data access layer. The defaults may be attractive at first, but unless we're happy to stay on the golden path (and end up with a mediocre application that has no user buy-in) we are going to waste time trying to stick a square peg into a round hole by modifying the CRUD framework to be, well, not CRUD.
Standing on the Shoulders of Giants
Last year I was working on a fairly large windows forms project that was heavily reliant on displaying large sets of information in grids. Most of the functionality in the system was exposed through buttons that had to sit somewhere near a grid. There were multiple main forms, each built around a central grid that displayed contextual information to the user. Basically, the users were going to be spending a lot of time staring at grids, so we had to get them right.
Now, grid related operations tend to fall into two categories:
- Grid Level Operations, which are sort of like a class level, or static, actions that may act on a collection of items, add an item to the grid, or do something else that's not directly related to a particular item. Sometimes these can be married up with a means of multiple selection, perhaps through a secondary screen or allowing multiple selection on the original grid (although I tend to avoid the latter, as it has a whole bunch of other implications like not being able to change your selection if you prompt the user for additional inputs etc). e.g. You may be looking at a list of current orders and want to add another order. This would be a grid level operation.
- Item Level Operations , which act on a single currently selected item. e.g. If you have picked a particular order record from a grid you may want to edit that record. This would be an item level operation.
Other applications that the users were being exposed to simply shoved all the commands together in a seemingly random order and placed them above or below the grid. This created a huge usability problem, as users were unable to tell whether a button performed a grid or item level action. Will the delete button delete the current item, or will it prompt for a list of items that you may want to delete?
I hit upon a solution fairly quickly: split the commands up, placing grid level actions on the left hand side of the grid and item level actions on the right. It worked extremely well, and we got a lot of feedback from the users about how easy our application was. I was really proud of myself for about 5 minutes, then I realised that I had seen it before.
In fact, I had been staring at an application that implements that very design paradigm nearly every day for several years. What application was I subconsciously channeling? Why none other than Valve Software's Steam. So much for my great original idea.
At the very least it was a validation of my design choice. After all, if it's good enough for the company responsible for Portal then it's good enough for me.
It also proved that inspiration can come from the most unlikely sources. I try not to think of it as being doomed to never have an original idea; that's just way too depressing to comtemplate. It's more that our thoughts will always be informed by the past and our surroundings. Besides which, if it's been done before then there's a good chance that users will be familiar with the concept, and familarity in UI breeds comfort, not contempt.
(Browser) Window Shopping
I love buying PC games on Steam, so much so that I haven't bought a physical copy of a PC game since Battlefield 2 came out. However, I still prefer to purchase DVDs, CDs and books from brick and mortar stores. Why the discrepancy?
It's simple: I can still enjoy shopping for DVDs, CDs and books in a physical store. I can easily lose an hour browsing in Boffins, and don't get me started on JB-HiFi or even 78 Records (back in it's heyday, at least). To paraphrase Barney Gumble, If they didn't close, I'd never leave.
The online equivalents just don't hold the same appeal. Sure, I like looking through Amazon, but it's nowhere near as fun as visiting a real book store. iTunes is the same. I like the idea of flipping through a large range of stock and happening upon a rare gem that I wouldn't normally think of buying. I also value having the physical copy, as I can rip the songs at a much higher bit rate than iTunes offers, but that's just me.
Games are a totally different story. In Perth the vast majority of games stores are Electronics Boutique franchises, and walking into one of these stores is an assault on the senses. Idiotic self promotion bombards your eyes and ears at every turn, which, when combined with the crowds and a sales approach that is geared towards pre-sales and trade-ins, makes for a terrible user experience.
Compared to that, shopping on Steam is bliss. No sales push, and no requirement to pre-order before you can buy anything released in the last year. There are obviously down sides, with bandwidth and the lack of a physical copy to on-sell being two that immediately come to mind, but the convenience combined with the currently insane AUD-USD Exchange rate more than makes up for any shortcomings. Besides, I tend to be a hoarder, so I never trade-in anyway.
The bandwidth issue is the only major downside. I am still hoping that iinet will team up with Valve to offer free Steam traffic much like they do with iTunes, but I won't hold my breath. My tiny 10/10 cap can cope with at least one Steam purchase a month, so that's enough for me to get a regular gaming fix.
There is potential for me to change my shopping habits. I'm not totally against the idea of buying physical copies of games, it's just that I've found the experience to be somewhat lacking. I have been hearing good things about Game Traders, so I'll have to give them a trial run to see if I can be weaned off of Steam. You have to love a place that stocks retro consoles/games, and even goes so far as to devote a significant amount of shelf space to the display of their retro stock. Perhaps an improved UX in a brick and mortar games store will be able to convince me to ditch the online purchases?



