Jeff Duntemann's Contrapositive Diary Rotating Header Image

None Of The Above

Anything that doesn’t fit into existing categories

Excerpted from Old Catholics: Christmas Eve II

I have about 38,000 words down on a (mostly) mainstream novel about a tiny Old Catholic community in Chicago, which has a 1920s bungalow with an altar and a few pews in the livingroom, with the clergy (a bishop and a deacon) living in two small rooms on the second floor. A good part of what I have down takes place just before and on Christmas. I’ve published excerpts here before on Christmas Eve. I don’t entirely know how the rest of the story goes. I don’t know if I’ll ever finish it. But people have told me they’ve enjoyed the excerpts. So today on Christmas Eve, let us return to the Church of St. James & St. Julian of Norwich, just south of Devon Avenue at Campbell. The chapter posted on Christmas Eve 2018 comes immediately before this year’s chapter, so if you’ve never seen any of the story before, you might skim through them before reading further. There are mild fantastic elements in the story, especially a little old Polish lady who can read hearts and predict the future–and talk to dead people whom she considers saints. It’s a gentle, hopeful story about eccentric religious people who have no place in the larger Catholic world, banding together to worship God and heal one another of life’s inevitable traumas. Let me know what you think.


Bishop Hughes led them from the kitchen to a small round table standing a few feet in front of the bungalow-church’s front windows. The advent wreath Rob had seen on the Formica kitchen table on Gaudete Sunday was set on the table. All of the candles had seen some use, now that all four Sundays of Advent had passed. Rob remembered the ritual from his childhood: Family members took turns throughout Advent lighting the appropriate candle and reading the prayer before the evening meal. On Christmas Eve, the head of the household had candle duty. So it was that Bishop Hughes struck a wooden match on the side of its box and held it in his left hand while raising his right in blessing:

“In the name of the Father, and of the Son, and of the Holy Spirit, we gather for one final meal before the birth of our Messiah, the Lord God Jesus Christ!” Bishop Hughes reached out with the match and lit the shortest purple candle, then the one beside it, then the pink candle of Gaudete Sunday, and finally the tallest purple candle. He held out his hands to Mrs. Przybysz and Mother Sherry, who took them and in turn reached out to take hands with the others to complete the circle.

Bishop Hughes tipped his head back, and spoke the prayer as he spoke nearly everything, with force and exultation:

“O Lord, stir up Thy might, we pray Thee, and come!
Rescue us through Thy great
strength so that salvation,
Which has been hindered by our sins,
May be hastened by the grace
of Thy gentle mercy.
Who livest and reignest for ever and ever! Amen!”

“Amen!” they replied in unison. Bishop Hughes turned and gestured toward the table. Eight places had been set, and atop each china plate was a folded card bearing one of their names-all but the setting at the foot of the table. It bore no card. As only seven people had gathered at St. JJ’s, Rob did wonder why the eighth place had been set at what was already a crowded table. He bent down to peek under the table, wondering if a card had fallen to the floor during the continuous bustle leading up to the Wigilia meal.

Bishop Hughes noticed Rob’s search for the card. “The place at the foot of the table is symbolic of those who share our love for God but who cannot be here with us in the flesh. Our departed, now in the bosom of the Most High; loved ones distant in space and time; the stranger who has no place at any table-“

“And saints,” Mrs. Przybysz interrupted as she bent to place a bowl of cucumber salad and a smaller bowl of horseradish on the table. “St. Ernie and St. Mona both showed up last year. Ernie warned me of evil brewing somewhere and had to leave to go look for it. Mona said we would need a much bigger table soon–and that the fish could have spent another few minutes in the pan.” The old woman sighed. “I do my best.”

“We all do our best,” Bishop Hughes said from behind her, smiling. “God asks no more of us than that. The challenge is to discover the inner strength that few of us realize that God has given us.”

Bishop Hughes pulled Mrs. Przybysz’s chair back. The old woman sat. Rob reflected that it was a signal. He pulled out Suzy’s chair, and helped her scoot in once she was settled. PJ pulled out Mother Sherry’s chair and did the same. Deacon Dan sat, and made a down-patting motion at Rob, who sat beside Suzy. PJ took the last seat, and set his battered leather briefcase on the floor beside him. He looked spooked, and kept glancing at the empty chair at the far end of the table.

PJ sat across from Suzy. Suzy took a library card and a pen from a pocket and wrote quickly in her lap. She poked Rob and handed him the card.

I feel something weird, she wrote. Rob made just a hint of a nod and handed it back. His first impulse was to grin. But…huh? An odd prickly feeling arose in the back of his head behind his ears, like something approaching–or something that was already among them, gathering power.

Rob shivered. He had told himself a thousand times that he did not believe in demonic forces. Whatever he felt did not feel evil. It felt powerful, not angelic but somehow rooted in the Earth beneath their feet. Hell was at the center of Earth, according to Dante and probably half of Christian humanity. Rob tried to focus, desperate to get away from the impression that something malign was creeping up on him.

Then, deep in his mind, a single word, stated quietly but with the conviction of everything high and holy, resolving Rob’s confusion plainly and beyond all question:

No.”

A libc Mystery…Solved

We have solved the mystery described in yesterday’s entry…

…mostly. I’ve found down the years that inside any big mystery are likely one or more smaller mysteries. And so it is. I would have figured this problem out a whole lot sooner if the symptoms had been consistent.

They weren’t. And those symptoms made me nuts for several days. Eventually I decided to yell for help.

I got a lot of very good help. If you haven’t read yesterday’s entry (and if you’re actually interested in assembly language programming) go read it now. I won’t repeat all the details here.

In short: I wrote a small demo program for my new book, x64 Assembly Language Step By Step. It didn’t work. Several of my readers took the code I posted in yesterday’s entry, built the executable, and…it worked.

That’s what made me nuts. I ran the damned thing on three different Linux instances, and the problem manifested on all three of them. But a couple of my friends ran the executable and had no trouble at all. It worked perfectly.

WTF?

That’s actually the small mystery inside the big mystery. The big mystery we figured out fairly quickly. Bruce, a new Contra commenter, built the executable and it failed. He changed one line in the program, and it worked. I tried his fix. It worked. Mystery solved.

But…why? Bruce cleared register RDI to null (i.e., 0) before calling the libc time function. I had cleared RAX, as part of an earlier test to try and pin down the symptoms. I intended to remove that line from the program. But it gave Bruce an idea: clear RDI instead. He did. It worked. I tried it, and…victory! Clearing RDI to 0 completely eliminated the problem, and I spent another hour trying various things to crash the executable. No luck. It was a consistent fix, in that once I cleared RDI to 0, nothing else would make the executable malfunction.

I think it started to dawn on several of us at once. Supposedly, the time function doesn’t take any parameters. Or so I supposed, based on my reading. But that was wrong. The Linux time function takes one (understated) parameter: The parameter can either be 0, or it can be an address. If it’s an address, time will put the current time_t timestamp value at that address. If it’s 0, time will return the time_t value in RAX.

In stepping through the demo program’s execution in a debugger, I noticed that after a call to the puts function, register RDI would contain a memory address. It wasn’t always the same, and it wasn’t generally useful, So un-useful, in fact, that the garbage addresses being left in RDI would cause either a hang or a segmentation fault. In the x64 calling convention, the first parameter is always passed to a function in RDI. I didn’t think of time as having any parameters at all, but clearing RDI to 0 before calling time guaranteed that time would place the time_t value safely in register RAX…instead of crashing.

So the big mystery was solved. I spent an hour and a half trying to get the program to crash. As long as RDI was 0 when time was called, it did not crash. Halleluia! The big mystery was solved.

The small mystery remained: Why did some of my readers built the executable and have it work perfectly, while the exact same program on my Linux machines went belly-up? That remains an open service ticket. I’m mildly curious, but as long as I know that RDI has to be either 0 (preferably) or the address of a suitable buffer to hold the time_t value, all will be well.

Let me wrap up by abundantly thanking everyone who took part in the bug hunt:

  • My friend and SFF collaborator Jim Strickland
  • Linux expert Bill Buhler
  • New commenter Bruce
  • Long-time reader Jason Bucata
  • X64 programming expert Jonathan O’Neal
  • Contra regular Keith

You guys were brilliant. I will cite you all on the Acknowlegements page in the book, when it comes up (with some luck) next summer.

Again, thanks. In a weird but satifying way, it was fun. Now I have to get back to work.

A libc Mystery

As most of you know by now, I’m hard at work on the x64 edition of my assembly book, to be called X64 Assembly Language Step By Step. I’m working on the chapter where I discuss calling functions in libc from assembly language. The 2009 edition of the book was pure 32-bit x86. Parameters were passed to libc functions mostly by pushing them on the stack, which required cleaning up the stack after each call, etc.

Calling conventions in x64 are radically different. The first six parameters to any function are passed in registers. (More than six and you have to start pushing them on the stack.) The first parameter goes in RDI, the second in RSI, the third in RDX, and so on. When a function returns a single value, that value is passed back in RAX. This allows a lot more to be done without fooling with the stack.

Below is a short example program that makes four calls to libc functions: Two calls to puts(), a call to time, and a call to ctime. Here’s the makefile for the program:

showtime: showtime.o
        gcc showtime.o -o showtime -no-pie
showtime.o: showtime.asm 
        nasm -f elf64 -g -F dwarf showtime.asm -l showtime.lst

I’ve used this makefile for other example programs that call libc functions, and they all work. So take a look:

section .data
        timemsg db    "The timestamp is: ",0
        timebuf db    28,0   ; not useed yet
        time1   dq    0      ; time_t stored here.

section .bss

section .text

extern  time
extern  ctime
extern  puts
global  main

main:
        push rbp            ; Prolog    
        mov rbp,rsp

        mov rdi,timemsg     ; Put address of message in rdi
        call puts           ; call libc function puts
               
        xor rax,rax         ; Zero rax
        call time           ; time returns time_t value in rax        
        mov [time1],rax     ; Save time_t value to var time1
        
        mov rdi,time1       ; Copy pointer to time_t value to rdi
        call ctime          ; Returns ptr to the date string in rax

        mov rdi,rax         ; Copy pointer to string into rdi
        call puts           ; Print ctime's output string
        
        mov rsp,rbp         ; Epilog
        pop rbp
        
        ret                 ; Return from main()

Not much to it. There are four sections, not counting the prolog and epilog: The program prints an intro message using puts, then fetches the current time in time_t format, then uses ctime to convert the time_t value to the canonical human-readable format, and finally displays the date string. All done.

So what’s the problem? When the program hits the second puts call, it hangs, and I have to hit ctrl-z to break out of it. That’s peculiar enough, given how many times I’ve successfully used puts, time, and ctime in short examples.

The program assembles and links without problems, using the makefile shown above the program itself. I’ve traced it in a debugger, and all the parameters passed into the functions and their return values are as they should be. Even in a debugger, when the code calls the second instance of puts, it hangs.

Ok. Now here’s the really weird part: If you comment out one of the two puts calls (it doesn’t matter which one) the program doesn’t hang. One of the lines of text isn’t displayed but the calls to time and ctime work normally.

I’ve googled the crap out of this problem and haven’t come up with anything useful. My guess is that there’s some stack shenanigans somewhere, but all the register values look fine in the debugger, and the pointer passed back in rax by ctime does indeed point to the canonical null-terminated text string. The prolog creates the stack frame, and the epilog destroys it. My code doesn’t push anything between the prolog and epilog. All it does is make four calls into libc. It can successfully make three calls into libc…but not four.

Do you have to clean up the stack somehow after a plain vanilla x64 call into libc? That seems unlikely. And if so, why doesn’t the problem happen when the other three calls take place?

Hello, wall. Anybody got any suggestions?

Monthwander

SpaceX With Crescent Moon-500 wide.jpg

Last night, when I took the dogs out at about 6:20 PM, I looked toward the crescent moon and immediately saw the unmistakable trace of a rocket about to go by above it. Rockets are fast, so rather than run in and try and find my Canon G16 and risk missing it, I pulled out my phone and did my best. It turned out reasonably well, with even a sort of Halloween-y color cast in deep dusk.

It was a SpaceX launch of still more Starlink satellites, from Vandenberg AFB. Before I could get my phone out to take a shot, we saw the first stage drifting down toward a landing on an unmanned landing barge that Elon Musk has whimsically named Of Course I Still Love You.

Although the shot I took wasn’t bad, there is a site detailing the Vandenberg launch schedule, and next time I’m going to be out there with a tripod and my G16.

_…_ _…_

Elon Musk, yeah. He apparently closed the deal to buy Twitter earlier today, and has already fired top management. One of the first corporate directives he’s going to issue is to un-ban all banned users. He’s also going to throttle way back on content moderation, which for Twitter has generally meant censoring anything Twitter’s management doesn’t like.

That may still take some doing. Ironically, if he succeeds in cleaning house along the lines he’s stated, it could mean that several much smaller social networks catering to those who have been banned or censored by Twitter could lose members to a new “big tent” Twitter. We’ll see how that plays out. Musk knows how to get things done, and if anybody can create a social media network that is open to all sides of the political spectrum, it would be him.

_…_ _…_

All this cooks down to some pretty fundamental questions. What are social networks good for? Twitter seems to be a bottomless well of political derangement, which (as you might imagine) I dodge as best I can. I’m active on Twitter because every time I mention my books there, I sell a few. Whatever else I post there are pretty much what I post here now and then as “odd lots,” i.e., links to interesting things, few or none of them having anything to do with politics.

I’ve stated before that Twitter is an “outrage amplifier,” and it’s still true–but then again, any social network can be an outrage amplifier. Twitter seems particularly good at it, which has always puzzled me. Not long back I began to wonder: Is Twitter what it is because so many journalists are on it? Journalism itself (at least outside of vertical market reporting) seems to draw its energy from outrage. If Musk makes the journalist community run screaming from a network it can no longer dominate, what will Twitter become?

Recent news about Meta’s financial crisis suggests that Twitter could in fact become the new Facebook–especially if the old Facebook becomes insolvent. Zuck seems to be pouring all his energy and free cash flow into a virtual world that nobody asked for and nobody wants. Abandoning his Metaverse would be the ultimate humiliation; one has to wonder if he would pull back before the company crashed for lack of cash.

I have an idea that I think I covered here some time back: a social network server into which many independent social networks could connect and trade information according to rules established by each participating network. If people wanted an echo chamber, they could build an echo chamber. If they wanted a wide-open discussion board, they could build that too.

_…_ _…_

I haven’t posted much over the past month because I’ve been beating hard on the 4th edition of my assembly language book. It’s coming out reasonably well, though I really miss the much-maligned Insight debugger, which I featured in the 3rd edition back in 2009. Most Linux debuggers are designed for C and C++ and don’t have an assembly source code view like Insight had. The source for Insight is available online, and if any of you are capable of creating an installable package, I encourage you to do so. I understand that the damned thing is weird internally, containing as it does the whole damned Tcl/Tk interepreter for the sake of its widget set. Or failing that, if anybody can recommend a standalone (i.e., not SASM) Linux debugger with an assembly view, please let me know. I’ve looked at a lot of them, including Nemiver, edb, and DDD without much success. I’ve thought hard about trying to teach my readers command-line gdb, or even gdb TUI, but naked gdb is a quadruple handful. My book is for absolute beginners, and I’ve got page-count constraints that wouldn’t allow me to teach enough of it to be truly useful.

Insight would be my first choice, but I also described Kdbg in the 2009 edition, and although the source is available and I’ve tried to compile it for modern distros like KDE Plasma and Linux Mint Cinnamon, the make failed for reasons that I don’t understand. Nor do I understand why it was pulled from all the Linux repos to begin with. It was robust and relatively easy to use. Could it be built as an appimage? That would be way cool.

Beyond that I’m certainly open to suggestions.

More AI Text Generator Freakiness

I tried it again. This time, I used a much more detailed prompt, which I’d written years ago (2014-ish) about a bottle that used to have a genie in it. The genie had been freed, leaving behind…a bottle. And what self-respecting genie would ever live in a non-magical bottle? So a nerdy guy buys a supposedly magical, genie-less bottle at a curio shop. The bottle, it turns out, has a trick: Ask it a question, and it answers.

Alas, the bottle has issues of its own.

I gave the prompt to Sudowrite, and let it follow its nose. Now, the way Sudowrite works is that when you ask it to write a section, it gives you two text blocks, both of which are based on the prompt. You choose the one you like better, and add it to the text that follows the prompt. Then you ask it for another section.

After a couple of go-rounds, I realized that in one of its generated text blocks, Sudowrite was putting together a sex scene. No sale. I chose the other block, which still had enough innuendo to make me uncomfortable. I sensed that in a sense it made a deranged sort of sense: I had described the protagonist as a lonely nerd. So! Toss him into bed with an imaginary girl who (the AI made graphically clear) had all the required female parts.

I stopped there. The first Sudowrite story I posted was in (somewhat) bad taste. I don’t make Obama jokes. Nor do I make Mossad jokes. I might make golem jokes, at least if the golem is the good guy. One reason I tried Sudowrite again today is that I wanted to see if bad taste was a habit or an outlier. It’s starting to sound like a habit.

Here’s the story. Everything up to the first rule is my prompt, taken verbatim from my notes file. I will someday use the concept (of a genie bottle without a genie) in a Stypek & Tuggur adventure, a prequel to Ten Gentle Opportunities. Everything after that is Sudowrite. Still a bit surreal–but if there’s a surreality slider somewhere in Sudowrite, I haven’t found it yet.


Djinn and Tonic

“What’s this?” Chuck Bialek asked the Gizmoids shop owner, and waved the weird, bulbous crystal bottle in the air over the counter. As best Chuck could tell, it was half-full of dirty water.

“Genie bottle,” said the old man. “But somebody let the genie go, so no wishes. Still, if you shake it and let it sit for a minute, it’ll tell your fortune. Used to be a hundred bucks. You can have it for fifty.”

Which meant it was probably worth a buck and a half, tops. Still, Chuck’s grandma had left him almost a million dollars, half of which was now in stocks. The rest was, well, for fun. He’d had a magic 8-ball when he was a kid. It was fun. This might be a reasonable facsimile.

Chuck laid a fifty on the counter, tucked the bottle in his canvas bag, and went back to his flat. After stuffing down a bratwurst and some Cheetos, he shook the bottle hard and set it on the kitchen table. Little by little, the dirt in the water settled out, leaving behind…words.

I miss my genie, read the words. Ha! He wondered how it worked.

“I wish I had a Jeannie to miss,” Chuck said. The nerd business was fun, but…lonely.

Chuck shook the bottle again, and waited.

Trade you a Jeannie for a genie, the dirt-words said.

“Deal,” replied Chuck.

 


His phone rang the next morning.

“This is Jeannie,” a voice said. “I’m with a Mr. Bialek, right?”

“Yep,” said Chuck.

“Trade?” asked Jeannie.

“What do you have in mind?”

“Wishbone,” said the genie.

“I wish you wouldn’t keep doing that,” said Chuck.

The Jeannie-thing giggled. “Make a wish,” she said.

Chuck thought for a bit. “I wish you were wearing a bikini.”

He hung up, and was on his way to the coffee shop when he heard a voice behind him.

“Trade?” asked the genie-Jeannie-thing.

“No!” shouted Chuck, and fled. He might be a nerd, but he was still the last straight guy in the world who hadn’t seen the Girls Gone Wild videos and had no intention of doing so.

He stumbled into the coffee house, and ordered a single-shot espresso with a splash of vanilla syrup. He had just opened a browser window and was trying to find a porn site that didn’t offer a free trial when he heard a voice behind him again.

“Trade?” asked the Jeannie-spirit.

“Are you nuts?” he said. “That’s the second time.”

“Make a wish,” said the genie.

“What does this do to your magic?” asked Chuck. “I mean, every time I make a wish, you get a day older.”

“Rhymes with night,” replied the genie. “So I’m immortal, just like I always wanted.”

“What happened?” asked Chuck. “I mean, most genies are pretty nice, but they had to have their masters’ best interests in mind.”

“My master was a fraternity boy. Couldn’t make a wish without prefacing it with ‘Yo, Genie…'”

“Oh,” said Chuck. “My apartment’s on the third floor. You can stay in the spare bedroom.”

“You’re a nerd,” said the genie. “We could never live together.”

“Right,” said Chuck. “So I need to make a wish for you to be you again. With unlimited magic.”

“I can do that,” said the genie.

“And I’ll need a million dollars. Are you listening?” asked Chuck.

“I don’t have to,” replied the genie. “From now on, I’m invisible to you.”

“This is going to get tiring,” Chuck told his computer screen. “I wish you’d figure out how to be a girl again.”

Will genie make the coffee? will genie make the toast? will genie make Christopher Hitchens read my manuscripts?

Will genie have sex, or merely masturbate?

Will genie remember to take out the trash?

Will genie notice her glasses are on her head?

Will genie give me a million dollars,

even if she does have the power?

Yes, genie will do all of these things.

Will genie kick my ass down the stairs

if I ask for more wishes?

 


Heh. Fersure.

If You Give an AI a Writing Prompt…

Ok. Fasten your seat belts. I am giving an online writing AI a test drive, using my free trial of a website called Sudowrite. I gave the AI a writing prompt from my crazy ideas file, a mere handful of words that I wrote down a very long time ago (I think in the ’90s) and never went back to. Here’s the writing prompt:

St. Louis Blues

“Take me to St. Louis,” said the cruise missle in the thick of the bramble patch.

Howie Hinkle blinked, and put down his machete. “How’s that?” he asked.

“Take me to St. Louis,” the missle repeated.

Howie howled. “Paw, dammit, there’s an old water tank in here and it’s talkin’ to me!”


It’s not a great deal to go on, but that was the idea. With a bare hint of a concept, what would Sudowrite do? I could have written some of it myself, or edited it, but I wanted to see what the damned thing could produce solo. 100% of the writing after the prompt was done by the AI. I had hoped to avoid the literary equivalent of Salvador Dali. Well, too bad. Hello Dali…


St. Louis Blues

“Take me to St. Louis,” said the cruise missle in the thick of the bramble patch.

Howie Hinkle blinked, and put down his machete. “How’s that?” he asked.

“Take me to St. Louis,” the missle repeated.

Howie howled. “Paw, dammit, there’s an old water tank in here and it’s talkin‘ to me!”

His father, Howard Hinkle Jr., took him for a look. The old tank was rusty and damaged, with a huge gash in it. Penetrating the tank from inside was a cruise missle, with a single eye and a fin on top. A single missile launcher poked through the gash.

“Who the hell are you?” Howie Jr. asked. “Why do you have a cruise missle?”

“My name is Shiloh,” said the voice. “I am a cruise missle, and I will ask you one more time to take me to St. Louis.”

“I don’t know where St. Louis is,” said Howie Jr.

“I will find it,” said Shiloh. “I am a golem of the Mossad. If you do not help me, I will call my brethren. We will clear the bramble from the road, and from there, we will find you.”

“Y-you can’t do that!” Howie Jr. said.

“If you do not take me to St. Louis, I will call my brethren, and we will take your woman, and we will bring her back to Tel Aviv. We will use her to breed a generation of human-missle golems. You can raise them with your own spector. They will be of your tribe, and they will spread across the land.”

Howard Hinkle Jr. swallowed, and wiped the sweat from his brow. “If I take you to St. Louis, will you let us alone?” he asked.

“I will,” said Shiloh.

“Deal,” said Howie Jr. “Let’s go.”

Hours later, a police car rolled up, and several officers got out. One pulled Howie Jr. aside.

“Which way did he go?” he asked.

“Er- he went that way,” Howie Jr. said, pointing.

“We appreciate your cooperation,” said the officer.

“Say,” the officer said, “was that your grandma that was in the hotel room with you?”

“Uhh, she’s my wife,” said Howie Jr.

“Doesn’t look like a 43 year old woman, honey,” said the officer. “What’s your name?”

“Howie, honey,” Howie Jr. said.

“Yeah, that’s what he said,” the officer said.

A week later, on the steps of the White House, President Obama announced the success of the St. Louis negotiations. Behind him, an Israeli flag hung. Beneath it, a Mossad agent clapped.

“What a complete dick,” said the agent. “He really thought he got one over on us, didn’t he?”

Shiloh’s eye blinked, and his fin wiggled.

Quo Vadis, Twitter?

Elon Musk just bought Twitter. For 44 billion dollars.

Egad, I could think of several thousand better ways to spend $44B. In fact, I brought the topic up ten or fifteen years ago, in an entry here called “If I Had a Billion.” Funny how I can’t find it now on Duck Duck Go, or I’d post a link. Maybe I just imagined it. Maybe I’ve been canceled. Maybe too many people want to talk about being billionaires and my post is down in the noise. No matter.

So what is the guy actually going to do with his new toy? It’s tempting to think of the acquisition as a shot across the bow of social networking, in essence saying, “You can be bought. You won’t like being bought. So lay off with the censorship already.”

Threats of that sort aren’t his style. My best guess is that he’s going to tweak a lot of noses by focusing on Twitter and allowing real discussions about formerly forbidden topics, like climate, race, COVID treatments, and such–you know, the things that have gotten a lot of people thrown off Twitter in recent years. I haven’t gotten thrown off because I’m careful about what I post. Being careful (and not spending half my life there) means I won’t get a lot of attention. (I will admit that mentioning my books on Twitter always sells a few. Otherwise I might have quit long ago.) I don’t talk about politics. And this is why I have 611 followers, rather than several thousand. Being famous is hard work. And if I’m going to be famous, I’d rather not do it on Twitter.

He could also order his techies to add an edit function to Twitter. Dare we hope?

I’ll hope. I won’t assume. Anyway. He could do a number of things to make the service worthwhile:

  1. Add edit functionality. Ok, that’s too easy.
  2. Expand the size of a tweet to 1,000 characters. Or 2,000? At their current length, tweets are most useful in online fistfights. Real discussion requires more space than that. Give users more space, and the quality of the dicussions almost can’t help but go up. I hope.
  3. Slow down replies and retweets. I’ve written about this here before. The idea is to exponentially increase the time it takes for a given tweet to “go viral.” One reply, instantly. Two, one second. Three, two seconds. Four, four seconds. Five, eight seconds. Etc. This would put a huge damper on Twitter lynch mobs. And one would hope that that the psychotic hotheads who comprise those mobs will get bored and go somewhere else. In their place will be slower, and (with some luck) more rational conversations. Read the entry I linked. I think it would work. I don’t think Mr. Musk will do it.
  4. Eliminate the “blue check” status game. Have one color check (which color doesn’t matter) indicating that the poster has proven that he or she is who they say they are and are not a bot. Require that “checks” use their real names. You’re either real or not real. Twitter has no damned business deciding who is important and who isn’t.
  5. Charge users by the tweet. Really. Retain free memberships, but limit the number of tweets that free memberships can post. Create brackets of paid memberships in which the highest paid memberships can post unlimited tweets, with less expensive memberships allowing fewer tweets. This would probably cut the number of Twitter users in half (if not more) but would bring in enough revenue to make the system pay for itself. And I can’t help but think that the people who would quit would be the people who make the most trouble. The quality of dicussion would almost certainly improve.

That’s what I have so far. One thing that I think would be very useful but I doubt anyone will ever do is create a federation API allowing different social media services to share messages among themselves. Maybe Twitter should become a back-end for systems that want to participate but also want to curate the content that their network allows. In other words, if people on the left want to toss out people on the right, and people on the right want to toss out those on the left, Twitter would take everybody and let individual users choose to follow whomever they please. Let the crazies have their bubbles. Make Twitter the Big, Here-Comes-Everybody bubble.

A system like that would take some thought and some serious work. It wouldn’t be impossible. (There’s something called Mastodon that has gone some distance in that direction, albeit at a much smaller scale.) And what it would create would be infinitely better than what we have now.

G’wan, Elon. Give it a shot. You own it. Now do what you do best, which is…surprising us.

Odd Lots

  • I got caught in an April Fools hoax that (as my mother would say) sounded too true to be funny: That Tesla canceled all plans to produce its Cybertruck. (Read the last sentence, as I failed to do.) I like Musk; he has guts and supports space tech. About his Cybertruck concept, um…no. It looks like an origami, or else something that escaped from a third-shelf video game. The world would go on without it, and he might use the money to do something even cooler, whatever that might be.
  • Oh, and speaking of Elon Musk: He just bought almost 10% of Twitter, to the tune of about $3B. He is now the biggest outside shareholder. This is not a hoax, and I wonder if it’s only the beginning. Twitter is famous for suspending people without explaining what they did wrong, sometimes for things that seem ridiculously innocuous. A major shareholder could put pressure on Twitter’s management from the inside to cut out that kind of crap. It’s been done elsewhere. And boy, if anybody can do it, he can.
  • Nuclear energy has the highest capacity factor of any form of energy, meaning the highest percentage of time that energy producers spend actually producing energy. I knew that from my readings on the topic. What shocked me is that there is in fact an Office of Nuclear Energy under the DOE. I’m glad they exist, but boy, they hide well.
  • The Register (“Biting the hand that feeds IT”) published a fascinating article about how C has slowly evolved into an Interface Definition Language (IDL). C was never intended to do that, and actually does a pretty shitty job of it. Ok, I’m not a software engineer, but the way to build a new operating system is to define the IDL first, and work backwards from there. C is now 50 years old, sheesh. It’s time to start again, and start fresh, using a language (like Rust) that actually supports some of the security features (like memory protection and safe concurrency) that C lacks. This is not Pascal sour grapes. I’m studying Rust, even though I may never develop anything using it. Somehow, it just smells like the future.
  • Drinking wine with food (as I almost always do) may reduce your chances of developing type 2 diabetes. It’s not taken up in the article, but I have this weird hunch that sweet wines weren’t part of the study. Residual sugar is a real thing, and I’m drinking way less of it than I did 20 years ago.
  • People have been getting in fistfights over this for most of a century, but establishing Standard Time year-round may be better than year-round Daylight Savings Time. I’m mostly neutral on the issue. Arizona is on permanent DST and we like it fine. The problems really occur at high latitudes, where there isn’t much daylight in winter to begin with, so shifting it an hour in either direction doesn’t actually help much.
  • There is Macaroni and Cheese Ice Cream. From Kraft. Really. I wouldn’t lie to you. In fact, I doubt I would even imagine it, and I can imagine a lot.
  • Optimists live longer than pessimists–especially older optimists. Dodging enough slings and arrows of outrageous fortune somehow just makes the whole world look brighter, I guess.
  • Finally, some stats suggesting that our hyperpartisan hatefest online has pushed a lot of people out of political parties into the independent zone–where I’ve been most of my post-college life. 42% of Americans are political independents, compared to 29% who are Democrats and 27% who are Republicans. I’m on Twitter, but I don’t post meanness and (as much as possible) don’t read it. And if Mr. Musk has his way with them, I may be able to post links to ivermectin research without getting banned.

The Publishing Problem That Dare Not Speak Its Name

Last week a friend of mine pointed me toward something I might otherwise have overlooked: Fiction editors at big NY imprints are quitting their jobs at a boggling rate. There was evidently a Twitter meltdown back on March 11 about the Big 4 (or is it 3? 5? 2.7343? ) losing editors and not being able to find new ones. The trigger was evidently a junior editor at Tor (the SFF imprint of Macmillan) writing a longish note on why she was quitting. Molly McGhee loved the work and did it well, but there was far too much of it for what she was paid. And so she quit.

She was not alone. This appears to be a trend: Fiction editors at NY imprints are bailing in droves. A number of other articles on the topic have appeared in the days since. (Beware: Google the topic and you’ll find a lot of articles about editors resigning due to racist accusations and other weird things, but that’s all old news, going back to the last years of the oughts. This is something much more recent, and completely different.) People aren’t screaming about racism or sexual assault. It’s all about too much work for too little pay. The New York Times asks, “When Will Publishing Stop Starving Its Young?” (paywalled) What they don’t ask is why they’re starving their young to begin with.

Indeed, there is this peculiar air of mystery hovering like a grim gray cloud over the whole unfortunate phenomenon. Why are the big NY imprints treating their staff so badly? Nobody seems willing to even venture a guess. Question marks buzz around these articles like wasps from a poked nest. Want an explanation? I can give you one, an explanation that none of those articles mentions at all:

Indie authors are eating NY’s lunch.

And their hors d’oerves. Not to mention dinner. And their bottomless bags of Cheetos Suzettes. It’s the publishing problem that dare not speak its name: Basically, Kindle is detroying the NY publishing business model. So far it’s just fiction. Technical nonfiction can be a gnarly challenge for ebooks. But I’ve also read a lot of indie-published textual nonfiction ebooks in the last couple of years. For titles without a lot of diagrams or source code, it’s no greater a challenge than novels. Once you know the tools well, a reasonable text-only ebook can be laid out in an afternoon. (I do it all the time.) It doesn’t take weeks or thousands of dollars of hired help. The NY presses lie like rugs: Ebooks are not as costly to produce as print books. And once produced, there’s no printing costs or warehousing costs. Unit cost for the product is zero. Sure, indies have to pay for freelance editing services, and probably cover artists. I maintain that anyone who can write can lay out their own damned ebooks. Lots of people I know are doing it all the time and have done it for years. The cost of entry isn’t zero, but it’s a lot less than New York City.

A huge part of this is the peculiar business model that has grown up around hardcover editions since WWII. I’ve written about this at some length. We had to cope with it at Coriolis back in the 1990s. We did as well as we did for as long as we did in large part because we were not located in luxury pestholes like New York City. Publishing is a low-margin business. It cannot succeed in the cores of monster cities. Rent is soaring in most large cities. You can’t pay staff enough to afford local rents. These days, a publishing company can be spread out among several small towns, or anywhere Zoom-capable broadband is available. NYC culture is its own worst enemy: Smaller cities don’t have the nightlife that huge urban centers have. People who demand that nonstop nightlife won’t be happy in Des Moines or Omaha–much less Flagstaff. But those are the sorts of places where publishing can thrive in 2022.

Will Molly McGhee move to Omaha? Somehow I doubt it.

This doesn’t mean I don’t sympathize. Big companies need to pay their people well, or staff will quit and start careers in other industries. Amazon has trained its customers to feel that ebooks should not cost more than $9.99, You have to operate somewhere that a $10 ebook will pay your bills. That is not NYC. Or San Francisco. Or Chicago. Or LA. Alas, it probably isn’t Phoenix anymore either, though it certainly was when I created Coriolis in 1990.

There are other issues: Spreadsheets now run traditional publishing. Editor instincts matter a lot less than they did 30-40 years ago. The people who make decisions at big publishers (as a friend of mine said years ago) are people who don’t read books. There is also a sort of near-invisible good-ol-boy/girl network in NY that decides who gets promotions and plum positions. It’s gotten to be more who you know than what you know. Choosing the right parents and getting into Harvard now matter a lot more than talent and hard work.

In the meantime, NY publishers who are short on cash are cancelling recently acquired books and putting more muscle behind their existing midlist. They claim (and lie, as do other businesses) that they can’t find anybody to fill positions of those who quit–and then pile the work of vanished staff on staff who remain. Not hiring people is a great way to save cash, and you can always blame the pandemic, or supply chain problems, or the Russians. (Everybody else does.) Rents are up hugely in the big cities. Editors can’t work for peanuts when rent is caviar.There’s a deadly feedback loop here that I don’t need to describe in detail. Do the math.

New York City is too expensive for book publishers. Really. There is absolutely no reason for publishers to remain there, now in the age of Zoom. The city’s fixed costs are astronomical. To make any money at all, publishers have to keep ebook prices just a hair below hardcover prices. Making ebook prices higher than trade paperbacks is nuts–unless you simply can’t abide the idea of ebooks and are privately terrified that they will drive those essential hardcovers into a relatively limited luxury market. Which they will. And then Boom! goes their business model.

I still see articles online claiming that ebooks never really took off, and indie publishing is a tiny little corner of the publishing world. Tracking indie ebook sales is essentially impossible, so a lot of publishing pundits simply ignore them. If you can’t plug a number into a spreadsheet cell, the item in question might as well not exist. My conversations with indie authors gives the lie to that delusion. They’re making money. Few are making their entire living from indie publishing–but how often did authors make their entire living writing under traditional publishing? Damned few, and only the most famous.

There is middle ground, in the form of small press. Coriolis was a small press, even at our biggest, because, well, everything is smaller than Macmillan. My hunch is that many editors who bail out of the Big Apple may be quietly hunting down jobs at smaller presses in smaller cities. (The editors are not alone.) Enough of that, and the notion of Manhattan Publishing will quietly fade into the background, obscured by the taps of tens of millions of fingers moving to the next indie ebook page.

Progress Report and Excerpt: The Molten Flesh

I’m now about 40,000 words into The Molten Flesh, which is nominally the sequel to The Cunning Blood. It’s a sequel in the broader sense of a story told in the same universe but not focusing on the same characters or planets. The single exception is Sophia Gorganis, who has a cameo in a flashback set a few years earlier than the action of The Cunning Blood. The focus is now on a different nanotech society and device: Protea, a synchronistic combination of the human body and a nanomachine that is present in every part of the body, up to and including the brain. The same general nano/human typography conventions apply: Subvocal human speech to the nanomachine is enclosed in vertical bars. The speech of the nanomachine to its operator is in italics. Those conversations are private; onlookers cannot hear either side.


From The Molten Flesh, Chapter 13

Copyright 2021 by Jeff Duntemann. All Rights Reserved.

Halifax fired its main engines as soon as its shuttle repair bay doors closed behind Hubbardton and sealed. Like everything else about Halifax, the shuttle bay seemed out-of-scale. At least three fourth-generation shuttles could line up side-by-side for repair or storage. Ron eyeballed that in a pinch, it could stuff away five second-gen shuttles.

The lock pumps had the repair bay pressurized in less than ten minutes. Cory Ellis went down the ladder from the shuttle’s lock. Ron jumped. It was hard for the big ship to be in a hurry. Acceleration was only half a gee. The air in the bay still held the flinty scent of bare metal and fresh plastic. “New starship smell,” Ron said, chuckling.

No sooner had the pressure all-clear horn sounded than five crew entered the repair bay at a run. Three men and two women, all young-Ron pegged them at under thirty, a couple of them way under thirty. A reasonable security detail, he supposed.

Ron blinked. The tall blond woman had the captain’s golden galaxy over her heart. The shorter, dark-haired woman had the drivemaster’s braided golden ring. |Something funny is going on here.|

The captain is Bronya Azarova, born in Kraznoyarsk. 27 years old. The drivemaster is Sally Ann Gildea, from Cincinnati. 25. Both are Star Academy graduates. I cannot identify the men with any certainty.

|Neither was in the top ten of her class, or I’d have heard the names. You’d think they’d send someone a little more seasoned to run a starship the size of a small town in Nebraska.|

There’s not much running to be done. The whole point of the fourth generation was to allow AIs to do nearly all of the decision-making. No more human error. Safe.

|I guess Star Academy was one way for a girl to get her ass out of Siberia.|

Ron was bemused but pleased. A more seasoned captain like Sophia Gorganis could have caused a lot more trouble. He walked behind Cory as they approached the detail. When Cory got a few meters from Bronya, the rest of the detail stepped back. Bronya stood her ground.

“Mr. Ellis, what do you think you are doing?” Her accent was pure, her face a blond-framed sneer that suggested contempt painted over terror.

“I’m saving my life and yours.”

Chush sobachya. Give me the keys to the drive.”

Cory tilted his head toward Ron. Ron dug in a pocket and held up the keys like a hand of cards.

Bronya reached into a hip pocket, and pulled out a 9mm sidearm. She stepped around Cory and with both hands aimed it square at Ron’s sternum.

|Mush matrix, full torso. Fast!|

It’s mostly still there. Give me two minutes. Keep her talking.

Cory ducked to Ron’s left. “Bronya! Stand down! What did Star Academy teach you about firearms in a spacecraft!”

She didn’t move. “Ron Uhlein taught me starships are tougher than that. Keys, Mr. Uhlein.”

Ron tucked the keys back into a pocket. The heat of Goop’s rearranging his body was bringing sweat to his forehead. Not ideal, but unavoidable. Keeping her talking might be hampered by his not knowing Russian-but he would try. “I like your style, kid. Come work for me and give 1Earth a spanking. You know damned well what they’ll do to you when you go home without Halifax.” He pointed at her left breast. “You earned that galaxy. I suspect I helped you earn it. I’ll let you keep it. I’ll send you to star systems nobody else has ever been to.”

The pistol quavered in her hands. “Give…me…the…keys.”

“How about revenge? The Canadians stomped your nation and killed several million of your people. They stomped my nation too-and now they’re so scared of us they don’t travel outside the cities. I’ll bet it’s the same in Russia. Let’s you and me put together a new alliance: Rural Russia and rural USA, against 1Earth.”

Bronya licked her lips. “You are a thief and a traitor.”

“I’m a free man.” He took a step forward. “Are you a free woman?”

“I am a citizen of Earth.”

“A planet that’s mostly turned its back on star travel. However it was you got lucky enough to take this monstrosity out of Earth orbit, you’ll never be that lucky again. I’m your last chance to use your galaxy, kid.”

Long seconds passed. Bronya’s face showed torment. Ron kept his hands in his pockets. Close-range slugs would do less damage to a mush matrix in his chest than to his arms and legs.

Then, from Hubbardton, behind them. “Bluster! Fake!”

Ron cursed. He had ordered Alyssa to stay on the shuttle. The girl walked directly toward Bronya, yelling, “Orphan! Forgotten! Lonely! Bitter!”

Bronya is indeed an orphan, and has been since she was fourteen. The matrix is now in place.

Bronya swung the pistol toward Alyssa. No way! Ron jumped. The half-gee fake gravity threw off his aim. He stumbled, his shoulder lowered and aimed at her ribcage. The woman had reflexes; she dodged, spun back and pumped two rounds into his chest before he connected. The kinetic energy of the slugs slowed Ron a little but caused him no pain beyond a strong thumping where the mush matrix absorbed the rounds’ energy. She tried to side-step but not quickly enough. Ron caught her free arm and kicked Bronya’s legs out from under her. She hit the floor ass-first and fired again. The slug went ching! against the metal deck.

“Drop it!” Ron yelled. Bronya, grimacing, tried to swing the pistol back toward Ron. He grabbed her wrist and squeezed hard. “I said drop it!”

She reeked of sweat. “I know what you do! You are a monster!”

“I do what I have to do.” |Pain #4. Thirty seconds’ worth. Go.|

Goop squeezed the neurostimulant into Bronya’s arm. The woman inhaled a ragged breath, and screamed. The pistol hit the steel deck. Ron shoved himself to his feet. Bronya thrashed on the deck, holding one arm in her opposite hand, whimpering between full-throated screams.

The three men from the detail fled the repair bay. Sally Ann stepped backwards several meters, but continued watching. After thirty seconds had passed, Bronya let herself fall flat on her back, breathing quickly, tears smeared across her face. Ron looked her in the eye as he picked up the pistol and tucked it into another pocket. He cupped a hand below his ribs. Goop expelled the spent slugs. Ron reached out his hand and let them fall half-gee gently on Bronya’s chest. “Captain Azarov, I believe you dropped these. Oh…and I withdraw my offer.”