2006年04月12日(水)
タイのコンピュータオリンピック [タイの電脳事情 電脳街情報]
いよいよコンピュータオリンピックの国内第3時審査が行われます。今年は東部地方がホストを勤めないといけません。ちょっと面倒な行事ですが、久々にプログラムをデバッグすることができて学生時代が懐かしいです。
実はテスト問題を出さなければならない立場になっていますが、いろいろなわけがあってほとんどノータッチでした。が、テスト問題を採点するプログラムを起動できるようにしてほしいという要望があって、この2-3日は去年他の大学で開発されたプログラムをいじることになりました。
しかし、システムを開発するとき、一番苦労するのは他人のプログラムのコードを読むことです。多くのプログラマはコード以外たいていコメントを書かないことが多いです。まして詳細な説明はいうまでもありません。今回の場合も例外ではなかったですが、唯一助かったのは開発者が学生時代、コンピュータオリンピックの世界チャンピオンとして金メダルをとったことがある人で、書いたコードが非常に読みやすかったことです。
どんなプログラムかというと、複数の参加者が書いたプログラムをブラウザーでサーバにアップロードして、サーバ側が瞬時にコンパイルし、あらかじめ用意してあったテストパターンと照合し、問題を採点をするクライアント・サーバ型プログラムです。もっと具体的にいうと、このプログラムはOS教科書に出ている生産者-消費者問題(producer-consumer problem)」 のような処理を行うものです。
参加者とのやりとりする部分はPHP,Mysqlが使われていますが、照合と採点する部分はVC++で書かれました。なぜ、VC++にしたのか最初は不思議に思ったのですが、複数の参加者の要求に同時に応えるために、スレッドによる並行処理が必要になったので、C言語系を選択したのではないかと思います。
実はVB以外のWindowsプログラミングをほとんどしたことがないので、VC++をいきなり触ってVC++のプロジェクトを設定する際かなり戸惑いました。けれども、プラットフォームが変わっても、所詮手続き型言語なので、少しインターネットで情報を探せば、たいていのことはわかります。
コードは千行程度のものでしたが、一番勉強になったのはmysqlのテーブルをロックする部分です。こういうタイプのプログラムはかなり競合処理が発生するので、共有している部分のロックをうまく処理しなければなりません。特にアトミックな動作が必要な場合、この辺りのコードをうまく処理しないと本番でほぼ間違いなくシステムが落ちます。
とりあえず、なんとか予定通りプログラムを動かすことができたので、残りの時間は本番に向けてコードの微調整を行わなければなりません。ソンクラーン明けまで少し忙しくなりますが、いろいろスリルがあり、さらにいい経験にもなるので、大変やりがいを感じています。
Posted by ぷーちゃん at 02時45分