36 comments

[ 2.7 ms ] story [ 86.6 ms ] thread
Back in the days when bytes only had six bits...
You were lucky to have bytes! We used to shift and mask.
Luxury. We just had one bit and we could only turn it on and off.

And it was a timesharing system, so you had to share that one bit with 13 other programmers.

When I started out, we had to move the electrons by hand!
Oh we used to dream of having electrons! We used to have rotten fish dumped on us every morning and we'd use the presence of a head to indicate a true bit. Where do you think "running headless" comes from?
(comment deleted)
Troff is still used (mostly for man pages, I think), and VT100 escape codes are still common, and I don't know what is meant by UNIX being "only for system stuff".
Maybe he meant unix v7? I'm sure a lot of stuff still runs on it, somewhere...
> UNIX being "only for system stuff"

At first I thought he meant server-side, but OS/X is as Unix as Linux is or even Solaris was.

macOS (neé OS X) is actually more Unix than Linux, as it is certified.
That certainly says more about the certification process than about unix-ness of macOS ;)

On the other hand large fraction of UNIX(TM) certified OSes are in fact niche Linux distributions (IIRC mostly RHEL derivates).

In all it is mostly about nobody giving a damn about the certification outside of very specialized applications.

Writing new code in IBM assembly could be made faster by simply reshuffling an old deck!
When I was a highschool kid we use as perforated card system (you punched them out with a paper clip). We were charged for usage by the card 1c each (1c was a lot more back in the 70s). We used to share and recycle cards "anyone got a 'goto 10'?"
I did my Fortran in high school on punched cards, because the small timesharing system we had (a Cromemco Z80-based S-100 bus machine with a handful of terminals) had a habit of crashing and eating files - but it couldn't eat cards. We had a couple of surplus IBM 029 card punches, and they were a blast to use - they had nice crisp keyboards, and when you pressed a key the machine punched the corresponding holes with what felt like a major league bat hitting a major league fastball pitch - it was a really hard thwhack. Very satisfying.

I remember being astonished when my dad told me how they handled punch card accuracy at his office: engineers would write out their programs on (special) paper forms (i.e. a box for each character on each line), and hand the forms off to the computer department, where they'd have two different keypunch operators key in the program. Then they'd feed the two stacks of cards into a special punched-card-comparator machine, which would tell whether the decks matched. If so, it was considered successfully transcribed (and one of the decks could be thrown away).

I also remember reading a story long ago about decks of cards containing scientific programs being sent by rail between cities in two different countries in Europe (IIRC), and they kept having problems with the programs not working. Finally, they sent a courier along with the box of cards at one point. And, as the train crossed the border, the customs inspector boarded the train and checked passports and such, and inspected goods that were being transported, and, as is customary, took a sample from many of the transported goods (as one might take a bit of grain, say)... and, yeah, they took a couple random cards out of the box. Problem identified, if not immediately solved.

Holy crap! Did they manage to fix it eventually?
Brings back memories. I wrote a MIXAL assembler/simulator to run on an IBM 11/30 (actually, a clone - the General Automation 18/30), back in the mid 70s. About 7000 lines of 11/30 assembly, all on punched cards. And yes, I used the trick of running a marker across the stack of cards, diagonally, so it was really obvious when something was out of place. Don't remember if I put sequence numbers in columns 73-80, though the computer lab did have an ancient card sorting machine I used a few times.

I was really lucky back then - I was a high school sophomore who was given free rein of the local college's small computer lab. I got really good at keying in the IPL (initial program load) sequence on the front-panel keys, triggering a read of the IPL card from the card reader, which then would boot off the Winchester drive.

I got to show my daughter an IBM 029 card punch at the Seattle Living Computers Museum a few years ago. Don't think she was too impressed :-)

I've just realized that the old BASIC system of numbering every line is probably an artifact of putting a sequence number on each punchcard.
Punching a sequence number in columns 73-80 was not practical. Even if you allowed increments of 10 or 100, there always arose a situation where you had to insert more cards between two existing cards, than there was room. Ex: insert eleven statements between card 1230 and 1240.

Plus, you would have to manually enter the sequence numbers of the new cards, waaaay over in column 73, which was really slow and tedious on a card punch. Especially when you were in a rush because you were granted a brief slice of time on the computer, which was not capable of multiprogramming.

You could always duplicate the deck and re-sequence from scratch, but that was done on a machine that did not print (interpret) the characters at the top, making it impossible to read and manually maintain the deck.

The solution was: just don't drop the cards. I wrote and maintained a 4,000-card assembler program on a Univac 9300 in the 70's, and I never dropped my cards. The program was stored in two 16" metal trays.

