If you are a developer who customises or extends Visual Studio Team System then this LinkedIn group is for you...
VSTS Developer
NOTE: All requests to join these groups will be checked before they will be approved. Evidence of your participation in VSTS development.
If you are a developer on Codeplex then there are now two Codeplex LinkedIn groups for you to join.
Codeplex Developer
All members must have an account with CodePlex and be a developer on at least one project. Please provide your account name after requesting to join...
Codeplex Coordinator
All members must be a Coordinator of at least one Codeplex project.
NOTE: All requests to join these groups will be checked before they will be approved. Please provide a link to your Codeplex profile.
Spent the day yesterday at the MSDN Roadshow in Glasgow. It was a very good day that provided me a deeper insight into the ADO.NET Entity Framework, Data Services and Silverlight 2 (Which I like even though I did not like Silverlight 1... no JavaScript
).
The last session on Team Suit was a little marred by Neil Kidd being rather ill...get well soon Neil...but I followed it anyway, but I do think that other attendees became lost fairly quickly...we all have bad days...
If you have not been lucky enough, or bothered to attend then you can get all the resources from http://www.msdnroadshow.co.uk/.
Oh, and I managed to blag myself a new keyboard which is pretty nifty, I would never have forked out for on my own, and a F5 MSDN T-shirt, which is a might tight...
What a fantastic day... Thanks to Colin Mackay for the fantastic job he did organising this event and I hope that there will be more events like this in Glasgow in the future...
I can only comment on the speakers that I attended, but they were all very impressive...
Guy Smith-Ferrier did an excellent presentation on ADO.NET Data Services which I now understand and see the benefits and applications of, thanks Guy. And Ben Lamb did an interesting session on "Anti-Patterns" that left me thinking a lot about code I had written in the past, you can find his presentation on his blog...
After lunch when you normally start to fall asleep we got a session on Continuous integration from Richard Fennell that sparked my interest (more on team system Richard). Then came the speaker that probably had the most impact for me. The talk was entitled "Red, Green, Refactor!" and was all about "Test Driven Development" from a guy that seams to know much about the subject, Ben Hall.
If I took anything away from this day, it was that although I know a lot, I know very little....
If you are having an issue with the assembly version in your compiled assembly not updating after a rebuild then you are not alone. The is a bug in the Visual Basic compiler that causes this problem and it requires a manual fix:
http://kbalertz.com/952628/Assembly-Version-change-Visual-Basic-Workflow-projects.aspx
Not hard, but annoying...
To check the problem, double click on the assembly in your bin folder and open out the version tag.
You can see from the image below what I am getting at. This causes no end of problems with signed assemblies. The KBAlertz article above implies that this only affects Workflow assemblies. But I have has t6his problem in other types of Visual Basic project.
This is not a big problem unless you are creating custom assemblies for SharePoint and have a convoluted deployment process before you can test, and can't figure out why you changes are not going through...
I have been using the Useful Sharepoint Designer Custom Workflow Activities project on CodePlex to augment the capabilities of SharePoint Designer to add such features as "Start another workflow" which is very useful for compartmentalising your workflow so as to not make it too complicated.

