« 2005年06月 | メイン | 2005年09月 »
2005年07月20日
Spotlightインポータ開発日記(2005/07/20)
本日分をもう、書きます。
長くなりすぎたSpotlightインポータ開発日記、どのような残件があるかといいますと、以下のとおりです。
・ヘッダーのフォールディング(複数行)対応。
・差出人と宛先の名前とアドレスをメタデータの属性に設定。
・schema.strings
とくに、真ん中は、メールアドレスの解析(コメントとアドレスの分離)が必要で、とても、やっかいそうです。
Perlの正規表現が使えれば。。。なんて、弱気になっています。
投稿者 murakami : 02:44 | コメント (0)
2005年07月18日
Spotlightインポータ開発日記(2005/07/18)
Real Mail HeadersのX-OME-CharSetから文字コードを得るまでは、NSStringでのデータ取り込みは出来ないと考え、NSDataで取り込み、独自の列挙子で行単位で解析しているのですが、Real Mail Headersは7bit ASCIIと考えて問題ないとして、Real Mail Headersの解析はNSStringにコピーして行うように変更しました。これで、コードはかなりすっきりします。
また、列挙子で行単位でトークン分割する場合、空行(null line)は摘出できない事に気がつきました。
投稿者 murakami : 22:56 | コメント (0)
2005年07月17日
Spotlightインポータ開発日記(2005/07/17)
OME書類は、rfc2822形式のメールが、空行を挟んでヘッダー部とボディ部に分かれるようにボディ部の後ろにという区切りを挟んで、元のメールへヘッダーが添えられます。そして、その後に、X-OME-CharSet等のOME独自のフィールドが付きます。
Mac OS Xの内部では、文字コードはUnicodeなのですが、個々のアプリケーションは、例えば、OS9からの歴史的な事情でShift_JISが使われていたりします。そして、OMEは好みのテキストディターでメールの読み書きが出来るというのが売りという事もあり、日本語のメールの本文は、Shift_JISとなっています。
つまり、OME書類は、X-OME-CharSetの値を確認しないと、書類の文字コードが分からないという事になります。
そこで、僕が開発したSpotlightインポータでは、OME書類はNSDataで読み込み、Real Mail Headersの名前と値とNSMutableDictionary型の変数に設定し、X-OME-CharSetの値からエンコーダを決定し、NSStringにコピーします。
つまり、電文解析を二回行う事になります。
とりあえず、こうしてみたのですが、ちょっと、冗長かなと思っています。
NSDataのカテゴリOMEDataというのを用意して、OMEDataEnumeratorという任意の文字でデータを区切る列挙子を要してい、行単位で電文を読み込んでいるのですが、NSStringにコピー後の電文解析が、NSStringの機能が強力な為、めちゃくちゃ楽なのを実感した為に、この不十分な機能のOMEDataEnumeratorを用意する意味がどれだけなるのかただいま悩んでいます。
まあ、他の未実装な機能が完成した後に、この問題について、悩みたいと思っています。
投稿者 murakami : 22:02 | コメント (1)
2005年07月16日
Spotlightインポータ開発日記
OME用のSpotlightインポータの開発日記です。
例えば、ADCの日本語に訳されたドキュメントのインデックスページでは、Spotlight関連のドキュメントは、Carbonのカテゴリに属しています。
http://developer.apple.com/ja/documentation/japanese.html
基本は、CoreFoundationを使った、C言語による開発だからだと思います。
ところが、僕はCocoaの経験が少ないので、分かっていなかったのですが、実際にSpotlightインポータの開発をやったところ、CoreFoundationとCocoaの相性はとてもよく、例えば、極端な話、Xcodeで新規のMetadataImporterプロジェクトを作成した場合に作られているGetMetadataForFile.cというC言語のソースファイルのサフィックスを.mに変更するだけで、Cocoaのソースファイルとなってしまいます。
もう一つ、SpotlightがCocoaでの開発を想定していると感じたのは、CoreDataとの関係です。
Spotlightインポータは、アプリケーションとは別に、Plug-insとして制作されます。
アプリケーションは、当然、自身が出力するファイルの形式は知っていますが、Spotlightインポータは別モジュールという事で、改めて、ファイルを解析して、データを抽出します。そして、これがSpotlightインポータの主な処理です。
CoreData書類でしたら、データ抽出は効率よく簡単に行えます。
僕は、Spotlightは独自形式のファイルを出力するアプリケーションを開発するのなら、CoreData対応にしろというメッセージだと感じました。
投稿者 murakami : 23:31 | コメント (0)
2005年07月13日
OMEのSpotlight MDImporterの説明
本情報は、OMEのWikiでも説明しましたが、このWeblogでも説明します。
●入手方法
CVSからCheckOutして下さい。
詳しい情報は、http://mac-ome.jp/の開発者向けのページで説明されています。
●使い方
makeいたしますと、buildディレクトリにOME.mdimporterが生成されますので、これを以下のディレクトリのどちらかに置いてください。
~/Library/Spotlight
/Library/Spotlight
●ソースファイルとクラスの説明
☆Info.plist
OMEの書類の拡張子とUTIの関係を定義し、当該MetadataImporterが扱うUTIを設定しています。
.htmと.htmlについては、他(おそらくSafari)と拡張子が重なった為、対応できませんでした。
☆main.c
基本的にXcodeが生成したものをそのまま使用しています。
☆GetMetadataForFile.m
suffixを.mに変更して、Objective-Cのソースファイルに変更しました。
GetMetadataForFile()をカスタマイズして、クラスOMEMessageを使用してOME書類のMeta-dataの登録を行っています。
現在は、Meta-dataの登録をクラスOMEMessageまかせとなっていますが、今後は、クラスOMEMessageから登録したい属性を取り出して、本関数で登録を考えています。
☆クラスOMEMessage
NSDataのカテゴリOMEDataを使って、OME書類を解析して、Real Mail Headersを取り出しています。
Real Mail HeadersのX-OME-CharSetから書類の文字コードを得て、NSStringで取り込んで、今度は、メールヘッダと本文を取り出します。
そして、メールヘッダから、Meta-dataを取り出して、登録します。
☆カテゴリOMEData
Real Mail Headersを取り込む為の、列挙子OMEDataEnumeratorを用意します。
投稿者 murakami : 02:09 | コメント (0)
2005年07月09日
little endian
次期MacintoshにはIntel CPUが使用されるという事で、改めて、Intel CPUの事を調べてみて気がついてのは、僕、自身はIntel CPUで採用されているlittle endianでのプログラミング経験が、あまり、無いという事です。
このlittle endianというは不思議なポジションで、多分、8bit CPUとの互換性から採用された方式で、互換性から採用されたという説明から分かるように、電子計算機の世界では特殊な方式となります。その結果、Intel x86系以外では、big endianが主流となっています。big endianはネットワーク・バイト・オーダーとも呼ばれていまして、つまり、ITの基盤の多くではbig endianが採用されています。
こんな状況から、UNIXエンジニアリング・ワークステーションから組み込みシステム、Macintosh向けシステムと、Wintelの世界にどっぷりと浸かってこなかったせいで、little endian特有の現象に遭遇した事は殆どありません。
もちろん、UNIXの精神?である、汎用的なコーディングを心がけているので、僕が記述するソースコードは、エンディアンの依存はないという自信はあるのですが、本当ですか?なんて聞かれると、ちょっと、不安になります。
投稿者 murakami : 16:58 | コメント (2)
The Outsiders
同窓会から帰ってきて、色々と昔の事を思い出していたら、ふっと、思い出したのが、小説『The Outsiders』とそれをフランシスコ・コッポラが映画化した作品、そして、スティービィ・ワンダーの主題歌『Stay Gold』。
Amazonで調べたところ、2点、在庫ありという事で、思わず、注文してしまいました。
『The Outsiders』は、多分、僕が高校時代に読んだ小説で、かつ、映画だと思います。
当時は、大学進学を控え、何かをやらなきゃと思っていて、何をやっていいのか分からないとき。色々、調べてみて知ったのが、この作品。僕にとって、アメリカの小説は、評判を殆ど聴く事がなく、王道でないという印象があり、ひねくれ者の僕はだからこそ、惹かれて読んでみました。とても面白かったと自分には言い聞かせていましたが、本当のところは、とても地味に感じました。でも、何か惹かれるものがありました。多分、それは若者が持つ暗さの一面だったと思います。
物語のあらすじは、とても平凡。対立する二つのグループ。貧乏な方のグループの一人が金持ちの方のグループの女の子と恋に落ちます。でも、主人公の仲間が相手グループの一人を殺してしまい、一緒に隠れるが、確か、火事の現場に遭遇し、子供を助けるといった感じだったと思います。出演者は、とても豪華。今知ったのですが、トム・クルーズやトム・ウェイツも出演していたのですね。主題歌はスティービィ・ワンダーの『Stay Gold』。シングルでリリースされず、聴きたかったら映画館に来いというので、話題となりました。
僕の印象では、フランシスコ・コッポラの力が抜けた監督と、黄金期最後の底力を出したスティービィ・ワンダーの主題に感じる物がありました。映画は、もしかしたら、当時、Beta Maxを普及させようとしたSONYの深夜の映画スペシャルで観たのかもしれません。この映画スペシャルは、『Let It Be』や『華麗なるギャッツビー』という、普通ではお目にかかれない名作を放送していて、とても、気に入っていました。
30代となり。もうすぐ40代の僕は。Amazonから届いた『The Outsiders』を見終わった際に、どんな感想を持つのか、とても楽しみですし、がっかりしないか、少し、不安です。