An Algorithmic Lucidity

a blog

January 2016

Two-Point Compersion

"I don't get it."

"Yeah, I guess the rules are kind of complicated, but—"

"No, I mean, I think understood the literal content of your explanation, but I don't understand how the behavior you describe could arise from the rules as stated. What stops teams from just cooperating with each other?"

"Cooperating? What do you mean?"

"You say advancing the ball to the other side of the field is a touchdown worth six points?"

"Yes, plus a point-after kick or two-point conversion attempt."

"So why don't the teams just take turns scoring touchdowns?"

"What? Why would they do that?"

"To score points. You said that was the objective of the game."

"Oh, ah—I didn't realize I needed to explain this part—the goal is to get more points than the other team. The team with more points is called the winner of the game, and the other team loses."

"So it's a zero-sum game?"

"Well—yes."

"But that's barbaric!"

"That's ... not usually the reason people call football barbaric."

"Lower animals fight over fixed resources, the power to create opportunities lying far beyond their abilities and even their concept-space. But you, living at the dawn of your world's intelligence, you have the rare opportunity to build new worlds—and share the proceeds between you. And you waste your energy on this contrived imitation of a payoff matrix that it is your birthright to supersede! It is revolting."

The Seat Thief's Rationale

What is even the motivation for stealing a bicycle seat? How much can you hock it for?

I think I would forgive it if some poor soul had stood here after glancing around furtively to confirm that the train cops were absent, and computed: "Taking this seat will ruin the evening commute of some rich person, and likely the eight commutes after that, but he (probably he) can take it, whereas I need to sell this seat to get the money to buy the drugs to sell the drugs to get the money to buy the bread to feed my starving family—clearly a Kaldor–Hicks improvement, and after my drug-dealing startup takes off, I'll be sure to spend the occasional Monday evening replacing missing seats at a train station bike rack not unlike this one."

TODO I

    let path = Path::new("/proc/meminfo");
    let proc_meminfo = match File::open(path) {
        Ok(f) => f,
        Err(e) => {
            println!("Error: {:?}", e);
            // TODO: be kinder to our friends still under Cupertino's rule
            moral_panic!("couldn't read /proc/meminfo?! It is possible \
                          that you are struggling with an inferior nonfree \
                          operating system forced on you by your masters in \
                          Cupertino or Redmond");
        }
    };

Missing Words VII

We need a word or phrase to refer to intentionally (and usually only slightly) misquoting something for the sake of a perceived æsthetic improvement in the context in which the quoter wants to use the material. Okay, we do have the word paraphrase, which is close ("To paraphrase the great fooer Bar Quux ..."), but I don't think that's quite it—the Wiktionary definition mentions "often to clarify meaning" and I'm definitely talking more about petty differences in word choice than actually clarifying meaning.

There's this wonderful quote by Eugene Gendlin that I often remember as "People can stand what is true, because they are already doing so," but it turns out that Gendlin's actual phrasing was "for they are already enduring it." If I want to use my slightly different choice of words because I think it flows better in the context in which I'm repeating it, I think that can be legitimate. (Although needless to say, in formal settings, you definitely only want quotation marks around the words someone actually said.)

Or if my hypothetical pop punk band (which would hypothetically be called either "Bullet Candy" or "Zack M. Davis and the Duty-Bound Empiricists") were to cover Taylor Swift's "The Story of Us", I would sing part of this one line in the chorus as "the twist of fate by which it all broke down" rather than the original "the twist of fate when [emphasis mine] it all broke down," not to suggest Swift was wrong to sing when, but rather because that kind of use of the phrase by which is exactly the sort of rhetorical flourish that my hypothetical band would hypothetically be known for.

Voicemail Greeting

(circa 2005)

You've reached the voicemail box of Zack M. Davis
I say that in case this is a wrong number
And you want to know what his name is
But he cannot talk to you right now
No he's got other things to do right now
So he cannot talk to you, leaving you alone
But you can leave a message after the tone

Ring Tone

(circa 2005)

