Tim Hibbard

Software Architect for EnGraph software


News





Add to Google



My Stats

  • Posts - 593
  • Comments - 353
  • Trackbacks - 507

Twitter












Tag Cloud


Recent Comments


Recent Posts


Article Categories


Archives


Post Categories


Image Galleries


EnGraph Blogs


Links


Other


Roll


January 2007 Entries

Unsubscribing from everybody


I originally started reading blogs to become more knowledgeable about technology.  I've learned a lot, but somewhere along the line I picked up way too many subscriptions.  Anytime somebody talked about something cool, I subscribed to them.  Anytime somebody linked to Where's Tim, I subscribed to them.  I find that my daily grind though FeedDemon brings me a lot of repeated posts and things that don't really interest me.  I skim through all the feeds and rarely pick up anything that is worth the read (mostly because I'm just skimming, not because of the lack of content). 

The final straw was reading Scoble complaining about people not linking to his video.  I then proceeded to read that the video was *kinda* paid for by Intel.  After slapping myself in the face for wasting 5 minutes of my time on a blogger that used to be really interesting, I decided it was time for a change.

So, from this point forward, I am unsubscribing from all my feeds except for GeeksWithBlogs and a few others (like Kyle, Joe Stagner, Dave Donaldson,  CodeBetterDave Starr, Mickey Gousset and Chrisoph Wille).  If anybody that I still read links to some great content, I'll probably subscribe to them.

On a completely unrelated note, I'm working on a little task tray application that ties into the Where's Tim webservice and pops up a balloon tip when I'm moving.  It's ClickOnce and can be downloaded here.

wherestimalert

Technorati tags:

