Friday, November 16, 2007
Wellington is a happening place if you want to learn something new. Last week at the .NET user group we had a great presentation by Jeremy Boyd on the developer features in SQL 2008.

Next Wednesday we've got a presentation on IronRuby by Ivan Porto Carrero.

Mark Carroll is starting a new Team System user group in Wellington, the first meeting is 28 November (Jeremy has the details).

As well as .NET and Team System, other user groups in Wellington are:

If you managed to go to all of them, you'd be eating lots of pizza!


posted on Friday, November 16, 2007 9:45:09 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Wednesday, November 14, 2007
Perhaps more interesting than the other PowerShell features announced in the past week, the SQL 2008 team will release a PowerShell provider in their latest CTP.

For a little more on providers, see my earlier post. I hope the provider allows data access, and not just management capability.

Looking forward to having a play with that when I can get my hands on it!

posted on Wednesday, November 14, 2007 11:10:50 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
Reading, transforming and instrumenting MSIL has been something that has kept me interested (and sometimes over-wraught) since the .NET framework came out in 2000.

It's interesting to see the benefits that a common intermediary language and a virtual machine bring to the party: difficult problems can be dodged by programming language designers (such as garbage collection); languages can interoperate; compiled code can be platform independant, and JIT compiled when needed -- and doing fun stuff with compiled code is easier (and more fun!) with MSIL or Java bytecode.

A few interesting things have happened with Java bytecode over the past few years, with a couple of high profile cases recently. Java bytecode is no longer just the output of a java compiler and the input for the Java Virtual Machine:
  • Google's new Android phone platform translates from Java bytecode to its own virtual machine -- which is not a JVM (via Miguel and Stefano)
  • IKVM.NET, a runtime and set of libraries that convert Java bytecode to .NET MSIL
  • Jython, a version of the python language that compiles to the JVM
Of course the same thing happens in the .NET land -- there are a multitude of languages that compile to MSIL, and MSIL can be run on the Microsoft .NET CLR, Mono's runtime engine and a few other runtimes built by Microsoft and third parties.

The angle taken by Google in developing an alternative virtual machine, rather than using the CLR or Sun's JVM is very interesting. On one hand, they have the benefit of full control of their platform, and this move means that they are not reliant on other vendors solutions. They promise to open source the platform, so the typical arguments about closed proprietary platforms may not apply, but it will still be interesting to see how another VM fits into the ecosystem.

posted on Wednesday, November 14, 2007 10:14:33 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Thursday, November 08, 2007
I think it was Derek that first convinced me of the beauty of the Guid, and I have been using them in databases ever since.

Wade Wright has written up the "Gospel of the Guid". It has a humorous coverage of some of the good Guid reasons:

  • No database roundtrips to get the next integer ID
  • Easy merging, mirroring and deletion of erroneous merges
  • Ability to wire up relationships in memory before saving
I remember when I first started using Guids there was talk of them not being unique, due to dodgy network cards having the same MAC address. Thankfully that's no longer a problem.

Something that I struggle with though, is the lack of type safety when using Guids. e.g.

Guid personId = Guid.NewGuid();
Guid bookId = Guid.NewGuid();

Library.BorrowBook(personId, bookId);

...or is it this way around?

Library.BorrowBook(bookId, personId);

There's no compiler checking that the correct Guid is passed to the right parameter. I've been toying with a Guid wrapper that would be a bit like a typedef in C++, but typesafe. Has anyone already done this?
posted on Thursday, November 08, 2007 9:10:30 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [3]
I seem to spend less time in Virtual PC and more time in (nested) remote desktop sessions these days. I'm not a huge mouse fan, and when using the keyboard I need to do this when I'm in a windowed remote-desktop session:
  • ALT+PgDn / ALT+PgUp - cycle through programs (ala ALT-TAB)
  • ALT+Home - display start menu (ala CTRL-ESC)
