January 2007 - Posts

The global launch of Windows Vista yesterday brought a large number of updates with it. Yesterday I installed most of these updates (*). ATI released a new set of Catalyst drivers for my Radeon video card. And Microsoft made Vista drivers available for my new Windows LifeCam.

After these updates I noticed that my computer successfully goes into and comes out of hibernation. Previously I experienced severe problems with sleep and hibernation. These are gone now.

There is one major issue still bugging me. When Vista comes out of sleep or hibernation it cannot connect to the Internet. The wireless connection with my WiFi access point becomes available again, i.e., it shows up as connected. But Windows Vista says it has no Internet connectivity and indeed I cannot ping my SpeedTouch 716 ADSL modem. Running "Diagnose and repair" does not help. The only option to get network connectivity back is to disconnect from my wireless network and manually connect again.

All in all, I am making progress and I do not regret the switch from XP to Vista like Dennis does. I am also happily using Vista at work.

*) Out of the available updates, I installed only the Dutch language pack and not all other exotic languages that became available ;) But where is the Dutch text-to-speech version?! And will there be any other English language voices other than Microsoft Anna?!

I received a question through the contact form about the usage of my WCF ServiceProxyHelper. That blog post shows the code for the LogicaCMG.ServiceAccess.ServiceProxyHelper<TProxy, TChannel> class. This class helps you in creating a disposable wrapper around a generated Windows Communication Foundation proxy class for a service.

Suppose you have a standard generated WCF proxy class with the name TeamServiceClient which implements the service contract ITeamService. Both are generated by the svcutil.exe utility from the Windows SDK or by using "Add Service Reference" in Visual Studio. For clarity I have left out most namespaces and attributes because they are not important for this discussion:

using System.ServiceModel;
[ServiceContract(...)]
public interface ITeamService { GetTeamWithMembersResponse GetTeamWithMembers(GetTeamWithMembersRequest request); } public partial class TeamServiceClient: ClientBase<ITeamService>, ITeamService {
... GetTeamWithMembersResponse GetTeamWithMembers(GetTeamWithMembersRequest request); }

You can use my ServiceProxyHelper class by deriving from it:

public sealed TeamServiceHelper: LogicaCMG.ServiceAccess.ServiceProxyHelper<TeamServiceClient, ITeamService>
{
    public TeamServiceHelper()
    {
    }

    public TeamWithMembers GetTeamWithMembers(Guid teamGuid)
    {
       GetTeamWithMembersRequest = new GetTeamWithMembersRequest(); 
       request.TeamGuid = teamGuid;
       GetTeamWithMembersResponse response = Proxy.GetTeamWithMembers(request); 
       return response.Team;
   }
}

As you can see I have added code for the construction and unwrapping of the DataContract classes GetTeamWithMembersRequest and GetTeamWithMembersResponse.

And in your code you can call the service through this helper by using code like this:

   Guid teamGuid = new Guid(...);
   TeamWithMembers team;  
   using (TeamServiceHelper helper = new TeamServiceHelper()) 
   {
       team = helper.GetTeamWithMembers(teamGuid);
   }

This will give you guaranteed clean up of any WCF channels and such that are used behind the covers in the face of exceptions. Only expected exceptions during the clean up and closing of the channel will be ignored. Exceptions that occur when calling the service operation are not swallowed and will still be passed on to your code.

I hope this helps explain how you can use my WCF ServiceProxyHelper.

If you haven't been bitten and infected by the LINQ bug yet, go see this video interview with Anders Hejlsberg on LINQ and Functional Programming. He is interviewed by Charlie Calvert and this is Charlie's description:

In this interview Anders explains, in terms that all programmers can understand, why LINQ and functional programming will change the way we develop applications. As Anders sometimes says, functional programming allows developers to describe what they want to do, rather than forcing them to describe how they want to do it. If you are interested in LINQ, lambdas, expression trees, deferred execution, composability, functional programming or concurrency, then you should watch this interview.

If you are interested in the future of programming, this is well worth 30 minutes of your life (*). If you already peeked into the future and you want to be reminded why LINQ is the greatest thing since sliced bread go watch it also.

