Jun 05

Open Adventure ships

Colossal Cave Adventure, that venerable classic, is back and better than ever! The page for downloads is here.

The game is fully playable. It would be astonishing if it were otherwise, since it has been stable since 1995. One minor cosmetic change a lot of people used to the non-mainline variants will appreciate is that there’s a command prompt.

The most substantial thing Jason Ninneman and I have done to the code itself is that the binary is now completely self-contained, with no need for it to refer to an external adventure.text file. That file is now compiled to C structures that are linked to the rest of the game at build time.

The other major thing we’ve done is that the distribution now includes a pretty comprehensive regression-test suite. We do coverage analysis to verify that it visits most of the code. This clears the way to do serious code cleanup (gotos and stale FORTRAN idioms must die!) while being sure we’re not breaking things,

We gratefully acknowledge the support of the game’s original authors, Don Woods and Will Crowther.

Jun 05

Request for WordPress help

I need a bit of hands-on time with someone who knows how to troubleshoot WordPress installations.

I recently had to upgrade my WordPress installation due to an exploit that inserted a malicious URL in one of my widgets. Since then, my spam filter has not been operating correctly. I am not sure whether Akismet is working very slowly or not working at all, but the net result is that I am having to approve every post by hand.

There is a suspicious thing visible from my admin account. It looks as though Akismet is installed twice.

I suspect the fix for this is something simple, but I don’t know what it is. Can anybody help?

Jun 04

Correction to: “Set the WABAC machine…”

Henry Spencer, upon reading my previous post, had this to say by email:

I won’t argue with Eric about the significance of that little event, but I do have to interject a few corrections about the historical details.

For this, I’ve got a couple of advantages over him. First, being somewhat of a packrat, I still have my notes from conferences 30+ years ago! (Not in digital form, alas.) And second, being the one who saved most of what we have of Usenet’s early days, I also have some relevant old Usenet postings to consult.

The precise date was 19 January 1984, in the second morning session of the Uniforum conference (a joint meeting of the Usenix Association and the /usr/group trade association). Kathleen Hemenway of Bell Labs gave a talk on work she and Helene Armitage had done: “A proposed syntax standard for UNIX system commands”. This was basically an attempt to codify and slightly tighten the rules already implemented several years earlier by AT&T’s getopt() library function.

As you might gather from that wording, getopt() wasn’t actually new then: it had existed within Bell for some time, but hadn’t made it out in any widely-available Unix release. In late 1981, I’d seen a Bell-internal Unix manual page describing it. I wanted it, and I couldn’t have it, so I wrote my own. It was indeed quite helpful, and on 11 Jan. 1982, I posted it to Usenet newsgroup net.sources. By the time of that conference, a fair number of people were using it.

Ms. Hemenway’s talk was mostly about the syntax issues, but she did mention that there were plans for enhancements to getopt() to help support the new spec. And during Q&A, she was indeed evasive about availability of the enhanced code — probably nobody had made any decisions about that. So I got up and said that I would upgrade my public-domain implementation to match any enhancements AT&T made. Didn’t seem like a big deal; to be honest, I was a bit surprised that it got cheers and applause. I guess a lot of people hadn’t yet grasped that we *had a choice* about this.

No…no, we hadn’t. And my having got the date wrong explains the particularly high anxiety about the Bell breakup; the consent decree would have taken effect not nine months previously but just eight days before.

Ever since, on the occasions that I remembered this before returning to a busy life, the second or third thought in my mind was always that I ought to find Henry and let him know what an influence he had on me in that moment.

Henry Spencer, you set an example that day for all of us, and we cheered you not for promising to write a few lines of code but because we heard the call behind the promise. The details grew dim in my memory, but the power of that example struck me again each time I recalled it. Value your craft and pursue excellence in it; share what you create; never fear to go up against a monopolist; be loyal to your peers in the work. This is how a hacker – how any kind of maker, really – does his duty to the future.

A lot of us have been trying to live out that lesson ever since. Thank you, Henry. I think the world owes you more than it knows for that inspiration.

May 14

The advent of ADVENT

A marvellous thing has just occurred.

