26 May 2013

Surface Pro as My Main Computer/Tablet

I have been developing on a Dell XPS M1530 laptop for nearly 5 years now.  It has been nothing short of a great laptop.  However, as you can guess based on its age, it is a bit dated by today’s standards.  A couple of months ago, I acquired a Microsoft Surface Pro (128BG version) and had been wondering if it might be beefy enough to replace my Dell.

Last week I had the opportunity to try my Surface Pro out in a development scenario so I thought I’d give it a try.  I installed Visual Studio 2012 w/Update 2, ReSharper (the latest version), and StyleCop.  I also included the latest suite of Telerik controls for Windows Phone 8.  I then spent two full days working on a new Windows Phone 8 application (for an internal innovation event at my place of employment).  In short, here is what I discovered:

  • The Surface Pro is more than capable of running Visual Studio 2012 with various add-ins installed.  The Surface Pro was much more responsive than my current Dell XPS M1530.  Granted, it is no match for the latest, top-of-the-line laptop or workstation, but it’s better than what I’ve been used to for the past four or five years, so it’s a huge improvement for me.
  • Running the Windows Phone emulator on a Surface Pro is an awesome experience.  Rather than interacting with the emulator with a mouse (as you would normally do on a laptop) you can simply use your fingers like you would on an actual phone.  In fact, I didn’t even think to try this until day 2 of my development (I had been using the mouse until then).  Once I tried it, I had no idea why I wasn’t using touch all along.
  • Using a Bluetooth mouse with the Surface Pro seems natural.  I found that I used the mouse as well as touch continually as I developed.  I used touch when it made sense (such as with the phone emulator) and the mouse where it made sense (such as with Visual Studio).
  • I used the Microsoft Surface Type Cover the entire time I was developing and found that I typed on it almost as quickly as I did on a full-size keyboard.  I really only slowed down when I used some of the navigational keys (e.g. Home, End, etc.) that were not located in their usual location.  I also slowed down a little with the Function keys because you have to use the “Fn” key in conjunction with them on the Type Cover keyboard.
  • Although you can develop on the Surface Pro’s 10” screen, I wouldn’t want to do it full time.  Had I been sitting at my desk during this event, I likely would have hooked up to an external monitor.

Based on this experience, I decided it was time to switch to the Surface Pro as my full-time computer/tablet at home.  However, since I had no desire to stare at a 10” screen for hours at a time, I decided to get a USB 3 dock to connect to my other peripherals.  After some initial research, I ended up selecting the Toshiba Dynadock Docking Station (PA3927U1PRP).  This particular model had everything I was looking for: good reviews from other customers, support for USB 3, dual monitor support, and a headphone jack in the front of the unit.  A co-worker has been using a Targus USB 3 Dock for a couple of months now with good results as well.  I ended up choosing the Dynadock mainly for its form factor.

In the screenshot below, you can see the Surface Pro on the right with the Dynadock between the surface and the two monitors.  I have a wired keyboard and mouse connected to the dock along with speakers and a subwoofer (5.1 surround sound is supported) and the two monitors (one is connected via HDMI and the other DVI).


So far I have been very happy with this setup.  At one point, I had a Netflix movie playing on the left monitor and a Hulu show playing on the right monitor with no distinguishable degradation in video performance (the sound from each show was mixed as well without any noticeable “garbling”).

One other item of note… When using Windows 8 (Surface Pro or any other laptop/workstation) I highly recommend getting a copy of Stardock’s ModernMix.  This application is a must have when using multiple monitors and it’s only $4.99 (USD) so it’s very affordable.  ModernMix allows you to run Windows 8 Store apps in a “windowed” environment giving you the ability to move Windows 8 Store apps from screen to screen.  Without ModernMix, your Windows 8 Store apps are pretty much isolated to running on a single screen – and only if you’re not currently interacting with the Desktop.

It is still too early to determine if this setup will end up being ideal but, so far, I am enjoying having better performance than I was having with my previous laptop and now I’m ultra portable in that I only need to unplug the USB connector from the Surface Pro (and power plug, if it’s plugged in) and I’m ready to go.

If it doesn’t slip my mind, I will report back in about six months or so with an update on how, or if, this configuration worked out.

07 May 2013

ALM Readiness Treasure Map Update–Tracking Progress

If you don’t follow the various ALM Rangers Solutions, you should!  If you do, then you already realize there is a lot of content put out by the various ALM Rangers project teams. In fact, there is so much information provided by the ALM Rangers that they have provided a Windows 8 app to help navigate the ever-changing waters of available content – the ALM Readiness Treasure Map.

Download Windows Store app
[If you’re running Windows 8, click the above image to install the app now]

Coming Enhancements

Although version 1 of the app has seen a lot of use, there is much room for improvement.  That said, there is currently a team of ALM Ranger pirates currently hard at work on implementing many of the proposed enhancements for version 2.  One enhancement in particular is the ability to track the status of each guidance document (referred to as jewels within the app) as you make your way through the treasure map.

If you take a look at one of the proposed screen mock-ups below (click here if you’re interested in seeing the rest of the mock-ups), you’ll notice just after the title the text “1/15 completed”.  This implies that you have flagged one of the guidance documents within this section as having been read.  With this update, we plan to track three states in regards to document status, including:

  1. Not Started – you have not yet viewed the document
  2. Started – you have started viewing the document but have not yet completed it, depicted graphically by an open, yet empty, treasure chest (as seen below)
  3. Completed – you have completed viewing the guidance document, depicted graphically by a filled treasure chest (as seen below)

