Scott Hanselman

Hanselman List of Podcasts for .NET Programmers

February 10, '09 Comments [40] Posted in ASP.NET | Learning .NET | Podcast | Programming
Sponsored By

I used to hate podcasts, but that didn't last long. I got a longer commute, bandwidth became less of an issue and podcasts, frankly, got better. Of course, I'm a smidge biased.

I listen to a number of podcasts, not all technical, of course. I also watch the nightly news and a number of other news and political TV shows delivered not over the air or via cable, but by podcast.

Here's some technical podcasts, collected and recommended by my folks and friends on Twitter. I've heard some, and added my thoughts. Others I look forward to listening to. They are listed in no particular order. I threw mine in there as well. ;)

NOTE: If you've created a list of YOUR favorite .NET Podcasts, send me a link to your blog and I'll add it here:

And here's mine:

Hanselman's Super Karate Death Car List of .NET and Software Podcasts

imageThoughtworks IT Matters - I respect a lot of the guys over at Thoughtworks so I'll give this a listen just based on that. It looks like it's updated infrequently, and there's no dates on their shows on the site (the RSS includes them), so hopefully they'll get a nice meter going and perhaps commit to a monthly or weekly schedule. Looks promising and fairy platform-agnostic, so likely useful for anyone programming in any language.

imageHanselminutes - I'll let Scott Bellware's tweeted review of my show speak, rather than toot my own horn: "the one i look forward to is hanselminutes. know it? host is a bit of a nut, but ethical and with a heart :)"

I'm a .NET person, but I also dabble in Ruby and did some time at Nike coding Java. I also like gadgets so the show has become all of the above plus (I think) interesting interviews.

image .NET Rocks - The first and longest running, now on show #418 which is CRAZY. Richard and Carl set the standard for those that followed them. Often interviews, sometimes random, always interesting, .NET Rocks is the gold standard.

image ALT.NET Podcast - "You're the type of developer who uses whatever works while keeping an eye out for a better way, you reach outside the mainstream to adopt the best of any community, you're not content with the status quo and you realize that tools are great, but they only take you so far..." this might be the podcast for you.

image Sparkling Client - Entirely focused on Silverlight and RIA (Rich Internet Application) technologies, I'd call this an "up and comer" in the .NET podcast world.

image ASP.NET Podcast by Wally McClure - The site design is a little wacky, but Wally's got 130+ podcasts focused entirely on ASP.NET and the content continues. He has covered Azure, lots of ASP.NET AJAX, jQuery and many other topics.

image Polymorphic Podcast - Craig Shoemaker works for Infragistics and hosts this .NET focused podcast. It's a little spotty as far as the frequency of updates, but he has an easy style and focuses a lot of ASP.NET. He's also had a couple of killer interviews like his one with craigslist founder Craig Newmark.

imageHerding Code - Hosted by K. Scott Allen, Kevin Dente, Scott Koon and Jon Galloway, this is kind of the TWiT of .NET podcasts. If you ever wish you could go to coffee and shoot the sh*t with some really smart folks, but you just can't find enough find enough smart guys or enough coffee, look no farther than Herding Code. Each host has a different perspective that adds to the conversation. The sound quality and leveling can be a little off, but not enough to distract from the good content.

image Deep Fried Bytes - "Deep Fried Bytes is an audio talk show with a Southern flavor hosted by technologists and developers Keith Elder and Chris Woodruff." Also tends to be a little irregular as far as publish dates, but they always have interesting guests. Mostly Windows focused, but not in a fanboy way, they've had a Linux/Gnome guest and are off to a fine start.  

image Software Engineering Radio - A language and platform agnostic show, these folks have over 120 shows in the can. The audio quality has been a little inconsistent, but the content is diverse and the guests are first class. Frankly this is one of the most diverse podcasts out there, and they do it without sacrificing depth. Recommended.

image The Java Posse - To understand .NET, one has to understand that which came before. The Java Posse has hosts from Sun, Google and Navigenics and is a really quick and terse way to get up to speed on what's happening in the world of Java. It tends to be a little random and conversational, but they have VERY thorough show notes and links. If you're into Java or selling against Java, a podcast to watch.

