scattered notes from setting up a macbook and updating my website
The last time I owned a personal MacBook was in 2018. I have owned work MacBooks, and I got an iPad two years ago, but it's not the same. Then, I was updating my website because I'm sponsoring the Draknek New Voices Puzzle Grant (yay I can share this now) and they wanted a website to link to.
Homebrew still works
fish shell still works (warning, intentionally not POSIX-compliant)
I'm pretty unsure here, but Ghostty seems to have supplanted iTerm2 as the de facto generically better Terminal, although the latter is still fine
fasd seems pretty dead; they even removed it from Homebrew. There are some workarounds and successors, but in practice I never use anything other than
zanyway, so it seems the best modern replacement for me is zoxide.lazy.nvim might be the best NeoVim package manager now?
I was not happy with having to install Ruby in order to install Jekyll in order to regenerate my website, so I finally decided to semi-vibecode a static site generator. It turns out a single 150-line Python file works pretty well for my purposes.
My website had a stray CGI script that no longer works in Python 3.13+ because the
cgilibrary has been removed. Fortunately, the reason they removed thecgilibrary was that its design kind of sucked, and you can get most of the functionality back with 2–3 extra lines of code andurllib.parse:import os, sys from urllib.parse import parse_qs # GET params: dict[str, list[str]] = parse_qs(os.environ.get("QUERY_STRING", "")) # POST (assuming default, enctype="application/x-www-form-urlencoded") params: dict[str, list[str]] = parse_qs(sys.stdin.read(int( os.environ.get("CONTENT_LENGTH", "0"))))
(The dictionaries' values are list-typed because the urlencoded format encodes a flat list of name-value pairs, not necessarily key-value pairs where the keys are distinct, even though the latter is the most common usage pattern and many web frameworks have more convenient APIs for it. If you have multiple
<input>s in your<form>with the samename, you'd get multiple pairs with the same name, and thus a list holding multiple values under that name.)