It's MVP time again

Submitted by Robert MacLean on Tue, 01/04/2011 - 08:52


Exactly a year and a day ago, I blogged about being awarded a MVP from Microsoft and I am proud to announce that I have been awarded a MVP for a second time!

Thank you to all that were part of making this happen, I am very honoured by all of you.

What is an MVP? In short it is a thank you for helping Microsoft communities. The long version can be found here.

My planning for MVP Summit in Feb/Mar has already been done so I am looking forward to seeing the other MVP’s and product team!

I would also like to congratulate my fellow January MVP’s in particular the South African ones: Zayd Kara (ALM for the second time) and new to the MVP’s Veronique Palmer (SharePoint).

Pulled Apart - Part XV: Understanding usage with Runtime Intelligence

Submitted by Robert MacLean on Tue, 12/14/2010 - 10:49

Note: This is part of a series, you can find the rest of the parts in the series index.

A vital component of keeping a piece of software alive, is to keep it useful to your users – but how do you know what your users are thinking about your software and what do they think are valuable pieces of functionality?

Pull does this using a fantastic piece of software called Runtime Intelligence from PreEmptive Solutions which is easy to plug in to your application to get interesting and useful details on the usage of your application.

Lottery Winner?

Yesterday I blogged about DevExpress and today another toolset (which isn’t free) so maybe thinking I won the lottery recently – unfortunately I haven’t Sad smile 

What I found one July morning, is that PreEmptive gives away the software and services required for Runtime Intelligence FOR FREE,to CodePlex projects for them to use.

This may be the biggest secret of CodePlex and another fantastic reason to use CodePlex for your open source hosting.


imageThe first interesting stat given is how many times the application has run, for Pull that is over 700 times Open-mouthed smile It is always great to see that it is used.


You can then drill down on to the stats, which are publically available and provide details on what features are used, what OS’s and versions of the .NET Framework are available and also where in the world it is being used!


How do you add this to your application? It is really simple, just follow the official guide. My one word of warning is the ClickOnce, another great feature of CodePlex, doesn’t play well with this and so you want to be aware of that.

Bring your hard drive to Community Night

Submitted by Robert MacLean on Mon, 12/13/2010 - 12:48

Blue Male Student in a Graduation Cap, Reading a Book and Leaning Against a Stack of Books Clipart IllustrationIf you are coming to tomorrow’s community night, you want to bring your hard drive along because I will have some stuff to fill it up with:

Plus I hear that some prizes may be given away at the events too Winking smile

Pulled Apart - Part XIV: DevExpress

Submitted by Robert MacLean on Mon, 12/13/2010 - 10:25

Note: This is part of a series, you can find the rest of the parts in the series index.

I make no attempt to hide my love for a company called DevExpress which produces enhancements for Visual Studio and additional controls for WinForms, ASP.NET Web Forms, ASP.NET MVC, WPF & Silverlight.

When I started with Pull I used mostly the standard WinForm controls and over time have changed it be almost 100% DevExpress controls for a number of reasons:

  • Rudi Grobler, Silverlight expert sits across the partition from me and loves to point out how ugly standard WinForms is compared to Silverlight. DevExpress helps me make my applications look MUCH better.
  • Every line of code has a cost to it and the value of that line of code decreases overtime. So standing on the shoulders of giants means my cost of development is MUCH less. This also means I focus on the business aspects and not on the UI aspects.
  • There is a lot of parity between DevExpress controls over different platforms, so if I want to change platform (for example to Silverlight) then I know the feature set will be close, lot’s of code could be reused.

Below is the first public version of Pull, which uses just DevExpress GroupBoxes, the rest is all WinForms:


versus the UI currently in development (for the January 2011 release) where only the status bar and web browser control are not from DevExpress! I think you will agree it looks way better now, plus there are many new features there (like filtering grids) which were not supported previously.


Grid Extensions

For the January 2011 release we switched to the DevExpress grids, which meant a lot of code needed to be changed (or just deleted) and I ended up writing a few extensions for the grids which I believe may be of use to other people:

Return a collection selected items

Rather than working with a collection of selected rows, this allows you to get the values of the selected rows:

public static IEnumerable<T> SelectedItems<T>(this ColumnView view) where T : class
    foreach (int selectedRowHandle in view.GetSelectedRows())
        T item = view.GetRow(selectedRowHandle) as T;
        yield return item;

