Technical Blog

Between client work, open source projects, and our own endless noodling, we run into a lot of obscure, technical issues. Surprisingly often, not even Google can help.

It's easy to feel alone — especially when first starting out — but discovering edge cases is a normal and natural part of being on the front lines of computing. Possibilities and features and bugs are all part of the mix.

Someone somewhere once said, "Write the blog post you wish you'd found when you were struggling with a problem."

That's what we've tried to do here.

To make it easier for you to decide what to read and what to skip, we've employed some simple color-coding:

Building a Custom XanMod Kernel on Ubuntu 23.10
The XanMod Linux kernel is impressive out of the box, but if you want to push it even further, you'll need to build it manually from source.
Posted: 16 February 2024
Tagged: 
kernel
Linux
performance
system administration
tutorial
XanMod
Introducing Rip Rip Hooray!
Rip Rip Hooray! is a fundamentally different kind of audio CD-ripper, one designed and optimized specifically for data recovery.
Posted: 9 October 2023
Tagged: 
CD
Linux
recovery
rip
Installing CUETools 2.2.4 on Linux via WINE
With just a little bit of setup, Linux users can leverage CUETools' advanced verification and repair functionality.
Posted: 5 July 2023
Tagged: 
CD
CUETools
Linux
recovery
rip
verification
WINE
Disabling Snap, and Keeping It Disabled
It is easy enough to uninstall snap from Ubuntu, but preventing Ubuntu from reinstalling it the each time you upgrade to a new release requires a bit more effort.
Posted: 24 April 2023
Tagged: 
Ubuntu
snap
snapd
Re-rewriting JS Mate Poe in Rust/Wasm
WebAssembly has come a long way, but cannot yet fully eliminate the need for Javascript. This article explores the concessions and workarounds required to make a (mostly) Wasm Mate Poe work.
Posted: 5 April 2023
Tagged: 
Javascript
JS Mate Poe
Rust
Wasm
WebAssembly
Optimizing FLAC Audio Files for Production Hosting
Squeezing every last byte out of FLAC compression takes a little bit of effort, but is well worth it when files are being used on the web.
Posted: 5 August 2022
Tagged: 
audio
compression
encoding
FLAC
optimization
tutorial
Introducing Guff, a Combined SASS/SCSS Compiler and CSS Minifier
This article looks at the new x86-64 Linux CLI tool Guff, a fast, lightweight SASS/SCSS compiler and CSS minifier.
Posted: 26 May 2022
Tagged: 
CSS
frontend
minification
performance
Rust
SCSS
Migrating to Vanilla Firefox on Ubuntu 22.04
The latest Ubuntu LTS — 22.04 Jammy Jellyfish — only packages Firefox as a snap app, which unfortunately doesn't work very well. This article shows you how to work around that by going vanilla.
Posted: 28 April 2022
Tagged: 
Firefox
Ubuntu
snap
tutorial
How You Manage Debian Apt Sources Is Changing
This article aims to demystify the new Deb822 apt source format and recent deprecation of apt-key, while providing instructions for migrating to the new setup.
Posted: 9 February 2022
Tagged: 
Debian
Ubuntu
apt
apt-key
GPG
WordPress Core File Checksums
This post compares the relative performance of verifying the integrity of WordPress Core files against pre-recorded Blake3, MD5, SHA256, and SHA512 checksums.
Posted: 20 December 2021
Tagged: 
Blake3
checksums
filesystem
MD5
SHA256
SHA512
WordPress
Announcing Refract GTK!
The Refract image conversion tool is now a sexy GTK app, allowing you to easily view JPEG and PNG sources alongside the WebP, AVIF, and JPEG XL candidates.
Posted: 6 June 2021
Tagged: 
AVIF
front-end
GTK
images
JPEG XL
tutorial
WebP
JPEG XL, the New Image Format Nobody Wanted or Needed
This post looks at the new JPEG XL image format in comparison with existing next-generation formats like WebP and AVIF.
Posted: 28 April 2021
Tagged: 
images
front-end
tutorial
More Fussing With Images
This post walks through using the CLI app Refract to generate hand-tuned WebP and AVIF images more efficiently.
Posted: 4 April 2021
Tagged: 
images
front-end
tutorial
Faster Path Canonicalization in Rust
This post looks at how to improve recurisve directory traversal times in Rust by conditionally canonicalizing paths.
Posted: 29 January 2021
Tagged: 
Rust
performance
filesystem
Fussing With Images
A deep dive into how digital image formats work, where they're strong, where they're weak, and how to make the files as small as possible.
Posted: 3 January 2021
Tagged: 
images
front-end
tutorial
Dissecting the Blobfolio-Three-Ways Home Page Hero
This case study looks at how we created the Blobfolio-Three-Ways-With-X-Ray-Wipe block on our home page.
Posted: 31 December 2020
Tagged: 
front-end
case study
Javascript
CSS
Solving Simple Problems With Simple Apps
Taking an afternoon to write a simple application to solve a simple problem can make a world of difference.
Posted: 29 December 2020
Tagged: 
apps
BashMan
Cargo
ChannelZ
CheckSame
front-end
FYI
HTMinL
just
Node
Rust
Developing a Web Site *Without* Node/NPM in 2020
This article explores ways to minimize web project dependence on Node and NPM by using technologies like just, watchexec, sassc, and Closure Compiler.
Posted: 20 October 2020
Tagged: 
apps
front-end
just
Node
tutorial
workaround
Randomizing Weighted Choices in Javascript
This tutorial explores different methods for handling weighted lists in Javascript, comparing logic, execution, and performance.
Posted: 19 October 2019
Tagged: 
benchmark
data
front-end
Javascript
performance
random
Better Binary Batter: Mixing Base64 and Uint8Array
This case study explores the pros and cons of different types of binary data encodings, both in terms of storage and runtime resource usage and performance, and looks at ways of combining their relative strengths for maximum benefit.
Posted: 17 October 2019
Tagged: 
base64
compression
data
front-end
Javascript
performance
serialization
TypedArray
Replacing WPA Supplicant with iwd in Ubuntu Eoan
Intel's iwd networking drivers are a (mostly) production-ready drop-in replacement for the aging wpa_supplicant libraries. This tutorial explains how to Ubuntu Eoan Ermine users can make the switch!
Posted: 15 October 2019
Tagged: 
iwd
Linux
networking
NetworkManager
system administration
systemd
Ubuntu
WiFi
WPA supplicant
Restoring GTK3 Typeahead in Ubuntu 19.10 Eoan Ermine
This tutorial covers how to patch and rebuild the GTK3 packages to restore the old typeahead behavior in file dialogues, etc.
Posted: 14 October 2019
Tagged: 
files
GNOME
GTK
Linux
productivity
tutorial
Ubuntu
workaround
PSA: Ubuntu Eoan Upgrade Process Snapifies Some Apps
Upgrading from Ubuntu 19.04 (Disco Dingo) to (Eoan Ermine) causes some local packages to be replaced with their Snap counterparts.
Posted: 13 October 2019
Tagged: 
apps
Eoan
GNOME
Linux
performance
system administration
Ubuntu
workaround
Using Docker as a Build Environment
Docker is more than a way for Apple users to set up LAMP stacks on their MacBooks. Isolation, portability, and statelessness make Docker ideal for use as a general-purpose build environment. This tutorial puts that into practice, repackaging Debian Stretch's Nginx without polluting the host machine.
Posted: 27 December 2018
Tagged: 
Clang
Docker
GCC
Nginx
Ninja
Stretch
tutorial
Enable TLS 1.3 in Nginx on Debian Stretch
This tutorial covers how to rebuild the Debian Stretch Backports Nginx package (1.14.0) with BoringSSL to enable TLS 1.3 (RFC) support.
Posted: 7 July 2018
Tagged: 
Best Practice
Debian
encryption
Nginx
security
SSL
Stretch
system administration
workaround
Lazy-Loading SVG Sprites… Inline!
SVG sprites are an unquestionable workflow win, however they come with significant performance penalties. Using Javascript to dynamically populate inline SVGs from external sources can decrease page load by hundreds of milliseconds or more.
Posted: 29 June 2018
Tagged: 
benchmark
Brotli
compression
front-end
Gzip
Javascript
lazy-loading
optimization
performance
sprite
SVG
tutorial
PHP 7.2 on Debian Stretch
With PHP 7.0 nearing its official End of Life, it is a good idea to upgrade to PHP 7.2 on any Debian 9 (Stretch) servers. Aside from the security benefits, PHP 7.2 offers modest reductions in resource consumption and performance improvements.
Posted: 4 June 2018
Tagged: 
benchmark
Debian
hosting
performance
PHP
security
system administration
tutorial
Replace GRUB2 with systemd-boot on Ubuntu 18.04
This tutorial covers migrating from GRUB2 to systemd-boot on Linux systems running Ubuntu 18.04 Bionic Beaver. To keep things interesting, the test case covers Secure Boot, custom kernels (and postinstall hooks), and dm-crypt.
Posted: 2 June 2018
Tagged: 
case study
GRUB
Linux
LUKS
system administration
systemd
tutorial
Ubuntu
UEFI
XanMod
On Content-Security-Policy Headers
A detailed look at the "content-security-policy" header, reasons to use it, common pitfalls, and an explanation of the options worth using.
Posted: 14 January 2018
Tagged: 
Best Practice
case study
CSP
headers
hosting
security
system administration
Meltdown/Spectre Vulnerability Checker for Linux
How Linux users can evaluate their vulnerability to various Meltdown- and Spectre-related attacks.
Posted: 10 January 2018
Tagged: 
hosting
Linux
security
system administration
25 Easy PHP7 Micro-Optimizations
Micro-optimizations do not make a lot of sense at the level of an individual project, however any knowledge gained carries over into future projects. This article covers 25 simple micro-optimizations for PHP7 code.
Posted: 22 September 2017
Tagged: 
benchmark
Best Practice
optimization
performance
PHP
The Art of Database Partitioning
This tutorial demonstrates a use case for database partitioning, which can greatly improve MySQL query performance when dealing with large datasets.
Posted: 21 August 2017
Tagged: 
data
MySQL
optimization
performance
system administration
tutorial
How To Enable SSL For WordPress
Enabling SSL encryption for a WordPress site is not difficult, but there are a few gotchas to be aware of. This article examines different approaches for migrating the environment to SSL.
Posted: 20 July 2017
Tagged: 
encryption
Let's Encrypt
SSL
tutorial
WordPress
Nginx Static Compression, Gzip and Brotli
Implementing static Brotli compression at the server level will save bandwidth and decrease page load times for visitors. Though not available by default, this functionality can be added to Nginx by building it from source.
Posted: 28 June 2017
Tagged: 
benchmark
Brotli
compression
Debian
files
Gzip
Linux
Nginx
performance
Stretch
system administration
Upgrading from Debian Jessie to Stretch
Each Debian release comes loaded with tons of software updates, but because this only happens once ever few years, upgrading might require a little manual intervention. This post examines common upgrade issues for web servers upgrading from Debian Jessie to Stretch.
Posted: 21 June 2017
Tagged: 
Debian
hosting
Jessie
Linux
OS
Stretch
Upgrade
How to Science the Shit Out of Your Server
While most users are familiar with the GUI/screensaver version of Boinc, it can also be installed without graphical dependencies and run on web servers.
Posted: 17 May 2017
Tagged: 
apps
Boinc
data
politics
SETI
system administration
tutorial
Fix Linux DNS Issues Caused by Systemd-Resolved
Recent releases of Ubuntu and other major Linux operating systems have seen a lot of networking changes. In many cases, these changes go completely unnoticed by users, but in others, can cause intermittent latency, failed pages, etc. This tutorial shows how to fix issues related to systemd-resolved.
Posted: 5 May 2017
Tagged: 
DNS
Linux
NetworkManager
performance
system administration
systemd
unbound
workaround
When a Stranger Calls: Sanitizing SVGs
The SVG image format is immensely useful for web designers, but presents endless security challenges for system administrators. This post explores approaches taken by a modern PHP sanitization library to mitigate these dangers.
Posted: 9 March 2017
Tagged: 
Best Practice
case study
data
files
images
safety
security
SVG
Climbing MIME Improbable
While the complexity of web content has exploded in recent years, major applications and operating systems have yet to revisit their inadequate MIME type detection functionality. The blob-mimes project aims to solve this problem, at least for applications coded in PHP.
Posted: 8 March 2017
Tagged: 
case study
data
files
MIME types
PHP
Optimizing SVGs For Web Use
The SVG image format is a web designer's dream, but just like their binary counterparts, they should be optimized before being added to a production environment.
Posted: 18 February 2017
Tagged: 
front-end
images
optimization
security
SVG
tutorial
Using Let's Encrypt on Debian
This tutorial shows how to get started with Let's Encrypt on servers running Debian Jessie.
Posted: 20 December 2016
Tagged: 
Debian
dehydrated
encryption
Let's Encrypt
security
SSL
system administration
tutorial
A+ SSL Configuration for Nginx
While there are many guides out there covering SSL server configurations, many of them contain outdated and insecure information. This tutorial shows how to configure SSL for Nginx for maximum security and performance.
Posted: 20 August 2015
Tagged: 
encryption
Nginx
security
SSL
system administration
tutorial