Imagine you own a restaurant and you replace your professional “dish pit man” with a robot trained to do one thing perfectly: wash dishes. Same throughput. No overtime. No sick days. No scheduling. A clear win. But then your Saturday night shift goes sideways and you don’t know why. Servers stack plates in a way that makes inefficient use of the dishwasher, causing downtime that adds up over the…
I recently got local LLM inference working on my Framework laptop 13’s iGPU. Here’s what worked. Background I bought a new mainboard for my Framework 13 and maxed it out with memory because it’s my daily driver. It has AMD’s Ryzen AI HX370 and 96GB of DDR5. I thought it would be good for local LLMs right out of the box, because it has AI in the name of the CPU, but it’s not. I couldn’t even get it…
Finally figured out the mystery of intermittent apps failing to launch on my Fedora/KDE system. Every so often after a reboot, my browser and other apps, like Slack, seemed to stop launching. Usually rebooting seemed to fix the problem, so I never dug into it. The problem turned out to be /keybase — a FUSE (filesystem in userspace) mount left behind by Keybase. When the Keybase service crashes or…
I set up Immich and exported all my data from iCloud, but I needed a way to reorgnize Apple’s data dump. Apple will give you your iCloud data if you request it, but they make it as inconvenient as possible. It takes days to process your request, and the files are organized in a way that works for them, not you. There is metadata in CSVs and JSON files, that includes information about the photos…
Here’s how I generate QR codes to set up client devices (phones and laptops) for my home WireGuard VPN. This blog post assumes you already have a WireGuard network set up and doesn’t get into how to do that. It’s just about configure clients easily. Generate a key pair In this section we’re going to generate cryptographic credentials and a config file that can be used to set up a WireGuard client.…
Here’s a shell script I use to make my Synology email me whenever my home IP address changes. Synology’s Task Scheduler can run a script on a schedule, with an option to email you if the task fails (exits with non-zero code). So what this script does specifically is check my public IP using ipinfo.io/io , and if the IP is different from the last time it checked, it prints the new IP and exits with…
I built this about a decade ago to capture Connecticut election data. https://github.com/jakekara/ct-election-runner The Secretary of the State’s office in 2016 debuted its election-night reporting system. I was in Hartford, working for the Connecticut Mirror at the time, as a data editor, and I attended a press conference when they announced the new system. I asked if there would be a public API…
I made a CLI tool for human-readable NWS weather reports. Here’s the repo: https://codeberg.org/jakekara/nws-weather-cli Start up and usage docs are in the repo. You can use it to get weather reports in different formats. A setup wizard and config file allow you to add as many locations as you like. Here’s an example of getting hourly weather data in Jackson, Wyoming. nws --location jackson…
I made this CLI tool for scanning QR codes and printing them out. Here’s the repo: https://github.com/jakekara/totp-qr-backup/ This program uses your webcam. Each time you scan a two-factor QR code, it saves the data from the code in a folder. This is designed for you to copy the entire contents of your phone’s QR code vault in an efficient manner. Once that’s done, you can export the saved data…
I wrote this Django tool for generating documentation of Django models. Here’s the repo: https://github.com/jakekara/django-model-docs There are a lot of tools out there to generate documentation for Python code, particularly the API that code exposes. But a team I work on at The Washington Post needed a way to document the data model we were building using the Django ORM. We needed tables that…