Posts

Archive for February, 2005

Aflatoxins

by peterb

As you enjoy your breakfast today, please also enjoy Things That Can Kill You, Volume 2: Aflatoxins.

Er, hope you aren’t having peanuts.

If you have suggested topics for future shows, feel free to send email to life - at - tleaves.com

No Free Silver Bullet Lunch

by psu

So Pete took me to lunch today with some fellow software engineering buddies. While munching our rather excellent Indian buffet food, one of the engineers related an incident that happened to him on vacation. He was walking back to his hotel room, and he overhears one side of a phone conversation that is going like this:

We can either fix more bugs to make the system more stable or we can develop new features but not both.

Anyone who has done any level of commercial software development is familiar with this conversation. What I do is very different from what Pete’s buddies do, but the conversation was completely familiar to me. It doesn’t matter if the project is the next PS2 game or the control system for the next Airbus airliner. If you sit in a room with the developers and the managers, they are probably having this conversation. My theory about the origin of this conversation is overly simplistic not filled with deep insight. But, here it is anyway.

Like most engineering problems, software projects can be thought of as being managed across three different constraint axes: new features, general quality, and time to market. The goal is always to ship out as much as you can as fast as you can and have it work as well as you can. I think where people get into trouble with software is when they begin to believe that the three constraints above are more flexible than they really are. In particular, it’s easy to convince yourself that change is cheap. I think even experienced engineers who really understand software development can fall into this trap.

Consider the following thoughts that all of us have had:

I can’t believe they didn’t fix this simple bug

and

Just add this simple new feature. It will take you a day.

I’ve listed these two statements separately, but they are really asking for the same thing: a small, seemingly localized change that would make the product better. The problem is that in software, small localized changes almost always have non local effects that you didn’t expect. To use a cliched analogy, it’s like tossing a rock in a pond. The initial splash is small, but the ripples go on for a long time. While this seems obvious, software is still perceived as being flexible and easily changed. The reality is that every single change you make to a piece of code has a high probability of breaking something that someone doesn’t want broken. Therefore, no matter how trivial it seems, it is likely to be expensive to qualify. In other words, all change is hard. There are no shallow bugs.

I think these two relatively innocent thoughts are the core cause of the phone conversation that Pete’s friend overheard. When a team is put into the position of needing to deal with two streams of changes, life can just get intractable. Consider that on the one hand, the team has to deal with all the non-local effects of the bug fixes that they must make to keep the system running. On the other hand, they must also deal with the effects of the new feature development, and then on top of that, the effects of the bug fixes on the new features. So instead of just trying to handle the first order effects of fixing bugs, you have to deal with second and third order effects as well. Eventually, every new request becomes a fountain of pain and torture until finally the engineering team will threaten to storm out of the project in protest. This is when the conversation happens.

Being an engineer, my feeling is that at some level this conversation is inevitable because in software we just don’t know how to specify what we want early enough to avoid the thrash later. Often it’s the case that the only way to know if you’ve built the right thing is to build it and see. User interfaces (and computer games) fall into this category of project. As long as this is true, we’ll have late changes and late cycle thrash, and people will be on their cell phones in Florida pleading with their managers to start cutting down the scope.

I think that the shrink wrap world is in slightly better shape with regard to this than other areas of software development. This is because in shrink wrap, the time to market rules. You must turn the product around every year on the year to keep the revenue stream coming in to keep the product alive. In this environment, it can be easier to explain why features need to be cut or compromised to make the ship date. Of course, the flip side is that shrink wrap software tends to also compromise on overall quality to make the ship date. But for now, users seem to be willing to take that tradeoff.

I think the software services industry has it harder, because there the time constraint is slightly looser, but the pressure to implement everything the customer wants is much stronger. Therefore, you end up with long deathmarches trying to patch together huge custom systems to jump through all the right hoops and still not be too late. That’s a tough world to be in.

