ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
tmux のキー操作を、本物と同じ画面で身につけるタイムアタック。分割・移動・全画面・ウィンドウ・コピーモード。押すキーは画面に出ている。
Translation pending
EducationJavaScript · CSSGitHub @t29matoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
tmux からくり屋敷 — tmux のキーで屋敷の仕掛けを解くタイムアタック。押すキーはいつも画面に出る (browser + real tmux CLI)
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗tmux のキー操作を、本物の tmux と同じ画面で身につけるタイムアタック。分割・移動・全画面・ウィンドウ・コピーモードの問題を次々に解く。押すキーはいつも画面に出ているので、遊んでいるうちに指が覚える。
▶ 今すぐ遊ぶ: https://t29mato.github.io/games/tmux-dojo/
web/): 3 つのコースのタイムアタック。インストール不要。ランキング(ランキング)と端末の引き継ぎは任意./tmux-da): 本物の tmux の中で 11 面を解くweb/)ページの中の小さな tmux で遊ぶ。web/index.html をそのまま開けば動く(file:// でも静的サーバーでも)。名前か合言葉を付けるまでは一切通信しない。
| コース | 問題数 | 目安 | 中身 |
|---|---|---|---|
| 入門(手ならし・初めてはここ) | 15 | 12 秒 | 分割・移動・全画面・閉じる・ウィンドウの作成と切り替え。1 問 1 キー |
| 中級(腕試し) | 20 | 14 秒 | 大きさ・名前・入れ替え・ウィンドウを閉じる・スクロール(コピーモード)も混ざる |
| 上級(真剣勝負) | 16 | 18 秒 | 1 問で 2〜3 手の連続技 |
| 達人(使っている人へ) | 14 | 1 問 7〜25 秒 | tmux を使っている人向け。join-pane・swap-window・move-window・並べ方(prefix M-1〜M-5 と Space、完成図つき)・synchronize-panes・prefix q と番号・検索して行をコピー・rotate-window・キーのないコマンド(new-window -n、kill-session -t)。tmux 3.8 の既定どおりに動く |
prefix q と同じ番号で示し、いま居るペインは緑の枠と番号。やることと次のキーは、いま居るペインのプロンプトのすぐ上にシェルのコメント(#)として出る。行き先のペインには点線と印、いま居るペインからの矢印(押すキーつき): のコマンドも全部試せる。タイトル画面(P)と稽古の結果から入り、Esc 2 回か「やめる」で戻る。下に、遊んだコースで覚えたキーの早見表(日本語、たためる): プロンプト: コマンド名は tmux と同じく、ほかと区別できるところまで縮めてよい(kill-ses、swapw、selectl)。あいまいなら ambiguous command: kill, could be: …、ないものは unknown command:(tmux 3.8 のコマンド表で判定)。display-message(#S #W #I #P #{…} を展開)、send-keys -t、list-keys・show-messages(prefix ?・prefix ~。q で閉じる一覧)、show-options がある。見るだけのコマンドと、tmux にあってゲームが再現しないコマンドは問題中でもミスにならない(そう出る)。ないコマンド・あいまいなコマンド・頼まれていない操作はミスw b e W B E ^ 0 $ H M L f F t T ; , g G C-u C-d C-b C-f、emacs の M-f M-b M-< M-> も tmux 3.8 と同じ位置に動く。V で行ごと選べ、行をまるごとコピーする問題の手順と「標準」は V を使うo で次のペインへ、; で直前のペインへ)も出すset -g prefix、ゲームにある操作への bind / bind -n / bind -r / unbind、vim-tmux-navigator(プラグインの既定どおり Ctrl+h/j/k/l、Ctrl+\、合図 → Ctrl+l)。renumber-windows、break-pane -d、縮めたコマンド名も読む。読めない行は理由つきで一覧に出す。自分の設定で遊んだ記録も、既定のキーの記録と同じランキングに載るmatsu-kaze-tsuru-482)を別の端末で入れると、同じ記録が見られるopen web/index.html # macOS
python3 -m http.server -d web 8000 # または http://localhost:8000/
server/)ランキングと引き継ぎのための小さな API。Cloudflare Workers + D1(SQLite)。アカウントは無く、合言葉は SHA-256 だけを保存する。記録の検証(1 問あたり平均 0.4 秒未満、1 問 0.1 秒未満、合計が合わない記録、その日の出題順でない記録、途中で長く止まった記録、順番を変えた回は弾く)と、アドレスごとの回数制限(分ごと、合言葉の新規作成は日ごとも)をする。自分の .tmux.conf で遊んだ記録はランキングに「自分の設定」と出る。名前は見えない文字を落とし、制御文字や積み重ねたアクセントを弾く。
ランキングに載せる記録には、押したキーの記録(klog: キーごとの ms と表示名、問題ごとの開始 ms)が付く(keylogs 表)。サーバはそれが記録と合うか(キーの数、最後のキーの時刻 ≈ タイム、問題の切れ目 ≈ 各問の秒)と、人の手らしいか(間隔が 15 ms 未満のキーが 3 割を超える、間隔が全部同じ)を見て、合わなければ 400 で理由(key log: …)を返す。古いクライアントのキー記録なしの記録はこれまでどおり受ける。キー記録は影(/v1/ghost の above= で 1 つ上の人、name= でその人のベスト)と「この回を見る」(再生)に使う。名前のある人は遊んでいる .tmux.conf を公開できる(/v1/conf、8 KB まで、そのまま保存。confs 表)。ランキングの「自分の設定」がそのリンクになる。
keylogs と confs の表は Worker が初回に自分で作るが、本番のデプロイ前に手で作っておくのが確実(既存のデータには触らない):
cd server
npx wrangler d1 execute tmux-da --remote --command "CREATE TABLE IF NOT EXISTS keylogs (key_hash TEXT NOT NULL, run_id TEXT NOT NULL, log TEXT NOT NULL, PRIMARY KEY (key_hash, run_id))"
npx wrangler d1 execute tmux-da --remote --command "CREATE TABLE IF NOT EXISTS confs (key_hash TEXT PRIMARY KEY, text TEXT NOT NULL, at TEXT NOT NULL)"
公開された設定を消すには(本人が消せない事情のとき):
npx wrangler d1 execute tmux-da --remote --command "DELETE FROM confs WHERE key_hash = (SELECT key_hash FROM players WHERE name = 'その名前')"
cd server
npx wrangler d1 execute tmux-da --remote --file schema.sql # 表を作る(初回だけ)
npx wrangler deploy
表を変えたときは server/migrations/ に ALTER を置く(既存のデータに安全なものだけ)。Worker は初回に自分でも当てるが、デプロイ前に手で当てておくのが確実:
npx wrangler d1 execute tmux-da --remote --file migrations/0001-scores-own.sql
荒らしの名前や記録を消すには(合言葉は分からないので名前で):
npx wrangler d1 execute tmux-da --remote --command "DELETE FROM scores WHERE key_hash = (SELECT key_hash FROM players WHERE name = 'その名前'); UPDATE players SET name = NULL WHERE name = 'その名前'"
ステージング(本番と別の Worker と D1)。試しの名前や記録はこちらへ送る。ページは ?api=staging を付けるとこちらにつながる。
cd server
npx wrangler d1 execute tmux-da-staging --remote --file schema.sql # 初回だけ
npx wrangler deploy --env staging # https://tmux-da-api-staging.starrydata-mcp-cloudflare.workers.dev
npm install # Playwright と wrangler(初回だけ。npx playwright install chromium も)
npm test # 全部
npm run test:unit # 単体テストだけ(数秒)
scripts/test.sh game # unit | game | online | cli のどれか 1 つ
| 種類 | 場所 | 中身 |
|---|---|---|
| 単体 | web/test/unit/ | コースと称号、記録(追加・移行・端末の合流・影・苦手)、通信(偽のサーバ相手) |
| 単体+API | server/test/ | 合言葉・記録の検証規則、キー記録の検証(Playwright で録った人の手の記録 fixtures/keylogs.json と、機械らしい記録)、API 全体を Node 内蔵の SQLite 上で(同期・名前・ランキング・影・公開設定・回数制限・CORS) |
| 結合(ゲーム) | web/test/playthrough.mjs | 本物のキーボードイベントで 3 つのコースを通す。手順だけで全種類解けるか、問題の境で居場所と部屋が引き継がれるか、指示の文字が動かないか、飛ばないか、一時停止、行の編集、音 |
| 結合(通信) | web/test/online.mjs, server/smoke.mjs | wrangler dev --local を立て、ブラウザ 2 つを 2 台の端末に見立てて同期・ランキング・影を通す |
| CLI 版 | test/playthrough.sh | 下を参照 |
push のたびに GitHub Actions(.github/workflows/test.yml)で全部が走る。
test/playthrough.sh
キー操作の代わりに tmux のコマンドで全面を解き、見張り役が 1 面ずつ進めるかを確かめる。script(1) で疑似端末のクライアントをつなぐので、デタッチと再接続の面も試せる。
ブラウザ版は t29mato.github.io の games/tmux-dojo/ から配信している。web/ を更新したら、隣にクローンしてあるサイトのリポジトリへコピーし、そちらでコミットして push する:
scripts/publish.sh # ../t29mato.github.io/games/tmux-dojo/ にコピー(SITE_DIR で変更可)