My fingers still do the regular ALT-TAB / CTRL-ESC the first time round, but after a while I remember to use the alternate shortcuts.

Thanks to Mark Wagner.

posted on Thursday, November 08, 2007 8:36:14 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Wednesday, November 07, 2007
Adam from Xero and I went to look at the Eee PC at Dick Smith's today. Quite a cute little PC that has no spinning hard drive, no fans and only weighs 900 grams.

Looks like a nice little email / web PC, but the screen is a little tiny for my liking. The install of Linux is quite smooth, and Firefox is integrated nicely onto the desktop.

Quite good for $600NZ though!


posted on Wednesday, November 07, 2007 9:13:35 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [4]
I've been looking forward to the CTP of PowerShell 2 for a while, and it's finally here.

I'm looking forward to installing it on a VM tonight (don't install it on your production / main desktop system just yet).

The stand-out features from the two blog posts (The Community Technology Preview (CTP) of Windows PowerShell 2.0, What's New in CTP of PowerShell 2.0) are:

PowerShell Remoting

"Windows PowerShell 2.0 provides support for executing Cmdlets and Scripts remotely. PowerShell Remoting allows managing a collection of remote machines from a single client. Managing remote computers using PowerShell 2.0, requires that PowerShell 2.0 be installed on all the computers taking part in the operation; that is the client computer and the computer(s) being managed."

This solves a problem that a lot of sysadmins have - being able to nicely administer many machines in their farm / network using PowerShell.

Background Jobs

"Windows PowerShell 2.0 introduces the concept of a background job (PsJob).  A PsJob runs a command or expression asynchronously and "in the background" without interacting with the console. The command prompt returns immediately and you can query for the job results at your convenience.  You can run background jobs on a local or remote computer."

Hurrah! I was surprised how much I missed this unix feature, so it's good to see background jobs make an appearance. I'll be interested to see if they have changed the threading model within PowerShell.

Graphical PowerShell

"This release includes a very early alpha version of the new graphical shell..."

Definitely something that people want, although others have filled the void quite well up until now. Looking forward to playing with this.

Well done PowerShell team!


posted on Wednesday, November 07, 2007 9:27:23 AM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Thursday, September 27, 2007
No, not PowerShell.
I have been having fun measuring how much electricity our house uses, and which appliances are the worst offenders (Oil column heaters = bad, heat pump = good).
The tool I have been using is a Centameter, which is a clever little gadget that you clip onto your mains feed into your house ( You can also get one for a single power point from Jaycar.
A good idea if you want to reduce the impact your consumption has on the world (and your wallet!)


posted on Thursday, September 27, 2007 9:16:32 AM (New Zealand Standard Time, UTC+12:00)  #    Comments [2]
 Friday, September 21, 2007
James Newkirk and Brad Wilson have cooked up a new testing framework for .NET development:

In his blog post announcing, James outlined the reasons why they have created a new framework -- primarily to bake best practice techniques into the test framework, and leverage some of the newer .NET features.

The Comparison between Nunit, MSTest and page on the site lists some of the differences between and Nunit / MSTest. Removing setup and teardown, and providing aspect-like functionality are both interesting angles which I want to spend some time with.

Here's a couple of examples from the samples download. First, an example of usage of BeforeAfterTestAttributes, which let you add behaviour before and after the execution of a test (ala AOP):

[Test, TracingSplicer]
public void TestThis()


public class TracingSplicerAttribute : BeforeAfterTestAttribute
    public override void Before(MethodInfo methodUnderTest)
        Console.WriteLine("Before : {0}.{1}",
            methodUnderTest.DeclaringType.FullName, methodUnderTest.Name);

    public override void After(MethodInfo methodUnderTest)
        Console.WriteLine("After : {0}.{1}",
            methodUnderTest.DeclaringType.FullName, methodUnderTest.Name);

Here's an example of test method extensibility:

[RepeatTest(5, Timeout=500)]
public void RepeatingTestMethod()

You can create your own attributes that inherit from the TestAttribute base class, and define what will happen when the test runs (in this example, the test will run 5 times).

Good work guys, looks useful!

posted on Friday, September 21, 2007 10:03:26 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Thursday, September 20, 2007
If you've been a Perl programmer, you've probably used File::Temp occasionally, to generate unique filenames for temporary files and clean up afterwards. In other lanuages you may have used a variation of the standard POSIX tmpnam or tmpfile.

In PowerShell, you'll often need to generate temporary files, especially if you're working with import-csv or import-clixml -- as they don't support data on the pipeline.

There's not (yet) anything I could find that is quite as nice as File::Temp, but if you want to generate a unique filename or directory name, or create a temp file on disk ready to be used, you can use these methods on System.IO.Path:

System.IO.Path.GetRandomFileName() [msdn]
Returns a random folder name or file name. The filename generated is cryptographically secure, meaning that no malicious script should be able to guess what filename you've just been given.

To use from PowerShell:
53> $filename = [System.IO.Path]::GetRandomFileName()
54> $filename
55> Get-ChildItem > $filename

System.IO.Path.GetTempFileName() [msdn]
This method will actually create a temporary file on disk, in your temp directory (returned by System.IO.Path.GetTempPath). The file is 0 bytes, and ready for you to clobber with your own content. You can be sure that no other process has generated the same filename, but it's not exactly a secret what filename you've got -- you should use the GetRandomFileName method if you need a bit of security.

To use from PowerShell:
59> $filename = [System.IO.Path]::GetTempFileName()
60> get-childitem | export-csv $filename

The other thing to remember with GetTempFileName is that you need to remember to delete the temp file after you're finished (something that File::Temp does quite nicely for Perl'ers). Some day I might write a wrapper that deletes the file when the variable goes out of scope.

posted on Thursday, September 20, 2007 9:08:25 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Monday, September 17, 2007
Darryl Burling has been posting a series on starting and running a user group for the new site He asked me to write a post on "Speakers, topics, costs, refreshments", which he has now posted:

"Continuity, speakers and good running"

The most interesting part for me was adding up how many user group events we have had in Wellington (about 45), and how many pizzas I have ordered (approx 800!). If anyone from Pizza Hut or Dominos is reading this, they should get in touch with a discount offer!

Details of all our previous meetings are available on the Wellington .NET user group site, and on the old website.

As I posted earlier, this week Andrew Tokeley is presenting Dynamic Data Controls - come along.

posted on Monday, September 17, 2007 8:09:15 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [1]
 Sunday, September 16, 2007
Joe Duffy links to a new MSDN Magazine article on PLINQ: "Parallel LINQ - Running Queries on Multiple Processors".

We have been hearing little bits about PLINQ, and a CTP is on the way. PLINQ redefines the query operators from standard LINQ and makes them split the work across multiple processors.

One of the big challenges that we will have as software developers over the coming years is developing for multiple cores. As extra processors and cores are added to our PC's, the clock speed of the machine isn't increasing as rapidly as in the past, so single-threaded applications may actually run slower than on a high-end single processor machine.

PLINQ takes an interesting approach, and redefines the standard LINQ operators that are used for in-memory queries (such as OrderBy, Join, Where etc), and spreads the work over the available CPUs. As LINQ uses a declarative "Tell me what to do, not how to do it" query syntax, there are hardly any changes to the programming model:
  • Reference the System.Concurrency.dll assembly during compilation.
  • Wrap your data source in an IParallelEnumerable<T> with a call to the System.Linq.ParallelEnumerable.AsParallel extension method.
    • i.e. var q = from x in data.AsParallel() ...
  • Optional: choose your pipelining model: pipelined, stop and go, inverted enumeration. You choose this when processing the results.
  • Don't rely on LINQ's default ordering of results. Explicitly order results if it's important to your program.
  • Change the way you handle exceptions. Multiple exceptions may be thrown in the course of one query, and with PLINQ will be wrapped into a MultipleFailuresException.
  • Avoid modifying data in your where clause, or otherwise mutating shared state during the course of your LINQ query. You may open yourself to race conditions.
All of these steps are covered in depth in the article, but on the surface of it, it looks like Joe and the PLINQ team have made the transition from single to parallel LINQ require as little work as possible. I can't wait to try it out when the CTP drops!

Note that PLINQ only applies to LINQ to Objects and LINQ to Xml queries -- SQL Server still does it's own parallel processing. PLINQ parallelises the query execution that occurs within the .NET program.

posted on Sunday, September 16, 2007 6:56:32 AM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Thursday, September 13, 2007
I really enjoy organising the Wellington user group sessions.

Last week, Matti Seikula did an interesting session on spatial software development and Virtual Earth. I've seen a bit of mapping stuff over the past few years, but Matti did a really good job of explaining the various coordinate systems, and how you can layer different information over (and under) the data displayed in two and three dimensions in Virtual Earth.

Next week on Wednesday 19th, Andrew Tokeley is going to be presenting the Dynamic Data Controls (from ASP.NET futures), which are useful for making data-driven web apps.

Have a look at the Wellington user group page, and RSVP now :)

