「 2009年10月 」一覧

VMware Workstation7出た!


新機能の列挙を見ただけで、”すげぇ!”と思ってしまうものが満載です。

  • DirectX 9.0c SM3.0対応
  • OpenGL 2.1対応
  • Windows7, VMwareESXiサポート

これだけでかなりいけてるとおもいます。特にDX9対応は凄すぎる・・・。

早速試用版を試して見ました。

Windows7インストール

新機能で簡単インストール機能があったのでそちらを利用しました。
最初に少し聞かれるものの、あとはVMwareToolsのインストールまでが全て自動化。
かなり楽にインストールは完了です。

あと、ファイルのコピーもD&Dで出来るようになっていたりと、便利でした。

Aero

売り文句の1つにAeroが動くってあったのでそれもテスト。
インストール直後では、テーマがベーシック故あれ?と思ったのですが、
きちんとAeroテーマを選んでやることにより、有効化されました。
3Dフリップも機能するし凄いです。

DirectX9.0cテスト

ちょうど手元にDirectXの自作プログラムがあったのでそれを使ってみました。
結果、普通に動いてました。若干起動時にゴミが見えたものの定常状態では正常に動作しているようでした。

このアプリケーションでは、
スキニングシェーダー&テクスチャ付き という代物です。
これが仮想マシンで動くって言うのだからすごいものですねぇ…。

一応、Aeroの推奨環境を満たしていない下記スペックで動かしました。

  • Athlon64X2 4400
  • Mem 2GB
  • GeForce8600GT

もう少し評価版を触ってみて、これは製品版購入になりそうな感じです。
Win7のXPモードよりはるかにすばらしい!!

VMPlayerも最新版が出たそうですね。今度はPlayerながらも仮想マシンを構築できるとか。
ただし、VMwareWorkstation 6.5相当という。
これでも一応9.0c SM2.0が動くということになっている状況なのだから
仮想化分野もかなり進化したなぁと思います。


WinSxS問題 その2


基本的事項

まずは知っておかなくてはいけないこと。

外部マニフェストの挙動

  • 外部マニフェストはexeのみに適用される。
    • そのexeが必要とするdllらには適用されない点に注意
  • WindowsXP環境では、外部マニフェストのほうが埋め込みマニフェストよりも優先される
    • 2003より優先順序が逆転した。

症状

再頒布ランタイムパッケージがインストールできない環境で発生した。
インストールできない環境とは、ユーザーがゲスト権限くらいしかない場合を指す。
あるいはどうしても事情により入れられないとか。

このときに、exeとdllと同フォルダにおいて、
そのプライベートアセンブリとして、VCランタイムを配置した。
このときに、最近のWindowsUpdateが適用されたバージョンを置いた。
(VC90.30729.4148バージョン)

そして、exeがこのバージョンのランタイムを使うように、外部マニフェストファイルを作成して
実行をさせようとした。

この結果が、昨日のエラーを引き起こしていた。
理由は、dllにはこのマニフェストの影響が及ばないからである。
故にdllは埋め込みマニフェストに従い、21022.8のランタイムを要求しているし、
exeは外部マニフェストによって強制された 320729.4148バージョンを要求する。

ここで同一のアセンブリ名であるためにdllがロードされてチェック機構が働いた段階で、
不整合がおこり、ローダーの段階で失敗してしまう。
その結果、exeが実行されることなく強制終了されてしまう。
試した環境ではエラーダイアログすら出ない。

解決策

簡単に解決する方法がある。
ひとつは、VisualStudio2008,およびSP1環境のデフォルト動作では、
RTM版のランタイムにバインドされる。
これは、9.0.21022.8 のバージョンである。
これに対応するランタイムを入手し、それをプライベートアセンブリとして使用する。

ただし、セキュリティ関係で問題になりそうな気もするが仕方ない.

もう一つは、最初から埋め込みマニフェストで最新バージョンを使うように
全部アプリケーションをリビルドする。
これには、まずプロジェクト設定の、プリプロセッサ定義で、
_BIND_TO_CURRENT_VCLIBS_VERSION を定義しておく。

これを行うとビルドした環境の最新のバージョンへバインドされる。
よって、最近のやつであれば 30729.4148にバインドされる。
リビルドにより dllからexeまでがこれに依存するようになるため、
VisualStudioのインストールディレクトリから再配布ランタイムをコピーして使用すればよい。

最後の方法は、exeでやったように、dllに対しても依存するアセンブリ情報を強制変更する方法である。
これには、hogehoge.dll.2.config というファイルを作成する。
ポイントは”2″という部分。

