Archive for the 'Technology' Category

I’ve been awarded a Microsoft MVP in Visual Studio ALM!

Microsoft MVP logoA few days ago I received an email from Microsoft informing me that I’d been awarded an MVP for Visual Studio ALM.

While my participation in the dev community has been purely for the enjoyment and love of what I do, this has been a career goal of mine and something I’ve been working towards for a few years.  I’m super excited and humbled to have been awarded alongside many of the best guys and girls in the field.

For those unfamiliar with what this award means, the best information can be found at http://mvp.microsoft.com, but here’s a quick quote from the site:

The Microsoft Most Valuable Professional (MVP) Award is our way of saying thank you to exceptional, independent community leaders who share their passion, technical expertise, and real-world knowledge of Microsoft products with others. … Today, there are more than 4,000 MVPs worldwide. They represent more than 90 countries, speak over 40 languages, answer more than 10 million questions a year, and are awarded in almost 90 Microsoft technologies—reflecting the breadth of our products and our global communities.

Thanks must go to the awesome guys and girls I work with at SSW for their support, as well as to the many enthusiastic developers I interact with as an organiser of the Brisbane .Net User Group and DDD Brisbane.

Here’s to a great 2014!

 

How to change a Work Item’s type in Team Foundation Server

One of the most frequent questions I get asked when training a new team in TFS is how to change a Work Item’s type.  If the team is coming from Jira, I can almost guarantee I’ll get asked that question.

While you can’t change the type of an existing Work Item with Team Foundation Server 2012 and 2013, there’s a simple workaround that achieves the same result.

How to change a Work Item’s type

First, open the Work Item in Team Web Access and click this button: Copy Work Item Button

The Copy Work Item button in Team Web Access

The Copy Work Item button in Team Web Access

In the dialog, choose the Work Item type you want to change it to, and click OK.

Choose the Work Item Type

Choose the Work Item Type

Finally, go back to the original Work Item and change its state to an appropriate “closed” state. If you really want to remove all traces of the original work item, you can use the command line “witadmin destroywi” tool. I don’t recommend this!

You can perform the same tasks from within Visual Studio by right-clicking on the work item and choosing “Create Copy of Work Item”.

Visual Studio - Copy Work Item

Visual Studio – Copy Work Item

It’s a deep copy

If you look at the new Work Item, you’ll see that all of the detail and links have been copied across where there’s a corresponding field in the new type.

All related Work Items are linked, and even links to Changesets that applied to the original Work Item are copied.

Deep Copy of Work Items

Deep Copy of Work Items

This tip can be really useful for Product Owners who like to create “bugs” that don’t fit your bug definition and are really new requirements.

So there you have it, a way of “changing” the type of a Work Item that should please those Jira converts!

The new, shiny goodies in Visual Studio and TFS

I recently spent a couple of weeks speaking at Tech Ed Australia and Tech Ed New Zealand with Adam Cogan.  You can see recordings of the Tech Ed Australia sessions or the Tech Ed New Zealand ones on Channel 9 if you want the full presentation.

In this post, I wanted to specifically point out a few of my favourite Visual Studio ALM features from our sessions.

Visual Studio IDE – Peek

When I’m reading code, I’m used to jumping around between files to find definitions and usages using key combinations like F12, Ctrl+F12Shift+F12, Ctrl+-, and Ctrl+Shift+-.  Peek adds yet another key combination – Alt+F12 – to the mix, and it’s an awesome addition.

When your cursor is in the right place, just hit Alt+F12, and the definition will expand below.  Even better, you can edit it inline!  Just hit Esc when you don’t want to see it any more.

Visual Studio 2013 - Peek

Visual Studio 2013 – Peek

This small thing has already saved me so much time while coding.

Visual Studio IDE – Code Lens

When you open a project in Visual Studio 2013, you’ll notice a couple of additional bits of text above things like class methods and properties.  These code lens helpers let you see at a glance, some really important information about the method or member below.

You’ll see:

  • References
  • The number of tests that touch this code
  • TFS information about this code including recent changes and associated work items

Hovering over these bits of text (or using shortcut keys Alt+1, Alt+2, etc.) expands this information and gives you the opportunity to run tests or navigate to code, TFS changesets, or work items.

Visual Studio 2013 - Code Lens

Visual Studio 2013 – Code Lens

