August 2006 Archives

TFS Top Tip #8 - Where to get help

Recently, I've had a surge of emails asking various questions about Team Foundation Server and how to do certain things.  While I always (eventually) respond, it can sometimes take me a while.  If you have questions about Team Foundation Server then the best place to go is the MSDN forums.  These forums are monitored by the VSTS team as well as by the Team System MVP's and other folks who know stuff about the product.  Unlike a lot of newsgroups, these forums are actually a very welcoming and friendly place to ask questions.  I personally hang out on the following forums:-

As well as the official MSDN forums, you can also try one of the community ones.  These don't tend to get the traffic from Team folks but are still good resources.  It's also a good place to ask questions that you might not want to ask on a Microsoft resource (such as how does TFS stack up against Product B) and get an answer from somebody who is not paid by Microsoft.

At Teamprise we also have our own forum and knowledge base that are worth checking out if the question is related to use of Team Foundation Server from Java or on the Unix / Mac / Linux platforms.

Before you ask the question, it is probably worth checking the MSDN documentation first or using your favorite search engine, but don't worry about asking if you can't find your answer - the folks on these forums are always happy to point you to the best resource.

You never know, if you ask a question on these forums then you might still get me answering it if you are unlucky enough.  By asking the question in a public forum you are doing a service for the next person that comes down the line with the same problem as they'll be able to see somebody else with the same issue and (hopefully) the answer.

The Missing Merge Context Menu

A screen shot showing the merge wizard in Teamprise 2.0 I'm currently busy with the merge functionality in Teamprise Version 2.  At the same time I've been working off in a bridging branch while some major refactoring / performance improvement work was happening in the main development trunk so it turns out that the pains and pitfalls of merging are fresh in my mind as I work on the functionality.

Anyway, when merging I like to select the changeset range so that I know exactly what I am trying to merge.  This "cherry-picking" of changesets to merge in TFS is a neat feature.  One thing that was really annoying me was the inabilty to see the contents of a changeset while in the merge wizard page.  Therefore I've just added a context menu so that you can see changeset details (and also copy information about the selected changesets into the clipboard in case you need them to keep notes or send an email or something).  Strangely enough there is no context menu in the Visual Studio version of this wizard page so I thought I'd mention it here in case any of the VSTS team are reading but also to let any Teamprise users know to look for it when it turns up in the next V2 preview release.

TestDriven.NET 2.0 RC1

TestDriven.NET - the best unit test integration with Visual Studio. Jamie Cansdale has released RC1 of the new version of TestDriven.NET.  For those of you that don't know it TestDriven.NET is an excellent unit test integration plug-in for Visual Studio 2005 and 2003.  Scott Hanselman recently voted it number 11 in his Big Ten Life and Work-Changing Utilities. Not only does it work with your old NUnit and MBUnit tests it will also work with the new MS Unit Tests in Visual Studio Team System.  Also the test runner is lightening fast (must faster than the one that comes with Visual Studio Team System).  TestDriven.NET includes some lovely value add features.  My favorite is to be able to debug into .NET System calls using the Reflector integration (who needs Symbol servers :-) ).  Anyway, if you haven't tried it then I urge you to take it for a spin. 

Jamie is now working on TestDriven.NET full time - while you can still download a fully functional free version, you can also get your company to pay for a professional or enterprise version which has more corporate friendly licensing.  I'd encourage you to cough up some money for it, the professional version is below the magical $100 mark and will is well worth the investment even if it just so that you can get home earlier and see more of your family.

My Pint Sized TFS Proxy


My pint sized Team Foundation Server Version Control Proxy compared to a CD case for scale I use Team Foundation Server over the end of a VPN connection to from my house in the UK over to Teamprise HQ back in Champaign, IL.  Using Team Foundation Server the performance has been satisfactory, but I've always been jealous of the performance that the guys in the office get over their 1Gbs connection.  We have gigabit networks both sides of the Atlantic, but the ADSL line to my house is a 2Mbs downstream and 256kps upstream connection which slows everything down.  As an experiment, I've just installed a very small machine as a TFS Version Control Proxy Server and the performance increase is astounding - I wish I had done this earlier.

