Monthly Archives: August 2012

Aggressive Assembly Language Programming in SPITBOL

The Preface to “Macro SPITBOL: The High-Performance SNOBOL4 Language,” by Mark B. Emmer and Edward K. Quillen, includes the following:

Robert Dewar created Macro SPITBOL in the mid 1970’s, and showed the world that a high-performance version of SNOBOL4 was possible. His Macro SPITBOL compiler forms the kernel of this implementation. As an example of “aggressive” assembly-language-programming, it remains a programs tour de force.

I was reminded of this when I came upon a comment by Mark in the source for Macro SPITBOL:

note: as an experiment, we tried aligning all ent and prc’s on a dword boundary, in an attempt to minimize instruction stall time on the first opcode of a procedure. the resultant exe file waslarger by 592 bytes, and actually ran 0.1% slower. we will continue to use odd alignment of block entry routines so that the .cepp conditional may be used.

592 bytes? 0.1% difference in performance?

Can you think of another programmer who pays this level of attention to performance?

Here is another:

* move chars from xl (esi) to xr (edi), count in wa (ecx)
* the following sequence "old method" is shorter than the "new method"
* shown below, but is much slower because of the conditional jumps that
* cause the instruction cache to be flushed for 3 out of 4 count values.
* old method:
* shr ecx,1
* jnc tmp1
* movsb ; move odd byte
* tmp1 shr ecx,1
* jnc tmp2
* movsw ; move odd word
* tmp2 rep movsd ; move string as double words
* genop('shr','ecx','1')
* genop('jnc','short ' (t1 = genlab()))
* genop('movsb')
* genopl(t1 label.delim,'shr','ecx','1')
* genop('jnc','short ' (t1 = genlab()))
* genop('movsw')
* genopl(t1 label.delim,'rep','movsd') :(opdone)
* new method:
* shrd eax,ecx,1 ; preserve ecx[0] in eax[31]
* shr ecx,2 ; preserve ecx[1] in cy, divide by 4
* rep movsd ; move dwords, leaves ecx=0
* adc ecx,ecx ; copy cy to ecx[0]
* rep movsw ; copy 1 or 0 words, leaves ecx=0
* shld ecx,eax,1 ; copy eax[31] to ecx[0]
* rep movsb ; copy 1 or 0 bytes


Some knowledge — indeed more than I have — of programming for Intel’s x86 architecture is needed to fully appreciate the above, but the attention to detail is obvious.

Dewar’s MACRO SPITBOL was preceded by SPITBOL/360, written in IBM360 Assembly Language in the late 1960’s by Dewar and Ken Belcher. [1]

It must be the most efficient 360 assembly language program ever written. Robert once remarked that it was the only program known to him where the authors kept a copy of the instruction timing/cycle details for each model of the 360 in front of them as they wrote the code, and they frequently consulted these details to decide on best code sequence.

SPITBOL/360 demonstrated an astounding level of performance. SPITBOL/360 routinely compiled hundreds of thousands of lines of source code per second.

I once heard, perhaps from Robert himself, of one of the great tricks in SPITBOL/360.

SNOBOL has an integer variable &STLIMIT. A counter is initially set to this value. Whenever a new statement is executed, the counter is decremented, and if the value reaches zero then an exception is raised. This is used to avoid runaway loops and other code that would result in execution going on forever.

The obvious method is to use an integer counter, decrement it when a new statement is executed, and raise the exception when the value zero is reached.

Dewar and Belcher’s device was to maintain the counter as a floating-point (real) variable. It was set by computing a “magic” value and initializing the counter to that value. When a new statement was executed, the value 1.0 was added to the floating point counter. The magic was in that a floating-point exception, due to overflow of the value, would be raised at the appropriate time.

Andy Koenig — a fellow contributor to Macro SPITBOL — made mention of this device in his column Some Programs Are Poorly Designed On Purpose. The post includes several other examples from SPITBOL of what Andy calls “nefarious purposes” in the use of floating point arithmetic.

