Today’s software is built up in layers, like sedimentary rock that has been accumulating over many generations. In Dreaming in Code I wrote about how sometimes the lower layers poke up through the surface, like angled strata of rock, disturbing the placid interface surface. (This was merely a metaphoric restatement of Joel Spolsky’s Law of Leaky Abstractions.)
Examples of this are all over the place. This morning, for instance, I went to have a look at the new beta of My Yahoo (here’s the TechCrunch report). And here’s what I saw at the top of the page:
Notice the center button. This is, of course, an HTML code or “entity” representing the “non-breaking space”, and it is rearing its ugly little head onto the shiny new AJAX-y fresh My Yahoo screen.
Presumably some designer or developer entered that data long ago, maybe long before anyone ever thought it would end up labeling a button in this environment. Or maybe it was coded consciously that way with the expectation that the HTML data, including the non-breaking space code, would be transformed by the My Yahoo application in such a way that each layer would understand that it was looking at an HTML entity and handle it properly. However it happened, the bug exposes a layer of the software you were never supposed to see.
It’s a tiny bug, to be sure, on the first day of a public beta. It will probably be gone soon. But such “entity” codes have made their way often enough over the years onto Salon’s home page — so I find it a little reassuring that these things happen even to the experienced and well-staffed team at Yahoo.
There are no revisions for this post.
Interestingly enough it’s even worse than that—rather than seeing something that wasn’t supposed to show through, you’re seeing something that *was* supposed to be directly delivered, intercepted by mistake. If the entity was just sent to the browser, it’d show up as a space, but something escaped it midstream (turning the & character into an ampersand entity, thus making the ‘nbsp;’ part mean nothing to the browser).