posted on Thursday, September 13, 2007 9:22:07 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Monday, September 10, 2007
Scott Adams hits the nail on the head:

Scott's Dilbert Blog is recommended daily reading...

posted on Monday, September 10, 2007 8:43:19 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]

Okay, so I'm a sucker for these internet quizes: says I'm a Highly Dorky Nerd King.  What are you?  Click here!

The fun facts displayed after you take the test were amusing (and no, I wasn't one of the 28.3%):

Quick Fun Facts:

96616 unique people have taken this test.

Based on these unique user's answers...

44.8% of test takers are gals,
53.1% are guys,
...the rest (2.1%) are confused.

17.1% of test takers get aroused by "iPhone," while
40.6% get utterly ill.

34.6% of all test takers would choose the Internet over sex, and
28.3% of married test takers prefer the Internet over sex.

Only 3.6% of test takers own a Jar Jar Binks t-shirt, though
56.0% of them don't own a lightsaber (priorities == messed up).

posted on Monday, September 10, 2007 8:37:58 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Saturday, September 08, 2007

Want to transfer your cheezburger skillz to the command prompt? Navigate your files using lolshell.

Download lolshell.ps1 [Requires PowerShell 1.0]

To give you a taste of the awesome powers of lolshell, here's a transcript. My favourite function is WTF.

1> . ./lolshell.ps1

 (. .)
  =w= (\
 / ^ \//
(|| ||)
,""_""_ .




LOL. I CAN SEEZ U HRE: C:\Users\kirk\Videos


    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Users\kirk\Vi

Mode           LastWriteTime       Length Name                       
----           -------------       ------ ----                       
-a---  28/02/2007 12:40 a.m.     14882401 Vista_0001.wmv             
-a---  28/02/2007 11:10 p.m.     14816631 Vista_0002.wmv             

6> IM WATCHN YR Vista_0001.wmv
                                [Video opens in Media Player]

LOL. I CAN SEEZ U HRE: C:\Users\kirk\Videos


LOL. I CAN SEEZ U HRE: C:\Users\kirk


LOL. HAPND JUST lolshell :)
Cannot find drive. A drive with name 'Z' does not exist.



    Sends output to a printer.
...                             [More help prints here]


lolshell.ps1 (3.5 KB)
posted on Saturday, September 08, 2007 11:05:13 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Wednesday, September 05, 2007
Well this was interesting - Microsoft have embraced Mono's Moonlight as their official Linux version of Silverlight. From Scott's blog post:

Over the last few months we've been working to enable Silverlight support on Linux, and today we are announcing a formal partnership with Novell to provide a great Silverlight implementation for Linux.  Microsoft will be delivering Silverlight Media Codecs for Linux, and Novell will be building a 100% compatible Silverlight runtime implementation called "Moonlight".
I think it's interesting for several reasons -- Microsoft partnering with Novell to release an open-source version of Silverlight, when the Windows / Mac one is closed; and that they are planning to make Moonlight "100% compatible".

100% compatability is a pretty strong statement. I know that the Mono project has been aiming for that for a while, but has had to work around bugs or inconsistencies in the CLR to achieve it. I wonder how Microsoft is helping Novell achieve that?

Miguel has some details on who was involved from within Microsoft, and how the test suite will be shared between the two companies.

posted on Wednesday, September 05, 2007 10:21:16 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Monday, August 27, 2007
Well, I thought that my PowerShell talk went okay -- although it didn't rank in the top 10 presentations at TechEd (congratulations Jeremy and Andrew!).

The slides for my talk are available on the downloads site:

My presentation was in the SkyCity theatre, a 700 seat venue used for concerts and films. I have to admit that the venue was the most intimidating part of giving my third talk at TechEd -- but I think I survived it intact :)