This is incredibly powerful.  You can see immediately how this code is being used and what has happened to it. without needing to leave your code.

Team Foundation Service – Test Case Grid View

This feature is brand new (only a couple of days old) so we didn’t get a chance to announce it at Tech Ed Australia.  A demo will be in the Tech Ed New Zealand video when it’s live.

There’s a new option in the Test hub in Web Access where you can change the view of your Test Cases to “Grid”.  Just click on the View item on the right.

Team Foundation Service - Test Grid View

Team Foundation Service – Test Grid View

Team Foundation Service - Test Grid View

Team Foundation Service – Test Grid View

What’s amazing about this view is that you can paste straight from Excel!  If that doesn’t make your testers happy, nothing will!

Team Foundation Service – Team Room

The addition of a team room to TFS adds some awesome collaboration features to Web Access.  It’s particularly useful for remote teams (which I work in a lot).  Rather than just a chat room though, it can feed you information about your project.  You can see build completions, changes to code, and updates to Work Items.

Team Foundation Service - Team Room

Team Foundation Service – Team Room

The faster release cadence of the ALM team has meant much faster additions to Team Foundation Service. If I can suggest one thing, it’s to move your ALM process onto the cloud because there’s much more to come!

There are many more great features in VS and TFS 2013.  I encourage you to take a look.

VS 2013 – Packed Rooms at Tech Ed Australia and New Zealand

Developers are very excited to get their hands on Visual Studio 2013!

I’ve spent the last couple of weeks speaking at Tech Ed Australia and Tech Ed New Zealand with Adam Cogan.  We’ve been demonstrating the awesome new features in Visual Studio 2013, as well Team Foundation Server and Microsoft Test Manager.

Watch the recordings of the Tech Ed Australia sessions on Channel 9.

Note: At time of writing, one of the videos is unavailable. It should be online for viewing by midday 13th September.

Update: Both videos are available now

Channel 9 - Tech Ed Australia - My Sessions

Channel 9 – Tech Ed Australia – My Sessions

The rooms at Tech Ed Australia were packed!  About 450 developers came to see the two sessions showing just how popular the Visual Studio ALM stack is.

In my next post, I’ll go through some of the highlights of the two sessions.

Glimpse Heads Up Display released

Today, Anthony van der Hoorn and Nik Molnar announced the release of a new version of Glimpse with a big new feature – the Heads Up Display.

I’ve been lucky enough to see this new feature grow into its current form and in my opinion, it takes this tool from the “very useful” category into the realm of “must have”.

SSW has been recommending Glimpse for some time.  With the addition of this feature, we now recommend you use it all the time!

The New HUD

Assuming you’re familiar with the previous version of Glimpse, you’ll know that once it’s set up and turned on, you see a small icon on the bottom-right of your screen (Old Glimpse Icon).  Clicking it will expand a big devtools-esque view of what’s happening on your server.  Incredibly useful.

I often keep Glimpse running while I’m in development, and whenever I want to know about what route was hit or how many SQL queries were executed for this page, I’ll click the icon and have a look.

The point is, I have to look.  Glimpse required the developer to actively investigate.  The new Heads Up Display changes the game – now I don’t have to be looking for the cause of a problem, the information is there all the time.  You now have a very powerful and proactive tool at your disposal.

Example Time!

I frequently use Glimpse to verify that a page I’m looking at doesn’t suffer from the dreaded N+1 Selects problem you can get with a lot of ORM tools.  The SQL tab (see Glimpse.Ado and Glimpse.EF) let me see what queries are being run against my SQL server.  If I see a lot, there’s likely to be a problem.

With the new Glimpse HUD, that information is always there whether I’m actively looking for it or not.  While testing one of the pre-release versions of the HUD, I noticed a page on a project I was working on that resulted in 74 SQL queries.  Had I been using the old version of Glimpse, I may not have noticed (I wasn’t working on that page)!

Here’s what I saw (minus the issue):

New Glimpse HUD

Above, you can see the number of Database queries and the time taken for those queries.  In my case, I noticed this number was a really high.  To  investigate further, I can hover over the “Host” section to get some more info.

New Glimpse Expanded

In this example, we can see that not only were there three queries, we actually have three connections.  In my case, the 74 queries were shared over maybe a dozen connections.  Something was going wrong here.  You’ll note we can see lots more information about what’s going on in terms of Controller Actions and Views as well.

