PDC - Day 2...
I'll blog as interesting things happen. There's a thousand interesting things going on here, so it's hard to break it all down into sound bites. But I guess that's what makes blogs better than typical media, right? Fewer sound bytes.
Indigo is great, no doubt. Clemens puts it best:
Indigo is the successor technology and the consolidation of DCOM, COM+, Enterprise Services, Remoting, ASP.NET Web Services (ASMX), WSE, and the Microsoft Message Queue. It provides services for building distributed systems all the way from simplistic cross-appdomain message passing and ORPC to cross-platform, cross-organization, vastly distributed, service-oriented architectures providing reliable, secure, transactional, scalable and fast, online or offline, synchronous and asynchronous XML messaging.
But, being a Web Services guy, and being deep in the muck of WS-*.* for the last several months I was confident that this would work itself out.
What I'm really digging on (as you should be) is Avalon. I will say this once:
The ramifications of putting Microsoft's weight behind a vector based composition engine can't be overestimated.
I've been all about SVG for a while, as has Patrick Cauldwell. He's worked on declarative UIs using Adobe's SVG tools. The Early and Adopter guys have a great explanation about Avalon and how it works.
Here's why I think it's so significant.
Today, when you sit down to write a WinForms app, you do your “File|New Project|WinForms Project” and there's a little section created for InitializeComponent() and then they hide it in a Region. They even put a little comment there to warn you from messing around. Something like:
//Good luck to you if you edit this and piss off the Designer.
And when you open the little hiding region you see:this.components = new System.ComponentModel.Container();
this.Size = new System.Drawing.Size(300,300);
this.Text = "Form1";
Isn't this fairly declarative? It's really just saying, “Hey, here's how it oughta be“ or “Make it like this.“
You wouldn't expect to see if statements or for loops in here. It's just a lot of C# (or VB.NET) code that lays out the Form. Golly wouldn't it be cool if we could borrow another declarative language, maybe a markup language, preferrably an extensible one. :) So, they take all that InitializeComponent stuff and move it out to another Source File. Except this source file is a XAML file instead of C#.
Imagine the ramifications of this on designers. The people that we think of today as UI Developers may not be the people who drag buttons onto a Form in 2005-6. You know how developers always say, “I'm a lousy UI Developer“? I say, let the designers do that. The guys that make UI now will write UI interaction code in the future, and interface with XAML files that will be created by Macromedia This or Adobe That. It brings the ASPX and CodeBehind model to Windows Smart Clients.
Since the forms can almost entirely expressed with XAML, this could usher in a new era in design, with ACTUAL DESIGNERS and lots of 3rd party design tools saving XAML files. Note that when Adobe showed the Adobe AfterEffects demo in the keynote, all they had to do was add an export plugin to their app to create XAML. They didn't even need a new app!
Also, it creates a single markup for UI development that is independant of VB.NET and C#. Now, I overheard some folks saying, “Oh, they just generate the same C# from that XAML file, so really nothing's changed.” Kind of a simplification, but so what? That's the whole point of declarative programming models like that. WHO CARES WHAT THEY DO WITH THE XAML, as long as it brings up a usable UI? If it's Code Gen, some interpreter, or Black Magic, it's all good.
The last thing that's cool about having a declarative markup for UI development is how it complements the concept of partial classes. Versions of .NET > 1.1 will have support for a single “logical class definition” being spread across multiple files. What the means is that the XAML file and the C# file ARE THE SAME CLASS just spread across two files (who also happen to be in different languages.)
It's pure sex.