|
Backnumber 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-
|
|
今日も出します、シイラのビルド。シイラ Nightly build 041130。
バグフィックスが中心。 |
|
いま、時間を見つけては、少しずつ WWDC の DVD を見返している。やー、面白い。とってもためになる。最高の教材だね。眠くなるのが難点だが。 |
|
一週間ぶりのご無沙汰。シイラ Nightly build 041129 っす。
ちまちまとバグフィックスを。 |
|
ここしばらくはだいぶ更新の頻度が落ちてしまってた。だけど、いまどうにかこうにか体制を整えているので、再び開発スピードを上げることができそう。とりあえずは、毎日更新を復活させないと。 |
|
で、シイラのバグフィックスで、認証関係を調査中。シイラが「未知のルートです」とかいうダイアログを出して、接続できないやつ。あれはつまり、証明書(NSURLCredntial)の署名がまずいらしいんだけど。まずいというか、Web Kit が認識していない証明機関だから信用できないかも?ということみたい。とりあえず警告だけして、接続してしまえばいいんだよな。 接続するには、NSURLAuthenticationChallengeSender に continueWithoutCredentialForAuthenticationChallenge: を送ってやれば良い。このオブジェクトは NSURLConnection のデリゲートメソッドから取ればいいみたい。じゃ、NSURLConnection のデリゲートになるには、、、うん?どーすんだ? NSURLConnection は Web Kit の内部で処理されてしまっているから、アプリケーションからは取れないんじゃないのか?でも Safari はたぶんやっているな。また隠しクラスか?調べてみると、WebBaseResourceHandleDelegate が NSURLConnection のデリゲートになっているようだ。こいつを取得するか継承するのか?Web Kit は、内部をハックしないとまともなブラウザが作れないなー。 |
|
シイラの新しいビルド出すぜっ!2 週間ぶりになってしまったか。Nightly build 041122。
まず、起動の高速化。体感できるぐらい速くなったと思う。行った作業は、メインの nib ファイルを小さくして読み込み時間を短くしたのと、履歴やブックマークのメニューの作成を起動時からもう少しあとにずらした。こうやって処理を分散させることで、時間が一部に集中しないようになり、ストレスが少なくなっていく。高速化は地道な作業の積み重ねだ。 次は、新規ウィンドウのサイドバー。新しいウィンドウを開くときや起動したときに、サイドバーを開くべきかどうか?仕様を変更してみた。常に、直前の動作を継承することにしてみた。まず、サイドバーを開いてから新規ウィンドウを作ると、自動的にサイドバーが開く。そのサイドバーを閉じてからもう一枚ウィンドウを作ると、サイドバーは開かない。選択されるタブは、前のウィンドウと同じものだ。いったん終了して起動した場合は、最後の動作を継承することになる。 あとはいくつかバグフィックスを。「タブを閉じる」と「ウィンドウを閉じる」の問題は、Cmd + w が状況によってタブを閉じるだったり、ウィンドウを閉じるに割り当てられたりするんだけど、ときどきおかしくなっていたのでそれを修正。 |
|
昨日の続き。思い立って、AspectCocoa を使ってみた。まずロギング機能から。アスペクトのロギング機能とは、メソッドの実行前と実行後にログを出す機能。これを、既存のコードを修正することなく行える。 まず、AspectCocoa のページに行って、AspectCocoa.framework をダウンロードしてくる。そして、それをプロジェクトに加える。 アスペクトによるロギングを利用するには、どこでロギングを行うかを示すジョインポイント、実際のロギングを行うアドバイスオブジェクト、それらを利用してアスペクトを行うアスペクトオブジェクトが必要となるようだ。それぞれ、ACPointCut、ACLoggingAdivce、ACAspect というクラスで実現される。これらを使って、main あたりで設定をしてやればいい。 たとえば、NSView の initWithFrame: をロギングしようと思ったら、次のようになる。 main.m
まず、クラスの名前とメソッドの名前を NSString で指定する ACPointCut オブジェクトを作る。これでロギングの位置が決定する。そして、ロギングを行う ACLoggingAdvice オブジェクトを作り、アスペクトである ACAspect オブジェクトをロードしてやる。これだけでオッケー。 実行結果は、次のような感じだ。 (log)
アプリケーション起動後の、すべての NSView を継承したらクラスの初期化の様子が分かる。なるほどー。これがアスペクト指向ってやつですかい。 ACPointCut に指定する、クラスやメソッドを変更すれば、もっといろいろなログが取れる。デバッグや Cocoa のクラスの構造解析に力を発揮しそうだ。 |
|
kimuraw の日記さん経由で、AspectCocoa: AOP for Objective-C を見た。 最近、アスペクト指向、って言葉を見かけるようになったけど、正直に言って、あんまりよく知らない。なんか、アスペクト指向を実現するには、ある関数を実行するその前と後に、特定の関数を呼び出すことができる必要がある、って理解であってる?非常に的を得てない感のする文章だ。 で、そんなアスペクト指向を、Cocoa + Objective-C で実現するにはどうしたらいいか?ってのが、上のリンクにあるペーパーだ。要は、既存の Cocoa のメソッドを呼ぶ前後に、所定のメソッドが呼ばれればいいらしい。そのためには、メソッドの置き換えが必要になる。 Objective-C は動的結合だし、C を使ってランタイムもがしがしいじれるので、その辺は簡単にできる。このペーパーでは、4 つの方法を紹介し、そのうちの 3 つを検証している。 1 つ目は、メソッドの IMP を置き換える方法。IMP ってのはメソッドの実装で、平たい話が C スタイルの関数ポインタだ。これを置き換えることで、メソッドの実体をすげかえることができる。この手法を method swizzling と呼ぶらしい。知らんかった。 2 つ目は、転送を使う方法。forwardInvocation: と methodSignatureForSelector: をオーバーライドしてやって、特定のメソッドをヘルパークラスの方に投げてやる。これですげかえができる。 3 つ目は、class_poseAs。class_poseAsを使えば、自動的にクラスを置き換えることになる。これでもできるが、動的にスイッチできないのが、致命的。 4 つ目は、mach_override を使う方法。これは、Mach 上で動的に C 関数をオーバーライドするもの。ここまでやれば、そりゃ問題ないというか、何でもできるんだけど、Objective-C でのアスペクト指向ではここまでいらんでしょう。 ということで、始めの 3 つの実装とパフォーマンスの比較を行っている。結論から言うと、1 つ目がよろしいんではないかということだ。そしてそれを用いて、AspectCocoa の実装を行ったらしい。ただ個人的には、そこにはあまり興味が無いので、実際に動かしてはいない。 ということで、アスペクト指向に興味がある人にはとても実りある、または Cocoa をハックする方法を探している人にもヒントがある、というペーパーでした。 |
|
そういえば、もう数ヶ月前になるけど、アップルが Objective-C プログラミング言語の日本語版を公開していた。ほんと、やっとでたのかい!といった印象だった。 このドキュメント、入門用ではぜんぜんない。Objective-C のディープなドキュメントだ。言語仕様からランタイム関数の解説まである。Objective-C プログラミングに慣れた来た方は、ぜひ一読を。面白くて目からうろこがぼろぼろ落ちるよ。 |
|
週末の金、土曜日と、MOSA 湘南ミーティングに参加してきました。参加された皆さん、お疲れさまでした。声かけて下さった方々、ありがとうございました。楽しかったっす。 で、そこで Web Kit とシイラの講演をしてきました。Web Kit の方は簡単なプログラミング入門。シイラの方は、プロジェクトの現状と、将来について。シイラは最後はほとんど放談で、言いたいこといってやって、すっきりしたぜ!てな感じでした。 講演で使ったスライドをこちらに置いておくので、興味のある方はどうぞ。内容に関する質問、コメントなどは、メールでも掲示板でもコメント欄でも、どこでも構わないので、お待ちしてます。ただ、内容に関して一言だけ。シイラの将来に関しては、無保証です。なんの保証も無く、言いたい放題です。でもやる気だけはあるので。
MOSA での講演:
ShiiraAtMOSA.key.zip(Keynote 形式) |
|
シイラ Nightly build 041108。
1 つ目は、新規ウィンドウ作成時にホームページを開くにしておくと起きる問題のバグの修正。2 つ目は、検索エンジンメニューで、階層化対応。検索エンジンの登録ウィンドウで、フォルダや区切り線を追加できるようにした。ファビコンも表示するようにしたけど、まだ問題があるので調整中。 |
|
階層化に対応するために NSOutlineView を使ったので、Cocoa バインディングが使えなくなってしまった。手で全部実装し直しました。しくしく。 |
|
Apple が Tiger のテクノロジー・プレビューとして、Spotlight に関する情報を公開している。掲示板で教えてくれた poo さん、Thanks。 今年の WWDC で、Jobs がいちばん力を入れてデモをしていた Spotlight だけど、ただの検索じゃないの?という疑問もあったと思う。公開された文書から、技術的な背景を知ることができる。 Spotlight の肝はメタデータ。ファイルの中身だけではなくて、メタデータを利用した検索ができるのが Spotlight だ。メタデータとは何か、と問われれば、iTunes にとても良い例を見ることができる。iTunes では、MP3 や AAC といった音楽ファイルを、アルバム名やアーティストといったそのファイルを表す情報を使って管理、検索しているでしょ。これがメタデータだ。 メタデータ検索のために Tiger では、メタデータをためておく場所である Spotlight Store と、そのデータにアクセスするための Meta data API が提供されるんだ。 Spotlight Store は、メタデータのためのデータベースだ。存在するすべてのファイルのメタデータをためこんでおく。このデータベースに対してクエリーを投げることで、ファイルの迅速な検索が可能になる。 Spotlight Store のメタデータの操作を行うのが Meta data API だ。C 言語ベースの低レベル API と、Cocoa に統合された高レベル API が提供されるようだ。ちなみに、低レベル API は接頭子 MD を持つみたい。Meta data API には、想像通りデータベースへのクエリーを作成するものがある。それに加えて、標準的なファイルフォーマットからメタデータを抽出する、メタデータインポータがある。これにより、JPEG や TIFF といった画像ファイル、MP3 などの音楽ファイル、さらに Word や Excel ファイル、PDF ファイルなどは、デフォルトでメタデータが Spotlight Store に追加される。このメタデータ抽出ソフトウェアが、Spotlight の要だ。これにより、アプリケーションベンダの対応を待たずに、ユーザは Spotlight の機能を使うことができる。またこのソフトはプラグインになっており、Apple 以外のデベロッパも作れるようだ。 |
|
さて、このような技術的背景をふまえて、Spotlight で何ができるか考えてみよう。まず、WWDC で Jobs がデモしたようなファイル検索システム。あれは Meta data API が公開されるので、Apple だけではなくて、普通のデベロッパも作ることができる。なるほど。でも、あんまり新味はないな。 こういうのはどうだ。たとえば HTML ファイルの編集をしていて、あるファイルへリンクを貼りたくなったとする。いままでだったら、オープンダイアログを開いて、ファイル階層をたどって、目的のファイルを指定する、っていう方法をとらなくてはいけなかった。ここに Spotlight を使うと、ファイルの名前や、ファイルの特徴、たとえば 16 x 16 の gif ファイル、を指定するだけで、目的のファイルを探すことができる。うーむ、地味だけど、少し便利になるかも。 さらにこういうのはどうだ。画像ブラウザを作ることを考える。いままでの画像ブラウザでは、始めに画像が入っているフォルダを指定していた。だが、Spotlight 対応画像ブラウザでは、起動するといきなりすべての画像ファイルを表示する。そのシステムにあるすべての画像だ。そこから、ファイルフォーマットや、デジカメ画像だったら撮影日時を指定して、目的の画像を絞り込んでいく。おぉ、これは新しいかも。使いやすいかどうかはちょっと不明だけど、ファイルブラウズへの新しいアプローチを提起できる可能性が見えてくる。 |
|
シイラのビルド出しまーす。疲れたっすー。Nightly build 041103 になります。
リンク先をタブで開く設定にしているときの問題を、いろいろと修正しました。これで、空白ページが開いてしまう問題がかなり解消されたと思うんだけど、どうでしょう。 |