Merry Christmas


This is the last working day before Christmas for me, so very likely to be the last post of the year, therefore a Merry Christmas and Happy New Year to you all is in order.



This is my first year blogging, well the first year that I have taken it seriously anyway, and I thought that I'd share a few stats:

Total # of posts for 2007: 72
Highest # of posts in one month: 14 (Feb)

Post Per Month (see Scott for more):

Total # Page Views: 3707
Most popular page: WPF Commands
Most popular day: 24 May (37 hits)

More stats

Other interesting facts (to me anyway) include these: about half my traffic over the year has been the result of search engine results (Google being the most popular, obviously), with the most popular search term being wcf quickstart.

The most popular referrer to my site is Rob Relyea, Microsoft PM - responsible for about 10 percent of my traffic.

Most of my traffic comes from the UK (849 visits) followed by the US (561 visits), then Canada, Australia, Germany and India between 50 and 60 each, with China, New Zealand, Netherlands and Sweden also making an appearance for 30 to 40 visits each. There are stats for 67 countries, so I have managed to spread the message far and wide.

(Edit: this post was longer with more stats, but I think that's enough now - if you want more drop me a line, I'll be happy to share :-)


I've been happy with the number and frequency of my posts this year, so I plan to keep that about the same, but there are some changes I will be trying to bring about:

  1. More page views. Obviously, I want to increase my popularity and reach within the community.
  2. Reduce the Number of Single Visits stat from 68 percent. I have no idea by how much, but a reduction would be good.
  3. The most popular page/post for 2008 must be something written in 2008, I don't want the WPF Commands post to be the winning post next year.


In conclusion I think my first year blogging has been a success - I think in part it has been a great CV and has been instrumental in helping me get my current role at CM, so for that reason alone it has been worth it.

Other highlights include talking to Ian Griffiths of Programming WPF fame, my email and this blog appearing on .Net Rocks (see here) and getting Charles Petzolds book on 3D for free just because I blog about WPF (expect a review early next year - I have nearly finished it)

I would like to end with a big thank you to all of you that do keep coming back and continue to support my efforts to become a blogger. I hope you have enjoyed the content over the year and I look forward to sharing more with you next year.

University Tour


Early next year we're going on the road with the Content Master university tour.

Here are the tour dates as I know them today:

  • 16 Jan - Swansea
  • 22 Jan - DeMontford (Leicester)
  • 30 Jan - Liverpool
  • 5 Feb - Bradford
  • 6 Feb - Hull

We are also going to Derby and Nottingham in February, but I don't have exact dates for those Universities as yet, when I do I'll post them here.

If you're a student, then the idea is that we present Content Master to you, what we do and how we do it, for about 30 minutes. Your reward for listening to us is: me banging on about Silverlight for 45 minutes. After that we can all get together for a chat and you can hand over your CV.

So, if you're studying at one of the Uni's we're visiting, I hope to see you there - remember to bring your CV.

TaskClerk News


The next rev of TaskClerk was released at the weekend, you can get the details here. Excellent work JP, thank you.

Building a Plug-in

My favourite feature of this new release is a very minor change to the foundation assembly. There has been a change in visibility on the MenuItem property in the PluginNotifyMenuItem class. This will save many of lines of code when writing a simple plug-in to hack-in and get a reference to the containing parent menu item.

For example, I wanted to add a feature that put all my "pinned" tasks, collected via the Instant Access popup (ALT+F12), on to the main notify context menu; here's the code I can now write:

private void PopulateMenuItems()

    InstantAccessData data = InstantAccessData.Create();
    if (data.IsDataAvailable)
        foreach (TaskDescription description in
            MenuItem item = new MenuItem(description.Name, item_Click);
            item.Tag = description;
    else { this.MenuItem.MenuItems.Add("(no favorites)"); }

private void item_Click(object sender, EventArgs e)
        ((TaskDescription)((MenuItem)sender).Tag, DateTime.Now);

Inherit a class from PluginNotifyMenuItem, call the PopulateMenuItems method in the constructor, add a FileSystemWatcher - or add a feature request to the news groups for TaskClerk for an alert ;-) - to monitor the data file for Instant Access; call the method on change, delete etc., but only do this if you want dynamic updating for the favourites menu (TIP: the data file will probably be locked when the change notification is raised (as it is writing to it), wait a second for that operation to complete before requesting the data (Thread.Sleep)).

The results look something like:

The C# source code for the plug-in is available upon request. Enjoy.

Creating test X.509 Certificates


I occasionally find myself having to create dummy X.509 certificates, but it happens infrequently enough that I can never remember the steps to create just the right certificate without searching the web. Sometimes I find a good resource sometimes I don't - what I know is that I never do it same way twice!

Interestingly I think this happens because when I find a good example, I find it so easily that it doesn't occur to me that I might struggle to find it again later! Anyway, I'm going to put an end to all that and post what to do here for future reference.

Steps to create an test X.509 Certificate in .NET

From a .NET console window (works with 2005 and 2008) (you have to run with window with elevated privileges when using Vista):

  1. MakeCert -r -pe -n "CN=PackageDemo" -b 01/01/2007 -e 01/01/2010 -sky exchange -ss My

Optional, for file only versions of the certificate:

  1. CertMgr
  2. Export new certificate to disk, including the private key
  3. Delete from Certificate Manager

If you know a better way or you know a way to create just a file version including the private key, then please let me know.