I had the pleasure of seeing the first unveiling of this technology at PDC05 in LA. Anders has a great way of explaining the why behind the introduction of new technology.

If you passed the first link, go watch Anders now.

*) I spend the last two nights eating, drinking and talking with friends, so I guess it's okay to spend Sunday evening behind my computer screen and still be able to say that I have a life ;)

Earlier this month on Channel 9, Scott Guthrie alluded to some great new functionality coming for web development in Visual Studio "Orcas".

Today, the details are revealed on ScottGu's blog and on Mikhail Arkhipov's blog. Mikhail blogs about the new web forms designer in "Orcas", codenamed "Sapphire". Check out the screenshots of the much improved CSS support, side-by-side view of Code and Design and new HTML designer options.

"Sapphire" has been work-in-progress since November 2004. Since the code is now integrated in the "Orcas" main code branch, this new web forms designer will become available in the upcoming February 2007 CTP.

This last week our brains have been filled with Microsoft stuff.

To undo some of the "brainwashing", I just watched a video interview with Jonathan Schwartz. For those of you who don't know him, he is the CEO of Sun Microsystems. The interview was conducted by former Microsoft employee of Channel 9 fame Robert Scoble for PodTech.net and can be found up on Jonathan Schwartz's blog.

It is a very open and relaxed interview. Go see it, you might find it more enjoyable than a BillG interview ;)

Day 3

On the third and last day with sessions, I attended the Software Factories workshop. We had to sign an NDA to attend this session even though only a small portion of the workshop was about future yet-to-be-disclosed technologies and product plans.

If you understand Dutch, go read RJ's observations for this day.

Don Smith gave the best presentation of the workshop. He mainly talked about the currently released Web Service Software Factory (WSSF) v2, so no secrets there. This version includes several code analysis rules for validating WCF configuration and semantics at design-time. WCF only validates these rules at runtime. However as I found out a year ago, code analysis is missing by design from the Team Architect SKU. The Professional Edition of Visual Studio 2005 is also missing code analysis. This severly limits the usefulness of this cool WSSF feature, because it will only work on the Team Developer SKU and the Team Suite SKU (which carries a very hefty price tag). I pinged Don about this, and he is trying to find out if code analysis can be included in Team Architect for the "Orcas" release of Visual Studio.

Getting back

Last Friday, most of us who attended the Microsoft LEAP program in Redmond flew back to Amsterdam. We arrived early Saturday morning at Schiphol Airport. During the flight we were warned multiple times about heavy turbulence. Nevertheless, it was a pretty smooth ride up till about 5 minutes before landing. Here is a shaky picture of the Amsterdam ArenA that I managed to take:

Amsterdam Arena from the air

My transition back to the Central European Timezone isn't feeling that smooth. I am fighting the temptation to go to sleep. If I would have gone to sleep this afternoon, I would be wide awake in the middle of the night.

Storm

A storm raged over large parts of Western Europe, including the Netherlands, last Thursday. I found everything back in one piece when I arrived home. The SBS broadcasting building nearby didn't fare so well:

Storm damage to the SBS building

Yesterday was a great day at LEAP. Overall, today was less interesting than yesterday in my opinion. RJ also blogged about today (in Dutch). He presents the facts, I will add my opinion ;)

Virtualization

The session on Virtualization was split in two parts. The program manager gave a very lively presentation with the main highlights of present and upcoming virtualization technologies my Microsoft. The presenter after him went into all the gory details of the new hypervisor technology. This was mainly a monotonous summing up of points.

Business Architecture

The session about business architecture was not my cup of tea. The purpose of business architecture only became clear halfway through the presentation on the slide "Why Business Architecture?". The story was entirely technology agnostic and most examples were not even IT-focused.

Case studies

The case studies presentation was split up in two parts:

  • Commonwealth Bank of Australia
  • MySpace.com

The facts and numbers presented at the MySpace.com by its Vice President of Engineering and  its Chief Software Architect were just staggering. The growth rates that these guys have to cope with are just staggering: exponential growth with a doubling rate of just a couple of months. They currently have 18 million concurrent users. Their system is mainly build on Microsoft .NET and Windows technology. All wisdom as you know it about building applications starts to break down at that scale. They have learned a lot of those lessons the hard way. Solving new classes of performance problems as they appeared.