In my office, I had an old Dell Optiplex SX270 lying round.  Measuring 240x240x85 mm (~9x9x3 inches), it used to run before Teamprise kindly offered to host my blog for me.  It's not a powerhouse by any stretch of the imagination - a 2.4 Ghz P4 with 512Mb RAM and a 5,400rpm 20Gb Laptop hard disk.  I picked it up on the Dell Outlet store for less than £300 over 3 years ago.  However, it will run Windows Server 2003 without any complaints, so I configured the box as a VPN gateway for my network and also installed the Team Foundation Server Version Control Proxy onto it.

All I can say is that I wish I has done this earlier.  Our main development branch currently contains 4,501 files in 706 folders taking up 70Mb.  As you can tell - the majority of the files are small (java source) files.  The TFS Version Control Proxy gives the most impressive speed improvements when working with large files.  Despite this, to do a full clean get of the main development branch has gone from 43 minutes 33 seconds to (on average) 2 minutes 50 seconds - that is a 15 times performance improvement.

Speed comparison of a full get (time in minutes)

While, I don't see this sort of speed improvements all the time (because in the majority of cases I just do a Get Latest to update the 20 or so files changes since I last did a Get Latest into my workspace), it is invaluable when I swap branches or when I want to run a clean build.  Doing some performance testing, even my pint sized server is not under any sort of load during a full get of the trunk so I could probably use it to host a small remote team of about 5-10 people reasonably easily.

Anyway - I just wanted to post about my small TFS proxy server (though not quite the smallest TFS appliance).  If you are running TFS and you have a remote office connecting then I urge you to set aside a spare machine to run as a TFS proxy server at the remote site.  It doesn't have to be particularly high-powered or dedicated to the task for you to get some serious benefit from it.

