2009年3月11日水曜日

virtualPC2007はネットワークではvmwareに勝てないぞ

ホストPCが1Gbpsのネットワークにある場合、VMwareは素直にに1Gbpsで通信できるが、VirtualPCはどうかといえば。
VirtualPCがホストのネットワークアダプタを利用する場合は100Mbpsで頭打ち。NAT接続はさらにその1/8程度の速度しか出ませんです。VirtualPCでは、ホストが1000baseでも、ゲストは、ホストアダプタ使用では100base、NATでは10baseってな具合。
環境:ホストWinXPpro sp3、ゲストWin2kpro sp4でのお話でした。

2009年2月24日火曜日

止まらないGraphGearを止めるメモ

http://www.creativesynthesis.net/blog/projects/graph-gear/
GraphGearは関連性をつないで示すグラフで、なかなか面白いんだが、ノードをガシガシ追加していくと、CPU負荷が高止まりする。高止まりまでの動作は以下の通り。
GraphVis.asで・・・
1.onEnterFrameでrenderGraphを呼んで、renderGraph内で各ノードを動かす
2.renderGraphではノードの動きを合算して、閾値を超えたらonEnterFrameをdelete して止める。

ところが、閾値は、STOPRENDERで、デフォルト0.01、という動作なのだけども、大体ノードの動きが1以下の場合はほぼ動かない。でノードが10程度あると、たとえばみんな0.1とか微妙に動きながら平衡するので、グラフ自体はほぼ停止しているのに演算は続けられ、したがってonEnterFrameイベントが発生し続けてCPU高止まりという具合になるわけです。まあ、ずっとピクピクうごいているのも、GraphGearのいいところかもしれませんが。

そこで、たとえば条件を「1以上動いたノードが1つ以上ある場合はrenderGraph続行」としてみようかと。
GraphVis.as、renderGraph内、if(_root.LineLock != "y") { 以下で、

movedx=currentNode._x;//x値を持っといて
currentNode._x=Math.min(Math.max(currentNode.NodeImage._width/2, currentNode._x += currentNode.dx), _root.GraphWidth-currentNode.NodeImage._width/2);//動かして
if(currentXPos + Math.abs(movedx - currentNode._x) >= 1){currentXPos++;}//1以上動いたら動いたと。

//_yも同じ変更。省略。
//ここはコメントアウト。
//currentXPos = (currentXPos + currentNode.dx);
//currentYPos = (currentYPos + currentNode.dy);

あとは、
STOPRENDERの値をGraphVis.asをいじって直接1や2に変更するか、javaScriptでflashMovie.changeProperty('STOPRENDER', 1);とでもするか。で、確実に止まるようになるのでした。

あるいは、各ノードの移動の平均値が0.1以下になったら、なんてのもよいかも。
currentXPos=(currentXPos + Math.abs(movedx - currentNode._x)
currentYPos=(currentYPos + Math.abs(movedy - currentNode._y)で、

最後に
movedPos=currentXPos/nodeList.length + currentYPos/nodeList.length;
if (movedPos < STOPRENDER && (_root.isDragging == false)) {
trace("STop Render");
stopRendering();
}
それとも最大値が適切か。

ついでにGraphVis.asなど変更した後、mtascを使って再コンパイルしてみる方法メモ。

GraphGear-1.4\sourceのフォルダにmtasc.exeを投入。
コマンドラインで
GraphGear-1.4\source>mtasc GraphLoader.as GraphVis.as -swf GraphGear.swf -out GraphGear2.swf -version 8 -cp classes
すると、GraphGear.swfをもとにGraphGear2.swfが新たに作成されるという寸法。

2009年1月19日月曜日

ログインしていない状態のタスクをSYSTEMで動かす

常時起動のWindowsXPなどで自動更新後にログイン画面で止まってタスクが実行されなくて困ったあなたにお届けする、Windowsで、ログオンしていない状態でタスクを実行する方法のメモ。または、パスワードが設定されていないユーザーアカウントしかない状態でも非ログオン状態でタスクを実行したい場合はSYSTEMにやらせれば良いのでは、というメモ。
  1. 実行するアカウント名に「SYSEM」と入れます。
  2. パスワードは空欄。
  3. ログオンしている場合にのみ実行する のチェックを外す
  4. 実行するは当然チェック。

PSCPの新規サーバーへの接続など一度だけSYSTEMアカウントにYを押させる必要がある場合は、事前にバッチファイルなど作ってecho y|コマンド とでもしてから、一度だけそのバッチファイルをタスクから実行で。
pscpの例: echo y|pscp -ls -pw hogehoge hageuser@hostname.com:/