Of the security stuff I do for friends, nothing less excites me than financial compliance. If the task has “PCI” anywhere near it, you owe me a nice dinner.
I bought a case for my Meshtastic radio. It came with a couple of buttons and switches that reminded me that I’m only so-so at soldering. I still like how it came out, and everything works like it’s supposed to.


Happy Day of the Dude on this first day of Carpet Diem.
May you mark all strikes, no gutters.
We just finished “Shogun”, and it’s going to take me a day or two to decide what I think about that ending.
A Case for Turning Tulsa Into the Next Big Tech Hub | WIRED
Requirements OK will never meet:
- Better politics. Techies are largely for individual rights. The Midwest largely isn’t.
- Better worker protections. Great tech jobs aren’t usually in right to work states.
- Employees own their ideas. In CA, for example, you can launch your own startup while still working for someone else. In the places in the Midwest I’ve lived, your employer generally owns things you create while working for them.
If you don’t build those, they won’t come.
I bought a 50MB (yes, megs) HD from an acquaintance. It was freaking slow connected to my Amiga, like 20-30KB per second. It also made a horrible high-pitched whine.
Figuring I had nothing to lose, I turned it over and squirted some 3-in-1 oil on the motor spindle. The whine started increasing in pitch as it quietened, and slowly the HD benchmark program started creeping up toward a more reasonable 1MB/s or so. I didn’t use that drive afterward, and just copied the, ahem, public domain apps and games off it and then threw it away.
I have not before or since sped up a computer by oiling it.
Golden Gate Bridge as seen from the Presidio.

AWS WAF now uses /64s instead of /128s for IPv6 rate-limit bucketing. That’s a huge and welcome improvement!
June Bug, the new kitty, is mad at me for flinging her off the bed last night. By extension, so is my wife. But here’s how it went at 2AM:
Cat sees my ankle under the blanket, watches it, then pounces on it and bites it. I laugh and say stop that, kitty. I go back to sleep.
Cat sees my knee under the blanket, watches it, then pounces on it and bites it. I laugh and say stop that, kitty. I go back to sleep.
Cat sees my middle under the blanket, watches it, then pounces on it and 🐈🪽💨.
June Bug is starting to relax into her new home.

Girl Scout outside the grocery: Sir, would you like to buy some cookies?
Me: I’ll catch you on the way out.
Scout: We’re about to leave.
Me: OK, you talked me into it. My wife told me I’m not allowed to bring a bunch of these home, though.
Scout: What kind does she like? Get some of those and then she won’t mind!
And that’s how they got me.
We wrote a pretty powerful AWS infra tool in Python, and haven’t done much with it in a couple years except to update its dependencies.
I’m kinda thinking about porting it to Rust to get some extra type constraints (it’s already mypy-clean, but…) and make it a single executable deployment.
Today I learned you can’t just go adopt a cat. I figured you’d show up, find one you get along with, and then they’d put it in a bag or whatever for you and you’d take it home. Nope. There’s a lot more to it than that.
That feels a little counterproductive. Sure, you don’t want any weirdo to come in and leave with a living animal. At the same time, I’d think it would be a little easier and not require multiple visits and interviews. It’s a cat, not an infant.
I'm coming around to AI-assisted programming
I’m working on a personal project where I saved some initial programming time by hardcoding a lot of configuration, like:
let board_menu = Menu {
name: "Board".to_string(),
help_suffix: "B".to_string(),
commands: vec![
Command {
arg: "B".to_string(),
help: "Board list".to_string(),
pattern: make_pattern("b"),
available: available_always,
func: board::board_lister,
},
Command {
arg: "Bn".to_string(),
help: "Enter board #n".to_string(),
pattern: make_pattern(r"b\s*(\d+)"),
available: available_always,
func: board::board_enter,
},
...
],
};
I wanted to turn that into a config file so that other users could tweak it without editing code or having to recompile. I opened a new file in my editor which I had connected to GitHub’s Copilot free tier, saved it as “config.json”, and pasted the Rust code into the file so the AI would have something to look at. I started typing:
{
"menus": {
"board": {
Then I paused for a second. Copilot came up with this autocompletion:
{
"menus": {
"board": {
"name": "Board",
"help_suffix": "B",
"commands": [
{
"arg": "B",
"help": "Board list",
"pattern": "b",
"available": "available_always",
"func": "board::board_lister"
},
{
"arg": "Bn",
"help": "Enter board #n",
"pattern": "b\\s*(\\d+)",
"available": "available_always",
"func": "board::board_enter"
},
...
]
}
}
}
Now, I’m perfectly capable of hand-editing my original code to a new format. I’ve done that roughly a zillion times in my career. I know how to do it. But that would’ve taken several minutes of drudgery (unless I wrote a macro or something to automate it, in which case it would’ve only taken a couple of hours). Copilot’s suggestion was exactly, to the letter, what I would have written manually, in a fraction of the time.
I have no interest in letting AI write code for me. I tell people that writing software is my favorite thing in the world, and they laugh, but I’m not joking. I wouldn’t let a computer take over my hobby any more than I’d let it play my piano for me, or feed my cat for me, or write my journal for me. I like doing those things. However, if it wants to take care of the mechanical grunt work like this while I concentrate on the more interesting bits, I’m happy to let it try.
Jort is sucking a blanket and making biscuits. #caturday

This PlayStation Network outage is about to irk me. I just wanna play some Diablo.
Credit Karma stopped accepting my decade-old Google Voice phone number for 2FA. It won’t let me change to use my regular number because we were already using that for my wife’s account (which she asked me to manage for her). Their support’s idea for resolving this? Just ask Verizon for a new temporary phone number each month or so forever.
Um, no.

Jort also likes learning about synthesizers.

Tapestry is out now
Tapestry from Iconfactory is out now and you should get it. I’ve been using it for months in beta instead of my usual RSS reader. It’s a delightful re-thinking of what such a thing can be like. Imagine a chronological timeline of all your fave news sources that you deliberately choose, be they websites, people on Mastodon, comics, podcasts, YouTube channels, or whatever, in one beautiful app.
One big difference between Tapestry and other readers is that its “connectors” aren’t limited to just RSS. They’re open source and you can write your own. Want to see new calendar events in your feed? You could make that happen. Amazon orders? Why not! The Apple Music songs your friends are listening to? Sure! Yeah, I’ve been planning a few connectors of my own.
Tapestry is on my home page. When I have a few minutes, I open it instead some random doomscroll. I’m happier for it.
My wife ordered a new shower curtain that is advertised as, quote, “waterproof”. I would hope so.