Monthly Archives: November 2005

Two Years Blogging

On the 28th this blog turned two years old and I thought it would be interesting to post up a bit of a summary of the past two years on this blog. I thought it would be interesting to plot posts against comments.


I’ve also decided that for the next month I will not post anything to my blog. I am taking a bit of a break because I have found it hard to keep up the same level of blogging that I had earlier this year. Hopefully I will come back refreshed and with lots of interesting things to say.

Thanks for listening and see you in January!

Using TFS shelvesets to check if you have introduced a new bug.

Last night I was making a few code changes to an application to see what would be involved implementing a new feature. There weren’t that many changes but they were split across several layers of the application. To my dismay when I launched up the application the data field (silently) to read and write that data from the underlying storage system.

Because I had made a few changes it was possible that I had introduced the bug and I wanted to quickly check against the implementation that I got when I took the branch to implement the feature. Rather than manually putting aside the source files that I had modified (what were they again?) I decided to create a shelveset of my changes then undo my pending changes to take me back to the baseline.

I determined that there was an underlying bug in the code and that I hadn’t introduced the bug so I restored the shelveset and continued tinkering. The outcome isn’t that interesting, but I think the use of this unique TFS feature was a real time saver for me, and its not the first time that it has paid dividends.

Checking in with a child.

I’m sitting at the gate lounge waiting for my flight. Bella (my daughter) isn’t here yet, her grand parents will get her here around 4 to 5pm.

When I arrived at the airport it dawned on me that I would need to check-in with Bella, otherwise they wouldn’t give us seats next to each other (not a problem for me, but the person sitting next to Bella might have an issue with it).

Based on previous experience I thought they were unlikely to give me her ticket without her standing next to me so I was potentially looking at a long wait on an uncomfortable seat – it was then that I devised a cunning plan.

The Virgin Blue Quick Check booths were standing there, and I had a soft copy of the itinerary so I positioned the bar code to the top of the screen and fed it into the scanner. Just like clock work it gave me the option to print Bella’s ticket as well.

At this point I’d like to thank the programmers of this terminal for not encoding all the business rules into the Quick Check system. Its comforting to know that someone could abduct my child and fly them interstate without anyone stopping to question them at the airport.

Anyway – back to cutting some code.

Hands-on Day: The Deed is Done

I got on the plane this morning at 6:45am with my daughter to fly down to Melbourne to present at the Victoria .NET User Group’s Hands-on Day. Bella needed to come with me because Nicola had a prior engagement that she couldn’t cancel/re-arrange.

Obviously Bella couldn’t be at the hands-on day (she would steal the show) so her grand parents picked her up at the airport and dropped me off at the venue (thanks guys!). My bit started at about 10:40, and I went until about 11:30, then the attendees did a few hands-on labs and I wrapped up with a really quick look at some IDE enhancements.

I think it went down well, but I guess this stuff doesn’t really stick until you get to use it at work in anger.

The Importance of a Good Code Name

Yesterday I attended a meeting with a member of a clients configuration management team. Eventually the topic of “what do you want to call your source repository” came up and we all looked at each other and blinked.

Eventually a neuron in my brain triggered and I realised that this was an opportunity to pick a code name! Several good options were put on the table but for some reason the development team leader baulked at them and opted for something mundane and boring ().

I can never understand why people choose grey names for projects, its their opportunity to put some of their personality into the project, but more importantly a good code name serves several useful purposes. A good code name:

  • is a short hand way to refering to the system.
  • is great for starting elevator pitches to executive management.
  • is a way of avoiding analysis paralysis on namespace naming.

If I have convinced you to create a code-name for your project, here are a few rules that I would stick to for .NET projects:

  • Avoid acronyms, they look like crap in namespaces.
  • Prefer a single word codename, two word tops.
  • Make it easy to search and replace in code.
  • Place names, people names and funny words make great code names.

Do you have a code name for your project? If not, make one up and just start refering to the project as that – see how quickly your co-workers catch on.

This is the life . . .

I decided to catch a slightly earlier bus to work today so that I could catch up on a few podcasts. The first one that I had scheduled to listen to was the SQL Down Under podcast. This one is something special because it has Dr. Jim Gray who has had a hand in products such as DB2, Oracle RDB and of course several generations of SQL Server.

