# Wednesday, June 21, 2006

I did an interview with my buddy John Bristowe a while back. You can hear me largely talking non-sensically about the CLR and at Developer Night in Canada. If you read Joel Pobar's blog too, then you hear me taking that guy down. Sorry Joel.

I really like the program that John's got going there. I couldn't believe how fancy the intro sounded. I'm now trying to get other Canadians at Microsoft to do interviews with John. Let's see where that leads. I hope that we'll have something in the later summer, as John made it sound like he'd be taking the summer off.

Wednesday, June 21, 2006 10:51:08 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [5]  | 

I've heard "convention over configuration" a number of times, largely in reference to Ruby on Rails. It's actually a really interested concept. It is simple in nature, and those kind of concepts are always the best. As an aside, I think I'm done with complicated concepts at this point ;) The question is where does the CLR loader lie w/rt CoC and is that the correct place to be.

I can tell you right away that the loader and binder are way, way over on the side of configuration. And the default behaviour -- the behaviour you get before you need to get into configuration -- is only useful for basic scenarios. Let me offer an example if this is seeming a little too vague. So, you've got assembly A (A, Version=2.0.0.0) and then you want to service it, giving us A' (A, Version=2.0.0.1). That's all good and seems to make sense. It makes sense to increment the (managed) version number to differentiate the two versions of the assembly. The only problem is that apps bound to A (A, Version=2.0.0.0) will still load 2.0.0.0 and not 2.0.0.1 (assuming A and A' were in the GAC).

Hmmm ... where does that leave us, since that's not quite the behaviour (read:convention) that we wanted. Well, we get to configure. Here are the choices available to us: re-compile all apps out there with A', configure (app.config) all apps to bind to A' or generate and install publisher policy to centrally configure all apps to bind to A'. And there is one more option still available that differs from the rest: don't change the (managed) version number in the first place to better conform to the loader convention. Ughh!

Hmmm again ... none of that sounds too good. So, what does Microsoft do, since you'd think that they are going with the better option or maybe have some secret hidden option for their use alone. Well, we (for the most part) go with not changing the (managed) version number when we service our binaries, thereby conforming to the convention. Pretty crappy, eh?

The good news is that we're moving much more toward convention-based approaches for v3. There will still be plenty of configurability via XML, but the vast majority of cases should just fall out of convention. Yeahh!!

This sort of thing really does make you need to stop and think. Are the default behaviours correct? Do they cover enough of the common scenarios? Do they address those common scenarios deeply enough? There's nothing worse than software that covers a lot of scenarios, but only 50% deeply enough in each. 100% enough in each is where I'm headed.

Wednesday, June 21, 2006 9:30:11 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [1]  | 

I've been running an early adopter program for a couple months now for a bunch of changes that we're making to the CLR binder/loader in the CLR v3 timeframe. The changes are related to the binding model, versioning, servicing and an add-in model. Also, just to be clear, this isn't .NET Framework v3.0 (AKA WinFX). This is the one after that. Here is the blurb that I sent folks who I thought might be interested. Please @ mail me if you are interested in participating.

We have been busy designing some exciting new changes to the CLR loader/binder. We'd like to start collecting feedback from customers about our change early, in order to ensure that the final product is rock solid. The first phase of the program is to validate that our changes are useful and to understand the compatibility of these changes. In order to collect this information, we’d like you to run two tools on your system so that we can learn more about how you – actually the managed apps you use – use the loader and GAC. The one tool is a tool that collects very basic information about the GAC, while the second tool is actually an instrumented CLR which logs data about how the loader, binder and domains are used. The next phases involve running a prototype version of the CLR that includes the new changes, but we’ll get to that later, as it comes available.

There are also a couple legal documents to sign, specifically an MSFT NDA and a license. I'm happy to discuss those if you want to go to that stage.

Wednesday, June 21, 2006 1:38:12 AM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 
# Tuesday, June 20, 2006

Well, I managed to get the blog back up -- now that my readership has hit zero. I haven't posted in 6 months and its been down for 3. That's a pretty impressive record. Hopefully most other parts of my life are in better shape.

The short version of why it was down was that my ISP moved to partial trust for security reasons and dasBlog requires full trust. They gave me lots of warning and I didn't do anything (read:my fault). I've since moved to thinkjot, which is a derivative version of dasBlog that fixes exactly those partial trust problems. Thanks go to the folks at thinkJot.

In the past six months, I've also moved to a new (to me) house and had a second child. It also turns out that my job is probably changing a fair bit (but in a good way and still on the CLR team). Excuses, excuses ...

Updated: This post in a .Net forum is awesome. If you call having a second child with lots of laziness and procrastination added in "abducted by aliens", then "yes".

Tuesday, June 20, 2006 9:02:13 PM (GMT Daylight Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  |