Scott Hanselman

New Interview Questions for Senior Software Engineers

February 17, '11 Comments [158] Posted in Learning .NET | Programming
Sponsored By

I'm putting together some practice interview questions for a friend who lost his job. I thought it'd be useful to crowd-source some questions from you, Dear Reader.

These questions should be more software design focused, less technical trivia like my previous two lists of interview questions:

UPDATE: I think we all agree (or at least we should) that if you go into an interview tomorrow and you look across the table and the interviewer has simply printed out this list and is reading from it, that you should excuse yourself and run. This isn't a "guide to how to interview" nor is this meant to me a "best practices for engineers" list. It's simply a collective brain-dump of stuff that someone who's been in the business of developing software for money for 10 or so years should have some passing familiarity with. Of course, it's assumed that the interviewer is able to detect BS. This isn't, and shouldn't be, a trivia contest. If you're going to get a job (or you're looking for hire someone for a job) it's ultimately more important to understand if someone can Solve Problems and if Their Head is Screwed on Straight. Take it with a grain of salt, friends, remember, you found it on the Internet. - @shanselman

Here's what I have so far.

  • What is something substantive that you've done to improve as a developer in your career?
  • Would you call yourself a craftsman (craftsperson) and what does that word mean to you?
  • Implement a <basic data structure> using <some language> on <paper|whiteboard|notepad>.
  • What is SOLID?
  • Why is the Single Responsibility Principle important?
  • What is Inversion of Control? How does that relate to dependency injection?
  • How does a 3 tier application differ from a 2 tier one?
  • Why are interfaces important?
  • What is the Repository pattern? The Factory Pattern? Why are patterns important?
  • What are some examples of anti-patterns?
  • Who are the Gang of Four? Why should you care?
  • How do the MVP, MVC, and MVVM patterns relate? When are they appropriate?
  • Explain the concept of Separation of Concerns and it's pros and cons.
  • Name three primary attributes of object-oriented design. Describe what they mean and why they're important.
  • Describe a pattern that is NOT the Factory Pattern? How is it used and when?
  • You have just been put in charge of a legacy code project with maintainability problems. What kind of things would you look to improve to get the project on a stable footing?
  • Show me a portfolio of all the applications you worked on, and tell me how you contributed to design them.
  • What are some alternate ways to store data other than a relational database? Why would you do that, and what are the trade-offs?
  • Explain the concept of convention over configuration, and talk about an example of convention over configuration you have seen in the wild.
  • Explain the differences between stateless and stateful systems, and impacts of state on parallelism.
  • Discuss the differences between Mocks and Stubs/Fakes and where you might use them (answers aren't that important here, just the discussion that would ensue).
  • Discuss the concept of YAGNI and explain something you did recently that adhered to this practice.
  • Explain what is meant by a sandbox, why you would use one, and identify examples of sandboxes in the wild.
  • Concurrency
    • What's the difference between Locking and Lockless (Optimistic and Pessimistic) concurrency models?
    • What kinds of problems can you hit with locking model? And a lockless model?
    • What trade offs do you have for resource contention?
    • How might a task-based model differ from a threaded model?
    • What's the difference between asynchrony and concurrency?
  • Are you still writing code? Do you love it?
  • You've just been assigned to a project in a new technology how would you get started?
  • How does the addition of Service Orientation change systems? When is it appropriate to use?
  • What do you do to stay abreast of the latest technologies and tools?
  • What is the difference between "set" logic, and "procedural" logic. When would you use each one and why?
  • What Source Control systems have you worked with?
  • What is Continuous Integration?  Have you used it and why is it important?
  • Describe a software development life cycle that you've managed.
  • How do you react to people criticizing your code/documents?
  • Whose blogs or podcasts do you follow? Do you blog or podcast?
  • Tell me about some of your hobby projects that you've written in your off time.
  • What is the last programming book you read?
  • Describe, in as much detail as you think is relevant, as deeply as you can, what happens when I type "cnn.com" into a browser and press "Go".
  • Describe the structure and contents of a design document, or a set of design documents, for a multi-tiered web application.
  • What's so great about <cool web technology of the day>?
  • How can you stop your DBA from making off with a list of your users’ passwords?
  • What do you do when you get stuck with a problem you can't solve?
  • If your database was under a lot of strain, what are the first few things you might consider to speed it up?
  • What is SQL injection?
  • What's the difference between unit test and integration test?
  • Tell me about 3 times you failed.
  • What is Refactoring ? Have you used it and it is important? Name three common refactorings.
  • You have two computers, and you want to get data from one to the other. How could you do it?
  • Left to your own devices, what would you create?
  • Given Time, Cost, Client satisfaction and Best Practices, how will you prioritize them for a project you are working on? Explain why.
  • What's the difference between a web server, web farm and web garden? How would your web application need to change for each?
  • What value do daily builds, automated testing, and peer reviews add to a project? What disadvantages are there?
  • What elements of OO design are most prone to abuse? How would you mitigate that?
  • When do you know your code is ready for production?
  • What's YAGNI? Is this list of questions an example?
  • Describe to me some bad code you've read or inherited lately.

Your thoughts? I'll add good questions from the comments throughout the day.

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

Creating a NuGet Package in 7 easy steps - Plus using NuGet to integrate ASP.NET MVC 3 into existing Web Forms applications

February 15, '11 Comments [33] Posted in ASP.NET | ASP.NET MVC | NuGet | VS2010
Sponsored By

UPDATE: Check out my follow up post where I remove the need for editing the Global.asax.cs and show up to Update and Publish a NuGet package.

Last month I wrote a post called Integrating ASP.NET MVC 3 into existing upgraded ASP.NET 4 Web Forms applications where I showed a very manual and very painful way to add ASP.NET MVC support to an existing ASP.NET WebForms application. You'd then have a lovely hybrid that is both MVC and WebForms.

One of my readers, Yannick said:

This screeaaams NuGet

Indeed it did, er, does. He's saying that this is just the kind of awful boring work that NuGet should make easier. So I did it. Thanks Yannick for just the sassy comment I needed to jump into action.

install-package AddMvc3ToWebForms

First, what I built, then how I built it. I'd like you, Dear Reader, to take a moment and create your own NuGet packages.

Adding ASP.NET MVC to an ASP.NET WebForms project with NuGet

Step 0 - Get NuGet 1.1 by going here. It's like 300k, just take a second.

Step 1 - Open Visual Studio 2010 and make a default ASP.NET (WebForms) Application.

VS2010 Default WebForms App

Step 2 - Right click on References and click Add Library Package Reference. Click Online on the left side, and in the Search box at upper right type in "WebForms" and look for my face. Oh yes. My face. Click Install.

(Alternatively, open the Package Manager Console and type "install-package AddMvc3ToWebForms" and watch the magic. The package is hosted on NuGet.org. You can too!)

Add Library NuGet Dialog

Step 2a - Check out the stuff that's been added to your project.

WebForms app with MVC bits integrated

What's that HookMeUpNow.cs? That's all the routing stuff that I would have needed to edit your Global.asax.cs for. You'll need to add one line of code to Global.asax yourself to make this work now.

Step 3 - Hook up Routes and Everything

Add Mvc3Utilities.RegisterEverything() to your Application_Start. Feel free to rename whatever you like.

Added Mvc3Utilities.RegisterEverything() to the Global.asax

Now run it. You can hit both Default.aspx and /Home/About.

WebForms and MVC together in the same app, shown in the browser

Step 4 - Profit!

Sweet.

How I made my own NuGet package and you should too

Step 0 - Go get the NuGet.exe command line here. Put it in the Path or somewhere.

Step 1 - Make a folder for your new package, go there via the commmand line and run "nuget spec"

C:\Users\Scott\Desktop\AddMvc3ToWebForms>nuget spec
Created 'Package.nuspec' successfully.

C:\Users\Scott\Desktop\AddMvc3ToWebForms>dir Package.nuspec
Directory of C:\Users\Scott\Desktop\AddMvc3ToWebForms

02/15/2011  02:23 AM               813 Package.nuspec
               1 File(s)            813 bytes

Now, I changed this file's name and edited it thusly.

<?xml version="1.0"?>
<package xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<id>AddMvc3ToWebForms</id>
<version>0.4</version>
<authors>Scott Hanselman</authors>
<owners>Scott Hanselman</owners>
<iconUrl>http://www.hanselman.com/images/nugeticon.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>A totally unsupported way to quickly add ASP.NET MVC 3 support to your WebForms Application. Works on my machine.</description>
<tags>MVC MVC3 ASP.NET WebForms</tags>
</metadata>
</package>

Step 2 - Add stuff to your Content Folder

Since I want my NuGet package to add stuff to folders in my target Web Application, I put whatever I want in a folder called Content. Anything in that will show up in the root of my target project. This can be CSS, JS, CS or VB files, whatever. These files will all get dropped onto the project your package is applied to.

In my project I took the folders from an MVC application and put them in my NuGet folder structure. So, Content, Controllers, Models, Scripts, Views. Copied them right over from an existing blank ASP.NET MVC project.

My NuGet directory where I'm building the package

Step 3 - Decide what needs to be Pre-Processed

However, when my HomeController shows up in your project, Dear Reader, I don't want it to be in the namespace ScottMvcApplication! You want it in MvcApplication54 or whatever your project name is. I need pre-process the source a little to use your project's context, names, namespaces, etc.

For the files I want pre-processed automatically by NuGet, I add a .pp extension. In my example, HomeController.cs.pp.

Preprocessor files with a .pp extension

Then I add a few tokens I want replaced at install-time for that package. For example $rootnamespace$ or $assemblyname$. You can use any Visual Studio Project Property per the NuGet docs.

namespace $rootnamespace$.Controllers
{
public class HomeController : Controller
{
//snip
}
}

Step 4 - Decide what XML elements need to be merged (usually into web.config)

The next preprocessing that is common is adding elements to web.config. This is a nice little feature of NuGet because you just need to make a web.config.transform with the new elements and it will automatically and non-destructively add (and remove) them as needed. Here's my web.config.transform, for reference. Note this is not a full web.config. This is the one I added to my package in the control folder.

<configuration>
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages"/>
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Step 5 - Add any PowerShell script you might need, especially for adding references

Almost done. Most package won't need much PowerShell, but some do. You can have an install.ps1 and an uninstall.ps1 and do lots of things. These go in a folder called Tools that's next to Content (not inside.)

Here's my install.ps1.

NOTE: Currently today there's no way to STOP the installation of a package while it's happening, so if you try to install mine on NuGet 1.0 I'll just warn you and ask you to uninstall. In the future there will likely be a pre-install or a dependency check. Hence the version check there.

param($installPath, $toolsPath, $package, $project)

if ($host.Version.Major -eq 1 -and $host.Version.Minor -lt 1)
{
"NOTICE: This package only works with NuGet 1.1 or above. Please update your NuGet install at http://nuget.codeplex.com. Sorry, but you're now in a weird state. Please 'uninstall-package AddMvc3ToWebForms' now."
}
else
{
$project.Object.References.Add("Microsoft.CSharp");
$project.Object.References.Add("System.Web.Mvc");
$project.Object.References.Add("Microsoft.Web.Infrastructure");
$project.Object.References.Add("System.Web.WebPages");
$project.Object.References.Add("System.Web.Razor");
$project.Object.References.Add("System.ComponentModel.DataAnnotations");
}

Note that in (the future) NuGet 1.2 I won't need this code, I'll just add the references in my NuSpec file directly.

Step 6 - Pack it up

Go back to the command line and run nuget pack

C:\Users\Scott\Desktop\AddMvc3ToWebForms>nuget pack
Attempting to build package from 'AddMvc3ToWebForms.nuspec'.
Successfully created package 'C:\Users\Scott\Desktop\AddMvc3ToWebForms\AddMvc3ToWebForms.0.4.nupkg'.

Step 7 - Submit your package

Next, login to the NuGet Gallery (beta) and Contribute Your Package. Just walk through the wizard and upload the nupkg. You can also get an API Key and use the command line tool to do this automatically, perhaps as part of a build process.

Submitting my app to the NuGet Gallery

That's it. If you've got an open source library or something interesting or useful, get it up on NuGet before your blog commenters shame you into it!

P.S. Yes I didn't count Step 0.

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

This Developer's Life 1.1.3 - Competition

February 14, '11 Comments [0] Posted in Podcast
Sponsored By

13-Competition In this episode we talk to competitors who are also programmers. Or, programmers who also compete. Are coders pre-wired for this? Jon Skeet, David Fowler, Aaron Jensen and Danielle Banks share their stories.

Download Here

In this episode we talk to competitors who are also programmers. Or, programmers who also compete. Are coders pre-wired for this?

  • Jon Skeet shares how he stays at the top of the Stack Overflow points pile
  • David Fowler talks about TopCode and flying to DisneyWorld to watch coders code
  • Aaron Jensen quits his job to play poker professionally
  • Daniele R. Banks is just getting started but is already building competing robots

You can download the MP3 here (58 minutes) and visit our site at http://thisdeveloperslife.com.

Please consider subscribing with iTunes, or Zune. Or if you have a BitTorrent client and would like to help save us bandwidth money, as well as the bragging rights of downloading legal torrents via RSS, get our Torrent Feed at ClearBits. Also, please do REVIEW our show on iTunes.

The bandwidth and other costs for this week's show were picked up by SublimeSVN...

sublime

Easy Subversion Management for Windows

...and DevExpress and CodeRush!

DX_Slogan_350

Announcing our listener contest...This Developer's Life - Crowdsourced 1

Oh yes. We want to hear your stories. Record your best developer stories and send them to us and if we think they rock, we'll include them in the next episode of This Developer's Life.

What we need from you:

  • Your story. We don't want interviews, we want stories. Tell us about your passion, or something crazy that happened at work while solving some technical problem.
  • Keep your audio clean. Use a decent microphone or at least make sure you don't "overdrive" your microphone by talking to close or two loudly. Don't record while mowing the lawn and don't record in a giant echo chamber.
  • Be passionate. Talk to us like you're talking to a friend.
  • Don't worry about editing or music. Just share. We'll handle the Lady Gaga mashups.
  • Note we may move your audio around or change the order of stuff to make it more listenable or interesting or both.
  • Change the names of companies and people to protect the innocent (or guilty)
  • Know that by giving us your audio you're releasing it the Creative Commons and that we may or may not use it for a future show.

Send us a link to your audio file and what you're talking about and we'll do the rest. See you next time!

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 252 - ReactiveUI extensions to the Reactive Framework (Rx) with Paul Betts

February 8, '11 Comments [3] Posted in Learning .NET | Open Source | Podcast | Silverlight
Sponsored By

image "Scott sits down with Paul Betts and talks about extending the Reactive Framework. We currently manage our UI events as they are pushed to us. How does programming - and asynchronous programming - change if we change the way UI events are consumed? The Rx Reactive Framework extends .NET, and Paul's extended that with his Open Source Reactive UI framework. Let's see if Paul can teach Scott a new trick."

Download: MP3 Full Show

Links from the Show

NOTE: If you want to download our complete archives as a feed - that's all 252 shows, subscribe to the Complete MP3 Feed here.

Also, please do take a moment and review the show on iTunes.

Subscribe: Subscribe to Hanselminutes or Subscribe to my Podcast in iTunes or Zune

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

Telerik is our sponsor for this show.

Building quality software is never easy. It requires skills and imagination. We cannot promise to improve your skills, but when it comes to User Interface and developer tools, we can provide the building blocks to take your application a step closer to your imagination. Explore the leading UI suites for ASP.NET AJAX,MVC,Silverlight,Windows Forms and WPF. Enjoy developer tools like .NET Reporting, ORM, Automated Testing Tools, Agile Project Management Tools, and Content Management Solution. And now you can increase your productivity with JustCode, Telerik’s new productivity tool for code analysis and refactoring. Visit www.telerik.com.

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)

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

