Archive

All published posts

2539 posts latest post 2026-08-09 simple view
Publishing rhythm
Jul 2026 | 14 posts
Cogwork Dancers Fight

I found snow-fall component from zachleat, and its beautiful… to me. I like the way it looks, its simple and whimsical.

Install #

There is an npm package <a href="https://zachleat.com" class="mention" data-name="Zach Leatherman" data-bio="A post by Zach Leatherman (zachleat)" data-avatar="https://www.zachleat.com/og/opengraph-default.png" data-handle="@zachleat">@zachleat</a>/snow-fall if that’s your thing. I like vendoring in small things like this.

curl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js

I generally save it in my justfile so that I remember how I got it and how to update…. yaya I could use npm, but I don’t for no build sites.

get-snowfall:
    curl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js

Usage #

Now add the component to your page.

<!-- This belongs somewhere inside <head> -->
<script type="module" src="snow-fall.js"></script> <!-- Adjust the src to your path -->

<!-- This belongs somewhere inside <body> -->
<!-- Anything before will be below the snow. -->
<snow-fall></snow-fall>
<!-- Anything after will show above the snow. -->

One Year Of Shots

I’ve been running my shot scraper api for a year now. It creates og [1] images for my website and thumbnails for my Reader [2] using a headless chrome instance. - 25870 shots - 73 shots per day on average - 12-09-2025 first shot taken Histogram # [3] [4] a histogram of shot counts by day You can see in the histogram that I’ve had a few big spike days, This has been mostly for days that I’ve integrated into a new service or changed the endpoint. On February 13, 2025 I swapped over from using the post to using template specific to open graph images. -content = "https://shots.waylonwalker.com/shot/?url={{ config.url }}{{ post.slug }}&height=600&width=1200&scaled_width=1200&scaled_height=600" +content = "https://shots.waylonwalker.com/shot/?url={{ config.url }}{{ post.slug }}/og/&height=600&width=1200&scaled_width=1200&scaled_height=600" Image Comparison Original Post Image [5] originally I simply used an image of the post itself New OG Image [6] In Feb 2025 I made OG spe...
2 min read

Today I learned an important lesson that you should periodically check on your kubeconfigs expiration date. It’s easy to do. You can ask for the client-certificate-data from your kubeconfig, decode it, and use openssl to get the expiration date.

kubectl config view --raw -o jsonpath='{.users[0].user.client-certificate-data}' \
  | base64 -d 2>/dev/null \
  | openssl x509 -noout -dates

Note

This will only work for the first user, if you have more than one user or context defined in your kubeconfig you will need to adjust.

Not every print needs supports

Not every print needs supports. So many models default to having it on, whether needed or not. Well designed parts, designed for 3d printing almost never need supports (depending on constraints).
Slab Fight
Stolen Dress
Moss Mother 2 Fight

reminder Include steps to reproduce

Include steps to reproduce your bug when you file a bug report or issue. You may quickly forget how you got there, and no one can fix a bug that is not reproducible.
- This looks like a really good low cost option for some workholding. There is never a shortage of workholding in the shop and everything has a place. Having something low cost that you can have a bunch of makes a lot of sense. Maybe you still need a super scucum unit for really clamping the shit out of something, but this easily covers most use cases in a garage workshop. I want to build it.
- Moore’s Law is Dead pitches a pretty ingenious sku for the new gabecube aka steam machine. I fully support repairability and ewaste reduction. most of these components have not had MAJOR improvements in years, hence his channel name. There is a possibility here that Valve could ship with their unique hardware, (apu, psu, case, ports, networking) and let you bring your own ssd and ram from an old device that you might not use anymore. I love this idea. At the same time it feels like entering the star wars universe where there are no more new manufacturing and everything is cobbled together from old hardware made long ago.
Moorwing

All I want for Christmas is, filliment

All I want for Christmas is filament I don’t need gifts or fancy things I just wanna model, tinker, and print, watch layers stack just right. Santa, if you’re listening... PLA, PETG, ABS will do.
Needle Strike
Conchflies Fight

When using two GitHub accounts the gh cli gives very easy gh auth switch workflow from the cli.

from the docs

gh auth switch –help Switch the active account for a GitHub host.

This command changes the authentication configuration that will be used when running commands targeting the specified GitHub host.

