<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>XiaoMo · ブログ</title><description>XiaoMo の個人サイト：記事、ミニゲーム、ブラウザツール。</description><link>https://www.moiu.cn/</link><language>ja</language><item><title>Three.js の浮島を静的サイトに載せる</title><link>https://www.moiu.cn/ja/blog/aether-isle/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/aether-isle/</guid><description>浮島ページは自分のスクリプトだけを読み込みます。シーンは実行時に生成し、Three.js はこのページのチャンクにだけ入り、最初の HTML には空の舞台しかありません。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>Astro</category><category>パフォーマンス</category><category>デザイン</category></item><item><title>モールス符号 — 表が一つ、曖昧さが二つ、細部が三つ</title><link>https://www.moiu.cn/ja/blog/morse-code/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/morse-code/</guid><description>モールス自体は簡単で、難しいのは細部です。空白は誰のものか、全角の点をどう正規化するか、そして「1 単位」がどれだけか。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>ツール</category><category>アルゴリズム</category></item><item><title>落下点を計算するが、少しだけ外す相手</title><link>https://www.moiu.cn/ja/blog/pong-ai/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/pong-ai/</guid><description>遊べるポン AI に必要なのは二つ。ボールの落下点を正確に求めること、そして毎回わざと少し外すこと。前者は三角波一回、後者はラリーごとに引き直します。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>ゲーム</category><category>アルゴリズム</category></item><item><title>モデリングなしで立体感を出す — 手で三角形を組む浮島</title><link>https://www.moiu.cn/ja/blog/procedural-island/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/procedural-island/</guid><description>島の岩はモデリングツールから書き出したものではありません。五層の不規則なリングを実行時に組み上げ、頂点色とフラットシェーディングだけで石らしく見せています。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>デザイン</category></item><item><title>千二百インスタンス — 庭を数回の描画に収める</title><link>https://www.moiu.cn/ja/blog/three-instancing/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/three-instancing/</guid><description>草六百、花百二十、苔石八十五、低木四十二。庭の密度は数を減らすのではなく、InstancedMesh で同じ種類を一描画にまとめて作ります。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>パフォーマンス</category><category>サイト制作</category></item><item><title>シーンの光 — 三つの灯りと一度だけ計算する影</title><link>https://www.moiu.cn/ja/blog/three-lighting/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/three-lighting/</guid><description>半球光が環境色、キーライトが向きと影、リムライトが島を背景から引き剥がし、残る七つの点光源は灯りを足すだけです。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>デザイン</category><category>サイト制作</category></item><item><title>二つのシェーダーで水をつくる — 水たまり・小川・滝</title><link>https://www.moiu.cn/ja/blog/three-water-shader/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/three-water-shader/</guid><description>島に水面シミュレーションも反射もありません。ShaderMaterial は二つだけで、寝ている水と落ちる水を担当し、time と night を共有します。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>デザイン</category></item><item><title>3D の読み込み予算 — チャンク分割・可視になってから読み込み・止めどき</title><link>https://www.moiu.cn/ja/blog/webgl-loading-budget/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/webgl-loading-budget/</guid><description>3D ページの費用は三つあります。ダウンロード、初回フレームのコンパイル、毎フレームの描画。それぞれに別々の予算を決めないと、見栄えが引っかかりに変わります。</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><category>パフォーマンス</category><category>サイト制作</category><category>Astro</category></item><item><title>ファイルの原子的書き込み：一時ファイルに書いてから rename</title><link>https://www.moiu.cn/ja/blog/atomic-write/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/atomic-write/</guid><description>上書きは停電・クラッシュ・並行読み取りの瞬間に半端なファイルを残します。一時ファイルと rename を使えば、ファイルシステムの原子性で「半端」を不可能にできます。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>ツール</category></item><item><title>Base64：暗号でも圧縮でもない</title><link>https://www.moiu.cn/ja/blog/base64/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/base64/</guid><description>Base64 は 3 バイトを 4 文字の可読文字に変換し、容量を三分の一増やします。解くのは「バイナリをテキスト経路に通す」ことで、秘匿ではありません。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>セキュリティ</category></item><item><title>big O の誤用：定数と前提が次数より結果を決めることが多い</title><link>https://www.moiu.cn/ja/blog/big-o-misconception/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/big-o-misconception/</guid><description>O(n log n) の整列が O(n²) の挿入整列に負けることも、O(1) のハッシュ探索が配列の線形走査に負けることもあります。入力規模・定数・メモリ局所性を先に確認します。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>パフォーマンス</category></item><item><title>@layer で CSS の優先順位を「詳細度競争」から「順序の宣言」へ</title><link>https://www.moiu.cn/ja/blog/css-cascade-layers/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/css-cascade-layers/</guid><description>スタイルが崩壊するのは詳細度を足して解決するからです。カスケード層は順序を明示します。層の間は順序のみ、層の内部では従来どおり詳細度で決まります。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>CSS</category><category>デザイン</category></item><item><title>デバウンスとスロットル：違いは「誰が実行時刻を決めるか」だけ</title><link>https://www.moiu.cn/ja/blog/debounce-throttle/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/debounce-throttle/</guid><description>どちらも実行頻度を制限します。デバウンスは最後の呼び出しが、スロットルは固定の時間窓が時刻を決めます。選び間違えると、ドラッグが離した時だけ更新されたり、入力中に 200ms ごとに送信したりします。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>パフォーマンス</category></item><item><title>工数見積もり：なぜ「だいたい三日」が三週間になるのか</title><link>https://www.moiu.cn/ja/blog/developer-estimation/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/developer-estimation/</guid><description>見積もったのはコーディング時間で、約束したのは実装＋結合＋レビュー＋手戻り＋待ち時間です。不確かな部分を明示する方が、日数を二倍するより効きます。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>バックエンド</category></item><item><title>フィーチャーフラグ：設定ではなく負債である</title><link>https://www.moiu.cn/ja/blog/feature-flags/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/feature-flags/</guid><description>フラグは到達可能なコード経路を倍にし、そして自動では消えません。精巧な仕組みを作るより、各フラグに削除日を決める方がはるかに重要です。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>ツール</category></item><item><title>ゲームループ：なぜ delta time が必須なのか</title><link>https://www.moiu.cn/ja/blog/game-loop/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/game-loop/</guid><description>毎フレーム 5 ピクセル動かすと、60Hz では正常でも 144Hz では 2.5 倍速くなります。経過時間を掛けて物理をリフレッシュレートから切り離し、さらに上限を設けます。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>ゲーム</category><category>パフォーマンス</category></item><item><title>git bisect：「どのコミットで壊れたか」を一本のコマンドにする</title><link>https://www.moiu.cn/ja/blog/git-bisect/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/git-bisect/</guid><description>退行調査の難所は二分探索ではなく「壊れている」の定義です。自動で判定するスクリプトを先に書けば、bisect は n 回のビルドを log n 回に縮めます。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>アルゴリズム</category></item><item><title>五目並べ AI：必殺判定と探索の分業</title><link>https://www.moiu.cn/ja/blog/gomoku-search-engine/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/gomoku-search-engine/</guid><description>素の alpha-beta では五目で必殺手を逃します。勝ち・受け・活四の三段で確定する手を先に処理し、残りだけを反復深化と置換表に渡す構成にしました。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>ゲーム</category></item><item><title>グレースフルシャットダウン：終了手順が 502 と正常応答を分ける</title><link>https://www.moiu.cn/ja/blog/graceful-shutdown/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/graceful-shutdown/</guid><description>終了信号で即座に exit すると処理中の要求が切られます。正しい順序は、新規受付の停止、処理中の完了待ち、資源の解放、そして終了です。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>サイト制作</category></item><item><title>HTTP キャッシュ：Cache-Control と ETag は半分ずつ担う</title><link>https://www.moiu.cn/ja/blog/http-caching/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/http-caching/</guid><description>Cache-Control は「リクエストを送るか」を、ETag は「送った後で本文を省けるか」を決めます。混同すると片方を直しても直りません。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>パフォーマンス</category></item><item><title>冪等キー：再試行を安全にする一回の書き込み</title><link>https://www.moiu.cn/ja/blog/idempotency/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/idempotency/</guid><description>ネットワークのタイムアウトはサーバが何もしなかった証拠ではありません。冪等キーで同一リクエストを識別し、再実行せず最初の結果を返します。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>セキュリティ</category></item><item><title>JSON 正規化：同じオブジェクトが二つのハッシュになる理由</title><link>https://www.moiu.cn/ja/blog/json-canonicalization/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/json-canonicalization/</guid><description>キーの順序、数値の表記、エスケープの仕方でバイト列は変わります。ハッシュを安定させるには、JSON.stringify に期待せずシリアライズ層で規則を固定します。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>セキュリティ</category></item><item><title>メモリ配置：同じアルゴリズムが十倍遅い原因はたいていキャッシュ</title><link>https://www.moiu.cn/ja/blog/memory-layout/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/memory-layout/</guid><description>主記憶への一回のアクセスは数百サイクル、キャッシュ行の取得は一回です。逐次アクセスとランダムアクセスの差は次数を上回ることが多いです。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>パフォーマンス</category><category>アルゴリズム</category></item><item><title>デッドロック：四つの条件のどれか一つを壊せばよい</title><link>https://www.moiu.cn/ja/blog/mutex-deadlock/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/mutex-deadlock/</guid><description>相互排他・保持と待機・横取り不可・循環待機。四つが同時に成立して初めて起きます。実務で壊しやすいのは循環待機で、ロックに全体順序を与えます。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>アルゴリズム</category></item><item><title>N+1 クエリ：ORM で最も典型的な性能の罠</title><link>https://www.moiu.cn/ja/blog/n-plus-one/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/n-plus-one/</guid><description>100 件を取り出してから一件ずつ関連を引くと 101 回のクエリになります。直し方は三つだけです。先読み、一括取得、あるいは一回の JOIN。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>パフォーマンス</category></item><item><title>レート制限：トークンバケットと漏れバケットの実際の違い</title><link>https://www.moiu.cn/ja/blog/rate-limiting/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/rate-limiting/</guid><description>トークンバケットは突発を許し、漏れバケットは一定速度に均します。選び間違えると、正常な利用者が制限されたり、制限が機能しなかったりします。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>パフォーマンス</category></item><item><title>壊滅的なバックトラック：正規表現が CPU を埋める理由</title><link>https://www.moiu.cn/ja/blog/regex-catastrophic/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/regex-catastrophic/</guid><description>入れ子の量指定子は試行回数を指数関数的に増やします。(a+)+b は長い非一致入力一つでプロセスを止められます。入れ子を外すか、制限時間を設けます。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>セキュリティ</category><category>アルゴリズム</category></item><item><title>iframe sandbox：能力を絞るもので、強化するものではない</title><link>https://www.moiu.cn/ja/blog/sandbox-iframe/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/sandbox-iframe/</guid><description>sandbox 属性は既定で全能力を奪い、allow-* で一つずつ戻します。方向を逆に覚えがちで、script が動かないのは既定値だからです。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>セキュリティ</category><category>サイト制作</category></item><item><title>セマンティックバージョニング：主番号の約束は「挙動が黙って変わらない」</title><link>https://www.moiu.cn/ja/blog/semver/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/semver/</guid><description>MAJOR は「変更が大きい」ではなく「破壊的」の意味です。リファクタで主番号を上げたり、破壊的変更を副番号に隠すと、下流の自動更新が事故になります。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>サイト制作</category></item><item><title>SQLite のインデックス：最左前置は制約ではなく整列の帰結</title><link>https://www.moiu.cn/ja/blog/sqlite-index/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/sqlite-index/</guid><description>複合インデックス (a, b) は a が等しい範囲でのみ b が整列します。a を飛ばして b で絞るのは、使えるものが無いというだけのことです。整列として捉えれば暗記は不要です。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>アルゴリズム</category></item><item><title>技術的負債の利息とは何か</title><link>https://www.moiu.cn/ja/blog/tech-debt-interest/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/tech-debt-interest/</guid><description>負債は醜いコードではなく、以後の変更が毎回余分に払うコストです。判定は測定可能で、1 回の変更で触るファイル数、テスト時間、同時に直す箇所の数です。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>ツール</category></item><item><title>タイムゾーンと夏時間：UTC で保存しないと必ず壊れる</title><link>https://www.moiu.cn/ja/blog/timezone-dst/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/timezone-dst/</guid><description>夏時間の日は 23 時間か 25 時間で、切り替え付近のローカル時刻は存在しないか二度現れます。UTC で保存し表示時に変換するのが唯一安定する模型です。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>バックエンド</category><category>アルゴリズム</category></item><item><title>AI の思考過程をめくれる木にする</title><link>https://www.moiu.cn/ja/blog/tool-tree/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/tool-tree/</guid><description>探索の可視化で難しいのは木を描くことではなく、数値が本物であること、盤を押しのけないこと、押さない人に負担をかけないことでした。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>Vue</category><category>ゲーム</category></item><item><title>Unicode 正規化：見た目が同じ二つの文字列が等しくない理由</title><link>https://www.moiu.cn/ja/blog/unicode-normalization/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/unicode-normalization/</guid><description>é は一つのコードポイントにも、基底文字と結合記号にもなります。比較・保存・索引の前に NFC へ揃えないと、重複やログイン失敗が静かに発生します。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>セキュリティ</category><category>バックエンド</category></item><item><title>URL 符号化：空白・プラス・二重符号化の罠</title><link>https://www.moiu.cn/ja/blog/url-encoding/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/url-encoding/</guid><description>クエリでは + が空白、パスでは + はプラスです。同じ文字でも位置によって規則が異なり、二度符号化すると一致しない値が静かに生まれます。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>セキュリティ</category></item><item><title>中国将棋のルールで間違えやすい四箇所</title><link>https://www.moiu.cn/ja/blog/xiangqi-rules/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/xiangqi-rules/</guid><description>馬の足止め、象の目塞ぎ、砲の台越し、両王対面。着手生成を幾何層と合法層に分けることで、間違いの大半は消えました。</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>ゲーム</category></item><item><title>cron パーサを書く：5 フィールド、和集合の規則、そして 2 月 30 日</title><link>https://www.moiu.cn/ja/blog/cron-parser/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/cron-parser/</guid><description>構文は 30 分で書けます。難しいのは意味論です。日と曜日を両方指定したときは積ではなく和、存在しない日時には終了条件が要り、7 も 0 も日曜です。</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>アルゴリズム</category></item><item><title>CSV はカンマで切るものではない：RFC 4180 の引用符と改行</title><link>https://www.moiu.cn/ja/blog/csv-rfc4180/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/csv-rfc4180/</guid><description>引用符付きのフィールドが 1 つ現れた時点で split は破綻します。引用符は区切り文字と改行を包み、内部の引用符は 2 つ重ねて書きます。30 行の状態機械が正規表現より確実です。</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>アルゴリズム</category></item><item><title>リバーシの合法手：8 方向を 1 回の走査で</title><link>https://www.moiu.cn/ja/blog/reversi-legal-moves/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/reversi-legal-moves/</guid><description>空きマスが合法なのは、8 方向のうち少なくとも 1 方向で相手を挟める場合です。判定と反転は同じ走査で済み、置いて戻すシミュレーションは要りません。</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>ゲーム</category></item><item><title>数独ジェネレーター：穴を掘り、唯一解を保つ、そしてページを固めたバグ</title><link>https://www.moiu.cn/ja/blog/sudoku-generator/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/sudoku-generator/</guid><description>完成した解を先に作り、一マスずつ掘りながら唯一解を検証します。求解器で 0 を「無制限」と解釈していたため、空盤では全解を列挙し、新規ゲームが固まりました。</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>ゲーム</category></item><item><title>一貫性ハッシュ：マシンを 1 台足してもほぼ全鍵を並べ直さない理由</title><link>https://www.moiu.cn/ja/blog/consistent-hashing/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/consistent-hashing/</guid><description>剰余による分割は台数が変わるとほぼ全データが移動します。ハッシュ空間を環にして時計回りで最初のノードに割り当てれば、動くのは 1 区間だけ。代償は仮想ノードです。</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>サイト制作</category></item><item><title>五目並べの勝敗判定：置いた 1 点だけ見れば足りる</title><link>https://www.moiu.cn/ja/blog/gomoku-win-detect/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/gomoku-win-detect/</guid><description>着手ごとに盤面全体を走査するのは無駄です。勝敗は最新の 1 手でしか変わりません。置いた点から 4 方向へ伸ばして数えれば、盤面の大きさに依りません。</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>ゲーム</category></item><item><title>スライディングウィンドウ：「窓が何を保つか」を先に決める</title><link>https://www.moiu.cn/ja/blog/sliding-window/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/sliding-window/</guid><description>窓が成立するのは、窓の妥当性が左右の端に対して単調に変わる場合です。保つ状態と縮める条件を先に書き出せば、2 ポインタの二重構造は自然に O(n) に償却されます。</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>パフォーマンス</category></item><item><title>単調スタック：「次に大きい要素」を O(n²) から O(n) へ</title><link>https://www.moiu.cn/ja/blog/monotonic-stack/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/monotonic-stack/</guid><description>各添字は高々 1 回 push され 1 回 pop されるので、二重ループに見える形が線形になります。左右で最初に大きい／小さいものを探す形なら、同じ雛形が使えます。</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>パフォーマンス</category></item><item><title>2 進数に 1 がいくつあるか：ループから SWAR まで</title><link>https://www.moiu.cn/ja/blog/popcount-bit-tricks/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/popcount-bit-tricks/</guid><description>popcount には 3 通りあります。1 の個数だけ回すループ、表引き、そしてビット列を並列に数える SWAR。桁違いに差が出ますが、Rust と WebAssembly は既に単一命令として持っています。</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>パフォーマンス</category></item><item><title>Union-find：2 行の最適化で 1 回の操作がほぼ定数になる</title><link>https://www.moiu.cn/ja/blog/union-find/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/union-find/</guid><description>経路圧縮は木を平らにし、サイズによる併合は木を高くしません。両方入れて初めて計算量が逆アッカーマン関数に落ち、実用上は 5 を超えません。</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>パフォーマンス</category></item><item><title>Rust の Result：コンテキストは失敗した行に付ける</title><link>https://www.moiu.cn/ja/blog/rust-result-context/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/rust-result-context/</guid><description>`?` はエラーをそのまま上へ投げ、どの段階で失敗したかを伝えません。中核は照合できる構造化エラー、アプリ層は Context で「何をしていたか」と入力を添える。</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><category>Rust</category><category>バックエンド</category></item><item><title>crate を workspace に分けるべきとき</title><link>https://www.moiu.cn/ja/blog/rust-workspace-split/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/rust-workspace-split/</guid><description>分割の引き金はビルド時間と依存の境界で、ディレクトリの見た目ではありません。3 つの条件が揃ったときに分け、揃わなければ 1 回のビルドを複数パッケージの管理と引き換えにするだけです。</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><category>Rust</category><category>バックエンド</category></item><item><title>構造化ログは println を tracing::info に置き換えることではない</title><link>https://www.moiu.cn/ja/blog/tracing-structured-logs/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/tracing-structured-logs/</guid><description>文字列を連結したログは人間しか読めません。フィールドがあって初めて検索と集計ができます。フィールド、span、レベル、そして整形しない判断の 4 つが本題です。</description><pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate><category>Rust</category><category>バックエンド</category></item><item><title>Islands は Web Components ではない：似て見えて別物の「必要なときだけ読み込む」</title><link>https://www.moiu.cn/ja/blog/islands-vs-webcomponents/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/islands-vs-webcomponents/</guid><description>Islands はビルド時にどこに JS が要るか・いつハイドレートするかを決めます。Web Components は実行時にブラウザへ自立した要素を渡します。混同すると道具を選び間違えます。</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><category>Astro</category><category>パフォーマンス</category></item><item><title>静的サイトのキャッシュヘッダー：ハッシュ付きは永久、HTML は毎回確認</title><link>https://www.moiu.cn/ja/blog/nginx-cache-headers/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/nginx-cache-headers/</guid><description>キャッシュ方針を決めるのはファイル名が内容で変わるかどうかで、サイズではありません。HTML を長くキャッシュすると、削除済みチャンクを指す古い入口を配ることになります。</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>パフォーマンス</category></item><item><title>WebAssembly が効く場面は、宣伝よりずっと少ない</title><link>https://www.moiu.cn/ja/blog/wasm-where-to-use/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/wasm-where-to-use/</guid><description>WASM の利得は重い計算、まとまったデータ、少ない境界越えが揃ったときに出ます。O(n) の JavaScript ループを書き直しても、遅い読み込みと追いにくいスタックが残るだけです。</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><category>パフォーマンス</category><category>サイト制作</category></item><item><title>アンカーがヘッダーに隠れる：scroll-padding-top を一箇所に</title><link>https://www.moiu.cn/ja/blog/anchor-scroll-padding/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/anchor-scroll-padding/</guid><description>固定ヘッダーはアンカーの着地点を隠す。見出しごとの scroll-margin は必ず漏れる。正解はスクロールコンテナの scroll-padding-top で、実際のヘッダー高さを ResizeObserver から戻す。</description><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><category>CSS</category><category>デザイン</category></item><item><title>モーダルはネイティブの dialog で：無料で付いてくるものが多い</title><link>https://www.moiu.cn/ja/blog/dialog-a11y/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/dialog-a11y/</guid><description>自前のモーダルはフォーカストラップ、ESC、スクロール固定、フォーカス復帰を全部書くことになる。dialog と showModal なら全部入りで ::backdrop も使える。</description><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><category>CSS</category><category>デザイン</category></item><item><title>ダークモードなのにフォームが白い：color-scheme が本丸</title><link>https://www.moiu.cn/ja/blog/form-color-scheme/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/form-color-scheme/</guid><description>背景を暗くしてもネイティブコントロールは暗くならない。select のポップアップや日付ピッカー、自動入力の下地は color-scheme が決め、accent-color はチェックボックスとスライダーまで。</description><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><category>CSS</category><category>デザイン</category></item><item><title>ヘッダーの高さを勘で書かない：ResizeObserver で実測して戻す</title><link>https://www.moiu.cn/ja/blog/resize-observer-layout/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/resize-observer-layout/</guid><description>ナビの折り返し、遅れて届く Web フォント、内容の長さの変化で、CSS に書いた定数はすぐずれる。ResizeObserver で要素そのものを観測し、実測値を変数に書き戻す。</description><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><category>CSS</category><category>パフォーマンス</category></item><item><title>デザイントークン：1ファイルでサイト全体を統制する</title><link>https://www.moiu.cn/ja/blog/design-tokens/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/design-tokens/</guid><description>色・余白・角丸をすべて _tokens.scss に集約した理由と、ビジュアル方針の変更が2ファイルの書き換えだけで済んだ話。</description><pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate><category>CSS</category><category>デザイン</category></item><item><title>手書き i18n：3 言語サイトでルーティングを自作する代償</title><link>https://www.moiu.cn/ja/blog/manual-i18n/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/manual-i18n/</guid><description>このサイトの i18n は Astro 組み込みの設定を使わず自作しました。その理由と、代償が実際に現れた場所——2 回の 404 と、半分しか翻訳されていなかったブログについて書きます。</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>デザイン</category></item><item><title>2048：四方向を一つの操作に畳み込む</title><link>https://www.moiu.cn/ja/blog/algo-2048/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/algo-2048/</guid><description>スライド・合成・得点は一度書けば足り、残り三方向は転置と反転で再利用できます。難しいのは「各タイルは 1 回の移動で最大 1 回しか合成しない」という規則です。</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>ゲーム</category></item><item><title>マインスイーパー：地雷の配置を最初のクリックまで遅らせる</title><link>https://www.moiu.cn/ja/blog/algo-minesweeper/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/algo-minesweeper/</guid><description>最初のクリックで負けうるマインスイーパーは未完成です。配置を遅らせ、クリック位置の周囲 3×3 を除外することが、ここで最も重要な設計判断です。</description><pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate><category>アルゴリズム</category><category>ゲーム</category></item><item><title>孔版印刷の制約をデザイントークンに翻訳する</title><link>https://www.moiu.cn/ja/blog/riso-ui/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/riso-ui/</guid><description>このサイトの視覚方向は孔版印刷（リソ）です。実際にやったのは印刷の物理的な制約をトークンに書き出すことで、おかげで見た目を変えても触ったのは 2 ファイルだけ、コンポーネントは 1 行も直していません。</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><category>デザイン</category><category>CSS</category></item><item><title>進数と単位換算：非線形なのは温度だけ</title><link>https://www.moiu.cn/ja/blog/tool-convert/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/tool-convert/</guid><description>2 から 36 進数の変換は BigInt で精度を守る必要があります。10 カテゴリのうち 9 つは線形の比率ですが、温度だけはアフィン変換で、単一の倍率では必ず間違えます。</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>Vue</category></item><item><title>色とコントラスト：相対輝度はチャンネルの平均ではない</title><link>https://www.moiu.cn/ja/blog/tool-color/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/tool-color/</guid><description>記法の相互変換は入口にすぎません。本当の罠は WCAG のコントラストで、ガンマを戻してから重み付けする必要があります。黒文字か白文字かの判断も閾値ではありません。</description><pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>Vue</category></item><item><title>静的サイトの全文検索：索引はビルド時に、実行時にサーバーなし</title><link>https://www.moiu.cn/ja/blog/pagefind-search/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/pagefind-search/</guid><description>静的サイトの検索は Algolia を繋がなくても作れます。索引をビルド時に生成し、検索は完全にブラウザ内で実行する——代償はビルドが数秒伸びるだけです。</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>パフォーマンス</category></item><item><title>ハッシュとチェックサム：CRC32 と MD5 を自分で書く理由</title><link>https://www.moiu.cn/ja/blog/tool-hash/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/tool-hash/</guid><description>ブラウザーが提供するのは SHA 系だけで、しかも安全なコンテキストに限られます。CRC32 と MD5 は Web Crypto にありません。大きなファイルを一括で読まない方法と、チェックサムを目視で比べない方法も。</description><pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>Vue</category></item><item><title>正規表現テスト：ヒット・グループ・置換プレビューとゼロ幅の罠</title><link>https://www.moiu.cn/ja/blog/tool-regex-lab/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/tool-regex-lab/</guid><description>正規表現テスターには三つの役割があります。一致位置とグループを明示し、置換結果を先に見せ、ゼロ幅一致で止まらないこと。</description><pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>Vue</category></item><item><title>JSON スタジオ：整形・検証・差分を一つの画面に</title><link>https://www.moiu.cn/ja/blog/tool-json-studio/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/tool-json-studio/</guid><description>使い捨てのコマンドで JSON を整える習慣から作りました。整形・圧縮・ソート、行と列で示す解析エラー、二つの文書の構造差分。すべてブラウザ内で動きます。</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate><category>ツール</category><category>Vue</category></item><item><title>1059 件のアサーション、テストフレームワークなし：純粋なロジックを import ゼロに保つ</title><link>https://www.moiu.cn/ja/blog/zero-import-selftest/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/zero-import-selftest/</guid><description>このサイトの自検は node scripts/selftest.ts を直接実行するだけ。フレームワークも依存もありません。代償は検証対象のモジュールが相対 import を 1 つも持てないこと、そしてその代償はコードの形を買いました。</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><category>Astro</category><category>サイト制作</category></item><item><title>SharePoint のデシリアライズ RCE：CVE-2026-45659</title><link>https://www.moiu.cn/ja/blog/cve-2026-45659-sharepoint/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/cve-2026-45659-sharepoint/</guid><description>通常の Site Member アカウントだけで SharePoint サーバー上の任意コード実行が可能です。マイクロソフトは悪用可能性を低と評価しましたが、CISA は KEV に追加し、3 日での対応を求めました。</description><pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate><category>セキュリティ</category><category>脆弱性</category></item><item><title>n8n の未認証 RCE（Ni8mare）：CVE-2026-21858</title><link>https://www.moiu.cn/ja/blog/cve-2026-21858-n8n/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/cve-2026-21858-n8n/</guid><description>フォームノードが Content-Type の検証を飛ばすため、application/json のリクエスト一つで任意のファイルを読ませられます。設定内の鍵から管理者 JWT を偽造し、サンドボックス回避と組み合わせて RCE に至ります。</description><pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate><category>セキュリティ</category><category>脆弱性</category></item><item><title>Cisco FMC の未認証 Java デシリアライズ RCE：CVE-2026-20131</title><link>https://www.moiu.cn/ja/blog/cve-2026-20131-cisco-fmc/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/cve-2026-20131-cisco-fmc/</guid><description>CVSS 10.0、認証不要、root 権限でのコード実行。しかもランサムウェア集団が 36 日間ゼロデイとして使っていました。ファイアウォール管理の中枢が破られれば、すべてのポリシーとログも渡すことになります。</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><category>セキュリティ</category><category>脆弱性</category></item><item><title>Astro islands で初回 JS をゼロに近づける</title><link>https://www.moiu.cn/ja/blog/astro-islands/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/astro-islands/</guid><description>「非同期読み込み」を「必要な時だけハイドレート」まで分解し、3層の遅延読み込みがそれぞれ何を解決するのかを実コードで説明します。</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><category>Astro</category><category>パフォーマンス</category><category>Vue</category></item><item><title>Next.js のインクリメンタルキャッシュ経由のパストラバーサル RCE：CVE-2026-75604</title><link>https://www.moiu.cn/ja/blog/cve-2026-75604-nextjs/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/cve-2026-75604-nextjs/</guid><description>エスケープされていないバックスラッシュ一つが、Windows 上でキャッシュを任意ファイルの読み書きに変えます。漏えいした Server Action の暗号鍵でリクエストを偽造し、React Flight のプロパティ連鎖から Function に到達します。</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate><category>セキュリティ</category><category>脆弱性</category></item><item><title>React Router のプロトタイプ汚染から RCE へ：CVE-2026-42211</title><link>https://www.moiu.cn/ja/blog/cve-2026-42211-react-router/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/cve-2026-42211-react-router/</guid><description>turbo-stream v2 は TYPE_ERROR の復元でコンストラクタを動的に呼び出しながら、その出所を検証していません。アプリにプロトタイプ汚染が一つあればこの経路が Function に届き、中度の欠陥二つが RCE になります。</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><category>セキュリティ</category><category>脆弱性</category></item><item><title>head の出典は一つ：SiteHead、JSON-LD のエスケープ、hreflang</title><link>https://www.moiu.cn/ja/blog/head-single-source/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/head-single-source/</guid><description>三つの HTML シェルが一つのコンポーネントを共有し、head のタグをすべて出力します。データはサーバー層で組み立てます。JSON-LD の山括弧をエスケープする必要がある点も忘れずに。</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>パフォーマンス</category></item><item><title>静的サイトの公開は「フォルダを上げる」だけではない：キャッシュ、圧縮、正直な 404</title><link>https://www.moiu.cn/ja/blog/static-hosting-nginx/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/static-hosting-nginx/</guid><description>静的ホスティングの罠はほぼ全部レスポンスヘッダーにあります。永久にキャッシュしてよいファイル、絶対にしてはいけないファイル、そして静的サイトが SPA 式フォールバックを使ってはいけない理由。</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>パフォーマンス</category></item><item><title>View Transitions でテーマ切り替えの波紋を作る</title><link>https://www.moiu.cn/ja/blog/theme-ripple/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/theme-ripple/</guid><description>クリック位置から広がる円で新しいテーマを現します。半径は最も遠い角まで届く必要があり、終了時にカスタムプロパティを消さないと次の切り替えに漏れます。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate><category>CSS</category><category>デザイン</category><category>Vue</category></item><item><title>ビルド時のページネーション：静的サイトのページ送りにクエリ文字列を使わない理由</title><link>https://www.moiu.cn/ja/blog/build-time-pagination/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/build-time-pagination/</guid><description>一覧はビルド時に静的なページへ分割され、N ページ目は実在のルートになります。クライアント側のページング処理もクエリ文字列も使わず、ただのリンクです。</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><category>Astro</category><category>パフォーマンス</category></item><item><title>@/ エイリアスは三箇所に設定する。どれが欠けても壊れる</title><link>https://www.moiu.cn/ja/blog/alias-three-places/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/alias-three-places/</guid><description>深い相対 import を全廃した代償は、エイリアスを三箇所で設定することです。一つ欠けると、エディタのエラー・ビルド失敗・スタイルの静かな消失という別々の症状になります。</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><category>Astro</category><category>サイト制作</category></item><item><title>zod で frontmatter を契約にする：記事の書式エラーをビルド時に落とす</title><link>https://www.moiu.cn/ja/blog/zod-frontmatter/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/zod-frontmatter/</guid><description>Content Collections の schema が唯一の真実です。タイトルが 120 字を超える、日付が壊れている、タグが配列でない——どれもビルド時に失敗し、ページが黙って消えることはありません。</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate><category>Astro</category><category>サイト制作</category></item><item><title>なぜまた個人サイトを作ったのか</title><link>https://www.moiu.cn/ja/blog/hello-world/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/hello-world/</guid><description>書く場所がなかったわけではなく、記事とゲームとツールを同じ場所に置けなかったから。</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate><category>サイト制作</category><category>Astro</category></item><item><title>設定不要のレジストリ：ゲーム追加はディレクトリ追加と同じ</title><link>https://www.moiu.cn/ja/blog/glob-registry/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/glob-registry/</guid><description>一覧・詳細ルート・トップの注目枠・sitemap はすべて import.meta.glob が自動検出します。代償は Vite の規則、リテラルの相対パスだけという一点です。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><category>Astro</category><category>サイト制作</category></item><item><title>アプリページに client:only を使わない：静的シェルと明示的なマウント</title><link>https://www.moiu.cn/ja/blog/app-shell-mount/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/app-shell-mount/</guid><description>ゲームとツールのページは「シェル + createApp」で、client:only ではありません。読み込み・成功・失敗の三状態を自分で持ち、再試行ボタンも本当に動きます。</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate><category>Vue</category><category>パフォーマンス</category></item><item><title>ビューにロジックを置かない：データ組み立てはすべて src/server へ</title><link>https://www.moiu.cn/ja/blog/server-layer/</link><guid isPermaLink="true">https://www.moiu.cn/ja/blog/server-layer/</guid><description>ページにはルートの export とコンポーネントの読み込みしかありません。取得・パス組み立て・日付計算はすべて src/server に移しました。その利点と、強制される型の制約について。</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate><category>Astro</category><category>サイト制作</category></item></channel></rss>