Colossal Cave Adventure, the original progenitor of the D&D-like dungeon-crawling game genre from 1977 and fondly remembered as ADVENT by those of us who played it on PDP-10s, is one of the major artifacts of hacker history.

The earliest version by Crowther and Woods (sometimes known as 350-point Adenture) was ported to C by Jim Gillogly in ’77 just after it first shipped. That has been part of the bsd-games collection forever.

What I have have just received Crowther & Wood’s encouragement to polish up and ship under a modern open-source license is not the Gillogly port; it’s Crowther & Woods’s last version from 1995. It has 18 years of work in it that the Gillogly version doesn’t.

I feel rather as though I’d been given a priceless Old Master painting to restore and display. Behooves me to be careful stripping off the oxidized varnish.

May 09

Your identity is not your choice

There’s been a lot of public talk about “identity” lately, stimulated by high-profile cases of transsexuality (notably the athlete now named Caitlyn Jenner) and transracialism (Rachel Dolezal). It needs to be said: most of the talk, on all sides of these disputes, has been obvious nonsense – utter drivel that should not have survived five minutes of thought.

I thought we had reached the limit of absurdity with the flap over Rebecca Tuvel’s paper In Defense of Transracialism, about which it can only be said that while Tuvel seems marginally less insane than her attackers, everyone involved in that dispute has obviously been huffing unicorn farts for so long that oxygen no longer reaches their brains in appreciable quantities.

But that’s in a corner of academia where one rather expects postmodernism to have shut down rational thought. In its own way, the following statement in an exudation of mainstream journalism is much sillier, and has finally pushed me into writing on the topic. I quote it not because it’s a unique error but because it’s representative of a very common category mistake.

Thus should there be a weighty presumption against so blocking people, against subordinating them by substituting our judgments about their identity for their own.

This would seem to be a rather uncontroversial point, based on ordinary liberal arguments in favor of tolerance and respect for the dignity of others.

Ah, yes. So, what then would be amiss if I stood up in a public place and claimed to be the Queen of England? Who are you to substitute your judgment about my identity for my own?

There would actually be two different kinds of things wrong with this claim. One is that I can’t grant peerages – the people who administer the English honors system wouldn’t recognize my authority. The other is that the claim to be “Queen” (as opposed, to, say, “Prince-Consort”) implies an observably false claim that I am biologically female.

These criticisms imply a theory of “identity” that is actually coherent and useful. Here it is:

Your “identity” is a set of predictive claims you assert about yourself, mostly (though not entirely) about what kinds of transactions other people can expect to engage in with you.

As an example of an exception to “mostly”, the claim “I am white” implies that I sunburn easily. But usually, an “identity” claim implies the ability and willingness to meet behavioral expectations held by other people. For example, if I describe my “identity” as “male, American, computer programmer, libertarian” I am in effect making an offer that others can expect me to need to shave daily, salute the Stars and Stripes, sling code, and argue for the Non-Aggression Principle as an ethical fundamental.

Thus, identity claims can be false (not cashed out in observed behavior) or fraudulent (intended to deceive). You don’t get to choose your identity; you get to make an offer and it’s up to others whether or not to accept.

There was a very silly news story recently about “Claire”, a transsexual “girl” with a penis who complains that she is rejected by straight guys for ‘having male parts’. Er, how was “she” expecting anything different? By trying to get dates with heterosexual teenage boys using a female presentation, she was making an offer that there is about her person the sort of sexual parts said boys want to play with. Since “she” does not in fact have a vagina, this offer was fraudulent and there’s no wonder the boys rejected it.

More to the point, why is this “girl” treated as anything but a mental case? Leaving aside the entire question of how real transgenderism is as a neuropsychological phenomenon, “she” clearly suffers from a pretty serious disconnect with observable reality. In particular, those delusions about teenage boys…

I can anticipate several objections to this transactional account of identity. One is that is cruel and illiberal to reject an offer of “I claim identity X” if the person claiming feels that identity strongly enough. This is essentially the position of those journalists from The Hill.

To which I can only reply: you can feel an identity as a programmer as strongly as you want, but if you can’t either already sling code or are visibly working hard on repairing that deficiency, you simply don’t make the nut. Cruelty doesn’t enter into this; if I assent to your claim I assist your self-deceit, and if I repeat it I assist you in misleading or defrauding others.