As with previous versions, we can click the (new) Glimpse logo to expand Glimpse into its full view, showing us the actual queries that were run against the database.  The UI here has been updated as well and is very clean and “metro-y”.  This is where I could see all the repeated queries that were running against my SQL Server.

New Glimpse Full View

Without the HUD, I probably wouldn’t have noticed there was a problem until much later.  Because the HUD gives me this info in a relatively subtle way, I caught this issue quite quickly.

Summary

Glimpse now has three modes of delivering you data instead of just the one, and the HUD is the big game-changer here.

First, you get a Heads Up Display (HUD) that I’d strongly recommend you keep open at all times while developing.  It lets you monitor the performance of your application without getting in your way.  More importantly, it’s likely to show you issues preemptively rather than waiting for you to investigate.

If you hover over one of the HUD sections, it expands to give you even more info – this lets you investigate a bit further while still staying out of your way for the most part.

Finally, the full view of Glimpse gives you the UI you’re probably used to if you really want to dig deep.

Get it now!

The new version of Glimpse is live on Nuget, but if you want to read more about the new release, head to getglimpse.com or the blog post on the Glimpse Blog.

Getting the Glimpse SQL tab working with Linq to SQL

I’m currently working on an ASP.NET MVC project that’s using Linq to SQL for data access.

As usual, one of my first contributions was adding Glimpse (including Glimpse.MVC4 and Glimpse.Ado), initially as an easy way to confirm my suspicions of the dreaded N+1 problem.

Unfortunately, when I ran it, the SQL tab in Glimpse gave me nothing – Glimpse wasn’t tapping into my data connection.  The issue is Glimpse attaches itself by providing its own GlimpseDbProviderFactory which wraps the standard ones.  This lets it collect information about how you’re using your data connections. Our Linq to SQL implementation wasn’t using this factory so I had to do the work myself.

Here’s how I fixed this issue.  Even if you’re not using Linq to SQL, the solution is fairly generic, so you might find it’ll help you as well.

First, I found the generated Data Context class.  It should be in the .designer.cs file for your dbml.

[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="MyApp")]
public partial class MyAppDataContext : System.Data.Linq.DataContext
{
    private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
    
#region Extensibility Method Definitions
    // snip
#endregion
    
    public MyAppDataContext(string connection) : 
            base(connection, mappingSource)
    {
        OnCreated();
    }
    
    public MyAppDataContext(System.Data.IDbConnection connection) : 
            base(connection, mappingSource)
    {
        OnCreated();
    }
    
    // snip
}

The highlighted lines represent two of the overloaded constructors that can be used to create a context.

Our project had been using the first one by passing in a connection string. To resolve the issue I’m having, I’m going to use the second constructor, passing in our own IDbConnection.

I need to change this:

var context = new MyAppDataContext(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString());

to this:

var context = new MyAppDataContext(
    new GlimpseDbConnection(
        new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString())
    )
);

After pressing F5, everything worked beautifully and we started seeing our SQL queries come through.

All that’s happening is that we’re manually wrapping our connection in a GlimpseDbConnection. In short, if you have control over the creation of the IDbConnection, you can get Glimpse working with very little fuss. Of course, you’ll need to include Glimpse.Ado in the project that calls this constructor.

I’m sure I don’t need to tell you that you should be using Dependency Injection to inject your IDbConnection where required, making it even easier to implement!

TFS 2012 with Update 2 – Done

At SSW, we make sure we keep ourselves up to date with the latest version of everything, we were one of the first to upgrade our TFS 2010 instance to TFS 2012 RC, then to the RTM when that became available, and finally to Update 1 earlier this year.  Today, I’m happy to announce we have upgraded to TFS 2012.2 (or TFS 2012 Update 2).

Summary

One of the major changes with this version is the installation story.  Microsoft has done a lot of work to help ease your upgrade path, so you’ll notice the upgrade is much more straightforward than previous ones.

This update remembered the vast majority of our settings, so there was less need to reconfigure everything after the install.  I like to err on the side of safety though, so I followed our standard steps:

  1. Screenshot our existing configuration
  2. Back up the databases and snapshot the servers
  3. Stop the TFS services
  4. Install TFS 2012 Update 2
  5. Configure TFS 2012 Update 2
  6. Test, test, test!

Before you start

Just as we did last time, the first step was to send an email letting everyone know there would be a TFS outage.  See our Rules to Better Networking for an example of how to do it.