It's time to pick up the phone
'Cause someone is calling you now
You can tell from this ring tone
That someone is calling you no-ow
That someone is calling you no-ow
That someone is calling you now

Disability

"So this book is titled Gender Matters: Training for Educators Working With Students With Disabilities. And I'm like, 'Huh? Gender is a disability?'"

"Actually, I agree with that."

Ideas Have Expirations

One often-overlooked aspect of the crime of not-writing is that the harm isn't just about the things that deserve to be said that you never get around to saying because you don't put in the time and effort. It's also about the things that you can't say anymore even if you suddenly had the will, because the opportunity to say it was bound to a particular time, and trying to recapitulate the thoughts months or years after the fact would be irrelevant, or impossible.

This phenomenon comes in degrees. Start with irrelevance. Often the inadmissibility of tardy words isn't absolute: you could say things late, but the product would be less valuable than if it were timely—especially in a medium like blogging, where the posts being dated and displayed reverse-chronologically creates an expectation that the entries are associated with a particular point in time—at least, that they were written not too long before their publication date, even if the actual content isn't about the ephemera of the day or season. This has contributed to An Algorithmic Lucidity not being as good of a blog as it could be.

BABSCon swag

Like—each of the last two Aprils, I attended (one day of) BABSCon, the San Francisco Bay Area's premier convention for fans of the animated series My Little Pony: Friendship Is Magic, both times—even the second!—with the thought that the experience would make good fodder for a blog post in the "autobiographical account of my day at this timely Special Event" genre. I was going to tell you about how the first time, I made a couple of social faux pas while meeting Tara Strong and Nicole Oliver, only one of which was intentional; I was going to tell you about how the second time, I hadn't been planning to buy anything in vendor hall, but couldn't help but say "Shut up and take my money" in response to the demonstration of the Twilight Sparkle's Secret Shipfic Folder card game, the game-opening card of which I later got autographed by both members of Sherclop Pones, whose Friendship Is Witchcraft fandub series had clearly inspired some of the cards and probably the game itself, as well as being the source of some of my favorite music. I was going to tell you about how the first time, I was considering buying a coffee cup depicting the Mane Six (because I frequently bought medicinals at the outpost of the American coffee hegemon, and felt guilty about the wastefulness of accepting the default disposable cup every time like every other American), but hesitated, explaining to the vendor that I wasn't sure whether I wanted to use that cup in public, whereupon she said she could throw in a free button, to which I replied, "Sold!" And I was going to do a careful sociological analysis of curious observations like how I hesitated to buy that cup and why H. liked it so much in terms of gender ideology and signaling contrarianism.

But I didn't, and those Aprils were nine and twenty-one months ago, respectively. Not timely. My being motivated to write now ("That my past does not define me, 'cause my past is not today") can push a 350-word counterfactual "postview" of what I thought about saying over the threshold into existence, but it would be a bit unseemly to try to construct (I almost wrote reconstruct, but the re- prefix should be reserved for things that ever existed in the first place) a 2000-word personal account of the timely Special Event that happened last year or the year before that.

Leafline web client play

