Listening to the voices in your head

Saturday, June 30, 2007
 1 comment(s) send this post to a friend
I went to the emergency room on Sunday night. Ever since the kids came along I've been dreading having to take them there, but it turned out I was the one to get hurt first. I nearly put out my eye while doing a harmless bit of car repair. Here's how it happened.

Two of the door handles on our 2002 Toyota Sienna had broken. It's cause our kids have superpowers and don't know how to control them yet—a common problem amongst larval superheroes. I couldn't repair the sliding door myself, but I found a site outlining how to fix the rear door handle better than new. I'm not mechanically inclined, but I reckoned I could do what the site described. And it would save me the $130 the repair man would charge.

First I removed the inner part of the rear door and removed the broken latch. The latch was plastic—no wonder it had broken. Now all I had to do was drill a hole down through the latch into the lever that had broken off it, then screw the two back together. This would make the latch even stronger than it originally was: metal is stronger than plastic, you know.

Drilling through the parts went well until I realized I couldn't get the drill bit back out of the part. The bit was stuck so tight that the drill couldn't keep a hold on it. I tried prising it out in several ways; I even drilled a second hole right alongside the first, but the bit still would not budge.

I decided that what I needed was a tighter grip on the drill bit. So I clamped it with a pair of pliers and clamped the pliers in a vise. Then I rocked the part back and forth, trying to twist it off the bit.

With the inclusion of the pliers and vise I had involved quite a bit of force into this endeavor and realized the chance of something slipping, flipping, or cracking was non-zero. I said a little prayer that the handle wouldn't crack—I really hated to have to pay the repair man to replace it. Then I remembered my friend Chris, who had his eye nearly blown away a few months back in a freak accident, and I heard a little voice saying the same sort of thing could happen to me. "But of course it won't," I replied. "Nothing like that has ever happened to me. I'm the least accident-prone person I know." Still, I felt uneasy, and pushed my glasses closer up toward my face. I've worn glasses since I was a kid and they've saved me from many a flying chip, splinter, and pebble. But as I touched them I noticed they don't give the coverage my early-'80s serving platters did.

Even worse, they weren't even in a position to block whatever shrapnel might emerge from my twisting contraption. I'm needing bifocals, frankly, and what that means—for you young folk—is that I can't focus on something if it's between six and twelve inches from my face. I can look under my glasses at something if it's closer than six inches; I can look through my glasses at something if it's farther than twelve inches; but in the middle distance neither my eye nor my lenses give me focus.

I suddenly realized I was looking at this twisting contraption under my glasses, about six inches from my eye. So I moved it away to arms length. But I needed to see whether the drill bit was turning, so before I knew it I had moved in close again.

Now this is the moment when the drill bit should have wrenched free from the handle effortlessly, and I should have grinned at it triumphantly and carried on with my work. Instead, there was a sharp "ping" sound, and suddenly I was staggering back from the work table, the vision in my right eye was blurry and—holy cow—pink, and I've just shot out my eye.

It didn't hurt. It felt like a little dust had got in there. But when I pulled my hand back down and saw my fingers were covered in blood, I knew I had bigger problems than dust.

This is just going to keep getting worse, so stop reading now if you've had enough forensics.

I felt quite calm as I went into the house. My first thought was that the kids not see me. My second thought was that I could now joke with Chris about going to new lengths to identify with his troubles. My third thought was that I should get someone to take me to the emergency room. The order of those thoughts will tell you a great deal about my character.

I moved through the house to the bathroom and surveyed the damage. The good news: my left eye was perfectly fine. The bad news: my right eye looked like the horror section at the video store. I was literally crying blood. Some of the more enterprising droplets had stolen into my tear ducts and now emerged furtively from my right nostril. The white of my eye was flowing pink like a decorative waterfall at a Japanese garden. A thin sheet of tissue about the size of a fingernail emerged like an anemone and wavered every time I blinked.

I leaned under the faucet and rinsed. When I got up, there was a little tab of tissue left in the sink. I thought: "I've got a pretty good chance of losing this eye." I prayed that I wouldn't—that I'd come out of this unscathed.

Not wishing to cause alarm, I called to my wife in the most nonchalant, "Honey we're out of toilet paper," voice I could muster, and pondered what to do next. Usually I have a hard time planning a trip to the bathroom, but it took me no time to decide how to get to the hospital. Driving myself was out of the question. I couldn't ask my wife because someone had to stay with the kids. My parents were entertaining company. So I called up my nephew James. My wife came in as I reached him, and I told him to be on standby. Then I showed her what had happened. She gasped, looked more closely, gasped again, then went to the bed to wrestle with the temptation to faint while I asked James to drive me.

We were at the hospital for three hours—not bad at all for an emergency room visit. I spent most of the time resting on the bed, reading a good book and enjoying myself. I felt completely calm—no anxiety at all. The nurse found my heart rate and blood pressure to be normal. This will sound trite to some, but I knew from long experience that God would do right by me. I could live without one eye—there are worse things to lose. And I figured he would answer my prayer with a "yes." He usually does. Usually.

The doctor put weird drops in my eye and looked into it with a blue light. Then he gave me the diagnosis: subconjunctival hematoma.

