Archives / 2008
  • My WPF Bookshelf

    For future reference a quick list of WPF-related books I own:

    • Charles Petzold: Applications = Code + Markup
      This was my first WPF book and I bought it pretty soon after it came out, so I didn't have a chance to read the bad reviews of other people. The main problem is the lack of images, leaving you just with the text and your imagination if you're not following each and every step at your computer. Contrary to other WPF books, XAML is introduced pretty late (in the second half). In his excellent PDC pre-conference session about WPF, Petzold himself admitted that this was a mistake and chose a different, XAML-first (instead of code-first) approach for the session.
      According to a buddy from my .NET user group the book may be nice for reading about some deep-down details, but I cannot comment on that.
      Bottom line: No recommendation from me.
    • Adam Nathan: Windows Presentation Foundation Unleashed
      This was my second WPF book and it is the exact opposite to Petzold's book: lots of images, lots of color. I really liked that at first, but it's actually pretty hard to read the book for longer periods of time with the pages being cluttered with colored boxes ("Warning", "Digging Deeper", "FAQ", "Tip") - a bit less color sometimes would have been better. And I would have liked more body text here and there, having the feeling that some things could have been explained in more detail.
      Bottom line: By no means a bad book, but I'm not entirely convinced.
    • Chris Sells & Ian Griffiths: Programming WPF (2nd Ed.)
      My third WPF book. The layout is easy on the eyes, a good mixture of images and longer body text. Like the WPF Unleashed book it has side notes (warnings, tips, recommendations), but they are shown in a less obtrusive way. I really liked the writing: Enough text for explaining things, but never boring. I read large parts of the book away from the computer and enjoyed it.
      Bottom line: My favorite "first WPF book".
    • Sam Noble, Sam Bourton, Allan Jones: WPF Recipes in C# 2008
      Not a book for learning WPF from scratch, but a collection of problems and their solutions. It may seem a bit old-fashioned to have this in a book in the age of Google search, but you'll notice the difference between most things you find on the Internet and the content of this book where the authors actually have spent quite some time on polishing.
      Each entry in the book consists of a short description of the problem (Always starting with "You need to ...", very effective wording by the way), a short description of the solution ("Use an X and do Y") and is then followed by a longer part "How it works".
      Bottom line: Having this book on your bookshelf may save you a lot of time.
  • SonicFileFinder 2.1 Released

    My colleague Jens Schaller has put out a small bugfix release of his Visual Studio add-in SonicFileFinder, a free tool for quickly navigating inside Visual Studio projects and solutions. ReSharper users may argue that R# offers the same functionality (among many many other features of course), but being a R# user myself I still prefer SonicFileFinder's file search.

    More information on his blog, download on the SonicFileFinder website.

  • Looking Back at PDC 2008

    20081102_PDC_SuitcaseThe PDC 2008 is history, I've crossed the Atlantic and slept the first night back at home. Before the memory of PDC 2008 begins to fade, I'd like to take a look back.

    The PDC started for me with an amazing pre-conference session with Charles Petzold on WPF. I don't know how people without any WPF knowledge at all may have experienced it, but for somebody like me, who has looked into WPF again and again, just to be stopped each time by more urgent things to be done, the session was really great.

    For the precon Petzold chose an approach different from his WPF book (or "the phonebook" as some call it because of the lack of images), which was definitely a good thing, starting immediately with XAML (instead of code) to explain the concepts. The amount of preparation that went into these 6 hours was impressive: A script almost an inch thick, perfectly timed segments of 20min each and literally hundreds of samples shown in a custom-written viewer which highlighted the small steps from sample to sample.

    In a good mood I visited the keynote on Monday, just to be severely disappointed. As PDC traditionally is about the future, i.e. upcoming technologies that developers should be motivated to take a look at, it was hard to understand that the keynote started without a video pumping up the crowd. The keynote on Tuesday was better in that respect, as it started with a video showing a number of WPF applications, giving me a first "oh wow, WPF really seems to take off" feeling.

    Unfortunately, both keynotes sadly lacked excitement. It wasn't the content - that at least made me go "hmmm.... what I just heard somehow sounds important". Instead, it was more the speakers and the way the content was presented that failed to reach and motivate me. The joke among me and my colleagues was "hey, go and motivate yourself".

    Speaking of keynotes, the Microsoft Research keynote definitely lacked a review cycle in the days before the PDC, where fluff could have been separated from the (mostly pretty cool) content. When I sat through the first half hour in which I was told over and over again how great Microsoft Research is, I was reminded of the movie "Spiderman 2" where an equal amount of time was spent on how sad the life of a super hero can be. Both in the movie and the keynote the point where I'd think "ok, I'm not dumb, I get the point, now PLEASE move on" was reached soon enough.

    The sensors stuff in the MR keynote left me wondering what's so special about it, but the other parts (e.g. programming for kids using a joypad or the World Wide Telescope) where really interesting. I just got angry when the audience was told "oh, we've got to hurry now because we're running late". Yeah, that's because you spent all the time on telling us how great Microsoft Research is.

    But the PDC is not (only) about the keynotes. It's the sessions. And I must say that the sessions - at least those that I chose - where of high quality. There's a noticeable difference between talks by (certain) members of the "conference circus" (you know, those guys that do nothing else but travelling from conference to conference, but please, I don't mean all of them) and somebody from (or very close to) the development team. For me, the most memorable example for this is the difference between the sessions of the WPF team at PDC05 and virtually any other talk I have heard about WPF since then - which I could rant about again and again, but that's a topic for another blog post.

    In general, I'd say that the sessions (again, this applies only to those I attended) on average were of slightly higher quality than those of PDC05. I judge this by how fast time seemed to fly by, but my memory may serve me wrong, so don't pinpoint me on that.

    To come to a close:

    • Did I enjoy PDC 2008? Yes!
    • Do I think PDC 2008 was worth the expenses paid by my company (Comma Soft AG, we're hiring by the way)? Yes!
      Honestly, if I didn't think so, I simply would have left out the question ;-)
    • Would I choose to endure the grueling long flights in Economy class again to attend PDC 2009? Um... Yes!

    So let's hope I get the opportunity in 2009, maybe we'll see us there!

    P.S. Visual Studio 2010 seems to become a seriously cool release, finally allowing things like this or this (and even more)...

  • Spanish Configuration File for GhostDoc 2.1.3

    After an Italian configuration for GhostDoc there's now also a Spanish configuration available. As mentioned for the Italian version, I cannot comment on the quality. Also, please note that GhostDoc is intended for English documentation, which means that tweaking it for other languages is likely to run into problems sooner or later.

    On the other hand, a lot can be achieved with the help of some clever custom rules, so I recommend to try out the Spanish configuration. As usual, exporting the current configuration as a backup is definitely not a bad idea.

  • Including Twitter Updates in Your Website/Weblog

    Twitter, the service that finally starts making some kind of sense to me, offers various ways of including updates in your own website/weblog. After experimenting with the AJAX version directly on my weblog, I switched to using a separate HTML page shown in an IFRAME tag instead. The result can be seen on this page, it's on the left side under the tag cloud, in the "News" box.

    Just in case somebody else may find this useful, here's a short HOWTO:

    • Download the files twitterUpdates.htm and twitterBullet.gif by right-clicking the links and choosing "Save link as" (or "Save target as", depending on your browser)
    • Inside the HTML file, replace the text YourUserName with your Twitter user name.
    • Upload the two files to some webspace of your choice (let's call it
    • Now insert the IFRAME tag on the page where the updates should appear; remember to edit the "src" attribute to match the location of the HTML file:
      style="width:200px;height:200px;border:1px solid #eaeaea;padding:1px"></iframe>
    • The next thing you'll want to do is to change the colors, width and height, the bullet image, etc.


    [Update 2009-02-09] Thanks to "Tucker" for making me aware of a problem with the links clicked inside the iframe when using Firefox. I'm pretty sure that things were working in IE and Firefox when I wrote the blog post, but in the meantime both the version number of my Firefox browser and (more importantly) the script provided by Twitter have changed, so I cannot check that. Anyway, I have modified the file twitterUpdates.htm and now clicking a link inside the iframe opens a new browser window both in IE and in Firefox.

  • Behavior Driven Design in Bonn

    The .NET User Group "Bonn-to-Code.Net" of Bonn, Germany is happy to welcome Jean-Paul Boodhoo on September 29th for a talk about Behavior Driven Design. The talk starts at 19:00 and will be in English, admission is free (as all of our user group meetings). Information about the location is available here and here (Google Maps in English).

    An Introduction To BDD

    For years many of us in the TDD crowd have been repeating the statement "Tests are documentation". How many of us can truly say that is the case.

    In this session we are going to take a look at how to transform stories and translate them down into human readable code that truly can live as "business documentation". We will also take a look at simple organizational tools that will enable us to generate natural language reports from the tests that we are writing. Tests that can be read and validated by developers and domain experts themselves.

  • GhostDoc Tweaks

    When moving to a new development machine recently, I noticed that I was using a couple of (minor) customizations to GhostDoc on the old machine that are not included in the default configuration. Most of them were rather specific, but three custom rules that may be of general interest are for overrides of the methods ToString(), Equals() and GetHashCode(). Without the rules, the documentation is inherited from System.Object:

    /// <summary>
    /// Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
    /// </summary>
    /// <returns>
    /// A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
    /// </returns>
    public override string ToString()
    /// <summary>
    /// Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>.
    /// </summary>
    /// <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param>
    /// <returns>
    /// true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false.
    /// </returns>
    /// <exception cref="T:System.NullReferenceException">The <paramref name="obj"/> parameter is null.</exception>
    public override bool Equals( object obj )
    /// <summary>
    /// Serves as a hash function for a particular type.
    /// </summary>
    /// <returns>
    /// A hash code for the current <see cref="T:System.Object"/>.
    /// </returns>
    public override int GetHashCode()  

    The comments are OK at first sight, but I don't really like the references to System.Object, I prefer "the current instance" instead. Fortunately, changing this in GhostDoc is pretty easy.

    In general, to replace the generated documentation for a specific method, property, etc., simply define a custom rule and make sure has a higher priority than the rule that would create the documentation otherwise (in the case of the above methods that would be the "inherited documentation" rule).

    The new rules are available as a configuration file you can download here (see the included ReadMe for instructions how to use it).

    Importing this file will not affect other parts of your configuration, but creating a backup of your current configuration is never a bad idea. After the import the rules will automatically have the highest priority, so no other steps are necessary.

  • Notepad3 vs. Notepad2, or The Spirit of Open Source

    I already mentioned Notepad2 in a past blog post: It's a nice little free Notepad replacement that meets my requirements for a program that is similar to, but slightly better than the original, with a fast startup.

    That's why it makes me sad to read about what has happened to the author, Florian Balmer: Somebody took the (GPLed) source code of Notepad2, changed a few lines and released it as an "improved version" called Notepad3 to various download sites. In theory there's nothing wrong about this as the licensing conditions are met, but some kind of unpleasant aftertaste remains to put it mildly.

    Read the full story in a commentary by Florian titled The Spirit of Open Source.

  • PDC2008 - I'll be there!

    The PDC has always been something special to me.

    In 2003 I was following the bloggers late at night in front of my computer here in Germany. Live blogging was fairly new back then and I can remember hitting F5 a thousand times as the news bits from the keynote came in.

    In 2005 I had an absolutely fantastic time in Los Angeles. Hey, I even had the opportunity to tell Anders Hejlsberg that raising events is too complicated in C# in my opinion (his reaction was "Yes, we thought about it, didn't find a solution that's best in all situations and in the end other things were more important"). And I got Brad Abrams and Krzysztof Cwalina to sign my copy of the Framework Design Guidelines book during the power outage on the day of the precon.

    In 2007 I was all fired up to go and was incredibly disappointed when PDC2007 was cancelled.

    Yesterday my company (Comma Soft AG, we're hiring BTW) completed the process of registering me and two colleagues for PDC2008 and now it's "Los Angeles, I'm coming!". Wow, this has been a great week at work for me, after getting my new development machine (Q9450 Quad Core with 8GB of RAM, running Windows Server 2008) on Tuesday.

  • Usage of GhostDoc in Large Corporations

    A message to all developers in large corporations out there: If you try/have to approve the usage of GhostDoc because of company policy, you may get the response that legal problems prohibit the usage as no agreement could be reached with the author (i.e. me). To avoid the impression that I'm trying to rip off your company in any way, I'd like to explain this:

    If a company approaches me asking whether the usage of GhostDoc is allowed for commercial purposes, I point them to the license which clearly states that this is the case. If company policy still requires an explicit statement regarding commercial use, I don't have any problem with that, either.

    But: I will not sign any multi-page legalese for a piece of software that I didn't actively offer, let alone try to sell to a company in the first place. If my freeware license is not compatible with company policy, then that's unfortunate, but it's nothing I will do anything about - sorry.

  • Vortrag "GUI-Design für Nicht-Designer" in Koblenz

    Am Mittwoch, 28. Mai 2008 bin ich bei der .NET Developer Group Koblenz zu Gast, wo ich ab 19:00 einen Vortrag mit dem Titel "GUI-Design für Nicht-Designer" halten werde.

    Der Vortrag richtet sich u.a. an jene Entwickler, die von sich behaupten überhaupt keine Ahnung von GUI-Design zu haben. Die werden durch den Vortrag natürlich nicht automatisch zu perfekten GUI-Gestaltern, aber wenn man ein paar Grundregeln kennt, ist es gar nicht so schwer, zu einer durchaus brauchbaren grafischen Oberfläche zu gelangen.

    In den Beispielen zeige ich GUIs mit Windows Forms, insgesamt geht es aber relativ wenig um konkrete Technologien, sondern eher darum zu lernen, Anwendungen aus der Sicht der Benutzer zu betrachten. Dabei kläre ich u.a. was zugekniffene Augen und Fluchtreflexe mit Usability zu tun haben.

  • Blog Posts are now tagged by Language

    As the number of my blog posts in German language has increased in recent time, I have decided to tag all posts with either "English" or "Deutsch", depending on the language.

    My blogging language for technical posts will remain English, I just want to give those living outside Germany a chance to avoid my announcements of events, availability of slides, etc.

  • AfterLaunch: Nur noch zwei Wochen - jetzt anmelden!

    Es braut sich etwas zusammen in Nordrhein-Westfalen! Anlässlich der Vorstellung von Windows Server 2008, SQL Server 2008 und Visual Studio 2008 haben sich die User Groups aus Bonn (Bonn-to-Code.Net), Köln (.net User Group Köln) und vom Niederrhein (.net developer user group niederrhein) zusammengetan, um unter der Schirmherrschaft des JustCommunity e.V. ergänzend zum offiziellen Launch ein Community-Event der besonderen Art auf die Beine zu stellen:

    • Ein ganzer Tag voller Vorträge, verteilt auf drei parallele Tracks
    • Sprecher, die als Entwickler und IT-Professionals aus ihrer täglichen Arbeit heraus Praxiswissen vermitteln
    • Große Verlosung von Software (Not-for-resale Versionen von Windows Server 2008, SQL Server 2008 und Visual Studio 2008, Lizenzen für CodeRush with Refactor! Pro, Resharper und dotTrace, ANTS Profiler und SQL Compare Pro)
    • Vielfältige Möglichkeiten zum Networking mit anderen Teilnehmern und Firmen aus der Region

    Und das zu einem Preis von nur 8,- Euro, in dem auch noch Verpflegung, Getränke und Parkausweis enthalten sind.

    Launch war gestern - heute ist Praxis


    Freitag 11. April 2008
    KonferenzZentrum im Technologiepark Köln
    Anmeldung und weitere Infos auf

  • Italian Configuration File for GhostDoc 2.1.3

    Even though GhostDoc is intended for English documentation (and there are no plans for future versions to change that), Luca Tagliaferri from Italy has created an Italian configuration file for GhostDoc 2.1.3. While I cannot comment on the quality (I haven't tried it, non parlo l'italiano), I recommend checking it out here. Just be sure to export your current configuration as a backup.

  • An Award for Two Years of Bonn-to-Code.Net!

    Wow, that came really unexpected: at a company meeting last Friday I received an award for organizing and leading the .NET User Group Bonn called "Bonn-to-Code.Net" (all credits for the glorious pun go to Jens Schaller).


    Comma Soft AG has been very supportive in the past two years by letting the monthly meetings taking place in the conference rooms, but other than that the user group is something I'm running in my spare time - that's why this award was such a (nice) surprise.

  • Mysterious Mail / The Final Mill / Van Velsenmeer

    To whom it may concern: Nice idea, sloppy execution.

    Update 2008-02-09: As this thing is getting more and more elaborate, I'd like to clarify the "sloppy" comment. While I do acknowledge the overall effort you (whoever you are) put into this ARG, I must say that the initial impression wasn't favorable in regard to the level of quality - the English texts on the websites of two supposedly no-nonsense companies/organizations really would have benefited from some proof-reading. In a game where the goal seems to be the recruiting of smart people, you should always keep in mind that everything you do reflects on the company behind the game. Anyway, there are people (with way too much time on their hands) working on the various riddles and puzzles and I honestly wish you luck that at least one of them actually ends up working for you in the future.

  • 1st Place for EventFilter!

    The winners of the programming contest over at the German website have been announced – my entry EventFilter was chosen by a jury from almost 100 entries to be the winner.

    EventFilter is a generic helper class for dealing with events that may be raised multiple times in rapid succession, when only the last event of a “burst” is of interest.

    You find the English version in this blog post I published recently.

  • GhostDoc 2.1.3 Released

    GhostDoc is a free add-in for Visual Studio that automatically generates XML
    documentation comments for C#. Either by using existing documentation inherited
    from base classes or implemented interfaces, or by deducing comments from
    name and type of e.g. methods, properties or parameters.

    20080106_GhostDocQuick Facts

    • Version 2.1.3 is a minor bugfix release, fixing problem with documentation for specific operators and import/export of partial configurations.
    • Download on the GhostDoc Website
    • Users of earlier versions: Please read the ReadMe on upgrading!

    What’s New in GhostDoc 2.1.3:

    • Fixed: No documentation was generated for the operators "&", "<" and ">".
    • Fixed: Rules for classes, events, interfaces and structs were not shown in the export dialog, making it impossible to exclude them from an export.
    • Changed: Tags for empty rule collections in config files are now removed (cosmetic change, does not break compatibility of the file format).
    • Added: Some "of the" triggers and prefixes, "no the" words and acronyms.

    Note that VB.Net support is turned off by default and has to be turned on in the configuration dialog.

  • GhostDoc: A Look Back at 2007

    Here are some statistics for my Visual Studio add-in GhostDoc for the year 2007.

    Downloads for Visual Studio 2005

    • Version 1.9.5 (released back in 2006): 15294
    • Version 2.0.0 (released 2007–05–01): 11395
    • Version 2.1.0 (released 2007–06–24): 2351
    • Version 2.1.1 (released 2007–07–04): 24909
    • Version 2.1.2 (released 2007–11–25): 4873
    • Total: 58822

    Downloads for Visual Studio 2008

    • Version 2.0.0 (released 2007–05–01): 444
    • Version 2.1.0 (released 2007–06–24): 153
    • Version 2.1.1 (released 2007–07–04): 3202
    • Version 2.1.2 (released 2007–11–25): 3140
    • Total: 6939

    Downloads for Visual Studio .NET 2003

    • Version 1.3.0 (released back in 2005): 4409

    Donations by chosing an item from my Amazon WishLists (US, UK, DE):

    • Total: 7 (a huge Thank You to you guys and gals!)