Once Upon Atari

Howard Warshaw was kind enough to send me a copy of the documentary Once Upon Atari. It’s a collection of interviews with some of the programmers, artists and managers who were in Atari’s consumer games group in the late 70s and early 80s. This was the division that did games for the 2600 console (and later, the 5200); these are the folks who gave us Yars Revenge, Warlords, Pac-Man and E.T.

Some of the people who are interviewed I later worked with in other divisions of Atari. It was pretty cool to hear the stories they had to tell (most of which I hadn’t heard).

The Home Computer Division (which is where I was during the Warner years) was a lot more conservative than the consumer games group. We didn’t have people coming into work at the crack of noon, or lighting up mid-afternoon spliffs in offices next to senior management. Few of us stayed until midnight or (much) later, and none of us were capable of carooming along the walls of our halls at great speed. Our work days were pretty dull, now that I think of it; if anyone lit up at work they didn’t tell me about it, and some of us wore ties.

In a word, my division was boring.

Then again, nobody in HCD had to program the 2600. I occasionally get to tell “young folk” what this machine was like: 128 bytes of RAM, no frame buffer at all, CPU clock-synced to the video output so you could do stuff in real time as the beam crawled across the screen. You had to be clever, smart and driven to get code working on this platform. The people capable of doing this were not your average Joe Programmers.

The people in the documentary have tales to tell: The infamous wall-walking escapades of Todd Frye, the aforementioned spliff-lighting (as told by the senior manager himself), the misunderstandings and impossible schedules that led to failed products and landfill material.

As the documentary shows, the machine took its toll. Making anything resembling a game on the 2600 was a remarkable accomplishment, and squeezing actual, playable fun was an act of wizardry. It broke some people, it certainly changed all of them. There were clashes between outsiders and the culture that had been built in the shadow of the machine’s limitations; Management often didn’t understand what ultimately drove the money machine, and outsiders — the movie producers and other wheeler-dealers — definitely didn’t get it.

Certainly it was the case that Atari’s marketing did not understand the 2600 or the people who could write for it. To the marketing department, the programmers were weirdos (well, they were) who could be safely ignored; an attitude that ultimately resulted in Atari’s failure. You have to listen to your wizards.

Nearly everyone interviewed was proud to have worked for Atari, and I don’t think it’s a case of time making the memories better.  It was a lot of work, but also a lot of fun.  While Atari was unique in several respects, the class of experience you can have working under great pressure with very good people is not unique, and I recommend (to you youngsters 🙂 ) that you find one or two of these in your career.

The Usual Madness

Cause or effect? I can’t decide whether (a) bad people simply like using certain technologies in bad ways, or (b) the technologies themselves are toxic, causing brain damage and moral decay in anyone who uses them.

Data-bearing technologies seem particularly susceptible to madness; things sound good at the start of a project but (like a creeping evil) gradually subsume every spare cycle in the data center, growing to monsters that eat entire products, swallowing whole groups of engineers and spitting out beet farmers and potters who “ain’t gonna touch a computer again, ever, man.”

Case in point: Almost every time I see a product with an SQL component, the database schema and the routines that access it are screwed up to a degree that beggars the imagination. I’m not going to get into a whole litany of things that have been wrong (“This doesn’t need a re-write, it needs a can of gasoline and a match”), but it seems that very few people actually know how to use a database without some kind of Bertold Ray radiation infecting their minds.

Rules of thumb for databases:

If your stored procedure takes more than twelve hours to run, and you think that’s okay to put into production, you should seriously think of doing something else.  Like maybe digging holes for fenceposts.

If you are using rows as a means of remote procedure call (where everybody is polling for new messages), consider doing something else.  See above.

If your application has three thousand views on fifteen hundred tables, your installer sets up over two thousand stored procedures, and query times are measured in cups of coffee and consequent trips to the john, maybe you should use something else to hold the data on a hundred employees. I’m just sayin’.

