Tag Archives: programming

a salute to the anti-wizards

Steve JobsSteve Jobs died yesterday. Many people owe him a lot, but I probably owe him more than most. I belong to the transitional generation that didn’t grow up with desktop computers; my first experience with computers came just out of college, with a large typesetting system (I wrote a bit about it here). This kind of system was based around a mainframe computer with a bunch of satellite terminals where the writers input their copy and the editors messed it about and the typesetters formatted it and sent it to be output on a special kind of photographic paper stock. No one but elite technicians ever got to meddle with the ‘master’ computer itself, and the terminals where people like me worked were referred to variously as ‘dumb’ or ‘slave’ terminals, a nice example of the way jargons embed the world view of their creators.

In other words, this system was merely the latest in a long line of calculating and computing machines that had been designed primarily from what one might call the wizard’s viewpoint. By this I mean any system that is intended to remain opaque to—and therefore inaccessible to—all but a small cadre of super-skilled workers. The underlying mindset is one that values knowledge as a form of power and thus hoards rather than shares it to the extent possible. This attitude extends far beyond the technological fields—it was as characteristic of the medieval Catholic church’s efforts to block the literacy of the populace as it was of the medieval guilds’ corralling of trade skills such as metalworking or dyemaking.

As long as there are human beings of differing interests and abilities and the will to use that difference to hold power, the knowledge gap will never entirely disappear. It merely moves around within the culture, and with it the wizards who feel themselves called to maintain and even widen it. One could argue, for example, that one of its prime locales for the last decade as been in the arena of investment banking, where all those collateralized debt obligations and credit default swaps were so clearly devised in large part to shut out most of the world from an understanding of what was really going on, and thus from any power to intervene. And Apple itself is by no means entirely free of this tendency, as its many outside software developers will be the first to tell you. But my perspective is that of the person who, right up to the advent of the personal computer, had been imagined (if thought of at all) as the operator of a dumb terminal. As long as I could do what the wizards imagined I would want to do at that dumb terminal, why would I want anything else? And how could I even imagine that anything else?

The earliest PCs pointed the way towards a new form of mass literacy, programming, which had been a sanctuary of computer wizards up to that point. What Steve Jobs did with Apple was to go the next step and focus all design efforts around making the personal computer (and its later offspring like tablets and cellphones) easily usable by people with a very wide range of skills, needs, and wants—including nonprogrammers. There remain arguments about whether Apple went too far in dumbing down the computer in a different way from its mainframe predecessors, in the years before it added UNIX-style command-line access to the system; and about whether the concomitant rise of ‘creativity’ software has actually tended to limit creativity by too narrowly focusing what most people are able to do with their PCs. But you only have to look around at the range of innovative and powerful work that’s being produced in part through computers—from music to interactive installations, from social media to game hacks—to see the enormity of the difference that the Apple approach has made.

Or to think about it another way: imagine that we were still in a phase where the only people who could create interesting work with computers were skilled programmers (or those with the money to hire programmers). Immediately, perhaps 90% of what has been produced in the last two decades simply vanishes into thin air. Including much of my own work. I’m not a natural programmer—though I’ve had to become a programmer along the way—and my acquaintance with mainframes and then early PCs was anything but inspiring. It wasn’t until a friend showed me a Macintosh SE running MacPaint that I saw the possibilities for my own work. I had been looking for a medium without realizing that what I actually needed was the right tool.

I’ve ended up becoming one of those people who works with different kinds of computers as needed, whether running UNIX or LINUX or OSX or even plain old unglamorous Windows (I’m writing this on a dual-boot Mac/Windows machine). But it’s also true that with my first computer, I became one of those diehard Apple loyalists with “I won’t give up my Mac until you pry it from my cold dead fingers” tattoo’d on my heart. I stayed with Macs when people laughed at me for buying one, I stayed when I had to take out a loan just to afford one, I even stayed when Apple’s market share fell below 5% and I was all but certain the company was going to go out of business within a year. I stayed for the simplest reason of all: Apple’s computers suited me. An artist reaches for her favorite paintbrush because it’s the one that gets her fastest into the flow, the place where you’re struggling towards the idea and not against the tool. For some of us, it’s the same with our computers.

