Buho No.218 目次

時季外れの駒祭反省

-1ParaGRAPH


前部報の駒祭反省に間に合わなかったので今回送りになりました。 実は分科会反省も書いていなかったという説があるので, まとめて書くことにします。 別に前編集長による巨大部報を作ろうという陰謀に手を貸しているわけでは ありません :D 1

春休み

現二年生にプログラマが実は少ないことが今さらながら判明し, 駒祭出展企画が足りなくなるのではないかという危機が迫る。 そこで突然日吉部隊三人が集まり,作戦会議が開かれる。 そして決まった Project 826 の仕様はこんな感じ (当時のMLログより):

Date:Sat, 11 Apr 1998 16:16:37 +0900 (JST)
--------------

Project 826 の概要について:

  二次元+高さ概念のフィールドにおいて複数対複数のチーム戦闘を行うゲーム。
  基本的には AI 対 AI の戦闘であるが,人間が参加できるシステムを開発する
  ことで駒祭にも対応する。AI の作成は開発キットを提供し,プログラミング初
  心者でも参加できるものとする(1年生の参加を促す)。

  プログラムはサーバ・入力・モニタ・AI のモジュール別に分割し,当たり判定
  や移動などは全てサーバが管理する。サーバとの交信はテキストベースであり,
  例えば以下のようになる:

(00:00:00)[A1] 右 0.125 4.2
(00:00:00)[A2] 左 0.201 3.0
(00:00:00)[B1] 後 0.000 5.0
(00:00:01)[A1] ほげー
(00:00:01)[A2] ほげー
(00:00:01)[B1] ぷはー
(00:00:02)[B1] おわー
([B1] logged out @ 00:00:02)

  もちろん,このログを後でサーバに食わせると,戦闘再現モニターができる。

  ただし肝心の戦闘システムについては,これから決定する。

-------------

プログラミング系分科会とタイアップして 駒祭プロジェクトを一つ作ってしまおうという計画だったわけです。

夏学期

上の計画が発表されたわずか九日のち,

進振り点数確保の至上命題の下に

突如計画はお流れの道を歩みはじめることになります。 私とわいりー氏が突如忙しくなり, Direct3D に精進するどころではなくなってしまいました。 その後の経過はわいりー氏の記事を参照してください。

C++ 分科会反省 および 駒祭の総評的反省

一部にはその存在すら知られていなかった C++ 分科会ですが, 実は一応やっていました。 TACT 氏の情報棟活用分科会と並行して C++ 分科会を行いましたが, もっとも求めていた 「プログラミングを多少(BASIC etc.)経験したことのある人で C++ をやりたい人」という人がおらず破綻する結果になりました。 完全な初心者に文法から教えても無理であることを今さらながら思い知りました。 情報科学科の SPARC アセンブラの授業で言われた 「C はほっといてもみんないつのまにかできるようになるので授業では教えない」と いう言葉の裏返しが身にしみて分かります。

何事もそうでしょうが,特にプログラミングというのは 自分で興味をもって実践していかないと上達しないものでしょう。 自分で実践している人はわざわざ分科会なんて来ませんし, その気のない人は分科会に来たって プログラミングができるようにはならないでしょう(きつい言い方ですが)。 その中間の人がいないということは, プログラミング系分科会の存在意義そのものが 問題になっているのではないでしょうか。

中学・高校と「毎年学祭にプログラムを出展する」というクラブに所属し, いま TSG でも同じことをやっていますが, この「プログラムを出展する」というスタイルがそろそろ限界に 来ていることを感じます。

部報 214 号で前編集長の氏が書いていたような気がしますが, 今の二年生は「趣味でプログラミングをする」習慣があった時代を生きてきた, ほぼ最後の世代だと思います。 1995 頃からアプリケーションのみのユーザが急増したと記憶していますが, それ以後の「軟派な」世代と,それ以前の「硬派な」世代の, ちょうど境にあたるのではないでしょうか。

東京大学に本拠を置いているから TSG はなんとか 「趣味でプログラミングをする人」を確保できているのです。 現に全国の高校レベルの「パソコンクラブ」はみな 「軟派な」クラブに「成り下がって」しまいました 2 3。 趣味でプログラミングができる新入部員の率は, 今後確実に下がると思われます。

硬派なプログラム展示は正統だと思いますし, それが続いてほしいとも思いますが, しかし部員の技術力があと何年持ちこたえられるでしょうか 4。 今年はむらき君の大活躍がありましたが, 失礼ながら他に来年, プログラムの展示をしそうな人はどれだけいたでしょうか --- また,来年の新入部員にプログラマがいるでしょうか。

そういう意味で, 今年の「たま。」「もぐぴん」は駒祭企画の新しい姿の一つであるといえます。 5 プログラミングをしない人がデータ作成でデザイナとして 出展するという形を取れば, プログラマが一人でゲームを作るよりもはるかにデザインがよくなりますし 6, 何よりも「プログラマ以外の人も出展できる」ことになります。 企画数は減少しますが, 今年流行した「ネットワーク対戦型」にすれば なんとか台数を増やしてカバーできるでしょう。 この線が一つの生き残り策かなと思った今年の分科会/駒祭でした。

