Scott Hanselman

How to adjust your side/rear-view mirrors (and why you need 3 monitors)

March 19, '07 Comments [23] Posted in Musings
Sponsored By

While I was at the Eleutian offices last week I was impressed at their commitment to the multi-monitor lifestyle. I'm all about the Third Monitor (in case you haven't heard, it's one better than just two monitors) as are others. If you value your time, you should think about getting the widest view possible.

The Dell 30-inch is amazing...they each had a Dell 30" widescreen at 2560x1600 pixels, but they also had what appeared to be two 22" widescreen's also, rotated and butted up against the 30" so their horizontal working space was 1050+2560+1050=4660 pixels wide. Glorious. I turned them on to (I hope) RealtimeSoft's must-have Ultramon multimonitor tool. They were running x64, and Ultramon has a 64-bit version, so that was cool.

I have a 22" Dell, so I might get another, plus the 30" to achieve this orientation when we build the Ultimate Developer Rig.

A few days later, I hung out with John Lam some, and while we were driving somewhere, mentioned that he'd taken an Advanced Driving Class with BMW and recommended to anyone, even folks without German Cars. (I drive a little Prius, by the way, and intend to until it dies by the side of the road, at which point I'll get out and continue on walking...)

He said that one of the greatest driving tips they shared that he swears by is radically (to me at least) readjusting your rear view mirror on your cars to completely remove blind spots.

I'm used to turning my whole head (and body) to look to the left or right when changing lanes. We were taught that the way to adjust your rearview mirrors was to make the side of your car just barely visible in the rearview mirror. I've always taken that orientation of mirrors for granted.

Typical rear-view mirror configuration

Typical rear-view mirror configuration looks something like this (please forgive the Paint.NET-ness of this rough non-vector sketch):

There's a great deal of duplication/overlap between what is seen in the main mirror versus what's in the side-mirrors.

The idea is:

  • Turn the side-view mirrors out so that when a car leaves the view of the center mirror, it's just begun to show up in the side mirror.
  • When the car begins to leave the side mirror - moving up your left side for example - it's just begun to enter your own peripheral vision.

Optimal rear-view mirror configuration

Apparently amongst car enthusiasts a well-adjusted rear-view mirror is a known deal, but it sure turned my life upside-down. It takes a while to get used to, but when you're adjusted correctly, you literally have no blind spots.

Bringing it all back home, this of course, applies to multiple monitors, IMHO. Why not fill your field of vision with as much information as possible...otherwise what might you be missing?

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

Hanselminutes Podcast 55 - MonoRail as Alternative ASP.NET

March 16, '07 Comments [22] Posted in ASP.NET | Podcast
Sponsored By

My fifty-fifth podcast is up. In this episode I sit down with two developers, Aaron Jensen and Jacob Lewallen from Eleutian, who are using the MonoRail framework for their current (very large) project.

Check out their blog post called "The way we write programs," over at the Eleutian Blogs.

Mono is a clean MVC Front Controller-based framework for ASP.NET that promises to increase separation of concerns and offers a fresh (at least for .NET developers) perspective on developing .NET for the Web. Enjoy.

ACTION: Please vote for us on Podcast Alley! Digg us at Digg Podcasts!

Links from the Show

Monorail and the Castle Project (mt8)
Inversion of Control Containers and the Dependency Injection pattern (mt9)

Subscribe: Feed-icon-16x16 Subscribe to my Podcast in iTunes

Do also remember the archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Our sponsors are Telerik and /n software.