Another device, one of much greater generality, was the use of indirect threaded code (ITC), described in Dewar’s paper Indirect Threaded Code.

Most interpreters use a “switch on opcode” statement when a new statement is to be execute. However, this involves testing the value, and doing a switch instruction to the appropriate code, which tends to slow things down. Indeed this is one of the main costs of writing an interpreter instead of generating actual code for the target machine. After all, the hardware is designed to extract opcodes and take the appropriate execution as fast as it is possible.

When using ITC, the transition from one abstract instruction to the next is made not by a switch, but by doing an “indirect branch” to the address contained in the the code block for the next statement.

By the way, this is the reason you cannot write code in C to execute the Minimal assembly language level code in which SPITBOL is written. C has no such contruct (what is needed is something like goto *p).

By the way, Dewar is equally aggressive when it comes to documenting his code. See for example the source code for SPITBOL in file spitbol.min available at Github Hardbol SPITBOL. I consider it a tour de force in program documentation.

For example, while working together on the port of Macro SPITBOL to the IBM PC in the early 80’s, I remember particularly an instance where Dewar saved a file, and then immediately went back to edit the source when he noticed there was an extraneous space..


1. SPITBOL/360 is available in open source form under the GPL license. See SPITBOL 360.

Dewar and Belcher applied their aggressive programing techniques in the early 80’s by writing a COBOL compiler in COBOL! The wikipedia entry for Robert Dewar includes:

In the 1970s Dewar was a principal author of the Realia COBOL compiler, widely used in commercial environments to this day (marketed by Computer Associates).

Written in COBOL, a remarkable feat in itself, I learned later from colleagues at IBM that Realia COBOL generated code that was better than that produced by IBM’s product COBOL compiler

How to access, read, write, or mount a USB flash drive in Ubuntu Linux

My most viewed blog post is about how to access a flash drive on Ubuntu Linux. Written five years ago, it is my most-viewed post ever. For example, it now accounts for over a third of my views each day. [1]

This suggests that lots of folks are still having problems using flash drives on Ubuntu, and possibly other Linux distributions as well

The post is a bit dated. A lot has changed in the last five years, so here’s an update on how I currently access flash drives on my Ubuntu 12.04 desktop.

When you first put a flash drive into the computer all you will see is the light on the flash drive come on, if it has one.

If you do

$ ls /media

you won’t see any sign of the drive.

So what you do next is to open File Manager. It’s right there near the top of the main menu. It should show the flash drive. All the drives I have come with a built-in id, and File Manager will display it near the top of its page. Look for text that begins with /media/.

For example, I just plugged in a drive while writing this. It has the id 054A-FDA0.

Leave File Manager running, while you access the drive

If you again do

$ ls /media

you should see the drive. For example, I just did and found the file /media/054A-FDA0.

You can now do things like

$ cp /media/054A-FDA0/work.tar .

and so on.

It is good form to close the drive when you are done using it. This is not really needed if you are just reading the drive, but is important if you have written data to it. You want to know all the data has been written.

There are two ways to do what in Linux is called “unmounting” the flash drive.

One is

umount /media/054A-FDA0

Note the command is “umount” and not “unmount”. This is one case where Unix terseness, in this case saving a single letter, did more harm than good.

Another is to go back to File Manager, find the symbol for the drive in the left column, and right click your mouse on it. You will get a list of options, one of which is Eject Removable Medium. Then pick that, and remove the drive

Either will work. You make the call.

By the way, whenever you are typing a command that includes the flash drive id, as soon as you have typed the first letter or so, you should hit the Tab key. The shell will then complete the rest of the name for you.

(This is true whenever you are entering a file name. It’s one of the very nice features of Linux: thoughtful people have worked hard to make your work easier.)


1 The second most-viewed post is A Brief History of Operating Systems, based on a couple of days of writing done while I was at IBM. Steve Mills, then and now head of IBM’s Software Group, felt that his salesmen didn’t know enough about this topic, and asked that someone put something together. The request landed on my desk, and not having anyone else I could kick it down the road to, I had to do it myself. [2]