Select a collection of items

The grid normally lets you select a single row or a continuous range, however often I want to provide a list of item values and have the rows which match those values selected:

public static void SelectRows<T>(this GridView view, IList<T> selectedItems) where T : class
    foreach (T selectedItem in selectedItems)
        for (int counter = 0; counter < view.DataRowCount; counter++)
            T item = view.GetRow(counter) as T;
            if (item == selectedItem)

Layouts and Strings

You can persist the layout of the grid to a stream, the registry or XML file. However I have a settings file and I would like to save and restore the layout from strings so I can easily add it to my settings file:

public static string SaveLayoutToString(this GridView view)
    MemoryStream gridStream = new MemoryStream();
    view.SaveLayoutToStream(gridStream, OptionsLayoutBase.FullLayout);
    gridStream.Position = 0;
    using (StreamReader reader = new StreamReader(gridStream))
        return reader.ReadToEnd();

public static void RestoreLayoutFromString(this GridView view, string layout)
    if (!string.IsNullOrWhiteSpace(layout))
        using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(layout)))
            stream.Position = 0;
            view.RestoreLayoutFromStream(stream, OptionsLayoutBase.FullLayout);

Enum + Grid + Images = Headache

imageI have an enum for the podcast state and rather than show the text, which is the default, I want to show an image on the cell. However this is not the easiest thing to figure out since there is no designer support for this Sad smile However you can do most of this in the designer and then only need one line of code per enum value Smile.

Step 1

Set the Column Edit property of the column to an ImageComboxBoxEdit: image

imageStep 2

On the ImageComboBoxEdit editor settings set the small images (and/or large images) property to the image list which contains the items you want to show.

It is important that you know the position (or index) of image in the image list.

Step 3

Now all you need to do is add the item values for the editor in code using the Items.Add method, which takes an ImageComboBoxItem. That class has some overloads which accept an Object for the value and here you can put in the enum value. Once this is done it all works fantastically.

You’ll note in the demo code below that I have an image index of –1 for the first item, this is so that no image is shown!

editor.Items.Add(new ImageComboBoxItem("None", PodcastState.None, -1));
editor.Items.Add(new ImageComboBoxItem("Downloading", PodcastState.Downloading, 0));
editor.Items.Add(new ImageComboBoxItem("Pending", PodcastState.Pending, 1));
editor.Items.Add(new ImageComboBoxItem("New Episodes", PodcastState.NewEpisodes, 3));
editor.Items.Add(new ImageComboBoxItem("Error", PodcastState.Error, 2));

Visual Studio Service Pack 1 - Beta: Field Guide

Submitted by Robert MacLean on Fri, 12/10/2010 - 09:24

Brian Harry announced the availability of the service pack 1 beta which is fantastic news for all developers. This post is a field guide of me doing the installs.

Before that I wanted to point out a few key things included in this SP:

  • This can installed in production – this beta includes a “go live” license so it is supported and upgrades to the RTM of the SP will be supported.
  • This includes over 80 hotfixes for between 800 and 1000 bugs and many new features. For a full list see the link above, but here is a brief list:
    • Silverlight 4 tool support!
    • Unit testing can target the 3.5 framework now.
    • IntelliTrace support for 64bit and SharePoint!
    • Performance Wizard for Silverlight!
    • HTML 5 support
    • IIS Express support
    • SQL Compact Edition 4 Tooling

Details on the last three can be found on Hanselman’s blog.

  • Some third party systems may break with this, at this time known ones are:
    • ASP.NET MVC 3 RC 1 – this will be fixed in the next update.
    • Visual Studio Async CTP – this will break completely! No news, yet, on when it will be fixed.

The Process

For me there are three files you need to get:

  • Update for .NET 4
  • Update for Visual Studio
  • Update for Team Foundation Server (not covered in this post)

Step 1

.NET 4 installInstall the .NET 4 update first – this took on my machine 24 minutes to do. It is important to note that I did shutdown Visual Studio first but I had some other applications open, including Pull which is .NET 4.

At the end of the process I needed to restart!


This step is no specifically needed as the VS SP will include this automatically, however I personally like the idea of doing it manually and making sure .NET 4 apps continue to work before I continue to the VS install.