Office Business Applications

The session on Office Business Applications just reiterated what we had already heard at a LEAP session in Barneveld. It talked about the Office System as an application platform: both for the client products like Excel, Word and Outlook as well as the Microsoft Office SharePoint Server. I recently architected and built a small Office Business Application on top of Excel using VSTO 2005 SE. The developer experience isn't all that great. The Office object model sucks big time when used from managed code. Especially when used from C#. Support for managed code still feels like a clunky after thought with Office 2007. In another project we learned that Excel Services and the Business Data Catalog in MOSS 2007 have some v1 characteristics that make them less than ideal. The OBA presentation did not go into any drawbacks on those products and did not tell us when not to use them.

Visit to the Microsoft Company Store

A highlight of today was a visit to the Microsoft company store. We were allowed to buy up to $120 of software, hardware, books and Microsoft branded merchandise at employee prices. Unfortunately, an Xbox360 fell outside the allowed price range. But being able to buy Microsoft Flight Simulator X Deluxe Edition for just $15 is a pretty sweet deal. I also bought a Microsoft LifeCam VX-6000 for $50 as my current Logitech webcam isn't supported under Windows Vista.

Walking around the campus

During the lunch break Edward, RJ, Frits and I walked around part of the Microsoft campus. There was still snow lying around.

Me at a Microsoft sign

A bit of excitement occurred when a helicopter landed on a field nearby. We went there to take a look. I took some pictures but was soon ordered by a security guard to delete those pictures. Apparently you are not allowed to take pictures of "medical emergencies" on Microsoft property if you are not a Microsoft employee. That no victim or emergency was in sight was irrelevant.

Microsoft Way

Dinner

We had dinner at the New Castle Golf Club which lies on a hill. From the terrace on this hill we had a nice view on the skyline of Seattle.

Skyline of Seattle

RJ has already blogged (in Dutch) about Tuesday's sessions of LEAP here at the Microsoft campus in Redmond, WA.

Let me add that I was pleasantly surprised by the lack of product pushing by the Microsoft architects. The LEAP sessions in Barneveld (NL) were much more focussed on Microsoft products. They were mainly on the pros and not the cons of those products.

The sessions here in Redmond gave nice high-level overviews of a couple of topics that we as architects face in today's IT world.

The G-word seemed to be forbidden (apart from Gmail) but all-in-all Microsoft gave a balanced picture of software as a service.

The session by Jack Greenfield on Software Factories was the best of the day. I was already familiar with Microsoft's vision and strategy and the Sofware Factories Initiative. Hearing the man with the vision speak himself on this subject adds a lot to this.

On Thursday we can attend a workshop that goes into more depth on software factories and where Microsoft will show off early bits of the future products in this space. We have to sign a Non-Disclosure Agreement (NDA) before attending that session, so we can't blog about it.

Okay, there are people still waiting to be tagged ;). I tagged five people, out of which two persons continued the meme. Two other persons said they would blog five personal things, yet they didn't. And the fifth didn't want to increase his number of blog postings by 50%. So I guess, my continuation score is 40%.

Before tagging a sixth person, I will reveal a sixth item which you should know already, if you read this blog carefully.

6. I am often mistaken to be straight. I guess, because I am too straight-acting.

So here goes: tag you're it Robert Jan!

Today was the first day of LEAP. The program is so packed that the 10 minutes I have now are not enough to blog anything meaningful about it yet. We haven't seen much of the Microsoft campus yet as we drove in and out in the dark.

Yesterday with 6 colleagues we went to the Boeing factory in Everett, WA. Everett lies just to the north of Seattle. The Boeing factory tour led us into the giant hall where the Boeing 767, 777 and 747 airplanes are produced. In March 2007 they will start work on the new 787 "Dreamliner" plane. Unfortunately we weren't allowed to take photocameras or any other electronic equipment with us to the assembly hall. That assembly hall is the largest building in the world measured in volume. It is so big that it has its own microclimate. The hall doesn't have heating or air conditioning because it doesn't need to. A large amount of aircraft fit into this building. According to the tour guide the entire Disneyland Park California park could fit inside the building and there would still be room to spare. We saw Boeing 777 aircraft at various stages of assembly.