Syntax Highlighter for Live Writer at CodePlexWell, the benefits of the Live Writer SDK are already coming true for me.  One of my bug-bears with BlogJet was to copy/paste in code samples was pretty tricky.  I ended up evolving a manual process of visiting the excellent CodeHTMLer site to convert into HTML and then pasting the source into BlogJet source view (when pasting Java code I just to tell that CodeHTMLer it was C# and it usually looks great.

I was over at the CodePlex site this morning and noticed that Alexander Concha Abarca has posted a Syntax Highlighting Plug-in for LiveWriter.

Seems to work ok so far, the actual plug-in is very simple as it re-uses a code high-lighting engine from Wilco Bauwer which supports many languages including all the ones I may want to talk about such as C#, Java, XML, Perl, Ruby, Python, PHP, SQL, Visual Basic, ASP.NET and even Fortran (if I wanted to post my highly fascinating university projects).

The new ePassport


UK Biometric Passport Soon, we'll be going on holiday for the first time since my son was born.  This means that we had to apply for a passport for my 2 year-old, which was a fun process.  Anyway, the passport arrived this morning and much to my surprise it is a new biometric one, containing a little RFID Chip on the rear of the identification page.  This is the first time that I have seen a new biometric passport.  The notes that come along with it contain the following:-

"The chip stores a copy of your photo and the personal details printed on page 31.  There is no extra personal information in the machine-readable zone or one the chip.  The chip and antenna are sensitive electronic devices.  Please protect your passport and the chip from damage.  They must not be bent, torn or damaged in any way, or exposed to very high or very low temperatures, excess moisture, magnetic fields or microwaves."

I'll have to get one of these new passports soon.  I travel to the US a lot and it will make my life easier as I'll be able to carry on using the Visa Waiver program once they change the regulations concerning entry to the US to mandate use of biometric passports.  One thing is sure - I'll have to look after my new one a lot more, the current one is very bent and battered.

Apparently, if you pop in to your local passport office you can take a look at the data stored on the chip, which I might do when I get my own.  If nobody is making wallets for these new passports, then they should be.  There has to be a market in sturdy tin-foil lined wallets to keep the RFID chip from being broken and to stop the data being read until you want it to be...

Windows Live Writer

A screen shot of live writer in action. On Rob's recommendation, I've installed Windows Live Writer today.  Up until now I've written most of my blog posts in BlogJet - however so far I'm liking Windows Live Writer and may well stick to it.  The thing that I like the most is all the features I use from BlogJet are here (Moveable Type support, image upload, spell checking etc) - but Windows Live Writer also picks up the stylesheets from your blog template and applies them while you are editing - very nice.

The final (and possibly the deal-clincher for me) is the plug-in model and Live Writer SDK.  I love BlogJet, but there were a few things that I wanted it to do that it didn't.  By providing an SDK it means I'll hopefully be able to get Live Writer to do these things.  By providing a plug-in capability they also increase the chance that I won't have to bother :-)

While, there has been plenty of comment on this already, JJ Allaire is on the Live Writer team.  Back in the day, I was a huge fan of Homesite - mainly because it supported the way I created web pages.  You can certainly see the influence in Windows Live Writer - the look and feel is quite similar to Onfolio.

There are a couple of things that would make me like Live Writer more. 

  1. Fix the bug that seems to want to try and keep connections alive all the time.  I keep getting an error saying the connection has been dropped.
  2. Better HTML code editing support.  I know I'm old school - but I like to dip into my HTML occasionally to do something particular.  Though Live Writer has a "HTML Code" view - it is little more that embedded notepad.  It would be nice to have code highlighting and even nicer to have side-by-side editing (ala Dreamweaver).  Even if full side-by-side is not possible just code highlighting and putting you cursor into the correct place when you go into code view would be great.
  3. Auto track-back detection.  Be nice if it would figure out what posts I have linked to and automagically do a trackback.  Most of the time I can't be bothered when I have to figure out the trackback URL manually and paste it in.
  4. Squiggly red underline spell check.  (ala Word - spell check as I type)
  5. In the Image import - allow *.png along with *.gif and *.jpg. 
  6. Allow me to easily control where the images were imported to and what they are called.

But all in all, for an initial beta it is very impressive - especially considering it is free.

Understanding the Branches Tab


Showing branch history in a visual way is not something that the current version 1.0 of the Microsoft Team Foundation Server client is great at.  In fairness to the team, showing the branch history of files in an graphical way is pretty complicated and would involve many lines of code – especially when you build a version control system as flexible and powerful as Team Foundation Server. 

I’ve been around the business for a good few years now, and before I joined a software company specialising in Version Control tools I had only used branching twice*.  This suggests that branching is not something that everyone uses all the time  – and those that do don’t often need to see the branch history.  Therefore the VSTS team not spending an awful lot of time on a branch visualisation tool that will only get used less than 1%  of requests seems like a pragmatic approach to me (especially if the data is available – just not in the easiest way to understand)

I’ve been using Team Foundation Server in production project every working day for over a year now, today was the first day I needed the server to tell me the branch history for a file.  So, until we get branch visualisation in the tool or from the open source project Vertigo we are stuck with the Branches tab when you select a file in source control and select Properties…

Branches Tab

I sat and stared at the branches tab for about 10 minutes before I could work out what it was telling me.  The “F1” help is ok here in that it introduces the concepts of branching.  However, I know what branching is – I was trying to understand the dialog…

To help understand, I drew a quick diagram on a bit of paper.  For the purposes of the blog post I fired up Powerpoint 2007 Beta 2 to give you a prettier looking one:-

Branch Diagram

Basically.  The item in bold in the dialog is the item that you selected on for Properties.  This particular example shows that the file itself was a branch of version 2750 of myProject/testFile.txt and has been subsequently branched as myproject-branch3/testFile2–branch.txt.  Easily really.  This means that if you were putting a patch into the file, you might want to consider patching the file it was branched from – but also all the other files that have been derived from that branch.

As you can see, it would also be a lot easier to understand if you used a sensible naming structure when branching files.  However – the information you need is given to you, even if you have to concentrate for a while..

* If the statement that I only branched twice surprises you then here is an explanation.  While I understood the concepts – it was still always a little scary but more importantly when you start branching your source code the whole team has to have the discipline to make sure changes are merged back into the appropriate branches etc.  In a lot of internal IT projects, there is only the need for one main line of development and that line is best managed using continuous integration techniques to ensure it is always in a fit state.  To be fair, in a lot of those internal IT projects, you would probably get benefit from branching at times – but the pain of managing those branches would outweigh many of the benefits – especially in you work in a place where you are struggling to just make people check their code compiles before committing it to version control – never mind making sure they have applied that fix in a sensible way to the appropriate branches…

Now I work for an ISV, branching is vital.  In our main line of code we have been working on the next version (version 2.0) since we stopped developing version 1 back in March of this year.  Originally, work on NTLM authentication was slated to be a V2.0 feature but when it was completed earlier than we thought we wanted to make it available to our V1 customers but not include all the unfinished (and buggy) stuff in the main development line.  When we released Version 1, we branched the code (from $/Teamprise/trunk to $/Teamprise/releases/1.0).  This meant the new NTLM authentication logic could be merged into the V1.0 branch and a new release V1.1 be issued.  This is just one example where branching is essential – but you can use branching for many other reasons (such as allowing greater parallel development etc).

Like all tools at your disposal as a developer, you have to learn what it is good at and what the downsides are, then apply the technique appropriately.

I use VMWare a lot.  As we work on a cross-platform client to Team Foundation Server, I not only need to test our client on many operating systems, I also run Team Foundation Server in VMWare to talk to test our client against.  Teamprise Explorer and the Eclipse plug-in use SWT for the UI Layer.  This means that not only is performance great – the client takes on the native look and feel of the host operating system.  However, you do need to test dialogs on those operating systems to make sure they all look ok and size correctly.

Yesterday, I was so busy looking over the Specs of the new Mac Pro that I nearly missed the announcement from VMWare that their Mac-Intel version is on its way.  This means that we can get another one of those shiny Mac Book Pro’s and do a totally stand-alone demonstration of Teamprise talking to a (virtual) Team Foundation Server from Mac, Windows XP, Solaris and Linux all from one laptop.  It will also be a boon for testing as nearly a third of the Teamprise development team work on Macs (both Intel based and PowerPC based G5’s)

Parallels has offered similar functionality on the Mac-Intel platform for a while, however now that VMWare are going to be offering virtualization on the Mac-Intel platform it means that we can re-use our library of VMWare formated virtual PC’s – which will save a lot of setup time.  VMWare are one of those companies that don’t announce things publicly until they are well down the line and pretty solid, so I am hopeful that the beta will be available soon.  If you are interested, you can pre-register for the beta here.  Interestingly (and probably not that surprisingly) Microsoft have announced that they are shelving Virtual PC for the Mac and won’t be unleashing Mac-Intel support on to the public.

Teamprise 2.0 Preview Program

I know it only seems like a few moments have past since we released version 1.1 onto the unsuspecting public, but today we opened the doors a little on Version 2.0 as we start our 2.0 Preview Program.  The word “preview” is deliberately chosen – this is to allow you to take a peek at the current state of development on our 2.0 branch, take some of the many new features out for a bit of a drive and kick the tires around.  If you think it’ll be something you’d like to use when it’s finished then let us know – equally please let us know what you really don’t like, what you would really want or what just blatantly doesn’t work in your environment.  There are bugs in this release, so I wouldn’t recommend you use this in production – our current V1.1 release is the most stable one and you should use that if you plan to be using Teamprise in anger.  Additionally, if you purchase V1.1 right now then you get a free upgrade to V2.0 when it is released later in the year.

Version 1 was all about making a robust implementation of the version control functionality in Java and then integrating this with Eclipse.  Version 2 is about expanding on that robust version control mechanism to bring in many of the additional features offered by Team Foundation Server.  While we have not finished implementing all the features we plan to put into 2.0 yet, many of them are there.  Some major and some subtle.  Now that Version 2.0 is available for preview customers I just wanted to highlight some of my favourite additions.

Team Explorer

The all new Team Explorer inside Eclipse.

We now have a “Team Explorer” view.  Looks awfully like the Visual Studio one I’m sure you can see.  You can now access your work items, Sharepoint document libraries and reports from Teamprise.  What’s that you say, “Work Items”?

Work Item Support

Edit TFS Work Items inside Eclipse

Yup.  Full work item editing support, from the comfort of a rich client interface on a non-windows OS or from Eclipse on Windows if you fancy.  Other than Java (and Eclipse if you are using our IDE plug-in), nothing else is needed, just install our client onto your machine and point it at your Team Foundation Server and you are away. 

The depth of functionality here is huge – basically because we are parsing the same work item definitions that you access from Visual Studio.  All customised work items should also work (if they work in Visual Studio Team System).  If yours don’t then let us know.  If you want to email me a copy of your process template I’ll add it to one of our test servers and we’ll test against it during internal development – I am keen on getting as many examples of real life work item types as possible to make sure we have everything done right.

The work item editing support rocks, I often have to double check if I am in Eclipse or Visual Studio.  Even the fonts used on Windows are the same – it’s crazily good (probably because I had very little to do with this feature).  One of the few differences is that, because we use the latest version of SWT in Teamprise Explorer, our tabs are displayed with the proper native look and feel (i.e. a gradient fill if you have Windows XP or the Royale theme installed) – try doing that in .NET :-)  However, there are a couple of other little extras you get that I want to show off.

