実装ノート
このタグの記事24件。

client:*を書かないReactは217KiBを連れてこない
- 実装ノート
- Astro
- React
Astroでclient:*を書かないReact部品は、ビルド時に静的HTMLへ落ちる。astro-island要素もpropsのJSONも出ない。同じ部品を島と静的の両方で使っているページの生成物を数えた。

Astroの一覧の順番はファイル名が決めていた
- 実装ノート
- Astro
- TypeScript
同じpublishedAtが並ぶと、順番を決めるのは安定ソートの前段、つまりgetCollectionの返り順になる。そこに保証は無い。content collection移行で踏んだ並び順・z.enum・is:inlineの3つ。

最善手を選ぶと毎回同じペアが出る
- 実装ノート
- アルゴリズム
- TypeScript
誰と組ませたいかを点数にして最善の組み方を選ぶと、同点の崩し方を決めていない探索は毎回同じ答えを返す。16名の200万通りを1,632局面に潰すメモ化と、探索の奥に乱数を注すまで。

剰余バイアスでAからHだけが1.2倍出る
- 実装ノート
- JavaScript
- アルゴリズム
乱数を文字プールの長さで割った余りで文字を選ぶと、先頭の8文字だけ多く出る。1バイトで2000万回引くと1.21倍、32bitでは4.85e+18回引かないと見えない。端を捨てて引き直す実装が要る理由。

Wi-FiのQRコードはSSIDのセミコロンで壊れる
- 実装ノート
- QRコード
- TypeScript
SSIDにセミコロンが1文字入ると、読み取った端末にはその手前までしか届かない。WIFI:ペイロードのエスケープ規則と、書かなくていい項目を省くとQRコードの版が1つ下がる話。

Astroのclient:loadは変数のタグに効かない
- 実装ノート
- Astro
- TypeScript
コンポーネントを変数に入れてclient:loadを付けると、ビルドがNoMatchingImportで落ちる。コンパイラがタグ名とimport文を突き合わせているせい。島を立てるだけの薄いフレームで回避するまで。

URL APIは読んで書き戻すと別物になる
- 実装ノート
- JavaScript
- Web API
パースして構成要素に分け、そのまま組み立て直すと元に戻らない。ASCII 128文字を往復させて意味が変わったのは6文字。%2Fが/に化ける、値なしキーに=が生える、punycodeは片道。

家族の絵文字は11文字 — JavaScriptの文字数、4つの数え方
- 実装ノート
- JavaScript
- Unicode
👨👩👧👦をJavaScriptで数えると1・7・11・25の4つの答えが出る。UTF-8バイト・コードポイント・UTF-16コードユニット・書記素クラスタの違いと、MySQLのVARCHARやXの上限がどれで効くのか。

全角半角変換にNFKCを使うと①が1になり㍑がリットルになる
- 実装ノート
- JavaScript
- Unicode
NFKCは幅の変換器ではない。書き換える4965個のコードポイントのうち、幅に関係するのは158個だけだった。対象を絞った変換表とオフセットで書き直した実装と、表のずれを拾う網羅テスト。
暴走した正規表現はterminateでしか止まらない
- 実装ノート
- 正規表現
- JavaScript
入力欄の正規表現は書きかけの段階で戻り読みが爆発し、タブごと固まる。しかも実行はJavaScriptから中断できない。Workerに追い出して使い捨てにする設計と、途中で踏んだ正規表現APIの穴。