Next to the factory lies the Boeing "Future of Flight" visitor center. We were allowed to take pictures there. Here are a couple of those pictures:

Tail of a Boeing 747

Pratt & Witney Jet Engine

Hall of the Future of Flight

And here is a brand new Boeing 777 waiting to be delivered to KLM
Boeing planes waiting for final testing

My pictures of the trip so far can be viewed on Flickr.

"Please stand by, while we reboot your seat"! We were greeted with this message just before Nortwest Airlines had to reboot their inflight entertainment system due to severe problems on all seats. To our surprise the following screen showed up:

Rebooting your seat

Hmm. What's that ugly looking bird doing there in the top left corner? Oh wait, it's just a crappy unstable system based on Linux!

We just arrived at our hotel in Bellevue after a pretty smooth flight without delays from Amsterdam to Seattle. Smooth, apart from the above mentioned hickup that is. For 9.95$ a day I have wired and wireless Internet access from my hotel room, so I can blog and upload pictures.

I just had to post this before going for dinner at 3:00 AM in Bellevue, WA. 3:00 AM Central European Time that is. Here in Pacific Standard Time, it is now 4:45 PM. So we are going for dinner at 6:00 PM, but it just doesn't feel like it.

It's just below 0 degrees Celcius here and there is still snow from last week's snow fall. Below you can see some snow on the platform of the airport. In the background is Mount Rainier which dominates the skyline at 4,392 m elevation.

Northwest A330 at Seattle-Tacoma Airport

Earlier on Friday I played around with January 2007 CTP of Visual Studio "Orcas". Lots of things are still missing from this CTP. But more is coming soon.

Scott Guthrie reveals that lots of new web development stuff will be included in the next CTP which is scheduled for February 2007. He tells us that the new HTML/CSS designer from Expression Web will be included in Visual Studio "Orcas" as well. That's great news.

Scott tells this on Channel 9 where he is being interviewed by my favorite Channel 9 guy Rory. Scott is the best example I know of the friendly, open and approachable parts of the company that are growing inside Microsoft. It is great to hear him argue against the obfuscation of the XAML used by WPF/E. Scott is a guy who just gets it. He understands that better standards support by Microsoft for things like CSS is important. May lots of others Microsoftees follow his lead. Other topics in the interview: WPF, WPF/E, ASP.NET AJAX, LINQ, IIS 7.0, Scott's responsibilities in Microsoft as a General Manager and some personal anecdotes. Go see this great interview. It's worth 42 minutes of your life ;-)

PS: If you live in or near the Central European Timezone, you might notice that I am posting this quite late on a Friday night/Saturday morning. I am already trying to adjust to Pacific Standard Time ;-) In two days a whole bunch of colleagues from the Netherlands will be flying to Seattle for the US part of the Microsoft LEAP program we are participating in. I leave on Sunday and will be back next Saturday.

Or is it the Visual Studio "Orcas" December 2006 CTP? The product itself is confused. The about dialog shows both monikers.

 

You can download this CTP here.

It has been awhile since the October 2006 CTP of "Orcas" that I wrote about previously. Here are my first observations about this CTP.

Integration problems for .NET 3.0?

I believe this CTP shows that Microsoft is experiencing major integration problems among its technologies. Would you believe that this CTP does not contain the RTM version of .NET 3.0?! Instead it containsan older version version with build numbers off by more than 100. Think back to when .NET Framework 3.0 was released to manufacturing: November 6, 2007. Imagine how many days it has been in escrow before that. Yet it hasn't been integrated into the Visual Studio builds...

Build numbers .NET 3.0 RTM “Orcas” Jan 07 CTP
WPF 3.0.6920.0 3.0.6715.0
WCF and CardSpace 3.0.4506.30 3.0.4324.17
WF 3.0.4203.2 3.0.4203.2

Like older "Orcas" CTPs, this CTP lacks any developer support for .NET 3.0. So no documentation, project templates and visual designers. For .NET 3.0 development, you need to use Visual Studio 2005 with the "Orcas" CTP extensions. The latest version of those extensions is the November 2006 CTP. Microsoft announced that that would be the last release for Visual Studio 2005. Going forward, they should be integrated in Visual Studio "Orcas". Apparently, that hasn't happened yet.