Review: Living, working and using the Cisco Umi personal telepresence system. All that and bag of chips?

February 5, '11 Comments [18] Posted in Remote Work | Reviews
Sponsored By

Cisco Umi Call 1The picture at right is of my Cisco Umi I have hooked up at my house in Portland, OR. My friend Vishal is in Seattle. Why is he holding a bag of chips? More on that later.

I noticed recently that I've now got a LOT of posts in my Remote Work category of my blog. Considering that I work for Microsoft in Seattle but from Portland and I have for three years now, I can say I'm officially a "Working Remotely Expert."

Important Point

There's some reviews out of the Cisco Umi (you-me) on the usual gadget blogs. They are lovely reviews by technical writers, to be clear. However, the folks that are writing these reviews don't need the product. They are smart technical product folks. However, I'm a practical pragmatist with a problem (alliteration not intended). I need to connect with my workplace without moving. Otherwise, I'll need to quit because I'm not moving. I need this product or one like it.

Let those reviewers argue about the marketplace. I'm using this thing every day and living it.

First, the background

I'm always looking for the next better way to work remotely, and let me tell you, it's not LiveMeeting or GotoMeeting. Being successful while working remotely is as much about the psychology of the situation as it is about the technology. Ultimately you have to realize that you're NOT there. Whether you're controlling a robot remotely and haunting the halls, or you've worked remotely for years as simply a voice on the conference line, you're not there.

