home link download back number special issue

HMDT - Back Number / December, 2001


December, 2001


December 29 - iTunes Scripts をちょっと動かしてみる
keywords: AppleScript, iTunes

先日書いた、iTunes の AppleScript 集をちょっと使ってみた。一番の目玉は、AppleWorks と連動して、ジャケットを作る、ってやつかな。他にも、かゆいところに手が届くやつや、重箱の隅をつっついているようなやつ(うん?)がある。

インストールの仕方と、一通りの機能をまとめてみた。Studio AS の一環としてね。ひとつ、注意しておきたいのは、そのままでは日本語版の iTuens では動かないものがけっこうある。スクリプト内の、"Library" を“ライブラリ”にしたり、"Manual" を“マニュアル”にしたりしないといけないんだ。このへんを、きちんと吸収する仕組みを作ってほしいぞ>Apple。

December 27 - iTunes Scripts
keywords: AppleScript, iTunes

もはや、旧聞に属するんですけど、Apple から iTunes の AppleScript 集が出てるよ。iTunes が AppleScript 対応になったのを言祝ぐためのもの、とリリースノートには書いてある。まるで、AppleScript Studio のリリースに合わせたかのようだな(違うと思う)。

Apple: iTunes Scripts for iTunes 2.0

December 18 - Studio AS、GUI のデザイン
keywords: AppleScript Stuido, GUI

AppleScript Studio Trial、"Studio AS" の続きだよ。前回は iTunes Label Maker を作るぜっ!てとこまでいった。今回は、プロジェクトを作って、GUI をデザインするとこだよ。ここまでは、オール GUI での操作なんで、あんまりプログラミングっていう感じがしないはずだ。

Trial tutorial: iTunes Label Maker

December 18 - Studio AS、Trial tutorial: iTunes Label Maker
keywords: AppleScript Stuido

「系統的でなく」て、「興味のおもむくまま」で、「それなり」な、HMDT が、性懲りもなく、また新しいことに手を出すぞ。今回のターゲットは AppleScript Studio。そう、"December 2001 Mac OS X Development Tools" で追加された、あれです。これで、Project Builder は、C、C++、Objective-C、Java に加えて AppleScript もサポートに入った、ってわけだ。

さて、まずはとるものもとりあえず、AppleScript アプリケーションを作ってみた。いじってみたのは "iTunes"。iTunes のプレイリストから、曲名を取り出して、レベルを作る、"iTuens Label Maker" だ。これを作る過程を、チュートリアルになるように、step by step でまとめてみたんだ。

まずは、導入からどうぞ。

Trial tutorial: iTunes Label Maker

December 16 - 入門 Carbon
keywords: Learning Carbon

オライリージャパンから、今度「入門 Carbon」が出るんだそうな。これは、あれだ、"Learning Carbon" の日本語訳だ。英語版の内容は、いままでの Mac OS でプログラムを書いていた人を対象に、Carbon への移行をサンプルのチュートリアルをたどりながら、解説していく内容だったよな。ちなみに、もう一冊ある "Learning Cocoa" の方は、来春に日本語版が発売される予定なんだって(たぶん「入門 Cocoa」かな?)。

December 14 - December 2001 Development Tools
keywords: Development tools, Apple Script Studio

Apple が ADC で "December 2001 Mac OS X Developer Tools" の配付を開始しているよ(要登録)。新しい開発環境ね。さっそくダウンロードだ。でかい。210 MB を超えるぐらい。

で、細かい話はまたあとでするけど、今回の目玉は "Apple Script Studio" だ。Mac OS X native の Apple Script application が作れる、っていう触れ込みだ。これは、あの FaceSpan のようなものか?

ざっとリリースノートを読んでみると、どうやらこれは独立したアプリケーションではなくて、ProjectBuilder と InterfaceBuilder を使って、UI 付きの Apple Script を作れる環境のことを、さすらしい。なるほど。たしかに、InterfaceBuilder のパワフルさを使って、Apple Script application を作れるのは、すでに PB と IB に慣れている人には、魅力だ。でも、それらに触ったことがない人が、一からやるにはちょっと敷き居が高いんじゃないかなー。とりあえず、チュートリアルをやってみるか。

あと、ドキュメントも増えたみたい。いままで、必殺の "Description forth coming" だったものが、いくつか埋められている。Cocoa Developer Documentation も、ようやく揃ってきた。ほんと、ようやっと、っていう感じだよね。

December 14 - Objective-C 最適化:Foundation クラスの最適化(後編)
keywords: optimization, Foundation classes

ついにたどりつきました最終回、Objective-C 最適化シリーズ「Foundation クラスの最適化」の後編だ。

あの手、この手を使って、NSArray と NSString を最適化しまくります。10 倍速くなるのには驚き。しかし、ここまでやったら、C でやった方がいいんじゃないか?徹底的にこれらのクラスを分解しているので、速くしたい時だけじゃなくて、クラスの中身を理解するのにも役に立ちます。

これにて、Objective-C 最適化シリーズはおしまし。あー、つかれた。

December 10 - Objective-C 最適化:Foundation クラスの最適化(前編)
keywords: optimization, Foundation classes

まだまだ続くよ、Objective-C 最適化シリーズ。「Foundation クラスの最適化」前編だぜ!いよいよ実践編。実際に最適化しまくるのだ。