image OpenWeb Podcast - It's new, but it's got John Resig. They are still getting the handle of the audio and tend to have problems overdriving the microphone and have issues with leveling and so that's a little distracting. However, it's got some really smart Google and Mozilla employees talking about the Open Web and how to keep it open. They also get +2 Charisma for publishing not only in MP3 but also in (the kind of irrelevant but totally open) OGG Vorbis format.

They have been REALLY spotty, publishing only every month or two, but that's probably because they are DOING things to make the web better. Let's pressure them to publish more.

image Ruby on Rails Podcast - Also pretty spotting on their publish dates, but always a good overview about what's going on in the world of Ruby on Rails. Tends to be a little chattier than I like in a technical podcast "Hey, how's it going, good, how's the weather" but that's a stylistic thing.

image This Week on Channel 9 - This is kind of "The Daily Show" for Microsoft Developer Geeks. "Every week Dan Fernandez and Brian Keller sift through hundreds of blogs, videos, and announcements to find the most important stories in the developer community." It's a video podcast primarily, but they also off an MP3 download version as well as versions for iPod and Zune. I visit this show in person every few months, and it's a lot of fun and a great rollup of the week's goings on.



Elegant Code Cast LogoElegant CodeCast - With a spin towards the Agile/TDD crowd, Elegant CodeCast puts on a show on a roughly twice a month basis.




Enjoy! I say give each one a trial or two and see which shows stick. That's what I do. Then I revisit them a year later to see if they stick differently.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

UrlScan and ADO.NET Data Services (Astoria)

February 10, '09 Comments [6] Posted in ASP.NET | IIS | Web Services
Sponsored By

In an ongoing series on different reasons that I suck, I wanted to share another interesting quasi-debugging story about this public ADO.NET Data Services (Astoria) service I'm trying to help get live at a large company.

I'd mentioned how I had some trouble with UrlScan and Astoria Services in my post on "RTFLF - Read the Expletive Log File."

UrlScan 3.1 is a security tool that restricts the types of HTTP requests that IIS will process. By blocking specific HTTP requests, the UrlScan 3.1 security tool helps to prevent potentially harmful requests from reaching applications on the server. UrlScan 3.1 is an update to UrlScan 2.5 supports IIS 5.1, IIS 6.0 and IIS 7.0 on Windows Vista and Windows Server 2008.

UrlScan is a really valuable tool and a really powerful way to slap down evil and attacks on your Web Server. It is VERY configurable and very powerful and takes a clear mind to make sure that all your application's URLs work well while still preventing evil. Learn how to setup UrlScan here.

When we moved the service onto a production machine, it turned out that their production UrlScan.ini was locked down more than development. They were disallowing single quotes in QueryStrings as well as Dots in Url Paths.

The trick was that they haven't partitioned their sites up by subdomain, or website, just AppDomain. This means that they have 40+ "logical sites" running under one instances of IIS6, which means that they can't setup a separate IIS site with their own configuration and instance of the UrlScan ISAPI Filter. They also didn't feel like making a separate domain or subdomain just for our one little service.

OK, blah blah blah, background, right? So where did things go wrong?

URLScan has a section in the UrlScan.ini file called [AlwaysAllowedUrls] that does just that. It allows access to any URL in that section. Adding a URL there will make UrlScan completely ignore it.

I added our service to this section like this:


And I thought this would work. It DID allow us to request that Url. However, no other Astoria queries worked.

When you traverse Entities in ADO.NET Data Services (Astoria), your URLs look like this, for example:


And I didn't initially see why these were being blocked.

The issue, pointed out to me by the IIS Team's Wade Hilmo (check out his blog) was obvious (hence: I suck). The URL isn't the file, it's everything before the ?. It's everything before the QueryString. This is one of those "Duh" moments, and was my bad. I know the difference, of course, and understand Urls fully, but I completely brain-farted this obvious point when looking at ADO.NET Data Service queries and had been mentally parsing them wrong for hours. Once Wade set me straight, configuring UrlScan.ini was trivial:


In the ADO.NET Data Services parlance, the Entities exist after the .svc filename, but before the ? delimiter. Once we added those to our UrlScan.ini file, we were able to maintain the existing state of "super locked-down-ed-ness" while still allowing our services to run.

