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.
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.
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.
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.
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.
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!
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.
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.
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.
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.
Lazy-Loading SVG Sprites… Inline!
Building a Custom XanMod Kernel on Ubuntu 18.04
The XanMod Linux kernel source now ships with the graysky GCC optimization patch, allowing users to compile custom kernels tailored to their specific CPU architecture. This article explains how to use the feature and examines other areas for de-bloat improvements.
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.
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.
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.
Meltdown/Spectre Vulnerability Checker for Linux
How Linux users can evaluate their vulnerability to various Meltdown- and Spectre-related attacks.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Using Let's Encrypt on Debian
This tutorial shows how to get started with Let's Encrypt on servers running Debian Jessie.
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.