|
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-
|
|
この間紹介した、 WWDC のセッション紹介のページを読んでいたんだけど、Hands on Session のページに QTKit の文字が出ていた!Apple のページで QTKit の存在を出してきたのは、初めてじゃないかな。 このセッションの紹介から分かるように、QTKit というのは Cocoa アプリケーションのための QuickTime を操作するフレームワーク。いままで NSMovieView というのがあったけど、あれはできることが限られていた。QTKit は違うぜ!QuickTime のパワーを存分に使えるようになると思うと、Tiger は Cocoa 屋さんにとって待ち遠しいのでした。 |
|
仕事の絡みで Google 先生で検索をかけていたところ、「Web Applications 1.0」という規格のドラフトが公開されているのを発見。日付を見ると、今日公開されたのか? これは、whatwg (Web Hypertext Application Technology Working Group) っていう標準化団体が策定している規格らしい。ここでは、少し前に話題になっていた Web Forms とかの規格も作ってるんだね。 で、Web Applications 1.0 なんだけど、気になるところがある!まず、copyright に Apple が名前をつらねている。そして目次をながめると、"Widgets" の文字がある。"canvas" の文字もある。ここで思い出すのは、去年の 12 月に Apple が公開した、「Developing Dashboard Widgets」っていうドキュメント。この中で、Dashboard で拡張された HTML のいくつかを標準化するために、他のベンダとともに作業を行っている、ってことが書かれている。 これらのことから推測するに、多分この Web Applications 1.0 ってのが、Apple による Dashboard の標準化なわけだ。ということは、このドラフトが通って、他のブラウザがそれを実装すれば、Dashboard のウィジェットがその環境でも動く!となるわけだ。そして、この規格の策定には、Mozilla と Opera が加わっている。つまり、将来 Mozilla や Opera で Dashboard のウィジェットが動く可能性が出てきた、ってことだ。 |
|
Apple から Security Update 2005-003 が登場。対象となるアプリケーションに Safari が含まれている。もしやと思い、詳細を確認してみると、IDN 偽装問題への対策が含まれるようだ。 IDN 偽装問題というのは、ドメイン名で ASCII 以外の文字も使えるようにした IDN (International Domain Name) っていう規格があるんだけど、それを悪用して似た文字、たとえば英語のアルファベットの a とキリル文字の a、を使って別のサイトへのクリックをうながす、というもの。詳しいことは、「国際化ドメイン名処理に起因する表示偽装の問題」辺りをどうぞ。 この問題が公表されたのが 2 月 8 日。その後、Firefox や Opera が対策を発表。で、今日 3 月 22 日になって、Apple も対策をリリース。正直、遅いね。 ただ、そのおかげかどうか知らんけど、それなりに力が入った対策になっている。Safari の対策の詳細は、こちらの「About Safari International Domain Name support」で読める。簡単に説明すると、怪しい「言語」の文字はデコードしないでそのまま表示する、というものだ。 Safari は、IDN をデコードして表示するかどうかは、言語によって決めることにしたようだ。その言語の一覧は、ユーザが編集可能なスクリプトとして提供される。具体的には、 /System/Library/Frameworks/WebKit.framework/Versions/A/Resources/IDNScriptWhiteList.txtっていうファイルだ。このファイルに、IDN デコードしても大丈夫な言語、つまり「白」の言語がのっている。いまのとこ、こんな感じ。 # Default Web Kit International Domain Name Script White List.
Common Inherited Arabic Armenian Bopomofo Canadian_Aboriginal Devanagari Deseret Gujarati Gurmukhi Hangul Han Hebrew Hiragana Katakana Latin Tamil Thai Yi これらの言語はそのまま表示される。それ以外の言語、たとえば今回やり玉にあげられた、英語のアルファベットと似た文字を持つキリル文字とか、はエンコードされたまま表示される。試しに、ここから「偽装 paypal」のページに行ってみると、確かに生の Punycode で表示される。それに対して、日本語を使った IDN、たとえば「宝島.jp」とか行くとそのまま表示される。(例が宝島.jp なのは、なぜか Apple のドキュメントでそれを使っているから) この方法は、できる限り IDN の精神を活かして対策を行おう、という気持ちは伝わってくる。現状では、まぁまぁ有効だと思う。ただ、裏をつこうと思えば、それは可能だ。原則的には、この問題はドメインを登録する側の問題で、ブラウザでできることは限りがある。でも、Firefox みたいにすべて生で表示するよりは、おれは好きだけどね。 |
|
今年の WWDC の内容が一部公開された。セッションのタイトルも一部公開されている。いやー、いろいろあるね。眺めるだけでワクワクする。 ここに公開されているのは、基本的に去年の WWDC で公開された情報に基づくものまで。Panther までの入門と、Tiger での新機能の一部だね。もちろん、当日になるまで明かされないセッションも多くあるだろう。それが楽しみ。 |
|
先日、MOSA のセミナーとして「C++、JavaプログラマのためのObjective-C Cocoa入門」をやってきた。参加していただいた皆様、遅い時間までお疲れさまでした。定員を超える人数に参加していただいて、嬉しかったです。 今回のセミナーは、基本的には Objective-C の入門なんだけど、対象を C++ か Java の経験がある方に絞ったので、かなり踏み込んだところまで話せたと思う。オブジェクト指向の説明は飛ばして、いきなり Objective-C の文法に突っ込むことができた。さらに、Objective-C の独特のメソッド呼び出しの文法を、C++ や Java と比較しながら話すことで、少しは理解しやすくなったかな、と思う。むしろ、参加していただいた方が、すでに C++ や Java で充分な経験を持つ方々ばっかりだったので、質問が鋭くてエキサイティングだった。話している方も、すごく楽しかったです。 今回は Objective-C 入門にメインがあったけど、このセミナーの続編にあたるような、Cocoa にもう少し踏み込んだようなものは、やりたいねぇ。ここで止まったらもったいない。ぜひ、もう一歩!Objective-C 入門も、今回だけではなく、何回もやりたいです。いや、ほんと面白い世界なんだってば。 |
|
今回のセミナーで力点を置いた箇所は 2 つある。1 つは、C++、Java と比較することで、Objective-C の動的な型判別の特性を理解してもらうこと。もう 1 つは、この動的な特性が、Cocoa のターゲットアクションパラダイムで積極的に利用されている、ということを解説する、っていうところだ。 動的型については、型のチェックをコンパイル時ではなくて、実行時に行う、ということは説明できたと思う。でも、それが C++ 的な、コンパイル時に厳密な型チェックを行うことでエラーを洗い出すという方法に比べて利点はあるのか?という質問には、半分ぐらいしか答えられなかったような気がする。型チェックにおいて、いくらコンパイル時にチェックを行っても、キャストしてしまえばどうにでもなる、というのは本当だ。でも、それがコンパイル時のチェックを否定することにはつながらない。Objective-C 的な、コンパイル時の型チェックの甘さがもたらす利点を、うまく説明できる視点を提供するのは難しかった。 もう 1 つの力点、ターゲットアクションパラダイムにおける、動的な特性の利用。もうちょっと噛み砕いて言えば、Interface Builder でアクションを設定するときに、既定のメソッドを使うのではなく、任意のメソッドを指定できるということの解説ということ。これに関しては、そういうことができる、ということは説明できたと思う。ただ、それが C++ や Java のフレームワークで行われている手法と比較して明確な利点がある、というところまでは踏み込めなかったような気がする。いや、確かにあると思うんだけど、説明しろと言われると、ぐぅ、簡潔に説明するのは難しい。これは、比較対象を特定すれば、説明が容易かったもしれない。例えば、java.awt.action パッケージと徹底的に比較すれば、特徴と利点が明らかになったかも。でもそうすると、セミナーの対象となる人がさらに狭まってしまうよな。うぅむ、悩ましい。だけど、この点がどうにかして解説て理解してほしいところなんだよな。 |
|
先週の土曜日、Cocoa 勉強会に参加してきた。Cocoa 勉強会とは、Cocoa を勉強するためにプログラマの方が集まって、みんなの興味のありそうなトピックを紹介し合うというもの。今回で 10 回目を数える、貴重で息の長い活動です。 という紹介はさておき、Cocoa 勉強会はずっと気になっていた。だって、発表内容むちゃくちゃ濃いんだもん。たとえば、前回の発表テーマがこちらから見れるけど、
うぉぉ。これだけの内容が一度に聞けるなんて、ここしか無い!しかも、みんな実践に裏打ちされているし。いやぁ、すごかった。面白かった。 あ、でも、Cocoa 勉強会の代表の方とお話をしたら、濃いものだけではなく入門レベルのものもやりた、いつでも初心者大歓迎、っておっしゃってた。ということで、濃いものを求める人にも、入門レベルの人にも、面白そうです。 |
|
シイラのビルドも出すよ。Nightly build 050316。
まず、検索フィールドが消えてしまう問題。たくさんレポートをもらったので、0 にならないように、仮に 0 になっても復活するようにした。うちの環境では問題が再現できなかったんだけど、これで多分大丈夫だと思う。 つぎは、URL コンボボックスの問題。URL を入力する際に、補完の候補になっている文字列の、途中までの URL を入れると、勝手に補完されてしまう問題があった。今回の修正で、とにかく、コンボボックスに表示されている URL だけが使われるようになった。 あと、cURL の修正をいくつか。まず、クッキーに対応。自分でクッキーのヘッダを追加している。さらに、キャッシュシステムに対応。キャッシュをつけたら、格段に動きが速くなった。さらに、リダイレクトができないことがあった問題の対応。そして、スレッドのプライオリティを調節。 これで、cURL もだいぶ使えるようになったと思う。速くなったかどうか!?は、よく分かんないなぁ。そのうち、まじめにベンチとろおっと。 |
|
今日は、このあとセミナーだ。がんばるぞ、っと。 |
|
来週やるセミナーの準備をする。「C++、Java プログラマのための Objective-C Cocoa 入門」っていうタイトルで、3 つの言語を比較しながら Cocoa 入門をやろうという企画だ。個人的にはすごく面白いと思うんだけどねー。 C 言語をベースとしてオブジェクト指向を目指しながら、静的言語の代表格みたいな C++ と、Smalltalk の特徴を取り入れた動的特性を前面に押し出した Objective-C。この 2 つを比較すると、Objective-C の、いいとこも悪いとこも含めて、特性がすごく分かりやすいんだよね。 そして、その特性が理解できると、Cocoa がいかにそれを利用しているかが分かる。これが分かると、いままで他のフレームワーク、たとえば PowerPlant や MFC や Swing、でプログラムを書いてきた人が、なるほど!という気持ちになると思う。この気持ちを理解してもらうことが、一つの目標だね。なんで NeXT から始まって Apple のエンジニア達が、このドマイナーな言語をいまだに使い続けるのか、その理由の一端でも説明したいっす。 |
|
Mac OS X には、標準で cURL っていうアプリケーションがついてくる。これは、UNIX の世界からやってきたダウンローダで、コマンドラインからネットワーク上のリソースを落とすことができる。Mac での簡単な使い方は、こちらが分かりやすい。 cURL がサポートするプロトコロルは、HTTP、HTTPS、FTP など。ふーん、Web ブラウザで必要になるプロトコルといっしょじゃん・・・ |
|
そこで疑問が出てくる。「cURL と Web Kit はどっちが速いの?」同じプロトコルを解釈するなら、速い方がいいに決まっている。ちょっと調べてみた。分からん。なら、実験だ! というわけで、シイラ nightly build 050308。
シイラのダウンローダとして、cURL を選択できるようにした。いまのところ、デフォルトではない。環境設定の一般パネルで、cURL を選択することで使うことができる。大きいファイルのダウンロードだけでなく、通常のページの HTML や画像を引っ張って来る際にも cURL を使っている。 ただし、現在非常に不安定。クラッシュしても怒らない方が、自己責任でよろしく。 cURL を選択すると、ダウンローダが変わるだけでなく、同時接続数も増えているはず。たぶん。さらに、すべての接続をスレッド化してやった。 で、どんなもんでしょ?速くなった?本人、何度もテストしているうちに、分からなくなってきた。速いような気はするんだがな。今回のビルドだとキャッシュの取り扱いがいまひとつなので、リロードをかけた時は Web Kit の方が速いかもしれない。これは、今後のビルドで調節する。 接続をスレッド化したので、小さい画像を多数含むページや、タブで一気にいろんなページを開いたときなんかが、速くなっていると思うんだけど。 |
|
技術的な話を。今回は、NSURLProtocol のサブクラスを作る形で実装した。NSURLProtocol は各種プロトコルを取り扱うクラスで、HTTP を取り扱うための SRHTTPURLProtocol を作り、その内部で cURL を使っている。NSURLProtocol のサブクラスの作り方は、こちらの「URL Loading System を拡張する」を参考にした。公開されている木村さん、Thanks。 また、Cocoa で cURL を扱うクラスとしては、CURLHandle が有名。これもいいんだけど、いかんせん NSURLHandle ベースは古いよなぁ。Web Kit 時代は、やはり NSURLProtocol じゃないと。ということで、CURLHandle のソースコードを参考にしつつ、作り直させてもらった。 cURL のライブラリである libcurl のライセンスは MIT/X ライセンス。シイラのライセンスとお互いに抵触しないので、たいへんよろしい。 |
|
さらにいうと、この手法だと、すべての Web Kit を使っているアプリケーションで利用することができる。ということは、Safari でも使えるはずなんだな、理屈から言うと。SafariStand あたりに組み込んでもらうと動いたりするかもしれないな>誰となく |
|
あと、シイラの CVS アップデートしました。すいません、いつも遅くて。 |
|
シイラ nightly build 050303。うりゃっ!
まずは、bookmarklet!やっと対応した。シイラ公開した直後から要望があったんだけど、なんでこんなに遅くなったかというと、ブックマーク周りがごちゃごちゃしていて、実装が変になりそうだったから。昨日のビルドでその辺りを整理したので、やっととりかかった。 次。ブックマークバー上のフォルダへの D&D!Safari と同様に、URL フィールドやページのリンクの D&D を直接ブックマークバーの上にあるフォルダに入れれるようにした。これで、ブックマークバー派の人も安心だ。 その次。webloc ファイルの D&D 対応。webloc ファイルをシイラのアイコンに D&D して開けるようにした。webloc ファイルは、URL とかのデータをリソースフォークに持っている。なんで、このご時世にリソースなの!?これはあれですか。Cocoa を覚えたぐらいでいい気になるなよ、Carbon がなければ何もできないんだからな、という Apple 様のお達しですか。というか、いじめですか。あぁもう、読めばいいんでしょ、リソースを。読んださ。Handle 使っちゃったよ、何年ぶりだ? 次は、昨日のビルドのバグだった、cmd + w などのショートカットキーが聞かない問題の修正。直しました。すいませんでした。そのときに気付いたこと。NSMenu のデリゲートを実装するときは、必要ないように見えても menuHasKeyEquivalent:forEvent:target:action: を実装しておかないと、大変なことになる。そうしないと、ショートカットを呼び出すたびに、すべてのメニューの再構築が行われてしまう。 あとは、いろいろ細かいバグフィックス。 |
|
あとは、最低でも、Firefox や Camino のブックマークサポートと、ダウンロードの改良をやらないといけない。やってもやっても終わんねー。 |
|
ほぼ日刊イトイ新聞で、「社長に学べ!」っていう連載をやっていて、任天堂の岩田さんが出てる。これが面白い。 何が面白いって、岩田さんはエンジニア上がりだから、プログラマの気持ちが分かるんだよね。個人的に、いまの気持ちにぴったりだ。 いくつか引用を。
あー、いまがその状態だ、おれ。多分、そのうち独りでやることの壁にぶつかるだろうけど、それまではこのエンジニア独特の感覚に身を任せていたい。 |
|
シイラのビルド、ようやく出せる。シイラ nightly build 050302。
まず、履歴メニューとブックマークメニューの改良。メニューを操作するときのレスポンスが良くなったと思う。レスポンスの改良、および高速化のため、いろいろ調整してみた。あと、履歴メニューで、いままではタイトルが設定されていないページは表示していなかったんだけど、URL を表示するように変更した。 次。「タブで表示」の項目をブックマークメニューに追加。これで、メニュー操作派の人も、ブックマークのタブ展開ができる。 一日の終わりにビルドを出せると、すっきりするね。 |