2. One of the sagest observations I have ever heard came from Ralph Griswold, in a conversation almost forty years ago:

I wish I had done it myself. In the long run I always do.

Linux: The Last OS Standing

One of my favorite films is Akira Kurosawa’s Yojimbo. It stars Toshiru Mifune, who plays a lone samurai who comes into a town where two factions are feuding, and then skillfully plays one against another until he is the last man standing, so it’s no surprise that the film was (poorly) remade as Last Man Standing, starring Bruce Willis, in one of his worst films (all gore, no subtlety, which was the point of Yojimbo.)

I was reminded of this while doing a cleanup/refactoring of the code for Macro SPITBOL.

There has been almost no work on SPITBOL, save the port to Linux, in the last decade. Most of the code has been stable since the mid 80’s, save for ports to different architectures.

SPITBOL has a run-time interface written in C. While perusing this code I noticed the code had conditional text for various operating systems: AIX, BSD, LINUX, SOLARIS, and WINNT. Not Windows, but WINNT, a sign of the age of the code.

I then decided to clean up the code. There was no need for SOLARIS. It’s dead, though its new owner Oracle has not yet addmitted it.

AIX is also an outlier OS now, used only in large servers, so that went next.

BSD, UNIX and LINUX are all variants of UNIX.

That left WINNT. I then realized that, while much of the WINNT code would probably still work, I had absolutely no intereset in supporting it. That’s because Microsoft has not made any meaningful innovation, at least when it comes to Windows, in the last decade or so.

One thing (is it the only thing?) Microsoft does well is to support previous versions of its various OS’s, going all the way back to DOS. For example, the Windows/WINNT version of SPITBOL, last touched over a decade ago, still works, and so is in my view sufficient for Windows users.

I thus edited the source so there is *no* conditional text to distinguish operating systems, because there is only *one* OS of interest. It runs everywhere, and is where operating system innovation can still be found.

So I deleted *all* the conditional text, and changed the source to just use “Unix” instead of “Linux” in the version/achitecture description.

Needless to say doing that edit was a lot of fun. Bye bye, SOLARIS. Bye, bye AIX. Bye, bye Windows. Just Unix is enough for me.

The remaining issue is what hardware to support.

I see only two architectures of interest: X86 and ARM. SPITBOL supports X86 now, and I will port the system to ARM within a few months.

This is one result of working on legacy code. It gives you a sense of what was once important, but no longer is.

It also gives you greater appreciation for the survivors, and all the hard work behind them.

I’m now an authority on operating systems

Since I resumed blogging after a three-year absence, I’ve noted with some surprise that my most read post each and every day has been A Brief History of Operating Systems, written several years ago.

A quick vist to Google and a search on “history of operating systems” showed I am #3, almost *the* go-to guy in the world when it comes to the history of operating systems.

WordPress’s statistics suggest that most viewers of this post come from the Far East, notably India and the Phillipines. I expect I’ve been cited in many papers from students on the far side of the world who are taking a course on operating systems. I’m not quite sure what to make of this, though I do think that my use of the word “brief” in the title suggested an easy way out to students who use Google as their primary reference source.

This is yet another example of my being one of the Google’s most cited sources on “authoritative opinions,” as described in my 2007 post An Authoritative Opinion on Libraries and Authoritative Opinions.

The point made then is still true today: One can indeed game Google, sometimes in very surprising ways.

It doesn’t mean a damn, but is sure as hell is lots of fun, at least to me.

I wonder if I can finagle a world tour with a lecture series on operating systems based on a request to provide some guidance to IBM sales folks that I spent a couple of days putting together.

Maybe I should write about bringing Peace to the Mideast, or — even better — offer my services to interested parties on my authoritative opinion on who is best qualified to be our next President…

Where have all the Twitterers gone?

(A few minutes after posting the note below, I came across a recent, related post on the same subject by Tim Bray: Blogodammerung. Tim’s post begins by linking to Jon Udell’s post that was, I think it fair to say, inspired by my post on decline of blogging.)

