Scott Hanselman

Visual Studio 2012 RC is released - The Big Web Rollup

May 31, '12 Comments [124] Posted in ASP.NET | ASP.NET MVC | Open Source | VS2012
Sponsored By

Today Visual Studio 2012 RC (Release Candidate) came out. (It's 2012, so 11 make less sense than 2010+2) There's a lot of nice improvements for Web Development in this release candidate as we march towards a final release. Here's some of my favorite new features from the "Angle Brackets Team." That's my name for the Web Platform and Tools team. I hope it sticks.

Web Optimization

There's been some significant changes to the web optimization (minification and bundling) framework since beta. There wasn't enough control over what was bundled and in what order in the beta, so that's been moved into a BundleConfig.cs (or .vb) where you have total control, but everything just works out of the box. The API has been simplified and is slightly more fluent which means it's easier to read and easier to write.

Rendering bundles in Beta required some goofy syntax and a lot of repetitive namespaces. In RC it's nice and simple:


And you can change with a params array:

@Styles.Render("~/Content/themes/base/css", "~/Content/css")

Also, bundles aren't bundled when you're in debug mode but are when released without you having to change your markup. The regular compilation flag in web.config controls it and you can certainly override with the BundleTable.EnableOptmizations property if you have specific needs.

The best part is that you can plug in custom libraries. If you don't like the included minification technique or perhaps want to add your own, you can. Howard and the team showed me this small example to add support for LESS files and turn them into CSS as a transform, then minify the results.

public class LessTransform : IBundleTransform
public void Process(BundleContext context, BundleResponse response)
response.Content = dotless.Core.Less.Parse(response.Content);
response.ContentType = "text/css";

Then bundle up the *.less files and transform them as you like.

var lessBundle = new Bundle("~/My/Less").IncludeDirectory("~/My", "*.less");
lessBundle.Transforms.Add(new LessTransform());
lessBundle.Transforms.Add(new CssMinify());

Templates and more

Having good Templates is very important and we'll have even more additions and improvements to templates between now and the final release. Also, because the Web Team has externalized the templates (the web templates themselves are extensions that can be updated out of band) you can expect cool and useful updates even beyond the final release. The Web tends to move fast and we'd like to move fast as well.

There's an Empty template introduced for ASP.NET MVC. Like really empty. Folks asked for it! The markup is cleaner in all templates and as before, is HTML5 by default.

The ASP.NET Web Forms template includes support for the Web Optimization framework as mentioned above. ASP.NET Web Forms (like it or not, haters! ;) ) continues to share features with ASP.NET MVC because, as I've said before, it's all One ASP.NET. That means Routing, Providers, Model Binding, HTML5 support, Web Optimization and more are all features you can count on. They are part of ASP.NET no matter which framework you're choosing to use.

Web API now includes scaffolding support (and Web Forms will soon as well) so you can easily make a CRUD (Create, Read, Update, Delete) API from your model. As with all scaffolding, you can customize it as you like.

Web API has Scaffolding too!

I also like that we're shipping Modernizr, Knockout, jQuery, jQuery validation and jQuery Mobile in our templates and you can bring it hundreds more with NuGet as you like.

Tiny Happy Features for Front End Web Developers

Take note, front end people. The team has looked at the complete experience from File | New Project, through development and debugging and tried to (and continues to tyy to) improve the "tiny cuts" that hurt you when developing web apps. Big new features are fun, but sometimes little features that fit into the middle of your workflow make life better and smooth the way. I like tiny happy features.

If you pull the Debug menu down you'll see it finds all your browsers so you can not only use the one you like without hunting but also change your default quickly. Plus, they've added a Browse With menu to this pull down so ASP.NET MVC folks don't have to go digging for it in right-click context menus.

The debug dropdown now include a Browse With option

If you select Browse With it'll bring up this familiar dialog. Now, try Ctrl-clicking on multiple browsers and click Browse.