速さこそ命!しかし、そんなことをいうんだったら、C を使った方がいいに決まってる。だけど Objective-C の便利さをあきらめるわけにはいかない。そんなわけで、Objective-C の有用性を保ちながら、どこまで速くできるか?って話です。C のパフォーマンスを取り入れながら、最適化を行っている。この辺は Hybrid 言語の Objective-C の強みですな。Java でやろうとすると、bridge 作ってめんどくさい。

December 8 - Objective-C 最適化:メソッドと関数呼び出しの内部(後編)
keywords: optimization, method call, function call

Objective-C 最適化シリーズ「メソッドと関数呼び出しの内部」の最後、後編だっ!今度のメインは IMP の話だ。メッセージパッシングを使わないで、直接セレクタを呼び出してやるぜっ、という話だ。

これで、メソッドのお話はおしまい。う〜ん、あいまいだったとこがよく理解できた。訳をする目的の第一は、さっと読むより、一文一文を吟味して、よく理解することだからな。大学でやる輪講とかといっしょだな。いや、独りなんだけどさ。

だったら公開する必要ないじゃん、って意見もあるけど、公開しておくと、だれかが間違いを指摘してくれるかもしれないからね。

December 6 - Objective-C 最適化:メソッドと関数呼び出しの内部(中編)
keywords: optimization, method call, function call

昨日に引き続いて、Objective-C 最適化シリーズ「メソッドと関数呼び出しの内部」の中編だぜっ!今回は、Objective-C でメソッド呼び出しをするときの、オーバーヘッドはどのくらいなんだ?っていう話だ。

一般に Objective-C でのメソッド呼び出しは遅い、って言われてるけど、どのぐらい遅いのか?それが一目瞭然で分かるぜっ!と、いうか、見せてるだけなんだけど。う〜ん、こりゃ遅いわ。スピードだけ考えたら、C++ の方がいいに決まってるわ。

December 5 - Objective-C 最適化:メソッドと関数呼び出しの内部(前編)
keywords: optimization, method call, function call

お待たせしました!Objective-C 最適化シリーズの訳、第三回目の「メソッドと関数呼び出しの内部」です。原文は、こちらの "Method and fnction call innards" になります。

この回は、オブジェクトにメッセージを送った後は、いったい何をやっているんじゃ?っていうことを、アセンブラレベルで解説してます。今回は、C 関数の呼び出しと、共有ライブラリの呼び出しまで。アセンブラレベルで、オーバーヘッドを理解しています。

December 1 - Objective-C 最適化:メモリ確保の基本と Foundation の補足
keywords: optimization, allocation

先日、「メモリ確保の基本と Foundation」のところで、「object と class object は、何を指しているんだ?」と、書いたところ、多数の方々から突っ込みをいただきました。ありがとうございます。こんなに突っ込まれるとは思っていなかったので、うれしさと恥ずかしさできりきり舞いです。

では、解決編。「object と class object とは何?」という疑問に答えるには、まず、Smalltalk や Objective-C では、クラスもオブジェクトとして扱われている、ということを理解しないといけないんだ。荻原先生の 「Mac OS X プログラミング入門: Objective-C」から抜粋を示してくれた方がいたんですけど、

「オブジェクト指向の言語やシステムの中には、クラスは静的な定義であってプログラムの実行時には実体として存在しないという考え方と、クラス自体もひとつのオブジェクトであるとする考え方があります。後者の考え方では、クラスとして働くオブジェクトをクラスオブジェクト(class object)と呼びます。この場合クラスの定義は、どのようなインスタンスを作成するのかという記述の部分と、クラス自体がどのように動作するのかという記述の部分から成ることになります。Objective-CやSmalltalkではクラスもオブジェクトと考えますが、C++などの言語ではクラスはオブジェクトとはみなしません」

ということだそうだ。だから、もとの記事を読むときは、

「object = 普通の(NSObject から継承された)オブジェクト。
 class object = クラスを表すオブジェクト」

と、理解すればいいんだよね。

では、次の疑問。「両方ともオブジェクトっていってるけど、object と class object は、同じものなの?違うものなの?そもそも、そいつら何よ?」

この疑問に答えるには、コードを見るのがてっとり早い。まず、/usr/include/objc/objc.h を見てみよう。ここに、id 型の定義がある。id 型は anonymous な NSObject として使える型だよね。

objc/objc.h
typedef struct objc_object {
    Class isa;
} *id;

このように、id 型は先頭に Class 型の isa を取る構造体 objc_object のことなんだ。じゃ、Class 型は?Class 型とは、[NSObject class] で取得できる、クラスオブジェクトの型のことだ。

objc/objc.h
typedef struct objc_class *Class;

Class 型は、構造体 objc_class なんだ。次は当然、objc_class とは何?/usr/include/objc/objc-class.h を見ると、

objc/objc-class.h
struct objc_class {			
    struct objc_class *isa;
    struct objc_class *super_class;	
    ...
};

と、定義されている。ということは、さっきの object と class object は、

「object = objc_object (id 型) + インスタンス変数」
 class object = objc_class (Class 型)」

と、実装されているんだ。これが「クラスオブジェクトは、特別なオブジェクトなんだ」「NSObject とクラスオブジェクトは違うんだ!」と、いう文の意味だと思うんだけど。「NSObject は isa しか持たないけど、クラスオブジェクトは isa と superclass を持つ」、っていう文とも辻褄が合うよね。どうでしょう、有識者の方々?

メールでお教えいただいたみなさん、どうもありがとうございました。


Home | Link | Download | Back Number | Speciall Issue

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

HMDT