本文へ移動
myowchick

Blog

考えたこと、調べたことの置き場。

client:*を書かないReactは217KiBを連れてこない

  • 実装ノート
  • Astro
  • React

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

git log --followが別ファイルの初出コミットを返す

  • トラブルシューティング
  • Git

骨格の似たファイルが並んでいると、--follow --diff-filter=Aは別ファイルの追加コミットを初出だと答える。5本中2本が誤爆した実例と、コピー検出が強制されている仕組み、初出日の安全な取り方。

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個だけだった。対象を絞った変換表とオフセットで書き直した実装と、表のずれを拾う網羅テスト。

タグから探す →