Some additional links for your browsing pleasure:

If you have any questions about my talk, or about PowerShell, feel free to fire them this way -- either through this blog or via my email address (it's not that hard to find it on the interweb, so I won't list it again here :)

posted on Monday, August 27, 2007 10:03:21 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [2]
It's grassroots conference time in Wellington, with barcamp 2007 e-government on Sat 15 Sept, and Kiwicon on the Sat 17 and Sun 18 November.

Kiwicon is a security conference, and it sounds like it will be for the technically minded folks in the security community -- sessions on hacking, wifi insecurity, forensics and more. Sounds interesting!

barcamp is an un-conference about e-government / Government 2.0. Sessions are scheduled and time-slotted on the day. It looks like there's going to be some interesting stuff discussed - identity, privacy, community, accessibility and more.

Sounds like a few scheduled weekends away from the family...


posted on Monday, August 27, 2007 9:41:46 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Monday, August 13, 2007
The day started at 8am with room preparations, sessions at 9:30, and it was all over by 5pm. Just 7 hours for 10 sessions, so it really was a whirlwind tour of .NET devt topics.

We plan to post some of the slides and materials up on the site over the next week or so. Here is the list of presenters and their topics:

9:40am Chris Auld: Silverlight at MIX and Intergen (30min)

Chris introduced some of the features of Silverlight 1.0 and 1.1, and showed a few sample programs that have been built. One of them from Intergen was an Amazon search client.

