kumaryu日記
2009-05-20 ドキュメント
_ [Riko] RDocのパーサ
べつにRDocが吐いたものをパースするって話じゃなくて。
RDocに標準でついてくるC用のドキュメントパーサでパースできれば良かったんだけど、これはrb_define_methodとかrb_define_classを認識してドキュメント抽出するのでRubyのAPIをラップして使っちゃってるとドキュメントが生成されん。
Document-classとか使えば強制的に生成してくれんかなーと思ったけど、やっぱり無理でどうしてもrb_define_*がソースにかかれていないとダメらしい。
しかたないので自分用のパーサを作ることに。
ラップしたAPIにあわせたパーサを作るという手もあるが、C用のパーサ見てもやけに複雑で何書いてあるか分からなかったのでやめやめ。
ドキュメントだけ見ることにしよう。
/* * Document-class: RikoMath::Vector * ベクトルクラス */ /* * Doument-method: Vector#initialize * ベクトルを初期化します。 * call-seq: * initialize(x=0.0, y=0.0, z=0.0, w=0.0) */
とりあえずこんなのをパースできるようにした。C用のパーサではクラスがどのモジュールに属するかとか、メソッドがどのクラスにとかをソース解析してたけど、全部Document-なんちゃらで手動で指定することに。正直自動で解析してもらう程の事もないと思うんだ。
で、できたのでちょこっと抽出してみたら何にも出てこなくて不思議。
おっとドキュメント書いてないんだから出てこなくて当然だ!
_ [Riko] COLLADAスキニング描画
シリーズCOLLADA読み込み。
アニメーションはできたからスキニング。skinの読み込み自体はできてるからーと思ってたが、読み込んで使ってない部分なんて当然適当なので全然ダメだった。
まあ直すのはそんなに大変でもなかったが。
スキニング自体はCで書くつもりだったけど、面倒だったのでとりあえずRubyで。遅いけどそれはあとでなんとかするので気にしない。
うーん、だいぶ効率は悪いけどなんとかできたな。
途中bind_shape_matrixを前もって頂点にかけといたらどうもよくわからない状態になって困ったけど、これはMatrix#apply!が間違ってる気がしなくもない。テスト書いてたと思ったんだが。
Blenderから書き出した歩きアニメーションとか読み込んだけど、全く問題なく動いた。すげー!これ便利!
毎フレームプリミティブというか頂点情報を作りなおしてるのでめっちゃ遅いけど、それでもまあ一応動いてる的な速度で動くのはいいね。
いままでアニメーションつきでBlenderとかから書き出したのをそのまま表示ってできなかったからなぁ。不便だったよ。
もうちょい頑張ればライトとかカメラなんかも読み込めてアニメーションできるね。まあライトはシェーディングをちゃんとしないといけないからおいておくとしても、カメラのアニメーションができると非常に助かる。
なんにせよこれでひとまず欲しい機能は一通り揃ったので、あとはゲームで使えるように最適化しよう。
_ [monotone] monotone 0.44
うわー。しばらくメール見るの忘れてたらmonotoneの0.44がでてた。
でてたのはともかく、一週間以上メールみてなかったんかい。
例のごとく意訳
2009年5月12日火曜日 20:44:00 UTC 0.44をリリース 変更点 - 秘密鍵が対応する公開鍵と別のハッシュを持たないようになりま した。これにより'ls keys'のハッシュ出力が変更され、 'automate keys'と'automate genkey'のフォーマットも変更 になりました。 新機能 - ワークスペースのリビジョンを選択するセレクタ'w:'が追加され ました。 バグ修正 - Luaの拡張関数中でのC++例外が落ちずにpcallでLuaのエラーと して捕捉できるようになりました。 - 0.43でrevertが属性が変更されたかどうかにかかわらず全ての ファイルとディレクトリの全ての属性の変更をめっちゃうるさく 出力するようになっていました。 なので、こいつを黙らせました。 実行属性の変更があるときだけは特別に報告するようになってい ます。 - 0.43でupdateをすると変更があったファイル全部の実行属性が 失われていました。これがmtn:execute属性がtrueなファイルが 更新されたときにのみ実行属性が再設定されるようになりました。 - 正しくないセレクタがあったときにそれを選択から外して続行す るようになっていましたが、即エラーを出すようになりました。 以前の動作ではコマンドを打ち間違ったときに、データベース内の 全てのリビジョンのリストを出力しちゃったりとか、望まない動作 をする可能性がありました。 - "automate stdio"中で正しくないセレクタを使ったときに automateプロトコル中に報告が出力されていたのをstderrに出 すようにしました。 - "なるべく頑張る(Best-effort)"文字セット変換がまた動作する ようになりました。ログが現在のロケールで表現できない文字を含 んでいた場合でも'mtn log'が落ちません。 ただしシステムのiconv(3)実装が//TRANSLIT拡張をサポートし ない場合には上のような状況では文字化けがでるかもしれません。 内部的な変更 - (Open)SolarisのSun StudioでのコンパイルやWindowsの Visual C++でのコンパイルができるようにちょこちょこ変更を行 いました。 - monotone.specが配布パッケージに入らなくなりました。
今回は短くて楽。
なるべく頑張る文字セット変換ってなんだろうとソース確認したけど、しっかり対応できる文字が無いときに文字の置き換えをすることらしい。gnuのiconvでは//TRANSLITてな拡張があるんだってさ。
つか、ソース確認していまさら分かったんだけど、ログは全部UTF-8に変換して格納してんのね。みてるのはWindowsではCHARCODE環境変数のみ。なのでCHARCODEをcp932にでもしておけば問題無くShift-JISつかえんのか。
いままで怖いからCHARCODEをutf-8にしてたけどいらん世話だったのか。まあ内部でutf-8だから今から変えても安心ですね。
あと日本語ファイル名はcygwin版だとちゃんと動くらしい。しかしcygwinはなぁ…。