システムの情報をFirefoxのツールバー上に表示するアドオン「システムモニター」のバージョン0.4.1をリリースしました。以下のリンク先からダウンロードできます。
前のバージョンからの主な変更点は以下の通りです。
Web APIの利用形式は前のバージョンと同様ですが、このバージョンでは以下の点が改良されました。
メモリの使用量を監視する場合は、system.addMonitorの第1引数に「memory-usage」を指定します。この時、リスナには以下のプロパティを持つオブジェクトが渡されます。
また、以前のバージョンでは登録したリスナは明示的にsystem.removeMonitorで登録を解除するまで情報を受け取り続ける使用でしたが、バージョン0.4.1からは、ページがアンロードされると自動的にリスナの登録も解除されるようになりました。
以下は、メモリの使用量を監視する例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
var container = document.getElementById("system-monitor-demo"); if (!window.system || !window.system.addMonitor) { container.innerHTML = "システムモニターがインストールされていません"; container.style.color = "red"; } else { container.innerHTML = "<div><canvas id='system-monitor' width='300' height='60'></canvas>"+ "<br /><span id='system-monitor-console'></span></div>"; var width = 300; var interval = 1000; var MemoryArray = []; var arrayLength = width / 2; while (MemoryArray.length < arrayLength) { MemoryArray.push(undefined); } // リスナとして登録する関数には、メモリの情報を保持したオブジェクトが渡される。 function onMonitor(aUsage) { var console = document.getElementById("system-monitor-console"); console.textContent = parseInt(aUsage.used/1024/1024)+'MiB / '+parseInt(aUsage.total/1024/1024)+'MiB'; MemoryArray.shift(); MemoryArray.push(aUsage.used / aUsage.total); var canvasElement = document.getElementById("system-monitor"); var context = canvasElement.getContext("2d") var y = canvasElement.height; var x = 0; context.fillStyle = "black"; context.fillRect(0, 0, canvasElement.width, canvasElement.height); context.save(); MemoryArray.forEach(function(aUsage) { var y_from = canvasElement.height; var y_to = y_from; if (aUsage == undefined) { drawLine(context, "black", x, y_from, 0); } else { y_to = y_to - (y * aUsage); y_from = drawLine(context, "aqua", x, y_from, y_to); drawLine(context, "black", x, y_from, y_to); } x = x + 2; }, this); context.restore(); } function drawLine(aContext, aColor, aX, aBeginY, aEndY) { aContext.beginPath(); aContext.strokeStyle = aColor; aContext.lineWidth = 1.0; aContext.lineCap = "square"; aContext.moveTo(aX, aBeginY); aContext.lineTo(aX, aEndY); aContext.closePath(); aContext.stroke(); return aEndY - 1; } // リスナを登録する。 window.system.addMonitor("memory-usage", onMonitor, interval); } |
システムモニター0.4.1では、前述したリスナ登録の自動的な解除を実現するためにいくつかの実装が加わりました。しかしながら、この機能が依存しているGecko側の機能についてGecko 1.9.1とGecko 1.9.2の間で互換性が無いため、Gecko 1.9.2のSDKを用いてビルドされたシステムモニターのバイナリはGecko 1.9.1では動作しなくなりました。よって、システムモニター0.4.1からはGecko 1.9.1ベースのFirefox 3.5(Thunderbird 3.0)はサポート対象外となっています。
どうしてもFirefox 3.5(Thunderbird 3.0)でシステムモニター0.4.1を利用したい場合は、Gecko 1.9.1のSDKを使ってソースからバイナリをビルドし直す必要があります。また、独自に変更を加える場合もバイナリをビルドし直さなくてはなりません。以下に、Windows、LinuxおよびMac OS Xの各環境でのビルド手順を解説します。
リリース版のシステムモニター0.4.1のLinux用バイナリは、32bit版、64bit版のいずれもUbuntu 10.04LTS上でビルドしています。Ubuntu 10.04LTSでのビルド手順は以下の通りです。
必要なパッケージをインストールします。
$ sudo aptitude install automake libtool xulrunner-1.9.2-dev libgtop2-dev zip
システムモニターのソースをダウンロードして展開します。
$ wget http://git.clear-code.com/xul/extensions/system-monitor/snapshot/system-monitor-0.4.1.tar.bz2 $ tar xvf system-monitor-0.4.1.tar.bz2
作業ディレクトリに入ってビルドします。
$ cd system-monitor-0.4.1 $ ./automake.sh $ ./configure $ make
これで、作業ディレクトリ直下にインストール用のパッケージ「system-monitor-0.4.1.xpi」が生成されます。
基本的にはUbuntu 10.04LTSの場合と同じですが、Gecko SDK(XULRunner SDK)のバージョンを1.9.1にする点が異なります。必要なパッケージの準備の際に、「xulrunner-1.9.2-dev」ではなく「xulrunner-1.9.1-dev」をインストールして下さい。
$ sudo aptitude install automake libtool xulrunner-1.9.1-dev libgtop2-dev zip
それ以外の手順はUbuntu 10.04LTSの場合と同一です。
リリース版のシステムモニター0.4.1のWindows(Win32)用バイナリは、64bit版Windows 7でビルドしています。Windowsでのビルド手順は以下の通りです。
Cygwin Bash Shellを起動し、作業ディレクトリに入ってビルドします。例えば作業ディレクトリが~/system-monitor-0.4.1であれば、以下の通りです。
$ cd ~/system-monitor-0.4.1 $ ./autogen.sh $ ./configure --with-libxul-sdk=/cygdrive/c/xulrunner $ make
このビルド操作はエラーで停止しますので、続けて、VC++でバイナリをビルドします。(Cygwin Bash Shellはそのまま置いておいてください。)
XPIファイルを作成します。Cygwin Bash Shellに戻り、以下のコマンドを実行します。
$ make xpi
これで、作業ディレクトリ直下にインストール用のパッケージ「system-monitor-0.4.1.xpi」が生成されます。
c:\xulrunner 以外の位置にGeckoのSDKを置く場合は、SystemMonitor.vcproj の内容を修正する必要があります。VC++で SystemMonitor.vcproj を開いてプロジェクトのプロパティを編集するか、SystemMonitor.vcproj をテキストエディタで開いて c:\xulrunner を指している箇所を置換して下さい。
リリース版のシステムモニター0.4.1のMac OS X(Intelプロセッサ・32bit)用バイナリは、Mac OS X 10.6.4 Snow Leopardでビルドしています。
アプリケーション→ユーティリティ→ターミナルを起動し、作業ディレクトリに入ってビルドします。例えば作業ディレクトリが~/system-monitor-0.4.1であれば、以下の通りです。
$ cd ~/system-monitor-0.4.1 $ ./autogen.sh $ ./configure --with-libxul-sdk=/opt/xulrunner-sdk CXXFLAGS="-arch i386" $ make
これで、作業ディレクトリ直下にインストール用のパッケージ「system-monitor-0.4.1.xpi」が生成されます。
Snow Leopardでは初期状態では64bit用のバイナリが作成されてしまいます。./configureの際に明示的に CXXFLAGS="-arch i386" と指定することで、32bit用のバイナリを作成できます。
ビルドに使用するGecko SDKは ./configure の --with-libxul-sdk オプションで指定したパスにある物が使われます。パスをその都度明示的に指定すれば、Gecko 1.9.1用とGecko 1.9.2用のそれぞれのバイナリを同一環境上でビルドすることもできます。
今回、システムの情報をFirefoxのツールバー上に表示するアドオン「システムモニター」のバージョン0.4.1をリリースしました。また、Firefox 3.5向けにソースコードからバイナリをビルドする手順を紹介しました。
システムの情報をFirefoxのツールバー上に表示するアドオン「システムモニター」のバージョン0.5をリリースしました。以下のリンク先からダウンロードできます。
前のバージョンからの主な変更点は以下の通りです。
マルチCPUに対応するにあたって、グラフの表示形式を追加しました。これらの表示様式は設定ダイアログで切り替える事ができます。
重ね合わせ表示(既定の表示スタイル)は、それぞれのCPUについて下端が0%・上端が100%となるグラフを表示し、それらを全て重ね合わせるモードです。
積み上げ表示は、グラフの高さをCPUの個数分で割って、それぞれを個々のCPUの使用率の0〜100%に割り当てるモードです。
全CPUの使用率の合計を表示するよう指定した場合、旧バージョンと同じ表示になります。
また、棒グラフの代わりに折れ線グラフでも表示できるようになりました。
ただ、ツールバーに表示するUIでは表示領域が限られますので、CPUの数が増えてくると見にくくなるかもしれません。次のバージョンではこのあたりの問題についてうまい解決策を考えたい所です。
Web APIの利用形式は前のバージョンと同様ですが、このバージョンでは新たに、system.addMonitorの第1引数として「cpu-usages」と「cpu-times」を受け付けるようになりました。「cpu-usage」および「cpu-time」を使用した場合は今まで通り全CPUの使用率の合計値がリスナに渡されますが、「cpu-usages」および「cpu-times」を使用した場合は、個々のCPUごとの値が格納された配列が渡されます。
以下は、CPUごとの使用率を監視する例です。マルチCPUの環境では、グラフが重ねて描画される事をご確認いただけると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
var container = document.getElementById("system-monitor-multi-cpu-demo"); if (!window.system || !window.system.addMonitor) { container.innerHTML = "システムモニターがインストールされていません"; container.style.color = "red"; } else { container.innerHTML = "<div><canvas id='system-monitor-multi-cpu' width='300' height='60'></canvas>"+ "<br /><span id='system-monitor-multi-cpu-console'></span></div>"; var width = 300; var interval = 1000; var CPUArray = []; var arrayLength = width / 2; while (CPUArray.length < arrayLength) { CPUArray.push(undefined); } function onMonitor(aUsages) { var console = document.getElementById("system-monitor-multi-cpu-console"); console.textContent = aUsages.map(function(aUsage) { return aUsage+'%'; }).join(' / '); CPUArray.shift(); CPUArray.push(aUsages); var canvasElement = document.getElementById("system-monitor-multi-cpu"); var context = canvasElement.getContext("2d") var y = canvasElement.height; var x = 0; context.fillStyle = "black"; context.fillRect(0, 0, canvasElement.width, canvasElement.height); context.save(); context.globalAlpha = 1 / aUsages.length; CPUArray.forEach(function(aUsages) { if (aUsages == undefined) { drawLine(context, "black", x, y, 0); } else { aUsages.forEach(function(aUsage) { drawLine(context, "lime", x, y, y - (y * aUsage)); }); } x = x + 2; }, this); context.globalAlpha = 1; context.restore(); } function drawLine(aContext, aColor, aX, aBeginY, aEndY) { aContext.beginPath(); aContext.strokeStyle = aColor; aContext.lineWidth = 1.0; aContext.lineCap = "square"; aContext.moveTo(aX, aBeginY); aContext.lineTo(aX, aEndY); aContext.closePath(); aContext.stroke(); } // リスナを登録する。 window.system.addMonitor("cpu-usages", onMonitor, interval); } |
るりまサーチでも使っている全文検索エンジンgroongaとその周辺技術についての勉強会が開催されます。
現時点でもうすでに定員(50名)オーバーの98名が登録していますが、現在、参加人数を増やせるように調整中なので、諦めずに早めに登録しておくことをオススメします。参加人数が増えたときに定員に入れるかもしれませんよ。
内容は以下の通り、現在のgroonga関連のことが網羅できる内容になっています。
1ヶ月くらい先ですが、今から楽しみですね。ぐるぐる。
2010年8月31日付けで第三者割当増資を実施しました。
割当先のコスモエア株式会社、有限会社未来検索ブラジル、ミラクル・リナックス株式会社の3社とはこれまで以上に連携を強め、さらなる事業展開を積極的に実施していきます。