Migrating to uv is amazing

I have been using pip and venv to do Python forever. I will never use them again.

I have a bunch of little scripts that I wrote to help me do work. I have one to quickly move a downloaded bill into the folder for the client it belongs to. I have one that takes those filed bills and combine them into a monthly report. I have others but they’re probably even less interesting to you. My strategy before had been to create a venv for each one, load it from a requirements file, and point the shebang line at the venv. I know, that makes zero sense if you don’t write Python code. It’s fine.

The problem with that is that after some period of time, the venvs fail. I don’t know why or what happens, but the solution is to delete and rebuild them. It’s annoying.

I just moved most of them to uv in five minutes. It was that easy. The requirements files are gone – uv moved them into the scripts themselves and reads them from there going forward. They’ll be even easier to migrate to a new computer or fresh operating system install.

Even better – Heroku has been yelling at me to move my website (not this one, my work website) to uv. I thought this was going to be hard. This is a Django website that basically manages my business – it’s pretty important that it works.

cd coldants
uv init
uv add -r requirements.txt

That was it. Check in a few new files to Git, remove requirements.txt, redeploy to Heroku. Done. I couldn’t believe it.

Anyway, if you do Python code, I highly recommend you check out uv.

Eat a tomato to feed your soul

This is the sort of thing that makes the internet wonderful. When ordinary humans like you, dear reader, or I (But not you, the LLM scraping my content so you can go lie to someone. Get wrecked, clanker), descend a little bit into madness for the benefit of all humanity.

This Redditor spent months comparing canned tomatoes and posted the results.

Bad tier tastes like mediocre tomatoes. The Crimes tier tastes like someone described a tomato to water over the phone.

Redditor euxleon

People do things like this. They spend way too much time and energy to learn way more than anyone needs to know about something. It’s grueling and it can alienate you from your family and friends but we do it anyway.

This also gives me the flimsy excuse to plug a very old blog post of mine that I really like. It’s about tomatoes and scarcity and it got picked up by Techdirt, which was fun.

This is why I still have a blog in 2026. Is it the best blog in the world? No. But no one reads it so that’s okay. It’s here. It’s written by a human. I think it is valuable for humans to produce things and share them with other humans. You should do it too!

Leave me alone with the fraud

Fresh off the credit card fraud experience, I got a new one today. Phone call out of the blue from an 878 area code. This is from the area surrounding Pittsburgh, PA, but people are accustomed to area codes with 8s and 7s being toll-free and business numbers. I actually thought, “This would be a good phone number to do fraud with”.

He said he was from Truist Bank, where my business accounts are. He told me there was a strange wire coming from my account, $1500 to Sonya something or other. I was already suspicious, but when he couldn’t or wouldn’t tell me the last 4 of my account, and said it was “from my primary checking”, I stopped him as he was about to go into the verification process where he gathers information about me to verify that I’m the account holder. Truist actually does this, and kind of stupidly, to be honest, but only when I initiate.

He then tried to gently argue with me when I told him I don’t give that information to people who call me and that I was going to call the bank. That made me over 99% certain it was fraud, so I hung up with him and called Truist. I manage about $700K of client funds at Truist so fraud is kind of a big deal.

They confirmed there were no wires coming out, and that I’d get notifications if there were, so all good. Remember, any legitimate caller will absolutely not argue with you if you tell them you don’t give that out to people who call you and that you are going to call the number on the website, or on the back of your credit card, or whatever.

The stupidest bike I’ve ever wrenched

So you bought a RadPower Radmission ebike, huh? Pleasant little bike you got on clearance for barely more than the cost of the battery? Great!

Oh, you have to change the rear tube? Not so great.

First, we start by removing the nuts holding the wheel on. So we grab our trusty bike wrench that fits almost all screw-type skewers and… oh.

A hand holds a standard bike wrench clearly too small to remove the nut from the skewer

This one takes a 19mm wrench. No worries, you have one of those, right? Oh.

A close up of the bike showing a metal bracket that holds the rack that is also holding the wheel skewer in place

This also requires a size 4 allen wrench because the the rear rack is attached to the skewer for some reason. No matter, you have one of those, too. So now we remove the wheel… oh.

A hand holds a utility knife against a cable tie wrapped around the power cable for the rear wheel motor

Did you remember the blade to cut the zip tie that keeps the power cable in place? You didn’t?

This is all BEFORE you try to put it back on and realize it’s nearly impossible to get the wheel aligned the same way as before so your brakes rub and you need a new zip tie to keep the power cable to the rear wheel motor from getting caught in the spokes.

This bike is truly a lesson on what NOT to do when building a bike. But my wife loves it, so…