Archive for November, 2007 links

links for 2007-12-01 links

links for 2007-11-30


Shades of Grey

When children learn to read and write, they are often taught to memorize spelling rules. In English, you are probably familiar with “I before E except after C.” (I would list more, but I never actually memorized any of them. :) For every rule, there are of course exceptions: eight, height, caffeine… The exceptions may not always make sense, but fluent readers and writers internalize them and understand that the simplified rules that we are taught as children are not sufficient to describe the complexity of a living language.

Visual artists are taught rules of design, the sort of thing that the rest of us find in books like The Non-Designers Design Book. Once they have achieved a level of mastery over these rules, they know when to break them. They understand that the rules are conventions.

Then there are programmers.

I don’t want you to think that I believe this of all programmers — it may even be a minority — but I regularly encounter developers who are made deeply uncomfortable by deviation from rules that they have understood to be set in stone but that in practice can be adapted fluidly. Or those who are just unwilling to accept that there are classes of problems that don’t have a single, clean solution.

I have an unsubstantiated, wild-ass hunch that they’re the same people who work on formal, mathematical proof of the “correctness” of programs. I say this not to impugn their character or ideas, simply to try to understand. I have a liberal arts background, so this is still a foreign way of thinking for me.

(By the way. It may happen that one or two people I’ve talked to recently about these topics will think I’m talking about them. I’m not. Get over yourselves.)

Let’s take web standards as an example. It should be no surprise to long-time readers that I am a web standards advocate. The three-legged stool and all that. I believe that unobtrusive JavaScript is an important and useful way to use standards to best advantage. But I am not a zealot. Sometimes it’s just not practical to take extreme measures to avoid behavioral attributes like “onclick” in your HTML. Maybe you’re using a framework that generates that code, and you can’t get away from it. It’s okay. Take a deep breath. You’ll live. I’ll live.

And then you’ll create something like the UJS Rails plugin to address a shortcoming in your framework of choice. Bravo! I knew you could do it.

Even the standards leave room for plenty of controversy, or at least wiggle-room. Is the kerfuffle over serving XHTML as text/html still going on? I really don’t know. I stopped paying attention years ago but still feel twinges of guilt about recommending XHTML Strict as a standard at work.

Security is an example of a problem that is likely to have less-than-ideal solutions. Consider threat modeling, an important part of a secure software development life cycle. In the threat modeling process, you identify and assess threats and vulnerabilities to your system, identifying those that pose the greatest risk. Security is risk management. It’s a balancing act: if there’s a low likelihood that a vulnerability will be exploited or that it will cause much damage if it is exploited, then you may choose not to devote development resources to creating countermeasures. Sometimes one security solution causes another to pop up elsewhere, and you have to decide which poses the greater risk. It’s ugly. I know.

Accessibility is another of those murky areas. In almost every conversation I have about accessibility, questions arise without satisfactory answers. Are PDFs accessible? They can be. It depends. Is this JavaScript technique accessible? For some people, yes. For others, no.

In all these situations, it comes down to making an informed, professional judgment. Novices do not have the knowledge necessary to make these judgments. That’s what makes them novices. That’s why children learn simplified spelling rules, why budding designers are taught the rules and conventions of their field, why beginning web developers should learn to use web standards and accessible development techniques. Adopting these rules and putting them into practice, over time we bump up against when they fail us. In time we develop a sense for how we can best respond to these failures, to this discord. We learn how best to move past the rules because we understand why they are there in the first place.


The usual set of excuses

I have been shying away from writing about meatier topics here because I think they will take longer than I have to do them justice. And when I start to write something, it seems like I’m just repeating the obvious. Only when I broach a given topic with those who I think are representative of mainstream developers does it sink in that the stuff I spend a lot of time thinking about is all very unknown to a whole lot of people. I suppose that’s nothing new.

I still don’t have enough time to write everything I want to, but here are a few things that have spent a lot of time rolling around in my head, ideas that I think are important and that most normal people think I’m nuts to even spend time on (everyone, that is, except a certain fellow who has recently become enamored with Common Lisp — which exempts him from being called normal).

  1. Concurrency.
  2. Architecture for scaling. Flexible approach to databases.
  3. People’s expectations for software have increased, especially for the type of web apps that I write. The old way of doing things doesn’t cut it.
  4. User interface matters. And it’s usually done very, very badly. See #3.
  5. RIAs and where HTML & Ajax fall down. See #4.
  6. Games, education, Darkstar, and virtual worlds.

Every year I do a presentation or two at the MnSCU IT conference. I’ve been thinking that next year I’ll propose a talk entitled “Your Web Apps Suck (and so do mine)” that brings all those things into a 45-minute rant. But as entertaining as that might sound, I don’t think it fair to submit my colleagues to it. Never mind that “Sam’s Latest Rant” does not a good conference presentation make. So I’m unlikely to. Sorry. Buy me a beer or two and I’ll spill my guts.

