February 2006 - Posts

Thinktecture has released version 0.6 of their Web Services Contract-First tool. It is the Visual Studio 2005/.NET 2.0 version of their WCSF add-in for Visual Studio. It also features a command-line version.

Contract First is the best approach to design and develop web services whenever interoperability matters.

You can find more information about this excellent tool and download it from thinktecture's web site.
[Update 2006-04-18: Removed obsolete information from this blog entry. The latest information about the RollingFileTraceListener and the download link can always be found in this article on my blog.]

In January 2006 Microsoft released version 2.0 of the Enterprise Library. The Logging block now uses the trace listeners infrastructure of the .NET Framework 2.0 instead of "logging sinks". Read more about this change. The separate Configuration block is gone. Enterprise Library now builds on System.Configuration.

A problem with the 1.0 and 1.1 releases of the Enterprise Library was that these releases didn't ship with roll-over capabilities for log files. Log files continue to grow unchecked. Hisham Baz developed an extension for these versions called the Rolling File Sink. This custom logging sink allows you to set size and age limits for log files. I've blogged about a problem I had with this extension here and here.

Inspired by Olaf Conijn's Enterprise Library Extensions, I decided to create an EntLib 2.0 version of the Rolling File Sink. My version is called the Rolling File Trace Listener. You can find the documentation and the download link for the sources in this article on my blog. The source code and documentation is provided "AS-IS". Feel free to change and/or extend it.

The VS 2005 solution and projects are set up in such a way that is is easy to add additional extensions. They follow the structure of the EntLib 2.0 sources. My extension also comes with a test application to stress test the log file roll-over and the thread safety of the code. It logs 10,000 messages. First from a single thread and after that from dozens of threads simultaneously. Both test cases take a couple of seconds to run. You can edit the app.config file of the test application (either by hand or by using the Enterprise Library Configuration tool) to try out different settings.


The new interactive-TV (iTV) website of the Rabobank has gone live this week. In this case going live, means being featured in the Windows Media Center Online Spotlight for the Netherlands. Check out this screenshot:

Screenshot of the Rabobank TV web site featured in the Windows Media Center Online Spotlight

You can see the URL of the Online Spotlight in this screenshot, but you must have a Media Center PC to view it as in the screenshot above. This page will redirect any other user agent to the Media Center product page on the Microsoft site.

Or you can do as I did: trick IE6.0 to sent a HTTP user-agent header with a value of something like Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Media Center PC 4.0; .NET CLR 1.0.3705; MediaCenter 5.1.2710.27320). You can fake the user agent string in Firefox through the User Agent Switcher Extension, but the Online Spotlight page will look absolutely horrible in Firefox.

Rabobank is the first Dutch bank with a TV banking site. In the UK TV banking has been available with some banks since 1999.

If you would like to see what Rabobank TV looks like, you can access it directly through itv.rabobank.nl. This will even work in Firefox, Opera or Pocket Internet Explorer without faking your user-agent string! I haven't tested in Safari, because I don't have a Mac.

Here is what the site looks like in Firefox:

Screenshot of Rabobank TV (itv.rabobank.nl) in Firefox

At the bottom it has a disclaimer that says (translated from Dutch) "Rabobank is optimized for Windows Media Center and may not work optimally in your browser". The disclaimer is there, because the site does provide a better user experience in Windows Media Center and IE6.0. However all content, including video, is accessible from all devices that support XHTML 1.0. One caveat: video is currently only available in Windows Media Video 9 format, so your device has to support this format.  For example, it works on my Pocket PC using WiFi.

Rabobank TV consists of two parts: the content site http://itv.rabobank.nl/ and the secure TV banking site https://itvbankieren.rabobank.nl/. The content site was built using ASP.NET 2.0 on the Windows platform by LogicaCMG for the Rabobank. The secure site uses another technology on a non-Windows platform and was built internally at the Rabobank. The graphical design for both sites was done by  another company. If you are a customer of the Rabobank the TV-banking site allows you to check up on your accounts, pay bills, move money from your savings account to your checkings account, etc. All using a remote control. Using a keyboard or mouse is optional.

The TV banking site is currently only accessible using Windows Media Center. I wasn't deeply involved in the development and design of the secure site, so I will not talk about the technology used by the TV banking site.

Although Rabobank TV has been optimized for Windows Media Center/IE6.0, the content site is quite unique in how it is built. I am not aware of any other Media Center hosted HTML application that even remotely works in other browsers. Rabobank TV works in Firefox because of the requirement that  Rabobank TV should be able to support other iTV devices with only a couple of weeks of additional development effort. Exampes of iTV devices are set-top boxes that are distributed by cable companies. The more advanced versions have embedded web browsers that can display content from the Internet.

The magic of our solution: using XHTML 1.0, CSS 2.1 and unobtrusive JavaScript. Of course that's no real magic for developing ordinary websites, because it's the current best practice.

However, developing for Windows Media Center has some unique challenges. One reason is that its underlying browser is IE6.0 (with its usual CSS non-conformance problems). This is amplified by some WMC specific issues that force us to use IE's quirks mode. Another reason are the bad examples in the Windows Media Center SDK provided by Microsoft. All Media Center websites that I am aware of follow these bad practices. For example, check out Reuters, Nederland 4, Free Record Shop and Fox Sports in IE6.0 and Firefox.

