Martin Hinshelwood's Blog

A Scottish dyslexic software developer: Team System MVP, .NET architect, developer, evangelist, technology enthusiast and multi-dimensional free thinker


News

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.


Subscribe

Personal

Get Microsoft Silverlight

Accreditation

Stats

My Stats

  • Posts - 313
  • Comments - 367
  • Trackbacks - 67

Twitter












Tag Cloud


Recent Comments


Recent Posts


Article Categories


Archives


Post Categories


Image Galleries


Blogs I read


Blogs of Friends


Blogs on VSTS


Multi-Dimentional Free Thinking Bloggers


Personal


Projects


October 2008 Entries

Mozy Backup providing extra space this month


Until the 30th of November 2008 Mozy are increasing the amount of space you get for referring a friend from 256mb to 512mb!

This is excellent and everyone should have some sort of backup :) as long as you click my referral link and use Mozy

http://mozy.com/?ref=8R96AG

Spread the Word

 

Really, Mozy is a good backup solution and I have been using it for my family and me for a good wee while. In fact, with 2gb for free, if anyone asks me to setup their computer (“No I will not fix yours!”) then I always add it as it makes it way easier to reload from a crash…

Technorati Tags: ,

posted @ Friday, October 31, 2008 8:35 AM | Feedback (1) |


Unlikely bloggers…


I always like to see people for whom it is traditionally unlikely to blog to start contributing to that big knowledgebase in the either that is the blogosphere. I would like to call attention to who started blogging today and call out to all other helpdesk Hero’s to join the fray…

Technorati Tags: ,

posted @ Wednesday, October 29, 2008 4:08 PM | Feedback (0) |


Visual Studio Team System 2008 Database Edition GDR RC (release candidate)


Gert Drapers has just the long awaited RC for the Data Dude GDR. This is the first version that you can seriously consider using as, unlike the previous CTP’s, there will be an upgrade path to the RTM.

You can download the Release Candidate from the following location:

Documentation:
http://download.microsoft.com/download/0/a/e/0ae1153a-8798-474a-93e6-d19299f37c8b/Documentation.zip
Contains:
* Visual Studio Team System 2008 Database Edition GDR User Manual
* Visual Studio Team System 2008 Database Edition GDR API Reference

posted @ Tuesday, October 28, 2008 1:58 PM | Feedback (1) |


Infragistics WPF


 

I am currently getting to grips with the Infragistics WPF controls that they call NetAdvantage for WPF. So far I have found them easy to use, but the documentation of examples is very lax. Do not mistake me, these components are fantastic and do way more work for me than I would care to do myself, but if you Google a particular piece of their API invariable you will get pure documentation and no samples. If you are lucky someone has asked a specific question about it and you can skim their answers, but the likely hood of finding an answer to your question is negligible in my experience.

I still love the components, it just makes it a little more difficult to develop with them…

An example would maybe get us all on the same page:

I am using their Ribbon components in one of my applications and wanted to dynamically generate (using a binding) the menu options.

   1: <igRibbon:XamRibbon.ApplicationMenu>
   2:  
   3:             <igRibbon:ApplicationMenu>
   4:                 <igRibbon:MenuTool x:Name="uxTeamServerMenuTool" Caption="Team Server" ItemsSource="{Binding AvailableServers}" ItemTemplate="{DynamicResource tAvailableServers}" ButtonType="DropDown" LargeImage="\Resources\Images\TeamServerSelectIcon.png">
   5:                 </igRibbon:MenuTool>
   6:                 <igRibbon:MenuTool x:Name="uxTeamProjectMenuTool" Caption="Team Project" ItemsSource="{Binding AvailableProjects}"  ButtonType="DropDown" SmallImage="\Resources\Images\TeamProjectSelectIcon.png">
   7:                 </igRibbon:MenuTool>
   8:                 <igRibbon:MenuTool x:Name="uxHeatConnectionMenuTool" Caption="Heat Server" ButtonType="DropDown">
   9:                 </igRibbon:MenuTool>
  10:                 <igRibbon:MenuTool x:Name="uxHeatApplicationMenuTool" Caption="Heat App" ButtonType="DropDown" >
  11:                 </igRibbon:MenuTool>
  12:                 <!-- Place a button in the footer of the ApplicationMenu that allows the user to quit the application. -->
  13:                 <igRibbon:ApplicationMenu.FooterToolbar>
  14:                     <igRibbon:ApplicationMenuFooterToolbar>
  15:                         <igRibbon:ButtonTool Caption="Settings" Command="local:Commands.ClearSettingsCommand" />
  16:                         <igRibbon:ButtonTool Caption="Exit" />
  17:                     </igRibbon:ApplicationMenuFooterToolbar>
  18:                 </igRibbon:ApplicationMenu.FooterToolbar>
  19:             </igRibbon:ApplicationMenu>
  20:         </igRibbon:XamRibbon.ApplicationMenu>

