あるいは雪掻き。
庭に雪が積もり、このまま凍結してしまうと庭においてあるバイクを外に出せなくなる惧れがでてきたため、通り道の雪を竹箒で掃き出す。適当な防寒具がなかったため、帰省するときに着てきたバイク用のジャケット・オーバーパンツ・グローブを着用。本来の用途と違うが、さすがに防水・防寒性能は十分だね。
作業中に、近所の女性と目が合って挨拶。もう生活の本拠地を東京近郊に移して長いので、実家近辺は知らない人の方が多くなってしまった。
汗をしたたか掻いたので、即入浴。
先日の会社の納会では、他人に今年のニュースを聞いて酒の肴にしていた。社内恋愛の話とか聞いて「若いっていいね」と茶々を入れたり。
私個人については、会社でも伏せてたけど、親しい人間が入院し、その後回復して退院できたことが最も大きな出来事。時期は夏休みは一切出社しないと宣言してハイペースでコードの実装を進めていた頃から、夏休み明けぐらいまで。
そんな状況で進めた仕事だけど、事前の想定を上回るクオリティのものは提供できたので一安心。それで金をもらってる以上、プロセスや環境がどうあれ、アウトプットを出せないことには何を言っても虚しい。ただ、その後の展開で実装したコードが活かせない状況になりつつあるのがアレだが(戦略を誤っていたら、どう戦術を駆使してもロクな結果にならないのは、古代ギリシア・ローマの時代から変わらぬ真理だなと、トュキディデスと塩野七生を読みながら改めて思い知らされた次第)。
あとは大型自動二輪の免許を取得して CB750 買ったこと、久しぶりに学生時代にお世話になったコンサル屋さんと会って今後の話をしてきたこと、プロジェクトに BTS を本格的に導入したこと、サブプログラマの人が思惑通りに順調に成長したこと、あたりを順不同でって感じかな。
十個ないけど、それだけ平穏な一年だったということで。
HELLSING は作者絶好調で、娯楽作品として純粋に面白い。続きが楽しみ。
菊と葵のものがたりは、先日亡くなられた高松宮妃喜久子さんの書ということで。皇室には特に興味がないので、名前ぐらいしか知らないのだけど。
部屋を片づけ、洗濯物をクリーニングに出した後にバイクで帰省。首都高はやや混雑していたが、渋滞と言うほどではなく。
冬休みは、有休も使って 12/30 ~ 1/5 までの 7 日間。先日購入した書籍「ハッカーのたのしみ」「国際紛争」「Writing Secure Code」を持ち帰ってきたので、順不同で消化する予定。まだ風邪が完治していないので、遠出の予定はなし。
ソフトウェア
音楽
年明けにプロジェクトのスケジュールを切り直そうかと思っているので、現状でプロジェクトが抱えているリスクを洗い出す。かなりクリティカルで、しかも近日中に解決の目処が立たないリスクもちらほら。
これまでは曖昧にしてきたが、人が途中で抜けるリスクも過去実績を元に見積もる。実現したらプロジェクトが立ちゆかなくなる人から、数ヶ月の遅れが出る人まで。これまでの実績を見ていると、現実的なスケジュールにするには、このリスクが実現した場合に備えて相応の準備をしておく必要がある。責任の分担だったり、余裕ある日程だったり。
参考資料として、これまでのプロジェクトの経緯を年表にまとめて人員変遷を追ってみたが、予想以上に波乱に満ちた経緯をたどってた。未解決のリスクの件もあり、近日中にはまともな線表は引けない、と結論を出さざるを得ないかも知れず。努力はするけど。
これは実家の方の話。
テレビ地上波の放送局が変更になり、今まで使用してきたチャンネル設定・アンテナ向きでは近い将来にテレビが映らなくなる。なお、現在は移行期につき、旧放送局と新放送局で使用する周波数帯をずらして同内容を放送中。
アンテナの向き替え工事は無料だが、担当窓口に相談したところ「アンテナの向きを変えなくても新放送局の電波を受信できる可能性があるので、テレビのチャンネル設定を変更して試してみて欲しい」旨の回答があったそうで、実家ではチャンネル設定の方法が良く分からないので帰省した際に見て欲しいと頼まれていた。
送られてきた書類を見ながらテレビのチャンネル設定を変更すると、新放送局からの電波でも遜色ない映り。複数あるテレビを順に設定して回る。あとビデオも設定必要だっけ?
この一ヶ月テレビを見てないので、廃棄して NHK との受信契約を解除する。
コールセンターに電話して、テレビを廃棄したので受信契約を解約したい旨を伝えると、契約者番号と住所・連絡先、ならびに廃棄した期日を質問されて、ひとまずおしまい。これで後日、解約申込書が送られてくるのかな。
電話回線が非常に混み合っていて、なかなか繋がらなかったのが難ですが、対応は手慣れた感じでビジネスライクに丁寧でした。
帰省しました。
いつもは公共交通機関(主に電車)を使うけど、今回はバイクで高速道路を経由して帰る。door-to-door で約 2 時間。電車使うよりも早いが、バイク一人乗りだと高速道路通行料が高くつくね。
いくつか心配していた点と、結果。
バイクにサイドバックを括り付け、ノート PC と書籍数冊を持参。実家の用事を片づけた後は、常と変わらぬ休日の過ごし方になる予定。
GPS ナビがやってきたので、テストをかねて適当に行き先を決めてお出かけ。土曜は鎌倉、日曜は宮ヶ瀬ダム。
最初、ナビに往路・復路をまとめたルートを登録したら、自分がいるのが往路・復路いずれかをナビが判別できずに困った。分けないとダメだね。
GPS は上空が開けていないと位置決めができないため、ビル街だと誤差が出る。開けた道路を走っている分には誤差数 m で位置を特定できるが、上空の見通しが悪い場合は隣の道を走ってると勘違いされることもある。完全にナビにお任せではなく、道路名や標識を自分でチェックする必要あり。
一度 GPS の精度が落ちたときに GPS ナビのいうままに進んだら、商店街に入ってしまい難儀しました。人は縦横無尽に道を行き交うわ、障害物は大量にあるわで、とてもバイクで乗り入れるような場所では……。
ナビゲーション機能はなかなか良くできている。ポイントとなる分岐点・曲がり角に到達する一分ほど前にブザーと画面で告知があり、ポイントに近づくと分岐点・曲がり角周辺の拡大地図と自分の位置が表示される。
フルフェイスのヘルメットを被りある程度の速度で走っていても、注意を払っていればブザーは聞こえる。高速道路だときついかも知れない。
画面はカラーのバックライトつき液晶。昼間の視認性は問題なし。夜はバックライトを点灯させればよく見えるが、点灯させないと全く見えない。
デフォルトでは通常バックライト液晶オフで、ボタン操作時、ならびにポイント近辺に来るとバックライトが点灯する。バックライト点灯常時オンにすることもできるが、電力を消費する。外部電源を用意しないと実用的ではない。あとでバイクのバッテリーから線を引き出してつないでみよう。
指示されたルートを外れてしまった場合、ある程度進んだところで自動的にルートが再計算される(設定で無効にもできる)。ルート計算は数秒~十数秒程度なので、十分に実用的。
ルート計算関係はいろいろ細かい設定ができる。たとえばルート再計算の有効・無効、ルート再計算時のパラメタ(計算速度とルートの精度のトレードオフ)、ルート計算に当たって道毎に設定された時間の総計と距離のいずれを最小化するか、などなど。
最後の時間と距離に関しては、デフォルトが時間なのだけど、これだと妙に遠回りのルートを提示されることがある。道路毎の重み付けが変な気がする。
ボタンが小さめなので、冬用のグローブをつけたままの操作はミスが発生しやすい。薄手のグローブなら問題ないと思う。
書籍
GPS ナビ関連
キャスト結果は右辺値
コンパイラのバージョンを上げたところ、ライブラリチームが書いたコード中にあった、キャストした結果に対してアドレスをとるコードがコンパイルエラーになった。具体的には、こんなコード。
foo** pp = &const_cast<foo*>(p);
foo** pp = const_cast<foo**>(&p);
foo** pp = &const_cast<foo*&>(p);
コンパイラのバグ
チーム内のプログラマが、特定の条件で変数の値がおかしくなるという問題に出くわし、原因を究明できずに悩んでいたので、私の方で引き受ける。検証の結果、コンパイラのバグと判明。遅延分岐スロットに積算命令を 2 つ詰め込もうとしてる。これは、分からなくても仕方ないな……。
再現条件を詰めて、コンパイラベンダに報告。これで今年二件目。まだまだ、このバージョンのコンパイラは信用ならんね。ベータ版だから良いけど。
定数値による除算最適化
その問題追及中にアセンブリコードを読んでいて、定数値による整数除算が変わったコードに展開されていることに気づく。3 を除数とする演算、素直に考えれば 3 という値をレジスタに読み込んだ上で CPU 内蔵の除算命令を呼び出すところだが、0x55555556 というマジックナンバーとビット演算を使って結果を出している。
gcc のソースを読んでコメント発見。google で検索したら整数演算に関しては様々なテクニックがあるようで、Hacker's Delight で定数値による除算に関する記述を見つける。
邦訳された書籍 があるみたいなので、注文しておこう。
スタンディングミーティング
復活。毎朝やるよ。
モーション打ち合わせ
モーションデザイナさんからの提案について、どういう形で取り扱うかという話を。かなり詳細な提案を頂いたのだけど、現状だとまだ検討できる状況にはないと判断して、そのあたりの話をしに行く。
提案を棚上げ、あるいは握りつぶすような形になってしまい申し訳ないが、今の段階であまり詳細に立ち入ると、最も優先すべき作業が立ち往生しかねないので。
移動シーケンスについては早めに見られた方が良いだろうということで、可及的速やかに暫定の(私が適当に決めた)仕様のものを実装して、実際に見てもらう方向で。何も土台がないところで話してると、地に足がつかない展開になりがち。
作業の大まかな流れについて、合意取り付け。何を作るか良く分からないが、ともかくタスクリストを洗い出してガントチャート作ろう、という流れにはスッパリ消えてもらう。そんな状態で作ったガントチャートは、見栄えはともかく信憑性ゼロなので。
ある程度の時間をとって概要を固め、その後に概要を仕様に落とし込みつつ、それを盛り込んだコア部分のプログラム実装を進める試行錯誤期間を用意する。可及的速やかに仕様をとりまとめるため、ディレクターの作業内容についてもこちらでレールを敷き、その上を全力で走ってもらう方向で。
概要から仕様を起こす部分は、人員の都合・システムの複雑さを考慮すると、私が手がけざるを得ないという結論に。これまで以上にコード書いてられる時間が減りそうだ……。
作業フロー作り。徐々に人を巻き込み始める。
今回は、これまでのフローに問題があることを再確認するのが議論の開始地点で、かつ動き始めつつある現状の流れを止めるコトになるので、どうやっても角が立つ話になる。損な役回りなんだが、そこを引き受けるのも初期メンバーの仕事ってコトで。
合間にモーションデザイナさんの作業環境を整えつつ、いろいろと話をして回って一日終わり。
技能教習後半、卒業検定、免許交付関連と、免許取得までに要した費用を追記。計算してみたところ、費用は教習料金・ヘルメットなどの用品代・免許交付費用を合わせて約 44 万円でした。
教習料金は高め。会社員をやっていると、値段より立地・教習時間を優先せざるを得ないので仕方ないけど。
これにバイク本体の代金、各種手数料(登録代行手数料・納車整備費用など)、保険 (自賠責、任意保険)、税金、ジャケット・オーバーパンツ・サイドバック等の用品、盗難防止のためのロック、カバー、地図などなど含めて、総額で約 110 万円。
用品とロックはやや高価なモノを揃えたので、そこで妥協すればもう 10 万円程度は安くなると思います。
以上、参考までに。
横浜のラーメン屋さん。
前に一度プロジェクトのメンバーと食べに出かけたことがあるのだけど、その後はご無沙汰。混み合う時間帯を避けて遅めの昼食を摂りに出かける。相変わらず、他にはない独特の味。おいしかったです。
国道 15 号を南下、みなとみらい地区を経由して鎌倉街道に抜けるルートを使ったのだけど、かなり渋滞してた。左手疲れたよ。
卒業検定合格、おめでとうございます。引き続き大型自動二輪、頑張って下さい。
ついでに大型自動二輪の体験乗車をしました。……
曲がらない。ホイールベースの長さゆえか。安全第一だったためあまりハンドルも切れず。
低速バランス走行は、住宅地を走ったり狭めの道でターンする際に必須の技能です(身長がある人なら、バイクに跨ったまま両足ついて移動するのもアリですが)。教習所のバイクなら倒しても修理費不要なので、遠慮無く倒して勉強させてもらって下さい。
Havoc 3
デモを見に行く。コアテクノロジーは衝突判定と、束縛条件を指定した上での衝突解消処理。
破壊可能な障害物、転がっていく人間の死体などを表現するには向いてるが、逆にそれ以外は運用が難しそう。デザイナさんが作ったモーション駆動型のアニメーション表現と物理演算の融合は今後の課題だそうで。
プロジェクト運営
企画側でプロジェクトフロー・作業フローを作成することになっていたが、事前に設定した期日が過ぎたのと、フローや仕様概要がまとまらないまま細かい作業を発注する方向で動き出したので、申し訳ないがやや強引に作業を止めさせてもらう。最終的な目標地点とプロジェクト全体像が見えないままで個々の作業を発注し出すと、あとで次々と問題が湧いて出て手に負えなくなるのが火を見るよりも明らかなので。
作業フロー作成は私の方で引き取り、こちらでプログラム・デザインの各パート実作業担当経験者を若干名集めて叩き台を作り提出することに。今は職種毎の専門化が著しいため、進行管理を担当している人間がフローを整理しようとして叶わなかったのは仕方ない。私もプログラミング周辺のことしか把握できていないので、分からない部分は人に聞くしかない。
企画側には、その間にゲームの企画自体を概要レベルからテストプログラムを作れる程度まで精度を高めてもらう。企画・プログラマだけで作業が完結する形で試行錯誤を済ませてしまい(その間も随時情報は公開して他職種の人にも積極的に口を出してもらう)、しかる後にタスクリストの洗い出しとデザイン系の素材発注という流れに持って行く。
来週中に作業フロー決めのミーティングを招集して、第1版を作って出す。毎朝の企画・プログラマのスタンディングミーティングも、そろそろ復活させよう。
大型自動二輪取得 おめでとうございます。くれぐれも事故などなきよう。ありがとうございます。二輪の事故は致命傷になりかねないので、くれぐれも安全運転を心掛けたいと思います。
万一に備えて、とりあえず交通傷害保険は掛けておきましたけど。
デザイナさん向けに TortoiseSVN 本格的に導入する方向で。ドキュメントを書いたり、モーションデザイナさんの作業フロー決めのミーティングやったり。
モーションデザイナチーム内部での進捗管理には AlienBrain 使い、そこに提出されたデータをモーションチーフがチェックした上でコンバート & subversion のリポジトリに提出してもらう形になりそう。バージョン管理だけなら AlienBrain にメリットはないが、進捗管理などに使うとなると subversion では辛い。
同僚のプログラマの方から Level5 製作のゲームソフト「ダーククロニクル」を貸して頂いて、自動生成ダンジョンの検証。良くできてる。これはプログラマの負担より、ダンジョンをパーツ単位で組んでいくという枠組みをデザイナさんが実感して、その上でパーツを作り込んでいくという作業フローが大変そうだ。
小手先で対処できるレベルじゃない。
boost serialize 検証作業をお願いしておくが、ライブラリのコンパイルの段階でハマり。まだ、先は長そう。
ゲーム中のデータ処理には使うつもりはないが、実機で動くアーサリングツール類のデータ管理に使えるかなと目論んでる。使えそうだとメドが立ったら STLport の fstream 移植作業も手をつけよう。
スクリプトコンパイラのコードを引き継いで、ガシガシと整理中。ついでに lex 使ってた部分は flex++ でコンパイル通るようにして、yacc から呼び出す部分を除いては全面的に C++ に移行。
時間があればやっておきたいことは多いが、どこまでできるか。コード整理してコメントつけるところまでで終わりかも。
サブプログラマの人に差し迫った仕事がない状況なので、コンパイラ理論を勉強しておいてもらう。「UNIX プログラミング環境」と「コンパイラ」 (通称ドラゴンブック) を渡す。さて hoc のバグをいくつ見つけられるかな?
ミーティングいくつか。後からプロジェクトに参加してきた人にとっては、情報が遮断されていてブラックボックスの中で物事が決まってるように感じることがあるという話。秘密が詰まったブラックボックスのように見えるものが、実は空箱というのが事実のような気がするが……。
議事録の公開やら ML の過去ログを見られるようにするやらの表面的な対策はすぐにできるけど、問題の根っこは多分そこじゃない。
ポーク (虚空100, スープ大盛り) にトッピングとしてマイタケ。食後にラッシー。
いつもは電車で行っていたのだけど、今日はバイクで。環七経由、東急世田谷線と小田急小田原線の間にある若林陸橋で環七から降りて淡島通りに出て、代沢を突っ切っていくコース。
マジスパは住宅街まっただ中にあり、歩行者・自転車も多い上、周囲は一方通行の道が入り組んでいる。店が坂のすぐ上にあることもあり、バイクで行くと意外と運転に気を遣う。マジスパ周辺に限らず、歩いてると全く気にならないがバイクに乗ると感じる不便も結構あるね。
金曜夕方に、ホンダ製のバイク CB750 (RC42) (中古) が納車されたので、暴風雨の時間帯を避けて都心・郊外・住宅地・高速道路と織り交ぜて適当に 200km ほど走ってみました。
運転については一度信号を見誤って 60km/h から急制動を行うハメになった以外は、特にトラブルなく。バイクも問題ないみたい。
道は、国道・都道府県道であってもけっこう曲がりくねっているので、事前に頭に叩き込んでおかないとルーティングに苦労する。Garmin 社製の GPS ナビが欲しいところだ。
後日、給油してみたら走行距離 206km で消費ガソリン量が 14.95l。燃費が 14km/l 下回ってる。
ネット上の情報を見る限り、もう少し燃費良さそうだけど。しばらく走行距離と給油量を記録に残してみるか。
順調とは言い難い状況。決めるべきコトが決まらず、ずるずると延びてる。
プロジェクト内の問題ならこちらで立ち回って筋道をつけちゃうのだけど、お偉いさん方のスケジュール調整がつかないって話なので、打つ手なし。ま、良いけど。
今週の月曜・火曜とドラクエ休暇を取っていた人が出社。すでにクリアしたとのこと。
プログラマ数人で、ドラクエのシステム的な事柄を検証。ライティングの方法、影の掛かり方、イベント処理の方法(扉を引いて開ける際にプレイヤーとの衝突をどうしているか、とか)、ファイルの読み込みタイミングとか。BGM にストリームを使わないと読み込み速いな、やっぱり。
企画固めのブレスト。
モーションデザイナの方の作業環境を用意。
今は暫定の環境なので、モーション圧縮率などはコンバート時に個別に設定する形になっているが、最終的にはデータベース管理にしないとマズい。手作業でやると人為的なミスが発生する。
TortoiseSVN の導入に関しては、モーションチーフに任せる方向で。
その際に仕事への関わり方で要望を伺うが、仕事の性質上、どうしてもワークフローの最下流に位置することになる点が不満の元に思える。ゲーム的な制約が決まった段階で、モーションのネタ出しから振ってしまう方向で考えたい。ネタ出しに関しても、普段から「動き」に対して意識的に注目している人の方が引き出しが多いのは確実だし。
いろいろ面倒は想定されるが、根本的に解決できない話ではない気がする。
新人のプログラマに、私の部分のプログラム概説。テーブル・イベント駆動になっているから、コードだけ読んでも理解できない。まずは、プログラムの哲学的な話から。
暇を見てちょくちょく話を進めておきたい。