Finally, I think that the general principle here: that changing software is expensive, cannot be understated. People seem reluctant to accept this fact about software even though they are happy to accept it in other aspects of life. If you are having work done on your house, you don’t expect to be able to change the requirements on the contractor without paying extra money. And yet most people, even experienced software engineers, have a hard time not thinking that just one more tweak to the code will be easy and cheap. Learning to estimate and accept these costs will go a long way to improving software, the development process, and thus reduce the number of times you hear the conversation.

I’m With Stupid

by peterb

Video games, like pornography, are addictive. On some level, everyone knows that. That’s why we spend so much money on them. It’s why dried-up Congressmen take time off from seducing their new pages to hold hearings on ratings systems. It’s why tearful wives pour their hearts out to strangers, telling them how their husbands spend all their time online, waving “swords” at “worms” in Everquest. It’s why videogame magazines are sealed in plastic, so that the mark doesn’t get a peek at the goods without paying.

Videogames are like porn, and porn is a dirty, smelly, wet business. If you have to touch anything to do with videogames, you’d better have some alcohol nearby to wash and disinfect afterwards. I’ve seen a lot of sordid things. I know how cheap and tawdry the retail gaming business is. It’s a tease machine, all hype and silicone designed to activate a compulsion in the poor john not just to go buy the lousy game, but to go to the store, right now and buy it today, at full price. And like porn, when you get it home from the store and look at it in the cold light of day, the main thought in your head is often “What the hell was I thinking?”

And also like porn, if you’re not willing to mail order, you’ve got to go to a filthly little shack frequented by shady characters. Today, I was going to my local Electronics Boutique.

The manager of that store is a rat bastard, a filthy little troglodyte with grasping, sweaty hands and murine face. Some people end up in retail because they love it, and spend their time in the company of customers and friends, placidly watching the days go by. But there is another type of man, a man who represents the dark side of retail. He is in it because he loves the money. Not the salary, no, that’s not it. The physical contact. He’d have been a banker, but the banks are too sharp to let this type of man near the holiest of holies. In their job interview he’ll take a blood test, or a urine sample, and then they’ve got his number. A security guard comes in and beats him away from the branch manager like a rotten cur. Hair dishheveled, tie loose, he stumbles away, like a vampire that’s just been kicked out of the blood bank. Eventually, the smell of cash brings him to a videogame store, and he becomes the manager.

Oh, you know he’s here after hours. He has to count the money, and recount it. He touches and caresses it. There’s not a dollar bill sent back to Corporate that he hasn’t physically rubbed. If he could, he’d run his tongue down every picture of George Washington that he could find.

I knew the man was in there went I went into the store, but when you’re buying pornography you can’t be too choosy about the vendor. “How bad can it be?” you ask yourself. As long as the man keeps his hands out of his pants while you’re in the store, you’ll make it through this. But I’d forgotten about this store. I’d forgotten that in a world full of evil, demented videogame store managers, this store’s manager was something special.

This atavistic, evil dwarf is the perfect embodiment of EB Games and all that it stands for. It’s not just that they’re greedy, and are after your money. That’s just America. But if you look at how videogames are sold in this country, the margin goes to the big publishers. This means that a place like EB Games makes just as little as a small electronics store, but with higher overhead and more inventory. The way they compensate for this is by exploiting the consumer’s desire for convenience by buying their games back cheap and selling them high. It’s built in to their business model that the way for them to make money is to sell you games that you don’t want, specifically so that you’ll sell the games back to EB at a huge loss, which will then sell them to someone else at $5 under retail. The only way they can stay in business is to squeeze every last cent from the games they sell, and re-sell, and sell again, like water from a dishtowel.

And that money is pure profit.

He was talking when I came in. That’s one of the things that makes him particularly bad — he’s always talking. I go to the demo kiosk running Gran Turismo 4, trying to ignore him, but it doesn’t work. It never works.