駒祭ログ

なんか偉そうなことを書いたくせに, 駒祭で出展が最終日になるわ「Visual わいたくん」まで手が及ばなかったわの ぱらぐらふです。 どうもすいません。来年にはもしかしたら

「帰ってきた Visual わいたくん」

を出展できるかもしれません。 7 覚悟しておきましょう>わいたくん

……それはさておき,今年の駒祭ログです。 Visual Scheme Editor 開発についてのみ書くことにします。 ほかはわいりー氏が 書いてくれましたので \texttt{:-)}

冬学期

冬学期になるともはや駒祭は目前に迫り, 3Dシューティングなんて作っている時間はないという状態になってきました。 それでもいろいろ人に意見を求めて仕様を練ってはいたのですが, 駒祭二週間前になってついに断念し, TACT 氏・わいりー氏と 共同戦線を張ることになりました。 そしてぶちあがったのが Visual Scheme だったというわけです。

表向きの企画
ネットワーク対戦型着せ替えゲーム「Visual わいたくん」
表向きの内容
わいた君をネットワーク上で対戦着せ替えし,Visual系にする
本当の企画
Windows 上で動作する Scheme 統合環境を開発し,それに GUI をサポートするライブラリ関数を追加して Windows アプリケーションを作れるようにする。
おまけ企画
サンプルプログラムとして,対戦型着せ替えゲーム「Visual わいたくん」を添付する。
セールスポイント
TSG 初? の Scheme による駒祭展示

駒祭前夜に Visual Scheme 統合環境を見せてみんなを驚かせ, 勢いで Visual わいたくんを作ろうという計画でした。

ちなみにみなさんお気づきのとおり,この企画の新機軸さは

企画が完成してもしなくても,
わいた君はコスプレすることになる

という点にあります。わいた君は必ず Visual 化されてしまうのです。

しかしわいた君はこの新機軸さを知り, 独自の企画を始めてしまいました。 みなさんご存じのとおり「スピ魅」です(嘘)。

前々日

Visual Scheme Editor の開発がやっと本格的に始まる。 順調に進み,インデント・キーワードの二種類の色分け&太字化・ コメント色分け・アンダーライン・行番号表示まで完成する。 その後使われることはなかったが,選択領域色分け・ ブレークポイント色分けも実装しておく。 WFC コントロールとして開発していたが, いつの間にかフォームデザイナで貼り付けられなくなっていることに気づき, 何度か書き直す。 Visual J++ のコントロールまわりは怪しい気がするが, しょうがないので開発を強行する。 作ったプログラムをインストーラ付きで 他のマシンに持っていったところ動作しなかったが, 見なかったことにする。

前日

徹夜開発あけでマシンを梱包し, TACT 氏運転のレンタカーに載せる。 風呂に入った後,駒場に出撃する。 昨年度と同じくかけもち先のサークルが目の前正面の教室なので肩身が狭い気がする。 8

駒祭のためにTSGで追加購入した電源ケーブルやLANケーブルが, 実は自分のマシンと同じくレンタカーに載せたことに気づく。 305 のケーブルを回収に行くが 106 の配線には全然足りない。 レンタカー到着を待つ。待つ。来ない。来ない。来ない。

夕方,ケーブルが到着し配線が完了する。 家庭用の 3m 延長コードを10本くらい数珠繋ぎしているので 末端の電圧は 90V を切っていることだろうが, 日本の電化製品は優秀だからきっと大丈夫にちがいない。 台湾も香港もきっと優秀にちがいない。だから大丈夫だろう。

前日夜

タイマコントロールの使い方をわいりー氏に教えてもらい, カーソルが点滅するようになる。 そのわいりー氏はどはまりしている様子。 TACT 氏は帰ってしまった。

106 の様子はというと,LAN に繋がるマシンが増え, 先日追加購入してきたLANケーブルの一部が, 実はリバースケーブルだったことが判明する。 結果,ケーブルが不足する。

一日目朝

明らかに一日目の出展には間に合わないので, とりあえず日吉に戻って出直してくることにする。

家庭用電気延長コードを数珠繋ぎしていた 106 の配線が破綻する。 分岐コネクタの内部ブレーカーが飛ぶのでガムテープで固定するが, やはり飛ぶ。 SCANDISKしている時間のほうが開発時間より長くなってきた上に 数珠繋ぎのおおもとが溶けそうな温度になってきたので, やむを得ず ItaO 君がリールを買ってきてくれた。 これで電気容量の問題はひとまず解決する。

一日目昼

駒場に帰ってきて開発を続行する。

一日目夜

