Backnumber

June, 2006
May, 2006
April, 2006
March, 2006
February, 2006
January, 2006
December, 2005
November, 2005
October, 2005
September, 2005
August, 2005
July, 2005
June, 2005
May, 2005
April, 2005
March, 2005
Feburary, 2005
January, 2005
December, 2004
November, 2004
October, 2004
September, 2004
Augsut, 2004
July, 2004
June, 2004
May, 2004
April, 2004
March, 2004
February, 2004
January, 2004
December, 2003
November, 2003
October, 2003
September, 2003
August, 2003

- HMDT archive-
March, 2006

March 29

アビーことアバディス・テバニアンが、3 月エンドでApple を退社するらしい。アビーほどの人が、10 年も Apple に留まってくれたことは、Mac ユーザとしては幸運でした。ありがとう。そして、おつかれさま。

アビーの業績については、上の記事を参照してもらえばいいんだけど、簡単に言えば、Mac OS X の心臓部にある、Mach カーネルの実際の開発に携わった人だ。もっと分かりやすく説明しよう。まず、Apple のオープンソースプロジェクトである、Darwin のページに行き、Mac OS X 10.4.5 を選択しよう。ずらっと並んでいるプロジェクトから、xnu をダウンロードする。これが、Mac OS X の中核となる、Mach カーネルのコードだ。

で、このファイルを解凍する。そして、Spotlight を使って、「Tevanian」を検索してみよう。すると、カーネルの中から、アビーが実際に書いたファイルを探し出すことができる。うーん、Spotlight 便利。

この中から、たとえば、 vm_init.c というファイルを開いてみる。すると、ヘッダ部のコメントに、