He’s talking about World of Warcraft, talking to some poor dumb bastard, a brute in black leather and white sneakers. This guy was a football player in high school, but a busted rotator cuff queered his chance for a scholarship, and now he works part time for the car wash. The manager wheedles at him, talking about how much fun they’ll have playing the game together. “Oh, sure, we all play on the same server. Isn’t that right, Ray?” Ray is a ferret-in-training behind the counter, 18 years old, who nods vigorously whenever his rat-bastard of a manager says anything particularly hateful or odious. He’s nodding now, his head flopping on his neck like it’s broken.

“Well, I’m not too sure,” says the dope. “I don’t have no credit card.” The manager’s hands twitch, twice, like fish about to be gutted. “Well, that’s not such a big deal. After all, the first month’s free. Do you have a friend with a credit card?” Big Dumb lets on as it might be the case that his woman has a card, and that’s all this hideous, deformed rodent needs to hear: “Well, problem solved then. You’re going to love it! I should remind you that there’s no return on this game.” He gently shoves the poor bastard towards the cash register, where Ray is waiting to complete the molestation. I want to leap over the monitor and grab the guy and bring him to his senses. “Get ahold of yourself, man. Can’t you see what they’re doing to you? You’ve got to flee! These bastards are going to drug you, roll you, sodomize you, and dump your body in Panther Hollow. It’s not safe!”

But I’m paralyzed by shock at the audacity of this grinning little homunculous, and they complete their fleecing of the rube. This is beyond even the banality of EB’s workaday evil. He can’t re-buy and re-sell this game at a profit. He’s just selling this guy a game he can’t actually afford out of sheer cruelty. He’s the sort of man that electrocutes dogs, just to see what will happen. Jesus Christ! I’ve got to get out of this place, or they’ll come for me next. I cut and run.

In The Exchange, down the street, bored teenagers lethargically sell videogames and music to customers. They keep the games near the door, to make sure the trenchcoats can get in and out fast, and not make the normal, healthy music customers feel uneasy. They are not efficient, but neither do they speak much, which counts for a lot.

I picked up my copy of GT4 there, and headed home. The night air was cold. Up the block, at the Electronics Boutique, the stars seemed a little dimmer. A hungry darkness crouched there, and was waiting.

Additional Resources

  • I had read psu’s rant about this same store before, but somehow managed to convince myself he was exaggerating. He wasn’t. If anything, he was too nice.
  • This manager is even worse than Frank.
  • Everquest Daily Grind is a morbidly fascinating site full of testimonials by people whose partners are neglecting them while waving “swords” at “worms.”
  • Rest in Peace, Hunter S. Thompson.

Workflow Adjustments

by psu

It’s been about a year, and every new year it’s a good time to evaluate your digital picture workflow and try to streamline it. Well, that is, if you are a complete dork. Anyway, I test workflow tools so you don’t have to.

I had been using two basic tools to process my pictures: iView Media Pro and Photoshop. iView is a great cataloging tool, and Photoshop is very good at all kinds of image processing. But, neither of them excels at quick proofing and editing of photos. I was finding it tedious to import 300 shots, generate my proof jpegs, proof them, and then edit both sets of files down. So, where would I find a good browsing tool? Reading www.robgalbraith.com, I found that they use a program called Photo Mechanic, so I tried it out. Turns out, it is really good at browsing, editing, and tagging.

Browsing

Once it loads your pictures, the Photo Mechanic browser is very very fast. It has a convenient import tool that lets you suck the pictures off the card, rename them the way you want and put them into a folder. For RAW files, PM conveniently lets you browse the pictures using the embedded preview thumbnails that are generally embedded in Nikon NEF files. For D70 files, these are full sized JPEG files, making browsing very nice. Generally I import pictures a few hundred at a time, which PM handles well, without bogging down.

So, where I used to bring my RAW files into iView just to run a batch conversion script, I can now browse the pictures directly in PM. This saves the import step and the conversion steps, and I can evaluate the pictures at full resolution. Which brings us to editing.

Editing

The editing UI in PM is great. As I said above, the browser is fast. It is easily 2 or 3 times faster than either iView or Photoshop. Also, it lets me edit full sized JPEGs and it has a nice side by side view for comparing similar shots. Love it.