大方の Exception を潰し終わる。 あとはキー入力に応じてカーソルを移動させるだけになるが, キーを拾うことができない。 keyPresskeyDown に カーソルキーやPageUp/Downキーが飛んでこない様子。 えらい時間をかけてキーを拾うことを試みるものの拾えず 9。 キー入力ができないまま,夜が更けていく。

しかし,Editor ではなく Viewer としてなら動くので, コスプレ回避の見通しが立つ。

二日目朝

カーソルキーを拾うのはあきらめ, 懐かしのダイアモンドカーソルをサポートすることにする。 カーソルの横移動とキー入力(インサート/オーバーライト)を実装する。

再描画系の不具合を調べているうち, たとえ等幅フォントでもNormalとBoldで 幅が変わるという事実に三時間かけて気づき,愕然とする。 これでは太字での表示分けができない。 氏の助言を聞いて, MS-DOS時代のように「二度打ち」で太字を表現するように仕様を変更する。 ここまでできたところで日吉に帰ることにする。

二日目昼

駒場に帰ってくることができなかった。

二日目夜

TACT 氏からの PHS 呼び出しでやっと目が覚める。 朝の5時ではなく夜の5時なのであわてる。 日吉の地下食堂で夕食をとって駒場に出撃する。

表示系が重いので修正することにしたが,苦戦する。 そもそもこのエディタの仕様が間違っているのである。 このエディタは,表示までに以下の三段階を経る:

行評価
String配列として格納されているエディットバッファを行評価し, インデント計算・色分けを行う。カーソル移動によっては更新されないが, 文字の入力/削除のたびに(面倒なので)全体が更新される。 更新時には数万単位のオブジェクトが破棄/生成される腐った仕様なので 死ぬほど重い。
画面イメージ変換
カーソルが居る括弧レベルの強調表示を行う。行番号 や行末記号はここで入る。(面倒なので)カーソルが移動する たびに全体が更新される。その時やっぱり数万のオブジェクト が破棄/生成されるので死ぬほど重い。
描画
実際に画面に描画する。色分けや太字表示が行われていて繁雑 なため,一文字ずつ \texttt{drawString} で描画するので死ぬほど重い。 アンダーラインもここで処理する。カーソルはタイマ割込で描 画する。

「描画」部分を色の続くかぎりまとめて drawString するように修正し,まともな速度になる。 それでも行評価・画面イメージ変換のオーバーヘッドはすさまじく, 時間計測の結果はこのエディタが100行以上を処理しえないことを物語っていた。 (1行のうちは毎秒30フレームでWindowsのキーリピートに追従するが, 100行になると毎秒15フレームに落ちる。)

しかし, 括弧を入力した瞬間に 画面全体のインデントがざくざく変わるのが妙に受けたので, このままの仕様にしておく :-)

三日目朝

TACT 氏の Visual Scheme Debugger との統合作業を始める。 エディタとして作ったのに Viewer として使うところが規模の縮小を示している。

WFCコントロールとして開発していたので, 簡単にフォームデザイナで貼り付けられるはずであった。しかし,

VJが認識しない

という,駒祭前日から予測していた非常事態が発生する。 WFCコントロールとしては認識してくれないらしいので, コメントを一行外して 10 むりやりActiveXコントロールにし, ついに貼り付けることに成功。

しかし変数の受け渡し絡みで ComFailException が発生している模様。 調べてみると String[]Variant として引き渡されて いることが判明。String なら無事に渡せるらしいので, String[] を一つの String に繋げて引き渡し, 再び String[] に戻すためのラッパーを作る羽目になる。 せつなさ炸裂。

駒祭三日目オープン

とりあえず出展して日吉へ逃げ帰る。

三日目昼

駒場に戻る。

と,ゆーわけで

バカばっかTM
1) 【前編註】さらに私の連載を入れれば一気に莫大になるんですけど,それをやると壱率上がりすぎだし,製本作業きつすぎるし。
2) 現三年・二年の「灘校閥」プログラマ部隊の祖である灘校パソコンクラブ(NPCA/TRLOCON)も滅びの運命にあります
3) 【壱註】プログラマが減っても,最近はやることがいろいろあるから大丈夫じゃないかなぁ。(とフォローしておく)
4) 技術力がなくなってもプログラム展示にこだわった場合の惨状を見たいかたは,灘校の文化祭を見に行きましょう :-)
5) 筋肉画像が新しい姿なのではなく :D 数人で企画を出すという点が新機軸です。
6) むらき君の R-Xs は別格
7) 【TACT註】駒場に帰ってきますか。(ひど
8) 本誌??ページ参照。
9)駒祭後,keyUpなら拾えることが判明した(x_x)
10) WFCコントロールをフォームデザイナで生成すると,ActiveXコントロールにするための行がコメントアウトされた状態で記述されています

今野 俊一 (こんの, knn) <toknn@ijk.com>, <knn@ebony.plala.or.jp>
東京大学 工学部 計数工学科(内定), TSG(理論科学グループ)