Updated: Setting up Source Server for TFS Builds#

Just a quick note to let you know that I've updated my guide on Setting up Source Server for TFS Builds, since I just found out that there is an issue with Build Definitions that contain spaces. The fix is fairly easy though:

  • In TFIndex.cmd (on the build server), remove the quotes around the %1 argument for SYMBOLS:
@call "%~dp0SSIndex.cmd" -SYSTEM=TF -SYMBOLS="%1" %*
@call "%~dp0SSIndex.cmd" -SYSTEM=TF -SYMBOLS=%1 %*
  • In the Team Build Script (in Source Control), add XML-escaped quotes around the $(BinariesRoot) argument:
<Exec Command="&quot;C:\Program Files\Debugging Tools for Windows\sdk\srcsrv\TFIndex.cmd&quot; $(BinariesRoot)"
      WorkingDirectory="$(SolutionRoot)" />
<Exec Command="&quot;C:\Program Files\Debugging Tools for Windows\sdk\srcsrv\TFIndex.cmd&quot; &quot;$(BinariesRoot)&quot;"
      WorkingDirectory="$(SolutionRoot)" />

For the full setup instructions, please refer to the original post on Setting up Source Server for TFS Builds.

Wednesday, April 30, 2008 11:20:47 AM (Romance Standard Time, UTC+01:00) #    Comments [1]  | 

 

Mortgage Loan Excel Sheet#

If anybody would be interested, I've recently put together an Excel sheet that calculates the payment table ("aflossingstabel") for a loan, i.e. for each month it shows you how much you need to pay, what the interest is, what the remaining capital is, ...

I've only modeled two options (that were relevant to me): fixed monthly payments ("vaste mensualiteit") - where you pay the same consant amount every month - and fixed capital ("vaste kapitaalaflossing") payments - where you pay off a fixed amount of capital but a variable amount of interest (making it a decreasing loan).

When I showed this to my bank, they were actually pretty impressed so I figured somebody else might benefit from this :-) And yes, this means we just bought a house, yay! But the examples in the Excel sheet and below are not ours, if you were wondering ;-)

Features:

  • Calculates payment tables for loans up to 40 years
  • Shows payment graphs up to 25 years (by default, you can enlarge this of course)
  • Calculates how much of your total payments are actually interest payments (try not to weep when looking at this)
  • Allows you to compare different loan options (amount, duration, interest rate), e.g. to compare different bank proposals

Download here: Loans.zip (108 KB).

Note that you can only open this in Excel 2007 since it uses some financial functions only available there. And although the calculations were very accurate (just a few cents deviation on the total amounts compared to the bank's proposals), it goes without saying that you use this at your own financial risk :-)

Example payment table:

LoanFixedPaymentSheet

Example yearly graph for a fixed payment (constant) loan:

LoanFixedPayment

Example monthly graph for a fixed capital (decreasing) loan:

LoanFixedCapital

Friday, March 07, 2008 1:03:40 PM (Romance Standard Time, UTC+01:00) #    Comments [2]  | 

 

My "Deep Dive Into The Guidance Automation Toolkit" presentation now online!#

Tom's team has been kind enough to put my session of last year's TechDays (then still known as the Developer & IT Pro Days) online on MSDN Chopsticks. You can find my "Deep Dive Into The Guidance Automation Toolkit" presentation at http://www.microsoft.com/belux/msdn/nl/chopsticks/default.aspx?id=10. Everything I said back then is still relevant today, so if you missed it last year you can now catch up for free :-)

And in the light of Software Factory technologies, it also makes a nice preparation for my talk on Domain-Specific Development with Visual Studio DSL Tools next week. My session is scheduled on Thursday March 13 at 10:45. I'm really looking forward to it, and I hope to see you there!

Monday, March 03, 2008 10:39:16 AM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

DSL Tools session at TechDays in Belgium#

The annual Belgian tech-fest for Microsoft developers, architects and IT pro's is coming to Ghent again soon, and I'm once again proud to host a session in the Developers track for TechDays!

Domain Specific Development with Visual Studio Domain Specific Language (DSL) Tools

As one of the pillars of the Software Factories initiative, Domain Specific Languages (DSLs) provide a way to describe your business domain in a language closer to the actual problem than using traditional programming code.

The Visual Studio Domain Specific Language Tools allow developers to create their own graphical designers and code generation tools – much like the ones you can find in Visual Studio today, such as the Class Designer.

In this session, you will learn how to develop your own DSLs inside Visual Studio and see an example of a real-world DSL that simplifies your life as a developer: the Configuration Section Designer.

TechDays 2008

Heroes are Assembled { in Software Factories } :-)

Hope to see you there!

Blog | General | Programming | .NET | DSLs
Monday, February 18, 2008 8:56:39 AM (Romance Standard Time, UTC+01:00) #    Comments [3]  | 

 

