home link download back number special issue

HMDT - Back Number / May, 2001


May, 2001


May 30 - 50,000 Hit
keywords: I got it!

HMDT は、いつのまにやら、50,000 Hit を達成しました。う〜ん、多いってわけじゃないけど、そこそこはあるよね。

開発情報のサイト(しかもニュースはほとんどないし)なんで、Hit 数はかせげないだろうと、あまり気にしてないんですが、やっぱりうれしい。えへへ。でも、Hit 数より、サイトを始めた 1 年ほど前に比べると、自分のプログミング技術がずっと伸びてることのほうが、うれしいかな。

May 28 - Cocoa 101、テーブルにアイコンつきテキストを埋め込む
keywords: Cocoa, NSCell, NSTableView

Cocoa 101、ふたたび NSTableView の話。今回は、テーブルにアイコンつきテキストを埋め込む話です。

  • NSCell - セルに画像とテキストを描く, IconedCell class
  • NSTableView - NSTableView にアイコンつきテキストを埋め込む

実行すると、こんな感じのテーブルができあがります。

う〜ん、テーブルを使って、いろいろできるようになったな。

May 27 - Java de Cocoa
keywords: Java, Cocoa

Takaho A Endo さんが、「Java de Cocoa」を公開していました。その名の通り、Java を使って、Cocoa アプリケーションを作る試みです。

Mac OS X では、主要言語として Java を採用する、といいながら、けっこう盛り上がっていませんよね?そんななかで、興味深いページです。

個人的には、Introduction のページが、Endo さんの思いがにじみでて、とっても面白いかなーっ、と。

参考
Java de Cocoa

May 26 - Cocoa 101, NSString から 1 行づつ substring を取り出す
keywords: setObjectValue

Cocoa 101、ちょっと話題を変えて、NSString の話です。

  • 1 行づつ substring を取り出す

ファイルとか、長めの文章を表す NSString があったとき、1 行づつ substring を取り出す Tips です。でも、とっても基本的な操作だから、もっと効率のいい方法が用意されているのかもしれませんがね。

May 22 - Cocoa 101, NSTableView の続き
keywords: setObjectValue

Cocoa 101、きのうの NSTableView の話の続きです。

  • NSTableView の中のボタンを機能させる

きのうのコードでは、テーブルの中にボタンを埋め込んだんだけど、動かしてみると、実はボタンが機能していないことが分かるはずです。だめじゃん。と、いうわけで、それを機能するようにさせたのが、今日の話です。

May 21 - Cocoa 101, NSTableView
keywords: NSTableView, NSButtonCell

Cocoa 101、NSTableView に関してです。基本的なところと、テーブルにボタンを入れる方法。これ、ずっと前からやりたかったんだよね。ボタンとかコンボボックスとかをテーブルにいれるってやつ。いままでは、きちんと理解できなかったのが、どうやら自分の実力が追い付いてきて、書けるようになりました。こうやて、少しづつ API が身に付いていくのがうれしい。

  • NSTableView を Interface Builder を使って作る
  • NSTableView に値を設定する
  • NSTableView に NSButton を入れる

May 19 - Apple 直営店レポート
keywords: Apple store, Glendale Galleria

みなさん、御存じの通り Apple の直営店がオープンしたよね。さっそく行ってきたので、レポートを書いたよ。開発ネタじゃないけど、たまにはいいでしょ。

ひとことでいうと、けっこういい感じだったよ。観光にいくことにあったら、ついでにお勧めです。

The report of brand new Apple Store

May 17 - ツールバーのサンプル
keywords: NSToolbar

Apple から NSToolbar のサンプルが公開されたよ。なにはさておき、とってくるべし!ついでに、ビルドして実行するべし!で、実行してみると、こんな感じのウィンドウがでてきます。

なるほど。たしかに、ツールバーができてるな。そういわれてみると、NSToolbar の API ってどうなってるんだ?と、思い、ドキュメントを見てみると、、、ないじゃん!まだ、ドキュメントが用意されてないよ。となると、このサンプルを皮切りに、調べていくしかないわけだね。

