profile picture


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 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