Browse With supports multiple selection

The toolbar will change so now you can startup more than one browser with one click, with with F5 or Ctrl-F5.

Multiple Browsers is a choice now for launching your app

When you click it, you can select a specific browser for step-through debugging, then the other browser will launch as well.

Pick a browser for debugging

This is a small, but happy feature that I appreciate.

CSS, JavaScript, and HTML Editor Improvements

Dozens and dozens of improvements and new "smarts" have gone into the CSS, JavaScript and HTML editors. For example, the HTML editor is updated with the latest HTML5 intellisense and validation based on the latest W3C standards. All the attributes and tags that you want are there.

aria and data attributes are available

If I type a hyphen (dash) in the CSS editor I get a smart list of all the vendor specific prefixes, even Opera! These lists include help text as well for properties which was no small amount of work.

We love you Opera, honest.

There's drop-downs and pickers for fonts and colors (my favorite) as well as a color picker.

That's a color picker, my friend

These are just a few bits of polish. There's lots of new snippets and expansions as well.


Be sure to sign up for the 6/7 Meet Windows Azure event with Scott Gu online to see some VERY cool improvements to publishing in Visual Studio. Before then, you can check out new features for Publishing like:

  • Updated cleaner and simpler publish UI
  • Running EF Code First migrations on the publish dialog
  • Incremental database schema publish and preview
  • Update connection strings in web.config on publish (including complex EF connection strings)
  • Prompting for untrusted certificates on publish dialog during publish
  • Automatically convert VS2010 publish profiles to the new VS2012 format
  • You can easily publish from the command line using a publish profile:
    • msbuild mywap.csproj /p:DeployOnBuild=true;PublishProfile=MyProfileName
  • You can also create profile specific transforms, i.e. web.Production.config, but we haven’t updated the tooling yet to create these. In this case if you have a profile specific transform we will execute the build config one first and then the profile one.

ASP.NET and ASP.NET Web Forms

In addition to the new features I've talked about before like Model Binding and better HTML5 support there's:

  • Updates to assist in async ASP.NET development:
    • HttpResponse.ClientDisconnectedToken: A CancellationToken that asynchronously notifies the application when a client has disconnected from the underlying web server.
    • HttpRequest.TimedOutToken: A CancellationToken that asynchronously notifies the application when a request has run longer than the configured request timeout value.
    • HttpContext.ThreadAbortOnTimeout: Allows applications to control the behavior of timed out requests. Defaults to true. When set to false ASP.NET will not Thread Abort the request but rather leave it to the application to end the request.
    • Protection against race conditions and deadlocks that can be introduced by starting async work at invalid times in the request pipeline
  • Added ability for applications to forcibly terminate the underlying TCP connection of a request via HttpRequest.Abort()
  • Improved support for async in Web Forms including support for async page & control event handlers
  • ScriptManager support for the new ASP.NET bundling & minification library
  • Improvements for extending the Web Forms compilation system:
    • New ControlBuilderInterceptor class to enable customization of the Web Forms page & control compilation output
    • TemplateParser.ParseTemplate method that allows the application to generate an ITemplate instance from a string of ASPX markup
  • Support for Entity Framework enums and spatial data types in Dynamic Data


Both ASP.NET MVC and ASP.NET Web API have had a number of improvements since Beta.

  • We now use and support the open source Json.NET serializer for handling of JSON data.
  • You now can easily build custom help and test pages for your web APIs by using the new IApiExplorer service to get a complete runtime description of your web APIs.
  • ASP.NET Web API now provides light weight tracing infrastructure that makes it easy to integrate with existing logging solutions such as System.Diagnostics, ETW and third party logging frameworks. You can enable tracing by providing an ITraceWriter implementation and adding it to your web API configuration.
  • Use the ASP.NET Web API UrlHelper to generate links to related resources in the same application.
  • ASP.NET Web API provides better support for IoC containers through an improved dependency resolver abstraction
  • Use the Add Controller dialog to quickly scaffold a web API controller based on an Entity Framework based model type.
  • Create a unit test project along with your Web API project to get started quickly writing unit tests for your Web API functionality.
  • EF 5 database migrations included out of the box in the ASP.NET MVC 4 Basic Template
  • Add Controller to any project folder
  • Bundling and minification built in
  • The configuration logic For MVC applications has been moved from Global.asax.cs to a set of static classes in the App_Start directory. Routes are registered in RouteConfig.cs. Global MVC filters are registered in FilterConfig.cs. Bundling and minification configuration now lives in BundleConfig.cs.

