開発
ソート、ネットワーク、エンコーディングなど、開発でよく出会う概念を仕様と公式ドキュメントをもとに整理します。 RSS で購読
119件
PostgreSQL のトランザクション ID 周回:VACUUM が行を凍結する理由と age(datfrozenxid) の読み方
PostgreSQL の32ビットのトランザクション ID が一周すると何が起きるのか、VACUUM の凍結と relfrozenxid・datfrozenxid、周回防止の autovacuum、警告と書き込み拒否の段階、復旧手順を PostgreSQL 18 の公式ドキュメントで整理しました。
QUICの接続はクライアントのIPが変わってもなぜ続くのか:connection ID、パス検証、ロードバランサーがすべきこと
QUICはアドレスではなくconnection IDでパケットを接続に結び付ける。RFC 9000に基づき、クライアントのアドレスが変わったときのパス検証、経路ごとに新しいconnection IDが要る理由、ロードバランサーの背後で移行を支える方法と止める方法をまとめた。
O_DIRECTのアライメント要件は推測せずstatxで問い合わせる
Linux O_DIRECTのバッファアドレス・オフセット・長さのアライメントはファイルシステムとカーネルで異なります。Linux 6.1のSTATX_DIOALIGNと6.14のSTATX_DIO_READ_ALIGNで値を取得し、stx_maskを確認する方法をまとめます。
Project Euler 5: 1から20までのすべてで割り切れる最小の数を最小公倍数から組み立てる
1から20までのすべての数で割り切れる最小の正の整数を、1つずつ試すのではなく、ユークリッドの互除法と lcm(a, b) = a / gcd(a, b) × b の繰り返しで組み立てます。この方法がちょうど最小公倍数を与える理由の証明、整数の範囲、C++17とPython 3の実装まで扱います。
Jump Consistent Hash:表を持たずにシャード番号を決めるコンシステントハッシュと、その前提条件
シャードを10個から12個に増やすとき、hash mod n はキーの5/6を動かしますが、本当に動かす必要があるのは1/6です。Lamping・Veach の論文のコード、仕組み、バケットを増減したときに起きることをまとめました。
TLS証明書の名前不一致:クライアントは何と何を比べているのか(RFC 9525)
TLSクライアントが証明書のSANと何を照合するのかをRFC 9525に沿って整理します。参照識別子、DNS-IDとIP-ID、Common Nameの禁止、ワイルドカードの規則、不一致時の扱いとチェックリスト。
Python のジェネレーターで return した値はどこへ行くのか: StopIteration.value と PEP 479
ジェネレーターの return 値は for 文では受け取れず、StopIteration.value に入ります。yield from での受け取り方、ジェネレーター内の StopIteration が RuntimeError になる理由、close() の戻り値を整理しました。
HTTP Expect: 100-continue の仕組み: 本文を送る前にサーバーの応答を待つルール
RFC 9110 と RFC 9112 をもとに、Expect: 100-continue の流れ、クライアント・オリジンサーバー・プロキシが守るべきルール、417 Expectation Failed の意味、早期拒否後の接続の扱い方を整理します。
strace に clock_gettime() が出てこない理由:Linux の vDSO
プログラムは clock_gettime() を呼んでいるのに strace には出てこないことがあります。Linux カーネルがプロセスに組み込む vDSO とは何か、トレース結果をどう読めばよいかをまとめます。
Boyer–Moore の過半数投票アルゴリズム:候補 1 つとカウンタで過半数を探す、2 回目の走査が要る理由
Boyer と Moore が 1980 年に考案した MJRTY は、候補 1 つとカウンタ 1 つで過半数要素の候補を選びます。動作規則、正しさの論証、過半数がないときの誤答と 2 回目の走査を原論文に沿って整理します。
Project Euler 4: 3桁の数2つの積で最大の回文数を大きい方から探す
3桁の数2つの積のうち最大の回文数を、大きい積から順に探して枝刈りしながら求めます。枝刈りで答えを見落とさない理由の証明、偶数桁の回文数と11の関係、整数の範囲、C++17とPython 3の実装まで扱います。
Referrer-Policy の値ごとに Referer に入るもの:完全な URL、オリジンだけ、何もなし
リンクをたどるときや画像を読み込むときに、ブラウザが Referer に何を入れるかは Referrer-Policy で決まります。8 つの値の違い、URL から必ず削られる部分、ヘッダー・meta・属性の関係、リダイレクトと Origin ヘッダーへの影響を仕様に沿って整理しました。
Python の with ブロックで例外が消えるのはなぜか: __exit__ の戻り値と finally 内の return
__exit__ が真の値を返すと with 文は例外を抑制します。finally 内の return とは何が違うのか、狙った例外だけを握りつぶす抑制用コンテキストマネージャの書き方を Python 公式ドキュメントに沿って整理しました。
PostgreSQL のデータチェックサムが検出するもの、しないもの
PostgreSQL のデータチェックサムは、データページを読むときに破損を検出します。検査が行われるタイミング、pg_checksums でオフラインのまま有効にする方法、pg_stat_database のカウンタ、amcheck とバックアップが受け持つ範囲を整理しました。
小さな TCP 書き込みが待たされる理由:Nagle アルゴリズムと遅延 ACK、TCP_NODELAY
リクエストを小さな write 2 回に分けて送ると、2 回目の断片が相手の ACK を待つことがあります。Nagle アルゴリズムと遅延 ACK のルールを RFC 896、1122、9293 に分けて確認し、TCP_NODELAY と Linux 専用オプションがそれぞれ何を変えるかを整理しました。
CPUアフィニティを0-7にしたのに2-3でしか動かない: Linuxのcpusetがマスクを絞る仕組み
sched_setaffinityに渡したCPUマスクは、cpuset/cgroupが許可するCPUや実在するCPUと黙って積集合を取られます。実際に許可されたCPUの確認方法とEINVALの切り分けを、manページをもとに整理します。
Union-Find の経路圧縮とサイズによる重み付け:α(n) はどの実装に付く計算量か
Union-Find でサイズによる重み付け、経路圧縮、経路半減が parent 配列をそれぞれどう変えるかを小さな例で追い、最悪 Θ(log n) と操作列全体の O(m α(n)) がどの実装に当てはまるかを Princeton の algs4 の資料に沿って整理しました。
Project Euler 3: 割れるだけ割って最大の素因数を求める
小さい数から割れるだけ割っていく試し割り法で、12桁の整数の最大の素因数を求めます。最後に残る値がなぜ素数なのかの証明、√n の反復回数の上限、64ビット整数の範囲、C++17とPython 3の実装まで扱います。
KMPの失敗関数:不一致のあと、パターンはどこへ戻るのか
KMP文字列探索で不一致のあとパターンのどの位置を次に比較するかを決めるf表とnext表の定義と作り方、探索全体が線形時間になる理由を、1977年の原論文とPrincetonの実装に沿って整理します。
WebAuthnのsignCountが示すもの: カウンタの比較と複製の疑いのシグナル
WebAuthn Level 3に沿って、signCountが何を数えるのか、0のままの場合、RPが行う比較の正確な条件、値が小さいか同じときになぜ証拠ではなくシグナルなのか、BE・BSフラグとの関係を整理します。
Go で nil ポインタを入れた error が nil にならない理由
Go のインターフェース値は動的な型と動的な値を持ちます。nil ポインタを error として返すと err != nil になる理由を仕様で確かめ、安全な返し方と検査方法の限界を整理します。
SQLiteのBEGIN DEFERRED・IMMEDIATE・EXCLUSIVE:トランザクション途中のSQLITE_BUSYへの対処
busy_timeoutを設定していてもSQLiteのトランザクション途中の書き込みがSQLITE_BUSYで失敗する理由、BEGIN IMMEDIATEで競合点を開始時に移す方法、失敗箇所ごとの再試行範囲を公式ドキュメントに基づいて整理します。
WebSocketのクローズコード1006は誰が送ったのか:Closeフレームと1000・1001・1011、送ってはいけないコード
WebSocketのログに出る1006は相手が送った値ではなく、Closeフレームを受け取らないまま接続が終わったことを示す。RFC 6455のクロージングハンドシェイク、コードの決まり方、コードの範囲、再接続のバックオフをまとめた。
perf c2cでfalse sharingを見つける: 1本のキャッシュラインを奪い合うコードの読み方
スレッドを増やしても速くならないとき疑うべきfalse sharingを、Linuxのperf c2cで見つける方法。記録とレポートのオプション、オフセットの読み方、CPUごとの対応差、緩和策を公式ドキュメントに基づいて整理します。
Project Euler 2: 偶数のフィボナッチ数だけを足す
フィボナッチ数列では3項ごとに偶数が現れることを証明し、偶数項どうしの漸化式 E(k) = 4E(k−1) + E(k−2) を導いて、400万以下の偶数項だけを足します。C++17とPython 3の実装、正しさの証明、整数の範囲まで扱います。
Project Euler 1: 3または5の倍数の和をO(1)で求める
1000未満で3か5で割り切れる数の和を、ループを使わずに包除原理と等差数列の和で求めます。C++17とPython 3の実装、正しさの証明、整数の範囲まで扱います。
Linux カーネルの rbtree:比較関数を保持せず、ノードを構造体に埋め込む赤黒木
Linux の赤黒木は比較関数を保持しません。ノードの埋め込み、自分で書く探索・挿入ループと呼び出しごとに比較関数を受け取るヘルパー、色ビット、cached・augmented 木、ロックなし探索の限界を v6.17 のソースで整理します。
Rustのdrop順序:ローカル変数、フィールド、一時値、そしてlet _がすぐdropされる理由
Rustではローカル変数は宣言の逆順、構造体のフィールドは宣言順にdropされます。一時値はふつう文の終わりで消え、let _は値を束縛しません。Rust 2024エディションのif letと末尾式の変更もリファレンスに沿って整理します。
REAでできること、条件付きでできること、対応していないこと
コミットを固定した公式ドキュメントをもとに、REAの能力を表にまとめました。標準の静的解析、provider が必要な経路や状態を変える経路、対応外の対象、Evidence と「不明」の読み方まで。
REAを安全に始める:最初の練習、チーム向けチェックリスト、30/60/90日の計画
最初に知っておくこと、公式の Notes フィクスチャで行うリスクの低い最初の調査、チーム向けのチェックリスト、提案する成功基準、中止条件を含む30/60/90日の試験導入計画をまとめました。
REAの検証記事は実際に何を試したのか:実行・デモ・報道・意見を分けて読む
REAを扱った外部の記事や動画8件を「誰が何を実行したか」で分類しました。独立した実行2件、作者が主張するデモ2件、報道・意見3件、議論スレッド1件が、それぞれ何の裏付けになるかを整理します。
REAの長所と、その引き換えになるもの:今後12〜24か月の5つのシナリオ
REA の長所の多くは、同じ設計から生まれるコストと対になっています。6組の長所と代償、得をするのは誰か、反対のシナリオと観察すべき兆候を添えた5つの条件付きシナリオ。予測ではなく分析です。
MySQL InnoDBのギャップロック:存在しない行をロックすると何がロックされるのか
InnoDBがREPEATABLE READでインデックスレコード間の隙間までロックする理由、存在しない行をFOR SHAREで確認してからINSERTするとデッドロックになりうる仕組み、READ COMMITTEDに切り替える代償をMySQL 8.4のマニュアルに基づいて整理します。
REA(Reverse Engineer Anything)まとめ:エージェントと解析ツールのつなぎ方、学ぶこと、注目点
GitHubで急速に注目を集めたREAが何であり何でないか、エージェントと進める調査の流れ、始める前に役立つ前提知識と学習の順序、安全と権利の境界を、公式ドキュメントをもとに整理しました。
Retry-Afterヘッダー:429・503・413・3xxでの意味の違いとクライアントでの読み方
RFC 9110とRFC 6585をもとに、Retry-Afterの2つの値の形式、ステータスコードごとの意味、HTTP-dateや秒数を待ち時間に変換する方法、不正な値や大きすぎる値の扱いを整理しました。
write() が成功してもディスクに書かれたとは限らない:短い書き込み、遅れて届くエラー、fsync
write() の成功はディスクへの記録を意味しません。短い書き込みの扱い、Linux 4.13 以降の writeback エラー報告、fsync と fdatasync の範囲、新規ファイルや rename の後にディレクトリの fsync が要る理由をまとめました。
スキップリスト:コイン投げで決めたレベルが O(log n) の探索を生む仕組み
ソート済み連結リストにランダムなレベルのポインタを足すと、なぜ探索が期待 O(log n) になるのか。Pugh の報告書のアルゴリズム、「期待」時間の範囲、Java ConcurrentSkipListMap のドキュメントが約束することを整理します。
HSTSが防ぐもの、防げないもの:max-age、includeSubDomains、preload
Strict-Transport-Security ヘッダーを受け取ったブラウザが何を変えるのかを RFC 6797 で整理します。初回アクセスの問題、includeSubDomains の利点と危険、段階的な max-age、いま preload が推奨されない理由まで。
Go の defer: 引数はいつ評価され、どの順で実行され、戻り値はどう変わるか
Go の defer は defer 文の実行時に引数を評価し、関数が戻る直前に逆順で呼び出します。名前付き結果パラメータを変更できる理由まで、言語仕様に基づいて整理します。
PostgreSQL の CREATE INDEX CONCURRENTLY: 書き込みを止めない代わりに払うコスト
CREATE INDEX CONCURRENTLY が取るロック、2 回のテーブルスキャンとトランザクション待ち、失敗後に残る INVALID インデックスの扱い、トランザクションブロックとパーティションテーブルの制約を PostgreSQL 18 の文書に沿って整理します。
HTTP ETagと条件付きリクエスト: If-None-Matchの304、If-Matchの412
ETagはキャッシュの再検証と同時更新の防止の両方に使われます。RFC 9110とRFC 9111をもとに、強い比較と弱い比較、If-None-Matchと304、If-Matchと412、条件ヘッダーの評価順序をリクエスト例とともに整理します。
Linux の Transparent Huge Pages 設定の読み方:enabled、サイズ別設定、madvise、khugepaged
THP の設定は最上位の enabled とサイズ別の hugepages-<size>kB/enabled に分かれています。inherit、MADV_HUGEPAGE と MADV_NOHUGEPAGE、khugepaged の範囲、/proc と sysfs で実際の使用を確認する方法をカーネル文書に沿って説明します。
長さのわからないストリームから k 個を公平に選ぶ: リザーバーサンプリング(Algorithm R)
全体の件数がわからないデータを一度だけ読みながら k 個を無作為に選ぶリザーバーサンプリング。置き換え確率が k/i になる理由、どの要素も k/n で残る証明、k 個の組み合わせの均等性、よくある範囲の誤りをまとめました。
AEADのnonceを再利用すると何が壊れるのか: AES-GCMとChaCha20-Poly1305の場合
同じ鍵でnonceを2回使うとAES-GCMとChaCha20-Poly1305でそれぞれ何を失うのか、重複しないnonceをどう作るのかを、RFC 5116とRFC 8439に沿って整理します。
Javaのtry-with-resourcesでclose()の例外はどこへ行くのか: suppressed例外の読み方
tryブロックとclose()の両方が例外を投げたとき、何が伝播し何がgetSuppressed()に残るのかを、リソースを閉じる順序とあわせてJLS 14.20.3に沿って整理します。
PostgreSQL の UPDATE が新しいインデックスエントリを作らない条件:HOT 更新と fillfactor
PostgreSQL の HOT(heap-only tuple)更新が起きる2つの条件、インデックスが参照する列と同じページの空き領域を公式ドキュメントで整理しました。fillfactor の設定と pg_stat_user_tables で比率を見る方法も扱います。
Linux のメモリオーバーコミット: overcommit_memory の 0・1・2 と CommitLimit の読み方
Linux がメモリ確保の要求をどこまで厳しく判定するかを決める vm.overcommit_memory の 3 つのモード、/proc/meminfo の CommitLimit と Committed_AS の読み方、モード 2 に切り替える前に確認する点をカーネルドキュメントに沿って整理します。
中央値の中央値(BFPRT):最悪の場合でも線形時間でk番目の値を求める
1973年のBlum・Floyd・Pratt・Rivest・Tarjanの論文にあるPICKアルゴリズムが最悪の場合でも線形時間でk番目の値を選べる理由と、5個ずつのグループ分けの由来を原論文に沿って整理します。
TLS 1.3の0-RTTとHTTP 425 Too Early:リプレイをサーバー側でどう扱うか
TLS 1.3のearly dataには接続をまたぐリプレイがないという保証はありません。RFC 8446とRFC 8470をもとに、0-RTTの限界、Early-Dataヘッダー、425を返すべき場面を整理します。
JavaScriptのsort()で数値の並びがおかしくなる理由:既定の文字列比較と比較関数のルール
[10, 9, 1, 100].sort()は[1, 10, 100, 9]を返します。既定のソートの文字列比較、比較関数の戻り値と一貫性の条件、元の配列の変更、undefinedと空きスロット、toSorted()をECMA-262の仕様に沿って整理しました。
Happy Eyeballs v2:デュアルスタックのクライアントはIPv6とIPv4をどう競わせるのか
DNSがIPv6とIPv4のアドレスを両方返したとき、クライアントがAAAA・Aの問い合わせ、アドレスの並べ替え、時間差をつけた接続試行で先に成功した接続を選ぶ、RFC 8305の手順と推奨デフォルト値の意味を整理します。
Linux の PSI の読み方: /proc/pressure の some・full・avg・total
/proc/pressure の some と full、avg10・avg60・avg300、total がそれぞれ何を測っているのか、iowait との違い、しきい値トリガーの制約をカーネルドキュメントに沿って整理します。
ハッシュテーブルが O(1) でなくなるとき:衝突、O(n²) の挿入、ハッシュフラッディング
dict や HashMap の O(1) は期待値です。全キーのハッシュ値が同じだと n 個の挿入に少なくとも n(n−1)/2 回の比較が要る理由と、Python のハッシュランダム化と PYTHONHASHSEED、Rust の SipHash、Java の Comparable による対策をまとめました。
JWT検証でalgを信用してはいけない理由:none、RS256→HS256の取り違えとアルゴリズム固定
JWTヘッダーのalgはトークンを作った側が書く値です。alg noneとRS256→HS256の取り違えが通る理由、RFC 8725が求めるアルゴリズム固定と「1つの鍵に1つのアルゴリズム」、署名の後に確認するiss・aud・exp・typをまとめました。
Python のデフォルト引数に [] を書いてはいけない理由: デフォルト値は def の実行時に一度だけ作られる
def f(a, L=[]) を何度も呼ぶとリストが増え続けます。Python 公式ドキュメントが説明するデフォルト値の評価タイミング、__defaults__、None を使う書き方、dataclass の default_factory を例で整理しました。
PostgreSQL のテーブルをジョブキューにするとき:FOR UPDATE SKIP LOCKED とロックが外れるタイミング
複数のワーカーが PostgreSQL のテーブルからジョブを分け合って取る FOR UPDATE SKIP LOCKED を公式ドキュメントで整理しました。ロックが続く範囲、LIMIT と OFFSET、ORDER BY の順序、WITH 内のロック句を扱います。
HTTP Varyとキャッシュキー: 再利用の条件、Vary: *、キャッシュの分割
Varyはキャッシュキーにリクエストヘッダーを加えます。RFC 9110とRFC 9111をもとに、ヘッダー値が一致するとみなされる条件、Vary: *で毎回再検証が必要になる理由、コンテンツネゴシエーションがキャッシュを細かく分ける仕組みを整理します。
Linuxのマイナー/メジャーページフォルト: ru_minfltとru_majfltが数えるもの
Linuxのgetrusageのru_minfltとru_majfltは、処理にI/Oが必要だったかでページフォルトを分けます。2つのカウンタが数えるものと、メジャーフォルト数をディスク読み込み回数と読めない理由をman-pages 6.19基準で整理します。
トポロジカルソートと循環検出:入次数で順序を決め、詰まった箇所を見つける
依存関係を実行順序に変えるトポロジカルソートを入次数の方法で実装し、循環があるときに何が残るのか、Python graphlibのTopologicalSorterとCycleErrorの挙動を整理します。
OAuth 2.0のPKCE:横取りされた認可コードをトークンに換えさせない仕組み
PKCEのcode_verifierとcode_challengeが認可コード横取りをどう防ぐか。S256の計算、サーバー側の検証、plainとダウングレードの問題、stateとの境界、PKCEでは防げないことをRFC 7636とRFC 9700に基づいて整理します。
Pythonの.pycはいつ作り直されるのか:timestampとハッシュベースの無効化
CPythonは既定で、ソースの更新時刻とサイズを見て.pycが最新かどうかを判断します。この方式が変更を見逃す場合、checked-hashとunchecked-hashの違い、compileallの使い方をPython 3.14.8のドキュメントに基づいて整理しました。
SQLite の -wal ファイルが大きくなり続けるとき:チェックポイントと終わらない読み取りトランザクション
SQLite の WAL モードで -wal ファイルが小さくならない理由を公式ドキュメントで整理しました。1000ページの自動チェックポイント、読み取りトランザクションがチェックポイントを止める仕組み、PASSIVE・FULL・RESTART・TRUNCATE の違いと journal_size_limit を扱います。
DNS レコードを追加したのに「存在しない名前」と返るとき:NXDOMAIN、NODATA とネガティブキャッシュ
レコードを追加した後も一部のリゾルバーが「存在しない」と返し続ける理由を RFC で整理しました。NXDOMAIN と NODATA の違い、SOA で決まるネガティブ TTL、下位の名前まで止める NXDOMAIN cut、失敗キャッシュの 5 分の上限を扱います。
aria-labelとaria-labelledbyを両方付けたら、どちらが読まれる?
アクセシブルネームは決まった順序で計算されます。aria-labelledby、aria-label、label、placeholderの優先順位とよくある誤りをW3C文書で確認します。
ブルームフィルタが「ない」ときだけ断言できる理由
ブルームフィルタが「確実にない」か「あるかもしれない」でしか答えない理由、偽陰性が出ないという保証が成り立つ条件、偽陽性の確率の式、ビットを消すと保証が崩れる理由を整理します。
CORS のプリフライトはいつ発生するか:OPTIONS リクエストが先に送られる条件
fetch() が本来のリクエストの前に OPTIONS を送る条件を WHATWG Fetch 標準で整理しました。セーフリストのメソッドとヘッダー、application/json と Authorization でプリフライトが起きる理由、Max-Age の既定値5秒も扱います。
sort(() => Math.random() - 0.5) でシャッフルしてはいけない理由と Fisher–Yates
ランダムな比較関数で配列を並べ替えても均等に混ざらない理由を ECMAScript 仕様で確認し、すべての順列が同じ確率で出る Fisher–Yates シャッフルと、乱数の範囲・生成器の注意点をまとめました。
git push --force-with-lease でも他人のコミットは消える:バックグラウンド fetch と --force-if-includes
rebase 後の強制プッシュで --force-with-lease が何と何を比べるのか、エディタのバックグラウンド fetch が保護を無効にする理由、Git 2.30 の --force-if-includes と期待値を明示する方法を Git 公式ドキュメントで整理します。
git reset --hard で消えたコミットを reflog で取り戻す
reflog はローカルリポジトリでブランチや HEAD がどこを指していたかを記録します。消えたコミットを探してブランチとして復元する手順、既定の保持期間(90日・30日)、復元できないケースを公式ドキュメントに基づいて整理しました。
HTTPメソッドの安全性と冪等性:POSTの再送が危なくてPUTは大丈夫な理由
RFC 9110 の安全なメソッドと冪等なメソッドの違いを整理しました。接続が切れたとき GET・PUT・DELETE は再送してよく、POST・PATCH はなぜ注意が要るのか、If-Match で防ぐ方法まで扱います。
NaN === NaN が false になる理由:JavaScript の ===・Object.is・includes の比較の違い
JavaScript では NaN === NaN が false なのに [NaN].includes(NaN) は true です。===、Object.is、includes・Map・Set が NaN と -0 をどう扱うかを ECMA-262 の規則とコードで整理しました。
ロードアベレージ4.0は高いのか:Linuxの負荷平均が数えるものと1・5・15分の意味
LinuxのロードアベレージはCPU使用率ではなく、実行中・実行待ち(R)と割り込み不可の待機(D)のタスク数の指数平均です。カーネルソースとmanページから計算方法、CPU数との読み方、PSIとの違いをまとめました。
encodeURIComponentがURIErrorを投げる理由:孤立サロゲート
絵文字の途中でsliceすると、encodeURIComponentはURIErrorを投げ、TextEncoderはEF BF BDを書き出します。孤立サロゲートの正体と、isWellFormed・toWellFormedの使い方をECMA-262とUnicode 17.0に沿って整理しました。
同じトランザクション内の SELECT が違う値を返す理由:PostgreSQL の READ COMMITTED とスナップショット
PostgreSQL のデフォルトの分離レベル READ COMMITTED で、1つのトランザクション内の SELECT が2回で違う結果を返す理由を公式ドキュメントで整理しました。文ごとのスナップショット、UPDATE の再評価、REPEATABLE READ と再試行も扱います。
timeのreal・user・sysの違い:経過時間とCPU時間
timeコマンドのreal、user、sysがそれぞれ何を数えるかをPOSIXの定義で整理し、user+sysがrealを超える理由、シェルのtimeと/usr/bin/timeの違いを説明します。
認証アプリの6桁コードはどう作られるか:TOTPの計算手順
30秒ごとに変わる認証アプリのコードがサーバーと一致する仕組みを、RFCのテスト値でたどります。時間ステップ、HMAC、動的切り捨て、サーバー側の検証、フィッシングに弱い理由まで整理しました。
toLowerCaseで大文字小文字を無視した比較がずれる理由:Unicodeのケースフォールディング
'straße'と'STRASSE'はtoLowerCase()で比べると一致しません。大文字小文字変換とケースフォールディングの違い、トルコ語のi、正規表現/iuの単純フォールディング、正規化をUnicode 17.0とECMAScript 2026に沿って整理しました。
Linux の free コマンドで free が少ないとき:buff/cache と available の読み方
free コマンドの free 欄が小さくても、メモリ不足とは限りません。buff/cache、available、used の意味を /proc/meminfo とカーネルのソースから確認し、キャッシュを習慣的に破棄すると性能に影響しうる理由を説明します。
TIME-WAITのソケットが溜まる理由:TCPの2×MSLとLinuxの60秒、tcp_fin_timeoutの誤解
TCPで先に接続を閉じた側がTIME-WAITにとどまる理由と、RFC 9293の2×MSL、Linuxで固定の60秒を整理しました。tcp_fin_timeoutが実際に決めるものとtcp_tw_reuseの既定値も扱います。
Unicodeのダウンロード名が文字化けするとき:filenameとfilename*の違い
Content-DispositionでUnicodeのファイル名を送る方法を解説します。ASCIIのfilename、UTF-8のfilename*、パーセント符号化、優先順位、安全な受信処理をRFC 6266とRFC 8187に沿って整理します。
タップ領域は24px・44px・48dpのどれにすべきか
WCAG 2.2のレベルAAは24×24 CSS px、AAAは44×44を基準にします。Androidの48dpとの違いと、小さなアイコンの操作領域を広げる方法を整理します。
git bisect run でバグを入れたコミットを探す:終了コード 0・125・127 の意味
git bisect が二分探索で最初の bad コミットを見つける仕組みと、bisect run が終了コード 0 を good、1〜124 と 126〜127 を bad、125 を skip、それ以外を中断として扱うルールを Git 公式ドキュメントで整理します。
HTTP の Range リクエストと 206・416:途中で切れたダウンロードを再開する仕組み
ダウンロードの再開で使う Range・Content-Range・If-Range ヘッダーと、206 Partial Content、416 Range Not Satisfiable のルールを RFC 9110 で整理しました。サーバーが Range を無視する場合も扱います。
クイックソートはいつO(n²)になるのか:標準ソートが最悪ケースを防ぐ仕組み
ソート済み入力、median-of-3 killer、敵対的な比較関数でクイックソートは二次時間になります。introsortの深さ制限と、C++・Rust・Go・Javaの文書が保証する範囲を解説します。
NOT IN の結果が0件になる理由:SQL の NULL と3値論理
サブクエリの結果に NULL が1つでもあると NOT IN の条件で0件になる理由を、PostgreSQL・MySQL・SQLite の公式ドキュメントをもとに整理しました。3値論理、WHERE が行を残す条件、NOT EXISTS での直し方も扱います。
ダイクストラ法が負の重みで正しく動かない理由
負の辺がダイクストラ法の貪欲な選択を壊す仕組みを、辺3本の小さな反例で確認し、Bellman–Ford法やDAG向けの手法との使い分けを整理します。
CSVのRFC 4180:カンマ・ダブルクォート・改行を含む値の扱い方
値の中のカンマや改行でCSVの列がずれる理由を、RFC 4180、IANAのtext/csv登録、W3Cの表形式データ勧告、PythonとGoの公式ドキュメントで整理します。RFC 4180が決めていないことも確認します。
git log と git diff の .. と ...:同じ記号で意味が変わる理由
git log で A..B と A...B が選ぶコミット、git diff で2つの記号が比べる地点を、Git 公式ドキュメントと実行例で整理します。プルリクエストの差分がどちらかも扱います。
401と403の違い:認証がないリクエストと拒否されたリクエスト
HTTP の 401 Unauthorized と 403 Forbidden の違いを RFC 9110 と OAuth 2.0 Bearer トークン仕様で整理しました。WWW-Authenticate、再リクエストの規則、404 で存在を隠す場合も扱います。
2147483647 に 1 を足すとどうなるか:言語ごとに違う整数オーバーフロー
Java の int、Go の int32、Rust の i32 では 2147483647 + 1 が範囲を超えます。Java と Go は負の数、Rust は既定の Cargo 設定なら dev でパニック、release で負の数。C の INT_MAX + 1 は未定義動作、Python は 2147483648 です。
chmod 755と644の意味:数字とrwxの対応、ディレクトリのx権限
chmod 755の7や5は、読み取り・書き込み・実行のビットを足した8進数です。POSIXをもとに、数字とrwxの対応、所有者・グループ・その他の判定、ディレクトリでのr・w・xの意味、umaskとchmod -Rの注意点をまとめました。
ヒープはソート済みリストではない:優先度付きキューの並び順とインデックスの式
heapq や PriorityQueue を出力すると、なぜ並んでいないのか。ヒープが守る条件、0始まりの親子インデックスの式、ソート済みリストとの計算量の違い、同じ優先度の扱いを公式ドキュメントで整理します。
package.jsonの^1.2.3と~1.2.3の違い:npmのバージョン範囲と0.xの落とし穴
既定では、^1.2.3は1.2.3以上2.0.0未満の正式版を、~1.2.3は1.2.3以上1.3.0未満の正式版を許可します。SemVerとnpmの違い、0.x、プレリリース、ロックファイルを整理しました。
1.0.0-rc.1 と 1.0.0 はどちらが上か:SemVer のプレリリースの順序と ^ 範囲
1.0.0-rc.1 と 1.0.0 のどちらが上か、^1.2.3 が 1.5.0-beta.1 を選ばない理由を SemVer 2.0.0、node-semver、Cargo の文書から説明します。
ZIP を解凍すると日本語ファイル名が文字化けする理由:CP437 と UTF-8 フラグ
ZIP の日本語・韓国語ファイル名が ô·û{ のように文字化けする理由を、PKWARE APPNOTE の CP437 既定値、汎用ビットフラグのビット 11、Info-ZIP の 0x7075 拡張フィールドと Python・.NET のドキュメントから整理します。
ファイルを削除してもディスク容量が空かない理由:unlinkと開いたままのファイル
rmで大きなファイルを消してもdfの空き容量が増えないことがあります。POSIXが定めるリンク数と開いたファイルの規則、duとdfの結果が食い違う理由、Linuxで原因を探して容量を取り戻す手順をまとめました。
Cache-Control の no-cache と no-store の違い:保存させないのは no-store
no-cache は「キャッシュしない」ではありません。RFC 9111 をもとに no-cache、no-store、max-age=0、Pragma の違いを整理し、CDN やブラウザーによって挙動が異なる点も確認します。
負の数の剰余:-7 % 3 の結果が言語によって違う理由
-7 % 3 が Python では 2、JavaScript・Java・C・Go では -1 になる理由を切り捨て・床・ユークリッド除算から説明し、負の数でも 0 以上の余りを得る方法をまとめました。
UTF-8 の BOM(EF BB BF):見えない3バイトの扱いが規格ごとに違う理由
UTF-8 ファイル先頭の EF BB BF が、ブラウザーでは読み飛ばされ JSON.parse ではエラーになる理由を、Unicode、RFC 3629、RFC 8259(JSON)、WHATWG の Encoding・HTML 標準の規定から整理しました。
X-Frame-Options と CSP frame-ancestors の違い:クリックジャッキング対策ヘッダーを両方送るとどうなるか
iframe への埋め込みを防ぐ2つのヘッダーの違いを CSP Level 3 と HTML 標準で整理しました。両方送ったときの優先順位、ALLOW-FROM が無視される理由、meta タグでは効かない理由を解説します。
二分探索の挿入位置:bisect・lower_bound・binarySearch は何を返すのか
値がないときや重複があるときに Python の bisect、C++ の lower_bound、Java の Arrays.binarySearch が返す位置と、それぞれの前提条件を公式ドキュメントと C++ 規格で比べました。
PNG ファイルはなぜ 89 50 4E 47 で始まるのか:シグネチャとチャンク構造
PNG ファイルが必ず 89 50 4E 47 0D 0A 1A 0A で始まる理由、長さ・タイプ・データ・CRC からなるチャンク構造、大文字・小文字で性質を表すチャンク名の規則と必須チャンクの順序を、W3C PNG 第3版と RFC 2083 をもとに整理します。
diff の @@ -1,7 +1,8 @@ の読み方:unified diff 形式の数字の意味
diff -u や git diff の @@ 行について、開始行と行数、範囲が 0 になる場合、既定の前後3行、Git が付ける関数の文脈を POSIX と公式文書に沿って説明します。
配列の末尾への追加はなぜ O(1) なのか:動的配列と償却計算量
満杯になると全要素をコピーすることがあるのに append が O(1) とされる理由を、容量と償却解析で説明し、Java・C++・Rust・Go のドキュメントが保証する範囲と実装が決める増加率、容量を先に確保する方法をまとめました。
Gitの改行コード設定:.gitattributesのtext・eolとcore.autocrlfの違い
git diffに^Mが表示されるときに確認する設定を、Git公式ドキュメントに基づいて整理しました。core.autocrlfと.gitattributesのtext・eolがそれぞれ何を決めるのか、すでにCRLFでコミットされたファイルの直し方も扱います。
301・302・307・308 リダイレクトの違い:恒久か一時か、POST が GET になる理由
HTTP リダイレクト 301・302・303・307・308 の違いを RFC 9110 と WHATWG Fetch 標準で整理しました。POST が GET に変わる条件や、キャッシュと検索エンジンでの扱いの違いも解説します。
Base64 とは何か:エンコードのしくみとよくある誤解
Base64 が3バイトを4文字に変える方法、結果が約33%大きくなる理由、末尾の = の意味、URL-safe Base64、日本語を扱うときの注意点を RFC 4648 をもとに整理しました。
192.168.0.0/24 の /24 とは:CIDR とサブネットの計算方法
IP アドレスの後ろの /24 の意味、サブネットマスクとの関係、ネットワークアドレス・ブロードキャストアドレスと使えるホスト数の求め方、プライベート IP の範囲を例とともにまとめました。
薄いグレーの文字はなぜ読みにくいのか:WCAG のコントラスト比の計算
白背景の薄いグレーの文字がアクセシビリティチェックで不合格になる理由を、WCAG 2 の相対輝度とコントラスト比の式で説明し、4.5:1・3:1・7:1 の基準とダークモードの注意点を実際の色で整理しました。
ドメイン名が IP アドレスになるまで:DNS の名前解決のしくみ
ブラウザに入力した名前がどのように IP アドレスに変わるのか。スタブリゾルバ・フルリゾルバ・権威サーバー・キャッシュの役割と A/AAAA レコード、TTL を RFC をもとに整理しました。
0.1 + 0.2 が 0.3 にならない理由:浮動小数点数のしくみ
JavaScript・Python・Java で 0.1 + 0.2 が 0.30000000000000004 になる理由を IEEE 754 倍精度形式で説明し、比較・丸め・金額計算での対処法をまとめました。
ハッシュ関数とは:SHA-256、チェックサム、パスワードの保存まで
SHA-256 が常に64桁になる理由、1文字変えるだけで結果がすべて変わる性質、ハッシュ・暗号化・エンコードの違い、ダウンロードしたファイルの確認、パスワードに高速なハッシュを使ってはいけない理由をまとめました。
JSON.parse のエラー位置は間違いの場所ではない:よくある JSON エラーまとめ
末尾のカンマ、シングルクォート、コメント、NaN のようにパーサーが拒否するものと、大きな整数や重複キーのようにエラーなしで値が変わるものを RFC 8259 をもとに整理し、エラー位置の読み方を説明します。
日本語ドメインが xn-- になる理由:国際化ドメイン名と Punycode
日本語.jp が DNS の設定画面や SSL 証明書で xn--wgv71a119e.jp と表示される理由、Punycode が文字を英数字に置き換えるしくみ、変換前の正規化、ホモグラフ攻撃までを RFC をもとに整理しました。
安定ソート(stable sort)とは:同じ値の並び順が保たれるソート
安定ソートの意味、複数のキーで並べ替えるときに重要な理由、Python・JavaScript・Java・C++の標準ソートが何を保証しているかを仕様と公式ドキュメントをもとに整理しました。
文字数がツールごとに違う理由:バイト、コードポイント、見た目の1文字
同じ文章なのに Word、フォーム、X(旧Twitter)、JavaScript の .length で文字数が変わる理由を、UTF-8 のバイト数、UTF-16、コードポイント、書記素クラスタの違いから整理しました。
ログの 1790550000 は何時か:UNIX時間とミリ秒、2038年問題
UNIXタイムスタンプが何を数えているのか、10桁と13桁の違い、タイムスタンプにタイムゾーンがないという意味、うるう秒と2038年問題、データベースへの保存方法を例とともにまとめました。
日本語の URL が %E6%B8%8B… になる理由:URL エンコードのしくみ
検索結果のリンクをコピーすると日本語が %E6%B8%8B… に変わる理由、encodeURI・encodeURIComponent・URLSearchParams の違い、空白の %20 と +、%2520 のような二重エンコードの原因をまとめました。
UUID v4 と v7 のどちらを使うか:128ビットの構造と衝突確率
UUID の 8-4-4-4-12 の中でバージョンとバリアントのビットがどこにあるか、v4 の衝突確率が実際どれくらいか、時刻が先頭に入る v7 がデータベースのインデックスに向く理由を RFC 9562 をもとに整理しました。
該当する記事がありません。別の言葉で検索してみてください。