If you’re doing the upgrade, you’ll also need administrator access to the servers. Just as last time, I got promoted temporarily so I could do my work.

Preparation Steps – save your existing configuration

The release notes for TFS 2012.2 claim that all your settings will persist, but just in case, I opened the TFS Administration Console and took a screenshot of each summary page and ended up with 4 images.  This ensures I don’t forget any of the settings if I need them.

Once I’d saved everything I need, I could get going on the install.

Preparation Steps – stopping the servers and backing up

  1. Review the Rules to Better TFS 2012 Migration to make sure what you need to do.  In line with these rules, I took the TFS server offline.
    This is important because we don’t want any checkins or work item changes to come through while we’re halfway through the process.  They may miss the upgrade!

    1. Use TFSServiceControl quiesce to stop all the agents.
      Note: Once again  I got a number of exceptions, but the process automatically retries and succeeds.  The important parts are highlighted in yellow.
      TFS Quiesce
    2. Stop the relevant network services
      TFS Net Stop WAS
    3. Verify that you can’t connect to the TFS server by trying to connect in Visual Studio
      TFS unavailable in VS
      And that you can’t visit TFS Web Access
      TFS Web - 404
  2. As per our rules,  it’s a good idea to run the DogFood Stats queries from Grant Holliday. Document the numbers so you can compare them after the upgrade to make sure you haven’t lost anything.  If you have more than one Project Collection, make sure you do this over every Project Collection you care about.
  3. Back up the TFS and Reporting Server databases as per our rules.
    We have a few relevant databases because we have a number of Project Collections.
    TFS Backup Collections

Installing TFS 2012.2

  1. Because we’re installing from an ISO rather than a physical CD, we mount the ISO using SlySoft’s Virtual CloneDrive (or your favourite alternative).
  2. Run tfs_server.exe from the installation disk or ISO.
  3. Accept the license terms and click Install Now.
    TFS 2012.2 Install
  4. Watch the progress with excitement and trepidation (and coffee)
    TFS 2012.2 Installingssw-coffee

Configuring TFS 2012.2

  1. The Upgrade Wizard should start automatically this time (previously you had to choose it) and it will collect your settings for you!
    Upgrade Wizard collecting settings
  2. When it’s done, you can click Next.
  3. We’re now asked to upgrade an existing database.  Because of the work done with upgrades, the tool should have these details already filled out.
    Upgrading the Database
  4. Confirm you have a current backup, then click Next.
  5. Next, we’re asked for the service account for our Application Tier.  Again, this should already be filled out. Once you’ve provided the password again, check it by clicking Test, then click Next.
    Application Tier settings
  6. Next up, we’re asked if we want to configure SQL Reporting Services.  Make sure the checkbox is checked, then click Next.
  7. Again checking your screenshots, make sure the instance and URLs for your Reporting Services instance are correct (they should be), and click Next.
    TFS Reporting Services config
  8. Next up is the TFS Warehouse database.
  9. The wizard should have already filled this out for you.  If everything is correct, click Next.
    Warehouse Database settings
  10. Next, you’re asked for your Analysis Services instance.  Check the instance name before clicking Next.
  11. Next, we’re asked to provide an account that the Reports will run as.  Again, this should already be filled out by the wizard, but you’ll have to provide a password. Do so, then click Next.
  12. Next we’re asked if we want to configure SharePoint for TFS, we do, so we’ll make sure the checkbox is checked and click Next.
  13. Once again, the wizard should have kept all our existing settings.  We’ll check they’re correct by clicking Test, then click Next.
    SharePoint settings
  14. On the next screen, we’ll get a summary of all the options we’ve chosen.
  15. Go through them carefully to make sure everything is correct, and click Verify to check.
    TFS config confirmation
  16. Your Verify step may highlight issues such as restarts required.  I once again got this issue and had to reboot the server before continuing.
    As per our upgrade to the RTM, I got stuck in a reboot loop and had to follow Steve Wiseman’s advice to break out of it.
    Once fixed, I had to click Configure Installed Features on the Application Tier node then choose Upgrade to start the wizard again.
  17. Once the readiness checks pass, click Configure
    Readiness Checks
  18. Wait patiently (again with coffee) while the upgrade goes through its steps.  When finished, click Next.
    Final Configuration
  19. Once the TFS upgrade has finished, the Upgrade Wizard will upgrade each of the Project Collections. Be patient while it does this.
    Project Collection Upgrades
    ssw-coffee
  20. At this point I ran the Dog Food Stats again (as per step 9) and checked that nothing had changed too much.  This time, all the numbers were exactly the same which is reassuring

