Archive for September, 2007

Vista, 3DMark, ATI Crossfire and hanging …

Sunday, September 30th, 2007

This weekend I setup a pile of new computer bits, in fact the only old piece I kept was my case.

I was very excited to get it all together with the help of my friend Ryan* (Consortium Group) and then to run a 3DMark to find out just how much faster this beast was going to be compared to the old parts I had. However, the 3DMark06 application would inspect my system and then hang, which was annoying. (See bottom for fix details).

Luckily Ryan is an expert at finding solutions to these sorts of things and he surfed the net for a while and came back to me with a fix, after which I was able to run the 3DMark 06 tool and get a score of 13701 marks. This blew me away since my last score was 2102. Wow, what a difference. Then again, with the new bits it was to be expected.

Why am I getting all these new bits? To run what promises to be the most amazing First Person Shooter (FPS) I have ever seen www.incrysis.com. I played their last game Far Cry for ages and it was simply outstanding in game play and game engine. These guys are certainly the best in the business in my eyes.

So what was the fix for the 3DMark06 hang ?

  1. Copy attached file to your hard disk,
  2. Rename the file from a .txt to a .dll,
  3. Make a backup of the existing Direcpll.dll found in path that follows,
  4. Copy the new file to your windows/system32/futuremark/MSC folder

So what are the new bits ?

  1. Intel Core Duo E6850
  2. 2 x Asus ATI2900XT video cards in crossfire
  3. 4G DDR2 RAM
  4. Asus P5K mobo

Download Direcpll.txt

*If your in need of computer hardware and software support in the Melbourne Area, then make sure you call the Consortium Group and ask for Ryan. You wont regret it.

Computer Nostalgia ….

Friday, September 28th, 2007

I mentioned the Osborne and Kaypro potable computers to a friend and he looked at me blankly. So for those who remember them or for those who want to see what us “older” folk have used, see this Tour the Digibarn Museum: Includes a Sol Terminal Computer, Commodore PET and Xerox Alto

see it here

The Melbourne Groovy User Group …

Sunday, September 23rd, 2007

The Melbourne Groovy User Group is holding their first meeting on Monday 1st October at the Aegeon offices and it promises to be a corker !!

We have Paul King (co-Author of Groovy In Action) presenting and some words from other important influential groovers, like Guillaume Laforge
(Groovy Project Manager
).

It is all happening from 6:30pm at the Aegeon office and your welcome to come along. However, if you would like some pizza then please let me know your coming.

Aegeon is on Level 5, 10 Queens Rd, Melbourne. The building with the big ‘G’ on it.

If your wondering what this groovy thing is, then read this.

designing the obvious …

Sunday, September 16th, 2007

I’ve just read “designing the obvious, a common sense approach to web application design” by Robert Hoekman, Jr. and it’s fantastic. I wish I had read this book much earlier in my career and I would have made much better UI’s. This book is a must read.

Robert goes through what makes an obvious design with some good examples but what is great about his book is that he then continues on with how to apply some rules to your designs to make them obvious.  Most of the books I have read on the UI stop after the rhetoric on what is not good about UI’s this one doesn’t which makes it stand out from the crowd.

Robert discusses the qualities of a great application and then how to turn those qualities into goals. “To create software that does the following:

  1. Conforms to the way users interact with the web, but focuses on the activity instead of a specific audience.
  2. Has only those features that are absolutely necessary for users to complete the activity the application is meant to support.
  3. Supports the user’s mental model of what it does.
  4. Helps users get started quickly so they can become intermediate users as soon as possible.
  5. Makes it easy for users to recover from mistakes and difficult to make them in the first place.
  6. Has uniformly designed interface elements, but leverages irregularity to create meaning and importance.
  7. Reduces clutter to a minimum.

The remaining eight (8) chapters expand on a framework for obvious design, with some real gems of advice and examples. I’d be very surprised if you bought this book and were disappointed with your purchase. If your designing UI’s and Web based UI’s in particular then please get and read this book.

So you know what to expect, the remaining chapter titles are:

  • Understand Users, Then Ignore Them
  • Build Only What Is Absolutely Necessary
  • Support the User’s Mental Model
  • Turn Beginners Into Intermediates, Immediately
  • Handle Errors Wisely
  • Design for Uniformity, Consistency and Meaning.
  • Reduce and Refine
  • Don’t Innovate When You Can Elevate

grails test-app fix for tests in packages (sub-folders) …

Friday, September 7th, 2007

I wrote some unit tests for my grails app that were in packages and therefore not in the root test/unit folder. These were not executed when I ran ‘grails test-app’. This was annoying so I looked further and found that this wasn’t supported just yet, so I made a fix.

In TestApp.groovy in the scripts folder, there is a routine called resolveTestResources(pattern resolver) which is called from two places within the file, one on line 193 and one on line 229. The call looks like this:

def testFiles = resolveTestResources { “test/unit/${it}.groovy” }

This call needs to be changed to:

def testFiles = resolveTestResources { “test/unit/**/${it}.groovy” }

This will include all the files in the root of the folder as well as sub-folders.

NOTE: If you have a file called MyTests in the unit folder and MyTests in the integration folder then there will be problems. I suggest you suffix your unit tests as UnitTests and your integration tests as IntTests or something so that duplicate test script names don’t cause problems. The tests also get treated a scripts so any package statements in your tests cause problems as well. I had to remove them.

I’m sure all of this will be fixed in the next grails release but this should get you moving. Im using grails 0.6 currently.

An Agile Process: Iterations, Story Boards and Increments …

Tuesday, September 4th, 2007

The web project project I’m working on is delivering but not without some hiccups along the way, probably all caused by me. These hiccups caused friction in the team, some stress and some late nights and weekends for me, all of which we could have done without. I’m not going to describe these hiccups in detail but what I am going to do is detail how I will approach the next project to ensure things go smoothly, incorporating things I do now, things I will do differently and things I will try to improve in the current process. I hope you find this process or parts of it useful for your projects.

A key to working with agility and responding to change is to ensure a small feedback loop. Getting something in front of the customer that they can play with and comment on in the shortest amount of time ensures that we spend the maximum amount of time delivering what they really want. Until the customer can use new feature X then the need for and the current shape of feature X is speculative. Speculation leads to waste, waste leads to less time for the other things and we start to spiral down from there, into a bog of stress and unhappiness.

Our feedback loop is an iteration of two weeks (10 days) where we work on stories and deliver them to the customer before the end of the iteration. Other teams I work with have an iteration of one week. Being able to discuss a feature in a time frame where the customer can keep all the details in mind and see it delivered with those details still fresh would be ideal, so I will try one week iterations in future. Taking a user story from a card to working software that the customer can actually use in an iteration means that we need to make sure we don’t bite off more than we can chew and this is where incremental development comes into play.

The quickest way to do anything is not to have to do it but since we want to please the customer and they are unlikely to pay us for not doing stuff, we need to work out what to do. To do this I borrow from the Story Board approach, developed by the Walt Disney studio in the 1930’s. The idea is to draw scenes on separate sheets of paper and pin them up on a bulletin board to tell a story in sequence. Our scenes are the actions, processes and UI the user will follow and use in our application to fulfil a customer story. A story being a function that yields business value to the customer. I will take each story and with the customer we will discuss the story and create a story board. Since most everyone can draw on a whiteboard quicker than they can code this is the quickest way to get an understanding of what is required in a story and how that story will manifest itself in the application.

A story board is an efficient way to visualize a story but it doesn’t help us quantify small chunks we can deliver in an iteration. To do this we need to identify the smallest and simplest thing we can deliver that can be used by the customer and that we can add to in a subsequent iteration. By incrementally adding functionality to a story each iteration we focus our efforts on delivering without waste and a high level of focus. Anything that isn’t used immediately by the customer or is not mandatory to perform a function is a waste of effort in this iteration. To arrive at the smallest but usable deliverable for the iteration we need to continuously remove things until the customer says they can’t
perform their function without it or the application can’t function. For example, consider the parts of an application that maintain a list of contacts and what properties a contact must have to be usable. If the various properties of a contact are not currently used by another part of the application then they should not exist until they are. Laying out these properties on the UI for input takes time, time that
should be used elsewhere in this iteration. You might be thinking this is YAGNI on a micro scale and you’re right.

With the story board in hand, the minimal set of features and data we are ready to do our story. You may want to have a new story for each increment or you may want to have one story as an umbrella for all increments to the same story. I think we will go with the later option of an umbrella story. We will be continuing with a Test Driven Design and we will use a Behaviour Driven Design tool (jBehave, rspec, gspec) since this helps keep the language and behaviour tight around that used for the domain.

The loop isn’t complete until the code can be Continuously Integrated and I can’t stress enough how important CI is. Every time I have chosen to set up and use CI later in the project I have regretted the decision. I’m not keen to make this mistake again and CI is going to be in use from the word go. Our loop will include the CI of code every thirty minutes with an overnight deployment to the Test environment and an iteration end deployment to the customer preview environment. Essentially we are trying to get a story in-front of the customer on a weekly basis and keep that a regular occurrence. Continuous Integration isn’t the final piece in our loop as the loop must include customer feedback and our review of the iteration. This feedback piece is very important and will be included as a regular iteration start and end exercise on the chosen day. I haven’t discussed a release cycle since this is very project and customer specific.

A final important piece is to review the above after each project and adjust it accordingly. The process may need some adjustment during the project but I think that unless it is causing some friction then the process should be used for a few release cycles before being adjusted to give enough time for an adequate sample to be taken and a worth while alternative found to try next.