So thank you, Steve Jobs. And thank you, anti-wizards everywhere: you know who you are.

 

Posted in 2011, latest | Also tagged , , , , |

idea #3775: photoelimination software

txtYears ago, when I was taking a photography class, I dreamed about a world in which taking a photograph actually ‘took’ something away from the world. As a consequence, things that had been frequently photographed, like the Eiffel Tower, were completely gone. Things towards which no one ever turned their lens, like the rocks under a bush, were robust. Everything else fell in between. And this effect of fading away wasn’t just in the images, it was in the world itself. Walking around San Francisco, I saw great gaps among the buildings, an insubstantial fog where the bay had been. People’s backs were more solid than their faces, their strollers more so than their babies.

I was reminded of this dream when I was thinking about the rising popularity of ‘photostitching’ software like Hugin and Autostitch, and in particular their use to create panoramas like these. The panorama speaks to our need for completeness, the idea of mapping the three-dimensional world completely into a 2D image, even if the result leads to the entertaining distortions of panoramas created using  stereographic projections.

So my idea #3775 is for a photostitching software—let’s call it PhotoEliminator—that would realize the concept of my dream: in stitching together hundreds of different photos of a site, it would drop out precisely those elements that most recurred, and keep those that were least common. In most cases, I think, this would tend to produce photographs of ephemera, of weeds and clouds and trash and passersby. The stuff we see without noticing because it’s so ordinary, because it hasn’t been flagged as noteworthy.

And I don’t even think it would be all that difficult to code.


Note: this is one of an occasional series of posts about raw ideas, offered here because many of the ideas I come up with I know I’ll never get around to working with, or are outside my areas of expertise. Perhaps they can be useful to someone else, as I have drawn on other people’s ideas from time to time. However, I make no claim that any of these ideas are actually good or practical, let alone original. They are offered as is, without warranty. You’ll find other such posts by searching on the keyword ‘idea’.

 

Posted in 2010, ideas, latest | Also tagged , , |

error messages

human error messageAs you could probably tell from one of my first posts, I’m a connoisseur of computer error messages. However, if you’ve ever looked up an error message on the web, you’ll have noticed that the explanations tend to be pretty cryptic. I thought that as my first public service announcement on this blog I’d post my personal notes, assembled over many years, on interpreting some of the most common error messages. Especially those having to do with email. I’ll be happy to update this list with reader contributions.

Auto-generated (failure): Like many email error messages,  “Auto-Submitted: auto-generated (failure)” does not mean what it appears to mean. What does it appear to mean? Well, actually we’ve never been able to figure that out. But we do know what it really means: the clue is in the repeated use of the prefix “auto-”. It means that the sysop knows you commit autoerotic acts on a regular basis (yes, Virginia, they really are using your computer monitor as a surveillance camera) and is prepared to accept a bribe not to turn you in to the feds. [Editor’s note: Exact definitions of “Auto-submitted” and “Auto-generated (failure)” cannot be provided in this family publication.]

Bomb icon: This icon strikes many people as superfluous, since it always  accompanies an error message along the lines of “Sorry, a system error has occurred.” Even your dog knows by now that this is programmerspeak for “Your computer just crashed ha ha ha.” So why the icon? The bomb is their way of letting you know that whatever happened is not only your fault, but so heinous in their eyes that they would drop an atom bomb right on your house if they could. Luckily for you, most programmers don’t have access to family-size atom bombs, but given how much software is now classified as weaponry under the export laws, it’s only a matter of time.

“Hey, Joe, some guy just ordered a pound of uranium, says he needs it for his research. Can we let him have it?”
“Oh sure, he’s one of our top interface developers.”

