Monthly Archives: July 2006

Vista and Cars

Darren should know the dangers of comparing things like operating systems to motor vehicles, Bill Gates certainly has. Darren does have a good point, Vista doesn’t have one single killer feature that appeals to everyone, it has thousands of killer features which appeal to different groups of people, and which other groups can’t see the value of.

For example – one of the killer new features for me as a developer is the way the start menu no longer creates columns going across the page when there are a large number of software packages installed. I had the “pleasure” of going back and using a Windows 2000 desktop last week, I can tell you now that a short amount of time doing that made me appreciate how much more productive I am on the Vista platform.

What operating system upgrades do is set a baseline which can shorthand discussions, for example, because I know that Vista is going to ship with WPF, WCF and WF I can simply say “you must be running Windows Vista to run this software”.

I think that everyone has forgotten that the thing that drives platform adoption – applications. Vista will make desktop applications sexy again – irresistably sexy, and that will drive Vista sales.

Coffee: Good and fast.

Coffee, without a doubt is the drug of addiction of choice for most people in Australia – I suggest that 90% of the Australian population drinks more coffee than beer or wine (90% of all statistics are made up), so its not surprising that the busiest time for serving coffee is a dash before start of business after most people have just reached the office after being caffeine deprived for at least one hour.

The humble coffee shop Barista therefore becomes a critical cog in getting people to work on time and alert enough find their way back to the coffee shop at morning tea. Given this, you may be surprised to hear that not all Baristas are created equal – I was reminded of this fact this morning.

I’ve been working out of Sydney for the later half of this week, and on the way to the client offices I stop off at the coffee shop (Voodoo Coffee) at the bottom of their building. I walk in, place my order at the counter then stand at the end of the counter ready to catch it as it flys of the production line. Its fast good coffee, in Canberra I can often get good coffee, but it seldom comes fast.

My theory is that there are two measures that matter when it comes to getting coffee, speed and quality and that quality ranks highest. Unfortunately I think that the distribution of those qualities amongst the Barista population looks something like this:


My daughter the punk.

P1010483This is my four year old daughter. I think she is a real cutie, and its easy to think that when she poses for the camera like this. This photo was taken today after she had her haircut, of course my wife didn’t bother asking my opinion about whether I thought she should get streaks in her hair or not. Can’t see the streaks? Check this out . . .


And we probably all know about that program on TV at the moment called “Honey, We’re Killing the Kids” where they horrify parents by telling them how their kids are going to turn out in the future. Well, I don’t need to go on that show to know what Bella is going to turn out like.

With a mother like Nicola, and a father like me, Bella is going to turn out like this geek chick from NCIS.

P.S. Bella – if you are reading this ten years from now, right when you are starting your rebelious phase, I want you to know that I knew it was coming – you can’t surprise me!

We will never be able to afford the ink!

Over the past month Nicola and I have been teaching Bella some basic computer skills through the use of some semi-educational computer games. The B has really taken to it with gusto and she now uses both a mouse and a trackball as if it was an extension of her arm (its amazing to watch actually). She is also picking up on her keyboard skills but her alphabet (which she can recite) skills are really the limiting factor there.

Anyway – this week Nicola installed a Sesame Street program onto her computer which allows Bella to draw pictures using different brushes and stamps. However, on consequence of teaching a child how to use a computer is that they actually learn how to use a computer, and in this case, Bella taught herself how to navigate a few of the menus to find the printing feature.

We will never be able to afford the ink!

My TechEd 2006 Bloggerview

Defintion: Bloggerview
Meaning: What you get when you conduct an interview via on a blog.

Geoff Appleby just shot me an e-mail letting me know that the interview he conducted with me has been posted up on the TechTalkBlogs group blog. It was an e-mail interview where my responses are posted to the blog (I’m calling it a bloggerview because I’ve always wanted to invent a new word).

Oh – and Geoff – I hope the clan starts feeling better!

Who would like to test our Continuous Integration server for Team Foundation Server?

At Readify we (well, one guy mostly) have been building a continuous integration extension for Team Foundation Server. Obviously building a continuous integration extension for Team Foundation Server is pretty straight-forward but what we have done is try to simplify the process by removing the dependency on IIS (but we do rely on .NET 3.0 BETA 2 currently – for WCF).

