Jeff was the first. We met at an after-school program. Half an hour into it, he told me, “We’re gonna be friends,” and he was right. Jeff was charming and had a way of making you feel like you were the coolest kid around. I wasn’t, but that’s how I felt around him.

Jeff introduced me to Tony. Tony is on the short list of the funniest people I’ve ever known. He was quick-witted, in the same way Usain Bolt is quick at running. He’d have us howling with laughter one moment, and a moment later we’d be speechless, contemplating a shockingly insightful observation. I’ve known few people who saw and understood as much of the world around him as Tony did.

Tony introduced me to Chad. We quickly became best friends. Chad was somehow funnier and quicker to laugh than Tony. He eventually ended up with a successful nightclub comedy tour to prove it. Chad was not the most educated person I’ve known, mainly because other things caught his attention. He could’ve been a rocket scientist, or surely a lawyer, if he’d wanted. He didn’t.

Jeff was the first of us to leave home. He joined the Army and went to Iraq in 1990. He came home mostly the same guy we’d always known, just beset by random, unusual ailments.

I left on my own adventures soon after. When I came home, I saw Chad often, Jeff periodically, and Tony rarely. We were still good buddies, but you know how life gets. We got busy in our own ways. Soon we hardly saw each other. I didn’t, at least.

I kept in touch with Chad the most. I can’t say he was a good influence exactly. However, his heart was always in the right place. He’d call unexpectedly: “This is a collect call from the county jail from… Chad. Will you accept the charges? Hey, I’m glad you’re home! Hah, so, I kinda did something stupid…” While he never did anything outright bad, he made his share of mistakes. I won’t share the best of those stories here. Buy me a drink sometime and I’ll have you crying from laughter. Trust me on this. Still, most importantly, he owned his errors, learned from them, and genuinely got back on the right track.

It was Chad who called me a several years ago. “Hey, uh, did you hear about Tony?” Tony’s life hadn’t been as colorful or funny as Chad’s. While I don’t know the details, I understand he’d seen some rough years. Still, not so many that I’d have thought his bright light would burn so briefly. It surprised all of us. Tony was far too young to have gone away. He went anyway.

A few years later, I got the news about Chad. He was young, active, healthy, and still passed away in his sleep. That hurt, more than I can describe. There’s no way that should have happened, yet it did.

Shortly after, Jeff called and left a voicemail. He said he was sick. I’d known, via Chad, that Jeff’s exposure to who-knows-what in Iraq had left him physically broken. The Army eventually agreed and gave him reasonable disability benefits. I don’t think I wanted to believe that he was genuinely that sick, though. Besides, we hadn’t talked in decades. What would we even have to discuss? We’d walked very different paths in the many years since, and while I still thought the world of him, we didn’t have a lot left in common. I didn’t call him back.

Yesterday, my wife turned to me: “I hate to be the one to tell you, but Jeff’s gone.” She shared pictures from his Facebook. His eyes didn’t have the bright, lively expression I’d known in him since that first day. He looked haunted. His brain got sick in a way that isn’t supposed to happen until we’re old. Fate didn’t wait, though.

That was hard to hear. Harder was the realization that I’m somehow the last of us. I’m far, far too young to be the last of our group left. I mean, I still have plenty of friends, mainly those I’ve met since I moved away from our childhood home. There are plenty of friends there, too, including many we all ran around with. But my inner circle, at that place, at that time? It was Jeff, Tony, Chad, and me. Now, it’s just me.

I’ll be OK after some wallowing in self-pity. Life goes on. Just do me a favor, OK? That old friend you’ve thought about but haven’t said hi to in years? Do it. Do it for me, for Jeff, for Chad, for Tony, and for everyone else we can’t reach out to anymore.

I love you, my brothers.

Sony makes bold claim about game ownership

Sony makes bold claim about game ownership:

Sony’s argument is that players not only know that they are licensing software, they have a strange bizarro world take on ownership of software itself to back it up. In their proposed thinking, software cannot be sold because it is not finite, therefore you can’t sell the singular instance of the software without taking said software away from anyone else who might want it.

