Wednesday, December 10, 2008

Useful URLs

Whilst at the Sydney ALT.NET meeting this week last month (this post took far too long to write) I had two divergent lines of thought crossover and mashup inside my brain ...

office-sign-brain

I have been working for some months on a large corporate extranet portal and have been steadily fighting to keep the client focused on organising the site around, not my ideas of their organisation's needs, not their ideas of their organisation chart, but rather on the information needs of their clients, the people the portal is really there for.

This can be subtle, after all we all have good reasons for liking our ideas of how to organise the site. In fact we needed to make sure that the content authors from our client in fact could publish their content in a way that made sense to them (and thus organised around their needs).

Back to the Sydney ALT.NET group, as Ali went about explaining the usual routing options with ASP.NET MVC it occurred to me that ASP/ASP.NET developers have been doing the same thing with the organisation of their application URLs. For years they have been organised around the structure of the site as it is developed, with folders in the original web projects visible on the final website URLs. Even when we have introduced user-friendly URLs, and used ASP.NET MVC's routing we still manage to come up with ideas that fit our view of the business model and not our users' needs.

Aside: Do users even care about URLs?

This is a great question because it is at the heart of what I'm talking about here. My subjective view is that they do, I know that I do and I've seen people refer to the URL when trying to work out where they are within a site. However, many sites still have complex, unfriendly URLs and I think the average user (quite rightly) doesn't trust them.

Let's look at it another way, do you care about your users? If you do then you will want to help them every way you can, including making your URLs friendly and useful.

I suspect that the real problem is that we lack a clear design language, or paradigm for helping us work these things out. After all when you can do anything with a URL, who is to say what is right? Yet, if there is one thing the growth of the web has taught us, it is that UI standards grow out of users liking websites that follow common practices (e.g. shopping carts instead of bags, boxes or orders; horizontal main navigation menus as opposed to vertical, circular, drop down boxes, etc.). See Jakob's Law of the Internet User Experience:

"Users spend most of their time on other sites. This means that users prefer your site to work the same way as all the other sites they already know."

Similarly we may find that websites that follow RESTful URL paradigms with particularly clear syntax are seen as much more useful than ones where you have to rely on the menu structure or search. Here is a (contrived) online shopping example:

Old School (ASP.NET Webforms):

http://domain/shop/cart/default.aspx?Method=AddCart&ProductId=123

New School (ASP.NET MVC):

http://domain/cart/add/123

Most Useful (or not):

http://domain/buy/Sony/Walkman?quantity=1

Now I'm unhappy with that last example (perhaps going against the "shopping cart" paradigm muddles things), but my point is that we should phrase things the way the user sees them and not what suits our architecture/business model. Give the URL back to the user as another useful tool and see what happens!

Sunday, November 30, 2008

My new role at Elcom Technology

elcomlogo-highresSome of you might be aware that Elcom's Technology Director and my friend Craig Bailey is leaving Elcom Technology - in fact his last day was last Friday. As our Technical Director he was inspiring, motivating and a great encourager - he let us know we had his confidence and trust, and backed that attitude up with his words and actions when under stress.

I will be stepping into Craig's shoes, and taking on the role of Technical Director for Elcom and helping guide our development, sysadmin and helpdesk teams. Whilst we have some similarities, I have more of a focus on Agile development and software craftsmanship (as Craig has mentioned). I will probably be taking a more hands-on approach to the role - simply because I have contributed to the dev work I will now be managing.

Craig and I have been discussing this role over the last month or so, and he got me interested in the hedgehog concept. That last link explains it pretty well, but basically it is all about helping you focus on what you could be best at in the world, how you can add (money) value and what you are most passionate about. The point where you will be most effective, rewarded and fulfilled, lies in the region where those three overlap.

After thinking about these, and discussing them with people that know me, my (current) take on these three is below:

Hedgehog Circles - Best

I had followed a similar process many times in the past, but without the emphasis on coming up with a "simple, crystalline concept that flows from deep understanding about the intersection" of these three circles. Or as my Dad put it to me, something actionable and concrete.

Being Technical Director at Elcom offers me a chance to move closer to that intersection point, and I hope that in my first few months I can work on those things that might currently distract me from that focus in order to generate some very tangible results for myself and Elcom's owners.

I am a firm believer in servant leadership and am honoured that I have some of the best technical people it's been my pleasure to work with in our development, sysadmin and helpdesk teams. With great people in the team around you, it certainly makes my job easier, and more pleasurable. Like a good scrum master I am aiming to remove obstacles in the way of our technical teams and act as force multiplier for the whole team (the OODA Loop has some interesting parallels with the Agile principles).

It should be an interesting journey ahead!

Friday, November 07, 2008

My first Agile retrospective

I facilitated my first Agile retrospective today, going over a six month project with 12 people, mostly from Elcom's development team, along with one or two others from the systems admin, project management and implementation teams. We followed the format suggested by the Retrospective Goddesses in their Agile Retrospectives book. It was an interesting and rewarding experience, so I thought I'd document it here.

P1050666

Alan Lee, Rajesh Stephen and Chae Wan Kim do some group work.

This project had been a large and challenging one for us, whilst still a success for the ultimate client. It had sucked in most of the development team at one point and I was one of the few people not directly involved. When our management decided to run the retrospective they had envisaged nothing more than a brainstorming session and opportunity to vent some emotions.

We had purchased the Agile Retrospectives book some months ago and I suggested that our Technical Director run it using the book - except it had somehow gotten stuck in my bookshelf at home. Whilst bringing it in I flicked through it and noticed that the main facilitator role sounded exactly like the facilitator role I've been fulfilling in the Valiant Man courses I've been involved in this year. So I volunteered myself as the facilitator, negotiated to increase the time from one to two hours and promptly got stuck with all the preparation involved!

Working Agreement

As the person with the most experience of this sort of group work I suggested most of the agreements, but the group did come up with "Don't interrupt others" on their own. Going "topless" was particularly hard for the managers in the group - but I think it really helped them engage with the process.

P1050656

Goal

This was an interesting one, I had selected a reasonably neutral, positive (and useful) goal by focusing on one of the unusual characteristics of the project, our work with a partner organisation. But the team thought that added to this should be a focus on big projects as this was another defining characteristic of this particular project.

P1050658

I then got everyone to give us a quick one or two word description of their feeling or state at the end of this project. This was interesting as we got flat out positive and negative responses as well as mixed ones like, "stressed, happy." The range of emotions described was a reminder that not everyone sees things the same way.

Information Gathering

I chose the timeline method to draw out details from the group as that would allow us to vary the amount of time we spent on it, and for a six month long project would help people remember their experiences.

P1050660

Tracey Schneider, Gavin Silver, Balaji Sridharan and Chae Wan Kim place their cards

The group broke out into three groups of 4 and worked on identifying important events in the project timeline, categorised into client (blue), Elcom (green), people/team (pink) and technical (yellow). I had previously prepared the whiteboard by separating it into months, and including the number of days of developer time used in each one.

