Jeff Duntemann's Contrapositive Diary Rotating Header Image

A New Twitter Year

I don’t know how he does it. Really. Elon Musk started companies to make electric cars, orbital boosters, subway tunnels, and probably others I haven’t heard of. And then he bought Twitter and put it on his Discover card. (Sorry, dumb joke. It was actually his MasterCard.)

However he did it (and I think he paid way more than it was worth) he now owns Twitter outright. You could hear the screams out to the edges of the atmosphere: Musk is literally Hitler! Twitter is a hellscape of viewpoints I disagree with!  Twitter is literally genocide! The first thing our man Elon did was what needed doing most: Purging accounts trading in child sexual abuse material. The second most important thing: Ending the Blue Checkmark as a badge of the anointed elite. He now sells them for $8 a month. I’ll probably get one sooner or later, just to support him.

Twitter is now what it was intended to be: a virtual town square where lots of interesting things can be discussed and linked to. No more shadowbanning. No more throttling of reach. No more colluding with the Feds to suppress viewpoints that the Feds don’t like.

It’s not like there are no rules. As I mentioned above, Musk declared war on Twitter accounts that trade in child sexual abuse content early in the game, and has canceled tens of thousands of accounts for breaking those rules. There are rules against impersonating other people, and probably some others that I’m not aware of. Closer to home, I find I can post articles about “forbidden” COVID treatments, along with other contentious health issues, like whether or not red meat is a precursor to cancer and heart disease. I tried to do some of those posts a year or so ago, and every one got shot down. I had to call Ivermectin “IVN” and hope people could read the code.

All gone, and good riddance.

I don’t engage in political arguments for the most part, so I’ve not heard much of the blood and thunder raging between those who liked the old Twitter and those who prefer the new. I have seen a lot of former bluechecks claiming to have left Twitter (whether they deleted their accounts in the process or not is often hard to tell) and go elsewhere. I find it interesting that the elsewhere of choice (there are actually quite a few) is Mastodon.

Mastodon is probably the largest single player in what insiders call “the Fediverse” because of the way that Mastodon (and some others like it) operate. Mastodon as a whole is actually a collection of seperate Mastodon servers (“instances”) operating as peers over a protocol called ActivityPub. Each instance controls who can join and who can be blocked, from individuals up to whole other instances. From what I’ve read, there is a great deal of blocking going on right now. And that’s all to the good; that’s what federation is for: local (rather than central) control. If you don’t like the people on one instance, go find another. If you keep getting blocked, maybe you need some quality mirror time.

There are three major problems with the Fediverse vis-a-vis Twitter:

  • If members start doing illegal things (like posting child sexual abuse material) the operators of the instance may be held responsible by law enforcement. Musk has people paid to moderate against this. Moderation is neither cheap nor free. I doubt that more than a tiny fraction of Fediverse instances have the resources to police such things.
  • Similarly, if members of an instance start posting copyrighted material, the operators of the instance have to have a way to handle DMCA takedown notices. Disney in particular has no mercy about such things, and infringement can be very costly. Again, guarding against illegal activity takes paid staff once an instance has more than two or three dozen members.
  • No matter what the Fediverse does or how large it gets, members of any given instance will not have the reach that they did on Twitter. There are no real metrics on how much reach some instances have, given all the bitching and blocking going on right now. In a couple of years we may know more. But given the nature of federation, measuring reach may simply be impossible.

Although I like federation as a concept, to me these downsides are showstoppers. I wish all the Mastodoners good luck. They’re going to need it.

I do have some predictions about Twitter for the new year:

  • Fairly soon, Elon Musk will hire someone who understands his management style as CEO of Twitter, and that individual will do what Musk wants. This is what all the nonsense about Twitter deciding via poll whether he should step down or not was about. He knew damned well he was going to step down as CEO in favor of a hand-picked successor. He has a lot of other irons in some very big fires.
  • The rules governing moderation will be clarified.
  • Twitter will establish a policy of not cooperating with governments in censoring viewpoints or “misinformation” that cooks down to things governments don’t like.
  • The saner people who bailed out of Twitter for the greater Fediverse will (quietly) come back to Twitter once they realize how few people can hear them.
  • The genuine headcases (most of them celebrities) will stay away. Or let us fervently hope.

I like Twitter, though I don’t spend a great deal of time on it. That said, I predict that this will be the best Twitter year since…ever!

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.”

Flashback: New Music on YouTube

I posted this entry last year on 12/23. I haven’t discovered a lot of new Christmas music since then, so I’ll repost the entry here in its entirety. This may become an annual thing, plus new tracks as I discover them. So earbuds on and enjoy!


As we close in on Christmas, I wanted to post a few items I’d found and liked on YouTube. Nearly all of it is Christmas music. (I’ll post some other non-Christmas discoveries in a future entry.)

And that, my friends, is precisely what Christmas music is for.

Odd Lots