このファイルにより、目的のバージョンへバインドがリダイレクトするように設定すれば、
dllとexeのバージョン要求不一致を解決できる。
この方法は一応海外のMS CONNECTで記述があったためおそらく正式な方法だと思う。

しかし、日本語での情報が見つからなかったためここに書いてみた。


WinSxS問題


Windowsのサイドバイサイドって、
強力な仕組みなんだけど、その強力さ故色々と面倒なこと引き起こしてるなぁと思います。

昔DLL HELLとか散々な目にあったからこそ作られた仕組みであると理解しているけれど、
今食らっている状況はWinSxS HELLともいえるような気がします。

マニフェストファイルを作成して、実行体と同じ場所にDLLを
プライベートアセンブリとして配置する方法でトラブル。

dllが要求するものと、exeが要求するものと同一アセンブリ名、異なるバージョンアセンブリ
という状況が出たときに問題は起こる…。

通常サイドバイサイドのポリシー設定により、適切にリダイレクトがかかるために
上記の問題は起こらない。なぜならば同一の参照先を示すことになるから

現在回避策を調査中・・・。


PV4環境


PV4 on Windows7でやっていたものの、
うちのマシン Core2Duo E6300では荷が重いようで。
あるシーンになると、CPUの負荷で録画が停止してしまう。

そこで、環境をWindowsXPに戻してみたら、正常に録画可能だった。
やっぱりXPに比べると Win7は重くなっているのかなぁ。

特定のシーンとは、

  • 緑の多いシーン
  • きらきら輝くようなシーン
  • 両者混在の木々の木漏れ日

というのを現在把握中


エンコード設定中


エンコーディング設定

最近また新作が放送開始してきたので、これを機に自分の設定を見直してみた。
その時に参考にさせてもらったのが、下記のサイト。
かなりわかりやすくて、助かりました。

http://daybreakdeath.blog66.fc2.com/

あと、意外だったのが、最近のAVIUtlは高速に動いてたということ。
安定しているバージョンの結構古い奴を使っていたので、いつも更新は見送っていたのですが、
せっかくの機会ということでインストールして、必要なフィルタだけ入れてみる、
という感じで再構築。
使ったフィルタ群は以下の通り。

  • lanzcos3拡大縮小フィルタ
  • prefilter (non-linear-sharpenの)
  • Non-Linear-Sharpen
  • WarpSharp

定番ですね。

他には、mp4拡張出力とMpeg2を読むための入出力プラグイン。
これくらいの設定で今期は戦って行けそうです。

tsってきたねーと思っていた自分

ブロックノイズでまくっていてダメだろう。と思っていました。ホント最近まで。
色々と疑ったあげく、どうしようもないという判定を下し、フィルタ処理でなんとか~と思っていたのですが、
実は、設定が正しくなかったために起こっていた、というのが実際のところでした。

Mpeg2Video Pluginの設定にて

  • アスペクト比 => 無視
  • GOPリスト => チェックしない
  • フィールド順 => ソースフレームを維持
  • IDCT関数 => 整数(32bit AP922)
  • CPU拡張 => 使えるものにチェック入れる

どうやら、フィールド順が強制的に設定されてたような感じでした。
それを上記のようになおしたところ、正しく動作できるように。
これでようやく、tsファイルの価値が出てきた!


Redmineによるリポジトリ管理機構について


どうやら、設定で自動更新としても、
メニュー項目から、リポジトリを覗いたときに初めて情報を取得するようだ。

だから、毎回”活動”のページを開くだけでは、
ソースコードの状況を確認することが出来なかった!

そこで次のようにして、この問題をとりあえずは解決することにした。

  1. 自動更新のチェックを外す
  2. redmineユーザーのcronにスクリプト実行を設定

エンコーディング

他にもソースコードのエンコーディングが怪しかったので、設定を見直してみた。

「管理」/「設定」/「リポジトリ」/「リポジトリのエンコーディング」
とたどって、次のように設定。

utf-8,shift_jis,euc-jp


プロ意識


正常起動・終了以外の経路を通って、プログラムが起動された場合には、
プログラムが不正終了してしまうってのはあると思います。

しかし!お金をもらっている本職プログラマだったら、多少はケアすべきなのでは?と思いました。

というのも、どうしようもないエラーではなくて、
変数の未初期化によるアクセス違反、および、ポインタNULLの逆参照で不正終了
っていう結果だったために、なおそう思ったわけです。

きちんと初期化して、終了時の解放チェックとかもやってみたら
そのプログラムは普通に終了できるようになりましたし。

仮にもプロだったなら、このくらいはきちんとしておいてほしいところです。
趣味コードとはいえ、人に配布して動かしてもらうコードならば、
その辺意識もって取り組んで欲しいところです。