In my recent post Where have all the bloggers gone?, I commented that –after a self-imposed three-year sabbatical from the web, in which I didn’t blog, tweet, or login in Facebook — there seemed to be far fewer active bloggers.

That post was inspired by watching a few days of traffic on Sam Ruby’s, which aggregates the blog posts of several hundred folks, most of them expert programmers or influential technical folks. (I don’t mean to imply that I am either, just to note that one would expect these folks to blog more than most.) I noted that if I made a post, often only a few others would write a post before I wrote my next one, and I am not an active blogger.

I’ve noted a similar phenomenon on Twitter. I usually log in once or twice a day to see the recent tweets of the folks I follow, and I’ve noted that there are about twenty to thirty a day.

This may explain why often you find Twitter users who are following hundreds, or even thousands, of their fellow twitterers. You would expect they would be overwhelmed by the volume of twits coming their way, though my guess is that you can follow as many people as you want because most of them rarely, if ever twit.

For example, I currently follow 40 folks, and have a 130 followers. I recently added several well-known open-source folks to my Follow list. I dropped them all after a week since none of them had tweeted.

Put in mathematical terms, for those familiar with measure theory, Twitter is “almost everywhere” or “almost by everyone,” empty of content. Put another way, “almost all twitter users never tweet.”

And those that do seem to follow the Pareto Principle: 2o percent of the people you follow will account for 80 per cent (or more) of all the tweets. (By the way, kudos to Wikipedia, as I was able to find “Pareto Principle” just by searching on “80/20.”) In my case, much of my tweet volume comes from the nice folks at Redmonk, from which I get useful technical insights, as well as a day-to-day chronicle of the ups and downs of Steve O’Grady and the Boston Red Sox. When the Sox are up, so is Steve, as is the case when they lose.

All these observations are consistent with something I noticed at IBM several years back. IBM was actively encouraging employees to maintain internal blogs, to help share information, learn about fellow employees, and so forth.

When I first tried it, IBM was using some Java-based blogging platform that was so bad that to use it was to launch a denial-of-service attack on the IBM internal network. I tried again later, after IBM moved to a new platform, and after writing a few posts I noticed that most people had written very few posts.

Soon thereafter I noted a proud announcement from the IBM blogging team that almost a quarter of employees were “High Impact” bloggers. Since this contradicted my own observations, I investigated further, and learned that, to IBM, A high impact blogger was someone who had blogged more than twice! This meant that three out of four IBM bloggers wrote only one or two blog posts, ever.

And we all know that people under the age of 25 or so rarely use email, much preferring texting.

The net of all this is that almost all current writing is done in segments of 140 characters or less. There’s room for a couple of sentences, but no more than a paragraph.

Looking back almost a century, once wonders what Strunk and White would have made of the results of their dictum, “Omit Needless Words.”

I doubt they anticipated it would be taken to the extreme we have almost reached: Almost All Emit No Words.

Meld: Outstandanding visual difference program

I’m in the midst of converting Spitbol to use the nasm assembler instead of the gnu gas assembler. As part of that I need to compare various versions of the assembly language files, and I so I went off to the web to find a visual difference program, by which I mean a program with the same — or better — functionality of the standard diff file comparator, but with graphical output.

I soon came across Meld.

I’ve been using it for a few days, and I have found it *very* helpful. I already found one conditional assembly statement that I had unintentionally altered. I doubt I would have found this using standard diff, or at best it would have taken me much longer to track it down.

Meld is in the Debian package list, and so can be found in most Linux distributions.

On Programming: Putting your own initials in your code

Are you a programmer. I know I am.

I’m currently working on Macro SPITBOL, a project I last worked on almost thirty years ago.

Today I decided to clean up some initialization code, to make it more compact, so I visited the SPITBOL tokenizer (tokens.spt), a file that I hadn’t looked at recently since it worked.

I noted at the start that it contained the comment:

