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

公開鍵をHMACの鍵にするとJWTの署名が通る
- 実装ノート
- JWT
- セキュリティ
ヘッダのalgを信じる検証器は、RS256の公開鍵をHMACの鍵に流用した偽トークンを通す。alg混同の実演と、Web Cryptoだけで検証を書くときのbase64urlとUint8Arrayの穴。

JPEGのEXIFは再圧縮せずに消せる — 残すものを繋ぎ直すだけ
- 実装ノート
- 画像
- TypeScript
JPEGのメタデータは画像を開き直さなくても、残すセグメントを繋ぎ直すだけで落とせる。TIFF構造をII/MM両対応で読む勘所と、消したと言ったあとに何が残るのか。

白の色相が89.88度になる — OKLCH変換の検算
- 実装ノート
- 色
- アクセシビリティ
彩度0の白に色相は無いはずなのに、実装は89.8756度を返す。CSS Color 4の経路で期待値を作る検算と、コントラスト比を四捨五入すると不適合なのに4.50と出る色の話。

絞り込みUIのrole=statusが150msだけ嘘をつく
- 実装ノート
- アクセシビリティ
- React
デバウンスを挟むlive regionは、切り替えた直後の150msだけ前の条件の件数を読む。Tailwind v4のaria-pressed:変種が[aria-pressed=true]にしか当たらない話も。

Pagefindのfiltersに空文字を渡すと0件になる
- 実装ノート
- Pagefind
- JavaScript
絞り込みなしを空文字で表すと、検索結果が全部消える。pagefind 1.5.2で渡し方を4通り試した結果と、data-pagefind-filterの置き場所、pf_fragmentを開いて索引を直接読む手順。

SubtleCryptoにMD5は無い — 穴は定数ではなくパディング
- 実装ノート
- Web API
- 暗号
ブラウザ標準のSubtleCryptoはMD5を受け付けない。RFC 1321を依存なしで書くと、64個の定数は写さなくてよくて、代わりにパディングが落とし穴になる。付属のテストベクタ7本は境界を1本も通らない。

日本の祝日はデータなしで計算できる — 導けないのは3年分だけ
- 実装ノート
- JavaScript
- 日時
祝日法の規則をコードに写すと、年ごとの表を持たなくて済む。固定日・ハッピーマンデー・春分秋分の近似式・振替休日・国民の休日の重ね方と、近似式が2100年でずれる理由。

Intlの和暦は1年目を「元」で返す
- 実装ノート
- JavaScript
- 日時
改元日の表はIntlに任せられる。ただしformatToPartsのyearは1年目だけ「元」で返り、Number()に通すとNaNになる。明治より前の元号、逆変換の非対称さ、干支の剰余まで。

cronの*,13と13,*は年52回と年365回になる
- 実装ノート
- cron
- 日時
日と曜日を両方書いたときのOR判定は、フィールドの先頭1文字が*かどうかだけで決まる。展開すれば同じ値になる2つが52回と365回に割れる理由を、cronieの実装と突き合わせた。

BPM 120だけまともに鳴るメトロノーム — 先読み予約と丸め誤差
- 実装ノート
- 音声
- JavaScript
拍の予約位置を時刻で持ったら、同じ拍を5回予約していた。BPM 120では起きず、startTime 0のテストも素通りする。先読みスケジューリングの組み方と、丸め誤差が整数に落ちるところで牙をむく話。