Roland Weigelt

Born to Code

  • Sprecher für WPF/Silverlight Konferenz in Köln gesucht

    Die .NET User Groups Bonn (Bonn-to-Code.Net) und Köln (.net user group Köln) veranstalten am 15. Mai 2009 in Köln in den Räumen der neuen Microsoft-Niederlassung ein gemeinsames Community Event zu den Themen WPF und Silverlight – die dotnet Cologne 2009.

    Das Ziel ist, den Teilnehmern (ca. 150-200) zum Selbstkostenpreis einen ganzen Tag mit praxisnahen Vorträgen (verteilt auf zwei Tracks) inkl. Verpflegung und einer abschließender Verlosung von Sachpreisen zu bieten.

    Dafür suchen wir noch Sprecher, die dem Publikum zeigen, dass WPF und Silverlight mehr sind als nette Spielereien. Die zeigen, wie aus technischen Features konkreter Mehrwert in echten Anwendungen in richtigen Projekten wird.

    Bis zum 8. März 2009 läuft der "Call for Papers", bei dem Vorschläge für Vorträge bei der dotnet Cologne 2009 eingereicht werden. Die Länge einer Session (Vortrag plus Fragen) beträgt 60 Minuten.

    Bitte schickt Eure Vorschläge mit

    • Titel des Vortrags
    • Abstract
    • Kurzbiographie
    • E-Mail Adresse
    • optional: Website/Blog

    an orga [at] dotnet-cologne.de.

    Die Veranstaltung ist als Event von der Community für die Community so kalkuliert, dass wir leider keine Honorare für Sprecher zahlen können, allerdings übernehmen wir gerne für Sprecher mit einer etwas weiteren Anreise (und ggf. Übernachtung) die Reisekosten bis zu einer Höhe von 200,- Euro.

  • Thoughts on Three Monitors for Developers

    For developers, using two monitors almost has become mainstream. Modern video cards tend to have two outputs, a second monitor usually is available after upgrading to a larger screen, and most software - including operating systems - doesn't have any major problems working with multiple displays. And it's pretty safe to say that the majority of developers who have experienced the productivity gain of a two-monitor system (when used properly) don't want to go back.

    The next question obviously is whether - and how much - a third monitor would help. I have two 24" TFTs both at work and at home and I'm using an additional display (my old 19" TFT) at home for a couple of months now. After spending three weeks on vacation at home and having finished the second week back at work I thought that now is a good time to compare the two setups and share my experiences.

    How do I hook up a third monitor anyway?

    Those of you who are interested in a third monitor may already have read about the problems with adding a second PCIe video card to your system - some combinations work, others don't. If you're like me and want an easy, low-risk solution, you should take a look at an USB graphics adapter.

    I chose an EVGA UV Plus+ UV16 that has a DVI port and a chipset by DisplayLink for which 64bit Vista drivers are available. It may not be suitable for hardcore gaming, and HD resolution videos show a slight stutter if you're looking closely. But Aero and applications are working just fine. If you watch e.g. the rotation of the chess board in Chess Titans, you couldn't tell that you're watching it on a display connected via USB.

    Regarding compatibility, I have to switch off the UV16 graphics adapter for running Flight Simulator X (switching off/on is easy via a tray icon), but I don't have problems with other games I've tried: Prince of Persia, Mass Effect and L4D run happily on my primary display (driven by a Geforce 8800 GTS 512). All in all I'm very happy with the UV16 and can recommend it.

    Now, what is it like working with a third monitor?

    To be honest, it takes some time to get used to. One thing I had to struggle with at first was caused by the position of the mouse. I'm right-handed and both at work and at home I have one 24" TFT right in front of me as my primary screen, and another 24" TFT as a secondary screen to the right, at an angle of about 40 degrees.

    When I turn to the right, the secondary screen feels equally "near" to me as the primary screen. But when I turn to the left, towards the third screen, that screen feels more "distant" than the other two because I'm turning away from the mouse. This is strange at first, but in the end I got (kind of used) to it.

    And what about productivity?

    Don't expect a similar effect like when upgrading from one to two monitors. And it may happen that you don't develop a "couldn't live without three" feeling at all - after two weeks back at work with "just" two monitors, I know I don't. Sure it's nice to have more space for help files and web pages, but I have observed that I tend to

    • either work with two instances of Visual Studio side-by-side (e.g. for moving over code step by step from a sample, or design time debugging),
      or
    • do some research-heavy development in a single (visible) Visual Studio instance (with web pages and help files on the secondary display).

    Well, what is it good for then at all?

    For me personally, the primary reason for adding a third monitor was my hobby of working with video. I use the third screen as a preview device, and with the preview in Sony Vegas never running 100% in real time, I can't tell what is causing the occasional stutter anyway (USB adapter or video preview). Having the other screens available completely for the timeline and tool windows is great.

    Another thing I like about a third monitor is that I have enough space for things like Twitter, Messenger, Skype. But this is at home, where I actually want to notice updates immediately and I'm open to distractions, contrary to the situation at work.

    Having a third monitor dedicated to a remote desktop session or a virtual machine may be nice under certain circumstances, but with sufficiently large primary and secondary screens, I haven't encountered situations where three screens would have been much better than two. Let's put it this way: it's not as if going multi-monitor would suddenly take away the feature of switching between windows...

    So what do I recommend?

    Here's my recommendation regarding multi-monitor systems:

    • Before even thinking about three screens, make sure you have two large screens of equal size. Being able to move an application from the primary to the secondary screen without fiddling around with the layout inside the application window (think Visual Studio) is worth a lot.
    • If you already have two large screens, a third monitor is standing around collecting dust and you have enough space on your desk - you definitely could do worse than spending your money on a USB graphics adapter.
    • But if you have to actually buy a third monitor, then you really should think about how you want to use it. Unless money isn't an issue and you want to impress people (in this case make sure that your computer emits the typical sounds of computers from movies and TV ;-). But for everybody else, watch yourself at the computer - where is your focus, how long do you need a certain application, how often do you have to switch between windows, which information do you need to be able to view in parallel, etc. And then make a buying decision.

    As you can guess, this is my completely personal opinion, not based on any scientific research, so as usual YMMV. If you have any questions, comments or suggestions, feel free to leave a comment. Do you agree? Or do you organize your work in a different way across monitors so that three monitors notably increase your productivity?

  • 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 http://www.example.com/example)
    • 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:
      <iframe
      src="http://www.example.com/example/twitterUpdates.htm"
      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.