Now Available: “The Camel’s Question”

CamelCover-500 wide.jpg

“Listen, young ones, for I, Hanekh, am a very old camel, and may not be alive to tell this tale much longer. Listen, and remember. If I leave nothing else behind but a spotty hide and yellow bones, I wish to leave this.”


So begins my latest ebook publication, “The Camel’s Question .” It’s now available on Amazon for 99c. It’s a short story, not a novel, and won’t taken you more than ten or fifteen minutes to read. There is a story behind the story, so what better place to tell it than here?

In the spring of 1966, when I was in eighth grade, we were tasked to write a Christmas story. It wasn’t required to be fiction, but it had to be about Christmas. So in longhand on yellow paper I wrote a story I called “Master Melchior and Me.” It was about the camels that carried the Three Wise Men to Bethlehem. We read our papers aloud in class, and when I finished reading mine, the class applauded. I had apparently touched a nerve.

I began with the title, which was inspired by a 1953 Disney animated short, “Ben and Me” about the humorous adventures of a mouse living in Ben Franklin’s house. I actually pictured it as Disney-style animation. Remember that I was 13, and “young for my age.” I was writing fiction already by 8th grade, and tended to picture it in my head as cartoon animation. I think I intended to make it humor, but as has happened so often with me, my subconscious had other ideas. The story was serious but upbeat, about a lesson one of the camels learned from the Christ Child.

Jump ahead a few years, to the fall of 1972. My father was battling cancer and losing, My poor mother was worn out by both working as a nurse, and nursing my father past the crude, debilitating, and ultimately futile radiation treatments. I wanted to give her something that would get her mind off her troubles for a few minutes. I was a junior in college and by then had taken a lot of literature courses. I realized that I had written a fable, which is an ancient literary form in which animals are made to think and talk like humans to put across a moral.

By 1972 I had already lost the original handwritten manuscript, so I started at the beginning and told it again, having in the meantime grown mostly to adulthood and written a lot of things, fiction and nonfiction. I didn’t like the title, as Master Melchior at best played a background role. But I didn’t know what to call it, so I kept the original title. The story, however, was lengthened, deepened, and in some respects moved a hair to one side of being a true fable.

It didn’t matter. I gave the typewritten manuscript to my mother as a Christmas gift, and she was deeply moved by it. The typescript went into her dresser, and Gretchen and I found it after mother died in 2000. I scanned it, OCRed it, cleaned it up a little (but surprisingly little, after 50 years of additional practice telling stories) and gave it a new title: “The Camel’s Question.” Of the three camels, two are fairly ordinary. The third–well, he’s a skeptic and a contrarian, and asks a great many questions about the world and its workings, and the men who dominate the world and the lives of camels.

One of those questions is a doozy.

And that’s where I hand the baton back to you. The story’s out there if you’re interested. It sat in a box for literally fifty years. Better late than never, I guess. It’s dedicated to my mother, who suffered far too much but never failed me in any way. It’s only the third story I’ve ever written with no fantastic elements in it.

Ok, ok. Talking camels. I did the best I could with what I had.

Thanks in advance to all who buy it and read it.

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?

The Mastodon Hunters

Well, I didn’t expect this, though I probably should have: A huge wave of former Twitter bluechecks and their followers have descended upon the Mastodon Federation, and–sunuvugun–they’ve started throwing spears at each other.

First of all, for those who have never heard of it: Mastodon is a social network modeled superficially on Twitter. It’s distributed, in that anyone can create a server instance of Mastodon, and connect to other Mastodon instances through an underlying protocol called ActivityPub. It’s very cool in its own way, and brings other (ancient) distributed social networks to mind, like Fidonet and Usenet. Within a server instance, members can post and read tweet-ish things called “toots.” Theoretically, any Mastodon instance (there about 7,000 of them) can trade traffic with any other Mastodon instance. Content moderation, codes of conduct, and control of what other instances can share traffic are entirely under the control of the members of a given instance. There is no centralized management. Each instance governs itself.

So NPR’s Adam Davidson set up a Mastodon instance called journa.host, mostly targeted at journalists fleeing Twitter. The journa.host instance now has about 1,600 members, though that number doubtless changes hourly. I’ve cruised some of the posts, and it looks a great deal like the sort of stuff we’ve always seen on Twitter: some interesting, some blather, and some complaining about the indiscretions of others. Here’s the weird part: Almost immediately, fights broke out.

Maybe that’s not weird. Maybe that’s just how social networks operate. In this case, it had repercussions: A great many Mastodon instances, told by one malcontent or another that journa.host was transphobic, decided to block journa.host entirely. If you read Twitter, look for posts by @ajaromano, a bluecheck journalist who’s been trying to figure out why journa.host is being blocked so much. There’s a threadroll here. She’s trying to pin down what makes journa.host transphobic, and so far she got nuthin. Someone linked to a transphobic NYT article? Seriously? The NYT?