10:10am Tom Hollander:  Patterns and Practices (60min)

Tom showed some of the cool features that come out of the P&P team, and built a WCF app using factories and showed how to wrap and hide exceptions so that sensible exceptions pass across the boundary. He also showed a community project he's involved in to throw sensible exceptions based upon SQL error codes (part of Enterprise Library Contrib).

I was interested to see some of the things in Enterprise Library that I didn't know about, and I enjoyed this session.

11:10am Ivan Towlson: WPF databinding (45min)

Ivan got down to the nitty-gritty in WPF and showed how to databind against data objects and have changes in the model show up in the UI and vice-versa. He then drilled into a few different scenarios such as formatting and templating, and showed how to do those a few different ways in WPF.

We didn't have enough time for his talk, so I think we may have missed out on a cool demo at the end :(

12:00pm Ivan Porto Carrero: Javascript best practices (30min)

This talk could've gone on a lot longer, so Ivan covered some of the common points about writing performant Javascript, and showed some speed comparisons of different browsers across different tasks.

12:45pm-ish OpenXML and Lunchtime panel

Sean McBreen talked briefly about OpenXML and some of the standardisation efforts that are going on right now. Then Chris Auld and Adam Cogan entertained us over lunch with a little skit on how Adam does doesn't do business. Very entertaining! Some good ideas on how to interact with clients and be prepared for meetings.

1:45pm Kirk Jackson: C# 3.0 new features (30min)