Visual Studio Theme

Ah, the controversial theme change. They've added a bunch of splashes of color, brightened the background and made the status bar change color depending on your status. I'm not sure what I think about the ALL CAPS menus but I honestly don't look at them much. They seem to be the last thing that folks are freaking out about. My guess (I am NOT a designer) is that there's an implied horizontal rule along the top edge of the letters and if you used mixed case they'd just be floating words. We'll see what happens, maybe it'll be a option to change, maybe not. I'm more worried about the web functionality than the look of the menus. I think the RC looks way way better than the initial Beta, myself, and I understand there are more changes coming as well as clearer icons in the dark theme for the final release. You can read more and look at side by side examples and decide for yourself at the Visual Studio Blog. It's growing on me.

Visual Studio Light Theme

I've even tried out the Dark Theme along with Rob's Wekeroad Ink theme from While I'm not sure if I'm ready to fully make the dark theme switch, it's pretty nice.

My Visual Studio Dark Theme

Other non-Webby Features

Some other features and cool things of note to me (there are lots more than this) are:

  • Customization is back to make for a smaller installation.
  • Install the RC directly over the Beta. No need to uninstall. Whew!
  • Windows Vista support for .NET Framework 4.5
  • XAML compiler incremental builds in Metro apps is now twice as fast as beta.
  • Go-Live license, which means you can publish apps live today and get support if you need it.

Obscure Gotchas and Known Issues

Be sure to go through the readme to make sure that there aren't known issues that might mess you up. As with all pre-release software, be careful. Test things and don't blindly install on systems you care about. I'm installing this "on the metal" but I'm keeping a Visual Studio 2010 SP1 virtual machine around just in case something obscure is discovered.

