Nov 30, 2007

Do You Need Multiple Remote Desktop Connections?

OK, so this might not be applicable to everyone who reads this blog, but if you’re one of those people (like me) who often opens multiple remote desktop connections and then ends up getting confused as to which is which then you might want to have a look at Terminals (from Codeplex)

Terminals gives you multiple tabbed remote desktops something like this:


It's a piece of cake to install as well.  Just unzip it somewhere and create a shortcut to the Terminals.exe program.

Finally it's not just for remote desktop connections.  As you can see in the title bar it also includes VNC, RAS, Telnet, SSH, Citrix support, and it also has a bunch of extra networking utilities accessible from the tools menu, like ping, traceroute and more.  Definitely worth checking out.

Nov 28, 2007

I've Deactivated my Facebook Account

Want to know why?  Because my privacy is MY privacy.  See Dare's rather scary blog post for a deeper explanation.

Bye-bye, Facebook.  RIP.

Nov 20, 2007

Problems with the new MSDN Download Manager

I love that VS2008 has finally hit the street, but I can't stand the new Akamai MSDN Download Manager that they've decided to use to distribute it.


It's so poorly done from a UX perspective and security perspective I just can't get over it.


Here's a few different situations that I've already run across...

#1 Closing Internet Explorer while Downloading

Download Manager (DLM): Do you want to stop downloading?

Me: No

DLM: Well, I’ll close anyway

DLM: Now I’ll Restart

DLM: Oops! Your download is corrupt

DLM: Did you want to start downloading again?

Me: Yes.  And thanks for wasting my bandwidth!  Grrr!


#2: Play "Where's the Download Manager"?

Alt+Tab to the desktop.

Now Alt+Tab and try and find the download manager again – it doesn’t even appear in the app list!


#3: Try to Save the File

DLM: Select the save location for the iso file.

Me: “My Documents” (the default)

DLM: Sorry you don’t have permissions. Contact your network administrator

DLM: How about I save in temp files for you.  Do you want to open the folder?

Me: No.  You dumb piece of ....   I want to put in My Documents!