/*
 *	File:	vm/vm_init.c
 *	Author:	Avadis Tevanian, Jr., Michael Wayne Young
 *	Date:	1985

との記述が。うぉぉ、アビーの生コード!こんなところで興奮するのは、人としてどうかと思うが。

1985 年だから 20 年以上前か。そのころに書かれたコードをベースとしているソフトウェアが、まだバリバリと開発され続けているんだよな。すごい。

アビーのコード見ると、とてもきれい。関数は短いし、コメントは多いし、記法は一貫しているし。ソースコードを見ると、プログラマの性格は分かるもんで、誠実で几帳面なことが分かりますな。嘘度 50%。言ったらあれだけど、他のオープンソースのコード見ると、汚すぎてやってらんねー、というものは多い。

というわけで、個人的には「ソースコードのきれいな人」という印象があるアビー。新天地でも、またきれいなコードを書いてください。いや、さすがにもう自分では書かんか。

March 24

STEP INTO Xcode っていう本を買った。これは、Mac OS X のプログラミング環境である、Xcode の解説書。OS X のプログラミング入門と、Xcode そのものの解説が含まれる。

本は 2 部構成になっている。Part I は、OS X プログラミング入門。Xcode を使った、アプリケーション開発手順が紹介されている。それほど詳しくはない。いきなり Core Data や Spotlight の解説もあって、ちょっと散漫な感じ。Part II は、Xcode の詳しい解説。プロジェクトの構成、make の書き方、スクリプトの書き方、gdb を使ったデバッグ、パフォーマンスツールの使い方、など。それほど詳しくはないかな。

Part I と Part II のページ比率は、2 対 1 ぐらい。個人的には、Part II だけで一冊書いてくれた方が嬉しかったかな。いろいろな分野を書いていて、全体的に内容が薄い感じもする。ただ、make や gdb など、他の本では見かけない情報もあるので、そこに興味がある人は見てみるといいかも。

March 23

先週の土曜日、Monalisa-au.org さんが主催した、Core Audio のプログラミングレクチャーに参加。おじゃまさせていただきました。

Core Audio は初めて使ってみた。生の波形を計算して、Core Audio API に渡してやると、おぉー、音が鳴った。正弦波やノコギリ波や矩形波が、計算して鳴らせる。楽しい。ひたすら楽しい。

昔、PC-8801FA で、PSG 音源や FM 音源で遊んでいた頃を思い出した。当時のパソコンは、安いものは PSG(または SSG)、高いものになると FM 音源が搭載されていた。簡単な BASIC で楽譜を演奏することができて、かつ FM 音源のパラメータをいじって波形を作成することができた。さらに FA では、サウンドボード II がついていて、リズム音源と PCM 音源があるのがウリ。いろいろサンプリングして遊んでいた。

今思うと、ものすごくアヴァンギャルドな環境だったな。ろくな OS も言語も無いくせに、音楽機能だけやたら豊富だった。

さらにその後、同じく Monalisa-au.org さんの主催する、Quartz 本読書会キックオフ。とりあえず、10 名前後でスタートしそうな感じ。詳しいことは、こちらを参照してください。第 1 回目は、4/9 の予定。

Quartz 本は、Mac OS X の Quartz を使った 2D グラフィックプログラミングの本。解説されている内容は、2D グラフィックの基本(アフィン変換、ベジエ曲線、色空間、テキスト、合成、マスク、など)と、それが Mac OS X でどう実現されているか、という 2 つに分かれる。どちらか片方が分かっていれば、非常に読みやすい本だ。どっちも馴染みが無い人は、きちんと取り組めば確実に力になる。

読書会がどんな雰囲気で進むかは、第 1 回目をやってみないと分からないけど、会社勤めの方も学生の方もいるので、さらっとではなく、じっくりとした感じで進むのではないかな、と予想。

興味のある方は、Monalisa-au.org さんのエントリを参照して、こっちの ML に参加してください。ただし、読書会に参加するには、Quartz 本が必須。いま Amazon をチェックしたら、9,366 円になってる。高っ!わたしが買ったときは、それより 1,000 円近く安かったのに。

シイラ mini、バージョンアップして 1.3 を出した。Universal Binary にしたので、Intel Mac でも動きます。

あと、いろんなページで表示が乱れる問題も対処した。これ、全然原因が分からなかったんだけど、調べた結果、表示した Web ページで JavaScript エラーが起きると乱れるらしい。しかし原因が分かっても解決方法が分からん。Dashboard バグか?

しょうがないので、JavaScript を無効化する、という荒技で対処してしまった。JavaScript のあるページを見たい方、ごめんなさい。解決方法が分かったら、また修正します。

March 15

シイラ 1.2.2 を緊急リリース。昨日公開された、Security Update 2006-002 をインストールすると、シイラが使えなくなる問題に対応するため。どうも、履歴を管理する WebHistory 周りで何らかの変更があったようだ。

それ以外にも、細かい機能追加、修正がいくつかある。

March 8

WWDC 2006 のスケジュールが発表されてた。8/7 から 8/11。ここ近年変らずサンフランシスコで。

8 月か。例年より、ちょっと遅め?これはきっと、Leopard のプレビューをするために、遅らせてきたんだな。そう信じたい。

March 7

レイアウトが上がって来たので、黙々と校正中。

厚い・・・書き過ぎた感も。これでもいくつか書きたいものを削ったのだが。

HMDT でも先日紹介した、Programming With Quartz だけど、Monalisa-au.org さんで、「読書会をやろう」という話が出ている。おぉ、それやりたい。いい本だが、読んでると疲れるんだよ。こういうものは、読書会向きだな。

現在、参加者を集めているようなので、興味のある方はぜひ。

March 4

先日の続き。Safari の「内容をメールで送信」に反応する、ダミーアプリケーションを作ったよ、というところから。

なんか、AppleEvent が送られてきたことは分かったので、それを解析。そのアプリケーションに送られてくる AppleEvent を受け取るために、NSAppleEventManager の dispatchRawAppleEvent:withRawReply:handlerRefCon: をオーバーライドした。

しかし、ほとんど Cocoa しかやってない私は、AppleEvent は苦手。なんか分かりやすい解説は無いのかー、と探していたら、mac_prog さんの AppleEvent の解説がぴったり。Cocoa から AppleEvent を送る様子が分かりやすく説明されている。素晴らしい。ありがとう。そっかー、やっぱり Cocoa から直接 AppleEvent は投げることができなくて、AESendMessage を使うのか。

で、そのあたりの情報をもとに、Safari から送られてきた AppleEvent を解析。すると、EvnetClass が 'mail'、EventID が 'mlpg' の AppleEvent が来ていた。デスクリプタを 2 つ含んでいる。まず、キーが 'urln' で、文字列を持つデスクリプタ。この文字列は、メールのタイトルになるらしい。そして、キーが keyDirectObject ('----') で、タイプが 'tdta' のもの。これには、でかいデータが含まれている。

このでかいデータは何か?実験してみたところ、やはりあたりをつけていたように、WebArchive らしい。WebArchive オブジェクトを、data メソッドを使ってバイトにしたものらしい。

これで、ばっちりだ。試しに、これと同じものを作ってみた。

    // Create AppleEvent
    NSAppleEventDescriptor* tdtaDesc;
    NSAppleEventDescriptor* titleDesc;
    NSAppleEventDescriptor* targetDesc;
    NSAppleEventDescriptor* appleEvent;
    tdtaDesc = [NSAppleEventDescriptor 
            descriptorWithDescriptorType:'tdta' data:[webArchive data]];
    titleDesc = [NSAppleEventDescriptor 
            descriptorWithString:_webViewTitle];
    targetDesc = [NSAppleEventDescriptor 
            descriptorWithDescriptorType:typeApplicationBundleID 
            bytes:bundleIdChar 
            length:strlen(bundleIdChar)];
    
    appleEvent = [NSAppleEventDescriptor 
            appleEventWithEventClass:'mail' 
            eventID:'mlpg' 
            targetDescriptor:targetDesc 
            returnID:kAutoGenerateReturnID 
            transactionID:kAnyTransactionID];
    [appleEvent setParamDescriptor:tdtaDesc forKeyword:keyDirectObject];
    [appleEvent setParamDescriptor:titleDesc forKeyword:'urln'];

webArchive は、ページをアーカイブした WebArchive オブジェクト。_webViewTitle は、メールのタイトルになる。bundleIdChar は、メーラアプリケーションの bundle ID を表す char 文字列だ。

データを受け取る方は、これと逆の処理をすればいい。

と、いいうわけで、解析ができたので、早速これをシイラに組み込んでみた。シイラ build06003。

  • 「ページの場所をメールで送信」「ページの内容をメールで送信」メニューを追加
  • コンテキストメニューから検索エンジンを開くとき、別タブで開くように変更
  • 検索フィールドの履歴を選択した時に、文字列を検索フィールドに設定
  • localhost: で始まるURLを入力した時に、http:// を補完

ページをメールで送信するための、2 つのメニューを追加した。「ページの場所をメールで送信」は、ページの URL アドレスをメールで送るためのもの。「ページの内容をメールで送信」は、ページの内容を HTML メールで送るためのものだ。いまのところ、Apple の Mail ぐらいしか対応していないんじゃないかな。

March 2

Mac Fan の 4 月号に、次世代 Web ブラウザの特集ということで、Firefox とシイラに関する特集が組まれていた。シイラには 2 ページが割かれていて、いろいろと紹介が。

事前にメールで連絡はもらっていたけど、これほど力が入っているとは思わなかったので、びっくり。だんだんと認識されてきたなぁ、ということで、うれしいです。はい。

久しぶりに、Safari ハックネタを。

Safari 2.0 から、「このページの内容をメールで送信」というメニューがある。これは、いま Safari が表示しているページを、Apple 純正の Mail でそのままの形で送れるという、強力なもの。インパクトは強い。これはどうやって実現しているのか?調べてみた。

通常、Web ブラウザからメーラを立ち上げるには、mailto スキームを含んだリンクを使う。これには、メールの宛先、タイトル、本文などを含めることができる。しかし、この「内容をメールで送信」の強力機能は、これじゃ無理だよなあ。Apple 独自仕様を使っているでしょう。

しかも、HTML の再現性は半端じゃないし。ほぼ、そのまんまだ。これはきっと、ページの URL を渡すとか、HTML を渡すとかいう、こそくな技ではないな。ずばり、Web Kit の Web アーカイブ機能を使っているだろう。これだと、HTML に加えて、画像や CSS といったすべてのリソースを渡せるからな。と、予想。

じゃ、何を渡しているか調査してみる。そのために、まず、Mail 以外のメーラで実験してみる。たとえば、GyazMail をデフォルトメーラにして実行してみると、

やはり、できない。うーむ、Apple Mail 専用機能なのか?だけど、ちょっと待て。このダイアログには、「GyazMail.app は、対応していません。」と書かれている。つまり、なんらかの方法で、メーラが Web ページ送信機能に対応しているかどうか、調査している訳か。

大概の場合、この手の情報は Info.plist に書かれている。ということで、Mail.app の Info.plist を調査。すると、「MailLinkSupported」と「MailPageSupported」というキーが見つかる。これだな。

というわけで、mailto スキームに対応し、MailLinkSupported と MailPageSupported のキーを持つダミーアプリケーションを作成。これをデフォルトメーラにして、Safari から「内容をメールで送信」を実行してみると、、、おぉっ!起動した!そして、何かが送られてきているようだ!

何が来ているのか?これは、、、AppleEvent だな!独自仕様で、アプリケーション間通信やるとしたら、それだろ。と、いうところで、続きは次回。


[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer Center] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論] [panther-dev]

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