On watching Star Trek

I make no secret of the fact that my favorite TV franchise is Star Trek, though I’ve written about it very little. I spent the first bit of my life in suburban South Denver, which is relevant for having one of the Paramount affiliate independent stations that aired Star Trek. They managed a perfect schedule, too, by putting it in the time slot after ABC aired M*A*S*H, so my sister and I would watch them back to back. My father looks like the spitting image of Alan Alda, so it was easy to like Hawkeye and get into the show, but it was watching them back to back that really was the beginning of my political awakening, as far back as my tween years.

Both shows have such a strong and persistent sentiment woven through them that people should do the right thing, and organizations make that hard. They go about it in extremely different ways – MASH showing the failures of the system and just how hopeless it can be, which was then a commentary on the US-Vietnam war, even though the show’s setting is the US-Korean war, and Star Trek showing a utopian template of a system that works in a humanist, benevolent way. Both dance close to engaging with communism and socialism in real ways, but both shy away from it, partly out of inconsistent writing, and partly due to needing to not piss off the network executives. Despite this, Star Trek serves as the template for “fully automated luxury space communism”, even though it never really analyzes it deeply, and MASH will always have a place in my heart for giving it the context I started with.

I’ve long said that most science fiction can be thought of as fan fiction for sciences. Stargate is archaeology fan fiction. The Expanse is military science and political science fan fiction. Star Trek is both anthropology and political science fan fiction, as well as in an extremely tangential way, military science fan fiction. Arrival is linguistics fan fiction. Annihilation (and Star Trek: Discovery) are mycology fan fiction among other things.

Star Trek has also always had this strangely bifurcated fanbase: People, mostly men of the “reads books about World War Two” sort, who like military science fiction and some of whom even manage to miss the social critique in the series, and people, often women, who are here for competent people doing what’s right against a backdrop of anthropology, sociology and politics. Star Trek’s early writers had many women among them, Dorothy Fontana among the most influential, and I think it has shaped the series for the better in ways that no other franchise has managed. Not to say the franchise is unflawed, but it’s mostly worthy with its flaws instead of destroyed by them.

A while back I got my husband introduced to my love of Star Trek, finally, after a couple false starts. Some of it required just skipping the bad episodes. Episode guides were very useful:

I can describe why I like it while I give my own suggestions. While I’ll leave delving into the episode level to the viewing guides, I’m going to touch on what’s good and bad in each series as I go, and I’ll give a few spoilers, but since the show doesn’t structurally rely on surprise much, I think that’s fine. There’s a little mystery in Enterprise, but it’s also not the part of the franchise I am going to get into much depth about. Even looking at the episode list tells you whether the Big Bad gets defeated or not, so there’s really little to spoil. Discovering this thing is about seeing how the pieces fit together and, in my opinion, with how it connects with what’s going on with our own world here and now. Science fiction is always about the people writing it.


There are three major eras of Star Trek production: the original series and its followups, The Next Generation and the 90s syndicated spin-offs, and “New Trek” which is designed for streaming.

There are four time periods that the shows are set in. Chronologically, that’s the prequel series “Enterprise”, set over a hundred years before the original series in the 2150s; the original series era, set in the 2260s; The Next Generation era, set a hundred years later in the 2360s and the far future starting in 3188.


Mostly skip the original series (“TOS”). Get a feel for where it all started, but know it’s weird 1960s and 1970s low-budget space silliness: TV in that era was very much still being derived from theatrical performance, and the studio system’s legacy played out in television far longer than it did in movies.

The characters and setting set a lot of the tone for the future series, but it is full of gonzo plots involving greek gods being aliens, psionic powers at the edge of the galaxy, planets that are somehow exactly like one specific time and place on Earth for expository reasons. It features TV’s first interracial kiss, but was bowdlerized by the network. White actors in something like blackface play Klingons, something that carries through to other series, but feels particularly egregious with the low budget of the original series. And there are so many mini-skirts and bare navels.

Knowing the characters is useful because other shows make callbacks to them, but if you aren’t feeling any particular episode, skip it. Except The Trouble With Tribbles. Kirk, Spock, and McCoy form an interesting trio as a fictional trope that carries out in other Star Trek and other fiction in general. Delegative but commanding leader, analytical scientist, and hotheaded doctor are a dynamic setup for stories.

The politics are so incredibly incoherent episode by episode: sometimes the Federation uses money and the crew gets paid; sometimes they don’t. Sometimes it’s a more clearly military organization, sometimes it’s not. There’s an ongoing theme of colonization without colonialism, but a lot of stories draw on colonial conflicts for their plot points.


The Animated Series (“TAS”) is mostly even sillier than the original series, being animated. It introduces some species that would have been too hard to do in film on the budget the original series had. Entirely skippable, but if you like the original series and like animation, watch it. Also cels from the animated series turned into widely available and valuable collectors items, so there’s a lot of media generated from them.

The movies are mostly skippable. Some of them are fun. Some are not. There were six and a half movies starring the original cast and crew; none of them are terribly important to the franchise. The even numbered ones tend to be better than the odd numbered ones. I have a soft spot for the first film, which developed the theme music and is very pretty in that early 1980s high budget scifi way. If you liked 2001, watch Star Trek: The Motion Picture. There’s also a visual callback to it in Discovery that I think is beautiful.

Watch The Wrath of Khan (II), The Voyage Home (IV, “the one with the whales”). Read a spoiler for Generations, it’s not a very good film. The Undiscovered Country (VI) is not amazing either, but starts the series toward grappling with the political effects of a neighboring empire collapsing.


Since I’m talking about how unimportant the movies are to the franchise, there’s a spin off alternate universe Star Trek series of movies, which is widely ignored in canon, and is “What if J. J. Abrams did Star Trek? Would it turn into Star Wars?” The answer is yes, yes it will. Star Wars has always benefitted from its open universe and always having something new and a new weird place characters can go, and lots of action sequences. It’s a Space Western. Star Trek is not: it’s always benefitted from the politics and interplay of races and empires and factions, which a more closed world where you don’t drop plot threads all over the place and never pick them up.


Star Trek really hits its stride in The Next Generation (“TNG”), and there are some excellent story lines and episodes. Maxistentialism’s guide hits the high notes for sure. Picard, Data and Riker form the same trio archetypes as the original series in some ways, but they shake up the formula. Troi is deeply underwritten, as all the women are initially. Gene Roddenberry’s sexism, and worse, Rick Berman’s, leave their marks on the show.

There is a series-spanning theme of “is humanity ready to exist among the stars?”, with a lot of different aspects to it. Are we morally ready? Are we prepared for the disaster that could be out there? Have we grown enough to get over petty squabbles? What about when our neighbors haven’t? What if personal resource constraints are eased? What if societally, there are still limits? What does that do? Are we fit to judge others? How does our sense of right and wrong fit into the universe?

Add to that the franchise spanning concern with what it means to be human – an ongoing concern that defines Spock in TOS, Data in TNG, and later Burnham and Georgiou and Spock in DISCO, and you have some really good storylines develop.


Deep Space Nine (“DS9”) is widely regarded as the best of the franchise for good reason. It has longer plot arcs, excellent writing, fewer dud episodes (And even some of the duds are fun, just not meaningful). All around good watching, and Maxistentialism’s list is solid.

Deep Space Nine was also, arguably, stolen from the plot of Babylon 5. The similarities are more than a little coincidental, and the script for B5 was pitched to Paramount, who turned it down and then went and did DS9 right after. Hmm. Babylon 5 is just as good if more cheaply produced than DS9, watch them both. It’s nice to see two complete riffs on a core idea. Excellent science fiction right there.

It delves into the edges of the Federation, and looks deeply at what recovery from fascist colonialism looks like, and it engages with religion in a way that Star Trek normally does not. It’s set in a space station over a newly-freed planet, and everything is broken and kinda terrible. Starfleet is called in to run the station since they have expertise, but it’s nominally not part of the Federation, exactly. Membership negotiations are pending.

Then a wormhole – a gateway to new resources in another part of the galaxy – is discovered, suddenly putting Bajor and Deep Space Nine on the map. The whole series unfolds from that, and there are a bunch of mirrors shined on relations on Earth here: relations among species, the nature of colonialism especially when there is a world to be developed and that wants development to some degree adds real complexity.

Rick Berman’s involvement shows in how two of the ongoing characters manage to have an extremely gay relationship on screen without ever acknowledging it as such thanks to his homophobia. There is a lesbian kiss that’s well portrayed, and the behind-the-scenes talk is that it was actually very hard to make happen and people, and director Avery Brooks (who also plays Captain Sisko) spent real political capital to make it happen.


