Wednesday, September 30, 2009

Custom MS Build Task to tame System.Reflection.AmbiguousMatchException: Ambiguous match found.

Update (Oct 3, 2009): Thanks to the reader that pointed out that the MS Build task was using a hard-coded path. The example has been corrected to use a parameterized path that relies on the MSBuildProjectDirectory [3] reserved property.

An innocent “mistake” [1], if you can even call it that, has been punishing developers worldwide for a good part of the last decade – can you spot it?

   1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
   3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
   5: <html xmlns="" >
   6: <head runat="server">
   7:     <title></title>
   8: </head>
   9: <body>
  10:     <form id="form1" runat="server">
  11:     <div>
  12:         <asp:HiddenField runat="server" ID="RecordId" />
  13:     </div>
  14:     </form>
  15: </body>
  16: </html>
   1: using System;
   3: namespace WebApplication1
   4: {
   5:     public partial class _Default : System.Web.UI.Page
   6:     {
   7:         private int recordId = 0;
   9:         protected void Page_Load(object sender, EventArgs e)
  10:         {
  11:             Response.Write(recordId);
  12:         }
  13:     }
  14: }

Thursday, September 24, 2009

Engineering Recruitment: A Data-Driven Approach to Candidate Assessment

I’ve yet to meet anyone with recruitment responsibilities that isn’t frustrated with the state of the industry. Finding the right people, filtering through them intelligently and keeping them happy is a top priority anywhere you look – so why is it that we’re working with tools and techniques that haven’t changed in decades?

Just last month, I reviewed over 20 resumes for a developer/architect position and could hardly differentiate between them – from the self-described $40/hr to the $90/hr, they all looked the same on paper. And I’m not sure that interviewing each and every one of them would have left me any more convinced.

We’ve all heard “the best people aren’t looking for work” clichĂ© a dozen times but still don’t have a sense for what the remedy is. Are AdWords the solution [6]? The guys at seem to think so: take control of the eyes – where the best people spend their time – and sell targeted ads. (You can appreciate why they’d offer money-back-guarantees under this model.)

What’s everyone else doing?

Thursday, September 17, 2009

Windbg Not Getting the Attention it Needs: Doesn’t Work With 2.x

If you’ve never used Windbg, you can probably stop reading – this isn’t for you.

This is for the few, the proud and the brave, banging their heads trying to figure out why CPUs are suddenly spiking; it’s especially for those still supporting legacy apps with literally thousands of DataTables in memory.

With the help of SOS (aka “Son of Strike”), SOSEX and the inherent traps in large-scale .NET deployments (60% CPU is considered normal), what was once an esoteric tool is gaining more and more traction. And because it’s predicated on the fact that you will always have issues that only surface in production (with inadequate instrumentation to tell the whole story), its significance is unlikely to diminish anytime soon.

Windbg is the be-all and end-all in production troubleshooting and it’s surprising that it’s not receiving the attention that it deserves from the CLR team.

Tuesday, September 8, 2009

The Google Outage: On Misplaced Rage & Crowd Mentality

There is no shortage of outcries over the now infamous 100-minute outage.

“Little ‘dashboards’ aren't going to cut it,” or so it seems [1].

People want answers – and they want accountability.

Just don’t hold your breath for either.

Accountability will be supplied by the market; yes, once you abandon on-premise infrastructure, "it may be cost-prohibitive to return”; but that’s why the onus is on you, during the selection process, to make sure that the move protects against technologies that promote ‘vendor lock-in’ – and there’s plenty of support to manage this risk.

Wednesday, September 2, 2009

Latency: Solving 80% of the Problem

There’s a great post describing the “solve 80% of the problem” mantra that’s worth paying attention to, especially in IT, where idealism yields to much tougher budget, risk-appetite, time, and resource constraints; in IT, you can really drown in the last 20%, even on problems much easier than real-time search.

We’ve had a couple of interesting discussions on a very old and widely-covered topic: latency. As it relates to web response times, studies (by Google, Amazon and others) suggest that delays as small as 250-500ms matter to your audience and impact revenue [6].

Two completely separate threads, with two completely different teams, debated issues that ultimately distilled down to latency; participants included upper levels of management:

  1. How to reduce excessive round-trips required to render the homepage;
  2. How to keep users pegged to a particular Data Center without introducing routing delays;