Tagging

Finally, Photo Mechanic has a nice tool for tagging pictures with meta-data. This is different than iView, where annotating pictures in the catalog was easy, but applying those annotations to the files was a multi-step process. PM has a “stationery pad” where you can enter the meta-data for a bunch of pictures and tag them all in one batch. It’s easy and fast and supports all the prevailing EXIF and ITPC standards.
PM, like all the other tools, does have problems with manufacturer specific EXIF tags. But this is all part of the meta-data problem on which I have ranted before. This won’t change unless the manufacturers stop deciding to screw users.

The only annoyance with Photo Mechanic is that at the time I started using it, there was no way to fire off a batch script to Photoshop to convert a large mass of high resolution RAW and JPEG files into the little thumbnails I use for my web site and auxiliary catalog. I spent some time trying to solve this problem with Photoshop scripts (The Dr. Brown script is nice), Nikon View, Nikon Capture and Capture One. I didn’t like any of these tools. I wanted to be able to fire off my old droplets using my browser.

As if to read my mind, the Photo Mechanic developer added this functionality to version 4.3.3 of the product.

New Workflow

Here’s what I do now:

  • Copy pictures from the card to a dated folder using Photo Mechanic. Rename the pictures into a fixed scheme: prefix-date-serial-number.

  • Edit and tag using Photo Mechanic

  • Send the RAW files through my conversion droplet. Send the JPEG files through my resize droplet. This generates small proof JPEG files.

  • Import the small proofs into iView for further selection and web site work.

This is pretty much the same as the previous workflow, but with only one iView catalog. I found I was always using the thumbnail catalog for everything anyway because none of it was ever offline. I keep everything else basically the same. Lots of backups, web site generation and so on can stay unchanged.

So there you have it. Photo Mechanic for import and editing, Photoshop for image processing, iView for cataloging. Someday someone will make one tool that does all three of these things well. But until then this toolset is pretty usable. Now if only there were a convenient way to link the thumbnail catalog back to the original files. Maybe next year.

Things That Can Kill You

by peterb

For your podcasting pleasure, I present: Things that Can Kill You, Volume 1: Semiautomatic Handguns. It’s one minute and nine seconds in duration, and I promise it will be the highlight of your day.

Next week: Aflatoxins.

Shatner Addendum

by peterb

I asked William Shatner what he thought about my last article and he said:

The Sony Playstation 2! They spend millions of dollars slagging the Dreamcast, and then all the games are jaggy and ugly! And all the gaming magazines talk about how great the lousy graphics are! I can’t get behind that!

Just thought you should know.

Gran Annoioso

by peterb

Tomorrow, Gran Turismo 4 will be released for the Playstation 2. And, like a good corporate drone, I am probably going to buy it, even though I don’t expect it to actually be good. Because the previous game in the series, Gran Turismo 3, really wasn’t very good, either.

The Emperor, you see, had no clothes.

I’m going to buy it, of course, not only because of my well-documented obsession for playing video games, but also because I’m specifically a sucker for driving games. “I will never own these cars,” I say to myself. “I will think about buying an Evolution VIII, and then at the last moment will realize that buying a car that gets 10 miles to the gallon isn’t very practical, and I’ll get something sensible instead. I will never drive on Laguna Seca,” I say. But I can pretend. “Vroom! Vrooooom.”

Perhaps GT4, as the well-greased hype machine spins it, will really be all that and a bag of chips. Perhaps it will change my perspective on driving games forever, the way Project Gotham Racing did. Perhaps it will be the best game of the year.

But of course, they said that about the execrable Black and White. They said that about the unplayably bad Ninja Gaiden. And they said it about Gran Turismo 3, which was, in the end, just a sort of vaguely OK driving game. So I’m not holding my breath.