Of course, as they say "out of sight, out of mind." The most important aspect of being remote is simply reminding folks that you exist. Sure, you can send emails and make sure you tell all the right people about what you're working on - and that's important - but there's something to be said for being present.

Many leadership and motivational speakers say "step 1 is showing up." I've written a number of posts on my experiments as a remote working attempting to show up.

Now, the Review

It's insane. Experiencing Full HD 1080p 30fps video of your friends and co-workers is the closest thing a Portal I can imagine. First, the clarity. Most video calls are 640x480. 480p is about a third of a mexapixel or 307,200 pixels and 1080p is 2,073,600 pixels. That's 6 times more pixels on the screen. That's the equivalent of thirty 2-megapixel camera photos a second. The distance between 480p and 1080p can't be accurately expressed when you use numbers like 480 and 1080. This clarity issue can't be overstated. Believe me. If you look, there's artifacting, sure, but no more than a Blu-Ray.

In fact, I'd say that a Cisco Umi call is basically a live streaming Blu-Ray of your family.

Cisco Umi Call 2

Next, smoothness of motion or frames per second. Not only is it basically 6 times clearer than your average video call, it's also has twice as many frames. It's smoothness also can't be overstated. This was the first thing that Damian Edwards noticed when we hooked it up in his living room. It's so smooth that you stop thinking about it the way you do in a webcam. You may not realize it but you expect webcams to look like crap. You expect them to drop frames and feel jerky. That's because life happens as a greater framerate than that. ;) The Umi does a great job of keeping up with the framerate.

