The blog

Writing from the workshop

119 articles on the parts that actually hurt.

section
You copy and reverse the array to find the last match. `findLast()` searches from the end directly.
JavaScript

You copy and reverse the array to find the last match. findLast() searches from the end directly.

The usual workaround — `[...arr].reverse().find()` — allocates a full copy just to walk it backward. ES2023 added `findLast()` and `findLastIndex()` to search from the end without touching the original.

Aug 14, 2026 · 4 min
English

English B2: mixed conditionals — when the time of the condition and the result differ

The three textbook conditionals assume the if-clause and the result share a time frame. Real regret rarely does. Mixed conditionals are how you say a past mistake still shapes today.

Aug 14, 2026 · 3 min
Your `fetch()` in `beforeunload` is being silently dropped. Use `navigator.sendBeacon()`.
JavaScript

Your fetch() in beforeunload is being silently dropped. Use navigator.sendBeacon().

Browsers cancel in-flight network requests when a page unloads. The common fix — synchronous XHR — is deprecated. `navigator.sendBeacon()` is the correct, fire-and-forget API designed exactly for this case.

Aug 13, 2026 · 4 min
Spanish

Spanish A2: pretérito vs imperfecto — the photo and the film

Spanish has two past tenses and they are not interchangeable. One takes a photograph of a completed event; the other films the background it happened against.

Aug 13, 2026 · 3 min
You're blocking touchmove events to contain scroll. `overscroll-behavior` does it natively.
CSS

You're blocking touchmove events to contain scroll. overscroll-behavior does it natively.

When a scrollable container hits its edge, the page behind it starts scrolling too. Developers block this with JavaScript event handlers or body overflow tricks. overscroll-behavior is the CSS property that turns off scroll chaining in one line.

Aug 12, 2026 · 4 min
Turkish

Turkish A2: -dı vs -mış — the past you saw and the past you heard about

Turkish has two past tenses, and the choice is not about time. One says you witnessed it; the other says you did not. Getting this wrong makes you sound like you are inventing things.

Aug 12, 2026 · 3 min
You're polling setInterval to detect DOM changes. `MutationObserver` fires when they happen.
JavaScript

You're polling setInterval to detect DOM changes. MutationObserver fires when they happen.

Watching for DOM mutations with setInterval or custom event dispatch is fragile and imprecise. The MutationObserver API delivers a callback exactly when attributes, text content, or child elements change — with full control over which types of mutations you watch.

Aug 11, 2026 · 4 min
English

English B1: used to, would, and be used to — three things that look alike

Used to walk, would walk, and be used to walking are not variations of one structure. Two describe the past, one describes a state, and mixing them is one of the most common B1 errors.

Aug 11, 2026 · 3 min
You're importing pako to gzip data. `CompressionStream` does it natively.
JavaScript

You're importing pako to gzip data. CompressionStream does it natively.

pako is one of npm's most downloaded packages — pulled in by thousands of projects to compress data before storing or sending it. CompressionStream and DecompressionStream do the same job natively, in any modern browser and Node.js 18+, with no dependencies and native C-speed execution.

Aug 10, 2026 · 4 min
Spanish

Spanish A1: ser vs estar — two verbs for 'to be', and the line between them

Spanish splits 'to be' into ser and estar. The usual advice — permanent versus temporary — breaks immediately. Here is the line that actually holds.

Aug 10, 2026 · 3 min
Stop using the localStorage hack to sync browser tabs. BroadcastChannel does it natively.
JavaScript

Stop using the localStorage hack to sync browser tabs. BroadcastChannel does it natively.

Syncing state across browser tabs with localStorage events is a widely-used trick that requires JSON.stringify, event filtering, and careful cleanup. The Broadcast Channel API delivers messages between tabs directly, with none of the side effects.

Aug 9, 2026 · 4 min
Turkish

Turkish A1: vowel harmony — the rule that makes every ending predictable

Turkish glues endings onto words, and the vowel in the ending changes to match the word. Learn the two harmony rules and you stop memorising endings and start deriving them.

Aug 9, 2026 · 2 min