In the meantime, I’m going to try to get off my duff and write more. No. Really.


Mike Huckabee: Chuck Norris Approved

The idea of Mike Huckabee as president makes me more than a little uneasy. But between his entertaining appearance on Wait Wait…Don’t Tell Me! and this “Chuck Norris Approved” ad, he clearly has a certain “wow, he’s a real person” appeal:

(Updated to make my position on Mike Huckabee clear at the outset.)

Environment, Personal


As part of Marketplace’s series of stories on the American consumer economy, they did a short piece on a family of compacters, people who have sworn off buying anything new for a year.

My family is doing that this year. Nothing new, save a few exceptions like food and hygiene products. We’ve officially been at it since June, though we actually started about a month earlier. From our compact, which borrows from others’:

We plan to follow the principals of the San Francisco group, as follows:

  1. To go beyond recycling in trying to counteract our negative impact on the environment.
  2. To support local businesses, farms, etc., reducing resources used for transportation.
  3. To reduce clutter and waste in our homes.
  4. To simplify our lives.


  • Don’t buy new products in stores or online. (Exemptions: children’s pajamas, socks, underwear, swimsuits, and common sense items such as food, hygiene supplies, medicine, cleaning supplies… Use the “fair and reasonable person” standard. You’ll know in your heart when you’re rationalizing a violation.)
  • Borrow or buy used items as needed (resale, garage sale, antiques, free internet…)
  • Services: barter or support local businesses (plumbers, electricians, auto mechanics, veterinarians, dry cleaners, house cleaners, etc.) and encourage used parts (rebuilt transmission, salvaged headlight unit…)
  • Gifts: give used items or “experiences” (museum memberships, massage, classes, charitable contributions…)
  • Plants: perennial exchanges, cultivate from free/shared cuttings or seeds. If necessary, purchase from local businesses, farmers markets (not the Home Depot Garden Shop)
  • Arts and Crafts: First line of attack: Artscraps! When absolutely necessary (for the professionals and talented amateurs in the group), buy from local businesses and use as you go. DO NOT STOCKPILE!
  • Magazines, newspapers, books: no new subscriptions or renewals — read online or from the library, buy used books, share.
  • Movie rentals, music downloads: Both OK. Used CDs are OK – or buy directly from artists.

Why are we doing this? Mostly for environmental reasons, to lessen our impact by consuming less. We also have in mind the idea that we can reduce the clutter in our small house. We certainly have clutter aplenty! One of the reasons that we bought a small house in the first place was to limit the amount of stuff that we accumulate. I don’t want a bunch of crap lying around. Buying less new stuff helps, or at least should. We have to be on guard not to buy more old stuff instead, while trying to get rid of things we don’t need.

Buying nothing new might seem extreme. But to tell you the truth, it hasn’t had much impact on our lives. We already bought most things used, including clothing. Yes, other people’s pants. Kiara sews and knits a lot (and does a whole lot of other things), so it’s not like we ever buy mittens. We already used cloth diapers. We used cloth bags at the grocery store when possible. That sort of thing.

The compact has helped clarify a couple decisions, like whether or not to subscribe to a newspaper. We occasionally get tempting offers right around when we realize that we’re not keeping up on the news, but we don’t really need to have a lot of paper dumped on our doorstep every day.

It’s raised interesting and sometimes difficult questions: what about school supplies? Do we send a bunch of used crayons? What if we can’t find used uniforms that fit Owen?

We’ve discovered resources for finding used things. Craigslist is obvious and useful, but there are thrift stores that I never knew about, and the Twin Cities Free Market. Sometimes cities or counties make wood chips available for mulching. Friends and neighbors have tools that we can borrow, and to whom we can loan what we have. There are resources out there in the community if you just look for them.

The biggest sacrifice for me has been books. I buy a lot of technical books, the sort that don’t turn up in local used bookstores or libraries. I’m an early adopter, so they’re often the sort of books that are out of date as soon as they’re published. Sometimes I can get an e-book, but often not. For now, I just make do without. With all the information now available online, many question whether technical books are even necessary, especially on cutting-edge technology. Maybe they’re right. I’ve come to admit that I’ve bought books that weren’t strictly necessary, but the books sure were a hell of a lot easier to read on the bus than a web site.

Overall, though, I feel like the compact isn’t quite the right response to our effort to reduce, simplify, and declutter. I know that we could be doing more. Inspired by the efforts of No Impact Man and, more locally, Riot for Austerity, I wonder if striving to do something else like reduce our energy usage by 50% wouldn’t be more in line with what we’re really trying to do. Reducing consumption is a good step, but it focuses on consumerism rather than a broader range of issues, of things that we do that impact the environment and complicate our lives.