Attention: We are retiring the ASP.NET Community Blogs. Learn more >

Fear and Loathing

Gonzo blogging from the Annie Leibovitz of the software development world.

  • Silverlight is here

    I watched the keynotes from the MIX07 conference and I have to say I'm rather impressed at Silverlight. I've been on the cusp with regards to WPF/E (and WPF for that matter) but after watching ScottGu talk about it and demo some pretty kick ass apps, I've gone over to the dark side.

    Maybe Microsoft won't say it out loud, but this is the Flash killer. I was always impressed with Flash because of it's rich nature. Watching Strong Bad cartoons in Flash was always fun. However I had a bad taste in my mouth with Flash. It was a giant tag on a web page, required a completely different language to learn, and was never really browser or search engine friendly. Sure, it looked good but that was about the extent of it.

    A couple of things that came out of MIX07 so far is not only the availability of Expression Studio, the web authoring tools that are sure to take the place of Flash Studio and Dreamweaver (which each member of MIX gets a copy of), but of the Silverlight Streaming service. Basically you can upload 4GB of content to the Microsoft data services and use it in a Silverlight-enabled app (web, desktop, or otherwise). Not bad for free as in beer.

    A few other cool things that came out of the keynote (once ScottGu got on stage) was remote debugging to a remote machine (he debugged from a PC to a Silverlight app running on a Mac, way cool) and the full .NET framework embedded into the Silverlight runtime enabled apps (not sure how to state this feature). So rather than the trimmed down compact framework, it's the full meal deal. There's also some great compatibility between Expression and Visual Studio Next (Orcas) as they use the same XAML files and same solution formats. You can basically build the UI that you want in XAML using Expression, then just save it and reload it in Visual Studio to use in your app. I was highly impressed with the Silverlight Airline app (hopefully source code will be available for this) which let you choose a set of dates, drag and drop an origin and destination, and with 3 lines of code Scott was able to show animation between routes and alternates when you selected each itinerary. Way cool and the way the web should be compared to the archaic way things are done now.

    Finally was the question of performance. Sure you can build awesome apps that look great but what about bandwidth? Apparently Microsoft has solved this problem so you'll start to see very right web sites using Silverlight, video enabled (even HD up to 720p), downloading in as little as 50k. This might be a bit of a bait and switch game as the app will be 50k but obviously the HD content will be larger. The point here is that it seems like Silverlight will know how to download content in a smart fashion so it's there when you need it, but you won't be staring at long loading screens. One example was with NetFlix where they streamed an HD movie with pretty good response time, from a Silverlight app. Impressive. Most impressive.

    You can install Silverlight here and download the SDK and other tools here. There's the 1.0 beta version and for your really on-the-edge guys, you can grab the 1.1 alpha releases. I'm now spending the rest of the night playing with Silverlight, getting boned up on WPF (finally) and putting together my own mashups so maybe watch for a few SL apps pop up here and there from me (as I tried to Frankenstein Silverlight and SharePoint together).

  • Calgary Code Camp 2007, A Visual Journey

    Just got the pics from James from the Calgary Code Camp we had this weekend so I figure I would take you on a visual journey. The Code Camp was a blast and we had a great turnout, with about 100 people showing up. Hope everyone had a great time. I had the best time co-presenting with John on XNA as we plowed through 2 sessions covering everything from starter kits, debugging, deploying, textures, meshes, audio, and everything else XNA.

    P4280235

    What a great crowd and hey, there's JP poking his head inthe door!

    P4280230

    The first prizes are given away. It's going to be a full day of schwag!

    P4280291

    Donald Belcham (aka the Igloo Coder) points to the word "changes". Maybe he's about to initiate some?

    P4280279

    Steven Rockarts bangs out his presentation on the Windsor Container.

    P4280278

    David Woods reflects on his work.

    P4280277

    Bruce Johnson from ObjectSharp stopped in on his way to Mix to talk about LINQ.

    P4280276

    Jean-Paul Boodhoo rides the monorail.

    P4280247

    Terry Thibodeau and his walk through mocks.

    P4280250

    John Bristowe gets some help from our XBox 360s during his DataDude presentation.

    P4280258

    James Kovacs takes a lap around TDD, mocks, and dependency injection.

    P4280241

    Daniel Carbajal takes us through WCF.

    P4280260

    D'Arcy Lussier can't be photographed with traditional equipment. I believe we need to get a special camera that can take pictures of the undead to be able to get a clear shot.

    We also had a kick-ass display for our XNA sessions. We brought 3 XBox 360s, 3 laptops, and a backup projector just in case.

    P4280229

    We had two projectors setup, one with the code on it and other with the Xbox output. We also had two laptops setup, I was doing the code on mine and John had his setup with the browser and powerpoint slides. All in all, we had about 18 cores running in our tiny room but it was a blast. Our setup was so large we couldn't get it in with one photo!

    P4280285

    P4280283

    You can view the entire Flickr set here. Sorry for the quality of the pics but things were rushed and a lot of times I didn't turn the flash on (so as not to disturb the presentations).

    I'll be following up with a post in a day or so with a wrapup of the event and download links for all the source code for our XNA sessions.

  • TFS vs. Open Source, the battle rages on

    Caught a thread between Roy Osherove and Oren Eini that has gone back and forth a few times, all about Team Foundation Server and open source tools (and the deficencies Oren points out in TFS).

    The discussion has been (mostly) centered around source control, however I think they're both missing on the main feature of TFS. That is extensibility.

    Yes, other packages out there are extensible by nature (Subversion for example) but require coding, architectural changes, hooking into events, all of which are nice but systems like this were not designed for it. Was subversion really designed at the start to be extensible so I could maybe have my storage be in a relational database rather than the file system?

    TFS by it's very nature was built around extensions. The Work Item itself is just a container, defined by the fields, rules, and relationships you create in the process template. There is no "default" Work Item. There is no concept of a "bug" or "feature" in TFS. It's just a Work Item and can be morphed into whatever you need it to be. Just look at the Conchago guys with Scrum for Team System, and how they turned Work Items into sprint and product backlog items and even through in a sprint retrospective item.

    I was asked recently if we could modify the bug template so we could track the steps to reproduce. I said we could use the description field, but decided to build out a new type of Work Item (using Joel's very excellent Process Template Editor) so that you could create a work item (a bug) and add as many steps to reproduce and and expected behavior field for kickers. The entire process took me an hour (and that included about 15 minutes to grok the templates as I've never done this before).

    I've tried these type of things on other systems and they're painful. Sure, some systems are quite helpful in adding new fields, changing the layout, etc. but none are things that you can add entire concepts that are new, not just net new (there is a difference). Could I crack open subversion to support a way to link checkins to an external feature list? Sure. Why would I when TFS has this already.

    As for modifying open source systems to do your bidding, you enter into a fork scenario. Unless the system supports a plug-in pattern and you can just add a new assembly (like say oh the TFS policy sub-system) I really can't do much with a tool even if I have the source code, unless I want to run the risk of being in a maintenance nightmare from Hell scenario. Do I really want to do diffs of new relases of NUnit with my own code to support new extensions.

    Luckily there are some open source systems that are built around an extensibility model but so is TFS. And while it might have deficiencies in various places I can plug in new features or introduce entirely new concepts to the repository so that I can make it match whatever business process I use.

    Is the source control system in Team Foundation Server extensible or replaceable? No, but I'm willing to live with a few problems while we get to version 3.0.

  • Calgary Code Camp 2007, no hotdogs but plenty of schwag!

    If you're around or about the Calgary area this weekend what should you be doing?

    1. Meeting up with Calgarians to talk about Al Gores presentation this week on his global warming show, The Inconvenient Truth?
    2. Checking out a semi-naked Rose McGowan being beat up by Kurt Russell at 120 miles per hour in Grindhouse?
    3. Enjoying the fresh air and sunshine with your family.

    No.

    You should get your geek-butts down to the Calgary Code Camp. It's this Saturday and we're ready to roll, so should you be.

    What can you do at the code camp? Not only see over a dozen speakers and sessions but perhaps walk away with some truely awesome door prizes.

    We're giving away about $20,000 (holy crap, that's a lot of stuff!) worth of software, hardware, books, and goodies from over a dozen sponsors including ComponentArt, Dundas, JetBrains and others.

    I'm giving two fun-filled-uber-cool sessions on XNA programming so we'll be building games, doing demos, and going deep dive on the XNA content pipeline, as well as checking out some cool tools for you to start writing games for the Xbox 360 (and we'll have our 360s there for some between session gaming, Gears of War anyone?)

    Oh yeah, did I mention this was... all... free! Free as in beer (or speech if you prefer).

    Be there!

  • Making up your mind about a name

    I've highly confused by Microsoft sometimes (like that's a surprise).

    Originally, we had some very cool names for new products/technologies. Indigo and Avalon. These became WCF and WPF (Windows Communication Foundation and Windows Presentation Foundation respectively). These names are so not only un-cool, they're a mouthful to say three times fast during a podcast.

    Then we had WPF/E (Windows Presentation Foundation/Everywhere) which is now identified by the much cooler name Silverlight.

    Wish they would make up their minds. Cool names or not. Which is it?

  • Being Kimberly Tripp

    This week the Calgary Code Camp is coming up where I'm giving two sessons on XNA Development (XBox 360 debugging from a laptop baby!) and I've been reflecting on my own presentation skills for the past while. As it is with being a busy-body, I've been heads-down building projects so my conference attendance has been down. The last conference I spoke at was DevConnections in Vegas back in November and with personal and professional commitments, I'm not looking to speak until next year at DevConnections again (sans the odd gig here and there like the Code Camp and various user group presentations or webcasts). This has given me some time to look at my presentation skills and ask "Do I really have what it takes?".

    I’ve only been presenting at code camps, TechEd, DevConnections and user groups for a couple of years now and I feel that I get pretty good scores. 80% of them are in the 7-8 range with a few (10-15%) being a 9 or 10 and some (5-10%) being a 3-4. I consider this pretty good but not great. Certainly not anywhere near a Kimberly Tripp, a Dino Esposito, or a Scott Guthrie. Is there a way for mere mortals to evolve from mediocre to great? My main goal here is that I feel that if someone pays top dollar for a conference, I really want to give them as much bang for their buck when they're taking time out of their schedule to sit down and wallow through what I have to say. It's only fair.

    Getting to the subject line of this post. Kimberly Tripp is IMHO by far the best presenter I've seen. Ever. She even tops people like Scott GuthrieScott Hanselman and others (sorry guys), all of which I have the utmost respect and admiration for. The question I've been mulling over in my noodle is how does one become a Kimberly Tripp? No, not how do I look good in a dress and pumps, but how does one get to become a speaker who consistently gets flawless scores and really gives you, the community, the value-add that you pay for at a conference? What is the secret?

    I did a bit of a poll from various speakers I know of to get their opinions on what it was to reach that upper echelon of the presentation platform. The answers I got were pretty on-par with what I've been thinking of so no surprise there. In short there's no cookbook here and no magic pill you can take and as Richard Campbell said, "it's a complicated subject".

    One thing that I want to mention here is that the very best speakers out there are making a living as a speaker. I have my day job and I speak as often as I can, but that equates to a few conferences a year at best. The top dogs out there are doing 60 shows a year with 4-8 talks per show. This has two effects: one is that they're extremely well practiced in their art and the other is that they're familiar to their audience. Thanks to Richard Campbell for pointing this out to me.

    Here are some tidbits I picked from speakers and combined with my own cup of reason here's some ideas on how to hopefully improve your presentation skills.

    • Spend time on your presentations. Rushing at the last minute is the last thing you should do as with Murphy's law, anything that will go wrong does. Screwing around rebuilding VMs (it happens sometimes) is not something you want to be doing hours before you're about to go on with your audience. I think it's okay to tweak things (see below on the difference between your presenation and the show notes) but complete overhauls or doing things on the fly is a no-no.
    • Follow your own rules. Julie Lerman has some safety nets and rules that she follows (as do I) like "thou shalt not code in public in a language that though dost not dream in". I think this is pretty key as you have to know your stuff inside and out in order to really be there for someone when they need an answer (or at least know where to look). Learn it inside and out and look at questions posted by the audience as areas that are things they're interested in. After all, we're here for presenting and sharing knowledge that is important to you, not the other way around.
    • Have passion for what you do. Passion and knowledge go hand-in-hand with presenting. If you're not passionate about your subject then you won't emit that to your peeps. On new topics I spend a few days before my presentations just getting deep into something not only to grok the topic but to really find the elegance (and ugliness) of something buried deep in the subject. This really helps me get excited about new topics and hopefully that shows in my work.
    • Watch everyone and build your own style. A disadvantage to being an MVP is that we're generally ahead of the curve when it comes to technology. At the last PDC I was rather bored as everything there was old news to me. At TechEd it was the same. However I try to get into see other people present, not for the content but the style and techniques that they emit. Learning from the best is the best way to learn, and you can't get that from a book. So if you're planning on getting into the speaking world spend some time watching the top dogs and seeing what makes their sessions that much better. What do you like about it? Then take it home, twist it and make it your own.
    • Give yourself time and use a little patience. I cook from time to time and it's never a good thing to just toss something in the pan and fry it on high heat (sometimes, but not always). Many times you cook it on medium heat, stirring it and letting the flavor seep in to add to the taste. Presenting is like that so give it time. The more you do it, the better you should get and you'll learn from your own mistakes, tweak a few things, and then come out next time with something even better.
    • Learn, learn, and then learn some more. If you speak at TechEd then you have access to the speaker coaching provided by Microsoft. Rocky Lhotka highly recommends taking advantage of this resource as these guys know all the tips and tricks and have the experience. I'm definitely going to see if I can do this next time round as it sounds like a great resource to tap into.
    • Take advantage of opportunity that presents itself, and make the opportunity happen if it doesn't. I've only been publicly speaking for a few years (and it shows) but others have been out there forever. Get involved with groups like Toastmasters (and similar groups) and look for opportunities to speak. Even if it's standing up in your own development group or department and talking about a cool new technology you see benefit from, it's a way to dust out those cobwebs and get the nervous bug out of your system. The more you do it, the more comfortable you'll feel.

    I wanted to mention one thing about doing last minute changes. I'm one of the worst people for that and usually update my presentations right up to the last day. Julie Lerman had a tip about this in a blog entry:

    With most conferences,speakers need to submit their powerpoints way in advance of the conferences. Attendees are provided with books filled with the printouts of the decks so that they can take notes during the conference. It is not uncommon with a new talk to fine tune it between that early preparation and the actual time you your presentation.

    Though this has only happened once, it struck me (and stuck in my brain) when an attendee wrote on an eval that it was a pain that the slides in my talk were different than the book.

    So this time around, rather than hoping that I'm going to remember in the middle of a talk and say "oh, I changed this slide a little (for your benefit)" I am just putting tiny little notes on the bottom of modified slides: "This slide is slightly modified from the original printed version".

    I found a follow-up by Billy Hollis on this (who is an additionally awesome speaker) that was a great tip:

    I solved this one long ago. Any text that's changed from the printed version I format with light green color. And I tell the audience that anything they see in light green is new or changed. With that visual cue, they don't seem to mind minor changes at all. What's confusing is knowing there is some change, but not being sure exactly how much.

    Hope these tips and ideas get something sparked for you and hope to see you out there speaking some day! 

    Many thanks to those that I bugged and pestered especially Julie Lerman, Rocky Lhotka, and Richard Campbell.

    P.S. Julie Lerman has a category on her blog here with lots of tips and her presentations mixed in. It's a good resource and a great read so check it out!

  • Taking a look at DotNetNuke 4.5

    While I'm a SharePoint guy thru-and-thru, I still like DotNetNuke think Shawn Walker and the community have done a bang-up job getting it to where it is today. It's now reached version 4.5 and includes some new features like support for Microsoft AJAX. I still struggle with module development for DNN and find writing SharePoint Web Parts (especially 2007) much easier, but PAs rule the planet for extending functionality where you don't have server access like you need for SharePoint.

    Here's a quick rundown on things I've noticed in the new version of DotNetNuke.

    The immediate thing you'll see is the improved header when logging in as admin or host.

    It's a lot cleaner and takes up a lot less real estate. Don't worry, the old header is there via an AJAX collapsible panel so it's just a click away:

    All the regular tasks are there, including a new Design view. This allows you to see the page but without the content in each module. The View vs. Edit mode is just like the old Preview mode so that's still there.

    What's new is the Solutions Explorer. This is a DotNetNuke marketplace type module that comes built-in via the Host menu:

    Looks very interesting and it loads the content each time you view it, so it's a portal to the live site to always keep you up to date.

    If you're like me I use the default accounts (host/dnnhost and admin/dnnadmin) however if you still leave those passwords intact for those accounts you'll see something like this when you login:

    It's a nice little feature to let you know your Host or Admin account could be compromised. I actually stumbled over a few DNN sites out there and for kicks would log in as admin, then send the admin and email telling him to change the password.

    Other small but nice changes I've noticed are like the host settings screen displays relative and physical paths where DNN is installed (sometimes nice to know on a hosting environment).

    Overall it's a great release, supports AJAX (Atlas, or whatever it is we're calling it these days) and looks like another solid version to build your community sites on.

  • Priority is a sequence, not a single number!

    This morning I opened up an email (and associated spreadsheet) that just made me cringe. Which of course made me blog about it, so here we are. Welcome to my world.

    Time and time again I get a list of stories that a team has put together for me to either review, estimate, build, filter, whatever. Time and time again I keep seeing this:

    StoryPointsPriority
    As a user I can ...51
    As an administrator I can ...31
    As an application I can ...41

    No. No. No!

    Priority is not "make everything 1 so the team will do it". When you're standing in front of a task wall with dozens of tasks relating to various stories, which one do you pick? For me, I take on the tasks that are the highest priority based on what the user wants. If he wants Feature A to be first, then so be it and I grab the tasks related to Feature A.

    However I can't do this (read: will not do this) when someone puts *everything* to be Priority 1. It's like asking someone to give more than 100%. You simply cannot do it. Priority is there to organize stories so the most important one gets done first. How you define "most important" is up to you, whether it's technical risk, business value, etc. and what value that gives you.

    This is more like what priority should be:

    StoryPointsPriority
    As a user I can ...51
    As an administrator I can ...32
    As an application I can ...43

    Another thing I see is priority like this:

    StoryPointsPriority
    As a user I can ...5High
    As an administrator I can ...3Medium
    As an application I can ...4High

    Another no-no. I can't tell from all the "High" features what is the "Highest" one and we're basically back to everything being a 1 but now we're calling it "High". Unless you've had a mulitple core upgrade in your brain (or are someone like Hanselman, JP, or Ayende who don't sleep) you do things one at a time then move on. As developers and architects, we need to know what is the most important thing to start with based on what the business need is.

    With customers everything is important, but for planning sake it just makes life easier to have a unique list of priorities rather than everything being #1. When all is said and done and I have to choose between 3 different #1s in a list, I'll pick one randomly based on how I feel that day. And that doesn't do your customer any good.

    Okay, enough ranting this morning. I still haven't finished my first coffee and I still have a few dozen emails to go through.

  • Sessions and speakers for the Calgary Code Camp

    The speakers and some of the sessions are up on the Calgary Code Camp site.

    I'm presenting two sessions on XNA programming. John Bristowe and I will double-team at the camp going over the basics then we crank up the volume to 11 and write some games as we go deep into the XNA framework and tools.

    Last year was fun but this year is going to be even funner. Yes, funner. Funest. Fun to the nth degree. The mosted fun you'll ever have for $0.

    Be there.

  • DataTable vs. BindingList<T>

    We were having a discusion today about the merits of using DataTables vs. BindingList<T> (a generic in .NET 2.0) for loading up domain objects into the UI layer (say to display on a grid). My gut feel is telling me DataTables are evil and wrong, but I don't have a lot of hard evidence to choose one over the other. We brainstormed some pros and cons for each and they're listed below.

    • DataTable
      • Pros
        • Simple to implement, not much code needed
        • Can use select statements to retrieve values
        • Change events are managed within the object automagically
        • Display handling for errors built-in (when binding to grids)
      • Cons
        • Human errors (typos on column names for example) can be exposed at runtime and can't be easily tested
        • Need to implement DataViews in order to sort or filter
        • Can't test for type safety (or as Scott says DataTables are bowls of fruit)
        • Difficult to implement business rules or logic
        • Bloatware, lot of extra baggage for features you don't need
    • BindingList<T>
      • Pros
        • No mapping needed
        • Strongly typed and type-safe
        • Loosly coupled compared to a data table -> mapping columns -> domain object
        • More extensible via superclasses, interfaces, etc.
      • Cons
        • Must iterate through list to find items
        • Must implement some mechanism (like a decorator pattern) to respond to change events
        • More short term investment to learn and implement

    Are we wrong with our list or is there something that you've come across with your dealings with the two approaches?