If you thought “Um, what’s the the problem with that?” while reading any of the above, I don’t want to know about it.  Please go get a job at a competitor.

Case 2: XML.

When Christ returns from vacation he’ll be suspended from angels trumpeting the glories of XML, bearing DTDs that work and XML parsers that don’t suck (or at least, that don’t completely suck; even Heaven has technological limits). Until that happy time, we’re pretty much in the stink.

Don’t get me wrong. XML is great at some things, just not the things that it’s mostly being used for. It’s terrible for RPC, it’s a hideous substitute for INI files, and it just bloody blows great globby, orbiting chunks as a makefile replacement. Twice the obscurity and eight times the syntax is a poor substitute for data portability (which it ain’t) and clarity (hoo ha).

I can think of maybe three legitimate uses of XML, and they mostly involve document markup.

Case 3: HTTP.

You haven’t lived, you haven’t really tasted the breadth of life’s possibilities, the wonders of wandering freely on this fantastic globe we live on, until you’ve given up and walked away from your attempt at an HTTP proxy. That first clean breath of pure air in the parking lot as you realize “Hey, the nightmare is over!” is a memorable experience.  The thrill as you burn all of the backup tapes on the grill in the back yard (lots of lighter fluid, natch) is nearly as enjoyable.  The knowledge that you’ve purged the planet of another great evil . . . well, no one will thank you, but just imagine silent applause from the Shadowy Guardians of Freedom.  If only people knew.  But they won’t, because you’ve destroyed it all, every last cancerous bit, and it can trouble us no more.

The problem isn’t so much HTTP; it’s an okay standard – not the best thing, not the most efficient thing in the world, but adequate. The problem is everyone else’s idea of what HTTP should be. Or rather, how HTTP wound up to be, in their hands. Sometimes the hands are caring, thoughtful and responsible hands; hands you can trust attached to brains you can count on. But sometimes the hands are cunningly evil, leading you down a pretty path until, deep in the woods, in obscure corner conditions, they turn on you and do unspeakable, bad things to your sanity.

What you wind up with are edge conditions and misinterpretations that cause you to wonder how many people read standards.  “Hey, it’s got GET HTTP/1.1 and a bunch of lines with stuff . . . [sniffs the air] . . . looks good, let’s ship it!”  Not that the standards documents are all that clear sometimes.  But still.

 

I have a stored-up rant on RPC, but first I’m going to bathe the cat, just to get in the finishing mood.

 

Lego-based games I would play

Some Lego-based games I would definitely look forward to:

Lego Alien.  Ability to play Ripley, Hicks, Newt, Ash, and (of course) the Alien in its various stages of development.

Lego World of Warcraft.  Well, why not?  (Depending on your current video card, you’re almost playing this now anyway…).

However, I suspect that Lego 2001, A Space Oddysey and Lego Apocalypse Now would be unplayable.

 

Mx- standard-apology

Busy busy busy busy.  So: One line summaries today.

Comcast: When you call a customer and give a pitch about how neat it would be to get phone service over IP, please make sure the static and flanging on the line is minimal, or at least that the salesperson can be understood over all the interference.  Not impressed.

Our living room is being taken over by a spaceship, constructed out of Lego, books, blocks, crates and small trains.  I’m not sure where the spaceship is going; sometimes it’s Mars, sometimes the Moon, sometimes Mercury.  The cat and Mommy are occasionally press-ganged into being passengers.

