2007-01-27

近況

このごろ Standard ML の入門を読んでいる. 新しいプログラミング環境, 言語やライブラリを試すと, 少し調べたあとは何か作りたくなる. さて, 何をつくろう. 悩ましい.

あまり難しくないものがいい. なにしろ覚えたてのよちよち歩きだから. かといってあまり味気ないのも寂しい. fib, hanoi や tarai はもってのほか. データ構造も動きがなくつまらない. もっとアプリケーションぽいのがいい. オリジナリティはいらないけれど, 完成したものが動くヨロコビは捨て難い. 端的にいえば入門書の最終章に作るプログラム. 新人研修の締め括りにつくるプログラム. きみはもう一人で歩けると言ってほしい. わたしは一人で歩けると言いたい. イニシエーションとコングラチュレーション.

そんな欲求を見たす "トイ・プログラム" のコレクションがないものか. Toy Program Wiki みたいな都合のいいサイトを探すも見当たらず. プログラミングの例題なら topcoder.com のような サイトにまとまっている. コンテストは悪くないけれど, 問題がちょっと難しい. もっとずっとベタでいい. 出版されているドリルの類もパス. 味気なさそう.

トイ・プログラムいろいろ

かつて読んだ入門書の例題を思いかえす. 今もトラウマになっている MFC の入門書(VC++4.0 付属)は, おえかきアプリの Scribble を作った気がする. Java はよく覚えていない. Applet でオセロあたりかな. Applet を含めて GUI が強力な Java は例題に事欠かない. Ruby の教科書 も例題が豊富だ. マインスイーバ, ライフゲーム, rtags, mtalkd. Rails はショッピングサイトだっけ. はじめての Perl は CGI のゲストブック. GNU Emacs 拡張ガイド はクロスワードパズルを編集する crossword-words-mode. (知らなかった...) 手元にあるのはこんなものだった. 環境の得手不得手がわかる.

周りの人にもインタビューしてみた. まず UNIX のコマンド群からめぼしいものをピックアップする路線. grep, find, wc あたりがおすすめらしい. 基本的なシステムコールを使い, IO を使い, 文字列処理を使い, データはそこにある. たしかによさそう.

変わり種として ImageMagick の路線も悪くない. 画像の拡大, 縮小, 回転, 反転. ピクセル操作は適度に手を動かせるし, 結果が目に見えてわかりやすい. ネットワークを叩くなら wget はどうだろう. ソケットを使えるし, ヘッダのパースは手頃な文字列処理. サーバは山ほどある. テキストベースでデバッグも簡単. 対になる HTTP サーバを書くのもいい. ただサーバの書き易さは環境によって差がある. スレッドまわりが弱いと辛い.

標準入出力を使った対話的なプログラムが次のステップ. たとえば家計簿シェル. 家計簿は単純な入出力だけでなくデータを保存する必要がある. 永続的なデータを扱えるトイ・プログラムは案外すくない. 貴重だ. 実用は厳しそうだけれど, 愛があればなんとか. 三日くらいは使うかな... 他に対話的な電卓なんてどうだろうと提案したら, Forth インタプリタの方が簡単だと教わった. そんなものなのね.

GUI を使えるとバリエーションはぐっと増える. 先の Scribble は典型. あとはゲームを作れるのが大きい. 実用性がなくても楽しめるのがいい. オセロ, 神経衰弱のような古典からテトリスまで. (テトリスも古典か...) ゲームばかりに偏りすぎても面白くないけれど, 題材が多いのは有り難い. なお GUI といっても描画プリミティブやウィジェットの豊富さで作れるものには差がある. タートルグラフィクスでテトリスはちょっとしんどい気がする.

GUI とは違うけれど, グラフィクスの路線はそれなりに楽しい. PostScript 風オレオレ言語を使った画像レンダラや, 球体専用レイトレーサなんかは手頃だ. 単純なアルゴリズムの実装なのに, 絵がでるだけでだいぶ嬉しい.

CGI に使える言語や Web フレームワークが相手だと, GUI 以上に色々できる. 掲示板, TODO リスト, そのほか. そういえば ふつうの Haskell プログラミング では最後の Wiki を作ると伝えきく. Web のもつ素晴らしさの一つは, 簡単なプログラムを動かした時の嬉しさが大きいところだな. 標準入出力を使うだけで GUI つきのネットワークプログラムが動いてしまうんだから.

NoviceCoder

並べてみるとぼちぼちあるね. やっぱりこういうトイ・プログラムの例題をまとめたページがあると楽しそう. TopCoder ならぬ NoviceCoder (ドメインとられてた...). ジャンル毎にプログラムが分類されていて, プログラム毎にページがある. ページには, まずアプリケーションの概要(仕様)が書かれている. そのほかに必要なライブラリ (GUI, Web, 正規表現, XML, etc.) や 想定される規模の見積りが書かれている. 既存のアプリケーションへ参照があったり, 読者による投稿ができてもいい. 正解のない方がいい気もするし, いっそ Commentary や Tutorial が欲しい気もする.

いずれにせよ楽しいサイトになりそうな気はする. そもそも似たようなのは本当にないんだろうか. どこかにないかしら. なにか知っている人がいたらおしえてください.

それにしても SML/NJ のライブラリは貧相だなあ. 家計簿にしとくか...