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用意してくれないかなぁ......。

次は、Spectrum Analyser を是非
> なんとWindows7ではそのインターフェースが消えているのであった
スタートメニューで view list of running gadgets と入力すれば出てきます。
Windows Vista、7でAfterImage Resource Meterを利用させて頂いています。
さて、7はなんでもないんですが、Vistaだとメモリが二段表示なってしまうのです。
自分だけかと思ったら、http://blogs.dion.ne.jp/herpuretears/archives/9813324.htmlにも同じ症状の方が…
解決方法はないものでしょうか?
ぐあ。最近Macにかまけてちっともさっぱりだった間に、ガジェットでバグが出ていたとは……。
現在、手元にVista環境が無いので、手元での現象の再現はできませんが、
根本原因はともかく、対策を打つこと自体は可能なので、とりあえず暫定対策版を作成しました。
http://www.runaway-fellows.com/gadget/AfterImageMeter.gadget
対策法は、メモリ表示時、2行目以降のバーを完全に透明にして不可視にするという
比較的安直な方法です。
ロジック自体は、既に動作している、半透明のバーを表示する方法の延長線上であり、
Win7上ですが動作確認もしているので、Vistaでも問題なく動作すると思います。
引用されているページ先の方のコード解析結果は、まったく正しいです。
本来であれば、そのガジェット自体のサイズを変えるというロジックで動かしたほうが、
ガジェットのドラッグ時に、変な位置でスナップすることがなくて良いと思うのですが、
OSバージョン違いの動作となると、現物のOSがないとにっちもさっちもなので、
とりあえず、より確実に動作すると思われる方法で対応しました。
まずは、お試しいただけると幸いです。
あと、view list of running gadgetsを教えてくださった方、ありがとうございます。助かります。
つうか、なんでデフォルトで用意されてないんだろこれ。
まあ、ショートカットでも作っておけば良い話か……。
早速の対策、ありがとうございます!
これで気持ちよくなりました!
ドライブ残量とかもあったら統一して格好良く使いたいな…なんて思っています。
対策版を導入したところOKかと思いきや、再起動すると元の通りの二段表示になってしまいました。
わたくしの環境固有の現象でしょうか?
お返事遅くなってすみません。
上記現象、バグだと思われます。これまたすみません。
修正版で差し替えましたので、もう一度試していただけないでしょうか。
http://www.runaway-fellows.com/gadget/AfterImageMeter.gadget
はじめまして。Vistaの頃から使用させていただいております。
誠にありがとうございます。
さて、私のVistaはメモリーが当初1枚のみ装着状態から使用して
おりまして(512Mb)、1GbX2にした現在も1段表示でいけています。
もしかしたらCPUと同じく各メモリー毎にメーターが表示されて
しまったのかなと思いました。
すみません、本題に移らせてもらいます。
先月、ようやく7機をgetして、いつものようにガジェットの窓から
リンクしてプライベート用のアカウントにインストしたのですが
先週、別のアカウントにも入れようと思い、同様にMSのリンクに
飛んだらごく僅かのガジェット以外全て消されていました。
それからこちらを探し当てたのですが。。。
直前のコメントのZIPファイルをインストールすれば良いのでしょうが
インストールの指定先はどこにすればよいのでしょうか?
完全なビジターなので基本的な事がわからずご迷惑をおかけしますが
お時間が許せば是非ご教授願いたく存じます。
また、別のアカウントにインストールされている物を、全ての
アカウントに適用する方法があれば一番ありがたいのですが。。。
win7環境は当然としてVista環境でもバッチリのようです!
再起動も通常起動でもキチンと一本で表示されています!
ありがとうございました!!
解決しました。
ありがとうございました。
度々申し訳ありません。
シンプル且つカッコイイのでこれからもずっと
使用していきたいと思っています。
ところでこちらのアイテムで『常に手前に表示』
という機能を追加していただく事はできませんか?
仕事で使用しているオンラインの画面を全画面で
使用することが多い為、せっかくのガジェットを
常時表示できませんし、ガジェット全体を前面表示
させると画面が小さくなってしまう為です。
自分に知識があればいいのですが。。。
お時間の許される範囲で構いませんのでよろしく
お願い致します。 べつやく
お返事できてなくてすみません。
常に手前に表示ですが、ガジェット上で右クリックして表示されるプロパティから選択可能です。
ワタシのガジェットに限らず、どのガジェットでも共通の動作ですね。
以下のページの、「ガジェットを常に他のウィンドウよりも手前に表示するには」を
参考にしてみてください。
http://windows.microsoft.com/ja-JP/windows7/customize-desktop-gadgets
それでは、よろしければ、今後とも細々使ってやってください……。
お返事いただきありがとうございます。
今までサイドバーごと前面表示しかできなかったので。。。
視覚的にカラーで動く表示が目に障って他の物を使う気にはなれず
ずっと使っていきたいと思っていますので、逆に新しい物を作成して
いただけるならまた堂々と?発表していただきたいと思っています。
お忙しい中、本当にありがとうございました。