DLM: OK, but I'm going to ignore you and I'm going to hide now... (see #2 above).


By the way, if you try to find the file via Windows Explorer then you'll be plum out of luck.  You need to do the following to find it:

  • Start Windows Explorer as Admin and go to:
  • C:\Users\<<YOU>>\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\C\Users\<<YOU>>\Documents

What a corker!  Did anyone actually test this thing?!!!


#4: Pop-Up Blocker left On

You go to the MSDN download page and forget that your IE Pop-up blocker is on.

Click the download link.

If you're eyes are quick you may see the IE Yellow bar appear or a fraction of a second.

The page refreshes almost immediately, the bar disappears so you've got no time to respond.  If you're eyes aren't quick it just looks like the page posted back without doing anything.

You'll need to either turn off the pop up blocker or use ctrl+click on the file link next time.


Hmm.  Not the best piece of software in the world.

Nov 14, 2007

Personality Types and Agile Development

You've no doubt heard of the various types of personality profiles that exist (you can try a free one at The most common profile is the Briggs-Myers one though there is also one for a DPSA profile.

The following is from the Marker Consulting description of DPSA profiles

D - DRIVER: Decisive and Direct. Drivers want to take charge in order to succeed and win.
P - PROMOTER: Outgoing and Optimistic. Promoters want to influence others and inspire them to act.
S - SUPPORTER: Sympathetic and Accommodating. Supporters want to help others and solve conflicts.
A - ADMINISTRATOR: Precise and Reserved. Administrators want to do things right and pay attention to detail.

And if you don't know Briggs-Myers profile it tries to type all people using four classifications:

  • Extraversion - Introversion
  • Sensing - Intuition
  • Thinking - Feeling
  • Judging - Perceiving

The first criterion, Extraversion - Introversion defines the source and direction of energy expression for a person. An extravert has a source and direction of energy expression mainly in the external world while the introvert has a source of energy mainly in the internal world.

Sensing - iNntuition defines the method of information perception by a person. Sensing means that a person believes mainly information he or she receives directly from the external world. Intuition means that a person believes mainly information he or she receives from the internal or imaginative world.

Thinking - Feeling defines how the person processes information. Thinking means that a person makes a decision mainly through logic. Feeling means that, as a rule, he or she makes a decision based on emotion.

The fourth criterion, Judging - Perceiving defines how a person implements the information he or she has processed. Judging means that a person organizes all his life events and acts strictly according to his plans. Perceiving means that he or she is inclined to improvise and seek alternatives.

Personally I came out as strong Driver on the DPSA profile, and an INTJ (Introvert, Intuitive, Thinking, Judging) with a very strong Thinking component.  No real surprise for those who know me.


One of the interesting things is that if you look at a basic description of an INTJ you'll see the following:

"When they are in leadership roles, they are quite effective, because they are able to objectively see the reality of a situation, and are adaptable enough to change things which aren't working well."

Why is this interesting?  Simply put, Agile methodologies are all about adapting how things are done to the situation at hand. And this is exactly what an INTJ leans towards.

This then leads on to another question.  Does agile only work if people have the right personality type?

For me, as  a Driver with an INTJ personality, agile is right up my alley.  But what if you're an Administrator or Supporter, or you're the opposite to an INTJ?  Can you still succeed on an agile project?  Will you find it as painful as a visit to the Dentist or as tedious as waiting for a Qantas flight?

It's a tough question, but one worth asking.

If you flip the agile coin and think about Waterfall projects and then have look at the personality overviews you could think that the ISTJ personalities would seem ideally suited to Waterfall.  Fixed requirements delivered using a methodical, traditional approach.  So if you put these types of people in an agile project wouldn't it make them really uncomfortable having to deal with uncertainty day in and day out?  Could that result in team friction, poor morale or a host of other problems?

Does it mean that forming teams means you need to have only people of certain personality types?

It's a really interesting set of questions and something I've been thinking about for quite some time.


So, to apply some very non-scientific research to my theory I'd like to do a straw poll of any who's worked in an agile project:

What's your personality type (both DPSA and Briggs-Myers if possible)?  And how much did you/do you enjoy agile development?

Post your responses as a comment.  I'm really curious to see the results.

Nov 13, 2007

How to Attract Good Developers

In software development the value of having the best people you can get can't be understated.

Now, the clamour for good .NET developers in Australia is just nuts at the moment. The demand is so far outstripping supply that any developer worth their salt is snapped up in no time flat. In fact any programmer who write the hello world program and get it to compile in under 1 hour is snapped up with glee, and even those that like licking windows and can't tell what those bumpy things on the keyboard are for still seem to get great jobs. It's just crazy at the moment.

Readify (my employer) is a premier employer for top .NET talent and has, at last count, 10 Microsoft MVP's on board, plus a bunch of other extremely talented and gifted individuals. We're hiring at the moment and we're feeling the pinch of a dried up talent pool as much as anyone else.

So in such an environment how does Readify find the best people they can? How do they attract top talent and how do they get people to see them as an employer of choice? Well, top people know other top people, which can help you know who's becoming available. And there's the company itself - the virtual structure, the "elite commando's" sense of working with the best of the best, the fact that Readify keeps ahead of the curve with the latest technologies, that they provide staff with one month of paid Professional Development per year, that they give people opportunities for public speaking through the RDN and all the other miscellaneous benefits. And then there's the fact that they look in unusual places for great talent. Take for instance the Imagine Cup.

As part of sponsoring the Imagine Cup this year the top 3 Australian teams will all win jobs with Readify in the Readify Dev Centre. How good is that?

What a great way to find and attract the up and coming talent!

It sure beats posting endless job offers on and being the same as everyone else.

Now if you're ineligible to enter the cup and you're not happy in your current job (or you live overseas and you're thinking of a move to Australia) don't despair - Readify is still interested in you. So if you think you've got what it takes to join the best technical people in Australia apply for a job today.

Nov 12, 2007

Extended Stand-ups

It's an interesting thing watching how different teams adapt agile methods to improve what they do.  One team I've been involved in recently runs on a 4 week iteration and each Monday performs what amounts to an extended stand up.

At the usual stand up time the scrum master does a quick recap of the previous weeks activities and a reminds people of what's left in the iteration.  For teams running longer iteration cycles this is really useful in that it prevents team members answering the 3 questions like this:

Yesterday (Friday): "It was a big weekend and I can't remember what I did.  I'm sure I did something but I'm not sure."

Today: "Um, Once I remember what I was doing I'll get into it.  Looks like I was doing Task D, but, um, yeah.... I'll do that"

Impediments: "Alcohol, lack of sleep, memory problems"

By recapping the previous weeks activities the team has a chance to get their brain cells moving again after the weekend  and have time to reestablish some context for what they were doing the week before.  In reminding people of what's coming up for the week people have time to think about the tasks they have put their name against and can double check that what they were planning on doing today is actually relevant.

Once the iteration recap/refresh is complete the team moves straight into the normal stand up.  The extended standup may take another 5 or 10 minutes to complete but that extra time is well spent if it helps the team get the week started on the right foot.

Nov 6, 2007

Using Team Build to Deploy Database Projects to Different Servers

I had a situation recently where I was building a solution that contained a Database project (.dbproj) built using Visual Studio 2005 Team Edition for Database Professionals (aka DataDude).

In Team Build there were two different build types.  One for Continuous Integration and one for the Nightly Build.  The CI build simply compiled the solution and ran some tests locally, whereas the nightly build also deployed the database to a test server and refreshed the application on the test server.

As part of the build process I had something like this in the project file:

TargetConnection_A>DataSource=ServerA%3BIntegrated Security=True%3BPooling=False%3B</TargetConnection_A>
TargetConnection_B>DataSource=ServerB%3BIntegrated Security=True%3BPooling=False%3B</TargetConnection_B>
Target Name="xxx">
Message Text="Deploying Database Locally" />
MSBuild Projects="db1.dbproj" Targets="Build;Deploy" Properties="TargetConnectionString=$(TargetConnection_A)" />
Message Text="Deploying Database Locally" />
MSBuild Projects="db1.dbproj" Targets="Deploy" Properties="TargetConnectionString=$(TargetConnection_B)" />

Simple enough, really.  To do the second deployment you just change the connection string for the database project and re-deploy, right?  Well, actually it's not.  If you try this you'll get an error in your build log that looks something like this:

Deploy error TSD151: .Net SqlClient Data Provider: Msg 50000, Level 16, State 127, Line xx The server name in the build script ServerB does not match the name of the target server ServerA.  Verify whether your database project settings are correct and whether your build script is up to date.

This is a bit surprising, especially as the build & deploy to Server A works correctly.

Well, as it turns out, when a database project is built it creates one huge uber-script and embeds within it the knowledge of the server it should be deployed to.  It also adds a check that the server in the connection string matches the server it thinks it should be deploying to, so even though you change the connection string before calling the script you'll get an error occurring based on the fact that the servers don't match.

If you look at the MSDN documentation on this topic they'll tell you to modify the database project settings directly in order for the deploy to work in Team Build, however this is a flawed approach as changing the project properties will affect everyone in the team (and you don't want them all deploying to the one database by default, do you?) and it also doesn't solve the problem of deploying the database twice.

Now you could try changing the targets in the second MSBuild step to use "Clean;Build;Deploy" as the targets but what happens in this case is that the compiler determines that the source hasn't changed and it therefore has nothing to do, and the uber-script isn't changed.  As such you'll still received the same error as before.

The solution then is to force a rebuild.  This is easily done by changing the targets for the second MSBuild to use "Rebuild;Deploy" as shown here.

<MSBuild Projects="db1.dbproj" Targets="Rebuild;Deploy" Properties="TargetConnectionString=$(TargetConnection_B)" />

Once you've done that, everything should work and your builds will then deploy the database to multiple servers as expected.

Nov 5, 2007

Slides from My Agile Presentation

For those of you who were in attendance at my Agile presentation this afternoon I've uploaded the slides to SlideShare (and embedded the presentation below).  I had a great time talking with you all and would have loved to spend more time with you.

Note: While Slideshare is a really wonderful tool for sharing presentations it still isn't perfect and some of my fonts have been changed.

As always, feel free to post a comment with your questions and thoughts.