The eye, it turns out, is a complicated thing. The white of the eye is a mass of tissue kept at a constant pressure by an elaborate pumping mechanism or something. Then you have the cornea, which is the clear "dome" over the iris—the colored part of the eye. What I didn't know was that the eye is enclosed in a kind of clear skin called the conjunctiva. What happened with me is that a little piece of the drill bit bounced off my cheek, making a small mark, and ricocheted across the surface of my eye making a long, but not terribly deep, scratch. It tore the conjunctiva and cut a little way into the white, then came out again. If it had stayed embedded, I would have been in agony—not to mention the unpleasantness of removing it. If it had struck a few millimeters to the right, I would now be blind, or facing endless surgeries, or both.

hematomaIt merely broke a couple of vessels in the white of my eye, and this flooded the space between the white and the conjunctiva with blood. Thus the diagnosis: subconjunctival hematoma.

The injury did not damage my cornea. It did not affect my vision. It didn't mess with the sensitive pressure in my eye. All told, I got off easy. I needed a tetanus shot, antibiotic eye drops, and some saline solution. If I say, "Praise God," will you see what I mean? When God had warned me about my eye, I hadn't listened. But when I asked him to make it work out all right, he did listen.

I paid $100 for the privilege of using the emergency room, plus $35 for a check-up three days later. So much for saving money. The next day I braved working on the handle again, and found it was still unbroken. The drill bit had snapped off right where it exited the handle. I decided to leave it in there—more steel reinforcement. Then I finished fixing the van, and the rear door works better than ever.

My eye was dry and uncomfortable for a couple of days. Now it's fine. The only long-term effect is that I look like a demon-possessed thug. Even this downside has its advantages. I win a lot more arguments, for instance.

I learned three things from my experience.
  1. Wear safety goggles.
  2. There's a reason repair men charge the big bucks to fix things. Let them.
  3. If a little voice inside your head says, "Maybe this isn't such a good idea," believe it.

Phit released

 3 comment(s) send this post to a friend
I released a new game—Phit—this week, and it quickly rose to the number 3 spot on Digg. I had more than twenty thousand visitors in the space of a few hours, and my server went down. It's back up now, as you can see.

In other news, I finally put my music up on mp3.com. Now maybe a record company will contact me and make me the new Elvis.

Book Review: The Great Omission by Dallas Willard

Saturday, June 23, 2007
 1 comment(s) send this post to a friend
My review of Dallas Willard's The Great Omission has just appeared on Relevant magazine online.

Bringing the Server Home

 2 comment(s) send this post to a friend
The web is faster than the applications installed on my local computer. It takes Excel 15 seconds just to open a blank spreadsheet. Yet I can bring up a blank Google spreadsheet in less than a second. Windows Search takes minutes just to search a subfolder on my hard disk, yet Google can search billions of pages in milliseconds. (Google Desktop search has helped to close that gap, thankfully.) I get more done, faster, through web apps than through local apps. They just work faster.

And that's a shame, because here at my fingertips I have $2000 worth of Dell XPS laptop goodness. I have a dual-core CPU, a few gigs of RAM, and a hard disk dedicated to serving me. Yet they serve me worse than sites thousands of miles away who see me as one anonymous visitor among millions. I'm beginning to wonder why I bother spending money on applications and nifty hardware when Firefox and a cheap computer would serve most of my needs.

It seems there's a lost opportunity here for those who make personal computers and software. They've dropped the ball, and Web 2.0 services have recovered it—now they're sprinting for a touchdown. But I don't think it's too late for personal computers to be more than windows to the web. Personal computers are, after all, personal. They are typically dedicated to a single user or a small set of users. They are local—that must be worth something in terms of speed, efficiency, and user-knowledge. Why do they work more slowly than the web?

The hard disk has a lot to do with it. When I ask my computer to open a spreadsheet, it runs a tangled obstacle course of file accesses to give me what I want. It has to find the spreadsheet file, open it, figure out it's a spreadsheet file, and decide what application is meant to open that kind of file. It then has to find the application executable file, open it, find out what other data files and DLLs the file relies on, and open them. It has to create new processes and windows, allocate new memory, load and process bitmaps for buttons and so forth—it has a lot to do.

Every one of these file seeks and accesses takes time. Computer CPUs and RAM have gotten very fast, but hard disks still run on geologic time. So every time I ask my computer to do something new—something that involves new files and applications—I enter the microcomputer equivalent of the long dark night of the soul.

What I've just described is actually the worst-case situation. If Windows has no idea I'm about to open a spreadsheet program, then it has to go through all this file-opening rigamorole. More recent versions of Windows avoid some of the slowness by caching the programs and files that I use frequently. If I open Excel, use it for a while, then close it again, Windows doesn't fully close it, but keeps it near at hand in case I ask for it again. After I've used a program once, I can usually open it much faster the second and third times.

Still, it's rarely fast enough. It may take 5 seconds rather than 15 to open Excel, but 1 second to click a link to an online spreadsheet and open it. How in the world are internet servers still faster than my computer?

Specialization is the keyword here. When I ask Google Docs to give me a new spreadsheet, it says, "You know, it's funny you should ask because I was just thinking about that. I was just thinking about spreadsheets and how I might best serve you with one. Here you go." Google Docs spends all its time thinking about how to give me a spreadsheet, so when I ask, it's ready.

When I ask my computer to give me a new spreadsheet, it says, "Huh? Tetris? What? Oh, you're changing the subject. Wait, what did you say? Spreadsheet? I can't remember what that is... Oh! Yeah, I can give you one of those. I've got one lying around here someplace, somewhere under this pile of documents and applications. Give me a sec'..." My computer is a generalist, not a specialist. It can do for me anything that a computer can do—play a game, write a document, edit pictures, crunch numbers—and that's a useful quality. I tell my computer where to go, it goes there. But not instantly. It has to pack for the journey.