Additional steps

  1. I also upgraded Team Foundation Server on our Build Servers by installing the upgrade and checking the settings were the same.
  2. I had to reconfigure our Build Agent to get it working again – it was running under the wrong account.

Testing

After the final steps were completed, we went through the following tests to make sure everything was up and running again.

  1. Open Visual Studio and connect to TFS
  2. Do a Get Latest
  3. Make a change and check in
  4. Trigger a build and wait for it to succeed
  5. Check TFS Web Access is working by navigating to the TFS URL
  6. Check the Reporting Services are still working by navigating to the reporting URL

All the tests passed without a problem, so we’re up and live on TFS 2012 Update 2!

There is a lot of goodness in this update for everyone – have a look at the blo

Enterprise MVC Apps course – redux

Last year, Adam Stephensen and I ran a number of “Enterprise MVC” courses.  These courses were hugely popular, not only selling out in Brisbane, Melbourne, and Sydney, but receiving positive feedback from each session nationwide.

Well, due to popular demand, they’re back, but in a slightly different format – it’s gone from a 2 part course to a course of 4 relatively independent days.  Day 1 will be useful if you’re new to MVC, while the other three days will take your skills to the next level by teaching how to make enterprise-quality MVC applications.

There are a few reasons for the change, all of which based on feedback from the participants.

The volume of important content was the primary reason for the change.  Adam and I really wanted to spend more time on important topics like Inversion of Control, Dependency Injection, logging, and testing.  With a 4 day course, we can really give these topics the attention they deserve.

We also think that getting your hands dirty is really important for understanding a lot of concepts.  By extending the course to 4 days, we can ensure there’s plenty of time for participants to try things rather than just hearing about them.

Finally, we found that attendees came to the course with differing levels of MVC experience.  For some, the introductory subjects were invaluable, but not for everyone.  By adding an extra day for MVC Foundations, we can confidently start at a higher level for the subsequent days.

If you’re writing MVC applications (or want to start) and you want to go beyond the demos so you can write enterprise-quality, maintainable, scalable, and robust applications in MVC, I’d highly recommend attending our new and improved courses.

For more details:

P.S. Telerik has once again jumped on board offering licenses for some of their awesome products when you register.  Check out the course pages for more info!

TFS 2012 with Update 1 – Done

Not long ago, we upgraded our TFS 2010 instance to TFS 2012 RC, and then followed it up with an update to the RTM when that became available.  It has been running great since the upgrade.

Today, I’m happy to announce we updated our TFS 2012 server with Update 1 last week.  This update adds a lot to TFS, but many of the changes are behind the scenes.

Once again, SSW is the first company I know of to make the move to TFS 2012 Update 1!

Summary

It took a few more steps than I thought would be needed.   I’ll be going through the steps we took to upgrade our TFS in this blog post – if you follow this guide, it will be a snap.

Warning: Even though this is called an “update”, it represents a complete new version and therefore you’ll need to configure everything again!

The steps I took were:

  1. Screenshot our existing configuration
  2. Back up the databases and snapshot the servers
  3. Stop the TFS services
  4. Install TFS 2012 Update 1
  5. Configure TFS 2012 Update 1
  6. Test, test, test!

Before you start

Just as we did last time, the first step was to send an email letting everyone know there would be a TFS outage.  See our Rules to Better Networking for an example of how to do it.

If you’re doing the upgrade, you’ll also need administrator access to the servers. Just as last time, I got promoted temporarily so I could do my work.

Preparation Steps – save your existing configuration

Once again, this is an incremental release so we can expect the configuration to be more or less identical.  To make life easier for me, I opened the TFS Administration Console and took a screenshot of each setting.  This ensures I don’t forget any of the settings.  I referred back to these settings in step 5.

Once I’ve saved everything I need, we can get going on the install.