If the specified host has two accounts, the active account will be switched automatically. If there are more than two accounts, disambiguation will be required either through the --user flag or an interactive prompt.

# list accounts
gh auth status
# switch accounds (interactive if more than 2, i've never seen this personally)
gh auth switch
Check out basecamp [1] and their project fizzy [2]. Kanban as it should be. Not as it has been. References: [1]: https://github.com/basecamp [2]: https://github.com/basecamp/fizzy
- What a heart breaking video to listen to. I’m trying to do a better job of being positive right now. I’m trying to look at the world in what I have control over (not much more than my attitude about it). AI is killing so much right now I’m trying to look at it as the good tools the engineers made it to be. Ownership is dying around every goddamn corner. Hats off to Edison, this guy gets it. We need more companies like this taking a stand for the average person who wants to make it out there.
- What a great campfire story Casey stumbled into. Whether any of this is true few will ever know, but its very reasonable that a race condition and a stalled job to apply configuration caused by someone who left the company 10 years ago caused an outage. I find it hilarious that they call this guy he answers, yup I still know the password, but how do I know you’re legit, I’m not just handing out the password. Casey did a stand up job telling this story.
- Linus is Techbrophobic [1] like the rest of us. This is such an unexpectedly mild take from him. I expected some threat to the mother of the vibe coder, but he gave a pretty great middle of the road take. The industry sucks, it smells off, we know a lot wrong with it, it feels like theres a lot more wrong than we know. But the tools that its making are really good when used in the right ways. They are not a replacement for anything, they are assistive. They can lift someone from not knowing how to code to making a small webapp for their use. Someone who wants to write backend and give them a decent front end, someone who whats to write front end and give them a decent backend. Great take from someone with more experience than most can ever dream of having, worth a listen. References: [1]: /techbrophobic/
snow-fall Web Component—zachleat.com A post by Zach Leatherman (zachleat) Zach Leatherman · zachleat.com [1] This is a very fun way to add some whimsy to your site, added it to mine immediately when I saw it. This is what digital gardens are for, Fun, entertainment, and self-exxpression. References: [1]: https://www.zachleat.com/web/snow-fall/

gpus are awesome and I need one for Bambu Studio to be usable in a distrobox. Adding the --nvidia flag to distrobox create bind mounts the nvidia /dev/ devices and sets up the necessary environment variables. Once we are in there are a couple of packages to install to make it work.

distrobox create --name bambu-studio --image archlinux:latest --nvidia
distrobox enter bambu-studio
sudo pacman -S nvidia-utils lib32-nvidia-utils vulkan-icd-loader
nvidia-smi
glxinfo | gprep OpenGL
sudo pacman -Syu --needed base-devel git
git clone https://aur.archlinux.org/paru-bin.git
cd paru-bin
makepkg -si
paru -S bambustudio-bin

bambu-studio

distrobox-export --app bambu-studio
Check out garbage-day.nvim [1] by Zeioth [2]. It’s a well-crafted project with great potential. Garbage collector that stops inactive LSP clients to free RAM References: [1]: https://github.com/Zeioth/garbage-day.nvim [2]: https://github.com/Zeioth
Forebrothers Fight
Forebrothers Full
Forebrothers
Here is a video clip of my Bambu A1 poop flinger fixed and not jamming during operation after my fix.
Bambu Poop Flinger Jammed
My bambu A1 poop flinger has been getting jammed up for awhile now, here is an image of it in the jammed position.

The Wrong Reasons To Run Kubernetes In Your Homelab

Running kubernetes in your homelab [1] is complex, time consuming, there are almost no docs to help you (homelab focused docs for things you want to install), and nothing is copy paste. You have to make everything happen yourself. The Wrong Reasons To Run Kubernetes In Your Homelab # [2] - I run compose and think kubernetes is the next logical step - Techno Tim runs it - I heard it’s what cool kids do - Kubernetes BTW - Talos Linux looks cool - I found a cool helm chart on GitHub - I need scale There are also The Right Reasons To Run Kubernetes In Your Homelab [3]. I run compose and think kubernetes is the next logical step # [4] No it’s not. It’s much different than running docker, compose, swarm. It’s meant for scale, it’s complex, it’s made for enterprise, not your local development or your homelab. It can do these things, it can do them quite well, but it’s not the target audience. Techno Tim runs it # [5] I heard it’s what cool kids do You need to rethink who the ...