One gotcha that I know of so far for those of you who are totally riding the beta train. If you install Visual Studio 2012 RC on Windows 8 Release Preview and are trying to get an ASP.NET 3.5 (that's 3.5, be aware) application to work, you'll have trouble with IIS Express. You can work around it by installing IIS8 from the Windows 8 Add Features control panel. Just installing IIS8 will fix a bad registry key created by IIS8 Express. This will be fixed in release. Obscure, but worth noting.

Related Links

All The Download Links - including OFFLINE installers inside ISOs

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

She let me take the computer home. - How did you get started in computers and programming?

May 29, '12 Comments [133] Posted in Musings
Sponsored By

Apple 2 - Wikipedia CommonsI like hearing stories about how people got into computers and programming. Perhaps if I blog my story, you'll share yours.

I went to school in NE Portland in a small and diverse but relatively poor elementary school. I remember the first time a computer showed up in class. It was fifth grade - I think I was 11 - and the computer was an Apple ][. There was only the one computer. This was the 80s and these were $2600 machines if you got the full 48Kb of RAM.

Before I discovered computers I was, in fact, a typewriter nerd. Yes, that existed. I took typing class on old manual (not IBM Selectric) typewriters and I was the kid in class that repaired the typewriters. I remember spending hours trying to figure out what each typewriter needed to fix a stuck key or repair a carriage that wouldn't return.

I was also the A/V (Audio/Visual) geek. This basically meant I was the only one in the class (including the teacher, sometimes) who knew how to thread film onto the projector.

Clearly I was wired to tinker from the start. I was always taking apart the toaster or the clock radio. I loved going to Goodwill or the local flea market and buying broken stuff and trying to bring it back to live. This continues today. Just this weekend my 4 year old and I bought a small toy walking (broken) robot for $2 at a garage sale and spend the evening taking it apart, cleaning the gears, re setting the mechanism and getting it walking again. Perhaps this is also why I like watches with moving parts and hands and not digital ones. I was analog before I was digital, I suppose.

Anyway, when this Apple ][ showed up, I immediately opened it up. I had to see what was inside. This, of course, totally freaked out the teacher but it seemed pretty clear I wasn't going to break it. We had the usual games like Oregon Trail (no color here folks, this was all green screen) and I quickly learned how to get out of these educational games and write things in BASIC.

Oregon Trail - Photo via The Pug Father on Flickr - Creative Commons
Screenshot: The original Oregon Trail computer game. (Photo credit: The_Pug_Father via Flickr)

This was all in 5th grade and this was when it all started. I blogged about my fifth grade teacher in 2004. She and her husband attended my wedding. We stayed in touch until her passing. She - along with my parents - was absolutely instrumental in keeping me out of trouble. I can say that I honestly don't know what I'd be doing if she hadn't done something extraordinary.

She let me take the computer home.

In clearer terms, she let my parents and I effectively "steal" the computer every Friday night after everyone left as long as we had it back Sunday night and ready for Monday morning.

This was massive, in case that's unclear. She played favorites and made a deal. She singled me out because she knew without focus that I would be trouble. They used to joke that I would be voted "most likely to be convicted of a white-collar crime." This was a $2000+ computer in the middle of the 80s - the pride of the school - and they let me take it home. I can't imagine what would have happened had we broken it.

Each Friday evening my Dad would back his pickup up to the outside door of her class and we would abscond with the Apple ][. I'd spend the weekend programming, reading the massive spiral notebooks of Apple internals and generally staying away from trouble.

A year or so later when it was clear that I had a knack for computers, I came home from school one day and the family car was gone and there was a Commodore 64 left in its place. My Mom and Dad had sold the car and bought a Commodore.

When it's 30 years later and you're hanging with your spouse and perhaps watching your kids play you will find yourself thinking about how this crazy journey happened. I am standing on the shoulders not only of computer science giants, but also unsung heroes like my parents and my 5th grade teacher. I look forward to the time when I will make sacrifices for my kids and the children in my life. I hope I make those decisions as unselfishly as did the adults in my life.

Thank you Mrs. Hill, for introducing me to computers even though you were breaking a half dozen rules to make it happen.

Thanks, Mom and Dad for bringing a computer into our house even when there wasn't money for one.

What's your story?

Sponsor: I want to thank my friends at DevExpress for sponsoring last week's feed. Take a moment and check out their stuff as they are lovely folks. Touch-enabled apps require developers to re-think design & user experiences. DevExpress tools help you take on these new challenges using your existing skills & today’s technologies.

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

ASP.NET MVC Beta and RC Upgrades - Confirm your Expectations and Version Numbers in Production Environments

May 22, '12 Comments [18] Posted in ASP.NET | ASP.NET MVC
Sponsored By

I was working on an app locally using a daily build (newer than the currently released one) of ASP.NET MVC and deployed it to a host. I noticed this weird CSS issue. See how the text box on the left running on localhost is small and not styled while the one on the right running on the host is the correct width? You can click on the screenshot if you need to see more.

The Local website's textbox is poorly styled while the same app running the host has a correctly-styled textbox

I dug around a little and using the F12 browser developer tools (as well as good old View Source) I noticed the HTML being created was different! My local app was producing one bit of markup, then when I deployed the same app to my host I would get different markup!

Here's the app's markup running locally:

<input class="text-box single-line" data-val="true" 
data-val-date="The field EventDate must be a date."
data-val-required="The EventDate field is required."
id="EventDate" name="EventDate" type="datetime" value="5/29/2012 1:48:23 AM" />

Here's while running on the host:

<input class="text-box single-line" data-val="true" 
data-val-date="The field EventDate must be a date."
data-val-required="The EventDate field is required."
id="EventDate" name="EventDate" type="text" value="5/29/2012 1:48:23 AM" />

I realize I could have made it more obvious for this but I wanted to make the point that it took a second to notice that my standard ASP.NET MVC Helper call...

<div class="editor-field">
@Html.EditorFor(model => model.EventDate)
@Html.ValidationMessageFor(model => model.EventDate)

...was returning type="text" on the host but type="datetime" on my local machine and that difference was picked up CSS that targeted specific input tags. Weird. Now, EditorFor() can have its behavior overridden with custom files in ~\Shared\EditorTemplates so if there was a DateTime.cshtml in there that would make sense. There wasn't. I wasn't using the very lovely MvcHtml5Templates NuGet package by Scott Kirkland, so that wasn't it.

My spider-sense was telling me this must be a versioning issue but everything looked right. My only explanation was that somehow what was running on the host was different from what was running on my local machine.

I asked around work and Eilon Lipton suggested I run this snippet to check the version of ASP.NET MVC. He's basically saying "Hey, where did this well known type come from?"

public ActionResult ShowVersion()
Type t = null;
t = Type.GetType("System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=, Culture=neutral, PublicKeyToken=31BF3856AD364E35");
catch (Exception e)
Response.Write("Error finding MVC: " + e.ToString());

if (t == null)
Response.Write("Can't find MVC");
Response.Write("Found MVC at " + t.Assembly.CodeBase + ", IsInGac = " + t.Assembly.GlobalAssemblyCache + "<br>");
var verAttr = t.Assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), true)[0] as System.Reflection.AssemblyFileVersionAttribute;
Response.Write("Version = " + verAttr.Version + "<br>");