Just Released: BuildCop v1.0!#

It is with great pleasure that I'm finally ready to release another open source tool on CodePlex: BuildCop.

BuildCop is a tool that analyzes MSBuild project files (interactively or during e.g. a daily build) according to a customizable set of rules and generates reports - e.g. is strong naming enabled, are certain project properties set correctly, is XML documentation being generated, are assembly references correct, are naming conventions respected, ...

This has grown out of a quick-and-dirty tool to check various build settings in a large customer project (to make sure that the developers were sticking to the guidelines), and has evolved into quite a clean, flexible and customizable tool that you can now start using as well.

All information, downloads and documentation is available on the BuildCop homepage on CodePlex, so rush out and let me know what you think!

Tuesday, February 05, 2008 10:37:20 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

Just Released: Configuration Section Designer#

I just released my first domain specific language to the public! The Configuration Section Designer is a Visual Studio add-in that allows you to graphically design .NET Configuration Sections and automatically generates all the required code and a schema definition (XSD) for them.

The Configuration Section Designer In Action

For all information, downloads, source code, work item tracking and discussions visit http://www.codeplex.com/csd.

The Configuration Section Designer is built on Visual Studio 2008 with the very excellent DSL Tools. Instead of publishing it here on the blog as I normally do with my pet projects, I've decided to host it as open source software on CodePlex so that hopefully other people will find it interesting enough to contribute and make it even more powerful. This also gives me the chance to test-drive CodePlex in a real project, and so far it's been working great so I'll probably be moving more projects to it.

Anyway, if you have Configuration Sections that you're currently writing by hand, I encourage you to try this and let me know how it works for you. I'm pretty excited about it, I've only published it yesterday evening and it's already got over 40 downloads and a good feature suggestion of someone that's been porting his hand-written code to the designer! Good times!

Blog | Programming | .NET | DSLs | CSD
Sunday, December 30, 2007 5:21:30 PM (Romance Standard Time, UTC+01:00) #    Comments [1]  | 

 

Just Released: E = m c² v2.1!#

It's taken way too long to remind myself to release a new version of E = m c² - so finally, here goes: v2.1 is out the door! It even comes with source code again! What a perfect Christmas present for 3.4 gazillion E = m c² users*! Actually, there are quite a lot of extra features so if I would've released a bit more sensibly over the last months then it probably would've been v2.4 or so already. Anyway...

E = m c² is a free utility that can check various sources for messages, then filter and redistribute them.

A typical example is checking your mailbox and showing you a popup window if there are new messages, but it goes far beyond that since it's fully extensible using plugins. For example, you can check RSS files for new blog posts, monitor when a server comes online or goes offline, play a soundfile when new messages arrive, send a summary email, run a program, write to an RSS file, ...

Basically, you can make E = m c² do all you can think of! And it can do your laundry too (Pro version only**)!

What's new in this version?

  • I'm also releasing the source code from now on (built on .NET 2.0 with Visual Studio 2005).
  • Added support for trigger plugins to provide a list of messages of their own when they trigger. This allows non-pull scenarios to be supported as well (i.e. not only receiving messages by "pulling" Source plugins, but "pushing" to deliver messages from within a trigger immediately).
  • Added support for "hosted" plugins, which don't actively participate in the message cycle but are just running in the context of E = m c². This means they don't handle messages but they can still have their own settings and commands. This can be convenient to host small pieces of functionality with settings that would otherwise require a standalone application.
  • Duplicated the "Change Background" as a separate "hosted" plugin so you can also use it as is, outside of the message cycle.
  • The "Change Background" plugins now support other background styles than just "stretch". The new StretchedWithAspectRatio option retains the aspect ratio of the original image while stretching it to fit the screen.
  • Added "Yahoo! Mail" plugin that retrieves messages from Yahoo! Mail (but you need to make sure that your account is still using the "classic" user interface for this to work).
  • Added "Network Changed" trigger, which triggers when the network changes (e.g. when you plug in or out of a network).
  • Added "Debug" publisher, which writes messages to the Windows debug stream.
  • The "Viewer" can now have message styles to color rows depending on certain message properties, e.g. the source of a message or its subject.
  • The "Viewer" can now be configured to have an initial window state, e.g. to make it start as maximized.
  • The template processor can now also use reflected properties, so not just the built-in tokens as before - e.g. $(Sender) - but also tokens that are taken from the value of a property on the (optionally subclassed) message at runtime. This provides better templating support for messages that are subclassed from the base EmcMessage class.
  • The "RSS Source" plugin now attempts to remember the read items between sessions of the application.
  • The "RSS Publisher" plugin now also writes the message recipients to the RSS feed so that a client also has access to the original message recipients.