As you can see in line 4 there is a binding that does indeed populate the list. But I am having trouble getting the template to take. I want the Items listed as a set of radio buttons (kinda) and so I added a Template:

   1: <DataTemplate x:Key="tAvailableServers" DataType="{x:Type tfs:TeamFoundationServer}">
   2:            <igRibbon:RadioButtonTool
   3:                            Caption="{Binding Name}"
   4:                            Tag="{Binding}"
   5:                            LargeImage="\Resources\Images\TeamServerSelectIcon.png"
   6:                            igRibbon:MenuToolBase.MenuItemDescription="{Binding Url.ToString}"/>
   7:        </DataTemplate>

This should have displayed what I wanted, but it seams to be ignored.

To allow this to work, all I needed to do was remove the x:Key from the template. But why can't I specify a template by name. What if I wanted to have two templates and choose which one was displayed…

posted @ Tuesday, October 28, 2008 1:40 PM | Feedback (2) |


Wakoopa


I am having a little bit of fun with this application and I though I would share. it logs all of the applications that you are using and gives you stats on it. How about joining the Microsoft MVP (MVP’s only please) team, or creating your own…

Here is my usage, which will be exactly the same as the MVP one at the moment as I am the only one there :(

Software tracking Software tracking Software tracking

It is certainly not the fastest site in the world, but my work internet connection is notoriously poor…

If you have an application, you can get stats for it… for example here is Visual Studio…

Software tracking

And my very own paltry TFS Sticky Buddy

Software tracking

Technorati Tags: ,

posted @ Monday, October 27, 2008 4:15 PM | Feedback (0) |


Branch Compare…A Life saver


In my recent troubles with branching and merging I found (it was not lost, I just did not know about it) a fantastic tool, that has actually been part of the power tools for about two years, for comparing two branches. Cool…

posted @ Friday, October 24, 2008 11:59 AM | Feedback (0) |


MSBuild and Business Intelligence Packages, Ahhhhhh!


I have been trying to get a handle on doing an automated build of our Business Intelligence solutions and I am always running into problems around the (IMO badly build) BI Packages that are installed via SQL. They do not support Test, they do not support build. There has been no thought given to how people working on them are going to build test and support them and even the project files are not written in the same schema as the rest of the Visual Studio bits. I would have thought, with Team Foundation Server in its third year and second version that this would have been rectified in SQL 2008, but no such luck.

Today there are enormous BI solutions out there. Some built using these tools, and everyone needs to come up with their own solutions to this problem.

Here are some of the problems:

  • How do you automate the deployment of SSIS packages?
  • How do you Unit test, load test and analyse the performance of SSIS packages?
  • How do you automate those tests of SSIS packages?
  • How do you automate the deployment of SSAS cubes?
  • How do you Unit test, load test and analyse the performance of SSAS cubes?
  • How do you automate those tests of SSAS cubes?
  • How do you automate the deployment of script packages?
  • How do you Unit test, load test and analyse the performance of script packages?
  • How do you automate those tests of script packages?

There are some answers. The visual studio team has taken on board the database piece with Visual Studio Team Edition for Databases. But the rest are languishing in perdition and there are no elegant solutions.

I am bookmarking my investigation on delicious, but it will be a long slog…

posted @ Friday, October 24, 2008 9:00 AM | Feedback (0) |


Hosted TFS, and cheap….from Phase2


image

I received a wee email from Kevin Doherty the CEO at Phase2. These guys host lots of useful things and the had obviously decided to host TFS as part of their offering.

This is a really great site, I regularly send posts to our staff!  You may want to check our site [www.phase2.com] for our version of hosted TFS.  We also integrate directly with our MS Project hosted application.  We have our own internal team of developers and offer TFS at a mere fraction of what TFS Now sells it for.  And no contracts.  We would be honoured if you would either review our service or mention us.

Kevin Doherty

I agreed to review their service, but I would like to point out that I am getting nothing in return :( I am doing this just for fun.

The guys over at Phase 2 provided me a TFS server and I was surprised at both how quickly they came up with it and how fast it was. The worry was that they would be providing a cut down version, like Codeplex, but it is fully featured and has Reporting Services, Sharepoint and Analytical services. I tested Excel reporting (now Microsoft's recommended method, RS is dead, yippee) and customizing Work items. I also had a few question that the team over at Phase2 answered:

Q. You quote 10 users as $1,299.00! Is that per month? (Stupid question I know, but it was not specified on the site.)


A. Yes, this is a per month charge that includes training, support, and backup.


Q. What is the backup offering with your service?


A. Standard offering: We back up all client data every night [incremental] and full backups once a week.  We store 3 weeks’ worth of full backups. This schedule can be adjusted but additional costs may be involved.


Q. Can you provide a multi server package, for example if I had 1000 developers and needed to run SSRS, SSAS, Sharepoint and TFS on multiple servers?


A. Yes, we will provide dedicated services and offer custom bundles.   A standard single-server deployment for TFS is good for about 100 users, beyond which we'd need to move to multiple front-end servers with at least one backend data-tier server.  We are scaling up from blade arrays to very powerful IBM x-series 4- and 6-way servers (all running virtuals, of course) over the next few weeks so we don't yet know what our upper limit is going to be per server.  For a custom bundle such as this, economies of scale would certainly apply.


Q. What about TFWA, and WIWA?


A. We do support TFWA, but the client must have an account in TFS.  WIWA is something that we can install upon request, but do not by default (For simplicity).  No extra charges for this additional functionality.


Q. What is the disaster recovery turnaround?


A. 24 hours maximum from time of notification.   Keep in mind that this depends on what the "disaster" is and when it gets noticed.  If the disaster is that someone within a client's organization deleted all or part of a project but no one noticed for 8 weeks,  we could recover the environment in short order but not necessarily the data (see backup comments above.)


Q. Can I bundle TFS with a full environment? TFS + MOSS + Exchange + Communicator?


A. Absolutely, and again, for a custom bundle such as this, economies of scale would apply.

So, a fantastic offering. It should be pointed out that I was using a http connection to the server and not https, but I am sure that it will be available. The costs are very reasonable and a lot better than TFS Now, which I was going to compare to, but alas their site is down at the time of writing.

posted @ Thursday, October 23, 2008 10:16 AM | Feedback (2) |


How-To: Display your Outlook calendar on you’re My Site


I thought I should explain how to enable the "My Calendar" web part on you're my Site (homepage). Here is my "MySite", as you can see I have a horrible picture, but if you check out the red rectangle you will see the "My Calendar" control has already been added to your site.

 image

To configure this and any other web parts you need to hit the little down arrow below and then select "Modify Shared Web Part" to enter edit mode for that web part.

image

Your page will now be in edit mode denoted by the "Exit Edit Mode" button that appears under the "Site Actions" navigation and the addition of the "Add a web part" and Zone boxes that appears. To configure the "My Calendar" web part you will see the panel on the right has the same heading as the web part that we just opted to modify. You should now see the "Mail Configuration" section with a blank box under "Mail server address" and your email filled out under "Mailbox". To enable the calendar you need to put in the address of the Outlook Web Access server. This is "http://[servername]/exchange".

image image

Once you have filled out the "Mail server address" you need to click "Apply" at the bottom of the page to make the change.

 image

Your calendar items will now be displayed on the page.

You can add other Outlook Web Access features to your page including "My Contacts" or "My Tasks" and the much more useful "My Email" which can all be configured in the same way.

 

posted @ Wednesday, October 22, 2008 3:33 PM | Feedback (1) |


How-To: Allow other users to interact with workflow on your MySite


If you want to be able to use workflow on you're my site that will allow you to assign tasks to your colleagues, then you need to take a couple of thing into consideration. The most important is to give any users assigned tasks access to the tasks list that you are using for your workflow.

You will need to think hard about wither the workflow you are considering would be better as part of your team's site, or as part of another site in the Sharepoint farm as adding permission to other people on your MySite is a security risk. But the benefit may well be worth the risk.

What we will be doing is adding any users you will be assigning workflow to the "Contributors" group so they will be able to delete tasks.

When you setup your workflow you will be asked what task list you want to use for it. If you selected "New Task List" the system will create a task list of the name "[Workflow Name] Tasks".

 image

You will need to give users permission to this Task list, but you could have multiple task lists to allow more refined permission for different workflows.

 image

Finding the task list name

First you need to find the Task list. If you have already setup the workflow, the changes are that you have used the default, which is "Tasks". You can check by going to the list or document library that has the workflow and click the "Settings" tab and then the "Manage" option.

 image

You will then be presented with all of the options for your list or library. The option you are looking for is the "Workflow Settings" option under "Permissions and Management".

 image

This will take you to a list of all of the workflows that are currently setup (or the create workflow page if there are none) where you need to select the workflow that you want.

 image

This will take you to the change a workflow page and you will be able to see the name of the task list, in this case "Example Workflow Tasks".

 image

Now we have that information we need to return to the top level of your MySite to set the permissions on your Task List.

 image

Setting the permissions on a Task list

Now we know the name of the task list we can set the permission on the correct list. Click on the "View All Site Content" button to see a list of all the bits and bobs that have already been created.

 image

Under the "Lists" Heading you will see the "Example Workflow Tasks" list which is not displayed by default on the left navigation of your MySite homepage. If you click the name you will be taken directly to the list so we can edit the permissions.

 image

As before we will need to get to the lists options, so click the "List Settings".

 image

And again under "Permissions and Management" select "Permissions for this list".

 image

By default all lists created use the same permissions as the parent site. We need to override this so we can set specific permission for our workflow tasks. To enable specific permissions we click the "Edit Permissions" button which makes a copy of the existing permissions and detached the list's permission from your MySite. You will get a warning box to make you aware of this and that any changes to the top level site will no longer affect the permissions of this list.

  image

You now have the option to delete, edit and add users to this list only as you would on any site. Add the users who you will be assigning workflow tasks to and delete any others that you do not want access.

 image

Make sure that you have the correct users listed in the "Users/Groups" box and that you only have the "Contribute" permission enabled. Then decide wither to send people an email to let them know that they now have access.

image

 

 

Easy J

 

posted @ Wednesday, October 22, 2008 3:25 PM | Feedback (1) |


Branch madness!


imageI know that I have not been posting in a while, and I hope to remedy that. I have been working on getting our internal team up to speed on using TFS as a full ALM tool and not just for source control. I am getting a lot of resistance on creating work items ( as this is a PM’s job !) but we are making progress.

I was off for the last couple of days and came back to a WTF moment. I noticed, upon opening my source control, that there were two “Main” folders. “Main” and “MainPreR1”.

WTF?

Upon enquiring it turns out that a change had been made to “R1” (legitimate) to fix a Bug (loose definition, but a definition none the less). Then the “Main” folder had been renamed and a new “Main” folder branched from “R1” and 2 new Features branched from that, leaving all the other existing branches to fend for themselves.

WTFx2!

If you are not sure what I mean, then let me explain. In order to merge from “F1207” into “Main” you would need to first merge it with “MainPreR1”, then merge it with “R1”, then merge it into “Main”. And thus you have just contaminated “R1” with something that is not in “R1” but should be in “R2”. On top of this the other orphaned features can’t take advantage of new features in “R2” without contaminating “R1”… messy.

As you can see from the screenshot on the right it is now under control, but it took the perpetrator the better part of the morning to get it sorted, and the are still putting the finishing touches to it (It is a good thing the do not let us have guns here in the UK). If you are interested, here are the steps that were performed to sort out this problem.

  1. Zip all content in  “Fxx1” and “Fxx2”. To safeguard the dev work.
  2. Delete branch “Fxx1” and “Fxx2” from source control
  3. Check in everything…
  4. Delete “Main” from source control. coz it is the crap one
  5. Check in everything
  6. Rename “MainPreR1” to “Main”. Which is the way it should have been.
  7. Check In Everything… Now we are back where we started.
  8. Merge “R1” into “Main”. This is the action that should have occurred in the first place.
  9. Check in everything…
  10. Create Branches for “Fxx1” and “Fxx1”
  11. Check in everything…
  12. Check out “Fxx1” and “Fxx1”.
  13. Copy archived “Fxx1” and “Fxx2” over the top of new branch.
  14. Check in everything…

A long way for a short cut :)

Well, at least the lesson is learned…

Technorati Tags: ,,

posted @ Wednesday, October 22, 2008 2:44 PM | Feedback (0) |


TFS Usage Statistics


Stats on out TFS Instance. Not much but growing.

Users
Recent users: 18
Users with assigned work items: 27
Version control users: 36

Work Items
Work Items: 636
Areas & Iterations: 179
Work item versions: 5,642
Attached files: 46
Queries: 150

Version control
Files: 96,904
Folders: 11,442
Total compressed file size: 1,008 MB
Checkins: 15,491
Shelvesets: 10
Merge history: 194,903
Pending changes: 128
Workspaces: 75
Local copies: 506,097

Builds & Tests
Builds: 5
Test runs: 0
Test results: 0

Commands (last 7 days)
Work Item queries: 319
Work Item updates: 187
Work Item opens: 709
Gets: 264
Downloads: 119,871
Checkins: 98
Uploads: 454
Shelves: unknown

Technorati Tags: ,

posted @ Wednesday, October 22, 2008 2:19 PM | Feedback (3) |


Sync extension for Lists/Collections or whatever


I recently found the need to Sync two lists. I have one list that is used for display, and I want to dynamically sync that list with a new one by applying a delta.

I thought that this would be difficult, but I was surprised at its ease.

   1:  
   2: Module SyncExtensions
   3:  
   4:     <System.Runtime.CompilerServices.Extension()> _
   5:     Public Sub Sync(Of TItem)(ByVal targetItems As ICollection(Of TItem), ByVal sourceItems As IEnumerable(Of TItem))
   6:         Dim o As Object = DirectCast(targetItems, ICollection).SyncRoot
   7:         If Monitor.TryEnter(o, TimeSpan.FromSeconds(10)) Then
   8:             ' Find items in source that are not in target
   9:             Dim itemsToAdd As New Collection(Of TItem)
  10:             For Each Item In sourceItems
  11:                 If Not targetItems.Contains(Item) Then
  12:                     itemsToAdd.Add(Item)
  13:                 End If
  14:             Next
  15:             ' Apply all adds
  16:             For Each Item In itemsToAdd
  17:                 targetItems.Add(Item)
  18:             Next
  19:             ' Find tags in target that should not be in source 
  20:             Dim itemsToRemove As New Collection(Of TItem)
  21:             For Each Item In targetItems
  22:                 If Not sourceItems.Contains(Item) Then
  23:                     itemsToRemove.Add(Item)
  24:                 End If
  25:             Next
  26:             ' Apply all removes
  27:             For Each Item In itemsToRemove
  28:                 targetItems.Remove(Item)
  29:             Next
  30:             ' Dispose Timer
  31:             Monitor.Exit(o)
  32:         End If
  33:     End Sub
  34:  
  35: End Module
You need to remember to lock the object while you sync. This is to allow your threading to take place without incident. The nitty gritty is just a case of comparing the two lists and building a list of changes to make and then removing them :)

 

posted @ Monday, October 13, 2008 2:11 PM | Feedback (0) |


Team System MVP


Well, I have just joined the auspicious ranks of Team System MVP’s, now numbering 73 worldwide. You can see my profile on the MVP site. My name will now appear along side Mitch Denny and Tiago Pascoal. Wow… I have a lot to aspire to…

I should really thank Tiago Pascoal as I have a sneaky suspicion that he was the one that nominated me :) Thanks Tiago…

This Award needs to be renewed yearly, so there is much work to do…

posted @ Wednesday, October 01, 2008 3:55 PM | Feedback (6) |


Development and Database combined


Microsoft has just announced that the two products, Visual Studio Team Edition for Database Developers and Visual Studio Team Edition for Developers as been combined.

From today if you Own either version in 2005 or 2008 flavours you will also have access to the other.

Good stuff :)

posted @ Wednesday, October 01, 2008 1:49 PM | Feedback (0) |