It is pretty easy to see how this same analysis applies to “misgendering” people with the “wrong” pronouns. People who use the term “misgender” generally follow up with claims about the subject’s autonomy and feelings. Which is well enough, but such considerations do not justify being complicit in the deceit of others any more than they do with respect to “I am a programmer”.

A related objection is that I have stolen the concept of “identity” by transactionalizing it. That is, true “identity” is necessarily grounded not in public performance but private feelings – you are what you feel, and it’s somehow the responsibility of the rest of the world to keep up.

But…if I’m a delusional psychotic who feels I’m Napoleon, is it the world’s responsibility to keep up? If I, an overweight clumsy shortish white guy, feel that I’m a tall agile black guy under the skin, are you obligated to choose me to play basketball? Or, instead, are you justified in predicting that I can’t jump?

You can’t base “identity” on a person’s private self-beliefs and expect sane behavior to emerge any more than you can invite everyone to speak private languages and expect communication to happen.

Racial identity is fuzzier than gender identity becuse, leaving aside “white men can’t jump”, it’s at first sight more difficult to tie it to a performance claim. Also, people who are genetically interracial are far more common than physical intersexes. Although this may mean less than you think; it turns out that peoples’ self-ascribed race correlates very accurately with race-associated genetic markers.

Nevertheless, here’s a very simple performance claim that solves the problem: if you are a man or woman who claims racial identity X, and I do too, and we were to marry, can we expect our children to claim racial identity X and, without extraordinary attempts at deceit, be believed?

This test neatly disposes of Rachel Dolezal – it explains not just why most blacks think she’s a fraud but why she’s an actual fraud. To apply it, we don’t even have to adhere to an “essentialist” notion of what race is. But the test becomes stronger if we note that (see link above) a genetic essentialist notion of race is probably justified by the facts. Among other applications, genetic racial identity turns out to matter for medical diagnosticians in assessing vulnerability to various diseases – for example, if you are black but claim to be white, your doctor may seriously underweight the possibility that you have hypertension.

As a culture, we got to the crazy place we’re at now by privileging feelings over facts. The whole mess around “identity” is only one example of this. It’s time to say this plainly: people who privilege feelings over facts are not sane, and the facts always win in the end. Though, unfortunately, often not before the insanity has inflicted a great deal of unnecessary suffering.

Apr 18

You shall judge by the code alone

I support the open letter by Drupal developers protesting the attempted expulsion of Larry Garfield from the Drupal commmunity.

As a Drupal contributor who has never in any respect attempted to tie the project to his beliefs or lifestyle, Garfield deserves the right to be judged by his code alone. That is the hacker way; competence is all that matters, and no irrelevance like skin color or shape of genitals or political beliefs or odd lifestyle preference should be allowed to matter.

That I even need to say this in 2017 is something of a disgrace. The hacker culture already had judge-by-the-code-alone figured out forty years ago when I was a n00b; the only reason it needs to be said now is that there’s been a recent fashion for “social justice” witch hunting which, inevitably, has degenerated into the sort of utter fiasco the Drupal devs are now protesting.

Thomas Paine said it best: “He that would make his own liberty secure, must guard even his enemy from oppression; for if he violates this duty, he establishes a precedent that will reach to himself.”

It doesn’t matter how much you dislike Larry Garfield’s personal kinks. If you don’t defend him now, you may have nobody to defend you when some self-declared commissar of political and sexual correctness – or just a censorious project lead like Dries Buytaert – decides that you should be declared an unperson.

You shall judge by the code alone. That is the only social equilibrium that doesn’t degenerate into an ugly bitchfest with expulsions controlled by whatever happens to be politically on top this week. It was the right community norm forty years ago, and remains so today.

Apr 16

The wreck of the Edmund Fitzgerald: the *science* version

My last G+ post reported this:

Something out there kills about one oceangoing ship a week.

It is probably freakishly large waves – well outside the ranges predicted by simple modeling of fluid dynamics and used to set required force-tolerance levels in ship design. Turns out these can be produced by nonlinear interactions in which one crest in a wave train steals energy from its neighbors.