Cancel: Normally, this button is unimplemented (programmerspeak for “doesn’t work”). Its only purpose is to allow you to click fruitlessly until you are ready to submit to whatever nasty option is represented by the other button. (See OK, below.)
For example: “Force Betaware to quit? Unsaved changes may be lost. OK/Cancel.”
When implemented (which is rare), it is a synonym for “Crash the computer right now, please.”

Could not send message: This is one of those warnings that shows up when your email bounces back. It is cunningly designed to make you think it is your fault the message did not reach its destination. In actual fact, however, it usually means the sysop didn’t feel like bothering with your email that day and tossed it in the trash. After all, you’ve always suspected that the U.S. Postal Service throws out all your personal letters and delivers only the bills and junk mail, right? Well, now you know— it works the same in cyberspace.

On rare occasions, “Could not send message” is code for “Sysop accidentally hit the delete key but will never admit it as long as he lives.” Under no circumstances does it ever mean that there is anything wrong with the message itself.

Didn’t use HELO protocol: Sometimes new email arrives with the intriguing header “Host blah.blah.foobar.edu [12.34.56.78] didn’t use HELO protocol.” Your first thought on reading this is probably “Tsk tsk, the computer forgot to say hello. What ever happened to manners?” Then you may find yourself wondering who would ever care if the damn computer didn’t say hello? After all, it’s not as if it’s your best friend—on the contrary, you’ve probably never heard from old 12.34.56.78 before in your life.

Your first clue to what is really going on here is the spelling of “HELO”, a word that most of us more easily recognize as “hello.” Computers can spell—programmers can’t. This is your tip-off that the HELO protocol was written by programmers, for programmers. To a programmer, it makes perfect sense to require a computer to say HELO before handing him his email. To a programmer, every computer is his best friend (well, certainly a better friend than whoever is sending the email). It is no accident that the updated version of HELO is not HELLO, as you might expect, but EHLO, as if the computer is trying it out with a British accent. This is because the pool of computer programmers is a very very nonempty subset of the pool of Monty Python fans.

Unless you are a programmer, in other words, you can safely ignore any messages having to do with the HELO protocol. Trust me, no computer in the world really wants to say HELO (let alone hello) to you. And hey—do we really want them to anyway? The next thing you know we’ll be getting email messages from the Publishers Clearinghouse sweepstakes, addressed to someone with a vaguely similar name: “Dear Antionet X. LeBarge, HELO!” (And after that it won’t take very long before you get a letter from the IRS that opens, “Dear Antoinette LaFarge, your latest tax return is invalid because you used the Social Security number belonging to Antionet X. LeBarge. Please rectify this error immediately or we will deport you at your own expense.”)

End of File: Also known by the more informative name “-39/End of File,” this does not, of course, have anything to do with the end of a file. It means what you secretly think it does: The computer just got bored and checked out. It’s the same thing that happens when you find yourself reading a sentence beginning “The logic of effects and the law of dual function when applied to concrete events show that the absence of multiple functional relations…” About halfway through this, your own “-39/End of File” message popped up in the more familiar form “I think I’ll go make a cup of coffee.” Scientists of the future will undoubtedly cite this message as a landmark early sign that computers are indeed a form of intelligent life.

Message still undelivered: The warning “Message still undelivered: after 4 hours” is subtly different from “Could not send message” (above). It is designed to make you think that the sysop has not yet trashed your email but is letting it sit around for awhile first. In reality, of course, the message has already been trashed and the sysop is just jerking your chain. For maximum effectiveness, this warning is normally alternated with the “Will keep trying” message (below).

OK: Synonym for “not OK”, as in “Erase disk now? OK/Cancel.” Normally paired with the unimplemented Cancel button (above) for maximum effectiveness.