Interface Builder で、.nib を見てみると、ウィンドウにはツールバーは張り付けてないです。そりゃま、Interface Builder にまだ用意されてないからな。だから、コードの中で on the fly で作ってるんだな。

ツールバーには、左から、フォント関連、セパレータ、テキストの色付け、プリンタってならんでるけど、このうちセパレータとプリンタはデフォルトで用意してあるんだ。つまり、プリンタの画像はこちらで用意しなくていいらしいぞ。絵の下手なデベロッパにはうれしいね。<なんか違うぞ

May 16 - root の名前
keywords: File system, root

ちょっと思い立って、File System を調べてみた。まず、簡単なことから調べてみる。Finder を立ち上げると、一番下の階層に、デバイスと Network が並ぶよね。これらと、File Tree との関係は、ブートドライブは root '/' に相当する。Network は '/Network'、他のデバイスは、'/Volumes' の下に現れる。なるほど、なるほど、、、

うん、待てよ?ひとつ疑問がある。ブートドライブの名前はどこで決まるんだ?デフォルトでは 'Mac OS X' になっていて、Finder から変更することが可能だ。root は名前の付いたディレクトリじゃないから、どこかのファイルにその名前が書いてあるんだよな、きっと、、、どれだ?見つかんねーぞ?

普通、UNIX では、root に名前付いてないよね?(自信無し)と、いうことは、Finder の独自の仕様なのかな?うーん、よくわかんない。

May 15 - Teapot in Dock release
keywords: OpenGL, Dock

10 日近くぼちぼちやってた、Teapot in Dock なんだけど、いったんリリースして、ひとまず終わりにするよ。

えっと、整理すると、まず目的は、

  • Dock の中で、OpenGL で描いた絵がぐるぐら回ってたら、かっこいいじゃない?

と、いうこと。そのために、最初に dockling を使うことを考えたんだ。だけど、

  • OpenGL は、AppKit をスルーして、直接 Core Graphics を呼ぶらしく、dockling に表示することができないようだ

ってことが分かった。そこで、次に glReadPixels を使うことを考えた。glReadPixels を使ってビットマップを取り出し、それを dockling に描くんだ。だけど、

  • glReadPixels を使ってビットマップとして取り出すには、実際に画面に描かれていなくはならないようだ

っていうことが分かった(こればっか)。つまり、glReadPixels を使うには、ウィンドウを表示して、実際に OpenGL の描画を画面に表示させなくてはいけないみたいなんだ。隠していると、うまくいかない。したがって、dockling として使うのは、この時点で無理だと分かる。

と、いうわけで、結局できあがったのは、NSOpenGLView を持つアプリケーションを作り、アイコンとしてその画像を設定する、っていうやつだ。

ま、これでとりあえず、アイコンが Dock の中をぐるぐる回っている。ただ、まったく同じ画像がウィンドウの中で動いているので、あまりかっこよくない。Teapot の画像は、Apple が提供している、NSGLTeapot を流用させてもらったよ。

NSOpenGLView を使わないで、OpenGL のビットマップにアクセスするには、OpenGL.framework にある CGL 関数群か、Core Graphics を直接使う必要があるようだ。でも、それわかんなかったよ。いまはとりあえず、あきらめて、Quartz に対する知識が増えたら、また挑戦してみることとしよう。

Teapot in Dock (135 Kbyte)

May 14 - Cocoa 101, Image について少し
keywords: NSImage as TIFF, NSCustomImageRep

Cocoa 101、NSImage に関する Tips。

  • NSImage - TIFF で保存する
  • NSCustomImageRep - NSImage の描画ルーチンを自分で設定する

May 13 - BombApp の技術的考察(大げさ)
keywords: BombApp, System error

最近は見られなくなったけど、むかしの 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 らしくて、かっこいいぞ!

May 13 - Cocoa 101、いろいろ
keywords: dockling, Dockling server

Cocoa 101、ちょっととりとめがないけど、いろいろな Tips を。

  • AppKit Functions - 警告音をならす
  • Project Builder Miscs - Group や Target の名前を変える
  • Foundation Functions - ホームディレクトリを取得する
  • Miscs - ホームディレクトリの下のファイルへのパスをつくる