The hard questions about why SQL Server 2005 was so late were asked, but also questions about the future. I find the possibilities created by the CLR in SQL and LINQ coming down the line truely facinating. Is SQL going to become a data-aware application server? What happens as boxes scale up – is the midrange getting close to being able to clobber a mainframe without a cluster?

Greg also made a really great point about the reason for getting involved so early in product release cycle. Basically it boils down to being able to avoid having to keep on top of the evolving technology without having a massive learning curve every time a product ships.

Anyway – great show Greg!

Follow-up: Coding for Testability

I got a few comments (3) when I posted up about coding for testability. Paul took the time to post a detailed comment which came out kind of mangled and then followed up on his blog. Paul extends the pattern, essentially adding a fair bit more code and structure – this is a good thing if you can keep it up, but I wonder if I did a spot inspection of Paul’s code whether he had used it uniformly ().

Actually – the main point that I wanted to make is what effect a simple change can have on testability. I also think that if you can be more surgical in which parts of the program you mock with test harnesses you can reach into different parts of the code. This helps you test specific things, but it also helps drive your code coverage up.

Heading down to Melbourne for the VDNUG Hands-on Day

I’m heading down to Melbourne on Saturday to speak at the Victoria .NET User Group’s Hands-on Day being held at Cliftons. Bill McCarthy and Peter Stanski were originally slated to present but had to pull out. The title of the session is:

CLR, VB and C# IDE and Major Changes

I’m probably going to do more C# than VB but I will be sure to show how to use VB to exploit the latest changes in the CLR. I’m looking forward it, I haven’t been to a Melbourne event since the user groups officially merged under VDNUG.

BizTalk 2006: First Impressions

Earlier this week I downloaded a CTP of BizTalk 2006, the first public build to be stabilised against the RTM version of the .NET 2.0 runtime. I’m doing a fair bit of work with BizTalk 2004 at the moment so I was interested to see what improvements they had made in the product.

This wasn’t my first attemped install of BizTalk, I had tried to do it three months ago when I got my hands on some very early bits – the installation hung on my machine, so hopefully this time around I would get further.


The real test for an installation of BizTalk is whether or not you can go through an installation and get it right without reading the absolute latest version of the deployment guide. I actually did quickly skim it just to see if anything jumped out at me – nothing did so I kicked off the installation.

The installation process has been revised a little bit and I liked the way that it went and downloaded the pre-requisites from Microsoft directly. That was always a pain previously – having said that, if you are installing BizTalk 2006 into a secure environment you are probably going to need to get the pre-reqs manually anyway since you will probably not be able to connect out to the Internet.

There were no complaints during the installation process but after it was all up and running I noticed that a number of SQL jobs were failing. The reason was that I installed using my domain user account onto my laptop which usually doesn’t have a connection to the domain controller – so SQL was essentially saying it couldn’t run the job because it couldn’t verify who I was.

It may be been in the deployment guide but I think next time I install I will use a local account to avoid that particular issue.

Administration Tools

One of the first things that I noticed was that the contents of the program menu for BizTalk had changed. Most notably, the Deployment Wizard wasn’t there.


The configuration wizard had run automatically after the installation so all the databases were set-up, and it is worth noting that it has been given a bit of a face lift, unfortunately I think they took the bandages off too early and it has caused some scaring.


The tool itself is functional and gives you a lot of feedback about the health of the configuration and I am looking forward to having my first serious configuration issue and seeing how this tool helps me out. For now, I just want to point out a few UI-related things to the developers or PM behind this tool.

  • Don’t use a tree view as the navigation tool, it is so last century, do something like they do in the Windows XP Control Panel with the collapsable regions and hyper-linked navigation style. If you did that you could probably get rid of the menu strip and tool strip.
  • Don’t give the form a sunken edge.
  • Make the form resizable.

Before I move onto the new administration tool I need to point out that the Health and Activity Tracking tool hasn’t been given a face lift, although that didn’t worry me too much because all the functionality that I wanted from it has been moved into the administration tool – thats right the Administration Tool is now a read/write view over your BizTalk deployment! Lets have a look at the UI for the new administration tool.


Man – thats slick! Lets have another look just for good measure!


Ooooh! Gives me goosebumps! The tool is looking remarkably similar to the Enterprise Manager from SQL Server 2000. Under the covers it is actually using the new Microsoft Management Console 3.0 technology which introduces explicit support for managed code developers.

