Sunday, November 20, 2016

The Ranger Station

This isn't really a history posting.  It was written solely to satisfy the terms of an ill-advised contract.  However, since it is a piece about something (a dream) that happened to me in the past, even though it was only one day ago, I suppose that technically it does qualify.

I dreamt I was visiting a large wilderness area.  I was at the a ranger station, and in conversation with the park employees, it came up that I was a cyclist.  They invited me to go behind the station, where a park service employee was moonlighting as a bicycle repairman.

What roads there were didn't seem worth cycling on, and I hadn't noticed any biking trails.  So I was surprised that it would be worth it to have a bicycle repair service out there.  I decided to check it out.

I went out back, and there he was.  The bike guy was done fixing bikes for the day, and was now on his laptop.  The ancient machine was hooked up to a huge car battery and inverter.  A cable connected the laptop to his mobile phone, apparently for Internet access.  I was surprised there was mobile phone reception here in the middle of nowhere, but I was glad for him.

As I approached, I saw that the part-time bicycle repairman was visiting a website which facilitated business between students and ghostwriters who did their homework assignments for a fee.  I could see that he had just finished uploading a term paper, and was selling it for $20.  It was a paper he had written when he was in school, and he'd gotten a good grade on it.  Now he was recycling it for some cash.

(How I could see this from a distance as I approached, particularly in the sunshine outdoors, I don't know.  Apparently my vision is better in dreams.)

My thoughts were:
  • It's terrible that he's helping students cheat.
  • Only $20 for a term paper?  What's up with that?

I was kind of disgusted, and turned away without speaking to him.  (Let the record show that I was more repulsed by the cheating than by the low wages paid to the writers.)

As I stepped back into the ranger station, a felt a twinge of pain in my leg, and winced.  "What's wrong?" my wife asked.  "Just a little pain in my leg.  I'm sure it will go away," I responded.

A park employee standing nearby stepped over and said "Excuse me, sir, I couldn't help overhearing that you hurt your leg.  I'm a physician; perhaps I can help."

"Oh, it's just a momentary thing. I'm sure it will pass quickly. But thanks for your concern."

"Do you mind if I take a look?  It'll only take a moment."

"Well, OK."

The guy quickly examined my leg as we stood inside the doorway to the ranger station.  I didn't exactly expect the ranger station to have a patient examining room, but this seemed oddly informal.  Plus, what he was doing looked more like a tailor measuring me for trousers than a physician performing an exam.  Still, he acted as if he knew what he was doing.

After a couple of minutes he said, "Sir, I'm afraid this is serious.  You're going to need an operation."

I was skeptical.  "I really appreciate your help.  I'll be sure to contact my primary care provider when I get back home."

"Sir, you don't understand.  You need an operation RIGHT NOW!  But I can have you on the station's operating table, prepped and ready, within half an hour."

"What??"

"Of course, we'll be sure to get an MRI to confirm my diagnosis before we operate.  But I'm certain I'm right."

"An MRI?  How can you get an MRI within half an hour?"

"By using our MRI machine."

"You have an MRI machine out here?"  And I thought to myself, if they have an MRI machine, then why does the bicycle guy need to use a car battery to power his laptop?  If they have an MRI machine, they must have some pretty serious electrical service.

"Yes, of course.  I'll just run along and alert the MRI technician to get ready, and then I'll start prepping the operating theater."  

He ran off before I realized that he hadn't given me any details about his diagnosis.

I was stunned.  But at least I had a few minutes to think things over.

My wife said she'd leave me in peace while I was pondering, and take the opportunity to get some exercise.  The surprisingly large station had a circular corridor along the circumference of the building, so she proceeded to run laps in the corridor.  (This was the only realistic part of the dream.)

As my wife approached on one of her laps, a very small girl - she couldn't have been more than 2 years old - materialized from nowhere and sprinted awkwardly across the corridor.  She smashed into Tammy's side, knocking them both to the floor.

Tammy got up immediately, and I knew she was OK.  But the little girl was lying on her back on the floor.  She was still for a second or two, and then said calmly, "I think my neck is broken".

I was horrified.  I was more inclined to believe the two-year-old's self-diagnosis than I was to believe the alleged physician's diagnosis of my leg.  But though the girl seemed to qualify as a medical prodigy by even knowing about the concept of a broken neck at her age, was she really in a position to accurately diagnose the situation?

Fortunately, before I could decide whether it would be wise to have the dubious doctor/tailor take a look at her, I woke up.

The End.


Fear not - the next posting will be a more traditional history article.

Thursday, October 20, 2016

Compiler Class

As a Computer Science major at Michigan State University, I took the required "compiler sequence" of classes: CPS 451, 452, and 453. In this course sequence, students wrote a compiler for a programming language.

The courses differed from compiler courses offered by most Computer Science departments today in that:
  • The sequence lasted an entire academic year. (MSU was on the quarter system at the time; under the semester system, this would have been two classes.)
  • Students worked in pairs to write their compilers. Thus it was the first experience for most students in working closely with another programmer on a large project.
  • The compiler was written from scratch - no lex and yacc. However, the instructor had written a utility that did some processing of the BNF grammar, thus providing some of the functionality of yacc.
  • The compiler was to be written in FORTRAN-66. The answer to the question "Is FORTRAN-66 an ideal language in which to write a compiler?" is "No."
I am impressed that students these days write a compiler by themselves in one semester, albeit with more sophisticated tools than we had.

Code generation routine - with source code control line IDs
The compiler sequence - which has since been paired down to a single course - was somewhat controversial in the department, as some thought that too many course hours were being spent on a skill that wasn't going to be relevant to many students. Others, like me, thought it was a wonderful opportunity to work on a large project, particularly since it also provided experience working on a team.

Students paired off by themselves. This was arguably an unfair situation, because you wanted a good "compiler partner", and students who had already developed a good reputation were more likely to be able to get a good compiler partner. Thus the rich got richer, etc.

Bobb

In my case, choosing a compiler partner was simple. "Bobb" and I had been hired by the Computer Laboratory (academic computer center) on the same day, and had desks right near each other. I knew Bobb as a decent and intelligent fellow, and he thought the same of me, so the choice was a no-brainer.

MRR 3 years later (sorry, no pics from that year)
Bobb was a Jerry Garcia look-alike, and my hair was getting pretty long by then, too, though I lacked the beard. I'm sure we made quite an impression, especially since we were a couple of those "damned Computer Center people".

At the time, there was an antipathy between the Computer Science Department, which taught courses and did research, and the Computer Laboratory, which ran the campus mainframe, including developing the operating system for the machine. Computer Lab people thought Computer Science people had their heads in the clouds, and Computer Science folks thought the Computer Labbers had their noses in the mud. Those who straddled the two worlds, like Bobb and me, tended to identify with our jobs at the Computer Lab.

MNF

CPS 45x had the usual lectures, tests, and homework, but the main point of the course was writing a working compiler. We were supposed to write the compiler in FORTRAN, the most popular language at Michigan State due to the scientific bent of our mainframe's vendor, Control Data Corporation. Both Bobb and I considered ourselves grizzled veterans of that programming languages (even though I was only 19 years old at the time), and FORTRAN no longer held much charm for either of us. We therefore asked permission to use a different language, to make the course more interesting. The obvious choice was Pascal. The first Pascal compiler was written for CDC mainframes, and we knew it was reliable because our colleagues Kevin and Martha had written a word processor using that compiler, and I was maintaining that word processor with no trouble.

Unfortunately, a compiler team in a previous year had tried to write their assignment in Pascal and had failed. They had blamed the Pascal compiler. No one in the CPS department had had any practical experience with the compiler, so the instructor was in the uncomfortable position of not knowing whether to believe the students. He didn't want to repeat the experience, so he denied our request. This was frustrating to Bobb and me, and also ironic, since the language we were implementing was a variation of Pascal. So, we decided we'd have a little fun and use a non-standard FORTRAN compiler.

Though nearly all of our mainframe's users used FTN, the vendor's standard optimizing FORTRAN compiler, the system actually had four FORTRAN compilers installed:

  • FTN, the currently-shipping optimizing compiler, with a few language enhancements.
  • RUN, the vendor's older FORTRAN compiler, long since fallen into disuse. The older compiler was kept around in case anyone was still using assembly language routines that used the older calling sequnce. Interestingly, the older compiler - though it lacked a modern optimizer - had a more efficient register-based parameter-passing convention.
  • RUNT, a very clever reimplementation of RUN by a team at University of Washington. RUNT was amazingly small and fast. However, it seems that I was the only one at our site who ever used it.
  • MNF, the University of Minnesota FORTRAN compiler. This compiler was designed for instructional use: quick compilation times, no optimization, and good compile-time diagnostics. It implemented a few language extensions, and was the new kid in town, having been installed on our system only recently.

We chose MNF because:

  • The quicker compile times would save us a little money. Each team was allocated a modest amount of computer dollars per academic term. These computer dollars translated to real dollars that the Computer Science Department had to pay the Computer Laboratory, likely part of the basis of the rancor between the two. Student were strongly urged to spend as few computer dollars as possible.  Bobb and I used a source code control system - very unusual for students - which helped deplete our dollar balance, making economy even more important.
  • The better diagnostics meant you had a shot at eliminating the syntax errors in your program in fewer compilations. This was important because for most classes, students had a limit of 3 "runs" per day. That's right: you could compile (and if the program compiled, run) your program a maximum of three times per day. Batch mode only, with punched cards, of course.  I'm not absolutely certain that this limit applied to CPS 45x, but with the slow turnaround time on our aging mainframe, it wouldn't have made too much of a difference if the limit had been higher.  At any rate, records show that at the end of the last course in the sequence, our joint account had accumulated 272 runs.
  • We thought we'd have fun with a new toy. Yes, playing with a new compiler was Bobb's and my idea of fun.

Midway through the year, Bobb and I had reason to regret our choice. Our parser just wasn't working right with a certain language construct. I desk-checked our code numerous times (you desk-check code a lot when you have only 3 runs / day), and just didn't see the error. Even though it seemed silly, I began to suspect a FORTRAN compiler error. I inserted a no-op line of code like:

      IF(.FALSE.) GO TO 100

into the offending basic block to nullify whatever code-generator cleverness was the culprit, and that fixed it!

We filed an MNF bug report with the University of Minnesota, but I can't recall what became of it. I'm pretty sure we never told our very good instructor Hal the wages of our sin of experimenting with a new compiler on a serious project.

Generated assembly code, with tuples as comments

R

One of the students in the class was the very intelligent R, who was also one of the most beautiful women I ever met. Compiler class was not the place I expected to meet such a woman.

After a few weeks, I started to flatter myself that R and I were the smartest kids in the class.  Meanwhile, many of us male students became envious of Dennis, R's compiler partner. Once, after I answered a question in class, Bobb razzed Dennis: "My compiler partner is smarter than yours." Dennis replied: "Maybe, but mine is better looking."

I was smitten. However, I could rarely think of anything to say to R, especially if it required stringing together more than two syllables. One day, though, my chance came to me unexpectedly. R actually approached me and, mistakenly believing I had already taken the CPS 42x sequence of classes, asked me to help her with a particularly tough logic circuit concept. Fighting to keep my blood pressure under control, I had to admit that I hadn't taken the classes yet - but I was willing to look at the problem anyway. If I recall correctly, R figured out the answer herself while explaining the question to me. So, I guess that counts as a win. But, alas, there were no more homework help sessions.

Peer code review was virtually unheard of in the CPS department at the time, but somehow there was a one-time code review session in the course, in which I got to see code R had written. It was unbelievably complex, the very embodiment of spaghetti code. I was unsure as to whether to be impressed that she could get code like that to work, or to be horrified at her violation of all civilized coding standards. Given my crush on her, I leaned toward the former.

Science Fair

That year, my father was the director of the Metropolitan Detroit Science and Engineering Fair. That in itself was a sign that dogs and cats were soon going to be living together, as my father was a construction guy, not a scientist. But he was recruited because he had a reputation for getting things done.

Dad had come into the science fair world based in my participation in science fairs in high school. My chemistry teacher, Leo J. Klostermann, was supposedly the leading high school science fair teacher in the country, and as a result, science fairs were a big deal at my school. (Note to high school students reading this: doing a science project on cryptography will win you all of the special military awards, even if your project isn't really as good as the other guys'.)

The top performers at a regional fair like Detroit's got to compete at the International Science and Engineering Fair in Denver. One of the many responsibilities of a science fair director was to arrange transportation of the top projects to Denver. Though my father was a mid-level manager at Ford Motor, and in fact worked in the shiny World Headquarters in Dearborn, MI, he was a construction project coordinator, and didn't work on the car side of the house. Perhaps for that reason, or perhaps because Ford didn't have any spare trucks, Dad was unable to scare up a sufficiently large vehicle for the task in-house.

Fortunately, my father found a guy at General Motors who had access to a one-of-a-kind prototype truck that had just been released from testing. This unnamed vehicle was about as large as a decent-sized delivery van. It was painted an ugly green, and due to its prototype status, parts of its interior were made of plywood. I will give them credit for at least painting the plywood.

My father needed drivers to get the truck from Detroit to Denver, and for that, he looked to me and my 16-year-old brother Tom. School was in session, so we didn't want to dally. The plan was for Tom and me to take turns driving. Using the back of the largest science fair project, we created a space in the cargo area behind the driver's seat big enough to hold a cot, for use by the son not driving. My loquacious 14-year-old brother Bill was sent along, possibly to help keep the driver awake. Or possibly my parents were trying to reenact the Sullivan brothers.

The truck had a blind spot.  Tom figured out a way of dealing with it:  he'd slow down, and then rapidly accelerate (to the extent possible in that truck) while looking out the side mirror.  Assuming there wasn't a vehicle behind us matching our acceleration, he'd be able to see whether there was anyone back there.

I didn't have a commercial driver's license, and of course neither did my 16-year-old brother. I'm not sure why this never came up. Fortunately, though, Tom and I had learned to drive a stick shift on my mother's famously kvetchy Mustang, so we were more than ready for the truck's transmission. That is, until we reached Colorado, when the truck started getting really tough to shift. We stopped and called my father, who told us about "double clutching". That allowed us to limp to Denver, where we took the truck to a repair shop. The mechanic's jaw dropped when he saw the one-of-a-kind vehicle. Fortunately, he was able to fix it.

As an incredible coincidence, one of the 12 science fair projects in the truck belonged to R's brother E. R and I lived quite some distance apart, but the Detroit fair covered a wide geographical area. Given R's very common last name, I'm not sure how I suspected that E was R's brother. But I confirmed it with R one day in class, in a gloriously multisyllabic conversation.

Somehow I got it into my head that becoming pals with E in Denver would help me get to know R. However, E was not a particularly pally guy (I probably wasn't either), and this idea came to nought.

Despite the two drivers, the trip to Denver took the better part of a week. Though Bobb was understanding about having to shoulder the burden himself during that period, I was concerned about not doing my part for the term project. Fortunately, there was a separate but related assignment that involved implementing a certain non-trivial algorithm in the language processed by our compiler. We had to not only code the algorithm correctly, but also compile and run it with our own compiler and show that it produced the correct results.

I coded the algorithm on the road and mailed the paper copy to Bobb. (This was before widespread access to email.) He received it before my return, but discovered that the program gave the wrong answer. It turned out that I had made a couple of errors in coding it and hadn't adequately desk-checked it; the compiler itself was correct. Bobb was able to fix the bugs, but the experience gave me a crumby feeling. Nowadays I'd say that the ordeal was due to violating the principle of testing only one thing at a time.

The Language

The language we implemented was a bastardized version of Pascal. When the course had originally been taught, the language was in fact a proper subset of Pascal. However, in subsequent years, to discourage cheating, the language had been tweaked so that each year it was significantly different than what it had been like in all previous years. (Years later, I worked with an MSU Computer Science instructor who pioneered automated checking of cheating on Computer Science assignments. I'm not sure that I like what this says about Michigan State U.)

By the time I took the class, the mutated language's syntax was bizarre and displeasing. This made it all the more amusing to hear, at the end of the course, that one of the students was planning to market his compiler commercially. Not only was the language awful, but our compilers all ran quite slowly compared with commercial compilers. The student was concerned about intellectual property rights, thinking that perhaps the University would feel it owned the compiler he wrote for class.  I guess he was ahead of his time in even considering this possibility.  But he defiantly told the instructor that he was going ahead anyway, and wasn't planning on sharing his profits with the University. The instructor smiled and said he didn't think there would be a problem.

Epilog

Bobb and I did well in the class.

R got married - to a guy in Colorado, I heard - shortly after the end of the last course in the sequence. Sigh.

I went on to use compiler technology in a couple of projects years later:
  • In 1996, I developed a PHP-like language for a mainframe web-enabling product, IntraGate.  I wrote its processor using flex and bison.  But there was no machine code generation; it just interpreted the generated tuples. 
  • In 2009, I developed a programmable task processor for a file transfer product named MOVEit Central.  The source language, which was meant to be generated by the GUI front-end, used XML syntax.  I accidentally wrote its parser while playing around with the Microsoft XML DOM API one night.
I still dream of writing a compiler for a real language, perhaps the surprisingly obscure CYBIL (19MB PDF), which I once thought was really cool.  

Sunday, August 7, 2016

The MNINE Weight Loss Program - Part 2

After working at Giffels Associates the summer after high school, I left for Michigan State University.

Even though I was primarily interested in computers, I chose Mathematics as my major.  My reasoning was simple:  in fifth grade, I had been given an assignment to write an autobiography, and in that autobiography, I had stated that I would attend college and major in Mathematics.  Since the autobiography had been handed in, I was committed.  No way was I going to make a liar out of my 10-year-old self.

My advisor was Charlie, who was also my Number Theory professor.  Charlie played in a bluegrass band at night, and sometimes showed up to class wearing sunglasses and looking a bit wobbly.  I hadn't pegged Charlie as a mischief-maker, but one day he gave the class an assignment that, unbeknownst to us, was an obscure unsolved problem.  The crowning achievement of my otherwise unremarkable collegiate mathematics career was recognizing that the problem was research-grade and far beyond my capabilities as a freshman, and hence refusing to waste much time on it.

My major in math didn't last long.  When, near the end of the term, I went to Charlie's office to discuss my courses for the next term, he quickly expressed his disapproval:  "What's with all these Computer Science classes?  I want you to strike them from the list and take Ancient Greek and Advanced German instead."  No way was I going to take Ancient Greek, so I sacrificed my fifth-grade reputation and switched my major to Computer Science, as I should have done in the first place.

My new advisor was the head of the Computer Science department, Harry.  (Harry was also my boss in a small but weird non-academic venture that I'll have to save for another day.)  Before long, Harry was saying "What's with all these Philosophy classes?"  But with Harry, I called his bluff, kept taking the Philosophy classes, and got away with it.

It was as a Computer Science major, then, that I had the following conversation at the campus Clinical Center:

Me:  Doc, I'm having problems sleeping at night.
Doc:  OK.  What are you doing for exercise?
Me (puzzled at the sudden change of topic):  Oh, I don't get any exercise.  I'm a Computer Science major.
Doc:  But everyone ought to get regular exercise.
Me:  Even Computer Science majors?
Doc:  Yes, even Computer Science majors!

I went on to say that I did play recreational volleyball with the my colleagues every once in awhile.  Doc said that volleyball was good exercise and I ought to keep it up.  But even I knew that standing on a volleyball court and watching someone else jog after a ball that was rolling away wasn't very good exercise.

So I cast around for a sport that involved intense exercise, didn't require a lot of equipment or scheduling, and could be done by someone like me with limited athletic aptitude.  It didn't take long for me to settle on running.

The first couple of years were painful, possibly because I ran so infrequently that there was little training effect.  Eventually, though, I got to the point where I was running 3 miles once every few weeks.  Thus prepared, I signed up for my first race, a 10K in East Lansing.

I had no illusions that I was going to win anything, especially since the distance was more than twice as far as I had ever run before.  However, I managed to stagger through the first 5 miles OK.  But as I heated up, I began to experience distress to the point where my field of vision began to narrow.  Eventually, my vision completely blacked out, so I was running in total darkness.  At this point, I wisely backed off on the pace.  Quickly a small tunnel opened up right in the middle of my normal field of vision.  If I slowed further, the field of vision opened up even more - but that was wasteful.  I found I could run pretty well with a very narrow field of vision, especially if I focused on the back of the runner in front of me.  So I kept up the fastest pace at which I could still see that person's T-shirt.

After crossing the finish line, I looked at the crowd of people who had already finished and compared it to the mass of people who were still on the course, and guesstimated that I had finished in the top third.  I was psyched that I had done so well in my first race, and resolved to do more.

Eventually I became a passable runner, and even met my eventual wife at a running club.

Over a decade later, I came across the published results from that race in a box in my basement.  It turned out that I had grossly overestimated my accomplishment, and furthermore had apparently willfully forgotten that I had received the damning race results.  So the basis of my encouragement had been a lie, or at least a mistake.  But by then there was no turning back.

There were ups and downs in my running career, of course.  For instance, in early Spring 2004, I injured myself and had to take off several months from running. Around this time, I also decided it would be a good idea to back off on my relatively strict no-dessert food regimen.

One day in late June, it was unseasonably cool, so I decided to wear some jeans instead of the usual loose-fitting summer cargo shorts. I went to the closet, grabbed my Levis 505s, and tried to pull them on. It was surprisingly difficult. Somehow they had managed to shrink in the time since I had last worn them. This was the same brand and model I had been wearing for years, and I'd never had this problem before. But I wrote it off as some weird clothing thing - after all, I rarely wore jeans in summer, so maybe there was some weather effect.

That fall, my employer, Standard Networks, held its usual Circle of Excellence dinner.  Unlike my boss at my previous employer, who had tried to invite only the truly excellent employees to her vacation home for a celebration, my current boss recognized that it was impractical to leave certain people out.  Hence everyone was designated as Excellent for the purpose of getting a free dinner.

At dinner, as I reached for a slice of pizza, the boss, R, said "You're not going to have a third slice of pizza, are you, Mark?  You're getting rather chubby, you know."

I puzzled over this typically vague statement from R, trying to tease out its meaning.  Eventually I shrugged, took the slice, and ate it.

That night, as I pondered the possible meaning of my boss's utterance, it occurred to me that it might be a good time to get on the scale.  This was something I hadn't done in quite a while, almost as if I had been avoiding it.

When I stepped on the scale - the same one I had used since childhood (my parents gave it to me when I got my own place) - I didn't like what I saw.

Was the scale broken?  The pants strangely sensitive to the time of year?  The Circle of Excellence comments truly unfathomable?  I knew enough about Occam's Razor to be able to conclude that I needed to lose weight.

It was tough going at first. Although truthfully the amount of weight to be lost wasn't huge, I began to develop some sympathy for others who struggled at losing weight.

One evening I indulged in my retrocomputing hobby by Googling some computers I had used, including the Univac 1108.  This quickly led me to http://www.fourmilab.ch/, a wide-ranging website run by John Walker, founder of Autodesk, Inc, and a user of Univac 1100 series machines back in the day.  Among the many fascinating sections of this site was the full text of Walker's book The Hacker's Diet, which he had once sold in paper form but was now giving away for free in electronic form.

Though the book itself seemed rather repetitive, the ideas were sound enough. Foremost among these were the concepts of metrics, retrospectives, and rapid iteration. That is to say, weigh yourself every day and if you're not losing weight, you're doing something wrong, so change it. As the book was written in 1991 - long before Kent Beck came on the scene - and John Walker is no shrinking violet, I'm surprised that Walker hasn't claimed to be the progenitor of agile development.

Sticking to Walker's principles, I managed to get back to my fighting weight.  And I owed my success to the Univac 1108.

Saturday, July 9, 2016

The MNINE Weight Loss Program - Part 1

The summer between high school and college, I worked as a programmer at Giffels Associates, an architectural and engineering firm in Detroit.

My nominal boss was "Nathan" (short for his middle name, Nathanchandra), but in practice I was supervised by an engineer named Stan, in whose office I had a table. Nearby was the office of Stan's colleague Chris - not Christopher - so named because he had been adopted on Christmas Day.

My responsibilities included writing a project time accounting system, and maintaining various engineering programs. Of course, I had no experience in either accounting or engineering. But somehow that didn't turn out to be a problem.

MNINE listing - obverse
Giffels had a refreshingly simple way of naming their programs. Each program's name was a single letter - the first letter of the department's name - followed by a number, which was incremented for each new program. Since I worked for the Mechanical Engineering department, our oldest program was named M1. However, for reasons unknown to me, the program names were typically rendered by spelling out the number in English. Thus, the engineering program I worked on most frequently - M9 - was rendered as MNINE. It's unclear what would have happened once the 11th program was written; the name MELEVEN would likely have exceeded the system's identifier length limit.

In years since, having had to cope with the busywork associated with periodic product renaming, I've had reason to long for the simplicity of the Giffels software naming convention.

Giffels had a couple of computers: an old IBM 1130 and a seemingly even more ancient Univac 9300. The IBM was a modest, mini-computer-like machine, slow but easy to use if you could get by with the very limited disk capacity. The Univac was rarely used, to the frustration of some higher-ups who felt it was going to waste.

I wrote the time accounting system on the IBM 1130. However, neither of these computers was worth much if you wanted to do engineering calculations. Thus, Giffels rented time on an elderly Univac 1108 located at Illinois Institute of Technology in Chicago and rented through Utility Network of America (UNA). This computer was old enough to have drum, rather than disk, storage. Unlike the 1130, its operating system, EXEC 8, was rather complex, and I never really learned more about it than what I needed to edit, build, and run the engineering programs.

I don't know why we had to resort to using a computer a couple of states away. But it worked for us. We had a remote batch system that was linked to IIT via a synchronous dial-up line. We submitted jobs from Detroit, they ran on the mainframe in Chicago, and the results were transmitted back to the office, where they were printed.

MNINE listing - reverse
For some crazy reason, the output was always printed on carbon copy forms, so there were two copies of each printout, plus the piece of carbon paper between the two copies. When I went off to college, I took with me numerous spare printouts of MNINE. This wasn't because I thought I would need to calculate the flow of fluids through building pipes. Rather, I used the backs of the printouts as scrap paper, or to make carbon copies of my philosophy papers. (Evidently I felt that my essays were so brilliant that the professors might not want to return them, leaving me with no way to publish them.) The carbon paper that came with the forms was pretty good quality, and could be reused several times before it wore out. I was living high on the hog!

Carbon-copy forms
One assignment I remember involved enhancing a program to calculate the width of pipe needed to handle a given flow of steam. (To this day, I have to resist the urge to pronounce that word as "stem", the way that Nathan, who spoke pretty good English, unaccountably pronounced it.) Surely MNINE must have had the ability to compute this sort of thing before I arrived, so perhaps this particular calculation was for a new type of pipe. At any rate, Stan showed me a book in which there was a graph of desired steam flow vs required pipe size. The curve looked well-behaved. So, using a ruler, I simply read a number of points from the graph, then fed them into a curve-fitting program. I tried all possible curve types, even though only a few were legitimate candidates. Then I programmed the winning formula (which fit the points quite closely) into the application.

On another occasion, engineers on a different floor discovered a bug in an application that had been written in ALGOL-60 by some wise guy who had moved to another department and was no longer available. Now, ALGOL-60 was a significant step forward in programming languages in its day, and a lot of ALGOL-60 compilers were written. But especially in the US, the language never really caught on, and very few engineers knew it. My colleagues held the puzzling attitude that computers were mere tools to accomplish some task, and had little interest in learning a new language just to fix someone else's bug. Thus, no one would touch that program. Stan lent me out to the team to see if I could help. Fortunately, the bug proved easy to spot, and did not require intimate knowledge of ALGOL oddities such as call-by-name. So I came off looking like a genius.

To get to that other floor, I walked up a couple of flights of stairs. (I'm not sure why I bothered with stairs in those pre-fitness days.) In the dimly-lit stairwell, I often encountered a couple of shady-looking guys, clutching dollar bills and muttering numbers to each other. Someone - maybe Stan - told me they were playing "Dollar Bill Poker". I never figured out just what dollar bill poker was, or how it could be a fair game. Running this gauntlet was rather intimidating to an 18-year-old. But I kept taking the stairs, and tried to ignore the shenanigans.

At one point during the summer, Stan and Chris were struggling with a difficult engineering problem. Eventually, in their desperation, they cooked up a brilliant scheme: they would concoct a bogus solution to the problem, write it up as an article, and submit it to some second-rate engineering journal. The solution would have to be plausible enough to make it past the hopefully low editorial standards of the journal. Then all they'd have to do is sit back and wait for the angry letters to the editor to roll in. Surely one of those letters would have a legitimate solution. Yes, there'd be a cost in terms of pride, but pride is overrated. Sadly, Stan and Chris never followed through.

Toward the end of my time at Giffels, the powers-that-be prevailed upon Stan to get me to convert some existing software to run on the disused Univac 9300. Unfortunately, the only compiler we had for the 9300 was for RPG, a disgusting language. I'm sorry to say that I did not tackle the job with much gusto, and no software conversion was completed before the summer ended and I left for Michigan State University.

It wasn't until decades later that my exposure to the Univac 1108 was to reap health benefits for me. But that is a story for another day.

Sunday, April 10, 2016

MG-Gate

DATELINE:  Detroit, back when there were still people in Detroit

Last month at work it was suggested that we code-name a nascent software product "MG", after the British sports car.  Coincidentally, I had just been conducting relevant research.  I'll present my findings here and you can decide whether they are sufficient to nix the idea.

 * * *

As a teenager, I lived in Livonia, MI and attended Detroit Catholic Central High School (CC), 12 miles away.  There was no school bus, and the Detroit city buses didn't go out to the suburbs.  (The Motor in Motor City referred to passenger cars, not public transportation.)  Thus, a few of us Livonia CC students banded together to form a carpool:  Nick (not his real name), myself, and sometimes Ray and Bryan - decreasingly frequently as they became more familiar with Nick's and my driving.

 * * *

While indulging in my newfound basement cleaning hobby recently, I came across a copy of the book Seventeenth Summer.  The book came from St. Maurice Grade School, where the aforementioned Four Musketeers had met.  I was reminded of the carpool when I spied the name of Ray's sister Maureen on the circulation card in the pocket inside the front cover.  She'd checked out the book a couple of times from the school library, and then somehow the book had ended up in my basement decades later.

I'd never even heard of the book Seventeenth Summer, so how did a copy of it materialize in my house?  Could it be that Maureen had tracked me down after all these years and stolen into my basement, to deposit the book in one of my boxes of old stuff?  Naw, that's ridiculous:  Maureen and I barely knew each other, and we didn't hang out, so there's no way she'd have gone to the trouble.  So it must have been Ray who had slipped into my basement to squirrel away the book.  But why?  Clearly to freak me out, but what could he hold against me after all these years?

 * * *

Of Nick, Ray, Bryan, and myself, only Nick and I had a car, so Nick and I shared the driving duties.  (Bryan's father, an architect who had designed St. Maurice's unusual octagonal school building, may have driven us a couple of times.)

I was driving an ancient, huge, and exceptionally ugly Ford Custom 500.  There was nothing custom about it, and nothing 500 about it.  However, the car was pretty reliable, and it held 4 high school students with no problem.

There was one oddity about the Custom 500:  its automatic transmission had two Drive settings.  One was normal drive, which started in first gear.  The other started in second gear, and was to be used only in slippery conditions, when you wanted to reduce torque to avoid spinning the wheels.  Unfortunately, early on, I mixed up the two, and for a year I proceeded to drive in the wrong gear.  Thus my driving was even more sedate than it otherwise would have been.  (When I finally figured out my mistake, that Custom 500 seemed to peel away from stop signs like a Pantera.  But I'll have to leave discussion of the Ford Pantera for another day.)

Though my wheels weren't cool, I was punctual, and the guys had little to complain about with me driving - at least when I had the Custom 500.

There's usually an exception that proves the rule, and the exception to the 500's reliability came during exam week at the end of a semester.  On the way to school, the driveshaft of my car fell off.  I stuck with my car to get it towed to a garage, while my buddies hitchhiked the rest of the way to school so they could take their exams.  (Kids, don't try this at home today, at least not if home is Detroit.)

My sticking with the car to make sure it got towed correctly, and then staying at the garage to supervise the repair, was not due to my concern for the car.  I didn't care much about cars one way or the other.  Frankly, the problem was my math exam.  I had let my 100% score in Math go to my head, and hadn't really studied for the final.  The likelihood that my perfect record would survive the Math final exam was extremely low.  I swear that I didn't stage the driveshaft incident - but it was very convenient.

To avoid the hassle of having to administer a makeup exam, my teacher afterwards made me a deal:  I wouldn't have to take the exam, but he'd give me an A, rather than an A+, in the class.  It was an offer I couldn't refuse.

Now, I didn't always drive the Custom 500.  Sometimes, for reasons I don't recall, my mother needed the car, possibly to ferry around my little brother Tom and his friends.  On those occasions, I'd have to drive her car.

My mother had a Ford Mustang.  A classic vintage year, and very clean-looking.  Its coolness factor was about 1000 times that of the Custom 500.  My friends were, at first, really juiced about the idea of riding to school in that car.

But I hated the Mustang.  It had a manual transmission, with a clutch that had a razor-thin friction point.  I was still shaky on my technical driving skills even with an automatic, and that clutch was really pushing it.  I stalled the car about 1 in 5 times when starting from a stop.  Left turns were the worst:  I'd often find myself stalled out in the middle of an intersection in rush hour in Detroit, with the light having changed and cars bearing down on me.  The stress factor was high, both for me and for my helpless passengers.  Bryan and Ray - members of the debate team - starting finding rides with other debate team members.

 * * *

Representative MG B - same color as Nick's
Nick's car was a MG B, a small British sports car.  Like my mother's Mustang, it was far from new, but in excellent cosmetic condition.  Unlike the Mustang, MG B styling hadn't changed, so the car looked new - which gave great delight to Nick.

Also unlike my mother's car - and no surprise to those knowledgeable about British sports cars - the MG B was not fully operational.  The speedometer didn't work, so Nick't couldn't directly see by how much he was exceeding the speed limit. However, the tachometer did work, and Nick had derived a formula for calculating his speed based on the number of RPMs (while in fourth gear).  So when patrol cars were in sight, Nick, normally an enthusiastic driver, could stick to the speed limit.  Nick also had a personal rule:  never pass a police car.  This led to a couple of bizarre occasions where Nick inched along behind a cop car when the officer had slowed down while looking for something.

Additionally, the windshield wipers didn't work.  So if it was raining or snowing hard enough, Nick would stick his head out the driver's side window to get a look at the road.  Sometimes the passenger would give Nick a break and stick his head out the passenger's window and tell Nick where to steer.  That wasn't very reliable, but it never prevented us from getting to school alive.

The MG B was a two-seat convertible with a jump seat.  You could fit a couple of sacks of groceries in the jump seat, or alternatively, a skinny high school student wedged in sideways.  We went with the latter.  To the best of my knowledge, we never tried to fit all four of us in that car.

One day, Nick had loaded some extra stuff in the jump seat - I think it was materials for decorating his car for the annual football parade - leaving insufficient space to cram a passenger in the back.  It was Bryan's turn to sit in the jump seat (or was it Ray?  Hmmm.), so he had to sit on the trunk of the convertible, with most of his body outside of the car, anchoring himself with his feet on what little space was left on the jump seat.  This was a notch or two less safe than riding in the open bed of a pickup truck, which itself is not too safe.  (In the Madison dog-owning community nowadays, this is considered unacceptable even for canines.)  I'm not sure what I would have done if it had been my turn.  I like to think that I would have found another way to get to school, but we'll never know.

We were halfway to school when a cop pulled us over.  Both Nick and Bryan (Ray?) got tickets.  Nick was smart enough to be polite, but inwardly he was seething.  After the policeman drove off, Nick let us know what he thought of the situation, and of the law enforcement community.

But then Nick found that the officer, taken in by the clean appearance of the MG, had assumed the car was the current model year and had written that on the ticket.  Nick was always trying to find a way to subvert the system (he had once taken a competitive math scholarship exam as a way of getting excused from History class), and this looked like an angle he could use.  (Unfortunately, Nick's angle didn't pan out, and he did have to pay the ticket.)

What's more, the cop had left his aviator sunglasses on Nick's dashboard.  Yes!  Suddenly the world didn't look so grim after all.

Bryan/Ray didn't say much.  He may have been starting to plan something.

 * * *

It was an icy winter morning.  Nick had the MG's top up and it was my turn to ride in the back.  "Say, Nick," asked the guy in the passenger seat.  (From Ray's evident hard feelings toward me now, this must have been Ray.)  "Don't you think you're going a bit fast for the conditions?"  "Nah, I know what I'm doing," replied Nick.

Suddenly I felt the world spinning crazily.  Hunkered down at the bottom of the jump seat, able to see nothing but the canvas roof, I could only guess as to what was happening.  BAM!  The car struck something and came to an abrupt halt.  Nick jumped out of the car to assess the damage.  Uninjured, I pulled myself up to look around.  Somehow, at rush hour in Detroit (back when there were people in Detroit), we had managed to spin across six lanes of traffic on Telegraph Road without hitting another vehicle.  The vehicle had slammed sideways into the curb, scraping the tires a little but causing no significant damage.

Ray was pissed.  "Aren't you going to ask how we are?" he demanded.  (Truthfully, it was pretty obvious that no one had been hurt.)  Perhaps he turned back and glared at me, wondering why I hadn't driven that day.

Satisfied that his precious vehicle was intact, Nick got back into the car and proceeded to school, perhaps a bit more cautiously.

 * * *

After high school, I went on to study Computer Science and develop software. Nick got a job as a reactor technician on a nuclear submarine.  After leaving the Navy, he landed a decent job as a nuclear reactor safety inspector - just the job that the other three of us had pegged him for.   Debaters Ray and Bryan became attorneys, the better to plot and fund any retaliation schemes they may come up with.  And until now they've been quiet - perhaps too quiet.

Tuesday, March 22, 2016

The Man Who Mistook His Cranberry Juice for a Magnetic Tape

DATELINE:  Undisclosed location in New Jersey, 1997.  

The late 1990's marked the end of the era at Standard Networks in which developers were sent into meatspace to install software, encountering actual customers in the flesh.  On this occasion, I ventured out to a concern in New Jersey whose business was either curing cancer, or dunning delinquent debtors - I won't say which.  I will mention seeing a call center where operators spoke to "customers" while entering notes into a mainframe application IN ALL UPPER CASE, even though both their terminals and the EBCDIC character set certainly supported lower case.

My job was to install our new web-enabling software alongside their copy of one of our more established TCP-to-mainframe products.  I was a bit nervous because the job also entailed upgrading the existing product, and I wasn't very familiar with that product.  Fortunately, Dale was available to lend his expertise.

The business had a very small IT department, headed by a fellow whom I'll call Ricky.  As I installed the software, I tried to explain what I was doing and what the software would do for him.  It soon became clear that Ricky wasn't very interested, and wasn't a very technical fellow - an awkward situation under the circumstances.  

As I recall, there were a couple of other people in the department.  One of them had nothing to do with the networking side and wasn't going to be involved in the installation, maintenance, or use of the software.  

The other, whom I'll call Sven, was really the one I needed to talk to. However, Sven had been bitten by a spider a few weeks previously, and was having a hard time getting over it.  At the time I was there, he was still showing up to work only a few hours a week.  I got Ricky to talk him into coming in on the last day I was there.  Sven was still pretty rattled by the time I talked to him, and I'm not sure how much of what I said sank in.  However, I was able to complete installation of the software and show him the toy application I wrote for them.

What Ricky lacked in technical acumen he made up for in hospitality.  He showed me around and advised me on the local attractions, to the extent there were any.  

While driving around, I pulled into a gas station, and was surprised to see that there were no self-serve pumps.  I could see no alternative but to let the attendant pump the gas for me, figuring this was some old ma-and-pa station that was stuck in the past.  I was astonished to hear Ricky tell me that no gas stations in New Jersey allowed customers to pump their own gas.  It sounded so backwards to me that I wasn't sure whether Ricky was pulling my leg.

When I got back home, I decided to send Ricky a token of my appreciation for his kindness.  I  shipped him some Wisconsin goodies, including a bottle of cranberry juice.  My wife, a cranberry researcher, took delight in the fact that Wisconsin had surpassed Massachusetts and New Jersey to become the top cranberry-producing state in the nation.  The cranberry juice, in addition to being a gift, was also a jibe at a rival state.  I hoped I wasn't being too hard on poor, third-place New Jersey.

I sent off the package.  Weeks went by, and nothing but crickets from New Jersey.  Was Ricky angry that I'd insulted the cranberry-producing abilities of his state?  Finally I called Ricky on some pretext, and casually asked him if he'd received a package from me.  He said yes, and apologized that he hadn't had a chance to install the software yet.

It turned out that Ricky had assumed that the box contained a magnetic tape with a software update.  He hadn't wanted to deal with it, so he set it aside.  Further discussion revealed that, to my surprise, he spent very little time thinking about cranberries and state rivalries.

The moral of the story is:  do not ascribe to cranberries that which can be adequately explained by magnetic tapes.

Customer Testimonial

DATELINE: Undisclosed location on the Atlantic seaboard, 1998: Before MOVEit, there was a product at Standard Networks named OpenIT, a mainframe connectivity product. I wrote its FTP server using asynchronous Microsoft networking APIs that were fashionable at the time.

The FTP server tested out on our Madison mini-mainframe, so I flew out to install it at a customer site - a large financial services company. We tested successfully on their dev system, so I installed the package on their production mainframe. Within 20 minutes, the FTP server locked up and had to be restarted. I scratched my head and looked through the code. The server locked up again. This was a huge site that processed a lot of traffic, and having to bounce the FTP server wasn't good. For reasons I don't recall, it didn't seem practical to revert to the software they had been using before. The head guy, "Bob," ran around, his face beet red with anger, shouting "JE*** CH****, I FEEL LIKE KILLING MYSELF!". I didn't think he was really going to kill himself, but I was concerned that he was going to have a heart attack. Another fellow actually brought a loaded gun into the office, though this was a coincidence, as he had little to do with this project. (This guy was just showing off his new gun, and his colleagues convinced him to put it back in his car.)

For some reason, around this time I started to get a headache. I walked around the office looking for a medical supplies kit. Finding none, I eventually asked a few people, including "Mike," whether they knew where I could find some aspirin. No one could help me. As I wandered around looking for more people to buttonhole, I passed Mike again. He said "Say, would Advil be good enough?" I said yes, Advil would be an adequate substitute for aspirin to treat my headache. I also made a note to speak more precisely in the future.

Eventually I figured out that I had misunderstood one of the arguments to a Microsoft function. After a one-line fix, the FTP server ran smoothly in production.

During my stay at the customer site, I mostly hung out with my main technical contact and his sidekick. During the day, I tried not to eavesdrop when he called his soon-to-be ex-wife and young children, explaining how daddy still loved them even though he wasn't going to be seeing them anymore. At dinner, the sidekick regaled us with unsavory and, to any right-thinking individual, unflattering details of his personal life. Even though he was technically astute, I don't think he realized what an extremely negative impression he was making on me.

In order to update the dev system, I had to be logged in to a company PC with an employee account. Of course, I didn't have an employee account, so my contact let me use his account. He warned me that after he left for the day, I would have to move the mouse every 10 minutes, or the screensaver would kick in, requiring his password. And of course he wasn't allowed to tell me the password. I got pretty good at walking over to his system to move the mouse, but one night I had to quit work "early" when I got engrossed on my laptop for too long and got locked out of his system.

On the last day, I gave a presentation on the new software I had installed. As I wrapped up, my laptop died. I found that even though I had plugged it in, it had been running on the battery, which had fully discharged. Unbeknownst to me, in that recently-remodelled conference room, the only power outlet that worked was the one powering the digital projector. My audience thought it was hilarious that I hadn't realized that I was running on the battery throughout the presentation. I left amidst great merriment. Always leave them laughing.

My boss had once remarked that financial services people were more interesting than one might expect. I never doubted him after that trip.

Wednesday, March 16, 2016

How a Dearth of Coonhounds Led to My Meeting Bill Joy

DATELINE: East Lansing, MI, ca. 1992. 

In the early 1990s, the Michigan State University Physical Plant oversaw a huge and in some ways sophisticated physical campus infrastructure.

In the 1980s, the Physical Plant had wired nearly all of the buildings on campus for cable TV, foreseeing that instructional video was the wave of the future. Instructional video may not have panned out quite as they had predicted, but more importantly, while installing the cabling the Physical Plant had strung additional dark cable, for future unspecified purposes. Soon enough, high speed local area networks became all the rage, and MSU was able to be on the forefront by attaching broadband Ethernet cable modems to the existing cabling. The modems turned out to be very finicky, requiring frequent tuning, and eventually we had to restring fiber optic. However, we enjoyed good service 98% of the time, when other campuses lacked an integrated high-speed campus-wide network.  

Another aspect of our first campus Ethernet network that wasn't great was the fact the entire 42,000-student campus was served by a single, unrouted network. Students using word processors in the public microcomputer labs sometimes suffered poor performance due to the PC's CPUs being interrupted frequently by the unsophisticated network adapters to handle ARP requests. Eventually we were forced to bite the bullet and install routers in place of the Ethernet bridges in each building, reducing campus-wide ARP flooding.

The Physical Plant was also an early adopter of CAD systems to manage blueprints of buildings and of the extensive outdoor plantings for which the Michigan State campus is well known. My plant scientist wife told me of a seed time capsule planted on campus in the 1800's by botanist W. J. Beal.  Only three living persons knew where it was, she said, and she wasn't one of them. She was taken aback when I told her that I knew where it was, as a result of working with my colleague Alan, who had consulted with the Physical Plant on a setting up and running their CAD system.

A less modern part of the campus infrastructure was the campus-wide network of steam tunnels. These became notorious when the campus newspaper published an article about a student's suicide attempt in a steam tunnel.  The poor fellow had been an avid player of the mysterious and likely subversive game Dungeons and Dragons.  The resulting media furor led me to become skeptical about the very existence of the steam tunnels.  (I was incurious about how campus buildings actually were heated - odd, given that prior to college I had worked at an architectural firm, writing code to calculate the size of steam pipes.)  Years later, a colleague at the Computer Center showed me how to access the steam tunnels, and I was suitably impressed at the size and extent of the tunnels.  They really do exist.

This brings us to the campus electrical service.  

MSU had its own power plant.  It had sufficient capacity, as I recall, but fell short in the reliability department.  There were frequent power outages on campus.  They were a particular pain to those of us who worked at Computer Laboratory, as after a power failure, the ancient mainframe computer had brought back online slowly and painstakingly.  

Inevitably, it seemed, power failures were blamed on a raccoon having wandered into the power plant and committing an act of self-immolation.  It baffled me as to how this could be allowed to go on year after year.  I pictured an angry confrontation with the Physical Plant director the day after a power failure:

Provost:  Tomlinson, there was yet another campus power outage yesterday.  This is outrageous!  I've half a mind to have your job over this!
Tomlinson:  But boss, it was a raccoon - there was nothing we could do!
Provost:  Oh my god, a raccoon?  They're a force of nature that no man could possibly stop!  Very well, then, carry on, Tomlinson, carry on.

Years later, I came to be the owner of a Bluetick Coonhound. With no training or encouragement, this dog would willingly chase away raccoons, and have fun doing it. All it cost was a $75 adoption fee, some dog food, and occasional broccoli stalks as a treat.  (Note to readers:  you may wish to rethink your dreams of being reincarnated as my dog.) Evidently the Physical Plant, advanced though it may have been, was unfamiliar with coonhound technology. Either that, or there was a chronic shortage of coonhounds at the time.  

                                       #   #   #

One summer day, BSD Unix guru Bill Joy was due to give a lecture on campus. I decided to attend not because he and I grew up in adjoining Detroit suburbs, but because Michigan State was an avid user of BSD-derived Unixes. Our hardware included not only Sun workstations and servers, but also NeXTs, a Convex minisuper, and even an exotic BBN Butterfly - all running BSD-derived OSes, or at least BSD userland.

Because of the anticipated popularity of his talk, Joy was scheduled to speak in B-108 Wells Hall, the largest classroom at Michigan State, and the scene of many a stultifying American Thought and Language lecture. Unfortunately, fate - most likely in the form of a 10 pound masked critter - intervened, and the campus lost power. Knowing what the huge windowless classroom would be like without air-conditioning, the authorities declared the presentation cancelled.

Joy let it be known that he was willing to hold forth outside Wells Hall if anyone was interested. Strangely, though hundreds were willing to listen to Bill in a stuffy lecture hall, few were willing to hang out with him in the light of day. (I guess they must have been true computer nerds - more power to them.) Thus it came to be that Bill Joy and I and a small handful of others spent part of the afternoon sitting on the grass under an oak tree outside Wells Hall, near the Red Cedar River. I don't recall what we discussed, though I think this was before Joy's Luddite phase. But I do remember thinking that this is what college was all about. And just one coonhound could have prevented it.  

Greetings!

Hello, folks.

This is the place where I hold forth on history-related topics.

The first one is coming soon...

Mark Riordan