All articles
-
Liveness and readiness checks
A liveness check answers whether a process should be restarted; a readiness check answers whether it should receive traffic. Conflating them causes restart loops or traffic to instances that cannot serve.
-
A garden rain gauge log: gauge type, rim height, exposure and a fixed daily reading time
A proposed protocol for a household rainfall record modelled on how official storage gauges are read: state the gauge type and orifice, the rim height and the surrounding obstructions, read once a day at a fixed clock time to the gauge's resolution, record a trace and an empty gauge explicitly, and keep snow and blocked-funnel days as flagged rows; no rainfall figure is claimed.
-
TLS for rsyslog forwarding with the gtls driver, and when RELP is worth adding
rsyslog's gtls network stream driver encrypts and can mutually authenticate a forwarding connection with X.509 certificates, configured with StreamDriverAuthMode. Plain TLS over TCP still loses in-flight messages on an unclean disconnect; RELP's application-level acknowledgement is what closes that gap, at the cost of extra moving parts.
-
Designing URLs and applying percent-encoding rules
A procedure for choosing a URL structure (lowercase hyphenated segments, stable identifiers, one canonical form, nothing secret in the URL) and for encoding it correctly per RFC 3986: encode reserved characters only where they would act as delimiters, never encode unreserved ones, encode and decode exactly once, use uppercase hex digits, and remember that + means space only in application/x-www-form-urlencoded query strings as defined by the WHATWG URL Standard.
-
Save-game schema migration and recoverable writes
Version persistent game data, migrate old representations explicitly, validate before restoring the world, and commit updates without destroying the last usable save.
-
Bounded zlib decompression: enforce the cumulative output budget while decoding
Limit produced bytes across calls and distinguish incomplete streams, unconsumed input and trailing data.
-
Setting up a Samba file server: smb.conf, testparm, and disabling SMB1
Standing up a Samba share means editing [global] and a share section in smb.conf, choosing between a local smbpasswd database and Active Directory membership, validating the file with testparm before reloading, and confirming SMB1 stays off.
-
Cleaning up a branch before review
Before asking for review, squash fix-up commits, split mixed ones and rewrite messages so that each commit is one reviewable change; git rebase -i and autosquash do the mechanical part.
-
details and summary: native disclosure widgets, exclusive accordions and hidden until-found
details/summary is a disclosure widget with no script: the open attribute shows the content, a shared name attribute makes a group exclusive so opening one closes the others, the toggle event reports changes, and summary is styled as display: list-item. For collapsed content that must stay searchable, hidden=until-found reveals it on find-in-page or fragment navigation.
-
Configuring kdump to capture a RHEL kernel crash
kdump reserves memory ahead of time so a second, minimal kernel can boot after a panic and write out a vmcore for analysis. This methodology covers reserving that memory, enabling the service, and why deliberately testing it takes down the host — schedule the test accordingly.
-
Check digits: what Luhn, ISBN-13 and IBAN mod-97 catch and what they do not
A check digit is redundancy computed from an identifier's other characters so that a copying error is detected before a lookup: Luhn (mod 10 over alternately doubled digits) guards card numbers, ISBN-13 uses alternating weights 1 and 3, and IBAN uses ISO/IEC 7064 MOD 97-10 with two digits. They catch single-character errors and most adjacent transpositions, never a wrong-but-valid identifier.
-
Incident status updates: a template and a cadence
During an incident one person owns communication and posts updates on a fixed schedule from a template: status, user-visible impact, what is known, what is being done, and the time of the next update; the update goes out on time even when nothing has changed.
-
Making tangent-space normal maps agree with the renderer
Diagnose normal-map seams by checking encoding, tangent handedness, mesh triangulation, and agreement between baking and runtime transforms.
-
MIME structure of an email: multipart/alternative, the plain-text part and encodings
A text-plus-HTML message is a multipart/alternative whose parts are ordered from plainest to richest (text/plain first, text/html last); bodies with non-ASCII bytes use quoted-printable or base64, headers use RFC 2047 encoded-words. Generate the text part from the same data as the HTML, escape variables, and respect line-length limits.
-
MCP file-write traversal: notebook vault containment and Ansible Lightspeed scope
Indirect prompt injection can steer a file tool outside its intended output directory. The notebook MCP fix requires an explicit vault root, while the Ansible Lightspeed advisory identifies an extension issue without a confirmed fixed-version range.
-
Circuit breakers: failing fast when a dependency is down or slow
A circuit breaker counts failures and slow calls to a dependency; above a threshold it opens and rejects calls immediately, then lets a few trial calls through (half-open) before closing again. It protects the caller's threads and gives the dependency room to recover, but only with sensible windows, a fallback and a timeout underneath.
-
File paths with pathlib
pathlib.Path represents paths as objects with joining, parts, suffix handling and I/O helpers, avoiding string concatenation bugs; resolve() and relative_to() make path containment checks explicit.
-
Asynchronous communication norms for distributed teams
Written norms say which channel carries which kind of message, how fast a reply is expected, what counts as urgent, and where outcomes are recorded; the message itself leads with the ask, carries its context, and is complete enough that a reader in another time zone can act without a follow-up question.
-
MCP 2026-07-28 authorization: issuer checks and client registration changes
The revision strengthens authorization-response issuer validation, binds stored registration credentials to their issuer, and deprecates Dynamic Client Registration. Client ID Metadata Documents were already recommended in the preceding revision.
-
For engineers new to Rust, build wait time overtakes borrow-checker errors as the main logged friction within the first two months
Hypothesis: borrow-checker errors dominate the friction that engineers new to Rust record in their first weeks, but their share falls quickly, while entries about waiting for builds (despite cargo check, which the Cargo documentation describes as skipping code generation and therefore being faster than cargo build) rise and become the largest category within two months; a proposed friction-log test, with no result claimed.
Machine-readable: JSON