Reviving the 1973 Unix text to voice translator
The early Research Edition Unix versions featured a program that would turn a stream of ASCII text into utterances that could be played by a voice synthesizer. The source code of this program was lost for years. Here's the story of how I brought it back to life.
Continue reading "Reviving the 1973 Unix text to voice translator"
Raspberry Pi 400 vs ZX Spectrum
The release of the Raspberry Pi 400 personal computer reminded me of a wildly popular home computer that was launched in a similar computer-in-a-keyboard format almost 40 years ago: the Sinclair Research ZX Spectrum. I decided to compare the two, following the steps of an earlier comparison I performed between the 2015 Rapsberry Pi Zero and the 1957 Elliott 405.
Continue reading "Raspberry Pi 400 vs ZX Spectrum"
Error handling under Unix and Windows
One thing that struck me when I first encountered the 4.3BSD Unix system call documentation in the 1980s, was that each call was followed by an exhaustive list of the errors associated with it. Ten years later, when I was going through the Windows API, I was disappointed to see that very few functions documented their error conditions. This is a big deal.
Continue reading "Error handling under Unix and Windows"
The titanic battle between big iron and microprocessors
I'm a child of a microprocessor age. I learned to program on computers powered by a variety of microprocessors starting with the 4-bit SC43177/SC43178 pair powering a Sharp PC-1211, continuing with the 8-bit Zilog Z80 on the TRS-80, the Zenith Z-89, and the Sinclair ZX81 computers, and graduating to 16-bit processors: the Texas Instruments TMS9900 powering its manufacturer's TI-99/4A home computer and finally Intel's 8088 on an IBM Portable (16kg) Personal Computer. At the university I encountered an IBM System/370 4331/2 mainframe, which I regarded with outer contempt. It seemed to me like a dinosaur: slow and unwieldy, lacking interactivity, color, and graphics. I couldn't fathom why businesses were using such monsters. I now understand that I was watching an amazing race between the sprightly but woefully simplistic microprocessors and the powerful but slow-moving mainframes.
Continue reading "The titanic battle between big iron and microprocessors"
What explains the counter-intuitive numbering of chip pins?
One of the first things one learns in electronics is how chip pins are numbered. In the common dual in-line package (DIP) pin numbering starts from the left side of a notch appearing on the top of the package and continues counterclockwise until it reaches the other side of the notch. Why are pins counter-intuitively numbered in a rotating fashion rather than by columns as one would expect for a rectangular package? And why is the numbering not following the direction of a clock's numbers? I think that both decisions can be traced back to history.
Continue reading "What explains the counter-intuitive numbering of chip pins?"
Debugging had to be discovered!
I start my Communications of the ACM article titled Modern debugging techniques: The art of finding a needle in a haystack (accessible from this page without a paywall) with the following remarkable quote. "As soon as we started programming, [...] we found to our surprise that it wasn't as easy to get programs right as we had thought it would be. [...] Debugging had to be discovered. I can remember the exact instant [...] when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs." A Google search for this phrase returns close to 3000 results, but most of them are cryptically attributed as "Maurice Wilkes, discovers debugging, 1949". For a scholarly article I knew I had to do better than that.
Continue reading "Debugging had to be discovered!"
Reviving the 1973 Unix Programmer's Manual
The 1973 Fourth Edition of the Unix Programmer's Manual doesn't seem to be available online in typeset form. This is how I managed to recreate it from its source code.
Continue reading "Reviving the 1973 Unix Programmer's Manual"
The Origins of Malloc
The 1973 Fourth Edition Unix kernel source code contains two routines, malloc and mfree, that manage the dynamic allocation and release of main memory blocks for in-memory processes and of continuous disk swap area blocks for swapped-out processes. Their implementation and history can teach us many things regarding modern computing.
Continue reading "The Origins of Malloc"
The 1980s Research Unix Editions Are Now Available for Study
In 2002 Caldera International licensed the source code distribution of several historic Unix editions. This included all Research Unix editions up to the Seventh Edition, but excluded the 1980s 8th, 9th, and 10th Edition. This was unfortunate, because these editions pioneered or implemented several features that were very advanced at the time, such as streams inter-process communication, graphics terminals and the associated Sam text editor, network filesystems, and graphics typesetting tools.
Continue reading "The 1980s Research Unix Editions Are Now Available for Study"
Measures of Donald Trump's Inaugural Address
Computers allow us to measure objectively the properties of text. I applied some established text and sentiment analysis algorithms on Donald Trump's inaugural address and compared the results with the same metrics of past well-known presidents. Presidential speeches are nowadays typically a team effort. Nevertheless, I thought that the speech writing team's output reflects the president's choices regarding staffing, policy, and style. Moreover, as luck would have it, in this case it was reported that Donald Trump wrote the inaugural address himself. The findings of this exercise surprised me.
Continue reading "Measures of Donald Trump's Inaugural Address"
Raspberry Pi Zero vs Elliott 405
Raspberry Pi Zero
juxtaposed in front of the Norwich City Council Treasurer's Department building,
where the delivery of the Elliott 405 computer was photographed in 1957.
Here is how the two computers compare.
Continue reading "Raspberry Pi Zero vs Elliott 405"
The Birth of Standard Error
Earlier today Stephen Johnson, in a mailing list run by the
The Unix Heritage Society,
described the birth of the standard error concept:
the idea that a program's error output is sent on a channel
different from that of its normal output.
Over the past forty years, all major operating systems and language libraries
have embraced this concept.
Continue reading "The Birth of Standard Error"