It is not possible to have a SQL Injection attack on a ADO.NET Data Service, due to the complete query rewrite that happens server side when a URL query comes into the system. The analogy is to think of in the same way that a LINQ query goes through a complete query re-write or a translation layer before it actually gets executed as SQL on the server. This re-write or translation is the layer of protection against SQL Injection attacks.

I was happy to learn that I could have my Cake ADO.NET Data Services and my UrlScan too.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

IPrincipal (User) ModelBinder in ASP.NET MVC for easier testing

February 6, '09 Comments [17] Posted in ASP.NET | ASP.NET MVC
Sponsored By

ModelBinders are great. I've blogged a bit about them before like the File Upload Model Binder.

I am working on some code like this:

public ActionResult Edit(int id) {

Dinner dinner = dinnerRepository.FindDinner(id);

if (dinner.HostedBy != User.Identity.Name)
return View("InvalidOwner");

var viewModel = new DinnerFormViewModel {
Dinner = dinner,
Countries = new SelectList(PhoneValidator.Countries, dinner.Country)

return View(viewModel);

It's pretty straight forward, but this Controller knows too much. It's reaching into implicit parameters. The id was passed in, but the User is actually a property of the Controller base class and ultimately requires an HttpContext. Having this method "know" about the User object, and worse yet, having the User object go reaching into HttpContext.Current makes this hard to test.

I'd like to have the convenience of passing in the User (actually an IPrincipal interface) when I want to test, but when I'm running the app, I'd like to have the IPrincipal get passed into my method automatically. Enter the Model Binder. I need to teach ASP.NET MVC what to do when it sees a type as a parameter.

This quickie model binder is now responsible for one thing - it knows how to reach down into the HttpContext and get the current User (IPrincipal). It has one single responsibility.

public class IPrincipalModelBinder : IModelBinder
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
if (controllerContext == null) {
throw new ArgumentNullException("controllerContext");
if (bindingContext == null) {
throw new ArgumentNullException("bindingContext");
IPrincipal p = controllerContext.HttpContext.User;
return p;

Now I can release the Controller from the emotional baggage of knowing too much about the User object. It can just have that passed in automatically by the framework. I just need to register the binder to tell folks about it. I can either do it on a one-off basis and put an attribute on this one method parameter:

public ActionResult Edit(int id,                        
IPrincipal user)

But even better, I can just tell the whole application once in the global.asax:

void Application_Start() {
RegisterRoutes(RouteTable.Routes); //unrelated, don't sweat this line.
ModelBinders.Binders[typeof(IPrincipal)] = new IPrincipalModelBinder();

Now that ASP.NET MVC knows what to do when it see an IPrincipal as a method parameter, my method gets nicer.

public ActionResult Edit(int id, IPrincipal user) {

Dinner dinner = dinnerRepository.FindDinner(id);

if (dinner.HostedBy != user.Identity.Name)
return View("InvalidOwner");

var viewModel = new DinnerFormViewModel {
Dinner = dinner,
Countries = new SelectList(PhoneValidator.Countries, dinner.Country)

return View(viewModel);

Now I can test my controller more easily by passing in fake users. No need for mocking in this case!

public void EditAllowsUsersToEditDinnersTheyOwn()
// Arrange
DinnersController controller = new DinnersController(new TestDinnerRespository());

// Act
IPrincipal FakeUser = new GenericPrincipal(new GenericIdentity("Scott","Forms"),null);
ViewResult result = controller.Edit(4, FakeUser) as ViewResult;

// Yada yada yada assert etc etc etc
Assert.IsTrue(result.ViewName != "InvalidOwner");

Fun stuff.

UPDATE: Phil had an interesting idea. He said, why not make method overloads, one for testing and one for without. I can see how this might be controversial, but it's very pragmatic.

public ActionResult Edit(int id)
return Edit(id, User); //This one uses HttpContext

You'd use this one as before at runtime, and call the overload that takes the IPrincipal explicitly for testing.

Yes, I realize I could use an IoC container for this also.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

How To Twitter - First Steps and a Twitter Glossary

February 5, '09 Comments [22] Posted in Musings
Sponsored By

tour_1UPDATE: Want more advanced Twitter Tips?
We're having loads of fun over on Twitter. I've blogged about it before and how it's a conversation starter, a message bus, a subject tagger and conference organizer and a link sharing service. It's a river of uselessfulness and truthiness. It's a permanent cocktail party where you know some folks, and don't know others. Some are famous, some are your friends. There's a the constant background of overheard conversations, except on Twitter, it's socially acceptable, nay, encouraged, to jump in. No need to say, "oh, I couldn't help but overheard, excuse me but..."

A Twitter Glossary

UPDATE: Readers point out there's also a very good "Twictionary" that's much more complete at so check it out also!


When you say something on twitter, it has to be under 140 characters. That's a hard limit. What you say is called a tweet. It's a noun and a verb. "Oh, I saw this tweet..." and "He was tweeting all day."

Alternatively, some folks say "twittered" as in "I am twittering" and "I sent a twitter." I would say this is not typical.

Twitter is permanent (so far) so every tweet has a permalink. That means that every single tweet you put out there is now something that can be linked to, for example, this one: This immediately makes twitter different from IRC or other chat systems. That tweet is public and it's out there and it's web searchable.

I have always said, don't give bile a permalink. If you're a jerk on Twitter (and you care) it's in the record. Tweet positively.


A twoosh is a tweet that is exactly 140 characters, no more no less. You've maximized the size of your tweet. Some folks believe this is a sign of skill. You'll tweet and learn that it's usually luck.


People on Twitter. 'Nuff said.


When Tweeple meet in person.

Twitter Client

While you can read tweets and tweet yourself at and on your phone, most folks use a Twitter Client that talks to the Twitter API. Just like you can read your email on the web, but many folks use an email client.

There's lots of's the top 100 twitter clients.

Me, I like:

  • Windows Mobile - Tiny Twitter - fast and small and basic.
  • iPhone - TwitterFon - simple and clean, lets you do everything you can on the web and more.
  • Power User - TweetDeck - powerful as it lets you have multiple columns for search terms you want to monitor.
  • Most Pretty (Vista) - Chirp - Missing some functionality, but it's gorgeous.
  • .NET Educational - Witty - A free open source client for XP and Vista written in WPF

I use TweetDeck the most.

Followers and Following

When you "follow" someone, you are saying you want them to appear in your "timeline" of friends. I follow something like 500 people. It's like subscribing to a blog you're interested in. However, I have more than 500 people following me...but (here's the important part) I don't need to follow everyone back.

If you follow everyone and keep some 1:1 ratio between who you follow and who follows you, that will render your main timeline useless. Follow who is interesting to you, but make sure you can see the @replies from folks you don't follow. This leads me to:


When you want to reply to someone, you hit the little reply arrow in your client or on the web. The client will insert that users name with an @ sign, like @shanselman. It will also populate some hidden metadata indicating which tweet you were replying to. It's helpful to reply to specific tweets as it makes the conversation easier to follow later. Often newbies reply to the most recent tweet, but then make reference to tweets from days before.

For maximum social-ness, the first setting you should change when you sign up for Twitter is your @replies setting. Set it to show replies from anyone rather than just the replies from people you follow. Otherwise you'll miss out on a lot of the conversation.

I can see your replies even if I don't follow you. You don't need permission from me or anyone to reply and jump into a conversation.

If you want to watch the replies for a Twitter user that is not you, you can use or a new column in TweetDeck. For example, here's me: By searching for the string "shanselman" you can see both replies as well as mentions, like Often new folks try to reply but mention your name rather than correctly using the @shanselman syntax.

You can also subscribe to an RSS feed for queries. But it's not just for ego-surfing. I also watch for diabetes and You get the idea.

Retweet or RT

When you see a tweet you really like, you can "retweet" it. Usually newbies will over-retweet, so watch for that.

The idea is that if @foo has 100 followers and @bar has 100 different followers and @foo retweets @bar's tweet, the idea is magnified, and may go viral.

If you care, there are tools to measure and track retweets. I don't care. I'm in it for the conversation and the sharing. If something strikes you as awesome, retweet it. Many Twitter clients have a "retweet" button now that will do this for you.

Twitter #Hashcodes

Sometimes you'll see a tweet like

Having fun at #mix09


bill gates mosquitoes / unleashed on #ted audience / where is the 'green' deet #haiku

The hashcode is an informal way to "tag" something to a category or categories. For example, the second tweet there refers to both the Ted conference and marks the tweet as a Haiku. (Haiku on Twitter are called "Twaiku" but that's pretty geeky. ;)

Hashcodes can help you be social at a conference like #oscon or #mix09 but they can also create informal "chat rooms" like for the show #lost or to find folks that share a common interest like:

any #women out there who are #runners? Trying to get some more ideas for my blog.

When I got to a conference I always ask around for the conference hashcode, then create a search so I can find out where folks are hanging out. It really enhances the experience.

Tiny URLs

image Since you've only got 140 characters for a Tweet, it's really important that you not share large URLs. Nearly everyone on Twitter will use a URL shrinking service like or or Funny, TinyUrl is positively HUGE!

Make sure your client will automatically shrink URLs. Most do.

Sharing Pictures with TwitPic

There are a lot of services that "orbit" Twitter. They aren't Twitter, and they usually aren't affiliated with Twitter, but they enhance the service, like the tiny URL makers above.

One of these services is TwitPic. It has an API that lets you attach a photo from your client, then it'll include a tiny link to that photo. Some clients can even extract the photo seamlessly. British entertainer Stephen Fry used Twitter and Twitpic and a mobile phone recently to tweet his way to safety whilst trapped in an elevator, er, lift.

Direct Messages

These are exactly what they sound like - private tweets between two people. The only trick here is that you can only "DM" people who follow you.

Integration with Facebook and other Social Sites

Facebook has "Status Updates" and my friends think I update my status all the time. In fact, there's a Twitter Facebook application that you can add to your Facebook Profile so that your Facebook Status is updated with your Tweets.

I find this to be fun as it allows topics to fire up inside Facebook and lets folks who aren't on Twitter get in on the conversation. Other social sites like FriendFeed and have similar features.


Most people try out twitter, follow a few people, tweet some, get confused or bored and never come back. Totally understandable, as it's all a big secret handshake.

Here's what I suggest.

  1. Sign up
  2. Pick a Twitter Client (see list above)
    • Don't set the client to bother you (sound, notify, etc) every time something happens. You'll go nuts. I set mine to notify on replies only. I check the "river of tweets" whenever I feel like it. It's an interrupt, remember. You'll never keep up with all the tweets. You'll never have fun if you try to drink from the firehose, so don't. When it bothers you, shut it down. When there's a fun topic happening, jump in.
  3. Pick at LEAST 20 people or more to follow.
    • Mix it up. Follow people in all of the things you're interested in. For example, don't just follow programmers, or famous people, or news sites.
      I've seen folks follow just a few people, then get frustrated because they feel one person is dominating their "tweetstream." If you follow just me and @codinghorror, you'll immediately hate us both because it'll seem like we tweet all day. (I don't, honest) If you have enough people, it'll seem more like a cocktail party with lots of folks talking, as opposed to a lecture by two obnoxious dudes.
    • There are many famous people on twitter but there's also lots of useful bots and news services. For example, @cnn, and @npr, but also companies with Twitter specific discounts like @DellOutlet.
      Another example: I wrote a Twitter-bot that posts funny things that my 3 year old says (or yours!) and cute things that are OverheardAtHome using the totally automated Twitter name @overheardathome.
  4. Watch for other interesting people to follow.
    • If someone you follow seems be having a conversation with someone you aren't following, why not use the "Follow" feature of your client to listen to that new person. You can always unfollow them.
  5. Tweet smartly.

Have fun! See you on Twitter. I'm @shanselman.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Technical Presentations: Be Prepared for Absolute Chaos

February 4, '09 Comments [18] Posted in Musings
Sponsored By

This is kind of random, but yesterday was such a surreal day I had to share it with someone, and today, that someone is you, Dear Reader.

I do a lot of stand up comedy technical presentations, and have now for over ten years, so there's a number of things I've become pretty comfortable with. I'm usually pretty prepared and I've written a few posts with presentation tips. Here's the outline of my favorite tips:

  1. Have a Reset Strategy (One-Click)
  2. Know Your Affectations (Ssssssseriously)
  3. Know When To Move and When To Not Move (Red light!)
  4. For the Love of All That Is Holy, FONT SIZE, People (See that?)
  5. Speak their Language (Know the Audience)
  6. Be Utterly Prepared (No excuses)
  8. System Setup (Be unique, but don't be nuts)
  9. Speaking (Um…)
  10. Advancing Slides (No lasers!)
  11. Care (deeply)

But this post isn't about tips. This about panic, chaos, and miracles. ;)

The Setup

Yesterday I was in Seattle for TechReady8. It's an internal Microsoft conference, only for employees. It's like TechEd and Mix and PDC all rolled into one, meant to prepare the field for the coming year. It's full of stuff that I can't tell you or I'd have to kill you (not really). Folks fly in from all over the world and have a week of training and talks from Product Groups. It's not just developers, of course, there's piles of IT folks, mobile, etc.

DevDiv (Developer Division, where I work) is one "Track" of the larger conference. The owner is our Services CTO, Norm Judah, who you might remember from last year's podcast. (That was the same conference I met and interviewed physicist Michio Kaku.)

A month ago, my partner in crime, Chuck Sterling, and I were told I was to give the Dev Track Keynote. Chuck was my ghost writer and concierge, helping me with timing, demos, coordination, and a pile of other behind-the-music type stuff. We imagined a pretty complex talk, and it eventually ballooned into something we called an "Unkeynote." We decided it would go against basically all the rules (read: marketing) and we'd go crazy.

Fast forward a few weeks and we'd put together a 75 minute talk (which isn't a lot of time, it turns out) with myself hosting and five other speakers. Each would get 10 minutes to blow me away with a demo. I can't tell you all the details as much of it was internal stuff (that you'll eventually hear about later this year) but this was the general idea with some context as to the hardware, software and setup we needed. Remember, each one got 10 minutes.

Presenters and Hardware

  • Brad Abrams - "Something Crazy with Silverlight"
    • His laptop, running a daily Windows 7 build
  • Lauren Cooney/Darth Vader - "/web"
    • My laptop, running yesterday's Windows 7 build
  • Chris Dias - "Unbelievable Visual Studio Addin"
    • His laptop, running Vista and a daily of Visual Studio 10
  • James Whittaker - "Worlds Wackiest Error Messages"
    • A Hyper-V machine and daily build of a VM with VSTS
  • Stephen Toub - "891 Billion Monkeys, in parallel"
    • A quad-proc laptop and a 24-proc (yes, 24) Windows 2008 Server

All this was setup on the table on stage, along with my Dell Mini 9 that had one purpose - it ran the timer that comes with ZoomIt. It had a full screen display counting down from 10 minutes. I reset it after each speaker came up.

This was a lot of hardware running a lot of beta software. We had no "backup machines," it just wasn't feasible. We started setting up...


It was a miracle these folks agreed to help me, so that was cool. We all showed up at 8am for rehearsal. The talk was at 10:30. However, there are always catches and crazy stuff when you're putting together a parade of technology like this.

Here's some of the stuff that happened in the few hours before the talk:

  • JamesW had never seen the demo. He'd literally just gotten off a plane from a week in Hawaii. We went over his demo 15 minutes before the talk.
  • My laptop blue screened in the display driver an hour before the talk, causing me to not trust it for anything. It didn't BSOD in the talk, though, which was a blessing. That's what I get for running dailies. ;)
  • Neither Brad nor Stephen could get their laptops to recognize the projector and flip their displays. Stephen had the balls to install a beta ATI driver 45 minutes before the talk and it worked. We just about had heart attacks collectively when we saw him start installing it.
  • I was told by the organizers that I HAD to run the PowerPoint on their computer, not my laptop. I'd included an audio file and a movie within my PowerPoint using "Insert Video", etc. When I advanced to a slide, the movie automatically played in the slide. However, when I copied the PowerPoint file over I forgot the movie file (it was a link, rather than an embedded movie), so that didn't work initially. Then I moved the movie file over, but it wouldn't play. The main presentation machine didn't have the video codec I needed! Rather than try to find the right codec, I literally trans-encoded my video file to Windows Media on my laptop and copied the new file over. But it still wouldn't play! (Keep in mind this is like 9:30am and we're on in an hour, and I'm messing with videos of dancing hamsters.) Well, it seems that if you have an embedded video in PowerPoint and you advance to that slide but you've never run Windows Media Player at least once to go their initial setup process, you get a black square where you video should be. Don't ask me how I knew this, I just knew it in my gut. Since they'd just built this machine from an image, somehow I knew they hadn't run Windows Media at least once.
  • The network went down. Not the network on the laptop, or the hub for the stage, but the WHOLE FLOOR. And it was down for an hour. This sucked because two of the demos required RAS (internal) access back to the Redmond Campus to work.


imageYour Presentation Has Been Deleted

See that picture on the right? That says "Chuck Sterling deleted 7:49am." That's the PowerPoint that Chuck and I worked on until late the night before. That time is 10 minutes before rehearsal. Live Mesh is telling me Chuck deleted our presentation 10 minutes ago and now it's been deleted from my computer as well.

We'd been collaborating on this presentation for weeks in the Mesh. I hooked up my computer on stage, opened the presentation folder and the file was gone.

I checked this log and turned to Chuck:

"Um, you deleted the presentation?"

"Um, no?"

"Um, YA!"

"I seriously didn't."

"This program disagrees with you, Chuck. Where's the presentation?"

(I can only assume I thought Chuck was holding it hostage or hiding it somewhere in his pants at this point.)

"I just copied it to the desktop."

"You dragged it with your mouse?"


"Dude, that's a move, not a copy."

"No, it's a copy when you drag between drives."

"But the folder is on your desktop, where did you drag it to?"

"Um, my desktop."

"And....MOVE. Can you put it back? Pretty Please?"

Yes, it was pretty freaking tense, this exchange, let's just say. Of course, when you're using File Synchronization technology like we were using and we were both Administrators (as opposed to read-only Reviewer) you can get into trouble. Chuck innocently moved the file into the folder required for the conference techs, and the deleted was sync'ed to my machine over the Mesh. We were panicked, to say the least.

Still, Crisis #13 averted.

Something Always Goes Wrong on Stage

Turned out that while trying to debug the network problem during rehearsal the network admins in the room had unplugged some cables and moved things around. Someone ended up plugging the network cable that ran from Chris Dias' laptop into another computer. Rather than from computer to hub, it was computer to computer, knocking both off the network. We didn't discover this until Chris came up on stage.

It didn't take long to notice the big red X over his network connection. The demo required network and he'd said it repeatedly. Without it, we had nothing.

Amazingly, we were able to quickly hook up to the public wireless network then RAS into work over while I did a little tap dance. The demo worked perfectly and we only lost about 1 minute (and audiences love a tight-rope act.)

"No Banter"

One of the presenters has a notoriously dry sense of humor and he/she had said something like "I've got a good script, so let's have no banter during my segment." (I tend to tease/play/smartmouth during team presentations. Just ask Phil.)

I knew I was going to have trouble remembering this, so I put it on my notes. We had five presenters so I made five large 8.5"x11" (A4ish) pieces of paper and wrote on them with a large felt pen...basically giant notes. Not small cards like you often see when public speaking. Giant. Like cue cards.

I taped these giant notes to the floor, so if I glanced down at my feet I'd be reminded of a particular point. (I do this tip a lot...keeps me on task.) On this guy's sheet, I wrote down the timing, some points he'd hit in the demo and then "NO BANTER" in large capital letters.

This note was, of course, discovered by the other presenters who had no end of fun with. Still, it helped me during the talk. :)


I have no conclusion.

All of this happened over the two and a half hours from 8am until 10:30am when we did our talk.

Here's the crazy part. It went great. Every demo worked, every presenter got laughs and felt good about their message. The audience stayed awake the whole time and applauded at the end. The presentation part really couldn't have gone better, even though the previous two and a half hours really couldn't have gone worse unless there'd been a fire or a someone had lost a finger.

Crazy crazy stuff happens in technical presentations. You can prepare all you want, but sometimes things just go wrong. Fuses blow, batteries die, microphones break, computers decide that now is the best time to defrag themselves, cats and dogs, living together, mass hysteria. My tip - don't get flustered. Have a plan. Make notes on big sheets of paper and tape them to the ground so you can see them when you talk. Bring a timer.

In terms of moving parts, this particular presentation was at least as complex as the talk I did at PDC this last year. Usually I do xcopy-deploy demos...really simple stuff that can't go wrong. Someone said after this demo that they'd seen the PDC talk and now this one and wondered if all my talks from now on would be like "Super Bowl Halftime Shows" with dancers and lights. I don't know if I have the stamina and emotional health to do one of these again! :)

But still, such fun.

Related Posts

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.