Well I found a wee problem. The "Lookup user info" activity only looks up information from the site and not from the users MOSS profile. So I started another CodePlex project for activities I will be building and I am creating once called "Lookup user profile" on my shiny new MOSS Designer Workflow Activities project.
This one Activity will alleviate my immediate need, but I can see many more in the future...
Well the faeces hit the fan at work today...let me explain...
We have a completely unmanaged Sharepoint Portal server at work. It was installed in early 2004 and has been running in self service mode ever since. Not all of the company is using it, but those that are, are using it heavily. Particularly areas that service customers and one customer specifically use it so completely that that area of the business would find it hard to function if it was not available.
So early this year I started a project to migrate / rewrite for Microsoft Office Sharepoint Server (MOSS) and we now have a proof of concept site online that demos the features and architecture of a finished portal. This POC version was scheduled for go live in Q4...
This had been ticking over for a while with a number of project requests getting in the way, the TFS Sticky Buddy for one, along with many others. As the only .NET developer in EMEA it can get a little hectic.
Recently I had a project to make a copy of one of the Sharepoint 2003 portals and I ran into a number of problems... now, I am not a Sharepoint 2003 guru, having had most of my exposure to it with Team Foundation Server deployments, but I followed all of the documented approaches for copying a site, to no avail. For each attempt, of which there were many, and for each approach, again there were many, I ran into problem after problem. Either the export commands failed, or the import command failed, and the resultant restore looked nothing like the original having been mangled during the process.
The result of my efforts was a custom APS.NET application that replicated the functionality provided by Sharepoint (it is worth noting that the site did not use much of SharePoint to do its job). Problem solved...
But not really... I still had a soon to be mangled Sharepoint 2003 portal server with over a thousand users on it.
Then the bomb shell landed... I had been getting some reports of problems for the users of a site that is used to handle a customers contract, these users were running into real performance issues and functionality limitations. They were aware of the proof of concept MOSS deployment and wanted a look, so when some of the guys were in the office I stupidly, as I always do, started showing off MOSS features and functionality that puts Sharepoint Portal server to shame. How stupid of me... in my zeal to get MOSS deployed to the business I inadvertently stepped on a land mine. They went home, spoke to a few people and lo and behold, my deadline has been moved up from Q4 to now.... or at leas as soon as possible, and specifically for the aforementioned site.
The Plan
Apart from quitting, having a nervous breakdown and ultimately committing Seppuku I had to come up with a way of fulfilling this insane idea of a deployment schedule.
To do this I plan to use the Business Data Catalog to connect to customer data, and create a portal site that dynamically build sites using an as yet non existent site template for a specified customer. This way there is system data available for creating excel services reports and stats along with document library and InfoPath forms. The site should look exactly like the My Sites, but for a customer. It can then be branched out for other entitles like products (we build them and then rent and service them) and contracts.
In the immortal words of the Windows 2003 Active Directory Installer:
This may take some time, or considerably longer...
I am currently taking votes for which features will make it into the next version of the TFS Sticky Buddy (v1.1 CTP 1), which will move towards v2.0. The current list of features is slim, but specific.
Features (11 Votes) Click an item to submit your vote...
If you want to suggest another feature, please be my guest but make sure you are not making a duplicate :)
If you are interested TFS Sticky Buddy v1.0 has been downloaded 256 times since Apr 21 2008... No I am not making it up....
I have been having a lot of Kerberos double hop problems on the network at work, and although I have not yet managed to fix them... I did find these useful pages:
What Is Kerberos Authentication? - Good high level overview...
Troubleshooting Kerberos Delegation - which I think I may find the most useful...
I will keep you updated on my progress...
This is the first full release of the TFS Sticky Buddy application written in VB.NET 9 and WPF with Visual Studio 2008 Team Suit.
The application provides a graphical view of TFS Work Items and allow user to navigate round either the Area (Codeplex Component) or Iteration (Codeplex Release) tree. It displays all the work items loaded (by selecting a Team Query) on the node, colour coded by Work Item State.
You can edit and add templates for displaying Work Items loaded for different Life Cycle templates in Team Foundation Server by editing the XAML in the Life Cycle resource directory (#InstallLocation#\RDdotNet\TFS Sticky Buddy\Resources\LifeCycle\[Name]\[Name]Resources.xaml) and editing the resource file. Though I would suggest creating a new file for each Life Cycle you want to display. Out of the box I have supported a Default option that works for most TFS Process Templates, and a Codeplex option for supporting your Codeplex projects.
Usage
When the TFS Sticky Buddy application starts you will be prompted to select a team foundation server from the list (if you do not see any servers then you must set them up using Team Explorer) which will populate the Projects and other menus. The navigation diagram will by default render the first project in your selected TFS server.
Use the "Queries" menu to select which work items that you want loaded into your view.
System Requirements
.NET Framework 3.5
Visual Studio 2008 Team Explorer (not forced)
Access to a Team Foundation Server (not provided)
If you already have CTP1 or CTP2 you should update to the full release now...
As you have probably noticed I have been soldiering on with the TFS Sticky Buddy project, and I though I would share.

With the next release you will be able to connect to any external (not on same domain) TFS server including CodePlex servers and load up your projects. The TFS Sticky Buddy guest stars above.
One of the major improvements is the ability to add skins for different TFS life Cycles. I have a "Default" setting and you can change it to the Codeplex Template. Over time I will be adding others, but I only have access to CodePlex, and my local production TFS server, so if you want a custom one, you may need to build it yourself...
If you want a go of these features you will need to download the source and build the main folder code... but there will be a release soon..
All to soon and it is that time again...I have been developing, hell bent on getting a working sticky buddy online, and here it is...
Download TFS Stick Buddy v0.4.0 CTP2 Now...

With this version you can select what work items you want to display by choosing a Query from the list. You can add queries to your list through Visual Studio and the TFS Web Access power tool to allow customisation of the display for your needs and project template types. If you do not have a work item called "Requirement" and instead use one called "Customer Request" then you just need to make a query that pulls this information back.

When you open TFS Sticky Buddy you will be asked to select a Team Server to connect to. If you have a proxy, like I do in the office, you will not be able to connect to an external TFS server through it as your credentials will be wrong... maybe I need a work item for that 
Once you have selected your team server you will need to wait for it to authenticate, but I added a little "loading" window to keep you happy as it may take a little while to authenticate depending on the speed on your network and the load on your TFS server.
When the load it complete you will have access to the menu options, but it will have automatically loaded the first Team Project on your server and the first work item query on your project (which tends to be "Active bugs").
If you have this many bugs, you may need to invest more in quality control...
The application will load all of your Areas and their hierarchy by default and display any work items in your selected query on that Area. You can see that it will display everything on the node and colour code it depending on the state of the work item:
- Proposed = Blue
- Active = Red
- Resolved = Amber
- Closed = Green
I plan to have other options, but I will need to make some changes to the skining files, but you get the picture...
I hope everyone "team servery" has a go, and don't be shy about reporting bugs and requesting features.
You can even use the discussion forums...
Download TFS Stick Buddy v0.4.0 CTP2 Now...
There is a Community Technology Preview release of the Team Foundation Server Sticky Buddy digital dashboard project that is built using Windows Presentation Foundation (WPF). I have used the source code from the Family.Show project to create functionality and a look that is appealing.
You can download it from the Codeplex site and you can raise bugs with the issue tracker...
Please remember that this is a CTP and is not fully functional. With this version you can see how your Areas and Iterations tree diagrammatically. I intend to display the work items within the body of the node and display a different view depending on the zoom level...
I have yet to skin the whole application so you will see some bitts that look exactly like the Family.Show application from Vertigo... yes I know.. I am a lazy developer...
I seam to be having a little problem. Now, this may be me being stupid, but I can't get an ObservableCollection to work if you pass it a generic type!
For example, consider the following code:
Public Class ItemBitCollection(Of TItem)
Inherits ObservableCollection(Of ItemBit(Of TItem))
End Class
Public Class ItemBit(Of TItem)
Private m_item As TItem
End Class
Now, if you create an instance of ItemBitCollection you will see an error on the IDE regardless of wither you use a custom object type or a String type to initialise it:
Why does this not work? What is ObservableCollection doing that maybe it should not? Time to get Reflector out...
After some looking at the source I am still none the wiser. Even if you dumb down your classes to the bare minimum you cant pass a generic type into an ObservableCollection.
This is a limitation if you ask me...
Annoying solution:
If you create a fixed class type:
Public Class ItemBitCollection(Of TItemBit)
Inherits ObservableCollection(Of TItemBit)
End Class
Public MustInherit Class ItemBit(Of TItem)
Private m_item As TItem
End Class
Public Class DefaultItemBit
Inherits ItemBit(Of String)
End Class
And then pass that class in it does work:
Dim o As New ItemBitCollection(Of DefaultItemBit)
Although this is a work around, it causes other problems in my code... Ahh well... worth a try...
Over the last week I have been looking at the source for the Family.Show application from Vertigo. I needed to look at methods of presentation of hierarchical information graphically using WPF and I saw this as a good representation of that sort of data. So I se about not only converting it to VB.NET but adding generics to the mix.
The first part of the application is the core objects that represent the data and allow interaction in a way that WPF can handle. This means using Observable Collections and implementing INotifyPropertyChanged to allow a higher level of interaction. I wanted to support any Source object type as well as my own custom types, so the type needed to be nested with a Wrapper that gives the illusion that it is a solid type, but in actual fact it is a soft wrapper that allows the system to interact with it without really understanding the type. The specific understanding of the type is done at a much higher level.
You will need to open this diagram in a new window to get the effect, but it is a completely generic representation of Parent, Child and Sibling relationships for any object regardless of wither you have access to the source or not.
This is not currently designed to be an editable object, but inheriting from the ItemWrapper class would allow this, but would require a modification to the framework to handle the inherited type. Maybe v2...
I was pleasantly surprised to see a lot of interest in the Sticky Buddy project. I was particularly exited when Siddharth Bhatia contacted me, but disappointed that he could not get the proof of concept versions to work.
Well, hopefully that is about to change with the addition of Eric Willeke to the development team. if you have been following the project you will see that he has been a avid tester from the beginning and I would like to welcome him fully on board for the next leg of the project...
Eric, I hope you are good a deciphering convoluted and complicated code that at times borders on the nasty!
I have found a small bug (as in, "Not working as expected!") in the new .NET 3.5 PrincipalContext classes. When you are running on an ASP.NET site in impersonation mode you cannot retrieve information from active directory without the following error:
System.Runtime.InteropServices.COMException (0x80072020): An operations error occurred. at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) at System.DirectoryServices.DirectoryEntry.Bind() at System.DirectoryServices.DirectoryEntry.get_AdsObject() at System.DirectoryServices.PropertyValueCollection.PopulateList() at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) at System.DirectoryServices.PropertyCollection.get_Item(String propertyName) at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue) at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue) at UI_Controls_SharepointControl.Page_Load(Object sender, EventArgs e)
You need to specify a fixed account to access AD using:
Dim ctx As New PrincipalContext(ContextType.Domain, "[domain]", "[accountName]", "[password]")
This is not so good! What if I wanted to use the current users credentials to update only fields that they are allowed to update in AD? If I use a static account that can access any users fields then this becomes a security risk.
Ahh well, I will live with it for now, but if anyone has another suggestion...