色々と面倒だ
MirrorCommanderのBasic版でカーソル描画をそれなりのものにしようと作り込んでみたが、色々と面倒な処理が必要になった。最終的には思った通りのものにできそうではあるが、時間がかかったので、明日もう少し継続する。
« 2009年6月 | トップページ | 2009年8月 »
MirrorCommanderのBasic版でカーソル描画をそれなりのものにしようと作り込んでみたが、色々と面倒な処理が必要になった。最終的には思った通りのものにできそうではあるが、時間がかかったので、明日もう少し継続する。
MirrorCommanderのBasic版は、基本性能についてはほぼ満足なところにまで達しているが、マウスカーソルの描画を何とかしなければならない。現状ではサーバー側で画面データに描画してクライアント側に送っているが、転送レートが遅いとカーソル位置が判らなくなる。
色々とあったが、何とか、開発環境の酷い無線LANでもリモート操作をそれなりに快適に行なえるようになった。無線LANで頻繁にパケットロスが発生することを前提に色々と作りこんだ結果、MirrorCommanderのネットワーク処理は結構ロバストなものになったかもしれない。
開発環境の無線LANについてチェックしてみたところ、どうしようもないくらい酷い状況だということが判った。データ付のPingで32kBの転送を行なうと、10回の内、2,3回は必ずタイムアウトになっている。なので、実際問題としては使えないのだが、もう少し追いかけてみる。
MirrorCommanderのネットワークルーチンを最適化した結果、100Baseで接続した初代MacBookを操作して、GatewayのCore2Quadマシン上でMacBook上で動作しているIEのYouTube動画を普通に視聴できるようになった。しかし、無線LAN環境は調査が必要だ。
とりあえずネットワーク層の形はできあがり、CoreAudio経由で採取した音声も途切れることなくクライアント側に転送できるようになった。しかし、開発環境の無線LAN経由だと映像が正しく転送されない。エラー処理ルーチンがまだマトモじゃないからだ。
MirrorCommanderのネットワークルーチンを変更したのでデバックを始めたのだが、中々面倒だ。その理由は、マルチスレッド動作とリアルタイム性にある。これらが災いして、トレースの採取やBeep音確認等の、H/W制御用プログラムのデバック手法を使わなければならない。
MirrorCommanderのBasic版はとりあえず完成度が低い状態でリリースするつもりだが、基本部分を適当に作ってしまうと後で全て作り直し、ということにもなりかねないため、ネットワーク部分については、それなりにしておこうとしている。
MasterReversiを本格的に使うとデータベースとBookと置換表で多くのメモリが消費される。なので、作者の手元にある対局データやBookデータの全てを読み込ませるとメモリが足りない。まあ、性能的にそれだけのデータを扱うと鬱陶しくなるので読み込ませはしないのだが。
AmuseGraphicsをリリースしてから一月たったが、ホームページへのアクセスが殆ど無いところを見ると、Vectorからのダウンロードはあまりなさそうだ。シェアウェアだというだけで避けている人も多いだろうが、何が出来るのか判らないという人も多いだろう。
MirrorCommanderのBasic版はCore AudioとDirect3Dの使用によって、今時のリモートアクセスソフトらしくなってきた。以前書いた10年程前に作ったリモートアクセスソフトよりは洗練されている。しかし、それは基本機能についてであって、その他の部分はイマイチだ。
昨日書いたDirect3Dによるスクロールの負荷を測定するために、単純に1ドットずつ1000回移動させるテストルーチンを組んで動作させたところ、開発マシンでのCPU負荷は1~2%程度だった。通常時にもこれくらいの負荷はままあるので、ほぼ、無負荷に近い。
何とかDirect3Dを使用してスクロールさせることに成功したが、SDKを見ていても何のことやら判らない。例えば、SetTransform(CONST D3DXMATRIX *pTransform)の説明はpTransformはワールド座標からスプライトへの変換行列へのポインタである、のみだ。
昨日は複数枚のウインドウで・・・と書いたが、色々とやってみた所、ポップアップウインドウ属性ならデスクトップよりも大きなウインドウが作れた。しかし、XPでは移動しようとしても正しく表示されなかった。ところが、レイヤード属性をつけるとこれもOkになった。
ノートPCの小さな画面でデスクトップPCの大きな画面を縮小せずに見たければスクロールするしかない。しかし、単純にスクロールさせたのではBitBltを使った画面描画が必要になって遅くなる。しかし、画面を移動する分には、BitBltは必要なかったような気がするのだが。
このブログの読者なら作者がVectorにリモートデスクトップソフトを登録したとしても、MirrorCommanderのBasic版だと判るとは思うが、他の人は普通のリモートデスクトップソフトとしてしか見ないだろう。それではツマラナイ。なのでもう少し特徴を入れたいと思っている。
Core Audio用の外部モジュールを作ってみたが、ちょっと大げさ過ぎるので、C++のクラスとして実装しなおした。Core Audioを使ってしまうと、XPではプログラムロード時にライブラリのロードエラーが発生すると思っていたが、COM構成のため、気にしなくて良かったからだ。
XPマシンでは普通に録音できたWaveOutがVistaマシンの多くでは録音できない。これはミキサにWaveOut Mixが存在しないからだ。ネットで検索すると、コントロールパネルのサウンドで「無効なデバイスの表示」をやれば良いという指摘も見つかるが、作者から見れば都市伝説だ。作者所有の3台の異なるマシンの全てで出てこない。しかし、もっと良い方法がある。
結局、初代MacBookには目出度くLepardがインストールでき、BootCampを使ってVistaもインストールできた。BootCampはWindows7に未対応なので、若干の問題はあるが、実機の評価環境も欲しかったので、Windows7RC版をVistaに上書きインストールした。
初代MacBookを修理するために、HDDを買ってきた。日立製の5400rpm-250GB。これしか在庫が無かった。もっと容量が大きいのにしたかったが、まあ、安かったので良しとしよう。今パーティションを作成してインストール作業を始めたが、実は、色々と面倒なことがある。
今日、MacBookの電源を入れると、立ち上がらなくなっていた。昨晩までは問題なかったので突然死だ。インストールDVDからは立ち上がるので、多分HDDが壊れたのだろう。丁度、二年前に一度壊れて入れ替えていたのだが、最近のHDD寿命は二年程度なのだろうか?
今は、MirrorCommanderのBasic版を開発中だが、元々、既存ルーチンを繋ぎ合わせて動かしていたので、内部構造が汚かった。なので、少し構造を綺麗にしてみた。形が綺麗になれば、開発スピードも上がるだろう。
Vista用のCore Audioが結構使えるにも関わらず、今まで使ったことが無かったため、今日は、他にも何か無いか、と色々とネットで調べ物をしてみた。まあ、そうそう良いものは見つからないのだが、今はそう思っていても何ヵ月後かには役に立っているかもしれない。
開発マシンには最新版のDirectX SDKをインストールしていたが、出来上がったバイナリを他マシンで動かすと「DLLがありません」状態となってプログラムが起動しなかった。なので、アンインストールした。代わりに2003年頃のものをインストールし、問題は解決した。
画面描画を軽くしたいから、ということで、DirectDrawを使ってみたが、VistaではAeroが使えなくなるし、画面はチラつくし、と、いうことで諦めた。昔、DirectDrawが出た頃は忙しくて弄れなかったので使ってみたかったのだが、今や、2DでもDirect3Dの時代のようだ。
MirrorCommanderのシェアウェア化は先延ばしにして、とりあえず、普通のフリーソフトとして来週リリースすることにしたが、だからと言って、全く面白みが無いという訳ではない。それなりに面白い所もあるので、フリーソフト化に踏み切ったのだ。
AmuseGraphicsの開発に手間取り、6月中に作り込みが出来なかったため、このままではMirrorCommanderのリリースは10月以降になりかねない。ちょっと考えてみたのだが、今年中に後二つの新プログラムをリリースするためには、これでは遅過ぎる。なので、MirrorCommanderのシェアウェア化は先送りすることにした。
MirrorCommanderで音声伝送時にデータの圧縮を行うかどうかは今の所未定。44kHzサンプリングでも176kB/Sec、8kHzサンプリングにすれば32kB/Sec。今や56kモデムの時代ではないので、どうということもない。しかし、1円を笑うものは1円に泣くかもしれない。
少し無駄な処理を取り除き、BitBltの高速化のためにテーマを変更すると、サーバー側のデュアルコアの片方の半分以下の負荷で10FPSでの画面転送も可能になった。これなら、動画もそれらしく見れるし、それなりに使えるのだが、カーソルのレスポンスが少し気になる。
MirrorCommanderの開発の手始めとして、普通のリモートアクセス部分を作っているが、今の所何の細工もしていないので、処理が重い。デスクトップ映像の圧縮は行うようにしてあるので、100Baseなら数FPS程度は楽に出るが、その分、CPUメータが大きく振れる。
MirrorCommanderはコーディングを行いつつ、試しに動かしては開発項目を検討したりしているのだが、MasterReversi用に作ったUDPルーチンを最適化せずに使っていたため、少しトラぶった。送受信バッファが小さめに設定してあったため、パケットが消失していたようだ。