We ended up with a very interesting overview of the project that included many events that people had forgotten, or not even known about, as well as some that everyone was affected by (we stacked duplicate cards on top of each other). I mostly stood back and watched (that's me below, closest to the camera), and occasionally stepped in to help people understand how to handle duplicates (stacking), confusions with long-running events (put multiple cards across months at same level) and disagreements about what was an event (pretty much anything could be).

P1050663

Craig Bailey, Tracey Schneider and Gavin Silver check out the cards, watched by me.

Once each group had their cards up, I asked people to review the board, one group at a time, and discuss what others had identified, as well as looking for duplicates or events still missing. That only got us one or two extra events, but gave everyone a chance to see the total timeline up close.

I then told each participant that they had five positive (green) dots and five negative (red) dots to apply to cards on the timeline - but they could only put one dot on each card. They came up in pairs to dot the cards. I wanted to use colour coded dots, but we made do with red and green pens. You can see the result below:

P1050671 - Copy

People wanted to know how to identify what was positive, or negative, but I pointed out it wasn't supposed to be scientific, just a subjective review of their feelings about the events listed. That worried people less than I thought it might.

Once they had all finished I took over and went through the events that seemed the most interesting (lots of green dots, red dots, or a mix). I also pointed out events that were usually regarded as important, but that ended up having little significance to the team.

Some of the event cards turned out to be confusing, so I also queried what they meant and made sure I added text where necessary to help clarify their meaning. One of the events that had a real mix of dots, turned out to be interpreted two completely different ways, so we drew a line between the dots and added text to each side to explain further.

Identify Experiments and Actions

Unfortunately time was short for this retrospective, so I had planned a quick 5 Whys activity to help the team quickly find useful insights. They broke up into small groups/pairs (two groups of 3 and three pairs) and started asking why.

5 Whys has one participant ask the others in their group why an event was important, positive or negative. It was left pretty open for them to choose their favourite item from the timeline. Once they got the answer, then then asked why that was important/relevant. They would do this a total of 5 times, and only record the answers to the fourth and fifth questions. Every member of each group got a chance to do this at least once and we got some funny and insightful responses as a result (one one of the cards below the fifth answer was that the person was "speechless", so they drew an empty word bubble!).

P1050676

Next was the only awkward part of the retrospective (from my perspective). I had planned for people to do a vote on each item with one stroke per card, as many strokes as they wanted (hat-tip to ThoughtWorkers Lachlan Heasman/Jason Yip for that one!), but the criteria I wanted to use was "which item would you most want to work on". Indeed this is what I announced to the group, but I noticed when people actually came up to vote that the question/answer cards did not identify the experiment/action that could be taken to answer them.

We were over-time by this stage, so I made sure everyone knew what the problem was, but let them keep voting anyway. I then had to step in to organise the cards by stroke-votes (as shown above) and then run a quick discussion of what steps might be taken for each one.

P1050677The result was a set of 5 actions that were not really owned by the team. Coincidentally this was also when the more vocal and confident management types really shined, limiting input from others. To be fair (to myself and the team) this project highlighted some really basic issues in our project management, sales and quoting procedures - and these caused so much grief that it was a bit hard to see past them to other problems that might be owned by more of the team.

Summary

I'm really proud of how enthusiastic the development team were in approaching this. I did a Return On Time Invested poll at the end of the event and on a rating of 0-4 (0=No return, 2=Break even, 4=High return) most of the guys thought it was a 4, some thought it was 3 and a quarter of the group rated it as a 2 (one of those turned out to misunderstand what we were measuring and later said she would have voted 4 too!).

We should be making this a regular part of our Agile process and I will certainly be agitating for it occur more often. I'm sure that having more retrospectives will help identify some of the more fundamental issues that affect the development team and get us continually improving.

Wednesday, October 29, 2008

Salesforce.com's big bang Agile rollout

Whilst researching for next week's Scrum meetup in Sydney I came across interesting presentation by the Salesforce.com R&D guys as to how they transformed their internal development teams to Agile - all at one time.

Lachlan points out that the advantage of this approach is that it means there is no waterfall project running alongside the Agile ones and making them look bad (just because anything new will have its problems, and because Agile makes obvious existing dysfunctional behaviour).

ALT.NET Sydney - NHibernate and ASP.NET MVC

(Microsoft are definitely capitalists, just look at all the caps in that title!)

I went to the second ALT.NET Sydney meeting last night and really enjoyed myself. Richard Banks from ThoughtWorks is organising the event and pizzas, saucy chicken wings, beer and caffeinated beverages were kindly provided by ThoughtWorks (which looked like it had plenty of people working back).

After Richard hit off with the news and we ate/drank we had a joint presentation by Damian McLennan (NHibernate) and Ali Shafai (ASP.NET MVC). I think the point was to show each separately and then point out how easy NHibernate made the back-end in ASP.NET MVC - but we distracted Ali and had a more interesting general discussion about MVC.

I probably got more out of the NHibernate session as that was the piece I was least familiar with. We had a few people in the audience who have "been there, done that" which was great because it gave us some very interesting discussions.

See Richard's summary post on the group blog, or Damian's NHibernate post for more links.

Thursday, October 23, 2008

Wednesday, October 15, 2008

What do you get if you mashup Wikipedia, Google Documents, Yahoo! Pipes and Yahoo!/Google Maps?

Tony Hirst has a wonderful post on his blog showing a mashup between Wikipedia, Google Documents, Yahoo! Pipes and Yahoo!/Google maps:

"So to recap, we have scraped some data from a Wikipedia page into a Google spreadsheet using the =importHTML formula, published a handful of rows from the table as CSV, consumed the CSV in a Yahoo pipe and created a geocoded KML feed from it, and them displayed it in a Yahoo map."

I highly recommend checking it out as it gives a good overview of some of the infrastructure Yahoo! and Google are making available to all of us. Here is the end result.

Wednesday, October 01, 2008

Techno boosts your productivity!

It's official left-handed toons proves that listening to techno music can enhance a programmer's productivity.

justin_technocoding2

I always like to program like I'm in a hacking movie racing against the evil overlord (usually with one of their project management minions hanging over me).

Tuesday, September 09, 2008

Chrome updates offer a HUGE exploit window

I'm loving Google Chrome, the new browser offering from the Googleplex. However I was very worried this morning when I read that they have a proprietary (ie. not open-source) update infrastructure which downloads updates to the user's browser without telling them.

This is a major security flaw, and I'm frankly surprised by it - perhaps it is intended to be a short-term fix whilst the browser is in Beta, but many Google products (e.g. GMail) seem to never leave Beta. The real problem with the approach they've taken is their lack of transparency about security flaws and the fact they leave users in the dark:

"Users do not get a notification when they are updated ... When there are security fixes, it's crucial that we update our users as quickly as possible in order to keep them safe. Thus, it's important for us to not require user intervention."

That sounds very noble, but the problem is that it leaves users unable to reject an update as well. That means that if Google decides they want to change the browser to slap ads in your face every 30 seconds you can't stop it from doing that (you can always go back to another browser - assuming competitors still exist). More importantly it means that if some criminal did manage to take control (however briefly) of Google's update infrastructure then they could install whatever they like on your PC.

In fact any update infrastructure allows this to happen, and many are vulnerable to it. Google's not particularly different, and with the attitude they are displaying at the moment they are more likely to be exploited - because the people that could help them find problems are not being given full access to the software updates (the latest security changes do not show in the open-source changelog). Of course, not updating your software leaves you even more vulnerable.

A recent study into the update problem for browsers (found via ESJ) looked into the problem of users who do not update their browsers:

Figure 1: The Web browser Insecurity Iceberg represents the number of Internet users at risk because they don't use the latest most secure Web browsers and plug-ins to surf the Web. This paper has quantified the visible portion of the Insecurity Iceberg (above the waterline) using passive evaluation techniques - which amounted to more than 600 million users at risk not running the latest most secureWeb browser version in June 2008.

"We believe the auto-update mechanism as implemented within Firefox to be the most efficient patching mechanism of the Web browsers studied. Firefox's mechanism regularly polls an online authority to verify whether a new version of the Web browser is available and typically prompts the user to update if a new version exists. With a single click (assuming that the user has administrative rights on the host), the update is downloaded and installed. Just as importantly, Firefox also checks for many of the currently installed Firefox plug-ins if they are similarly up to date, and, if not, will prompt the user to update them. Opera's update mechanism is essentially the same procedure as a manual download and re-installation of the browser.

Figure 3: Maximum share of users surfing the Web with the most secure versions of Firefox, Safari, Opera and Internet Explorer in June 2008 as seen on Google websites.While Microsoft’s operating system auto-update functionality encompasses the Internet Explorer update mechanism even if the browser is not in use, the fact that patch updates (for both Internet Explorer 6 and 7) are typically only made available on a monthly basis means that updates are released less frequently (when compared to Firefox), which can result in a lower short term patching effectiveness.

Based upon our findings, we strongly recommend that software vendors embrace auto-update mechanisms within their products that are capable of identifying the availability of new patches and installing security updates as quickly and efficiently as possible - ideally enabled by default and causing minimal disruption to the user. We also recommend that these same auto-update mechanisms are capable of alerting the user of any plug-ins currently exposed through the Web browser that have newer and more secure versions available.

...

Given the state of the software industry and the growing threat of exploitable vulnerabilities within all applications (not just Web browsers), we believe that the establishment of a ”best before” date for all new software releases could prove an invaluable means to educating the user to patch or ”refresh” their software applications. The same ”best before” date information could also be leveraged by Internet businesses to help evaluate or mitigate the risk of customers who are using out of date software and are consequently at a higher risk of having been compromised."

It is worth noting that the researchers do not recommend a solution that involves automatic updating of the browser without user permission - rather they would prefer to let users know the "use by" date of their software in order to inform them that an update is required (see the paper for more details on how they suggest this could be done). Also their research paper notes that "Access to Google’s global Web server logs enabled the authors to provide the first in-depth global perspective on the state of insecurity for Web browser technologies," so it's not like some part of Google was unaware of the study.

Personally whilst I will continue using Chrome for some of my browsing I will be re-evaluating my continued use of it based on how Google responds to these sorts of security issues. I recommend you do the same.

Friday, August 29, 2008

Monday, August 11, 2008

Sweet usability

Finally CommunityManager is getting a sweet admin interface. This has been mooted for a while, but as the 6.0 sprint has entered its hardening phase I've really had a chance to play with it. Kudos to the Elcom Implementation team as they've pulled out all stops to get hundreds of pages re-designed. Also great work by the dev's own Elena as she pulled together the new dashboard from some frankly scary legacy code and sketchy UI wireframes.

The best bit about the changes is that we are finally seeing some of the usability knowledge we apply to client site's applied to the core of our own product. Links are more obvious, the intent of various actions is clearer and we're achieving a much cleaner look and feel with greater consistency across different areas (not inconsequential, given we're talking about pages created over the last 8 years!).

Friday, August 01, 2008

Trying out Kaboodle

I've recently discovered the social shopping site Kaboodle. It makes it very easy for you to get up to speed, and bring data into it from various other social sources, plus eCommerce sites. Very nice. Here's my wishlist (imported from Amazon.com):

All an Aussie dev needs ...

Loving Quokka.two ...


systemsgo
Originally uploaded by Lyynx

Wednesday, July 23, 2008

Oz attempt at Kiwi humour, eh?

At the risk of offending my Kiwi (i.e. New Zealand) friends, here is a great ad that channel 7 presented after the Wallabies vs Springboks rugby game:

Even knowing it was a stunt ad, it still put the old fire in the belly that Bledisloe Cup matches need.

Tuesday, July 22, 2008

Friday, July 18, 2008

Everybody's frozen!

I love the effect this style of street theatre has on people:

Retrieved from garthk's tumblr archive.

It's the water

There is something elementally satisfying about my current commute, and this morning I realised what it is. It isn't the beautiful houses (Mosman) or views (Spit Bridge/Harbour Bridge) we go past; it isn't the crowded buses or traffic jams either. It's the water.

No, I'm not guzzling some funky, intelligent, over-hyped, green-hating plastic bottled über-water, but rather looking out over the harbour, Sydney's great appendix of the Pacific Ocean.

taken by goosmurf

It's not the beaches that move me. Nor am I fascinated by the breaking waves. In fact that is just the sloppy, noisome edge of the real deal ... the Sea - mistress of ship Captains and mighty in her play and rage alike.

Playing in the surf is fun (I thoroughly recommend it) but it's rather like running to work - a more primitive existence, where we rely upon our body's strength to sustain us - and frankly as the world's ultimate tool makers it behoves us to take a more mature approach to something as dangerous and amazing as the Sea.

Like many things in life, it's my Dad's fault. As an aside I'm sure my son will have many things to lay at my feet too ... if you're just getting to grips with your own parents' imperfections then I suggest you look at something like the Search for Life course from Careforce Lifekeys.

But I digress. The reason it's my Dad's fault is that he exposed me at an impressionable age to the Sea via his yacht Dreamtime. I was around 13 when I first held the wheel of a large boat (41'6") and it was thrilling. In the rest of my teens I spent many a weekend racing with my Dad and his crew and thoroughly enjoyed most of it (except for the end of the day when we cleaned up).

I find that the Sea is the place where I feel most spiritual and closest to appreciating the sheer grandeur of my heavenly father's creation (I was going to say handiwork, but he spoke it into being ... hey! Maybe Bill Gates is right about the future of speech recognition after all?).

Thursday, July 10, 2008

bCisive gets the Minto Pyramid Principles

One of my favourite Australian software tools is bCisive by Melbourne company Austhink, led by Dr Tim Van Gelder.

They have recently announced that they have “entered into a Memorandum of Understanding to collaboratively produce a Minto software product based on the Minto Pyramid Principle® and Austhink’s bCisive product”. This is great news as it joins the easiest argument mapping tool (I know, I've tried lots of them, including Standpedia, which looks like it died at the end of 2007) with one of the pioneers of informal argument mapping in the business world.

I first came across Barbara Minto years ago when my Dad loaned me her Pyramid Principle book. I lost that first copy, but replaced it and got my own as well. It really should be mandatory reading for anyone who ever has to write a proposal or training document.

Below is a screenshot of a product strategy bMap (bCisive argument map) I prepared for our TrainingManager.NET product:

Product Strategy bMap

The user interface does a great job of getting out of your way, but being accessible when you need it. The two orange buttons at the bottom of the window open panels that help you create and report on the bMap you have created. The zoom slider control makes it dead easy to change perspective and the graphical navigation tools are well thought out and consistent with programs that solve similar problems.

Having just gotten used to Office 2007 I find the user interface style of bCisive to make a lot of sense to me, and it is quite easy to use. This does for argument maps what PowerPoint did for slide preparation - it takes it from the domain of experts (or highly motivated amateurs) and puts it in the hands of everyday business users.

If you want to give it a try, bCisive allow you to use a trial version for 30 days.

Friday, July 04, 2008

LinkedIn's architecture

Via Oren Hurvitz's blog comes an interesting summary of two presentations that LinkedIn's engineers gave at the JavaOne 2008 conference. I've embedded the presentations below. The first goes into their architecture:

The second one deals more with their use of Java and agile practices:

It's great seeing details like this as it helps bring the rest of the industry up to date with how the largest websites in the world are actually handling the problems of performance and scalability. These are great for Microsofties to read too as the lessons learned apply just as well to .NET projects as Java ones.

Wednesday, July 02, 2008

Modern heraldic eye candy

From the fertile marketing minds at Toyota comes Scion Speak, a website promoting the Scion brand. The site is fairly simply and flash heavy, the main aim of it is to give Scion enthusiasts (or anyone really) a way of creating an eye-catching heraldic symbol with modern iconography, such as the one I did below:

Falkayn Scion Crest

It's great fun, and likely to lead to a lot of buzz amongst the right people. From a technical standpoint it's a little weird that they chose to output the results in JPEG format (GIF would have been far smaller for this sort of image).

In mine I used the circuit board wings to represent my background in computers, the phoenix represents Falkayn, the glasses are for Angus and the burger is for my last name ... of course!

Thursday, June 26, 2008

So that's what backchannels are!

Ever had that disconnect where you learn a new concept, but don't have a name for it, and you come across a new term but don't understand the concept, only to realise the new term is actually describing the new concept?

That's happened to me recently with the concept of using Twitter + Hashtags at conferences to keep up with what's happening and the term backchannel. It turns out they are one and the same (and now you know too!).

So, why bother blogging about it? Or more importantly, so why should you care?

Google Developer Day 2008

Good question. The interesting thing about backchannels is that they not only enrich your conference experience, but they also help you process the sessions you are currently in.

So how does it enrich the experience?

  • You get to find out what's going on in other sessions.
    At Google Developer Day 2008 this helped me work out that it was worth switching streams when I found the OpenSocial one was not meeting my expectations.
  • You get the benefit of others' viewpoints.
    We all know that sometimes the biggest "aha!" moments around a conference are during those in-between sessions conversations with other participants. Backchannels allows you to get some of those during the session.
  • You get extra content.
    When twitterers know which link the presenter is talking about, or do a bit of impromptu research in the midst of the session, then you get the benefits of finding out more about what is being said and can often be downloading the code being discussed during the session.
  • You get to give too!
    Each of the above benefits is because other people in the backchannel are sharing what they see, know and feel. You get to do the same too, and this reaps benefits in terms of reputation and new contacts. At both CodeCampOz 2008 and Google Developer Day 2008 I met new people who I would have probably not gotten to know except through the conference backchannel. Be aware that the conference speakers may check out the backchannel after their sessions, and set the tone of your comments appropriately.
  • You've got something constructive to do in boring sessions.
    You can always surf the web, but that takes you out of the flow of the conference, being able to participate in a backchannel discussion means that you can sometimes re-assess the usefulness of the current session or at least plan which pub to meet everyone with afterwards more easily!

The other element is more about how you process the sessions in order to internalise the knowledge and practices being shared. Sometimes the fact that you are researching topics in the midst of the session means you can multiply your understanding about a topic at the moment when you're most interested in it.

I certainly found at CodeCampOz that some of the sessions might not have made sense to me were I not pushing myself to find relevant links about them in order to add them to tweets sent during the sessions (yes, backchannels can make you competitive!). It does mean you are paying less attention to the speaker, but sometimes that would have occurred anyway (like when something goes over your head, is boring or relates to a question you already know the answer to).

However, I don't think that I would have grokked the advantages of backchannels had Craig Bailey not pushed me to use Twitter before Code Camp Oz 2008, and then the organisers of that conference not provided free power and wireless internet access. I highly recommend you give it a go yourself.

Why not drop me a comment here if you find it has worked for you, or alternatively if you thought it was a waste of time?

Thursday, June 19, 2008

Google Developer Day 2008 (Sydney)

I spent yesterday at the Australian Google Developer Day 2008 at Wharf 8 in Sydney. It was an interesting event to attend and I met up with some great people. Like most events there were both positives and negatives:

  • Positives:
    • Good turnout, lots of interesting people to meet and chat with (big shout out to delic8genius, dcw303, stuandgravy, garthk and Dr Yogesh).
    • Great food and drink.
    • Great keynote session with cameos from a bunch of different developer advocates and product managers who gave us interesting peeks at their developer products.
    • Lots of nice new additions to Google Maps API, the Google Earth API was especially sexy.
    • The Android keynote demo was cool, especially the Compass feature that allowed StreetView to track the physical movement of the mobile device.
    • The App Engine sessions got me interested in using IronPython as it has a syntax similar to Ruby and might even be compatible with App Engine (the App Engine guys weren't sure about this one).
    • The event was free (as in beer).
  • Negatives:
    • No caffeinated soft drink. Negates all the good food and drink. Coffee lovers were looking for better sources of that beverage too. It would have paid off to hire a decent coffee stand for the day and allowing delegates to pay for it themselves.
    • Nobody mentioned how to access the wifi network (I talked to the events manager and Alan Noble was supposed to in his keynote speech ... hehe).
    • Audio bleedover between sessions, the Blue and Green rooms shared a flimsy wall that allowed sound through, particularly annoying when in the back of the Blue room.
    • Presentations became less interesting as the day wore on. The first OpenSocial session was a complete bore, basically a project report.
    • I missed the code labs, but up to that point the last 2 sessions had been both very short, using only half the time allotted. Remember the Milk forgot to turn up to explain how they use Google Gears, so that explained why their sessions was short. I spent that time tweeting and mingling, but would have preferred more content.
    • It's all Beta. Many of the most interesting things mentioned are still unavailable, that's probably unavoidable at this sort of event, but it was a bit galling to hear yet another "this is only in prototype" explanation.
    • It started too late, 10am is a ridiculously late time to start, mind you, I enjoyed playing Halo 3 on the XBox 360 they nicked from Google's Sydney office. It also ended late at 6:30pm, which meant I missed the last 2 sessions (mostly code labs). I might have stuck around, but my wife had a prior commitment I needed to be home for.
    • The event took a whole day (as in working day), but really only offered half a day's worth of content.

You can check out the #gdd08au tag for the tweets from the conference. I was a bit lonely there for a while, but it eventually took off.

OpenSocial was the big disappointment for me, the material we were shown in the sessions I attended covered client-side gadgets, hardly an exciting line of development especially given the increasingly popular view that most social mini-applications are no more than viruses. Two thirds of the first session was spent looking at differences between v0.7 and v0.8 - only after we were all bored to death did the presenter ask how many were already using the API, and then only 3 hands went up! Perhaps I should have hung around for the Apache Shindig session to see server-side details, but the first session was too boring for it to earn more of my attention.

The App Engine sessions were the surprise bonus for me. Firstly there was the news that Python is only the first language they intend to support (star this support issue to see C# supported). Then I realised that Python reminds me of Ruby, a lot. Nice.

The best bit about App Engine was that we had good speakers, Tom Stocky (leader of the product managers that work on Google's developer products) and Brett Slatkin (an engineer on the App Engine team). They made it very easy for us to understand what App Engine was all about, and particularly why we should care about it (it makes it easy to start an app for free, and then scale it easily if it takes off).

The discussion about App Engine's Bigtable datastore was gold, especially the coverage of some basic issues that frequently catch out relational database developers (namely there is no count kept of the table). This really brought home to me the smarts behind data shards (which I might blog about soon) as well as providing us with the 'right' way to handle problems like global counters and list paging. This is core to Google's success and they obviously have some great lessons to share with the developer community about how to build scalable web applications.

Tom and Brett had very strong messages (repeated often) about how much they value the privacy of your data and code, and an awareness that for App Engine to take off they must make it as easy for people to get data out of the system as into it. Clearly if you design your applications to fit App Engine you will find it relatively easy to get started on any distributed LAMP hosting platform, although you will need to build some of the infrastructure bits for yourself - like Bigtable. However the premise is that if you build up your application on App Engine then you avoid the sort of scaling problems Twitter has experienced.

I missed most of the first Gears presentation (I was stuck in OpenSocial's yawn-inducing first session), but the 10 minutes I did catch was interesting. They made the point that Gears was all about unlocking the capabilities of the client machine, not necessarily working offline (although Google Docs seems to support this just fine!). This includes utilising the client's power to process data (searching, sorting and indexing) and accessing client information (such as geolocation information).

One great question was how was it different from Adobe Air, and other than being open-source, the main difference is that Gears seeks to enhance HTML 5 and JavaScript, Air is creating a separate (proprietary) platform. In this sense Air is pretty similar to Microsoft's Silverlight model.

The MySpace presentation on how they have used Google Gears was very interesting. They handle roughly 160 million messages a day, fortunately they do not have Twitter's distributed messaging model, but it still is a huge number to handle. Each of their physical databases handles about 1 million users, with approximately 1 Terabyte of data in each. A big issue for them is how to enhance the messaging experience for users with large numbers of messages (some have hundreds of thousands). Offering searching and sorting is an obvious feature, but one they cannot easily handle given there large volume of users and messages.

MySpace's solution was to offer Google Gears to users with over 5,000 messages (soon they will lower the limit to 2,000 messages). For these users Gears could locally store their messages, indexing them on the client machine and then enhancing the (online) website so that searching and sorting could be offered. For these users the page data would be drawn from a mix of their standard online datastores and the local one - providing much faster response times, and putting less load on the MySpace servers. They are also looking at how to help users with large numbers of friends (some have 1 million+ friends!)

However implementing Gears was obviously not a trivial change, and I would hesitate to recommend it unless:

  • It was inside a corporate environment (where you have strong control of client machines); or
  • There was a very well funded business case for moving processing off the server architecture; or
  • The functionality of offline access or geolocation was key to your application.

Remember the Milk was going to turn up for the second half of this sessions, but for some reason were not there (and AFAIK no announcement was made about their absence - maybe they were busy at Apple's Worldwide Developer's Conference?). They are an Australian startup that offers a free and simple To Do list function for users anywhere. They have been quite popular globally (half a million users) so it would have been interesting to see what they did different to MySpace (update: they have blogged about using Gears and it sounds like they use it for offline access, would have been very interesting).

Overall I'd give this a 7/10, and I would definitely go again, but I expected Google would do better. It goes to show how hard it is to run a good conference, especially when expectations are so high.


UPDATE: Got the hashtag wrong, it's now correct.

Wednesday, June 11, 2008

Apparently I'm in marketing now

There's an ongoing joke in the dev team at Elcom that I'm actually a sales guy, due to the number of sales meetings I've been doing recently. Well apparently I'm in marketing too, because this blog just appeared in the inaugural Top 50 Australian Marketing Pioneer Blogs list, compiled by Julian Cole and to be published in the August edition of Marketing Magazine.

top50mkting-big

I am honoured to be in that list (at #33) as a large part of what I do is thinking about how IT products or services can offer better value to customers, including innovating beyond the current market space - which is certainly included in the Wikipedia definition of marketing.

Having said that, you might have to look hard to find anything specific to marketing on this blog. So for anyone who has just come from the Top 50 list, here's a summary of my posts that might be interesting from a marketing viewpoint (especially if your product includes software):

Thursday, June 05, 2008

What is Work Literacy?

Elcom has recently launched TrainingManager.NET, our first step into the eLearning space. As part of this I was asked to review our product strategy and get to know the eLearning space better.

Tony Karrer's eLearning Technology blog has been tremendously useful in helping me cover a wide range of topics very quickly. He also is webmaster for the Learning Circuits blog. Larry Irons' Skilful Minds blog has also been very helpful, and numerous others have provided good reads. It's also caused me to take a fresh look at some old favourites, such as David Maister's professional services blog.

Karrer and Michele Martin have just launched Work Literacy, which is:

"a network of individuals, companies and organizations who are interested in learning, defining, mentoring, teaching and consulting on the frameworks, skills, methods and tools of modern knowledge work."

wl-logo
They intend to allow the intent of the network to be emergent, so it is intentionally vague about what they want to do. One aim however is clearly to help raise awareness of the latest eLearning thinking amongst knowledge workers, and not just their learning managers/corporate trainers. It looks like an interesting site to follow.

Wednesday, June 04, 2008

More NEWS.com.au stuff-ups

NEWS.com.au is just full of interesting weirdness today, here are my two personal favourites.

From an article about Senator Obama winning the Democrat nomination:

"Excerpts of Senator Obama's speech were released prior to him taking the stage, but his first personal claim of victory came in a post he sent to his Twitter feed.  'IN St Paul, MN speaking after securing the nomination,' he tweeted."

I am sorry, but nobody seriously believes that the charismatic senator is responsible for writing his own twitter feed! There is some campaign flunky knocking these out as part of their media blitz duties.

At least they got their terminology right ... you tweet via Twitter.

The other I saw was a snippet advertising one of their video reports on a very serious issue:

NEWS-video

'Doubling' and 'jumping by 50 per cent' are not the same thing. Perhaps someone with some maths sense should have checked that one for typos first? As it is I have no desire to wait for their ads to load before watching this story, so I'm still not sure how big the jump is, but it sure is worrying.

Tuesday, June 03, 2008

Scribd - Assessment 2.0

I found this interesting document about Assessment methods using Web 2.0 ideas on Scribd.

Read this doc on Scribd: Assessment 2.0
Scribd is an interesting find for me. I've seen it before, but now I'm looking at it as a potential publishing platform and seeing the value it gives people, especially seeing as you can embed the content in a blog or wiki page (as I have done above).

How do you make training useful?

One of the consistent problems that managers I have worked for have had with training is that they did not see how it was immediately useful to my job. Now that I'm helping set the product strategy for our new TrainingManager.NET application this bothers me more than it used to. After all it's nice to say we've got a tool to help you manage your staff or customer training, but many managers will see training as irrelevant to them.

By and large my managers saw training as either something hateful but legally necessary (such as Appropriate Workplace Behaviour), a junket/bonus (such as TechEd attendance) or, very occasionally, of limited usefulness, but worth doing if it was cheap enough (such as in a new management application). Now that many employees have multiple competing demands for their attention there is even seen to be an attention crisis amongst staff who may well spend their attention on things other than corporate training's reference and help material (often not to the benefit of the organisation).

Of course when the shoe was on the other foot and we were training clients in applications we had custom built for them (or more often, training the trainers), it was seen as a necessary and useful part of our service delivery.

Professional services guru (and business trainer) David Maister gives a great analysis of the problems managers can have with training in his article, Why (Most) Training Is Useless. He says that:

"I now believe that the majority of business training, by me and by everyone else, is a waste of money and time, because only a microscopic fraction of training is ever put into practice and the hoped-for benefits obtained."

Ouch! OK, if managers are really thinking that way then that explains training's bad name, but why is this so?

"The truth is that most firms go about training entirely the wrong way. They decide what they wished their people were good at, allocate a budget to a training director and ask that training director to come up with a good program."

Re-read that last sentence - doesn't that sound like the core of most managers' reasons to train their staff? What is wrong with that? His point is that training is usually intended to bring about organisational change, to deliver real business value, but that requires that four key areas are addressed; systems, attitude, knowledge and skills.

  • Systems: Does the organisation actually monitor, encourage, and reward this (new) behaviour?
  • Attitude: Do people want to do this? Do they buy in to its importance?
  • Knowledge: Do they know how to do it?
  • Skills: Are they any good at implementing and executing what they know?

Education addresses knowledge and training addresses skills, but these are the last two that should be looked at as systems and attitude trump them both when it comes to actually deciding people's behaviour.

At our TrainingManager.NET launch last week Dr Denise Myerson challenged attendees to track the positive effects of their staff training and make sure they could demonstrate business value to the executives. She made the point that too often training seems irrelevant to the trainees' daily work (her "Let's Learn Fijian" example demonstrated this nicely) and reminded us that managers are responsible for ensuring staff understand why they are being trained (which matches Maister's attitude key). She has a blog post dealing with this in more detail.

"Like any management professionals, we should ask ourselves if the results of our training are both value for money and properly aligned to the goals of the organization."

The point is that training is usually brought in as the first thing to do to ensure organisational change, when in reality it should come much later in the piece. So most managers problems with training are in reality borne out of their misuse of it - so how does Maister think it should be done?

"The summary is this: if the training has been in regular operating groups, in carefully chosen topics, right when the group can use the training, and with the group’s leader in the room, they can immediately begin a discussion of how they plan to integrate the training’s ideas into their practices. With the right preparation and follow-up, training can be immensely powerful."

In more detail Maister's training tips are:

  • Get the strategy right first (what do want people to do, and do we really know why they are not doing it now?).
  • What does top management behaviours and measurements need to change to reinforce the strategy?
  • What has to happen before training starts? What must be in place the day it finishes? (e.g. logins to the new system)
  • Train people in the groups they normally work with, rather than drawn from across the organisation.
  • Small training sessions are more effective (smaller in time and people).
  • Training should be scheduled on topics that can be applied immediately, not left to atrophy, or fade away.
  • The best training is done by your own staff. It's more credible and real.
  • Training must involve group leaders/managers if it is to be action-oriented and the commitment to change credible (i.e. place the group leader/manager in the course with their staff).
  • Courses need mandatory pre-reading and pre-testing to ensure all participants are equally prepared and committed. Don't waste people's time by allowing some to attend unprepared.

Larry Irons points out something similar in his blog post Leading the Business-Centered Learning Experience where he says:

"In other words, it is just not sufficient for leaders who manage the learning process in organizations to focus on measuring learning outcomes that remain course-centered. Meaningful learning outcomes are business-centered and require that level of measurement to remain relevant to the organization’s objectives."

Irons discusses an article by Forrester's Claire Schooley, Learning Director: Are You Ready for your New Role? The key quote Irons pulls out of the article is this:

“What are the critical areas of investment in people? Answering this question requires opening direct communication channels with top company executives to understand the business strategy and road map and then to align and create appropriate formal and informal employee learning experiences that support the road map.”

I'm a tools builder, so it's nice to think my tools are what is most important in making organisational change happen, but the reality is that while tools can enable change and make it cost-effective, like most things of real business value, the biggest factor is whether the organisation commits to the change from the top down. (I'm probably not a card-carrying Edupunk, but the principles are similar enough to ALT.NET for me to appreciate the viewpoint, and I think it is a reaction (mostly in education circles) to this same sort of problem, getting the trees confused with the forest, or more importantly, the way out of the forest!)

Tuesday, May 27, 2008

Styling <select> tag widths

OK, there are a gadzillion web pages on the web already complaining about IE (pick any version up to 7) and the way it handles the <select> tag. My main problem was that I wanted to give the dropdown list a fixed width, so it could fit within the bounds of a box on the screen, but I cannot control the length of the items in the list, so I need to be able to show the user the entire text when trying to select the value.

My first attempt simply fixed the width CSS property. As you can see the result was perfect in Firefox:

competency002ff

However in IE7 (even with the new <select> tag) it just truncates the values:

competency002a

When testing this with actual client data we realised they had values that differed in the last couple of characters only (e.g. "Training Course 001" and "Training Course 002"., but much longer).

So I went ahead and removed the width CSS property from the relevant class, and this is what we got:

competency001

The problem is now that the remove icon is covered up, preventing the user from using it until they have selected something from the list and it replaces the edit box with the read-only one (like below):

competency005

I looked for ages to try and find good cross-browser safe ideas for how to handle this, and briefly tried using JavaScript to trap the onclick and onblur events and re-size the field at that point. Ugly. Buggy. And just plain nasty as a future-safe solution. I even tried setting width on <option> tags using CSS, but while that worked in Firefox it still failed in IE.

So after much trawling for help, and revising much of what I already knew about styling forms in CSS, I came across this gem of a solution. Setting the title attribute on the <option> tags allows them to show a tooltip in IE7 that shows the user the full text value of each option:

competency004

Monday, May 26, 2008

Om's got the wrong business model for Twitter

I've been spending a lot of time recently looking at product strategies for Elcom, so I was particularly intrigued by one of Om Malik's latest posts that highlighted a business model for Twitter in the midst of their Scoble Problem. He says that he has “a theory that could help Twitter solve its scaling conundrum and also help the company make money”. What he's referring to, of course, is the rather expensive impact that a popular user like Robert Scoble has on their infrastructure.

Twitter (see my feed in the right hand column of this blog) is self-described as essentially a messaging system built on an architecture that better suits a content management system. This means that every time someone tweets, a record is created in a database, and then subsequent to that, tens, hundreds or thousands of messages are sent regarding that tweet - potentially creating their own database records along the way. Unfortunately Scoble has 25,000 followers, so every post from him involves 25,000 messages (and possibly text messages to mobile phones).

“Of course, Om's answer is completely wrong.”

Om says that the answer for Twitter is to view commentators such as Scoble as cash cows, and charge them for the right to have a certain number of followers. Of course, Om's answer is completely wrong. Twitter needs Scoble much more than he needs them. Why should he pay to have followers there? There are dozens of startups waiting for someone like him to to give them the techies' equivalent of an Oprah moment.

Om is right in one sense, the answer to Twitter's business model is hidden in the Scoble example. Instead of charging Scoble for the right to use their system, they should charge people who want to follow Scoble - beyond perhaps the first hundred or so. This allows anyone to use Twitter (helping network externalities along), whilst ensuring that the really heavy loads on the system are paid for, but by the subscribers to the content producers, not the content producers themselves. Another problem is that anyone could create masses of bot accounts to simply drive up your least favorite twitterer's monthly bill.

“That's almost ten times the income without annoying Scoble”

Instead of charging Scoble $10/month for 1,000 subscribers, giving them $250/month, they could charge the people that want to follow Scoble (past the first 100 or so) 10¢/month each, giving them $2,490! That's almost ten times the income without annoying Scoble, by simply asking people to pay a small premium fee if they want to know what Scoble is thinking right now. With that model they can grow as much as they like, and encouraging people like Scoble to use Twitter becomes a win-win proposition.

They are left with a micro-payment problem, but if people follow more than one interesting twitterer then the payments will quickly add up, and with volume I'm sure you could make credit card companies your friends. Besides, you could probably inflate my 10¢/month to 50¢/month with no great outcry. Now Scoble might get annoyed if suddenly 20,000 of his followers disappear, but then again, at least he knows the other 5,000 place a real value upon his tweets - and that's worth a whole lot more in media terms.

[UPDATE: It seems Scoble's already gotten annoyed ...]

Tuesday, May 13, 2008

Digging into the sourcecode

One of the things that's really impressed me about the New Microsoft is that they're much more open about their sourcecode, especially the Visual Studio guys (who know their main customer base are all over issues like this).

It is even more impressive to see Scott Hanselman digging into their sourcecode for the latest VS2008 and .NET 3.5 SP1 Beta and using NDepend to show us how much has changed. In my books that absolutely rocks!

It actually makes me wonder whether this sort of analysis should form part of Elcom's sprint delivery procedures. In other words that we actually make the effort to stand back and analyse the sourcecode changes from 20,000 feet, rather than only looking at backlog items completed.

[UPDATE: Patrick Smacchia the NDepend lead developer (and C# MVP) takes the analysis one level deeper, again using NDepend.]

Friday, May 02, 2008

LinkedIn's cute outage page

This is a nice touch from LinkedIn, an outage page with attitude:

LinkedIn

Of course I would have preferred they not have an outage at all ...

Monday, April 28, 2008

Vista's XPS Viewer needs IE as default browser

This is annoying, I went to open an XPS document that someone at Microsoft kindly sent me in request to a query I had. A quick Google showed me that I should be able to open it with Vista's built-in XPS Viewer. However when I try to, I find it opens Mozilla Firefox with this message:

XpsViewer

The only problem is that if I hit OK, it opens another tab in Firefox with the same popup, ad infinitum.

Making IE my default browser solved the problem, but if the darn things is dependent upon IE then it should just try opening in it in IE, regardless of what my default browser is, grrrr ... I checked for a Firefox add-in, but couldn't find one, so I ended up making IE my default browser for the 2 minutes it took to open and print the document.

In case you're interested I develop cross-browser apps so I need multiple browsers on my PC, and I prefer to use Firefox for random links I open because of the excellent NoScript add-in, which prevents my PC getting reamed by dodgy code on the websites I visit (which can sometimes happen on even the most reputable sites).

Sunday, April 27, 2008

Do you know your IDE?

Had a great Code Camp Oz session this morning from Mahesh Krishnanm about shortcuts in the Visual Studio IDE. Unfortunately his presentation was biased towards C# (which was probably good for the audience there). Fortunately the VB team blog has some great Did You Know posts that explain new Visual Studio features for VB2008. Check them out, there are some great ones there, like the ability to bring back snippet highlighting when you want to edit the snippet.

Saturday, April 26, 2008

Photos from Code Camp Oz

There are some great photos from CCOz on Flickr. I even managed to find one on Mitch's blog that showed me ... I'm the bloke slouching inside the big yellow ellipse (thanks to the Expression Design eval I picked up).

CCOz

 

It has been great meeting so many friendly and helpful people and Twitter has had some very lively threads on it. If you want to check out what is happening realtime (or afterwards), look for the ccoz tag on Hashtags.

Jeff Wharton challenged me to do a presentation myself, I guess because of my smart aleck comments from the peanut gallery. I'd like to do one on XML literals in VB9 having just spent the last month working on our branching pathways diagram code for Elcom's Learning Management System and being up to my elbows in it (and Prototype).

Code Camp Oz 2008

I'm really enjoying being here. We've had some great sessions from favourites like Greg Low (SQL Server 2008 and how to present at events) and new guys like Shane Morris (User eXperience). Right now Paul Stovell is giving me a headache trying to keep up with his Reactive Programming via SyncLINQ.

It's also been great discussing things with guys from Readify, SSW, and the tons of other companies represented here, I even met the AFP alumni from Canberra.

Coming out of this I am sure that Craig and I will be raving about Windows Server 2008 Hypervisor and looking for greater use of VMs internally (as well as SQL clusters) and pushing for more emphasis on UX in the dev team at Elcom, which should make Anthony happy!

Next up, TDD of DotNetNuke Modules by Philip Beadle ... very relevant to us.

Tuesday, April 22, 2008

Second ALT.NET conference

Ben Scheirman has a good couple of posts on the ALT.NET open conference that ran just after the Microsoft MVP Summit. Not being an MVP I wasn't anywhere close to going, so it is nice to see this sort of photo intensive report ... looks like fun and I'm hoping Code Camp Oz 2008 can be as productive for me.

Monday, April 14, 2008

How aware are you?

Courtesy of Henrik Mårtensson comes this little gem of a test:

I got the number of passes (thirteen) but completely missed the surprise inclusion.

Code Camp Oz 2008

CodeCampOzLogo

I'm all set to go to Code Camp Oz 2008 but I'm wondering who else I'll know there. Craig Bailey and I will be sharing a car to/from the event (we're both staying in Wagga Wagga city centre).

Personally I'm most looking forward to Greg Low's workshop on presenting at events, Philip Beadle's TDD 'in the trenches' session and Luke Drumm's swashbuckling DLR session. It will also be interesting to grill the MVP's that come to Code Camp Oz on the back of the MVP Global Summit in Seattle.

Finally, what is it with the Code Camp Oz logo? I'm going to have to see if I can carve out a spare couple of hours to improve upon it ...

Tuesday, April 08, 2008

Annealing a sword

OK, here is a good reason why I am not a swordsmith:


In case you're wondering what he's doing, it's annealing, the process of softening the metal so it can be re-worked (in this case ground).

Monday, April 07, 2008

Drinking the Watir

I've been using Watir recently to help automate integration tests for some of our client projects. Moving from a Windows XP to a Windows Vista environment proved more troublesome than I had realised it would be, however I now have my test environment all working and last Friday night realised some value from the automated tests as they (very) quickly ran through a complicated series of steps to prove an important piece of client functionality after a server upgrade, thus allowing me to get home earlier than expected.

For the benefit of my fellow Elcomites I'm going to document the steps required to setup Watir on a brand new Vista machine.

Pre-Requisites

Firstly, as I pointed out previously, you can't have Office Groove 2007 installed. Also, you need to be able to run as Administrator on your local machine.

Install Ruby

You will want Ruby 1.8.5, and fortunately there is a one-click installer for Windows, which you just need to download and run. By default this installs under C:\Ruby\ and includes RubyGems (which makes installing other Ruby stuff dead easy).

Having done this, let's test whether we have a fully working Ruby installation by running irb (the interactive ruby shell). Open a command window and type the following:

C:\Users\angus>irb

In Vista this prompts you with the message "An unidentified program wants to access your computer", identifying the program as ruby.exe with the option to Cancel or Allow. Obviously we want to Allow this (note: you won't get this message if your UAC settings are different to mine). It will then open a new command window with the following text shown:

irb(main):001:0>

Just getting this far tells us that Ruby is installed. Close both the command windows you have open.

Install Watir

Installing Watir is as simple as starting another command window and then typing in the following command:

C:\Users\angus>gem install watir

We then want to do the same for the windows-pr library that provides access to various Win32 APIs and is needed in Vista to run Watir.

C:\Users\angus>gem install windows-pr

We can then open irb again and see if we can test Watir from the command-line!

irb(main):001:0> require 'watir'
=> true

This tells Ruby that we are using the Watir namespace (like Imports in VB.NET or using in C#.NET)

irb(main):002:0> include Watir
=> Object

This actually mixes in the Watir library with our code (essentially making it available to us).

irb(main):003:0> ie = Watir::IE.new
=> #<Watir::IE:0x4a50e70 @url_list=["about:blank"], @ole_object=nil, @rexmlDomobject=nil, @logger=#<Watir::DefaultLogger:0x4a50d94, @progname=nil, @logdev=#<Logger::LogDevice:0x4a50d30, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x4a50d08, @mon_entering_queue=[], @mon_count=0, @mon_owner=nil, @mon_waiting_queue=[]>, @dev=#<IO:0x32d7320>, @shift_size=nil, @shift_age=nil, @filename=nil>, @formatter=nil, @default_formatter=#<Logger::Formatter:0x4a50d58 @datetime_format="%d-%b-%Y %H:%M:%S">, @level=2>, @activeObjectHighLightColor="yellow", @down_load_time=0.413, @speed=:slow, @typingspeed=0.08, @page_container=#<Watir::IE:0x4a50e70 ...>, @ie=#<WIN32OLE:0x4a50e0c>, @error_checkers=[], @defaultSleepTime=0.1>

Whoa! Did you see that Internet Explorer window open up? This is the litmus test for Watir, this line opens a new IE window and assigns a reference to it to the ie variable.

irb(main):004:0> ie.goto('http://ww.google.com.au')
=> 2.206

We can now start playing with the open window, firstly by browsing to the Google (Australia) website ...

irb(main):005:0> ie.text_field(:name, 'q').set('Elcom Technology')
=> true

... entering a search term ...

irb(main):006:0> ie.button(:name, 'btnG').click
=> 1.045

... and then actioning the search. There is a lot more that Watir allows you to do, but this is a good start!

Install Aptana Studio

Editing Ruby scripts in Notepad is a chore, and whilst Visual Studio will eventually support Ruby the current Sapphire in Steel IDE doesn't excite me (the free version is still just an alpha release). Enter Aptana Studio, which has absorbed the old RadRails IDE project and which has a stable, and free, Community edition. Amongst other features this gives us Ruby colour coding and an integrated test runner - great for Watir!

Aptana Studio is built atop the open-source Eclipse IDE for Java. This means that other Eclipse plugins are also available. It also means your machine will end up running Sun's Java. It comes with a Windows installer to make things easy and is a free download.

Once you have run the installer you will want to edit the properties of the studio exe so that it runs as administrator.

Aptana

You can now run Aptana Studio and choose to install the Ruby on Rails plugin from the start page:

Aptana Start

Create your first test script ... here is that sample we ran before, but this time the way you might typically create a test file:

##########################################################

# Integration Test Sample

##########################################################

# This demonstrates the skeleton of an integration test.

##########################################################

 

require 'rubygems'

require 'test/unit'

require 'watir'

require 'watir/testcase'

 

class IntegrationTest < Watir::TestCase

    # Runs before each test case, e.g. used to specify login details.

  def setup

    super

  end

 

  # Runs after each test case, e.g. could be used for logging, etc

  def teardown

    super

  end 

 

  # always the first test as it sets up the browser object

  def test_first

    # Create a new browser instance (running this opens IE)

    @@ie = Watir::IE.new

    @@ie.speed = :fast # comment this line if you want to more easily see what is happening

    @@ie.maximize

  end

 

  # reproduce our irb test

  def test_google_elcom

    @@ie.goto('http://www.google.com.au')

    @@ie.text_field(:name, 'q').set('Elcom Technology')

    @@ie.button(:name, 'btnG').click

  end

 

  # always the last test, closes the browser object 

  def test_end

    @@ie.close

  end

end

 

By right-clicking in that file and choosing Run As > Test::Unit Test (see below) you can run the tests within the Aptana test runner.

RunAs

That gives you a nice test result tree that shows exactly where things fall over (when they do).

You are done! Now I am pretty sure that people are going to find problems I haven't documented. If you do, then please feel free to add a comment with your difficulty and I'll update this main post with the solution.