Monthly Archives: October 2005

My main Windows XP installation at home is due for a reinstall because of excessive installations of alpha and beta versions. But, I decided to extend the life of this two year old beast, because reinstalling all your apps, reactivating Windows XP and Office 2003 and several other applications is a lot of work.

So I first started with deinstalling the SQL Server 2005 Standard Edition CTP version I had installed. I read somewhere that the tool to uninstall beta and CTP builds of VS 2005 and .NET Framework 2.0 does not fully support deinstalling SQL Server 2005 CTPs. After the SQL Server 2005 deinstall I ran the tool. This worked without problems.

I found some .NET 2.0 related stuff didn't get removed, so I removed them manually:

  • Guidance Automation Toolkit (uninstall did not fully work)
  • Composite UI Application Block
  • WinFX SDK
  • WinFX Visual Studio Extensions

This is what I installed (in order):

  1. SQL Server 2005 Developer Edition with Analysis Services, Integration Services and Reporting Services.
  2. SourceSafe 2005
  3. Visual Studio 2005 Team Suite (Trial Version)
  4. Team Foundation Client
  5. Office Visio for Enterprise Architects

I had a couple of problems during this process:

  1. At the first attempt to install SQL Server 2005 I used a service account instead of the local system account for the SQL services. The installation of the database engine failed. I temporarily shut down my Kerio Personal Firewall and used the local system account for the second attempt. This time the engine installed without errors.
  2. SourceSafe installed without problem.
  3. I could not select a partition to install VS 2005 on, because setup complained that Visual Studio 2005 Premier Partner Edition was already installed on the C: partition. A little investigation showed that this is the IDE for SQL Server Analysis Services, Integration Services and Reporting Services. This IDE wasn't a trial version, but after the installation of Team Suite these SQL Server developer products were integrated in the Team Suite Trial Edition. I wonder if everything becomes disabled if the 180 day trial period runs out.
    During startup VS 2005 complained about a left-over package from the Guidance Automation Toolkit. You can tell VS to skip loading it when it complains, but then it reappears when you reset your settings. So I removes some registry keys to stop it from appearing ever again.
  4. I had trouble locating the "Tools | Connect to Team Foundation Server" menu-item in Team Suite that I was familiar with from Beta 2 (*). It turns out that you have to install Team Foundation Client from the Team Foundation Server installation medium to get the Team Explorer functionality ( I think it is lousy that the Team Suite and role-based Team Editions don't have this functionality out-of-the-box. The Team part in their name is really confusing, because Team Explorer can also be installed on top of the Professional and Standard edition of Visual Studio 2005. This gives them the same team functionality.
  5. Office Visio for Enterprise Architects installed without problem. But this English version hijacked my Dutch version of Visio 2003.  Both Visio Start menu items start the Enterprise Architects version.

A thing I might try in the future is to let Windows Installer repair the SQL Server installation. I wonder if this will turn the VS 2005 IDE back to the original non-trial state. I will probably have to reinstall VS 2005 anyway if my employer is kind enough to provide me with the non-trial version of Team Suite or manages to transition my partner based MSDN Universal Subscription to one of the role-based Team Editions.

All is well that ends well. Everything is running fine now, so I am glad that I didn't reformat my hard drive just yet.

(*) When attempting to locate the "Connect to Team Foundation Server" menu item, I noticed that my user settings and my recent project list from Beta 2 were still present in the RTM version. I ran the undocumented devenv.exe /ResetUserdata from a Visual Studio 2005 Command Prompt to clean those out.

1 Comment

For the poor souls that only read BloggingAbout.NET, I will be the first to break the news: the .NET Framework 2.0, Visual Studio 2005, SQL Server 2005 and related products have been Released To Manufacturing.

If you follow the MSDN Blogs you couldn't have missed the news and I am sorry to repeat what many others have already shouted out in joy.

Depending on your MSDN Subscription level you can download one or more of the following products from MSDN:

  • Visual Studio 2005 Professional Edition
  • Visual Studio 2005 Team Suite
  • Visual Studio 2005 Team Suite (trial version)
  • Visual Studio 2005 Team Architect Edition
  • Visual Studio 2005 Team Developer Edition
  • Visual Studio 2005 Team Test Edition
  • Team Foundation Server - Beta 3 Refresh
  • Visual Studio 2005 Team Test Load Agent
  • Visual Studio 2005 Tools for the Microsoft Office System
  • Visual SourceSafe 2005
  • Visio for Enterprise Architects (VS2005)
  • SQL Server 2005 Developer Edition

At the moment not all products have shown up in MSDN Subscriptions in the Netherlands. Past experience learns that different regions in the worlds have differing views of the available downloads as the binaries are distributed among the many download servers in Microsoft's datacenter.

Various versions (x86, x64, IA64) of the .NET Framework 2.0 redistributable and the J# 2.0 runtime components can be downloaded from the Microsoft Download Center. You can also download the .NET Framework 2.0 SDK there for free if you like working on the commandline and don't want to use Visual Studio or one of the low-cost Express Editions.

1 Comment

You gotta love Microsoft for this one. All PDC05 sessions, panel discussions and symposia can be viewed online for free for the coming six months. Better still, you can download the PowerPoint slides and the entire presentations for offline viewing. This is a screenshot of one of the PDC05 sessions in Internet Explorer:

Screenshot of online viewing of a PDC05 presentation (click for larger version)

You can see both an audio/video stream and the slides simultaneuosly. For demos the slides are swapped for the captured video of the demo computer:

Screenshot of online viewing of a demo during one of the presentations at PDC05 (click for larger version)

It's almost as good as being there 😉 More details can be found on Michael Swanson's blog.

1 Comment

Bruce Eckel wrote about the impossibility to implement mixins in Java using generics. This made me think back to my C++ days and if and how this can be done in (future versions of) C#.

Let me first start with a problem statement. Say you want to adorn a class with a timestamp. Meaning when you create an instance of such class, you want to automatically have it stamped with the time of its creation. You want any instance of that to have a read-only Timestamp property of an appropriate type (say System.DateTime in C#).

There are a couple of cases to consider:

  1. You author both the behavior and the classes and just want to save on typing duplicate code.
  2. You want to author timestamp behavior for a library. Consumers of that library can mixin the behavior to classes they author.
  3. You consume existing classes you cannot change and you want to add the timestamp behavior to them.

Let’s start with the most straightforward approach. Just whip up an abstract base class called Timestamped and derive your classes from it.

      public abstract class Timestamped

            private DateTime _timeStamp = DateTime.Now;

            public DateTime Timestamp
                  get { return _timeStamp; }

      public class TimestampedPerson: Timestamped


Of course, the usual drawbacks apply. The CLR, and thus C#, doesn’t support multiple inheritance, so this precludes you from deriving your class from other base classes. Also it doesn’t work for existing classes.

Say you have an existing Person class:

      public class Person
            private string _name;
            private int _age;

            public Person(string name, int age)
                  _name = name;
                  _age = age;

            public string Name { get { return _name; } }

            public int Age { get { return _age; } }

Since you cannot derive from Timestamped you can add the behavior by deriving from Person.  You might hope to solve this in C# 2.0 once-and-for-all using generics. Just declare the following generic type:

      public class Timestamped<T> : T
            private DateTime _timestamp;

            public Timestamped()
                  _timestamp = DateTime.Now;

            public DateTime Timestamp
                        return _timestamp;


So you can now have a Timestamped<Person>. Unfortunately generics in .NET 2.0 do not allow you to derive from a bare type parameter. Also you would run into the problem of how to construct an instance. Person does not have a default constructor and Timestamped<Person> does not have a constructor that takes a string and an int and passes it along to the base class constructor Person(string name, int age). You could add such a constructor to Timestamped<T> but then it would no longer be generic. Even if this would be possible, what if the Person class was sealed? This precludes you from deriving from it.

Note that C++ templates do allow you to derive from the type parameter. C++ does suffer from the constructor problem. Nevertheless this is a widely used approach for mixins.

Extension methods

What about extension methods? In C# 3.0 it will be possible to add methods to existing classes. Olaf Conijn noted that this is similar to mixins. Because there are no extension properties announced as of yet for C# 3.0, I have to use a GetTimestamp method instead of a Timestamp property. So what about:

      namespace Stamp
            public static class TimeStampExtension
                  public static DateTime GetTimestamp(this object o)
                        return DateTime.Now;


If you now include using Stamp in your code, every object gains the GetTimestamp method. So I could write:

                  Person jan = new Person("Jan", 30); 
Console.WriteLine( jan.GetTimestamp() );


But it is also pretty clear that this doesn’t give us what we want. The GetTimestamp method returns the time at which it is called. It has no way of knowing at what time the Person  instance on which it was called was created. The reason is that extension methods cannot add state to an object. So this rules out extension methods for this type of mixin.

I have seen other approaches for mixins in C# using a whole lot of proxy and interception magic, but I think this just looks ugly.

It’s not clear to me if there is more that hasn't been announced for C# 3.0. I hope Microsoft will find a way to make mixins first class citizens in the language.

Congratulations to the WinFX teams. The WinFX runtime components have passed the Windows Quality Gates and are now included in the main Windows Vista build tree. This means every release of Vista after the 5231 build (October CTP) will have a corresponding WinFX build. The process of getting into the main Windows tree is a so-called Reverse Integration (RI).

Probably one of the things making this possible is that from now on every Windows Vista build includes the RTM version of .NET 2.0. Scott Guthrie mentions an ASP.NET sample built using the final release of VS 2005 and ASP.NET 2.0 on his blog. So .NET 2.0 has probably been declared "gold".

I wasn't too happy to discover that WinFX wasn't part of Windows Vista Beta 1. Now I hope that WinFX will be installed by default on Windows Vista just like the .NET Framework. This will make deployment of WinFX applications easier on Vista. Also let's hope Vista will include some WinFX applications out-of-the-box.

Raymond Chen's post on an RI makes me really curious about what his team has been working on. If you read his blog you can guess that it is definitely not based on managed code and it has something to do with the shell. Could it be the Vista Sidebar?

I am very much looking forward to the next CTP of Windows Vista.

1 Comment

What's non-biological memory? Books... journals... web sites... blogs... e-mail stores... you name it. Anything that you can access that extends your biological memory, i.e., your brain. A blog post by Steve Maine provided me with some food for thought.

Reflecting back on the last couple of months, I notice that my smartphone and flat-fee wireless Internet access really increased my usage of electronic forms of non-biological memory. And an ever increasing part of my non-biological memory is Gmail. I regularly e-mail pieces of information to myself to make it easier to remember them. A pointer (1-4 words) to that information takes less space in my brain.

I store addresses and telephone numbers of my friends and family on my Pocket PC Phone now instead of on paper. Just a few clicks and TomTom Navigator will direct me to such an address.

I also use my non-biological memory for things I cannot store in my brain. Let me give an example. I am a careful traveller. So I used to take Xeroxed copies of my passport and driver's license with me in case the original documents were to be stolen or lost. No more! I scanned those documents and e-mailed much better-looking electronic copies to myself. One less thing to remember when going on a trip. When the need arises I just access my Gmail account and search for "paspoort"  (Dutch for passport). BTW: One of the great things of Gmail is the thumbnail view of image attachments. They fit in the small screen of a Pocket PC.

The scary part of increased usage of non-biological memory is increased dependence on it. I fear the moments the battery runs out on my smartphone or when I have no Internet connection. The moment will come that I will be lost on the road when the TomTom software crashes (as regularly happens). For my recent holiday in the US I took some old-fashioned road maps with me 😉

Also there might be some downsides to the fact that Google is indexing parts of my extended brain. Who knows what they might be doing with that information.

How are you coming to depend on your non-biological memory?

Today I found the time to get my hands dirty on C# 3.0 and LINQ. At PDC05 I went to a couple of sessions on these topics and I read the excellent whitepaper on the LINQ project by Hejlsberg and Box. But I was too busy attending other sessions to try out the hands-on-labs. The hands-on-labs are available for download as Word documents containing instructions.

During download and installation of the C# LINQ Tech Preview I read a most excellent blog post by Ian Griffiths on Expression Trees. If you are interested in C# 3.0 go read it, if you haven't already done so! It talks about the parts of C# 3.0 that impressed me the most.

After the installation of the C# LINQ Tech Preview I hit a little snag. The new project templates for LINQ didn't show up in Visual Studio. An investigation with File Monitor showed that the templates were installed in a subfolder of My DocumentsVisual Studio 2005TemplatesProjectTemplates. It turned out the user setting for the user project templates location in Visual Studio pointed to the wrong location. It pointed to a subfolder of My DocumentsVisual StudioTemplatesProjectTemplates (so without the 2005 in the name). I have installed a lot of CTP and beta builds of Whidbey in the past and this folder probably changed sometime ago. I didn't notice this problem before, because WinFX installs its project templates elsewhere.

So now I am all set to start experimenting. I also want to check out VB 9.0, because of its support for dynamic typing and XML. I am impressed by anonymous classes and extension methods in C# 3.0. They alleviate some of the need for dynamic typing. But is it enough?

And I also want to check out Atlas and Windows Workflow Foundation. Sigh, so much to explore, so little time...


1 Comment

Finally found the time to give Microsoft Max a spin. Dennis blogged about this WinFX application on the day of its release. That day I saw it demoed at the PDC05 but couldn't try it out myself.

I had to first uninstall Beta 1 of WinFX, its SDK and the Visual Studio 2005 integration from my computer. Max uses the September CTP of WinFX. Fortunately that version still runs on Beta 2 of the .NET Framework 2.0, so I didn't have to uninstall that. The setup for Max automatically downloads and installs the correct versions of .NET 2.0 and WinFX when not already present.

Picture of Microsoft MAX showing some three of my USA photographs (click for larger version)

Max really showcases the new possibilities for UI with Windows Presentation Foundation and sharing photo presentations through Windows Communication Foundation. It is hard to judge exactly how difficult it was to create such an application because Microsoft has not released Max' source code ;( Since Max is said to be a codename, I suspect Microsoft wants to productize it (and give it away for free to genuine Windows users) and will never release the source code.

A lot of people were not impressed by Max because there are better photosharing applications out there. I think that is not the point. Max is about how relatively easy it is to create such an application using WinFX. Of course it can be done using other technologies, but Microsoft claims that will take considerably more effort. And I believe them.

And yes, Max is a memory hog, but remember it runs on pre-release software that's not fully optimized yet.


1 Comment

T-Mobile has a great offer in the Netherlands: unlimited GPRS and WiFi access on a smartphone for only € 9.95 a month (that's about $ 8.65). I just signed up because I have a qualifying smartphone (Qtek 2020i) and T-Mobile subscription and I think it's a really compelling offer. Admittedly the number of WiFi hotspots is still quite limited and GPRS is not very fast, but still good value for money.

Last month I had to call 0900-9292 to get information about the departure time for a bus. Just that call cost me a long wait and € 6.50. Now I can get the same information faster and cheaper if only would be more PDA friendly ;(

But for instance NU.nlGmail and Bloglines have excellent PDA versions of their sites.

More details on this offer can be found on the T-Mobile site (in Dutch).

1 Comment

Today I checked the referrer logs for my blog entries about the PDC. I noticed that two of my PDC posts were not syndicated on PDC Bloggers.NET. Although evidently about the PDC, they were apparently ignored by the editors of PDC Bloggers.NET.

Of course I can can only speculate about the cause of this, but I noticed that these two posts were my two most critical posts about the PDC:

I sure hope this was just a coincidence and not some sort of censorship. In the FAQ the site states that

"How do you choose posts for the main aggregated feeds?

Most posts that appear in your blog that relate to the Microsoft PDC or technologies discussed at the PDC will appear in the feed as long as we can determine they are in fact about the event. Mentioning the Microsoft PDC in the post will help. There are a few exceptions, for example, very short posts will probably not be picked for the main feed."

Although the PDC Bloggers site is said not to be run by Microsoft, such sneaky censorship by entities not governed by Microsoft is not without precedence. The proposal for a Birds of a Feather session about Mono at the PDC was quietly ignored by INETA. More details can be found on this blog entry by Miguel Icaza. I find that sneaky because Microsoft and INETA pretended that all proposals would be up for voting by PDC attendees. Final selection would be based on popularity. The Mono proposal never made it to this voting process.

[Update 2005-10-16: I received an apology from an aggregating editor of because the two posts in question were overlooked by mistake.]