|
HMDT - Back Number / June, 2001 |
June, 2001
きのう書いたとおり、Python の勉強をしてるよ。いまさらなにやってんだ!って?はい、そのとおりです。いまさらです。いまさらながら、やってます。 さて、なぜに Python か?いちばん最初の動機は、xml を処理できる、簡単なスクリプト言語がほしかった、ってことなんだ。そういうことなら、Perl や Ruby もあるじゃねーか、って声が聞こえてくるよ。あえてここで Python を選んだ理由は、そのオブジェクト指向な特性や、動的型付けを実現できる runtime や、強力な正規言語表現があるからでして、、、うそです。ぜんぜんそんなこと考えてねーよ。 理由は、ただ一つ、名前です。きっぱり。あ、そこ、怒らんでくれ。このサイトは、いーかげん、とてきとーがポリシーなんだから。 Python の名前の由来に関しては、こちらのページがとてもよくまとまってまるよ。読むと分かるけど、Python の名前の由来はモンティ・パイソンによっている。こういうハッカー文化がうれしいじゃない。つまり、日本でいうと、“ドリフ”とか“気狂い猫”とかいう名前のわけだ。くーっ、楽しいじゃない。書いているうちに気に入ってきたぞ。作るか?スクリプティング言語“ドリフ”。または、Drifters.framework。
Python をインストールしてみたよ。おもしれぇ〜。こんなおもしろいものだったんだ。オブジェクト指向の知識がある人なら、なんのチュートリアルなしでも使えるね。すごく直感的に(プログラマの直感ね。普通はこういうのは直感的とはいうまい)書けるし。Mac OS X で、標準搭載してくれないかなぁ。Python プログラムを配付できたら、すごく便利だろうに。
きのう書いた、AppKit のバージョンの調べ方を使ったアプリケーションを作ってみたよ。名前はそのまんま、Cocoa Version Checker だ。その使い方は、立ち上げてみれば一目瞭然。
こんな感じで、Cocoa Framework、Foundation Framework、AppKit Framework のバージョンを示してくれるんだ。OS のアップデートをしたときにでも、走らせてみるとおもしろいかもしんない。っつーか、そのぐらいしか使い道がないぞ。 さて、このアプリの仕組みは、以下の 3 つの変数を調べているんだ。
これらはヘッダの中では宣言されていないので、extern で宣言して、リンク時にあるかどうかが分かることになるんだ。 ちなみに、上の画像は Mac OS X 10.0.3 の時のものです。10.0.4 または、10.0.3 以前で走らせた人がいたら、バージョン番号を教えて下さい。 ダウンロード: 修正:
MacWire の新居さんの記事で知ったんだけど、Apple が、NSDocumentController のバグの対策を発表していたようだ。その内容は、ドキュメントには NSDocumentController は HFS の file types をサポートしてる、って書いてあるけど、実際はしてないんじゃない?っていう話。Apple はそれを認めて、bug として認識し、対策パッチを公開している。 さて、個人的には NSDocumentController は、まだ本格的に使ってないから、あまり興味がなかったんだけど、目を引いたのは別のところだ。ソースコードの中のコメントに、“このコードは、bug が fix されたら呼びだされないよん”って書いてあるんだ。ってことは、bug が fix されたかどうかを判別しているわけだ。いったいどうやって? 気になったんで、ソースコードを追ってみた。すると、最後のところで NSAppKitVersionNumber という値を参照しているのが分かった。名前の通り、AppKit のバージョンを意味する変数らしい。これって、ヘッダの中には定義されていないんで、冒頭で extern 宣言している。つまり、undocumented な変数って言うわけね。だけど、Apple ここで公開しちゃったから、これからずっとサポートしないといけないんじゃないかな。 さらに気になるのは、コメントを読むと、現在の AppKit のバージョンは 577.0 らしい。すげぇー、そんなにバージョンアップしてるんだ。ま、それはさておくとして、コードの中で AppKit のバージョンを比較しているんだけど、これが 588.0 より大きいかどうかで比較してる。これって、588.0 以降で fix されるっていうことなのか、それとも 577.0 の間違いなのか?もしかすると、パッチのパッチが必要になるかも。 あと、知っている人は知っているんだろうけど、このパッチを当てるために、poseAsClass: っていう NSObject のメソッドを使ってる。あるクラスをばくることができるメソッドだ。くぅ〜っ、かっこいい。また惚れたぞ、Objective-C!
ようやく "Learning Cocoa" を手に入れました。だいぶ前に注文してたんですけど、オーダーが多いのか、何度も遅れるよ、遅れるよ、ってメールが来てました。ほんとに遅かったぞ>O'reilly 内容に関しては、あちこちで書かれてますけども、Cocoa Programming のチュートリアル的な内容です。オブジェクト指向とは何ぞや、というところから始まって、Objective-C の簡単な紹介、Project Builder、Interface Builder の使い方を経て、step by step でアプリケーションの作成を説明しています。Cocoa 入門者向けの内容となっています。まぁ、はっきりって目新しさはないです。Apple のサイトにある PDF で充分カバーできる内容ですな。 でも手元に一冊あると便利ですし、ていねいに読み込んでいくと、いままであいまいにしていたところがしっかり理解できるんで、悪い本じゃないと思います。机の横に置いて、開発の合間にパラパラと見るといいんじゃないでしょうか。 あと、内容とは関係ないけど、中の図が Studio Display になってたりして、おー芸が細かいなぁ、と思ったりしました。
各所で報じられている通り、Mac OS X 10.0.4 がリリースされたようだよ。まずは、素早いアップデートはめでたい。この調子で、継続的にアップデートしてもらいたいもんです。 で、内容をざっと眺めてみると、、、アプリケーション屋さんに気になるのは、sudo のアップデートかな?一応説明しておくと、sudo は、一時的に root 権限でコマンドを実行させることができるコマンドです。どう変わったのか、Authentication に興味がある今日この頃、気になるところですな。
最近流行りの security API について調べてみた。しっかし、すごい狭い特定分野での流行りだな。 まず、security API とはなんぞや?Mac OS X の製品版では、デフォルトでは root としてログインできなくなったよな。root とパスワードはいっしょのくせに、なんか変な気はするが。とりあえず、そっちの方が security 的には安全なのは確かだ。だけど、root としてなにかしたいときはあるよね。たとえばインストールのときとか。そんなとき、一時的に root 権限を与えるための API が security API、または Authentication API だ。こいつらは Security.framework の中にあるんだ。 Web 上には、けっこうドキュメントがそろってきた。ま、Mac OS X の開発ドキュメントなんて、3 つ以上あればけっこうって言っても言い過ぎではないよな。 まず、Apple による introduction 的なページ。このページには、Mac OS X の種々の security や cryptography サービス API の説明があるんだ。 んで、Apple から提供されているサンプル、AuthSample。ほら、コントロールパネルの中には、パスワードを入れるためのカギがついたボタンがあるやつがあるよね。あれを実現するためのサンプルだ。 続いて Stepwise の記事、Authentication and Authorization using the Security Framework。ここでは、Authorization API の使い方が具体的に説明してるよ。実際に使うときは、AuthorizationCreate を使って初期化をして、AuthorizationCopyRights を使って認証されているかどうか調べる。root の特権で実行するには AuthorizationExecuteWithPrivileges を使う、っていう手順を踏むんだ。このページにもサンプルもあるよ。 さらに、k_suka さんのなんということはない話で、この API を使った具体的なアプリケーション PackMon が公開されています。ネットワークのパケットを監視するソフトですが、Authentication API のサンプルとして使えます。解説も詳しいっす。
Cocoa 101、たいへん基本的な話なんだけど、文字列の比較、検索の初歩についてまとめたよ。NSString の compare、rangeOfString などを使うときの話です。
ただ、たぶんアルファベットだったらこれで十分なんだろうけど、日本語が絡んでくるとやっかいだよなぁ。それはまた後日取り扱うということで。
AppKit のメタフレームワークである、HMDTAppKit。パスワードダイアログにシートタイプを追加したよ。
上の図のように、シートダイアログが使えるぜ!シートとそうでないときの使い分けはどうするのか?Aqua Human Interface Guideline を読めば、書いてあるのかな。 ダウンロード:
先日書いた、Cocoa 101、モーダルダイアログを表示する、に関して、「Java de Cocoa」の Takaho A Endo さんから指摘をいただきました。>Thanks! 先日は、ダイアログの Cancel ボタンを押したときに、abortModal を呼んでいましたが、それはおかしいのではないか、という指摘です。で、ドキュメントを読みなおしてみると、、、なるほど、abortModal はモーダルダイアログの run loop の外から呼び出して、例外を発生させて run loop から抜ける機構である、と。ダイアログの Cancel で呼び出すのは、適切ではないですね、これは。 と、いうわけで、記事をかなり書き直しました。前回の記事を参考にした人がいましたら、ごめんなさい。あ、HMDTAppKit の方も、修正しないと、、、 また、Takaho A Endo さんも、Java を使ったダイアログの表示方法を公開しています。こちらも参考にさせていただきました。 参考:
AppKit のメタ・フレームワークを提供する、HMDTAppKit。今回は、パスワード入力用のダイアログを追加してみたぜ!
HMDTPasswordPanelCtrl の askPassword を呼び出すと、上のようなダイアログを表示して、パスワードの入力待ちになるぞ。 主な機能:
あと、このコードでは、.nib を loadNibNamed:: を使って動的に呼び出しているので、そのサンプルとしても使えるよ ダウンロード:
各所で酷評されている(?)、"Learning Carbon" を手に入れたよ。現在、拾い読み中です。内容は、Moon Travel Planner のていねいな解説になっています。いままで Classic の Mac OS のプログラミングの経験があって、これから Carbon をやりたい、って人向けですね。でも、このぐらいの内容は PDF で読めるよな。どうしても、本として、手に取って読みたいって人向けです。<実はけっこう重要 "Learning Cocoa" もいっしょに注文したのに(こっちが本命)、まだ来ないでやがんの、、、
Cocoa 101、ダイアログを表示させる、って話です。
けっこう基本的なことなので、いまさら書くのもどうかなぁー、って思ったんだけど、実はいままで使ったことがなかったので、書いてみました。
アイコン付きテーブルを実現する、HMDTAppKit、またまたほんのちょとのアップグレード。今度は、項目をテーブルから削除できるようにしたよ。 項目を選択した状態で delete キーを押すと、その項目が削除されます。 ダウンロード:
アイコン付きテーブルを実現する、HMDTAppKit が、またちょこっとアップグレードです。変更点は、テキストを縦軸の中央に書くようにしたこと、そして、なんということはない話の k_suka さんのリクエストに答えて(?)、ドラッグアンドドロップで、ファイルを追加できるようにしたよ。
ちょっと、画像が分かりにくいけど、D&D でファイルを追加してるよ。枠の強調表示もしてるぜ。さて、今回は、まだいくつか問題点があるんだ。
これらは、次のバージョンで修正される、かもしれないぜ! ダウンロード:
Project Builder って、Framework を作ることができるでしょ。実体は、dynamic library なんだけどね。だけど、ヘッダもまとめて管理することができるんだ。たとえば、AppKit には、<AppKit/AppKit.h> がくっついてくるでしょ。 じゃ、ProjectBilder で、この公開するヘッダを指定するには、どうしたらいい?Target パネルの Files & Build の Headers の横にある、"Pub"、"Pri" を使うんだ。
この、"Pub"、"Pri" は、こう見えてボタンなんだ。"Pub" をクリックすれば、このファイルを公開することができる。気付かねーよ、こんなもん。一時間ぐらい悩んだぞ。でも、ヘルプを見たら、一発で書いてあった。やっぱりヘルプは読まなきゃだめですね、、、
HMDTAppKit をちょこっと修正。アイコンのサイズを変更できるようにしたぞ。バージョン 0.1.1a です。
あと、画像をキャッシングすることによって、パフォーマンスを改善。速い。本来、このくらいのスピードで動かなきゃいけないんだよな、Finder って。 ダウンロード:
アイコンつきテキストを表示するためのテーブルのコードをリリースするよ。どんなものか、っていうと、こんな感じだ。
このサンプルは、/Applications フォルダの中身をのぞいた様子。各アプリケーションのアイコンと名前が表示されているよ。 今回のリリースでは、試しに、Framework を作ってみたよ。HMDTAppKit.framwork っていう、生意気な名前を付けてみた。このリリースには、
の 3 つのクラスが含まれているぞ。 あと、SampleApp も含まれている。プロジェクトに 2 つのターゲットが含まれているから、切り替えてコンパイルしてね。最初に、HMDTAppKit を。次に SampleApp をビルドだ。 ダウンロード: |
|
Home | Link | Download | Back Number | Speciall Issue
|