Anti-Patterns in Software Blogging — Michael Lynch

Software posts lose readers through slow openings, assumed knowledge, links that do the explaining, and broken mobile layouts.

Published:  · Added:  · 1 min

Linux Containers in 500 Lines of Code — Lizzie Dixon

A hands-on tour of the kernel boundaries that make a container: namespaces, capabilities, seccomp, and resource limits.

Added:  · 1 min

Peter Bex on Maintaining CHICKEN Scheme and Finding the Wrong Suspect

A CHICKEN Scheme maintainer on debugging a heap corruption, learning a language runtime, and knowing when a REPL's state cannot be trusted.

Published:  · Added:  · 1 min

Doom in SQL: Where Relational Thinking Works — and Where It Hurts

Lukas Vogel runs Doom's game logic and renderer inside CedarDB, revealing which parts fit set-based processing and which fight it.

Added:  · 1 min

SCM: Local Search for Photos and Video Scenes on macOS — Allen Lee

Screen Memories combines on-device vision search, sampled video scenes, OCR, and transcription; its 'every frame' pitch deserves a closer look.

Added:  · 2 min

Anatomy of a Lean Proof for Software Engineers — Agost Biro

A small binary-adder proof shows what formal verification adds beyond an executable implementation: explicit specifications, stronger invariants, and surfaced assumptions.

Published:  · Added:  · 2 min

Automating Wi-Fi Setup Testing on the ESP32 — Groundrun

A hardware-in-the-loop regression suite tests five ESP32 Wi-Fi commissioning paths with a real Android phone, network behavior, and phase-level timings.

Added:  · 2 min

How ParadeDB Closed an 8× Search Performance Gap — Ming Ying

A benchmark loss led ParadeDB to better data locality, adaptive Blockmax pruning, and a sharper distinction between exact and approximate BM25.

Published:  · Added:  · 2 min

RIP, vector database — Dan Harrison

Turbopuffer is demoting vector search from its primary storage layout after the original optimization began constraining every other query path.

Added:  · 1 min

Dear Software Makers — Jim Nielsen

Metrics can test a product choice, but they cannot replace the judgment and conviction needed to make one.

Published:  · Added:  · 1 min

Testing WebGPU Data Layouts with Facet — Matthew Keeter

A unit-test technique catches Rust/WGSL field-size and offset mismatches before malformed data reaches a GPU shader.

Added:  · 1 min

Needed 1+1, Built a Functional Programming Language — Pranav Desai

A binary-tree exercise grows into a Lisp interpreter in C, forcing concrete choices about closures, pointer-stable allocation, and garbage collection.

Added:  · 1 min

What Makes Software Development Engineering — Simon Park

Engineering is the process that lets a team produce reliable software without depending on individual brilliance.

Published:  · Added:  · 1 min

A Staff Engineer's Guide to Inventing Work — Sujith Jay Nair

A practical framework for finding and prioritizing platform work from system, user, organizational, and industry signals.

Published:  · Added:  · 1 min

Software Occlusion Culling in Block Game — Eniko Fox

How a conservative CPU depth buffer, hierarchical voxel occluders, and workload reduction cut an occlusion pass from roughly 150 ms to 4 ms.

Published:  · Added:  · 1 min

Conquering the Moon: Root on luarocks.org From a Package Upload — Vhyrro

A regular account plus a crafted package was enough for root on the Lua package registry. The sandbox was solid — the LuaJIT bytecode loader underneath it was not.

Published:  · Added:  · 3 min

Malleable Software: Restoring User Agency in a World of Locked-Down Apps — Ink & Switch

Settings, plugins, modding, open source and AI coding all hit a ceiling on real customization. An Ink & Switch essay proposes three design patterns instead: gentle slopes, tools rather than apps, and communal creation.

Published:  · Added:  · 3 min

“They Had No Concept of a Duty of Care to Their Users” — Marcin Wichary

NeoVim changed its undo file format, deleted the existing vim undo files, and left a 20-year user with nothing. The bug was forgivable. The answer — that persistence was never promised — is what lost him.

Added:  · 3 min

Go Concurrency Distilled — Anton Zhiyanov

A nineteen-part interactive refresher on Go concurrency: select semantics, pipelines, sync primitives, atomics, testing and tracing — and the difference between a data race and a race condition.

Published:  · Added:  · 3 min