I went through some of the C# 3.0 features, and talked about when you'd use them (mostly, if using LINQ), and at the end I showed a few slides of the upcoming XML support in VB9, which is cool if not scary!

2:15pm Adam Cogan: TFS and VSTS - what is coming (60min)

Adam showed us some of the new features that are coming into Team Foundation / System in the upcoming release. Interesting thing was that out of the audience, only a handful are using these products.

3:15pm Dave Dustin: SQL 2008 new features (10min)

Dave put up a list and talked through some of the new features in SQL2008 -- if you want to hear more about them, go along to the next SQL user group in your area (Auckland, Wellington).

Dave didn't have a very good afternoon with his powerpoint deck, but I thought he did well fielding questions from the floor.

3:30pm Andrew Peters and Jeremy Boyd: Opinionated domain modeling (30min)

Andrew and Jeremy talked about what it means to be an opinionated toolset, how domain modeling has evolved over the past few years, and what is currently state of the art. They then showed Lightspeed, their product, in action, and Jeremy built up a functioning online store quite quickly using Lightspeed to persist the data.

I'm biased, because I'm friends with these guys, but I continue to be impressed with their product and what they've put together. It really seems to be lean, fast, and does what you need.

4:00pm Tony Goodhew: Insights into the development of Orcas (50min)

Tony talked without a slide deck about the development process that they use when developing Visual Studio 2008 right from the inception of the project prior to the release of 2005. His talk was humorous, and I think showed some insight into how to effectively run a software development project of that magnitude.

I was particularly interested in how they measure stability of code, and how they conduct the exit and entry reviews at the end of each milestone.

Summary of the day

There were a lot of people at Code Camp. I think at the peak we had over 170 people in the room, though during the day people came and went.

Everything was a bit pressed for time - 10 sessions in 7 hours was a lot. The format was different to the previous Code Camps that we have spread over 2 days. I am soliciting feedback on whether people prefer the compressed format or a more sedate Code Camp -- please email me on

Thanks for everyone who attended, to our wonderful presenters who gave their time to entertain and educate us, and to our sponsors (Microsoft, Intergen, Fronde and the Microsoft Most Valuable Professional program) who helped make the day possible.

posted on Monday, August 13, 2007 10:30:09 AM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Saturday, August 11, 2007
Well, Code Camp is ready to go.... It has been a fair amount of work to prepare for it, although I've tried to keep things pretty lean and just focus on the essentials. Thanks PeterB for organising the website RSVP system and the Camp Fire dinner tomorrow night.

The schedule for tomorrow is now pretty locked-in. Mahesh Prakriya wasn't able to make it, but a couple of the Mindscape guys have stepped up to present.

Should be a fun day. See you tomorrow, and hopefully at the dinner afterwards!

posted on Saturday, August 11, 2007 8:23:32 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [1]
 Thursday, August 02, 2007
We had a good night at the Wellington .NET users group meeting last night -- Zac Smith from Provoke presented on "Developing with Windows Sharepoint Services", and we had the meeting here at Xero HQ for the first time.

Zac's presentation was interesting. I think Sharepoint has a much better .NET development story than it did four years ago when I last looked at it -- not surprisingly, I guess! Zac showed how to add new features to sharepoint menus, how to add items into the admin screens, how to programmatically access the Sharepoint store, and how to create custom web parts.

Rod from Xero gave a little intro at the beginning... this was the first time we've had such a big crowd in the Xero training room:



posted on Thursday, August 02, 2007 3:10:04 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Saturday, July 28, 2007
From the slightly bizarre files:


...over 50 redheads rode the subway together and protested a Manhattan Wendy’s for their “racist logo.”

It sounds like they had fun... I like the idea of riding a train and suddenly realising that everyone else on board has red hair.

posted on Saturday, July 28, 2007 9:42:05 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Sunday, July 22, 2007
Microsoft just hired two developers I respect:
Here's hoping we can look forward to both of them coming to the next New Zealand TechEd (and Code Camp).