Telerik is a new sponsor. Check out their UI Suite of controls for ASP.NET. It's very hardcore stuff. One of the things I appreciate about Telerik is their commitment to completeness. For example, they have a page about their Right-to-Left support while some vendors have zero support, or don't bother testing. They also are committed to XHTML compliance and publish their roadmap. It's nice when your controls vendor is very transparent.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

  • The basic MP3 feed is here, and the iPod friendly one is here. There's a number of other ways you can get it (streaming, straight download, etc) that are all up on the site just below the fold. I use iTunes, myself, to listen to most podcasts, but I also use FeedDemon and it's built in support.
  • Note that for now, because of bandwidth constraints, the feeds always have just the current show. If you want to get an old show (and because many Podcasting Clients aren't smart enough to not download the file more than once) you can always find them at http://www.hanselminutes.com.
  • I have, and will, also include the enclosures to this feed you're reading, so if you're already subscribed to ComputerZen and you're not interested in cluttering your life with another feed, you have the choice to get the 'cast as well.
  • If there's a topic you'd like to hear, perhaps one that is better spoken than presented on a blog, or a great tool you can't live without, contact me and I'll get it in the queue!

Enjoy. Who knows what'll happen in the next show?

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

Managed Snobism

March 13, '07 Comments [29] Posted in Learning .NET | Musings | Programming
Sponsored By

There was a great comment on a recent post here last week where I was trying to get a Managed Plugin working with an application that insisted on its plugins being C++ DLLs with specific virtual methods implemented.

Here's the comment with my emphasis

Great article. It would be nice to see a little less "managed snobism". Personally, I don't need to use up 100MB of my memory with a framework just to let me generate 32x32 bitmaps. So I'm grateful that the managed route is not the default. Remember, 90% of functions in .NET are just wrappers around the underlying API functions, so in effect, all they do is slow you down, while giving you convenience.

This reminded me of an article I did a few years ago when folks were still asking silly questions like "Is your application Pure .NET?" The article was called The Myth of .NET Purity and was published up on MSDN under an article series called ".NET in the Real World." To this day I'm still surprised that they let me publish it.

The (interestingly anonymous) commenter says: "...so in effect, all they do is slow you down, while giving you convenience." Well, sure. Everyone knows this quote:

Any problem in Computer Science can be solved with another layer of indirection.

It's a great quote. As an aside, the quote is attributed to nearly every smart Computer Scientist. Including David Wheeler, Butler Lampson and Steven M. Bellovin. Lampson says it was Wheeler, but it was one of these three guys.

But a game developer at Sun adds a clever touchĂ© to the old adage:

The two software problems that can never be solved by adding another layer of indirection are that of providing adequate performance or minimal resource usage. - Jeff Kesselman

And he's right. Of course, .NET is a (most excellent layer of) Managed Spackle over the Win32 API. But it's really GOOD spackle. It's so good that we get collectively frustrated when a new API (SideShow, AzMan) doesn't have a good initial managed API (SideShow does now). A nice, clean managed API adds a fantastic amount of convenience in exchange for a very reasonable performance hit.

The performance hit - which I haven't personally measured - is no doubt less than even the most trivial of network calls. How much overhead is added? Not much.

Approximate overhead for a platform invoke call: 10 machine instructions (on an x86 processor)

Approximate overhead for a COM interop call: 50 machine instructions (on an x86 processor)

Gosh, that isn't much. Sure, there are always scenarios we conceive of that could add up, but that's what profiling on a case-by-case basis is for.

If .NET Purity is a myth, and the whole thing is just there to make our lives easier, then this is an easy trade off. I just remember that I can code in C#/VB.NET, for a small cost. I get speed of dev, and I give up speed of execution. I can code in C++, and give up speed of dev (a smidge) and gain (possibly) speed of execution. I can code in ASM and give up lots of productivity in exchange for my immortal soul and a really fast program. Or I can go to heaven, pursue beauty if I like, and give up so much performance to cause a scandal.

But it's not a simple trade off. Certainly not at the method or even component level. William Caputo makes a similar point with emphasis mine:

...this calculation is done unconsciously by those programmers who hear "we're trading efficiency for productivity." It's why they are reluctant to take a serious look at higher-level languages. A one-time productivity hit to get faster run-time performance certainly seems like a good trade-off, but the flaw in the argument is that productivity measurement is not reset with each task. It's cumulative. Unlike a programming assignment ("Implement Quick Sort Please"), productivity is measured across an entire solution (whether a build script or a trading system) -- and not just the first writing of the code, but throughout its useful lifetime (the vast majority of coding time is spent changing, or maintaining existing code).

In the real world, its not "write once, run forever", its "write a bit, run a bit, change a bit, run a bit", and so on. I am not saying that run-time efficiency isn't important. It is. The best way to compare run-time efficiency and programmer productivity is not at the micro level, but at the macro level.

Yes, .NET adds overhead. Certainly not enough to worry about for business apps, given the productivity gains. We're not writing device drivers here. In my original example where I want to write managed plugins for the Optimus Keyboard, since the max frames per second on the keyboard is 3fps, performance isn't a concern (nor would it be even if I needed 30fps).

If being a Managed Code Snob is wrong, I don't wanna be right.

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 CodingHorror Ultimate Developer Rig Throwdown: Part 1

March 9, '07 Comments [66] Posted in Musings | Tools
Sponsored By

I wonder if my wife will read this post and ask me about it. I think she'll say it's OK. I don't know about you, but over a (small) certain amount, all purchasing decisions are dependant on the WAF .

I'm going to use the money from Google Adsense that's been sitting in my Paypal account and get a new computer. My current one is a Frankenstein's Monster and it sounds like a Jet Plane.

There's lots of talk on the net, and no end to the free advice you can get on how to create the "World's Greatest Gaming Rig" and they use lots of acronyms like SLI and words like Northbridge and terms like Quad-Core or Octo-Core or whatever.

I used to be The Man™ when it came to building my own machines. Used to be. If you wanted a field of DIP memory chips put onto an ISA card, I was the guy. Now, I built all the machines in my house, and had fun doing it. I am proud that my system didn't cost that much because it was built one piece at a time, over time. However, I don't revel in the building. I just want it to work.

Sure, one (not me) could go to Dell or Alienware or whoever, give them US$6000 (or more) and build the Ultimate Gaming Rig, but it'd likely be loud, and it certainly wouldn't be loved. Plus, I'm not that big of a gamer. That's what my Xbox is for.

Who loves this stuff? Atwood. He wallows in it like a pig in slop. He's what we call an Overclocking Fundi.

He's going to break his self-imposed rule (of not building for friends) for me and create The Ultimate Developer Rig.

Here's the priorities, in order:

  • Fast. Wicked fast.
    • As fast as I am (if you've ever seen me demo live). I want this computer tuned to Alt-Tab as fast as possible. As Jeff says: "You want max speed right, damn the torpedoes?" D*mn right.
  • Fast. Did I mention fast?
    • I don't want have time to THINK about what it's doing while I wait. I wait, in aggregate, at least 15 minutes a day, in a thousand tiny cuts of 10 seconds each, for my computer to finish doing something. Not compile-somethings, but I clicked-a-button-and-nothing-happened-oh-it-was-hung-somethings. Unacceptable. 15 minutes a day is 21.6 hours a year - or three full days - wasted.
  • Overclocked but Stable. I appreciate that machines are clocked to a certain speed for a kind of conservative stability, but I want it to be fast.
    • Quad Core if possible.
  • Quiet. Any schmuck and go to their local computer store and build a computer.
    • But building one that's fast AND quiet is an art form. Overclocking and staying low noise is hard. Staying quiet and running fast is what separates pros from, well, me. That's where we install aftermarket coolers, and line the case with silencing materials, use sorbothane to damp the drives. That's Craftmanship 2.0.
      Hell, let's suspend the Hard Drives with rubberbands from the inside of the case. 
  • Reliable. It'll be fast, but I need it to not freak out just because it's been running 100% for a few days. (I'll find it work, trust me.)
    •  I want to pick a good video card, and good RAID, etc, but the drivers need to be known to be reliable. Two striped Raptor X 10,000 RPM SATA drives are useless if their RAID driver isn't also well thought of.

What else, Dear Reader, do I need to consider while we build The CodingHorror Ultimate Developer Rig? Should I got x64 on Vista or wait? We're aiming for machine (hopefully much) less than US$3000 that'll compete with any US$6000 Dell.

This is not a gaming rig, this is a Productivity Rig. What's it need?

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

Hanselminutes Podcast 54 - Squeezing Continuous Integration

March 9, '07 Comments [2] Posted in Nant | NCover | NDoc | NUnit | Podcast | Programming | Tools
Sponsored By

My fifty-fourth podcast is up. In this episode we continue the discussion started in Episode 4 - Continuous Integration. We're fortunate to be joined by Jay Flowers, maker of CI Factory, a Continuous Integration Accelerator that lets you get a continuous integration build running in minutes, not days. It's a generator that creates build scripts, CruiseControl server files, project structure and more. Take a look at version 0.8 and the screencast on installation and setup. We believe that there's more to just Build and Test...you can automate everything and even have your build server pop out ISO images, CDs, or complete configured Virtual Machines. Enjoy.

ACTION: Please vote for us on Podcast Alley! Digg us at Digg Podcasts!

Links from the Show

Jeff finally gets with it (mm0)
Backup Package (mm5)
How to make a CI Factory Package (mma)
Code Churn, Predicting how may bugs (mm1)
Playing for Real, More Than a Scoreboard - Threshold Package (mm6)
CI Factory Installation (mmb)
VSTS Integration (mm2)
Analytics Package - Xsl exsl:document or multi-output (mm7)
Phil Haack A Comparison of TFS vs Subversion for Open Source Projects (mmc)
Updated AsyncExec stuff (mm3)
Analytics Package Screen Capture (mm8)
Traceability and Continuous Integration (mmd)
AsyncExec stuff (mm4)
A Recipe for Build Maintainability and Reusability (mm9)

Subscribe: Feed-icon-16x16 Subscribe to my Podcast in iTunes

Do also remember the archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Our sponsors are Telerik and /n software.

Telerik is a new sponsor. Check out their UI Suite of controls for ASP.NET. It's very hardcore stuff. One of the things I appreciate about Telerik is their commitment to completeness. For example, they have a page about their Right-to-Left support while some vendors have zero support, or don't bother testing. They also are committed to XHTML compliance and publish their roadmap. It's nice when your controls vendor is very transparent.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

  • The basic MP3 feed is here, and the iPod friendly one is here. There's a number of other ways you can get it (streaming, straight download, etc) that are all up on the site just below the fold. I use iTunes, myself, to listen to most podcasts, but I also use FeedDemon and it's built in support.
  • Note that for now, because of bandwidth constraints, the feeds always have just the current show. If you want to get an old show (and because many Podcasting Clients aren't smart enough to not download the file more than once) you can always find them at http://www.hanselminutes.com.
  • I have, and will, also include the enclosures to this feed you're reading, so if you're already subscribed to ComputerZen and you're not interested in cluttering your life with another feed, you have the choice to get the 'cast as well.
  • If there's a topic you'd like to hear, perhaps one that is better spoken than presented on a blog, or a great tool you can't live without, contact me and I'll get it in the queue!

Enjoy. Who knows what'll happen in the next show?

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.