May 12 - Dockling srever crashed
keywords: dockling, Dockling server

dockling は、Dockling server ってプロセスを必要とするんだけど、dockling の中で、OpenGL の関数を呼ぶと、Dockling server がクラッシュする〜。他にも、NSBeep() を呼んだりすると、クラッシュする〜。

どうやら、呼んではいけない関数がいっぱいあるみたい。まだ undocumented だからしょうがないよな。現時点では、dockling を作るのはかなり気をつけないといけないなー。

May 10 - Teapot in Dock
keywords: NSGLTeapot, Dock, glReadPixels

きのう調べた手法で、OpenGL のビットマップを取り出して、Dock に描いてみました。以下が実行したときの画面だ!

手順としては、

  • glReadPixels() を使ってビットマップを取り出す
  • NSBitmageImageRep をビットマップから NSImage を作る
  • NSApplication にアイコンを設定する

という、方法を使っています。これで、アプリケーションアイコンに OpenGL で描いた画像を設定できるぜ!ただし、AppKit と OpenGL では座標軸が違うので、ひっくり返っているぞ!コンバートしてやらにゃあ。

ただ、お気付きの方もいるでしょうが、これだとウィンドウを最小化して Dock に入れたときは、まだ白ウィンドウのままです。そのためには、きのう書いたように、Core Graphics の API を調べなきゃいけないんだよな、きっと。でも、Movie Player を縮小化したときはちゃんと画像が入るから、Quick Time ではできているんだよな。それなら、OpenGL でもできるような気がするんだけど、、、

ソースコードは、また明日公開します。じゃ!

May 9 - OpenGL in Dock のその後
keywords: OpenGL, dockling, Core Graphics

先日、dockling で OpenGL を使おうとしたら、失敗した、って話を書いたよね。その後、Ogawa さんからメールをいただきました。Thanks! やっぱり書いてみるものだ。それによると、Omnigroup のメーリングリストに出てきた話題で、似たような話がある、とのことです。

http://www.omnigroup.com/mailman/archive/macosx-dev/2001-May/014365.html

読んでみると、ふむふむ、なるほど、、、要約しますと、

  • OpenGL で書かれた画像を、-[NSImageView initWithFocusedViewRect:] を使ってビットマップを取得しようとするとうまくいかない。
  • Grab.app を使うと取れるんだけど、たしかドキュメントに書かれていない CoreGraphics の API を使ってたんじゃなかったっけ?
  • glReadPixels() を使ってビットマップを取得すればいいんじゃない(サンプルコードあり)。
  • OpenGL は、たしか、直接 VRAM に描いてるんじゃなかったっけ?(自信なし)
  • OpenGL は、AppKit をスキップして描画しているんだよ。それがなにより証拠には、OpenGL の絵が描かれているウィンドウを Dock に入れても、プレビューされないでしょ。

ということらしい。

えっと、ということは、まず Dock に表示したり、dockling で使うには、そのままではだめであると。ビットマップを取り出して、NSImage で描いてやらなくてはいけない。じゃ、そのビットマップはどうやって取り出すか?ひとつの方法は、glReadPixels() を使う。これは、GL の画像のビットマップを取り出す、OpenGL の API だ。それとは別に、Core Graphics Services から直接取り出す、ということが考えられる。これができれば、いろいろ応用が効くから面白いんだよね。それができるかどうかは、、、うーん、分からんぞ!もうちょっと調べてみる。

May 8 - アイコン・アニメーション from なんということはない話
keywords: setApplicationIconImage, initWithDrawSelector

k_suka さんの「なんということはない話」で、アイコンにアニメーションをさせるサンプルプログラムが公開されていました。

アプリケーションにアイコンを設定するには、NSApplication の setApplicationIconImage: を使えばいいよね。このアイコンが Dock に表示されます、と。だから、このメソッドを定期的に呼び出せば、アニメーションになるよ、というのが話のひとつ。

そして、もうひとつの話は、NSImage にどうすれば、時間ごとに異なった描画をさせることができるか?っていう話です。アニメーションのためには、毎時ごとに違った画像を描く必要があるわけですよね。それを実現するために、NSCustomImageRep を使っています。このクラスの initWithDrawSelector:: を使っています。これを使えば、画像を描くときに指定した selector を呼び出すってことになるわけです。