A web site, on the other hand, cannot do anything or go anywhere. A web site, typically, is dedicated to doing one thing, doing it well, doing it en masse, and doing it—hopefully—fast. Lulu makes books. Blogger manages blogs. YouTube serves video. Each of them performs its specialization competitively with other specialists, and that competition quickly makes them skillful, useful, and quick.

If switching between websites took a long time, the web would be much like my computer. I would work on a spreadsheet for a while, then wait while switching to a gaming site. The web is not like that. In fact, with tabbed browsing I can switch instantly between totally distinct specializations. I can go from blogging to reading an article to playing a game in less than a second. Through the web I get the specialization of individual sites coupled with the diversity of the mass of all sites. Even the personal computer's trump card—generality—is outdone by the web.

Personal computer applications do provide some advantages over the web. They can keep working despite network outages. All things remaining equal (like, in the absence of trojans), they offer greater privacy and security. And after all, there is this vast, untapped "X" factor: a personal computer should be able to know its user better than anyone. It can learn which words he tends to misspell and fix them automatically (or coach him, if he asks for it). It can know he tends to log on at 9 AM and browse the news. It can be ready for him to play Counter-Strike next Friday night, just as he usually does. Web sites personalize their services to a certain extent, but that's not their natural advantage. Personal computers should work harder to understand their users and anticipate their needs, because that is their natural advantage. They can dedicate gigabytes and whole CPUs to the problem; websites cannot.

Still, no matter how much my computer studies me and attempts to cater to my every whim (which, by the way, it will never be all that good at, because people are complex, unpredictable, and hard to understand—even by other people, much less a computer), if it can't open a spreadsheet quickly, it is going to lose to the web.

Here's a proposed solution. Why not make personal computers more like the web? If dedicated servers are so effective at serving files and applications quickly, why not make each personal computer like a collection of servers?

Instead of having one large, fast hard disk, put several smaller, perhaps slower ones into each personal computer. Likewise, include multiple, separate banks of RAM, separate buses, and separate cores. (To a certain extent, hardware is already going this direction.) Now, for each commonly-used application, have the OS dedicate a single HD/RAM/CPU sub-computer to that application. In effect, set up a server inside the computer specifically for serving Excel, for instance. Now when I ask to open a spreadsheet, the Excel sub-computer says, "Right away, sir! In fact we've already cached the last forty spreadsheets you opened, the three spreadsheets that arrived in the mail this morning, two new spreadsheets we downloaded from your favorite websites, and all your favorite templates in case you're thinking of making a new spreadsheet." Excel would own a sub-computer, Word another, Counter-Strike another, Firefox another. All the applications you use the most would operate continuously on their own local servers, anticipating your needs, ready to spring to your aid the moment you ask them, positively slavering to pander to your every whim.

What about applications you use less often? Well, they can share sub-computers easily enough. Indeed, the OS can analyze which programs you tend to use together as opposed to those you tend to use separately, and group separate programs onto common sub-computers since they're less likely to be requested simultaneously.

Maybe hardware and OS producers are already planning something like this. I sure hope so. I use tabbed browsing for so much of my work now that I'm thinking of remapping Alt-Tab to toggle between browser tabs instead of applications.

Scataract

Sunday, June 17, 2007
 2 comment(s) send this post to a friend
(If you're a Mac user, or just don't like pressing Ctrl, you can use the 'W' key or the up arrow to move your ship in the game. In fact, there are lots of extra controls available if you look for them, to suit all sorts of tastes. See if you can find them all!)

Here's my new game Scataract. I hope you like it.

(Its permanent home is here. I prefer to play it there because this page is a bit too bright.)