Work Item Searching

Right click on a the Work Items node of a Team Project and look what options are currently available…

Context menu for Work Items

Before you rush to click on the search icon, take a little time to admire it.  That little collection of 256 pixels was probably my only contribution to the whole Work Item project !  Anyway, don’t admire it for too long or you won’t get to the next Dialog…


This can only be described as a power search feature.  You want to find a bug, but the only thing you can remember about it was that it had something to do with “cheese” – no problem.  There are many more useful features available here to help narrow down your search.

Enough of work items.  Let’s talk about some of the stuff I did have a little to do with. 

Teamprise Explorer 2.0

Teamprise Explorer on Windows

We have revised the look and feel of the stand-alone TFS client, Teamprise Explorer, to bring in the Team Explorer view and work item support.  Ok, it looks nice on my Royale themed copy of Windows XP – but what about that shiny MacBook Pro you just sold your house to buy?

Teamprise Explorer on Mac

Probably worth pointing out here that since version 1.1 we have been a Universal Binary on the Mac Platform (i.e. we run on both the Intel and PowerPC based models).  Obviously, Teamprise Explorer also runs from Linux, Solaris etc.

Shelving Support

Shelving Support in Eclipse

It’s currently a little hidden away, but there are some new menu options on the Pending Changes view so that you can Shelve and Un-shelve your pending changes.  We have a couple of performance problems that show up particularly when you do a branch operation over a large set of files so current branch, merge and label are not enabled in this preview release.  I’m working on that right now so that we can include those remaining source control operations before we ship V2.0 later this year.