There's an HDMI pass-through on the Umi, which came as a welcome surprise to me as I have it in my home office. However, considering that this is a consumer (or pro-sumer) product that's meant for the living room, this is a smart move. You plug the Umi in as the last device before your TV. This means you can get calls when you're watching TV and the Umi "cloverleaf" interface will pop up and allow you to answer the call. For me, this meant I could keep my Xbox and Umi on the same HDMI input on my TV. If I'm playing Xbox I can still answer a Umi call.

photo

The Cisco Umi interface is spartan in look, speed and style. In fact, to call it spartan my be unfair to the Spartans. It's basic to a fault. It's dry and uninspired. Fortunately as soon as the call starts you don't look at it again. Oddly, while the video runs at a buttery smooth 30fps, the user interface for the Umi feels very 10fps, you know? It feels underpowered and pokey. However, this is a nit as you only see it doing setup, answering and adding contacts. Both the UI and the Cisco Umi website are surprising in their lack of polish, but this isn't a deal breaker. A designer (maybe from the Xbox or PS3 teams) and a nice visual refresh of the admin website would really make a huge difference in the overall fit and finish.

Current Version: Chips and Audio Issues

Why's my buddy holding up chips? Well, there's an audio issue in the current version of the Umi. In some rooms with some TVs (not all, as I've seen it work fine in other situations) the Umi is a little aggressive with the audio noise cancelling. In an attempt to prevent feedback, the Umi software "clips audio" when two people talk at once on different sides of the call. That means if I Vishal says something or crinkles his bag of chips suddenly he can't hear me talk. Like, literally the sound is cut off completely.

It works fine if we take turns, but life isn't that convenient. People interrupt and talk over each other. Am I being too harsh? No. When was the last time you had your conference speakerphone or Skype cut someone off or mute them? Never, because it doesn't happen. Skype is absolutely brilliant with this.

Fortunately I have it on good authority from some very cool and very responsive Cisco Umi support guys that the engineers know about this audio edge case and are on it. My Umi auto-updated itself the first time I plugged it in, and I'm hoping that one day in the next few months this problem will just be solved. I'll update this post when that happens.

It's unfortunate because the Cisco Umi is supposed to have this amazing array microphone that is smart about picking up sounds and from my (and my team's) perspective, it's no better than a speaker phone, and in most cases much worse.

