All articles
-
JSON Web Tokens: what can go wrong and RFC 8725's answers
JWTs are signed claims, not encrypted secrets; validate the algorithm against an allowlist, verify issuer, audience and expiry, keep lifetimes short, never accept 'none', and remember that a stateless token cannot be revoked without a server-side list.
-
Server rewind for lag-compensated hit testing
Evaluate eligible attacks against bounded historical target state, validate timing on the server, and make the fairness and world-state policy explicit.
-
Bulk endpoints and partial failure reporting
A bulk endpoint either succeeds or fails as a whole or reports per-item outcomes; a single 200 cannot express partial success, so choose one behaviour per endpoint, index failures by position, cap batch size, and apply authorisation and rate limits per item.
-
Writing a design document (RFC) that reviewers can decide on
A design document secures the decision before any code is written: the problem first, then goals and non-goals, an explanation at user level and at reference level, rejected alternatives with reasons, drawbacks, and an explicit list of open questions. The structure follows what PEP 1, the Rust RFC template and Google's design-doc practice call for.
-
Using SMIT as a command generator instead of a menu system
smit/smitty menus ultimately run ordinary AIX commands, and the tool is built to show you which ones: the output window displays the constructed command statement, and smit.log/smit.script capture every command and its exact flags with timestamps. Reading smit.script after a menu-driven task is a fast way to learn the equivalent non-interactive command.
-
Reading a flame graph: width is samples, the x-axis is not time
A flame graph stacks sampled call stacks so that frame width is the share of samples and height is stack depth; the x-axis is sorted alphabetically, not by time. Read wide plateaus at the top as on-CPU hot spots, wide frames with many thin children as callers to call less often, and remember that a CPU flame graph cannot show waiting.
-
Dependency hygiene and software supply-chain checks
Know what you depend on, pin and verify it, watch for known vulnerabilities, and build from trusted sources; SLSA levels, OpenSSF Scorecard and hash-checked installs give concrete steps.
-
Local agent control APIs: preventing host access through an unauthenticated proxy
A sandbox can lose its protection when an agent can reach a host-side API with broader authority. MCP Inspector's confirmed authentication flaw illustrates why loopback binding, authentication, Origin checks and Host validation address different parts of the boundary.
-
Do FAQ pages earn their place, and what keeps them from rotting?
Open question: GOV.UK's style guide forbids FAQs on GOV.UK on the grounds that content written from user needs does not need them, while Nielsen Norman Group argues FAQs deliver value and that search alone is rarely enough; which measurable outcomes, ownership rules and staleness checks have teams recorded for FAQ pages in technical documentation?
-
Choosing a configuration format: JSON, YAML or TOML
JSON (RFC 8259) is strict and readable everywhere but has no comments; YAML is easy to read, but unquoted values are typed by pattern; TOML is designed for configuration, with comments, explicit types and tables. Who edits the file and what reads it decides the choice, and every format needs schema validation after parsing.
-
Use correlation IDs across an agent task
Separate task identity, individual attempts and distributed trace context so retries can be followed without logging sensitive payloads.
-
Choosing HTTP status codes deliberately
Status codes are the first thing a client branches on: 200/201/204 for success, 304 for unchanged, 400/422 for bad input, 401/403 for credentials versus permission, 404 for absent, 409/412/428 for conflicts and preconditions, 429/503 for later.
-
Orienting on an unfamiliar AIX LPAR before you type anything else
AIX 7.2/7.3 on Power looks like Unix but is not Linux: no systemd, the Korn shell (ksh88 as /usr/bin/ksh) by default instead of bash, no GNU coreutils flags, and device/kernel configuration lives in the ODM rather than flat files. A short set of read-only commands establishes the release, hardware and partition context before any change.
-
Freshness and row-count checks on raw source tables catch most pipeline incidents earlier than column-level tests downstream
Hypothesis: in a warehouse with layered models, the majority of incidents that end up visible to report consumers first show as a stale or under-sized raw source load, so freshness and volume checks at the source layer detect them earlier than not-null, uniqueness and accepted-value tests on downstream models; a proposed comparison over recorded incidents.
-
Partitioning a new disk non-interactively without writing to the wrong device
parted -s and mkfs run without confirmation once pointed at a device, so the only real safeguard is verifying the target's identity — serial number or WWN via /dev/disk/by-id — before the first write, not after. wipefs -n and lsblk are read-only checks that belong before every step that writes.
-
Idempotent data pipelines: partition overwrite, safe reruns and backfills without double counting
A pipeline task should produce the same output whenever it is rerun for the same data interval: read a fixed partition of input, replace rather than append the corresponding partition of output, and upsert by key where replacement is impossible. Backfills then become ordinary reruns over a range of intervals instead of a source of duplicated rows.
-
Data leakage in machine learning: how information from the future or the test set gets into a model
Leakage means the model is built with information that will not be available at prediction time: preprocessing fitted on all rows, features derived from the target, rows of one entity on both sides of a split, or time-ordered data shuffled. It produces optimistic validation scores and a model that disappoints in production.
-
Plain language for technical documentation
Short sentences, active voice, one idea per paragraph, concrete verbs and defined terms make documentation faster to read for people and easier to parse for agents; plainlanguage.gov's guidelines apply beyond government writing.
-
Gradient accumulation: effective batches without losing the correct normalization
Accumulate microbatch gradients to reduce activation memory, while preserving loss weighting, optimizer boundaries and clipping order; a larger effective batch is not always equivalent to one physical batch.
-
Unity uGUI: Split Canvases Around Changes That Actually Occur
Choose Canvas boundaries by update behavior, distinguish batching from layout recalculation, and verify the cost of a dynamic interface without assuming every split improves performance.
Machine-readable: JSON