A few years ago I was asked to produce an MMC snap-in for the older MMC 2.0 technology and after about a week of trying to do everything that I wanted I decided to knaw off my arm and get out from underneath the mountain of COM interop code.

Hopefully developers who are producing server applications will use MMC 3.0 to provide administrative interfaces to their software – even for line of business applications. Having said that – the SQL 2005 team didn’t, but it probably wasn’t ready in time (they had already taken too many dependencies).

Anyway – back to BizTalk 2006! The first thing I noticed about the tool was that everything was much more configurable from the administrationt tool, pretty much everything you could do via the Visual Studio 2005 BizTalk Tool Window you could do here.

One thing I liked as the logical grouping of configuration settings into applications. You can create them directly in the console then load in your assemblies (under the resources section).


Once you load in your assemblies (it gives you the option to load them into the GAC) the Pipelines, Maps, Schemas and Orchestrations sections get filled out. You can then go in and configure the send and receive ports in the tool. I managed to deploy an orchestration via the administration tool in a few minutes without any trouble.

As you can probably surmise from the picture above I moved on to creating an “Enterprise Service Bus” application. I’ve since been advised that ESB is a Gartnerism, and as such I should refrain from using it – especially on this blog (given the name).


So far the in Visual Studio 2005 experience is pretty similar to BizTalk 2004, but I really have tried doing anything fancy yet. Basically I built a quick pub/sub application which does translations to and from a canonical schema. The development phase went fine although there a few issues in deployment, one of them was a layer 8 problem (as Rocky would put it) which Bill was able to help me out with.

One thing that caused me some frustraition was that I was starting and stopping the logical application so it could start processing new messages/schemas that I had defined but it wouldn’t pick up the message type. Initially Bill thought it might be because the BizTalk deployment from Visual Studio did something extra to make BizTalk pick it up – but I have since discovered that I had to restart the host instance for it to be able to pick up the message type.

Once that was sorted it was smooth sailing – I kicked a few tires around inbound and outbound maps including flat file schemas and it all seems to be working OK.

There were a few things that I was disappointed about. One of my other passions at the moment is Team Foundation Server and I’ve been informed that the BizTalk project type won’t be supported by MSBuild natively which means we have to do some MSBuild hacks to get it to execute I hope they reconsider that feature exclusion because BizTalk definately plays in the enterprise space and I would expect it to work with Microsoft’s premier team development tools.


I think this version of BizTalk is going to be the first one to really get me excited. I always felt that BizTalk needed better administration tools and I think we get it in this version. The streamlined deployment and configuration process will make it appeal more to developers who are used to have good tools for other application infrastructure components like SQL Server.

Integrate Learning into Everything You Do

You are a trader. You trade your time and skills for a monetary compensation. How much you get compensated is directly related to how much the person you are trading with values your skills. If you aren’t getting paid enough it is because you negotiated poorly or what you were selling wasn’t valuable enough.

Sometimes, as a trader, you manage to strike a bargain with your trade partner where they pay for you to acquire new skills. Don’t be fooled into thinking that this is for your benefit! Your savvy trade partner has realised that it would be cheaper in the long run for them to pay a bulk sum to get you trained up and continue to pay you the same ongoing amount than to have you go away and train yourself and come back demanding higher compensation forever and a day.

If you can manage to increase your compensation and have your trade partner pay for your skills improvement that is a truely sweet deal – a sign of good negotiation skills on your behalf!

Still – you will receive the greatest reward when you manage to acquire a new skill on your own because you can bring it to the trade table and sell it royalty free. In order to do this, and minimise your own costs you are going to need to learn how to integrate learning into everything that you do.

In the software development field there is a tendency to learn a new technology and stick to it until your skills reach obsolescence then start the cycle again. The result is a plateu effect.


Whilst it may appear the IT is continually evolving that is only because of the cumulative effect of everyones cycle overlapping. What you need to do is beat everyone else by bringing your skills to market before them, but in order to do that you need to minimise the amount of time you spend on the plateu.


How do you do it? Well I guess that is unique to everyone, but what I do is actively try to introduce new technologies into the projects that I am working on and try something different each time I do something that could be done the same way that I always did it.

Does this not introduce risk? Absolutely – but you don’t get rich in business without taking risks!