I’m sorry I got you fired.
Well, nearly fired, anyway. It was pretty close. The road to unemployment is paved with good intentions. God knows I sure led you on. And when management found out, hoo boy.
One fine sunny afternoon in Silly Valley I was sitting in my cubical at work, happily noodling away at some C++, when someone in the hall tripped and fell down and rolled against the wall of my cubical. “I hope they’re okay,” I thought, and started to get up to see how they were.
Then whoever it was got up and fell down again, a little harder this time, and a small truck hit the building and my 21 inch monitor (known as a “Kong” in our group, and which incorporated at least 80 pounds of lead and probably a fair amount of neutronium ) started to rock back and forth on its not insubstantial base. I stood up (trust me, you don’t want one a Kong in your lap) just as another, larger truck hit the building, making the monitor rock even more and causing the light fixtures above the cube farm to swing. And my next thought was “Is this the Big One?” because it was clear we were about eight seconds into a definitely non-trivial earthquake, and if it kept escalating it wasn’t going to be one of the little “ha ha, something farted underground and now it’s over” kind of earthquakes we get all the time in Silly Valley and that barely make it to the second section of the newspaper, but instead a whopper that we would still be talking about years later, assuming we survived the next couple of minutes.
The shaking got worse over the the next couple of seconds. Time to panic.
So I did what everyone else did, exactly what safety experts tell you not to do, which was to run — no WALK — rapidly towards the building’s exit. As I left my cube, I saw my monitor rock over one final time and land on my chair, where my lap had just been (so: good call). I WALKED rapidly down the hallway. Left turn. Right turn. Down into the stairwell with a crowd of equally unwise people, all of us very definitely not panicking and not running. About that time the really big shaking started, and we all played Star Trek Bridge Attack Scene —
INT. BRIDGE - GENERIC 1960s STARSHIP BRIDGE CONSOLE GUY The enemy ship has launched photonic torpedoes, Captain! SOMEBODY ELSE Keep walking. Don't run! WALK, DAMMIT! EVERYONE ON THE BRIDGE LURCHES LEFT, THEN RIGHT, THEN LEFT AGAIN WHILE THE CAMERAMAN WAGGLES THE CAMERA AROUND (you all know the scene). PEOPLE HANG ONTO THINGS, WHICH FALL OVER. PEOPLE HANG ON TO OTHER PEOPLE AND FALL OVER. THE SHAKING CONTINUES AND THE LIGHTS GO OUT. SOMEBODY SCREAMS. WE WALKRUN PAST THE NOW DARK CAFETERIA, PAST THE WISELY DESERTED RECEPTION DESK, AND THROUGH WOBBLY DOUBLE GLASS DOORS INTO SUNLIGHT. CARS ARE HEAVING UP AND DOWN IN THE PARKING LOT AND IN THE DISTANCE WE COULD *SEE* THE WAVES IN THE GROUND RIPPLING TOWARD US. HERE COMES ANOTHER ONE. WHOOP! EXT. BUILDING - THIS IS JUST A HIGH-END SILLY VALLEY OFFICE BUILDING, MOSTLY GLASS ON THE OUTSIDE. THE ONLY REMARKABLE THING ABOUT IT IS THAT ALL OF THE GLASS IS WARPING AROUND CRAZILY, ALONG WITH MOST OF THE PARKING LOT. SOMEBODY ELSE AGAIN Keep walking! Get away from the building! Look out for glass! FRIEND Hey, who's the asshole who knocked over my motorcycle? CARS Beep. Beep. Beep . . .
After an unreasonable amount of time — it couldn’t have been less than a couple of weeks — the shaking finally stopped. We looked at each other, the unspoken question on everyone’s mind being “Is that all? Or was that just the warm-up for the Really Big One?” After milling around for a while we were told by some management we’d be contacted when it was okay to return to work, and that we should all go home now. A few people at a time were allowed back into the building to get car keys and other critical items.
I lived about a mile from work then, so I walked home and cleaned up a few tipped-over bookshelves. Power was out for six or seven hours, and helicopters from the Naval base a few miles away were quartering the valley like you’ve seen in a Vietnam War movie, with a great whapping of helicopter blades.
A week later we were told to return to work in another building, far away from Apple’s campus in Cupertino, way out in Mountain View. This building was near 101 and Moffet Field, and just under the approach path for the airfield. Several times a day Navy P-3 sub-hunting planes returning from a tour of keeping the west coast free from pesky nuclear submarines would start their approach, fly over our building and dump fuel on us. There were mornings when you could smell the napalm. (We called the Bay Area Air Quality Board, and while they would have gone rotweiller on any company or individual dumping fuel, these were military flights and the Navy could dump anything they pleased). Some wit posted a “No Smoking” sign on the door leading to the parking lot. No idea who, honest.
Apple was never a company willing to pass up a good earthquake as an excuse to do a re-org. Our division got a little political shaking of its own, and that’s how I landed two cubicals away from someone we shall call “Tim”, who worked on the MPW Shell user interface.
I need to describe the MPW Shell to you.
Imagine a Unix shell, circa 1985. You are probably staring at an 80×25 VT-100 terminal. At your fingertips are hundreds of tools, all with little fiddly options, all different, and a couple of editors (Emacs, vi, and yeah, /bin/ed), and that’s about it.
Now imagine you’re a developer at Apple, and you want a Unix shell and a bunch of Unix-like tools, but you hate the miserable 80×25-and-no-mouse jail, so you decide to do your own thing. It starts out well, with a mouse-driven text editor. You hang a command interpreter on it and tell your users that Enter just inserts a newline, while Command-Enter submits a line or selection as a command, and after a while they get used to it. Integrated editor plus shell, pretty neat, actually.
Then things go off the rails.
Nearly every major tool got its MPW-ified version. Regular expressions used the Mac’s extended character set (so “wavy squiggle” for ‘*’, a fat-looking bullet splat for ‘^’, and a cute little infinity sign for ‘$’). Makefiles used funky characters instead of “:”. Every tool got a template-driven front end with checkboxes and lists of options.
So MPW is all bespoke stuff written by people who say they hate Unix, but who secretly just want to re-write all that fun things for a new environment.
One day I’m noodling around porting Emacs to the Mac. Again. Every six months or so I get fed up with the MPW’s Hell lack of key bindings and crack open the Emacs sources. Maybe I can do it this time. And after a few hours I back away slowly, then rm -rf (sorry, DeleteFile -recurse yupperoo) and feel sorry for my lack of gumption. It doesn’t help that Richard Stallman hates Apple, and personally hates my very own specific ass. Anyway, I’m in the middle of seeing if Emacs has improved or my ability to hold my nose and just Go For It and fork the damned thing has, when I find Tim looking over my shoulder. He has probably heard my teeth grinding.
“trying to port emacs,” I whisper. One of the group’s management heavies is not far away, and he definitely doesn’t understand real editors.
“emacs? what’s that?” Tim whispers back.
“it’s an editor that doesn’t suck.”
“what’s wrong with MPW?”
Oh boy. I telnet to a handy Vax (yes, Apple has Vaxen) and give Tim a whirlwind tour: The simpler commands, followed by composition with universal arguments and keyboard macros. Key bindings for various modes (“see? tab and return do the indentation here…”). MPW had a bunch of stuff better than Emacs — a full GUI and multiple windows and so forth — but MPW’s key handling was pretty quaint. And modes? Ha.
Tim was visibly awed, despite the 80×25 constrained interaction.
“wow, that would be pretty neat. how do those keyboard macros things work again?”
I showed him. And I sealed his fate.
Tim came returned a few times for more discussion, and I showed him more of what the Emacs folks had come up with over the years. His own implementation gave it an MPW-spin and made things a lot more friendly, and powerful. It was pretty neat. Users were going to love it.
And then he showed his little side project to his manager, who freaked out and told him NEVER to even CONSIDER putting the feature into the shipping product.
About three months later Tim knocked on the side of my cubie and said, “I think they’re going to fire me.”
“I checked all that stuff in, and it went out in the last release and they just discovered that it’s in there.”
“You checked it in? After Fred told you ‘no way’?”
“I sort of snuck it in. They’re pretty lax, and it was already in there for the demo. I just left it enabled and didn’t say anything and it . . . sort of escaped. To users.”
“The problem is, the users *love* it. The discussion groups are full of great comments. Fred is pissed.”
Tim had mentioned me as a source of influence, so I had a parade of managers file through my cubie for the next day or so. The managers didn’t get it. The programmers who had to use MPW every day loved it. The support folks were reporting that developers loved the feature, and that they were hoping that the feature was a sign of continued and fresh life in a product that they loved to complain about.
Tim wasn’t fired. I think the mgt had some meetings and did their usual “We have to pee in this feature, MPW-style” design work, but even after the poltical torque had been applied, the keyboard binding stuff remained usable and people still loved it.
I wound up leaving the group about six months later. I lost track of what MPW was doing after that, and I’ve utterly lost track of Tim, too.
I know this is a shitty way to build features that customers want, but the opposite way is shitty, too. Ain’t no easy answers.