yoshiharu.ishii

16bit

Rust + WebAssembly の x86 エミュレータに gdb 風デバッガを作る — 倒れた場所は犯行現場ではない

自作の x86 エミュレータ (rustx86) で FreeDOS を動かしたら、Tab キーを押すとカーソルが画面の先頭へ飛んだ。Ctrl+C も効かない。前回はこの手のバグを、割り込みの統計ダンプと勘で追い詰めた。今回はその反省から、...
16bit

Rust + WebAssembly の x86 エミュレータで FreeDOS を起動して、ブラウザで DOS ゲームを動かした

Rustでエミュレータを書く 連載 第4回1. RustとWASMでゲームボーイエミュレータを作る2. x86エミュレータを自作する — 正解を知っているCPUに答え合わせさせる3. 8259 PIC と BIOS を書いて、16bit U...
16bit

Rust + WebAssembly で 8259 PIC と BIOS を書いて、ブラウザで 16bit UNIX (ELKS) をログインまで動かした

Rustでエミュレータを書く 連載 第3回1. RustとWASMでゲームボーイエミュレータを作る — テスト全通過から「実機の音」になるまで2. x86エミュレータを自作する — 正解を知っているCPUに答え合わせさせる3. Rust +...
16bit

x86エミュレータを自作する — 正解を知っているCPUに答え合わせさせる

Rustでx86エミュレータを自作し、リアルモード8086を動かすまでの開発記。x86には網羅テストROMがないため、QEMU由来のUnicorn Engineをオラクルにした比較実行(co-sim)で検証する。緑のテストを信用する前に変異テストで検出力を確かめ、ランダムでは踏めない境界値を総当たりで潰すまで。
AI

RustとWASMでゲームボーイエミュレータを作る — テスト全通過から「実機の音」になるまで

RustでゲームボーイエミュレータをフルスクラッチしWASMでブラウザ動作。Blarggテスト全通過、m-cycle精度化、そしてゲーム音楽が「キーキー」鳴る2つの原因(バッファ枯渇とエイリアシング)を計測で特定して完治させるまでの開発記。
AI

声は言葉より早い ── OpenAI gpt-audioの怒り判定が、テキスト判定より2発話先に警報を出すまで

コールセンターの通話から顧客の怒りをリアルタイム検知するシステムを作っている。文字起こしをLLMで判定するテキスト経路は既に動いていて、バックテストも通った。そこに声のトーン判定を足したら、狙っていなかった現象が出た。声は、言葉より早く怒る...
AI

OpenAI gpt-audio に「音声をお聞かせください」と言われる ── 直したのはJSONの指示を書く場所

通話音声から声のトーンを判定させようと、OpenAIの音声入力対応モデル(gpt-audio)を Chat Completions API から叩いていて、妙な壁にぶつかった。WAVをちゃんと添えているのに、モデルが「音声をお聞かせください...
Claude Code

Claude Codeを軸にした個人開発プロセス — 思いつきから本番デプロイまでの全工程

Claude Codeとのペアで2日・PR11本・3,200行を作った個人開発プロセスの全工程。会話が要件定義になり、コードレビューの代わりにドメイン固有のゲートをCIに埋め込む。コードを書かない側に残る3つの仕事とは。
TypeScript

TypeScriptを知らないままゲームを移植した — 後から効いた言語知識7つ

TypeScript未経験のままブラウザゲームをJSからTSへ移植して分かった、最初に知るべき7つのこと。型は実行時に消える、tscとesbuildの役割分担、ユニオン型での状態管理、境界での実行時検証まで実例付きで。
DevOps

GitHub ActionsでTypeScriptのCI/CDを組む — Checksタブを「リンク集」から「レポート」に変える

PRのChecksタブがログへのリンク集にしかならない問題を、Checks APIで右ペインに読めるレポートを出して解決する。ジョブ統合・ANSI除去・head_shaの罠、デプロイ鍵の最小権限化まで要点を4つに絞って解説。