Afterimage Resource Meter あたらしいのできたー。

ミッションコンプリート!Windows7のRC版で描画が崩れる不具合が出て放置していたものの、Windows7正式版ではフツーに動作したため再び日の目を浴びたわたくし謹製のVista/Windows7用ガジェット「Afterimage Resource Meter」。自作ながら結構気に入っていたので、Windows7正式版で動作確認が取れたのを機に、残像を引きながらみょいんみょいん動くバーをマルチコアに対応させるとともに、数値表示系のバグを修正したらこんなんなりました。複数バー表示は、デザインの根本的な変更も含めていろいろ表示方法を考えたんですが、結局、CPUの数だけバーを下に増やすという一番安直な解決法にて完了(笑)。前のように非表示部が完全透明だと、2行目以降のバーが酷いことになる(中空に浮いてるように見える的な意味で)ので、ある程度透明度を残すようにしてます。上のスクリーンショットがバー8本なのは、ワタシのマシンがCore i7なので、クアッドコア&コア毎にハイパースレッディングによる擬似2コアで、見かけ上計8コアになっているからです。タスクマネージャで折れ線グラフが8個表示されているのはいつ見ても異常な光景でございますですね。それはともかく、ガジェットのダウンロードは下のリンクから。
AfterImageMeter.gadget
......ただし、基本的に見た目重視のリソースメーターなので、アホなことに、ガジェット自体が少しながらCPUリソースを消費します。だって、CPU使用率のサンプリング間隔が700msな上、残像を描画するために、描画系には100ms間隔で呼び出しかけてるんですもの。Core i7マシンなら別に大したことないけど、この前Windows7導入したASUS S101(Atom N230マシン)で動かしたら、sidebar.exe自体が常時10%くらいCPUリソース喰ってた......。
(ここから技術的な話)
■残像を描画するために
......まさか昔仕事で覚えた、PI制御が応用できるとは......。PI制御はフィードバック制御の一種で、目標値に向かって現在値を近づけていく時の操作量を求めるための演算。なんか難しそうだけど実際はとても簡単な概念と計算なので詳しくはググれ。モータ制御の例だけど、このページなんかがとても分かりやすいですね。厳密にはPID制御なんだけど、D項はよっぽどセンシティブなフィードバックが必要でもない限りはイランという認識。
で、今回の場合、目標値はその時のCPU使用率として、バーの頂点を、前回のバー位置から、PI制御で求めた操作量を使って目標のバー位置に近づけつつ、その途中のバーの透明度を徐々に減らしていくと綺麗な残像が描画できるというわけさ。
■ソースコードのバージョン管理
TortoiseSVN最高!
ファイルのバージョン管理ソフトといえば、MicrosoftのVisualSourceSafeとか、フリーだとWinCVSとかあるけど、横浜で働いていたときに、一緒に働いていた人から、このTortoiseSVNを教えてもらってからというものの、完全にこれ一択になっているわたくし。エクスプローラー統合型なので、いちいち管理用のソフトを立ち上げなくてもOKという時点でも十分ありがたいし、更新ログの参照からバージョン間のソースコード差分の表示からファイルの過去バージョンへの巻き戻しから、何もかもが右クリックでポポイのポイなのが便利すぎます。いやバージョン管理ソフトって本来そういうもんだけど、こいつは桁外れに手軽なのがヨイ。しかも完全日本語化可能だし。仕事では既に十分便利に使わせてもらってるけど、個人での、今回のような日曜大工レベルのコーディングでも導入する価値は十分あるわコレ。テキトーに作ったコードが動かなくなったら即巻き戻し~。そんな行きあたりばったりなコーディングをするな(笑)!
■ガジェットでトラブったら
ガジェットのコードが間違ってて異常停止した場合、Vistaだと、サイドバーのGUIから異常停止したガジェットを殺すことができたんだけど、なんとWindows7ではそのインターフェースが消えているのであった。だから、たとえば行末のセミコロンを打ち忘れたコードをうかつに実行してしまうと、ガジェットが表示されないので通常の手段で閉じることもできず泣き寝入り状態なのだった。実害はなさそうだけど、気持ち悪いので何とかできないかと調べたら、一応こんな方法で異常停止ガジェットを消すことができるようだ。
(1) タスクマネージャで「sidebar.exe」を強制終了させる
(2) 「C:\Users\(ユーザ名)\AppData\Local\Microsoft\Windows Sidebar\Settings.ini」を開く
(3) 異常停止したガジェットのセクションをまるごと消す。ついでに[Root]セクションのセクション定義のうち、消したセクションに該当する部分も消しておく
後は普通にガジェットを追加しようとすれば、sidebar.exeは自動的に再起動するし、異常停止したガジェットも綺麗に消えてくれる......ようです。つうか、VistaみたいなGUI用意してくれないかなぁ......。

コメントする