handy script for generating lots of valgrind suppressions

The proprietary nvidia drivers on linux generate an enormous amount of these spurious valgrind errors when linked into your program:

==360480== Conditional jump or move depends on uninitialised value(s)
==360480==    at 0x7306520: ??? (in /usr/lib/libnvidia-glcore.so.570.153.02)
==360480==    by 0x6CA1AA8: ??? (in /usr/lib/libnvidia-glcore.so.570.153.02)
==360480==    by 0x723D682: ??? (in /usr/lib/libnvidia-glcore.so.570.153.02)
==360480==    by 0x6C98B6C: ??? (in /usr/lib/libnvidia-glcore.so.570.153.02)
==360480==    by 0x6100B10: ??? (in /usr/lib/libGLX_nvidia.so.570.153.02)
==360480==    by 0x615BEE1: ??? (in /usr/lib/libGLX_nvidia.so.570.153.02)
==360480==    by 0x6100012: ??? (in /usr/lib/libGLX_nvidia.so.570.153.02)
==360480==    by 0x406A3CC: _dl_init (dl-init.c:121)
==360480==    by 0x40674B4: _dl_catch_exception (dl-catch.c:215)
==360480==    by 0x40710C8: dl_open_worker (dl-open.c:799)
==360480==    by 0x4067415: _dl_catch_exception (dl-catch.c:241)
==360480==    by 0x40714DD: _dl_open (dl-open.c:874)

To fix this, you can give valgrind a "suppression file" which marks specific errors as spurious so that they can be ignored. These suppression files are really tedious to generate, however, so I wrote this script to help with that:

Read more  ↩︎

self-hosting locally with Caddy/Tailscale and a cheap VPS

I got into self-hosting a couple months ago after I started learning how to use Docker. I went from hating Docker (because I had only ever used it during hours-long attempts to build some annoying piece of software) to loving Docker because it makes configuring network-connected services so much easier.

For a while I was just hosting on my LAN from my desktop computer, but then I was out-of-state for two weeks and I found myself really wishing I had access to my self-hosted services while I was away.

Of course, I didn't just want to port-forward my computer through my router because that's a security nightmare, so I tinkered with a bunch of different solutions and landed on this one, which is working extremely well for me.

Read more  ↩︎