Get Latest on Checkout

OK, it has to been one of the most requested features we get – especially with users who have come from Source Safe.  They just expect a check-out to bring down the latest version – but this is not how TFS works.  If you are one of those people that get really annoyed by this, then we now have an option that is disabled by default but you can go switch it on if you want (Preferences…, Teamprise, Source Control).

Checkout != Get Latest - unless you switch on this option.

Additional Command Line Client Capabilities

A little hard to show in a screen-shot, but we have made some major improvements to the command line client.  To begin with, you only need to download one version of the command line client and it will run on your Java enabled system (including FreeBSD if that is your fancy).  Not only do we have the good old “tf” style commands, we introduced a new command “wit”.  This allows you to do work item operations from the command line including viewing queries, view work items and editing fields on a work item.  While this is handy if you are stuck on a Solaris box with only a text prompt to talk to – it will also come in handy in a ton of automation and scripting based scenarios that we can think of.

That is a quick rundown of some of the stuff I am most excited about in this preview release.  There are a ton of new features, performance improvements and bug fixes for some bizarre edges cases that I hope you never happen to come across.  Over the next few weeks we’ll be doing more of the same, but I wanted to show you some of the cool stuff we’ve been working on.  Please drop by the forums and let us know what you think.



Poster child of the Web 2.0 movement and all round general legends Meebo have just launched a new service called MeeboMe that allows you to host a flash based chat window on your website and allow people to send you IM messages.  It is in Alpha stages at the moment so may well cause problems.  Anyway – if you want to drop me an IM message then feel free to click here for a chat window.  I’ll not have this on my main page quite yet because a)  I’ll probably get tons of spam and b) It’s alpha so will probably break in loads of nasty places.  Anyway – worth a try!


Creative Commons License
This blog is licensed under a Creative Commons License.