Pulled Apart - Part XV: Understanding usage with Runtime Intelligence
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
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.
Stats
The first interesting stat given is how many times the application has run, for Pull that is over 700 times
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!
Technical
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
If 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:
- Visual Studio 2010 & TFS 2010 Service Pack 1 Beta Bits
- Over 8Gb of DevExpress videos (csv list below) which has something for everyone:
- If you use any of their tools or components there is plenty of short videos on using features in them.
- If you like to learn from experts they have great videos where they interview people like Jeff Atwood, Richard Blewitt, Sara Ford and Tim Heuer.
- Maybe you just want some less technical learning’s so how about, learning the GTD methodology or the science of making great user interfaces!
- The Silverlight fire starter keynote in HD, so if you care about the future of Silverlight this is a much see video.
Plus I hear that some prizes may be given away at the events too
Pulled Apart - Part XIV: DevExpress
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) { view.SelectRow(counter); } } } }
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
I 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
However you can do most of this in the designer and then only need one line of code per enum value
.
Step 1
Set the Column Edit property of the column to an ImageComboxBoxEdit:
Step 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
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
Install 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
On 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
This took 29 min to process (remember this is without the download) this install and success!
Notes
I haven’t found anything in the many extensions I use daily that has broken! In particular my favourites all work
- CodeRush still working!
- Ghost Doc 2.5 still works.
- I did have one of the help extensions installed and VS just handled that fine (ie.e. no conflict with the new help viewer).
- SQLite development tools
- Power Command for VS
- Pro Power Tools for VS
- WoVS Quick Add Reference
CommNight December - Some interesting events
In 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
T4 Cheat sheets!
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.
Examples
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
Rudi 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: http://sadev.wufoo.com/forms/windows-phone-7-jump-start-feb-2011/
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
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:
StackExchange Flair
For a while the flair on my site has included my stats from StackOverflow, ServerFault and SuperUser. In my article on it, I mentioned I used the iFrame but I stopped that a few months ago and switched to getting the JSON data for my accounts directly and parsing that. I did this as it was order of magnitudes faster than loading via the iFrame.
For those who attended my DevDays talks, they would recognise that code as it is the same as I used in my demos.
Then recently an email arrived:
Damn, my jQuery magic was about to end so what could I do but change? When I started looking at the new flair I noted that StackOverflow wanted me to hotlink the image, i.e. have my visitors get it from their server, but the performance for pulling the image was still poor compared to my own website (or so the Firebug tool says). So what could I do to improve this?
What I did was to use wget, which is a Linux tool (I’m hosted on a Linux box) for downloading files, and put that in a schedule to once a day download my StackExchange flair and store it on my website, which means it gets served faster. As my numbers won’t change heavily day to day, (I’m not Skeet) once a day is enough balance between keeping it fresh and making it cachable.
The only downside is that my flair uage stats on StackExchange will likely drop, but I don’t really care about that.
The wget command is:
wget http://stackexchange.com/users/flair/1c5ab06b9a844e49b817e7eeb31977e0.png –O <path>/files/stackexchange.png
Internet Explorer 9 breaks with localhost
There is a known bug for this 601047This is resolved with RTM!
You can hear Eric Lawrence talk about this bug in the Herding Code Podcast
Internet Explorer 9 works great, except when it doesn’t, and it seems to not work for developers more than most, or maybe it’s just me (could the IE9 team be targeting me?).
Paranoia aside, there is an issue where when testing web applications (ASP.NET, MVC) or Silverlight applications from Visual Studio (i.e. press F5) it just refuses to load. Thankfully this has been confirmed by other people
What is going on and how do we solve this? Because it is really frustrating and it also makes for bad demos (especially with TechEd around the corner).
The first part of the problem is the ASP.NET Development Server which is what is hosting your websites when you hit F5.
Next part of the problem is Windows, especially since it assumes IPv6 is better than IPv4. Note in the picture below that when you ping localhost you get an IPv6 address.
So what appears to be happening is when IE9 tries to go to localhost it uses IPv6, and the ASP.NET Development Server is IPv4 only and so nothing loads and we get the error.
To solve this fire up notepad in administrator mode and navigate to <windows directory>\system32\drivers\etc\ and open the hosts file. Inside you will find a number of lines prefixed with a hash (which makes those lines comments). Remove the hash from the line which has 127.0.0.1 in it, as below and save.
This will cause Windows to resolve localhost to IPv4 first (you can confirm by pinging localhost) which means that IE9 will do the same and now it just works every time.