サンプルとして、Dock 内で動くアナログ時計が作られています。ビットマップではなく、NSBezierPath を用いて描いているところが、なかなかプログラマ冥利につきてうれしいですね(?)。

参考
なんということはない話
Dock 内のアプリケーションアイコンを描いてみる

May 7 - Cocoa Proramming Tips 101, フォントパネル
keywords: Cocoa, application menu, font menu

Cocoa 101、きょうはフォントパネルについてだ。

  • フォントパネルを表示する
  • フォントパネルからのフォント変更を受け取る

御察しの通り(?)、これらはこないだアップデートした、Faded Words 1.1 で使いました。実際の使用例を見たい人は、Faded Words 1.1 のソースコードを見てね。

May 6 - スクリーンセイバーモジュール、Faded Words 1.1
keywords: Screen Saver, Faded Words 1.1

スクリーンセイバーモジュール、Faded Words をバージョンアップした、Faded Words 1.1 をリリースしました。

Faded Words は、画面に好きな文字を浮かび上がらせるスクリーンモジュールです。1.1 では、フォント選択機能がつきました。自分の好きなフォントをつけることができます。

Faded Words 1.1 ダウンロード
Faded Words 1.1 ソースコード ダウンロード
前のリリースの紹介文

一ヶ月ぶりのアップデートだにゃー。

May 6 - GL in Dock は失敗
keywords: dockling, Open GL

いま流行り(?)の dockling に挑戦してみた。ちなみに、dockling とは、Dock の中で動いたり、メニューを出したりするやつね。

Template を取ってきて、試しに作ってみた。これは簡単にできたんだよ。で、どーしよーかなー、って思って、Open GL を dockling の中で動かしてみようとした。GL で描いたオブジェクトが Dock の中で回転してたらかっこいいでしょ?

やってみたんだけど、これがどうにもこうにも動かない。具体的には NSOpenGLView を貼付けてみたんだけど、GL 系の描画がぜんぜんできないんだよ。dockling は、まだドキュメントが公開されてない(よね?)から、仕様でできないのか、コードがミスっているのか分からないし。

数時間、格闘してギブアップ。だれか、成功例を知っている人がいたら、教えて下さい。

May 5 - Cocoa Proramming Tips 101, メニュー関連
keywords: Cocoa, application menu, font menu

Cocoa 101、アプリケーションのメインメニューとフォントメニューに関して追加しました。

  • アプリケーションのメインメニューを取得する
  • アプリケーションのメインメニューから、それぞれのメニューにアクセスする
  • フォントメニューを取得する
  • フォントメニューを追加する

フォントメニューって簡単に追加できるし、したがってフォントパネルも簡単に表示できるんだー。でも、あのフォントパネルってあんまりかっこよくないよね。

May 4 - CPU の温度を測る from One Small Step
keywords: dockling, CPU thermometer

らくたじーのさんからメールをいただいたんですが、CPU の温度を測る docling、CPU Thermometer が公開されました。Dock の中に常駐して、CPU の温度を測ってくれるソフトウェアです。

ソースコードも公開されています。注目するところは、温度を知るために G3 のレジスタを読みにいくところ。Cocoa から Mach を呼び出すサンプルとなります。

また、「CPU の種別と温度管理」という項で、G3 チップがどのようにして温度情報を提供しているか、ということの解説が読めます。詳しく書いてあるので、興味のある人は必読ですぜ。

参考:
One Small Step
CPU Thermometer
CPU の種別と温度管理

May 3 - 復活
keywords: After vacation

ふっか〜つ!お久しぶり!10 日ぶりぐらいの更新かな。

ちょっと時期外れのバケーションを取っていました。西海岸を車でグルグルグルーっと走り回ってました。10 日で 2,000 mile ぐらい走ったかなぁ。なんか、遊び尽くした、って感じ。

また、ばりばり、更新しますね〜。


Home | Link | Download | Back Number | Speciall Issue

mailto: mkino@xd5.so-net.ne.jp

HMDT