Dropping a deck was the threat. The preventative measure was to take a magic marker and draw a line across the top of the deck on a slant - nearly a diagonal. Then if you dropped the deck you could at least use the line to get the cards roughly back in order; then your memory took it from there.
I never used computer cards, although I did write an implementation of Knuth's MIX, and an assembler for it, but I wrote it in 2017 for running on PC DOS. Nevertheless, I did include an option in the assembler to punch a zero in the first column of each card other than the first and last cards. You can then line up and use a hook to easily find the first and last card, and it is easy to see which is which; other than the first and last card, the others can be in arbitrary order and it will still work. (These are the cards of the compiled deck, which does not use the same format described in TAOCP, but it should still be compatible with all MIX computers which use the loading mechanism described in TAOCP; my own implementation uses a single card bootstrap rather than two card bootstrap.) (Note that all of this describes the compiled deck, and not the source deck. There is no source deck in this modern implementation.)

(I have also tried to figure out how to make it work if all cards including the first and last card are shuffled (in order for this to work, it would require bootstrap code on every card, and it would probably need to know ahead of time how many cards there are), although I have been unable to do so; maybe it is not possible.)

One of the saddest things I saw in college was a poor fellow walking along with a box filled with punch cards. It was a windy, blustery day. He stumbled, dropped the box and cards flew free in every direction. I will never forget the oaths and screams of terror as he ran after them...
I saw that once too, I was holding on to a tree in a gale, the woman's thesis data blew over campus building.

A classmate lost the box containing her thesis project off of her motorbike on a rainy day, she gathered up the cards, took them home, ironed them and ran them through the card sorter (by sequence number) and then punched out a new set

Why didn't people occasionally photo the cards out on a table or floor? Seems so irresponsible to allow fate to control a graduate degree.
That's a lot of film, you'd need a really really really big floor, and it'd be easier to make a duplicate set at that point.

Also, as someone who spent a decade in grad school (short for my field, actually), I assure you that graduate degrees are still very much up to fate. Different ways now, but same effect!

Seriously. Still now you hear about grad students forced to redo years of research all over again because their lab lost power for a few hours and whatnot. Could the underpaid grad student have lobbied for a backup power generator? Perhaps, but Fate can be cruel.
Cameras were far more expensive back in the day. Not just the camera or the lenses, but also the film, and then you'd also have to pay to get the film developed. Fast photo processing was only just taking off (late 70's). Taking a good photo was hard and an entire discipline unto itself. You had to develop an eye to know what F-stop and aperture and other settings to use, and then wait a day before seeing if the picture even came out.

It wouldn't have been a quick "lemme lay the photos out real quick" setup. You'd probably end up moving all of the lights in the house into the living room just to get enough light for the shot, and then play around with camera settings for half-an-hour before taking the first shot.

Such a disaster was a rare, but unfortunately it happened. A heavy black marker diagonally down the side made it a lot easier to reassemble the cards in the right order.
What about having a hole in a corner that you could run a string or wire through? Was there a spot to position a hole that wouldn't interfere with the card reader? Heck, if possible I would do a 3 ring binder. Or rubber bands at a minimum.
Depending on the data format, it might be possible. For example, punch "I" in the first or last column of each card if the first or last column of the card is not used by the program. Unfortunately, I don't know much about the data formats of punched cards, as I have never used them (except in an emulation of Knuth's MIX system).
Yes, this was common practice, especially after your first drop without such markings.
I had the run of a college computer lab. Always magic. Once groups for permissions came out they put the kids into the "brats" group for permissions - which was a fair reflection of the admins view of letting kids on the machines.

My high school was smarter. After I "hacked" the computers there - they put me in charge of maintaining them - I'd get called out of class to run around campus fixing computer things up. I didn't realize it at the time, but that was a forward thinking administrative office.

I missed punch cards by one year. The punchcard reader was still in the terminal room when I started working at the University of Illinois at Chicago computer lab. I did get to do a lot of JCL debugging. And we had to use a limited plain TeX at first because our ASCII-IBM bridge that let us use inexpensive terminals instead of dedicated IBM terminals had reserved ~ for signalling escape sequences plus the state of the art for the Xerox laser printer allowed only predefined sets of fonts to appear in a print job.
When I took my first programming course in high school, we had a PDP-11/34 and several terminals in the classroom. But for our first assignments, we used mark-sense cards (in the usual IBM form factor). There was a dedicated column for the statement keyword (chosen by a single mark).

After a couple of such assignments, they turned us loose on the terminals. Those who were quick/lucky got one of the few VT100s or the DECwriter III, but any terminal was better than the mark-sense cards. I think that was a weeding-out exercise.

> The big danger with card decks was that you’d drop the deck and the cards would get out of order

At my first job, my boss told me the story of a colleague who was taking a box of cards out to the car. You had to drive your program to The Computer, of course, because this was back when there was a The Computer. It was out by the airport.

They took one step out the door, and just at that moment a foot of snow decided to let go and slide off the roof. Oof.

/SYSIN DD*

Clearly this author worked on one of the gigantic, luxurious MVS boxes. I, on the other hand, toiled away relentlessly on a small VSE Box. He had it easy!

This story also highlights the enduring strength of IBM's 360/370 architecture. It is still in widespread use today. The correct syntax is:

//SYSIN DD *

A data definition statement indicating the next line in the program is the start of the input program to be processed.