it is based on earlier translators written by david shields, steve duff and robert goldberg.

I knew I had written some of the code, but wasn’t sure just which parts.

Then, while editing the file, I came across the label DSOUT. When I looked a little more, I found another: DSGEN.

That’s when I knew that I really had written some of this code, for I had intentionally left my fingerprints on it by fitting my initials into some of the names.

I then recalled other times I had made use of my initials when making up the names for some new code.

Making names is the part of the programming task that I bet non-programmers have never heard about.

Folks know that we programmers spend hours and hours in front of a screen typing. Some of them have even seen snippets of TV dramas or movies in which a nerdy-looking person is typing mysterious characters.

They know we are “writing code,” but only we folks who code know that one of the hardest parts of coding is coming up with names.

Each program defines its own universe — a world that you made up — and part of that universe is that everything important must be named: every procedure, every field, every argument, every local variable, every macro, every class, and so on.

A good naming convention is thus quite helpful. Indeed, many is the time that I’ve been stuck putting something new together because I didn’t have a scheme for generating the names, since you want names for related things to have similar forms. It makes the code more readable.

Eventually something comes together, and once you have your naming strategy down pat, the code may — on happy occasion — seem to write itself.

All of this is a roundabout way of wondering if other programmers express their craft by crafting their names into their code, or their employer’s code.

Are you a programmer? Have you done this? If so, please post a comment.

In my current role as a blogger, not a programmer, I assure you that your names will be kept anonymous…

PS: After posting this, I recalled a related incident from the Jikes days. We knew the code was going out in early December, so early in November I suggested to Philippe that we avoid making any major changes, so that we could concentrate on cleaning up the code, especially by making the names more uniform. The code by then was well over two years old, and we had put it together on the fly, as we learned the Java language and how to compile it. Also, we had recently revised much of the compiler to deal with an obscure feature called “inner classes.”

Where have all the bloggers gone?

As you can tell by the picture at the masthead at the head of this blog, I’m getting along in years. For further proof, suffice it to say that the title of this post was inspired by a Kingston Trio song I first heard over fifty years ago: Where Have All the Flowers Gone?.

By the way, just saying the words “Kingston Trio” brings back a flood of memories from my sophomore year in high school. Such youth! Such angst!

(These opening paragraphs were inspired in part by a vow to my sister Mary Ann tomake my blog more accessible. Mary Ann said she has just started reading my blog. She said she found it hard to read my blog since it seemed so technical. so I’m trying to make my blog more accessible to a wider audience, or at least one wide enough to include her.)

As I noted in a recent post, I took a “software sabbatical” from August 2009 to June 2012, by which I mean that I didn’t blog, tweet, link in, or show my face on Facebook for almost three years.

I am thus in the rare position of using all that technology that everyone else has been using for the past three years, but seeing it with fresh eyes.

One thing I can definitely say, or at least state in the form of a question:

Where have all the bloggers gone?

To prove my point, I suggest you visit Sam Ruby’s

(Mary Ann (and others), a “planet” is just an aggregation of blogs. The planet hoster makes up a list of blogs, then puts together a simple program so that, whenever a new blog post is made by *anyone* on the list of bloggers, then the blog post is copied to the planet. In brief, readers of the planet see *all* the blogs posts in the list of chosen blogs.)

Now that I’m back blogging, I have found that if I write a post in the morning, and then write another later in the day, or the next morning, then there are only a handful of blog posts from all the other members of the planet in between.

Sam kindly lists the planet members (webonauts?) at the top. Here is the current roster:

Adrian Sutton
Alex Russell
Alf Eaton
Allison Randal
Anant Jhingran
Andy Upgrove
Anil Dash
Anne van Kesteren
Antonio Cangiano
Apache Software Foundation
Aristotle Pagaltzis
Arnaud Le Hors
Ben Hyde
Ben Smedberg
Benjamin Carlyle
Bertrand Delacretaz
Bill Higgins
Bill Humphries
Bill de hÓra
Bob Geller
Bob Wyman
Bobby Woolf
Brad Fitzpatrick
Brad Neuberg
Brendan Eich
Brian Fitzpatrick
Brian Jones
Brian McCallister
Bruce Schneier
Bryan O'Sullivan
Bug Labs
Byrne Reese
Chad Fowler
Charles Oliver Nutter
Charles Stross
Chris Anderson
Chris Casciano
Chris Double
Chris J. Davis
Chris Oliver
Chris Wilson
Christopher Lenz
Ciaran Gultnieks
Clay Shirky
DB2 on Rails
Dalibor Topic
Damian Cugley
Damian Katz
Dan Connolly
Dan Diephouse
Dan Pritchett
Danny Angus
Dare Obasanjo
Davanum Srinivas
Dave Johnson
Dave Orchard
Dave Pawson
Dave Shields
Dave Thomas
Dave Walker
David Ascher
David Baron
David Heinemeier Hansson
David Isenberg
David Megginson
David N. Welton
David Recordon
David Siegel
David Terrell
David Weinberger
David Wood
DeWitt Clinton
Dick Hardt
Don Box
Don Park
Doug Schepers
Drew McLellan
Duncan Cragg
Edd Dumbill
Edge Rails
Edward O’Connor
Elias Torres
Eliot Kimber
Elliotte Rusty Harold
Eric Newcomer
Erik Dahlström
Evan Goer
Evan Henshaw-Plath
Florian Jensen
Frank Wierzbicki
Geir Magnusson Jr
Google Data APIs
Google Maps API
Google Reader
Google Wave
Gordon Weakliem
Graham Glass
Greg Stein
Gregor J. Rothfuss
Gunnar Peterson
Guy Kawasaki
Henri Sivonen
Henri Yandell
Henry Story
Hugh Winkler
Ian Bicking
Ian Skerrett
J Aaron Farr
J Paul Reed
Jacques Distler
James Clark
James Duncan Davidson
James E. Robinson, III
James Governor
James Holderness
James Snell
James Tauber
Jamis Buck
Jan Lehnardt
Jane McGonigal
Jason Kolb
Jay Young
Jean-Baptiste Clamence
Jeff Barr
Jeff Schiller
Jeff Waugh
Jeffrey Zeldman
Jim Hugunin
Jim Jagielski
Jim Winstead Jr.
Jim Zemlin
Joe Armstrong
Joe Cheng
Joe Gregorio
John Boyer
John Cowan
John Foliot
John Panzer
John Patrick
Joi Ito
Jon Ramvi
Jon Udell
Jonathan Schwartz
Jonaz Galvez
Joseph Walton
Jukka Zitting
Justin R. Erenkrantz
Kelvin Lawrence
Ken Coar
Kevin Gamble
Kevin Marks
Koranteng Ofosu-Amaah
Kyle Weems
Lachlan Hunt
Lauren Cooney
Lauren Wood
Leonard Richardson
Linus Torvalds
Lisa Dusseault
Manu Sporny
Marc Andreessen
Mark Baker
Mark Masterson
Mark Nottingham
Mark Pilgrim
Martin Atkins
Martin Fowler
Matt May
Michael Koziarski
Michael O’Connell
Michael Pate
Michal Wallace
Microsoft Team RSS
Mihai Parparita
Mike Champion
Mike Dierken
Mike Dillon
Mike Harsh
Mike Herrick
Mike Melanson
Mike Milinkovich
Mike Shaver
Mikel Lindsaar
Nelson Minar
Niall Kennedy
Nick Sieger
Noah Mendelsohn
Noirin Shirley
Norman Walsh
ODF Converter
Obie Fernandez
Omri Gazitt
O’Reilly Radar
Pat Helland
Patrick Mueller
Paul Downey
Paul Fremantle
Paul Hoffman
Paul Querna
Paul Sandoz
Pete Lacey
Phil Hagelberg
Phil Ringnalda
Phil Wilson
Philip Elmer-DeWitt
Piers Cawley
Pratik Naik
Rafe Colburn
Raleigh Web Tech
Ralph Johnson
Randall Munroe
Rich Bowen
Richard G Brown
Richard Ishida
Rick DeNatale
Rick Jelliffe
Riding Rails
Rob Burke
Rob Sayre
Robert Burrell Donkin
Robert S Sutor
Robert Yates
Ronald Servant
Roy Fielding
Russell Beattie
Ryan Daigle
Ryan Tomayko
Sacha Labourey
Sam Ramji
Sam Ruby
Sanjiva Weerawarana
Santiago Gala
Scott James Remnant
Scott Johnson
Shane Curcuru
Shelley Powers
Simon Fell
Simon Johnston
Simon Phipps
Simon Willison
Stefan Walli
Stefano Mazzocchi
Stephen Colebourne
Stephen O’Grady
Steve Jones
Steve Loughran
Steve Vinoski
Steve Yegge
Steven Faulkner
Steven Lees
Stormy Peters
Tantek Çelik
Ted Husted
Ted Leung
Tim Bray
Tim Sneath
Tim Strehle
Todd “Turbo” Watson
Tom Moertel
Ugo Cei
Wendy Seltzer
Werner Vogels
Wikipedia: Atom
Yaron Goland
Yehuda Katz
Zack Urlocker