Preparation Steps – stopping the servers and backing up

  1. Review the Rules to Better TFS 2012 Migration to make sure what you need to do.  In line with rule 4, I took the TFS server offline.
    This is important because we don’t want any checkins or work item changes to come through while we’re halfway through the process.  They may miss the upgrade!

    1. Use TFSServiceControl quiesce to stop all the agents.
      Note: Once again  I got a number of exceptions, but it seems after a retry it worked fine.  The important parts are highlighted in yellow.
      TFS Quiesce
    2. Stop the relevant network services
      TFS Net Stop WAS
    3. Verify that you can’t connect to the TFS server by trying to connect in Visual Studio
      TFS unavailable in VS
      And that you can’t visit the TFS Web Access
      TFS Web - 404
  2. As per rule 5,  it’s a good idea to run the DogFood Stats queries from Grant Holliday.  Document the numbers so you can compare them after the upgrade to make sure you haven’t lost anything.  If you have more than one Project Collection, make sure you do this over every Project Collection you care about.
  3. Back up the TFS and Reporting Server databases as per rule number 6.
    We have a few relevant databases because we have a number of Project Collections.
    TFS Backup Collections

Installing TFS 2012 Update 1

  1. Because we’re installing from an ISO rather than a physical CD, we mount the ISO using SlySoft’s Virtual CloneDrive (or your favourite alternative).
  2. Run tfs_server.exe from the installation disk or ISO.
  3. Accept the license terms and click Install Now.
    Update 1 Installation
  4. Watch the progress with excitement and trepidation (and coffee)
    Update 1 Install Progress

Configuring TFS 2012 Update 1

  1. Choose Upgrade from the left-hand menu and click Start Wizard.
    TFS upgrade
  2. Click Next on the first screen presented.
  3. We’re now asked to upgrade an existing database.  Type in your SQL Server instance name and then click List Available Databases.  The tool should find your TFS Configuration database.
    TFS database upgrade
  4. Confirm you have a current backup, then click Next.
  5. Next, we’re asked for the service account for our Application Tier.  To make sure this is consistent, check the screenshots you created right at the start in your Preparation Steps. Click Next.
    TFS Application Tier settings
  6. Next up, we’re asked if we want to configure reporting services.  Make sure the checkbox is checked, then click Next.
  7. Again checking your screenshots, make sure the instance and URLs for your Reporting Services instance are correct, and click Next.
    TFS Reporting Services config
  8. Next up is the TFS Warehouse database.
  9. Enter the correct SQL Server instance (if it’s not already correct), then test the connection by clicking on Test, then click List All Available Databases. The wizard will find the Tfs_Warehouse database automatically.  If everything is correct, click Next.
    TFS warehouse config
  10. Next, you’re asked for your Analysis Services instance.  Again, check your screenshots and enter the correct information before clicking Next.
  11. Next, we’re asked to provide an account that the Reports will run as.  Check your screenshots and click Next.
  12. Next we’re asked if we want to configure SharePoint for TFS, we do, so we’ll make sure the checkbox is checked and click Next.
  13. Important: Even if you have a different SharePoint setup, it’s advisable to simply use the current SharePoint settings at this point.  If you enter new details, the final step will have trouble verifying the installation as it will think you have two SharePoint instances.  Don’t worry, you can change it later.
    TFS SharePoint config
  14. On the next screen, we’ll get a summary of all the options we’ve chosen.
  15. Go through them carefully to make sure everything is correct, and click Verify to check.
    TFS config confirmation
    Note that we had some issues at this point with Analysis Services.  It appeared Analysis Services was corrupt and was preventing us from continuing.  Thanks to this blog post by Oshry Horn, we were able to fix the issue and continue with our configuration.
    Matt has also mentioned in the comments that the WWW Publishing service needs to be started at this point.  You can do this by typing “net start was” in a command line console (as Administrator). 
  16. Once the readiness checks pass, click Configure
    Readiness Checks
  17. Wait patiently (again with coffee) while the upgrade goes through its steps.  When finished, click Next.
    Upgrade Done
  18. Once the TFS upgrade has finished, the Upgrade Wizard will upgrade each of the Project Collections. Be patient while it does this.
    Project Collection Upgrades
  19. At this point I ran the Dog Food Stats again (as per step 9) and checked that nothing had changed too much.

Additional steps

  1. I also upgraded Team Foundation Server on our Build Servers by installing the upgrade and checking the settings were the same.
  2. I also uninstalled the TFS Extensions on the SharePoint server and installed the new ones.
    To get this working again, I had to repair the connection in the Configuration Manager on the TFS server to get them talking to each other again.
    Repair Sharepoint Connections
  3. We also had to reconfigure our Build Controller to get it working again.

