Skip to content

バックログ

リポジトリの README をそのまま掲載している(単一ソース)。

sharin

車輪の再発明で学び直すリポジトリ。

AIで作れるものの幅は広がったが、そのぶん中身がブラックボックスになりやすい。 rate limiter を1から書く、サンプリングを logits から計算する、といった機会を 意図的に作り、パーツごとに「簡略化しつつ肝は外さない」最小実装を積む。

進め方の型

1パーツ = 1ディレクトリ。各パーツは次の4点セットを持つ。

<part>/
├── README.md   # 肝(3行以内) / 簡略化したこと / 本物との差分 / 参考資料
├── 実装         # 最小限。ライブラリに逃げない部分を明確にする
├── テスト       # 挙動を言葉で説明できることの証明
└── notes.md    # 作りながらの気づき(任意)
  • 「簡略化したこと」を明記するのが最重要。何を捨てたか自覚していれば簡略化は嘘にならない。
  • 言語は原則 Go。ブラウザ/VDOM 系のみ TypeScript。 LLM も Go で書く: numpy に逃げない = 行列積や softmax も自作する、それ自体が車輪の再発明。 Python は HF transformers の出力と突き合わせる検算スクリプト用にのみ許可。

教科書サイト

実装と並行して docs/ に教科書を書き、Cloudflare Pages で公開する。 公開URL: https://sharin-2a1.pages.dev

  • スタックは VitePress を想定。<<< @/../rate-limiter/token_bucket.go#region 形式で 実コードをスニペットとして埋め込めるため、教科書のコードと動くコードが乖離しない。
  • 章構成はバックログのパーツと1対1。本文(なぜそう動くか、図、落とし穴)は docs/ 側に書き、 各パーツの README.md は「肝 / 簡略化したこと / 章へのリンク」の要約に留める。
  • デプロイは GitHub Actions から wrangler で Cloudflare Pages へ。main は本番、PR はプレビューURL。
  • Cloudflare を選んだ理由: PR ごとのプレビューと、章に添える「実際に叩けるライブデモ」を Workers で同居させられるため。

バックログ

テーマ別にグルーピングする(教科書の章立てもこれに従う)。 サイズは各パーツの属性: S = 1〜2日 / M = 数日〜1週間 / L = 週単位以上

トラフィック制御と観測

「何を通すか」と「何を残すか」の連作。

パーツ作るものサイズ
rate-limitertoken bucket / leaky bucket / fixed window / sliding window log の比較実装バーストの許し方と平滑化のトレードオフ。時計と原子性S
trace-sampling簡易トレーサー + head-based / tail-based サンプラー、エラートレース捕捉率の比較全量保存できない中で何を残すか。tail は「完結を待つバッファ」の代償を払って価値の高いトレースを確実に残すS〜M
proxyTCP フォワードプロキシ、HTTP リバースプロキシ(ヘッダ書換・LB付き)、CONNECT トンネルL4 と L7 の違い。ストリーム中継と X-Forwarded-For の意味M

データの持ち方

パーツ作るものサイズ
data-structureshash map(衝突・リサイズ) / B-Tree / LRU / bloom filter / skip list計算量の理屈を「自分で書いたから」で説明できる状態にする。db 編の下ごしらえS×複数
id-generationUUIDv4 / UUIDv7 / ULID / Snowflake を自作、衝突確率も計算時刻 + 乱数 + ノードIDの配合。ソート可能性がなぜ効くかS
dbappend-only KV から始めて WAL、B-Tree ページストア、ミニSQL(parser + executor)、インデックス、最後にMVCCの触り永続化とクラッシュ耐性。インデックスが速い理由を B-Tree 自作済みの目で見るM〜L(段階制)

暗号と認証

パーツ作るものサイズ
cryptoXOR暗号、AES(モードの違い)、Diffie-Hellman、RSA(小さな素数で)、SHA-256、最後にトイTLSハンドシェイク共通鍵と公開鍵の役割分担。「暗号化」と「署名」と「ハッシュ」は別物M
authセッション+Cookie 自作、JWT(HMAC署名を手計算)、OAuth2 の3役(client / auth server / resource server)をトイ実装認証と認可の違い。署名検証がなぜサーバー間の信頼になるか。crypto 編の応用M
blockchainハッシュチェーン + PoW、merkle tree、UTXO トランザクション(署名は crypto 編の応用)、簡易 P2P 同期ブロックチェーンは「改竄コストを計算量で買う追記専用ログ」。難易度調整の意味M

LLMのなかみ

パーツ作るものサイズ
llm-samplinglogits 配列から greedy / temperature / top-k / top-p / min-p を実装softmax の温度が分布をどう歪めるか。生成は毎トークン確率実験S
llmGo で自作 tensor(float32 slice + shape)、matmul / layernorm / GELU、BPE トークナイザ、GPT-2 相当の forward pass、KV cache。Python は検算のみattention は行列積の塊。生成が逐次で遅い理由と KV cache が効く理由。llm-sampling 編と接続L

画面が出るまで

パーツ作るものサイズ
vdommini React: createElement / render / diff / 再レンダリング / useState をクロージャでVDOM diff は木の比較アルゴリズム。hooks が「呼び出し順の配列」で動くことM
mini-nextvdom の上に SSR と hydration、file-based routing の最小版サーバーで作った HTML にクライアントでイベントを「接ぎ木」するのが hydrationM
browserHTML parser、DOM ツリー、CSS カスケード、レイアウト(ブロック/インライン)、矩形描画までパースからピクセルまでのパイプライン。robinson 系のトイエンジンL

計算機の土台

パーツ作るものサイズ
langlexer、Pratt parser、AST インタプリタ、(余力で bytecode VM)再帰下降パースと評価器。Monkey 言語(Writing an Interpreter in Go)系L
containerchroot / pivot_root、namespaces(UTS/PID/mount)、cgroups v2、overlayfs、イメージ tar 展開までのミニ runcコンテナは VM ではなくただのプロセス。カーネル機能の組み合わせにすぎないこと。Linux 必須(macOS では Lima 等の VM 内で)M
osRISC-V のトイOS: ブート、割り込み、ページング、コンテキストスイッチ、簡易syscall特権レベルとハードウェアとの契約。「OSは割り込みで駆動されるイベントループ」L

着手順の目安

グループはテーマの整理であって順序ではない。基本は S のパーツで弾みをつけてから M/L に向かう。依存関係として以下だけ意識する。

  • data-structures の B-Tree は db の前に
  • crypto は auth と blockchain の前に
  • llm-sampling は llm の前に(どちらが先でも成立はする)
  • trace-sampling は rate-limiter の後だと「何を通すか/何を残すか」の対比が効く
  • vdom は mini-next の前に

このリストは固定ではない。やりたいものが増えたらバックログに足す。