So Amazon Lambda has a 6 MB limit on request (and response) size. Binary files have to be Base64 encoded (LOL) which makes the limit even SMALLER! So my micropub media endpoint chokes on full DSLR resolution photos. Yeah the "right way" is to have the API Gateway endpoint upload to S3, and the upload event trigger the Lambda processing which would download from S3, and use a separate Lambda for authentication on that endpoint… but I need the processed URLs in the response body. I need everything to happen in one request! How did AWS engineers not see that use case coming?!

People running Postgres on ZFS in Serious Production™ will tell you to set recordsize to 8k or 16k, because performance. Don't listen to them if you're just running personal stuff on VPSes with expensive storage! Small recordsize kills compressratio. So turn it up and rewrite the database with VACUUM FULL ANALYZE. (My Matrix server: going up from 16K to 128K raised compressratio from 2.11x to 3.08x! That's with lz4.)

Mozilla finally approved Transmitter! Finally!

If that's the new "streamlined review process" I can't imagine how slow the old one was. Although I definitely got into the big initial wave of everyone publishing WebExtensions…

Seems like the node.js world isn't too excited about WebAssembly on Node. Come on, it's cool! You could just take a node_modules folder full of image encoders, crypto libs and compressors from a Windows machine to a Raspberry Pi running FreeBSD and it would just work! (And it's sandboxed.)

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!