I'm always impressed by the super-clever people that Microsoft hire. Congratulations, Microsoft!

posted on Sunday, July 22, 2007 8:28:23 PM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Wednesday, July 18, 2007 has got it good!

Andy Oram posted to the O'Reilly Radar about his recent research on mailing lists, and linked to his article "How to Help Mailing Lists Help Readers".

In his article, Andy followed threads on some mailing lists (Linux, Perl, Ruby), and uncovered some patterns of behaviour (summarised below):
  • Many questions aren't satisfactorily answered (46%)
  • Helpers give up after a few attempts
  • Beginner users have fundamental gaps in knowledge, and need direction to other documentation sources
Now despite recent unrest about the effectiveness of the dotnet mailing list (at, in particular the performance of the mail sender, I've always been convinced of the relevance of the answers given on the list, and impressed by the tone of the replies. We've got a nice little community going, and people offer quite in-depth help wherever they can.

I'm always impressed when people go out of their way to solve a problem, such as installing a piece of software to help diagnose someones problem (Ivan Towlson, I think that was you :) ), or reliably pitching in to solve a problem (PeterB and "shane ~" are among the regular "helpers").

So I collected some statistics following a similar process to Andy's:
  • 15 recent threads from the NZ dotnet mailing list where a specific question was asked
  • I measured similar statistics on the effectiveness and time to resolution, although for some of the threads where the orginal poster didn't reply with thanks, I defined "resolution" subjectively as whether I thought a satisfactory answer had been given
  • A count of the number of messages in each thread, the number of helpful / on topic messages, off-topic, irrelevant and unhelpful messages

  • 80% of questions received a satisfactory reply!
  • There were no off-topic, irrelevant or unhelpful messages!
  • Median time to resolution was 20 minutes!
  • Longest time to resolution was 2hrs 34mins.
  • Best response times are early-mid morning, and mid-afternoon. Slower responses over lunch time.
I expected to see the dotnet list coming out well, but when you compare these numbers to the ones Andy collected, and even if you factor in some differences due to sampling / processing technique, the differences are staggering:

Table 1 (modified). Resolution times for questions on mailing lists

Minimum Median Maximum
NZ .NET list 8 mins 20 mins 2 hours, 34 mins
Perl 2 hours 8 hours 1 day, 21 hours
Rails 0.5 hours 16 hours 7 days, 10 hours
Both operating systems 0.1 hours 10.5 hours 2 days, 10 hours
Both languages 0.5 hours 13.5 hours 7 days, 10 hours
All lists 0.1 hours 11.5 hours 7 days, 10 hours

Some of the things that I believe make the dotnet list so successful:

  • The list is an extension of the user groups, and many people know each other in person
  • Everyone is in the same timezone and industry, which means the responses are fast, and usually at the same time of day that you need help
  • Off-topic conversation is kept to a seperate off-topic mailing list
  • The list subscribers have a wide spread of knowledge and experience, with some members having very deep .NET knowledge
  • Timaru is discussed monthly :)
The list server that runs the mailing lists (dotnet, sqlserver, dotnet-offtopic and others) has been tirelessly maintained by Lukas Svoboda over the past 5 or 6 years, and the not inconsiderable costs of sending out many thousands of emails a day has been sponsored by him, Microsoft, Irongate, Orbiz, Intergen and others over the years. Thanks!
posted on Wednesday, July 18, 2007 12:10:01 AM (New Zealand Standard Time, UTC+12:00)  #    Comments [0]
 Monday, July 16, 2007
It's very exciting to start advertising the NZ.NET Dev Code Camp, which will be happening in Auckland next month -- Sunday 12 August. We're running it the day before TechEd, and using one of the larger TechEd conference rooms.

Registration, and further details can be found at, and more details will be added there as we confirm them.

Tell all your friends!


posted on Monday, July 16, 2007 11:06:07 AM (New Zealand Standard Time, UTC+12:00)  #    Comments [1]