I’m going to skip the talking much about the keynote since various news channels and others have already written about it, dissected it, given their opinions and more and I lack both the time and the energy for it.  Anyway I live tweeted for most of the day today so you should be able to get my thoughts (out of context probably) on it and other happenings if you check my tweet stream for today.  The one big thing coming out of the keynote for me was the App Fabric announcement.  That looks like some seriously cool stuff, though I will have to play with it and try it out to see just how it fits together and how it affects development and deployment. Oh yeah, and the fact that an iPhone made the big screen at a Microsoft keynote.  I wonder if that was planned?

So onto the sessions…

How To Build and Enrich Your Technical and Local Community

Instead of heading to a breakout session first up, I decided to go to a Birds of a Feather session.  Given that I run both the Sydney Alt.Net and the Oz Virtual Alt.Net groups I was curious to hear how others do things.

The session was a little disappointing in that it meandered a little and I was hoping for more interactivity from those gathered there, but even so I picked up a few little bits and pieces and also heard about a thing called GiveCamp that has started up here where people give a weekend (or part thereof) of their time to assist small non profits in getting something done, typically around content management and setting up web presences for groups.  Nothing major and something that can definitely be achieved in the time available.  It’s an interesting thing to hear about and could well be something that could transplant well to Australia.

Microsoft ASP.NET Futures

This was an excellent session about the stuff that the team is thinking of doing after ASP.NET 4.0 hits RTM.  Some really useful things they’re thinking of doing, with the main goals being simplification of the development experience around repetitive common tasks and the other being performance improvements.

For the simplification they’re targeting tasks such as watermarking or resizing images, doing email confirmations for signups and file upload progress dialogs.  They’re also looking to simplify routing with a thing that they’ve currently called “SmartyRoutes”.

To define routes you would do something like RouteTable.Routes.Add(new SmartyRoute(new [] { "aspx", "ashx" }));

This would then takes any url and try and locate an aspx or ashx file based on that url.  If it can’t find one it would work back up the url/folder tree to find a match and it it did then everything after that match is treated as a parameter for that page.  In code to read one of those parameters you would simply call: SmartyRoute.GetNextRouteValue<T>();  Where T is the type you want the parameter cast to.

On the performance side they talked a bit about HTML5 local storage and how it works.  Basically it operates via the AJAX v4 data context in JavaScript and wraps it to create a Sys.Data.IntermediateDataContext that you interact with.  Quite straightforward and obviously quite useful.

They also showed ASP.NET Output Caching using Velocity and explained how doing output caching via Velocity means that only one server needs to render the page for every server in a web farm to have that page in their output cache, rather than the current model where each server caches information separately and individually.

Finally they showed the real sexy thing being CSS Sprites build via ASP.NET.  They’ve taken a convention based approach following in a style similar to the MVC conventions.  You create a folder called Sprites and dump all your images that you want joined together in there.  At app start you then call SpriteGroups.Initialize() and the code will scan the folder for images and join them together to form a sprite.

To render them, in your page you place something like <%=Html.SpriteImage("imagename.png", altText:"image name") %> and the correct part of the sprite will be issued.  At the moment it’s currently very immature and the styles are rendered inline rather than in a CSS file, but given it was written on a few days previously, that’s no real surprise :-).

Oh, I forgot.  They also showed how ASP.NET MVC can be used with the Active Record pattern using an Active Record implementation that they have currently built.  It’s based on Entity Framework v4 and seemed to work really well.  It may well be a response to the Rails encroachment on .NET web development, but even if it’s not, it’s a welcome addition to the framework.

Of course, this is all FUTURE stuff.  You can’t get this code now, you can’t try it for yourself and you it will definitely grow and change (or get dropped) before the next release after ASP.NET v4 rolls onto a web server near you.

Evolving ADO.NET Entity Framework in Microsoft .NET Framework and Beyond

I think this one may have been named a little wrong.  It was more a case of “Watch us show off as much stuff as we can in the time we have to prove to you that EFv4 doesn’t blow as many chunks as the v1 product did (and yeah we’re sorry about that)”.

I was hoping for something a little more in depth given the title, so when it turned into a 200 level session I kind of got distracted and chatted to people instead, talking only nominal notice of what was being shown.

Code Contracts and Pex: Power Charge Your Assertions and Unit Tests

This session was great. I’ve written about Code Contracts before and presented on them a few times as well and I must say I think they’re fantastic.  Pex on the other hand, I haven’t spent any time with beyond reading about it so it was great to see it in action.

Now that I’ve seen Pex in action I’ll definitely have to get some hands on time with it to learn it a bit more, especially as an aid to finding the code paths in my apps that I may have missed.  After all even if you write tests first, you will still miss things that you overlooked, especially since pex will exercise the unhappy code paths that you sometimes don’t even realise you’ve put in there.

Other Thoughts

Apart from the sessions I also spent time talking to various people, many of whom were complete strangers, but also a good number of people who I’ve only met online or had limited face to face time with.  I also wandered the floor, visited some stands and managed to pick up some nice swag, including a few prizes (lucky me today!) and basically had a good, enjoyable, thought provoking time.

Tomorrow it’s back for Day 3 and the second keynote.  This one should be a lot more interesting than today’s one was for a number of reasons.  I’m looking forward to it, and will do my best to live tweet again for as much of tomorrow as I can before my batteries run out.

See you all online tomorrow!