There is more to code review than (automatable) detection — John Allspaw

A paper argues coding agents can replace human review. Allspaw's reply: decompose a human job into measurable functions and you lose the integration that mattered.

Added:  · 2 min

Don't couple your Go code to GitHub — Iain Cambridge

Go import paths name your git host, so moving repositories means rewriting imports everywhere. The fix is a vanity domain and a go-import meta tag.

Added:  · 2 min

Real-Time Feedback: My Closing Move in Every Interview — Mark Grebler

Give the candidate your concerns live, at the end of the interview. They either correct you or confirm you — either way you know more before the debrief.

Published:  · Added:  · 4 min

Writing Efficient C++ Code — Adam Sawicki

Choosing a native language isn't a performance strategy. Data layout decides whether the hardware can help you — a 2013 essay that reads like today's mechanical sympathy.

Added:  · 3 min

C's Flexible Integer Sizes Were Not a Design Mistake — Gustavo Pezzi

int was never meant to be 32 bits. C's platform-dependent integer sizes were the portability mechanism that let one language run on 12-, 16-, 36- and 60-bit machines.

Added:  · 3 min

Improving site performance by shipping more CSS — Josh Black & Marie Lucca

GitHub replaced CSS-in-JS with CSS Modules across Primer and dotcom: 55% less server-side render time, 25% less component init, ~7,760 sx props migrated with no breakage.

Published:  · Added:  · 2 min

How the Intel 8087 Computed Tangents — Ken Shirriff

Intel's 1980 floating-point coprocessor ran 16 CORDIC steps for the high-order bits, then handed the tiny residual to a Padé rational approximation — and deliberately never divided.

Added:  · 3 min

One Twitch Chat Message to Code Execution — Dylan Iffrig-Bourfa

A chat overlay that rendered viewer messages as HTML, a Chromium build inside OBS running without its sandbox, and a V8 bug already exploited in the wild — enough to turn a chat message into native code on the streamer's machine.

Published:  · Added:  · 3 min

One CPU Atomic Instruction, One Packaging Infinite Loop: The Lost Update on LA664 — Jiajie Chen

A Debian LoongArch package hung forever because a counter incremented with #pragma omp atomic kept losing updates. Six months later the cause was a CPU erratum: atomic add is not always atomic.

Published:  · Added:  · 3 min

When the Debugger Lies — Daniel Mangum

Bench-poking the nRF54L key management unit by hand, a register push that looked like a no-op turned out to be a stale J-Link memory cache — the write landed, the CPU was halted, and the debugger kept serving the old value.

Published:  · Added:  · 2 min

A New World Airport and Its Baggage — J.B. Crawford

Denver's automated baggage system had 20 miles of track, 4,000 robotic carts and a hundred 486s running custom OS/2 control software. It never really worked. A reconstruction of the contracting, schedule and software failures behind the most-taught systems-engineering debacle.

Added:  · 3 min

Postgres SELECT DISTINCT Does Not Scale — Peter Kraft

A properly indexed SELECT DISTINCT on a partitioned queue scanned 1M rows to find 3 partition keys. Postgres has no loose index scan, so the fix is a recursive CTE that coerces the planner into a different shape.

Added:  · 2 min

Breaking Up with Google Play: Why Conversations Is Now Free — Daniel Gultsch

Twelve years of Play Store income, a 15% cut worth over €1,000 a year, and a two-week review queue that makes no distinction between feature updates and security updates. Daniel Gultsch explains why his XMPP client is now free.

Published:  · Added:  · 2 min

Writing a Ray Tracer in Brainfuck — Austin Shijo

Brainfuck has eight instructions and one data structure. Austin Shijo built fixed-point arithmetic, division, square roots and structured control flow on top of them, and got a working ray tracer that renders one pixel per minute.

Added:  · 3 min

Amiga Screens: A Primer — Carl Svensson

Screens were first-class OS objects on the Amiga: overlapping display areas with their own resolutions, colour depths and palettes, switched instantly and dragged to reveal each other — on a 7 MHz machine.

Added:  · 3 min

First Principles Thinking — Sunil Sadasivan

What separates engineers who seem to know what needs doing: ask why first, set your accumulated experience aside long enough to see the actual problem, and buy momentum with the smallest possible step.

Published:  · Added:  · 2 min

