Blog
Block AI Scrapers with ingress-nginx
March 03, 2024 - 630 words - 4 mins
robots.txt is a long established standard to control well-behaved1 web indexers (such as Google) for a site.
Additionally, the <meta name="robots"> HTML tag and X-Robots-Tag HTTP header serve
similar roles as robots.txt but for a specific page/request.
Since I use ingress-nginx for r…
read more
OIDC for Grafana with Helm
October 30, 2023 - 1044 words - 6 mins
I've avoided installing an observability stack on my Kubernetes homelab1 — it's always seemed excessive in terms of the ratio of resources consumed to the scale of my operation.
Of course, as these things go, I have begun to rely on my self-hosted infrastructure more and more.
This became apparent w…
read more
Adjust the Font Size for krunner
October 23, 2023 - 138 words - 1 mins
krunner is great, but I've always found it too small by default.
This is really a general KDE trick, but you can create a ~/.config/krunnerrc:
[General]
font=Noto Sans,24,-1,5,50,0,0,0,0,0
The first two parts of this are what matter: they're the font name and font size respectively.
Run kquitapp5 k…
read more
GPU-Accelerated LLM on ARM64...in Docker!
August 19, 2023 - 911 words - 5 mins
I think the current "AI" hype is overblown, but certainly the recent advances in ML around large language models (LLMs) have been impressive.
So, when Machine Learning Compilation (MLC) recently posted an LLM chat demo that can run on the Mali G610 GPU, I was intrigued.
read more
Improving Failure Messages with Async Tests in Go
October 15, 2021 - 691 words - 4 mins
Testing highly asynchronous code can be highly time-consuming and tricky.
If possible, I always try to include some sort of synchronization mechanism even if only exposed to unit tests.
However, sometimes, there's no alternative, and an async test is better than no test!
read more