Hmm... ugly FFI hacks might get harder if Elm ever switches to Wasm. Can't easily run a search-and-replace over bytecode, I guess.

Oh well, I'll cross that bridge if/when I come to it.

:blobcatnotlikethis: Add 500 lines of dependencies to format a number.
:blobcatthinksmart: Use ugly FFI hack to run 1 line of Javascript.

I'm not happy about storing user permissions as bitflags in an integer column, but it's a lot easier to pass around a single integer than 7 separate booleans. :meowneutral:

:gentoo: net-libs/nodejs does not rely on Python 2 anymore.

This may be a decade late, but I finally have a system that doesn't come with two Python interpreters. :blobcathappy:

/proc/net/sockstat gives the number of pages currently in use for TCP buffers.

I need to graph and monitor that one...

FINALLY! I got it! I had been playing around with the tcp_wmem sysctl before, but what I actually needed what tcp_mem: The system-wide number of 4k pages allocated to TCP buffers.

Linux starts throttling connections when the memory used by buffers exceeds the `min` value, and so far I've not found a way to see if/when that value is reached. In any case, ~200MB is certainly not enough for a busy webserver. Set it to 1GB now and file transfers are much faster.

:blobcatthinking: "What does this site look like with ads?"
:blobcatthinksmart: Disable adblocker.
:blobcatthinkOwO: No change.
:blobcatoh: Ads blocked by DNS.

I just can't figure this one out. HTTPS is super fast when I wget localhost on the server, but as soon as I'm fetching the file over the network it just slows down.

It's not as if port 443 is being throttled, the same slowness happens when going through a Wireguard tunnel. :blobcatdead:

It's got to be related to packet latency, but I'm sure I already tried tuning the TCP window sizes in the past.

https+nginx: 800KB/s
ssh+rsync (no cache): 16MB/s

WHY!? :blobcattableflip:

My lazy low-downtime server migration recipe:

A->B: rsync
A: Stop services
A->B: rsync
Update proxy
B: Start services

I have boosts disabled in my home timeline, but I can still tell when @alcinnz is doing his daily boosting spree - the Mastodon front-end starts pruning old posts from my home timeline, presumably because the hidden boosts still count towards the maximum number of items to keep at the client side.

(Which I totally don't blame on @alcinnz! It's just a funny glitch)

Ayo boosted
A while ago on IRC, we got to talking about an old challenge: to list five things you didn't like about your favourite programming language. My favourite programming language that is arguably "general purpose" is Perl, so I gave it a crack. I came up with this:

1. The regular expression engine, perlre, is perversely huge and absurdly complex, and includes way too much functionality, which tempts newbies into using regular expression features unique to Perl in cases where plain old programming constructs like loops would be both clearer and more portable. This unnecessarily contributes to Perl's reputation as unreadable.

2. An empty pattern (i.e. //) means "repeat last pattern". That's weird, though maybe not harmful in itself, but it extends to /$var/ meaning "repeat last pattern" in the case of $var being an empty string. That's almost certainly not what any sane programmer would mean.

3. Smart match sucks, and not merely at an implementation level, but at a design and philosophical level. It takes the idea of implicit behaviour or "do what I mean" to perverse extremes, and flips Perl's usual approach to inferring types from operands (eq vs ==, cmp vs <=>) into choosing behaviour based on types, in really tenuous ways. It just doesn't fit in the language at all, and I pretty much try to pretend it isn't there. @tyil is fond of reminding me that it's somewhat saner in Raku.

4. Checking hash keys with `exists $hash{$key}` in the same way as definition with `defined $hash{$key}` kind of blows as a syntax. The reason this stands out to me is that Perl was designed to imitate good feature of AWK, among other languages, so it's not clear to me why they didn't use the much clearer `$key in %hash` that AWK includes instead. That could then have doubled as an operator for searching a list: `$item in @list`, to satisfy the justifiably common newbie question "how do I check if a value is in a list", without having to persuade them to use hashes instead.

5. I can't put unquoted hyphens in hash keys, because it prompts the lexer to switch to evaluating what I'm writing as an expression (subtraction) rather than a literal string key. The vast majority of the time, my key is either a literal value, or a scalar variable containing the key. Rather than having to make the literal key explicit with $hash{'single-quotes'}, I would much prefer making an expression explicit with e.g. $hash{(parentheses)}, as the latter is the more infrequent case.

"This is a password I might want to use when I don't have access to my password manager, let's choose something memorable."
- me, 1 year ago.

*Of course* I can't remember it.

Have I mentioned how much I love Wireguard?

Server migrations are so much easier when VMs can keep talking to each other as if they were on a single LAN.

That moment when you format a /boot filesystem type that your target kernel can't mount. :blobcatfacepalm:

And now the hard part: Installing grub.

:gentoo: Compiling at the speed of light.

I know it's easy to rant on Discord, but I can't help this one:

Clicking the middle mouse button in Firefox gives you the wonderful "autoscrolling" feature. Discord has hijacked that same button to mean "paste whatever is in my clipboard to the chat box". :blobcatfacepalm:

Hoping I won't have to rely on my backups. Don't have fiber at home anymore and transerring 4TB over this slow line isn't going to be fun. :blobcatnervous:

Aaaaargh.

I knew Hetzner was happy to kick you off their service if you hosted porn, but apparently a bunch of silly DMCAs is also sufficient. Time for an emergency migration. :blobcatreeeeeee:

Show more
lonely.town

A lonely little town in the wider world of the fediverse.