Testing

After the final steps were completed, we went through the following tests to make sure everything was up and running again.

  1. Open Visual Studio and connect to TFS
  2. Do a Get Latest
  3. Make a change and check in
  4. Trigger a build and wait for it to succeed
  5. Check TFS Web Access is working by navigating to the TFS URL
  6. Check the Reporting Services are still working by navigating to the reporting URL

I’m happy to say all these tests passed without a problem.

We’re up and live on TFS 2012 Update 1!

Die, Native Apps, Die!

Recently, I’ve been telling anyone who will listen that you should consider writing an HTML5 web app rather than a native mobile app.  The advantages are many and the list of things you can’t do grows smaller by the day.

I spoke on the topic at DDD Sydney earlier in the year, and more recently at Web Directions “What Do You Know” in Brisbane.  If you’d like the slides, they’re available at http://www.damianbrady.com.au/dyrnaa and http://www.devnewsreader.com/about.html respectively; complete with demos.  Check them out – I’d love your comments.

Why choose web apps over native apps?

There are a lot of reasons, and most are obvious.

  1. Users are always on the latest version – no support of old versions
  2. You only have to implement it once, in one language (counting HTML, CSS, and JS as one language of course)
  3. You can choose what to charge and how to charge it
  4. Done properly, web apps work on all devices – even those that don’t exist yet

But they’re slow!

Well no, not necessarily.  I blame Facebook for this misconception.

Facebook famously released an HTML5-based app for iOS and then ditched it in favour of a native app to squeeze more performance out. After all the reporting, the emergent mainstream view was that HTML5 apps simply couldn’t perform.  In reality, the new release was a refresh using a technology closer to the metal as a reaction to consumers screaming out for performance above all else.  Let’s face it, Facebook is not a trivial app in terms of bandwidth and content. There’s a fair bit going on with photos, chat, notifications, etc.

Could Facebook have made the app faster while still using HTML5? Almost certainly, and if they’d leveraged newer HTML5 capabilities as they became available, there definitely would have been improvements.

But would it have appeased the masses? Maybe, but we’ll never really know.

But web apps can’t do X!

Quite possibly not, no.

Well… unless you’re talking about using touch events, orientation, geolocation, hardware-accelerated graphics, local data storage, offline operation, home-screen icons, audio and video, sending emails or making phone calls. So probably yes… yes they can.

Sure, there’s gaps in there. A web app can’t use your phone contacts, it can’t play your music, and it can’t (quite) use the camera.

…Yet

Yet?

There’s a very definite trend in the world of HTML and browsers.  Each new browser or mobile OS version slowly chips away a bit more at the list of things a web app can’t do.  Surprisingly, Apple seems to be leading the way to a degree in the mobile space; enabling more and more HTML5 features in Safari with each release.

I say “surprisingly” because Apple has a very captive market in terms of native apps. True or not, the perception exists that neither Android nor Windows Phone have the same quality of apps available in their stores. Certainly they don’t have the quantity. Why then would Apple implement functions in Safari that pave the way for native-quality web apps?  It’s a good question, and I’m not sure I have the answer. Maybe it’s just the constant drive to stay in front.

Grooveshark

Very recently, Grooveshark rolled out a fully-functional HTML5 version of their site that works beautifully on mobile devices.  They’ve been plagued by problems getting native apps into the official app stores, and this option allows them to bypass the problem altogether.

It’s a truly impressive piece of engineering. If you have a … well… anything… I strongly suggest you go and try it out.  There are some amazing features. For example, (On iOS at least) you don’t even have to keep the browser window open for the music to keep playing.

One small thing… I’d love to see them implement some of the meta and link tags that Apple has made available for iOS devices.  For an example, try adding http://www.devnewsreader.com to your home screen on an iPhone or iPad (warning, it’s quick-demo quality).

Despite being a company that focuses on something not traditionally offered via a web page (streaming music), Grooveshark has chosen HTML5 as the right way to go.  Before sinking time and money into developing native apps for multiple platforms, it’s worth considering whether your app might be a good candidate for a web app as well.

Grooveshark may not be the first high-profile name to try to escape the walled-garden of native apps, but moves like this definitely show the blood in the water (pun totally intended and awesome).

Next Page »