Indy 4: I was pleasantly surprised.  (The first one was great, Temple of Doom sucked, #3 was okay, and I enjoyed this one more than the middle two).  I think I could tell the parts that Lucas was directly responsible for, and all I can say is that somebody needs to take him aside and tell him he’s blowing it.  The rest of the film makes up for the Lucas bits.

Programming: There’s C and assembly, there’s LISP/Perl/C#/Java, and then there’s HTML and everything else.  Well, maybe stick Smalltalk (and possibly Python) in the middle there.  I’m sure that the PL/1 soon-to-be-dinosaur die-hards of the 70s felt pretty much the same way about C.

The cat informs me that I have to feed the cat.

 

Power tech

I’d forgotten about this power outage in Auckland.  link.  (From comments on this article on repairing a high voltage power line in the LA area.  Link.  [via Hacker News]).

I can’t think of anything in the world of Software Engineering that comes close to the “boom, bang, flash” stuff you need in the Real World to, say, blow out an arc in a 230KV circuit breaker.  The machines in a server farm just keep humming, even when they’re being slashdotted or something; maybe the lights on the router go solid, but that’s about it.

There’s this classic story about a little Vax in a shop where it didn’t belong, but still no flash-booms…

Remembering Toys

I am still procrastinating on that Disneyland wrap-up. (I tweaked my back a bit on one of the rides. One of the nice things about having a real office is that you can close the door and lie down for a few minutes — not that you can’t if you just have a cubical, but it reduces the amount of ribald commentary of passers-by).

On construction and “educational” toys (mostly in age-of-use order):

Lincoln Logs: Meh. They don’t stick together; you can’t do much engineering. And the roofing structures were terrible.

Wooden Blocks: Surprising lasting power. Useful with Lego.

Tinker-Toys: Better than L-Logs, and fun for making airy things that could go quite high off the floor, but ultimately not up to any kind of durable widget-making.

Thing-Maker: Plastic “goop” which you poured into molds and baked for a while in the provided oven. You could make bugs (pretty decent ones) and inferior army men. There was glow-in-the-dark goop available, which was pretty neat.

Erector sets: Pretty decent; taught me a lot about bolts and stuff. I never had any of the electric stuff (motors, etc.), so most of my constructions were pretty static. My set rusted pretty easily.

Lego: Oh, don’t get me started. My sister has a ton of this, and is ready to air-drop it on us when we decide our son is ready. Read that, when we decide that we can deal with thousands of small parts spread throughout the house.

Etch-a-Sketch: Frustrating. I was never able to reliably remember the twist directions for up/down and left/right, and most of my pictures had little “mistake tails”. Really, really wanted to be able to correct mistakes.

Spyrograph: Fun for a while, until you figure out what’s going on. As Doug Crockford said once, “Never twice the same, never once very much different.”

Loom: We had a small loom that was great fun up until the point where you had to re-thread it, whereupon my gumption usually ran out.  Took several hours to set up again.  We made yards and yards of six-inch-wide cloth, mostly decorative.
Rock tumbler: Plastic barrel that you dumped stones and various sizes of grit into; the barrel went onto a motor-powered rack that tumbled the stones for days and weeks. We still have some of the stones we made, they were quite pretty.

Estes rockets: I built a bunch of these (probably starting when I was ten). I understand there are lots of communities where you can’t fly model rockets any more. What a shame.

Microscope: My Dad’s old microscope from his college days, which he let us use from time to time.

Chemistry Set: You can still get decent sets (see United Nuclear’s site, for instance).  I made a lot of additions of my own here, some of which were probably not that wise.
Black and white photography: Did a bunch of this, first with Dad’s help, then on my own, buying film, paper and chemicals in bulk. Fun, and worth knowing how to do.  I miss 120mm film.
Electronics: Years of soldering, bread-boarding and freeing the smoke from small, expensive (to me) components.

Computers: Where everything pretty much stopped. 🙂

It’s amusing that my last “toy” (built in High School) is very nearly one of our son’s first toys.

A little more wisdom

“XML is like violence: if it doesn’t solve your problem, you’re not using enough of it. ;-)”
(from a discussion of the misuse of XML — is there any other use of XML than abject obfuscation?
from http://www.codinghorror.com/blog/archives/001114.html )

“If we can’t fix it, we won’t!”
(sign on a repair shop in Disneyland’s Toon Town)

“Of course my code doesn’t have comments.”
(someone who I couldn’t tell if they were serious or not.  I think they were.  I haven’t looked at the code yet).

 

Dad’s Office, and random stuff

I have fond memories of visiting my dad’s office when I was ten or eleven years old. He was a scientist, doing ecological studies for NASA and various universities, and “Going to the lab” with him on Saturday mornings was often the highlight of my week. I’d get to see wonderful, mysterious equipment and play a little with the calculators and other machines that were safe for a seven or eight year old kid.

– a bottle of mercury, a half pint bottle so heavy I could barely hold it

– a research reactor (yes, a nuclear reactor) that I got to see the insides of. Well, not the core, but inside the containment, and you could see the Cherenkov radiation around used the fuel rods in the cooling pond; it’s pretty cool, a beautiful blue glow, and spooky.

– a vacuum chamber large enough to hold a house, used for testing satellites and Apollo components. It had a simply massive door which was accidentally closed during visitor’s day, and trapped a bunch of people for nearly an hour. Fortunately nobody turned on the pumps.

– going out looking for bird nests to count eggs in the fields surrounding the lab, as part of one of Dad’s projects

– a calculator with nixie tubes that played long strings of blinkin’ thinkin’ when i made it do square roots. Very cool, probably what started my interest in computers

– thousands of small fish in a tank (for some research project or another). I stuck my hand in, they nibbled at it and it tickled

– the big gas cylinders that Dad told me to be very careful around (“If one falls over, it can take off through the wall like a rocket.” They do).

Later, long after the computer bug had bit me, another piece of “cool lab fallout” was the HP-65 calculator that Dad occasionally brought home. I spent many hours in the evening mucking around with the thing, trying to figure out how to program it.

My own office today is boring; I took my son to it a few months ago, and he noticed that I had the same giant moon poster on my wall that he has in his bedroom. Otherwise there’s nothing really very cool: No heavy machinery, no chemicals or bottles to worry about, no hot soldering irons or knobs not to touch. But practically speaking, even in the video game industry, writing software is a pretty boring exercise, especially if you’re a very young kid and you think that Thomas the Tank Engine is neat.

He’s discovered Lego recently, and has been making spaceship after spaceship (“This is a fast spaceship that shoots dinosaurs!”). I’m pleasantly surprised that he likes Lego; it was certainly my favorite toy growing up (that, and the Erector sets, which apparently are still made).

We’re on vacation, and I’ll have a report on Disneyland and what his favorite ride was when we get back.

Ship-it Blues

[ not related to my current job, which is a lot of fun, but I know people who’ve been here… 🙂 ] 

Our IT’s got a hard-on for some God-damned new firewall
They’ve got us all on lockdown and we can’t run anything, at all
Mention “Linux” in the hallway and the cameras turn and stare
I’m using Notepad for an IDE, and I’ve forgotten how to care

Marketing’s been cooking up a batch of clueless lies
HR’s hiring bean counters and other folks with ties
We know layoffs are looming, we’ve all read it in the news
We’ve got the huge-ass software corporation ship-it crapfest blues

With a
  “Heave!”
and a
  “Ho!”
and a
  “Who broke the build?”
Ship this thing, or we’re gonna be killed
Don’t bother bitching ’bout the buggy junk we make you use
We’ve got the huge-ass software corporation ship-it crapfest blues

Joe’s been writing COBOL for four decades and some more
He took some Java training and then read ‘Gang of Four’
Now everything’s a Singleton, a Command or Factory
He calls his COBOL “Java” now. Man, I rather write in C.

Gorpal’s fresh from college, his job is making bugs
Sue’s job is to find ’em. Gorpal? He just shrugs
“You’re just Q/A,” he says, and checks in more syntactical abuse
We’ve got the huge-ass software corporation ship-it crapfest blues

With a
  “*Grunt*”
and a
  “*Push*”
and a
  [wipes sweat from brow]
It’s more of the same, but in web pages now.
Oh, we know a shitstorm’s coming, ’cause we’ve got it on our shoes
We’ve got the huge-ass software corporation ship-it crapfest blues