monotone 0.45が出てたのでNEWSを訳したよ。
2009年9月11日20時50分00秒UTC 0.45をリリース。 変更点 - Certsが署名されたキーの名前でなくキーのハッシュに関連づけ られるようになりました。これはセキュリティと使い勝手の向上 につながります。 これに伴い、データベースのスキーマが変わったので 'mtn db migrate'を実行する必要があります。 (その前にdbのバックアップを取っておくのをお勧めします。) netsyncのプロトコルバージョンも変わりました。 ただし完全なプロトコルバージョン間の調整を実装する余地がみ つかったおかげでクライアントを一斉に変更する必要はありませ ん。複数のキーが同じ名前を持つようなプロジェクトを扱ってい る場合、古いnetsync相手との通信でそういったキーで署名され たcertsを交換しようとするとエラーが通知されます。 'ls certs'、'ls tags'、'automate keys'、 'automate tags'、'automate certs'と言ったコマンドは出 力がちょっとばかり変わります。 これらの変更に関連して新しいLuaフック 'get_local_key_name(identity)'が追加されました。 さらにキー名を引数に取っていた全てのLuaフックで、名前の代 わりにいくつかのフィールドを持ったテーブルが渡されるように なりました。 今までキー名を受け付けてたコマンドはキーのハッシュやローカ ルな別名であるローカル名をキー名と同じように受け付けます。 'read-permissions'と'write-permissions'はキー名かハ ッシュのどちらかを受け付けます。 またマイグレート済みのデータベースに間違ったキー割り当てが あっても、正しいキーが使えれば新設の'db fix_certs'コマン ドで修正することが出来ます。 - 'automate show_conflicts'でファイル内容競合に 'resolved_user'解決はでないようになりました。 代わりに'resolved_user_left'が出ます。 - 'automate tags'と'automate get_attributes'から 'format_version'が取り除かれました。 どちらともバージョン情報が関係ないためです。 新機能 - 'log'コマンドが標準で時刻をUTCでなくあなたのタイムゾーン の物に変換して表示するようになりました。 ついでに日付表示ももっと読みやすい書式にします。 "get_date_format_spec"Luaフックでstrftime(3)の書式 文字列を返すことで日付の書式を変更できます。 一回のコマンド実行中だけ書式を上書きするなら新設の --date-formatオプション、変換を無効にするなら --no-format-datesオプション、標準で無効にするなら上記 のLuaフックで空文字列を返すようにしてください。 - 'diff'と'automate content_diff'に一つのリビジョンを指 定したとき、'--reverse'オプションを受け付けるようになりま した。これはワークスペースとのdiffの順番を入れ換えることが 出来ます。 - 'update'、'checkout'、'pluck'、'pivot_root'の各コマン ドが'--move-conflicting-paths'オプションを受け取るよう になりました。これは操作の妨げになるようなバージョン管理外 ファイルの扱いを指定します。バージョン管理外ファイルは _MTN/resolutions/<workspace_path>に移動され、操作が完 了できるようになります。その後、必要ならそこからファイルを復 活させてください。 - 'merge --resolve-conflicts'コマンドと'conflicts'コマ ンドで孤立したファイルの競合解決がサポートされるようになりま した。 - 名前重複競合に解決方法'keep'を選べるようになりました。 - --dbオプションの引数として':memory:'を受け付けるようにな りました。これはメモリ上にのみ存在するSQLiteデータベースを 作ります。 - 'clone'に'.'を引数として渡したとき、カレントディレクトリへ クローンが作れるようになりました。 バグ修正 - 'add'か'automate inventory'で扱えない文字を含むパス名を 見つけたときにそれをスキップするようになりました。 - キー名、cert名、変数ドメインにnon-ASCII文字列を使っても正 しく動くようになりました。 そういった名前は以前は(通常なら)punycodeに変換され出力時に もデコードされていませんでしたが、今度からはpunycodeへの変 換自体が行われなくなります。 - 'conflict'がディレクトリ名の重複競合を正しく扱えるようにな りました。 - 'cvs_import'がCVSのタイムスタンプを正しくパースできるよう にしました(再度の修正)。 - Windowsのcmd.exeが賢いターミナルと認識されるようになり、 netsync操作の際に多少読みやすい出力をするようになりまし た。
久々の更新*1、久々のdbスキーマ変更。migrateしてくらさい。
一つのdbに複数の同名キーって今まで入らなかったと思ったんだけどいつのまにか入るようになってたのかな?万が一プライベートキーを無くしちゃっても安心…か?
diffの--reverseオプションは地味にうれしい。変なマージとかするときにこれ欲しかったんだ。
conflictコマンド辺りが変わってるんだけど、この前使ったらこの非同期競合解決ってかなり使いづらかったんだよね。競合一つずつに対していちいちどうするか指定していくの。左の奴を採用、右の奴を採用、自前でマージするとか。すげーめんどい。
なんでこうなってるんだと思ったが、どういうマージをしたのかいちいち記録しておくためなんだろうな。わかるけどめんどい。マージはもうすこし気軽に使い易くならんかなぁ。
オンメモリdbって何に使うんだろうか。起動しっぱなしで複数コマンド実行できるのってautomate stdioか?あ、serveもか。
ずっとcertを訳さずcertにしちゃってるけど、日本語なら何になるんだろう。リビジョンにくっついてる属性見たいなものなんだけど…。
*1 と思ったが前回が5月だからそうでもないのか
ゲームプログラムを書くのはめんどいのでBlender Game Engineをいじり始めました。
これが結構分かりづらくて、というかドキュメントがねー!!
物理シミュレーションBlenderてな本をみて基本は理解したらあとはいじって覚えるしかない。
マウスカーソルを表示させたりとか、オブジェクトをマウスカーソルに追従させようとしたけど難し過ぎ。てか無理。Pythonスクリプトを書く必要があるみたい。
パーティクルを出そうとしたけど出なかった。Blenderのパーティクルシステムは現状BGEでは使えないらしい。しょんぼり。
やるなら自前でオブジェクトを発生させろとな。
オブジェクトをクリックしたらパーティクル扱いのオブジェクトを発生させようとしたら、クリックしたオブジェクトの中心から発生しました。クリックした位置から出てほしいんだけどなぁ。無理かー。しかも一個ずつしか出せない。アクチュエータ大量に置くのはめんどいよ。
というわけでスクリプトを書こうとしたが、どこでどう書けばいいのかさっぱり分からない。ドキュメントもない。
なんとかサンプルを見つけてきたら、スクリプトはコントローラとして書けばいいらしい。アクチュエータとして書きたいんですけど…と思ったがコントローラとして書いたスクリプトでアクチュエータの処理もやっちまうらしい。なんという強引な設計。
で、書き方は分かったし、少なくともリファレンスはあるのでそれを見て書き書き。ん、結構便利だな。というか楽だ。
…クリックした位置からパーティクル相当のオブジェクトをカメラのある向きにランダムな勢いで出すというのがなんと数行で。いや数行はいいすぎか。十数行で。
なるほど、Pythonで書くとだいぶ便利だ。Pythonで簡単なゲームを作る環境と考えれば良くできてる感じ。プログラミング無しでゲームを作ろうとするとかなりめんどい上に出来ることが少なすぎる。もう一工夫必要だろう。
あとはオブジェクトを一定回数クリックしたら置き換えるというのとクリックしたときに音を出すのを実装すればロジックは完成だが、どちらも簡単なのであとでいいや。というか置き換えるべきモデルも出すべき音もないのでそれを用意しないと。
というわけで何を作るにも結局素材作りで時間を食うのであった。
あ、でも小物のモデリング結構楽しいな。
ああ、あとBGEではやっぱり物理エンジンを使わないとかなりめんどい。これはBGEに限ったことでは無く、普通に何も考えずにそれっぽく動かすなら物理エンジンは楽だというだけなんだけど、困ったことに物理パラメータの設定が難しい!
いったいどこを設定すればそれっぽく、というか思ったような動きになるのかが難しい。
なんとなくこれを弄ればいいんだろうと簡単に分かるのがMassなんだが、これたぶん質量じゃなくて密度だよな?単位体積辺りの質量というか。
なので同じ設定のオブジェクトに同じ力をかけても、オブジェクトの大きさによってものすごい速さでぶっとんでいったりびくともしなかったりする。
じゃあ小さいオブジェクトの質量をあげてやれ。とやったら小さいオブジェクトがぶつかっただけででかいオブジェクトがぶっとんだ。ものすごい威力だ!
うん、まあ、たしかに物理エンジンってそういう物なんだけどね。でもやりたいことはそうじゃないんだよ、ああもう!
とかやってたんだけど、良く考えたら力をかけるんじゃなくて速度を直接与えてやればいいだけだった。そうだよな。それなら質量小さくても速度一定にできるわな。
物理エンジンを使いこなせるようになるにはまだまだかかりそうだ。