return null;

Even better, rather than using this code, I can use the MvcDiagnostics NuGet Package and get THIS useful data from Brad Wilson. Hopefully he will update it for ASP.NET MVC 4 although it worked well.

MvcDiagnostics NuGet Package

This package gives you lots of useful information for debugging weird situations.

ASP.NET MVC Diagnostics Utility gives lots of useful data

Anyway, I put the diagnostic code in a controller and ran it and got this (this version is faked):

Found MVC at file:///C:/mysite/bin/System.Web.Mvc.DLL, IsInGac = False
Version = 4.0.77777.0

Hang on, but my local result was this:

Found MVC at file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Web.Mvc/v4.0_4.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll, IsInGac = True
Version = 4.0.99999.0

My local version was newer and was running from the GAC (Global Assembly Cache) but the hosted version was older and running locally. That means I had older ASP.NET MVC files floating around that my project referenced and deployed to the host.

Aside: The specific change that "got" me here was actually the first external contribution accepted to ASP.NET MVC. It's the one that Miguel de Icaza sent a pull request for while I was on stage at DevConnections. The change is to output HTML5 input types for common default data types, like <input type="datetime"> for System.DateTime when using EditorFor().

It took me a moment to remember that I hadn't added the reference to ASP.NET MVC manually but rather via the NuGet Package Manager. This became crystal clear when I used the built-in NuGet Package Visualizer (from Tools | Library Package Manager) to see the package dependency chain:

The ASP.NET NuGet Packages as viewed in a directed graph in the NuGet Package Visualizer

Basically I needed to either update my out of date NuGet packages or add the assembly references manually without NuGet.

Since I was working on a daily build I did it manually. When you update your ASP.NET MVC 4 Beta applications to a newer build (like ASP.NET MVC 4 Release Candidate (whenever that comes out) or the final Release) you'll want to do update all your packages via NuGet and confirm you're getting the versions and behavior you expect. The NuGet Package Visualizer is a hidden gem indeed.