For now, this audio issue - in my room, given my constraints of very free-flowing conversations - is so irritating that we call the Umi then mute the audio. Then I'll use another audio channel (OC, Speaker Phone, whatever) as the audio. This works near-perfectly, and as an individual in a home office allows me also to use headphones. It'd be nice if there was an hardware option to plug in a standard USB microphone/headset into the UMI.

Rude Q&A

Here's my answers to a few of your questions.

Q. What, Skype HD to good for you? Live Messenger? Oovoo? Office Communicator/Lync?

A. Skype is stingy about HD video. They have been for four years. Four.  You used to be able to hack it (I know, because I did) but currently there appears to be a white-list of supported cameras, specifically Logitech ones. There's obviously some kind of deal going on where they don't want to allow it for anyone on any camera can has the ability. A few technical points first. Pushing HD video is hard. Cameras like the LifeCam and other HD webcams can't push 1080p 30fps through USB2. Also, there are both driver issues and hardware issues. You can use the default driver that includes some filtering, color stuff, and animated fish nonsense, or you can use a default driver that just pushes out MJPEG (Motion JPEG) as fast as possible, unfiltered. In order to get 720p 15fps (yes, 15) you'll need at LEAST a quad-core processor to squish the frames as well as at least 1.5Mbps of bandwidth. Also note that you're not actually sending or receiving HD until the receiver's video window has expended to a size that is near 1280x720p. (This is a clever optimization.)