Breaking the Avast Antivirus Sandbox With a Double-Fetch Pool Overflow — SAFA Team

A string length read twice in Avast's aswSnx driver turns a paged-pool overflow into arbitrary kernel read/write and SYSTEM. The chain, and the object-selection reasoning behind it, is the part worth keeping.

Added:  · 3 min

What About Rails? — Jared Norman

Rails World's opening keynote announced a flagship app leaving the framework and reframed convention over configuration as token efficiency. Jared Norman reads the productivity claims against the evidence behind them.

Added:  · 3 min

How Did AMD Ryzen Get 50% Faster in Two Years? — Daniel Lemire

Ryzen 7 single-core performance grew 47% from Zen 3 to Zen 5 while clocks rose only 15% — the gains came from wider cores: more dispatch width, integer ALUs, reorder buffer entries and 512-bit SIMD.

Published:  · Added:  · 2 min

Writing Parquet Files Using Haskell — Raghav Sharma

DataHaskell's new Parquet writer and the trade-offs behind it: row-group and page sizes are best-effort targets, pinned ByteArrays cannot be grown in place, and 256 KiB write chunks dodge kernel dirty-page throttling.

Published:  · Added:  · 3 min

Platform-Independent SIMD in Go — David Chase and Junyang Shao

Go 1.27's experimental simd package deletes fixed-size vectors from the type system, exposes only the intersection of platform operations, and fills the gaps with emulation — with front-end AST rewriting doing per-width specialization.

Added:  · 3 min

Tech Needs Humanists More Than Ever — Fabrizio Ferri Benedetti

A technical writer's answer to 'what skills should I learn now' is philosophy, literature, linguistics and history — because once AI handles fact retrieval and trite prose, the edge is having positions you can defend.

Published:  · Added:  · 2 min

August 27 TCRF DDoS Attack Postmortem — Xkeeper

A wiki operator's twelve-day timeline of a volumetric DDoS: provider null-routing with no ETA or override, why anti-bot gates do nothing here, one firewall mistake that exposed the origin, and a mitigation vendor that suspended the account mid-attack.

Added:  · 2 min

Half of Sampled Local-Business Sites Fail Every Header Check — RACKCRUNCH

RACKCRUNCH read the HTTPS response headers of 4,688 directory-listed US local-business sites. Half met none of seven criteria — and when their CSPs were actually parsed, script-restricting policies dropped to 4 percent.

Published:  · Added:  · 3 min

SourceHut Account Takeover via Build Logs — Arusekk

An unescaped OSC 8 hyperlink in ansi2html let a build log carry XSS into any viewer's browser. SourceHut shipped the vulnerable library for four and a half years — which is the part worth remembering.

Published:  · Added:  · 3 min

The GitHub wiki is an anti-pattern — Michael Heap

The GitHub wiki has exactly one advantage — it is one click away from anywhere in the repo — and a long list of reasons against it. Project docs belong in a /docs folder, versioned and reviewed like code.

Published:  · Added:  · 2 min

GitHub Left a Malware Imitation Up for Three Weeks — Andy Brice

An impostor repo carried his product name and logo while its installer was flagged for malware. GitHub support stayed silent for 23 days — the takedown came ten minutes after the story hit Hacker News.

Added:  · 2 min

The Year of Internal Tools — Mathias Hansen

Geocodio went from bash scripts to full-fledged internal apps. The constraint was never building them — it was maintaining them, and that is what changed.

Published:  · Added:  · 3 min

Vary: The Ugliest Part of HTTP — Alex Krivit

Vary tells a cache which request fields may affect a response, but not which differences actually matter. Cloudflare splits the decision: the origin declares what may vary, the edge decides what variation is worth caching.

Published:  · Added:  · 2 min

VSCode's SSH Agent Is Bananas — Thomas Ptacek

VS Code's remote-SSH mode stages a bash stager and a bundled Node install onto the host, then opens a WebSocket back to your editor — with filesystem, PTY, and persistence.

Published:  · Added:  · 2 min

Disclosure of Vulnerability in Radicle's Network Protocol — The Radicle Team

Radicle's node transport was never encrypted and its handshake never authenticated peers, so anyone on the network path could read private repositories and replay an allow-listed Node ID to fetch them on demand. The team published before the fix existed, because exposure cannot be undone by a patch.

Added:  · 3 min