(Before proceeding further, I suggest to Mary Ann the she should ask herself the following question:

If David is writing a blog post that lists all the members of Sam Ruby’s Planet, what happens when he publishes the blog post and it is picked up by Sam’s Planet?

Hint to Mary Ann: For a brief moment — and perhaps for the first time ever — Sam’s Planet will contain a post listing all the members. If only for a few seconds the list of members put up by Sam will appear alongside the list of members in your brother’s post.

This sort of self-referential event is the sort of thing programmers — and bloggers — spend lifetimes trying to achieve.

The same phenomenon can be found in Walker Percy’s novel, “The Moviegoer.” Binx Bolling, the protagonist, finds himself in a movie theater when he sees a shot of the same theater in the movie he is watching on the screen.

I read the book while still in high school — Such youth! Such angst! — before I first went to New York, so I can still remember the time I was in a theater in Times Square on 42nd between 7th and 8th, and saw on the screen a shot of a car driving on 42nd between 7th and 8th, including the billboard of the theater I was sitting in.

Some time you should ask me about recursion. That’s where the fun really starts …

Those of a technical persuasion, especially folks familiar with the open-source world, will note that the cast of hundreds includes many well known names, some of the real ‘heavy hitters,’ using the language that IBM marketing folks like to use.

Though I don’t what these heavy hitters are hitting, the one thing I can state with absolute certainty — assuming Sam is no slouch, and he isn’t — is that *none* of these folks are blogging on a regular basis.

For example, if the last day I have put out more blog posts than the Apache Foundation. The Apache Foundation has its own blog, representing the views of scores of Apache contributors, yet it only posts every two weeks or so.

(Mary Ann: “Apache” does not mean what you think it means. It stands for “a patchy server,” the kind of self-referential language programmers exult in, as noted above.)

We can each venture where they might have gone, as it’s hard to say for sure. I guess most folks would think of Facebook, Twitter, or some other social network.

Then again, if they lost their day job, they can always start blogging.

So if you see a bloger, give them a shake of the hand, a pat on the back, and thank them for their service on behalf of a lost art.

That art would be writing, or least writing more then 140 characters at a time.

  • Pages

  • August 2012
    M T W T F S S
  • RSS The Wayward Word Press

  • Recent Comments

    daveshields on SPITBOL for OSX is now av…
    Russ Urquhart on SPITBOL for OSX is now av…
    Sahana’s Respo… on A brief history of Sahana by S…
    Sahana’s Respo… on A brief history of Sahana by S…
    James Murray on On being the maintainer, sole…
  • Archives

  • Blog Stats

  • Top Posts

  • Top Rated

  • Recent Posts

  • Archives

  • Top Rated