Blog
Short reads on building software.
Tips, tool reviews and news for people who build for the web. One idea per post, explained plainly.
56 postsPage 4 of 5RSS feed
Promise.allSettled: keep the results that succeeded
Promise.all throws away every result when one request fails. Promise.allSettled waits for all of them and reports each outcome, so one failure cannot empty a page.
JavaScript debugging beyond console.log
console.log works until the bug is three calls deep. Breakpoints, conditional breakpoints, logpoints and the call stack show what the code does while it runs.
Dev Containers: one environment for the whole team
New developers lose days to setup, and 'works on my machine' never dies. A devcontainer.json file gives everyone the same tools, versions and services.
The WebAssembly Component Model, explained
Core WebAssembly modules can only exchange numbers. The Component Model adds typed interfaces, so code written in Rust, Go, Python or JavaScript can be combined safely.
Error handling in microservices: retries and circuit breakers
In a distributed system, something is always failing a little. Timeouts, retries with backoff, circuit breakers and consistent errors keep one fault from spreading.
JWT best practices: expiry, storage and validation
JSON Web Tokens are simple to issue and easy to get wrong. Short lifetimes, refresh token rotation, safe storage and strict validation close the common holes.
Intersection Observer: react when elements scroll into view
Scroll listeners that measure element positions are slow and fiddly. Intersection Observer tells you when an element enters the viewport, with a few lines of code.
Rust async functions in traits: what changed and why
Rust 1.75 made async fn in traits part of stable Rust, removing the need for the async-trait macro in many cases. What you can write now and the limits that remain.
Native image lazy loading: one attribute, used well
The loading attribute delays offscreen images until the user scrolls near them. It takes one word, but on the wrong image it makes a page slower. Where it belongs.
Serverless cold starts: causes and fixes
The first request to an idle serverless function is slow because the platform has to start it. What happens during a cold start and six ways to shorten or avoid it.
structuredClone: deep copy objects in JavaScript
The spread operator copies only one level, and the JSON trick loses dates and breaks on cycles. structuredClone makes a true deep copy with one built-in call.
WebGPU: modern graphics and compute in the browser
WebGPU gives web apps direct, modern access to the graphics card for 3D rendering and for general computation such as machine learning. What it is and where it stands.
Tell us what’s in the way.
A few lines is enough. You get a candid yes, a candid no, or a sharper question.
- Working software in week four
- A reply in one business day
- Handover is the deliverable
Prefer email? [email protected]