So, a general reminder to folks (and a specific lesson when upgrading between ASP.NET MVC builds):

  • know your version numbers, what you want, what you're referencing.
  • confirm your version numbers in your debug and production environment.
    • Perhaps a health-check page or a runnable Integration Test to assert your assumptions
  • update your NuGet packages keep your references, and thus your ~\bin up to date
  • know where your assemblies are being loaded from (the GAC or locally)

Hope this helps!

Sponsor: I want to thank my friends at DevExpress for sponsoring this week's feed. Take a moment and check out their stuff! Touch-enabled apps require developers to re-think design & user experiences. DevExpress tools help you take on these new challenges using your existing skills & today’s technologies.

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

Please Learn to Think about Abstractions

May 17, '12 Comments [80] Posted in Musings
Sponsored By

Jeff Atwood wrote a post called Please Don't Learn to Code and Zed Shaw wrote a post called Please Don't Become Anything, Especially Not A Programmer.

My wife lost her wedding ring down the drain. She freaked out and came running declaring that it was lost. Should we call a plumber?

I am not a plumber and I have no interest in being a plumber. While I advocate that folks try to be handy around the house, I choose to put a limit on how much I know about plumbing.

While my wife has an advanced degree in something I don't understand, she also, is not a plumber. As a user of plumbing she has an understandably narrow view of how it works. She turns on the water, a miracle happens, and water comes out of the tap. That water travels about 8 inches and then disappears into the drain never to be seen again. It's the mystery of plumbing as far as she is concerned.

I, on the other hand, have nearly double the understanding of plumbing, as my advanced knowledge extends to the curvey pipey thing under the sink. I think that's the technical term for it. After the curvey pipey thing the series of tubes goes into the wall, and that's where my knowledge ends.

Everything is a layer of abstraction over something else. I push a button on my Prius and the car starts. No need even for a key in the ignition. A hundred plus years of internal combustion abstracted away to a simple push button.

Jeff said:

Please don't advocate learning to code just for the sake of learning how to code.

Zed says:

Never listen to people who try to make beginners feel like losers.

I think everyone should learn how to think and when to dig deeper and should be able to do it in a welcoming and friendly environment.

Learn how to question how things work. Learn that everything new and simple hides something large and complex. We are all standing on the shoulders of giants like Newton, Tesla, Kettering, Berners-Lee, and on and on.

You can choose to live in a world where things just work, or you can choose to dig a little. You don't need to learn to code, you don't need to be an expert in everything but know that you can learn. You can learn a little or a lot. I don't think the Mayor of New York  needs to know how to code, but it'd be nice if he knew a little about DNS and a little about HTTP.

Judge Alsup in the Oracle v. Google case has been learning Java on the side during the case. Recently when a lawyer tried to imply something was a days work and patentable the Judge, armed with his new understanding that ends an a lower level of abstraction declared (via Groklaw):

Judge: We heard the testimony of Mr. Bloch. I couldn't have told you the first thing about Java before this problem. I have done, and still do, a significant amount of programming in other languages. I've written blocks of code like RangeCheck a hundred times before. I could do it, you could do it. The idea that someone would copy that when they could do it themselves just as fast, it was an accident. There's no way you could say that was speeding them along to the marketplace. You're one of the best lawyers in America, how could you even make that kind of argument?

Oracle: I want to come back to RangeCheck.

Judge: RangeCheck! All it does is make sure the numbers you're inputting are within a range, and gives them some sort of exceptional treatment.

The Judge could have remained in the dark, or relied on an expert to interpret for him, but he dug a step deeper and learned some Java. He knows how to think and he applied to remove a layer of abstraction away from the problem facing his court.

I opened the trap under the sink and retrieved the ring. She was thrilled. "I never knew that was under there." Now she does and now we both know a little about plumbing and abstractions. And that's a good thing.

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

The Floppy Disk means Save, and 14 other old people Icons that don't make sense anymore