The other significant feature is that you don’t need to use BisSubscribe.exe, just install the service onto a seperate build server (we don’t recommend putting it onto the same box running the application or data tiers just yet because of the BETA dependency). When the extension starts up (runs as a service) then it will self register with the TFS event notifications service.

We are already using this build internally and it is working great! We still have a few issues we want to address before putting it out there for wider distribution, but it is certainly a functional piece of software. If you want to try it out just leave a comment on this post or shoot me an e-mail directly at

Healing the Web

BandaidOne of the reasons that I stayed on my old blogging engine (.Text) so long was that I had a huge amount of incoming links which I didn’t really want to break, not so much that I wanted to keep the traffic, but because if someone is following a link its usually because they are interested at what is at the end of it and there is nothing more frustraiting than getting a 404, or potentially even worse a DNS resolution problem.

For that reason when I started migrating my content over here to WordPress I committed to making sure that as many of the links as possible to the old blog would not return a 404, but would instead redirect to the new location of the same content on WordPress. This presented a number of challenges:

  1. Extracting a faithful representation of my content from .Text.
  2. Importing that into WordPress whilst loosing as little detail as possible.
  3. Introducing redirects for old post URLs.
  4. Contacting site owners who have linked to my blog and asking them to fix the links (with specific details).

Getting the content out of .Text was fairly straight forward. I went to the BlogML homepage at CodePlex and used the SDK (version 1.0.0) to rip it out. There were a few minor issues there because since I first submitted the code to the project in the first place, there had been a number of modifications to support later versions of .Text than I was running – that broke me. It took me about half an hour debugging the issue to remove the stuff that I didn’t need.

Once that was done I needed to transform the BlogML file into the native WXR format that WordPress supports for the bulk import of content. This was fairly straight forward and it was “fun” playing with XSLT, and in the end I had a representation that was faithful to the sample of WXR content that I had generated from WordPress – or so I thought.

WordPress Import Sagas

When I first tried importing my two megabyte content file it bombed out completely with a timeout error. After further investigation I discovered that this is probably due to a configuration on the host which stops scripts running for longer than a specified period of time.

I thought this was a bit odd since the code I used to generate the XML in the first place only took a few seconds to run and I wasn’t even being particularly careful about memory utilisation. I suspect that the LAMP platform that they are running on is probably not that fast at processing XML content based on how long it was running before it timed out (either that or the MySQL is painfully slow).

Anyway – enough LAMP-bashing. I wrote a program that takes the WXR file and breaks it down to small chunks. In the end I had to break them down into chunks of only ten items each. Each file then had to be uploaded seperately – thats right, I individually uploaded 100+ files.

Of course, before I got to that point I did quite a bit of testing to make sure the data was being imported correctly and I’m afraid that there is inconsistent date handling in there somewhere because while the dates are pretty much correct for the posts and comments, the times on the comments in particular are all 12:00am – this was odd because the input was based on the export that WordPress gave me so I would have assumed it would accept the same format inwards.

I think the issue here is that the WXR format extends RSS using XML namespaces, and the elements within that namespace add redundant information which could have been pushed into the pubDate element defined as part of RSS. The result is that with WXR, there are three dates that the WordPress processing code has to deal with – BlogML on the other hand is much more precise and there is no redundant information.

Next Steps

Its been an interesting week with WordPress. I’ve been mostly focused on getting my content across, but over the next little while I’ll start mapping the old .Text post URLs to the new WordPress generated ones.

I’ll probably do this by exporting the content from WordPress and doing a match on the post titles (although I know there are a few formatting issues that will lead to mismatches – but it will get it down to enough to handle match them). I can then put redirects into the ASP.NET configuration file at which will redirect people that land there get redirected to the new location.

Thats not the end of it though because eventually I don’t want those old URLs to be used, so using search engines (MSN Search and Google) I’ll find all the pages that link to the new URLs and see if I can get them changed.

With a bit of luck I’ll be able to turn the redirects off by the end of the year, but I will monitor the statistics on the old hosting provider.


Who is going to use Event Monger and how are they going to use it?

In my previous post about Event Monger I said that I would post up a list of specific end-user scenarios. A scenario is a dirt simple – plain english description of how someone will use the system. They aren’t really supposed to be a technical description, but more something that you can agree with the customer on – in this case the customer is me so it was easy to reach agreement.

Defining Personas