I’m sure there are people — most likely white wine drinkers — who will take issue with my characterization of GT3 as just sort of vaguely OK. But the game’s pathos was all too clearly on display from start to finish. The awful, anemic, and repetitive soundtrack served as the perfect counterpoint to a racing game that was so amazingly impotent that if you came to a complete stop in the middle of the race, the cars ahead of you would slow down to 2 miles per hour. Y’know. To give you a chance to catch up. Because it wouldn’t be fun if your opponents actually drove the race to the best of their abilities. (Of course, this works in reverse as well, so that if you open up a substantial lead through transcendent driving, the chase cars suddenly are able to exceed their vehicles’ rated top speeds. Maybe we should put these programmers in charge of Formula 1 races this year).

The graphics, which reviewers heaped praises on, were superb in “replay” mode, and hideously ugly in driving mode: PS2 developers seem to have huge amounts of trouble providing full screen antialiasing for their games, something the Dreamcast could do in its sleep. Even when a game is so desperately in need of it as blurry, jaggy Gran Turismo 3. It’s been a few years. Maybe someone has taught Polyphony about that checkbox in their development tools. We’ll see.

Most of the reviews complain a little bit about the omission of online play from GT4, but that doesn’t concern me at all. Online play for the Playstation 2 is utterly dead. It is a nonstarter. No one who matters plays any Playstation games online. If you want to play console games online, you own an Xbox, and that’s all there is to it. Xbox Live’s user experience is so superior to the Playstation’s online gaming mechanisms that it’s just more polite to pretend that the PS2’s online capabilities don’t exist at all, just like you’d politely ignore it if someone farted at a wedding. There was a gunfight at the O.K. Corral, and poor, clueless Sony showed up with a knife.

So given the somewhat lackadaisical product that was GT3, I don’t really expect much from GT4. If the Nurburgring and Paris tracks are good, and I can buy a Skyline without having to play for 36 hours, I’ll consider it an OK investment. And who knows, perhaps I will be surprised. If I am, I’ll write about it here.

And before you ask, yes, I plan on buying Forza Motorsport, as well.

Vrooooom. Vroooooooooooooooooom!

Indie Game Friday: Neverball

by peterb

Neverball is an open-source version of Super Monkey Ball, which itself owes quite a bit to the classic Atari arcade game Marble Madness. It’s quite fun, and challenging. It runs on Mac OS, Windows, Linux, and FreeBSD, so you have essentially no excuse for not trying it out.

The game requires quite a bit of CPU (and graphics card - hardware OpenGL acceleration is required) oomph, but the payoff is worth it. The textures are simple by dazzlingly bright, reminding me of the earliest of the Atari 800 chromaluma extravaganzas, but with more detail. Real-time reflections and shadows are part and parcel of the package, as is an amusing version of the game called Neverputt which is, as you might guess, a version of miniature golf.

The basic idea: you have a ball. It’s on a course. There are coins, obstacles, and a goal on the course. You want to pick up the coins, avoid the obstacles, and reach the goal without falling off. So what’s the best way to do this?

Why, of course. The rational thing to do is tilt the entire world.

Moving the mouse causes the world to pitch “downwards” in the direction in which you moved it. This in turn causes the ball to roll. My one criticism of the game is that it’s a bit too difficult; the rebound when you smack into a wall is markedly stronger than in Super Monkey Ball. Which I guess make sense, since presumably monkeys are softer than metal balls.

Neverball is available, for free, on the web. There are over a hundred different levels to occupy you. Give it a shot. Happy rolling.

Now, if only someone would make an open-source, expandable version of Katamari Damashi

Axiom of Choice

by psu

I have been fortunate enough to get my hands on an iPod Shuffle. I was mostly seduced by the look of the item, but wasn’t sure how the screenless shuffle-only interface would really work out in practice. Surprisingly, the Shuffle is by far my favorite iPod device for day to day use. In particular, its shuffle play is much more enjoyable in the car than shuffling with the normal iPod. This seems odd, since on the face of it there should be no difference between playing songs at random on a Shuffle and doing the same a normal iPod. However, it turns out that they are different in subtle and important ways, and therein lies the reason I find the Shuffle to be more enjoyable.