What this leaves us with is basically a Twitter-flavored forum with 1,600 members, shunned by all the other major Mastodon instances. So much for having 75,000 followers.

Now, why? I seriously doubt journa.host did anything transphobic or Aja Romero would have found it by now. I think the problem is much simpler and more mundane: Longtime Mastodon users think the wave after wave of Twitter refugees are ruining the neighborhood. The federation network can’t crash, but massive activity spikes can slow things down enough so that it might as well have crashed.

I’m not sure why it should be so, but I’ve read that Mastodon leans left. So in a way it’s the perfect solution for people who hate Elon Musk enough to bail on Twitter, leaving their blue checks and their thousands of followers behind. Alas, right now it looks a lot like Mastodon’s fediverse is the Holy Roman Empire of social networks: thousands of dukedoms, city-states, and strange little scraps of intellectual backwaters and walled fiefdoms that just don’t talk to anybody else and occasionally start throwing rocks.

What happens next? Nobody’s saying it out loud, but I’ll hazard a guess: They’ll soon be back on Twitter. How soon? A month or so. We won’t know for sure because they won’t want to admit it, but Twitter is successful because it’s big. Musk will eventually figure out how to make it pay. The real interesting question is what shape the Mastodon fediverse will be in come the new year. What’s the sound of one instance banning?

Silence. Heh.

The Great 2022 Mastodon Migration

My God, you’d think the world was ending. The screaming, yowling, weeping and rolling on the floor in the wake of Twtter’s acquisition by Elon Musk is something to see. I’m interested in Twitter because for me it fills a need: quick announcements, wisecracks, indie book promo, Odd Lots-style links to things I find interesting or useful….so what’s not to like?

One thing, and one thing only: disagreement.

But that’s the viewpoint of the bluechecks, not me or most of my friends. The bluechecks are fleeing Twitter. Where to? Mastodon, mostly. Poor Mastodon. Gazillions of new users are arriving, with so little computer smarts that they can’t figure out how to use the platform. Mastodon has a lot of promise. This is their chance to make the bigtime, instead of lurking in the shadows of all the monumentally larger social networks. I’m very curious to see what they make of it. I wonder if they understand the demands that will be made of them: Forbid disagreement with…anybody I don’t like.

There was a time when disagreement was a learning opportunity. Or most of it, anyway, at least disagreement among reasonably intelligent people. But that was way back in the ’70s. As we slid into the ’80s, disagreement became insult. I avoided disagreeing with people of a certain psychology, knowing that they’d just get bright red and scream at me before I ever had a chance to make a case for my own positions.

The ’80s were the era when, little by little, I stopped going to SF conventions. Why hang out with people who’ll jump down your throat at the slightest hint of disagreement? I missed the social element of conventions, but by 1985 or 86 cons had gotten so toxic I just stopped going.

(These days I go to one con a year: Libertycon, where I know I won’t get screamed at for having ideas at odds with the bluecheck zeitgeist.)

Now, in the Groaning Twenties, disagreement is first-degree murder. Or genocide. Or maybe the heat-death of the universe. Does it bother me? No. It makes me giggle. I’ve been called a racist and a fascist and a few other more peculiar things. Like I said: I giggle. It’s all so silly. I still write subversive hard SF and program in Pascal. I am what I am. You can’t change me by screaming at me.

Why have I gone on at such length about the disagreement phenomenon? Easy: After years of being a staunchly defended echo chamber, Twitter is now trying to become a profit-making enterprise. I used to pay for CompuServe. If Twitter becomes a paid service, I will pay a (reasonable) price for a subscription. I get the impression (and admit I could be wrong; we’ll see) that Twitter will moderate people who use dirty words to denigrate other people…but won’t ban those posting links to peer-reviewed research showing that Ivermectin is an effective broad-spectrum antiviral.

That would be a tectonic change in the social media universe. It’s going to take a few years for Elon Musk to figure out how to do it. But that dude can orbit 52 telecomm satellites in one damfool rocket…I’m not willing to speculate on what he can’t do.

So. Has Twitter changed since the Great Mastodon Migration? A little. In scrolling down through my Twitter posts over the last month or so, I see a few replies have gone missing, doubtless originally posted by people who are now tooting their little hearts out over on Mastodon. With only a few exceptions, the bluechecks have very little to say that isn’t abject fury at people who disagree with them. (And to think I almost majored in journalism, sheesh.)

Musk is laying off thousands of people. The firm can either survive without them or fold. Me, I’m pretty sure the whole damned operation could be run by a thousand or so good, smart, devoted staffers. The trick is to find and motivate such staffers. I suspect Elon Musk can do it.

In the meantime, the bluechecks are fleeing. G’bye, guys! Have fun over on Mastodon! Here on Twitter we’re still having a wonderful time! (I’d say, “glad you’re not here,” but I’m too nice a guy to do that. What else could you expect from a Pascal programmer?)

Odd Lots