|
HMDT - Back Number / May, 2001 |
May, 2001
HMDT は、いつのまにやら、50,000 Hit を達成しました。う〜ん、多いってわけじゃないけど、そこそこはあるよね。 開発情報のサイト(しかもニュースはほとんどないし)なんで、Hit 数はかせげないだろうと、あまり気にしてないんですが、やっぱりうれしい。えへへ。でも、Hit 数より、サイトを始めた 1 年ほど前に比べると、自分のプログミング技術がずっと伸びてることのほうが、うれしいかな。
Cocoa 101、ふたたび NSTableView の話。今回は、テーブルにアイコンつきテキストを埋め込む話です。
実行すると、こんな感じのテーブルができあがります。 う〜ん、テーブルを使って、いろいろできるようになったな。
Takaho A Endo さんが、「Java de Cocoa」を公開していました。その名の通り、Java を使って、Cocoa アプリケーションを作る試みです。 Mac OS X では、主要言語として Java を採用する、といいながら、けっこう盛り上がっていませんよね?そんななかで、興味深いページです。 個人的には、Introduction のページが、Endo さんの思いがにじみでて、とっても面白いかなーっ、と。
Cocoa 101、ちょっと話題を変えて、NSString の話です。
ファイルとか、長めの文章を表す NSString があったとき、1 行づつ substring を取り出す Tips です。でも、とっても基本的な操作だから、もっと効率のいい方法が用意されているのかもしれませんがね。
Cocoa 101、きのうの NSTableView の話の続きです。
きのうのコードでは、テーブルの中にボタンを埋め込んだんだけど、動かしてみると、実はボタンが機能していないことが分かるはずです。だめじゃん。と、いうわけで、それを機能するようにさせたのが、今日の話です。
Cocoa 101、NSTableView に関してです。基本的なところと、テーブルにボタンを入れる方法。これ、ずっと前からやりたかったんだよね。ボタンとかコンボボックスとかをテーブルにいれるってやつ。いままでは、きちんと理解できなかったのが、どうやら自分の実力が追い付いてきて、書けるようになりました。こうやて、少しづつ API が身に付いていくのがうれしい。
みなさん、御存じの通り Apple の直営店がオープンしたよね。さっそく行ってきたので、レポートを書いたよ。開発ネタじゃないけど、たまにはいいでしょ。 ひとことでいうと、けっこういい感じだったよ。観光にいくことにあったら、ついでにお勧めです。 The report of brand new Apple Store
Apple から NSToolbar のサンプルが公開されたよ。なにはさておき、とってくるべし!ついでに、ビルドして実行するべし!で、実行してみると、こんな感じのウィンドウがでてきます。 なるほど。たしかに、ツールバーができてるな。そういわれてみると、NSToolbar の API ってどうなってるんだ?と、思い、ドキュメントを見てみると、、、ないじゃん!まだ、ドキュメントが用意されてないよ。となると、このサンプルを皮切りに、調べていくしかないわけだね。 Interface Builder で、.nib を見てみると、ウィンドウにはツールバーは張り付けてないです。そりゃま、Interface Builder にまだ用意されてないからな。だから、コードの中で on the fly で作ってるんだな。 ツールバーには、左から、フォント関連、セパレータ、テキストの色付け、プリンタってならんでるけど、このうちセパレータとプリンタはデフォルトで用意してあるんだ。つまり、プリンタの画像はこちらで用意しなくていいらしいぞ。絵の下手なデベロッパにはうれしいね。<なんか違うぞ
ちょっと思い立って、File System を調べてみた。まず、簡単なことから調べてみる。Finder を立ち上げると、一番下の階層に、デバイスと Network が並ぶよね。これらと、File Tree との関係は、ブートドライブは root '/' に相当する。Network は '/Network'、他のデバイスは、'/Volumes' の下に現れる。なるほど、なるほど、、、 うん、待てよ?ひとつ疑問がある。ブートドライブの名前はどこで決まるんだ?デフォルトでは 'Mac OS X' になっていて、Finder から変更することが可能だ。root は名前の付いたディレクトリじゃないから、どこかのファイルにその名前が書いてあるんだよな、きっと、、、どれだ?見つかんねーぞ? 普通、UNIX では、root に名前付いてないよね?(自信無し)と、いうことは、Finder の独自の仕様なのかな?うーん、よくわかんない。
10 日近くぼちぼちやってた、Teapot in Dock なんだけど、いったんリリースして、ひとまず終わりにするよ。 えっと、整理すると、まず目的は、
と、いうこと。そのために、最初に dockling を使うことを考えたんだ。だけど、
ってことが分かった。そこで、次に glReadPixels を使うことを考えた。glReadPixels を使ってビットマップを取り出し、それを dockling に描くんだ。だけど、
っていうことが分かった(こればっか)。つまり、glReadPixels を使うには、ウィンドウを表示して、実際に OpenGL の描画を画面に表示させなくてはいけないみたいなんだ。隠していると、うまくいかない。したがって、dockling として使うのは、この時点で無理だと分かる。 と、いうわけで、結局できあがったのは、NSOpenGLView を持つアプリケーションを作り、アイコンとしてその画像を設定する、っていうやつだ。 ま、これでとりあえず、アイコンが Dock の中をぐるぐる回っている。ただ、まったく同じ画像がウィンドウの中で動いているので、あまりかっこよくない。Teapot の画像は、Apple が提供している、NSGLTeapot を流用させてもらったよ。 NSOpenGLView を使わないで、OpenGL のビットマップにアクセスするには、OpenGL.framework にある CGL 関数群か、Core Graphics を直接使う必要があるようだ。でも、それわかんなかったよ。いまはとりあえず、あきらめて、Quartz に対する知識が増えたら、また挑戦してみることとしよう。 Teapot in Dock (135 Kbyte)
Cocoa 101、NSImage に関する Tips。
最近は見られなくなったけど、むかしの Expo とかでは、Jobs が Mac OS X の堅牢製をデモするために Bomb App を使っていたよね。あの、立ち上げると爆弾の絵が表示され、ボタンを押すとカウントダウンして、クラッシュするやつだ。アプリケーションはクラッシュするけれど、OS はだいじょうぶだぜ!っていうことをデモするためのものだった。 で、Mac OS X の正式版になって、Developer Tool をインストールすると、BombApp がインストールされるんだ。/Developer/Applications/Extras/BombApp にあるんだよ。だいぶバージョンアップを重ねて、洗練された(?)爆発を見せてくれる。 'Light it!' ボタンを押すと、導火線に火がつき、だんだん火が爆弾にせまっていって爆発するんだ。その後、「アプリケーションは異常終了したぜっ!」というメッセージとともに終了するんだ。 導火線が燃えていくアニメーションは、実は Quick Time ムービーなんだ。つまり、このアプリは QT Movie を再生しているわけ。ふーん、と思ってその再生しているムービーを探してみた。BombApp.app/Contents/Resources/Bomb.mov がそれだ。 ダブルクリックすると、とうぜん Quick Time Player が起動してムービーを見ることができるんだ。導火線が短くなっていって、爆発、、、すると、なんと、Quick Time Player が異常終了した!この爆弾ムービーは、ムービー自体が爆発能力を持っている(爆)!<ほんとに(爆)だ! ということは、なにか?BombApp では、わざと落ちることをしなくても、ムービーを再生するだけで、無事に(?)異常終了してるのか。うーむ、やるな。というか、これは Quick Time のバグじゃないの?そんなムービーを再生するだけで、落ちることがあっていいのか?自分のバグを利用して、OS の堅牢製を示すとは、すごい自虐的なギャグじゃないか。<ギャグじゃないって。なんか、むかしの Apple らしくて、かっこいいぞ!
Cocoa 101、ちょっととりとめがないけど、いろいろな Tips を。
dockling は、Dockling server ってプロセスを必要とするんだけど、dockling の中で、OpenGL の関数を呼ぶと、Dockling server がクラッシュする〜。他にも、NSBeep() を呼んだりすると、クラッシュする〜。 どうやら、呼んではいけない関数がいっぱいあるみたい。まだ undocumented だからしょうがないよな。現時点では、dockling を作るのはかなり気をつけないといけないなー。
きのう調べた手法で、OpenGL のビットマップを取り出して、Dock に描いてみました。以下が実行したときの画面だ! 手順としては、
という、方法を使っています。これで、アプリケーションアイコンに OpenGL で描いた画像を設定できるぜ!ただし、AppKit と OpenGL では座標軸が違うので、ひっくり返っているぞ!コンバートしてやらにゃあ。 ただ、お気付きの方もいるでしょうが、これだとウィンドウを最小化して Dock に入れたときは、まだ白ウィンドウのままです。そのためには、きのう書いたように、Core Graphics の API を調べなきゃいけないんだよな、きっと。でも、Movie Player を縮小化したときはちゃんと画像が入るから、Quick Time ではできているんだよな。それなら、OpenGL でもできるような気がするんだけど、、、 ソースコードは、また明日公開します。じゃ!
先日、dockling で OpenGL を使おうとしたら、失敗した、って話を書いたよね。その後、Ogawa さんからメールをいただきました。Thanks! やっぱり書いてみるものだ。それによると、Omnigroup のメーリングリストに出てきた話題で、似たような話がある、とのことです。 http://www.omnigroup.com/mailman/archive/macosx-dev/2001-May/014365.html 読んでみると、ふむふむ、なるほど、、、要約しますと、
ということらしい。 えっと、ということは、まず Dock に表示したり、dockling で使うには、そのままではだめであると。ビットマップを取り出して、NSImage で描いてやらなくてはいけない。じゃ、そのビットマップはどうやって取り出すか?ひとつの方法は、glReadPixels() を使う。これは、GL の画像のビットマップを取り出す、OpenGL の API だ。それとは別に、Core Graphics Services から直接取り出す、ということが考えられる。これができれば、いろいろ応用が効くから面白いんだよね。それができるかどうかは、、、うーん、分からんぞ!もうちょっと調べてみる。
k_suka さんの「なんということはない話」で、アイコンにアニメーションをさせるサンプルプログラムが公開されていました。 アプリケーションにアイコンを設定するには、NSApplication の setApplicationIconImage: を使えばいいよね。このアイコンが Dock に表示されます、と。だから、このメソッドを定期的に呼び出せば、アニメーションになるよ、というのが話のひとつ。 そして、もうひとつの話は、NSImage にどうすれば、時間ごとに異なった描画をさせることができるか?っていう話です。アニメーションのためには、毎時ごとに違った画像を描く必要があるわけですよね。それを実現するために、NSCustomImageRep を使っています。このクラスの initWithDrawSelector:: を使っています。これを使えば、画像を描くときに指定した selector を呼び出すってことになるわけです。 サンプルとして、Dock 内で動くアナログ時計が作られています。ビットマップではなく、NSBezierPath を用いて描いているところが、なかなかプログラマ冥利につきてうれしいですね(?)。 参考
Cocoa 101、きょうはフォントパネルについてだ。
御察しの通り(?)、これらはこないだアップデートした、Faded Words 1.1 で使いました。実際の使用例を見たい人は、Faded Words 1.1 のソースコードを見てね。
スクリーンセイバーモジュール、Faded Words をバージョンアップした、Faded Words 1.1 をリリースしました。 Faded Words は、画面に好きな文字を浮かび上がらせるスクリーンモジュールです。1.1 では、フォント選択機能がつきました。自分の好きなフォントをつけることができます。 Faded Words 1.1 ダウンロード 一ヶ月ぶりのアップデートだにゃー。
いま流行り(?)の dockling に挑戦してみた。ちなみに、dockling とは、Dock の中で動いたり、メニューを出したりするやつね。 Template を取ってきて、試しに作ってみた。これは簡単にできたんだよ。で、どーしよーかなー、って思って、Open GL を dockling の中で動かしてみようとした。GL で描いたオブジェクトが Dock の中で回転してたらかっこいいでしょ? やってみたんだけど、これがどうにもこうにも動かない。具体的には NSOpenGLView を貼付けてみたんだけど、GL 系の描画がぜんぜんできないんだよ。dockling は、まだドキュメントが公開されてない(よね?)から、仕様でできないのか、コードがミスっているのか分からないし。 数時間、格闘してギブアップ。だれか、成功例を知っている人がいたら、教えて下さい。
Cocoa 101、アプリケーションのメインメニューとフォントメニューに関して追加しました。
フォントメニューって簡単に追加できるし、したがってフォントパネルも簡単に表示できるんだー。でも、あのフォントパネルってあんまりかっこよくないよね。
らくたじーのさんからメールをいただいたんですが、CPU の温度を測る docling、CPU Thermometer が公開されました。Dock の中に常駐して、CPU の温度を測ってくれるソフトウェアです。 ソースコードも公開されています。注目するところは、温度を知るために G3 のレジスタを読みにいくところ。Cocoa から Mach を呼び出すサンプルとなります。 また、「CPU の種別と温度管理」という項で、G3 チップがどのようにして温度情報を提供しているか、ということの解説が読めます。詳しく書いてあるので、興味のある人は必読ですぜ。 参考:
ふっか〜つ!お久しぶり!10 日ぶりぐらいの更新かな。 ちょっと時期外れのバケーションを取っていました。西海岸を車でグルグルグルーっと走り回ってました。10 日で 2,000 mile ぐらい走ったかなぁ。なんか、遊び尽くした、って感じ。 また、ばりばり、更新しますね〜。 |
|
Home | Link | Download | Back Number | Speciall Issue
|