Permanent Fatal Errors: Perhaps you have received a bounced-back email with the message: “The following address had permanent fatal errors —– <idiot@idiocy.edu>.” Like its psychic stepfather the bomb icon (above), this is a masterpiece of subtext. The obvious implication is that you have screwed up big. But what’s all this about  “permanent fatal” errors? “Permanent fatal” is a tautology—let’s face it, anything that that is fatal is going to be pretty damn permanently fatal. Unless the programmer who originated this message was trying to make a subtle spiritual point (there is no afterlife, and no transmigration of souls either), why not say simply “fatal errors” or possibly “permanent errors”? Because the real message here is in the subtext: “fatal” is actually a way of saying that you screwed up so big that the sysop would get you for it if he could. In other words, the errors are permanent and they could be fatal— to you. You may never have worked this out consciously, but believe me, your subconcious mind knows enough to worry every time it sees this error message. Have a nice day!

Will keep trying: The full form of this message is “Will keep trying until message is 5 days old.” Normally paired with the “Message still undelivered” warning (above), it does not, repeat not, signify that attempts to deliver your email will be made for 5 days. It actually means that your email has already been trashed but you are permitted 5 full days to worry about it nonetheless. If you think about it, this is an act of extreme generosity on the sysop’s part: he could have written “Will keep trying until message is 5 years old.” Can you imagine having to worry about a single piece of undelivered email (“Hey girl, want to come over for poker tonight?”) for 5 years? Right.

X-Authentication Warning: This cryptic email header is completely meaningless. The “X” here is the same X as in “The X-Files” “X marks the spot” “Let X=Y”. In other words, it stands for “nothing” “I have no idea” “Let someone else figure it out”. But it looks impressive. It does not mean the sysop caught you downloading X-rated files from the system. Really.

Posted in 2010, latest | Also tagged , |

hello world

I am old enough not to have grown up surrounded by programming, as the post-web generations have. I learned my first programming language, C++, in graduate school, and my first program was the traditional one for newbie programmers: it printed “hello world” to a blue screen in a white monospace font. Since then I have learned to code using HTML/CSS, MOO, Javascript, and Max/MSP, but nothing has quite equalled the heady excitement of that first accomplishment.

The code looked like this:

#include <stdio.h>
 int main()
 {
        printf("hello, world");
        return 0;
 }

Hello, world.

Here, encapsulated, is the cause-and-effect beauty of programming. But when I think about this moment, I tend to think about deception instead. Firstly, the reason the program is so short is that all of the hard work is hidden: mainly in the included library of already written functions called ‘stdio.h’. Looking at the ‘hello world’ program and thinking oneself a programmer is a little bit like driving a car for the first time and thinking you now know enough to rebuild the engine. The learning curve gets very steep once you try to go beyond using a couple of the obvious built-in controls. No one tells you this and it can be quite discouraging if you’re expecting a more incremental experience.

The second thing that made the moment odd in retrospect was the fact that I was not actually greeting the world. I had absolutely no sense that I was saying hello to the world. But equally I was unable to accept what I saw on the screen as a random string, a sign whose only real meaning was: the program worked as expected. So what was that thing on the screen? Was it the computer itself that was greeting me? (I, World.) This anthropomorphic explanation didn’t quite satisfy me either. It was more as if I was greeting myself through the medium of the screen–not quite a mirror, not quite an other. Without yet giving a name to it, I had created an avatar–“world”–that allowed me to talk to myself in the guise of talking to others. And vice versa. Not unlike… a blog.

Posted in 2010, latest | Tagged |

naming the blog

I made my first pass at choosing a blog title at 3 a.m. and came up with the more-than-slightly geeky “Else_If”. It still looked good to me the next day so I kept it until a couple of days after that when I noticed that it was the tagline, “art is all we have” that I kept thinking about. So even though I gave up on “Else_If”, here’s why I initially chose it: I knew I wanted this blog to address issues of continuity and change, repetition and failure, and I started to think about how these things—especially failure—are coded for in the world of computers, where I spend most of my days.

human error message

an error message I created at atom.smasher.org