More details on our solution to follow in an upcoming blog post. I'll end with a screenshot of a Rabobank TV page showing realtime(*) AEX quotes:

Screenshot of page in Rabobank TV showing realtime AEX quotes data

(*) In the middle of the night the difference between delayed stock quotes and realtime quotes is not that impressive ;)


Yesterday the Release Candidate for Team Foundation Server was released on MSDN Subscriber downloads.

We used the Beta 3 Refresh version for source control for the Rabobank TV project at LogicaCMG since Beta 3 Refresh already came with a Go-Live license. I also have a Team Foundation Server installation running in a Virtual PC image for research purposes. In preparation for upgrading our "production" server I just upgraded this installation to the Release Candidate. Rob Caron has a short version of the upgrade procedure on his blog but I also read the longer Upgrade Guide. This guide is included in the upgrade utilities package that Rob links to.

The upgrade went smooth in one try. After some tests I took the the installation survey and I submitted my upgrade logs to Microsoft. The first 300 people to do this are eligible for receiving a Team Foundation Server T-shirt.

I checked if it had become easier to label files. One of the first things I noticed in the Release Candidate of Team Explorer is that it is easier to label a set of source-controlled files. You can now first select a folder or a set of files and then type in the details for the label. The old implementation made you type in the label data first and in the next step had forgotten on which folder you selected "Apply Label" so you had to select it again.

Next I wondered if viewing labels had also become easier. I knew how to do it using this procedure:
  • Select "Get Specific Version" on a folder or file.
  • Change the version type to "Label" in the "Get" dialog box that pops up.
  • Click the button with three dots after the input field. The "Find Label" dialog box pops up.
  • Optionally select a project and click "Find". You now get a list of labels.
You can see these dialog boxes  in this screenshot:

Screenshot of finding a label in Team Foundation Server

Note: This TFS source control repository only contains the latest version of Rabobank TV, that's why you see only one label.

Today I found an alternative way is to use the menu item "File | Source Control | Label | Find label", as documented in MSDN. This immediately pops up the "Find Label" dialog box. A blog entry by Brain Harry from November 2005 already describes this method. I guess it must have been in Beta 3 Refresh all along. So his fear that this option wasn't really discoverable turns out to be true. Brian also explains why it is very difficult for Microsoft to include label information in  the "View History" information as SourceSafe does. TFS labels are not really point-in-time labels as they were in SourceSafe.
The new www.rabobank.nl web site has just gone live. I am proud to have been one of the members of the team at the Rabobank that developed this web site. The development of this site was the project I blogged about back in August 2005. Rabobank is one of the largest Dutch banks. It was the first Dutch bank with a website in 1994. Rabobank has the largest online-banking customer base in Europe.

This is what the new site looks like:

Screenshot of the new www.rabobank.nl web site

As you can see, this site looks great in Mozilla Firefox. But it also looks great in Internet Explorer 6.0. The site is rendered using XHTML 1.0 Strict. It uses CSS 2.1 and JavaScript in a non-obtrusive way. That means the site degrades gracefully if JavaScript and/or CSS are turned off or not available in the browser. The site is also highly accessible for people with disabilities ("drempels weg" in Dutch). This can best be seen by turning CSS and JavaScript off using the Web Developer Toolbar extension for Firefox. Without CSS and JavaScript the page is rendered as:

Screenshot of unstyled Rabobank homepage

The home page is now just one long column with lots of links. In the picture above I have split up the text in three columns for easier display. What was displayed as a drop down list box in the first screen shot (with CSS+JavaScript turned on), is just a bullet list of links in this rendition. And that is just what a list of links should be semantically. So if you look at the HTML source for the page you see something like: <ul><li><a ..>..</a></li><li>..</li></ul>. When JavaScript is enabled, this list is transformed to a drop down list box. If you look really carefully at the two versions, you can actually see some accessibility issues (all of the same kind). Guess which one? The cause is probably that the content editors that maintain this page (using a Content Management System) mostly look at the stylized version. The fix should be easy.

Most pages on the new site are static content (XHTML files) on the webserver. Most dynamic pages are rendered using ASP.NET 1.1. One of the larger modules that was developed in .NET is the "Naar uw Bank" ("To your Bank" in English) module. It has mapping functionality and you can get directions to get to a Rabobank office near you (or on the other side of the Netherlands if you like).

Screenshot of the Rabobank "Naar uw bank" module that was developed in ASP.NET 1.1

Above you can see a page from "Naar uw Bank". It uses Lokatienet web services (server-side) to get the directions and the URL of  the map. The mark up for this page is a combination of dynamic mark up generated by ASP.NET and a navigation context page. The navigation context page is the static content page from the Content Management System that linked to this dynamic page. In this case the navigation context page is http://www.rabobank.nl/particulieren/lokalebanken/uhr/. Check out my blog post from August 2005 for an explanation of how this works.

Thanks a lot to all of the project members at the Rabobank for making the new www.rabobank.nl possible. I have learned some good lessons during this project that I could apply to the development of another website for the Rabobank. That website will soon go live as well. Going live in this case means that it will appear in the Online Spotlight of Windows Media Center for the Netherlands. This web site is the Windows Media Center project I blogged about. More details about Rabobank TV (and the URL ;) to follow in the near future. If you are really good with DNS queries for the rabobank.nl domain you can already look at the site. It has already gone live in the sense that it is available if you know the URL.