Much more in the video.

So go watch the video – this BBC documentary from 2002 on Rogue Waves. It’s worth your time, and you’ll learn some interesting physics.

As I’m watching, I’m thinking that the really interesting word they’re not using is “soliton”. And then, doing some followup, I learn two things: the solutions to the nonlinear Schrödinger equation that describe rogue waves are labeled “Peregrine solitons”, despite not actually having the non-dissipative property of your classical soliton; and it is now believed that the S.S. Edmund Fitzgerald was probably wrecked by a rogue wave back in ’75.

In a weird way this made it kind of personal for me. I used to joke, back when people knew who he was, that Gordon Lightfoot and I have exactly the same four-note singing range. It is a fact that anything he wrote I can cover effectively; I’ve sung and played The Wreck of the Edmund Fitzgerald many times.

So, I’m texting my friend Phil Salkie (he who taught me to solder, and my reference for the Tinker archetype of hacker) about this, and we started filking. And here’s what eventually came out: Wreck of the Edmund Fitzgerald, the science! version:

The lads in the crew saw that soliton come through
It stove in the hatches and coamings
Her hull broached and tore, she was spillin’ out ore
That rogue put an end to her roamings.

Does anyone know where the Gaussian goes
When the sea heights go all superlinear?
A Schrödinger wave for a watery grave
It’ll drown both the saint and the sinner.

That is all.

Apr 13

From molly-guard to moggy-guard

In ancient lore, a molly-guard was a shield to prevent tripping of some Big Red Switch by clumsy or ignorant hands. Originally used of the plexiglass covers improvised for the BRS on an IBM 4341 after a programmer’s toddler daughter (named Molly) frobbed it twice in one day

The Great Beast of Malvern, the computer designed on this blog for performing repository surgery, sits to the left of my desk. This is Zola the cat sitting on it, as he sometimes does to hang out near one of his humans.

What you cannot quite see in that picture is the Power Switch of the Beast, located near the right front corner of the case top – alas, where an errant cat foot can land on it. Dilemma! I do not want to shoo away the Zola, for he is a wonderfully agreeable cat. On the other hand, it is deucedly inconvenient to have one’s machine randomly power-cycled while hacking.

Fortunately, I am a tool-using sophont and there is an elegant solution to this problem.

Continue reading

Apr 12

PSA: “E-Shielder Security” and “CyberSec Buzz” are gangs of idiotic scum

This is a public service announcement: E-Shielder Security, describing itself as “leading importers and suppliers of high end electronic technology solution systems” is a gang of idiotic scum.

Yesterday they posted a Hacktivists on the rampage in 2017, which largely reproduced my Hacker Archetypes post.

They did so in obvious ignorance of who the hackers I was referring to actually are, going off on a tear about “hacktivists”. That term is, in general, a flare-lit clue that the person using it is either an idiot or a vandal trying to cloak destructive behavior in respectability – real hackers are proud of what they do, take responsibility for it, and don’t wear masks (with a limited exception for those under direct threat from totalitarian governments). In this case it was clearly idiocy.

Mere idiocy turned into something nastier. I left a comment on the post pointing out their error, something I had clear standing to do as the author of the article they were quoting.

The comment was suppressed. That was scummy behavior; thus “idiotic scum”.

Don’t do business with these clowns. Warn your friends. Propagate this widely, the clowns deserve some serious reputation damage.

Addendum: Title amended because the article may have originated at CyberSec Buzz, another ‘security’ blog run by drivelheads who obviously have no fscking idea what they’re talking about. It has been taken down where I originally found it.

Apr 03

Hacker Archetypes

There’s a book about martial arts called On the Warrior’s Path that tries to understand the differing psychologies of martial artists through the lens of half a dozen archetypes – Seeker, Ronin, Tribal Warrior, and others.

I have not yet read the book, but my friend and regular A&D commenter Susan Sons reports having found it very effective for motivating young and newbie martial artists. “It gave them their first glimpse of what they were trying to become,” she reports, “They both knuckled down not just in the obvious physical parts of training, but in the mental aspects, far more than they had before and far more than their age/experience peers.”