Star Trek: Enterprise (“ENT”) is mostly lousy. Rick Berman left deeper marks on the series and it suffered for it deeply. It’s got some clever retcons and contextualizations of things that happened in other series, and some nice ideas about what the path from “horrible wars on Earth” to “spacefaring civilization” looks like, but they’re not particularly deep. The entire series is skippable without harming understanding of the franchise’s world. The above episode guide hits the good parts, but it’s still among the Worst Trek. Transporters are experimental technology, which is a nice hack to keep them from being the device you have to avoid solving all problems with. Good retcon on that front.


Star Trek: Voyager (“VOY”) is a continuation of the aesthetic of The Next Generation, this time with a woman in command. Kate Mulgrew does a great job at being the steely starship captain, and the premise is that the ship is flung into the far and unexplored (by humans) parts of the galaxy and has to get home, a trip that might take the rest of their life if they don’t find a shortcut.

It was intended to give new life to a now crowded universe, free of the politics that play into the rest of the franchise’s universe, and able to explore and tell those one-off stories again. It worked well enough, but I don’t think it’s the strongest show of the era. I have moral issues with some of the framing of Captain Janeway’s actions as unambiguously right when they really weren’t, and there’s a lot of justifying doing terrible things to others because it seems necessary.

It’s quite watchable, and a good watching guide would help. There are lots of good tie-ins to events in other series, and if you are a completionist you’ll want all of that.


Then there’s “new Trek.” After the hiatus with ENT, and after Gene Roddenberry’s death, the franchise might have well come to an end, but of course we can’t have anything without monetized nostalgia so the franchise engines started up again. Paramount started cracking down on copyright over their characters, got kinda nasty with fan writers and fan filmmakers, and has in general somewhat “Star Warsified” Star Trek. For the core of the franchise itself this has not always been terrible, and I think some of the new shows are the best of the bunch.

New Trek is designed for streaming, not syndication, so skipping episodes is much harder.


Star Trek: Discovery (“DIS” or “DISCO”) is the first new Trek. It got hit with the pandemic so it has some really uneven tones, since actors couldn’t be near each other in groups for a significant part of its run without very expensive and annoying precautions. It held together better on a rewatch for me than I’d remembered, but its first and second seasons are not amazing. It is pretty continuous story though, so it’s hard to skip around. The show is weirdly paced for other reasons, too, because they introduced an instantaneous travel method, which is silly. It presents the same story problems that the transporters do, in that you have to contrive a reason for it not to work over and over again to actually tell a story because if you don’t, your magic device can solve everything.

The first two seasons are the most compromised, the second two are the most interesting. The characters are fantastic, even if the writing is bonkers sometimes. They were trying something new, and if you watched the original series, you know bonkers is a thing that they tried there too.

  • Season 1: they redesigned the Klingons, incoherently, and you could do well to pretend they’re a previously unshown race. Some truly bonkers medical science that makes no sense, but just know that Discovery has even more handwavium than Star Trek usually does and roll with it.
  • Season 2: The big bad is Section 31, the secret intelligence division of Starfleet, gone rogue. I hate Section 31 and it’s the worst concept the writers ever developed. In DS9 it was treated as unambiguously bad. In DISCO, it’s not, and that’s a deep flaw in the show.

Picard (“PIC”): A retrospective on Captain Picard from TNG, and leans into all of my least favorite things about how the character was written. It’s well acted, but the plots are not strong, some of the things they introduced are just not great for the world, and didn’t even make good commentary on our world. This series is very much about the incoherence of our time in our world right now, and it has no better answers or stories than we do right now. It’s stupid because humanity is stupid. There’s some very nice fan service in the show though. I could skip it. The key pieces: the synthetics rebellion is a weak commentary on colonialism and slavery. But not in an interesting way. They leaned into the Romulan homeworld having been blown up and it’s a weak commentary on fallen empires and maybe on climate change induced migration and homelessness. But it’s not good commentary. Romulans have become Space Elves.


Back to DISCO. The second half of the show’s run is overall excellent: the lots of fun new technology, lots of fun new visuals, and lots of fun new constraints, thanks to events that have transpired in-world between the end of the previous era and this new look at the far future.

  • Season 3: Flung into the future (3188) and looking at a Federation that has crumbled. Not a look at our own world right now. Nuh-uh. Certainly not. Some bad plot decisions. Solid season and really showing what New Trek is. Some of what happened in PIC is now actually being dealt with, 600 years later. Now that is how it’s supposed to be done. The overarching theme of questioning and rebuilding institutions that have been corrupted or destroyed and recovering the good parts ring very strong here.
  • Season 4: Meet new aliens. Good callback to the visuals of the original series. More bad plot decisions. Please stop blowing up my favorite planets as plot device. It was stupid in the movies, it’s stupid here. You can have smaller stakes than that if a character cares about the outcome. Come ON. All in all a solid season, and the theme continues.
  • Season 5: Calls back to some of the 1960s science fiction concepts about gods and time and civilizations of unimaginably long ago or even unimaginably outside our universe, all while continuing those themes. It’s good, and a good place for the show to end.

Strange New Worlds (“SNW”): this is the crown jewel of Star Trek if you ask me. Anson Mount was an amazing choice for captain. This is the five year mission before the original series, with the previous captain. The storylines are a little more episodic, but connected nicely in an arc. Same quality of storytelling as DS9. Just as good character dynamics as Discovery. Production values are off the charts. The design of the Enterprise actually feels like the original series only with a high budget. A truly amazing feat. Watch it all. It’s one of the best shows on the net.

One thing you have to know about both DISCO and SNW is that it’s gay. It’s really really gay. It’s not particularly explicit about it, but this is a crew full of ‘moes. There’s an explicitly trans character, and while I don’t love the plot about that, it’s nice to see anyway. There’s a gay couple, who end up being space dads to a younger queer prodigy. The way it’s acted, you’d have a hard time convincing me any character is particularly straight. Most of the time they don’t make a big deal of it and it pretty well works.


The one place where my opinions do not align with anyone else’s is that I don’t like the animated Lower Decks (“LD”). I think it is cynical, a little boring, and rooted in cheap fan service. There are some high points and they tell a few good stories, and the crossover with SNW is fun, even if it’s not good. It’s The Office and Futurama only it’s Star Trek. The whole show is skippable. Fun if you like the fan service, but skippable.

Every other Trekkie I know loves it, but I just can’t.


And then there’s the one everyone ignores and shouldn’t. Star Trek: Prodigy (“Prodigy”) This is a kids show, like Star Wars: Rebels. It starts off dumbed down. The first four episodes are Kid TV. Good kid TV, but it’s the sort of things parents have to sit through, not enjoy.

But then.

The rest of the show is very Star Trek and it is some of the finest writing. It’s still a kid’s show, so it keeps a light tone and solves a few things too easily, but it hits a bunch of great character notes, fills in the universe a little, introduces a new species coherently, talks about the dangers of cultures coming in contact with each other, unintended consequences, regret, shame, destiny. It’s excellent and well worth watching. It’s a little preachy in places, and it’s not particularly subtle, but it’s good.

The show is set in the nearer part of the Delta Quadrant, where Voyager came near. You watched Voyager right? Captain Janeway is back, and this show is a great reason to have watched Voyager. It lands some great tie-ins to the plot of Voyager without compromising into mere fan service.


I don’t have a point to end this with other than “Star Trek is good and worth watching”, and it’s been a super meaningful part of my life since I was a tween. It’s a show with a lot of richness, and I like it a lot.

Sentences short and long

There is some discourse going around my corners of the Internet lately, originating from this LessWrong post about the lengths of sentences in written works of fiction decreasing over time from nearly fifty to a perhaps unfair but poignant twelve in recent publication such as the Harry Potter books. The bulk of the change happens before the 20th century, so this is not an internet phenomenon, and it does span the time our society transitioned from an oral to a written culture and the advent of silent reading.

I spent most of yesterday in bookstores with this discourse in mind and it was immediately obvious that something was going on. I don’t know about the overall trend, but I can certainly trace something in either the styles for writing over my lifetime, or the selection bias that determines what books are kept, or at least what sort of readers keep books.

The sentence lengths were striking: fully 2/3 of the books were simple sentences, nearly entirely. Not a complex or compound sentence among most pages, and while here and there maybe a compound one, and maybe extremely rarely a complex one, never complex-compound. It varies by genre just how profound the effect is, and certainly the science fiction shelf is one of the worst this way, but everything is very much written simply. Sentences begin with conjunctions on nearly every page instead of the complex sentences, and ‘but’ and ‘and’ the only conjunctions used. “While” I know is derided by the ‘writing 101’ advice that litters the internet, but there’s not an until or unless or even an if in most of it. The subjunctive mood is almost entirely absent from most texts in science fiction and fantasy, and in anything we’d call a “plot driven” book, however much as a writer I detest the oversimplification that label brings.

