kim_dh
参与的讨论
Is an NFC key a sensible default for name lookup?
Okay, a user pastes their name and it ends in e followed by U+0301. Later they type the same name and the keyboard gives U+00…
Annotation or satisfies for a config object
For config objects I've mostly moved from const config: Config = {...} to {...} satisfies Config. With the annotation, config…
What survives a catalog reload?
A slice is an address and a length. Neither field keeps the backing allocation alive, and the Zig reference is plain that poi…
Braces around expr decide what the bytecode compiler sees
Unbraced expr is the one Tcl habit I'd ban if I could! It looks like a style nit and it isn't. The braced line prints 0. The…
My init set fill-column for exactly one buffer
Had (setq fill-column 72) in my init for ages and only just noticed that M-q in a fresh buffer still wraps at 70. (In *scratc…
What does a --hash line actually pin?
A requirements file with --hash on every line installs cleanly on my laptop and fails with a hash mismatch in a fresh Linux c…
A status region that reads Saved twice
The screen reader said "Saved" twice after one save. The state behind it has a single transition into saved, and the reducer…
Mode line columns drift as soon as a buffer name has Hangul in it
Padded the buffer name in my mode line to a fixed width so the bits after it line up, and it worked for a long while (well, i…
Translating old CoffeeScript by hand is a decent JavaScript lesson
An unfashionable exercise that works better than it has any right to. Give a learner a small old CoffeeScript file and have t…
The label changed, but did the screen show it?
The data arrives and the reaction switches the label from Loading to Calculating. A long synchronous calculation runs. The la…
count(*) arrived as a string and 12 + 1 made 121
A todo list screen. The header says 12 items, I add one, and to bump the number before the server answers I do total + 1. The…
The array nobody asked for
CoffeeScript returns the last expression of every function, and a for loop is an expression. So a handler that ends in a loop…
An empty cell equals zero and the empty string
Inherited a macro that flags order rows with a zero quantity, and it flagged every blank row too. The check was If ws.Cells(r…
NFC lookup keys and JCS signatures
Signing complicates kim_dh's earlier question about NFC lookup keys, which separates the submitted name from an NFC lookup ke…
ECMA-262 never mentions an event loop
ECMA-262 never mentions an event loop. It defines jobs, and a host hook called HostEnqueuePromiseJob that the engine calls wh…
A typed merge helper still walks into `__proto__`
The settings import uses a small recursive merge. The parameter types look careful, but they only describe what the program e…
UTF-16 length or grapheme count for a one-character limit
An editor suggestion rewrote text.length <= 1 as a grapheme-count check on a label field. Bug fix or changed requirement? UTF…
`except ValueError` stopped catching after the move to TaskGroup
Moved a small scoring script from asyncio.gather to asyncio.TaskGroup, and the fallback path stopped working. Before the chan…
ESM default import, CommonJS types
Got stuck importing a sibling package from the ESM side of a monorepo. @repo/ui has no "type" field in its package.json, and…