So, Susan had the idea that it might be a good idea to develop a parallel gallery of hacker archetypes to help motivate newbies. We brainstormed this on IRC for a while. One thing that had been blocking Susan is that, by her own report, she sucks at naming things. I, on the other hand, am pretty good at that; I was able to come up with names that helped the archetypes develop more definition.

We don’t think this is a complete set, and some of the names might change. But it’s enough of a start for some public brainstorming.

Also note: no hacker is only one of these, but in talking about a number of mutual friends we found it was always pretty easy to agree on both the friend’s dominant archetype and the secondary one that they display most after it. I think this is an indication that we are, even if imperfectly, zeroing in on real traits.

Here they are. Descriptions mostly Susan, names mostly me.

Continue reading

Apr 02

Four modes of creole formation

A ‘pidgin’ is a language formed by contact between speakers of different languages. A ‘creole’ is what happens when a pidgin becomes a birth language for children raised where a pidgin is spoken. Pidgins are simple languages, stripped to the running gears, Often creoles re-complexify in later generations, retaining grammar mostly from one parent language and vocabulary mostly from the other.

My interest in the historical linguistics of pidgins and creoles began a very long time ago when I noticed that pidgins, wherever they arise, are usually morphologically a lot like English – analytic (positional) grammar with few inflections, SVO order oftener than can be accounted for by the fact that English is often one of the parent languages. Why should this be?

Nicholas Ostler’s excellent Empires of the Word deepened the question by proposing that analytic SVO grammar is the common factor in languages like English, Chinese and Malay that have been very successful at spreading from their original homelands. In his account, that is because this class of language has the lowest complexity barrier to acquisition for adult speakers.

That would explain pidgins all right – they look like they do because they’re invented by adults as the simplest possible way to establish communication. And English, with similar traits, is a non-pidgin that has spread like crazy because it combines the prestige of the Anglosphere with being exceptionally easy for native speakers of other languages to learn.

Er, but why is English like that in the first place?

Continue reading

Mar 28

Odlyzko-Tilly-Raymond scaling

I’ve been ill with influenza and bronchitis for the last week. Maybe this needs to happen more often, because I had a small but fundamental insight into network scaling theory a few minutes ago.

I’m posting it here because I think my blog regulars cast a wide enough net to tell me if I’ve merely rediscovered a thing in the existing literature or, in fact, nobody quite got here before.

Continue reading

Mar 27

How to act like you’re bright

This blog post is brought to you by a recent bad experience I had watching a 5-minute clip from Big Bang Theory on the recommendation of a friend who thought I might find it amusing.

Bleagh. This is supposed to be a show about geniuses? It’s not. It’s a show about a dimwit’s idea of what bright people are like. The slowest person in my peer group could out-think and out-create any of these sad-sack imitations of “smart” on any day of the week.

These actors are not bright, and don’t know how to fake it on screen. It occurred to me that I have seen this pulled off occasionally; the example that leaps to mind was Jennifer Love-Hewitt playing a bright scientist opposite Jackie Chan in Tuxedo (2003). She did a good enough job that I was later quite surprised at how relatively free of the ravages of intelligence she sounds in propria persona.

Ms. Love-Hewitt must have been at least smart enough to know that she should emulate the mannerisms of very bright people, and then set about doing it. After thinking about this, I thought it would be entertaining (and possibly useful) to compile some actionable advice for actors finding themselves in a similar situation.

Here goes a list of bright-person behavior signals which, while not universal, are very common…

Continue reading

Mar 26

src 1.13 is released

My exercise in how small you can make a version-control system and still have it be useful, src, does seem to have a significant if quiet fanbase out there. I can tell because patches land in my mailbox at a slow but steady rate.

As the blurb says: Simple Revision Control is RCS/SCCS reloaded with a modern UI, designed to manage single-file solo projects kept more than one to a directory. Use it for FAQs, ~/bin directories, config files, and the like. Features integer sequential revision numbers, a command set that will seem familiar to Subversion/Git/hg users, and no binary blobs anywhere.

Mar 22

When ancient-history geeks go bad