QUESTION: We have gone back and forth on whether or not a guidance document should be automatically flagged as having been “Started” once you click on the link within the app to view it.  As you can see in the mock-up above, there is a context menu that allows you to manually flag a document as having been “Started” (amongst other states).  We are considering making this an app preference where you get to decide how it works.  However, we don’t want to make something that should be simple, complex.  If you have a strong opinion one way or the other, let us know in the comments below.

As a document’s status is updated, the app will utilize the built-in data roaming features of Windows 8 to synchronize the status across your Windows 8 devices.  So, if you start viewing a document on your Windows 8 laptop and move to your Windows 8 tablet, the correct document status will appear on the tablet as well (assuming you’re using the same Microsoft Account on both devices).

Design Details

The following details outline the changes to be made to the source code to support the tracking features described above.

Data Layer (Data Providers)


  • Add ID attribute to <guidance/> element and populate with unique integers (consider grouping by category - e.g. "Prepare" = 0-999, "Quick Intro" = 1000-1999, and so on...).  The ID is currently assigned dynamically when the data structure is loaded.  However, since we'll be syncing up document Status each time the app is ran, we need to ensure the IDs don't change.  For this reason, we need to add them to the data.


  • In LoadDB method, replace uniqueGuidanceCounter with newly added ID attribute from above.

Business Logic Layer (View Models)


  • Create Status.cs which simply contains a new enum:

public enum Status {
     NotStarted = 0,
     Started = 1,
     Completed = 2


  • Add a read-only Status property of type Status.  This property will be read only to force updates to go through the StatusManager (below) where the overall status values will be kept up to date.


This is a new class used to encapsulate some of the logic necessary to set guidance status as well as return various guidance status based on categories and projects.  This class would be surfaced through the DB class because a) it is always in scope (via the App class) and b) this would allow the StatusManager class to be provided with a reference to the DB class which has references to the categories and projects needed for status counts.

These properties would be calculated once (via the private methods below), during the initialization of the StatusManager class.  After initialization, they would be kept up to date as the SetStatus method is called.  This alleviates the need to continually walk the data hierarchy as the counts are displayed via data binding.

    • int CompletedProjectCount
    • int CompletedDocumentCount
    • int ProjectDocumentCount
    • int TotalCompletedCount

[-] = Private; [+] = Public  

    • -GetCompletedProjectCount(int category) - gets the total number of projects, for a given category, where all guidance documents have a Status of Complete (2).  Used for displaying completed ratio on the "category" page.
    • -GetCompletedDocumentCount(int project) - gets the total number of guidance documents, for a given project, that have a Status of Complete (2).  Used for displaying completed ratio on "projects" page.
    • -GetProjectDocumentCount(int project) - gets the total number of guidance documents for a given project.  Used for displaying completed ratio on "projects" page.
    • -GetTotalCompletedCount() - gets the total number of guidance documents, across all categories and projects, that have a Status of Complete (2).  Used for displaying overall percentage (on tile).
    • +SetStatus(int guidance, Status status) - sets the current status for the specified guidance ID.  Used by the "Mark as" menu for "Not started", "In progress", and "Completed".
    • -Save() - saves the current state of the various document Status values to "roaming" storage.  This would be simply serializing a List<Dictionary<GuidanceID, Status>> for simplicity.  This method would be called, asynchronously, each time the SetStatus method is called.
    • -Load() - loads the current state of the various document Status values from "roaming" storage.  This would happen during initialization of the StatusManager class.

UI (Views)


  • Capture Tapped event for "jewel" hyperlinks and set Status for selected guidance document to Started (1) unless it's already been marked as completed.  Question - do we want to automatically mark something as Started the first time it is opened or do we want to purely rely on the user to mark it via the menu option?

More Information

01 May 2013

TFS Live app for Windows Phone

If you happen to 1) work with Microsoft’s Team Foundation Service (TFService) or another publically accessible TFS server and 2) own a Windows 8 Phone, then you will want to check out the tfs live app for Windows Phone. The tfs live app provides quick, at-a-glance totals for the various types of work items you’re most interested in.

When you install the app and run it for the first time, you will have to configure the app to connect to your TFS server:


Although a template has been provided for the server URL (as shown in the above image), it is not the best template to follow if you’re connecting to a TFService instance.  In this case, use the following template:

     https://{account}.visualstudio.com/DefaultCollection – replacing {account} with your specific TFService account name.

Once you have successfully logged on, you will need to select a project name, role, and a couple of other options:


The selected role determines which queries will show up on the main screen. The roles that can be selected from include:

  • Developer – provides: “bugs assigned to me” and “tasks assigned to me”
  • Tester – provides: “bugs assigned to me”, “test cases assigned to me”, and “tasks assigned to me”
  • Dev Lead – “bugs assigned to me”, “tasks assigned to me”, and “overall bug summary”
  • Test Lead – “bugs assigned to me”, “tasks assigned to me”, “overall bug summary”, and “overall test summary”
  • Manager – “overall task summary”, “overall bug summary”, and “overall test summary”

The image below shows the screen for a Developer role:


Tapping on any of the query icons (on the screen above) will open a custom query (based on the specific type of query being ran) in the web browser displaying the appropriate work items.  This experience is less than ideal but it does work.  I would really like to see the query results come back to the phone and displayed in a list that, when tapped, would then open the web-based query to view the full details.

That said, I still find this app highly useful for keeping up to date on newly assigned and/or modified work items.  Some suggestions I might offer to the app developer would include:

  • Modify the server URL template to be more TFService friendly (as I’ve shown above).
  • Display the project name (and possibly role) on the main screen.  Currently, you can’t tell which project you’re connected to when looking at the main screen.
  • When selecting role from the settings page, “Devloper” (notice the missing ‘e’) is spelled incorrectly.  Not a major issue but detracts from the overall fit-n-finish of the app.

A PowerPoint slide deck with further details is available from the author here.