May 9, '12 Comments [145] Posted in Musings
Sponsored By

What happens when all the things we based our icons on don't exist anymore? Do they just become, ahem, iconic glyphs whose origins are shrouded in mystery?

Floppy Disk - Save

Save? Save where? You know, down there. Adding the Arrow to the 3.5" floppy makes me smile. Is it pointing to under my desk? What's a floppy? Why not a USB key? Maybe a cloud icon? That will be easy since there is only One Cloud Icon in the world.

Floppy Disks of Various Sizes, 3.5  disksave

Radio Buttons - Mutually Exclusive Choices

Why are they called Radio Buttons? Because my car radio used to have buttons where only one could be pressed at any time.  I miss my 8-track.

AM Radio from Gina Hogan Edwards' Blog  The Shutdown Windows Dialog


Seriously, short of a doctor's office or the DMV when are we coming in contact with clipboards? And why is the clipboard the icon for Paste? Why not Copy? Or "fill out form?

The Paste Icon with a Clipboard


We used to use smaller flat dead trees to keep our place in between the dead trees we would read from so that we didn't lose our page. No, books didn't "keep our place when we turned them off."

A bookmark in a book

Address Books and Calendars

We would write down all our addresses and phone numbers in a dead tree and carry it around with us. Sometimes we'd manage our calendar that way also. Everything was bound together with metal spiral loops. Let me check my Filofax.

An address book with a spiral binderA calendar with a spiral binder


I assume that the Voicemail icon is supposed to be evocative of reel to reel tapes but it always look like a container of 110 Film. I suspect my voicemail is no longer stored on spooled magnetic tape. No, you've never seen either of these before, young person. #getoffmylawn

iPhone Voicemail IconReel to Reel Tape110 Camera Film

Manila Folder

I suppose the kids use Pee Chees still these days? I use folders because I use the 43 Folders organizational system but I don't see any reason that we couldn't be storing our files in abstract squares rather than folders in the sky.

Manilla Folders in the CloudsManila Folders are where you put thingsManila Folders


Handset Phone Icon

The world's most advanced phones include an icon that looks like a phone handset that you haven't touched in 20 years, unless you've used a pay phone recently. (What's that?)


iPhone Phone IconAnd old phone handset plugged into an old cell phone


Magnifying Glass and Binoculars

At some time in the past the magnifying glass became the "search everywhere" icon, but for some reason binoculars are for searching within a document. This makes no sense as magnifying glasses are for searching things that are near and binoculars imply breadth of search and distance. These two commands should have had their icons reversed!

The Find icon from Word

A magnifiying glass  A black and white icon of binoculars


Soon the envelope itself will go away and the next generation will wonder what this rectangle means and what it has to do with email. We'll still put other arrows and icons on top of these icons to mean reply, forward, delete, and other things. "Daddy, what's a 'stamp'?"


Envelope Various Envelopes with arrows superimposed on them

Wrenches and Gears - Setup/Settings

Want to indicate Settings or Setup to a twenty something? Show them a tool they've never used in their lives.

iPhone Settings is a set of gearsScrewdriver and Wrench crossed


If you don't know who Johnny Carson is, how could you know that this is a old-style microphone?

Old timey microphone

The Siri icon is an old time radio microphone


No one under 30 has seen a Polaroid in years but we keep using them for icons. Instagram sold for $1B with an icon whose subtlety was lost on its target audience. "Shake it like a Polaroid picture."


Instagram IconStack of Polaroids


Does your TV have "rabbit ears?"

A bunch of TVs with CRTs and

Carbon Copies and Blueprints

I'll "cc" you on that email. Last time I made a carbon copy I was using a mimeograph to do it.

Carbon CopyBlueprints and Carbon Copies


What other icons do we use while the original inspiration fades into obscurity?

Note: If one of these icons is yours let me know and I'll link to your site. I found all these and haven't been able to attribute all of them.

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.