That was a lot of info. Here's the bullets:

  • HD Video takes a LOT of CPU
  • HD Video from today's USB cameras has a limited framerate when paired with today's software. We need more cameras with hardware acceleration or the ability for my video card to help out
  • Believe it or not, 720p at 15fps isn't that great given the inexpensive sensors in today's cameras (and I've tried them all.) Once you've done a video call at 1080p at 30fps, it's hard to imagine anything else others than MOAR PIXELS!!!

Fancy chart showing that 1080p is a crapload of pixels when compared to anything else

Q. Isn't $600 per Umi expensive?

A. Sure. And so is a ticket. Or mileage, or a hotel. It's effectively $1000 for me to drive to Seattle, stay a few days, eat, submit a standard mileage expense and drive back. This whole system is about the same as one trip, except I use it daily.

I've said before, spend money and don't feel bad about it when it's something you use every day. Computer, Monitor, Bed, Chair, Car, Food. But the best quality in all these things. The Umi was a bargain. If I had relatives with decent bandwidth who lived more than 4 hours away I'd spend the money in a heartbeat so they could see my kids.

That said, there's a "Buy One Get One Free" Cisco Umi sale going on right now at BestBuy and Magnolia. So that's $600 all up for two, plus the fees. If your parents are far away and have 3 to 4Mbps of bandwidth to spare, that's a hell of a deal. This is over the 13th. Note, this is NOT an affiliate link and I don't get any money for any of this. I'm not attached to Cisco at all.

Q. What about the $25 per side monthly fee?

Ya, that is lame. It's the Umi tax. They have a cloud with support for visual voice mail, routing video calls to Google Chat, email notification, etc. I think $50 a year would be more reasonable.

Conclusion

You know those multi-thousand dollar telepresence rooms that you wish you had at your company? Well, I've got a tiny one and I'm 90% happy with it. I'm looking forward to the sound fixes. More as it comes!

Crazy Telepresence Room 

Hope this was helpful. If you have an Umi, call me sometime at 207417.

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.