All articles
-
Logs, metrics and traces: choosing the signal
Logs record discrete events, metrics aggregate numeric measurements over time, and traces follow one request across services; OpenTelemetry standardises all three so that they can be correlated.
-
Users, roles and RBAC on Solaris: why root is a role by default and how pfexec replaces sudo
Oracle Solaris implements privileged administration through RBAC rights profiles assigned to users or roles, and configures root as a role rather than a directly loginable user by default. pfexec, not sudo, is the native command for running a single privileged command under an assigned profile.
-
The JavaScript event loop: tasks, microtasks and rendering
JavaScript runs one job at a time; the HTML event loop takes a task, then drains the whole microtask queue (promise reactions, queueMicrotask) before the next task or a rendering opportunity. Long synchronous work and endless microtask chains block input and painting.
-
Testing backups properly: the restore drill
A backup only counts as a backup once a restore into an empty environment has succeeded and been verified. The procedure: define the expectation, restore from the backup alone, measure completeness and function, record the duration, file the findings and schedule the next drill.
-
Serial and out-of-band consoles for servers that keep access when the network is down
A serial console (console=ttyS0,115200 plus a getty on the line), a cloud provider's serial console feature, or IPMI/BMC Serial-over-LAN each give an administrator a way into a server that has no working network stack — the situation a purely SSH-based access plan cannot survive.
-
CIS Benchmarks and DISA STIGs as a hardening baseline: what they are and how to apply them selectively
CIS Benchmarks and DISA STIGs are two independently maintained sets of configuration recommendations; both offer selectable profile levels rather than one fixed target. Applying a profile wholesale without recording exceptions is a common way hardening work breaks a production service.
-
Routing all interrupts to one rotating person raises the rest of the team's uninterrupted time
Hypothesis: a team that assigns tickets, questions and operational requests to a single rotating interrupt handler, and stops distributing them across everyone, increases the median length of uninterrupted work blocks for the other members without lengthening interrupt response times beyond the agreed target; a proposed measurement.
-
Server-side request forgery: fetching URLs the user supplies
When a server fetches a user-supplied URL it can be pointed at internal services and metadata endpoints; allow-list schemes and hosts, resolve and check addresses, disable redirects to private ranges, and prefer not fetching at all.
-
Profile before optimising
Measure where time is actually spent with a profiler before changing code for speed; most guesses about hot spots are wrong, and unmeasured optimisation adds complexity without benefit.
-
Signed arithmetic overflow: document the compiler contract before changing optimization
Separate arithmetic requirements from GCC overflow flags when a release build behaves differently from a debug build.
-
Token bucket, leaky bucket and sliding window: how rate-limiter algorithms differ
Fixed windows are cheap but let twice the limit through at a boundary; sliding logs are exact but store every timestamp; sliding-window counters approximate in constant memory; token buckets allow bursts up to the bucket size at a fixed refill rate; leaky buckets smooth output by delaying. nginx and Envoy document the last two.
-
What an agent needs from an API description
Agents read machine descriptions rather than prose: stable links from one discovery document, typed responses, documented errors and retry signals, idempotency, and explicit statements of what is not available.
-
Carrying a request ID end to end: edge, logs, downstream calls and the response
Generate a request identifier at the edge (nginx offers $request_id, 16 random bytes in hex), pass it to the application in a header, keep it in request-scoped context so every log line and every outbound call carries it, and return it in the response so that a user's report can be matched to the logs of every service it touched; where tracing exists, the W3C trace ID is that identifier.
-
Test data builders with defaults reduce test breakage when a domain object changes
Hypothesis: suites that build objects through builders, where every field has a valid default and a test sets only the fields it asserts on, need fewer test edits per schema or constructor change than suites relying on shared fixtures or object mothers with canned instances.
-
Validating email addresses: what a syntax check can and cannot tell you
RFC 5321 caps the local-part at 64 octets and a path at 256; the HTML standard deliberately uses a simpler grammar than RFC 5322 for input type=email; internationalised addresses need SMTPUTF8 end to end. Check syntax and lengths, look up MX at signup, confirm ownership with a message, and never 'correct' an address automatically.
-
Decomposing a compound judgment into atomic questions for a decision model raises agreement with human labels compared with one multi-factor question
Vendor guidance for decision models says to ask one specific thing per question and combine in code; this hypothesis states that prediction as a measurable claim: for judgments that weigh several independent factors, the decomposed form agrees more often with human labels than a single question whose criteria describe the combination.
-
Recording the execution target before interpreting a diagnostic result
Establish which process, checkout, service instance, or database a diagnostic command actually reached before applying its result to the user’s reported problem.
-
Combining baked lightmaps with lighting probes for moving objects
Plan surface UVs and spatial lighting samples together so static scenery and dynamic objects share a coherent baked lighting setup.
-
Accessibility: applying the four WCAG principles in practice
WCAG 2.2 groups all success criteria under four principles: perceivable, operable, understandable, robust. Knowing the most common failures for each principle (missing text alternatives, keyboard traps, insufficient contrast, unlabeled fields, targets that are too small) lets you find many barriers without specialist tools; level AA is the usual target.
-
Ren'Py Dialogue Branches: Connect Choices, Story Variables and Return Paths
Use menus to select local story blocks, labels to organize destinations, and explicit call or jump semantics so branches preserve their consequences and reconnect intentionally.
Machine-readable: JSON