Step 2

imageOn to the Visual Studio install which after a few minutes tells you what will be updated and then, tells you that it wants to download 490Mb!


What I had done was to download the smaller installer version (less than 1Mb) which means it first figures out what is needed and then downloads the rest. This is great for some people as the download size is less, however since I live in South Africa (read: bandwidth is a luxury) and I work with 300+ other developers it is better for me to get the “DVD” labelled one which is bigger (in my case 103Mb bigger) but contains everything in one go so it can be shared easily and the bandwidth hit just once!


Step 3

We re-join the action a while later (when the “DVD” edition downloaded, approx. 1 hour 21 min later) we start process again and this time the download size is 0Mb Open-mouthed smile 


This took 29 min to process (remember this is without the download) this install and success!



I haven’t found anything in the many extensions I use daily that has broken! In particular my favourites all work

CommNight December - Some interesting events

Submitted by Robert MacLean on Tue, 12/07/2010 - 10:07

Happy Blue Man Partying With a Party Hat, Confetti and a Bottle of Liquor Clipart IllustrationIn the middle of the company parties, you should take one night off to do some fantastic learning and networking at CommNight (Community Night) on the 14th December! You can read about all the details on the Microsoft DPE Blog.

There are two groups which I want to highlight which will be at CommNight:

S.A. Developer

S.A. Developer is a user group for developers and in December will be hosting the following topics:

  • Tool of the month: This short (10min to 15min) session is where someone can present their favourite developer focus tool or add-on.
  • Unit Testing WPF & Silverlight – Tools & Techniques: Silverlight and WPF can be used to create truly immersive UI experiences for users.  Testing these UI components and the logic around it can become complex – especially when using frameworks like PRISM.  Join us in this session as we take a look at a few tools and techniques that can be used when unit testing WPF and Silverlight applications. 

Really looking forward to this session!

Information Worker

Information Worker is a user group for those in the IW space, not just developers but everyone even people who job just involves Excel and Outlook! This month we are looking at:

  • Lync – Microsoft’s Unified Communication System
  • Windows Phone 7 – What does this give the IW user? Things like Office and SharePoint integration will be discussed

What is an ALM MVP?

Submitted by Robert MacLean on Wed, 12/01/2010 - 15:23

If you asked me 12 months ago what an ALM MVP was I would likely have told you something – unfortunately that something would have been completely wrong. One of the most important things I learnt this year from being an ALM MVP, is what an ALM MVP actually is.

What is an MVP?

First it is an award, this means you get it as recognition for doing something which benefits the community of people who use a Microsoft product (or products). It is also very important to note that the reason it is awarded to one person is seldom it is awarded to another person – no two people are alike, neither are their community contributions and so the awarding is unique per person.

I think it is safe to assume that if you going to so something which benefits many people using a specific product, you need to know something about that product Winking smile However being a MVP is not meant to indicate that this person is an expert in a certain product/s and they know everything about the product.

This doesn’t mean that a lot of MVP’s aren’t brilliant, many are scary smart, first two that jump to mind are Ed Blankenship ALM MVP and Jon Skeet C# MVP, but at the end of that day – all MVPs are people, like you, with limits and gaps in knowledge.

The ALM Stadium


ALM MVP’s have an additional level of complexity since the community that they helped revolves around not one single product, like Zune MVP’s for instance, but is actually made up of many products and components. Above is the “stadium” picture which shows a lot of (most of?) the components which make up ALM.

A ALM MVP may know and work in one product/component and never see the other ones. An example of this is Zayd Kara ALM MVP, who is deeply IT Pro focused – so he understands installing the systems, build in TFS etc.. but he seldom opens or works in the Visual Studio IDE so he may not know as much about it as a other ALM MVPs.

As I stated above the reasons someone is awarded differ and so the area and skills in the ALM MVPs differ from person to person. 


