Macintosh Developer Online (MDOnline)


2002年3月6日発行号 - サンプルコード



昨日、今日と、JavaのSwingアクセラレーション機能のベンチマークを紹介しています。お時間があったら、みなさんの環境でも確かめていただければ、追加で記事を書きたいと思いますのでよろしくお願いします。
このところは食品の不正表示の問題があちらこちらで出てきます。さすがに腹は立つけど、「白ブタを黒ブタと表示し…」は怒りを超えて大笑いしてしまいました。肌は白黒はっきりしているけど、肉が黒かったり白かったりするわけではないですからね。ただ、一般に見えないものは見えないから、ごまかしは可能です。それがどこまでがごまかしかという問題もあり、一点の曇りもいけないのであればマーケティングという活動そのものが犯罪になってしまいます。まあ、だけど、白ブタ黒ブタはさすがに白黒はっきりしているのですけどね。そんなはっきりしたことまでごまかせるのだから、業界ぐるみであることは間違いがないでしょう。今、各社とも、ばれないかどうかビクビクしているに違いありません。
コンピュータの世界ではどうでしょうか。800MHzマシンなのに電源を入れたら500MHzだったということはないにしても、容量として20GBのハードディスクが実際には、18GB強ということもあります。もちろん、1024倍と1000倍との違いがあるのだけど、ちょっと黒ブタ白ブタ的かとも思います。また、最近はなりを潜めていますが、できるシリーズだとか超図解シリーズ系書籍の帯で、「いちばん分かりやすい」とかいった広告文句がありましたけど、これってかなり微妙だと思いますね。もっとも、そうしたエスカレートしやすい戦いは長続きしませんが、結果的に信用を落としているとしたら、出版界全体への影響にもなってしまいます。この手の書籍に限りませんが、やはり言えることは、消費者の信頼をなくしてから慌てるのではなく、きちんと自浄努力を怠らないということじゃないでしょうか。
(新居雅行 msyk@mdonline.jp


Java Watch on the X》5 _ ハードウエアアクセラレータをチェック(2)

前回は、AWTのコンポーネントを使ったアプリケーションでベンチマークをしたが、効果がないという結論であった。今回は、Swingのコンポーネントを使ってテストを行ってみたが、数字の上では効果が現われた。だが、体感上は数値ほどの違いはみられなかったというサンプルを示したい。だが、アクセラレーションの動作がそこそこ見える感じがするので、以下のサンプルをダウンロードして確かめてもらいたい。

 http://mdonline.jp/figs/02/028/SwingAccelTest2.sit

実は前日のプログラムに手を加えているのであるが、JFrameのウインドウに、やはりJPEG画像をたくさん出すということを行っている。そのために、JLabelにImageIconによるアイコンを組み込み、そのJLabelコンポーネントをランダムな位置にランダムな大きさで100個追加した。だから、写真の断片がウインドウ上にずらりと並ぶ感じだ。だが、Swingはだぶるバッファを用いているため、なかなかベンチマークとして意味のあるポイントをどこに見るかは難しいのであるが、JFrameのpaintメソッドに要する時間と、JLabelのpaintメソッドの合計時間あたりを求められるようにしてみた。たとえば、ウインドウを表示するときはもちろんとしても、ウインドウのサイズを変更したときにはpaintメソッドが呼び出されて、JLabelの描画処理を行うことになる。そこで、JFrameにpaintメソッドをオーバーライドし、その中で、super.paint(g);に要した時間を測定してみた。また、100個のJLabelの描画にかかる時間も同様にサブクラスを定義してpaintメソッドをオーバーライドして測定してみた。プログラムの詳細は、ソースを御覧いただきたい。

アクセラレーションを有効にする場合としない場合で、極めて大きな数値の違いが見られた。JFrameのpaintメソッドに要する時間は、有効にすると、100〜200ミリ秒程度だ。ところが無効にすると、4000秒程度になる。もちろん、これは出来過ぎた結果である。なお、いずれの場合も、約80〜90%の時間はJLabelのpaintメソッドで消費している点は違いはなかった。
ただ、アクセラレーションを有効にしても、無効にしても、画面の再描画が始まってから、写真がどっと画面に出て来るまでの時間は、4秒程度と違いはなかった。ここで、コンソールに出てくる情報のタイミングがえらく違っていることに気が付いた。アクセラレーションを有効にした場合、すぐにベンチマーク結果がコンソールに出る。つまり、JFrameのpaintメソッドはすぐに終了するのであるが、描画結果に出るのに時間がかかっているのである。一方、無効にした場合には、ベンチマークの終了、つまりpaintメソッドの終了と同時に画面の再描画が終了する。
ここからは想像であるが、アクセラレーションは、Swingのダブルバッファリングの描画メカニズムを高速化しているのではないだろうか。ただし、そのダブルバッファから、実際のウインドウへの転送という作業に実際に時間がかかっているのか、体感的な違いが出て来ないということになっていると考えられる。そうすると、オフスクリーンでの重たい描画処理をするとなると、大きな違いが出るような感触があるが、機会があればテストをしてみたい。ただ、その一方で、単にアクセラレーションの有効と無効で、描画処理の流れが違うだけということも考えられる。
いずれにしても、アクセラレーションをどう使うのかといったことは一概には決定できそうにないが、Swingを使わないのならオフにしておくのが無難だと思われる。一方、Swingを使うのならオンにするのが基本的には良い結果を期待できるということには変わりない。ただ、やはりAppleからは、どんな場面で有効なのかと言った具体的な情報を示して欲しいところだ。

∽∽∽∽∽∽∽この項、以上∽∽∽∽∽∽∽[新居雅行]∽∽∽∽∽∽∽

カテゴリ:Java, Java Watch on the X


System Configuration frameworkのユーティリティ集を兼ねたサンプルコード

サンプルコードに公開されたMoreSCFは、Mac OS XのSystem Configuration framework(SCF)に関するものだ。SCFにより、ネットワーク設定などを永続的に記録することに加え、ダイナミックに変更を行ないさらには変更を他のアプリケーションに通知するなどといった仕組みが機能している。ネットワーク設定など、Mac OS Xでは広くSCFの仕組みが利用されている。アプリケーションからもSCFの利用は可能ではあるが、用意されているAPIはローレベルのものが中心となっている。そこで、MoreSCFは他のMoreシリーズのサンプルプログラムと同様、プログラムのサンプルであると同時に、サブルーチン集的に利用できるようにもなっている。C言語のソースとヘッダがあるが、それらを使ってまとまったプログラムもあってProject BuilderおよびCode Warriorのプロジェクトファイルもある。なお、各関数の使い方はヘッダにあるが、ソース側もコメントがしっかり付けられているので、いずれにしても参考になる内容だろう。フレームワークの理解などが必要なサンプルでもあるのだが、ドキュメントだけでは具体的な動きまでは想像しにくいかもしれない。SCFに関しては最初のサンプルとなるので、Mac OS Xのシステム設定関連の機能を利用したい場合には貴重な情報になるだろう。また、ダイナミックストアの内容をダンプするようなコマンドのソースもあるなど、いずれにしても、SCF利用には要チェックなサンプルだ。

関連リンク:MoreSCF 1.0b1
カテゴリ:ネットワーク, Mac OS X


Mac OS Xのコンテキストメニュープラグインのサンプルコード

Mac OS Xでのコンテキストメニュープラグインのサンプルコードが掲載された。Finderでメニューが追加されるのが確認できる。コンパイルをすると、インストールまでするので、動作はすぐに分かるだろう。サンプルコードの機能は特に実用的なものではない。いずれにしても、自分でコンテキストメニューを作りたい場合には、このサンプルコードを修正して作成するのがよさそうだ。なお、付属文書にある解説はまず目を通そう。コンテキストメニューの作成に関する解説は、ヘッダファイルのMenus.hに記載されているとしている。このヘッダは、HIToolboxフレームワークにふくまれているもので、末尾の方にコンテキストメニューに関する記述がある。Core Foundationの知識などが必要になるが、Menus.hをチェックしてから、このサンプルプログラムをチェックすれば、コンテキストメニューの開発に取りかかることも可能だろう。

関連リンク:SampleCMPlugIn 1.0
カテゴリ:ユーザインタフェース, Mac OS X


KBase》QuickTimeのAppleScriptサンプルがMac OS X 10.1に対応

QuickTime Playerで使えるAppleScript集が以前より配付されていたが、そのMac OS X 10.1対応版が公開されている。QuickTime Pro上で稼働するQuickTime Playerは、多機能なAppleScript対応を果たしているが、ムービーの編集などを含めて、制作上の効率化に貢献する面は多いだろう。そうした機能の実用的な使い方を示すサンプルとして、配付されているものは役に立つ。40以上のサンプルプログラムが含まれている。また、なかにはそのまま、あるいは少しの修正で、実際の業務に使えるようなものも含まれるかもしれない。QuickTimeをベースに制作などをしている場合には、プログラムをするしないにかかわらず、サンプルプログラムをチェックしておくと損はないだろう。

関連リンク:QuickTime Pro: AppleScripts for Mac OS 10.1
カテゴリ:QuickTime, AppleScript


KBase》QuickTimeをWebで使うためのJavaScript集

QuickTimeのコンテンツをWebベースで配信する場合の、Webページに記載するJavaScriptについての解説文書が掲載されている。JavaScriptを使って、ブラウザやOSを判断する方法、リンクやEMBEDタグの利用方法、QuickTimeがインストールされているかを判断する方法などのプログラムが掲載されているので、そのプログラムをもとに、実際にHTMLファイル等にコピー&ペーストしてある程度は使えるレベルのものが紹介されている。WebサイトでQuickTimeコンテンツを配信するためには欠かせない情報となるだろう。

関連リンク:QuickTime: How to Incorporate JavaScript
カテゴリ:Knowledge Base(旧TIL), QuickTime