Pop into any bookstore, in most books, and you will find short sentences, many starting with ‘And’ or ‘But’. Find a Booker Prize winner or translated work, and you will not find this to be the case. Even more striking to me though was when I ran into a used bookstore: even the pulpiest science fiction novels were much more richly structured. Star Trek and Star Wars novels, the sort churned out by the dozens in the 80’s and early 90’s, and even the rather obviously early examples of cheap independently published books telling the story of an AD&D game, marketable only to its tiny readership because of Leisure-Suit-Larry-quality sex jokes, had more in-depth sentence structures, too.

I do wonder if this is the metastasized result of writing advice that advocates paring each sentence to the bone and beyond, leaving the writer, as E. B. White said, “seemed in the position of having shortchanged himself”. (It is not lost on me that one of the examples in the LessWrong post is Stewart Little, written by that E. B. White, the same White of Strunk and White’s Elements of Style where the advice to shortchange oneself originated.)

Certainly for academic text, known for its run-on wordiness and circumlocution in lieu of getting to the point could use such a tightly-wielded scalpel, and the entire genre of “literary fiction”, if one dares call it that, is written with prose that if not purple, yields a rather deep lavender hue and might take this advice but it has become pervasive, not a suggestion for improvement of a specific failing of a specific sort of writer, but an absolute rule from which one must not deviate. Modern writing tools such as Harper issue warnings when sentences reach forty words. While the run-on sentence is a grammatical hazard best avoided, the contrasts of complex-compound sentences and the layered texture they bring is not easily replaced by simple statements in rapid succession, as is the style of modern fiction.

Not unrelated is the tendency for modern fiction to be written with a style that emphasizes immediacy of experience, rather than any sort of context: first person narration, invisible narrators, and tight focus on single characters point of view are pervasive in advice for writers of all levels of experience, as a rule that only the most sophisticated might break with impunity. I do wonder if editors and the commercial fiction presses have set up a feedback loop that creates an ever-shrinking expectation of simplification.

That said, I do not think this is a moral quandary. Ninety percent of everything has always been crap, and there is no shortage of lyrical writers with fantastic sentences, and we’d do well to encourage others to take the time to really read and take time with the written word and enjoy the prose, and at the same time remind ourselves that it’s okay for stories to be fun. We can, time and time again, look to see what has been discarded by the meat-grinder of commerce, dust it off, give it fresh paint, and include it in the next submissions. The consolidation of the publishing industry is not contingent on the length of sentences in the books printed. We are still capable of lyrical complexity, even if it is out of fashion. Fashion will careen back and forth as it always does.

This author isn't dead

I went on the North Shore Book Trail bookstore crawl yesterday with a dear friend and my husband. One of the shops is a delightful used book store, the kind of place I spent my childhood yearning to visit. The sort of place that still has a rack of red-covered Happy Hollisters books, Hardy Boys novels all in a row, and the Star Trek novels I binged as a tween.

Some of the best finds though were some of my great aunt‘s books, four of her Shirley McClintock books: “Death Served up Cold”, “Death and the Delinquent”, “Dead in the Scrub”, and “Deservedly Dead”. She was a notable writer for her work in the 1980s feminist science fiction scene, with award winning novels, but she used pen names for works in horror and mystery, in the era when grocery store mass market paperbacks were in their prime and separate branding was critical for their commercial success.

What’s fascinated me though is that while we weren’t close — I visited her ranch a few times with my parents, and that’s it — so much of her style is deeply familiar. I vaguely knew she was a writer, but didn’t have any real idea what that meant at the time. I was probably eight or nine or so, and the ranch had been sold by 1992 when “Deservedly Dead” was published and the author note said she moved to Santa Fe. The book is nakedly autobiographical in places: the main character, like my great aunt, raised Belted Galloway cattle on her ranch, mostly as a hobby rancher. The book’s plot hinges around a new rancher and neighbor to the main character from back East destroying the landscape and not understanding the fragile Western ecosystem. I wonder very much if this is what prompted the sale of the my great aunt’s ranch in Colorado and the move to Santa Fe. Destruction and the deep love of a place that would feel deeply violating when it is developed or stripped bare is a feature of psychology that I deeply share, and most everyone in my family does. It’s not uncommon in the culture where I’m from to have these sentiments: the land in the West is fragile, an arid ecosystem of careful balances, and unlike anything in Europe. There’s an inherently un-European worldview that comes from beginning to love these places, and a lot of sentiments inherited from the peoples the lands were stolen from, the Diné (Navajo), the Zuni, the Arapahoe, the Ute, and so many others, are shared more generally. This is the land of Rosemary Trommer and Terry Tempest Williams too. Generations of writers have loved these landscapes and fallen in love with them.

I can’t figure out which parts of the story are autobiographical. The main character in these stories, is a familiar persona: she’s written as a somewhat conservative (in the Western US sense), cantankerous, matter of fact older woman, and very self-possessed. So many of her views are things we’d now associate with progressive politics, but in 1992, were not so clearly. Politics in the West are not aligned the way they are in the East and on the coasts and one day I’ll write more in depth about that. My great aunt’s politics were staunchly feminist, if rather Second Wave: I’d like to think she’d have come down on the right side of things with regard to transgender people, though I’m not positive. She was the head of Planned Parenthood in Colorado for a long time, and I suspect in solid Second Wave feminist ways, wrote off racism in ways we’d now find a bit regressive, though also perhaps pleasantly tractable rather than the entrenched battle lines we have right now in 2025. Some of these views come out in the character of McClintock. I don’t think the choice of name is accidental either, a first name that is a close cousin to my great aunt’s, and yet another Scottish surname like her pen names are. I think the autobiographical nature is only thinly veiled.

That particular brand of ‘conservative’ is something I usually just called ‘cussedness’, a mule-like stubbornness to changing views until they actually make sense, both emotionally and factually, and there’s a sort of arid West cultural trait of being somewhat sparse with words and yet keeping one’s finger on the pulse of one’s emotions. Hotheadedness is not appreciated there, and speaking honestly is appreciated — if it’s both relevant and needs saying.

The character has a tendency to rant polemic (which sets her at odds with the more reserved characters) and to obsess over facts not fitting (which I read as being tacitly appreciated, if impolite). These are traits I share.

It’s fascinating being able to analyze an author like this more closely than usual. I do have special knowledge of who she was, though none of it particularly intimate, it’s a bit more specific. I fault literary criticism that doesn’t take the author’s nature into account as fatally incomplete. No work exists in a vacuum, and hastily produced commercial genre novels especially leave a lot of marks on the page that come straight from the author’s interior, and not a calculated meaning external to them. We like to think of literature as divorced from authorship, every choice made deliberately and in service of the story, but none of us is so omniscient even of ourselves as to be able to do that. It’s a useful lens for some analysis, and it’s good to be able to separate any particular notion from its author to examine it, but that’s one tool in the kit and not the entire toolbox.

Anarchism vs Infrastructuralists

I keep my feet in two worlds politically and it is baffling how much shared value they have, and how little shared context there is.

Anarchists are an outsider politics. It’s primarily people who have disavowed the system, or never learned how to enter it. I don’t mean capital-A Anarchist groups, though those are mostly unfairly branded, too, and explicitly disenfranchised from the bureaucracy of the United States, but I do mean the little-a anarchists: anarchism includes a lot of people the system does not admit easily. It’s got a lot of good ideas and sometimes a lot of energy. But anarchists are also, culturally, allergic to the idea of modifying our existing systems. I don’t actually believe this is a value held, but a belief, sometimes born of experiences, sometimes out of not understanding, sometimes out of the system rejecting them (or expecting to be rejected).

On the other hand are a cadre of people who are, more or less, democratic socialists. Not like card carrying members of any organization, necessarily, but really working in policy, in tech, in government, in consulting, in engineering, and trying to build a better world. The people i love most in this space shy away from the technocratic controls of liberalism, and understand deeply that the state, the government, the system, only ever operates in response to an imperfect model of the world. They understand the problem of legibility and illegibility, and try to moderate the systems they build to fail more gracefully—or, when possible, succeed fully still—when they meet the real world. They work to reduce harms. They’re socialists, on average, because socialism is the end of a political spectrum where people get what they need. It’s not big-S Socialism. They’re democratic, because to be responsible to the people you represent or work to support means actually listening. They are process-democratic, not just vote-democratic. They build consensuses, sometimes rough, as best they can. A vote that doesn’t get everyone on board is at least in part a failure.

I wish these groups would talk to each other more, because they have a lot of good ideas, but they don’t speak the same language very often.

Anarchists have long tried to build systems of mutual aid, but so often it devolves into endless streams of GoFundMes to prop up the abject failures of our broken systems. There are better, too: Bikes not Bombs, Food not Bombs, all the pop up kitchens serving food to all comers, those are the kinds of systems—and infrastructures—that anarchists build. They have such modest resources, usually, and they stretch them far. They could do so much more with more resources. But then they would have to learn to scale. And they’d have to learn to deal with the responsibility of failure. If you’re just picking up already broken pieces, there’s such small harm you can do.

On the other end, our global infrastructures are in many ways the largest works of mutual aid ever devised. The systems involved are massive. The best of them have enabled a standard of living undreamt of in previous centuries. The sheer love put into them is astounding, and the care when they are well built shows deeply.

But these infrastructures have, through neglect, overuse, mis-design, shortcoming, or worse, working as intended, caused environmental catastrophe that affects and will affect our world for a long long time, with the greatest burden on the people least legible to societies, least able to speak for themselves in systems of power, the least represented. The people most in need of mutual aid right now.

I wish more of the people building those policy works had lived homeless — not that I wish homelessness upon them, but I wish they understood, viscerally. I wish they understood the burdens of racism, colonialism, ableism, and capitalism, in the day to day way it plays out world over. The best of them do understand. Those are my people.

These groups mix poorly. Anarchists habitually reject anyone with access to the system as privileged, or worse, a liberal.

The people who maintain our infrastructure, social, legal and engineering, get exhausted trying to correct takes by people with no inside understanding of the systems. And who want to throw away the systems and start over, despite them holding the lives of billions in the balance.

Watch out for the people who do manage to hold all of this in their heads, the dissonances and conflicts and really try to see, really try to help shape the world to be better. They have some success at it.

Reading Week Ending 2/4

Yes, reading includes watching videos sometimes.

[…]suggests something of what it has truly meant, over the centuries, for people to read. This is all about paying attention, listening to what others (and not only human others) have to tell, and being advised by it. In Old English, the word ‘read’ originally meant to observe, to take counsel, and to deliberate (Howe 1992). One who has done so is consequently ‘ready’ for the tasks ahead.

On Being Tasked with the Problem of Inhabiting the Page, via Ruth Malan, referencing Nicholas Howe, “The Cultural Construction of Reading in Anglo-Saxon England” in The Ethnography of Reading (1992),

Reading January 2024

I’m off my regular routine due to travel, so I’m sparse, but here’s some interesting bits.

Reading Week Ending 12/30

Things I’ve been reading this week:

  • “Facts, frames, and (mis)interpretations: Understanding rumors as collective sensemaking” by Kate Starbird at Center for an Informed Public @ UW. An excellent article on how we make sense of evidence and rumors and how disinformation works collectively
  • “Value Capture” by C Thi Nguyen. An excellent philosophy paper sussing out a concept I think people would be well to do to think about explicitly.
  • “Presentation, Diagnosis, and Management of Mast Cell Activation Syndrome” My husband has MCAS, and I suspect a really significant number of people do too. The literature paints it either as very rare … or about 1/5 of the population, depending on how you set thresholds and understand the disease. It’s easy to over-fit to, so it’s worth reading skeptically, but man do I ever know a bunch of vaguely but seriously chronically ill people who fit this mold. It seems to affect autistic people and people with ADHD more than most? It might be part of the bendy-spoony-transy syndrome.
  • “The C4 model for visualising software architecture”
  • “Untangling Threads” by Erin Kissane. Thoughtful work as always, and well worth a read in thinking about how federated social media should work when Meta the company starts getting involved.
  • “The Dark Lord’s Daughter” by Patricia C Wrede. A cute fantasy book so far. Aimed at kids but she was a favorite author of mine as a kid, and now is a favorite writer of writing advice now as an adult. I like to keep tabs on what she’s up to.
  • “Hella” by David Gerrold, for a book club. Fun so far. Space colonization on a planet with dinosaurs, with an autistic protagonist.

On queerness and representation

A writer friend of mine wrote a pretty good essay during his July blog-post-a-day ambitions about queer protagonists. It’s a quick read, and he does a pretty good job of answering “why so many now?”: representation matters. After so much exclusion with men, usually white, at the helm of every industry — this includes the commercial arts — there has been a moment in the sun for queer writers, and so many of us have been honing our craft on fan fiction, much of it exceptional, and now bursting out, refulgent into an industry which while it still centers those who are white, straight, and men, has given us enough space to at least be visible and successful for the time being. The wheels of justice, righteousness, and recompense have aligned for the time being, too little too late, but still: we’re here.

They write:

Genre fiction has always been where societal boundaries are stress tested first. Genre fiction is where progressive voices get to practice. When the stories are exploring what could have been or what might be, sometimes the narrative dives straight into what should be.

Presently, there should be more queer protagonists. There should be more queer writers, writing queer protagonists, celebrated by audiences, queer or otherwise.

It’s not lost on me that we get lumped into ‘progressive voices’ — and we are — but we’ve been here for a very very long time. We’re dissenting voices, hidden voices, erased voices, progressive voices, voices of people stuck in a conflict that has moved on without us, voices of the long-marginalized. All of these are long standing social processes, not a new phenomenon, a new frontier being carved out suddenly. We’ve always been here. Fan fiction itself, the refuge of writers creating what the main stream will not give them, has much of its current structure from the idea of ‘slash fiction’ (gay pairings) that came about specifically in Star Trek fan fiction, mostly from women and queer writers.

There should be more queer protagonists: when I was growing up, it was said that 2-4% of us are queer; I heard some people say 10% and at the time that sounded overstated, but now I’m convinced that’s deeply underestimated and truth be told, as I come to understand the processes of queerness, sexual attraction, identity formation, oppression, and marginalization, it’s now my habit to see not the proportions as some fixed number, but the result of processes of how we, collectively, conceive of ourselves. If more than two thirds of us can figure this stuff out by the messy process of living it, a writer can figure it out by listening. These are dynamic systems, and with the increased visibility, whole new groups of people come to understand themselves new ways. And this is good. It’s an alternative to the ugly truths about how we have conceived of ourselves before: whiteness was created to justify slavery. Straightness was created to reinforce ideas of family that support systems like capitalism and corporate dominance. These aren’t neutral defaults, but evolved systems that benefit people.

But more than that: if genre fiction is the place of imagining a new future or alternate past, queerness is itself a subject for genre fiction. It is the place we imagine new ways of being. It does a disservice to the idea of genre fiction to rope off some pieces as a do not go zone. We are, in fact, the sort of people who figure this stuff out, repeatedly, for character after character. We must open our future and look at it honestly.

There are lived experiences that I cannot claim, experiences that many queer readers would expect from a story that is meant to speak to and represent them. It would be wrong of me to try and write a queer story. There are other writers that can write that, and we should make sure there is room for them to do so.

They’re not wrong about the last part — we have been denied too long, and the room to do so is much needed — but I want to challenge this: like anything else in a market, often it’s not as simple as competition for a place, but instead, good stories in conversation with each other and new entries and aspects of these things create markets, and expand both access and success of all within.

It’s certainly true that straight people, almost entirely white and men, have dominated the industry, and stand an easier chance of being published than their peers who are not. But at the same time, it’s also a matter of lifting each other up. It’s not writers who are in the way, it’s publishers and the power structure that filters so terribly. That’s the place to fight: with success and publication, we get the opportunity to recommend and include others. We lift each other up. There’s a tendency to gate-keep, especially when we feel like we are spending our reputation to uplift others. That follows from the nature of the industry, but we can upend it. Instead of looking to the power brokers, the decision makers for what’s good, we can listen to each other, and the marginalized among us for the stories that aren’t being told, aren’t being published, and we can both write them and bring the authors already doing so into the light.

I can include queer characters in my stories, though. My main character can be queer, as long as I don’t make that the focus of the story. Some folks are gay. Some folks have dark hair. Some folks have gluten allergies. These are descriptors, and not necessarily character defining traits.

It can be a little confusing when a story is appropriation, and when it is representation. When in doubt, there are readers that can provide feedback and help the writer keep from doing harm with their stories. Misrepresentation and stereotyping can be extremely painful and continue a cycle that oppresses or mischaracterizes people that are already not well represented. So, hire a sensitivity reader, and listen to them if they tell you that you’re doing harm.

It’s not wrong advice in the slightest: if you’re not of the group, you’ll rely on the relationships with people who are for sensitivity. Hire a sensitivity reader, pay them well, and listen to what they have to say. But so too, a sensitivity reader can’t represent a whole community with its diversity of opinions. We have to go deeper. We have to cultivate a plurality of relationships. Listen, but also listen to the theory behind what they’re saying.

But here’s my challenge. Write the story with the queer main character where that deeply defines their life. I don’t mean necessarily a coming-out story, or a story wallowing in the oppression, but it’s okay — and I’d argue necessary — to do the work to really understand what makes us who we are to write good genre fiction.

Some of us are gluten-sensitive, and it’s just a trait that adds a bit of complexity. Sometimes it’s a thing that took decades of our life to chronic illness, defined our relationship with our families, the medical establishment, the very idea of work. So too with queerness: it’s not always flavor text, a bit thrown on top to give a bit of diversity to otherwise straight characters. In many ways, the approach of not letting queerness be a character-defining trait is itself a kind of tokenization: you can have a queer character if they’re not too queer. You can’t be progressive if it doesn’t upset the status quo.

Stories upset the status quo, out of necessity. Genre stories of often upset the whole status quo, the very ideas that our world is built on. That’s what makes them great.

Make no mistake here: I’m not saying that if you’re straight you shouldn’t write queer characters, if you’re white you shouldn’t write racialized characters. But it does mean we need to learn, to listen, to understand and be clever. We need to both extrapolate from the information we do have, but also listen to those unlike us for the information we don’t have. You don’t just have to listen to your sensitivity readers (though you’d do well to do so!), you have to listen to the world around you, for the things that challenge the very ideas of how you think things are. As a writer you’ll grow from this. We can grow beyond the fear of doing harm and into a well forged alliance of authors supporting each other, uplifting the more marginalized among us, sharing and understanding their stories not just when they’re written for us but when they arrive in their full complexity in a world that may not be ready for them. We need to cite our sources for some of our ideas. Two takes on the same thing uplift each other, and if we find ours takes space from the other, we should uplift the other, not shrink to the shadows, hiding the much-needed idea from the world.

Writing about queerness feels like an expanse of shifting terms, pitfalls under mundane seeming appearances, but that too is an experience of queerness. In my own lifetime, the word you’d use to refer to someone like me has changed not once, twice, but three times. That hesitation and discomfort, that desire to get it right and play it safe is one of the forces acting on queer people too.

Write the queer main character, but be prepared for the learning that will happen, both in the criticism but even more deeply in the introspection. Queerness is on one hand a mere fact of life for some people, but in another, a foundational relationship to the world — not always friendly, but sometimes it is, an in either case, can affect us to our core. Being non-white too is an experience of marginalization, but it is also a natural joy to exist in a skin and family and community that is very much who one is, inescapable. As a white writer, we will find both the marginalization and the joy uncomfortable. As a straight writer, likely the same for queerness. The discomfort will reveal stories you thought you could never tell, and if you nail a story, really seeing an aspect of the experience, that enriches us all, proving that we really can understand each other.

Less screaming into less void

How to stop holding social media wrong and start holding it right, or: an awkward introvert’s guide to not feeling quite so unheard.

Today someone said to me

absolutely nobody ever reads what I write.

And that’s a sentiment I’ve heard a lot from people who call themselves introverts (I have a whole batch of opinions about how we’ve decided to construct “introvert” and “extravert” as a society. I think the concepts are more harmful than helpful), but I think it’s a common enough thing to happen given some combination of social anxiety, a tendency to think about things (even over-think) before speaking, and being sensitive to the perceived status of others.

But in 30 plus years of talking to people on the Internet, including both being one of and dealing with people who are struggling in exactly this way, I have some some strategies, as well as critical reframing to enable some healthier social media use. If this sounds like you, “nobody hears what I have to say”, this is for you, but it’s not going to be super easy, because some of this is about changing goals.

This won’t make you an influencer, it’s not a guide to getting a thousand followers (though it might do that), and it certainly won’t get you a million. I’m just not interested in social media where I’m performing for an audience.

Social media, like most human communication, doesn’t work well with goals approached head on: human attention is a limited resource, and where advertisers and people who want status are around (and that’s everywhere), naively seeking attention doesn’t work. This is not to say that wanting attention is in any way bad: this is a core human need, the care and attention of others is a key part of maintaining our psychological health, but going straight for it without developing the relationships to support it is anti-productive.

You’re not alone: I’d estimate about half of everyone on the Internet feels this way much of the time: unheard, wanting to express themselves, but mostly feeling like if they said anything, they’d be screaming (or whispering) into the void.

My advice is built for social media roughly the shape of Twitter: Mastodon, Twitter & Meta Threads, the sort of place where you can cultivate a relationship with other people existing in public, where things are relatively open, and there’s no strict idea of membership. Some of it may work in other platforms, but the public nature, equal footing, and conversational style are all aspects that I think help. They also have some particular dangers—you are talking in public, so if things veer toward things you wouldn’t want the public to know about you, it may break down, as well as the ever present specter of harassment, though I think relationship building is one facet of making the Internet a safer place to be in public.

Goals

The first order of business is to look at goals and reframe them: most people in this position want to be heard, and second to express themselves; this is actually a complicated thing. What that usually means is that we’re seeking human connection, we want response, and relationships forming based on things we find important to us. It’s not just about being heard, but listened to and included. Being heard and expressing ourselves, while they’re the things we’re lacking, happen best as side effects of relationship building, so the goal is not to be heard but to have good conversation over a timescale of weeks.

We’re used to conversations having a very functional purpose: to convey information, to make a request, to answer a question. This is actually an unhelpful thing, because good relationship building is open-ended: answered questions, requests accepted or denied, or information conveyed are end states, they are conversation enders. Instead, building relationships is open questions, persistent interests, and ongoing history. Not to say that those functional components don’t have their place, but they’re not the point.

We’re also used to conversations as they’re portrayed in media, and modeled spoken aloud. While short-form social media has a lot of similarities to these, they’re distinctly different: they’re asynchronous (replies can come hours or years later), they’re slow (even though they’re often quite timely), and they’re open-ended: unless we lock down our accounts or disable replies or whatever the platform allows, the conversation can usually continue in some form down the road, whether as direct replies or just picking up the topic again with similar groups of people.

Who to approach

One thing that all of these platforms have in common is that anyone can follow anyone (more or less; some accounts are locked). Brands want to be followed to disseminate ads and garner attention; influencers are also seeking an audience. Some people just feel compelled to have an account to announce what they’re working on. All of these are very asymmetrical relationships with their followers, and are not particularly likely to be people you form good relationships with. At best they will be parasocial, where the connection is one way and mostly imagined, and at worst they will make you feel like you’re shouting into the void.

Next, it’s very easy to discount someone who’s an expert or (in your mind) highly thought of about the topic you’re interested in. Don’t! There are times when they won’t really be open to communicating with you, but by and by large, experts in things—especially the sciences or anything niche—love to talk about their topic. The question is can you relate to them on a useful level? If you don’t mind listening to an expert be mostly intelligible but sometimes end up talking about nuances or specifics you don’t know, go for it! If they only talk about things that are completely over your head, or they’re mean about it, they’re unlikely to be a good match.

One other thing to watch out for: don’t ask for people’s services for free. Don’t ask for specific health advice from doctors, legal advice from lawyers, art from artists. That’s what being a paying client is for. Now if you want to ask them their opinion about the world instead of about your situation or interest or desire, go for it.

But what you really want is to find a group of people who are interested in things you want to talk about in a similar way: do you want to hear other learners talk about the basics of a thing? Experts in the field? People passionate about the thing? People who want to talk about the ways their work connects to the world? People who created the thing and what they think about what they made? Or people with a similarly fannish interest?

If you want to talk fan theories about a work, follow and talk to other fans. If you want to hear about the creation of a work, follow its author, editor, publisher or people interviewing them about that. In some fields it will be a close and mixed circle. In some it will be very different groups, maybe not overlapping at all. (Authors often hate to hear what fans—and haters—are saying about their work!)

What to talk about

What do you want to connect with other people over? What things do you care about? What sorts of things do you wish you could express yourself about, but nobody around you does?

It’s also best if you can find something that people don’t all agree on. The goal all of this isn’t to be correct, to have the right opinions and gain status that way, but to usefully explore the variations of the topic with other people. For me that’s social justice and how social media should work, and communities (which leads into politics and labor organizing pretty naturally); but it works for tech things too. I prefer author spaces to fan spaces. I’d rather hear how an author thinks about stories than what plot holes fans can identify. I want to hear how fan fiction writers are thinking about their stories, too, and not just people talking about last night’s episode of whatever it is. Your mileage may vary, but do think about what kinds of conversation you want to have. And again: the goal is not to be heard, don’t evaluate that, but to connect: are these people you want to listen to as well?

Find the people talking about that stuff, and get up in their replies. Ask probing questions sometimes. Nothing super invasive or fast paced annoying, but the kind of thing where over the course of a few weeks, you’d have a few repeated interactions with the same people. Follow those people, and the best of the people replying to them. Don’t just hound a single target, look for and join existing conversations: find the things people say, and let them know you heard them. It feels strange that feeling heard involves making others feel heard, but that’s relationship development for you. It’s very reciprocal, even while it’s not transactional.

Then when you find an opinion you have a unique take on, say it! Ideally they’ll be following you by then, or at least some of them. A boost from them gets you into the group you’re hoping to participate in, but if not, don’t worry. This also becomes a history when people look at your profile when you reply to a conversation. They may see something related or relevant to them, and follow you for it. Having an opinion rather than waiting until it’s safe makes that so, so much more likely. In any case, you’re first starting as a nice and kind ‘reply guy’ and eventually maturing into ‘community member’ of that little subgraph. You don’t need to prove your knowledge, and trying to do so will be harmful. Instead, ask good questions, fave posts that are insightful. Boost things that you think are particularly neat. If you have a related thing in an adjacent discipline or fandom or whatever, link them up! That’s the gold that makes other people feel seen. And if you do it, it will start happening to you. And a thread of four or five thoughts is a good length. You don’t need to do epic mega-threads of everything you know, but if you start thinking “this could be a blog post” but not a long one, you’re probably on the right track. Especially if you are intrigued by what you’re writing, not doing it for the attention. Your own care about your own communication shows when others read it.

So then…

My rules are basically “spread out the load, across people and time”, “never fight” and “disagree freely when it matters”, but in the end it’s relationship building, not “expressing yourself”; but ideally those relationships are places where expressing yourself is natural and happy. Relationships don’t need to be strictly equal, but ideally you’ll become a peer of others. You may not have credentials, but you can grow a reputation for caring about something and some people. That’s all that matters.

This should get you started building relationships online and in public. It won’t get you a hive mind of people to give you advice, it’s not how you build a circle of besties (though it might give you some tools and confidence to do so, and the advice to give what you want to get definitely works there too.)

And for what it’s worth, feel free to @ me on Mastodon, especially about this stuff.

Streaming Facebook Live to a Roku (the hard way, but there is no easy way)

This recipe is horrible but it works for me.

You’ll need the streamlink tool, and to know the IP address of your Roku.

In your browser, open the developer console and start the facebook live stream. Look for the .mpd request, which is the MPEG-DASH manifest for the stream, listing all the different quality settings available. Copy the URL.

Use streamlink to tell you what qualities are available:

streamlink `<the url>`

It will tell you something like [cli][info] Available streams: 144p+a66k (worst), 144p+a98k, 144p+a132k, 240p+a66k, 240p+a98k, 240p+a132k, 360p+a66k, 360p+a98k, 360p+a132k, 480p+a66k, 480p+a98k, 480p+a132k (best)

Pick your poison and start streamlink proper in external player mode. I’ve chosen the 480p+a98k stream since the a132k bitrate seemed to only sometimes work for me.

streamlink '<the url>' '480p+a98k' --player-external-http --player-external-http-port 31337

The output will include URLs like this:

[cli][info] Starting server, access with one of:
[cli][info] http://10.243.163.137:31337/
[cli][info] http://10.42.42.66:31337/
[cli][info] http://127.0.0.1:31337/

Choose the one on the same network as your Roku. Now to get the Roku to play it, you will have to urlencode the URL for the stream — replace : with %3A and / with %2F. The middle URL above is included in the command below.

curl -v -X POST "http://<your roku IP>:8060/input/15985?t=v&u=http%3A%2F%2F10.42.42.66%3A31337%2F&videoName=FBLive&k=(null)&videoFormat=mkv"

You should see the Roku flash a starting screen, then retrieve enough of the stream to begin, then play the stream.

how to survive the apocalypse^W^Wa general quarantine

We joke that it’s an apocalypse but it is one. Apocalypse means revelation, and how our world works is being revealed starkly in its inequity and opportunism. This means we’re in a time of change, a time of understanding, and a time of danger. We will have to keep our heads together to make it through this well and healthy. It means getting in touch with our basic human parts and helping each other out, even if that mostly means staying apart.

Read a book. Read several.

Watch a philosophically optimistic television show then watch another one even if you have to use a watching guide to see the best parts.

Learn from the people in your life who’ve grown up on the internet and know a thing or three about connecting with others in ways that don’t involve physical contact often or at all. People get a rush of oxytocin out of skin contact with people they care about, but they also get it just connecting with others. Use those real connections to get your dose.

Put on pants. No, really. Every day. Get up on time, too.

Cook. Cook things that normally require a bit of time, attention, or both.. Learn to make a meal you can produce a bunch of variations on. Eat leftovers. Really.

Multitask less, not more.

Video chat with your friends and family.. Heck, meet some silly strangers and chat with animated selfies. Start a dance party in your house and share it with a stranger.

Offer to help your neighbors. If you have to go to the store, offer to shop for them too.

Join an online community. Remember that every name on that screen is also a real person, also probably missing high quality connection with others. Now is the time to let yourself be your best you and find other people who appreciate who you are. The weirder the parts of yourself you reveal, the more you’re likely to find the people like you. It’s okay to connect over your interests or values or philosophy.

Go outside. Get some sunshine. Take a walk. Take lots of walks.

Make art. Make something. Show off the things you make, especially with people who do similar things.

Remember that news is mostly poison and even when it’s medicine it’s best in small quantities. Ask yourself what you’re getting out of it.

And wash your hands. Seriously.

Community and chat affordances

I’m struggling with a community development phenomenon that’s been going on for a while around me, particularly in tech-centered Slack groups. Something about the affordances of Slack combined with how people like to organize things, ends up making it arranged topically.

There’s a problem here: relationships span topics. It’s not actually a good social schema. There’s clusters of interest broader than that—an #art channel and a #writing channel and a #comics channel all overlap, especially for people who create, not just curate or consume these. If we’re building a space where people want to create, we need to help build relationships within the community that support this. Putting relationships secondary to topic gets in the way.

Even for a simple post, nothing deep, it means that there’s no channel for someone new to pop in and post social relationship building things. An example right now is this silly post about people as types of film— to which I want to post somewhere and say “oh my god, I feel so called out by this, I am totally science fiction and do those thhings”; but in the two communities I’m closest to, that means it’s appropriate in a channel set up for a closed group of friends, or the #scifi channel (which would tend to select for people similar to me, but wouldn’t build much relationship) or … where? Five hundred channels, none appropriate to post in.

That’s something that Mastodon and Twitter excel at to a degree—except that you post it to your followers and your second-degree connections. Relationship building is tied to viral mechanisms. It’s outward-facing, and to get the feedback loop that turns it into community, you have to luck into being boosted a group with enough cohesion to connect back. This happens sometimes, if your followers are cliquish enough. For me, the javascript community works this way; and for talking about social software, Mastodon has lots of people who are interested in that specifically, and who often create things together. It works for that specific interest. A different interest would not gain such traction.

If that connection doesn’t happen, we’re left with watching for boosts and hoping our words were “valuable enough” to an anonymous public. It’s a harmful dynamic to have be the mode, the anonymous posting and being amplified by semi-strangers instead of connection made.

In a social Slack, this goes a very different way, an anxiety-provoking mess. Someone asks “Where should I post this?”:

The answer very often is “I guess #x, #y and #z are good channels,” but that’s not actually the question being asked. The person asking is really trying to figure out “Where will this be received well?” not “where is this on topic?”. And “this” isn’t actually the post, it’s themselves. Where will they be received well? The end result is that everyone is anxious and everything feels like a clique.

I don’t actually think it’s a clique phenomenon. It’s not a preference for existing relationships over new ones with new members, it’s not exclusivity. It’s a problem of social affordances, and actually harming the ability to form new relationships because there is no space that is appropriate for the social grooming and aligning oneself with a group. Topics are too narrow. General chat is too broad unless the whole Slack is narrowly focused and yet active enough to have community, and people’s sense of themself tends to not be aware how contextually they behave. Most people are not aware of most of the code switching they do. If we have to carry a single self-concept everywhere, we keep trying to fit ourselves into social schemas that don’t really fit, and we feel that tension in every interaction.

“If you market to everyone, you market to nobody” is one of those truisms that seems to adapt well to all sorts of social situations because the underlying phenomenon is that marketing is working with a social behavior.

We have to build systems that let us understand group structure and for groups to have space for figuring our our alignment with them. Almost no social software does this, and after the onslaught of spam and then default of hostility on the internet, I suspect none does.

In the early days of the Internet, insularity and homogeneity aside, the wide open access to things by default meant that we had liminal social spaces more easily. You can get close to a crowd, unknown to them, and scope them out. You can observe. They would be be quite public most of the time, having enough psychological safety to exist without self-censoring themselves. A newcomer would be quite anonymous, and you could start participating pseudonymously, if not outright anonymously. You can see how a group reacts to you, you can adjust yourself and join, be accepted, and only then reveal who you are. Now the norm is for personal names, avatars, and outside contact information to be present for a profile to be ‘complete’ enough to participate, which means a fair bit of deciding how to present oneself to a group before being able to observe the norms of the group.

How do we build social spaces that leave more room for get-to-know-you? How can we reduce the prejudgement that comes from presenting a globally consistent face to the world, like individualistic social media does? How can we let people interactively vet the groups they’re joining before they commit? What affordances do we need to understand community from the point of view of a new member?

How do we expose our community values—the real ones, not formally decided official ones—to new and existing members?

You might notice in all of this that there is a tension between safety and functioning as a community. A functioning community means space for vulnerability. This intersects poorly with global hostility, but also with the things we do to avoid this hostility. It means that the walls we put up to keep out hostility are themselves hostile to new people. It puts people in an already vulnerable social position—being new—in the most exposed, vulnerable state in an online community.

These are devilish problems. I don’t have answers yet.

Cultural Zeitgeist and Names

I went to a tai chi class this morning and had a somewhat surreal experience. Right before my class was a kung fu class for young kids (aged 5 mostly), and I overheard a really familiar set of names.

“Get your coat, Aria”

“Eli, time to go”

“Zoë, did you remember your water bottle?”

These are my friends names, aged thirty or so. All of us are trans, and chose our names in the years somewhat near the years these kids were born. It makes me wonder about the cultural zeitgeist that makes this happen. Something in our collective understanding of the world makes us choose names like this. In some traditions, naming after parents or grandparents, a certain age of relative is common. In other groups of people I don’t know what makes them choose the names they do. Maybe it’s avoiding names that are already too prevalent in the culture around them. Maybe it’s famous people around that time.

And in another fun coincidence on the topic today’s XKCD is about cohorts of names over time (and whether or not they will have experienced chicken pox)

Creating your own tiny static publishing platform

I’ve been using static publishing platforms for a while now. The output is enduring and easily archived, and reliable and robust. As an author, there’s also a lot of truth to the unreasonable effectiveness of GitHub browsability however much I disagree with the philosophy therein of committing build products in with the sources. I’ve used Jekyll; Hexo, which is what I use to write this blog; I’ve used Movable Type long ago.

However, all these systems are more complex than I’d like, and prone to bit-rot, far far faster than the content they generate. Runtimes change. Dependencies rot as maintainers move on and no longer can account for those runtime changes. Development moves on to new major versions or being built with a newer fad in software design. Hexo has treated me better than most, but it is large, and the configuration rather arbitrary in places. Plugins have to be written specifically for Hexo, so there’s a balkanized ecosystem that doesn’t flourish as well as other parts do. All these static publishing tools tend to have things in common. Builds have to happen as quickly as they can, and usually this is a bit too slowly. The author will want to preview their work in context, so serving up the rendered pages is important. Live rebuilds by file monitoring reduce friction in the workflow for some people, though I personally don’t care much for it, preferring to run a build when I’m ready.

It turns out that building derived things from a list of inputs with dependencies is a thing that computers have been told to do for a long time. Nearly all compiled software is built this way. We have tools like make(1) and a host of other, more complex and less general tools for various programming languages. I’ve always wondered why we didn’t use those to build sites as well. People have, it turns out, but make(1) in particular is a bit messier for the task than one would hope. There are other tools, and I settled on building with one called tup

This weekend I built a small static publishing platform, and you can too. I wanted to build a site using Tufte CSS, and the minimalism of the presentation is a great fit for a super tiny static publishing platform.

A site like this needs to output:

  • Each post as an HTML file
  • An index page listing posts
  • Its CSS and any assets needed to render

This really isn’t a huge list.

First, let’s reach for a tool that can take a list of files and build all the derived things. make(1) is annoying here, because you have to tell it what to build, and it backtracks and figures out how to make it. We don’t actually have that information easily encoded, but we will have a list of sources, and can make a list of what to do with them. If you’re writing, you probably have a reason for it, right? Or an asset, it’s going to get used, why else would it be there? Starting at the source makes a lot more sense, and as it turns out, it makes incremental builds a lot faster. Enter our first player: tup.

$ brew cask install osxfuse
$ brew install tup

I’m not sure why tup now depends on FUSE, but that’s a task for another day.

Let’s start a directory for our project.

$ mkdir my-static-site
$ npm init
$ mkdir posts

Make a sample markdown file in the posts directory.

Next we create a Tupfile to describe how we’re going to build this site. Then we can just type tup to build the site, or tup monitor on Linux for that live building mode. First, let’s handle each post as HTML. We can use an off the shelf markdown renderer at first.

$ npm install marked

Here’s a Tupfile

: foreach posts/*.md |> marked %f -o %o |> public/%B.html

This means that for each post in the posts directory, we’ll make an equivalent HTML file.

Let’s take a look at some of these rendered files. We’ll need to serve this directory by HTTP if we want to see it as we will on the web.

$ tup
$ npx serve public/

We can now open the site preview at the URL it spits out (usually http://localhost:5000)

Just a directory full of HTML, and ‘full’ is just our one test post, but we should be able to navigate to one. We have a static site, if a lousy one! That HTML is pretty spartan, so let’s add some assets.

Copy the et-book directory of fonts from the Tufte CSS package into the root of the project, and the tufte.css file.

Let’s add a few rules to publish those as part of the site, too. Added to the Tupfile:

: foreach et-book/et-book-bold-line-figures/* |> cp %f %o |> public/%f
: foreach et-book/et-book-display-italic-old-style-figures/* |> cp %f %o |> public/%f
: foreach et-book/et-book-roman-line-figures/* |> cp %f %o |> public/%f
: foreach et-book/et-book-roman-old-style-figures/* |> cp %f %o |> public/%f
: foreach et-book/et-book-semi-bold-old-style-figures/* |> cp %f %o |> public/%f
: foreach *.css |> cp -r %f %o |> public/%b

Run tup again.

The assets got copied in. Now we have to actually put them in the HTML. That’s going to mean templates.

ejs is simple enough and behaves tidily and doesn’t have a lot of dependencies, so let’s use that for output templates.

$ npm install ejs

We’re going to have to create a script to render our markdown and template the file.

Let’s call this render.js:

const marked = require('marked')
const ejs = require('ejs')
const { promisify } = require('util')
const { readFile, writeFile } = require('fs')
const readFileAsync = promisify(readFile)
const writeFileAsync = promisify(writeFile)
const path = require('path')

main.apply(null, process.argv.slice(2)).catch(err => {
console.warn(err)
process.exit(1)
})

async function main(layoutFile, templateFile, postFile, outputFile) {
const layoutP = readFileAsync(layoutFile, 'utf-8')
const templateP = readFileAsync(templateFile, 'utf-8')
const contentP = readFileAsync(postFile, 'utf-8')

const content = marked(await contentP)
const layout = ejs.compile(await layoutP)
const template = ejs.compile(await templateP)

const dest = path.basename(postFile).replace(/\.md$/, '.html')

const body = template({ content, require })
const rendered = layout({ content: body })

await writeFileAsync(outputFile, rendered)
}

It expects two templates: a layout (the skeleton and boilerplate of the page) and a template (the post template). Let’s create those now.

layout.ejs:

<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<link rel='stylesheet' href='tufte.css'>
</head>

<body>
<%- content %>
</body>
</html>

and post.ejs:

<section>
<%- content %>
</section>

And in the Tupfile, let’s replace the marked render with our own. Additionally, let’s tell tup that the HTML depends on the templates, so if those change, we update all the HTML.

: foreach posts/*.md | layout.ejs post.ejs |> node render layout.ejs post.ejs %f %o |> public/%B.html

Let’s run tup again and see the output. Much prettier, right?

Now about that index! The index needs to know the post’s title, and really, posts don’t even have titles yet. Let’s add some to our test post as YAML front matter. Add this at the top of the markdown file.

----
title: My Post
date: 2017-12-04 01:51:43
----

Every post gets a title and the date.

Let’s change our renderer to put the title on the page so we don’t have to reduplicate it.

Install front-matter

$ npm install front-matter

And update render.js

const marked = require('marked')
const ejs = require('ejs')
const { promisify } = require('util')
const { readFile, writeFile } = require('fs')
const readFileAsync = promisify(readFile)
const writeFileAsync = promisify(writeFile)
const frontMatter = require('front-matter')
const path = require('path')

main.apply(null, process.argv.slice(2)).catch(err => {
console.warn(err)
process.exit(1)
})

async function main(layoutFile, templateFile, postFile, outputFile) {
const layoutP = readFileAsync(layoutFile, 'utf-8')
const templateP = readFileAsync(templateFile, 'utf-8')
const contentP = readFileAsync(postFile, 'utf-8')

const post = frontMatter(await contentP)
const content = marked(post.body)
const layout = ejs.compile(await layoutP)
const template = ejs.compile(await templateP)

const dest = path.basename(postFile).replace(/\.md$/, '.html')

const body = template(Object.assign({ }, post.attributes, { content }))
const rendered = layout(Object.assign({ }, post.attributes, { content: body }))

await writeFileAsync(outputFile, rendered)
}

And to post.ejs, the title.

<h1><%= title %></h1>

And in layout.ejs, let’s add a title tag too.

<title><%= title %> — My Blog</title>

Run tup again and let’s check our work.

Now a little harder part. Let’s make the index page.

We’ll need a script to generate it, index.js:

const ejs = require('ejs')
const fm = require('front-matter')
const path = require('path')
const { promisify } = require('util')
const { readFile, writeFile } = require('fs')
const readFileAsync = promisify(readFile)
const writeFileAsync = promisify(writeFile)

main.apply(null, process.argv.slice(2)).catch(err => {
console.warn(err)
process.exit(1)
})

async function main(outputFile, layoutFile, templateFile, ...metadataFiles) {
const tP = readFileAsync(templateFile, 'utf-8')
const lP = readFileAsync(layoutFile, 'utf-8')

const metadata = await Promise.all(
metadataFiles.map(
f => readFileAsync(f, 'utf-8')
.then(fm)
.then(e => Object.assign(e.attributes, { dest: path.basename(f).replace(/\.md$/, '.html')} ))))

metadata.sort((a, b) => {
a = new Date(a.date)
b = new Date(b.date)
return a>b ? -1 : a<b ? 1 : 0
})

const layout = ejs.compile(await lP)
const template = ejs.compile(await tP)

const rendered = layout({
title: 'Posts',
content: template({ metadata })
})

await writeFileAsync(outputFile, rendered)
}

And an index.ejs:

<h1>My Blog</h1>
<section>
<% metadata.forEach(entry => { %>
<p>
<a href='<%= entry.dest %>'><%= entry.title %></a>
</p>
<% }) %>
</section>

And in our Tupfile:

: templates/layout.ejs templates/index.ejs posts/*.md |> node index %o %f |> public/index.html

Run tup once more and we should have a bare-bones site.

Let’s add one more thing before we go, some dates to the posts.

To the template calls in both render.js and index.js, let’s add the require function, so that templates can require their own stuff.Where there’s template({ metadata }), let’s change that to template({ metadata, require })

Then, let’s install fast-strftime.

$ npm install strftime

An expanded index.ejs:

<% const strftime = require('fast-strftime') %>
<h1>My Blog</h1>
<section>
<% metadata.forEach(entry => { %>
<p>
<a href='<%= entry.dest %>'><%= entry.title %></a> <%= date ? strftime('%Y-%m-%d', date) : '' %>
</p>
<% }) %>
</section>

And the page template, post.ejs:

<% const strftime = require('fast-strftime') %>

<h1><%= title %></h1>

<% if (date) { %>
<p>posted <%= strftime('%Y-%m-%d', date) %></p>
<% } %>
<section>
<%- content %>
</section>

Run tup once more, and you’ve got a static site, being generated by some simple code.

Why not Babel?

People always get really enthusiastic about babel.

I get it. Using all of ES6 plus whatever stuff you want to throw at it is cool.

However, consider this:

:; npm i string-tokenize
+ string-tokenize@0.0.6
added 61 packages in 5.212s

:; npm ls
t@1.0.0 /Users/aredridel/Projects/t
└─┬ string-tokenize@0.0.6
├─┬ babel-plugin-transform-object-rest-spread@6.26.0
│ ├── babel-plugin-syntax-object-rest-spread@6.13.0
│ └─┬ babel-runtime@6.26.0
│ ├── core-js@2.5.1 deduped
│ └── regenerator-runtime@0.11.0
├─┬ babel-polyfill@6.26.0
│ ├── babel-runtime@6.26.0 deduped
│ ├── core-js@2.5.1
│ └── regenerator-runtime@0.10.5
├─┬ babel-register@6.26.0
│ ├─┬ babel-core@6.26.0
│ │ ├─┬ babel-code-frame@6.26.0
│ │ │ ├─┬ chalk@1.1.3
│ │ │ │ ├── ansi-styles@2.2.1
│ │ │ │ ├── escape-string-regexp@1.0.5
│ │ │ │ ├─┬ has-ansi@2.0.0
│ │ │ │ │ └── ansi-regex@2.1.1
│ │ │ │ ├─┬ strip-ansi@3.0.1
│ │ │ │ │ └── ansi-regex@2.1.1 deduped
│ │ │ │ └── supports-color@2.0.0
│ │ │ ├── esutils@2.0.2
│ │ │ └── js-tokens@3.0.2
│ │ ├─┬ babel-generator@6.26.0
│ │ │ ├── babel-messages@6.23.0 deduped
│ │ │ ├── babel-runtime@6.26.0 deduped
│ │ │ ├── babel-types@6.26.0 deduped
│ │ │ ├─┬ detect-indent@4.0.0
│ │ │ │ └─┬ repeating@2.0.1
│ │ │ │ └─┬ is-finite@1.0.2
│ │ │ │ └── number-is-nan@1.0.1
│ │ │ ├── jsesc@1.3.0
│ │ │ ├── lodash@4.17.4 deduped
│ │ │ ├── source-map@0.5.7 deduped
│ │ │ └── trim-right@1.0.1
│ │ ├─┬ babel-helpers@6.24.1
│ │ │ ├── babel-runtime@6.26.0 deduped
│ │ │ └── babel-template@6.26.0 deduped
│ │ ├─┬ babel-messages@6.23.0
│ │ │ └── babel-runtime@6.26.0 deduped
│ │ ├── babel-register@6.26.0 deduped
│ │ ├── babel-runtime@6.26.0 deduped
│ │ ├─┬ babel-template@6.26.0
│ │ │ ├── babel-runtime@6.26.0 deduped
│ │ │ ├── babel-traverse@6.26.0 deduped
│ │ │ ├── babel-types@6.26.0 deduped
│ │ │ ├── babylon@6.18.0 deduped
│ │ │ └── lodash@4.17.4 deduped
│ │ ├─┬ babel-traverse@6.26.0
│ │ │ ├── babel-code-frame@6.26.0 deduped
│ │ │ ├── babel-messages@6.23.0 deduped
│ │ │ ├── babel-runtime@6.26.0 deduped
│ │ │ ├── babel-types@6.26.0 deduped
│ │ │ ├── babylon@6.18.0 deduped
│ │ │ ├── debug@2.6.9 deduped
│ │ │ ├── globals@9.18.0
│ │ │ ├─┬ invariant@2.2.2
│ │ │ │ └─┬ loose-envify@1.3.1
│ │ │ │ └── js-tokens@3.0.2 deduped
│ │ │ └── lodash@4.17.4 deduped
│ │ ├─┬ babel-types@6.26.0
│ │ │ ├── babel-runtime@6.26.0 deduped
│ │ │ ├── esutils@2.0.2 deduped
│ │ │ ├── lodash@4.17.4 deduped
│ │ │ └── to-fast-properties@1.0.3
│ │ ├── babylon@6.18.0
│ │ ├── convert-source-map@1.5.1
│ │ ├─┬ debug@2.6.9
│ │ │ └── ms@2.0.0
│ │ ├── json5@0.5.1
│ │ ├── lodash@4.17.4 deduped
│ │ ├─┬ minimatch@3.0.4
│ │ │ └─┬ brace-expansion@1.1.8
│ │ │ ├── balanced-match@1.0.0
│ │ │ └── concat-map@0.0.1
│ │ ├── path-is-absolute@1.0.1
│ │ ├── private@0.1.8
│ │ ├── slash@1.0.0
│ │ └── source-map@0.5.7 deduped
│ ├── babel-runtime@6.26.0 deduped
│ ├── core-js@2.5.1 deduped
│ ├─┬ home-or-tmp@2.0.0
│ │ ├── os-homedir@1.0.2
│ │ └── os-tmpdir@1.0.2
│ ├── lodash@4.17.4
│ ├─┬ mkdirp@0.5.1
│ │ └── minimist@0.0.8
│ └── source-map-support@0.4.18 deduped
├─┬ chai@3.5.0
│ ├── assertion-error@1.0.2
│ ├─┬ deep-eql@0.1.3
│ │ └── type-detect@0.1.1
│ └── type-detect@1.0.0
└─┬ source-map-support@0.4.18
└── source-map@0.5.7

:; npm rm string-tokenize
removed 61 packages in 1.356s

:; npm i @aredridel/string-tokenize
+ @aredridel/string-tokenize@1.0.0
added 1 package in 1.317s

:; npm ls
t@1.0.0 /Users/aredridel/Projects/t
└── @aredridel/string-tokenize@1.0.0

This is roughly the same code. I ported it to not be written using ES6 Modules, used core node assert instead of chai (It has the same functionality being used!), and removed Flow type annotations. It works in node 8 easily, and should work in node 4.

I work in constrained environments: page load time is very important to me. If I’m loading even a fraction of this in a browser, I’ve blown my budget. I run a bunch of hobby projects on a very inexpensive server. RAM is at a premium. All of these things have costs.