So what is missing?

  • Up-to-date .NET 3.0 version
  • Developer support for .NET 3.0
  • ASP.NET AJAX
  • Team Foundation Server "Orcas"

Exciting content

However, an older .NET 3.0 version and missing technology does not mean that this "Orcas" CTP does not contain exciting content. It contains the most expansive .NET 3.5 released yet. It's version number is 3.5.11209. The list of features can be found in the middle of the download page. For your convenience, here is a copy of that list:

  • Extended, more powerful data APIs with the ADO.NET Entity Framework and LINQ to ADO.NET
    • With the ADO.NET Entity Framework developers will be able to model the view of the data that is appropriate for each one of the applications they are building, independently of the structure of the data in the underlying database. The use of the Entity Data Model (EDM) enables developers to design models that follow the concepts built into the application, instead of having to map them to constructs available in relational stores. Once the model is in place, the powerful ADO.NET Entity Framework API is used to access and manipulate the data as .NET classes or as rows and columns, whatever is appropriate for each application.
    • ADO.NET is fully integrated with LINQ and offers many options for using LINQ in various scenarios: LINQ to SQL provides direct access to database tables from the programming environment, LINQ to Entities enables developers to use LINQ over EDM models, and LINQ to DataSet allows the full expressivity of LINQ to be used over DataSets.
  • C# 3.0 Language Support: This CTP implements all of the C#3.0 language features from the May LINQ CTP including:
    • Query Expressions
    • Object and Collection Initializers
    • Extension Methods
    • Local Variable Type Inference and Anonymous Types
    • Lambdas bound to Delegates and Expression trees
  • VB 9.0 Language Support: This CTP implements all of the VB 9.0 language features from the May LINQ CTP including:
    • Query Expressions
    • Object Initializers
    • Extension Methods
    • Local Variable Type Inference
    • Anonymous Types
  • LINQ to Objects API
    • The LINQ to Objects API supports queries over any .NET collection, such as arrays and Generic Lists. This API is defined in the System.Linq namespaces inside System.Core.dll. Click here for more details about LINQ.
  • ClickOnce improvements
    • This CTP delivers ClickOnce improvements for the deployment of Windows Presentation Foundation applications, alternative browser support and ISV rebranding.
  • Managed classes for Elliptic Curve Diffie Hellman and Elliptic Curve Digital Signature Algorithm cryptographic functionality
    • With the addition of these classes, cryptographic developers now have managed classes for Elliptic Curve Diffie Hellman secret agreement and Elliptic Curve Digital Signature Algorithm signing. These classes are built on the new CNG cryptographic libraries in Windows Vista, but still follow the familiar patterns of the cryptographic classes in .NET Framework 2.0.
  • Runtime and design-time support for Office 2007 (including Outlook 2007)
    • Customers can build managed code add-ins with a consistent development experience, regardless of which version of Office they target, which Office application(s) they target, and which programming language they choose. Managed code add-ins enable developers to use strongly-typed class members, with the help of modern development tools, including intellisense and auto-complete. Additionally add-ins can potentially run in multiple versions of Office, enabled by abstracting version-specific code and supported by a version-resilient infrastructure.
  • Support for advanced lifetime management of add-ins and their AppDomains
    • We’ve added the helper classes that manage the lifetime of add-ins, the objects passed between the host and add-ins, and even of the AppDomains the add-ins live in. By using the ContractBase and LifetimeToken handle, pipeline developer can let the hosts and add-ins act as if everything, including the AppDomain the add-in was activated in, was controlled by the garbage collector even though .Net Remoting would normally make that impossible.
  • Client service support for Login/Logout, Role management and Profiles
    • ASP.NET 2.0 shipped with new application services for authentication, authorization and personalization. Most of these services are not tied to ASP.NET and can work in non-web applications. This CTP enables the use of these services in smart client applications for Logon/Logoff, Role management and profiles.
  • A trace listener that logs event to ETW, event tracing for Windows in Vista
    • Event tracing for windows is greatly improved in Vista and the most performant loggings facility available in Windows. The System.Diagnostics.EventProviderTraceListener allows managed tracing to provide events to the Vista’s ETW infrastructure. This is a highly performant, thread-safe listener.
  • Jscript Intellisense support
    • Jscript code formatting and Intellisense support provide developers with a richer editing experience. These improvements enable the IDE to provide statement completion, color syntax highlighting and in-place documentation to Jscript and associated script models such as ASP.NET AJAX.
  • A new numeric type that provides support for very large numbers (Beyond the range of In64)
    • All existing numeric types in the Framework have a limited range. This is the first type that supports arbitrary range and will extend to accommodate any large number as needed. This type lives in the new System.Numeric namespace where all new numeric and arithmetic features are going to reside. It supports all the basic arithmetic operations including things like Pow, DivRem and GreatestCommonDivisor. It implements the following interfaces: IFormattable, IComparable, IComparable<BigInteger> and IEquatable<BigInteger>. It is serliazable and immutable. It has implicit casts from all basic integral types and explicit casts to/from all numeric type. To learn more about this type – please visit the BCL team blog.
  • LINQ over XML (XLinq)
    • Enable further LINQ over XML feature support (in addition to the functionality available in the Oct 2006 CTP) such as the ability to apply XLST to transform into and out of XLinq trees, support for System.XML reader/writer interfaces for improved XML sharing with DOM applications and System.XML schema validation for XLinq nodes.
  • SQL Server Compact Edition (SSCE)
    • SQL Server Compact Edition (SSCE) provides a local relational data store for occasionally connected client applications from desktops to devices. SSCE is light weight, embeddable and is easy to deploy with your client applications without requiring complex administration work from users. Timestamp (row version id) data type, improved table designer, Query processor enhancements and support for local transaction scope are some of the new features you find in this version of SSCE.