Or like—I made a thing not too long ago. I didn't mean to. It was an accident, really. It's a sort of oppositional strategy game engine—like a board game you play against the computer. The core move-scoring application is written in Rust, but there's also a web-application GUI (the "web client") in Clojure and ECMAScript 6 that's much more ergonomic for playing a game against. The game is—okay, well, it's chess: the endeavor snowballed out of my desire to participate in my coworkers' friendly office chess games combined with my reluctance to spend effort learning to be good at a task whose essential nature is so obviously suitable for automation. But writing a chess engine is just so cliché, and I enjoy naming things, so I quickly settled upon the conceit that actually I was writing an engine for a game that just happened to be exactly like chess, except that everything has different names: for example, instead of the pieces being black and white pawn, knight, bishop, rook, queen, and king, the figurines, or agents (never "pieces"), in my game are blue and orange servant, pony, scholar, cop, princess, and figurehead. (I kept rank and file, though.) This "adorable idiosyncratic names for everything" convention permeates the codebase. Despite the fact that unnecessarily gendering things isn't normally my style, I decided that ponies, scholars, and (inevitably) princesses were female, and that servants, cops, and figureheads were male, specifically in order to have an excuse to leave // ♀ and // ♂ comments in the enum declaration, because I feel like too many of my code comments are restricted to the ASCII or maybe Latin-1 subsets of the Basic Multilingual Plane, such that I don't want to pass up an opportunity to legitimately ("legitimately") use \u2640 FEMALE SIGN and \u2642 MALE SIGN. There are comments with ludicrous rationalizations for using the standard Forsyth–Edwards notation abbreviations ('P' is for peon, 'N' is for neigh, 'B' is for book, 'R' is for the Rule of law; the blue team's runes are lowercase because lowercase characters have higher ASCII codepoints, just as blue light has a higher frequency than orange light). Instead of pawn promotion, it's servant ascension, and a different verb is used to describe the process depending on the target figurine type (the servant moving the to the final rank can transform into a pony, be brevetted to cop, or transition into a princess or scholar). Or, like, Rust is quite conservative in the Yeggean sense, as manifested in features like the compiler forcing you to explicitly handle all possible variants of an enum; in cases where you know an instance of the enum can only be one of a strict subset of the possible variants, but the type system doesn't know that, you have to fill in those branches or supply a default case anyway, probably with a panic, which is like an exception that you can't catch, to abort the program with a message indicating that something entirely unanticipated has happened and it makes no sense to carry on. So I had been ending all of my panic messages with a stock phrase about how the unexpected thing was contrary to the operation of the moral law ("non-princesslike agent passed to princesslike\_lookahead, which is contrary to the operation of the moral law", and so forth), because this isn't the kind of codebase where you just say something like "assertion failed," as if the program should die because of some human authority's mere assertion, rather than only as a matter of justice when its behavior is contrary to the operation of the moral law. And then when my coworker Alexander Corwin started contributing, he abstracted away the boilerplate in these panic messages into this moral_panic! macro, which I thought was brilliant.

The web client is configured to run on port 2882. It's easy to remember because 2882 is Magnus Carlsen's peak ELO score.

Leafline console play

Software, like poetry, is never really finished (only abandoned), but getting the project to the point that I felt it was a minimal viable "product" took about eight glorious weekends (plus a few weekday nights, and with some help from Alexander). Near the end, watching the program utterly trounce me in web client play and feeling for all the world like a lieutenant junior grade, I started looking ahead to what came next for me. Over the past two years, the first two years of my life (that I feel comfortable admitting to), I had spent many, many night and weekend hours hacking on various side projects and coding exercises out of genuine enthusiasm and curiosity and desire to improve my craft—and, honestly, a feeling of insecurity, sensing that I needed to prove my worth as a hacker ("I threw myself into my studies, to have the world in my control"). But decent chess AI in Rust as an impulsive throwaway project seemed like a sufficiently strong signal of my programming prowess that maybe it was time to tie off this project, write the obligatory exciting blog post about it, and start allocating night and weekend hours towards some of the non-programming (!) interests I remember having in the before-time (assuming those memories are not fake). I could do some math! Write some fiction! Maybe even meet new friends ("I will not be shy; I'm going to try; I bet I'll find the reason why so many people, like me—")?!—all while feeling secure in the knowledge that my technology skills are clearly adequate for my continued existence to be economically viable. (For now.)

So ... about that end-of-project blog post. I was going to title it "Project Review: Leafline version 0.0.14-MVP; or, Lessons From Writing an It's-Not-Chess Engine in Eight Weekends", and I was going to explain everything to you—not just the silly names for everything that inexplicably amuse me (and only me), but the actually interesting substantive technical details of the implementation. Not that the AI is anything special—it's just textbook minimax search (in the negamax style) with α–β pruning and a position-evaluator that mostly counts material but also has bonuses for things like having both scholars or ponies and servants being in the center sixteen squares, plus a transposition (hash)table to look up scores of game-states it's already seen before, and another hashtable for history-heuristic move ordering. It's multithreaded, to take advantage of multiple cores (although I confess that the specific threading strategy is kind of a questionable hack). It can search up to 7 plies if you have a decent machine and are willing to wait ten or twenty minutes for the answer.

But even if it's nothing special, I was going to tell you about all the deeply moving philosophical insights I got from doing it. It's one thing to know how to refute the classic anti-AI argument (or straw person) that "humans couldn't possibly build something smarter than themselves by definition," but it's another thing to have the personal experience of having written something smarter than yourself in some particular domain, to the extent of feeling an acute sensation of futility while playtesting it, thinking: I've already coded my understanding of what it means to be good at this game; obviously I'm not going to do any better thinking about it with my slow meat-brain. (Although this is partially explained by my knowing almost nothing about chess strategy that I didn't learn in the course of this project; I've seen one of my coworkers beat the program at 4-ply search very quickly.) I was going to explain to you how α–β pruning works, with hand-drawn diagrams, and how you can interpret it as disregarding possible worlds that are too good or too terrible to be true (given rational play on both sides). I was going to tell you about the exciting surprise where the program seems to behave as if it understands the concepts of pinning and forking, even though those ideas aren't represented anywhere in the code!—but that when you think about it, that shouldn't actually be surprising: to the extent that we think pinning an opposing piece is a good idea that will lead to us picking up material, then pins should naturally appear in the results of searching the game tree for moves that are predicted to pick up material. And the reason we search for game-states where we hold a material advantage is because we expect that we're more likely to mate from those positions (in future nodes beyond our current planning horizon). Things that are, in all philosophical strictness, mere instrumental values, might profitably be treated as if they were terminal values by some algorithm that can't see far enough ahead to the actual goal, and this is a quantitative phenomenon: the shorter your lookahead, the more you want to rely on near-term approximating rewards. That's why I threw in a bonus for servants advancing to far ranks; I suspected that the existing code searching at the not-greater-than-7 plies that it could get in a reasonable amount of time, wouldn't adequately appreciate the true value of servant ascension, even though I expect that value would be naturally emergent in a deeper search, just as the value of some forks and pins emerged from mere 4- or 5-ply searches. (This was just a suspicion, though; I didn't take the time to actually test ascension-seeking behavior.)

So—though I've managed to just now haphazardly summarize some of the things about this project, this isn't really a careful project-review post. And now the distance between today and 27 September's 0.0.14-MVP tag is longer than that between that tag and the start of the project. And I ended up making a few more commits in subsequent weeks. So, no longer timely, at least not the way I originally imagined publishing a grand just-finished-project review post as a symbolic milestone marking a transition in how I'm going to start spending my precious non-dayjob time.

Or like—in late October, I saw the recent Jem and the Holograms film, because the previews (accurately) made it look like it was going to be really bad, and I thought I'd write a post combining a negative review of the new film with praise for the original Jem cartoon that this awful film mendaciously desecrated the name of. And then ... I didn't get around to finishing the post. Maybe my notes and memory from that night at the theater are accurate enough such that it's not too late—but the potential impact departed with the timeliness; I can't warn you not to go see it, because it's not in theaters anymore. (And good riddance.)

But beyond these sad cases of ideas that didn't get written up properly while they were still maximally relevant, there's an even worse way to fail to communicate, which is when the would-have-been-author has changed so much since first having the idea, that there's no way they could plausibly do justice to the idea as it was first had. You can't write a Diary entry about the day five years ago that you don't remember, and—more poignantly—you can't write a grand ideologically-driven novel in favor of the ideas you don't believe anymore. Some would argue it's just as well—if it's something you wouldn't write and couldn't stand by today, aren't you relieved that it doesn't exist to sully the name that represents who you are today? Even so, I would still favor intertemporal solidarity among past and future selves against the common enemy of our illiteracy.

Yes, illiteracy! Some would call it writer's block, but I know better than to bother with the unobservable distinction—whether you choose to describe your hypothesis as "doesn't write because unmotivated" or "doesn't write because doesn't know how," the result is the same: death of the non-author's memetic lineage.

Dismal Science

There's something that feels viscerally distasteful and fundamentally morally dubious about looking for a job or a significant other. Search and comparison are for crass, commonplace, material things: we might say that this brand of soap smells nice, but is expensive, or that this car gets poor mileage, but is cheap, and while we may err in our judgment of any particular product, the general procedure must be regarded as legitimate: there's nothing problematic about going out to shop for some soap or a car and purchasing the best that happens to be available on one's budget, even if there's no sense of destiny and perfection about the match. Rather, we want to be clean, and we want to go places, and we took action to make these things come to pass.

But some things, like the person you're going to spend the rest of your life with, or the work you'll spend it doing, don't seem like this. We want to believe in having a calling and a soulmate. Or some of us, too prideful in our rationality to put faith in such opaque concepts, prefer to replace them with no concepts: say that we happened to find work and find love—or (perhaps more likely) not—but don't dare call it the result of efforts that could or could not have been spent more or less wisely!

Only—in the absence of a literal Creator fashioning pairs of soulmates with a work they were meant to do, it's not really clear what the alternative is supposed to be. For evolved life in an unplanned universe determined by simple underlying physical laws, there's no particular reason for the types and quantities of labor needed to produce the goods and services people can demand, to equal the the types and quantities of labor that would be optimally fulfilling and life-affirming for workers to supply, nor for the characteristics someone would want in a significant other to match up perfectly with the characteristics the pool of existing satisfactory potential others would want in their others. Nor—crucially—is there any particular reason for people to automatically know where or how to find their ideal matches in work or love, even supposing that they happen to exist.

So it is here, in the gap between what we think we want and what we think we can get, that the phenomenon occurs. It goes by many names. Some call it the evil. Others call facets of it marketing, sales, recruitment, courtship. There are those who call it life (although that's a bit of tasteless obscurantism in the opinion of the present author). Whatever one calls it, it would be advisable to think at least twice before concluding that one is better off ignoring it, the whole impetuous fearful flurry of flowing down gradients: to wonder, to inquire, to guess, to experiment, to tell and to listen. Never to plead—or at least, never to be perceived as pleading. To build spectacles and print pamphlets, to judge pamphlets on both reasoning and paper quality. To offer, and reject, and reject, and reject; to seek, and be rejected, and rejected, and rejected.

In the end, if the dour philosopher-prophets spoke true that utopia is not an option, who among us can be said to have lived the most plausible facsimile of the chimerical "good life"? The one who always held true to their dreams—just the dreams, not the pursuing of them—no matter the opportunity cost, and who, paying that cost, to this day haunts the streets still dreaming, for lack of anything else to do or anyone else to do it with? Or those proud professionals who, if asked "Is this really what you want to be doing with your life?" would passionately answer "Yes!", and who, if asked as a followup, "Would you say the same if it paid sixty percent less?" would answer "No!" with the same passion? Or lovers cradling one another on the beach, murmuring the three words that are the highest expression of what they mean to each other: "Markets in everything."

This Has Always Been the Year

At a quarter past eight on the first Monday of the new year, the yellow line on the way to the city has just passed Orinda. A young man is standing in the bicycle priority area near the doors, reading a paper magazine. Write Your Novel in 2016! is the cover story, followed by more teasers below: "2 Tools That Can Fix Any Story Problem," "What's Really at Stake? The Secret to More Compelling Characters," and "5 Great Caribbean Literary Festivals: Get Away, Get Inspired!"

It catches the eye of a young woman who got on at Lafayette and has spent the last six minutes scribbling in a Moleskine notebook. "Oh!" she says, approaching. "Are you a writer, too?"

The man looks up, seeming slightly surprised and confused, which slightly surprises and confuses her in turn. "Of course not," he says, indicating the magazine. "If I were, would I be reading this?"