[検索方法]
10:00 起床
先日注文しておいた エレコム dimp gel ダブルパッド 2 個が到着。1 つは自宅で、もう 1 つは会社に持って行って使う予定。
以前に Happy Hacking Keyboard 用 ハンドメイドパームレスト を買ったのだけど、これは硬めの作りで私には合わなかった。今回の dimp gel はふにゅふにゅ系。
09:30 起床。
描画管理クラスを本格的に作り直し。本来は
で済ませようと思っていた。しかし描画ライブラリを本格的に使い込むと様々な問題が出てきて、素の状態で使うのは厳しいことが判明したため、もう少し高レベルの API を提供するよう方針転換。ゲームオブジェクトの方にも手をつけたいんだが、これは少し後に回さざるを得ないか。
企画側からプレゼンの結果報告。
システムブートプロセスの見直し。現在は描画ライブラリを終了する方法がないのだけど、今回はそれだと致命的にマズいことが判明。これはライブラリチームに対応してもらうしかない。
使い込むたびに新たな問題に出くわしてる気がする。今にして思うと、描画系は基本的なシェーダーやモーション展開のコードだけもらってきて、システムの初期化やリソース管理部分は全て自前で書いた方が良かったかも。
Linux の rsh って、リモートホストで実行したプロセスの終了ステータスをとれないのか。make から rsh を呼ぶのではなく、rsh から make を呼ぶ形にするか。やや一台のマシンに負荷が偏るけど、許容範囲だろう。
20:30 帰宅。
07:30 起床。
実行管理クラスの整理。現状だとポリシークラスを書くのがわりと面倒なので、
とする。プロジェクトのプログラマ向けに、実行管理クラスを使用するサンプル作成。
メモリ管理関係の打ち合わせ。使用しているライブラリ期待した振る舞いをしないことが明らかになったため、対応を考える。多少煩雑になるが、ムダな DVD からの読み込みを避けつつメモリを有効活用するには仕方ないか。メモリ管理関連は現状のプログラマだけで完結し、中盤からプロジェクトに参加していただくプログラマは触らないようにしてもらう。
他のプログラマに、実機上での負荷計測のためメーターを実装してもらう。ソフトリセット時に死ぬ問題が出る。そういえばソフトリセットのシーケンスを説明していなかった、ということで一緒にソースを眺めつつ解説。
スクリプトのインタプリタの実装、データ構造で気になった部分があったので指摘。侵入型の連結リスト (前後ノードを示すポインタをリストにつなぐオブジェクトがメンバ変数として保持) を使っているのだけど、それは std::list<> を使ってイテレータを保持する形にすれば良いのでは、という話に。
プログラマミーティング。今週はライブラリ対応や何やらに追われていたため進捗状況が思わしくなく。少し急ぐ必要がありそう。
描画管理クラスの再設計。不足している機能を洗い出して、関数プロトタイプを書いたところで力尽きる。
20:30 帰宅。
こういう考え方が出てきたのは、実はここ 5, 60 年ぐらいですよね。それ以前は文明国と未開国の間では不平等条約当たり前でしたし、外国人に対する安全を保証できない国には兵を送りこみ、内政に干渉することも特に問題視されずに行われていました。それに比べればだいぶ変わったなと感じてます。
なお上述のような国家観の基礎にあるのは「国民国家」「国が最高の主権主体であり、国同士は対等」という理念ですが、これは現実と乖離した絵空事に過ぎないことも確かです。さりとて、広範な同意を得られる代替案も存在しないのが現状ですけど。
(蹇蹇録の読書中につき……)
09:30 起床。
ライブラリ更新に伴って出た問題の調査。まずいな。これだと、根本的にリソースの寿命管理方針を変更する必要がある。
しばらく懸案事項になっていた「シーン中の特定箇所にのみ影を落とす」処理、デスティネーションアルファ演算を使って解決。うまくいかなかったのは、デザイナさんに作ってもらったテクスチャデータが腐ってたからだ。
ミーティングの日程調整。
実行管理クラスの整理と、他の人に提供するサンプルコード作成。途中で出くわした問題。
1 #include <stdio.h>
2
3 struct CFoo
4 {
5 static int const ZERO = 0;
6 };
7
8
9 int
10 main()
11 {
12 printf("&ZERO = %p\n", &CFoo::ZERO);
13 }
CFoo::ZERO が undefined reference になる。構造体の外に int const CFoo::ZERO = 0; と書くと duplicate initialization になる。明示的にアドレスを取得しない場合でも同じ問題が出ることあり (再現条件は絞りきれず)。もちろん構造体中に static int ZERO; だけ書いておいて定義を別に与えれば問題ないけど、それだと最適化が効かなくなるのと書くのが面倒なので嫌だな。
デバステでプログラムが実行できなくなってるとのことで調査。リモートログインの設定ミス。
ビルドクラスタのベンチマーク。手元にあるプログラムのフルビルド & リンクに要する時間。使っている PC は Dual Athlon MP 2000+ (ぐらい), RAM 1GB というスペック。
| ビルドマシン | リンクマシン | ビルド方法 | 所要時間 (内リンク時間) |
|---|---|---|---|
| PC 1 台 | ファイルサーバと別 | gmake | 14分35秒 (35秒) |
| PC 1 台 | ファイルサーバと別 | gmake -j4 | 7分20秒 (35秒) |
| PC 4 台 | ファイルサーバと同一 | 自作ビルドシステム | 1分57秒 (25秒) |
自作ビルドシステムといっても、面倒な部分は GNU make, PVM, rsh 等にすべてお任せ。私は makefile, bash スクリプト, expect スクリプトを使って制御しているだけ。コード規模増大に伴ってビルドクラスタを構成する PC を増やしていけば、最終的にコード 50 万行ぐらいになっても 5 分以内でフルビルドできる状態を維持できそう。
21:30 帰宅。
_ cheap cialis [Cheapest ED Meds on Net: <a href= http://atheist01.sblog.cz/ >buy generic cialis</a> <a href= http://bout01.sblog.cz/ >cheap...]
_ affordable life insurance [Health <a href="http://easyfreeforum.com/afflifein">affordable life insurance</a> and <a href="http://easyfreeforum.com/...]
_ cheap cialis [Cheapest ED Meds on Net: <a href= http://atheist01.sblog.cz/ >buy generic cialis</a> <a href= http://bout01.sblog.cz/ >cheap...]
09:30 起床。
ビルドクラスタのバグ潰し。bash スクリプト, GNU make, PVM, PVM Gmake, rsh/ssh が入り組んでる上、各ビルドクラスタへのジョブ割り振りは再現性がないため、バグ再現と原因究明にやや手間取る。これまでは全ビルドクラスタで同じようにファイルを参照できるように NFS の設定をしてあったのだけど、今回はリンク作業を行うホストだけファイルの見え方が微妙に異なる。問題がそこにあることを突き止めるのに手間取り、さらに対処するのにもう少し手間取る。これで安定したかな。
描画系のライブラリ更新。毎度の事ながら、CVS ベンダーブランチ便利だ。
プロジェクト内のプログラマに、私が用意している描画・タスク実行系のシステム解説 (簡略化した クラス図, シーケンス図)。
実際には管理クラスはクラステンプレートで記述され、優先順位などはポリシークラスに分離、インスタンスの寿命管理にはスマートポインタを利用するなど、もう少し汎用性と安全性に配慮したコードになっている。
それが終わった段階で、描画系の未定事項のツメと、カメラ・ライトなどの制御をシステム全体としての扱いを話し合う。既存の描画管理クラスに加えるのではなく、個々の描画オブジェクト・実行オブジェクト等に引き渡す変数 (コンテクストと呼んでる) 経由で変更できるようにするのが良さそう。
設計の話をスムーズにできるよう、プロジェクト内のプログラマには全員 UML の基礎を押さえてもらった方が良いかな。クラス図・シーケンス図のみ早急に、余裕があればコラボレーション図・ステートチャート図の概要まで知ってもらう方向で。とりあえず他は良いや。
企画側から読み込みタイミングの件で質問。現状とりうる選択肢と得失のみ提示、詳細は後で詰める。
ビルドクラスタのリンク用マシン。Pentium 4 Xeon なら評価用に貸し出せるけど、という打診。スペックが微妙だったのと、ビルドクラスタの件に割ける時間が残っていないので、今回は保留。
ライブラリチームに問い合わせていた件の回答。あ、それは私のミスかも。
21:10 帰宅。
_ さるまる [rshってLinuxに限らずコマンドの戻り値はrshコマンドに返りませんよね。戻り値がほしければsshを使え、だっだと思います。 ]