This page contains the full text of all of my blog posts. If you have any questions or comments, please email me. Thanks for visiting.

a Phishing Attempt for PayPal Users

Wed, 17 Aug 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/paypal-phishing-attempt-20220817.html


Got another phishing attempt by SMS today. This time it claims to be about PayPal. I mean, even if it really were PayPal threatening to lock my account I wouldn’t give a shit because that isn’t my primary payments system.

Cash is.

Nevertheless, here’s a screenshot in case you’ve seen something similar. The real PayPal isn’t going to send you texts like this.

a screenshot of a phishing text message

The real PayPal might use better English, too.

back to top

The Magician and the Parrot

Mon, 15 Aug 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/magician-parrot.html


The macOS version of fortune installed with homebrew coughed up this joke, but without attribution. It was good for a chuckle so I thought I’d share it here.

It seems there’s this magician working one of the luxury cruise ships for a few years. He doesn’t have to change his routines much as the audiences change over fairly often, and he’s got a good life. The only problem is the ship’s parrot, who perches in the hall and watches him night after night, year after year. Finally, the parrot figures out how almost every trick works and starts giving it away for the audience. For example, when the magician makes a bouquet of flowers disappear, the parrot squawks “Behind his back! Behind his back!” Well, the magician is really annoyed at this, but there’s not much he can do about it as the parrot is a ship’s mascot and very popular with the passengers.

One night, the ship strikes some floating debris, and sinks without a trace. Almost everyone aboard was lost, except for the magician and the parrot. For three days and nights they just drift, with the magician clinging to one end of a piece of driftwood and the parrot perched on the other end. As the sun rises on the morning of the fourth day, the parrot walks over to the magician’s end of the log. With obvious disgust in his voice, he snaps “OK, you win, I give up. Where did you hide the ship?”

If this is your joke, please email me so I can give credit.

back to top

Shadowbanned

Mon, 15 Aug 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/shadowbanned.html


“Wait. Nobody can see or hear me?” The President stared at the Prime Minister in utter credulity.

“That’s not quite the case,” said the Pontiff. “They see and hear me, but to them I’m just an old man in a funny hat. They only see the man, not the office he occupies.”

“But how has society not fallen apart without us to guide them?”

“Maybe they never really needed us in the first place?” suggested the retired CEO. “So they shadowbanned us from society.”

back to top

RE: Static Site Generators

Mon, 15 Aug 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/re-static-site-generators.html


Kev Quirk is of the opinion that it’s hard to manage content with a static site generator, therefore WordPress is better. I’m not entirely sold, but he makes some valid points:

  • static site generators are generally made for developers who happen to write
  • most people have no experience of uploading files to a host
  • some static site generators require too much metadata
  • while content management systems for static site generators exist, they aren’t easy to set up
  • static site generators themselves aren’t necessarily easy to set up

Let’s consider Jekyll as a case in point. If you already have a functioning Ruby environment and you’re already using Ruby gems and bundler, then installing and running Jekyll isn’t a big deal. If you’ve got to set up a Ruby environment before you can even install, configure, and run Jekyll you’re gonna have a bad time.

Kev also references a post by Florens Verschelde from 2018 about static site generators being terrible at content management.

Static site generators are elegant on principle, but are not designed to deal with content more complex than a handful of pages and a list of blog posts. And I’m not talking about the speed of building hundreds of pages or more (Jekyll is notoriously slow, Hugo is fast), but the sheer ability to use content however you want.

Florens isn’t wrong here. Nor is he wrong about this, even though his wish list for a better CMS would only make sense to other developers.

When I’ve used static site generators in the past ten years, there were a few pain points like lacking documentation and strange and incompatible conventions. But the nail in the coffin was always that it’s either impossible or way too hard to build a single page from several pieces of content.

However, I’m not convinced that existing content management systems are much better. Admittedly, the only major CMS with which I’m familiar is WordPress. It’s supposed to be easier for users, but I don’t believe that’s the case. If Automattic wasn’t providing hosting for WordPress, and if hosts like Dreamhost didn’t provide hosting for DIYers with a one-click install, would people who have trouble working a command line interface be able to install WordPress themselves?

  • Would they be able to set up Apache or nginx?
  • Would they be able to set up PHP?
  • Would they be able to set up MySQL or MariaDB?
  • Would they be able to run WordPress’ installer and configure everything properly?
  • Would they be able to keep WordPress and its plugins current so that they are less vulnerable to attack?

I think Kev has similar blind spots regarding WordPress that he accuses SSG fans of having with their preferred approachi, because he is familiar with and happy with WordPress. I think he’s forgetting that WordPress is easier than a SSG if all you have to do to get it running and keep it updated is click a few buttons and be careful about which plugins and themes you install.

Knowing how to safely run a WordPress installation (as in without getting easily pwned) is something a sysadmin or developer can reasonably be expected to know or be able to figure out. Most would-be bloggers don’t also want to be sysadmins or developers.1

If you’re wondering why the Web is fucked, I think it’s because if you want to fully participate by having your own website, you’re eventually going to have to become your own sysadmin, a developer, or both. The Web was made by UNIX people, for UNIX people, and most people for whatever reason don’t want to deal with UNIX.

I don’t mind dicking around with shell scripts, makefiles, and command-line tools like pandoc and xsltproc to build this website because I’m nucking futs2. Compared to the headaches I deal with at my day job3, this is practically a vacation.

Most writers, artists, musicians, etc. aren’t going to become techies in order to participate in the Web as first-class citizens with their own websites because they don’t want to. Nor will people who just want to argue with strangers about the latest sociopolitical cause celebre. Unfortunately, it doesn’t matter if WordPress is “easier to use” than a SSG; most people would rather just use Twitter, Facebook, or Reddit if they write, or post images and video to Instagram, Snapchat, YouTube, or TikTok.

These data harvesting tools don’t require computer literacy or much from their products in the way of technical prowess by design, and the people who think they’re using these apps and either don’t realize or don’t care that they’re being used are fine with that.

Most people aren’t even minimum viable users for WordPress, let alone static site generators. This is especially the case now that Automattic has decided to turn WordPress into a site-builder app like SquareSpace or Wix4. According to OECD research in 2016, 26% of the adults they tested can’t use a computer.

I have no idea how to fix that, but unless we do both static site generators and content management systems like WordPress are going to be inaccessible to the vast majority of people. As long as that remains the case there will remain a market for the likes of Facebook, TikTok, YouTube, Substack, Medium, etc.


  1. And I don’t blame them. I only do it because it pays better than scrubbing toilets in supermarkets.↩︎

  2. I’m still not clear on whether mental illness is an occupational hazard for techies or a prerequisite for becoming one.↩︎

  3. For my sins, I’m a web developer using Microsoft tech and the JavaScript framework du jour.↩︎

  4. I understand that there are a good many people who like Gutenberg and the block editor, and that is fine. I’m just not one of them. Let people dislike things.↩︎

back to top

Holy Smoke

Fri, 12 Aug 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/holy-smoke.html


I recently read an article about an attempt to murder the novelist Salman Rushdie, author of The Satanic Verses (1988) and other novels, and I am this close to straying past high dudgeon and into Homeric rage. According to the Associated Press:

An Associated Press reporter witnessed a man storm the stage at the Chautauqua Institution and begin punching or stabbing Rushdie as he was being introduced. The author was taken or fell to the floor, and the man was restrained.

It wouldn’t do to speculate on the attacker’s motives, but Rushdie has had a price on his head ever since 1989, when Ayatollah Khomeini issued a proclamation to the effect that his novel, The Satanic Verses was an unforgivable offense against Islam and must be punished by the author’s death. While the Iranian government has officially distanced themselves from the late theocrat’s decree, a private entity in Iran is still offering over $3 million to anybody who can assassinate Rushdie.

Frankly, this pisses me off. And it also reminds me of an song called “Holy Smoke” from Iron Maiden’s 1990 album, No Prayer for the Dying.

Jimmy Reptile and all his friends
Say they gonna be with you at the end
Burning records, burning books
Holy soldiers, Nazi looks

preview image for YouTube video ID xPV4jlOlWjA
Iron Maiden: “Holy Smoke” (official video) (click to view)

You might wonder why I’m comparing a would be assassin of authors to Nazis, and that’s not unreasonable. The thing is that the people who would burn books are happy to burn the authors as well given the opportunity.

I see no difference between the people who try to ban books like Gender Queer: a Memoir from school and public libraries, people who burn books, and people who try to silence authors through intimidation, harassment, legislation, or outright violence.

I know that many people will insist that it’s only censorship if the government does it, and that the First Amendment only applies to the government, but I think that’s the sort of loophole that can get people killed. Admittedly I’m writing out of self-interest since I’m an author myself, but I honestly don’t think book burning or attacks on authors is something a society worth preserving should tolerate.

Instead, we should burn the book burners. To quote Iron Maiden again:

Feed ’em in feet first
This is no joke
This is thirsty work,
Making holy smoke

I see no reason why we should tolerate self-righteous assholes who think it’s acceptable to police what other people read, watch, listen to, etc. Nor do I think we should feel obligated to tolerate people who think their ideals justify attempts to silence creators.

One might argue that burning would-be book burners and assassins of authors is as intolerant as burning books and assassinating authors, but I say, “so what?” If you’re so open-minded that your brain falls out and you end up tolerating intolerance, you’ll find yourself living under a totalitarian regime and wondering if the secret police are gonna kick down your door one fine night1. Karl Popper called this the “paradox of tolerance”.

preview image for YouTube video ID d_R9UjFTcWk
Philosophy Vibe: Karl Papper and the Paradox of Tolerance(click to view)

However, I prefer the Dead Kennedys’ approach: “Nazi Punks Fuck Off”.

preview image for YouTube video ID urAmtStlwfQ
Dead Kennedys: “Nazi Punks Fuck Off” (live, 1984) (click to view)

Why bring up Nazis and the Dead Kennedys? Because time is a river and history repeats. Every time we think the debate over freedom of expression is settled, we get complacent and end up with a new infestation of cultural vigilantes, to borrow a phrase from Dead Kennedys vocalist Jello Biafra’s 1987 article in the Harvard Law Record. He has more to say on the matter:

Censorship is like that certain brand of potato chips. Nobody can stop with just one. Well-organized and financed pressure from the far right has already dealt a serious blow to what we see, read, hear - and ultimately think. People once viewed as dangerous right-wing extremists have succeeded in casting themselves as spokespeople of the American mainstream. In their world music and literature can be judged harmful, yet Star Wars is considered perfectly safe. And genocide squads like the Nicaraguan contras are “the moral equivalent of our founding fathers.”

Libraries and textbooks are under new attacks in schools. Many gifted artists now face possible blackballing. Urinalysis and lie detector tests at work are actively being promoted by the Reagan Administration under the continuing guise of a drug scare. Attorney General Edwin Meese has used a wildly-contrived “study” of “pornography” as the first step in a crusade to widen the crackdown on free speech. His commission threatens magazine retailers through extra-legal manuevers such as threat letters, while he strives to pack the federal court system with avowed enemies of Constitutional liberties.

A fresh PMRC media blitz again has them in the news, with new censorship via warning label proposals. Their tone is more concilitory now, with their more volatile edges temporarily masked. They compare the rock music they deem “objectionable” to the violence on television many of the rest of us have problems with, yet they still concentrate their attack on one form of music - rock - and barely address the issue of television at all. What about all the families bombrded every night by the violence seen on the six o’clock news?

History has shown us that any compromise with cultural vigilantes just encourages more of them to go further. The hysteria sparked by the PMRC husbands’ Senate hearings is what gave Jimmy Swaggart’s views front page respectibility in the first place.

The rationale behind freedom of speech has always been that truth emerges out of open debate. Democracy assumes a variety of voices, each trying to persuade the other. Dissent is healthy, even when presented in a a manner which may seem abhorrent or obscene to those who fear direct confrontation with the reality that surrounds us. Only an informed population can make responsible choices.

I thought Jello Biafra was right when I read a zine called “No More Censorship” in the early 1990s that featured his writings2. I still think it’s true.

If you give fascists and fundies an inch they’ll take a mile. The only space they deserve is a shallow grave. I won’t say there’s no such thing as a good authoritarian; you’ll probably find at least one in your local cemetery.


  1. Unfortunately, because of the War on (Some) Drugs and the existence of “no-knock” warrants, this is already a reality for entirely too many Americans.↩︎

  2. At least, that’s what I think the zine or pamphlet was called. Feel free to correct me.↩︎

back to top

Cicadas

Wed, 10 Aug 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/cicadas.html


buzzing crescendo:
cicadas all networking;
somebody is wrong

back to top

The Village Voice Isn’t Really Back

Wed, 03 Aug 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/village-voice-isnt-really-back.html


I’m not too impressed with the new Village Voice, which started up in 2021. The old Village Voice (1955-2017) was an edgy alt-weekly that aimed for integrity, not respectability. The new version provides archives of the original, and reporting in a similar tradition. However, there’s something vile lurking underneath. You’ll see it if you access the site’s RSS feed.

There are only a dozen or so articles in the feed, none older than August 1st. That’s not necessarily unusual, but I always prefer a feed that provides all articles back to the beginning (ideally in full text, size be damned).

What I found strange is that most of articles in the feed are best described as “advertorial” or “sponsored content”. Articles by “Amir Bakian” is labeled as “partner content from Ascend” and bear titles like…

  • Sole Seriouss Acts as Industry Leader by Offering User-Friendly Platform for Collectors to Buy Sneakers and Streetwear
  • Young Business Guru Saahil Chathrath Inspires Others With His Journey
  • Bayron Camacho Shares On The Latest Digital Marketing and Sales Tactics
  • Trailblazing Content Creator Chris M. Christian AKA SmokeScreen Shares His Journey to the Top

This is bad enough, and hardly the Village Voice that I would grab and read as a young man whenever I visited New York City. There are also these articles by somebody named “Alexa Domash”:

  • 6 Best Sites to Order Essay Papers Online (Cheap and Custom)
  • Best research paper writing services: top 5 website to buy research paper help
  • 17 Best Sites to Buy YouTube Views and Subscribers (Organic & Easy)
  • 5 Best Sites to Buy Twitter Followers and Likes (Real and Cheap)

None of this is labeled as “sponsored content” but these are clearly advertisements for services many people would consider to be at least as shady as some of the classic Village Voice’s personal ads.

Here’s the really shady part, though: If you search the new Village Voice website for “Alexa Domash” you won’t find anything. Search instead for “Brand Partner Agency” and you’ll get 9 pages of results. Likewise, all of the articles attributed to “Alexa Domash” in the RSS feed are attributed to “Brand Partner Agency” on the website if you look them up by title.

What the hell is LA Weekly owner Brian Calle doing with the Village Voice, which he re-opened in 2021? I smell a rat.

back to top

Gloomy Monday Thoughts About Computers

Mon, 01 Aug 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/gloomy-monday-thoughts-about-computers.html


Today being the first day of autumn in the old Celtic calendar, and a gloomy Monday to boot, I find myself having some gloomy thoughts about computers.

  • Computers as we know them today, Turing-complete programmable Von Neumann machines, have their origins in World War II. Early examples include the Z3 and Colossus (used at Bletchley Park to crack Nazi communications). They were weapons, albeit esoteric ones operated by REMFs far from the front lines.
  • One could argue that the history of post-WWII computing is the history of the search for civilian applications for computers, making them useful for tasks beyond aiming artillery, cracking enemy communications, and building atomic bombs.
  • Computers are still weapons, even when used for peaceful tasks. An informational war rages all around us, a multilateral dogfight involving nation-states, corporations, criminal syndicates, and individual actors. It’s often all a non-combatant like me can do to avoid getting dragged into this mess.
  • It may be possible to frame the necessity for Free Software in terms of the Second Amendment to persuade right-wing types who might otherwise view FOSS as a leftist conspiracy, but at what price?
  • Perhaps I should be grateful that computers don’t commonly come in camoflage.
  • Because computers are weapons, it is easy to dismiss the ACM’s code of ethics as a hollow farce, which many techies seem to do if they’ve even heard of it in the first place. Hell, I probably don’t live up to it myself, and I should probably feel guilty about that but ethics don’t pay the rent.

There are all sorts of implications, many of them nasty, and I’d rather not think too deeply about them because my day job depends on my willingness to program computers instead of taking a sledgehammer to every FCC Class B computing device in reach while staging a one-man Butlerian Jihad. After all, a single exasperated man with a blunt instrument does not a Luddite revolution make.

Nevertheless, even if this seems like heresy coming from somebody like me, computers may have been a bigger mistake than the development of nuclear weapons.

back to top

Learning Vue.JS

Fri, 29 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/learning-vue-js.html


I was recently approached by the current managers of a project I once worked on for my current employer. They want to modernize it from the ASP.NET web forms application I had helped build into an application that uses Vue.JS on the client side and talks to a REST API. Since my resume says nothing about Vue, they’ve asked me to learn it.

The problem is that they’ve asked me to go through a 32 hour ûdemy course that’s mostly video. I absofuckinlutely loathe it, even though I don’t have to pay for it myself.

I honestly tried to sit though this course, but if I wanted to sit through hours on end of some guy talking about a recondite topic I’d play Metal Gear Solid. Yes, there are breaks for exercises and little assignments, but the exercises provided are of no interest to me. I’m too damn old to be doing homework.

It’s not the presenter’s fault. He knows the material, and he does a good job of presenting it in a manner suitable for beginners who respond well to video. The problem is that I am not a beginner, merely an experienced developer who isn’t familiar with Vue.JS yet, and I am certainly not somebody who learns by watching videos.

I’m old-fashioned: I learn by reading and tinkering. It’s how I learned C, UNIX, and everything else I know as a developer, and I think this approach still serves me well today. But perhaps these managers prefer video, have other developers under them who prefer video, and think me the same.

Nevertheless, I’m determined to gain some proficiency so that I have a JS framework in my toolkit that wasn’t developed by Facebook. Therefore, I’ve got a little page for Vue.JS projects. As of this writing I only have a little demonstration of the Pythagorean theorem, which can also be used to calculate a display’s diagonal, but I have a few other things in mind.

Feel free to email me if you can suggest any other small-scale exercises.

Incidentally, I rather resent being given a homework assignment as a precondition for being considered for a project at a company where I have worked for over a decade. It feels like an insult, and like this project’s managers don’t trust me to do whatever it takes to become an effective contributor.

Though perhaps I’m being a bit of a prima donna and need to dial it back before somebody drops a chandelier on my head.

back to top

Random Thoughts on Game Streaming

Thu, 28 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/random-thoughts-on-game-streaming.html


I don’t stream.

I don’t watch other people’s game streams.

I don’t stream because I don’t see the point of turning my recreation into a performance for strangers on the internet – let alone trying to monetize such recreation.

I don’t watch other people’s game streams because if it’s a game I’m interested in, I’d rather play the game myself.

I’m normally content to live and let live when it comes to streaming. If other people are streaming a single-player game, that’s their business. If they’re streaming a multi-player game, that’s different.

Consider Final Fantasy XIV as a case in point. It’s a MMORPG that’s basically a mashup of everything FF fans love from the various single player games: an all-you-can-eat buffet of melodrama, evil empires, heavies in baroque armor giving grandiose speeches about the necessity of humanity wresting control of their own destiny from the gods, justifiable decide, big fucking swords, flashy magic, and a never-ending fashion show1.

I’m still convinced the whole thing is an elaborate pastiche on Michael Moorcock2, and I’m there for it even though it’s multi-player and I’m generally not the sociable type.

However, something strange happened last night during a dungeon crawl. One of the other players addressed me on party chat and and asked me why my character’s hair was short – and why she wasn’t wearing glasses. They remembered my character’s hair being much longer. I didn’t know them from Adam, and I tend to recognize players if I’ve run with them often enough, especially if they have a memorable name or stylish outfits.

I told them the truth; I felt like changing up my look. I do that sometimes, because why not? If you’re playing a MMORPG with custom character creation you’re basically playing with dolls, so why not own it and have some fun? I then asked if we fought together before.

We hadn’t. They had seen me in a stream. I don’t recall ever playing with streamers, or consenting to be in another player’s stream, so being recognized from a stream is just a bit disconcerting – even if my character looks like she’d be more at home at a Type O Negative concert than a generally upbeat and optimistic JRPG.

You might think it’s weird and unreasonable to be uncomfortable with this because I use my real name on the web. That’s a fair point, but FFXIV is something I do to chill. I don’t use my real name there, though using the name of a character from my fiction probably isn’t great OPSEC either.

Nor is there necessarily an expectation of privacy in MMORPGs. But when doing multiplayer content with random players, you never know when you might be playing a supporting role in somebody else’s stream. I’ve never had a streamer ask me if I wanted to be in their stream.

It would be nice if they did ask. I’m not going to quit a dungeon I’ve already started because one of the player’s is streaming; that wouldn’t be fair to the other players because they’ve got to wait for the game to find a substitute. Trust me, it’s no fun to have to wait for a new tank or healer because the one you started with got disconnected or quit in a huff3.

You might thing you can stream multiplayer without consent because I won’t walk out on you, but that’s not the case. If I find that somebody has been streaming, and that I’m involved in their stream without having consented to being streamed, I will blacklist them so that I’m not matched with them in future multiplayer sessions.

And if you think that’s unreasonable, I can always initiate votes to kick out streamers in the middle of dungeons. I’m reluctant to use that feature unless another player’s behavior is egregious, lest FFXIV’s management think I’m being an abusive or toxic player, but I think streamers really should be more respectful of other players’ boundaries.

If I wanted to be in a stream, I’d get my own stream. I’d call it “Matthew Fails Video Games Forever”, and I’d treat my viewers with utter contempt because I have a day job and don’t actually need them.


  1. Glamoring your equipment (or “glam”) is FFXIV’s true endgame, but you can start participating long before you’ve reached max level or caught up on the game’s story.↩︎

  2. Particularly his Hawkmoon novels, because so many of the game’s Evil Empires are reminiscent of Granbretan; the Garleans even have jewels embedded in their foreheads, and if Garleans ever become playable you can bet your ass somebody will have a character named “Dorian Hawkmoon”.↩︎

  3. The game penalizes this sort of behavior, but that doesn’t stop some players from rage quitting if the other players in the group ask them to do basic things like turning on tank stance to draw the enemies attention or not waiting until the tank is on death’s door before casting a single healing spell. For that matter, I’ve seen offensive players not use group attacks despite the tank being surrounded by a dozen enemies, and then get upset when asked to adjust their tactics to suit the situation.↩︎

back to top

Little Changes

Wed, 27 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/little-changes.html


First, I’d like to thank Bradley Taunt for mentioning me in his latest update for pblog. He’s made some changes to his script that will make building starbreaker.org a bit easier, but I’m taking things further still.

  • my version of pblog.sh takes the name of a config file as an argument
  • my config file has an $ENTRIES_PATH and $ENTRIES variable that can find posts in a particular directory
  • my version of pblog.sh doesn’t build posts or pages at all
  • posts and pages are built in the makefile, so that posts and pages that haven’t been modified since the last build remain untouched, further boosting performance

All of these changes will allow me to make a more complex website than the straightforward blog pblog was designed to create. For example, if I wanted to create a microblog for heavy metal videos with its own RSS feed, that’s going to be a lot easier.

Also, this site now has a full-text post index. It will eventually exceed one megabyte in size, and if I keep writing enough posts it might even exceed ten megabytes, but it’s just HTML so it should compress nicely. Still, if you’re on a crappy connection you might want to stick to the regular index.

back to top

Building a Site for My Fiction with ‘pblog’

Tue, 26 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/building-site-for-my-fiction-with-pblog.html


I’ve run into a few snags while building a new version of starbreaker.org using pblog. If anybody is curious, I’ve got a git repo on Sourcehut.

  1. The main pblog script expects all pages to be in /pages, and doesn’t copy subdirectories under /pages to _output.
  2. pandoc doesn’t seem to support Fountain, a Markdown-style markup language for screenplays.
  3. I want to have both a blog and multiple serials, each with their own RSS feeds.

Calling rsync with the right switches will probably solve the first issue. I just need to RTFM and tinker a bit to figure out what they are.

While pandoc doesn’t have native support for Fountain, it can be extended using Lua scripts. The Github project for pandoc includes a repository for a Lua-based extension called pandoc-fountain, so I need not write my own extension.

The third problem is the complicated one. If all I wanted was a blog with all of its pages in the site’s root, pblog would do the job admirably. It’s got just about everything you need in one script, with a makefile playing a supporting role. However, Bradley Taunt didn’t have my use case in mind when he wrote pblog, and that is perfectly fine. Really, it is. Just as literature ain’t Burger King, neither is FOSS.

I should be able to use the pblog.sh script as the basis for my own scripts. For example, I can modify it so that it reads variables from a separate file, thus making it configurable and capable of generating multiple RSS feeds from different sources. This would allow me to have a blog with a separate feed from the serial I’ve started writing.

Before I get started, though, I should ask Bradley why pblog.sh builds posts twice, creating HTML files in a rss/ directory while also creating HTML files in /posts. If I could upload the same HTML that gets used to make the RSS feed, I could refactor more functionality out of pblog.sh and put it into the makefile.

Also, it might be worthwhile to get rid of the _output directory. python -m http.server can also serve the directory in which the makefile lives as http://localhost:8000, and if I don’t want to upload my source files I can create an exclusion file and pass that to rsync.

back to top

Still Derisive About Marketing

Mon, 25 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/still-derisive-about-marketing.html


WARNING: This is a (possibly disjointed) rant about marketing. Read at your own risk.


I saw this tweet from John Carmack today..

I remember feeling derisive about marketing as a young techie — it wasn’t creating the value. Nowadays, I often marvel at how much amazing value is present that people just don’t know about. If only there was a way to bring it to their attention…

…and I have some opinions that I’m not going to bother hiding behind a <details> element.

Admittedly, this is Twitter. Expecting nuance and substantive examples in 140-280 characters is a fool’s errand. Nevertheless, where’s the beef? What “amazing value” is Carmack talking about? Even if it’s valuable to Carmack, why does he think it’s valuable to anybody else?

For example, you might want to hear that $BAND has a new album coming out. You might even appreciate a push notification bearing that information. If I’m not into $BAND, I would instead regard such a notification as spam and entertain idle, murderous thoughts about how Vlad Tepes would know how to deal with the people trying to “bring to my attention” the “amazing value” of a new $BAND album.

In fairness, you’d probably feel the same way if I had gone back to commercial publishing, put out a new novel, and hired somebody to tell anybody who might possibly give a shit (or at least rip a half-decent fart) about my crap. If you saw ads for my next novel, you too might wish that Vlad the Impaler would deal with me as he once dealt with invading Turks, criminals, and people who text at the theater.

Don’t tell me about the value of advertising, marketing, or public relations. It’s all bullshit.

preview image for YouTube video ID AtK_YsVInw8
George Carlin: Advertising and Bullshit (click to view)

There’s a reason people like John Carmack change their minds about the value of marketing and become less derisive: they have shit they want to sell. The consent manufacturing machinery they once derided is now useful to them. They have bullshit of their own to push.

Likewise with the notion of “relevant ads”. I’ve seen ghosts. I’ve seen demons1. I’ve seen Jesus H. Christ test-driving the hotrod he built for Al Jourgensen with Mary Magdalene riding shotgun2. I’ve never seen a relevant ad.

I’ve seen techies try to decide what’s relevant for me, however, but only I can decide that for myself. Besides, these are the same bunch of ignorant shitfountains who think that human social interactions and relationships can be reduced to third normal form. They don’t seem to get that the mere fact that I looked at a product listing does not and should not be taken to mean that I have any intention of actually buying it3.

I remain convinced that Bill Hicks was right about adverting and marketing; there’s nothing wrong with either that can’t fixed by setting up a suicide encouragement hotline for its practitioners.

preview image for YouTube video ID tHEOGrkhDp0
Bill Hicks on Marketing (click to view)

What John Carmack and anybody else who believes in the power of advertising and marketing should understand is that advertising and marketing are processes for the engineering of consent.

“The engineering of consent is the very essence of the democratic process, the freedom to persuade and suggest.”

~Edward Bernays

preview image for YouTube video ID ujuFICI_D70
Online Great Books #51: Propaganda by Edward Bernays (click to view)

“If we understand the mechanism and motives of the group mind, it is now possible to control and regiment the masses according to our will without them knowing it.”

~Edward Bernays

I’m not interested in being controlled or regimented. I don’t want somebody else’s idea of “amazing value” brought to my attention. Value is subjective, and I will seek out what I value for myself.

Lastly, it’s easy for John Carmack to talk about incredible value all around that just needs to be brought to people’s attention; he’s a multimillionaire who can afford to indulge every marketing-induced whim and fancy. When you aren’t getting paid enough, and what little you do make has its value eroded by inflation caused by excessively high CEO salaries and corporate price gouging, ignoring “incredible value all around” is a survival strategy. Tweets like this reveal him to be another tone-deaf techie.


  1. Not the ones named in the Ars Goetia, but more prosaic ones like httpd, sendmail, and xinetd.↩︎

  2. You see all kinds of shit when trying shrooms at a Ministry concert in the late 1990s.↩︎

  3. I have no idea how women put up with sales staff asking them if they need help when they’re idly browsing, and I’m probably better off not asking, but it’s one of the reasons I loathe brick and mortar shopping. Adtech is the digital equivalent.↩︎

back to top

An Archetypical Tech Recruiter

Mon, 25 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/archetypical-tech-recruiter.html


I have phone calls like this at least once a month. They usually go something like this.

tech recruiter

“We need a developer with 10 years experience with Carbon1 for an unnamed company at an unspecified wage.”

me

“Cool story, bro, but you obviously didn’t read the recruiting policy on my website so enjoy being blocked.”

I was having this conversation about Microsoft’s .NET Framework back in 2009; hiring managers always seem to people possessed of a decade of experience with technology that only came out that year.

They never learn. I’ll be taking maintenance contracts when I’m 70 because Social Security and my 401k aren’t enough and they’ll still be bullshitting people like this.

Why did I get into the tech industry? It seemed a better idea at the time than joining the Navy, and I had nothing better to do with my life. After all, I was supposedly a “genius”, and “geniuses” didn’t go to trade school and become plumbers, electricians, carpenters, or HVAC techs.


  1. Carbon is Google’s new attempt at making C++ irrelevant; even the creators don’t have 10 years of experience.↩︎

back to top

Notes on Pancreatic Cancer Screening

Fri, 22 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/notes-on-pancreatic-cancer-screening.html


I consulted with a gastroenterologist this morning about the possibility of testing for pancreatic cancer because my father died of it in June 2021. The news wasn’t exactly heartening.

  • The most reliable way to detect pancreatic cancer early is with a contrast CAT scan. This is expensive, most capitalist death panels insurance providers won’t cover them for testing, and might uncover other issues that doctors then feel obligated to treat even if they aren’t bothering the patient.
  • Even if I could get coverage for a contrast CT scan, contrast material is in extremely short supply and reserved for emergencies. My situation doesn’t qualify as such.
  • Ultrasound is also an option, and more likely to be covered, but external ultrasound isn’t nearly as accurate because the pancreas is nestled deep inside the abdomen. I don’t think he mentioned endoscopic ultrasound at all, but according to the American Cancer Society that isn’t used to screen for pancreatic cancer in the general public.
  • Pancreatic cancer generally presents as painless jaundice, because of the tumor blocking the bile duct from the liver. However, this symptom may not occur if the tumor is located near the tail of the pancreas.
  • A pancreatic tumor that doesn’t block the liver’s bile duct may present as pancreatitis because it’s blocking ducts leading out of the pancreas and into the small intestine.
  • Pancreatic cancer diagnosed because of painless jaundice or pancreatitis is generally fairly advanced, with cancerous cells having spread to nearby blood vessels and lymph nodes.
  • Though surgical treatment for pancreatic cancer is slowly becoming more common, most cases are treated with chemotherapy first because the pancreas is located near major blood vessels like the aorta and the inferior vena cava – neither of which you want a surgeon slicing open by mistake.

The advice I was given was to seek genetic counseling first. If I’m carrying genes that predispose me toward certain cancers, it’s easier to justify periodic screenings.

Guess I’d better eat more veggies, too. At least I’m not eating red meat regularly.

back to top

Creating YouTube Thumbnails with a Shell Script

Thu, 21 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/creating-youtube-thumbnails-shell-script.html


There are times when I want to include a YouTube video in a post, but I’m not content with a regular link. YouTube provides embeds for this purpose, but they use <iframe> and come with a hefty JavaScript payload. Among other things, this payload tracks visitors on my site if they play a video embedded in one of my posts. I don’t particularly like the idea of Google tracking people visiting my website; if I wanted Google to have any information about my visitors I’d run Google Analytics.

yttget: An Alternative to YouTube Embeds

If I don’t want embeds because of JavaScript and analytics, but plain links are too bland, what can I do? I can wrap a thumbnail inside a link with a tooltip and caption advising visitors to click the image to watch the video, and have the link open in a new tab.

Every video has an unique identifier, such as “o0W91FrTlYk”. This identifier represents the official video for “End of the Beginning” by Black Sabbath. You can get the ID out of the URL for a particular video, which in this case is https://www.youtube.com/watch?v=o0W91FrTlYk. Once you have the ID, you can retrieve its associated thumbnail, which currently lives at http://i3.ytimg.com/vi/o0W91FrTlYk/hqdefault.jpg

If you’re on a Unix-like machine1, you can automate the process of extracting the ID from a given YouTube URL and fetching its thumbnail with a reasonably small shell script. You can even have this script create HTML for displaying the thumbnail and pipe it to your clipboard. I did that myself with a little script I call yttget, for “YouTube Thumbnail GET”2. Here’s the code, sans license text.

#!/bin/sh -e

URL="$1"
ID=$(echo $URL | cut -d = -f 2)
FILENAME="youtube-${ID}"
CWD=$(pwd)
JPG="${CWD}/${FILENAME}.jpg"
THUMB_URL="http://i3.ytimg.com/vi/${ID}/hqdefault.jpg"
CAPTION="click to view"

curl ${THUMB_URL} --output ${JPG}

echo "<figure>
  <a href=\"https://www.youtube.com/watch?v=${ID}\" 
     title=\"${CAPTION}\"
     target=\"_blank\"
     rel=\"noreferrer noopener nofollow\">
    <picture>
      <source srcset=\"/media/${FILENAME}.avif\" type=\"image/avif\">
      <source srcset=\"/media/${FILENAME}.webp\" type=\"image/webp\">
      <source srcset=\"/media/${FILENAME}.jpg\" type=\"image/jpeg\"> 
      <img src=\"media/${FILENAME}.jpg\" 
           alt=\"preview image for YouTube video ID ${ID}\" 
           width=\"480\"
           loading=\"lazy\">
    </picture>
  </a>
  <figcaption>(${CAPTION})</figcaption>
</figure>" | pbcopy
source code for yttget

It should run on any system that provides a POSIX-compliant shell, and requires curl. Since I’m on a Mac I use pbcopy to pipe standard output into the system’s clipboard, but people using GNU/Linux or BSD can easily replace it with xclip or xsel. Hell, you could probably replace curl with wget if you wanted to, but I couldn’t be bothered.

Using yttget

Here’s how you use yttget. (Don’t forget to replace the URL unless you really like Black Sabbath.)

  1. Navigate to the directory in which you want to place the thumbnail.
  2. Type yttget "https://www.youtube.com/watch?v=o0W91FrTlYk"3
  3. Paste the resulting HTML into your editor.

The script generates HTML, particularly a <picture> element wrapped inside a <figure>. You should edit this to taste, especially if you don’t want to deal with generating WEBP and AVIF files from JPEG images. You can paste it directly into a HTML or Markdown file. You can also use this with Org mode in GNU Emacs, but you’ll need to wrap it in a #+BEGIN_EXPORT html block. You should also add text inside the <figcaption> for your readers’ benefit.

Once you do, it should look like something like this when rendered.

preview image for YouTube video ID o0W91FrTlYk
“End of the Beginning” by Black Sabbath (from 13) (click to view)

The link has rel="noreferrer noopener nofollow" for security and SEO reasons. The first two, noreferrer and noopener, mitigate exploits involving the JavaScipt function window.open(). The use of nofollow means that I’m not giving YouTube any “link juice”, which it shouldn’t need anyway because it’s user-generated content and Google owns it.

Getting yttget

You can grab a copy here. It’s available under the zero-clase BSD license.

Tools Used in yttget

Extra: Generating Alternate Image Formats

If you want to use the <picture> element to serve more modern image formats like WEBP and AVIF, you’ll need to generate these formats from the JPEG you downloaded from YouTube. You can do this with ImageMagick, which provides a suite of command-line image processing tools. The patch looks something like this:

diff --git a/media/yttget.sh b/Users/starbreaker/bin/yttget
index a692369..beb2458 100755
--- a/media/yttget.sh
+++ b/Users/starbreaker/bin/yttget
@@ -21,11 +21,16 @@ ID=$(echo $URL | cut -d = -f 2)
 FILENAME="youtube-${ID}"
 CWD=$(pwd)
 JPG="${CWD}/${FILENAME}.jpg"
+WEBP="${CWD}/${FILENAME}.webp"
+AVIF="${CWD}/${FILENAME}.avif"
 THUMB_URL="http://i3.ytimg.com/vi/${ID}/hqdefault.jpg"
 CAPTION="click to view"
 
 curl ${THUMB_URL} --output ${JPG}
 
+magick -quality 80 ${JPG} ${WEBP}
+magick -quality 80 ${JPG} ${AVIF}
+
 echo "<figure>
   <a href=\"https://www.youtube.com/watch?v=${ID}\" 
    title=\"${CAPTION}\"
my patch to yttget for image conversion

You need not do your image conversion piecemeal, of course. If you have some experience in writing and editing makefiles and you’re using one to build and deploy your website, it’s easy to implement batch conversion. I did it myself when customizing the makefile in my copy of pblog.


  1. This includes GNU/Linux, the various BSD operating systems, and macOS↩︎

  2. It might not be the best name for a shell script in history, but it made sense to me at the time. You can name your copy whatever you want.↩︎

  3. I have the URL in quotes because the invocation without quotes doesn’t work in my Mac’s version of zsh. Other shells may not require this.↩︎

back to top

Web3 is Coming For Authors

Thu, 21 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/web3-coming-for-authors.html


I came across an article on esquire.com about how the “crypto revolution” wants to reimagine books this morning.

What if you could own a stake in Harry Potter?

What if the book series functioned like a publicly traded company where individuals could “buy stock” in it, and as the franchise grows, those “stocks” become more valuable? If this were the case, someone who purchased just three percent of Harry Potter back when there was only one book would be a billionaire now.

Apparently cryptocurrency, web3, blockchain, and NFTs can make this happen. There are already a bunch of startups working on making this a reality, and even Wattpad is looking into this so that they can disrupt themselves before somebody else does.

While Elle Griffin acknowledges that this is a hard sell, I think she only scratches the surface of how hard a sell this could be for authors. All she says is this about the downsides.

It might not work—finding readers (and investors) will be a challenge—but if they succeed, their vision could bode very well for the author who, in this scenario, could retain a percentage ownership of these “stocks” and earn value alongside their investors—just like Jeff Bezos retains a percentage of Amazon stock and grows richer as his company’s shares gain value.

And this:

In theory, this could be very exciting for authors. In practice, outside of runaway success stories like Harry Potter, very few books earn enough revenue for an investor to want to get involved. Whether traditionally published or self-published, right now, the industry is dependent on book sales. This means that authors and publishing houses hope to make their money selling thousands of book copies at a relatively modest price. Here’s the problem: books typically don’t sell well. According to Bookstat, there were 2.6 million books added to the market in 2020, and 96 percent of them sold fewer than 1,000 copies. Worse still, only 268 sold more than 100,000 copies. With that kind of economics, very few authors earn a living solely through writing and publishing books. The author Emily Segal wants to change that.

The rest is mostly success stories from authors who managed to do well by this method and quotes from people touting startups that operate in this space. I honestly don’t see any upside to participating in this new approach to publishing. Even if crypto, blockchain, NFTs, and web3 weren’t one expensive, environmentally destructive grift after another, having investors in a book sounds like a great way to lose creative control – which cuts into the very reason I write fiction in the first place.

I don’t write fiction for money. I have a day job for that. It pays me almost a hundred grand a year to work without creative control or authorial credit. It also pays me to tolerate absurdities like having eight different bosses that don’t talk to each other but all come to talk to you every time you make a minor mistake like forgetting to put a cover sheet on your TPS report.

preview image for YouTube video ID 3wqQXu13tLA
from Office Space (1999) (click image to view)

When I was a published author, I still had bosses. My agent was my boss. My editor was my boss. My publisher was my boss. My beta readers were my bosses. Book bloggers were my bosses. Every rando with a social media presence who got my books as freebies or bought them for a dollar during a promotion were my bosses. At least, they seemed to think they were. They all had opinions on what I should write and how I should go about writing it. Admittedly, some of these opinions were perfectly reasonable, and incorporating these suggestions made my writing better than it might otherwise have been. Nevertheless, once I started publishing, my work ceased to be wholly my own. Even if I had gone full indie instead of publishing through a small press, I’d still have to work with an editor and still have to deal with reviewers, bloggers, etc.

Though it was a harsh blow to have my second novel bomb and then see my publisher go out of business while ghosting every author they had under contract, it was also a liberating experience. My work was almost1 entirely my own again, and I could do it my way.

Let’s suppose, strictly as an intellectual exercise, that I bought into this new web3 publishing thing and sought investors for my next fiction project. The best case scenario is that I retain majority ownership (55-70%) and my investors are content to buy, hold, and keep their opinions to themselves.

What’s the worst case scenario? I have to sell so many shares to quit my day job and focus full-time on writing that I’m left with at most a 25% stake in my own creation. This might not be a problem when none of the investors own more than 5% and remain uncoordinated, but if they do coordinate or if one investor with buys up the other shares I’m left as a minority stakeholder in the fiction I’m writing.

Even being a minority shareholder might be tolerable if the investors are content to buy, hold, and keep their opinions to themselves – as long as I can quit my day job and focus on writing. However, this ignores the possibility of activist investors – people who aren’t content to merely own a stake in the business but want a say in its operations. They might want a say in the plot, characterization, or how I go about writing the story so that it’s more “family-friendly” or less likely to get challenged if some uptight parent’s precious little snowflake brings it home from school.

If these criticisms came only from reviewers and readers, I can ignore them with impunity. What are they going to do, not buy any more of my books? Remember, I have a day job that pays just short of $100,000 a year before taxes, so my salary is a limited form of fuck you money.

That’s right. Writers with day jobs are writing from a position of “fuck you”, especially if they use a pseudonym.

preview image for YouTube video ID xdfeXqHFmPI
from The Gambler (2014) (click image to view)

It’s not nearly as good as owning your house outright and having a couple million parked in index funds paying interest to cover the property taxes, but it beats the shit out of being dependent on your readership to pay the bills2.

Are there trade-offs involved in being a writer with a day job? You might as well ask if the Pope is Catholic. I only have so many fucks to give, so I’ve got to husband them carefully so that I can do solid work at my day job while still having fucks to spare for my writing. I don’t always manage that, and sometimes I devote so many of my fucks to my writing that I end up half-assing my day job.

However, I don’t think I ever want to do commercial publishing again, and I certainly don’t want any part of this “get people to invest in your writing through crypto, blockchain, web3, and NFTs” bullshit. The fiction I write is basically kitchen-sink science fantasy fanfic. It’s a great big meat pie and the filling is made up of bits and pieces of novels, movies, comics, anime, JRPGs, and heavy metal lyrics that I love thrown into an industrial-size blender set to puree and baked low and slow. It’s Elric on a Harley versus a Silicon Valley Saruman with a soundtrack featuring Blue Öyster Cult, Black Sabbath, Judas Priest, Queensrÿche, Cynic, and Hiromi Uehara.

But it only really needs two cooks at most: me and Catherine. I don’t want anybody else having a say in what I write or how I write it. If that means I go unread, so be it.

Sometimes the price of somebody else’s idea of success just isn’t worth paying, and succeeding in a web3 book marketplace is a game that just isn’t worth the candle. As far as I’m concerned, I’m already a successful writer. I’ve finished several novels and short pieces. My writing keeps me sane, and helps me tolerate the bullshit I deal with at my day job. It lets me play God without hurting anybody or violating their rights. My writing helped me meet my wife, and we’ve been together over twenty years.

You can’t put a dollar value on any of that. Sure, it would be nice to have other people read my stuff, but that’s what personal websites are for. If you want to read my old stuff, just download the archive and unzip it. It’s all there in plain text. If you want to see what I’m up to next, I can manage that with a web zero site just like this one.

Sure, I’m self-publishing on the internet at my own expense and not getting anything in return, but I’m paying the cost to be the boss. If I try to monetize my joy I’m just killing myself to live. Fuck that noise. One bullshit job is one too many, and web3 can’t give me what I want:

I like to receive money for my work. But I can pass that up this time. I like to have people know my work is done by me. But I can pass that up. I like to have tenants made happy by my work. But that doesn’t matter too much. The only thing that matters, my goal, my reward, my beginning, my end is the work itself. My work done my way. Peter, there’s nothing in the world that you can offer me, except this. Offer me this and you can have anything I’ve got to give. My work done my way. A private, personal, selfish, egotistical motivation. That’s the only way I function. That’s all I am.

~Ayn Rand, The Fountainhead

You don’t have to like Ayn Rand. But for all her flaws (which are legion), this is one thing she gets right: the importance of worker autonomy. I can’t get enough of that at my day job. I get it as a hobbyist writer, and accept that I probably won’t ever make enough money off my writing to make the additional tax prep headaches3 worthwhile.


  1. I say “almost” because my wife Catherine reads my drafts, or I at least read them to her. I accept her suggestions 99.999% of the time. I don’t think of her as a “boss” because sharing our writing with each other was how we first became friends and then lovers. ♥↩︎

  2. Most authors don’t even make minimum wage from their fiction once you factor in the time spent developing one’s craft. Being able to write fiction is a privilege, and having a day job is the price of admission if you didn’t have the sense to marry into money or the luck to be born rich. I don’t like it any more than you do, but this is how I deal with it.↩︎

  3. Income from writing fiction is generally reported under Form 1099 in the US instead of Form W2. It’s considered “self-employment” income, so you’ve got to pay double the usual payroll tax on that income. It’s also easy to fuck up, so DIY tax prep with mixed W2 and 1099 income is probably a good way to get audited by the IRS.↩︎

back to top

Nothing Like a Bad Phishing Attempt

Wed, 20 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/mtb-alert-spam-probably-scam.html


There’s been a phishing scam targeting M&T Bank customers via SMS since 2020. It’s still going strong, judging by this spam text I got a short while ago.

a spam text screenshot

I’m not a M&T bank customer, but perhaps whoever had my phone number before me was. Not really my problem, though, since I know better than to be taken in by such a transparent ploy.

Of course, the Federal Communications Commission is useless as usual. They can make sure nobody can say “fuck” on the radio, but they can’t do anything about robocalls or SMS spam.

back to top

RE: High Property Taxes Are Good, Actually

Wed, 20 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/re-high-property-taxes-are-good-actually.html


From Brock Whittaker:

Interest rates are centrally controlled and affect nearly every major industry, so even small changes can have large knock-on economic ramifications.

Property taxes on the other hand, can be scoped as narrowly as a single county or town, or as broadly as a state. They can be adjusted annually based off the needs of a local market. On an individual level as well, property taxes can be adjusted by local municipalities. Retirees and low income individuals are often able to make cases to reduce their tax burden, leading to increased home affordability. And perhaps, the best attribute: the money collected from property taxes doesn’t evaporate from a local area like it does when borrowers pay higher interest rates. It goes back into the local neighborhood, leading to better local infrastructure and higher quality schools.

I’m kinda curious as to how this helps the average worker afford their own home instead of being stuck as a renter1. I wasn’t able to put together a down payment until I was almost 40 under the current status quo. Perhaps if home prices fell to compensate for higher property taxes it would balance out, but I don’t think home prices will fall until we’ve buried the last of the Baby Boomers.

Furthermore, aren’t property taxes fundamentally regressive taxes since they aren’t scaled by ability to pay and thus hit cash-poor householders harder than their richer neighbors? For example, a 2013 report suggests that low-income Pennsylvania citizens pay a much greater portion of their annual income in local and state taxes than the richest among us. In fact, Pennsylvania was one of the 10 worst states for regressive taxation in 2013, and I’m not convinced the situation has improved much in the past decade.


  1. To be honest, I still feel like a renter despite being five years into a thirty year mortgage. The bank is my landlord, but at least I don’t have a neighbor’s bedroom right up against my own any longer. And once I’ve paid off the mortgage, I’ll still have to pay rent in the form of property taxes. Renting never really ends; the conditions just become slightly less onerous if the deed is in your name.↩︎

back to top

Paying Strangers to Watch Me Work?

Wed, 20 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/strangers-watching-me-work.html


This isn’t the first time I’ve seen inane articles about remote work from the New York Times, but here’s a fun article from last week. There are people working remotely who are so desperate for the “office experience” that they pay $40 a month to sit in Zoom sessions where strangers can watch them work. And how does the New York Times report on it? With an article entitled “Would You Pay $40 a Month to Have Strangers Watch You Work?”.

I find it hard to believe that people miss the “office experience” that much, but neurotypical extroverts are weird. I still remember what it was like to work in an office, and I don’t miss it:

I have a hard time suppressing the urge to laugh when people talk about going “back to the office” because in my case I’d be leaving my office to return to half a desk in a half-height cubicle in the middle of an open-plan hellscape where I can’t crank up the headphones high enough to drown out everybody else’s “spontaneous conversations” because I’d be risking both hearing loss and a reprimand for disturbing others. I also have a hard time laughing when people talk about being lonely while working at home, especially when they talk to me. As somebody who’s introverted being around people is generally a stressful and draining experience. As somebody who’s also on the autistic spectrum and thus feels obligated to mask, navigating a world not made for people like me is even more tiresome.

You might be lonely for lack of social interaction in an office, but I was lonelier at the office than I’ve ever been at home. Having other people around is no good when they aren’t your people, and my coworkers aren’t my people. They were generally kind enough, but unless they needed or wanted something from me I was part of the scenery.

I won’t go back to on-site work if I have any choice in the matter, so why would I want to pay $40 a month for a poor emulation of the “office experience” over Zoom? If I’m to have strangers watch me work, I should be getting paid for that, not the other way around.

Besides, having strangers who aren’t necessarily employed by the same company as you or on the same team watching you work over Zoom probably has security implications. They might not necessarily be able to see your screen, but if you aren’t careful about muting before you think out loud or indulge in rubber duck debugging you might find yourself leaking confidential or proprietary information.

I wouldn’t risk it, no matter how lonely or nostalgic for the experience of having strangers look over my shoulder I might get.

back to top

Crypto Direct Deposit? WTF?

Tue, 19 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/crypto-direct-deposit-wtf.html


I just saw this MEL Magazine article about people getting paid in cryptocurrency and the bullshit they have to deal with to keep their payments from becoming worthless whenever the market dips or outright shits itself. This sounds like a great way to not have enough money to cover the monthly bills.

Of course, I might be a bit risk-adverse. I got into tech so I’d have a cushy day job rather than working part-time and living with roommates while I worked on my writing. I’m reluctant to take 1099 contractor jobs because of the double payroll tax and the additional complications self-employment brings to tax preparation, so the thought of getting paid in crypto is enough to send my balls crawling back into my belly.

Nor does Molly White’s reporting on blockchain, cryptocurrency, and web3 help much. I think I’ll continue to take my chances with fiat. It’s not like the Federal Deposit Insurance Corporation insures your crypto wallet.

back to top

RE: Soft Deletion Probably Isn’t Worth It

Tue, 19 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/re-soft-deletion-probably-isnt-worth-it.html


I’ve worked on entirely too many CRUD applications at my day job, so the question of how to get rid of data comes up all too frequently. Unfortunately, the answer is often to include an IsDeleted flag and a DeletedOn field. Sometimes we even periodically purge data flagged for deletion with a batch process.

Brandur has a different approach. He goes into detail about why soft-delete is a bad idea, and gets into the headaches that come with soft-deleting normalized data and dealing with foreign keys, but I’m not sure his alternative approach is much better:

Although I’ve never seen an undelete work in practice, soft deletion wasn’t completely useless because we would occasionally use it to refer to deleted data – usually a manual process where someone wanted to see to a deleted object for purposes of assisting with a support ticket or trying to squash a bug.

And while I’d argue against the traditional soft deletion pattern due to the downsides listed above, luckily there’s a compromise.

Instead of keeping deleted data in the same tables from which it was deleted from, there can be a new relation specifically for storing all deleted data, and with a flexible jsonb column so that it can capture the properties of any other table.

This “deleted records” table still stores old data inside the application’s primary database, which generally conforms to the OLTP model, and still allows the retention of data that has been flagged for deletion. This still requires a batch process for periodic purging.

But, as Brandur admits, it’s a compromise. It might not be feasible to archive this data in a separate database, data warehouse, or data lake for economic or regulatory reasons. And it would make it a bit harder for Facebook to re-surface embarrassing photos that you were sure you had deleted once you had slept it off.

For my part, I’d rather outright delete records unless there is an explicit legal/regulatory requirement for data retention. As long as there’s a reasonable schedule for full and incremental backups in place along with procedures for restoring backups to a staging database and restoring records from the staging database to production, it shouldn’t be that hard to restore a mistakenly deleted record. It can’t be much worse than pulling a record out of the “deleted records” table and de-serializing JSON.

However, since I’m just an individual contributor it isn’t always my call. Unfortunately, “Don’t blame me, man; I just work here.” didn’t fly at Nuremberg and I doubt it would do me much good either if I get stuck holding the bag after implementing a bad design despite my objections.

You see, dark patterns don’t magically implement themselves. Sure, you can refuse, but more often than not your objection will be noted as a reason to fire you and make room in the payroll for somebody possessed of greater ethical flexibility. Thus the use of an archive table as Brandur suggests is not only a technical compromise, but an ethical one. After all the data isn’t immediately accessible, especially if you serialize to JSON and then encrypt it before inserting it into the database.

back to top

RE: Really getting started with Hugo

Tue, 19 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/re-really-getting-started-with-hugo.html


I was lurking on HN and saw a post by Bryce Wray about a better way to get started with Hugo, a high-performance static site generator. It comes a bit too late to be useful to me now that I’ve got pblog set up the way I like it, but I thought I’d share it anyway because it touches on one of the snags I encountered when tinkering with Hugo.

Here’s a 50,000-foot view of how I think a new Hugo user should get started:

  1. Install Hugo.
  2. Use a one-line Hugo command to create a Hugo project.
  3. Add a minimal number of bare-bones files so the project can generate a working website.
  4. Use another one-line Hugo command to run its development server, so the user can see how the website looks.

And that’s really it. But the current process omits Step 3, and that’s a show-stopper for most new folks. Instead, Hugo’s “Quick Start” documentation tells you to install a theme, almost as “training wheels” for one’s “ride” with Hugo.

Here’s the deal: most Hugo themes are almost as complex as WordPress themes despite not using PHP. Customizing them is a huge pain in the ass when all you want to do is make a motherfucking website that has more than one page and provides modern amenities like consistent navigation and a RSS feed. Telling people new to Hugo to start by installing a theme is definitely a mistake. At least Jekyll provides a reasonable1 default theme.

I have got admit that I liked this little note before the improved instructions.

The following instructions are for only the two major computer operating systems for consumers, Windows and macOS, because I frankly doubt Linux users need help.

Being a Linux user for almost a quarter century (since 1998), I might indeed not have needed help, but I might have appreciated it anyway. I know some techies think that their expertise as engineers transfers into a wide variety of unrelated disciplines2, but I’ve found out the hard way about assuming that unfamiliar tech is easy for me to use because I’ve managed to get Slackware running on a secondhand Thinkpad. It’s often a good way to end up embarrassed.


  1. for certain values of “reasonable”, given that anything billed as “one size fits all” is lucky to fit most↩︎

  2. something you can see in action on Reddit and Hacker News↩︎

back to top

RE: The Linux Desktop is Hard to Love

Mon, 18 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/re-linux-desktop-hard-to-love.html


I get why Bradley Taunt has trouble loving desktop GNU/Linux. It isn’t nearly as cohesive or as polished an experience as macOS. But these are familiar arguments to anybody who pays attention to Bryan Lunduke’s “Linux Sucks” presentations – something he’s been doing since 2009.

GNU/Linux has all kinds of rough edges that make it a pain in the ass to use for personal computing.

  • You still need to become your own sysadmin just to install it and configure it.
  • CUPS is an OK printing system as long as it works. It doesn’t always1.
  • Bluetooth on Linux still sucks.
  • Wayland is the new hotness, but doesn’t support nearly as much hardware as X11.
  • X11 is all but unmaintained.
  • Hi-DPI support is still rough.
  • Power management and battery life for laptops is still not as good as macOS.
  • copy/paste can be challenging

I know this from experience; I’ve been using it since 1998. This is a screenshot of my current desktop.

screenshot of a Slackware desktop running Openbox

My stack hasn’t changed much over the years, either. It’s usually something like this.

  • Slackware GNU/Linux
  • X.org
  • Openbox window manager
  • Quodlibet for music
  • GNU Emacs for text editing
  • Mozilla firefox for web browsing
  • Claws Mail for email/NNTP
  • Hexchat for IRC
  • ImageMagick for viewing/editing images
  • xfce-terminal

Of course, this isn’t a “desktop” configuration. I’m not using Plasma or GNOME. I don’t even use XFCE or LXQt in their entirety. I’ve never worried about having a “cohesive” experience; I pick and choose and build my own environment to suit my needs.

Why? Because I’ve always had to. Default configurations and standardized desktops are all somebody else’s idea of “one size fits all”. It never quite fits me. Perhaps I cold make myself fit, but why should I do that on Linux? If I wanted to adapt to an inflexible computing environment I can do that with my company-issued Windows laptop at work.

Make no mistake: I don’t love GNU/Linux, any more than I love my job. Neither can love me back. However, I am grateful GNU/Linux exists, and that it works as well as it does.

You can talk about fragmentation and a lack of cohesion all you like, but think about it: every component of a GNU/Linux distribution you can name has their own developer/dev team behind it. No central authority is riding herd on any of these disparate teams, they don’t all talk to each other, and they’re trying to support all kinds of hardware, even stuff that’s been obsolete for twenty years.

Even the most polished GNU/Linux distributions are Frankenstein monsters cobbled together from parts. The better the distribution, the less janky the experience, but jank is inevitable. Why am I still using GNU/Linux on my personal desktop? I learned early on to embrace the jank. It’s the price I pay for having a great big toolbox that I can use to build a computing environment that works for me – even if it doesn’t necessarily work for you.

You can get around some of this jank if you run BSD, but while the basic operating system (kernel, shell, standard utilities) comes from one project, the vast majority of the software you’ll install to make your BSD installation useful to you will come from ports/packages of varying quality. The people doing the ports do their best, but it isn’t easy even if the code sticks to POSIX or is a shell script compatible with the classic Bourne shell (instead of bash).

It might not be as nice as a late-model Mac with all the upgrades (which can also install all kinds of UNIX-style tools using Homebrew or Fink), but you can run it on old hardware and secondhand hardware – and it beats the shit out of Windows2 if you aren’t a gamer3.

In any case, you’ve got to decide for yourself what works best for you. If you’re happy with a Mac or Windows, I won’t begrudge you. I’ve got trouble enough being the captain of my own soul; I don’t get paid enough to be the admiral of yours.


  1. Most of the time I swear by CUPS; but sometimes I swear at it.↩︎

  2. In fairness, Windows 7 wasn’t nearly as horrible as Windows 98SE or Windows 3.1, and even has an OK third-party package mangler, but I still won’t use Windows unless I’m getting paid.↩︎

  3. Steam’s Proton supposedly works for lots of games, but it’s basically WINE on steroids. Don’t expect miracles.↩︎

back to top

RE: Thoughts on RSS

Mon, 18 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/re-thoughts-on-rss.html


Matt Rickard had posted some thoughts on RSS back in June that I thought interesting, but I don’t agree with all of them.

What is RSS? It stands for “Really Simple Syndication”1. It’s a XML feed that provides a dated list of blog posts, podcasts, etc. sorted in reverse chronological order. You can use a feed reader app to collect feeds and read posts at your convenience. It’s a great way to subscribe to people’s websites if you don’t like having stuff dumped in your email. Nobody controls it; anybody who wants to can provide a RSS feed for their site2, and there are online and offline feed readers galore, many of them free.

RSS is pretty stable; RSS 2 hasn’t been officially updated since 2009 since it can be extended using XML namespaces. Atom hasn’t been updated since 2007 with the release of RFC 5023. I suspect Rickard thinks this is a problem, given the following in his blog post:

It’s hard to gauge actual RSS usage. Substack has recently launched an RSS reader; otherwise, there isn’t a vibrant ecosystem pushing forward the protocol…

I’m not convinced the protocol needs to be “pushed forward”, but let’s have a look at some of the other forces acting on RSS that Rickard identified.

RSS readers act like email clients in how they render content via HTML. Unfortunately, email content isn’t as rich as the JavaScript-powered web today. Maybe that’s OK for email3 (and podcasts), but not for generic blog content.

This has me scratching my head. Why does “generic blog content” need JavaScript at all? Is it a question of definitions? I’m used to a blog post being mostly text, with occasional images. There might be embedded audio and video, but I prefer to read blogs that don’t have that because I remember dialup. Also, I think this is only really relevant for full-text feeds. I suspect that most feeds are headline and summary only, with a link to the full article that (depending on the reader) will open in your browser.

Substack has revitalized the blogging movement by giving away free hosting and email lists, and a business model for supporting writers. As email newsletters grow, RSS is a decent alternative to an increasingly cluttered email inbox.

I’m not convinced that Substack is anything but the Medium of newsletters, or that Substack isn’t another content farm with delusions of grandeur and sufficiently deep pockets to lure relatively big names into writing for them. However, I think that newsletters were a mistake, though perhaps one made out of necessity.

Commercial incentives work against RSS. The protocol competes with internet advertising models (Google search ads, Facebook feed ads) and subscription models. Walled garden content aggregation is significantly more profitable than free syndication (e.g., Reddit, Facebook)

I won’t dispute this because I think this is something we should lean into. Instead of merely being non-commercial, perhaps we should be pushing RSS as anti-commercial, something you use because getting your message out means more to you than making a few bucks in the process. That’s probably a hard sell for people who want to quit their day jobs and create for a living, thought.

RSS doesn’t have a true sponsor. Netscape initially developed it. Later, Aaron Swartz led a redesign and fork. Yahoo designed the Media RSS specification. There’s also been some political strife with the RSS Advisory Board.

Does it matter that RSS doesn’t have a “true sponsor”? For a while RSS had a huge advocate in Google – but that ended when Google shut down Google Reader. With friends like these, who needs enemies?

Creator incentives work against RSS. The protocol does not benefit content creators4 because it doesn’t give them any insight into their audience (number of subscribers, emails, or other data).

I must be a terrible “content creator”, because I have no interest whatsoever in knowing how many subscribers, emails, followers, etc. I have. I provide a RSS feed instead of running a newsletter or doing social media because RSS is anonymous, and I think that’s a good thing. I don’t want to know who you are. It’s none of my business, and safely storing and handling information about who visits my website and reads my stuff is a hassle I’m not willing to deal with.

RSS is one-way publishing; there is no way for content creators and their audience to interact (e.g., through comments or replies).

Again, I don’t see the problem with this. There’s a mailto link at the end of every post and page on my website. If somebody has something to say, they can email me. If you aren’t willing to use email then I don’t want to hear from you. I haven’t provided a comments section on my website in years; this is my soapbox, and you should get your own. If you want to comment, do it on your own website by linking to mine and quoting as needed. If you really want me to know that you’ve written something about something I’ve written, that’s what email is for.

Curation and discoverability are more difficult on RSS than on native platforms.

First off, curation is only valid when done by human beings. As soon as you try to automate that shit, you end up optimizing for “engagement” and implementing algorithms that lead people down rabbit holes that all end in a veritable Baskin Robbins of extremist ideologies: 31 flavors of self-inflicted psychosis.

Second, if by “native platforms” Rickard means social media platforms like Tiktok, Twitter, Facebook, and YouTube: I’m not convinced they’re any better at discoverability than randomly surfing the net and collecting RSS feeds like Pokémon.

RSS had usability issues – discovering a feed and seeing raw XML was too technical for the average user.

This is true, and I’m not sure how best to fix this. I link directly to my RSS feed so that it’s easily discoverable, and I have a XSL transform in place so that if you access the feed with the browser you get a nicely styled web page instead of raw XML. However, expecting most bloggers to figure out XSL is about as realistic as expecting them to hand-code their HTML and CSS and upload to a host using rsync and ssh. Techies might manage it, but Movable Type broke the web in 2001 because it was more convenient for the vast majority of people putting stuff on the web than doing it yourself.

I don’t know how to fix this. Maybe if WordPress themes came with XSL transforms that made feeds resemble the rest of the site, that would help a bit. It would also help if the major browser developers (Google, Apple, Mozilla) did a better job of supporting RSS instead of leaving that functionality to extensions. For example, the Seamonkey project still includes a feed reader (as part of its built-in mail client) as well providing a subscribe button on the feed itself should you open it, and the feed gets rendered as if it were HTML.

If Seamonkey can still support RSS, why not Chrome, Safari, and Firefox?

TL;DR: RSS is good tech for people who want to express themselves online as long as they aren’t looking to go commercial, but the tech isn’t really accessible to the general public. I’m not sure how to fix that.


  1. RSS was the original standard, created in part by Aaron Swartz, but the Internet Engineering Task Force used it as the basis for Atom (another XML format), and then Manton Reece and Brent Simmons created the JSON feed.↩︎

  2. many blogging systems, like Wordpress, will build your feed for you.↩︎

  3. I disagree with this, too. HTML is not OK for email. HTML email enables spyware and phishing.↩︎

  4. This me being old and yelling at clouds, but I fucking loathe the phrase “content creator”. It is to writers/artists/musicians/photographers/filmmakers/journalists on the internet what “hack” used to be for novelists. Nor am I the only one who holds this opinion.↩︎

back to top

Extending pblog

Sat, 16 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/extending-pblog.html


I’ve recently started using pblog, a tool Bradley Taunt created to build blogs from text files using pandoc. It’s a handy little tool, but I couldn’t resist making a few customizations and submitting them. To my surprise, Bradley accepted most of them.

Nor could I resist making further tweaks after updating my copy to account for his changes, but I probably won’t submit these as patches. I’ll just point him to this article. 😸

Tweaks Rejected for Good Reason

The only change he partially rejected were my adjustments to the makefile that would convert JPEG and PNG images to more modern formats (WEBP and AVIF) for use in blog posts and pages using HTML5’s <picture> element. It would have added more complexity than he wanted to include by default, but still documented it as an optional tweak.

Which is perfectly fair. Here’s a diff between default makefile for pblog and mine:

diff for makefiles
diff --git a/../pblog.xyz/makefile b/makefile
index f8b1acb..882881c 100644
--- a/../pblog.xyz/makefile
+++ b/makefile
@@ -1,12 +1,51 @@
+.SUFFIXES: .png .jpg .webp .avif
+
+.jpg.webp:
+   magick -quality 80 "$<" "$@"
+
+.jpg.avif:
+   magick -quality 80 "$<" "$@"
+
+.png.webp:
+   magick -quality 80 "$<" "$@"
+
+.png.avif:
+   magick -quality 80 "$<" "$@"
+
+JPEGS!=find media/ -name '*.jpg'
+PNGS!=find media/ -name '*.png'
+
+JPEG_WEBP=${JPEGS:.jpg=.webp}
+JPEG_AVIF=${JPEGS:.jpg=.avif}
+
+PNG_WEBP=${PNGS:.png=.webp}
+PNG_AVIF=${PNGS:.png=.avif}
+
 .DEFAULT: build
+include ./sshvars
+
+.PHONY: archives
+archives:
+   zip -r -j -FS media/posts.zip posts/*.md
+   zip -r -j -FS media/starbreaker.zip starbreaker/*
+   zip -r -j -FS media/limyaael.zip limyaael/*

 .PHONY: build
-build:
-   bash pblog.sh > _output/feed.xml
+build: archives $(JPEG_WEBP) $(JPEG_AVIF) $(PNG_WEBP) $(PNG_AVIF)
+   ./pblog.sh > _output/feed.xml
     xsltproc _output/feed.xml | tail -n +2 > _output/blog/index.html
+   rsync -av favicons/ _output/

 serve: build
     python3 -m http.server --directory _output/

+install: build
+   rsync --rsh="ssh ${SSH_OPTS}" \
+         --delete-delay \
+         --exclude-from='./rsync-exclude.txt' \
+         -acvz _output/ ${SSH_USER}@${SSH_HOST}:${SSH_PATH}
+
+.PHONY: clean
 clean:
-   rm _output/* rss/*
+    @rm -rf _output/* rss/* posts/*.html pages/*.html posts/.DS_Store pages/.DS_Store $(JPG_WEBP) $(JPEG_AVIF) $(PNG_WEBP) $(PNG_AVIF)
+

Automatic conversion of PNG and JPEG images is of use to me because I want to use more modern and efficient file formats when sharing images so that I don’t eat up visitors’ bandwidth, but that isn’t a priority for everybody.

Furthermore, I’ve got a target for zipping up posts for downloads, as well as archives for my fiction and a set of rants about writing sf and fantasy originally posted on LiveJournal. Zipping up posts might be of use to others, but that doesn’t need to be part of the default makefile.

Likewise my use of rsync to transfer my site to my host. I might be comfortable with rsync and ssh, with the key management that entails, but others might prefer a different approach. They might want a file transfer tool with a graphical interface like Forklift or Transmit. Or they might be hosting on Netlify or in a S3 bucket.

And these are just changes to the makefile. I’ve further altered other parts of pblog, including the central script. I’ll explore these shortly.

Tweaking the Stylesheet

The stylesheet for my site is also rather different from the default. See for yourself.

diff for style.css
diff --git a/../pblog.xyz/style.css b/style.css
index b969c19..27006a5 100644
--- a/../pblog.xyz/style.css
+++ b/style.css
@@ -1,6 +1,66 @@
+html {
+   font-size: 16px;
+}
+
+@media only screen and (max-width: 1366px) {
+   html { 
+     font-size: 20px; 
+   }
+}
+
+@media only screen and (max-width: 1920px) {
+   html { 
+     font-size: 24px; 
+   }
+}
+
+@media only screen and (max-width: 2560px) {
+   html { 
+     font-size: 28px; 
+   }
+}
+
+@media only screen and (max-width: 3840px) {
+   html { 
+     font-size: 32px; 
+   }
+}
+
 body {
-    max-width: 75ch;
-    line-height: 1.4;
+   margin: 0 auto;
+   max-width: 66ch;
+   color: #16161D;
+   background: #FAFAFA;
+   padding: 0 .62rem;
+   font: 1rem/1.62 -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
+}
+
+h1, h2, h3, dt, dd {
+   line-height: 1.2;
+}
+
+a:link {
+   color: #0F4880;
+}
+
+a:hover {
+   color: #800080;
+}
+
+a:visited:hover {
+   color: #205E3B;
+}
+
+a:visited {
+   color: #800000;
+}
+
+hr {
+   border: 1px solid #16161D;
+}
+
+dt {
+   font-weight: bold;
 }
 
 p code, li code {
@@ -11,29 +71,62 @@ p code, li code {
 }
 
 img {
-    height: auto;
+   height: auto;
     max-width: 100%;
 }
 
-pre {
-    background: #f9f9f9;
-    border: 1px solid lightgrey;
-    padding: 5px;
+blockquote {
+   font-family: Iowan Old Style, Apple Garamond, Baskerville, Times New Roman, Droid Serif, Times, Source Serif Pro, serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
+   border-left: 2px solid #16161d;
+   padding-left: 1ch;
+   margin-left: 4ch;
+}
+
+.date {
+    color: grey;
 }
 
 #TOC {
-    border: 1px solid;
-    position: relative;
+   border: 1px solid #16161d;
+   position: relative;
 }
 #TOC:before {
-    border-bottom: 1px solid;
-    content: 'Table of Contents';
-    display: block;
-    font-weight: bold;
-    padding: 5px;
-    position: relative;
+   border-bottom: 1px solid #16161d;
+   content: 'Table of Contents';
+   display: block;
+   font-weight: bold;
+   padding: 5px;
+   position: relative;
 }
 
-.date {
-    color: grey;
+#skip a
+{ 
+   position:absolute; 
+   left:-10000px; 
+   top:auto; 
+   width:1px; 
+   height:1px; 
+   overflow:hidden;
+} 
+ 
+#skip a:focus 
+{ 
+   position:static; 
+   width:auto; 
+   height:auto; 
+}
+
+@media print {
+   body {
+       font-size: 12px;
+       line-height: 1.5;
+       font-family: Iowan Old Style, Apple Garamond, Baskerville, Times New Roman, Droid Serif, Times, Source Serif Pro, serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; 
+       color: black;
+       background: white;
+   }
+   
+   a {
+       color: black;
+       text-decoration: underline;
+   }
 }

I’ve made the following changes:

  • I’ve set a base font size, which I adjust based on screen width in a crude attempt at responsive text sizes.
  • I’ve narrowed the maximum body width from 75ch units to 66ch.
  • I’ve changed the text color from black to intrinsic gray and the background color to off-white.
  • Border colors are the same color as the text color.
  • I’ve set the font size to 1rem, so that it adjusts responsively, set a reasonable line height, and used a system font stack instead of just defalting to sans-serif.
  • I’ve set link colors to values with sufficient contrast to satisfy WCAG 2.0 Level AAA requirements picked from http://colorsafe.co
  • definition list titles are bold
  • <hr> element is now styled
  • <blockquote> has a border to the left and is rendered with a serif font stack.
  • I’ve included a media query for print with what I hope are reasonable settings. (They look OK to me.)

Many of these changes aren’t strictly necessary; they exist to suit my tastes and requirements – which are hardly universal.

Tweaking the XSL Transform

I’ve also modified the XSL transform used to generate blog/index.html from feed.xml. Some of this was to suit my preferences, but one change proved necessary for functionality’s sake. See for yourself.

diff for rss.xsl
diff --git a/../pblog.xyz/rss.xsl b/rss.xsl
index e4e88c3..ec542c5 100644
--- a/../pblog.xyz/rss.xsl
+++ b/rss.xsl
@@ -18,58 +18,96 @@
             <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no" />
             <link rel="stylesheet" href="../style.css" />
             <style>
-              /* THIS STYLING HIDES THE EXTRA "DOCTYPE" PLAIN TEXT */
-              html {
-                background: white;
-                height: 100%;
-                overflow: auto;
-                position: fixed;
-                top: 0;
-                width: 100%;
-              }
-              header {
-                border-bottom: 1px solid lightgrey;
-                margin-bottom: 0;
-                padding-bottom: 0.5em;
-              }
-              header h1 {
-                margin: 0;
-              }
-              header p {
-                margin: 0 0 0.5em;
-              }
-              .date {
-                  display: block;
-                  font-family: monospace;
-                  margin-top: 1em;
-                  overflow: hidden;
-                  white-space: nowrap;
-                  width: 16ch;
-              }
+                /* THIS STYLING HIDES THE EXTRA "DOCTYPE" PLAIN TEXT */
+                header {
+                    border-bottom: 1px solid #16161d;
+                    margin-bottom: 1rem;
+                    padding-bottom: 0.5em;
+                }
+
+                header h1 {
+                    margin: 0;
+                }
+
+                header p {
+                    margin: 0 0 0.5em;
+                }
+
+                .date {
+                    display: block;
+                    font-family: monospace;
+                    margin-top: 1em;
+                    overflow: hidden;
+                    white-space: nowrap;
+                    width: 16ch;
+                }
             </style>
+            <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
+            <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
+            <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
+            <link rel="manifest" href="/site.webmanifest" />
+            <link rel="me" href="https://twitter.com/MGraybosch" />
+            <meta property="og:title" content="402 PAYMENT REQUIRED" />
+            <meta property="og:description" content="This platform doesn't pay me to provide metadata." />
+            <meta property="og:type" content="website" />
+            <meta property="og:url" content="https://matthewgraybosch.com/social.html" />
+            <meta property="og:image" content="https://matthewgraybosch.com/media/nonserviam.png" />
+            <meta name="twitter:card" content="summary_large_image" />
+            <meta name="twitter:title" content="402 PAYMENT REQUIRED" />
+            <meta name="twitter:description" content="This platform doesn't pay me to provide metadata." />
+            <meta name="twitter:image" content="https://matthewgraybosch.com/media/nonserviam.png" />
+            <meta name="twitter:image:alt" content="Non Serviam (I will not serve)" />
+            <meta name="twitter:creator" content="@MGraybosch" />
         </head>
 
         <body>
+            <div id="skip"><a href="#content">Skip Navigation and Headings</a></div>
             <header>
-                <h1><xsl:value-of select="/rss/channel/title" /></h1>
+                <h1>
+                    <xsl:value-of select="/rss/channel/title" />
+                </h1>
                 <p>
-                  <i><xsl:value-of select="/rss/channel/description" /></i>
+                    <i>
+                        <xsl:value-of select="/rss/channel/description" />
+                    </i>
                 </p>
             </header>
-            <xsl:for-each select="/rss/channel/item">
-                <xsl:sort select="category" order="descending" />
-                  <span class="date">
-                    <xsl:value-of select="pubDate" />
-                  </span>
-                <xsl:element name="a">
-                    <xsl:attribute name="href">
-                      <xsl:value-of select="link" />
-                    </xsl:attribute>
-                    <span>
-                      <xsl:value-of select="title" />
+
+            <nav>
+                <a href="/">Home</a>
+                &#183;&#160;<a href="/about.html">About</a>
+                &#183;&#160;<a href="/disclaimer.html">Disclaimer</a>
+                &#183;&#160;<a href="/feed.xml">RSS</a>
+            </nav>
+
+            <main id="content">
+                <xsl:for-each select="/rss/channel/item">
+                    <xsl:sort select="category" order="descending" />
+                    <span class="date">
+                        <xsl:value-of select="pubDate" />
                     </span>
-                </xsl:element>
-            </xsl:for-each>
+                    <xsl:element name="a">
+                        <xsl:attribute name="href">
+                            <xsl:value-of select="link" />
+                        </xsl:attribute>
+                        <span>
+                            <xsl:value-of select="title" />
+                        </span>
+                    </xsl:element>
+                </xsl:for-each>
+            </main>
+            
+            <footer>
+                <p>
+                    &#169; 2022 Matthew Graybosch, all rights reserved<br />
+                    <small>
+                        <i>kudos to <a href="mailto:contact@matthewgraybosch.com">contact@matthewgraybosch.com</a>; flames to /dev/null</i><br />
+                        Powered by <a href="https://pblog.xyz" target="_blank">pblog</a><br />
+                        Made with &#9829; for a simpler web
+                    </small>
+                </p>
+                <p><a href="#content">back to top</a></p>
+            </footer>
         </body>
 
         </html>

In the current default rss.xsl, it’s impossible to scroll blog/index.html because of the style Bradley applied to the <html> element. This isn’t a big deal if you’ve only got half a dozen posts or so, or if you aren’t using responsive font sizes to take advantage of large, high-DPI displays, but I was unpleasantly surprised when testing the new default XSL.

I also wanted to include a nav menu under the header, so I needed to tweak the header’s margin a bit – and I couldn’t resist adjusting the border color to match the text and other borders.

I’ve also added meta tags to include favicons, and a little 🖕 to Facebook and Twitter. If they’re going to use proprietary meta tags instead of the standard <title> and <meta name="description"> tags, then I see nothing wrong with making those tags useless.

Incidentally, HTTP 402 is a defined error code, but not implemented anywhere. It probably won’t get implemented since techies who might otherwise figure out how to implement reasonable payments for access to web pages are instead mucking around with cryptocurrency, blockchain, and the rest of the web3 nonsense.

Tweaking pblog.sh Itself

The shell script that does most of the work, pblog.sh is made to be tweaked. At the very least you’ve got to adjust certain variables to suit your needs. I’ve gone a bit beyond that, though, as you might see from the diff below.

diff for pblog.sh
diff --git a/../pblog.xyz/pblog.sh b/pblog.sh
old mode 100644
new mode 100755
index 8a1e14b..73a508d
--- a/../pblog.xyz/pblog.sh
+++ b/pblog.sh
@@ -1,18 +1,16 @@
 #!/bin/sh
 
 # Site specific settings
-###################################################################################
-DOMAIN="https://pblog.xyz"
-TITLE="pblog.xyz"
-DESCRIPTION="Pandoc static blog generator"
-COPYRIGHT="Copyright 2022, Bradley Taunt"
-AUTHOR="hello@tdarb.org (Bradley Taunt)"
+DOMAIN="http://matthewgraybosch.com"
+TITLE="Matthew Graybosch"
+DESCRIPTION="long-haired metalhead, out-of-print sf author, and grumpy old techie"
+COPYRIGHT="Copyright 2022, Matthew Graybosch"
+AUTHOR="contact@matthewgraybosch.com (Matthew Graybosch)"
 OS="BSD" # "Linux" for Linux, "BSD" for BSD Systems (including MacOS)
-HTML_LANG="en_US" # Your document (HTML) language setting
+HTML_LANG="en" # Adding this for accessibility
 INC_HEAD_FOOT=true # Automatically include the '_header.html' & '_footer.html' on all posts/pages
 
 # Blog structure settings (most users should use these defaults)
-###################################################################################
 TOC=true
 SYNTAX=true
 PAGES_DIR="pages/"
@@ -24,11 +22,13 @@ RSS_HTML="rss/"
 OUTPUT="_output/"
 TIME=$(date +"%T %Z")
 TTL="60"
+WRAP=preserve
 
 ###################################################################################
 # !WARNING!
 # You probably don't need to tweak anything below this line. Edit at your own risk!
 ###################################################################################
+
 if [[ $TOC = true ]]
   then
     TOC_TOGGLE="--toc";
@@ -44,16 +44,16 @@ if [[ $SYNTAX = true ]]
 fi
 
 # Create the RSS specific HTML versions for all posts (no DOCTYPE, Header elements)
-for i in $POSTS; do pandoc -M document-css=false --ascii --wrap=none -s $i -o ${i%.*}.html; done;
+for i in $POSTS; do pandoc -M document-css=false --ascii --wrap=$WRAP -s $i -o ${i%.*}.html; done;
 rsync $POSTS_DIR*.html $RSS_HTML;
 rm $POSTS_DIR*.html
 
 # Create the web browser-focused HTML versions for all posts
 if [[ $INC_HEAD_FOOT = true ]]
 then
-  for i in $POSTS; do pandoc --css=../style.css --ascii --metadata lang="$HTML_LANG" $TOC_TOGGLE $SYNTAX_TOGGLE --wrap=none -A _footer.html -B _header.html -s $i -o ${i%.*}.html; done;
+  for i in $POSTS; do pandoc --css=../style.css --template template.html --ascii --metadata sitetitle="$TITLE" --metadata lang="$HTML_LANG" $TOC_TOGGLE $SYNTAX_TOGGLE --wrap=$WRAP -H _head.html -A _footer.html -B _header.html -s $i -o ${i%.*}.html; done;
 else
-  for i in $POSTS; do pandoc --css=../style.css --ascii --metadata lang="$HTML_LANG" $TOC_TOGGLE $SYNTAX_TOGGLE --wrap=none -s $i -o ${i%.*}.html; done;
+  for i in $POSTS; do pandoc --css=../style.css --template template.html --ascii --metadata sitetitle="$TITLE"  --metadata lang="$HTML_LANG" $TOC_TOGGLE $SYNTAX_TOGGLE --wrap=$WRAP -s $i -o ${i%.*}.html; done;
 fi
 rsync $POSTS_DIR*.html $OUTPUT$WEB_HTML;
 rm $POSTS_DIR*.html
@@ -61,9 +61,11 @@ rm $POSTS_DIR*.html
 # Create the web browser-focused HTML versions for all pages
 if [[ $INC_HEAD_FOOT = true ]]
 then
-  for i in $PAGES; do pandoc --css=style.css --ascii --metadata lang="$HTML_LANG" $TOC_TOGGLE $SYNTAX_TOGGLE --wrap=none -A _footer.html -B _header.html -s $i -o ${i%.*}.html; done;
+  for i in $PAGES; do pandoc --css=style.css --template template.html --ascii --metadata sitetitle="$TITLE"  --metadata lang="$HTML_LANG" $TOC_TOGGLE $SYNTAX_TOGGLE --wrap=$WRAP -H _head.html -A _footer.html -B _header.html -s $i -o ${i%.*}.html; done;
+  pandoc --css=style.css --template template.html --ascii --metadata sitetitle="$TITLE"  --metadata lang="$HTML_LANG" $SYNTAX_TOGGLE --wrap=$WRAP -H _head.html -A _footer.html -B _header.html -s ${PAGES_DIR}index.md -o ${PAGES_DIR}index.html
 else
-  for i in $PAGES; do pandoc --css=style.css --ascii --metadata lang="$HTML_LANG" $TOC_TOGGLE $SYNTAX_TOGGLE --wrap=none -s $i -o ${i%.*}.html; done;
+  for i in $PAGES; do pandoc --css=style.css --template template.html --ascii --metadata sitetitle="$TITLE"  --metadata lang="$HTML_LANG" $TOC_TOGGLE $SYNTAX_TOGGLE --wrap=$WRAP -s $i -o ${i%.*}.html; done;
+  pandoc --css=style.css --template template.html --ascii --metadata sitetitle="$TITLE"  --metadata lang="$HTML_LANG" $SYNTAX_TOGGLE --wrap=$WRAP -s ${PAGES_DIR}index.md -o ${PAGES_DIR}index.html
 fi
 rsync $PAGES_DIR*.html $OUTPUT;
 rm $PAGES_DIR*.html
@@ -110,4 +112,4 @@ echo "<item>
 done
 
 echo "  </channel>
-</rss>";
+</rss>";

I’ve made a few changes to suit my needs, but they might not be worth patching back into the original.

  • I don’t want to do a find/replace when I want to change the --wrap value passed to pandoc, so I’ve added a $WRAP variable.
  • I’m taking advantage of pandoc’s ability to include arbitrary meta tags in <head> with the -H option to set favicon and social media tags.
  • I don’t want a table of contents on /index.html (my home page), so I’m re-rendering it separately.
  • I’m passing in $TITLE so that it gets included in <title> after the page’s title.

This last item is the complicated part. I’ll explain why shortly.

Custom HTML5 Templates

pandoc’s default HTML5 template doesn’t have a sitetitle metadata variable. However, it’s possible to use a custom template with the --template option. Fortunately, custom templates are easy to generate. For HTML I needed the following command:

pandoc -D html5 > template.html

Here’s a diff for my template vs the default provided with pandoc.

changes to pandoc’s HTML5 template
diff --git a/../pblog.xyz/template.html b/template.html
index 9699b85..f7ba274 100644
--- a/../pblog.xyz/template.html
+++ b/template.html
@@ -16,7 +16,7 @@ $endif$
 $if(description-meta)$
   <meta name="description" content="$description-meta$" />
 $endif$
-  <title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
+  <title>$pagetitle$$if(sitetitle)$ – $sitetitle$$endif$</title>
   <style>
     $styles.html()$
   </style>
@@ -26,14 +26,12 @@ $endfor$
 $if(math)$
   $math$
 $endif$
-  <!--[if lt IE 9]>
-    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
-  <![endif]-->
 $for(header-includes)$
   $header-includes$
 $endfor$
 </head>
 <body>
+<div id="skip"><a href="#content">Skip Navigation and Headings</a></div>
 $for(include-before)$
 $include-before$
 $endfor$
@@ -59,7 +57,9 @@ $endif$
 $table-of-contents$
 </nav>
 $endif$
+<main id="content">
 $body$
+</main>
 $for(include-after)$
 $include-after$
 $endfor$

It wasn’t until I started using pandoc that it occurred to me that one might prefix the page’s title – presumably with the site’s title or domain name – instead of appending that after the page title. I don’t think it would look right in a browser tab, so I’ve changed it.

I also noticed a reference to a HTML5 polyfill for IE 9. If that version of Microsoft Internet Explorer still got support, I might have left that in despite taking pride in not using JavaScript on personal websites. However, I doubt IE 9 is used outside of North Korea, and my understanding is that now that IE 11 is no longer supported, its usage dropped to nothing outside South Korea and inadequately budgeted government offices here in the US – and people working in the latter have no business visiting my website at work.

The addition of the <main> element isn’t strictly necessary, but it makes adding a “back to top” link easy. Likewise, I can add a skip navigaton link later on. I should probably do that now and update the diffs.

It didn’t take that long. I can’t seem to tab to the skip nav link on my Mac, but it’s invisible in Firefox and Safari but still shows up in Lynx. (Because if your website doesn’t work in Lynx it just doesn’t work.)

Now that I think of it, I could have put the skip nav link in the _header.html include, but I want to make sure it’s there regardless of the contents of that file.

WebAIM has more information about creating “skip nav” links and making them invisible in graphical browsers.

Diff Files

All of the diff files I’ve included in this post are available to download.

Questions/Comments?

If you have any questions or comments about this post, feel free to email me. You can also hit me up on Twitter, but you’re more likely to get a response sooner by email.

back to top

Blocking Crap with a Hosts File

Fri, 15 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/blocking-crap-with-hosts-file.html


I absolute hate ads on the web, and I prefer to block them whenever possible. There are plenty of ways to do it; if you’re using Mozilla Firefox as your browser then uBlock Origin will do the job nicely, but if you want to block ads on a given machine at the lowest level possible and you haven’t gotten around to setting up your own local DNS using Pi-Hole then you want to get acquainted with /etc/hosts.

What is /etc/hosts?

On UNIX-like systems (GNU/Linux, the BSDs, macOS, Solaris, etc,) the hosts file (located at /etc/hosts) is a file that matches IP addresses to hostnames when DNS is not available, and generally maps the loopback IP address (127.0.0.1) to localhost. You can also use it to map machines on your local network if your router lets you set static IPs but doesn’t provide local name resolution.

However, you can also abuse /etc/hosts to block hosts or domains. Here’s how you’d do it, one site at a time…

sudo echo "0.0.0.0 facebook.com" >> /etc/hosts

You’ll need sudo (or doas on OpenBSD) to gain root privileges just long enough to run this command; users without administrative access aren’t permitted to tamper with /etc/hosts.

What about Windows?

Windows also has a hosts file. On Windows 10, it’s located at C:\Windows\System32\Drivers\etc\hosts. You will most likely find it in a similar location on older versions. Unfortunately, none of the commands I described above or the shell script I provide below will be of use to you.

Do I have to add every ad server myself?

Of course not. That would be an outrageous waste of time. Fortunately, Steven Black has a repository of hosts files that he regularly updates. He compiles it from various ad-blocking lists, and also includes additional lists for fake news, gambling sites, social media sites, and porn sites.

What if I want to customize it?

I had this problem myself. I had some custom blocks for sites I tend to browse, and it’s a pain to manually update the main hosts file myself. It was also a pain to manually select and download the file. So I came up with a shell script to automate all of that. I run this weekly.

#!/bin/sh -e

CURL="/usr/bin/curl"
CURL_FLAGS="-o /tmp/hosts"
SUDO="/usr/bin/sudo"
#HOSTS_DIR="alternates/fakenews-gambling"
#HOSTS_DIR="alternates/fakenews-gambling-porn"
#HOSTS_DIR="alternates/fakenews-gambling-social"
HOSTS_DIR="alternates/fakenews-gambling-porn-social"
HOSTS_URL="https://raw.githubusercontent.com/StevenBlack/hosts/master/${HOSTS_DIR}/hosts"

if [ -x "$(command -v ${CURL})" ]; then
    echo "Fetching new ad-blocking hosts file..."
    ${CURL} ${HOSTS_URL} ${CURL_FLAGS} ;
    echo "
# Custom blocks." >> /tmp/hosts
    echo "0.0.0.0 news.ycombinator.com" >> /tmp/hosts
    echo "0.0.0.0 teddit.net" >> /tmp/hosts
    echo "0.0.0.0 nitter.net" >> /tmp/hosts
    echo "0.0.0.0 tildes.net" >> /tmp/hosts
    echo "0.0.0.0 lobste.rs" >> /tmp/hosts
    ${SUDO} mv /tmp/hosts /etc/hosts
    echo "Placed new ad-blocking hosts file in /etc/hosts."
else
    echo "${CURL} not available
";
fi

You’re welcome to grab a copy of my update-hosts script and use it yourself. Just put it somewhere in your $PATH and make it executable.

back to top

There Goes Your Feed (Again)

Wed, 13 Jul 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/there-goes-your-feed-again.html


If you’ve been following my website’s RSS feed, you might have noticed that it’s all messed up. Or it might no longer be there at all. Sorry about that. It’s my fault for rebuilding the site to use pblog.

The current feed is available at /feed.xml.

back to top

Roe V. Wade Was Overturned Today

Fri, 24 Jun 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/roe-wade-overturned.html


WARNING: This is a rant. Read at your own risk.

Are you sure you want to read this?

Today is the day that six unelected reactionary ideologues made women’s ownership of their own bodies once again subject to majority votes in state legislatures by overturning the precedent guaranteeing constitutional protection of a woman’s right to choose abortion in Roe v. Wade. The Christian Right has been pushing for this for decades, and it seems they finally have their victory in Dobbs v. Jackson Women’s Health Organization.

I look forward to making this victory a Pyrrhic one. I have always voted against the Republican Party because I regard them as a party of censorious, authoritarian, corrupt reactionaries who have been both intellectually and morally bankrupt since Richard M. Nixon’s first (and failed) presidential campaign in 1960. Like paleoconservative Barry Goldwater, I thought that every Republican with a semblance of decency (I won’t admit to the existence of a good Republican) should give Jerry Falwell, Pat Robertson, and their self-righteous ilk nothing but a swift kick up the ass.

Make no mistake: I should be working right now, but instead I am typing this post with barely restrained rage as I consider the implications of a post-Roe America. You might think that since I am a man the issue of a woman’s right to control her own destiny is no concern of mine, but anybody holding such a narrow view should be slapped. If a woman can be forced by law to carry an unwanted pregnancy to term and give birth to a child she is not ready and willing to raise, that child will suffer irreparable harm. If you were truly “pro-life”, you would not want children to grow up in poverty or face neglect or outright abuse at the hands of mothers who never wanted them in the first place.

Moreover, the legal reasoning used to justify overturning Roe v. Wade can be used to overturn precedents striking down anti-sodomy laws and guaranteeing the right to marry to queer and interracial couples. Should states once again be permitted to legislate against “sodomy”, any American having recreational sex – sex for pleasure rather than for procreation – risks being criminalized. Sodomy laws have traditionally been used to criminalize LGBTQ people, but there was never anything to stop police from also going after heterosexual people who indulged in oral sex, anal sex, mutual masturbation, or solo masturbation until Lawrence v. Texas in 2003. Hell, even people indulging in plain old penis-in-vagina sex while using contraception were subject to policing and criminalization prior to Griswold v. Connecticut in 1965.

I can’t speak for anybody else, but I do not want the government policing my sex life. What I do with other consenting adults is between me and them alone. I wouldn’t permit God a say in my bedroom play; why should I allow the government one? If I wanted cops in my bedroom I’d date some.

The question of what to do remains. I am only one man, with one vote. I am not rich enough to buy legislators. What I can do is continue to donate to Planned Parenthood and – despite my distaste for their lack of zeal in protecting freedom of speech – the American Civil Liberties Union. Perhaps donating to the Freedom From Religion Foundation might help as well. I can continue to steadfastly vote for Democratic party candidates for every office, and against the Republican Party, and I can hope that the Democratic establishment will treat the overturning of Roe v. Wade as a long-overdue wakeup call. The party needs more progressive candidates, and progressives and leftists need to get their shit together and understand that their own personal oppressions are irrelevant in the face of a conservative movement bent on reducing the working classes of America to the status of serfs with no say over their own lives and no claim to the products of their labor.

There is one other thing I can do as well, should my state criminalize abortion. If called upon to serve on the jury at the trial of a woman accused of obtaining an abortion or a medical professional accused of providing such services, I can vote to acquit. I will vote to acquit, no matter what, and persuade my fellow jurors to do the same. This is the right of jury nullification. Judges almost never admit to the existence of this right, and prosecutors will often attempt to eliminate potential jurors aware of this right during voir dire, but nevertheless I shall exercise it if given the chance. This is my solemn pledge, sworn in the spirit of eternal hostility toward every form of tyranny over the human mind.

I likewise pledge in that same Jeffersonian spirit that I will never, ever debate or attempt to argue with any sort of authoritarian who believes that my rights and those of women are granted by God or subject to debate or majority vote. My life is my own. My body and soul are my own. I alone have the right to determine the meaning, purpose, and course of my life. Whether I choose to help create another generation is my decision alone. I am sovereign, and all powers of government derive from my consent to delegate some of my rights as a sovereign individual in order to live in a peaceful society. All human beings possess these rights regardless of any distinguishing characteristics. These rights are inherent to us and inalienable because we are human beings and cannot thrive as such without them.

Anybody who believes otherwise is no friend, neighbor, or fellow citizen of mine. If this offends you, consider the side you have chosen. You have sided with tyranny, hopefully because of a principle I do not share rather than in service to your own lust for power. Having sided with liberty, with the right of people to make choices for themselves that I might not necessarily approve, do you honestly think I would not oppose you?

To John Roberts, Samuel Alito, Clarence Thomas, Clarence Thomas, Brett Kavanaugh, and Amy Coney Barrett: you are wrong and you have failed in your duty to your country. You are traitors to the legacy of your predecessors, who exercised the power of judicial review claimed in Marbury v. Madison and mostly used it to work out the implications of enumerated rights, discover unenumerated rights, and strike down encroachments by the state upon the rights of the individual. How dare you claim that the Constitution does not protect a woman’s right to abortion when the Ninth Amendment explicitly says that the enumeration in the Constitution, of certain rights, shall not be construed to deny or disparage others retained by the people?

Guess what, assholes: the right of a woman to control her own body and terminate unwanted or dangerous pregnancies is one of those unenumerated rights. We can’t salvage usable organs from a fresh corpse unless they provided informed consent while still alive, but it’s somehow OK to force women to carry pregnancies to term and give birth? Why is it acceptable for dead men to have more bodily autonomy than living women?

Don’t tell me you’re trying to balance a baby’s right to life with a woman’s right of self-ownership; it’s not a baby until it can breathe on its own. Furthermore, I don’t believe for a second that people pushing for the overturn of Roe v. Wade give a damn about children. They push adoption as an alternative to abortion, but how many unwanted children have they adopted? Not nearly enough. If they actually gave a fuck about children – if they truly were pro-life – they would pay parents to raise children, or at least guarantee adequate paid parental leave for both parents, fund access to affordable childcare, and a whole lot of other shit that more civilized countries do but the US can’t because that would be “socialism”. I don’t believe pro-lifers give a fuck about kids, and I think they’re fine with socialism as long as it doesn’t help the “undeserving”, and we know what conservatives mean by “undeserving” thanks to Lee Atwater.

Why did Republicans and conservative Christians in the United States really want to bring down Roe v. Wade? I suspect that they just want to control women and punish them for having sex – and I hate them for it.

Therefore, to all Republicans and conservative Christians in the United States I say the following: God may forgive you, but you have sown a crueler wind than you were willing to suspect with your victory. Enjoy it while you can, for not even Jesus H. Christ can save you once it is time to reap the whirlwind. He’s more likely to turn his back on you as workers of iniquity. You should have learned to be captains of your own souls instead of aspiring to the admiralty of others’.

back to top

Fitness Progress

Tue, 07 Jun 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/fitness-progress-2022-06-07.html


One of the perks of my membership at Crunch Fitness is that I can get my body scanned periodically. This lets me guage my progress in a more granular fashion than merely jumping on a scale, since it not only gets my weight but also calculates bodyfat percentages, fat mass vs non-fat mass, and various circumferences.

I was first scanned on April 27, and got another scan this morning. While my weight has gone from 267lbs to 270, my bodyfat percentage went down from 37.4% to 35%. Fat mass is down to 93.5lbs from 99.9lbs. Fat-free mass is up to 173.5lbs from 167.1lbs.

Better still, I’ve lost an inch or so off of my waist. I’m gaining a little more muscle definition, to the point where my wife and some of her friends have noticed a change. The trainer I’ve been working with is also pleased with my effort and progress. However, I still have a lot of work to do if I want to get my body fat percentage under 20%.

However, I don’t mind the work. It’s tough, but I’m doing it and I’m going to keep doing it. It beats the shit out of grinding a MMORPG; I’m changing numbers in the real world instead of imaginary numbers. It’s also better than my day job because there’s no ambiguity. I can either lift the weight or I can’t. And if I can’t lift it, I ease off by 5-10lbs, lift that, and then lift more next time.

I’m nowhere near as fit as many of the people I see working out, but they’ve been at it longer than I have. I’ll get there eventually, and just showing up 3-5 days a week and doing the work means I’m doing better than a lot of people my age. I’m already getting stronger.

Need to hit the barbells tomorrow, and see if I can improve on my weights:

  • squat: 65lbs
  • bench press: 55lbs
  • deadlift: 95lbs

That’s 215lbs total; I still have a lot of work to do before I can claim membership in the 1,000 pound club.

back to top

A ZIP Archive for My Fiction

Mon, 06 Jun 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/zip-archive-for-my-fiction.html


In addition to being a software developer, I’ve also written some science fantasy in the traditions of Michael Moorcock, Jack Vance, C. L. Moore, Roger Zelazny, Glen Cook, C. J. Cherryh, C. S. Friedman, Jacqueline Carey, and M. John Harrison. They started out as JRPG fanfic (mainly Final Fantasy, Phantasy Star, Parasite Eve, and Shin Megami Tensei) liberally salted with imagery drawn from hard rock and heavy metal lyrics from bands like Judas Priest, the Blue Öyster Cult, Testament, Savatage, Queensrÿche, The Sisters of Mercy, Type O Negative, Iron Maiden, Mercyful Fate, and many others – not to mention movies like Akira, The Crow, Ghostbusters, Vampire Hunter D, The Killer, A Better Tomorrow, The Devil’s Advocate, Pulp Fiction, and Kill Bill.

It all came down to a few simple questions:

  • “What if the dark lord wore white, already ruled the world, and was trying to save it?”
  • “What if all it took to become the bad guy was the conviction that the end justified the means?”
  • “What if the Gnostics had the right idea and the demiurge was real, but humans could defy it?”
  • “What if writers like H. P. Lovecraft, Michael Moorcock, and Sandy Pearlman had stumbled onto the truth, but misunderstood and distorted it in their art?”
  • “What if authority figures could be given a Miranda warning at swordpoint for abusing their position (and summarily executed for ‘resisting arrest’ just like ordinary people)?”

Imagine Saruman in Silicon Valley, but temporarily victorious because of his soft doctrines. I basically threw what I liked into a blender, kitchen sink and all, and set it to purée. One could also say that I took all of the stories I liked, stripped them for parts, filed off the serial numbers, and used them to build something of my own. There’s sci-fi, fantasy, cyberpunk, conspiracies, and even some romance (since I was eventually writing almost as much for my wife as I was for myself). I eventually managed to publish some of it through a small press that is now out of business. I mean to keep writing, but my new fiction will be on my other website at https://starbreaker.org/.

In the meantime, my old fiction is available in plain text from my personal website at https://matthewgraybosch.com/fiction.zip. You’re welcome to download this archive for personal use. I used to just have the old, raw files listed in an Atom feed, but I think that format’s better suited to blog posts and serialized fiction.

Files ending in .txt are pretty-printed from Org Mode in GNU Emacs and thus hard-wrapped. They won’t look right on mobile devices. Org Mode and Fountain files (ending in .org and .fountain respectively) aren’t hard-wrapped and may be more readable on mobile devices – assuming you can open ZIP archives on your phone in the first place.

A copy of this file is also available at https://matthewgraybosch.com/fiction/README.txt, as are all of the files listed below.

NOVELS

STARBREAKER: A ROCK OPERA (2009)

Morgan Cooper’s search for answers after the murder of his ex play into the hands of an immortal sorcerer-scientist who became a demon to fight demons. Only by seeing the world between the lines and facing his nature can he face the real threat to everything he cherishes, but don’t mistake Morgan for a hero: he only stepped up because somebody had to and nobody else would.

  • starbreaker.txt
  • starbreaker.org

WITHOUT BLOODSHED: A STARBREAKER NOVEL (2013)

Morgan Cooper must prove he isn’t the Phoenix Society’s assassin by taking down Alexander Liebenthal without bloodshed. The hard part is that he’s guilty as sin.

  • without-bloodshed.txt
  • without-bloodshed.org

SILENT CLARION: A STARBREAKER NOVEL (2016)

All Naomi Bradleigh wanted after her latest breakup was some time away from home. But her inability to ignore rumors of unsolved disappearances in a rural town made her trip the working vacation from Hell.

  • silent-clarion.txt
  • silent-clarion.org

SHORT FICTION

STEADFAST: A STARBREAKER STORY (2012)

The people of a newly resettled town have stumbled upon one of the old empire’s darker secrets, left festering since Nationfall. Now its guardian is out for blood, steadfastly determined to carry out his final orders, and Naomi Bradleigh must stop him.

  • steadfast.txt
  • steadfast.org

THE MILGRAM BATTERY: A STARBREAKER STORY (2012)

Before Morgan Cooper can take his oath as an Adversary sworn to uphold individual rights, he must face a final ordeal: a nightmare sequenced from his own memories and the obedience experiments of Stanley Milgram.

  • milgram-battery.txt
  • milgram-battery.org

TATTOO VAMPIRE: A STARBREAKER STORY (2014)

Morgan Cooper wanted a real mission, not something any Adversary could handle. For his sins he’s gonna get one good and hard. But when it’s done he’ll just turn around and want another one.

  • tattoo-vampire.txt
  • tattoo-vampire.org

THE HOLIDAY RUSH: A STARBREAKER STORY (2014)

Nobody likes people who show up late for holiday celebrations, but for once Morgan Cooper has a good excuse. He was making sure somebody else got home for the Winter Solstice.

  • holiday-rush.txt
  • holiday-rush.org

LIMITED LIABILITY: A STARBREAKER STORY (2015)

Michael Chapman is about to launch the biggest venture of his life. Whether he succeeds or fails, the consequences will be earth-shattering, but there’s one person would rather not see the earth shattered…

  • limited-liability.txt
  • limited-liability.org

THIRTEEN CUTS: A STARBREAKER STORY (2018)

A guilt-ridden young man seeks absolution from a therapist who wouldn’t grant it even if he were qualified to do so. The only hope for atonement is a return to the scene of the crime.

  • thirteen-cuts.txt
  • thirteen-cuts.org

UNFINISHED WORK

SHATTERED GUARDIAN, EPISODE 1: CEMETERY GATES (2018)

from an early attempt at a Starbreaker screenplay - the title is from a Pantera song

  • shattered-guardian-cemetery-gates.fountain

SHATTERED GUARDIAN, EPISODE 2: THE MEMORY REMAINS (2018)

from an early attempt at a Starbreaker screenplay - the title is from a Metallica song

  • shattered-guardian-the-memory-remains.fountain

KILLING MACHINE (2019)

another attempt at writing a Starbreaker screenplay - the title is from a Judas Priest song

  • killing-machine.fountain

SAINT OF TRAITORS: A STARBREAKER NOVEL (2020)

Morgan Cooper knows that Isaac Magnin is behind the trafficking of devil-killer rifles and the attempted coup d’état in Boston, but he can’t prove it. He must therefore pin upon the smoothest criminal he’s ever faced a charge that he can prove. Wage theft and the possible disappearance of a scientist in Magnin’s employ will do nicely.

  • saint-of-traitors.txt
  • saint-of-traitors.org

WHEN YOU DON’T SEE ME: A STARBREAKER NOVEL (2021)

A year after the breakup of Crowley’s Thoth, its members meet on the night of the Winter Solstice to figure out how it all went wrong, only to learn that the truth sets no one free.

  • when-you-dont-see-me.txt
  • when-you-dont-see-me.org

back to top

The Butcher’s Bill Is Now 1 Megadeath

Thu, 12 May 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/covid-one-megadeath.html


WARNING: This is a rant. Read at your own risk.

Are you sure you want to read this?

I knew this would happen. The death toll for COVID-19 in the US has exceeded one million. If this were a nuclear war we’d call it a megadeath. Maybe we should anyway, since indifference and outright malice on the part of right-wing politicians and pundits has driven millions of otherwise sensible Americans to refuse to take measures that would save their lives and those of their families and friends.

I’m not happy about this, but I’m not in a position to do much about it. I’ve already done what I can; I’m vaccinated and I wear masks in public so it’s less likely to happen to me.

In the meantime, I think I’ll mark the occasion by putting on some Megadeth and browsing r/HermanCainAward. Why? Because fuck you is why. I’m sick of this shit, and I’d rather see COVID-19 eradicated by vaccination, but if every anti-vaxxer and anti-masker dies of COVID first I suppose I can live with it.

It suggests that Planck’s Principle doesn’t only apply to science.

A new scientific truth does not triumph by convincing its opponents and making them see the light, but rather because its opponents eventually die and a new generation grows up that is familiar with it…

An important scientific innovation rarely makes its way by gradually winning over and converting its opponents: it rarely happens that Saul becomes Paul. What does happen is that its opponents gradually die out, and that the growing generation is familiarized with the ideas from the beginning: another instance of the fact that the future lies with the youth.

—Max Planck, Scientific autobiography, 1950, p. 33, 97

If the arc of history does indeed bend toward justice, it does so one funeral at a time. This is not an argument for hurrying the process along. If Neil Gaiman is right in depicting Death as a lady, it is rude to rush her. Even if he isn’t, rushing conservative politicians and pundits and those will willingly gulp their Kool-Aid into the arms of their maker is a good way to fuck up one’s own life.

History shows that single angry man with a gun does not a revolution1 make.


  1. Gavrilo Princip doesn’t count, since he ended up trigging the First World War. Neither does John Wilkes Booth, even if post-Lincoln Republicans gave up on Reconstruction after the assassination.↩︎

back to top

Podcasts Have Always Sucked

Wed, 11 May 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/podcasts-have-always-sucked.html


WARNING: This is a rant. Read at your own risk.

Are you sure you want to read this?

Becca Butcher writes on Rephonic’s blog about how podcasts are apparently getting worse because it’s easier to make them, the biggest ones tend to have more ads, and many podcasts deal in political topics that provoke listeners’ psychosomatic hemorrhoids.

I disagree with Ms. Butcher. I don’t think podcasts are getting worse. I think podcasts have always sucked. Podcasts were shit in 2005. They are shit today. And if they exist in 2105 they will still be shit.

Podcasting is inherently shitty for the following reasons:

  • Podcasts are audio, not text.
  • Podcasts generally don’t come with transcripts.
  • You can’t easily take excerpts from podcasts.
  • Podcasts are not searchable.
  • Podcasts are slow; many of your listeners can read faster than you can talk. Some of them can type faster, too.
  • Your voice is probably not as pleasant as you and your mother think it is.
  • Podcasts inflate a few kilobytes of text into megabytes of audio.

Incidentally, we used to call podcasting “audioblogging”, and it was shit then, too.

Am I just being an old man yelling at a cloud? Perhaps, but let’s be honest here: informational podcasts are nothing but blogs for the aliterate. They cater to the lazy, people who can read but prefer not to1. Political podcasts, left and right alike, are nothing but AM talk radio migrated to the internet; never mind that AM talk radio in the US is mainly dominated by right-wing cranks and has been since the Federal Communications Commission dropped the Fairness Doctrine in 19872. They do not serve their listeners; they serve only as a medium for unblockable, unskippable advertisements. That they inflate their creators’ egos is merely an ancillary benefit.

While we’re at it, let’s talk about images and video, too. Images and video are lousy at presenting information and ideas at any worthwhile length or depth for the same reason audio is unfit for this purpose. Their utility lies in emotional manipulation and their ability to prompt the viewer to feel instead of thinking. (This is what makes “memes” so insidious.)

Don’t tell me a picture is worth a thousand words. A thousand words doesn’t take up anywhere near as much space as a picture does, even if you compress it with modern algorithms like WEBP or AVIF. If you’ve got something worth saying you can damned well say it in plain goddamn text, preferably Unicode but if you’re writing on an old computer that does’t do Unicode I can probably convert whatever encoding you’re using.

Why? Any computer can handle plain text, even a fucking PDP-11. (Did you think that Ken Thompson and rest of the gang at Bell Labs created Unix on a Cuisinart?)

Now get off my lawn, and go read some books.

NOTES


  1. Yes, I am somewhat judgmental toward people who do not like to read. Yes, this is unfair of me for an array of reasons beyond the scope of this rant. Deal with it.↩︎

  2. You can thank (or blame) former FCC chairman Mark S. Fowler. As a matter of fact, he is a Republican. No, it probably isn’t a coincidence that a Republican led efforts to deregulate telecommunications in a manner that enabled the unchecked spread of right-wing populist propaganda, starting with that demagogue Rush Limbaugh.↩︎

back to top

A Reality Where HTML Never Existed

Fri, 29 Apr 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/reality-where-html-never-existed.html


Despite writing a long manifesto extolling what I call “Web 0”, the original CERN-style World Wide Web0 that existed before HTML was standardized and CSS and JavaScript were inflicted upon the world1, I have found myself going a step further in my thinking than Bradley Taunt did when he wrote the following:

I love CSS. I can spend hours deep diving into a website’s CSS system and never find myself getting bored. It’s pretty amazing to see the problems other designers are able to solve with just a little bit of custom styling and determination.

I like JavaScript. It serves it’s purpose and makes complex functionality on the web easier to wrangle in and understand.

But I think both should have never come into existence.

I’ve been a professional web developer since 2009. I’ve had personal websites of some kind since 1996. I originally took to HTML because hand-writing HTML in a text editor was even better than having WordPerfect 5.1 with “reveal codes” turned on by default. Nevertheless, I have become convinced that HTML itself was a mistake for a variety of reasons.

WHY I THINK HTML WAS A MISTAKE

First, I dislike HTML2 because it is an extension of SGML3. SGML exists because there is a need in government, law, and industry to retain documents for decades in a machine-readable format. Plain text files like this one are not machine-readable because they are not structured data and aren’t marked up to identify elements like headings, paragraphs, URLs, etc. However, based on the assumption that most people writing on the internet are writing for other people, I’m not convinced that the majority of such writing needs to be machine-readable.

Second, I dislike HTML because I’m not convinced that the use of machine-readable formats is beneficial to ordinary people who want to express themselves on the internet. The growing popularity of John Gruber’s Markdown4 since its introduction in 2004 suggests that HTML is not an especially pleasant markup language in which to write. Surely the need for HTML proficiency is both a cognitive burden and an obstacle to becoming a first-class citizen of the internet by operating one’s own public site rather than being a “user” on a corporate-run platform.

Third, I dislike HTML because its machine-readability does not serve individuals. Commercial search engines using proprietary and ever-changing algorithms habitually fail to surface independent, knowledgable, and relevant voices. They instead give prominence to whoever is best at gaming these algorithms through practices called “search engine optimization” (SEO). Lest you think me paranoid, I’m not the only one who thinks that SEO is ruining5 the internet through virtual gentrification6.

Fourth, I dislike HTML because you can’t parse it using regular expressions without the risk of summoning Cthulhu, Zalgo, or Tony the Pony (a possible avatar of Zalgo?)7.

Finally, I dislike HTML because it can be used to carry inefficient or outright harmful media. Without HTML, it’s a lot harder to put inline images in a document, and inline audio and video is downright impossible. In a plain text document like this one, the only way to include an inline image is with what we used to call ASCII art.

For example, here is a stylized image of me8 converted to ASCII art.

ccccllllllllooollllllllllllcccc:::::::::ccccllc:::::c::::::::::::::::;;;,,''''..
ccccllllllooolllllllllllllllllllllllllccllllc:;::::c:::::::::::::::::;;;,,,,,,''
ccccclllllllllllllllllooooooooolllccccccclcc:::ccccc:::cc:::::::::::::;;;,;;,,''
ccccccccclllllllllllloooddddoooollooollooddddolcccccccccccc:::::::::::;;;;;;,,''
:::::c:::ccllcllllloooddxxddoolllloollcccllllooollllccccccccccc::::;;;;;;;,,,'''
:::::::::::cccclllllooool::;;:cccoolcccccccc:;::cllllccccccc::::::;;,,,,,,'''...
:::::::::::ccclllllcccl:,,,;:clodxolccllcc:::;,,,;:lllccc:::::;;;;,,,,,,,''.....
;;;;;::::cccccccccc:c:,'';ldkO00000000000Okxdoc,...,:lc::;;;;;;,,,,''',,,'......
;;;;;;;:::cccclllllc;..,cxk00KKKKKKKKKKKKKKKKK0d:'..',::;;;;,,,,'''''''.........
;;;;;;;;::ccclllllc,..;oxkO00KKKXKKKKKXXXXXXXKK0x:''.',;;;;,,''...'''...........
;;;;;;;;;;;;:clooo:..,ldxOO00KKKKKKKXXXXXXXXXKK0Oo;'...',;,''...................
,,;;;;;;;;;;cooddl,..:odkOO00KKKKKKKKKKXXXXXXKK0Ox:''....,,''...................
,,,,,,,;;;;cooodoc. .codkOOO00KKKKKKKK00OOOOOOOOOkl''.....'''..........  ...    
,,,,,,,,;:coooddl,. .cddolccccoxO00Okdl::::clloodkd;'......'...............     
;;;;;;;;;coooodl;.. .colclcc:,,;lkOko::::::lloodxkx:'....'..'............       
OOOOOkkkkkOkkxo:'.. .clll:;;;;;;cxOxlcc::;,,:;cdkkkl''...''.''..........        
000OOOOOO00K0kc,... .:cod:;;;cclok0kdxxoolccloxOO0Od;''...''.'......  .         
xxxkOOkkOO0KOd:'..  .cldxxdddxxxxOKOkxkkkkkkkOOOO0Od;,,'..''......              
:clokKXKKXNNOo;...  .loodxxkOOkdx0K0OxxkOOOOOOOOkkko;,,....'.....               
clox0XNWWWWXx;....  .ldxxxkkOOxllxkxoook0OOOOOOOkkxl;;;. .......                
00KKXNNNNNN0c::...  .:odxxkkkkxl:;:::coO00OOOOkkkxxc;:,. .......                
KKKKKKKKKKKdcl;..   .,loddxxkkkkddoodxkOOOOkkkkxxxd;,,..........                
KKKKKKKKKX0ddc....   .;looddxxdolllllccloodxkkkxxxo,''........'.                
KKKKKKKKKX0kkl.....   .:loodddlc:cclllclldkkxxxxdxo'.......''.'.                
KKKKKKKKKK0kOk;.....   .:loodddollllllodxkkkkxxddd:........','''.               
KKKKKKKKKKOk0Oo,....    .:loodddoooodxxkkkkkxdddo:..........,;,''.          ....
KKKKKKKK0O0KKOo'....     .;:loddxkkOO0OOOOkkddol;....   .....,:;,'......  ......
000KKKKK0kOKKk;..        .,,;:clddxkkkkkkxdoc:;,.      .......';;;,....''.......
00OkxxxkOxdxd;...        'cc:;;;::ccccccc::;;;;'. ............''',:;.''','......
KKK0xocclll;.....  .    .;odolc:::::::::::::cc:,............'''',',;;,;:::,'... 
KK0kdl:;::,.....  ..    .:ddxdolccccclllllllllc,.........'..'''',,'':::::::;,''.
xl:,,''''.......  ..    .ldxxxxddooooooodddddoc,......'..''..'''','';;;;;;;:;',,
'''''..............     'oxxxkxxxxxxddxxxxddddc,'......''''..'',''..,,,,;,,,,,'.
''''...............     .lkkkkkkkkkkxxxxxxxxxdc:c,......,,''''',,'..',,,,,,'''''
''.................  .  .:kOO00OOOOOkkkkkkkxxxolo;......',,''',;,''''''.''''''..
.'............... .....  'd000000000OOOOOOOkkxxdl'........'''',;;,'''''.........
.'..............   .......cO00K000000OOOOOOOkko;.. .......''',,,;,'.','.....'...
.'...........'.     ......;k000KK00000000OOko;..............',,,,,,'',,'....'...
..'...........       ......d0000KK0000000Ox:'...............,,,,,',;,,,,'...'...
...'.........         .....l0KKKKK00000OOx:'..'............',,,,,'';;,,,,'......

If you squint hard enough, it might vaguely resemble an image of a long-haired man. Now, can you imagine advertisers using ASCII art?

Furthermore, without HTML we probably wouldn’t have JavaScript – a programming language originally designed to manipulate HTML documents via the Document Object Model (DOM). Without JavaScript, it would be a lot harder to place cookies on your machine, track you, and serve “relevant” ads.

A WORLD WIDE WEB WITHOUT HTML

What would the World Wide Web look like without HTML? I doubt the WWW would exist at all without HTML. Nor would HTTP, the HyperText Transfer Protocol. I strongly doubt we would have FARK, Reddit, Digg, MySpace, Twitter, Facebook, YouTube, etc.

What would we have instead? We might still have the pre-WWW Internet. We might still be using USENET as our worldwide public forum, and might perforce have taken serious measures against spammers instead of abandoning USENET to people posting bootleg media and software.

People writing on the internet would probably do so in text files like this one, and host them via Gopher or anonymous FTP. One suspects that PostScript/PDF documents, images, audio, and video might also be available through these protocols.

Internet Relay Chat would probably be more popular, and one hopes that both IRC and XMPP (originally Jabber) would have gotten the work necessary to make it as accessible to the general public as AOL Instant Messenger and MSN Messenger had been in their heyday.

Perhaps we’d still be using Kermit and Unix-to-Unix Copy (UUCP) to transfer files between machines in large batches.

IS A WORLD WITHOUT HTML TRULY BETTER?

I honestly don’t know if a world without HTML, HTTP, and its attendant ills (social media, centralization, adtech, the monetization of human attention) would truly be better. Perhaps the founders of Google would have built a better version of Archie (FTP search) and Veronica (Gopher search), we’d still have SEO, and the internet would still be the sort of cyberpunk dystopia too dull to be worth the efforts of William Gibson, George Alec Effinger, and Neal Stephenson to depict in fiction.

CAN WE GET AWAY FROM HTML AND HTTP?

Nobody is holding a sword to my throat and forcing me to write in HTML. I’m doing just fine with plain text. However, if I wanted to publish my foolishness over a protocol other than HTTP – such as anonymous FTP, Gopher, or Gemini – I would have to run my own VPS or figure out how to self-host on a residential connection without running afoul of my provider’s terms of disservice.

This isn’t worth my time/effort, even though I could do so if necessary. Right now, it’s preferable to serve my files over HTTP. It’s the de facto standard for transferring all kinds of media, and just about everybody has a web browser.

WHAT ABOUT XML?

As much as I dislike machine-readable formats for personal publishing on the internet, I find myself compelled to continue to put up with RSS and Atom. Though they are both XML formats (XML being another extension of SGML), it was not that difficult for me to figure out how to generate Atom feeds with shell scripts and GNU recutils, and the utility to people who want to get updates to my site without having to manually visit makes the effort worthwhile.

Furthermore, all major web browsers provide at least partial support for XSL Transformations, allowing the generation of HTML from Atom feeds. Creating and testing the stylesheets is painstaking work, but once complete I need not revisit my XSL files unless the Atom feed format changes.

WHAT ABOUT JSON?

I doubt that JavaScript Object Notation would even exist without JavaScript.

WHAT ABOUT YAML FOR MACHINE-READABLE DOCUMENTS?

What have you been smoking and where can I get some?

Seriously, though: YAML is horrible enough when used to write DevOps config files9.

I refuse to even consider YAML for documents.

DO PEOPLE REALLY WRITE IN PLAIN TEXT?

People active in the BBS scene during the 1980s used to do it all the time. Many surviving ASCII files are collected at http://textfiles.com/.

back to top

Party Like It’s 1989

Thu, 28 Apr 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/party-like-its-1989.html


Two thousand twenty-twenty
COVID-19? Oops! Outta time
So online I’m gonna
Party like it’s 1989

~ with apologies to Prince…

I’m gonna level with you here. I like the 1990s Geocities homepage aesthetic. People like sadgrl and tyoma do it well and make it work for mobile devices as well as the desktops in which the Geocities aesthetic was originally rooted. I bet they have fun doing it, too. However, I’m not going to do that for my own website for a few reasons.

  • I don’t have the patience.
  • I tend to think in text, not images.
  • I’m nostalgic for an older aesthetic, one that predates Geocities.

You know what the Geocities aesthetic looks like, but let me tell you about the CERN aesthetic. You know, CERN, home of the weasel hadron collider? That’s where the World Wide Web was invented, where the first website was uploaded.

That first website still exists, incidentally. If your experience of the internet is defined by Google, Facebook, Twitter, Youtube, etc, you should visit the first website in history right now. You won’t believe how bare-bones it is. It’s nothing but text with hyperlinks. If you’re using a graphical browser, right-click that shit and select “view source”. That motherfucking website doesn’t even have a doctype identifying it as some kind of HTML, let alone a stylesheet. It’s so brain-dead simple that you might only use Lynx to read it in your terminal because writing your own script to download and render pre-W3C HTML isn’t worth your time.

terminal app screenshot
the first website, rendered with lynx in the macOS terminal app

Never mind the Space Jam website from 1996. This website has been up since 1989. I was only 11 years old at the time. I didn’t know any of this was happening. I didn’t have a PC. I had maybe five NES games of of my own, and if I wanted to play something different I had to ride my bike down the video store, rent it on Friday, and hope I was able to beat it before I had to take it back on Sunday because otherwise somebody else would probably rent it and overwrite my saved game with a saved game with their own (unless it used passwords instead of battery-backed SRAM, which was its own kind of hell).

That’s how badly I missed out. That’s how out of touch I was. Never mind that the DOS/Commodore 64/Amiga/Atari BBS scene would have been a more natural fit for me given that I grew up in New York rather than Zurich. Never mind that I was wasn’t even in junior high school, let alone a university student or postgraduate who might actually have access to the sort of hardware for which the WWW was originally designed, like a workstation manufactured by Sun Microsystems or NeXT Computer.

None of that matters to me. What matters is what I feel when I look at this primitive motherfucking website that’s just black text on a white background. It’s just a list with a bunch of links to other pages that would be more of the same except for the text. Despite my appreciation for the Geocities look, this is what grabs me.

I don’t get it, to be honest. I’m not going to try to explain it, but whenever I look at a website that is nothing but text — with maybe a few lines of CSS as a treat — I have this feeling of rightness, like this is how the web ought to be. It’s like Tim Berners-Lee and his crew got this mostly right back in 1989 and we’ve been fucking it up ever since.

I’m not the only one who feels like this. For example, Bradley Taunt has a site called xhtml.club, the “Extreme HyperText Movement for Luddites”. Despite being a web designer by trade, he’s suggested that CSS and JavaScript might have been a mistake. I think he might be right, but that’s a subject discussed in a different post. Nevertheless, I think that around 1989 we had the social internet mostly built. I honestly think all of the basic protocols were in place.

  • WORLD WIDE WEB: your profile and a place to share documents/multimedia
  • KERMIT: remote login and file transfer
  • USENET: multi-participant discussion forums with limited archival
  • IRC: ephemeral (by default) multi-participant chat
  • EMAIL: direct messages and private conversation
  • MUDs: massive multiplayer online RPGs

Everything we needed was there. All we had to do was refine it, make it more accessible to more people, and keep iterating until we had perfected this technology by making it possible for anybody to run this shit on personal computers out of their own home if they wanted to. We could have made cyberspace an actual virtual utopia, a globe-spanning array of “third places” that offered intellectual liberation and participatory direct democracy, where you didn’t have to be what people thought you were in real life, where you didn’t even have to use the name on your birth certificate unless you wanted to for whatever reason.

You know what we got instead. We got one attempt to reinvent CompuServe, Prodigy, and America Online after another. We got surveillance capitalism. Streaming video is cable TV with more surveillance. Streaming music is broadcast radio with more surveillance. Amazon and its imitators are just QVC with a comments section. Some of us used to worry about government censorship, but most of us didn’t expect the government to outsource that shit to the private sector — though we damned well should have seen the privatization of tyranny coming since that’s what Republicans have been pushing in the US since 1980.

We never needed Mark Zuckerberg to build the metaverse. It’s already here, and worse than anything William Gibson or Neal Stephenson could have imagined in the early 1980s or 1990s. We got the dullest possible cyberpunk dystopia: the most heavily-frequented sections of the internet are strip malls piled atop each other where you never know when you’re about to walk into a talking penis, you can’t even whip out a sword to cut your way free of the bullshit, and no manic pixie dream razorgirl is ever gonna come to your rescue.

Seriously, though: Web 1.0 was OK. Web 2.0 turned out to be an exploitative crock of shit. Web3 is going to make a lot of people nostalgic for Web 2.0’s worst excesses if people keep drinking the crypto Kool-Aid. Blockchain is snake oil, always has been, and always will be. NFTs and Web3 are just snake oil with an arsenic chaser. I want no part of any of that shit. I’d rather work for Palantir than deal with that shit at my day job, so I think I’ll stick with Web 0, the CERN-style web. I know Aral Balkan has his own definition for Web 0, but here’s mine:

  • As decentralized as you can handle. The ideal is a machine you own and run out of your own home on residential internet, but that isn’t always an option for various reasons (residential ISPs being one of them). If you’ve got to rent a VPS or make do with shared hosting I won’t judge you because I rent space on a host myself. Hell, use Neocities if that’s all you can manage, but try to kick in a fiver a month so they don’t have to resort to ads or selling user data. Just get the hell off social media and stop being a digital sharecropper.
  • What should you put on your site? Lots of text marked up with HTML, or run a Gopher hole or a Gemini capsule. Hell, you can serve plain text on the web if you want. Images should have alt text for people using screen readers. Audio and video are fine as long as they have plain text transcripts for people with disabilities, lousy connections, or a repertoire of virtues that doesn’t include patience.
  • If you need to provide dated updates, use RSS or Atom, or just keep a changelog.
  • No JavaScript for core functionality. If you do use JavaScript, provide alternate functionality using the <noscript> element. TL;DR: IF YOUR WEBSITE DOESN’T WORK IN LYNX THEN IT JUST DOESN’T WORK.
  • Your site can have a little CSS, as a treat, to enhance readability if you go with WWW instead of Gopher or Gemini. Don’t worry about layout, but use a little CSS to enhance typography or scale font sizes for HiDPI devices so that people don’t have to squint at your site or manually zoom.
  • If you go with HTML and the Web, please try to design your pages and site to last.

Incidentally, you don’t have to do minimalism just because I prefer it. If you aren’t into the CERN aesthetic and prefer the Geocities look, go for it. Hell, if you want to reinvent Medium then more power to you. Your personal website is your canvas, your medium for self-assertion. As long as you have your own website and speak your mind on a platform you own and operate first before syndicating to other people’s platforms, I’m happy for you.

Listen: the Web might be fucked, but isn’t going to get better unless we get off our asses and make it better. The only way we’re gonna make it better is one personal website at a time, and one hyperlink at a time. I’m doing my part over here. If you want to join in, there are people willing to help you. I’m one of them, and I’m gonna party like it’s 1989.

back to top

Playing as a Woman in Final Fantasy XIV

Wed, 27 Apr 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/playing-woman-ffxiv.html


Playing Final Fantasy XIV is one of the ways I like to relax and be quasi-sociable after work. I’m part of a gaming clan (or “free company” to use the game’s term) and I frequently help out other players with dungeon crawls and raids. I often play with random players in pick-up groups (PUGs). And then there are the people who hang out in towns and use the game as a fancy chatroom.

While passing through a town, a nearby player said something like, “I’m pretty sure that at least half of the girls around me are actually guys.” They pointed to me as the exception because my character0’s outfit wasn’t as revealing as is typical for women’s armor in MMORPGs. They then asked, “Why can’t guys play as guys?”

Naturally, an argument ensued. I didn’t get involved because arguing on the internet is generally an exercise in playing stupid games to win stupid prizes. Besides, it was funnier to point this person out to my wife and chuckle over how they don’t realize I’m also a man “pretending to be a woman”.

I don’t do it for attention.

I don’t do it so that people will give me free stuff.

I don’t even do it as some kind of sexual fetish or because I’m secretly transgender.

I do it because my wife loves to play with the character creators in the RPGs I play, and she likes to design my characters. She tends to create female characters, and I’m fine with that. I’ve been playing games with female protagonists since Metroid in the 1980s, and Final Fantasy XIV isn’t the first FF I’ve played with a female protagonist:

  • Final Fantasy VI centered on the struggles for identity and meaning faced by Terra Branford and Celes Chere.
  • Final Fantasy X might have used Tidus as a viewpoint character and narrator, but Yuna’s journey from sacrificial maiden to godslayer was the real story.
  • Likewise, Final Fantasy XII used Vaan as a viewpoint character, but his struggle to put aside his hatred over the past for the greater good is a mirror of that of one of the game’s central characters, Ashe.
  • Final Fantasy XIII gave us Claire Farron (aka Lightning), a soldier betrayed by her government whose refusal to allow herself to be murdered ignites a sequence of catastrophes.

Tradition aside, there is the fact that there is simply no point in trying to create an avatar that looks like me. I do not resemble any of the idealized male figures provided by RPG character creators, so if I’m going to have an avatar that doesn’t look like me, why should I limit myself to the gender I was assigned at birth?

I don’t think I’m weird for doing this. Not when a Quantic Foundry2 survey suggests that 1 in every 3 men polled claims to prefer to play a female character in video games3.

Some might argue morality, but I see nothing wrong with pretending to be a woman in MMORPGs. Not when I pretend to be a man in real life. My masculinity is as performative3 as it is conditional. I pretend to be a “real man” when out in public the same reason I pretend that I’m not autistic. I do it to get what I want out of life, because being myself in the wrong setting is a losing strategy.

Is this deceitful? Perhaps, but if you want a world where people don’t lie to you about who they really are, maybe you should work to create a world where people aren’t punished for such honesty.

back to top

Using GNU Recutils to Generate a Playlist Feed

Tue, 26 Apr 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/make-your-own-video-playlist-in-an-atom-feed-with-gnu-recutils.html


In my previous post about building a shinobi site, “Going Dark (Building a Shinobi Site)”, I had explained that one of my reasons for coming up with my own process instead of using Bradley Taunt’s was that I wanted to be able to create my own video playlists without having a YouTube account. In this post I’ll be documenting my method for generating such a playlist using GNU recutils, shell scripting, and GNU make.

As with “Going Dark”, I’m writing this mainly for my own reference. You can use this post to create your own playlist in an Atom feed, too, if you have some familiarity with Unix-like systems or are willing and able to search for the appropriate documentation to figure it out on your own. My email address is at the end of this post in case you have questions.

A Recfile for Playlists

I started out using the same recfile format that I used for posts, but eventually decided on something more ambitious.

# -*- mode: rec -*-

%rec: Playlist
%mandatory: Artist Title Album Year Video Created Updated
%key: Id
%auto: Id
%sort: Id
%type: Created date
%type: Updated date
%type: Sort int
%type: Video line
%type: Description line
%doc: 
+ A plain-text database that can be used to generate HTML index,
+ RSS feeds, and XML sitemaps. Used with GNU recutils.

Using this format, we create entries like so:

Artist: Baroness
Title: Take My Bones Away
Album: Yellow & Green
Year: 2012
Video: 4V0N1x675FQ
Created: 2022-04-26T16:41:55-05:00
Updated: 2022-04-26T16:41:55-05:00

Unlike my other recfiles, I don’t include full URLs in my playlist recfile. Instead, I only pull the video ID strings YouTube uses. This is important because it gives me more flexibility when creating my entry template for the playlist feed.

<entry>
  <title>{{Artist}}: "{{Title}}"</title>
  <link href="https://yewtu.be/watch?v={{Video}}" rel="alternate"/>
  <link href="https://yewtu.be/vi/{{Video}}/maxres.jpg" rel="related"/>
  <id>https://yewtu.be/watch?v={{Video}}</id>
  <updated>{{Updated}}</updated>
  <published>{{Created}}</published>
  <summary type="xhtml">
    <div xmlns="http://www.w3.org/1999/xhtml">
      <p>
        <img src="https://yewtu.be/vi/{{Video}}/maxres.jpg"
             alt="preview image for &ldquo;{{Title}}&rdquo; by {{Artist}}"
             width="640"></img>
      </p>
      <ul>
        <li>Track: &ldquo;{{Title}}&rdquo;</li>
        <li>Artist: {{Artist}}</li>
        <li>Album: <i>{{Album}}</i></li>
        <li>Year: {{Year}}</li>
      </ul>
    </div>
  </summary>
</entry>

By using YouTube’s video IDs instead of using YouTube’s URLs as is I gain the ability to do the following:

  1. I can link to a reliable Invidious instance like yewtu.be instead of directly to YouTube.
  2. I can embed videos in the Atom feed’s content as escaped XHTML, which supports the <iframe> element.

However, most feed readers will strip out <script> and <iframe> for security reasons. This is perfectly reasonable, so I’ve updated my template to pull a static preview image instead.

Also, unlike in HTML5 where you don’t need a closing tag for <img> or even a ‘/’ before the ‘>’ at the end of the <img> declaration, XHTML seems to demand a closing </img> tag. Or, at least, tidy-html5 seems to when checking over Atom feeds.

Building the Atom Feed

The script for building my playlist’s Atom feed is quite similar to the others. The only real difference is that I’m not using the usual “atom.templ” template with recfmt, but the “playlist.templ” shown earler.

#!/usr/bin/env sh

FILE="playlist"
DATE=$(date +"%Y-%m-%dT%H:%M:%S-05:00")
YEAR=$(date +"%Y")
AUTHOR="Matthew Graybosch"
EMAIL="contact@"
DOMAIN="matthewgraybosch.com"
TITLE="Matthew's Playlist"
SUBTITLE="music that ${AUTHOR} enjoys and recommends"
ICON="icon.png"
RIGHTS=${YEAR} ${AUTHOR}, all rights reserved"

echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<feed xmlns=\"http://www.w3.org/2005/Atom\">
    <title>${TITLE}</title>
    <subtitle>${SUBTITLE}</subtitle>
    <icon>https://${DOMAIN}/${ICON}</icon>
    <link href=\"https://${DOMAIN}/feeds/${FILE}.xml\" rel=\"self\"/>
    <updated>${DATE}</updated>
    <author>
    <name>${AUTHOR}</name>
    <email>${EMAIL}${DOMAIN}</email>
    </author>
    <rights>${RIGHTS}</rights>
    <generator>POSIX shell and GNU recutils</generator>
    <id>https://${DOMAIN}/feeds/${FILE}.xml</id>";

recsel ${FILE}.rec | recfmt -f playlist.templ

echo "</feed>";

Generating Feeds with GNU Make

Invoking this is pretty easy. Here’s the build target from my makefile.

.PHONY: build
build: posts.xml fiction.xml bookmarks.xml playlist.xml

# I've snipped the other build targets for clarity. --M.G.

playlist.xml: playlist.rec playlist.templ
    recfix --auto playlist.rec
    recfix --sort playlist.rec
    ./playlist.sh | sed -e 's/\ \&\ /\ \&amp;\ /g' | tidy -q -i -w -utf8 -xml > feeds/playlist.xml

Another difference from the other feeds is that I make a point of using sed4 to escape any ampersands I’ve put in my recfile so that they don’t foul up the resulting XML. Yes, I could just use “&” instead of “&” in the recfile itself, but I’m only human and might forget. The computer won’t forget; it’ll pipe the output of playlist.sh into sed and pipe sed’s output into tidy every single time, and do it the same way every time, as long as I don’t alter the makefile.

Why use tidy? It not only pretty-prints my XML in case I’m bored enough to ever want to read it myself, but does local validation to ensure that my script is generating well-formed XML and that anything that should be escaped gets escaped. If it throws warnings or outright errors, then I screwed up and have some debugging to do.

Where’s the Playlist?

It’s available at https://matthewgraybosch.com/feeds/playlist.xml. You might want to wear headphones and turn the volume down; my playlist is mostly heavy metal and it can get loud.

I no longer provide this feed.

Why Invidious?

Invidious uses YouTube’s API to access video hosted on Google’s service, but appears to be more privacy-friendly.

back to top

Going Dark (Building A Shinobi Site)

Mon, 18 Apr 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/going-dark.html


I’m revamping my personal website yet again, having found inspiration on a little site called shinobi.website. It seems to be UI designer Bradley Taunt’s latest project, and he has the following to say:

A shinobi website is a text-based, RSS focused blogging “system”. I put the word system in quotes since it’s really just a simple bash script that converts plain text files into an RSS feed. So, it isn’t an actual blogging platform or website in the traditional sense.

Why the name “shinobi”? Well, a shinobi was a covert agent or mercenary during the time of feudal Japan. Due to their focus on infiltration and assassination, they required a strong focus on stealth and being unseen.

A shinobi website follows the same principles of being secretive and unseen (minus the assassinations and espionage). Only those who choose to include your feed in their respective RSS readers can view your content via the included URL.

I loved this idea, and immediately set about making my own. I no longer had to worry about HTML or CSS. I no longer had to pretend I gave a shit about SEO. Browser support was no longer something I had to deal with when I wasn’t getting paid.

I could just write in plain text, the way I used to on my very first computer (a secondhand IBM that had nothing but DOS and its built-in tools installed), and just upload the files and a feed. If people found my feed and subscribed, great! If not, that was fine too.

The only question I had was whether I should manually wrap my text at 72 columns or leave it unwrapped. However, it occurred to me that hard-wrapping might result in mobile browsers mangling the flow, so I leave my text un-wrapped. If you’re viewing this on a desktop or laptop with a high-resolution display, I suggest you resize the window or increase text zoom.

Limitations of the Original Design

It wasn’t hard to get my shinobi site going with a few posts. Once I got started, however, I got to thinking about how limited Taunt’s approach had turned out to be. His original script for generating feeds assumes you’re putting text files in a single directory and that the first four lines contain metadata in the following format:

  1. Date
  2. Title
  3. (blank)
  4. Summary

This works just fine if you only want to make a blog out of text files, but I wasn’t content with this. It occurred to me that I wanted a feed for my fiction as well as a RSS blog. No problem; I could still do that with Taunt’s script.

However, if I wanted to share photos after a trip, I was screwed. Where was I going to get metadata for the feed? Out of the EXIF data? Sure, there’s a tool for that, but what if the EXIF data isn’t there because I was smart about security for once and made sure that my devices automatically wiped all EXIF data?

Here’s another use case for you: suppose I wanted to share a playlist without a YouTube or Spotify account? You can do that with RSS by creating one entry per URL, but where do you get the metadata for each URL so you can generate the feed?

It was plain that Bradley Taunt’s feed generator, which he adapted from the original by Len Falken, wasn’t suited to all of the use cases I had in mind. However, Bradley Taunt isn’t my local Burger King. If I wanted it done my way, I had to do it myself.

I Did it My Way

This was fine; I’m a FULLSTACK THAUMATURGE, after all, and it wasn’t like I was being called upon to build a cathedral on quicksand from blueprints scribbled on bar napkins. I knew what I wanted, and knew how to do it.

You see, James Tomasino wrote a little blog post back in 2020 about a GNU package called recutils.

GNU Recutils is a set of tools and libraries to access human-editable, plain text databases called recfiles. The data is stored as a sequence of records, each record containing an arbitrary number of named fields. The picture below shows a sample database containing information about GNU packages, along with the main features provided by Recutils.

I didn’t do anything with recutils when I first learned about it in 2020 because I didn’t have a use case in mind, but for some reason it stuck in the back of my mind. Maybe it was because of the mascots: two male turtles named Fred and George merrily humping away.

However, once I started making my own shinobi site it occurred to me that maybe I should be storing metadata in recfiles, so that I can run them through templates to generate feeds.

So, that’s what I did. First, I needed to establish a format. Fortunately, the recutils manual explains how to do this if you need more detail than James Tomasino provides in his post.

My Recfile Format

I only have a few fields, and most of them are mandatory. Though the Atom format only requires an <updated> date, I also provide the <published> date. Unfortunately, recutils only sorts in ascending order. This makes generating the feeds a bit complicated.

# -*- Mode: rec -*-

%rec: Posts
%mandatory: Title Url Description Created Updated
%key: Id
%auto: Id
%sort: Id
%type: Created date
%type: Updated date
%type: Sort int
%type: Url line
%type: Description line
%doc: 
+ A plain-text database that can be used to generate HTML index,
+ RSS feeds, and XML sitemaps. Used with GNU recutils.

When adding an entry, I only provide the mandatory fields. Here’s the entry for this post:

Title: Going Dark
Url: https://matthewgraybosch.com/posts/going-dark.txt
Description: I found a little site at https://shinobi.website/, and I liked it enough that I want to make my own.
Created: 2022-04-18T16:33:56-05:00
Updated: 2022-04-22T18:50:20-05:00

When I build the feeds using my makefile, it uses recfix to set the Id field. Whenever I add an entry, I add it at the top of the file, just after the format documentation. Since I’m using GNU Emacs to edit my files, I can use M-x flush-line and have it remove every line that starts with the “^Id.*” regexp (don’t include the quotes!).

Setting the Created and Updated dates is a bit of a pain, but using GNU Emacs makes it easier. Invoking C-u M-! (CTRL+u and then ALT+!) will give me a shell prompt that will insert the output wherever the cursor happens to be. I then run the following command to get a timestamp:

$ date +"%Y-%m-%dT%H:%M:%S-05:00"

The date command should be available on any UNIX-style system whether it’s GNU/Linux, BSD, macOS, Solaris, AIX, etc1. You might even find it on Windows if you’ve installed Git for Windows and had the installer include all of the extras (like bash, the Bourne Again shell). The format string is defined by the standard C library strftime(3). If you want details, type man strftime at a shell prompt.

This seems pretty simple to me, but I’m used to it. Once the recfile is ready, we’re ready to process it using a shell script that calls recsel and recfmt.

My Atom Feed Generator

Unlike Bradley Taunt and Len Falken, I prefer to use the more modern Atom format instead of RSS. Atom has a formal IETF specification (RFC 4287) and an online validator. Most feed readers will handle both RSS and Atom, so it’s really just a matter of personal preference.

#!/usr/bin/env sh

# © 2022 Matthew Graybosch <contact@matthewgraybosch.com>
# This is anti-capitalist software. See LICENSE for details.
# If the file isn't present, please visit https://anticapitalist.software/

FILE="posts"
DATE=$(date +"%Y-%m-%dT%H:%M:%S-05:00")
YEAR=$(date +"%Y")
AUTHOR="Matthew Graybosch"
EMAIL="contact@"
DOMAIN="matthewgraybosch.com"
TITLE="Fullstack Thaumaturge"
SUBTITLE="a personal blog by ${AUTHOR}, accessible only with a feed reader"
ICON="icon.png"
RIGHTS="© ${YEAR} ${AUTHOR}, all rights reserved"
UUID=$(uuidgen)
DATE=$(date +"%Y-%m-%dT%H:%M:%S-05:00")

echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<feed xmlns=\"http://www.w3.org/2005/Atom\">
    <title>${TITLE}</title>
    <subtitle>${SUBTITLE}</subtitle>
    <icon>https://${DOMAIN}/${ICON}</icon>
    <link href=\"https://${DOMAIN}/feeds/${FILE}.xml\" rel=\"self\"/>
    <updated>${DATE}</updated>
    <author>
        <name>${AUTHOR}</name>
        <email>${EMAIL}${DOMAIN}</email>
    </author>
    <rights>${RIGHTS}</rights>
    <generator>POSIX shell and GNU recutils</generator>
    <id>urn:uuid:${UUID}</id>";

recsel ${FILE}.rec | recfmt -f atom.templ

echo "</feed>";

This script will dump the feed into standard output, so you need to redirect it to a file. I handle that in my makefile.

Hey, What’s atom.templ?

It’s a reference to the Temple of the Atom. No, that’s just me being silly. Here’s the deal: if you pipe the output of recsel into recfmt, you can specify a template for the data you’ve pulled out of the recfile. In this case, the template looks like this:

recfmt template <entry> <title>{{Title}}</title> <link href="{{Url}}" /> <id>{{Url}}</id> <updated>{{Updated}}</updated> <published>{{Created}}</published> <summary> {{Description}} </summary> </entry>

Of course, the recutils manual uses mail merge as an example, but recfmt works just as well for generating Atom feed entries. Hell, you could probably use it to generate JSON if you’re feeling masochistic but don’t have a taste for From Software’s action-RPGs.

Putting It All Together with GNU make

Some people (like Len Falken) might argue that my use of GNU make2 to build my feeds adds needless complexity and that I could get the same result by writing another shell script. They aren’t wrong, but once I got the hang of writing my own makefiles I’ve grown to appreciate make. It’s been part of UNIX for decades, and it does its job well. It allows me to not only build my feeds, but lets me deploy them too.

I even have a build target for local testing using Python’s built-in HTTP server, and I use the classic UNIX “make install” idiom to push my site to my host using rsync, since I host on NearlyFreeSpeech.net instead of Netlify or AWS.

.DEFAULT: build
include ./sshvars

.PHONY: build
build: posts.xml fiction.xml bookmarks.xml playlist.xml

posts.xml: posts.rec atom.templ
    recfix --auto posts.rec
    recfix --sort posts.rec
    ./posts.sh | tidy -q -i -w -utf8 -xml > feeds/posts.xml
    ./posts-index.sh > posts/index.txt

fiction.xml: fiction.rec atom.templ
    recfix --auto fiction.rec
    recfix --sort fiction.rec
    ./fiction.sh | tidy -q -i -w -utf8 -xml > feeds/fiction.xml
    ./fiction-index.sh > fiction/index.txt

bookmarks.xml: bookmarks.rec atom.templ
    recfix --auto bookmarks.rec
    recfix --sort bookmarks.rec
    ./bookmarks.sh | tidy -q -i -w -utf8 -xml > feeds/bookmarks.xml

playlist.xml: playlist.rec playlist.templ
    recfix --auto playlist.rec
    recfix --sort playlist.rec
    ./playlist.sh | sed -e 's/\ \&\ /\ \&amp;\ /g' | tidy -q -i -w -utf8 -xml > feeds/playlist.xml

serve: clean build
    python3 -m http.server --directory .

install: clean build
    rsync --rsh="ssh ${SSH_OPTS}" \
          --delete-delay \
          --exclude-from='./rsync-exclude.txt' \
          -acvz . ${SSH_USER}@${SSH_HOST}:${SSH_PATH}

.PHONY: clean
clean:
    rm feeds/*.xml posts/index.txt fiction/index.txt

Each feed target – “posts.xml” and “fiction.xml” as of 2022-04-22 – has a couple of dependency checks. If their respective recfiles and atom.templ aren’t present, make will abort with an error. If the files are present, we call recfix to set up auto-incremented Ids and sort the files before calling our feed generator scripts. Each feed generator pipes its output to tidy to pretty-print the resulting XML before writing to files.

Each feed target is a dependency for the “build” target. The “build” target is itself a dependency for the “serve” and “install” targets. If I simply want to build with my current files, I need only run “make” in my terminal. If I want to build and upload, “make install” will do the job.

GNU make also provides an “include” directive which lets me store variables in a separate file. That way I can commit the makefile to a git repository while putting the “sshvars” file in .gitignore for safety.

Serving index.txt With .htaccess

If you’re running a shinobi site on a traditional web host like Dreamhost or NearlyFreeSpeech, you should bear in mind that without an “index.html” file in your site’s root directory anybody visiting your site will get a directory listing by default if they’re lucky and an error message if they aren’t.

Fortunately, we can fix that with a file called “.htaccess”3, which allows us to give some directives to the HTTP daemon serving up our files.

DirectoryIndex index.txt

The command we want is “DirectoryIndex”, but you can use .htaccess to specify custom error pages, set up caching, configure redirects, and even block traffic referred from certain sites. If you’re curious, I’d suggest starting with Apache’s documentation.

Make Your Own

I think I’ve provided all of the information you need to build your own shinobi site, but please email me if you have any questions. And don’t forget that Bradley Taunt’s version0 is still fine if you want to keep it simple. Have fun!


  1. Just bear in mind that GNU date (gdate when installed on BSD systems) works differently than POSIX date. Be sure to review the date(1) manual page.↩︎

  2. My makefiles might work with BSD make, too, but don’t take my word for it. For example, OpenBSD’s make doesn’t support .PHONY. To be safe, make sure to invoke gmake when running on BSD or adjust your $PATH variable so that locally installed GNU make shows up before the system make command.↩︎

  3. .htaccess is a mechanism provided by the Apache HTTP server for situations where it isn’t safe to give website operators access to the main configuration, such as shared hosting. It isn’t implemented in nginx.↩︎

back to top

My Wife and I Joined A Gym

Mon, 18 Apr 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/my-wife-and-i-joined-a-gym.html


Since American Express owed me $150 on my corporate card, my day job had given me a fat retention bonus, and my day job claims to offer a subsidy for health/self-care purchases on my corporate card, Catherine and I decided to check out the local Crunch Fitness last Saturday since it wasn’t a long drive or out of our way should we need to hit a supermarket for groceries.

This wasn’t an idle caprice. I’ve been thinking about it for a while. Though I had lost a hundred pounds due to diet changes resulting from my adaptation to remote work during the COVID-19 pandemic, I think I’ve lost as much bodyfat as I can with diet alone. It was time to start doing penance in the Church of Iron.

The local Crunch Fitness have a machine circuit that claims to offer a full body workout, and since it seemed a chill gym where I wouldn’t have to worry about meatheads giving me shit for not being as ripped as they were I decided to pay up front for a year’s membership.

We enjoyed working out on Saturday and did it again tonight. I figure that if we go every Monday, Wednesday, and Friday to do the machine circuit we can eventually get into better shape. I eventually want to start working out with barbells, but I’m not sure I’m ready for that yet.

Of course, I didn’t think to write down my workout results from Saturday or tonight. I’ll have to start doing that. It’s not like I don’t carry a little notebook in my pocket.

Also, I should bite the bullet and get some AirPods. My Sony bluetooth headphones fall off of my head too easily during certain exercises.

back to top

RE: The Box of Doom

Mon, 04 Apr 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/re-box-of-doom.html


Holy shit, Krad fucking nails it in their new zine, The Box of Doom. I totally agree with all of this; it’s why I refuse to give a single little fucking shit about your identity politics. Yes, I see color. But if you aren’t more than your color, or your gender, or your nationality, or your religion, or your class, then what are you? If you are nothing but your identities, are you even a human being? Or are you nothing but a miserable little pile of labels?

On a related note, “No Lives Matter” by Body Count digs into this a bit.

We say that “Black Lives Matter”
Well truthfully they really never have
No one ever really gave a fuck
Just read your bullshit history books
But honestly it ain’t just black
It’s yellow, it’s brown, it’s red
It’s anyone who ain’t got cash
Poor whites that they call trash

They can’t, fuck with us
Once they realize we’re all on the same side
They can’t, split us up
And let them prosper off the divide

Don’t fall for the bait and switch
Racism is real, but not it
They fuck whoever can’t fight back
But now we gotta change all that
The people have had enough
Right now, it’s them against us
This shit is ugly to the core
When it comes to the poor
No lives matter

Here’s the thing: I can pass for a straight white neurotypical cisgender heterosexual Christian man. I’m not any of these things, but you do not necessarily see any of that; I have learned that flying false colors means smoother sailing.

Flying my true colors where I live still isn’t safe. I still occasionally get hassled by people merely for having long hair. One would argue that I should “be authentic” (at least, somebody else’s idea of authentic) for the sake of those who cannot pass, but I regard people who make this argument as people who don’t see me as a person with my own needs, desires, and concerns. Such people see me as nothing but a means to their ends.

I face enough exploitation at my day job. Why should I tolerate more for your idea of a good cause? You’re no friend of mine, you’re not on my side, and I need not ask what you’ve done for me lately. If I ever strike my false colors, it will not be to fly your rainbow flag.

the Jolly Roger flown by Calico Jack

When I am finally ready to live my truth in public, I will live it under Jolly Roger.

back to top

About My Ad Blocker

Tue, 29 Mar 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/about-my-ad-blocker.html


I keep getting popups that say “we need to talk” about my ad blocker. This is bullshit because there is no “we” here. The fact that I chose to visit your website doesn’t make you and me a “we”. At least not enough of a “we” for me to value your opinion about my use of ad blockers.

Therefore, we don’t actually need to talk about my ad blocker. I already know what you want — for me to disable my ad blocker — and it isn’t going to happen.

Yes, I know. You depend on ad revenue to meet payroll or to pay your operating expenses. That is not my problem. Get a better business model or get the fuck off of the internet. Advertising is a 20th century business model and it only worked for television and print media. It has never worked on the internet and it never will because people know they have the right to ignore or block ads, even if they don’t have the tools or knowledge to do so. Nobody wants ads. Nobody likes them. Nobody wants to hear about your partners’ products.

And, no, I’m not a hypocrite because I have my own website. I don’t run ads. Hell, I don’t even solicit or accept donations. I pay my hosting and domain registration bills out of my salary from my day job.

When you stop using adtech I will consider turning off my ad blocker. But as long as every ad you try to serve uses cookies and javascript to target and track me, I will treat your ads as malware and block them without remorse as a matter of self-defense. I never fuck strangers without a condom, and I never visit other people’s websites without an ad blocker.

You don’t have my best interests in mind; thus your interests are no concern of mine. If you can’t find a way to make money on the internet that doesn’t violate other people’s privacy or compromise their security you need to get the hell off of the net. You don’t belong here, you aren’t welcome, and you overestimate the value of your “news” and opinion, both of which are nothing but propaganda.

back to top

Hellbound; or, Curse God and Live

Thu, 03 Feb 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/hellbound.html


I’ve been watching Hellbound on Netflix. It feels like an existential horror show, an exploration of how people cope with an arbitrary and indifferent universe where people who have apparently done nothing wrong can be condemned to a hideous death (and quite possibly eternal torment afterward).

It also reminds me of a sf novel I first read a couple of decades ago.

After fifty-five years of dedicating his life and work to the study of ethical systems, Sol Weintraub had come to a single, unshakable conclusion: any allegiance to a deity or concept or universal principal which put obedience above decent behavior toward an innocent human being was evil.

Dan Simmons, Hyperion

Think about it: if an ideal leads you to be cruel to the innocent, then that ideal is evil and you should discard it. It doesn’t matter what the ideal is, whether it’s democracy, freedom of speech, social justice, or obedience to God. If it becomes an excuse for cruelty, you need to discard it.

spoilers for Hellbound

And yet many of the people in Hellbound do not do this. When a single mother receives the decree, people start digging into her private life, slut-shaming her, and accusing her of child abuse. Why? Because they need a reason for this woman to be condemned to death and damnation instead of accepting that her situation is fundamentally unjust and that a God who allows things like this to happen is no god at all, but a demon.

The police officers and attorneys who help the woman’s children escape to Canada rather than be taken and used as pawns by the New Truth cult are likewise targeted. Why? Because they are presumably thwarting the will of God by ensuring the safety and liberty of two innocent children.

Likewise with cancer. It doesn’t care how good a person you are. You could do everything right, eat all the right things, get enough sleep and exercise, and still get cancer. Some people will find a way to justify blaming you for getting it. And if you survive, people will give God the credit instead of the doctors who treated you. Never mind that this is the same God that created a world in which people can get cancer in the first place.

I form the light, and create darkness, I make peace, and create evil: I the Lord that do all these things.

Isaiah 45:7 (Douay-Rheims 1899 American Edition)

Maybe it’s time we put our gods to the sword. They’re more trouble than they’re worth. Then again, it’s not like they were ever real in the first place. Every god is a God of the Gaps, but the gaps they fill are not those left by the limits of human science. Instead, they inhabit our inability to accept that the universe is arbitrary and insouciant, and that our morals and feelings don’t matter to anybody but us.

Human concerns are no concern of God’s, so curse God and live. If he doesn’t like it, then to Hell with him.

back to top

Personal Websites as Self-Portraiture

Thu, 27 Jan 2022 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/personal-websites-self-portraiture.html


Note: This article also appears in issue number 2 of the Yesterweb Zine. I had originally published it on another website of mine.


The first decade of the World Wide Web’s existence, 1989-1999, saw the Web’s inception and initial popularization as its rise coincided and perhaps drove initial consumer adoption of Internet access. Originally a medium for the electronic publication of scientific documents and source code, the Web became a canvas for visual arts in the hands of enthusiastic amateurs getting Internet access for the first time at school or on family computers.

Originally an application of SGML, HTML remained rooted in plain text and offered little in the way of design elements or features useful to application developers until the late 1990s, when HTML 2, 3, and 4 offered such features as form-based file uploads, tables, client-side image maps, and once-proprietary elements such as “blink” and “marquee”. The addition of these tags transformed the Web. As the medium transformed, so did the message, a change Marshall McLuhan might have predicted despite having done his most influential work in the 1960 before ARPANET, never mind the public Internet with which so many of us have an ambivalent relationship.

In a culture like ours, long accustomed to splitting and dividing all things as a means of control, it is sometimes a bit of a shock to be reminded that, in operational and practical fact, the medium is the message. This is merely to say that the personal and social consequences of any medium — that is, of any extension of ourselves — result from the new scale that is introduced into our affairs by each extension of ourselves, or by any new technology.

Marshall McLuhan, Understanding Media: the Extensions of Man

What were the personal and social consequences of the personal website? I think a short list is in order.

  • the fragmentation of mass culture for the first time since television became ubiquitous
  • a renaissance of subcultures and fandom
  • easy access to pseudonymous or anonymous do-it-yourself publishing

mass culture fragmentation

First, let’s consider the fragmentation of mass culture. While it was possible to produce paper zines before the World Wide Web, the dependence on paper and mimeographs or photocopiers made broad distribution limited because it was impractical for most people to self-publish more than a few dozen or a few hundred copies.

The web changed this by eliminating the need for paper. Instead of cranking out analog print copies and having to find places willing to let you distribute your zine, such as mom-and-pop record shops or handing them out at concerts, you could make your zine a website on a host like Geocities, Angelfire, or Tripod. Copying was automatic; anybody who visited your website got a copy and the cost to produce each copy was negligible compared to the cost of printing traditional zines on paper.

As a result, anyone willing to put in the time and effort required to build a web page ceased to be purely a consumer of mass culture but a participant in any culture that interested them. One could have as many websites as one did interests, given sufficient leisure time. Moreover, one’s interests need not intersect at all if they formed a combination of interests that might have raised judgmental eyebrows in the immediate neighborhood. For example, a young man who listened to heavy metal but also found that he enjoyed filching his mother’s Regency romance novels could have one website dedicated to his favorite bands and another dedicated to his favorite authors — operating both under separate pseudonyms enabling the operator to explore any aspect of his identity he wished from a position of psychological safety.

This meant that people could no longer have their interests dictated to them by professional tastemakers according to class, race, and gender expectations that served the interests of the rich and powerful. A mass culture that accreted in service to the state and capital had come to face a semblance of effective competition from below for the first time in decades.

subculture renaissance

The same aspects of the late 1990s Web that enabled the pseudonymous exploration of interests and identity and the active participation in culture without the need for training or asking permission of entrenched gatekeepers also led to an explosion of subcultures and fandoms. Before the Web, the array of subcultures available to a young person dissatisfied with the mass culture beamed into their home by radio and television was limited by geography and their ability to persuade local gatekeepers to initiate them.

Suppose you were a kid growing up in the 1980s and wanted to go deeper into DC comics than the most popular heroes: Superman, Batman, Wonder Woman, the Flash, etc. If there wasn’t a comics shop in your hometown, it was hard to explore the wider DC corpus. Furthermore, with so many decades’ worth of comics written there was a daunting amount of lore one had to learn in order to participate in the local fandom. The Web changed this. Now the lore was available on fans’ websites for anybody to study. There was no need to be initiated into fandom by longtime fans; one could burn the DC mythos into one’s synapses while getting a cathode ray tan in the privacy of one’s own home. Likewise for Marvel, or Image Comics, or even Archie. The same applied to science fiction and fantasy fandom in print and on film, for video games, for anime, and any kind of music you could think of from the New Wave of British Heavy Metal to K-pop to Ukrainian nuclear fuzz-grunge. You were no longer limited by geography. You could be like Tony Montana; the world’s cultures, all of them, were yours.

This led, among other things, to the explosion of fan-fiction, fan art, and other transformative works with sites like fanfiction.net and Archive of Our Own. The creation of culture was no longer the preserve of carefully trained professionals steeped in corporate groupthink or outsiders willing to buy into corporate mass culture in exchange for a shot at nationwide or global prominence and distribution. For a few brief years, Big Entertainment faced a plausible threat of disintermediation and eventual irrelevance.

digital samizdat

Before the web, censorship was easy. If nobody wanted to distribute your work, and you couldn’t distribute it yourself, you went unheard by all but your closest friends and family. The web changed that. Now anybody could publish anything, without needing permission. You didn’t have to give your real name. You didn’t have to give your real-world address. You didn’t need anybody’s permission. You didn’t have to be charismatic or marketable. You didn’t need credentials or connections. All you needed was something to say.

If you had something to say, the rest was details. You needed a host, but sites like Geocities gave out space for free. Many ISPs also provided email and limited web hosting. If you had experience with Unix you could often run a website using a shell account, or even run your own dedicated server in a colocation facility — and do so under a rented domain name that you had chosen for yourself. Skill with HTML and CSS was helpful, but not entirely necessary; most word processors could export HTML — even if the resulting markup isn’t as clean as some techies might prefer. There were also tools like Netscape Composer and Microsoft FrontPage, but it wasn’t that hard to start with plain old NotePad and paste together tags scraped from the sources of other people’s websites.

Anybody could be a publisher. Censorship was a temporary setback as long as you had your source files. If one host kicked you off, you could set up shop elsewhere by creating a new account on a new host and uploading to a new location. If necessary, you did so under a different pseudonym and email address, too.

the assertion of self

What, then, is a personal website? It is precisely that, personal. It is a new kind of self-portraiture done not with pencils, charcoal, ink, or paint. Instead it is self-portraiture done in markup language, code, prose, images, audio, and video.

Back in the 1990s, every website was different. Operators may have used templates when available or convenient, but inevitably customized them to suit their own needs and preferences. We can still observe this phenomenon, but to a smaller extent because of the use of social media and content management systems like WordPress and Ghost. Nevertheless, the use of themes in blogs powered by the likes of WordPress and Ghost means that such installations are also self-portraits of their operators.

If a personal website is both medium and message, what message does the website convey? I suspect that the only message every website has in common is a simple assertion of one’s own existence: I am.

Any deeper meaning is intrinsic to the author and interpretation by others may not be possible. Nevertheless, one could probably tell a fair amount about a website’s operator by the way they design their site precisely because web design can be so personal. Consider, for example, sadgrl.online and tdarb.org. The former treats the web as play and embraces ostentation. The latter works as a designer, takes their trade seriously, and favors a minimalist approach because they want to place emphasis on their writing.

a screenshot of sadgirl.online
sadgrl.online: If you visited this site yourself, you’d see the liberal use of visual effects and animations.
a screenshot of tdarb.org
tdarb.org: It’s all about the words, and the use of monospaced font is most likely meant to invoke the experience of reading on a terminal.

Both of these are personal websites. The toolkit, design elements, and content were all chosen by their respective operators. Their differences in personality and values show in the content and presentation of their websites. While one celebrates the late 1990s Web and the other hearkens to an even older web, there is plenty of room in cyberspace for both.

There is room for your personal website, too. What are you waiting for?

back to top

Questions for Your Cast

Thu, 02 Dec 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/questions-for-your-cast.html


I see so many writers complain that they’ve built a fantasy world in minute detail but still don’t have a story. Perhaps worldbuilding for its own sake is a mistake? Perhaps one should start with one’s characters and build the setting around them? How would one go about it?

I’ve found that the best way is to sic the Spanish Inquisition on the cast (because nobody expects it) and give each of them a turn in the comfy chair while I ask them a few simple questions.

  • Who do you think you are?
  • What do you want?
  • Why do you want this?
  • How far will you go to get what you want?
  • Why do you draw the line where you do?
  • What do you think will happen if you fail?
  • What will you do if you succeed?
  • Who are your allies in this endeavor?
  • Why do you think your allies support you?
  • What can your allies do to help you reach your goals?
  • What could your allies do to hamper you?
  • Who or what stands in your way?
  • Why do you think you face this opposition?
  • How do you expect your enemies to oppose your aims?
  • What could your opponents do to help you?
  • If you’re supporting somebody else’s aims, why?
  • If you oppose somebody else’s cause, why?

This inquisition is not — or at least should not be — a one-time affair. While I have a good idea of who my major characters are, what they want, and why my characters’ motivations and aims may have changed based on my own learning and experience. If that’s the case, then the story that arises from my characters’ interactions and conflicts may also have changed.

I get some worldbuilding for free every time I ask these questions, since they expose details of the historical, social, economic, and environmental context around the character. I find this sort of incidental worldbuilding preferable to the approach M. John Harrison decried in 2007 with posts like “very afraid”.

Every moment of a science fiction story must represent the triumph of writing over worldbuilding.

Worldbuilding is dull. Worldbuilding literalises the urge to invent. Worldbuilding gives an unneccessary permission for acts of writing (indeed, for acts of reading). Worldbuilding numbs the reader’s ability to fulfil their part of the bargain, because it believes that it has to do everything around here if anything is going to get done.

Above all, worldbuilding is not technically neccessary. It is the great clomping foot of nerdism. It is the attempt to exhaustively survey a place that isn’t there. A good writer would never try to do that, even with a place that is there. It isn’t possible, & if it was the results wouldn’t be readable: they would constitute not a book but the biggest library ever built, a hallowed place of dedication & lifelong study. This gives us a clue to the psychological type of the worldbuilder & the worldbuilder’s victim, & makes us very afraid.

Harrison has more to say, but I don’t expect you to agree with any of it.

back to top

Watching Amazon’s version of The Wheel of Time

Wed, 01 Dec 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/amazon-wheel-of-time.html


I never expected to see Robert Jordan’s saga adapted for television. I’m not particularly excited about having been proven wrong, but my wife wants to watch it so watch it we shall — even if it starts with a farm boy marching off to Adventure™ with his dad’s sword bouncing off his hip and has lots of braid-pulling and skirt-smoothing. And I will try to refrain from making more than one joke per episode about male channelers having to touch the Dark One’s taint if they want to weave any patterns.

Because I made the mistake of having admitted to reading some of the novels way back when, I get to play “WoT expert” every time Cat pauses the show and asks what’s going on. I suppose I’d better re-read these to refresh my memory even though I’d rather do a re-read of C. J. Cherryh’s Foreigner novels and think that the best WoT adaptation you will ever find is the song by Blind Guardian. It hits all the high points in less than fifteen minutes.

But I will keep my opinions to myself and let Catherine enjoy the show. It might be one of those rare adaptations that prove better than the source material. I need not enjoy it as long as she does, but perhaps I can amuse myself with a bit of commentary here. Expect spoilers galore, but they will be hidden unless you’re using an old browser…


Season 1

Released in November 2021. New episodes drop every Friday. I understand a second season is in production…

Episode 1 spoilers
  • We already have Rand kissing Egwene and feeding her berries. Maybe a little off-screen sexy-time, too. I don’t remember that haliliening in The Eye of the World.
  • Looks like we get Moiraine and Lan sharing a tub together. I don’t recall that from the TEotW either.
  • And Nynaeve has a beef with the Aes Sedai courtesy of her adoptive mother.
  • The “Eyeless” (the myrddraal or “Fade”) looks like a cheap masked knock-off of a Nazgûl, but The Eye of the World was written as a pastiche on Tolkien before Jordan started doing things his way.
  • The water lantern ceremony seems cribbed from real-world ceremonies, but “Bel Tine” was probably inspired by Beltane so whatever.
  • I don’t recall heron-marked swords being katana in the novels, but I guess the producers are going with the “katanas are just better” trope.
  • We see why Aes Sedai like Moiraine often have Warders like Lan: to keep them from getting shanked while they charge up a spell.
  • I do not recall Nynaeve getting kidnapped by Trollocs from the novel.
  • This might be another deviation from the books: Perrin killing Laila after hacking a Trolloc to death in a berserker rage.
  • Moiraine ripping bricks out of the inn to chuck them at Trollocs using telekinesis is a rather literal case of wrecking the village to save it.
Episode 2 spoilers
  • I dunno why, but when I see a bunch of militant-looking dudes in white I immediately expect an organization resembling the Spanish Inquisition. The dude they have playing Eamon Valda seems to enjoy playing the heavy, and naturally he’s characterized as such by his eating habits and his tendency to murder Aes Sedai and collect trophies (their rings).
  • And Rand just yanked a dead bat out of his throat. Oh, wait. Just a nightmare — until he spots the dead bat after waking. Oh, lots of dead bats — and everybody had a similar dream.
  • Moiraine should be wearing gray, not blue. She has Gandalf’s disinclination toward open dealing with those she manipulates.
  • I guess Rand won’t be getting any for a while. You’d think he’d know better than to talk to Egwene like that.
  • There’s a Whitecloak saying it’s a dangerous time to be on the road, but neglects to mention that he and his are part of the reason.
  • These “Children of the Light” certainly think highly of themselves, but at least Lan’s got a spine.
  • The Whitecloak hasn’t figured out that he’s essentially said to Moiraine, “Magician, heal thyself.”
  • Except Aes Sedai can’t heal themselves.
  • They can’t tell lies either, but it looks like lies are in the mouth of the teller; their oath only seems to stop them from telling lies they themselves recognize as such.
  • Storytime! The kids are singing about Manetheren, the “Mountain Home” they did not know was the old name of their home the Two Rivers. Long story short, it’s Thermopylae with orcs, the defenders died with their boots on, and when the Queen felt her husband die she dealt with the invaders by casting from HP.
  • And Rand’s all pissy because it turns out Egwene could be an Aes Sedai, and Aes Sedai don’t take husbands (doesn’t mean they’re all lesbians, though)
  • Looks like wolves gravitate toward Perrin the way stray cats sometimes approach me. I told Cat he’d eventually learn to wolf out, but my memory might be faulty.
  • And they’re off to Shadar Logoth. That’s baaaaaaaaaaad shit. Pretty sure that’s where Padan Fain finds that evil dagger.
  • Hey, what happened to Thom Merrellin? I don’t think we’ve seen him yet.
  • Of course Mat grabs a dagger from Shadar Logoth. Dumb fuck.
  • And Nynaeve’s back, holding a knife to Lan’s throat and demanding answers.
Episode 3 Spoilers
  • Flashback to Nynaeve’s immediate past. She escaped the Trolloc that had captured her, only to have it give chase. She led it to a sacred pool, hid in the water, and shanked it. The pool’s polluted now, but now we know she’s a badass.
  • Lan expects Nynaeve to heal Moiraine. Never mind that she has no formal training as Aes Sedai.
  • Nynave’s having none of it, and tries to fight free of Lan. Start of a beautiful relationship…
  • Now Rand and Mat are off on their own, calling for Moiraine. Dumb shits have no idea where they are, where she is, or what they’re doing.
  • They know they’re supposed to go to the White Tower? Mat objects to walking. He should be glad they aren’t walking to fuckin’ Mordor.
  • Now it’s Perrin and Egwene, running from wolves even though wolves had been friendly toward Perrin in the last episode. And despite being a rural kid and a blacksmith’s apprentice apparently Perrin can’t start a fire from flint and steel worth a damn.
  • Lan seems to think tying Nynaeve to a tree is the best way to get her to help Moiraine. I hope they discussed a safeword first.
  • I guess Nynaeve is the Queen who will restore the lost Queensreich; she found some athelas for Moiraine.
  • Looks like Rand and Mat found a settlement. They’re welcomed by a dead guy in a gibbet, riddled with arrows. Seems a friendly place; it’s even got a pub. Wait. Just saw a sign. “Welcome to Mos Eisley,” it says.
  • Looks like they’re about to meet Thom Merrilin. 🎵 Toss a coin to yer gleeman. 🎵
  • Back to Perrin and Egwene. How did all these schmucks get so widely separated, anyway?
  • Looks like Rand and Mat have some logs to split if they want a warm place to sleep.
  • And Mat has a thing for MILFs — even the witchy types like Moiraine.
  • Less exposition, more log splitting, lads. Put yer backs into it!
  • Time to get Mat into a dress so he can play barmaid. He’s too delicate to chop wood, evidently, and the innkeep doesn’t think he’s as good a muff diver as he implies he is.
  • And Moiraine is still sick. Guess Nynaeve isn’t the healer she thinks she is.
  • Back to Perrin and Egwene, following old wagon wheel tracks. And Perrin thinks he’s gonna go scout ahead and leave Egwene on her own. Dumb shit’s still guilt-tripping over Laila.
  • Now they’ve happened upon a bunch of wanderers who ask them if they “know the Song”. Which song? “Ace of Spades?” “The Intergalactic Laxative?” “Don’t Fear the Reaper?” Doesn’t matter. Perrin and Egwene don’t know, but they’re welcome anyway.
  • Apparently Rand has chopped enough wood for a year — and earned a nice private room for him and Mat so nobody can hear them sort out their relationship issues with a bit of frotting or maybe some unlubed buttsex. Innkeep’s got no idea they aren’t like that.
  • Of course Mat intends to rob the dead guy in the gibbet. The same dead guy Thom Merrilin means to bury.
  • The dead guy’s an Aiel, murdered by the locals because of their ignorance.
  • And Thom’s conned Mat into burying the dead Aiel himself. Seems only fair that those who rob the dead should then buy ’em.
  • Rand’s talking with the innkeep, and admits he doesn’t know shit.
  • The innkeep seems to want his sausage, but Rand isn’t interested. Only the innkeep isn’t really an innkeep. Could one of the Forsaken have shown up already?
  • Now that the dead Aiel’s buried, Mat and Thom introduce themselves.
  • Apparently Rand can break down doors three men his size couldn’t break down when a woman grabs his dad’s sword off him and threatens him. She’s hunting the Dragon. She wants to bring him to the Dark One, so that “everybody can be saved”. Yeah, saved the way a JRPG end boss would save everybody, by ending all of existence.
  • Well, she isn’t Lanfear or one of Shaitan’s other heavies. Just a Darkfriend, dead by Thom Merrilin’s hand as he does the Strider bit.
  • Back to Lan, Nynaeve, and Moiraine. They’ve run into Liandrin and her Red sisters, who have captured some nutjob calling himself the “Dragon Reborn”. I guess this timeline’s compressed since false Dragons are already showing up.

I should be grateful Catherine isn’t interested in watching Legend of the Seeker because then I would have to re-read Terry Goodkind. Nonetheless, I’d rather see adaptations of C. J. Cherryh’s Morgaine or Foreigner sagas — or C. S. Friedman’s Coldfire trilogy — but I can’t always have what I want.


Looks like Catherine isn’t interested in watching the rest. I swear it wasn’t my fault.

back to top

Fuck Trump; Let’s Go Brandon

Mon, 01 Nov 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/lets-go-brandon-or-fuck-the-president.html


WARNING: The following post is a rant. Read at your own risk.

Are you sure you want to read this?

Anybody who’s given the slightest attention to political news in the United States knows that “Let’s Go Brandon” is a joke aimed at the corporate-owned news media, middle-management types, government bureaucrats, and — both last and least — Joe Biden himself.

You’re supposed to believe it’s only conservatives, white supremacists, and neo-Nazis who hold Biden in contempt. Don’t make that mistake.

I did not vote for Joe Biden in 2020, just as I did not vote for Hillary Clinton in 2016. I voted against the Republican Party, which I regard with what I think good reason as a party of right-wing authoritarians, kleptocrats, and theocrats. If not for my wife’s moderating influence, my car would sport a bumper sticker reading GOP = KKK.

I will not try to persuade you as to the relative merits of the Democratic and Republican parties. Whether you accept my conclusion that the Democrats are bad and the Republicans are worse is of little interest to me. All I want is for you to understand that if you hear me saying “Fuck Joe Biden”, I will not be hiding behind memes or euphemisms. I never did with Trump; why would I with Biden?

If Joe Biden were worth hating, I would hate him, but he isn’t. The man’s practically a nonentity, a compromise candidate for a Democratic Party reluctant to offend its corporate masters by running a ticket with more progressive candidates — or at least more interesting ones. Biden had nothing to offer besides not being Donald Trump, and that probably won’t get him reelected in 2024.

Am I to waste perfectly good hatred on such a figure? I think not, even if I have more than enough for everyone.

Type O Negative: We Hate Everyone

Therefore, when I say “Fuck Joe Biden”, it’s not personal. It’s not about him, or even his policies. It’s the office he holds. The President has entirely too much power, and I am strongly tempted to suggest that the office should be stripped of all powers not explicitly delegated by the Constitution and its amendments, two centuries of precedent be damned (for precedent — like tradition — is merely the tyranny of the dead over the living). This was the case when Trump was President. It was the case under Obama, Bush Jr., Clinton, Bush Sr., Reagan, Carter, Ford, and Nixon. It has probably been the case since Eisenhower, and he was the last decent Republican President (Kennedy being the last decent Democrat).

Hell, even Thomas Jefferson himself exceeded his authority by making the Louisiana Purchase, by his own admission.

But there is a difficulty in this acquisition which presents a handle to the malcontents among us, though they have not yet discovered it. Our confederation is certainly confined to the limits established by the revolution. The general government has no powers but such as the constitution has given it; and it has not given it a power of holding foreign territory, & still less of incorporating it into the Union. An amendment of the Constitution seems necessary for this. In the meantime we must ratify & pay our money, as we have treated, for a thing beyond the constitution, and rely on the nation to sanction an act done for its great good, without its previous authority.

Thomas Jefferson to John Dickinson, August 9, 1803

Never mind “Fuck Joe Biden”. It’s time to say “Fuck the President”. Why? Because contempt for authority (and the occasional outright rebellion) is the American way.

Societies exist under three forms sufficiently distinguishable.

  1. Without government, as among our Indians.
  2. Under governments wherein the will of every one has a just influence, as is the case in England in a slight degree, and in our states in a great one.
  3. Under governments of force: as is the case in all other monarchies and in most of the other republics.

To have an idea of the curse of existence under these last, they must be seen. It is a government of wolves over sheep. It is a problem, not clear in my mind, that the 1st. condition is not the best. But I believe it to be inconsistent with any great degree of population. The second state has a great deal of good in it. The mass of mankind under that enjoys a precious degree of liberty and happiness. It has its evils too: the principal of which is the turbulence to which it is subject. But weigh this against the oppressions of monarchy, and it becomes nothing. Malo periculosam, libertatem quam quietam servitutem. [Latin translated by machine: “I prefer perilous freedom rather than quiet slavery.”] Even this evil is productive of good. It prevents the degeneracy of government, and nourishes a general attention to the public affairs. I hold it that a little rebellion now and then is a good thing, and as necessary in the political world as storms in the physical. Unsuccessful rebellions indeed generally establish the encroachments on the rights of the people which have produced them. An observation of this truth should render honest republican governors so mild in their punishment of rebellions, as not to discourage them too much. It is a medicine necessary for the sound health of government.

Thomas Jefferson to James Madison, January 30, 1787

We should not be so obsequious toward public servants that we come to treat even the mildest expression of disapproval toward the President as lèse-majesté or blasphemy. The President is neither a king nor a god. He is only a human being, and needs to be reminded that he is not the master but merely the most heavily burdened of all public servants in the United States.

Rather than being held sacred, the President should have somebody in his cabinet whose sole responsibility is to mock him, abuse him, and generally remind him that he is only human. Joe Biden’s shit stinks as much as anybody else’s. Americans do themselves and their country a profound disservice by forgetting this basic fact.

It will do him no harm to be regularly reminded that he holds office because he was the best candidate of a bad lot, lest he in his alleged senility forget. Better yet, a sword should hang suspended by a mere thread over his chair in the Oval Office to remind him of the price he pays for his bully pulpit. Such a sword should loom over every authority figure. A short leash is never short enough; nobody in power is accountable unless you’ve got them by the scruff of the neck.

Dionysus II draws Damocles's attention to the sword hanging above him, painting by Richard Westall (1812).

No authority should ever be held sacred, or granted too much respect, least of all the authorities to which we as a sovereign people delegate limited powers so that we might have a free, prosperous, and peaceful society. We have every right — and perhaps a responsibility as well — to say, “Fuck the President. Fuck Congress. Fuck the Supreme Court. Fuck the police.”

For my part I like to go a little further: fuck the church, fuck the state, fuck capital, and fuck society. They are the four faces of tyranny. And if this page offends you, then fuck you, too, for being part of the problem of creeping authoritarianism.


Update

To give Biden credit where it’s due: at least the man knows when and how to delegate. Further details courtesy of the Associated Press.

Unfortunately, he’s back on the job. I intend no malice toward Biden by this statement, but I was looking forward to the prospect of watching racists, misogynists, and conservatives (but I repeat myself) have shit hemorrhages from sea to shining sea at the prospect of a second black President who is also an Asian-American woman and eligible for election to two terms in her own right after finishing Biden’s.

back to top

RE: Thoughts on Silly Hats

Mon, 27 Sep 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/re-thoughts-on-silly-hats.html


The operator of memex.marginalia.nu has an interesting post about silly hats today.

The reason we do this, wear silly hats, is because it is fashionable. Compliance with the some perceived fashion trend is one way we compete with fellow human beings, a measuring stick we use to evaluate our standing within society. Oh, you merely wear a modest and peculiar hat? Well mine is bigger and sillier still, therefore I am better!

This post starts off a little slow, and may seem obvious, but it gets better fast.

It isn't just in fashion we do this. Any norm can be a hat. Teenagers often seek out really obscure music or movies for the sake of having something that the other kids don't have, it creates identity, even if it's "the guy that listens to micronesian corecore music from the '70s". Another harmless example is imposing limitations and strictures on what we eat.

I've definitely indulged in this myself; one of my hats is rock and heavy metal bands with women as vocalists. You can blame my late father for this since he introduced me to Renaissance with Annie Haslam on vocals, and I grew up in the 1980s and got exposed to the usual suspects: Joan Jett, Debbie Harry (Blondie), Doro Pesch (Warlock), Lita Ford, etc. This only got worse once I started listening to "beauty & the beast" bands like Theatre of Tragedy with Liv Kristine and After Forever with Floor Jansen (via Ayreon), discovered Finland's Nightwish with Tarja Turunen, and got introduced to Swedish death metal turned symphonic act Therion's late 1990s albums Vovin and Deggial.

Not that I was doing this just for hipster cred; I've always enjoyed alto and soprano vocals in rock and metal, and also tend to prefer clean tenor and baritone voices like those of Ian Gillan, Bruce Dickinson, Rob Halford, Ronnie James Dio, and Freddy Mercury — one of the reasons I never really got into death metal or black metal.

Likewise with software…

It absolutely happens in software too. There are definitely people who perceive themselves as gods among men for using the most insanely obscure compile-everything-by-hand Linux distribution, or only using software that adheres to some super strict set of license requirements.

I could just use a Windows PC or a Mac and make do with Microsoft Word or Google Docs or Scrivener like most writers, but no — that wouldn't be any fun. Besides, my first PC didn't have anything but DOS and its built-in text editor and I got bitten by the Unix bug in college. The upside is that being a programmer with exposure to Unix pays a hell of a lot better than writing sf.

While I'm prone to enthusiasms in this realm I generally try to keep them to myself. You don't need to hear about that time I built Linux from Scratch over a dialup connection.

Most people have their own preferences and if they care enough about software to make it a major component of their identity they are more interested in talking about their preferences than hearing about mine.

Unfortunately, this happens with ideology as well…

Some participants of hustle culture makes a silly hat of their poor life balance, working 160 hours a week and barely stopping to sleep. Some people make a silly hat out of their physique, starving themselves to stay impressively thin, or living in a gym to stay impressively wide.

Workism, however, has been fashionable in the US for decades. At least it has been (under various names) long enough for Chuck Palahniuk to write the following in the 1990s, putting the words into the mouth of Fight Club's antagonist/foil Tyler Durden:

You are not your job, you're not how much money you have in the bank. You are not the car you drive. You're not the contents of your wallet. You are not your fucking khakis.

Hell, Black Sabbath had a song about workism and hustle culture in the 1970s called "Killing Yourself To Live" (from Sabbath Bloody Sabbath):

How people look and people stare
Well I don't think that I even care
You work your life away and what do they give?
You're only killing yourself to live

Unfortunately, it worse than that. There's more to bad ideology for fashion's sense than needlessly clinging to the Protestant work ethic. For example, people treat their religions and political affiliations as if they were sports fandoms or something to wear on a t-shirt.

Conservatism used to be about principles, even though the fundamental and most repugnant principle was "a place for everybody and everybody in their place". Christianity used to be about acknowledging one's flaws as a human being and doing one's best to live up to the example set by Jesus Christ. (At least to a point: when was the last time you saw a Christian sell all their possessions, give all their wealth to the poor, and choose a life of holy vagrancy?)

Likewise for leftists: being a leftist used to be about breaking the power of capital and its owners and ensuring that those whose work creates the wealth of the world get their rightful share. It used to be about solidarity among workers. It also used to be about defending freedom of speech for everybody, even one's enemies, and about upholding freedom of association, freedom of assembly, freedom of religion, the right to privacy, and freedom from religion.

Nowadays it seems many conservatives and Christians active on social media think being conservative and Christian means being proud of willful ignorance, miserliness, and insularity. The conservative on Twitter cares nothing for liberty; they wish only to privatize tyranny. The Christian on Facebook has no interest in being Christ-like; they are instead all too often Sodomites or the sort of Pharisees who demanded of Pilate, "Give us Barabbas".

Likewise, leftism on social media has little enough to do with class struggle or with a desire to realize such old-fashioned ideals as "liberty and justice for all" or "equal justice under law". Nowadays online leftism consists mainly of book clubs and struggle sessions. The sort of "everything for my in-group and nothing for the out-group" identity politics that was once the preserve of white supremacists1 now seems the rule among self-styled leftists and progressives, and even some of the feminists and anti-racists are sexists and racists — unless they're the sort that Queensrÿche2 accused in 1988 of…

Fighting fire, with empty words
While the banks get fat
And the poor stay poor
And the rich get rich
And the cops get paid
To look away
As the one percent rules America

Which leads to marginalia.nu's point regarding fashionable intolerance:

Intolerance is a hat many compete in growing to silly proportions. When they perceive that some intolerance is approved of they grow theirs even more intolerant.

The opposite can also be a silly hat, turning the other cheek even in the face of the most grievous insult.

It would be easy to point to a number of examples, beginning with the resurgence of public racism on both the right and certain factions of the left. However, it's a nice, sunny day where I am and the prospect of looking for examples of fashionable intolerance and trendy spinelessness is too depressing to be worthwhile.

Instead, I prefer to remember Max Stirner's warnings against letting oneself be ruled by fixed ideas. By all means indulge in fashion when it serves you but when a fashion forgets its place and demands your service, it should no longer have a place in your life.


  1. Though the phrase "identity politics" was first used by the black feminist Combahee River Collective in 1977, I think it was first practiced in its most pernicious form by the Ku Klux Klan in the 19th century.↩︎

  2. Unfortunately, if you're a metalhead and you spend enough time thinking about politics in the US you're going to find an excuse to quote Operation: Mindcrime. It's a testament to how little has really changed in the United States that lyrics from songs like "Revolution Calling" and "Spreading the Disease" remain relevant over 30 years later.↩︎

back to top

Literature Ain't Burger King

Wed, 22 Sep 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/literature-aint-burger-king.html


Because I often frequent online writing forums I often see others ask about motivation: "Why do you write?" I suffer no lack of facile answers.

  • Because I can.
  • Because I choose to.
  • Because you can't stop me.

These are silly answers for a silly question. They establish my persona: a gruff, working-class writer with a chip on his shoulder and a penchant for melodrama. Or, to paraphrase Chuck Palahniuk in Fight Club: I am Walter Mitty's bad attitude.

I could explain my motive in Satanic terms if I wanted to play up my heavy metal influences or come across as edgy or aggressive. I could, for example, call my work a labor of hatred or a sacrament of defiance. I could frame my writing as a rebellion against workism, careerism, or totalitarian capitalism. I could hold forth about the need to find meaning or purpose outside the work does for a living, because a job is just a job and will never be more than that regardless of the title on your business card or how much Kool-Aid you drink.

All of that is true but irrelevant. The real reason I write is that literature ain't Burger King. You don't get to "have it your way" if all you ever do is read other people's fiction. In literature, the customer is never right. Publishers won't admit this. Neither will authors. Nobody ever sold books by rubbing readers' noses in their own irrelevance.

Consider your favorite traditionally published author. Even those who claim to write with a specific reader in mind aren't thinking about you. Their target is a composite who only exists in their imaginations, a chimera that Stephen King addresses as "Constant Reader". You might share certain characteristics with this idealized representation of the author's intended readership, but you aren't the reader your favorite author thinks about when writing unless the novel is explicitly dedicated to you.

Let's also consider indie authors. For whom do they write? Again, you are not their target. They claim otherwise if they're active on social media because otherwise they'd be subject to public excoriation, but readers don't matter as much as they think they do.

Traditionally published authors write for agents and publishers. They're the ones who actually buy or license an author's work. Publishers create their own version of an author's work by editing it — usually with the author's cooperation — and then sell that edition. The version of your favorite novel that you read is not the version the author persuaded an agent to represent. Nor is it the version the publisher's acquisition editor read on an agent's recommendation.

Indie authors write for algorithms. They write for Amazon, Google, Twitter, Facebook, Reddit, and all their imitators. They offer their work to automated gatekeepers instead of the human variety, but you are still the last person to decide what you will read. You will read what Corporate America chooses for you, and you will like it. You will like, follow, and obey the artists chosen for you or be exiled from mainstream culture.

Suppose that you do your reading on sites like Wattpad, RoyalRoad, Tapas, Inkitt, etc. Perhaps you use Goodreads to find new books? If you don't know exactly what you want you're stuck with what's popular — or what can be made popular by influencers and tastemakers. If you use awards as your guide, you're still dealing with popularity contests. Depending on traditional publishers won't help. They decide who to publish by identifying trends and extrapolating upon them.

As long as your tastes are trendy, you won't lack for something to read. There's nothing wrong with that, either, but if you're into something obscure you're going to end up re-reading the same books until you're sick of them. Suppose, for example, that you wanted a fantasy bildungsroman about a naive young man who sets off on a journey with world-shaking consequences or a many-sided account of a dynastic war of succession in another world? You'll be spoiled for choices. Now imagine that you want a fantasy novel about a middle-aged sorceress who works as a research librarian who figures out how to develop new spells that wizards who specialize in the creation of new magicks never thought to create, like a spell that automatically silences anybody in range if they start explaining to the caster something they already know? You might have to wait a while.

There's no percentage in hating the players or the game. The traditional and indie publishing industries are machines of such byzantine complexity that they have no business working at all, let alone giving eighty percent of readers eighty percent of what they want eighty percent of the time. Nevertheless, there's a reasonable chance that you'll find yourself dealing with the literary equivalent of cable TV or Netflix: millions of books and nothing to read.

It isn't your fault. It isn't anybody's fault. It probably happens to everybody, and it happened to me.

This is the real reason I write. The story I wanted to read wasn't getting written. If somebody had written it, it had not been published. If it had been published, nobody thought to tell me about it. Who would I have asked, anyway? An underpaid and overworked bookstore clerk or librarian with more pressing concerns than my dissatisfaction with the selection?

In situations like these there are only three solutions:

  1. Make do with what's available
  2. Do without
  3. Do it yourself

Most readers choose one of the first two options. We call people who take the third option writers. However, there are only two kinds of writers, and if you're a techie then you know where this joke is going. There are writers who write for themselves and writers who write for publication. For most writers this is an exclusive or (XOR); being able to write for yourself and successfully write for publication takes luck or the possession of fuck you money.

The possession of the right kind of day job can provide fuck you money, money that allows you to write as you please and release your work on the off chance that it might scratch another reader's itch. For example, I work in tech and make more in a year than most writers make in five. I can write for myself, do it my way, and not worry about whether it will sell because my day job pays the bills.

I get to have it my way because I do the work. It isn't easy, but it's worth it to me. I know who to blame if the story I wrote wasn't what I wanted. We have a staredown every time I shave.

If you're not happy with the fiction available, don't bother complaining. Nobody cares, because this isn't Burger King. If you want the story written your way, write it yourself, then publish it yourself — or be content with having written it. Nobody else can tell your story but you. Nobody else can represent you. Don't ask them to try because if they've got any integrity they're doing for themselves what you would have them do for you.

Stop consuming.
Start creating.
Write the change you want to see in the world.

I had to. So can you. It won't be easy, but it will be work you're doing entirely for yourself what might be the first time in your life. That's reason enough: your story written your way.

back to top

Of Course I Worked There. So What?

Wed, 08 Sep 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/of-course-i-worked-there-so-what.html


Since the beginning of the COVID-19 pandemic, the New York Times has chosen to post one dumbass article after another about how remote work is terrible for bosses, extroverts, and neurotypical people. Their latest asks, “If You Never Met Your Co-Workers in Person, Did You Even Work There?” (The article is archived on archive.is if you hit a paywall.)

While Betteridge’s Law of Headlines suggests that the answer is “no”, I’m going to take the contrary position. Even if I never set foot in the office, I still worked there. I’ve got the bank statements showing direct deposits and W2 forms to prove it. However, that does not matter.

The real meat of this dumbass article is the notion that remote work diminishes workers’ attachment to their jobs. Apparently it is necessary to meet one’s coworkers in person to actually care about one’s job and want to stick around.

The coronavirus pandemic, now more than 17 months in, has created a new quirk in the work force: a growing number of people who have started jobs and left them without having once met their colleagues in person. For many of these largely white-collar office workers, personal interactions were limited to video calls for the entirety of their employment.

Never having to be in the same conference room or cubicle as a co-worker may sound like a dream to some people. But the phenomenon of job hoppers who have not physically met their colleagues illustrates how emotional and personal attachments to jobs may be fraying. That has contributed to an easy-come, easy-go attitude toward workplaces and created uncertainty among employers over how to retain people they barely know.

It’s hard for me to refrain from dismissing this entire article as arrant bullshit because it presents a perspective at such variance with my own experience. It is entirely possible to work in an office, in person, and not have more than a nodding acquaintance with one’s coworkers. It is not necessarily an easy feat to accomplish, especially in close-knit workplaces where one is encouraged to mistake one’s coworkers for family, but I never let that stop me. To paraphrase (or parody, if you like) T. S. Eliot, In every office my coworkers come and go / Sometimes they even talk of Michelangelo.

This is especially the case at my current day job, which is one of the United States’ four major consulting firms. I work with people located on the other side of the continent, and the company is not about to go to the expense of paying for me to fly across the US to schmooze with them in person, a small mercy for which I might thank God if we were on speaking terms.

It is not my coworkers’ fault that I prefer to keep my distance and not get to know them too well. I am confident that most of them are perfectly decent people, and might even be worth befriending if I did not work with them. The problem is that I do work with them, and that I have always tended to compartmentalize. I went to work as I went to school, and refused to bring either home with me.

There is work, and then there is the rest of my life, and I prefer to erect the same wall of separation between work and life that Thomas Jefferson wanted to build between church and state. Refusing to get close to coworkers is how I protect work/life balance and ensure that my day job doesn’t get more than the 40 hours a week for which I am paid.

There is no point in loving a job that is inherently incapable of loving me back, and I only dream of labor when I’m having a nightmare. I understand that my attitude is atypical, and perhaps extreme. But as I sometimes tell my wife, Healthy people have boundaries. I have an Absolute Terror Field.

“If you’re in a workplace or a job where there is not the emphasis on attachment, it’s easier to change jobs, emotionally,” said Bob Sutton, an organizational psychologist and a professor at Stanford University.

I am not convinced that Sutton has the whole picture, but I have always considered my jobs to be ephemeral because employment in most of the United States is governed by the doctrine of employment at will. As an “at will” employee without the protection of a contract or the backing of a trade union I can be fired at any time for no reason. Conversely, I am under no legal or moral obligation to give notice before quitting a job; that I do so is a mere courtesy.

I do find it interesting that corporations continue to try to keep people by encouraging them to befriend coworkers, because I have always thought of myself as a mercenary. I do the job, and then I get paid. That is the extent of my attachment to an employer, and I am content with it. I saw how scantily my late father’s employers rewarded his loyalty and devotion, and am resolved to avoid his mistakes.

But my current employer is not content with ensuring that I am adequately and promptly paid for my services. Instead, they concern themselves with the fostering of community over video calls.

“They can’t just say, ‘Oh, be social, go to virtual happy hours,’” Dr. Rhymer said. “That by itself is not going to create a culture of building friendships.”

She said companies could help isolated workers feel motivated by embracing socialization, rather than making employees take the initiative. That includes scheduling small group activities, hosting in-person retreats and setting aside time for day-to-day chatter, she said.

These ideas all seem to favor sociable people who insist on identifying with their jobs, careerists rather than mercenaries like me who seek emotional and social fulfillment by other means. None of these activities are fun or pleasurable; they’re just additional work, and if they are scheduled outside standard business hours then they require that I work unpaid overtime.

I can’t speak for anybody else, but I have no particular need for friends at work. Cordial acquaintance is enough, since that makes others more comfortable and thus makes my job easier. I have my wife. I have cats. I have my online writing group. I suppose I have other Final Fantasy XIV players, though I know better than to lean too heavily on them. (I generally play a healer role, and it’s often a case of magician, heal thyself.) Unlike my health insurance, none of these are dependent on who signs my paychecks.

It is not that hard to keep me around. I don’t ask much from my day job.

  • Pay me a living wage.
  • Pay time and a half for overtime.
  • Pay me on time.
  • Give me clear requirements and reasonable deadlines.
  • Help me stay current by providing continuing education.
  • Provide the tools I need to do my job.
  • Do not give me grief for not being neurotypical or extroverted.
  • Do not intrude upon my life outside of work.
  • Do not waste my time with pointless meetings or bullshit processes.

My current employer does a reasonable job of meeting my demands, and I have found that I can ignore most of the company’s social bullshit. It might not get me promoted, but I am fine with that because I do not have a career — and never wanted one.

Software development was the closest I could get to getting paid to sit on my ass and dick around with computers. That’s all. It pays better than sweeping floors and scrubbing toilets.

There is also the converse, that remote work supposedly makes it easier for employers to dump workers.

Mr. Pressler, 35, said not physically meeting and getting to know his bosses and peers made him expendable. If he had built in-person relationships, he said, he would have been able to get feedback on his pan videos and riff on ideas with colleagues, and may have even sensed that cutbacks were coming well before he was let go.

I’m not sure how somebody Sean Pressler’s age or younger can believe that American workers are anything but expendable to most employers. These vaunted in-person relationships did not prevent people in my generation or my parents’ generation from being laid off without notice or fired for no good reason. We are costs to be reduced or eliminated. We are not human beings to our bosses, with lives that matter, but merely human resources to be exploited until exhausted.

Darth Vader ending a meeting that could have been an email

Sometimes I just want to force choke my more naïve coworkers as I say, I find your lack of cynicism disturbing. It is a desire I generally keep to myself, lest I make my coworkers too nervous and thus find myself fired for cause.

back to top

Mail from SEO Spammers

Thu, 02 Sep 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/mail-from-seo-spammers.html


I hate getting email from SEO spammers, but it's a self-inflicted First World problem. This is what I get for having a website in the first place. They're just trying to make a living, after all. Nevertheless, I don't feel obligated to refrain from playing with them a little. I'll be documenting amusing or egregious examples here.

I'll be posting raw text with most headers intact, though I'll only include the plain text portions of HTML emails. If any of these spammers are foolish enough to include a postal address, I'll be stripping that out too.

Dhee DD <diya@lishawn.com>

Return-Path: <diya@lishawn.com>
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
     by sloti43n16 (Cyrus 3.5.0-alpha0-1126-g6962059b07-fm-20210901.001-g6962059b) with LMTPA;
     Thu, 02 Sep 2021 09:05:13 -0400
X-Cyrus-Session-Id: sloti43n16-1630587913-414413-2-4758527805104557224
X-Sieve: CMU Sieve 3.0
X-Spam-known-sender: no
X-Spam-sender-reputation: 500 (none)
X-Spam-score: 0.1
X-Spam-hits: DCC_REPUT_70_89 0.1, HTML_MESSAGE 0.001, ME_SENDERREP_NEUTRAL 0.001,
  RCVD_IN_DNSWL_NONE -0.0001, RCVD_IN_MSPIKE_H2 -0.001,
  SPF_HELO_NONE 0.001, SPF_PASS -0.001, LANGUAGES en, BAYES_USED none,
  SA_VERSION 3.4.2
X-Spam-source: IP='209.85.219.193', Host='mail-yb1-f193.google.com', Country='US',
  FromHeader='com', MailFrom='com'
X-Spam-charsets: plain='UTF-8', html='UTF-8'
X-Resolved-to: [REDACTED]
X-Delivered-to: [REDACTED]
X-Mail-from: diya@lishawn.com
Received: from mx6 ([10.202.2.205])
  by compute1.internal (LMTPProxy); Thu, 02 Sep 2021 09:05:13 -0400
Received: from mx6.messagingengine.com (localhost [127.0.0.1])
    by mailmx.nyi.internal (Postfix) with ESMTP id 4DCA3C801E3
    for [REDACTED]; Thu,  2 Sep 2021 09:05:13 -0400 (EDT)
Received: from mx6.messagingengine.com (localhost [127.0.0.1])
    by mx6.messagingengine.com (Authentication Milter) with ESMTP
    id 2C929027EE0;
    Thu, 2 Sep 2021 09:05:13 -0400
ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm3; t=
    1630587913; b=PYyFoy6LWl9LNXENvRculbR+tJC2OAczp46Ny8eEZ/OUGLE8oj
    YO7kzBfHoBvihBw5xZ9kUZLpFCuDJGZ9exuTliGCz7uBOAWQI1cL/jmFcWIAkxcj
    0RNyr/KfQAL8nQHRA5uMSaBPufL+INvvD40LEuyXw4eDkNCQAt/EtzXdYevEUVMW
    NvSAJ3czaKr0lYTPzJbyPHSHKefNa2Ivt1a0R0dw8nMUVCF3hSa2zH+Dk9g/ckv9
    LXqBzFdYw3oGG0t/yCHm2BKxATlbjQbnVYPrKye2KwXDddIIfvurngvEDBc9Ix92
    IsgS8w8LaDC4XPTqOaelzf5lodzAyBZCzqOQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=
    messagingengine.com; h=mime-version:from:date:message-id:subject
    :to:content-type; s=fm3; t=1630587913; bh=6alHcHItYJ6twbr5WYOTIe
    T7GzbWsay7wf0rNYJwJZ0=; b=CW+uuo62s1cN1EmReSyOAMEH5i25/aXfLDrecT
    tAw43aj7HKukKp6NfKMgrjktKCgQXHWIRBWcsUDXzcQRyPZmTC4PSB45mM1dDOuD
    bb+o/HNMbTBnxFyMpYsxQLU582KURXvHiLZ3S1yTupggtDF8BVPIKMMi4SAcFoz2
    FGyAZSU3o5UjKiUTJYOgZY4xhCEhVCfUPl6TTi3qe5EfHJuUuAve6QSRwfELXJoV
    KE92G2FhftbkZX/GK/iPMHASJezCQ1yAJ/D1w4EC6Xu7Ja90h+9HRAAqKiSwQ5d7
    J/HprHxZwwdG0gJZpLe2lZaUedL640CKS0n9IsKrFJFrUqyQ==
ARC-Authentication-Results: i=1; mx6.messagingengine.com;
    arc=none (no signatures found);
    bimi=skipped (DMARC did not pass);
    dkim=pass (2048-bit rsa key sha256)
    header.d=lishawn-com.20150623.gappssmtp.com
    header.i=@lishawn-com.20150623.gappssmtp.com header.b=TfL7L6sP
    header.a=rsa-sha256 header.s=20150623 x-bits=2048;
    dmarc=none policy.published-domain-policy=none
    policy.applied-disposition=none policy.evaluated-disposition=none
    (p=none,d=none,d.eval=none) policy.policy-from=p
    header.from=lishawn.com;
    iprev=pass smtp.remote-ip=209.85.219.193 (mail-yb1-f193.google.com);
    spf=pass smtp.mailfrom=diya@lishawn.com
    smtp.helo=mail-yb1-f193.google.com;
    x-aligned-from=pass (Address match);
    x-csa=none;
    x-google-dkim=pass (2048-bit rsa key) header.d=1e100.net
    header.i=@1e100.net header.b=Jd8qhfmV;
    x-me-sender=none;
    x-ptr=pass smtp.helo=mail-yb1-f193.google.com
    policy.ptr=mail-yb1-f193.google.com;
    x-return-mx=pass header.domain=lishawn.com policy.is_org=yes
    (MX Records found: aspmx.l.google.com,alt1.aspmx.l.google.com,alt2.aspmx.l.google.com,alt3.aspmx.l.google.com,alt4.aspmx.l.google.com);
    x-return-mx=pass smtp.domain=lishawn.com policy.is_org=yes
    (MX Records found: alt4.aspmx.l.google.com,aspmx.l.google.com,alt1.aspmx.l.google.com,alt2.aspmx.l.google.com,alt3.aspmx.l.google.com);
    x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384
    smtp.bits=256/256;
    x-vs=clean score=0 state=0
Authentication-Results: mx6.messagingengine.com;
    arc=none (no signatures found);
    bimi=skipped (DMARC did not pass);
    dkim=pass (2048-bit rsa key sha256)
      header.d=lishawn-com.20150623.gappssmtp.com
      header.i=@lishawn-com.20150623.gappssmtp.com header.b=TfL7L6sP
      header.a=rsa-sha256 header.s=20150623 x-bits=2048;
    dmarc=none policy.published-domain-policy=none
      policy.applied-disposition=none policy.evaluated-disposition=none
      (p=none,d=none,d.eval=none) policy.policy-from=p
      header.from=lishawn.com;
    iprev=pass smtp.remote-ip=209.85.219.193 (mail-yb1-f193.google.com);
    spf=pass smtp.mailfrom=diya@lishawn.com
      smtp.helo=mail-yb1-f193.google.com;
    x-aligned-from=pass (Address match);
    x-csa=none;
    x-google-dkim=pass (2048-bit rsa key) header.d=1e100.net
      header.i=@1e100.net header.b=Jd8qhfmV;
    x-me-sender=none;
    x-ptr=pass smtp.helo=mail-yb1-f193.google.com
      policy.ptr=mail-yb1-f193.google.com;
    x-return-mx=pass header.domain=lishawn.com policy.is_org=yes
      (MX Records found: aspmx.l.google.com,alt1.aspmx.l.google.com,alt2.aspmx.l.google.com,alt3.aspmx.l.google.com,alt4.aspmx.l.google.com);
    x-return-mx=pass smtp.domain=lishawn.com policy.is_org=yes
      (MX Records found: alt4.aspmx.l.google.com,aspmx.l.google.com,alt1.aspmx.l.google.com,alt2.aspmx.l.google.com,alt3.aspmx.l.google.com);
    x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384
      smtp.bits=256/256;
    x-vs=clean score=0 state=0
X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgedvtddruddvhedgheelucetufdoteggodetrfdotf
    fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu
    rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpefhfffkuf
    fvtgesrgdtreertddtjeenucfhrhhomhepffhhvggvucffffcuoeguihihrgeslhhishhh
    rgifnhdrtghomheqnecuggftrfgrthhtvghrnhepvdduheelffegveekhfehieekuedvhe
    dtgeffgffggeetffeltdehvdehhfeuleeinecukfhppedvtdelrdekhedrvdduledrudel
    feenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpedvtdelrdekhe
    drvdduledrudelfedphhgvlhhopehmrghilhdqhigsuddqfhduleefrdhgohhoghhlvgdr
    tghomhdpmhgrihhlfhhrohhmpeeoughihigrsehlihhshhgrfihnrdgtohhmqe
X-ME-VSScore: 0
X-ME-VSCategory: clean
X-ME-CSA: none
Received-SPF: pass
    (lishawn.com: Sender is authorized to use 'diya@lishawn.com' in 'mfrom' identity (mechanism 'include:websitewelcome.com' matched))
    receiver=mx6.messagingengine.com;
    identity=mailfrom;
    envelope-from="diya@lishawn.com";
    helo=mail-yb1-f193.google.com;
    client-ip=209.85.219.193
Received: from mail-yb1-f193.google.com (mail-yb1-f193.google.com [209.85.219.193])
    (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
     key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
    (No client certificate requested)
    by mx6.messagingengine.com (Postfix) with ESMTPS
    for [REDACTED]; Thu,  2 Sep 2021 09:05:11 -0400 (EDT)
Received: by mail-yb1-f193.google.com with SMTP id r4so3722380ybp.4
        for [REDACTED]; Thu, 02 Sep 2021 06:05:11 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=lishawn-com.20150623.gappssmtp.com; s=20150623;
        h=mime-version:from:date:message-id:subject:to;
        bh=6alHcHItYJ6twbr5WYOTIeT7GzbWsay7wf0rNYJwJZ0=;
        b=TfL7L6sPV99+B28456/p/mWOAyZE6oavilKdi+Zfptg5ghWOWQOmo13ABltOG0QGDH
         1A5W/k8af3lpu9PLtwHjQZutGeWYW6VfO6TM7kcnyRE4pN8prNsDxuPGnReToZrbEoC7
         L8cjpcIe6tF7mtIaGgLcjQclB/DPqMteUH3Xz1UGWInRDYTIlaezt7tXV0hfs1q2+iEU
         JAsemVotdJyxagvoqCznl5mN4xGsFThiFvIRqRJcDRyZVyRQMUgyIJ4IKuLTecoFRUlT
         DSWlqRQoDDuiZNe6thn68wmkMZoN93e/D+1eskC30aRNsHN3IpGwEJaKAfiZXy8uYuZX
         WDiQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
        bh=6alHcHItYJ6twbr5WYOTIeT7GzbWsay7wf0rNYJwJZ0=;
        b=Jd8qhfmV6zFs6Ef0BjFcvOUIaLrIlIW0UogR5Ky0JpElL79QA+b/T8cLNQsSi6pqEB
         I37ElY4mcDTTUkSdPVmRW9dwZyxOLcjm3nIJJtHj6YcDei8KUR6SmFLLKGEp+mqMcCFQ
         767HfA2GxN1idx2OZDUvbIaQcmOm5uvR/WvxLW5K4sGBlRYVmP98ChgXB7vmsDXOEve1
         ZmQ33FZDKSQ935hue6hz5WKV3CCCjffqnkO90tKdSc4HJuUto0Eztv0MRMPM8rZ1H2aR
         M3crgzHp8lbaqs1gqBxdE+aDjbrxkp9PKqG+z9pImB546j6REIsWEgrY57qnjW7BUcuc
         PLEw==
X-Gm-Message-State: AOAM531HanfaTNO/A/gDfbu1J97qgusgg/HgZK4mjx+ofIud3Y0BfXkh
    j2m73UnmNi2dAcD0v+GoOPXnQKunCKhHe7ts2NW9FTdXSwyCHIwn
X-Google-Smtp-Source: ABdhPJyRo28uG/dEjJlJ30GDELEDzBgecqbGyJx5+/tNBJAdv4EIeaS2Ft5ydBxRUJb9oowsjFNn85jf43UzI3uirBI=
X-Received: by 2002:a25:3816:: with SMTP id f22mr4025736yba.54.1630587908706;
 Thu, 02 Sep 2021 06:05:08 -0700 (PDT)
MIME-Version: 1.0
Received: by 2002:a05:7010:4812:b029:107:42c4:8312 with HTTP; Thu, 2 Sep 2021
 06:05:08 -0700 (PDT)
From: Dhee DD <diya@lishawn.com>
Date: Thu, 2 Sep 2021 18:35:08 +0530
Message-ID: <CACz6Eb0NxamH4=B2z1Af-rGuwN0RWoG_A6YB57-07c5-Yq2Tpw@mail.gmail.com>
Subject: Matthewgraybosch shortlisted for 'Top Most Promising Health Websites
 For 2021'
To: [REDACTED]
Content-Type: multipart/alternative; boundary="0000000000001334e705cb02d56b"

--0000000000001334e705cb02d56b
Content-Type: text/plain; charset="UTF-8"

Hello!

This is Diya from Li Creative Technologies, We're very pleased to let
you know that 'Matthewgraybosch' has been shortlisted by our editorial
board which will be included and honored as "Top Most Promising Health
Sites For 2021".

This post with one page profile of selected blog owners will be
included to all our newsletter readers. It's a focus on Health Blog
writers, which will rank in google for all top Health keywords
shortly.

We feel that inclusion of 'Matthewgraybosch' in this honor list and a
small line about your website in the post can help 'Matthewgraybosch'
differentiate from its competitors.

I'd like to talk to the concerned person from your organization at the
earliest to finalize 'Matthewgraybosch' inclusion in this list.

It's a very unique promotion proposal; we hope 'Matthewgraybosch'
makes better use of it.

Waiting to know what you think on the same.

Regards,

Diya

If this Diya character is from "Li Creative Technologies", why are they sending from "lishawn.com"? There's nothing there but a default WordPress installation. However, a search for "Li Creative Technologies" turns up a couple of results.

licreative.com
"LCT (Li Creative Technologies, Inc.) is a recognized leader in 3D audio, 3D music, speech recognition, natural language processing, artificial intelligence, machine learning, and advanced digital signal processing. The company provides new products, design, services, and solutions for the US government and many commercial enterprises, including the smartphone, video conferencing, home automation, music, bank, and transportation industries."
licreativetechnologies.com
"We are indeed Pondicherry’s SEO agency and one of Chennai's top SEO companies. We do provide consulting and SEO services. Our procedure involves campaigns for Google Ads (pay per click), website creation, social networks and cleaning of reputations."

I think the second result is the most likely source. What I don't get is why my personal website is being mistaken for a health blog. Furthermore, why bother with a shortlist? If you want to add me to a list of "promising health bloggers for 2021", just do it. There's no need to consult me, but if you really want me to know you could have sent a link to the list after posting it.

The fact that they want to contact the "concerned person" to "finalize" inclusion in the list suggests that this is some kind of attempt at setting up a con. This kind of grift might fly in Pondicherry or Chennai, but I'm a New Yorker at heart and it's gonna take a bit more effort to draw me into a scam.

Lauren Harris <lharris@slateberry.com>

Return-Path: <lharris@slateberry.com>
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
     by sloti43n16 (Cyrus 3.5.0-alpha0-1118-g75eff666e5-fm-20210816.002-g75eff666) with LMTPA;
     Wed, 18 Aug 2021 14:07:57 -0400
X-Cyrus-Session-Id: sloti43n16-1629310077-2570241-2-3470273511805307524
X-Sieve: CMU Sieve 3.0
X-Spam-known-sender: no
X-Spam-sender-reputation: 500 (none)
X-Spam-score: 0.0
X-Spam-hits: HTML_MESSAGE 0.001, ME_SENDERREP_NEUTRAL 0.001, RCVD_IN_DNSWL_NONE -0.0001,
  RCVD_IN_MSPIKE_H2 -0.001, SPF_HELO_NONE 0.001, SPF_PASS -0.001,
  T_KAM_HTML_FONT_INVALID 0.01, UNPARSEABLE_RELAY 0.001, LANGUAGES en,
  BAYES_USED none, SA_VERSION 3.4.2
X-Spam-source: IP='209.85.166.43', Host='mail-io1-f43.google.com', Country='US',
  FromHeader='com', MailFrom='com'
X-Spam-charsets: plain='UTF-8', html='UTF-8'
X-Resolved-to: [REDACTED]
X-Delivered-to: [REDACTED]
X-Mail-from: lharris@slateberry.com
Received: from mx1 ([10.202.2.200])
  by compute1.internal (LMTPProxy); Wed, 18 Aug 2021 14:07:57 -0400
Received: from mx1.messagingengine.com (localhost [127.0.0.1])
    by mailmx.nyi.internal (Postfix) with ESMTP id 4B757660090
    for [REDACTED]; Wed, 18 Aug 2021 14:07:56 -0400 (EDT)
Received: from mx1.messagingengine.com (localhost [127.0.0.1])
    by mx1.messagingengine.com (Authentication Milter) with ESMTP
    id 0D0AF5283F2;
    Wed, 18 Aug 2021 14:07:56 -0400
ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm3; t=
    1629310076; b=gFPfluIGzPJOqOtDKTBJkjynfAV/AXkLcJrS2JBSVd3XbWuLFQ
    25j4ESAwtrNQf51b38LLMLKBiwQoBu2Obc4VmIjSCLj9AStK8wSuU0/0zlxII5/D
    F0Gu/5h805VeNvyUGZtAfxe2685bLorvikd0Jn5rq05Nybk3/i8qFAMdcKk6WaH5
    ucs2NXwA2UOKJQQd5UvIx26XKw8fNwnq2IkaeVMhAZFOI0V8VQjvhqkJDlU79UtU
    3K4Xld78mxgyXS8UnMk/Rm2R+a+cc1Ku4ib1Jqhkx7BiqHGw6DxMCxd2RIkgRNVG
    z3XX+V53mjfLvzewEtXFc5HNOWOhBhPWkqUg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=
    messagingengine.com; h=mime-version:from:date:message-id:subject
    :to:content-type; s=fm3; t=1629310076; bh=7BT1rSzovy3WL29CKNiZjg
    Ylgqmq7Uf0dpqnyQBnhJE=; b=FOABBynZeOI5W4VLDsCEKpnQkHb/6Pkd+UJDhb
    GzCq4WUfZ75rCjwiEOklpetOJBkgLzFsESLpWmXgwAkG4aK4vzlhjdMCL7YF0dsc
    zjudHwKDo3NxzUm/KHstZoAEEghlZzpdYlU/jgk2XLC/QuLw3hhbQ5fh0whVBQ+F
    XWTSLN8/H2BzwY/wiv0tnq0SGfbp2taTKu/43lkNdbddD7cCbUIcsv3KNC4tzjSI
    szsBzMkJJoAUmW5pyywbUEsNuvV558zCxaOUGZKUKSYz2dAvnZeLhfPnrtqnd6Ox
    vDQlGL531cOfUo9xetAkFhOTk8xm2NSaw50H7trhUIYTGCew==
ARC-Authentication-Results: i=1; mx1.messagingengine.com;
    arc=none (no signatures found);
    bimi=skipped (DMARC did not pass);
    dkim=pass (2048-bit rsa key sha256) header.d=slateberry.com
    header.i=@slateberry.com header.b=iGBLEcfm header.a=rsa-sha256
    header.s=google x-bits=2048;
    dmarc=none policy.published-domain-policy=none
    policy.applied-disposition=none policy.evaluated-disposition=none
    (p=none,d=none,d.eval=none) policy.policy-from=p
    header.from=slateberry.com;
    iprev=pass smtp.remote-ip=209.85.166.43 (mail-io1-f43.google.com);
    spf=pass smtp.mailfrom=lharris@slateberry.com
    smtp.helo=mail-io1-f43.google.com;
    x-aligned-from=pass (Address match);
    x-csa=none;
    x-google-dkim=pass (2048-bit rsa key) header.d=1e100.net
    header.i=@1e100.net header.b=TljWsp0O;
    x-me-sender=none;
    x-ptr=pass smtp.helo=mail-io1-f43.google.com
    policy.ptr=mail-io1-f43.google.com;
    x-return-mx=pass header.domain=slateberry.com policy.is_org=yes
    (MX Records found: alt1.aspmx.l.google.com,alt2.aspmx.l.google.com,aspmx2.googlemail.com,aspmx3.googlemail.com,aspmx.l.google.com);
    x-return-mx=pass smtp.domain=slateberry.com policy.is_org=yes
    (MX Records found: aspmx.l.google.com,alt1.aspmx.l.google.com,alt2.aspmx.l.google.com,aspmx2.googlemail.com,aspmx3.googlemail.com);
    x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384
    smtp.bits=256/256;
    x-vs=clean score=30 state=0
Authentication-Results: mx1.messagingengine.com;
    arc=none (no signatures found);
    bimi=skipped (DMARC did not pass);
    dkim=pass (2048-bit rsa key sha256) header.d=slateberry.com
      header.i=@slateberry.com header.b=iGBLEcfm header.a=rsa-sha256
      header.s=google x-bits=2048;
    dmarc=none policy.published-domain-policy=none
      policy.applied-disposition=none policy.evaluated-disposition=none
      (p=none,d=none,d.eval=none) policy.policy-from=p
      header.from=slateberry.com;
    iprev=pass smtp.remote-ip=209.85.166.43 (mail-io1-f43.google.com);
    spf=pass smtp.mailfrom=lharris@slateberry.com
      smtp.helo=mail-io1-f43.google.com;
    x-aligned-from=pass (Address match);
    x-csa=none;
    x-google-dkim=pass (2048-bit rsa key) header.d=1e100.net
      header.i=@1e100.net header.b=TljWsp0O;
    x-me-sender=none;
    x-ptr=pass smtp.helo=mail-io1-f43.google.com
      policy.ptr=mail-io1-f43.google.com;
    x-return-mx=pass header.domain=slateberry.com policy.is_org=yes
      (MX Records found: alt1.aspmx.l.google.com,alt2.aspmx.l.google.com,aspmx2.googlemail.com,aspmx3.googlemail.com,aspmx.l.google.com);
    x-return-mx=pass smtp.domain=slateberry.com policy.is_org=yes
      (MX Records found: aspmx.l.google.com,alt1.aspmx.l.google.com,alt2.aspmx.l.google.com,aspmx2.googlemail.com,aspmx3.googlemail.com);
    x-tls=pass smtp.version=TLSv1.3 smtp.cipher=TLS_AES_256_GCM_SHA384
      smtp.bits=256/256;
    x-vs=clean score=30 state=0
X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgedvtddrleehgdduvddtucetufdoteggodetrfdotf
    fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu
    rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucgoufhushhpvggtthfkmh
    hgffhomhgrihhnucdlfedtmdenucfjughrpegghfffkffuvfgtsegrtderredttdejnecu
    hfhrohhmpefnrghurhgvnhcujfgrrhhrihhsuceolhhhrghrrhhishesshhlrghtvggsvg
    hrrhihrdgtohhmqeenucggtffrrghtthgvrhhnpeevudevgeefgfejueefiedthfdutedt
    jeeihfdttddthfekfefgfffggeevveetgfenucffohhmrghinhepfihikhhiphgvughirg
    drohhrghdpmhgrthhthhgvfihgrhgrhigsohhstghhrdgtohhmpdifvghllhhptggsrdgt
    ohhmnecukfhppedvtdelrdekhedrudeiiedrgeefnecuvehluhhsthgvrhfuihiivgeptd
    enucfrrghrrghmpehinhgvthepvddtledrkeehrdduieeirdegfedphhgvlhhopehmrghi
    lhdqihhouddqfhegfedrghhoohhglhgvrdgtohhmpdhmrghilhhfrhhomhepoehlhhgrrh
    hrihhssehslhgrthgvsggvrhhrhidrtghomheq
X-ME-VSScore: 30
X-ME-VSCategory: clean
X-ME-CSA: none
Received-SPF: pass
    (slateberry.com: Sender is authorized to use 'lharris@slateberry.com' in 'mfrom' identity (mechanism 'include:_spf.google.com' matched))
    receiver=mx1.messagingengine.com;
    identity=mailfrom;
    envelope-from="lharris@slateberry.com";
    helo=mail-io1-f43.google.com;
    client-ip=209.85.166.43
Received: from mail-io1-f43.google.com (mail-io1-f43.google.com [209.85.166.43])
    (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
     key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
    (No client certificate requested)
    by mx1.messagingengine.com (Postfix) with ESMTPS
    for [REDACTED]; Wed, 18 Aug 2021 14:07:55 -0400 (EDT)
Received: by mail-io1-f43.google.com with SMTP id g9so4009067ioq.11
        for [REDACTED]; Wed, 18 Aug 2021 11:07:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=slateberry.com; s=google;
        h=mime-version:from:date:message-id:subject:to;
        bh=7BT1rSzovy3WL29CKNiZjgYlgqmq7Uf0dpqnyQBnhJE=;
        b=iGBLEcfmBzGwHs+7kRtohUgt7w97y+jji/nchen/tZLXVN1YY2zj3pmgyMRuUgDqGg
         7g7YzbpZqsxfnUPL3/7/wP+iKCITeBajk2XQGJ0aKp404igoG5ty73BoLZmXJZ1r7Uo2
         mzD9D8Xe/y/ZzMFarc3E2erA9c+MwvEA/Hpl98U0HMxLV3MYJyRdffZAPQ/C8WKfaAKy
         /DsNV/6bBPTN+zGEy8eJ7IYQSpqNgLXP7BQAoFpWRh9IKPLrepQqIFNYe/15i1wlF3aK
         JsHjF6+FdEH2Y9xQ9M9k0lUm3BgG6LhGTYk37Q7DO1AYxevQpWXyTDIGwfDzFCZXfU/r
         ejKQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
        bh=7BT1rSzovy3WL29CKNiZjgYlgqmq7Uf0dpqnyQBnhJE=;
        b=TljWsp0OGIGVq0hzgbiqoM/V1ODnRKPZR46xZUTqMV46WPnGh1ZYnzlEQczYrAIk5z
         0XJrH0yfKy7aKq8Zf9Z9UT8CIBy7SuDp+8Q8Bys6hJvPW7dg3jFjeTBQi4Qf/vd0rXEn
         OCqvGI7MP/dZjgmv2kRAbd16tOnEW57/D+euZo9hTo4xOrR5EKBg/zPzE55+BgDvy4eg
         ucGeJZtz881BwnctREu5KSXz+l84NtUZlVDxth9yS5GxoPJ7UZZOfWw1y+/QZskU4JSD
         puChMlZ5T6bubigBtzarXrqSvHgDcUX9E3FfIv/iNzeF684EgpGE51+lH38fDHQhGlah
         +DSw==
X-Gm-Message-State: AOAM5300MxXuELWb8+nuSqkOl1uX+WQOL9sVKE5Z/oCvH0PgEGffix9w
    I0wx++c+G3Mt8uVCx/2Us2HNTgi7XMH7EiN5IiBaRjDnYPk=
X-Google-Smtp-Source: ABdhPJxUrCNb4veo8ZllgrVRwFcYHp/5eISe6ZbyAPXgZyTonwFHdVaBMvPnlsc2ygQO2r/dp4B1/u8zMoAtpZpKMiY=
X-Received: by 2002:a05:6602:2595:: with SMTP id p21mr7991275ioo.51.1629310074024;
 Wed, 18 Aug 2021 11:07:54 -0700 (PDT)
Received: from 776393159873 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 18 Aug 2021 14:07:53 -0400
MIME-Version: 1.0
From: Lauren Harris <lharris@slateberry.com>
Date: Wed, 18 Aug 2021 14:07:53 -0400
Message-ID: <CA+B_sTBUfJNHs_D+1DKaMxatqCTswqc9znNxEL2Kj=SLqDAiOg@mail.gmail.com>
Subject: quick question
To: [REDACTED]
Content-Type: multipart/alternative; boundary="00000000000030ff9605c9d950a8"

--00000000000030ff9605c9d950a8
Content-Type: text/plain; charset="UTF-8"

I noticed you shared an article from En.Wikipedia.org when you talked
about PCB design software, here:
https://www.matthewgraybosch.com/tag/bsd/

I thought that the article from En.Wikipedia.org is pretty good, but
we recently published an article that goes much deeper and talks about
the ten best PCB design software tools in 2021.

Did you know that a PCB design tool helps users to collaborate on
various projects, access libraries of components created before and
know the accuracy of their circuit schematic design?

The article talks about the best PCB design software tools available
in the market today.

It also answers the following questions:

   - What is PCB design software and why do you need it?
   - What are the key features to look for when choosing PCB design tools?
   - What are other recommended PCB design software tools?
   - What is the evaluation criteria for PCB design software?

We quote 30 different sources in the article -- it's quite
authoritative.

Here's the article, if you're interested: [URL redacted]

Would you consider sharing our article with your readers by linking to
it?  Anyone who is looking for the best PCB design tool may find this
interesting.

Please let me know if you have any questions and thank you for your
time.

Thanks,
-Lauren

--
Lauren Harris, Editor
[address redacted]

BTW, if you didn't like getting this email, please reply with
something like "please don't email me anymore", and I'll make sure
that we don't.

If "Lauren Harris" is telling the truth, she was probably referring to my 2019 article, "I Want My BSD". If so, that makes the rest of her post nonsensical. Why would I care about PCB design software just because I run a descendant of the Unix variant developed at UC Berkeley?

Furthermore, what kind of website is slateberry.com, anyway? It doesn't use HTTPS. It's just a blank page unless you use "view source". Viewing the source shows a bit of JavaScript, but no actual content. I am not impressed.

General Observations

One thing I've noticed about the SEO spam I've been getting is that they all seem to come from GMail. So, not only is Google a monopolist, but their free email service is a possible spam vector. I hope the GMail team are proud of themselves.

back to top

Hearing Rainfall

Wed, 01 Sep 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/hearing-rainfall.html


I can't speak for anybody else, but remote work since March 2020 has been good for me. I haven't spent as much money on gasoline, fast food, snacks, or soft drinks. I've lost almost a hundred pounds. I've improved my diet. I get more exercise. I sleep better. I'm still productive at my day job. Why would I give up a good thing?

I have no reason to go back to onsite work, despite the demands from executives (chronicled by Ed Zitron) that workers fortunate enough to escape the office return. Never mind that COVID-19 and its variants are not likely to be eradicated any time soon. Never mind that vaccines only offer 95% protection at best. Never mind that many people still refuse to get vaccinated and also refuse to wear masks. Management wants people back on-site, pronto.

I am fortunate to work for a firm that has thus far treated the eventual return to onsite work as a decision individuals can and should make for themselves at their own pace. They seem to recognize that while some people miss the bustle of office life and are impatient to dive back in, others might be more reluctant because of health concerns or responsibilities at home that they can't handle from the office.

My reluctance has nothing to do with health or family responsibilities. I am vaccinated, though I still wear a mask in public for other reasons that are none of your concern. I don't have children who need my presence at home. I could return to on-site work if I wanted to, which I don't.

I have a hard time suppressing the urge to laugh when people talk about going "back to the office" because in my case I'd be leaving my office to return to half a desk in a half-height cubicle in the middle of an open-plan hellscape where I can't crank up the headphones high enough to drown out everybody else's "spontaneous conversations" because I'd be risking both hearing loss and a reprimand for disturbing others. I also have a hard time laughing when people talk about being lonely while working at home, especially when they talk to me. As somebody who's introverted being around people is generally a stressful and draining experience. As somebody who's also on the autistic spectrum and thus feels obligated to mask, navigating a world not made for people like me is even more tiresome.

You might be lonely for lack of social interaction in an office, but I was lonelier at the office than I've ever been at home. Having other people around is no good when they aren't your people, and my coworkers aren't my people. They were generally kind enough, but unless they needed or wanted something from me I was part of the scenery.

One might think that I am reluctant to return to on-site work because of the negatives I associate with such working conditions. This is not the whole story. As I write this, the storm formerly known as Hurricane Ida is passing over my house. My windows are open, and I can feel the wind from the southwest and hear the rainfall. It soothes me. I have my cats coming upstairs to visit. My wife is downstairs, and I can visit her for a quick chat and a hug when I want it. Or, if she wants, she can come up and see me. Rather than having headphones clamped to my head, I can play music over a nice pair of speakers; today's a good day for Black Sabbath, Opeth, Gene Loves Jezebel, Joy Division, The Cure, and The Sisters of Mercy.

I have comfortable seating in my office. I have a nice big pedestal fan I can fire up when it gets too warm—and I can take off my shirt in the summer unless I've got to do a video call. I have a bunch of reference manuals in case I need them. With south-facing windows I usually have natural light, and when I don't I can turn on a lamp that gives me enough light. I've got photos of my wife and artwork instead of blank white walls. I get a little exercise every time I walk downstairs to fill my water bottle. I've got kettlebells I can lift if I'm on a conference call and have already said my piece. If I need to put a complicated problem on the back burner, I can go wash the dishes or take care of some other household chore.

Nobody notices how many times I leave my desk to fill my water bottle. Nobody notices if I take a break to write down an idea for a story or an observation about a character. Nobody is pressuring me to have my ass in the seat for 8-10 hours a day. Nobody comes over and leans on the cubicle, staring at me until I finally take off my headphones, look up from my work, and ask them what they want. Nobody seems to care how I go about working as long as I get things done, and my performance reviews suggest that management sees me despite my not being on-site—and they are pleased with what they see.

Why would I go back to on-site work when my current situation works so well for me? I'm not saying you have to be like me, so don't demand that I be like you. Let me bask in the sun before bending down to give my cat a belly rub as he warms himself. Let me listen to the rainfall under melancholy rock and feel the breeze when I'm working.

back to top

Don’t Worry. I’m Still OK.

Fri, 20 Aug 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/dont-worry-im-still-ok.html


If I keep posting on the net, it probably won’t be under my real name any longer. Blame my day job. As I get older I find myself less comfortable speaking my mind online using my real name because I have more to lose if somebody at work takes offense at something I’ve posted.

Also, it’s draining to be the same person to everybody regardless of context. Some people at work think that the side I show on the job is who I really am, and then they think I’m not “bringing my whole self” to work when compare how I act on the job with how I express myself online.

Of course I’m not bringing my whole self to work. That’s generally not a good idea. Besides, to quote danah boyd from a 2011 post on real names:

There is no universal context, no matter how many times geeks want to tell you that you can be one person to everyone at every point. But just because people are doing what it takes to be appropriate in different contexts, to protect their safety, and to make certain that they are not judged out of context, doesn’t mean that everyone is a huckster. Rather, people are responsibly and reasonably responding to the structural conditions of these new media. And there’s nothing acceptable about those who are most privileged and powerful telling those who aren’t that it’s OK for their safety to be undermined. And you don’t guarantee safety by stopping people from using pseudonyms, but you do undermine people’s safety by doing so.

If you know me, you probably won’t have that much trouble finding me. After all, I’m moving most of what I’ve written and posted here to a different site. I don’t plan to make any particular effort to hide my identity; I don’t think anybody cares that much. But as a hobbyist writer who’s no longer trying to quit my day job I don’t see much upside in trying to build my “personal brand”.

So you might see me around elsewhere under a different name. For example, all of my sf is going to starbreaker.org.

In the meantime, stay safe out there. (And consider staying pseudonymous.) But whatever you do, don’t worry about me. I’ll be fine, and in any case worrying about me is my wife’s privilege.

back to top

My Father is Dead

Mon, 14 Jun 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/my-father-is-dead.html


My father died at home yesterday after struggling for roughly seven months with pancreatic cancer. At least, that’s what will most likely go on his death certificate. But after sustaining two head injuries in early April and knowing that he was never the same afterward, I can’t help but feel that my father died then and that his body didn’t finally give up until yesterday.

I thought this would hurt more, but I wonder if I’ve been grieving for the man since I first learned of his diagnosis in December. Maybe it’ll hit me later, but right now I’m glad his suffering is over, and that my mother isn’t suffering alongside him. She cared for him with help from me, my wife, and my brother since he came home from the hospital in early May. The last time he spoke to me was last Thursday. I was giving him his medicine and had put on Renaissance’s Prologue album. He thought I was one of the home hospice nurses.

Before the COVID-19 lockdown started, we were going to see Dweezil Zappa in concert, performing his father Frank’s music. That was how we bonded; we’d go to rock concerts together and see the bands he grew up with and passed down to me. I’ll never get to see another concert with him. I’ll never get to share another prog album that I’ve discovered with him.

I never got to share Albert Bouchard’s Re Imaginos with him to show him the weird, proggy side of the Blue Öyster Cult that he never got to experience because excessive airplay of hits like “Godzilla” and “Don’t Fear the Reaper” ruined the BÖC for him. I never got to share Hiromi Uehara with him. I had Arjen Lucassen’s Guilt Machine album from 2009 playing yesterday as I drove down to make sure my mother was all right and help plan her next steps. It was called On This Perfect Day, and I don’t remember if I ever told my dad about it.

Likewise with John Carpenter’s Lost Themes albums. I don’t know if he would have gotten into them, but since they were synth-heavy instrumental albums I think he would. Besides, when I was 10 he took a night off from his bartending job to take my brother and me to the movies to see They Live. My brother wasn’t into horror movies, but he was into pro wrestling and Rowdy Roddy Piper was his favorite heel. I was a horror fan and I had recently seen The Thing and Christine, so I knew what I was getting into.

There’s a lot I won’t get to share with him now that he’s gone. I feel like I should have drank with him more. I feel like I should have smoked with him when he offered, instead of being uptight and turning him down because I had to drive later or because I had to work tomorrow. But at the same time, he told me time and time again not to make the same mistakes he made.

I feel like I never really got to know my father. He never talked much about his own feelings or what was on his mind, and for better or worse I learned how to be a man from his own example. I suspect he did my brother and me a disservice in that regard, but it’s hard to blame him considering the examples from which he learned. So I try to do better. It’s too late to do anything else now. He’s just tears in the rain, a ghost haunting the memories of those who knew him.

When I was born, he sat outside the delivery room reading The Lord of the Rings. As he lay dying I read it to him. I didn’t know what else I could do for him besides try to close the circle.

His name was James Albert Graybosch and he died at 63. He was a truck driver, a locksmith, a detective, a bartender, a clam digger, a boatbuilder, a programmer, an investor, a guitarist, a father, and a husband. He did right by my mother, and he did the best he could to be a better father to me and my brother than his father was to him. He spent his entire life hustling so that his family never had to do without, and he didn’t even get to retire. My father deserved a better life and a better death than he got.

Note

This originally appeared on The Well on 15 June 2021, the day after my father’s passing. I’m posting this here and back-dating it because my father deserves some public acknowledgement of his death.

back to top

The Cancellation of Emily Wilder by the Cowardly Associated Press

Sat, 22 May 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/cancellation-of-emily-wilder-cowardly-associated-press.html


The Associated Press’ firing of Emily Wilder proves that conservatives are abject hypocrites when it comes to “cancel culture”. They’re absolutely fine with pressuring corporations to fire people who say things that offend them.

But $DEITY forbid that a conservative lose their job for saying offensive shit online.

Here’s an idea: maybe employers should be forced to accept that people have lives outside of work, and that what people do off the job is none of their business! Especially when it predates their employment, as was Wilder’s case.

Before joining the AP, Wilder was an active member of pro-Palestinian groups at her college. She was a proponent of Palestinian human rights and a critic of the Israeli government.

Last week, during the height of the recent war between Israel and the Palestinians, the Stanford College Republicans group called out Wilder for her tweets. Soon after, the AP fired Wilder — a unanimous decision among some senior managers at the AP, Carovillano said.

Yeah, I know that what you say outside of work might “affect your employer’s brand”, but why should that be your problem? Why should any of us after to censor ourselves or circumcise our souls just to have a job?

This is what we get for listening to right-wing union-busting propaganda. If we still had strong unions that would demand due process for workers, it would be harder to “cancel” people just because they said something that got a bunch of self-righteous assholes’ panties in a twist.

Social media must be destroyed. Also, fuck the Stanford College Republicans. They obviously weren’t bullied enough in grammar school.

back to top

What Five Stages of Grief?

Tue, 11 May 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/what-five-stages-of-grief.html


As I mentioned before, my father is dying.

I had spent this past Sunday taking my mother to the hospital to see him. I barely got to speak to my father; my mother did most of the talking. It’s hard not to begrudge her, but she’s his wife and was part of his life years before my birth. Afterward, my wife and I spent listening to my mother fall apart while we tried to help her get a handle on finances my father previously handled on his own.

And here I am, back at home, trying to give a flying fuck about building a web application for clients who don’t know who I am or give a fuck about me because if I lose my job my wife and I are fucked. I’ve got people relying on me, but I can’t rely on anybody. I’m a man, and I don’t get to fall apart.

So I’m in part-time mourning. While I had always suspected that Elisabeth Kübler-Ross’s “five stages of grief” model was bullshit, now I know for sure.

There’s nothing to deny.

I’m angry, not because my my father is dying, but because of the way he’s going about it—even though it’s mostly NOT his fault. Nobody deserves to go through what he’s going through.

I’m not bargaining, because with whom would I bargain? I might talk big about God needing a guardian angel when I face him, but I don’t actually believe in God. At least, not the Judeo-Christian-Islamic God. That god is too small for reality as I understand it, where our sun is an unremarkable star on the fringe of an unremarkable galaxy in a universe that’s billions of years old and so immeasurably vast that we cannot yet observe it in its entirety. To a god capable of creating this universe, the very existence of humanity is probably an unintended consequence, and the price we pay for getting to live is death—and sometimes a painful, lingering, miserable one at that.

Yeah, I’m depressed. I had been estranged from my parents for months because I had the effrontery to get angry with my mother after she lied to me and tried to manipulate me, and they were happy to leave me alone until my father was dying and suddenly he needed me to be there for my mother. And, like a schmuck, I fell for it and let them back into my life and gave them another chance to hurt me.

Then there’s acceptance, because what other choice is there? I’ve seen my father. He isn’t even 65, but he looks like he’s 85 and spent his retirement in a concentration camp. Even if he recovers from his head injury, even if his cancer goes into remission, he’s never going to be the man he used to be.

And I’m going to be stuck helping my mother pick up the pieces when he dies because who else is there? I’m the closest my mother has to a reliable son. As much as I resent my brother for not being here to help, he’s got a daughter who isn’t even a year old. He’s got his own responsibilities, so if I don’t step up who will?

I hate feeling like this. I knew I’d have to go through it eventually, even if I remained steadfast in my resolve to excise my parents from my life, because I might outlive my wife. The difference is that I chose Catherine and knew what I was getting into. I didn’t choose my parents, and I resent having to deal with my mother’s feelings when I have enough trouble dealing with my own.

back to top

My Father is Dying

Thu, 06 May 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/my-father-is-dying.html


I knew it would happen someday. I wasn’t expecting someday to come so soon. Unfortunately, I don’t get to fall apart. My wife is depending on me to keep it together, people at my day job are depending on me to show up and work, and I’m the closest my mother has to a reliable son.

I mentioned this to my coach at my day job, and they suggested I seek solace in the Bible.

I don’t think they expected me to turn to Isaiah 45:7, but I’m in an Old Testament kind of mood right now. Here’s the verse from the Douay-Rheims, since I grew up Catholic.

I form the light, and create darkness, I make peace, and create evil: I the Lord that do all these things.

The people maintaining drbo.org also suggest that “create evil” refers to the evil of afflictions and punishments, rather than the evil of sin. I don’t buy it, but if cancer is an affliction then this interpretation still works for me.

The nice thing about a strictly Old Testament view of God is that it obviates the problem of evil: how can an omnicient, omnipotent, and benevolent god allow evil and suffering? If you accept that God isn’t necessarily benevolent, then it’s just a matter of accepting that God let’s shit happen, that God has his reasons, that God can’t be bothered to explain himself to the likes of mere humans, and that sometimes shit happens to you just because you didn’t have the good sense to get out of the way.

I envy Jews; it seems that unlike Christians who must accept the notion of a loving God, Jews at least have the option of remonstrating with God in prayer. It probably doesn’t help, but at least they can vent, call God a schmuck, and accuse him of drinking on the job. What can a Christian say besides, “thy will be done”?

Well, I’m not a Christian. As far as I’m concerned, God is a cosmic slumlord who drinks on the job and uses human misery to get his rocks off. And if I as an agnostic atheist am wrong about God, then between my father and my wife getting cancer—even though my wife survived—God’s gonna need a guardian angel when I meet him. You see, Ambrose Bierce might have recognized four types of homicide, but I only recognize two kinds of deicide:

  • justifiable
  • praiseworthy

Which of these applies to the demiurge depends on whether your beef with him is personal or a matter of principle.

My problem isn’t that my father must die. Everybody dies. My objection is to the time and the manner in which he will pass from the world. A man should not be condemned to work his entire life, and be struck down before he’s old enough to retire. Nor should his death be a drawn-out affair that robs him of his strength and pride, and leaves him a hollow shell of the man he had been. This is not my idea of justice, and there is no dignity in such a death.

Of course, more devout people than me might insist that it’s better this way, that having one’s strength and pride taken away can being you closer to God. I say that if this is the best God can do, then he’s nothing but a demon and he can go to Hell. That’s where demons belong, isn’t it?

back to top

Why Should I Go Back to the Office?

Tue, 20 Apr 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/why-should-i-go-back-to-office.html


My day job is hosting a “safe spaces” discussion about returning to the pre-COVID office-based model later this year (unless there’s another spike in cases, one expects). The meeting invite says we’re supposed to speak our minds in a calm, mutually supportive environment.

I’ve seen that movie before.

preview image for YouTube video ID WlPTmXi0pVk
You’ve probably seen this movie before, too. (click to view)

Here’s the thing: I hear talk of returning to an office and my first question is, “Why should I?” Working from home for the past year has been good for me:

  • I’ve lost almost 100lbs because I’m not eating out as much, not stress-eating, and not buying sodas to stay awake.
  • I don’t have headphones clamped to my head all day to avoid having to listen to other people’s conversations in an open-plan office
  • I don’t have random people walking behind me all the time.
  • I don’t have random people interrupting me for “a quick question”.
  • I’m not lonely, because my wife’s here, too.
  • If I’m stressed, there’s usually a cat handy.
  • I have a view of lush greenery from my window instead of a parking lot.
  • I’m not wasting time and gasoline driving to the office and back.
  • I can stream music if I want to (on my personal equipment) because it’s my network and not the company’s.
  • Nobody can stop me from disconnecting at 5pm. I can just turn off my work computer and my phone and ignore everybody until 9am the next morning.

You’re welcome to go back to office work if you want to, but leave me out of it. Since I’m working with people on the other side of the country it’s not like I get face-to-face interaction with them anyway. Besides, even when I’m in the same building I don’t connect with teammates. Coworker are not fixtures in my life. I don’t get attached to them, and I don’t want coworkers getting attached to me. We’re here to do a job, not to be each other’s surrogate family.

If they try to force me to go back to working in an office, I’ll damned well get another job. I’m not going back to the old normal for less than six figures. It’s not worth it.

Incidentally, I’m really not trying to prescribe policy here. Do what works for you, but don’t impose it on me. I’m not asking for much here. In fact, I’m not asking at all; I’m telling. I won’t tolerate a mandatory return to the office, especially if the only rationale is that changing things would make life harder for the Boomers who haven’t retired yet. What have they done for me lately that I should cater to them?

Incidentally, I find the very concept of having a “safe space” to speak in the workplace bitterly amusing. It shows that adults exercising basic human rights like freedom of speech on the job isn’t something corporations tolerate particularly well, and the the average American workplace is basically a private dictatorship.

If you give it too much thought, it’s particularly galling that children at school have more protection for their First Amendment rights than their parents do at work. Legal precedent isn’t much in the way of protection, but what’s the workplace equivalent of Tinker v. Des Moines? What statute or SCOTUS decision ensures that workers aren’t required to leave their human rights in the car when they come to the workplace?

back to top

Tina Guo’s Forbidden City

Thu, 25 Mar 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/forbidden-city-tina-guo.html


This video by Tina Guo from 2011 came up while I was looking for some stuff by Apocalyptica. This is the first I’ve heard of her, but she’s actually low-key famous in the music biz. I might have to dig deeper and see what else she’s done.

preview image for YouTube video ID ZAZsX2ea2yo
“Forbidden City” by Tina Guo (click to view)

Here’s something more recent. Vocals by Serj Tankian.

preview image for YouTube video ID TSR7qr42TF4
“Moonhearts in Space” by Tina Guo (click to view)

back to top

The Wrong Kind of Diversity

Wed, 24 Mar 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/wrong-kind-of-diversity.html


As an American, I can say that people who immigrated from the Scandinavian countries in the 19th and early 20th centuries didn’t leave the Janteloven (Law of Jante) behind. They packed that in with the rest of their baggage. If you’re not familiar, these are the rules.

  1. You’re not to think you are anything special.
  2. You’re not to think you are as good as we are.
  3. You’re not to think you are smarter than we are.
  4. You’re not to imagine yourself better than we are.
  5. You’re not to think you know more than we do.
  6. You’re not to think you are more important than we are.
  7. You’re not to think you are good at anything.
  8. You’re not to laugh at us.
  9. You’re not to think anyone cares about you.
  10. You’re not to think you can teach us anything.
  11. Perhaps you don’t think we know a few things about you?

For all the talk about “rugged individualism” in the US, that’s just part of the civil religion, the common myths and rituals that are supposed to forge a national culture and make E pluribus unum possible. The truth is that individualism and diversity are fine—as long as they’re the right kinds of individualism and diversity, the kind that serve the interests of the rich and powerful.

For example, it’s OK to be autistic as long as you’re the right kind of autistic. Good autistic people (from a corporate viewpoint) are those who can fake being neurotypical at the office and in social settings, have marketable special interests, and don’t expect time and a half for overtime. If you’re the wrong kind of autistic, good luck getting an interview, let alone not being rejected for not being a “culture fit”. Nobody gives a shit about autistic people who are really into dinosaurs unless they can jump through the hoops necessary to become professional paleontologists, but autistic people who eat, drink, sleep, and breathe JavaScript? Now we’re talking.

Why? Because the Law of Jante is the real law. Individuals is expected to subordinate themselves to society, even when society takes no notice of individuals save to exploit or harm them. Never mind that you can’t have a society without individuals.

back to top

Unpleasant Truths About Culture Fit

Wed, 03 Mar 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/unpleasant-truths-about-culture-fit.html


Here’s something I’ve learned about “culture fit” from having done more job interviews than I’d prefer. If you were rejected because you’re “not a culture fit”, even though you’re qualified and nailed every aspect of the interview, it probably means one of the following:

  • you’re not young enough
  • you’re not white enough
  • you’re not the right kind of Asian
  • you’re not masculine enough
  • you’re too neurodiverse
  • you didn’t go to the right college

However, if a hiring manager gave one of these reasons, they could get their employer crucified in civil court for discrimination or (in the US) crucified by the EEOC. However, there’s no law that says they can’t select for “culture fit”.

Regardless, hiring for culture fit is increasingly seen as a bad idea. If you only hire people who share your background and interests, you’re likely to have problems with groupthink, and you can get enough of that on social media. You don’t need it in the workplace.

In fact, I’m going to go a bit further since it should be obvious to a reasonably intelligent person that I’m not speaking for anybody but myself here. Any manager who hires for culture fit should be fired, publicly named, and debarred from consideration for positions with hiring authority because they expose their employers to groupthink and legal liability.

PS: If you’re not familiar with the word ‘debar’, I’m using it because it lacks the racist connotations that have recently come to be associated with the more familiar term ’blacklist‘.

back to top

Gina Carano Will Be Fine

Sat, 13 Feb 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/gina-carano-will-be-fine.html


MMA champion and actor Gina Carano got thrown under a bus because she couldn’t stop making Disney look bad. Excuse me while I find my violin. It’s tiny so it gets lost easily.

Apparently the last straw was when she pointed out that before the Nazi regime started murdering Jews en masse, ordinary German citizens were doing it piecemeal and then implied that being a conservative in 21st century America is like being a Jew in the Weimar Republic.

Jews were beaten in the streets, not by Nazi soldiers but by their neighbors…even by children. Because history is edited, most people today don’t realize that to get to the point where Nazi soldiers could easily round up thousands of Jews, the government first made their own neighbors hate them simply for being Jews. How is that any different from hating someone for their political views?

—Gina Carano on TikTok

She might have been fine if she hadn’t implied that conservatives like her suffered similar persecution. Sure, I’ve heard of neo-Nazis getting their asses kicked, but that’s what you get for being a neo-Nazi, and you should be grateful you aren’t getting a fuckin’ swastika carved into your forehead.

But conservatives being murdered for trying to preserve unearned privilege and power at the expense of the poor and powerless? As much as I wish it were true, I realize that making martyrs out of morons is not a winning strategy. It didn’t work when polytheistic Rome tried to suppress Christianity, and it won’t work against 21st century reactionaries. I’ll just have to settle for the conservative movement being recognized as an organized crime syndicate and prosecuted accordingly—though I think the approach Vlad Tepes used on Turks, criminals, and advertisers is a better one.

Let’s be honest here: neither the government nor the media have to do anything to make people hate conservatives. Conservatives are perfectly capable of making people hate them on their own. Just talking with them is enough, unless you find yourself buying into their bullshit. If you can’t bear to talk to them, just watch them “govern”. Being disliked isn’t persecution, and neither is mockery1.

Of course, this isn’t the first time actors have publicly displayed their ignorance, but ignorant actors talking shit in public are usually further to the left than Ms. Carano. Nevertheless, I’m not surprised by her behavior. If you read The Reactionary Mind by Corey Robin, you’ll find that conservative cry-bullying is a tradition dating all the way back to the French Revolution—and possibly even earlier if you acknowledge Leviathan author Thomas Hobbes as the OG reactionary.

While I don’t think people deserve to lose their jobs just because they said stupid and offensive shit on social media, and I have no patience whatsofuckinever with internet McCarthyism, I don’t really give a fuck about Gina Carano.

Ms. Carano comes from casino money. She got a nice paycheck from playing Cara Dune in The Mandalorian (aka Lone Wolf and Cub in a galaxy far, far away). She can still count on support from MMA fans. And she’s already landed on her feet by lining up a new gig with the Daily Wire, a right-wing propaganda outfit operated by alt-reich impresario Ben Shapiro. She’s finally gonna make her own movie. (Too bad it’s not femdom porn.)

Trust me: Gina Carano is gonna be fine. Which is why I think call-out culture (or cancel culture) is a right-wing shaming tactic that leftists should have known better than to adopt—except it isn’t necessarily something leftists picked up after conservatives threw the Dixie Chicks under a bus. It’s just that back in the 1970s they called it trashing when second-wave feminists cancelled each other.

Regardless of whether you call it cancellation or trashing, it doesn’t work—and it doesn’t help. The people who deserve to be cancelled have no reason to fear cancellation because they have fuck you money. It only harms people who aren’t rich enough or powerful enough to actually matter—aka working-class people that leftists alienate by being as self-righteous as they are ineffectual.

Would any of this matter if Disney and other megacorps weren’t such slaves to what amounts to corporate respectability politics? I doubt it.


  1. American conservatives and evangelical Christians in the US wouldn’t recognize real persecution if it threw them to the lions during halftime at the Super Bowl.↩︎

back to top

Goddammit, Jon Schaffer

Sun, 17 Jan 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/goddammit-jon-schaffer.html


Goddammit, Jon Schaffer

I’ve been listening to Iced Earth since the late 1990s, and I had hoped that its founder and lead guitarist—Jon Schaffer—would be smarter than this.

According to Blabbermouth, Jon Schaffer of Iced Earth has been identified as one of the participants in the attempt to force the US Senate by insurrection to challenge the electoral college’s vote in the 2020 Presidential election, and faces six Federal charges:

  1. Knowingly Entering or Remaining in any Restricted Building or Grounds Without Lawful Authority
  2. Disrupting the Orderly Conduct of Government Business
  3. Knowingly Engaging in an Act of Physical Violence Against any Person or Property in any Restricted Building or Grounds
  4. Violent Entry and Disorderly Conduct in a Capitol Building
  5. Engaging in an Act of Physical Violence in a Capitol Building
  6. Parading, Demonstrating, or Picketing in a Capitol Building

This disappoints me. I’ve been listening to Iced Earth since I got a copy of their 1998 album Something Wicked This Way Comes. Many of their classic songs helped inspire my Starbreaker stories, and it was via Iced Earth that I discovered Blind Guardian.

While I had noticed a shift in lyrical themes when they released The Glorious Burden, I didn’t suspect anything because heavy metal bands write songs about history fairly often. Hell, every song Sabaton has ever written has been in the same vein as The Glorious Burden. Does the militarism in their lyrics mean they’re a bunch of right-wing nutjobs too?

I’m not going to throw out the Iced Earth albums I already have, but if Schaffer goes free and releases another album, I don’t know if I’ll buy it. It isn’t easy to separate the art from the artist, or to admit that somebody who created art that resonates with you might be an asshole.

I think the situation’s more complicated because Iced Earth isn’t just Jon Schaffer. Sure, he founded the band and writes the songs, but the rest of the band didn’t participate in the January 6 insurrection, and it doesn’t seem fair to throw them under the bus because of their bandmate’s involvement.

Finally, I suspect a lot of people are going to condemn Schaffer on the basis of photos and surveillance footage identifying him. I admit it’s pretty damning evidence if it hasn’t been doctored1, but that’s all it is: evidence to be used at Schaffer’s trial2 as the US Department of Justice attempts to prove his guilt beyond a reasonable doubt. I’ve never liked the court of public opinion and I’ve never bought into the notion that merely arresting somebody proves their guilt. Nor do I accept that photos and videos alone are enough to condemn somebody, even if it’s video of Iced Earth’s Jon Schaffer going full wingnut.

I think due process is especially important when prosecuting those who participated in the insurrection. Cutting corners or treating them as guilty until proven innocent will only make martyrs out of morons. America can’t afford to keep proving right those who insist the system is irredeemably rotten and ought to be burned to the ground. That’s how we ended up with 74 million people using their vote to say “fuck you” to the establishment in the first place.

As damning as Schaffer’s video might be, in which Jon Schaffer denounces “thugs”, “criminals”, and “globalists” for having hijacked the country “a long time ago”, I still think this guy ought to get a fair trial. Giving accused criminals a fair trial, presenting the evidence against them and giving them the chance to tell their side of the story, is how we prove that we are the “good guys”.

Besides, he’s not entirely wrong. The United States was hijacked a long time ago. It was hijacked by moneyed interests who realized that broadening the scope of democracy and extending the franchise to more people would erode their power and eventually see them stripped of their unearned wealth and privilege. Billionaires are behind the fiat currency, the wars, the occupations of foreign countries, and all the other shit people like Jon Schaffer claim to oppose. What Schaffer and millions like him don’t understand is that they’re working for their own oppressors.

I’m going to be especially disappointed if it turns out Dave Mustaine of Megadeth was involved, too, but not surprised. I’ve known him for a right-wing crank ever since the release of United Abominations in 2007. “Washington is Next” wasn’t exactly subtle.


  1. This raises the question of who would benefit from doctoring photos to implicate the founder of a fairly popular US power metal band. As far as I know, there’s no percentage in it, so while I admit it’s possible I don’t think it’s likely.↩︎

  2. Assuming Schaffer and his lawyer don’t cave and go for a plea bargain, as many facing Federal charges do.↩︎

back to top

XTerm: Because Worse is Better

Tue, 12 Jan 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/xterm-because-worse-is-better.html


Ever since I started using OpenBSD back in 2017, I've used XTerm whenever I needed a shell prompt. It's not that I can't use other terminal emulators; there are plenty packaged for OpenBSD. There's also Kitty. I could even build my own version of the simple terminal. I just can't be bothered.

Yes, they might all be better than XTerm. For example, Kitty renders with OpenGL, so if you've got a fancy graphics card actions like scrolling should be buttery-smooth. Unlike these other terminal emulators, XTerm comes with OpenBSD as part of its X Window System package, Xenocara.

Discovering XTerm

It's not just OpenBSD, incidentally. If your GNU/Linux distribution still installs X by default instead of Wayland, you probably have XTerm. Bruno Garcia recently discovered this for himself:

It was surprising to learn that xterm is still very much actively developed. Even more surprisingly, it turns out xterm has incredibly low input latency compared to modern terminals. This is easy to test at home, try typing in xterm compared to any other terminal and feel how much snappier it is.

The lower latency alone is worth the price of admission in my opinion, so I went about configuring xterm as my default terminal. The configuration goes in ~/.Xresources and you need to run xrdb ~/.Xresources after every change, or make vim do it.

Missing XTerm Features?

After sharing his config, Garcia notes that XTerm does have a few "missing features".

  • Text reflow when the terminal is resized.
  • Fallback fonts don't seem to always work. Maybe I'm missing a config option?
  • Transparency not natively supported. I don't care about transparency but maybe it's important to some people.
  • Occasionally strange flickering with picom, possibly a bug with picom?

I'm not sure what to do about the text reflow issue myself, so I just live with it. I haven't tried setting up fallback fonts, either. I just use Noto Sans Mono and hope for the best.

Using the picom compositor

For readers not familiar with picom, it's a lightweight compositor for X11 forked from compton (which is in turn a descendent of xcompmgr). While I find translucent windows distracting, it's possible to set up rules in your config file for picom for all windows or specific windows (like XTerm). Also, I've also noticed occasional weird flickers while using picom, but in my case they went away after I started using vertical sync.

If anybody's interested, here's how I start up picom in my ~/.xsession file.

$ picom --fading --vsync --use-ewmh-active-win --daemon

Configuring XTerm with Xresources

Likewise, here is my ~/.Xresources file. It's where I configure XTerm, xclock, xidle, xlock, and my font and geometry for Emacs.

! ===== Colors
! Base16 OceanicNext
! Scheme: https://github.com/voronianski/oceanic-next-color-scheme

#define base00 #1b2b34
#define base01 #343d46
#define base02 #4f5b66
#define base03 #65737e
#define base04 #a7adba
#define base05 #c0c5ce
#define base06 #cdd3de
#define base07 #d8dee9
#define base08 #ec5f67
#define base09 #f99157
#define base0A #fac863
#define base0B #99c794
#define base0C #5fb3b3
#define base0D #6699cc
#define base0E #c594c5
#define base0F #ab7967

*foreground: base05
#ifdef background_opacity
        *background: background_opacitybase00
#else
        *background: base00
#endif
*cursorColor: base05

*color0: base00
*color1: base08
*color2: base0B
*color3: base0A
*color4: base0D
*color5: base0E
*color6: base0C
*color7: base05
*color8: base03
*color9: base08
*color10: base0B
*color11: base0A
*color12: base0D
*color13: base0E
*color14: base0C
*color15: base07
*color16: base09
*color17: base0F
*color18: base01
*color19: base02
*color20: base04
*color21: base06

! ===== cursors
Xcursor.size: 32

! ===== fonts
Xft.dpi: 200
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintslight
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb
*faceName: Noto Mono
*faceSize: 12
*renderFont: true

! ===== xidle
XIdle*position: sw
XIdle*delay: 1
XIdle*timeout: 300

! ===== xlock
XLock.dpmsoff: 1
XLock.description: off
XLock.echokeys: off
XLock.info: Judicial warrant or GTFO.
XLock.background: base00
XLock.foreground: base05
XLock.mode: blank
XLock.username: username: 
XLock.password: password: 
XLock.font: -*-spleen-*-*-*-*-32-*-*-*-*-*-*-*
XLock.planfont: -*-spleen-*-*-*-*-24-*-*-*-*-*-*-*

! ===== xclock
XClock*analog: false
XClock*twentyfour: true
XClock*padding: 1
XClock*font: -*-spleen-*-*-*-*-24-*-*-*-*-*-*-*
XClock*background: base00
XClock*foreground: base05
XClock*borderWidth: 1

! ===== XTerm settings
xterm*geometry: 80x24
xterm*borderWidth: 0
xterm*internalBorder: 10
xterm*termName: xterm-256color
xterm*vt100.metaSendsEscape: true
xterm*v100.saveLines: 32768
xterm*vt100.scrollBar: false
xterm*vt100.bellIsUrgent: true
xterm*allowBoldFonts: false
xterm*scrollKey: true
xterm*fullscreen: never
xterm*cutToBeginningOfLine: false
xterm*cutNewline: false
xterm*charClass: 33:48,36-47:48,58-59:48,61:48,63-64:48,95:48,126:48
xterm*on2Clicks: word
xterm*on3Clicks: line
xterm*utf8: 1

! ===== GNU Emacs settings
Emacs*geometry: 80x24
Emacs*font: Noto Mono-12:dpi=200:antialias=true:autohint=true
Emacs*toolBar: off

I got the color stuff from terminal.sexy, a web app that allows you to preview color schemes for terminals and export them in various formats.

One thing about the way I configured my font for Emacs: the "dpi=200" part of my font string works for me since I use the chill window manager that comes with OpenBSD instead of bothering with i3, XFCE, MATE, GNOME, etc. GNOME in particular has its own way of implementing HiDPI support that doesn't necessarily play nicely with ~/.Xresources or ~/.config/fontconfig/fonts.conf, but the GNOME people are targeting GNU/systemd so I'm not really in their target demographic to begin with.

Feel free to get in touch if you have any questions or suggestions.

PS: Why Emacs?

If you're wondering why I bothered to install GNU Emacs when OpenBSD comes with ed, vi, and a tiny Emacs-like editor called mg:

  • I regularly use ed, vi, and mg for sysadmin work.
  • I also use vi when importing text from my AlphaSmart 3000.
  • I've been using GNU Emacs for decades, and find it preferable for writing fiction and for doing any sort of web development.

back to top

Parler Had It Coming

Mon, 11 Jan 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/parler-had-it-coming.html


This article concerns current events, US politics, and political violence in the wake of the insurrection attempt on January 6, 2021. The opinions within are entirely my own, and not necessarily those of my employer or any of their clients.


Fuck Parler. Did they really think they’d get away with running a platform open to right-wingers who couldn’t hack it on more “respectable” social media sites and claiming they couldn’t moderate when they had no trouble kicking out anybody whose politics were left of Barry fuckin’ Goldwater? Those fuckheads had it coming.

Fuck Parler’s luserbase. Let the neo-Nazis, fascists, and white supremacists make do with Stormfront. If they don’t like it, they can take a number, have a seat, and wait their turn to eat my dirty pinko ass.

Fuck former Parler CEO John Matze. He should have expected that Rebekah Mercer and her lackeys would throw him under a bus at the first opportunity.

Fuck Rebekah Mercer, fuck that asshole’s father Robert, and fuck the entire Mercer clan. These pusbags are the big money behind Parler and a lot of other right-wing bullshit. But don’t use your own dick. Rebekah Mercer looks like the sort of ideal neo-Nazi hausfrau who fantasizes about being Ilse Koch when she masturbates.

Every one of these assholes is a living argument for punitive taxes on income over a million per year and net worth over ten million. These scumbags aren’t content to claw their way out of the crab bucket; they insist on shitting in it on their way out so the rest of us can’t live in it either.

Of course, the whole point of billionaires bankrolling the conservative movement is to ensure that neither their incomes nor their accumulated wealth are ever subject to the sort of taxes that would prevent them from isolating themselves from the rest of society while lording it over the rest of us from behind the gates of their mansions.

That said, there’s a lesson to be learned from Parler’s downfall. It’s the lesson Andrew Torba seems to have figured out, but we’ll eventually get back to that asshole.

The lesson of Parler is: regardless of your politics/beliefs, this is what you get for not self-hosting.

  • Putting your site on AWS is not self-hosting.
  • Putting your site on Github Pages is not self-hosting.
  • Putting your site on Cloudflare is not self-hosting.
  • Putting your site on shared hosting or a VPS like Dreamhost, DigitalOcean, Linode, or Vultr is not self-hosting.
  • Distributing mobile apps through Apple’s and Google’s walled gardens instead of distributing them from your website and giving your users instructions on how to jailbreak their devices to install “unauthorized” software is not self-hosting.

Self-hosting means you pay for your own pipe, your own hardware, and your own space in which to keep the hardware, whether it’s on your own premises or in a co-location facility owned by individuals sympathetic to your views. It means that you distribute your own mobile apps if a website isn’t good enough for you.

Corporations don’t exist to provide you with a platform for your views, especially if they’re as repugnant as those frequently aired on sites like Parler. They exist to make a profit for their owners/stockholders, and if you hamper that mission they will throw you under a bus.

Whether this is right or wrong is irrelevant; corporations will do as they please unless the governments that issue their charters (which in the US is mostly the state of Delaware) start revoking them and dissolving corporations that abuse their power.

People keep forgetting that “the cloud” is just somebody else’s computer, and that somebody else is NOT your friend or ally.

As for Andrew Torba: Gab might be self-hosted, but all that means is that the next time some asshole shoots up a synagogue and brags about it on Gab while posting his half-assed manifesto, the FBI can just kick down the doors to Gab’s data center and confiscate every server as evidence without having to worry about collateral damage.

When that happens, I will laugh my gun-toting liberal ass off and collect the ensuing conservative crocodile tears for lube. Conservatives’ tears are plentiful; these reactionary assholes have been cry-bullying since the French Revolution. And they’re better than Astroglide since they’re more viscous and slippery.

Update for 4 March 2021: The FBI didn’t have to bother raiding Gab’s data center. As security researcher Troy Hunt wrote on his blog, Gab has been breached. Apparently Andrew Torba has become increasingly unhinged, Gab’s CTO can’t code for shit and is responsible for the SQL injection that allowed the breach to happen, but “tranny demon hackers” are the real problem.

back to top

Thoughts on the Insurrection

Thu, 07 Jan 2021 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/thoughts-on-the-insurrection.html


This article concerns current events, US politics, and political violence in the wake of the insurrection attempt on January 6, 2021. The opinions within are entirely my own, and not necessarily those of my employer or any of their clients.

A Fair Trial, a Blindfold, and One Last Cigarette

When I first got an email at work on 1/6 warning employees in Washington, DC to leave home early because of protests, I figured it was just something to help people stuck going to the office during a pandemic avoid getting stuck in traffic. I later found out that I was wrong, and that a mob of right-wingers had stormed the Capitol building in an attempt to take members of the United States Senate hostage and force them to overturn results from the Electoral College that confirmed the victory of Joe Biden and Kamala Harris in the 2020 Presidential election.

I had expected right-wingers to protest, and would have had no problem with them doing so as long as they did not engage in the sort of violence so many of them accused BLM protesters of engaging in during the summer of 2020 or repeat the events of Charlottesville in 2017. But to storm the US Capitol as thousands of right-wingers did on the 6th? This is unacceptable.

Understand this: I never supported Trump. As a kid growing up in New York I knew him as the sort of opportunist who makes con artists look honest. I certainly didn’t watch him on TV. Hell, I didn’t think the Republican Party had any business even letting him participate in the 2016 presidential primary (but nobody at the RNC asked my opinion). Instead, as a lifelong Democratic voter I voted for Bernie Sanders in that party’s primary, and then held my nose and voted for Hillary Clinton in the 2016 general election. I didn’t do it because I like the Democratic Party, but because I loathe the Republican Party—which hasn’t had a platform I could support since 1956.

My wife and I were certainly shocked and dismayed to learn that we’d be stuck with Donald Trump—a washed up reality TV host—as President, but did we participate in an attempt to take the US Senate hostage and overturn an election by force? Of course not. I had my vote, and it didn’t go the way I had hoped. These things happen, and it wasn’t the first time; I didn’t vote for George W. Bush—that dude-ranch reject—in 2000 or 2004, either.

Instead, I mostly got over it. As long as Uncle Sam didn’t try to yank my wife’s green card and send her back to Australia I didn’t care much. Hell, I even opposed the first attempt to impeach him, not because I had changed my mind about Trump, but because I did not want Mike Pence taking over as the Ford to Trump’s Nixon. Though if Trump and Pence had both gotten COVID-19 and died, my only objection would have been to the prospect of Nancy Pelosi as President; she’s already had too many terms as Speaker of the House and should have been primaried out of office years ago.

I had to be an adult and get over it because my day job is at a corporation that does a lot of business with the government and I like getting paid on the regular, so that’s what I did. I might have talked smack about Trump and Pence on social media when some trash mob decided to try trolling me, but I don’t recall ever publically calling for political violence. That’s a line not to be crossed except under the most dire of circumstances, and a sitting President having to accept that he’s a one-term wonder is not that dire, especially since even one term as President of the United States is more than most of us will ever get. George H. W. Bush didn’t try to have Bill Clinton’s electoral victory overturned. Instead, he stepped down and let the next President take over.

I suppose it’s unreasonable to expect Trump to have had enough class to emulate Bush Sr.’s example, but I have zero sympathy for his fans and hope everybody responsible for this insurrection is identified and prosecuted to the fullest extent of the law, just as I would have been if I had crossed the line. I had to get over Trump’s victory in 2016. It’s his supporters’ turn to get over his loss in 2020.

Furthermore, I think it’s high time that the conservative movement in the Anglosphere be recognized as an organized crime syndicate and prosecuted accordingly. Charles Koch, Robert and Rebekah Mercer, Peter Thiel, and many other conservative billionaires have been bankrolling and profiting from the Republican Party’s descent into fascism for decades, and it is high time they stood trial for it under the RICO statutes. If you think I’m living in a fantasy world for saying this, you haven’t read my novels; if you lived in my fantasy world these people would be hearing a Miranda warning at swordpoint and facing charges of tyranny and corruption—assuming the Adversary arresting them didn’t go full Dredd and summarily execute them for resisting arrest as if they had been caught driving while black instead of bankrolling the subversion of the United States to pave the way for a fascist coup d’état.

If you read OG reactionaries like Edmund Burke, you’ll find that conservative crybullying doesn’t just date back to Roe v. Wade or even Brown v. Board of Education; it dates back to the goddamned French Revolution.

Society is indeed a contract. Subordinate contracts for objects of mere occasional interest may be dissolved at pleasure – but the state ought not to be considered as nothing better than a partnership agreement in a trade of pepper and coffee, calico or tobacco, or some other such low concern, to be taken up for a little temporary interest, and to be dissolved by the fancy of the parties. It is to be looked on with other reverence; because it is not a partnership in things subservient only to the gross animal existence of a temporary and perishable nature. It is a partnership in all science; a partnership in all art; a partnership in every virtue, and in all perfection. As the ends of such a partnership cannot be obtained in many generations, it becomes a partnership not only between those who are living, but between those who are living, those who are dead, and those who are to be born.

—Edmund Burke, Reflections on the Revolution in France (1790)

As far as I’m concerned, everybody who tried and failed to overthrow the government yesterday deserves only three things:

  1. a fair and public trial
  2. a blindfold
  3. one last cigarette

Try ’em, convict ’em if the evidence proves their guilt, then put ’em in front of a firing squad and livestream the executions on YouTube. Sure, we’ll probably be making martyrs out of morons, but these clowns need to see that their LARP isn’t just fun and games.

These people are fascists by their actions, and in some cases by their own rhetoric. There is just one thing you should remember about fascists: the only good fascist is a dead fascist. Start with David Koch and every other GOP donor, then the RNC, then Trump, then every fucking Republican in Congress. Likewise every “conservative” holding a seat on the Supreme Court. They’re all complicit.

However, just to be “fair”, once we’ve burned the GOP to the ground we can go after the Democratic party next. They’ve pretty much aided and abetted the Republicans ever since JFK got whacked, their favored Presidential candidate in 2016 is a neoliberal stooge, and their candidate for 2020 had nothing more to offer than “I’m not Trump”, so they’re welcome to take a number, grab a seat, and wait their turn to eat my ass.

Now serving customer no. 65536…

Further Reading

If you oppose conservatism and want to know your enemy, here are some books to get you started. I recommend borrowing them from your local public library.

Al Franken’s 1996 book might be hard to find, and the title might seem in poor taste given the recent demise of the titular demagogue, but it does an excellent job of demolishing Limbaugh’s bullshit and by extension that of the conservative movement as a whole. Barry Goldwater might have had a conscience, but post-Goldwater conservatism has always been both morally and ideologically bankrupt—and the pre-Goldwater variety was little better.

back to top

I Voted By Mail

Tue, 06 Oct 2020 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/i-voted-by-mail.html


I just got back from dropping off my 2020 election ballot in the neighborhood postbox. While I’m not convinced voting actually helps make things better for working-class people like me, I did it anyway because I might be wrong.

If you haven’t already voted, I recommend requesting a ballot by mail and doing it as soon as possible. Voting by mail is superior to voting in person for the following reasons:

  • You can do it before or after work, instead of having to worry about getting to your polling place in time or during your lunch break.
  • You don’t have to be around other people.
  • You don’t have to wear a mask to vote by mail.
  • You don’t have to deal with people trying to give you the hard sell on their candidate or party just outside the polling place.
  • Nobody can stop you from photographing your ballot for your own records before sending it.
  • It doesn’t take nearly as long as voting in person.

I’ve voted by mail twice this year. The first time was during the primaries in spring. Both times I got a paper ballot well in advance of the deadline. With all the names available in front of me, I was able to search for information on each of them, learn about them, and decide which candidate I disliked least. That isn’t something you can do in a voting booth; with in-person voting you have to know who’s running and do your research before you vote.

Now, you may have heard that President Trump has a habit of taking shit about voting by mail, saying that it will result in fraud. This is a lie. We’ve had voting by mail for years, but called it “absentee voting”. If you’re serving overseas in the armed forces, this is how you vote. If you’re a college student who votes, this is most likely an option for you. Likewise if you’re a US citizen living and working abroad.

Absentee voting is safe and no more prone to fraud than in-person voting using a mechanical voting machine. Hell, you’re more likely to see election fraud in electronic voting machines manufactured by companies like Diebold, especially if they’re connected to the internet.

If no-excuse absentee voting is available in your state, please take advantage of it. If it isn’t, contact your representatives in the state legislature and demand reform. Every citizen should be able to vote by mail. It’s safer, especially in a plague year, and more convenient for workers and elderly citizens.

back to top

The Cop in My Head

Thu, 24 Sep 2020 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/cop-in-my-head.html


Call it conscience if you like. Or get Freudian and call it the superego. But there’s a cop living rent-free in the back of my head, and he’s a bastard. He’s always judging me, policing every stray notion that comes to mind.

Most of the time he sounds like a frightened child, sure that if I do what I want or speak from the heart I’ll be punished.

  • It’s the reason I had refrained from approaching so many women I found attractive when I was a young bachelor.
  • It’s the reason I never experimented with sex or drugs when I had the chance.
  • It’s the reason I couldn’t admit to myself that I might not be straight until I had been married to a woman for several years.
  • It’s the reason I tolerated my mother’s emotional abuse well into middle age.
  • It’s the reason I kept staying in shitty jobs that neither pay especially well, offer challenging and meaningful work, or allow me to find a sense of autonomy and mastery.
  • It’s the reason I’ve been afraid to share my thoughts and feelings online for so long.

Frankly, I feel like I’ve lived a “good Christian life” despite thinking Christianity is a crock of shit. How is this fair? It isn’t, but the world is neither just nor unjust. “Fairness” is just another spook, like my conscience. But this is what I get for periodically rereading Max Stirner…

What is not supposed to be my concern! First and foremost, the good cause, then God’s cause, the cause of mankind, of truth, of freedom, of humanity, of justice; further, the cause of my people, my prince, my fatherland; finally, even the cause of Mind, and a thousand other causes. Only my cause is never to be my concern. Shame on the egoist who thinks only of himself!

Max Stirner: The Unique and Its Property (1845)

Or perhaps the elder Alexandre Dumas?

Perhaps what I am about to say will appear strange to you gentlemen, socialists, progressives, humanitarians as you are, but I never worry about my neighbor, I never try to protect society which does not protect me — indeed, I might add, which generally takes no heed of me except to do me harm — and, since I hold them low in my esteem and remain neutral towards them, I believe that society and my neighbor are in my debt.

Alexandre Dumas, père: The Count of Monte Cristo (1844)

Your politics are boring as fuck, and your morality is of no greater interest. I don’t want to live for anybody but myself. I don’t want to serve any cause but my own. I don’t give a fuck about “society”, “my country”, “the economy”, “future generations”, “the planet”, “the common good”, “humanity”, or anybody who doesn’t love and value me for who I am. I shouldn’t have to.

You shouldn’t have to, either. We all deserve better than live in fear of being shamed because we had the effrontery to be ourselves and seek the fulfillment of our desires. As long as we harm none, do what thou wilt should be the whole of the law.

preview image for YouTube video ID 6A-IoOEPbUs
“From the Pinnacle to the Pit” by Ghost (click to view)

If being myself leaves me friendless, so be it. I’ll wear my independence like a crown…

back to top

I Want My BSD!

Wed, 02 Oct 2019 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/i-want-my-bsd.html


Look at them hackers,
that’s the way you do it
A used Thinkpad runnin’ BSD
They ain’t playin’
that’s the way you do it
Software for nothing
and the code is free

I’m a novelist you probably haven’t read, I code for a living (using mainly Microsoft tech, for my sins), and I’ve been running OpenBSD on my personal computers since 2017. If you’re familiar with the various BSD operating systems you might raise an eyebrow at my choice, since OpenBSD is the preferred OS of security-conscious system administrators.

One would think that it isn’t an OS for long-haired metalheads who write crappy sf on their lunch breaks. Nevertheless, it’s the OS with which I’m most comfortable. Nor is it my first Unix. My first Unix, if you’re willing to count experience gained in a college computer lab, was SunOS 3.x on a SPARCstation.

Exposure to Unix while learning C was a revelation, and while I never became a systems programmer, I got familiar enough with Unix that I soon chafed against the limitations of the PC DOS that came with my first PC (a secondhand IBM PS Value/Point) and the various incarnations of Windows with which I had to cope at school and later at work.

Once I had left school and gotten a job as a software developer, I built a new computer and ran a variety of Unix systems at home. Before I finally got around to trying OpenBSD on a secondhand Lenovo Thinkpad, I ran FreeBSD for a while, used Intel Macbooks, and did entirely too much distro-hopping.

If I learned anything, it was the following:

  • GNU/Linux is mainly for people who dislike Microsoft and corporate Unix.
  • GNU/Linux + systemd is mainly for people who loathe Microsoft but miss Windows.
  • OSX is for people who dislike Windows and are OK with throwing money at problems.
  • The BSDs are for people who actually like Unix.
  • I’m not hardcore enough for Plan 9, and that’s probably OK.

For a while I thought I was just somebody who loathed Microsoft. For a while, I was somebody who loathed Windows and preferred to throw money at problems to avoid spending time. It was only recently that I remembered how much I had actually enjoyed having access to an Unix system in college, and that memory came to me the first time I installed OpenBSD.

I was lucky; I had picked a laptop that had good hardware compatibility for little other reason than that I liked typing on it and that I could get a refurbished model for less than $300. Thus it was easy to just plug in a network cable so my Thinkpad could pull packages from the network and just follow the instructions on every step of the boot screen. The only point I lingered over was partitioning, since I wanted to use all of my drive’s space instead of settling for the defaults and growing disklabel partitions later.

I had ``Money for Nothing’’ by Dire Straits on the stereo while the installer carried out my instructions, and found myself singing along in anticipation…

I want my…
I want my…
I want my BSD…

Once it was done I logged in as root, read the afterboot(8) man page, set up doas.conf(5) so I could do admin stuff without logging in as root, and started breaking in my new system. The first thing that struck me was the breadth of documentation provided by OpenBSD man pages. The dev team does not do a half-assed job of documenting the system. If it’s in base, it’s got a man page, and that man page is comprehensive. Even config files have man pages (in section 5). I’ve never seen a GNU/Linux distribution as thoroughly documented as OpenBSD.

The next big surprise was the sheer generosity of the software included with the base system when you install every set.

Need a text editor? Take your pick from vi(1), mg(1) (an Emacs clone), or the venerable standard Unix editor ed(1).

Need simple version control for personal projects? Why not rcs(1)?

Want a graphical session? Just enable xenodm(1) in rc.conf.local(5) ; Xenocara (OpenBSD’s custom X.org build) even comes with three window managers: twm(1), fvwm(1), and cwm(1).

Want to run simple websites or send email? httpd(8) and smtpd(5) are there.

Need a software firewall? pf(4) is there and running by default.

Hell, if you’re old-school enough to still prefer music on CDs and have your computer hooked up to a good pair of speakers, try cdio(1).

Naturally, OpenBSD comes with the classic BSD games collection, with all your old favorites.

Like text adventures? Try adventure(6).

Fancy a dungeon crawl? hack(6) away.

Enjoy simulations? Try atc(6) for a taste of an air traffic controller’s duties (union-busting not necessarily included).

We’ve even got tetris(6).

There’s plenty you can do with the base system and its included tools and utilities. If the included public-domain Korn shell (ksh(1)) isn’t your cup of tea, you can always install bash, zsh, or fish using the package manager. Need a web browser? Pick a package. Need to do graphics editing? There’s a package for that. Musician or moviemaker? We’ve got packages for you. Setting up a industrial-strength home office PC? We’ve got LibreOffice, graphical email clients, and everything else you need. Want to typeset your own documents? TeX Live and groff are in the packages collection, and so are GNU Emacs, vim, and neovim if the editors in base aren’t fancy enough for you. If you’re a developer working with languages not supported by the dev tools provided in base, or you’re using a more recent SCM than cvs(1), then the package manager is your friend.

If you want something that isn’t provided by the OpenBSD base system, chances are there’s a package or a port available. If you want to build another machine and install the same packages that you have on the first, you can dump a list of installed packages to a file. If you want to remove all of your installed packages and start over with a clean base system, you can do that without reinstalling the entire OS.

However, it’s not the documentation, the robust and capable base system, or the package management that sold me on OpenBSD. It’s the fact that OpenBSD wasn’t made for me. The developers made it for themselves, and it just happens to be available if I want it and am willing to put in the time and effort to make it work for me. This isn’t to say that the community surrounding OpenBSD is rude or standoffish. I’ve found other BSD fans on social media friendly and patient–as long as you treat them like adults and act like an adult yourself. They’ll even help if you make it clear that you’ve tried to solve your problems on your own.

However, I don’t think you’ll see the core development team worrying about how make OpenBSD more appealing to the general public. It suits me because the system doesn’t cater to my ignorance or try to anticipate my requirements. It’s a rock-solid general-purpose toolkit, and what I do with it is entirely up to me.

Admittedly, my life as a writer would probably be easier if I were content to run Windows or use a Mac like the vast majority of authors, but I can’t help it. I want my BSD! It’s not like Unix hasn’t leaked into my writing. For example, in my novel Silent Clarion the computer controlling an orbital weapons platform codenamed GUNGNIR is powered by OpenBSD, and its protagonist runs into a bit of trouble because she’s familiar with POSIX shells, but not Multics.

Rather than take the easy way out, I run OpenBSD on a Thinkpad T430s, a Thinkcentre M92P, and an Apple iMac G4 because I can. I do it because Unix is fun to run on secondhand hardware, and because I don’t think it’s a coincidence that both Unix and heavy metal date back to 1969.

Update for March 2020: While I remain a BSD fan and continue to admire the efforts of the OpenBSD development team, I’ve switched to Slackware GNU/Linux on my more modern machines so that I can contribute to the fight against COVID-19 by running BOINC and contribute to distributed computing projects like Rosetta@Home.

back to top

Turning Forty

Mon, 24 Sep 2018 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/turning-forty.html


Looking back after forty years on this planet, life didn’t turn out the way I hoped it would, but you’ve heard that story before. Chances are it’s your story as well.

Why am I at work? The simple answer is sheer necessity; I didn’t have the foresight to marry a rich woman – or be born to rich parents – so I must perforce work for a living. Of course, this doesn’t necessarily preclude me taking my birthday off, which I might have done if I were a sensible person.

However, I didn’t do the sensible thing because I’m an adult, I have responsibilities, and people are counting on me to do the work I agreed to do when I agreed to do it. This is part of the compromise I made with reality as a young man: I accepted that I would have to earn a living somehow while I worked on my writing.

But I’m hardly special. I suspect most people spend their fortieth birthdays at work, either out of necessity or for lack of anything better to do.

Only Myself to Blame

If it sounds like I’m not content with my circumstances, it’s because I’m not. I’m not the writer I want to be. I’m not the person I hoped I would become. However, most of that is my own damn fault.

  • I chose to live with depression instead of fighting harder to get help.
  • I chose, again and again, to not reach out to other people and at least try to make friends.
  • I chose to put aside music.
  • I chose to go to college right after high school.
  • I chose to half-ass my way through college once I got there.
  • I chose to take that first coding job in Connecticut.
  • I chose to stay at that job despite my boss being an incorrigible bully.
  • I chose to move to Pennsylvania after rage-quitting the job I had in Connecticut after nine years.
  • I chose to keep taking software development jobs even though I was burned out and sick of coding for a living.
  • I chose to publish with a small press instead of biding my time, continuing to rewrite Starbreaker, and either going full indie or trying for a deal with a major publisher.

What The Hell Was I Thinking

Seeing these choices laid out, it’s tempting to think they’re just a cascade of boneheaded decisions. Maybe they are, but I had reasons for most of them.

  • Mental health professionals couldn’t help my mother with her depression, and they didn’t even bother to try helping me. Instead, they’d just write a prescription for drugs that didn’t help.
  • I managed reasonably well without friends as a child and a teenager, so why change?
  • I didn’t know how I could go about earning a living as a musician, and didn’t believe that I could in any case.
  • I might not have wanted to go to college, but it was either that, enlist in the military, or move out and get a full time job right away. I had to do something. It never occurred to me to consider trade school, and my parents probably would have had kittens at the notion of their “genius” son becoming an electrician or a machinist.
  • I should have done more with my time in college, but I was also working part-time, commuting to school instead of living on-campus, had no friends or support, and honestly did not want to be there.
  • That first job came in 2000, and seemed like a lucky break at the time because it came from a distant relation during the recession that had occurred after the bursting of the dot-com bubble.
  • By the time I realized that my boss was a bully and the only way to get away from her was to quit, it was too late to make an easy escape. I had parents, a girlfriend (and her family) to whom I wanted to prove that I was a solid, reliable adult. Besides, “real men” didn’t quit just because they were unhappy.
  • There wasn’t much in the way of software development work in Connecticut, and while I probably could have found work in New York City, Catherine and I were sick of living in CT. Also, my parents were making noises about wanting us to live closer to them as they got older.
  • I kept looking for software development jobs for two simple reasons: I had experience as a developer, and I lacked the time, money, and inclination to go back to college and get a degree that might allow me to do something else for a living.
  • Publishing with Curiosity Quills Press seemed like a golden opportunity at the time, a shortcut around the bullshit that traditional publishing entails (query an agent, hope the agent can find you a publisher, etc.) and a way to avoid the bullshit independent publishing entails (do your own marketing, even though nobody cares about you or your work).

Just Making Excuses For Myself

All of these are rationalizations after the fact, of course. I can’t honestly say I thought through all of my decisions, but most people don’t. We’re not rational, but rationalizing. We make our decisions on the basis of impulse, emotion, or intuition and come up with logical reasons for why we decided as we did later on. I’m hardly unique in this regard. Motivated reasoning is one of the flaws that make us human.

I’m just using the occasion of my fortieth birthday as an opportunity to take stock of the life I’ve made for myself and make peace with my choices. I don’t want to be one of those middle-aged men who make an utter shambles of their lives in their forties because they are no longer able to repress their dissatisfaction with their lives and do irrational and drastic things like quitting their jobs, buying expensive vehicles or spending time with a new and younger lovers without at least discussing it with their spouses first.

I might not be completely happy with my life, but a flashy new car or a younger lover isn’t going to fix that. Besides, I’ve done reasonably well for myself compared to many people my age:

  • I have a steady job with respectable benefits
  • I have my own house
  • I can afford to pay extra on the mortgage’s principal every month
  • I own my car outright
  • I’m not mired in credit card debt
  • I’m not constantly fighting with my partner over meaningless bullshit
  • I can honestly say that my partner and I still love each other
  • I still have most of my hair
  • I haven’t been diagnosed with anything scary yet
  • I have written three novels and published two of them.

The last is especially important. Thousands of people set out to write novels. Most never finish their first draft. Of those who finish a draft, few ever refine it enough to have something that somebody else is willing to publish. I managed to do it twice, and I think I’ve earned the right to a little pride.

Welcome to My Midlife Crisis

Why would I throw away what I’ve got after my partner and I worked so hard to get where we are today? If Hollywood is any guide, that’s “what men of a certain age do.”

It’s the midlife crisis, but does this really only happen to men? Or does our culture simply encourage men to do this?

It’s an interesting question, but only insofar as it prompts me to ask a different question: what kind of man have I become? Do I even think of myself as a man? I certainly don’t think of myself as a woman; I am not transgender.

A Miserable Little Pile of Secrets

However, being a man was something that never quite felt right to me. I was never especially masculine, at least not according to prevailing norms, and I only made half-hearted attempts at “being a man” because it didn’t occur to me that I had the ability – or the right – to reject gender altogether.

What is a man, anyway? “A miserable little pile of secrets,” according to both Andre Malraux and Count Dracula.

Am I a man simply because I was born with XY chromosomes, a penis, and a pair of testicles? If so, then I was conscripted into masculinity and am under no obligation to perform my gender. If being a man is something one must choose, then I still want no part of it; mere masculinity is too confining.

Indeed, why should any of us settle for a social role that demands we amplify some qualities and repress others? Why should any of us be men or women?

In the absence of an answer, I’ve decided upon my own: I shall figure out how to be more truly myself in the years left to me. And if I trust you enough to put aside the persona and show you who I am, be grateful, for you’ll be one of a privileged few.

I’m Forty, and I Like It

Now that I’m forty years old, I no longer feel obligated to prove myself to others. I’m not interested in conforming to your expectations of what sort of person I should be. I spent my childhood, youth, and my adult years thus far trying and often failing to measure up. No more.

It’s my time now. It’s time I focused on what I want. More importantly, it’s time I understood my own needs and learned to center them.

Hopefully you’ll do the same. Ideally, you’re reading this while you’re still a teenager or young adult yourself, and can thus avoid making some of the same mistakes I did. Otherwise, I hope you find something of value.

Either way, feel free to drop me an email.

back to top

Catherine Lucille Moore: Queen of the Pulps

Mon, 29 Feb 2016 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/catherine-lucille-moore-queen-of-the-pulps.html


Today we’re going to go old-school and introduce an American woman who was writing about badass warrior women way back in the 1930s for pulp magazines like Weird Tales and Astounding. Morgaine, Red Sonja, Harry Crewe, Oone the Dreamthief, Monza Murcatto, Naomi Bradleigh, and hundreds of other heroines of fantasy fiction can probably trace their ancestry back to Jirel of Joiry, and Northwest Smith is Han Solo’s grandpa.

But Catherine Lucille Moore, who wrote as C. L. Moore to avoid getting in trouble with her day job, didn’t restrict herself to these two major characters, one an iconic figure in the sword and sorcery of fantasy, and the other a venerable hero of space opera. If you scroll down to “The Best of C. L. Moore”, you’ll find summaries of ten of her classic works, but expect spoilers.

How I Got Into Moore’s Work

Among my other acquisitions at the 2014 World Fantasy Convention, I was fortunate to find at one of the convention’s used book dealers a 1977 Taplinger Publishing edition of The Best of C. L. Moore edited by SF luminary Lester Del Rey. I’ve heard of Catherine Lucille Moore before; Michael Moorcock praised her work in Wizardry and Wild Romance, but I never got around to reading her stories until recently.

How to Get Moore’s Work

C. L. Moore’s work is currently available for Kindle readers in the following collections:

The following novels may also be of interest:

Who Was Catherine Lucille Moore?

Born in Indianapolis, Indiana on January 24, 1911, Catherine L. Moore was a sickly girl who spent much of her time reading fantastic literature. As a young woman, she began studying at Indiana University in 1929 and contributed at least three stories to the the university’s literary journal, The Vagabond. One of them, “Happily Ever After”, picks up where the classic fairy tale left off.

Unfortunately, the Great Depression forced Ms. Moore out of Indiana University during her sophomore year and into a business school where she learned the rudiments of shorthand and typing. Before she had finished this course, she pounced on a job opening at the Fletcher Trust Company in Indianapolis. As Ms. Moore put in her 1975 afterword to The Best of C. L. Moore, entitled Footnote to “Shambleau”…and Others, “In those days you didn’t mess around. You bluffed, prayed, and grabbed.”

She continued to practice her typing and almost by accident started typing the first lines of her first and perhaps most famous story, “Shambleau”. Once it was finished, she submitted the story to Weird Tales in 1933 since it was the only magazine of its type with which she was familiar, and immediately received a check for $100, or $1779 in 2014 dollars.

If you’ll pardon the baseball metaphor, she stepped up to the plate and knocked the ball right out of the park her first time at bat. It’s a damned good thing she did, too, for she claims in Footnote to “Shambleau”…and Others that she was “too unsure of herself to have hammered on the door of every publishing house in New York” if Weird Tales had turned her down. Instead, Ms. Moore claims she would have turned to some other activities, which would have been our all but incalculable loss.

In 1936, Ms. Moore met fellow SF writer Henry Kuttner who wrote her a fan letter in which he mistook her for a man. That must have been awkward for everybody involved, but Kuttner’s mistake sparked a romance between the two that led to their marriage in 1940.

This was most likely a happy marriage for them both. At least, I hope it was. They were so compatible that they could finish each other’s sentences, and collaborated on dozens of stories under a wide array of pseudonyms during the 1940s and most of the 1950s. Together as Lewis Padgett they published “Mimsy Were the Borogoves”, which New Line Cinema loosely adapted as The Last Mimzy in 2007.

Moore and Kuttner spent several years living just north of New York City before moving to California in the 1950s, where they took advantage of the G.I. Bill and finished their college degrees. Kuttner’s death at 42 in 1958 ended this partnership, but Moore continued to teach his writing course at the University of Southern California while writing for television until she married Thomas Reggie in 1963.

Thomas Reggie was not a writer, and Moore never published again between 1963 and her death in 1987, except for Footnote to “Shambleau”…and Others, her 1975 afterword to The Best of C. L. Moore. It’s tempting to say it’s too bad Moore didn’t continue to publish, and to speculate on why her marriage to Thomas Reggie ended her thirty-year literary career.

I think it’s better to be grateful for the three decades in which she gave American science fiction and fantasy a much-needed woman’s touch. She infused the science fiction and fantasy genres with an emotional depth, psychological insight, and sensuality many male authors of the 30s, 40s, and 50s could not offer — and richly deserved every accolade given to her.

The Best of C. L. Moore

Based on what I’ve found on Google, my copy is most likely a reprint of the 1975 Nelson Doubleday Best of C. L. Moore compilation. Taplinger appears to have been a small press that went out of business in the early 80s. It consists of an introduction by Lester del Rey (“Forty Years of C. L. Moore”), an afterword by Ms. Moore herself (Footnote to “Shambleau” and Others), and the following stories.

  • Shambleau (a Northwest Smith story)
  • Black Thirst (a Northwest Smith story)
  • The Bright Illusion
  • Black God’s Kiss (a Jirel of Joiry story)
  • Tryst in Time
  • Greater Than Gods
  • Fruit of Knowledge
  • No Woman Born
  • Daemon
  • Vintage Season

Originally culled from the pages of such famous pulp magazines as Weird Tales, Astounding Stories, Astounding Science Fiction, Unknown, and Famous Fantastic Mysteries, these ten novelettes remain excellent reading decades after Moore’s death from Alzheimer’s disease in 1987.

1933: “Shambleau” (published in Weird Tales)

Before Han Solo shaved a few parsecs off the Kessel Run and Malcolm Reynolds fought the good fight against the gorram Feds, Northwest Smith plied interplanetary space and visited Mars, Venus, and stranger planets.

In the first of many adventures, interplanetary outlaw Northwest Smith saves a strange girl from a Martian lynch mob. They disperse when he claims her as his own. Northwest doesn’t understand why at first, but he soon finds out when he succumbs to her embrace.

The Shambleau are not only alien, but prey upon men and have done so for so long that an echo of a memory of their depredations lives on in the Perseus myth — along with a way for Northwest’s Venusian friend Yarol to rescue him from the Shambleau’s hunger.

1934: “Black Thirst” (published in Weird Tales)

Northwest Smith is back, and still finding trouble in the company of strange women. This time he’s on Venus in the city of Ednes, and the woman’s name is Vaudir. Vaudir was bred for beauty in the Minga, a castle whose existence predated that of Ednes. Northwest soon learns that Vaudir is not the loveliest of the girls bred in the Minga, but rather a throwback possessed of an intelligence and independence the Minga’s ruler thought he had bred out of his prey.

Just as humans raise cattle and other animals for food, so does the inhuman Alendar raise women so that he might feed on their beauty. But the Alendar has grown bored with his tame food supply, and hungers for the wilder and more masculine beauty he sees in Northwest Smith.

1934: “The Bright Illusion” (published in Astounding Stories)

A doomed soldier lost in the Middle East, Dixon finds an entrancing golden egg half-buried in the sand — and the corpses of other men who had discovered it before him. He remembers caution too late, and is engulfed in a radiance that offers him a hope for survival he wouldn’t have on his own. The golden radiance is a dispossessed god, and it needs Dixon’s help.

Dixon must travel to another world in a universe utterly alien to his own, and find a weakness in the defenses of the god who rules it. Instead, in a world governed by physical laws utterly different from his own world’s physics and inhabited by intelligent beings utterly different from humanity with forms he finds intolerably grotesque, he finds a love capable of transcending death.

1934: “Black God’s Kiss” (published in Weird Tales)

Before Red Sonja, Xena the Warrior Princess, Oone the Dreamthief, and even Naomi Bradleigh — there was Jirel of Joiry, the grandmother of every warrior woman in sword-and-sorcery and epic fantasy. She was a redhead, a good Catholic girl, and she doesn’t easily suffer the foolishness of men or demons.

Unfortunately, Jirel isn’t that smart, as we see in her first adventure “Black God’s Kiss”. The fiefdom of Joiry has fallen to Guillaume, and he’s determined to conquer Joiry’s liege lady as well. However, her hatred for the man who defeated her burns with such heat that she willingly descends into Hell armed with nothing but her sword and the blessing of Father Gervase to find a weapon with which she may utterly destroy Guillaume.

The blade proves more useful, and Jirel soon finds her weapon with the help of a demon who takes her form. She claims her weapon by kissing a black idol in a forgotten temple, and carries it within her back through the darkness to Joiry. Knowing all the while that if she does not use it on Guillaume it will turn against her, she gives the man she hated most in all her world a fatal kiss.

1936: “Tryst in Time” (published in Astounding Stories)

Eric Rosner is thirty, and has seen and done everything an adventurous man can possibly do. He had made and lost fortunes, fought on both sides of hundreds of battles, and pitted himself against human torturers and hungry beasts. He indulged himself in the arms of hundreds of women who adored him, but none of them meant anything to him.

Desperate for novelty, he finds it as a result of his unlikely friendship with scientist Walter Dow. Dow invents a device that allows its user to “drag an anchor” through space and time to achieve time travel. But the probability of being able to return to one’s original timestream is infinitesimal, and any change in the past by a time traveler shunts that traveler into a version of spacetime in which his actions and their consequences were going to happen anyway.

Dow doesn’t dare let people test his device, because the very nature of time travel recludes any hope of obtaining meaningful experimental results. Eric has no such concerns, and doesn’t give a damn if he ever comes back to his own world and time. Through all the times and places he visits, he finds only one constant: a woman he cannot forget until they are finally reunited at the end of everything.

1936: “Greater Than Gods” (published in Astounding Science Fiction)

Dr. William Cory is a biologist on the verge of a breakthrough in prenatal sex determination, and also a man who must choose one of two women to be his wife. Sallie is a sweet young woman who seems likely to offer the man who marries her a happy, comfortable home life. Dr. Marta Mayhew is a brilliant chemist and Dr. Cory’s intellectual equal, and their marriage could spur them both to new heights.

An encounter with a fellow scientist, Dr. Ashley, results in a conversation about the possibility of looking into the Probability Plane to see the influences of one’s choices on future events. Cory dismisses Ashley’s speculation as woo, but after Ashley leaves something strange happens.

Sallie’s photograph on Dr. Cory’s desk becomes a portal into the future that will happen if he marries Sallie. Some influence skews the odds so that more girls than boys are born every year, and the skewed sex ratio gets worse every year. Soon, there aren’t enough men to rule the world. Women take over, and outlaw war. They refuse to support research that could be turned to warlike ends, even if it can also be used to improve living conditions. Human habitation changes, sprawling outward instead of reaching for the sky, and people stabilize the climate and make the world their peaceful garden. In an age of peace and plenty, ambition becomes irrelevant.

Dr. Cory rejects this future, but Marta’s photograph also begins to shimmer. A young man with many of Cory’s features greets him, and claims to be his descendant. In this future, Cory continued his research on prenatal sex determination, but he discovers a flaw in the technology when he tests it on dogs: the resulting puppies are especially obedient.

Despite this, the technology is soon applied to humans, and the resulting boys are also far more obedient than usual. The ruling classes, seeing the potential for breeding armies of perfect soldiers, use Cory’s flawed methods on the lower classes, but not for themselves. They unite the world under their rule, and are well on their way to uniting the solar system when they reach backward through time to contact Cory.

Rebelling against this future as well, William Cory rejects both and chooses a third option. But he does so with the full understanding that he is consigning potential descendants to oblivion.

1940: “Fruit of Knowledge” (published in Unknown)

In “Fruit of Knowledge”, Catherine Moore retells the Genesis myth from Lilith‘s viewpoint while also identifying her as the Queen of Air and Darkness. Seeing in Adam a power capable of rivaling God’s, she seduces him, only to be thwarted. Her vengeance disrupts the divine plan and changes everything.

1944: “No Woman Born” (published in Astounding Science Fiction)

The beloved performer Dierdre, horribly burned in a theatre fire, has her brain salvaged and encased in an artificial prosthetic body by a scientist named Maltzer, who helps her adapt to her new circumstances.

As Dierdre becomes more confident and competent in her new form, Maltzer begins to have doubts about the wisdom of saving her and giving her a new body. He asks Dierdre’s former manager John Harris to meet Dierdre and see for himself.

Together, they watch Dierdre become something more than human while losing touch with humanity.

1946: “Daemon” (published in Famous Fantastic Mysteries)

Luiz o Bobo, Luiz the Simple, is a Brazilian man without a soul. Without a soul, he doesn’t have a daemon of his own to watch over him until the hour of his death. With his end finally near, he makes his last confession and tells a tale of an island in which the old gods of antiquity found refuge after a star blazed over Bethlehem. Those with souls cannot see the old gods, and do not believe in them, but Luiz could see, and did believe.

1946: “Vintage Season” (published in Astounding Science Fiction)

It was the most perfect May ever, and Oliver Wilson had to spend it with three strange houseguests who had paid handsomely to spend the month in his house. But when an eccentric woman offers him an incredible sum of he’ll sell the house to her before the end of his guests’ stay, he wants his guests out as soon as possible. It doesn’t help at all that they’re weird foreigners, almost alien.

Oliver soon finds out why his guests as so weird, and why Mrs. Hollia wants to buy his house so quickly. His guests are temporal tourists, here to savor the most beautiful spring in their history, before continuing to other times and places. But despite being from the future, they let him see for himself what happens after their departure.

Legacy

I can only scratch the surface when describing the influence Catherine L. Moore’s work exerts on science fiction and fantasy. The Internet Movie Database (IMDB) link I provide in the next section handles the adaptations of her work, but I think Moore’s influence extends further. However, an exhaustive examination of her legacy isn’t a suitable for a section in a blog post, but a subject worthy of a book. I’ll stick with the stories compiled in The Best of C. L. Moore, which is the only work of hers of which I own a copy.

Both “Shambleau” and “Black Thirst” can be credited with helping bring vampire imagery into science fiction. In addition, the protagonist of both stories has become a staple archetype in science fiction. Whether their creators are aware or not, I suspect that Northwest Smith is a spiritual ancestor of Han Solo of Star Wars, Spike Spiegel of Cowboy Bebop, Gene Starwind of Outlaw Star, and Malcolm Reynolds of Firefly. I’m willing to bet that some of his spirit even lives on in Captain James Tiberius Kirk from Star Trek.

If all the stereotypical strong female characters in fantasy were part of a single clan, I suspect Jirel of Joiry would be their matriarch. From what I’ve read, she was one of the first, if not the first, warrior women to pit their swords against sorcery and devilry in the pulps. I suspect that somewhere in some imaginary version of ancient Greece, Xena and Gabrielle are pouring a libation of good strong wine in her honor right now.

I don’t know if musician Arjen Anthony Lucassen ever read “Greater Than Gods”, but the conceit of people reaching backward through time with a message to the past is the central premise of his first rock opera with progressive metal act Ayreon. In The Final Experiment (1995), scientists from the year 2084 use a technology called “time telepathy” to send warnings of humanity’s imminent destruction due to war, natural disasters caused by environmental collapse, and rampant computer technology into the past. They find a receptive mind in a blind mistrel living in King Arthur’s court, but Ayreon’s warnings arouse Merlin’s ire.

Having read “Fruit of Knowledge”, I wonder if Roger Zelazny read it before he wrote Lord of Light. I also wonder if it had some influence on Steven Brust when he wrote To Reign in Hell, a retelling of Paradise Lost in which Yahweh is the first of the angels, and not their creator.

When I read “No Woman Born”, I immediately thought of Masamune Shirow’s famous manga Ghost in the Shell, though the author claims his primary inspiration came from The Ghost in the Machine by Arthur Koestler, and doesn’t seem aware of Moore’s story.

The daemons in C. L. Moore’s story “Daemon” are reminiscent of Philip Pullman’s His Dark Materials sequence, but further research is required to determine if Moore’s story served as an inspiration or antecedent.

Finally, “Vintage Season” reads like it could have been a “Doctor Who” story that didn’t feature the Doctor, but rather a visit by other Time Lords and Time Ladies travelling incognito.

Update for 2020

Canadian doom metal band Smoulder has a song called “Black God’s Kiss” on their Times of Obscene Evil and Wild Daring album that retells Moore’s classic Jirel of Joiry novella.

Resources

For more information about Catherine L. Moore and her work, consider visiting the following:

You can also refer to Wikipedia.

back to top

You Should Listen to Galneryus

Sat, 14 Mar 2015 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/you-should-listen-to-galneryus.html


At their best, Galneryus is the band lesser power metal bands want to be when they grow up. When they’re not at their best, they’re still damn good. Unfortunately, they don’t get nearly enough attention outside of Japan.

Galneryus’ music is available for streaming on Spotify, and includes a compilation called The Iron-Hearted Flag that I haven’t covered in this post. They also have some kind of Fist of the North Star tribute album called Fist of the Blue Sky, which I also haven’t covered. Finally, I haven’t covered any singles other than Alsatia/Cause Disarray.

Who are Galneryus?

Guitarist and bandleader Syu started Galneryus with the help of vocalist Masahiro “Yama-B” Yamaguchi in Osaka, Japan in 2001. Both were veteran musicians at the time. Syu got his start with the visual kei band Valkyr in 1998, and also worked with Spinalcord (formerly Aushvitz){target=“_blank” rel=“noopener noreferrer”} and Animetal while getting Galneryus off the ground. Yama-B was frontman for a band called AxBites, and also performed as Rekion, River End and Gunbridge.

Syu and Yama-B rounded out the band’s classic lineup with Ryosuke “Tsui” Matsui (AxBites), Yuhki (Ark Storm, Marge Litch), and Junichi Satoh (Concerto Moon) on bass, keyboards, and drums respectively.

How I discovered Galneryus

I found out about Galneryus by virtue of their 2008 song “Alsatia” being featured as the opening theme to the six-episode anime Mnemosyne, which is set in modern and near-future Tokyo and focuses on Rin Asougi, an immortal female private investigator. It’s not safe for work, and inappropriate for children. Galneryus also did the ending theme, “Cause Disarray”. Please refer to Alsatia/Cause Disarray for details.

Why Galneryus is Obscure

I blame the band’s record label, VAP Inc., a subsidiary of Nippon Television Holdings Inc. They don’t seem to distribute the band’s albums outside of Japan except via the iTunes Music Store; the only listings I found on Amazon were for imports priced between $30-60. I guess it hasn’t occurred to anybody over there to license these albums to an outfit like Nuclear Blast or Century Media for distribution in North America and Europe, because not everybody uses Apple gear.

Classic Galneryus

The classic period for Galneryus begins with the band’s inception and ends with the release of their third album, Beyond the End of Despair. The following three LPs are essential listening for any metalhead who likes melody, musicianship, and clean vocals.

  • 2003: The Flag of Punishment
  • 2005: Advance to the Fall
  • 2006: Beyond the End of Despair

With guitarist Syu’s constant presence, Galneryus has maintained a distinctive sound throughout their career. All of their albums tend to open with a short (1.5-2 minutes){target=“_blank” rel=“noopener noreferrer”} instrumental that leads into the subsequent track, which tends to a blistering track meant to kick the listener’s ass. The rest of the album features anthems with soaring choruses and guitar and keyboard solos that make me want to get out of my seat and bang my head without any regard for the presence of others. Beginning with Advance to the Fall in 2005, the last track before any bonus material is usually another short instrumental that often reprises themes and motifs from the opening track.

Yama-B is an excellent vocalist, though not quite on a level with luminaries like Rob Halford (Judas Priest){target=“_blank” rel=“noopener noreferrer”}, Bruce Dickinson (Iron Maiden){target=“_blank” rel=“noopener noreferrer”}, Ian Gillan (Deep Purple){target=“_blank” rel=“noopener noreferrer”} or Ronnie James Dio. Instead, I think he’s in a similar class to Paul Di’Anno (Iron Maiden){target=“_blank” rel=“noopener noreferrer”}, Jeff Scott Soto, Joe Lynn Turner, and Tony Martin (Black Sabbath){target=“_blank” rel=“noopener noreferrer”}. He delivers the lyrics he wrote for the first three albums with precise articulation and intonation, and a passionate sincerity that works well with Syu’s shredding and Yuhki’s keyboard theatrics.

Yama-B’s lyrics for Galneryus draw upon standard power metal motifs with a Japanese flavor, and while his English is occasionally awkward, it gets the job done. We can treat “Struggle for the Freedom Flag” from 2003’s The Flag of Punishment as emblematic of Galneryus anthems while Yama-B worked with them:

See the blood of our friends that is sticking to us
Rising out of the sea of sorrow
There’s nothing to lose anymore

We will be fighting till we get hold of our victory
Oh my sword leads us to the castle where the evil lies

The sacrifice was big, but we became stronger
We get hold of glory again
On the road, we will defeat our enemy even if we’ll become the dust

The armors protect our body and departed souls protect our mind
Now the time, we’ll break through the gate of steel
Into perdition
Struggle for freedom, it’s our rule

Now that I think of it, this would be a good theme song for games like Demon’s Souls, Dark Souls, and Dark Souls II.

2003: The Flag of Punishment

Believe it or not, The Flag of Punishment is some kind of post-apocalyptic concept album with a cover by Final Fantasy and Vampire Hunter D artist Yoshitaka Amano.

There isn’t a single bad track on this album, but my favorite is “Struggle for the Freedom Flag”, a chest-thumping, head-banging anthem in the vein of “One Shot At Glory” by Judas Priest and “Aces High” by Iron Maiden. As soon as you hear Syu drag his pick down the string, you know he means business.

“Requiem” is probably one of the best metal instrumentals I’ve ever heard, and the first piece I’d use as evidence that Syu is a superior guitarist to Yngwie Malmsteen. “Final Resolution” is a great song for a last stand against overwhelming odds, and the intro captures the mood Syu and Yama-B intended to set perfectly.

2005: Advance to the Fall

I’m not sure who did this cover. It’s more minimalistic than Yoshitaka Amano’s cover for The Flag of Punishment. The face looks like something Amano would do, though.

Advance to the Fall is where keyboardist Yuhki really seems to stand out with his piano work, especially in “Stillness Dawn”, “Silent Revelation” (whose opening feels like a quotation from an older piece){target=“_blank” rel=“noopener noreferrer”}, “Deep Affection”, “Eternal Regret”, and “Fly With Red Winds”. This last is an almost cinematic piece, and one of the album’s three instrumentals along with “Stillness Dawn” and “Glorious Aggressor”.

Speaking of “Glorious Aggressor”, now there’s an instrumental that lives up to its name. It is indeed aggressive. Syu doesn’t waste a beat, but grabs the listener by the throat and pushes them up against a wall from the first chord.

2006: Beyond the End of Despair

And here’s the first of many dragon covers that we’ll see on Galneryus albums. It’s to be expected. This is power metal, and it beats the hell out of Yama-B sticking the phrase “so far away” in every other song the way Dragonforce seemed to do in their early albums.

If you buy a single Galneryus album, this is the one you should get. This is an album you can just put on repeat all day without a single track getting stale. It’s also one of my go-to albums when I need to get into a flow state and write.

The opening and closing instrumentals, “Arise” and “Rebirth…” are perfect bookends for the other ten prime cuts of heavy metal you’ll find in Beyond the End of Despair. The closest this album has to skippable tracks is “Braving Flag”, and it’s a great song on its own merits. It’s just that it seems weak compared to tracks like “Shriek of the Vengeance”, “Raid Again”, “In the Cage”, and “My Last Farewell”.

If you like power metal, you will love this album. I guarantee it.

Galneryus ver. 1.1

2006’s Beyond the End of Despair was a tough act to follow, and I suspect that vocalist/songwriter Yama-B was getting burned out by the demands of touring and the need to continually surpass previous efforts. Galneryus released two LPs during this period, which ended with Yama-B’s departure, as well as the double A-side single Alsatia/Cause Disarray.

  • 2007: One for All—All for One
  • 2008: Reincarnation

While I suspect burnout, Wikipedia has the following to say concerning Yama-B’s reasons for leaving Galneryus:

According to Yama-B’s note left to the fans on Galneryus’ official site, he left due to the band’s growth and change. In the note, Yama-B stated that due to differences in opinion on the band’s style of music, he was leaving. He and the rest of Galneryus are all okay with this and wished each other well as they went their separate ways. Yama-B later elaborated in 2013, recalling that while he and Syu had different musical tastes from the beginning, with every release the band slowly chased after a new sound “instead of doing music we loved”. While Yama-B “likes to stick to a certain set of rules, concepts”, particularly Syu would spontaneously abandon a style in order to incorporate new inspirations.

2007: One for All—All for One

And here we have a new logo for the band, and Japanese lyrics for the first time in the band’s history.

This was the first Galneryus album I bought, back when I was still using a Mac and an iPod and thus had no reason not to use iTunes. These days I see this album as similar to Metallica’s …And Justice For All, even though Yama-B is still with Galneryus as vocalist whereas Metallica had to bring bassist Jason Newstead on board because of Cliff Burton’s untimely death.

I make this comparison because All for One - One for All as a whole is similar to …And Justice For All. They’re both solid but uneven follow-ups to nearly-perfect albums. Yes, I’m comparing Beyond the End of Despair to Master of Puppets by implication.

The musicianship is still excellent, but the English-language lyrics seem to suffer compared to previous efforts. The opening and closing instrumentals are rather mellow for a metal album, and the presence of four filler tracks in a row (“Aim at the Top”, “Everlasting”, “Last New Song” and “Don’t Touch”){target=“_blank” rel=“noopener noreferrer”} is disappointing in light of the band’s first three albums.

2008: Reincarnation

If you look up the songwriting credits, you’ll find they’re more diverse this time, with guitarist Syu writing the music to only half this album’s songs. Reincarnation also continues the trend of songs with Japanese lyrics mixed with English-language songs. And unlike previous albums, Reincarnation doesn’t begin and end with instrumental tracks.

2008: Alsatia/Cause Disarray (Single)

Alsatia/Cause Disarray is a 2008 double A-side single whose title tracks were used as the opening and ending themes of the six-episode anime Mnemosyne.

“Wings” and “The Awakening” aren’t terrible songs, but they don’t really hold their own against the blistering assault of “Alsatia”, whose opening riff I use as my phone’s wake-up alarm. Even “Cause Disarray” can’t match this EP’s opener, though it makes a respectable effort.

Galneryus ver. 2.0

With the departure of vocalist and songwriter Yama-B, Syu had to find a successor. In 2009 found one in veteran performer Masatoshi “Sho” Ono. In the process completed the band’s shift from English-language lyrics to songs written primarily in Japanese.

This isn’t as problematic as listers unfamiliar with Germany’s Rammstein might suspect. You don’t really need to understand the lyrics unless you’re at a show and want to sing along. Unfortunately, Sho’s vocals seem to lack the clarity of Yama-B’s, and his English-language lyrics are often a cheesier than his predecessor’s.

The Galneryus 2.0 lineup is still going strong, with the following full-length studio albums to their credit.

  • 2010: Resurrection
  • 2011: Phoenix Rising
  • 2012: Angel of Salvation
  • 2014: Vetelgyus

I’m not familiar with the band’s most recent work, but Resurrection and Phoenix Rising are similar in style and quality to 2007’s One for All - All for One.

2010: Resurrection

Hey, we got another dragon cover! A phoenix might have been more appropriate, but we’ll get there shortly.

Resurrection is an album on par with 2007’s All for One - One for All. It sticks to the opening and closing instrumentals formula, has mainly Japanese lyrics, and a few filler tracks, though your mileage may vary. “United Blood” ties into “Burn My Heart” the way Judas Priest’s “The Hellion” segues into “Electric Eye” on Priest’s 1984 album Screaming for Vengeance. “Carry On” shares its title with a song by Brazilian power metal band Angra’s 1993 debut, Angels Cry, but no other similarities. “Destinations” is a ballad, and not half bad thanks as usual to Syu’s music. “Emotions” is an instrumental similar to “Requiem” from The Flag of Punishment, and one of the best tracks on the album.

2011: Phoenix Rising

Remember how I said that a phoenix would have been more appropriate for the first Galneryus album with Sho on vocals? Here we go.

I have a copy of this album, and I’ve tried listening to it a few times, but I’ve never really gotten into it. This might be one of those LPs that grows on listeners if you give it time. The cover’s gorgeous, though.

2012: Angel of Salvation

You know what? I don’t think I’ve ever tried listening to this album even though it’s on Spotify. The intro for “Reach to the Sky” sounds pretty cinematic, however. I’m playing it now. :)

You can find more information about Angel of Salvation on Wikipedia.

2014: Vetelgyus

This is another album that I don’t think I’ve listened to recently enough to offer a reasonable opinion. I suspect the title is a variation on Betelgeuse.

You can find more information about Vetelgyus on Wikipedia.

Galneryus on the Web

The following sites have more information on Galneryus.

back to top

Just Married!

Sun, 31 Oct 2004 11:52:28 EDT

Permalink: http://matthewgraybosch.com/blog/just-married.html


Yes, we got married on Halloween. We were a bit pressed for time due to her being in the US on a K1 visa, and we figured, “If we do it on Halloween, we won’t have an excuse to forget.” We’ve known each other for twelve years, however; we met on a Yahoo! writers’ board in May 2000.

I was living alone in a third-floor walkup in a rough neighborhood, and had had dia-up net access for about a month. She had made some interesting comments about imagination, and we ended up having an exchange based on her comments. I then asked her, via email, if she’d like to exchange stories.

We continued our conversation, and agreed to meet in July 2002. I flew to Australia to meet her, spent six days together, and did not want to leave. We developed a (rather expensive without VOIP!) habit of nightly phone calls and long chats over IM, until after year I broke down and asked her to marry me.

I repeated the question the next morning, after a night’s sleep. We spent a year preparing, and dealing with immigration authorities in both the US and Australia; I was willing to go there, but I had the better job at the time, and she wanted to come to the US. The end of August 2004 saw me waiting outside the international arrivals entrance at Newark Airport with an bouquet and an engagement ring. I proposed to her as soon as she came out.

It hasn’t always been easy, and I’ve probably made it harder than it needed to be, but I have no regrets.

We laugh, however, whenever somebody complains about the difficulties of a “long-distance relationship” where the separation is a town, a state, or even the width of the continent. We kept it up with both the breadth of North America and the entire Pacific Ocean between us for four years.

Catherine and me on our wedding day.

Updates

I mean to update this post on every anniversary for as long as we remain married.

31 October 2005

We’re still together. No regrets on my part. She says she doesn’t have any, either.

31 October 2006

We’re still together. No regrets on my part. She says she doesn’t have any, either.

31 October 2007

We’re still together. No regrets on my part. She says she doesn’t have any, either.

31 October 2008

We’re still together. No regrets on my part. She says she doesn’t have any, either.

31 October 2009

We’re still together. No regrets on my part. She says she doesn’t have any, either, but I wish I could have made a bigger fuss over Catherine this year.

31 October 2010

We’re still together. No regrets on my part. She says she doesn’t have any, either.

31 October 2011

We’re still together. No regrets on my part. She says she doesn’t have any, either, even though I’ve been unemployed for the last month. Got a new job lined up, though.

31 October 2012

We’re still together. No regrets on my part. She says she doesn’t have any, either.

31 October 2013

We’re still together. No regrets on my part. She says she doesn’t have any, either. Looking forward to the release of my novel Without Bloodshed in November. I might not have managed it without her.

31 October 2014

We’re still together. No regrets on my part. She says she doesn’t have any, either. We’re off to the World Fantasy Convention in Washington, DC.

31 October 2015

We’re still together. No regrets on my part. She says she doesn’t have any, either. We’re off to the World Fantasy Convention in Saratoga, NY.

31 October 2016

We’re still together. No regrets on my part. She says she doesn’t have any, either, even though my novel Silent Clarion looks like it’s going to be a bomb. I’m glad she helped prep the release, though. I really should start giving her co-author credit despite her objections.

31 October 2017

We’re still together. No regrets on my part. She says she doesn’t have any, either. This was a good year. I got to celebrate Cat’s 40th birthday in Paris, and we bought a house.

31 October 2018

We’re still together. No regrets on my part. She says she doesn’t have any, either. We’re off to the World Fantasy Convention in Baltimore, MD. Fuck breast cancer, though. If Cat doesn’t pull through, God will answer for it.

31 October 2019

We’re still together. No regrets on my part. She says she doesn’t have any, either.

31 October 2020

We’re still together. No regrets on my part. She says she doesn’t have any, either. Fuck COVID-19.

31 October 2021

We’re still together. No regrets on my part. She says she doesn’t have any, either. We’re still hunkered down together and surviving COVID-19. I’m glad we haven’t gotten sick of each other.

back to top