In Event Monger there are really three different types of users, Organisers, Speakers and Attendees. To help understand these users a little bit more those links go to copies of (very small) persona documents that I have written. If I find out more about the users that will be using the system I’ll update those documents.

The Workflow

The users of the system participate in an overall workflow which results in the running of a successful event. The workflow, combined with the use of Event Monger will have five stages that I’ve been able to distill, these are Install, Plan, Promote, Attend and Review.


Each of these steps in the workflow have scenarios that support them, and those scenarios can be mapped against the personas.

Installation Scenarios

The following scenarios are related to the initial installation of the Event Monger software. I want this to be as seemless as possible. The people doing the work should only need to have some ASP.NET 2.0 hosting space with a SQL Server account.

  • Event Organiser
    • The event organiser installs and configures Event Monger at a remote ASP.NET hosting provider.
    • The event organiser logs into Event Monger and defines a list of other event organisers.
    • The event organiser logs into Event Monger and adds event specific flair.

Planning Scenarios

This is really just the initial data entry required to get the event kicking over itself, doing things like setting the themes for the event by defining tracks for example.

  • Event Organiser
    • The event organiser defines a list of venues, rooms and dates, and provides links to useful information resources.
    • The event organiser defines a list of event tracks with a brief overview of what they are about.

Promotion Scenarios

For a technical community event its a pretty good idea to put your ear to the ground and figure out what people want to hear about (within broad guidelines). So this is all about getting speakers to submit things they are happy to present on and then getting people who _might_ attend to vote on those submissions.

  • Event Organiser
    • The event organiser opens the Event Monger site up for submission of session abstracts.
    • The event organiser accepts a session abstract.
    • The event organiser rejects a session abstract.
    • The event organiser opens the Event Monger site up for voting on accepted session abstracts.
    • The event organiser creates the final schedule for the event based on prospective event attendee feedback.
    • The event organiser sends a notification to prospective event speakers asking them to confirm their attendance.
    • The event organiser sends a notification to prospective event attendees asking them to confirm their attendance.
    • The event organiser sends a reminder to event speakers and attendees about the upcoming event.
    • The event organiser changes the schedule based on a speaker cancellation.
  • Event Speaker
    • The prospective event speaker registers on the site and submits a session abstract.
    • The prospective event speaker registers on the site and submits an additional session abstract.
    • The prospective event speaker logs into the Event Monger site and confirms their attendance.
  • Event Attendee
    • The prospective event attendee registers on the site and votes on session abstracts.
    • The prospective event attendee logs into Event Monger and votes on more session abstracts.
    • The prospective event attendee logs into the Event Monger site and confirms their attendance at a particular venue.
    • The prospective event attendee registers on the site for the first time and confirms their attendance.

Attendance Scenarios

Once you are at the event the site tends to be forgotten, but it can actually be a useful posting area for all sorts of information. For example, at Code Camp Oz last year a whole bunch of MVPs held a number of informal sessions on a much more diverse range of topics than the Code Camp was really intended to cover. A specific room wasn’t scheduled for them so they just put up on a whiteboard which room they were doing their stuff in – great for BOF sessions too.

Of course – this is also a good time to collect all the collateral that the presenters used during their session if they are happy to share it.

  • Event Organiser
    • The event organiser opens up the Event Monger site for the submission of community notices.
  • Event Speaker
    • The event speaker uploads slide decks and any other collateral to the Event Monger site and associates it with their session abstracts.
  • Event Attendee
    • The event attendee logs into the Event Monger site and reviews and adds to the community notices.

Review Scenarios

That’s a wrap! After the event there are a few things that need to be done like writing up a quick review of the event so that if someone comes to visit the site its clear that the event has passed. Its also a good time to send thank-yous so that hopefully the speakers and attendees come back again next time. I’m not quite sure how this part of the workflow works with multi-venue events that span different time periods.

  • Event Organiser
    • The event organiser closes down registration and writes a post event synopsis.
    • The event organiser downloads a mailing list of all event speakers and attendees.
    • The event organiser sends a thank-you message to event speakers.
    • The event organiser sends a thank-you message to event attendees.
  • Event Attendee
    • The event attendee downloads collateral assocaited with their favourite sessions.

Your thoughts?

What are you thoughts about the scenarios that I have outlined above? I’m not sure if I am going to get to all of them before the 4th of August so I’m going to do a little bit of prioritisation. I’d love to hear from you on what is most important, what can be dropped, and have I missed something completely?