Quake Champions is awesome (as in the gameplay — performance is meh).

Amazon Web Services is not awesome: it wasn't really obvious that promotional credits aren't spent on reserved EC2 instances :( Also HardenedBSD was behaving weird on it (secadm kernel panic, Python libssl segfaults).

But with regular FreeBSD I've set up a Matrix homeserver (Synapse) on EC2! I am now @greg:unrelenting.technology :) It's working as my new IRC bouncer, so with that I've been able to say goodbye to the previous VPS that served this website (which was still running my ZNC).

It's terrible hot take time:

React is capitalist. Since it's been ported to many platforms (browsers, node.js, iOS, Android, now even Sketch) it is designed to let businesses reach customers on all platforms with less development effort, instead of hand-crafting apps that care about each individual platform's users. And there's a sort of lock-in, you're not a web/iOS/Android developer, you're a React developer. That's kinda like businesses trying to lock you in to their ecosystems (Apple, Microsoft).

In contrast, Polymer is good and communist fully embraces the web as the only platform, which is good for the open web.

Since 2017-02-01 I've been working on a big change to Sweetroll, the engine that powers this website, and today it's finally live, right here! (Also it's now on my newer VPS, hosted at prgmr and running HardenedBSD 11. The old one was FreeBSD 10 at DigitalOcean.)

tl;dr about the change: from one Haskell app powered by a Git+JSON store and embedded Duktape templates (lol) to two services (Haskell + Node.js) backed by Postgres. It's really cool. I'll be writing more documentation for it soon.

I just realized that it’s possible to make a WebExtension version of micro-panel. Not sure if that enables any cool benefits though… maybe using one token for the panel and a share panel in the browser or something.

I made a WebExtension! It’s called Transmitter for Transmission. It lets me add torrents to the transmission-daemon instance running on my home server. And watch their status. I think Transmission actually allows you to expose the remote API in desktop versions as well.

tl;dr on WebExtensions: it’s Chrome’s extension API, but with Promises and it’s a W3C standard. Fully supported in Firefox. Chrome/Opera need a tiny polyfill for the Promise support. MS Edge can be supported too.

Publishing experience: Chrome’s store asks for $5 to get your stuff published (one time payment for up to 20 extensions) and there’s no pre-moderation. Addons.Mozilla is pre-moderated but the extension shows up on its URL before approval. Opera is pre-moderated and the extension doesn’t show up before it’s moderated.

Converted my music library from mostly-AAC to Opus: from 11.3 GB down to 5.2 GB! (using some PowerShell to run ffmpeg on all the things) This is especially good for my phone. For some reason Android still needs the file extension to be .ogg not .opus.

Compression in general seems to be a pretty exciting field… Redox TFS promises full disk compression. Maybe not really “full” but with large huge clusters, instead of ZFS’s per-block compression. Brotli already works in browsers for HTTPS compression. Game texture stuff is improving (because 58 GB texture packs :D). A better video codec is coming.

If you still have AAC or Vorbis files — convert to Opus now!

Noticed a worrying trend in web server libraries: lack of first-class support for running on Unix domain sockets and on user-supplied sockets of any kind. Sometimes it needs third party libraries with over 200 lines of code… but Erlang didn’t have native support for unix sockets until 2015!

In 2017, let’s make sure all web app stacks support opening Unix sockets, running on already opened sockets, socket activation and graceful shutdown! I made a thing that uses that kind of stuff and the only server that was completely ready out of the box was Ruby’s Puma.

Facepalm of the day: “why does my new Xen VPS boot FreeBSD that’s installed via the provider’s console, but when I install it myself, it doesn’t boot?”

Of course, I forgot about console="comconsole". It was booting, just not showing anything on the Xen console.