Couldn't think of a better subject, so I just used Dennis' subject.

Dennis tagged me and yes, as Alex wrote, this proves "With all the big names and blog-gurus tagged, eventually the less known/unknown ones had to be reached." ;-) Thanks, Dennis!

So here's my list of five things you might not know about me:

  1. Like Dennis and Frans, I started programming on the MSX. In my case a Sony HitBit 75. I had an earlier encounter with a floppy disk drive than Dennis as I bought a 3.5" disk drive that could be hooked up via a giant cartridge to the HitBit. It cost a whopping 800 Dutch guilders (360 euro) and could store 360 KB (single side, single density). Of course these disks were SO much better than the poor 5.25" floppies that the Commodore 64 guys had to live with ;) Nevertheless I regularly encountered disk corruptions ;( 
  2. The first software I bought was an Z80 assembler program. It could only be started from MSX-DOS as it was originally written for CP/M. Before I had this assembler, I wrote small assembly programs by  looking up OP-codes in a table and poking them straight into memory with an MSX BASIC program. Just a slight mistake would cause the machine to hang or reboot. For instance, it was terribly risky to have to calculate jump addresses and offsets by hand. 
    With the help of the assembler I wrote my first major program in assembly: a program that allowed me to edit the FAT12 tables on a floppy disk. I had a floppy disk with corrupted FAT tables and I wanted to salvage the data that was still on the disk. I reverse engineered the FAT12 structure (as I had no documentation on it) and with a bare minimum of documentation on the MSX disk API's I was indeed able to repair the disk. The disk was fragmented so it was quite a puzzle to put the pieces of the files together. Baby Luke
  3. I was supposed to write an article for the Dutch .NET Magazine on developing for Windows Media Center over the Christmas holidays, but I didn't do any work related stuff on my days off. That's a rare thing for me. Hopefully I will still make the deadline ;(
  4. One of the reasons I didn't get around to writing the article was that I became an uncle for the first time. As it is very unlikely that I will have children of my own, I am very happy that my sister is providing my parents with offspring ;) 
  5. One other reason I didn't get around to writing the article yet is that I am terribly in love at the moment. I have no further statement to make at this time other than that I am suffering ;( However, if you have any advice on how to undo falling in love, it is very welcome.

I tag Edward, Chi Wai, Matthijs (a good reason for your third blog post? ;), Olaf and Octavie (how's life at Ordina?).