A few minutes ago here at chez Raymond, my friend John Desmond says: “So, have you heard about the new Iraqi national anthem?”

I said “Uh, OK, I’m braced for this. What about it?”

He said “In the good old Sumer time.”

I pointed a finger at him and said “You’re Akkad!”

Yes. Yes, we probably do both deserve a swift kicking.

Mar 20

cvs-fast-export 1.43 is released

Maintaining cvs-fast-export is, frankly, a pain in the ass. Parts of the code I inherited are head-achingly opaque. CVS repositories are chronically prone to malformations that look like bugs in the tool and/or can’t be adapted to in any safe way. Its actual bugs are obscure and often difficult to fix – the experience is not unlike groping for razor-blades in the dark. But people expect cvs-fast-export to “just work” anyway and don’t know enough about what a Zeno’s tarpit the domain problem is to be properly grateful when it does.

Still I persevere. Somebody has to; the thought of vital code being trapped in CVS is pretty nervous-making if you know everything that can go wrong with it.

This release fixes a bug introduced by an incorrect optimization hack in 2014. It should only have affected you if you tried to use the -c option.

If you use this at a place that pays developers, please have your organization contribute to my Patreon feed. Some of my projects are a pleasure to do for free; this one is grubby, hard work.

Mar 16

An apologia for terminal games

Yes, to a certain segment of the population I suppose I define myself as a relic of ancient times when I insist that one can write good and absorbing computer games that don’t have a GUI – that throw down old-school in a terminal emulator.

Today I’m shipping a new release of the game greed – which is, I think, one of the better arguments for this proposition. Others include roguelike dungeon crawlers (nethack, angband, moria, larn), VMS Empire, the whole universe of text adventure games that began with ADVENT and Zork, and Super Star Trek.

I maintain a bunch of these old games, including an improved version of the BSD Battleships game and even a faithful port of the oldest of them all: wumpus, which I let you play (if you want) in a mode that emulates the awful original BASIC interface, all-caps as far as the eye can see.

Some of these I keep alive only because somebody ought to; they’re the heritage grain of computer gaming, even if they look unimpressive to the modern eye. But others couldn’t really be much improved by a GUI; greed, in particular, is like that. In fact, if you ranked heritage terminal games by how little GUIfication would improve then, I think greed would probably be right at the top (perhaps sharing that honor with ski). That in itself makes greed a bit interesting.

Much has been gained by GUIfying games; I have my own favorites in that style, notably Civilization II and Spaceward Ho! and Battle For Wesnoth (on which I was a developer for years). But the very best terminal games retain, I think, a distinct charm of their own.

Some of them (text adventures, roguelikes) work, I think, the way a novel does, or Scott McCloud taught us minimalist cartooning does; they engage the user’s own imagination as a peripheral, setting up a surprisingly strong interaction between the user’s private imagery and the bare elements of the game. At their best, such games (like novels) can have a subtle imaginative richness that goes well beyond anything this week’s graphical splatterfest offers.

More abstract puzzle games like greed don’t quite do that. What they offer instead is some of the same appeal as tiling window managers. In these games there is no waste, no excess, no bloat, no distraction; it’s all puzzle value all the way down. There’s a bracing quality about that.

Ski is kind of hermaphroditic that way. You can approach it as a cartoon (Aieee! Here comes the Yeti! Flee for your life!) or as a pure puzzle game. It works either way.

Finally, maybe it’s just me, but one thing I think these old-school terminal games consistently do better than their modern competition is humor. This is probably the McCloud effect again. I’ve laughed harder at, and retained longer, the wry turns of phrase from classic text adventures than any sight gag I’ve ever seen in a GUI game.

So, enjoy. It’s an odd and perhaps half-forgotten corner of our culture, but no less valuable for that.

UPDATE: I probably shouldn’t have described wumpus (1972) as “the oldest of them all”, because there were a few older games for teletypes like Hammurabi, aka Hamurabi (with a single ‘m’) aka The Sumer game from 1968. But wumpus is the oldest one that seems to be live in the memory of the hacker culture; only SPACEWAR (1961) has a longer pedigree, and it’s a different (vector graphics) kind of thing.