You can find all information, screenshots, downloads, and even tutorials on writing plugins at the dedicated website: http://jelle.druyts.net/emc/.

Now I can continue working on the next version, which should turn out to be quite interesting. I already have a number of features lined up and semi-implemented that will take it to a next level. So I think that'll make it v3.0 and non-arguably the most interesting download of 2008 galaxywide***.

I'm even thinking of changing the name to something more meaningful and search-engine-friendly. I don't want to keep steeling Google Love™ from my good friend Albert, you know... So any suggestions would be welcome, and if yours makes it then you'll get a Pro version for free**!

* Usage information obtained by bribing a guy with a moustache who works at a local internet provider and promised me the number of downloads was legit.
** Ha ha! There isn't really a Pro version!
*** I might be a bit biased.

Blog | General | Programming | .NET | Emc | Download
Friday, December 28, 2007 2:15:25 PM (Romance Standard Time, UTC+01:00) #    Comments [0]  | 

 

Setting up Source Server for TFS Builds#

[Update 30/04/2008] Fixed issue for Build Definition names that contain spaces.

I've read about symbol servers and source servers before (in John Robbins' excellent Debugging Microsoft .NET 2.0 Applications book, for example, and also due to the recent news that Visual Studio 2008 will support source-code debugging of the .NET Framework Libraries), but never really got around to trying them out since they seemed pretty complex to set up. However, I've recently set up a source server on a Team Foundation build server (twice!), and my eyes have now gone wide open: anybody who references assemblies built by those TFS build servers can now seamlessly debug them.

When an assembly is "source server-enabled", the pdb file will contain the full path and the exact version of the file in source control that was used to build that assembly. If the debugger then enters a method, Visual Studio automatically downloads that correct file, places it in a local cache, and opens it for debugging. This is super sweet!

Now the hard work was already done and published by Roy Osherove, but there were some extra steps to take if you wanted to integrate this in a real Team Build (i.e. on the TFS build server instead of on a local machine) and it also lacked some additional information to get everything working. So I put together a full document that covers all aspects of setting up a source server, modifying the Team Build script, configuring the project files, and finally configuring the development machines.

The full document (PDF) can be downloaded here, and you can read the one-page summary that briefly covers the required steps below. I cannot recommend setting up a source server enough, it's free and takes less than an hour if you simply follow the procedure, and the advantages are - hopefully - obvious.

Setting up Source Server for TFS Builds.pdf (597 KB)

Note that this procedure works for both TFS 2005 as TFS 2008.

Installing Source Server on the Build Server

@call "%~dp0SSIndex.cmd" -SYSTEM=TF -SYMBOLS=%1 %*
  • In the srcsrv.ini file in that directory, set MYSERVER to the exact URL of your Team Foundation Server (Application Tier)
  • Add the full path to TF.exe (usually "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE") to the system's Path environment variable
  • Restart the Team Build Service
Enabling Source Server in the Team Build Script
  • Add a new target to be run on "AfterCompile" that calls TFIndex.cmd:
<Target Name="RunSourceServerIndexing">
<Exec Command="&quot;C:\Program Files\Debugging Tools for Windows\sdk\srcsrv\TFIndex.cmd&quot; &quot;$(BinariesRoot)&quot;"
        WorkingDirectory="$(SolutionRoot)" /> </Target> <Target Name="AfterCompile"
        DependsOnTargets="RunSourceServerIndexing" />
Configuring the Project Files
  • Set the Debug Info in Project Properties / Build / Advanced to "full" (Debug configuration) or "pdb-only" (Release configuration)
Configuring the Development Machines
  • In Visual Studio / Tools / Options / Debugging / General: check the "Enable source server support" checkbox
  • Create a new text file named srcsrv.ini in "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE" that contains the exact following text:
[trusted commands] 
cmd.exe /c TF.exe view
Sunday, December 09, 2007 7:16:12 PM (Romance Standard Time, UTC+01:00) #    Comments [1]  | 

 

All content © 2008, Jelle Druyts
On this page
Recent Photos
www.flickr.com
This is a Flickr badge showing public photos from Jelle Druyts. Make your own badge here.
Advertising
Top Picks
Statistics
Total Posts: 342
This Year: 5
This Month: 0
This Week: 0
Comments: 517
Archives
Sitemap
Disclaimer
This is my personal website, not my boss', not my mother's, and certainly not the pope's. My personal opinions may be irrelevant, inaccurate, boring or even plain wrong, I'm sorry if that makes you feel uncomfortable. But then again, you don't have to read them, I just hope you'll find something interesting here now and then. I'll certainly do my best. But if you don't like it, go read the pope's blog. I'm sure it's fascinating.

Powered by:
newtelligence dasBlog 2.0.7226.0

Sign In