posted @ Monday, January 29, 2007 3:28 PM | Feedback (2) | Filed Under [ Where's Tim ]


Programming with glowsticks


Something about listening to techno music helps me concentrate on programming.  I'm not sure if it's the consistent beat or the simple lyrics, but techno has always been a great companion for intense coding sessions.

Anyway, I re-found my favorite streaming techno station this morning, RadioSeven.  They have a WMP stream here and it's fantastic!

 

Technorati tags: ,

posted @ Friday, January 26, 2007 9:29 AM | Feedback (7) |


Carl is bored driving to Colorado


Carl is driving to Colorado and wants people to watch his progress with GPS and send him text messages.  Click here to see him on a Google Map and click the icon on the map once you get there to send him a text message.

 

Technorati tags: , ,

posted @ Thursday, January 25, 2007 1:58 PM | Feedback (2) | Filed Under [ GPS Mapping Where's Tim ]


Why legacy code is great


I was digging through some old VBA code today, and found this little guy:

On Error GoTo i_cant_belive_i_have_a_error_handler_for_my_error_handler

I actually remember when I wrote that.  It was when we were still working from Kyle's spare bedroom and I didn't even have a desk.  I was working on some old card table with my crappy Compaq laptop.

 

Technorati tags: , ,

posted @ Thursday, January 25, 2007 1:10 PM | Feedback (0) | Filed Under [ EnGraph ]


Rock Chalk!


Carl was nice enough to give me tickets to the Kansas basketball game against Colorado this Saturday.  I'll be the one wearing blue.

DSC00342

 

Technorati tags: , , ,

posted @ Thursday, January 25, 2007 10:36 AM | Feedback (1) | Filed Under [ Sports ]


Update to VPN Manager class


I blogged the other day about a class I wrote to help manage a VPN connection.  Since then, I've made a couple changes and updated the article to reflect the code changes.

-Created an overloaded, parameterless StartManaging method to make it easier to start in a new thread
-Listened to the PowerModeChanged event and paused the timer if the computer is coming back from standby
-Cleaned up a few issues
-Added code comments

The class code is here.  If anybody wants to see the form code that is consuming this class, let me know.

P.S.  Is parameterless a word?

Technorati tags: ,

posted @ Thursday, January 25, 2007 8:15 AM | Feedback (2) | Filed Under [ .NET VPN ]


Server surgery


David added some more hard drive space to our Team Foundation Server yesterday.

DSC00341

 

Technorati tags: ,

posted @ Thursday, January 25, 2007 7:14 AM | Feedback (0) | Filed Under [ EnGraph TFS ]


TFSServerManager PowerTool


Brian Harry talks about his internal TFS management tool.  He's really just torturing us, because it's not available for download.  Hopefully, he will release this to the salivating public.

 

Technorati tags: ,

posted @ Wednesday, January 24, 2007 1:19 PM | Feedback (1) | Filed Under [ .NET TFS ]


C# .NET code to load MapInfo


This code will load the MapInfo.Application object into a listbox and display the sample US County data.  It assumes your form has a listbox called listBox1 and a "using System.Reflection;".  It also works in Vista!

string mapName = "C:\\Program Files\\MapInfo\\Professional\\DATA\\Map_Data\\Namerca\\USA\\Usa_Maps\\US_CNTY.TAB"; System.Type oType = System.Type.GetTypeFromProgID("MapInfo.Application"); object o = System.Activator.CreateInstance(oType); oType.InvokeMember("do", BindingFlags.InvokeMethod, null, o, new object[] { "Set Application Window " + listBox1.Handle }); oType.InvokeMember("do", BindingFlags.InvokeMethod, null, o, new object[] { "Set Next Document Parent " + listBox1.Handle + " Style 1" }); oType.InvokeMember("do", BindingFlags.InvokeMethod, null, o, new object[] { "Open Table \"" + mapName + "\"" }); oType.InvokeMember("do", BindingFlags.InvokeMethod, null, o, new object[] { "Map From \"US_CNTY\"" });

It's a little more painful than VB's CreateObject, but it works.

 

Technorati tags: , ,

posted @ Tuesday, January 23, 2007 12:03 PM | Feedback (6) | Filed Under [ .NET Mapping Vista ]


C# .NET code to maintain VPN connection


Windows has pretty good VPN management.  It's pretty good at redialing the connection when the connection is dropped, and for the most part it works.

However, sometimes it thinks it connected to the VPN when it's really not, and it doesn't validate the connection to a specific internal IP.  We needed something that was a bit more robust and could disconnect and reconnect if it couldn't see a specific IP.

This class I wrote takes a VPN connection name and an IP to ping and will use rasphone.exe to connect and NetworkInformation.Ping to verify connectivity.  Every 15 seconds, it checks connectivity and redials as needed.

Obviously, the VPN has to have the authentication saved, and redial attempts set to zero.

My article with the code is here.

Update - Changes made

 

Technorati tags: , , ,

posted @ Monday, January 22, 2007 9:17 AM | Feedback (2) | Filed Under [ EnGraph .NET VPN ]


Joey playing in the snow


He's having a good time.

DSC00337

DSC00335

 

Technorati tags: ,

posted @ Sunday, January 21, 2007 11:48 AM | Feedback (0) |


Full Trust ClickOnce and Vista UAC


Clarification - The specific program I am working with here has the word "updater" in the name.  This flags the UAC that it needs admin rights.  Full Trust ClickOnce plays nicely with UAC otherwise.

I've been battling all day with how one of our ClickOnce applications works with the UAC in Vista.  I've found two ways to get past the "Cannot Start Application" message:

Cannot Start Application ClickOnce

Run IE as an administrator

The first way is very painful and not useful for a repeatable process, but it works.  Assume your ClickOnce application lives at http://mycompany.com/ClickOnceApp.application.


1)  Browse to C:\Program Files\Internet Explorer
2)  Right click ieplore.exe
3)  Select "Run as an administrator"
4)  Click "Allow" on the UAC prompt
5)  Type "http://mycompany.com/ClickOnceApp.application" in the address bar and press enter

Create a Windows Forms application that request administrative rights

The second way still isn't pretty, but it's better.

1)  Create a Windows Forms application called ClickOnceShell
2)  Replace all the code in static void Main() with

System.Diagnostics.Process.Start("c:\\Program Files\\Internet Explorer\\iexplore.exe", "http://mycompany/ClickOnceApp.application");

3)  Build ClickOnceShell.exe
4)  Browse to \ClickOnceShell\Bin\Debug
5)  Right click on ClickOnceShell.exe and select "Properties"
6)  Select the "Compatibility" tab, check "Run this program as an administrator" and press "OK"
7)  Double click ClickOnceShell.exe
8)  Click "Allow" on the UAC prompt

Basically, our ClickOnceShell application has administrative rights, so when it starts the IE process, IE is granted administrative rights.  So our ClickOnce application is able to start properly.

Also, we can't say Process.Start("http://mycompany...") because:
1)  The user's default browser might not be IE
2)  If the user already has an instance of IE7 open, it will want to open the URL in a second tab.  Our application will then fail because that instance of IE7 isn't running with administrative rights.

I really just need to drill into the permissions of our ClickOnce applications and see if I can make it work without full trust, but it's nice to know that we have options for our clients as they begin to install Vista.

Update - Read this post for a clean way to start a process with admin rights

Technorati tags: , ,

posted @ Thursday, January 18, 2007 2:52 PM | Feedback (0) | Filed Under [ EnGraph .NET Vista ClickOnce ]


Update on Sprint blocking my mail server - Part 2


Somebody from Sprint must have read my blog post about not being able to receive text messages from Where's Tim.  Either that or somebody decided that we were not sending spam through our servers.

Either way, I am now getting text messages people send me on Where's Tim.  I also publish these messages in a GeoRSS enabled RSS feed.  Since the feed does have GeoRSS, you can even view the last 100 messages on Where's Tim.

 

Technorati tags: , ,

posted @ Wednesday, January 17, 2007 2:10 PM | Feedback (0) | Filed Under [ Mapping Where's Tim ]


Resolution - Adding more "Team" to Team Foundation Server


In a recent post, I talked about wanting a TFS group called ParaPlan_Stud that contained Kyle and myself that we could assign tasks to and view in our "My Work Items".  Much thanks goes to Mickey Gousset, who wrote a book that you need to get, for helping me with this.

I originally made this a blog post, but it was a bit lengthy and I didn't want to flood the front page, so I added it to my articles.

http://geekswithblogs.net/thibbard/articles/HowToCreateATeamFoundationServerGroupThatCanHaveTasksAssignedToIt.aspx

posted @ Wednesday, January 17, 2007 11:09 AM | Feedback (2) | Filed Under [ EnGraph TFS ]


More "Team" in Team Foundation Server please


Kyle and I are running into a small problem with Team Foundation Server when it comes to assigning tasks. 

In a typical software development company, a Project Manager receives a bug or feature request.  He then assigns associated tasks to his developers.  Once the developer is finished, the task is re-assigned to the PM for review.

At EnGraph, things are a bit more collaborative.  Partly because of our size, but also because we like to manage support and development from a team perspective. 

Back to our problem.  We really want to be able to assign a task to a group that contains myself and Kyle.  Both of us would get email alerts, both of us would be able to manage the task, it would show up in our respective "My Work Items" and either of us could close it.  This way we can create tasks that need to be done, but either of us could handle.  I originally created a ParaPlan Developers active directory group, but was unable to assign a task to it.  I know that we can set permissions so that he can view my tasks and vice versa, but we want to maintain individual tasks as well. 

I'm going to create a new user called ParaPlan_Stud and we will assign common tasks to it.  We will change our "My Work Items" query to view items assigned to @Me or assigned to ParaPlan_Stud.  We can use the bisubscribe tool to create email alerts for this user to go to both of us.

I don't know if it would be useful for bigger companies to have the ability to assign a task to a group rather than an individual, but it would certainly help us.

I'll try this for a couple of weeks and see how it goes.

Update:  Here is what we did.  It's been working well so far.

posted @ Monday, January 15, 2007 11:18 PM | Feedback (5) | Filed Under [ EnGraph .NET TFS ]


Run, Mozilla, Run


Dear Firefox,

You're fast and light-weight.  You're pretty much everything I want in a browser.  However, my browsing heart is not satisfied by you alone.  See, I'm a developer, so I download a lot of tools that are wrapped in .exe and .msi files.  When I want to use one of these tools, you make me download the file to the desktop before I can run it.  I don't understand why you must clutter my desktop so much.  I don't need the file on my computer, if I want it later, I'll just re-download it.

I appreciate that you want to protect my computer from bad .exe files.  But I'm a good computer user and my operating system already makes sure that I really want to install the file.

Please take a look at the "Run" button from your friends at IE.  It makes my life so much easier and I'm only asking you to change because I know you are capable of being a better browser.

Love,

Tim

P.S.  You could also handle Google Maps on Google Homepage Widgets better too.
P.P.S. Maxthon's ability to drag a link into a new window is pretty cool.  Not that I don't love the Ctrl Key, I'm just saying it's cool.

 

posted @ Monday, January 15, 2007 1:32 PM | Feedback (5) | Filed Under [ Vista ]


Hey, that's my parking spot


DSC00329

 

I came to work this morning to find a pile of snow where I usually park.  It didn't seem like we got much snow this weekend, but it sure looks impressive all piled up like that.

If you look closely on the left hand side, you can see the bus that I blogged about here.

 

Technorati tags: ,

posted @ Monday, January 15, 2007 7:33 AM | Feedback (2) | Filed Under [ EnGraph ]


Code comments (///) TFS check-in policy


Christoph Wille has developed a Team Foundation Server code check-in policy that checks the pending changeset for ///code comments.

This has been a very useful tool for usIt can be downloaded here.  Thanks Christoph!

 

posted @ Sunday, January 14, 2007 12:00 PM | Feedback (3) | Filed Under [ EnGraph .NET TFS ]


I'm ready, where's the boost?


I picked up a SanDisk 4gb usb key this weekend hoping to take advantage of the Vista ReadyBoost feature.  I plugged it in, selected ReadyBoost and waited for greatness.  I'm still waiting, it doesn't seem to be speeding up my system, but I haven't really been pushing it too hard either.

Tom Archer has a great post about ReadyBoost, but I didn't see an answer to "at what performance level does ReadyBoost make a noticeable difference?"

 

Technorati tags: , , ,

posted @ Sunday, January 14, 2007 11:51 AM | Feedback (2) | Filed Under [ Vista ]


New streets on Google Maps


Google Maps released a new version of their street maps this morning to users of their API.  This adds city boundary shading and a bunch of new streets to Lawrence, KS.

They have had this version on the maps.google.com page for a while and just pushed it out to the API.

Check out Where's Tim for the changes.

 

posted @ Sunday, January 14, 2007 10:50 AM | Feedback (2) | Filed Under [ Mapping Where's Tim ]


VPC 2007 rocks on Vista


Virtual PC 2007 runs so well on Vista.  VPC 2004 always worked, but it was buggy and slow.  VPC 2007 is clean and crisp. 

You can still sign up for the beta here.

 

Technorati tags: ,

posted @ Friday, January 12, 2007 11:30 AM | Feedback (1) | Filed Under [ Vista ]


I don't know much about HDTV


Luckily for me, Jeff Croft knows about HDTV and posted a good simple guide here.

Technorati tags: ,

posted @ Wednesday, January 10, 2007 1:24 PM | Feedback (0) |


Better blog reading with FeedDemon and Microsoft Mouse


FeedDemon has a neat feature where you can press Shift + Alt + Home and it will take you to your subscriptions home page.  Microsoft Mouse has a feature where you can assign keystrokes to certain buttons when inside a specific application. 

So, with a Microsoft Mouse you can assign Shift + Alt + Home to a button when inside of FeedDemon by:

1) Open Microsoft Mouse
2) Check "Enable program-specific settings"
3) Click "Settings"
4) On the Program - Specific Settings window, press "Add"
5) Browse to "Program Files\FeedDemon\FeedDemon.exe"
6) Select the button to assign the shortcut to (I picked Top right button)
7) Select "Keystroke" from the dropdown list
8) Press Shift + Alt + Home on your keyboard
9) Verify that the key combination is correct and press "Ok"

Technorati tags: ,

posted @ Wednesday, January 10, 2007 9:52 AM | Feedback (0) |


A phone that actually plays music?!


All this talk about the iPhone (hurry and grab quicktime killer before it's too late) reminded me of Lance's post about converting a PocketPC into an iPod.

I guess Apple is close to finding out how many times they can beat a dead horse.

 

posted @ Tuesday, January 09, 2007 2:23 PM | Feedback (1) | Filed Under [ Mobile ]


Nice Glass!


I installed Vista on my main development computer today and am proud to report my score:

2.6

Honestly, I'm just happy to have glass, unlike my laptop.

P.S. Watch for D'Arcy's upcoming post "Tim's Vista Score Sucks!" :)

 

Technorati tags: ,

posted @ Tuesday, January 09, 2007 11:08 AM | Feedback (2) | Filed Under [ Vista ]


Stupid question of the day


If I plug our DSL modem and router in our battery backup, will we maintain internet connectivity if the power goes out?

Technorati tags:

posted @ Tuesday, January 09, 2007 7:36 AM | Feedback (1) | Filed Under [ EnGraph ]


We are still looking for employees (.NET - Kansas City)


As Kyle blogged about and I blogged about a couple months ago, we are still looking to hire at least one person to do .NET development in the Kansas City area.  We have some really cool projects going on and we just don't have the resources to take everything on. 

We are thinking about advertising in CareerBuilder.  They have some good packages for print and internet exposure.

Has anybody worked with CareerBuilder?  Have any good or bad stories?  Know any friends that are interested in working with .NET transportation and GPS products?

 

Technorati tags: , ,

posted @ Monday, January 08, 2007 3:53 PM | Feedback (11) | Filed Under [ EnGraph .NET GPS Goldstar ]


Windows Forms 2.0 Programming


I picked up Chris Sell's book this weekend.  I've been excited to get this book from whenever I first heard about it.  When thumbing through it at Borders, I found ever more goodies than I expected.  Visual Inheritance is something I know nothing about and I also think I'm doing too many things manually like validation and settings management that the framework can handle for me.

If anything, it was a great distraction during the 3 hours of decomposition of the Kansas City Chiefs.  Damon gets my vote for 08.

posted @ Monday, January 08, 2007 9:20 AM | Feedback (1) | Filed Under [ .NET Sports ]


TFS Solutions - Access to the path BuildLog.txt is denied and TF42004


When migrating our TFS from a workgroup based install to Active Directory, we got a couple errors when running Team Build.

Access to the path 'C:\...BuildLog.txt' is denied

To fix this error, I simply deleted the root Team Project folders in Windows Explorer and re-ran the build.  The build then recreated the folders.  You may have to run the builds in a specific order if your solutions reference assemblies that live in these folders.

The other error occurred after a build started:

TF42004: Team Build failed to open folder \\server\share

To fix this error, I explicitly gave the new Active Directory user TFSService full control over the share permission for the folder that contains our drops.  TFSService is the account that launches the build process.  More details about this error are here.

These fixed the last of our problems (I think) with migrating to Active Directory.  Part 1, Part 2 and Part 3 are also available for your reading enjoyment.

posted @ Friday, January 05, 2007 2:11 PM | Feedback (2) | Filed Under [ EnGraph .NET TFS ]


Keyboard shortcut to define task iteration in TFS


I'm a keyboard user, I don't like having to transition to my mouse to navigate through a form.  It always stresses me out when I'm creating a new task or QOS in Team Explorer and I have to move the mouse to select the proper iteration.

Today I discovered Alt + Down Key.  This will drop down the iteration combo box and then you can use your direction keys to expand and select nodes of the treeview.  Right Key expands a node, Left Key collapses a node and Up/Down walk up and down the tree.

Turns out Alt + Down works to expand most combo boxes without selecting a value.  The Up/Down keys will select a value in most combo boxes.  You can also use Esc to collapses the combo box without changing the value.  Enter obviously collapses the combo box and changes the value to the item that was selected in the list.

I know I'm a dork, but I'm so excited to save 2 seconds every time I create a new task.

posted @ Friday, January 05, 2007 1:02 PM | Feedback (1) | Filed Under [ .NET TFS ]


Five things about me


Jeff Julian - Mr. GeeksWithBlogs - was nice enough to tag me, so here are five things you probably don't know about me.

1)  I have a chapstick addiction.  It's bad, I go through a stick every couple of weeks.  It's really not my fault though, my Mom and sisters are just as bad as me.

2)  I'm a bad driver.  I feel sorry for anybody that has to ride with me.  I go out of turn at four-way stops, run too many yellow(ish) lights, liberally interpret lane dividing lines, and generally assume that I have the right of way.  Given all that, I've never been in an accident.

3)  Most of my blog posts are never published.  I open up Live Writer to start talking about a problem I'm having, start typing it out and figure out what I did wrong that caused my problem.  Just being able to explain the problem in a way that other people could understand it seems to open my eyes to the cause.  I make things too complicated.  That could be a whole bullet point on it's own.

4)  My girlfriend and I moved in together last weekend.  We're both selfish and stubborn, but also very understanding and capable of compromise.  It's fun to play house for real and make dinner and all that, and I learn a lot from her.  It's a big step for me and I guess I'm finally growing up.  She recently took a job in the advertising division of LJWorld.  They are doing some awesome things over there.

5)  I worked for EnGraph for free for the first six months.  Technically, I was paid on commission, but I'm such a bad salesman that I couldn't ever close a sale.  I was selling GPS units.  In fact, they are the same GPS units that I now write software for.  I took the sales job because I really wanted to work for them and I had interviewed with Kyle back in 2001.  My intention was to do the sales thing until they gave me an opportunity to write some code for them.  It worked out that way and I became EnGraph's 2nd programmer in January of 2004.  Just in time too, because I had pretty much depleted my savings account.

Now I get to tag five people:

Kyle Archer - Mr. ParaPlan
Dave Starr - Mr. GPS
Matt Strausz - Mr. DUI
Katie Lohrenz - Ms. Letter Writer
John Musser - Mr. Mashup

posted @ Friday, January 05, 2007 8:09 AM | Feedback (5) | Filed Under [ EnGraph GPS ]


Migrating to Active Directory Part 3 - Who needs builds


Moving our TFS Server to Active Directory wasn't that bad.  I followed these instructions from MSDN.  They are meant for people moving from one domain to another.  But the steps worked for moving from a TFS workgroup based install to a domain based install.

All of the tasks that were assigned to Kyle or myself were migrated over to our new domain usernames and using this handy permissions tool, I was able to get all of our permissions set correctly.

The only problem is initiating a build.  When I right click on our Team Build and try to start, it gives me this error:

Access to the path 'C:\tfs...BuildLog.txt' is denied

I'll tackle that one in the morning, it's been a long day.

And I'm also very excited to start using Grant Holliday's TFS Bug Snapper.

Here are the links to Part 1 and Part 2 of this AD Adventure.

 

posted @ Thursday, January 04, 2007 3:42 PM | Feedback (0) | Filed Under [ EnGraph .NET TFS ]


Migrating to Active Directory Part 2 - DNS what?


I added my main workstation to our new Active Directory domain last night with out a hitch.  This morning, I added my Vista laptop and ran into a bit of a problem.

computernamedomainchanges

 

So I added a DNS role to the server and was able to add the laptop to the domain.

Then we started in on Kyle's laptop.  When attempting to log on, we got "The system cannot log you on now because the domain engraph is not available".  After much googling, I discovered that the DNS role was incorrectly set up.  I thought that just removing the role and re-adding the role would work, but all of the old forwarding zones under the DNS MMC snap in were still there.  Once I figured out that I needed to forward requests to our ISP, I crossed my fingers, deleted all the forwarding zones and stepped through the DNS wizard correctly adding the forwards. 

At this point, I was feeling pretty good.  But Kyle still couldn't log on to the domain on this laptop.  More googling ensured and I found that I had to explicitly set the DNS server for TCP/IP on the network connections.  Once I set that, Kyle was able to log on and all was right in the world.

So now, Kyle's laptop, my laptop and my workstation are all attached to the domain and we are logging on with our network usernames.  The next step is to attached our TFS server to the domain and hope that everything still works.  I don't think I'll have to create new network usernames for the TFS services since they don't need access outside of that server.

posted @ Thursday, January 04, 2007 12:56 PM | Feedback (0) | Filed Under [ EnGraph .NET TFS Vista ]


Migrating to Active Directory Part 1 - Remaining optimistic


Today I get to learn how to change a Team Foundation Server from a workgroup based install to a domain based install.

We've had Active Directory for a while, but it was never set up right.  Thanks to Robert Oderkirk at Free State Business for helping us figure out what was wrong.  So now, we have to attach all of our computers to the domain, set up the network users, and hope that TFS plays nicely with the transition.  I need to do more research, but hopefully, I just have to switch the TFS accounts to active directory accounts and re-assign all active tasks to the new network user name.

I'm not a network/server kind of guy.  Servers scare me a bit.  One time I got a letter from my ISP saying that they were shutting down my internet because my IP was a source of spam.  I remembered that a couple weeks before that, I was trying to setup a SMTP service on my server at home.  It wasn't really working right, so I just stopped messing with it.  Apparently, somebody figured out how to use it because there was several thousand message files in the sent folder.  Whoops.

posted @ Thursday, January 04, 2007 6:33 AM | Feedback (1) | Filed Under [ EnGraph .NET TFS ]