I got the kubernetes in my basement autism

What flavor of autism did you guys get, I got the kind where I run kubernetes in my basement. ![My homelab as June 2025](https://dropper.waylonwalker.com/file/49b356bc-f32c-4332-85ea-0eb2b7860091.webp) https://www.youtube.com/shorts/5Cac-cf5MOE

The k3s system-upgrade controller is a fantastic tool for upgrading k3s automatically. It has done a fantastic job for me every time I’ve used it. Today I ran it on a cluster that needed to upgrade several minors and I learned that the controller does not pick up on changes to the channel url if you change from minor to minor.

The solution I came up with was to name the plan with the version it supports. Then on each patch upgrade, change both the plan name and the channel. I use gitops with argocd, it automcatically cleaned up old plans, created new plans, and the system-upgrade-controller picked up the plan and started applying immediately.

# Server plan
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
  name: server-plan-v1.33 # <- This is important if you want to change the channel name
  namespace: system-upgrade
spec:
  concurrency: 1
  cordon: true
  nodeSelector:
    matchExpressions:
    - key: node-role.kubernetes.io/control-plane
      operator: In
      values:
      - "true"
  serviceAccountName: system-upgrade
  upgrade:
    image: rancher/k3s-upgrade
  channel: https://update.k3s.io/v1-release/channels/v1.33
---
# Agent plan
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
  name: agent-plan-v1.33 # <- This is important if you want to change the channel name
  namespace: system-upgrade
spec:
  concurrency: 1
  cordon: true
  nodeSelector:
    matchExpressions:
    - key: node-role.kubernetes.io/control-plane
      operator: DoesNotExist
  prepare:
    args:
    - prepare
    - server-plan
    image: rancher/k3s-upgrade
  serviceAccountName: system-upgrade
  upgrade:
    image: rancher/k3s-upgrade
  channel: https://update.k3s.io/v1-release/channels/v1.33

I’d love to see a better way if you have a way to upgrade through minors, or manually control the minor of your cluster let me know.

my home row

My home row layout. It's not quite home row mods. ![image](https://dropper.waylonwalker.com/file/4a7971fc-8d22-49b9-ae77-5551f5c8d914.webp) https://dropper.waylonwalker.com/file/fd74f80e-ff5e-4548-8419-bd407144bb6c.excalidraw
Deleting Code for Performance The one where I clean up an asynchronous mess. dbushell.com · dbushell.com [1] I did not realize that David’s site was built on a homegrown Static Site Generator. As someone who also does this myself I appreciate the effort. I build my site on markata [2]. It started as a project to learn a set of tools and has become a project that I depend on everywhere and cant put down. It’s a great tool, but you probably shouldn’t use it. Anyways, I feel this really shows on David’s site. His site is filled with custom features that make it very unique, one off, and always a pleasure to read. References: [1]: https://dbushell.com/2025/12/04/deleting-code-for-performance/ [2]: /markata/
I recently discovered posse_party [1] by searlsco [2], and it’s truly impressive. Quit social media by posting more References: [1]: https://github.com/searlsco/posse_party [2]: https://github.com/searlsco

gpus are awesome

GPU's are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked, (arch or bazzite), but running in a distrobox does. Outside of distrobox the 3d rendering canvas is black, no output. It used to work fine without gpu support, was snappy enough, complex models were a bit sluggish, but fine. Lately something happened and simple models bring it to its knees. It got unusable! ![image](https://dropper.waylonwalker.com/file/a06bbf8b-abea-472e-8d96-4255d522444d.webp) > The print I happen to be working on is some custom designed gumdrops for a > theater set. The ui is working and not lagging 30s between clicks causing > clicks to happen on the wrong ui element.
- Niche companies will rise from the ashes. Companies that want to build good products for customers. Companies that will get hundreds of users. They will treat them right and make enough money to support themselves, maybe. Alongside them we will self host [1]. We will run our own services out of our basement. There will be downtime, but its ok. We will enjoy ourselves. We will tell everyone how much better it is BTW Next to that is a firehose of shit piling back into the circular snakes mouth as all of your data flows freely between any company that can get their hands on it. These companies will spend and make money hand over fist. Most people will continue to use these services until enough is enough and unplug from everything. In this world I don’t see how we sustain the amount of engineers we have created. Small companies run lean, small, and allow slow organic growth happen. It will be interesting to see play out. [2] References: [1]: /self-host/ [2]: https://dropper.waylonwalker.com/file/95ae2a95-308b-4d1d-bff8-8ce6194db132.webp
A ChatGPT prompt equals about 5.1 seconds of Netflix In June 2025 Sam Altman claimed about ChatGPT that "the average query uses about 0.34 watt-hours". In March 2020 George Kamiya of the International Energy Agency estimated that "streaming a … Simon Willison’s Weblog · simonwillison.net [1] This feels very promising for the future as we enter a world that is more and more dependent on AI that inference is so cheap. I did not understand the scale to how much cheaper inference is compared to training. As we get better with training I imagine this gets significantly better as well. I know they all claim to be profitable on inference, but scrolling through Simon’s feed here you see several articles on the stark difference. References: [1]: https://simonwillison.net/2025/Nov/29/chatgpt-netflix
I’m impressed by awesome-nanobanana-pro [1] from ZeroLu [2]. 🚀 An awesome list of curated Nano Banana pro prompts and examples. Your go-to resource for mastering prompt engineering and exploring the creative potential of the Nano banana pro(Nano banana 2) AI image model. References: [1]: https://github.com/ZeroLu/awesome-nanobanana-pro [2]: https://github.com/ZeroLu
A pretty good email scam How I helped family recover from a clever email scam that hid behind sneaky account settings cassidoo.co [1] scams suck. This is a good story, sorry to hear that it happened to a real person. If you or anyone in your family has a compromised email, add these to your checklist to fix. - automatic forwards - 2-factor email References: [1]: https://cassidoo.co/post/email-settings-scam/
2025-11-27 Notes | Nic Payne yesterday: [[2025-11-26-notes]] Big Changes Got my workspaces script in working order It's not quite configurable yet This will allow an easy way to setup pype.dev [1] Nic is also building out a similar workspaces script. This feels like such a great thing to have ai work on fully customized tools for your personal workflow. Also Nice shout out! References: [1]: https://pype.dev/2025-11-27-notes/
K8s Diagram Builder - Visual Kubernetes YAML Generator Free Kubernetes diagram builder with drag-and-drop design. Auto-generate production-ready YAML for Ingress, Services, Deployments, ConfigMaps, Secrets & more. No signup required. K8s Diagram Builder · k8sdiagram.fun [1] This looks like great prototyping tool for k8s. I too often ask ai to get me going with the things I need. I’ve used k8s long enough that I can generally remember all the things I need, roughly where they go, would probably forget a few things and need to iterate, but I cannot remember exactly what goes where and need examples at a minimum. I need to give this a go from desktop and see if it will work for me. Right now looking through mobile looks promising. References: [1]: http://k8sdiagram.fun/
Check out dawarich [1] by Freika [2]. It’s a well-crafted project with great potential. Your favorite self-hostable alternative to Google Timeline (Google Location History) References: [1]: https://github.com/Freika/dawarich [2]: https://github.com/Freika
Apple Boxes Complete
A complete stack of apple boxes for the local theater.
Design For Bosch Colt Dust Collection V1
Isometric view of the Bosch Colt dust collection design.
Dust Collection For Bosch Colt V0
Dust Collection for Bosch Colt router v0 made of 3/4" plywood.
chr15m [1] has done a fantastic job with runprompt [2]. Highly recommend taking a look. Run LLM prompts from your shell References: [1]: https://github.com/chr15m [2]: https://github.com/chr15m/runprompt

setting COLUMNS env var to a number greater than 0 will make the terminal resize to that number of columns.

COLUMNS=80 uvx --from rich-cli rich myscript.py

Note

Not all programs respct the COLUMNS env var, but rich does, and a lot of stuff I’m building uses rich.

I discovered this when I was trying to make a low effort readme generated from the code, but did not depend on the size of terminal it was ran on.

# justfile
readme:
    echo "# Workspaces" > README.md
    echo "" >> README.md
    echo '``` bash' >> README.md
    COLUMNS=80 ./workspaces.py --help >> README.md
    echo '```' >> README.md