In the form of a Q&A:

  • Q: As an ALM MVP you must be a TFS expert?
  • A: While TFS is a major part of ALM, that simply is not true. I look at myself and while I know TFS, can do an install, understand the API and how to integrate – ask me to edit a process template and I have no idea where to start. However ask me about Visual Studio and I can talk your ear off!
  • Q: As an ALM MVP you must be a Microsoft fan boy and only promote their tools?
  • A: Not at all! MVP’s are not a Microsoft fan club.

    Yes, I am a fan of Microsoft tools but I am also critical of them. You want to see some of the most critical people of Microsoft is MVP’s – they care and fight on behalf the community. As most (all?) MVP’s we are matured to realise that these are just tools and you need to pick the right tool for the job, and that sometimes isn’t what Microsoft currently offers.

  • Q: Microsoft uses the MVP system as a way to find and hire staff?
  • A: While some MVP’s have moved to Microsoft, Willy-Peter Schaub previously a VSTS MVP and now working for Microsoft comes to mind, the hiring of MVPs is not common practise.

    Also worth thinking about, is that Microsoft wants the best of the best (which company doesn’t?), MVP’s are awarded for their community work – not being the best of the best C# programmer (for example) so sometimes that means that MVP’s are not the best fit and the final thing weighing against you (as told to me by a Microsoft employee) Most of the Microsoft employees do not even know of or understand the MVPs so there is not a lot of help in their.

    However being a MVP means you are likely following key people so when exciting jobs are announced ,like the way I knew about these cool jobs, you are first in with your CV. 

  • Q: You must blog/write a book/tweet/present at x or something else to be a MVP?
  • A: No, there is no formula to become a MVP. If you want to be a MVP, work hard for the community in any and as many ways as possible and the MVP maybe will follow.
  • Q: Becoming a community lead is the way to be a MVP?
  • A: This one has come up recently in the Information Worker user group where people have wanted to become leads so that they become MVP’s.

    First there is no single way to becoming a MVP – the IW user group leads are a good example of that we have a few MVP’s but we have more non-MVP’s as leads. Second if your motivation of helping the community is to become a MVP, then I doubt you will become a MVP because your motives are wrong. MVP’s do what they do for the community not because they want to be a MVP, but because they love the community.


To make sure I wasn’t still wrong, I did ask for some feedback from fellow MVP’s and Microsoft staff and I thank you all for your contributions in particular Willy-Peter Schaub, Ruari Plint and Zayd Kara.

T4 Cheat sheets!

Submitted by Robert MacLean on Wed, 11/17/2010 - 09:56

I’ve been spending a lot of time working on two things recently: T4 (Text Template Transformation Toolkit) and Windows Phone 7. Part of my work around T4 included creating some cheat sheets to make it easier to get to grips with it!

There is now three posters available (High res PDF’s below or on the DRP site):

General Overview

This provides a high level overview of the various components in T4.


@template detail

The @template directive has a lot of options and this sheet provides detail on those.



This sheet provides usage examples of various aspects directives in T4.


You can see my time with Windows Phone 7 leaking into these two as I loosely designed them around the Metro UI design guideline that Windows Phone 7 uses. Interestingly for me is that Metro seems to work fantastically well for cheat sheets as these are some of the nicest and easiest to grok sheets I’ve ever done.

Windows Phone 7 Training Event

Submitted by Robert MacLean on Wed, 11/03/2010 - 08:35

logo_windows_phone_vRudi Grobler, known for his love of WPF, Silverlight and Windows Phone 7, has organised a FREE training event focused on Windows Phone 7! This event will run on the 5th Feb 2011 but space is VERY VERY limited.

The idea is to give you key information via presentations, learning via hands on labs and fun via playing with REAL devices!

You can get all the details and register at:

More details about the event will be announced over the coming weeks so follow Rudi’s blog for more!

Tech·Ed Africa 2010 - Slides, scripts and demos for my talks

Submitted by Robert MacLean on Thu, 10/21/2010 - 10:02

Tech·Ed Africa 2010 ended on Wednesday and it was a great event. Thanks to everyone who came to my sessions and came up to me after and between sessions to chat. I felt very honoured to be able to meet and share with you :D

This post is for those who want the slides or demo information. I have completed versions of the demos below (in the zip file) and the script for each demo which gives you the step by step process I used (in the docx file).

APS302 – Intro to Workflow Services and Windows Server AppFabric

Other content for this session:

APS309 – Windows Server AppFabric Caching What it is and When you should use it

Other content for this session:

APS310 – WCF Made Easy with .NET 4 and Windows Server AppFabric

Other content for this session: