Jeff Duntemann's Contrapositive Diary Rotating Header Image

None Of The Above

Anything that doesn’t fit into existing categories

Odd Lots

The End of the Bluecheck Blues

Yesterday was the end of the line for the Twitter bluecheck. You can still get one, but you’ll have to pay for it. And anybody who has a bluecheck but won’t pay for it will lose it, as of (ostensibly) today. If you can pay for it, you can get it. (I believe you only have to prove your identity.) It will cost you eight bucks a month. What’s that? Two lattes at Starbucks? Cheap! But as it happens, paying for it isn’t the point.

Duhhhh.

There are a couple of problems with the pre-Musk bluecheck. It was free, but bestowed only upon those judged worthy, via a process completely opaque outside of being politically slanted. This led to a noxious side effect: It created a sort of online aristocracy with a built-in echo chamber that dominated the whole platform.

Elites are always a problem, because they consider themselves above the condition of ordinary people and not bound by ordinary people’s limitations. On Twitter, they’re mostly just stuffed shirts who lucked into Harvard and scored a job in a newspaper somewhere. (Or just happen to be celebrities famous mostly for being famous.)

Much bluecheck dudgeon has been hurled around about having to pay for what was once free, or (way worse!) knowing that any prole with 8 bucks to spare can have the same badge. The connotation of the badge changed, from “I‘m a demigod” to “I support the new Twitter.” OMG! NO WAY! I’M LEAVING!

The big question now, of course, is whether the malcontents will actually leave the platform. We all know how many people threatened to quit Twitter when Musk bought it. The Atlantic has an interesting article on the phenomenon. (Nominally paywalled, but they will give you a couple of free articles.) I’ve posted here about the supposed mass migration from Twitter to Mastodon. Mastodon grew hugely after the beginning of the Musk era, to the annoyance of a lot of long-time Mastodoners. The open question is how thoroughly the emigrants burned their bridges as they went.

This month we may finally find out.

Flashback: Delores Ostruska 1924-2013

Carol’s mom left us ten years ago today. I miss her; she accepted me into her family quickly and the warmth I felt in her presence never faded as long as she lived. I wrote an entry in her memory on February 4th, 2013, which I will republish here verbatim, to remind myself and all of us how truly good people affect everyone and everything around them for the better.


Carol’s mom has left us. She died quietly this past Saturday after a long illness, at a nursing facility near her Crystal Lake, Illinois home. Her daughter Kathy was by her bedside, and her two grandsons Brian and Matthew had visited her earlier that day. She was 88.

Most people in our time are lucky to have two loving parents. Somehow, incredibly, I had four. I met Delores on August 2, 1969, when I came by their house to pick up Carol for our first date. I was 17, a little scruffy, and undoubtedly, well, odd. No matter. Delores smiled and welcomed me, a welcome that never faded. Carol’s dad was a slightly harder sell, but I won his esteem by treating his daughter with respect and kindness. When I bought a lathe in 1977 he stabled it in his basement, and over time he taught me what he knew about its use, which (considering that he could grind a carbide die to a ten thousandth of an inch accuracy) was pretty much everything.

On many Sundays Delores prepared family dinners for which her sisters Marie and Bernice and her Aunt Marie and Uncle John drove up from the South Side. Pork roast, salad, vegetables, bread, dessert; a huge spread brought to the table hot and perfect in all ways. I had a place at that table, as later on Kathy’s boyfriend/fiance/husband Bob did as well. It was decades before I knew the term for the feeling that hovered all about us in Delores’ dining room, but when I found it, many things fell into place. It was unconditional love.

I had had that from my own parents, of course. And even my own father was a bit of a hard sell, since I bore little resemblance to the rowdy boy that he himself had been and expected his own son to be. All the more remarkable that Delores and Steve embraced me almost immediately as one of their own.

Delores was a child of Polish-American heritage, youngest daughter of a large family, who was born and grew up on the Near South Side of Chicago. She belonged to a group of very close teen girlfriends who called themselves The Comets. They were capable and confident girls, journeying around the city for fun, and even slept on the sand of Chicago’s 31st Street Beach. She quietly rejected the dour Polish pessimism of her own parish church, and far preferred the exuberant Catholic culture of an Irish parish a few blocks away. She believed all her life in an infinitely loving God and the goodness of all His creation. When I began struggling with my own life of faith at the dawn of middle age, it was her example that helped bring me to the unbounded and unshakable Catholic optimism that I hold today.

Delores worked at the US Treasury in downtown Chicago, where she helped trace lost and stolen US Savings Bonds. During WWII she met and in 1947 married Steve Ostruska, one of her brother Charlie’s Navy shipmates. After Carol was born the family moved to Niles, Illinois, where Delores lived for over forty years before moving in with her daughter Kathy in Crystal Lake.

Every summer while the girls were small the family vacationed along the lakes near Hayward, Wisconsin, where Steve fished for walleye and city girl Delores learned to love the outdoors. The photo at the head of this entry is from a vacation that she and Steve took to Clam Lake in July 1948. It’s not fair to picture her as an elderly woman when she has already broken the bonds of this Earth and risen triumphantly into the arms of the God she so strongly believed in. I prefer to recall her as the beautiful, vigorous person she was most of her life. In truth, all the time I knew her she glowed wth the quiet, invincible light of unconditional love, and if there’s anything closer than that to the ineffable light of God, I don’t expect to see it in this world.

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.