Hooray for
declarative programming! Let’s do more business and less
work. Whether it’s the BizTalk server orchestration designer (the
new Jupiter one TOTALLY rocks!) or XSLT, or possibly best of all, Avalon, it
just makes sense.

As Scott
mentions, I’ve done some declarative UI with SVG,
and I’m a big fan of XForms,
if and when we ever see a mainstream implementation. But I’d have
to agree that Avalon
is sheer genius. There’s no reason why to write the code for most
of the UI we do now, and since it sounds like the same XAML will work for both
the web and for Longhorn client apps, better still.

I love the
new features in dasBlog 1.4. The extra
statistics are very handy, and it couldn’t be much easier to use. Best
of all, between the source and all the samples, it was a snap for me to migrate
my existing content. If I were in LA :’( I’d thank Clemens
with beer!

Only days
ago I mused that it would be nice to have more control over the way the
XmlSerializer works. Sure enough, according to Doug Purdy via Christoph Schittko
we’ll get access to IXmlSerializable, and can write our own XML to our
hearts content.

While I
couldn’t go to PDC this year
at least I can get in on the next best thing. Watching the stuff that’s
coming up on PDCBloggers is pretty
amazing. You get the blow by blow in living color (or at least text). I love
watching what’s coming up on Scott’s
blog. He’s posting from the keynote via his Blackberry, so as Jim Alchin
says it, it’s coming up on his blog. Gotta love technology.

I’ve
used TortoiseCVS for a while, and
always considered it a nice to have, but not really the best way to deal with a
CVS server. Now that I’m running the latest (1.4.5) I think differently.

In the past
I’ve relied on WinCVS to do things
like recursively find out all the files I’ve modified, what revision my
files are at, etc, and pretty much used Tortoise just for simple commits and
adds. With 1.4.5, Tortoise will recursively find all the modified files,
categorize them as add, deletes and modifies, and allow me to commit any or all
of them at the same time. Very nice, and much easier than in WinCVS.

Also, the
explorer integration has gone that one step farther, and you can add CVS status
and CVS revision columns to any explorer view. Also much easier. I’ve
pretty much abandoned WinCVS in favor or Tortoise, which is nice, since it
saves one more application launch every time I want to deal with versioned
files.

It doesn’t
take huge changes in an application to make our lives better.

Granted,
there are some really great new features in Outlook 2003, and I’m totally
diggin’ them, but every time I can reboot my machine without facing the
dreaded “Please close all Office applications..” dialog my heart is
filled with a simple and pure joy.

I’ve
been doing a lot of work with the .NET XmlSerializer over the last couple of
weeks, and once again I’m wishing I had that just one more custom
attribute to work with. What I’d love to be able to do is just tell
the XmlSerializer to let me worry about a specific part of the XML, since I
know better than it.

Something like
this (to serialize a property called MyString):

publicinterface
ICustomSerializer

{

void DoSerialization(object
theValue, XmlTextWriter w);

void DoDeserialization(XmlNode x, object targetValue)

}

publicclass
DataClass

{

public DataClass()

{

}

[XmlMyWay(typeof(MySerializer))]

publicstring
MyString

{

get{ return
"OK";}

set{}

}

}

[AttributeUsage(AttributeTargets.Property)]

publicclass
XmlMyWayAttribute : Attribute

{

public XmlMyWayAttribute(Type serializer)

{

}

}

publicclass
MySerializer : ICustomSerializer

{

#region
ICustomSerializer Members

publicvoid
DoSerialization(object theValue, XmlTextWriter
w)

{

// TODO: Add MySerializer.DoSerialization
implementation

}

publicvoid
DoDeserialization(XmlNode x, object
targetValue)

{

// TODO: Add MySerializer.DoDeserialization
implementation

}

#endregion

}

Then
you could do whatever funky serialization you needed to do. Or is this
flawed in some fundamental way? It’d be pretty cool though…

I was over at my family’s place at Black Butte Ranch this weekend, and Central Oregon is in its full glory right now. The birch
(aspen?) trees are that truly amazing shade of yellow, and the vine maples are
anywhere from bright yellow through orange to deep crimson. Set against the
dark pines, the colors are really remarkable. No snow on the passes still, so
this is a great time of year to head that way.

If you’ve never been out to Black Butte, it’s
also well worth the trip. Good restaraunt, beautiful views, miles of bike
paths, tennis, golf, swimming etc. A great place for family vacations, since
there’s a little something for everyone.

I’m sure everyone knew about this but me, but I was impressed. I needed to attach some extra data to an XML Schema document so that it would be available to a code generator I’m writing. You can put whatever extra attributes you want in an XSD document (which is how MS does it with SQLXML, for example) and no one will be bothered.

However, I needed some full on elements to express the extra data I needed to carry. Luckily for me, the clever people at the W3C thought of this, and gave us the annotation element. I knew you could put documentation inside an annotation element, but I’d never noticed the appInfo element before.

Inside an appInfo, you can put whatever you want to, and attach it to just about any place in your schema file. Very cool.

On a completely different note, I’m amazed to see that WordML actually serializes the little red “you misspelled something again” bar into the XML. Just in case you want to style it into a mistake somewhere else?

It’s been a very busy week in which I think I’ve written more code faster than I have in months. All in all a pretty productive time for me. Key learning for this week include:

CodeSmith is a pretty groovy tool, although I wish the documentation was better, particularly for writing extensions. On the other hand, it does most of what I need it to, and free’s a great price J. There’s so much more you can do besides strongly typed collections.

Custom attributes have got to be one of the coolest features of .NET. The ability to carry around arbitrary, strongly typed data about your classes that you can ask for whenever you need it is such an amazing boon that I don’t think I can say enough about it.

NAntPad is a very promising step in the right direction. Still a bit rough around the edges, but I anxiously await further versions. Much easier than maintaining NAnt build files by hand.

There aren’t enough hours in the day.

I haven’t been blogging much lately, largely due to the ongoing weirdness of my current employment situation, but I’m trying to be more conscientious about it.

Update: NAntPad .4 is much improved. I'm starting to use it more earnestly.