Your periodic reminder that Sony hates its customers and invents new legal fictions to punish them.

Apple Maps added ads. When I see one, I give the place a thumbs down. I want to give in-app ads negative value by making them actively lose money for the businesses.

Sorry not-sorry, tax guy who popped up when I started to search for breakfast restaurants.

I’d forgotten how much I’ve missed San Diego Mexican food. Don’t tell my SF friends I said so, but SoCal has objectively better carne asada burritos.

“Why isn’t the travel router working?”

“Why is my phone draining, instead of charging?”

Signs that my genius self managed to plug the router into my phone, and the USB charger into itself. Fortunately, straightening all the cables got everything working again with no blown fuses.

I took my wife and kid to a tiny restaurant in the right part of Oakland and got a burrito literally bigger than my forearm. This will also be supper tonight and lunch tomorrow.

-ito nothing, this is the whole burro.

A plate-filling burrito is on a shiny steel table. Behind it is a man’s arm for scale. The burrito, or just plain burro, is the length of his elbow to wrist, but bigger around.

We don’t need no stinking DRM

I found a book in Amazon Kindle format that I wanted to read. I couldn’t find it anywhere else, and I had some Amazon credits, so I bought it. The problem is, I don’t have a Kindle and don’t want one. I knew that Calibre has plugins to repair DRM-infected Kindle files but found that Amazon made changes to their apps last month that ruined that method. There’s a commercial DRM disinfectant for Macs that I downloaded to test, but it asked for some wild permissions and wanted me to disable SIP. LOL, no. Finally, I took to sailing the seas looking for a usable EPUB, figuring that I already bought a copy and of course it’s morally OK to seek someone else’s assistance in format-shifting my purchase to one I could use. This particular book — I learned of it from the back of a 2600 Magazine — was niche enough that it wasn’t even available that way.

I am not easily dissuaded.

First, I looked up the specs of my Kobo Libra 2 reader. Its screen is 1264x1680 at 300 DPI.

Next, I downloaded the Kindle app for my Mac. I opened the book I had just bought and adjusted the window size until the rectangle of text displayed on my screen was slightly smaller than the Kobo’s screen.

Then I wrote a Keyboard Maestro macro to take a screenshot, save it to an incrementally numbered PNG file, turn the page, wait one second for the page-turning animations to finish, and then repeat the process a few hundred times.

Now that I had screenshots of each page, I used ImageMagick to crop the Kindle app’s window decoration off them, with a script running command lines like:

$ magick kindle-001.png \
    -crop 1248x1597+342+182 +repage \
    -background white \
    -gravity center \
    -extent 1264x1680 \
    prepared/page-001.png

Finally, I combined them all into a single PDF with a command like:

$ img2pdf --imgsize 300dpi prepared/page-* --output mybook.pdf

…and tagged it appropriately with:

$ exiftool \
    -Title="My Book" \
    -Author="Jane Smith" \
    mybook.pdf

The resulting book looks good with crisp text. Although it’s a bunch of screenshots bundled together, it’s still only about 40MB in size and that’s tolerable here.

It would be nicer to have the book as a native EPUB. Since that wasn’t an option, my stubborness won and I made my own version.

Overheard: “He’s the kind of guy who leaves the sticker on his laptop.”

I just got this bullshit spam.

I like AI. I work for an AI company. And I have also been hand-writing the same blog for 28 years and have zero intention of having AI continue it without me. The whole entire point of blogging is for me to get ideas out of my head and into writing. If someone likes reading them, yay! That’s great! But I write because I need to say something, not to generate words on a screen.

Screenshot of an email:&10;&10;Subject: Extracting chaos from order earns an early invite&10;&10;Hi there,  &10;  &10;We recently came across Honeypot, your weblog that extracts chaos from order.  &10;  &10;That's exactly the kind of personal weblog we built NeoDrop for -- an AI content team that keeps creating for you. Tell it what to make -- newsletters, videos, podcasts, or articles -- and how often; it researches fresh sources, picks what matters, and produces editable content on schedule, so your next post arrives half-extracted.