Photograph of an old TV set, tuned to a staticky pattern.

After finishing Paradise Killer, I find myself quite enjoying the NES and SNES collections available through Nintendo Switch Online. Once again bound to full-time work, I lately keep my Switch on my desk and fiddle with these simpler games when I want an interesting distraction. Their two-button control schemes, uncomplicated rules, and playtimes measured in minutes make them a welcome alternative to poisoning myself on social media.

Beyond the nostalgic comforts found within these Nintendo collections, I’ve discovered some surprising gems, a quarter-century or more after their initial publication. And so I sat down to write about my favorites, but a short diatribe about emulating old games’ video came out instead:

When playing 20th century video games on 21st century hardware, turn on your emulator’s CRT filter, if it has one. To do this in the Nintendo Switch Online collections, select “⚙️ Settings” from either collection’s home screen, then select the “CRT Filter” option from the three “Game screen” choices.️

This filter simulates the scan-lines of a cathode-ray tube—in other words, the battered family-room or college-dorm TV sets that these games were designed for display on. I’m no video-tech connoisseur, but to my rheumy Gen-X eyes, the effect in the Nintendo collections looks quite realistic: the default sharp-cornered pixel-grid gets replaced with screen-filling swirls of uneven lines and overlapping colors.

As Jordan Starkweather’s wonderful CRT Pixels Twitter account illustrates, the best game artists in the CRT era set each pixel of every sprite with the intent that the wartime technology displaying them would blur and smear those little colored boxes, making delicate curves and shadowed gradations out of the regimented graph-paper blocks seen in an unfiltered emulation.

The innumerable and evenly lit LEDs of your laptop or flat-screen TV may want to display these games as a quilt of consistent chunky blocks, but that is not what the games want. The games want you to see them as beautiful streaks of analog light! Please respect the games and the people who made them, and turn on your emulator’s CRT filter, when available.

Image credit: “CRT” by Robert Anders is licensed under CC BY 2.0.

This article was also posted to the “games” section of

Share or reply to this post on Twitter, or elsewhere.

A bizarre cityscape painted in neon pinks and blues and studded with anime eyes, set in the middle of a jungle.

I just finished Paradise Killer, and enjoyed it thoroughly. Like Disco Elysium, which I also loved, it presents an interactive detective story with an unnerving and otherworldly setting, and paces out its narrative using a framework borrowed from other game genres. In this case, a combat-free FPS treasure hunt tells a story mashing up a Max Gladstone gonzo-horror novel with a Spotify vaporwave playlist.

While Disco Elysium’s RPG-based gameplay and slightly more grounded setting resonated more with me, I still had a fantastic time running and leaping and snooping my way across Island Sequence 24. I can recommend the experience to any adventure-gamer who doesn’t get motion sickness from this sort of thing.

I shall now present my three top tips for new Paradise Killer investigators, all spoiler-free:

Spend your money. As with countless other video games, money feels tight at first, and in Paradise Killer it may also feel worryingly finite. The island has more than enough cash scattered around to cover all your needs, though; keep exploring, and you will never feel poor for long.

If you come across something besides fast-travel access for sale, buy it immediately, even if it leaves you broke. No purchase is useless or premature, and you’ll earn that money back soon enough.

As for fast-travel points, pay to unlock at least one or two in every named zone. There will come a time when your wallet will feel comfortably heavy, and you’ll be glad to pay Lydia to drive you around now and then.

Ask every question. Though it may sometimes seem otherwise, you cannot harm the investigation by asking someone a “wrong” question. Go ahead and lawnmower your way through every dialogue option, in any order you want! (This is one place the game’s style deviates from Disco Elysium, notably.)

Sometimes a suspect will respond to a question with anger, or even a refusal to speak about some topic any further. When this happened to me at first, I felt concerned I’d screwed up the interrogation somehow. Having talked to other island-hopping friends and now having finished the game, I feel pretty certain that all these responses are inevitable, and none affect your future interactions with their respective speakers. They’re simply dramatic, is all!

Visit every map location. While the wonderfully low resolution of Starlight’s map makes it difficult to use for navigation, it does give you a handy list, visible from the get-go, of every major zone on the island. You need to visit and explore each one at least once before you can crack the case, even though some of them never come up in dialogue.

In my playthrough, I reached a point where my trail started feeling discouragingly cold, and I started wondering if I should just pack it in and present my underbaked accusations to the Judge. Then I noticed that Starlight’s map listed an area I’d never visited—and which, in fact, I had no recollection of any person or clue even mentioning. But there it was, in plain sight, from the first minute of the game! And, of course, my visit to it blew the case wide open once again.

Good luck and have fun in the grim neon future!

Image credit: An AI-generated image based on the prompt “neon ghibli brutalism”, posted to Twitter by @ai_curio right after I started writing this blog post.

This article was also posted to the “games” section of

Share or reply to this post on Twitter, or elsewhere.

A cartoon from 1955, Lolita’s publication year, tweeted by Tom Heintjes while I read the novel—and eerily echoing a bit of its content!

With some surprise I last month overheard two friends on Twitter—both women, notably—enthusiastically discussing Nabokov’s Lolita, and furthermore mentioning a recent podcast series about it. With only a baseline cultural notion of the novel’s content, as well as a sweet tooth for book-discussion podcasts, I knew I had to read it right away. I feasted on a public-library ebook edition over the course of two weeks, and as soon as I post this blog entry I shall cue up that podcast and commence a grand dishwashing session.

It will feel good to listen to other people talk about this book at length, because I feel so small having just finished it. An astoundingly lush and gorgeous novel, for the monstrous story it tells, and the truly hateful villain who tells it. I have so much I can say about it, but for today I’ll limit myself to a single, key observation: The tragedy and triumph of Lolita are one and the same.

Humbert Humbert—the book’s autobiographical author, according to its framing device—tries to make the story all about himself. He presents a narcissistic anti-confession where he details all his acts of deceit, rape, and murder in an attempt to fob the blame onto his multiple victims, and in particular the twelve-year-old title character. Certainly he succeeds in charming the reader to some degree, opening with a brilliant bid for our sympathy through the misfortunes that would fry his psycho-sexual circuitry at a young age. He then proceeds to write so beautifully about so many terrible things he does that we stick with his delicious narrative far past the point when any rational reader’s affection for him has drained away.

While Humbert does make himself the book’s protagonist, we can—we must—deny him the role of its subject matter. The book is about Lo. (Dolores. Can I call her Lo? I truly think she would have preferred it.) Humbert tries to make it otherwise, inserting himself between Lo and the reader at every opportunity, just as he never let her be alone with any friend or peer. Even the title is about himself, using a private pet name for Dolores rather than any name she actually answered to.

Sadly for him, Humbert Humbert is not the only writer of Lolita. Its true author masterfully centers the narrative on the true title character, radiant and fully realized despite the protagonist’s best efforts. This astounding feat of indirect characterization is the book’s triumph—and makes the weight of its tragedy all the more profound.

Lo’s light glows through the prison-bars of splendid prose that Humbert lays across every page. Though we see her only through the imperfect and even deceitful filter of the protagonist’s telling, we come to know so much about her: her humor, her intelligence, her heart so large and giving that she can love even leering, lecherous Humbert. And she does, right up until he casts her into the chasm between the novel’s two halves, ending Part One with one of the most heartbreaking single sentences I can recall reading in fiction.

While Humbert keeps the focus on himself all through Part Two, the reader’s attention strains to stay fixed on Dolores, blurred and backgrounded. We cheer desperately for her, squinting past Humbert’s wheedling, excuse-laden bloviation (“Ladies and gentlemen of the jury!” he keeps shouting) to catch glimpses of Lo clawing back shreds of autonomy within her miserable situation. Conversely, every time Humbert casually mentions another of her birthdays going by, it lands like a blow to the gut: a reminder of the narrator’s ongoing destruction of this brilliant child.

I couldn’t tell you the last time I met a fictional character who felt as real as poor Dolores Haze. In stunning irony, Humbert-slash-Nabokov, writing around 1950, specifically and multiply names 2020 as a year that Lo might live to see. She would have turned 85 last year, had she lived. Had she lived! I start to picture her as a little old woman with a sparkling eye living in New York somewhere, and wonder what her life was like in all the years since. But this involves not just making her real, but undoing the defining tragedy of Lolita. My heart swims, and tears well. I can’t do it.

This is one of the worst and best books I have ever read.

This article was also posted to the “books” section of

Share or reply to this post on Twitter, or elsewhere.

After coming across it a couple of years ago, I saved this cartoon by Kolja Wilcke to my hard drive because it struck such a chord with me. I find it a wonderful example of what we might call a “Janus cartoon”: an editorial comic that makes both its intended argument and its exact opposite with near-equal force. In this cartoon’s case, I side with the antithesis, and adore both the strength of the argument and its clearly accidental nature.

Two people are working on two jigsaw puzzles, each depicting a giraffe. One, labeled 'Static typing', has traditional puzzle-pieces that only fit one way. Its solver is slowly making progress. The other, labeled 'Dynamic typing' has identically shaped square pieces. Its solver has arranged them into a giraffe, with several obvious errors (e.g. its neck is in-place but sideways). He shouts, 'Done!'
Cartoon by Kolja Wilcke

Let me describe why I love it. You don’t need to fully understand the details about “static typing” versus “dynamic typing” to get the joke here; it’s enough to know that programming languages or techniques that use static typing generally enforce much stricter rules about how you write your code than those allowing dynamic typing. It trades reduced flexibility for a similarly reduced likelihood of certain sorts of bugs. The depicted metaphor of the two giraffe-puzzles, in fact, illustrates the difference very cleverly!

This is what I take to be the cartoonist’s intended message:

Mr. Static knows how to solve a problem: slowly and carefully. Observe how eleganty the restrictions of his system help him draw order out of chaos, forcing him to use industry-standard best practices while assembling this puzzle: corners first, then edges. He cannot even consider the middle pieces before establishing that solid framework to build upon further.

We may join him in looking askance at foolish Mr. Dynamic, shouting with glee over his clearly defective output, made with a quote “friendly” unquote system that lets him rotate its parts every which way. Never mind him, Mr. S! Keep your nose down, knowing that each piece you painstakingly place can only go precisely where it ought.

And here is how I cannot help but read this cartoon:

After having an absolute blast while rapidly bringing his vision of a solution into reality, Mr. Dynamic whoops with joy—unsettling poor Mr. Static, whose unforgiving toolkit has prevented him from achieving even a halfway-complete prototype in the same amount of time.

We cannot deny the imperfections in Mr. D’s solution. In fact, Mr. D will discover them as soon as he or his colleagues give his work a second glance. Laughing, he will take a few moments more to make the obvious repairs.

Perhaps Mr. S, after wiping the sweat from his furrowed brow, will snap another piece or two into his own solution before Mr. D is done. No doubt he will appreciate the peace and quiet after Mr. D ships his completed project and moves on to the next one.

Of course the real world provides us with many situations where a strict software toolkit that forces slow, thoughtful work might provide a net benefit. One thinks of the proverbial nuclear reactor control systems, or airliner autopilots.

But that’s not what this cartoon depicts. The puzzle-solvers are each trying to build a picture of a funny giraffe. I would suggest that this scenario does not present an optimal time for bringing the whole book of engineering best practices to bear.

This cartoon does not only contain a metaphor of static versus dynamic typing in computer programming. It also shows the pure joy that a code-competent creator can feel by building something new—however sloppily, or initially rife with runtime errors. The best tools for this style of computational creativity are very often the ones that let you throw the puzzle pieces around however you please, letting you rapidly make real the image which only hours ago existed only as a gnawing possibility.

The cartoon reminds us: when choosing your tools, consider the role of joy.

Share or reply to this post on Twitter, or elsewhere.

Today I join Google as a technical writer. This completes a process that began more than six months ago. Intense mid-winter interviews preceded many conversations with leaders of various writing teams within the gigantic company, all shepherded by heroically patient recruiters. (Thank you, Tyler!)

Laid across the middle of this span was my employment at Hydrolix—which, I shall now reveal, ended with a layoff in May. I can only extend my sincere gratitude to every person I worked with there. The best moments of my work with Hydrolix gave me such a sense of professional fulfillment and joy that I left convinced I had made the right choice in embarking upon my new career path as a writer.

All of my preliminary conversations at Google have whet my appetite to begin work there, and I look forward to settling in over the next few weeks. I did not predict at the start of 2021 that the first giant step into my new career would look like more of a stuttering shuffle, but that’s just how the dance goes sometimes.

Share or reply to this post on Twitter, or elsewhere.

Slack has a feature available to workspace admins that lets you suppress the messages that users normally see when people join and leave public channels. (Technically, the feature lets you show those messages, but I believe it defaults to being on.) I think you should disable these messages for all the Slack workspaces you manage, and I shall now take a moment to tell you how and why.

To find and change this setting, select Settings & administration > Workspace settings from your workspace’s main pull-down menu. In the Settings tab of the resulting web page, scroll down to Channel Join & Leave Messages, and hit the Expand button. Finally, if the Show a message when people join or leave channels checkbox is checked, un-check it and then hit the green Save button.

Screenshot of unchecking the described checkbox.

I find the default behavior of this feature well-meaning but subtly harmful. In theory, it makes sense to know when people join a conversation, or when they’ve moved their attention along to other topics. But this, I believe, over-applies physical-world thinking onto the different assumptions of purely online spaces.

While an automatic join-message does have marginal utility, letting others in the channel greet the newcomer without requiring any further introduction, I see only drawbacks in automatically announcing departures. People should have the ability to quietly slip away from a conversation. By instead making every departure conspicuous, a person leaving a channel will at best cause a reaction among those they left behind of quiet surprise and momentary confusion. Some will feel mildly hurt, wondering if the person felt unwelcome, and whether they may have accidentally played a hand in that. Should they reach out and apologize? Is that assuming too much? It becomes a source of small and unwelcome anxiety.

The nadir of this phenomenon happens during more intense conversations, when emotions may run a little higher than normal. This tension happens naturally from time to time in any space populated by people who care passionately about some topic, whether professional or hobbyist. It presents a time when all participants need to navigate carefully to keep things cool. In these situations, a computerized voice butting in to announce a departure resonates like a slamming door.

Too many times I’ve seen an automated message turn up an already heated conversation’s intensity by whole degrees, all by itself. No matter what reason the person had for exiting—maybe they need a quiet breather, maybe they just don’t feel invested in the topic at hand—it becomes far too easy for everyone else to imagine them leaving in an angry, disgusted huff. People already upset can even overtly weaponize these messages: “Now look what you did, you’ve driven off [So-and-so]! I hope you’re satisfied.”

The presence of automated departure messages carry an equally harmful second-order effect for those aware of these problems. If I know that my leaving a channel will likely be seen by others as a noisy storming-out, I will probably choose to stay so as not to make a tense situation worse. And that feels miserable! The best I can do for my own mental health is to put that channel on mute, which often seems disingenuous to everyone else involved, and still keeps a conversation I no longer wish to see just one click away.

Deactivating this Slack misfeature removes this entire bind, freeing people to leave public channels with fewer hurt feelings. While it also gives newcomers the burden of manually introducing themselves (or being introduced), this feels like a small price for the vast relief brought about by changing this setting.

Help keep your Slack workspaces cooler, calmer, and better ventilated. Please turn off your join & leave messages.

Share or reply to this post on Twitter, or elsewhere.

A nerdy but necessary announcement: I have migrated all IRC-based presence for myself and my projects from Freenode to Libera Chat. This means that I have registered the jmac nick on this newer network, and I have updated Whim and Plerd to refer to Libera Chat’s #whim and #plerd channels, respectively.

These migrations come after Freenode’s sudden and unwelcome change of management earlier this month. This article summarizes the situation fairly well, including a brief description of Libera Chat, the overwhelming favorite new home for most late-of-Freenode projects I pay attention to. I learn that it is organized as a nonprofit corporation, which already makes me feel more hopeful about its ongoing health.

Over the years I’ve seen many half-hearted and temporary “mass migrations” from one social network to another in protest of some new policy or misstep, so I initially thought I’d wait this one out. But then, Freenode’s new owners wasted no time making a number of surprising and disappointing actions that ran entirely against the network’s long-standing ethos, including dismantling Freenode’s code of conduct, and automatically hijacking and reconfiguring any channel that announced a Libera Chat migration. I find these actions so odious that this situation does seem like a special case that deserves immediate reaction.

Freenode provided the soil that so many wonderful open-source projects grew in, over the first two decades of this century. I feel so sorry to see the noble, scrappy IRC network forced into such a sudden and undeserved retirement. My respect and gratitude goes out to all the volunteers who ran it so well for so long. It was a fine public service.

Share or reply to this post on Twitter, or elsewhere.

An apple watch.I cannot deny how my blogging pace has evinced quite a slouch, lately. I months ago fell behind my long-held mandate to post one article per week four articles per month. It feels pedestrian to say that I haven’t had the time, so I’ll instead say that my life has felt thick with good things lately, and they are all happening at once. Sometimes it works out that way, and if I did have more wherewithal to write, I would write no complaints.

In January I wrote a post called “I got a job”. One week later I actually started that job—and I would write only a couple of posts per month thereafter. I now spend a few hours every day researching peculiar technology and then writing descriptive documentation about it. I feel so good about this career shift; I put my all into it! And after I wrap my daily labor—well, writing more, even if for myself, doesn’t carry the same level of personal-fulfillment priority that it did before.

A poor excuse, of course, and an incomplete one: I know that I have to learn to balance my time again, returning to the salaried life after more than 15 years away. I’ve also found other activities to fill my downtime—including fighting every day to keep our pandemic-worn apartment clean and decluttered, and spending significantly more time with exercise and meditation.

An Apple Watch I purchased in February guides me through these latter activities; yes, I have become a thrall to Closing the Rings. A newer “Series 6” model, this is my very first smart watch or wearable fitness tracker of any sort, so I get to skip right into the fruits of this technology’s many years of public development. I have to say I like this little glowing wrist-critter very much.

What’s more, it came with a three-month trial subscription to Fitness+, essentially a streaming service for Apple-produced workout videos that lightly interact with the watch, displaying your heart rate and such in an on-screen overlay. That trial ended today, in fact, and I have gladly paid the eighty bucks for another full year of it.

I visit my fitness-trainer “friends” most every day, letting them lead me through HIIT and yoga in 10- to 30-minute sessions. Just like I felt a weird, sweat-induced intimacy with Wii Fit’s animated trainer a decade ago, I have come to know Apple’s actual-person coaches by their names and on-camera personalities. I’ll talk to my wife over lunch about the shade that Kim threw at Bakari that morning when his lateral-lunge form got a little sideways. After years of using only my own homemade workout program, I felt very ready to hand it over to professionals for a while. I’m into it.

So these daily workouts—plus additional hour or so I clomp around the park every evening to hit my wrist-mounted 750-calorie goal—take up yet more time. I regret none of it! The little gadget’s guidance makes me feel more confident that I’m treating my body the way it wants, and that feels great. It just comes back to me to sit that body in a chair a few times a month and write something longer than tweet-length in public—even if I have to treat this, too, as a kind of workout, where once I practiced it as pure pleasure.

I want to tell you about some of those other good things going on! And they’ll have to wait for my next interval at the keyboard. Right now it’s 11:15 PM, and my watch’s red Move ring wants 95 more calories burned up before midnight…

How to respond to this post.

Cover of Babel-17Babel-17 was my first Delany novel, and long overdue. I liked it a lot!

From the start, it reminded me of the Wachowskis’ Jupiter Ascending in the best ways. I have no doubt at all that Delany himself knew the difference between a star and a galaxy while writing this book, but the book itself does not split any such hairs. Such intentional confusions laid down early on set a tone of wondrous and unworried exploration of a deliciously strange universe.

Protagonist Rydra Wong fits a hypercompetent character archetype that doesn’t usually interest me. But in this case, I found myself quite charmed by the played-straight absurdity of her expertise: a poet of intergalactic reknown, a preternatural empath, a stunning beauty, and an ace starship captain, all while qualifying for a “30 under 30” list. With a name I only now realize might be a play on “right or wrong”, she blazes a trail that Buckaroo Banzai would follow almost two decades later.

Hired by the Handwavy Space Navy to research an alien language linked to interstellar sabotage, Rydra assembles a crew to find answers among the stars. She gathers this crew over a single night of wild partying, climaxing in a sort of bathhouse-arena where she chooses the best pilots after watching them struggle sweatily in nude zero-gee grappling games.

This book was written in the mid 1960s and it’s fantastic.

By the next morning, you see, she has built a crew utterly posthuman in both their individual physicality and their mutual interrelation. If I comprehend correctly, spaceships in Rydra’s world are powered by the lovemaking of bisexual thruples. The bulk of any crew comprises a platoon of rambunctious teenagers overseen by a nursemaid whose name is always “Slug”. And, naturally, the ship’s sensor array is run by a trio of discorporate entities, whom the book’s world refers to as merely “dead”, complete with a penchant for gothic imagery. I understood the author as doing his best to describe mind uploading without either himself or his 1966 readership having a ready vocabulary for it.

Once the plot really kicks in, and we start learning more about the mysterious, eponymous alien language, the more recent science fiction story that this novel foretells shifts solidly to Ted Chiang’s “Story of Your Life”—best known as the basis of the film Arrival. Babel-17, the language, is a hyper-compressed construct that can express staggeringly complex ideas in a handful of symbols. (I assume that Delany took inspiration from real-life “philosophical language” experiments of yore.) As Rydra teases its grammar apart, she starts to think like its speakers.

But unlike the gradual, emotional revelations that Arrival’s heptapods bring, thinking in Babel-17 gives you superpowers by overclocking your brain and helping you see the patterns undergirding all of reality. Rydra, caught in a net-like trap, touches it just so and it unravels. Later, she applies the exact same principles to break through a metaphorical net of attacking enemy spaceships. But, of course, doing that too much is bad for a merely human brain, and none of this gets her closer to her goal, so that’s her work cut out for her. And even though her ultimate discovery becomes arguably one of the few truly dated facets of this novel, I still found it satisfying and delightful.

The 2014 edition I read appears to be part of a set of Delany reprints by Open Road Media, each with an attractive cover by Michel Vrana and a lengthy, uncredited biography of Samuel R. Delany’s whole life and career so intimate in tone that I wonder whether it came from the author himself. All the books in this collection are well represented in both of the public libraries I have ebook access to, and I shall not hesitate to continue my explorations through them.

This article was also posted to the “books” section of

Share or reply to this post on Twitter, or elsewhere.

I awoke today to the news that Perl’s long-time lead maintainer, Sawyer X, has resigned from the project. I wish to briefly and publicly express my gratitude for all he has accomplished for Perl over the years—and, unbeknownst to him, how he has positively affected my own life as well.

Sawyer had performed the crucial (and entirely volunteer) service of leading Perl’s technological development for many years, as well as acting as a public face and ambassador to the project at conferences and online events. However, I see one of his most important actions as one that stood apart from either of these roles: in late 2020, he co-founded the Perl Steering Council, a new, multi-person executive body that guides the Perl project’s ongoing direction.

One benefit that PSC brings to Perl, demonstrated today, is that the project can survive the sudden absence of one leader without becoming headless. While Sawyer’s departure feels like a blow in some ways, I also feel relieved knowing that PSC will keep the project afloat through any coming transition—and I feel grateful for Sawyer at making sure the council began to operate in full authority before he left.

As for how Sawyer’s work affected me personally: In the eternity-ago of February 2020, I noted a grant proposal I’d made to The Perl Foundation. It had its inspirational roots in an address that Sawyer had delivered to 2019’s annual Perl Conference, which laid out a number of challenges that the Perl community had to face in order to keep the language relevant and approachable—with better documentation chief among them.

My long-time friend and colleague Adam watched the same address, and encouraged me to answer that call. I ended up corresponding directly with Sawyer on the topic, where through email and video calls we hashed out the right project-scope I should seek. He insisted I think small, aiming for far more modest and achievable targets than I, straining the leash, had initial patience for. Of course he was correct, and that grant proposal to fix the documentation for a single function proved exactly right-sized for a lead-in project.

And that led to the style guide project, which led in turn to two parallel follow-ups: my own nascent leadership of Perl’s documentation project, and my first full-time job as a technical writer. I haven’t written much in public about either of these developments yet; the first remains under construction, and the second—well, that’s just my day job now. But three months in, I couldn’t be happier with the complete career transition it represents, and I have our Mr. X to thank for that.

So: thanks for everything, Sawyer.

Share or reply to this post on Twitter, or elsewhere.

Previous post: Bah-d’dah-dah, don’t you miss it