UNIXパイプカードゲーム
(punkx.org)- 子どもたちが
cat、grep、tail、head、wc、sort、uniqといった基本的な UNIX コマンドをカードとしてつなぎ合わせながら、パイプの組み合わせを学ぶゲーム - 親が基本コマンドを理解し、実際の実行例を見せることが前提で、UNIX 環境がなければブラウザで jslinux を使える
- プレイヤーはタスクカードの目標に合わせてコマンドチェーンを作り、例として
cat 03.txt | sort | uniq -c | sort -n | tail -1のようなパイプラインを使う - ラウンドでは最年少のプレイヤーが 最短チェーン または 最長チェーン で勝敗を決める方式を選び、タスクを最初に完成させたプレイヤーが得点する仕組み
- カードの PDF とコードが公開されており、自分で印刷して使えるほか、より難しい Process Substitution 拡張パックも提供されている
カードゲームの目的と準備物
- UNIX Pipe Card Game は、子どもたちに UNIX コマンドをパイプで組み合わせる方法を教える カードゲーム
- 基本ゲームで扱うコマンドは
cat、grep、tail、head、wc、sort、uniq - 親はコマンドを実際のコンピュータで実行して見せる必要があり、UNIX システムがなければブラウザで jslinux を使える
- 自分で印刷するための資料とコードは公開されている
- unix-pipe-cards.pdf: カード PDF
- unix-pipe-box.pdf: ボックス PDF
- unix-pipe-game: コード
- より難しいバージョンである UNIX Pipe Game - Process Substitution 拡張パックでは、プロセス置換と
paste、tr、cut、bcを扱う
ラウンドの進行とコマンドチェーンの例
- 例のラウンドの目標は、ファイル内で最もよく出現する行を出力すること
catでファイルを読むsortで行を並べ替えるuniq -cで重複行の数を数えるsort -nで数値基準の並べ替えを適用するtail -1で最後の行を出力する
- この目標を解くコマンドチェーンの例は次のとおり
cat 03.txt | sort | uniq -c | sort -n | tail -1
- 基本的な進行方法は次の順序
- 最年少のプレイヤーがラウンド形式を選ぶ
- タスクを完成させる 最短のパイプチェーン を作った人が勝つ
- タスクを完成させる 最長のパイプチェーン を作った人が勝つ
- 最年少のプレイヤーがタスクカードからタスクを 1 つ選び、同じタスクは 2 回選べない
- カードをシャッフルしてテーブルの上に裏向きで置く
- 各プレイヤーが時計回りにデッキの一番上のカードを引き、タスク完成を目指す
- タスクを最初に完成させたプレイヤーが得点する
- もうタスクがなくなったらゲーム終了
- 最年少のプレイヤーがラウンド形式を選ぶ
タスクカードが求める問題
- タスクの例は、行の選択、文字列検索、個数カウント、出力制御のように、UNIX コマンドの組み合わせで解ける目標で構成されている
- 2 行目を出力
- 下から 2 行目を出力
- 7 行目を出力
- 最もよく出現する行を出力
- 最もまれな行を出力
"rises"を含む行の数を数えるWを含む最初の行を出力"in"を含む行の数を数える- ランダムな 2 行を表示
- 最後の 2 行の単語数を数える
- 7 行目と 8 行目を出力
!を含む行の数を数える!を含まない行の数を数える- 何も出力しないコマンドチェーンを作る
2件のコメント
Hacker Newsのコメント
娘に教えるためにこのカードデッキ群([https://punkx.org/](https://punkx.org/))を作ったが、今のところかなり効果がある。
特に Unixパイプ、4917機械語([https://punkx.org/4917/](https://punkx.org/4917/))、ポインターデッキ([https://punkx.org/c-pointer-game/](https://punkx.org/c-pointer-game/))が良く、Pythonデッキは10枚ほどしか使っていない。
RISC-Vアセンブリでバッファオーバーフローを扱うボードゲーム https://punkx.org/overflow/ も気に入るかもしれないし、子どものレベルによってはgotoで遊ぶ蛇と梯子ゲーム https://punkx.org/overflow/build/snakes-and-ladders.pdf もできる。
子どもがいるなら https://punkx.org/panic/ も印刷してみることをおすすめする。ポーカーカード1枚に収まるいたずらが入っていて、たとえば30秒ごとにランダムにバックスペースやスペースを押したり、Minecraftが開いていればWをランダムに押したりする、といったもの。
多くのデッキを先生や学校に寄付しているので、興味があればメールを送ればよい。
追伸:これからあと1週間ロンドンにいるので、今注文すると配送は遅れるが、その代わりパッケージにデッキを1〜2個多く入れて送る。
ちなみにUnixパイプ拡張デッキはプロセス置換ばかりで、子どもたちに役立つとは思わないが、パズルとしては悪くないと思う。
ひとつ気になったのは、ゲームに「2行目を出力」「7行目を出力」のような課題があるが、どちらの行も空だという点。そのため厳密には、何にもマッチしない
grepでも正解になり得る。気になるのだが、印刷はどうしているのか知りたい。自作なのか、オンデマンド印刷なのか、大量発注して自分で発送しているのか。小規模な物理製品の販売をどう運営しているのかは、いつも興味深い。
娘たちはまだ幼すぎて使うには早いが、デッキは素晴らしいと思うし、8年後くらいに取り出して使う日を楽しみにしている。
最近の子どもたちがこういうものを実際に理解できるのか気になる。
子どもはいないし、子どもたちの周りにいる機会もないので、純粋な質問として受け取ってほしい。
難しいのは、娘の注意をめぐってSnapchatやGoogle/Metaと競争しなければならないこと。学校もかなり疲れさせるし、Snapchatの ストリーク は本当に厄介だ。友だちが多いほど維持すべきストリークが増え、1日に400通くらいメッセージを送らなければならず、終わりがない。
娘には、10万人の開発者、心理学者、プロダクト責任者などが毎日出勤して、娘の注意から最大限の価値を引き出す方法を考えているのだと教えている。だから「アルゴリズム」が自分に何をさせようとしているのか、常に意識しなければならないと伝えている。
Unixパイプはかなり早く理解したが、頻繁には使っていない。それでも、あるプログラムが別のプログラムの出力を読むという概念はつかんだし、コマンドラインを理解するのもそれほど難しくはなかった。
ただし、いくつか仕掛けは使った。たとえば娘のWindows PCでシェルを
explorerではなくcmd.exeに変えて、起動するとすぐコマンドプロンプトが出るようにし、娘に探索して自分で直させた。ファイルシステムでdir、cdなどを使ってファイルを探す宝探しも作ったし、https://overthewire.org/wargames/bandit/ のBanditゲームでは、レベルをクリアするたびにRobuxで報酬を出した。コンピューターがどう動作し、コンピューターに望むことをさせる方法を教えたい。レジスターとは何か、命令とは何か、プログラムとプロセスとは何かまで、いわば基本中の基本だ。
その過程で、問題を分割する方法、考え方、何より学び方も一緒に教えている。キーボードを押すと画面に文字が現れる過程や、ChatGPTが次の単語を予測する仕組みのあいだに謎が残らないよう、物事の核心を教えようとしている。今は3ニューロンの再帰型ニューラルネットワークのボードゲームを作っていて、数を数えるよう教えるゲームだ: https://punkx.org/move-37/rnn.pdf
結局、子どもに何を教えるかがそこまで重要なのかは、よく分からない。
授業で同僚たちは ファイル やフォルダーといった概念から説明しなければならなかった。
正直、それほど悪いことだとは思わない。コンピューターも自動車と似た道をたどる気がする。大半の人は物を操作するために必要なごく基本的なことだけを知り、より深い知識は愛好家や専門家に残ることになる。
だからコンピューターの内部はさらに複雑になっても、一般的な使い方はだんだん少なくなっていきそうだ。
ゲームをするには https://exaequos.com で パイプ処理 をぜひ直さないといけない。
awk、perlなどを使って育った人と最小パイプ数ゲームをすると、一気に難易度が上がるあるいはゲームの趣旨に合わせて、各ツールを本来の目的どおりに学びながらプレイすればよい
すばやい一回限りの処理には
awk/sedをよく使い、たいていは似た思考モデルで処理する。入力ストリームを作り、sedでデータをレコード形式にし、awkでレコードを処理してから、sort/uniqのような方法で出力を整える、という形多くの場合
sedとawkは互いに代替できるが、そうすると頭の中で組み立てるのに時間がかかり、再利用もしにくくなるルールでは課題を先に完了したプレイヤーがラウンドに勝つとあるが、最長のパイプチェーン形式はどう動くのか気になる
uuoc賞をくれる人たちがそろそろ来そう先頭に
catを置くと、パイプラインの前の部分に何かを追加するのが簡単になる自分で印刷できる点が本当にいい
今すぐオフィスのプリンターで印刷するか迷っている
このゲームの良いところは、UUoC を知っている人が勝てること
cat file.txt | tr a-z A-Z | sortは敗者で、tr < file.txt a-z A-Z | sortは勝者カナダへの送料が $19 なのは少し高すぎる気がする
グレーター・バンクーバーで共同注文する人がいるか気になる
それでも各デッキには PDF があるので、近所の印刷所で自分で印刷できる。箱を印刷しなければもっと安くなるはず
普通に A4 用紙に印刷してハサミで切っても大きな問題はない。むしろ誰かにペンと紙で説明するときに役立つこともある
この場合、箱は https://punkx.org/unix-pipe-game/unix-pipe-box.pdf、カードは https://punkx.org/unix-pipe-game/unix-pipe-cards.pdf
8,000₩ですね。お持ちの方がいれば感想をお願いします