Last November I decided to program a little game for the logo of my site. I make games and teach game development for a living, and I thought it would be fun to show a game playing at the top of all my web pages. (It's not on this page, but look here, for instance.)

I whipped together the quickest game I could think of: old-fashioned vector graphics because they're easy to make and nostalgic; a space-shooter theme; simple AI; just two or three enemy types. It took me just an evening or two, but it proved to be pretty fun. (continued below...)



Not fun enough, though. So I disabled player control and made it run in standalone mode in the upper left corner of each page.

Around the same time I got up the nerve to do something I'd wondered about for several years. Ever since I saw the game Blinx, I'd been thinking about how to do time-reversal effects. Actually, I got most interested in it while working on Brothers in Arms, because we often had AI problems that were difficult to debug because by the time you saw them, it was too late to figure out why they happened. We needed a way to go back in time. That way we could pause the game right before the bug happened and examine the situation that caused the bug.

Actually, I first started thinking about time travel in games when we were developing Ultima IX: Ascension. I thought it would be cool to have a situation where the player encounters himself in the game—a version of himself from the future—and the choices he makes in interacting with himself affect how he experiences the event later when he is the Avatar from the future. So if you decide to give your future self money, then later when you encounter your past self, he'll give you money. If you decide to beat your future self to a pulp, then your past self will beat you to a pulp. We didn't end up putting this into the game. Seems like somebody should do something like this eventually, though, shouldn't they?

Anyway, so time travel in games = cool.

So last November after working on the site logo game I got up the nerve—as I was saying—to code up a system for manipulating time in games. It's not rocket science, actually. I do the obvious thing: I save the state of every (significant) object on every tick. This amounts to a lot of data, so I only save the last 30 seconds or so. When it comes time to restore the state of the world, I do three things: (1) update the state of all objects that exist both at the current time and the new time, (2) add any objects that exist in the new time but not the current time, and (3) delete any objects that don't exist in the new time but are in the current time. When I've done all that, I've traveled in time. Pretty simple, really.

I implemented this in Flash, and now the game has the ability to record itself as it plays, then pause, go backward, go forward—it's an in-game VCR.

I decided to take my simple logo game and add this time-warping feature. Like in Blinx (sort of), the player could pick up powerups to cause time to pause, to move slowly, and to reverse. If you play Scataract, you'll see those powerups are in there.

But then I got fancy, and it nearly drove me crazy. I decided it would be neat if one powerup would record the player for several seconds, then rewind the recording and let the player play along with his or her own original actions. Now you can have two players at once—a single-player cooperative game.

This in itself wasn't too hard, and that feature is in there—it's the Record pickup. What was hard was a feature that didn't make it. Let me explain.

In the source code, the "Record" pickup is actually called the "Fork" pickup. The idea is that when you record and playback yourself, you're "forking" a new version of yourself. Fine. What I wanted to do was to allow you to pickup new fork pickups while you were already forked. Then you could make forks of forks, and forks of forks of forks.

Potentially you could have an infinite number of recordings of yourself playing alongside you at the same time. In practice the number would be unlikely to get above a handful because the chances of finding more than a few fork pickups at a time were slim. Still, it would be pretty zany to see two or three versions of what you did in the past all fighting bad guys alongside you.

Well, this "Infinite Forking" feature is what nearly drove me crazy. It proved to be excruciating to manage, and after battling bugs for a couple of days I decided to save it for the sequel. ("We're saving that feature for the sequel" is what game developers say when they mean, "We are cutting that feature and you will never see it again." This is analogous to when publishers say, "We're putting this project on hold," when they mean, "We're canceling this project. Good riddance.") Sorry you can't battle alongside more than one copy of yourself. Your ego will just have to put up with battling alongside one copy of yourself.

I programmed all this time-traveling and -forking stuff over the Christmas break. It seemed like I was nearly done with the game. I always forget: the first 90% of a game's features takes 90% of the time; the last 10% takes the other 90% of the time. There are so many little bits and pieces in a game that you hardly think about but they all add up: the high score table, the main menu, the instruction screen with its little animations, the hints at the beginning of the game if the game senses you're an idiot (seriously, they're in there), the little compass pointers that tell you where everything is, the view shaking when a big explosion goes off, the little particles that fall into the black hole that you'll never notice consciously but that subconsciously tell you "STAY BACK!" These hundreds of little tasks amount to days and days of work.

Plus there are all the features I slaved over that amounted to nothing. Did you know there are asteroids in the game? Yep. The art's there; the audio's there; the code is there. Boy, is the code there. I coded a whole billiard ball collision solution so that asteroids would bounce neatly off of each other as you plowed through them with your ship. For a while, the 4th level out of every 7 levels was an ASTEROID WAVE, and there were dozens of asteroids floating around, ricocheting off each other and generally having a jolly old time. But there were two problems. First, there was an annoying bug that caused asteroids to spiral out of control after time travel had taken place—time sickness, I guess. Second, they just weren't fun. They were a big bunch of obstacles floating around in space. Obstacles—at least obstacles without payoff—aren't much fun. So I got rid of asteroids. Well, I saved them for the sequel.

All told, I spent probably about three weeks on this game, spread out over bits of weekends and late nights (like this one) over the last six months. Why do I do it? I'll make no money from it. You people don't click banners—neither do I—there's no revenue there. As a game developer, this doesn't even look good on my resume. It's a Flash game, for crying out loud—that's like programming in diapers. (Like programming in diapers with a leak, more like. Don't get me started. Well, except actually I love Flash—I once told a Sunday School class I hoped heaven was like Flash. Just, without all the bugs. And the molasses-like performance.) Why do I do it?

The truth is I love to make games. Since I was ten years old, puzzling over assembly on my Atari 800, I've loved to make games. I loved making games enough to give the best part of 12 years to it. But here's what's sad. Frankly, most game developers don't make games: we make bits of games. Little pieces. Fragments. A sound engine. An installer. A weapon system. A jump animation. Thousands—millions—of little pieces that when smashed together become—hopefully—a game. Occasionally, they even become a fun game. And rarely—oh so rarely—they even become a successful fun game. And that, my friends, is a beautiful thing.

But it still leaves thousands of game developers around the world spending their days building pieces instead of ripe, whole games. And there lies the answer to my question. Why do I make weird little Flash games? Because somewhere deep inside me (queue violins), there's still a ten-year-old boy with an urge to make stuff blow up on screen. For him, Flash is the shortest path from here to game-making nirvana.

Look, Ma, I can make a game all by myself.

How to Handle Books

Tuesday, June 12, 2007
 3 comment(s) send this post to a friend
I used to get depressed whenever I walked into a bookstore. I would stand there dazzled by the thousands of titles—so many of them so intriguing—and feel the fingernails of death at my neck. Everywhere I looked I saw books I yearned to read—The Bookseller of Kabul, How the Irish Saved Civilization, The Morrow Guide to Knots, Society of Mind. I would never live long enough to read them all. Strolling through the bookstore gave me a feeling like strolling through a cemetery. Each alluring book marked a mile on a road I could never hope to travel to the end.

It's a matter of arithmetic. On any given shelf, one book in ten seemed irresistible. Given a total bookstore inventory of 100,000 distinct titles, I had 10,000 books to read before I die. I've got 60 years left on the outside, so that's 166 books a year. To read all the books I want to read, I have to read three a week.

In college I took a course in Great Books of the Western World and blazed through about three books a week. I learned more in that course than in all my other college courses combined, but the pace exhausted me. These days I read a book or two a month, and I'm content with that. I wouldn't enjoy reading three books a week for the rest of my life. It would feel like work. My brain would fill up.

So I realized I was running out of time. Despite my biblio-morbidity, or perhaps because of it, I never left a bookstore empty-handed. Soon my shelves were covered in books I never read. Book-shopping lead to depression and shame, and I stopped going to bookstores.

I didn't give up reading books—I just took a new approach to getting them. My policy: Never buy a new book when you can buy a used one; never buy a book you can borrow. This policy saved me a lot of money. I could buy A Gentle Madness on Amazon for $15 or get it from the library for free. The policy also made me more deliberate about what I read. I could no longer load up a shopping cart of books I happened to like—now I first had to identify each book I wanted to read, then find the best place to get it. I had to want each book badly enough to think about it, to seek it out.

The Pencil

Even though I avoided bookstores, I still added daily to the sad list of books I would die without ever having read. Then I came across a book that helped to change my attitude.

It was The Pencil, by Henri Petroski. It looked fascinating—a historical romp through the evolution of that most underappreciated of tools, the lowly pencil, complete with insightful applications to the study of engineering in general. How do people make things?—that's the essential question—How do they make them better and better over time? A thousand titillating questions would orbit and illuminate the central one: Why are pencils so often that color of yellow? Who had the bright idea to make pencils hexagonal—not square, not octagonal—so they refuse to roll off your desk? What sort of wood do they make pencils out of? When did they start sticking erasers on them? An object we take for granted would prove to be a treasure trove of fascinating factoids.

As it happened, The Pencil bored me to tears. And this made me question my arithmetic. Sure, 1 in 10 books on the shelves looked intriguing, but you can't, as they say, judge a book by its cover.

Take On Bullshit by Harry G. Frankfurt. How can you go wrong with a scholarly treatise on the practice of bullshitting from Princeton University Press with a cover so uncool it's cool and an expletive front and center? It can't help but be droll and charming and witty. Well I've read it and here's the punchline: This really is a scholarly work. I found it quite interesting, actually, but it's nothing like funny; and at $10 for 80 tiny little pages, it's nothing like worth it.

Or take Zen and the Art of Motorcycle Maintenance by Robert M. Pirsig. Winsome premise: man motorcycles across America in search of himself and a profound philosophy. What they don't tell you is that Mr. Pirsig thinks he is the smartest and wisest and most mysterious and just all-round neatest fellow he has ever known, and he can't get enough of himself. None of which, by the way, leads to any sort of coherent philosophy, much less a profound one.

I reworked my math. Ten percent of books seem fascinating; ten percent of those actually are. A great deal of what gets published lacks any appreciable beauty, truth, or value. That's kind of depressing—but at least I don't have so much to read now.

Reading for Nourishment

So I have another policy. I'll give a book a couple of chapters; if it fails to engross me, I get rid of it. Life's too short to read boring books.

How do you know when a book's worth reading? Right now I'm reading Glamorous Powers by Susan Howatch, a novel about a psychic monk at the outbreak of World War II. Sounds ridiculous, I know, but a friend recommended it. And do you know—it has absolutely pulled me under. The very thought of reading it in the evening brightens my afternoon. That's the test of a worthwhile book: it sheds light; it affects. Not all good books thrill, but all good books nourish.

So I asked myself: Why did I waste so much time and money on books that ended up a slog? And I realized to my horror that what drew me to those books was the hope they would make me more respectable.

I wanted to read all the "important" books—Vonnegut and Catch 22 and The Sun Also Rises—books you can mention to good effect at parties. I raided bookstores and stayed up late at night earning clout, dreaming of—or dreading—the day someone would ask me whether I had ever read X. Sure I read for pleasure, and for knowledge, and for insight—but most of all I read to impress.

The trouble, of course, is that no one ever asks. People care about what team you're rooting for; they care about how you got your lawn so green; people don't care if you read Godel, Escher, Bach. There are maybe 600 people in the United States who will like you better if you can rattle off a slick reading resume, and they spend their time chatting to each other on NPR and C-Span 2. Nobody cares what I read. The respect I strove to earn was never up for auction.

Now I can walk into any bookstore, anytime, and look it straight in the eyes (like James Frey at the end of A Million Little Pieces). I walk in, I look around, I see something intriguing, I jones, I get out, I go to the library. I give away my books every chance I get, so they don't get attached, like wayward kittens. You've got to own your books or they'll own you. And the best way to own them is as little as possible.

Book Review: How to be Good by Nick Hornby

Friday, June 08, 2007
 0 comment(s) send this post to a friend
A few weeks ago I volunteered to lead a discussion group at SMU on Nick Hornby's How to be Good. SMU invites entering students to participate in these groups before the semester starts as a sort of academic appetizer. This week I read the book to prepare for leading the discussion next fall.

Too close to home?

This was almost—but not quite—my first encounter with Hornby. My wife and I both love the film version of About a Boy, though we've never read the book. She started to read How to be Good several years ago, but put it down when it hit too close to home. Our marriage was struggling at the time. We were living in England. It felt like the emotional emanations of the book would resonate with our own and swell them into something worse.

So I approached the book with a mixture of interest and unease. Hornby has a stellar reputation as a storyteller; the endorsements that litter the book's cover simply gush ("How to be bloody marvelous," says The Mail on Sunday); and what I gathered of the book's premise intrigued me. But would it dredge up painful memories of the dark times in my marriage?

Flavors of Good

The book's title frames its central question: How, indeed, to be good? But "good"—as the story reveals—is a slippery word, with many possible meanings. There are the moral questions: What sort of person is a "good" person? What sort of deed is a "good" deed? And then there are the existential questions: What sort of life is the "good" life? Can anyone ever feel truly happy? What—if anything—makes living worthwhile?

Another question lurks beneath these, and in some ways overshadows them: Which of these questions—the moral or the existential—most appeals to me? Am I driven by the desire to live right or to live well? If I want to know how to be good, I must first decide whether good means righteous or happy.

Katie Carr's Cul-de-Sac

At first glance, How to be Good seems too gentle a story to be diving into such thorny issues. It centers on Katie Carr, a forty year old doctor in a North London suburb whose marriage has collapsed like a bad lung. She takes little pleasure in life, least of all in her sneering, sarcastic husband David, a semi-employed writer. Her friends talk at her rather than with her. Her children hardly know her. Recently, she has taken a lover; but she realizes he gives her thrills rather than satisfaction or even real pleasure. She has reached a midlife cul-de-sac. Yet her wry, insightful, and often funny narration brightens these dark themes.

The crisis takes a new turn when David changes dramatically—miraculously—for the better. He gives up writing his weekly rant for the local newspaper. He becomes meek, loving, and considerate. He apologizes for failing to love her. Yet her delight at this transformation is dulled by the eerie abruptness with which it came about.

A faith healer with the curious name DJ GoodNews emerges as the one responsible for David's transformation. Though Katie is skeptical of GoodNews at first, she is forced to recognize his gifts when she sees him perform a miraculous healing. Soon GoodNews comes to live in the Carr household, and David and he begin to plan how to spread their vision of love and charity for everyone. Katie comes face to face with "good."

But philanthropy is not the same thing as love, as Katie discovers when her saintly husband grows more and more remote. The question of how to be good proves more nuanced than any of them had reckoned upon.

The book explores its themes with wit, warmth, and insight. It's a delight to read, likable and engrossing. And the questions it poses about morality, marriage, family, and religion are important and universal.

Is Family Enough?

So far I've been giving you a book review, the long and short of which is: If you haven't read this book, read it. But now I'm going to assume you've already read the book, because I want to talk about its most controversial feature: the last sentence.

Spoilers ahoy.


If you found the book's last sentence jarring—maybe even disturbing—a quick google for "hornby good last sentence" will show you're not alone. It ends the book like a slap in the face: sharp, sudden, painful, unexpected. Why did Hornby put it there, and was he wise to do so?

If you look back over the last several pages before the end, you'll see the resolutions that Katie Carr makes to give meaning to her life. She must take time to be alone, to read, to rediscover her spirit. In the very last page, she hesitantly accepts her family as the core of her life, the thing that will give coherence and meaning. The tone of the last several pages is one of dogged optimism—indeed, much of the book's overall charm is Katie's enduring sense of "things are hard but we'll work them out somehow." The last sentence violently departs from that charm. The optimism is gone. We're left with the sense that although Katie may resolve to find meaning in family, in the back of her mind she'll always know that nothing means anything.

The last sentence hurts because it terminates a hopeful book in a hopeless way. It's as if Abraham Lincoln had ended the Gettysburg Address with, "Or whatever."

You can pinpoint down to the semicolon the moment Hornby decided the book was ending too brightly. This is his failure in writing the last sentence: it simply doesn't ring true. It doesn't sound like Katie: it sounds like Hornby manipulating the reader, and judging from his impeccable narration in the rest of the book, I would think he'd know better. What drove him to do it?

Imagine the book without the jarring ending and you begin to see why he included it. Without it, the book could easily end on too sugary a note. The reader could come away thinking, "Yes, despite all the problems and moral compromises, family makes everything worthwhile." This idea gives us warm fuzzies, but it fails to answer the real complexities. Family is valuable, but it doesn't make life worth living. Without faith in a transcendent reality—and this is precisely what Katie doubts in the end—it's very difficult, perhaps impossible, to imagine a life worth living. A fun life, perhaps; a survived life, yes; but a meaningful life—how can you get one without God?

Astronomers say the sun will plump into a red giant several million years from now and swallow up the earth and everything we've ever known. What meaning will our lives have had then? Today, we might find meaning in our experiences and sensations. We might find meaning in helping our fellow human beings. We might find meaning in being remembered by our children and grandchildren, or even by history books and archives. But eventually our grandchildrens' grandchildren will forget us, and somewhere down the line humankind will be destroyed, or will evolve into something with little regard for our pesky lives. Where will our meaning be then?

Perhaps I'm projecting into Hornby's intentions; perhaps I'm being overgenerous to his insight as a writer; but I think his last sentence is intended as a blunt reminder that all sentiment aside, there are no easy answers, especially in a world without God.

What You Find in the Night Sky

Did How to be Good dredge up dark memories for me? I'll admit I recognized many of the emotions and events that David and Katie experience in their marriage. Indeed, like David, I underwent a profound transformation just in time to help my marriage turn around. Though my rebirth didn't happen overnight (it took months, even years—in fact it's still going on), it was helped along by miracles, and spiritual people acted as midwives. So I saw in the book some resemblance to my life, but it didn't pain me.

The book's nihilism did pain me. It pains me when people take God's existence for granted in either direction—either vacuous faith that "he must be there" or vacuous denial that "nothing's there." God—the mere concept of God—deserves more careful treatment than that. Hornby's faith healer gets his power from drugs. His clergywoman is burned out, incompetent, faithless. God's irrelevance is simply assumed—and you know when you ASSUME, you make an ASS out of U and ME.

By not seriously engaging with the question of God, Hornby tips his hand, showing that his is a book reveling in postmodern angst, not grieving it or seeking to escape it. Angst is fashionable these days. Many people see something romantic in the compelling futility of the search for meaning. They would, as I once did, rather search than find—rather lick their wounds than see them healed.

Unlike Katie, I looked into the night sky and found that God was not only there but near. I wish I could tell you what is the difference between those who look and find and those who look and don't find. I suspect those who don't find don't look very hard.

When Web Commerce Goes Wrong

Wednesday, June 06, 2007
 4 comment(s) send this post to a friend
Yesterday morning I visited sprint.com to check out their phones and plans, and noticed a strange problem. In Firefox, the page listing their phones flickered constantly, as if repeatedly refreshing itself. I found this a little disconcerting—should I trust a technology company with a broken website?—but decided to go with Sprint/Nextel anyway. They had the cheapest plan, the cheapest phones, and their coverage map showed better coverage at my home than any other provider.

In fact, it was clear they were in the middle of upgrading the site. Between Monday and Tuesday the look and feel had changed. On Monday they would ask you up front if you wanted to deal with Sprint or with Nextel; by Tuesday this choice had disappeared, and you could go directly to selecting phones without worrying about which branch of the company you were dealing with. I figured they were having some hiccups with certain browsers, but surely the site would work well enough when it came to real interactions.

Still, I didn't make an order right away. Later in the afternoon I went back to sprint.com and placed an order for two phones (one for my wife and one for me) and a plan. The whole process seemed pretty user-friendly and smooth—until I came to the very end. After I had gone through the credit check, after I had given them my address and credit card number, after I had attempted to transfer the numbers from our old phones (unsuccessfully), then at the very end I got a page that said, Error. Transaction failed. Our servers our funky right now. Try again later—or something to that effect.

Uh-oh, methought. Did the transaction go through or not? I watched my inbox for a confirmation email for half an hour or so, and nothing came through. So methinks: When they said transaction failed, I guess they meant the whole shebang.

So I go back to the sprint.com website with the intention of emptying my shopping cart and saying goodbye to Sprint/Nextel forever. But when I click the "remove all items" button, the site doesn't empty my cart. Instead it gives me an offer for a $50 rebate on my purchase. So here's a handy tip for consumers: If you make an order at sprint.com, first fill up your cart, then try to empty it, because they'll give you a hefty rebate.

Ordinarily I'm the sort of person who runs screaming when companies do this sort of thing: I like to buy what I want, not what people want to give me a quick "deal" on. But in this case I decided that the extra $50 made it worth another try. I wasn't going to find a better deal from another provider.

So I went through the ordering process again. I do another credit check (ouch—haven't I heard that it counts against your credit score every time you have a credit check done?), enter my credit card number again... Interestingly, though, this time the site lacks an option for transferring my old phone numbers over. Does it remember the previous failure? Or are they still updating the site on-the-fly, so that an option that existed 30 minutes ago has now been retired? Could that be the reason the first transaction failed?

So I submit a second transaction. Guess what? It fails again—with the same message.

Well, obviously that's a deal killer. Sprint wants to sell me communications technology but their web front end can't communicate with their server back end during a sensitive financial transaction. My trust and patience are spent. I go to another provider and order my phones and plan there.

That's when the nightmare began.

Well, actually it began this morning when I received two emails from my bank saying, "Um, it looks like you've got some fraudulent activity going on in your checking account. Better call us." So I don't call them (my old cell phone is caput—that's why I'm trying to order new ones), but I check my account online and see what they're looking at: Two orders from Sprint totaling almost $300, along with another from my new provider.

Let me be clear: sprint.com told me the transactions failed. I never received a confirmation email, an invoice, a receipt, a final "please print me" screen—nothing like that. Sprint just charged me. Twice.

I consider placing a stop payment on the charges, but they seem to have already posted. Either way, if I can get Sprint to refund me, this problem will soon be a distant memory. So I decide to call Sprint immediately.

The charges in my bank account are listed as coming from Sprint.com, and they have a toll-free number embedded. So I borrow a phone from a friend and call the number. I navigate a voice menu. The nice robot lady asks me for my account number. I don't have an account number, I explain. She doesn't understand—she says it's all the same to her if I use my Sprint phone number rather than my account number. I don't have a Sprint phone number. When she realizes I'm numerically challenged, she forwards me to a real person with a real Indian accent.

Now, you need to understand. I love India and I love Indian people.
We took the kids to an Indian culture festival a couple of years back, we love India so much. And I don't begrudge companies for outsourcing their customer service to India—though it does, one must admit, say something about the priority that they put on customer service that they consider it something they can offload overseas. But Indians need the jobs; and they usually speak English very well. Yet, one does get the sense that a customer service assistant who is 8,000 miles away is somehow detached from one's problems, doesn't one? And what I'm needing is engagement, not detachment, because this company, after all, has just defrauded $300 from me (as another of their customer service reps will later admit. Stick around.)

But this is a real Indian accent, meaning that I can't understand her. I explain my situation, my lack of an account number or phone number, my experience with the site. I'm not sure if she gets it. But she tells me she needs to connect me with Sprint customer service. Which confuses me, because that's who I just called. "No, we're Nextel," she says—at least, that's what I think she says—and forwards me to another number.

So I navigate a menu, and talk at a robot lady, and talk to another customer service rep, this time an American. He is surly and brusque, not friendly-and-incomprehensible like the Indian girl. I explain the situation again. He puts me on hold. The music is a pleasant 70s-era vibraphone ensemble. He comes back. He can't find me in the system. "Did you order by phone or through the site?" I explain again that I ordered through the site. "Ohhhh," he says, as if experiencing an epiphany. "You'll need to speak to the web department." I think this dubious, but what choice do I have?

I call the number he gives me. Menus. Robot lady. On hold (Vivaldi this time). Indian again, a young man who sounds rather coy and nerdy, but with excellent English diction. I tell him the story. He takes my name and social security number. On hold. He comes back. I'm not in the system, he explains. I need to speak to Sprint's web department, he says. "I thought this was Sprint's web department," I say. "No, this is Nextel's web department," he replies.

Now at this, I must confess, I begin to feel a bit miffed. So I explain to him that I've just spent an hour on the phone being given the runaround and I want him to solve my problem. So he tells me he'll call Sprint's web department on my behalf and sort it out with them. He puts me on hold. Flight of the Bumblebees, punctuated by "We value your call" announcements. Ten minutes later, he's back. "You're not in their system either," he informs me. I can see I'm just getting started.

My journey through the bowels of Sprint's customer service system takes over 4 hours. I dial 8 separate numbers and am forwarded to countless others. The high point comes when I contact "Customer Care" (snort!) at the suggestion of a rep who thinks that although I'm not registered as a customer with Sprint or Nextel—despite the fact that Sprint/Nextel just charged me $300—as I've tried the billing department, credit check department, and new sales departments for both phone and online sales for both Sprint and Nextel respectively, then "Customer Care" is no doubt where I'll get the help I need. I call Customer Care, and after going through the usual rigamorole end up with a young, hip, gum-chewing Indian man who immediately asks to put me on hold and then does. Except he doesn't—his finger misses the hold button, apparently—and I hear him kibitzing in Hindi with his friends. The only word I recognize is "pizza." When he comes back, I begin to explain my problem, but he cuts me off in mid-sentence and says he is forwarding me somewhere.

"Worldwide Services," the lady announces.

"Uh, say again?" I reply.

"Sprint Worldwide Services," she repeats.

I stammer, I grunt. "How— why did I end up at Worldwide Services?"

She hesitates. "I don't know, sir. I have no information about where you—"

"I was just speaking to Customer Care and the next thing I know I'm speaking to— I don't understand why I'm—" And here, I must admit, I really thought I was going to cry. But I didn't. I'm a man, and I was born before 1980. Tears, no; lump in throat, yes.

In these few moments interacting with this woman I can tell that she is an older, Southern black lady and that she has a comforting, experienced, kind-yet-no-nonsense attitude to life and customer service. Don't ask me how I know—you can just tell these things.

So I say to her: "Look, I need some help. You're just going to have to play psychotherapist for a minute. I've been getting tossed around the Sprint/Nextel phone system for the last 4 hours. Nobody seems to be able to or want to help me. And I'm all out of ideas. I just— Could you help me figure out who can really help me?"

And in a comforting, maternal, patient voice, she says, "Of course I can, honey. Why don't you just tell me what the problem is." This makes me want to cry more. But I don't.

So I tell her. And she gives me advice.

"The first thing you need to do is to call your bank and have them put a stop on the payment." I tell her I don't think it'll work, but it's worth a try. She says, "If you want to put me on hold, I'll wait while you call them and take care of that." Wow, I think, somebody at Sprint (she turns out to be at Nextel, actually) finally knows how to serve customers. But I tell her the phone I'm using doesn't have a hold feature. I'll call the bank after she tells me how to deal with her company.

She explains to me that the Sprint website screwed up. It charged my credit card but didn't complete the sale. I'm not even in the system. They might send me the equipment, in which case I can just refuse it—but they might not. "You need to call your bank," she says, "and let them know that there has been a fraudulent purchase made from your account—because that's really what it is—and you want to stop it before it goes out."

So I thank her, and say goodbye, and call my bank. They tell the charges from Sprint had gone through immediately; a hold was never an option.

* * *

If you look on the sprint.com site, you'll see a link to "Contact Us." If you click it, it will take you to a link for email support. If you click that, it will take you to a page titled "Email Sprint Support." You select whether you're a current customer or not, a topic for your email, a subtopic, and then type your message into a tiny text area—oddly, it has a 52 character limit. When you click "submit," another page summarizes what you entered, then gives you a list of search results from their support FAQs. Not very helpful.

Below the list of search results is a message: "Didn't find the information you needed? Call Sprint Customer Support at 1-800-SPRINT1 for further assistance." (I like how the word "needed" implies that perhaps, just maybe, in the space of time between when you clicked the submit button and now, your need became a thing of the past.) And then there's a back button. That's it. The heading says "Email Sprint Support," but there is no way to send an email. If you want help from Sprint, you have to use the phone.

©Copyright 2002–2007 Jeff Wofford