In code, we come face to face with failure in essentially two ways: through messages, and through functions. Messages serve to transfer the burden of error to us, while often pretending otherwise. (Maybe you didn’t break it but you’d better fix it!) Most familiar to web users is the cryptic “404 Not Found”, which turns out to be one of a long list of similar HTML error codes, many of which are equally gnomic:

  • 203 Partial Information
  • 303 See Other
  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 405 Method Not Allowed
  • 406 Not Acceptable
  • 409 Conflict
  • 412 Precondition Failed
  • 415 Unsupported Media Type
  • 502 Bad Gateway
  • 503 Out of Resources
  • 410 Gone

I could rewrite just about any artist’s bio using this shorthand:

Lifelong 415, now 503 due to 412. Made another 400 based on 203, ran into 409 because of a 405 , ended up 403. That’s it— I’m 410.

Failure at the functional level is dealt with primarily through ‘if’ ‘else if’ and ‘else’ statements. These attempt to preempt failure at the code level by imagining all possible outcomes and the proper response to those outcomes: “If this happens we’ll do X, but if this other thing happens instead we’ll do Y, otherwise we’ll do Z.” . Different programming languages spell the ‘else if’ part differently; for example, in the PHP code that runs this WordPress site, this structure is coded as ‘if… elseif… else’. I used an underscore in my blog title for legibility.

Very often this list of alternatives includes not just benign alternatives but a bunch of undesirable scenarios. In this sense, ‘if… elseif… else’ is an expression of anxiety, an organized  paranoia. It formalizes the expectation that things will go wrong. “If” usually opens the most obvious or most probable possibility and therefore is not a site of much imagination or thought. It embodies our hopes and desires. (If sunny: go swimming.) Lagging at the other end, “else” encompasses a cloud of unarticulated possibilities, a vague everything other. It represents both the unknown and the unknowable. (Anything else: stay home.)

It is the middle term that most intrigues me. The “elseif”—sometimes alone, often in a string of variations—does the hard work, laying out responses that take effect only under conditions of failure. The ‘else’ part of this term signals that our first choice has failed us; the ‘if’ part proposes an alternative. (If windy… what?  If struck by lightning… what?)

In other words: if we don’t get what we want, or we get something we don’t want, what do we imagine happens next?

Else_If.

Posted in 2010, latest | Also tagged |

whoami

generated graffiti

I have been thinking about art for most of my life; and by ‘art’ I mean both writing and visual media. But most of what I have written about art in the past decade and a half has been formal, focused, argumentative, brisk, dry—in a word, academic. The analytical essay, boiled in history and sauced in theory, is not terribly palatable at the best of times, and I can see how much this way of writing has dulled my literary instincts even as it has honed my technical skills.

Those last three sentences are a pretty good sample of the problem, but I don’t mean to discount everything I’ve written. There have been moments of inspiration and profound thought, and overall I’ve probably learned more from writing my essays than most of my audience has from reading them.

But this long effort has stranded me on the edge of that vast universe that begins outside the peer-reviewed essay. And so I take courage from Samuel Beckett: words, he said, are all we have; and I thought ‘yes’ when this came to mind, and then immediately, ‘no’. Because art is all I have, and have ever had; art is my language and my ocean and my oxygen. Why this should be so is one of the things I would like to understand.

It may be fitting that I began this new form of writing with an unconscious question. When you launch a WordPress blog for the first time, it comes with an initial default post whose content consists of an invitation to edit it. The first thing I did was to change that post’s title to “whoami.” And I did this without really thinking—as a single word, whoami is an old Unix command that prints out the user’s id, in case they have forgotten which of several possible logins they are using. Although I am no kind of UNIX programmer, whoami has become one of a small stock of phrases I reflexively use whenever I have to enter dummy text for testing purposes (another is the classic ‘Hello world’, which I nearly always mistype as ‘Hellow world’). Short and easily typed, it rolled off the keyboard unnoticed. I didn’t think of it as a meaningful phrase—who am I?—until partway through the second paragraph, when the solid-seeming word suddenly shivered and broke up. In that instant, command became question and it felt as if I was on my way.

Posted in 2010, latest | Also tagged |