First, let’s review the major differences between the two players. My 40GB iPod basically can hold everything that I currently have ripped on my current iMac. This is around 13GB of music right now, which works out to about 2500 songs or 8 days worth of music. As I add new material into the iMac, I just transfer all of it to the iPod. So, when I want to be able to pick and choose from everything that I own, the 40GB iPod is the thing to take. I love it on planes and other long trips where I have the time to scroll around in the interface and pick what I want to play. It’s less than ideal in the car however, where interacting with the iPod is annoying and dangerous.

The iPod Shuffle is exactly the opposite. It is not large enough to hold everything I own, and the player has almost no user interface at all. However, iTunes has a system called “Autofill” for randomly downloading songs from a smart playlist into its 1GB of flash memory. The fact that it does this from an iTunes smart playlist is critical because it allows for a valuable level of selective filtering. You can filter the songs by genre, ratings, length and so on, so you avoid the problem of shuffle playing a whole audio book, or movements from a symphony. The autofill mechanism will also weight its choices by your own ratings, so you can make it pick from just your favorites. Once the player is loaded, the interface is simplicity itself. Hit play, hit pause, hit next, adust the volume. That’s it.

On the face of it, you’d think that the iPod would be able to do this. That is, you’d think that the iPod would have a single button that you hit to get a random selection of the good stuff in your library. But you can’t. Shuffling a playlist requires that you do no less than three or four actions at different levels of the iPod user interface. The result is, you never do it. This leaves you with picking something to play, which also requires more thought than I have time for while driving.

Ultimately I think the issue comes down to choice. While the iPod provides a sophisticated interface for choosing what you want to play, that same interface essentially compels you to always choose what you want to play. Even if you have it set up just like the Shuffle, the interface sits there in front of you, beckoning you to fiddle. The Shuffle, by doing away with this interface, leaves you in the comparatively blissful state of being at the mercy of your robot overlords. Since I can’t fiddle with the playlist, I happily allow the machine to do its job. This removes a small but noticeable amount of tension from my life and ultimately is why the Shuffle makes me happier in the car and for most day to day use.

Admittedly this is a subtle psychological bit of sleight of hand that I am playing with myself. But I think the general principle about interfaces that is at play here is that sometimes choice is good and sometimes choice is bad. It is better in general to hit the common case perfectly than to allow (and thus force) the user to tailor the system on her own. Choice provides flexibility, but can lead to extra complexity and confusion that the user does not want. Outside the realm of music players, this is something I learn every time some bad ass punk assasinates me in Halo 2 while I’m standing there trying to choose between the shotgun and the sword.

Oh, the Shuffle is also wicked small.

Eggs à la Escoffier

by peterb

I haven’t had much time to read lately, but the time I have had has been spent reading Gina Mallet’s superb book Last Chance to Eat: The Fate of Taste in a Fast Food World. I hope to have a full review done next week, but for now I’ll just tantalize you with my interpretation of a recipe that she mentions in passing, one of Escoffier’s innumerable versions of scrambled eggs. I’ve made it several times now. I think I’m addicted.

This is funny, because I have always despised scrambled eggs. I’ve always considered them the worst item on the American breakfast table, barely fit for consumption. Apparently, this is because everyone makes them wrong. I might dislike steak, too, if everyone always burnt it to a crisp.

Start with 6 eggs. As with most egg dishes, you’ll have better results if the eggs are near room temperature. Crack the eggs in to a bowl, and add salt and finely ground pepper. Combine gently.

Put a heavy bottomed pan (I use a square-shouldered stainless steel skillet) onto medium heat. When it’s up to temperature, add the eggs (no butter or fat…yet) and begin immediately stirring gently and constantly. The goal is to have them smooth, not lumpy. Don’t cook them too fast.

When they’re starting to firm up (but are still nice and runny) remove them from the heat and add an ounce and a half of butter, and three tablespoons of cream. Combine until incorporated.

I eat them with a spoon. They’re very rich, and are a satisfying meal any time of day or night. Invite me over if you make extra.

Archives and Links