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, 2005

March 25

この間紹介した、 WWDC のセッション紹介のページを読んでいたんだけど、Hands on Session のページに QTKit の文字が出ていた!Apple のページで QTKit の存在を出してきたのは、初めてじゃないかな。

このセッションの紹介から分かるように、QTKit というのは Cocoa アプリケーションのための QuickTime を操作するフレームワーク。いままで NSMovieView というのがあったけど、あれはできることが限られていた。QTKit は違うぜ!QuickTime のパワーを存分に使えるようになると思うと、Tiger は Cocoa 屋さんにとって待ち遠しいのでした。

March 24

仕事の絡みで 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 のウィジェットが動く可能性が出てきた、ってことだ。

March 22

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 みたいにすべて生で表示するよりは、おれは好きだけどね。

ちなみに、シイラの対策は、こちら

March 21

今年の WWDC の内容が一部公開された。セッションのタイトルも一部公開されている。いやー、いろいろあるね。眺めるだけでワクワクする。

ここに公開されているのは、基本的に去年の WWDC で公開された情報に基づくものまで。Panther までの入門と、Tiger での新機能の一部だね。もちろん、当日になるまで明かされないセッションも多くあるだろう。それが楽しみ。

March 18

先日、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 パッケージと徹底的に比較すれば、特徴と利点が明らかになったかも。でもそうすると、セミナーの対象となる人がさらに狭まってしまうよな。うぅむ、悩ましい。だけど、この点がどうにかして解説て理解してほしいところなんだよな。

March 16

先週の土曜日、Cocoa 勉強会に参加してきた。Cocoa 勉強会とは、Cocoa を勉強するためにプログラマの方が集まって、みんなの興味のありそうなトピックを紹介し合うというもの。今回で 10 回目を数える、貴重で息の長い活動です。

という紹介はさておき、Cocoa 勉強会はずっと気になっていた。だって、発表内容むちゃくちゃ濃いんだもん。たとえば、前回の発表テーマがこちらから見れるけど、

  • クラッシュレポーター
  • Authorization Service
  • gcov
  • ObjectAlloc
  • NSPrinter について
  • 高分解能実時間

うぉぉ。これだけの内容が一度に聞けるなんて、ここしか無い!しかも、みんな実践に裏打ちされているし。いやぁ、すごかった。面白かった。

あ、でも、Cocoa 勉強会の代表の方とお話をしたら、濃いものだけではなく入門レベルのものもやりた、いつでも初心者大歓迎、っておっしゃってた。ということで、濃いものを求める人にも、入門レベルの人にも、面白そうです。

シイラのビルドも出すよ。Nightly build 050316。

  • 検索エンジンフィールドの幅が 0 になってしまう問題の修正。
  • URL が勝手に補完されてしまう問題の修正。
  • cURL 選択時の問題の修正。(クッキー、キャッシュ、リダイレクト、プライオリティなど)

まず、検索フィールドが消えてしまう問題。たくさんレポートをもらったので、0 にならないように、仮に 0 になっても復活するようにした。うちの環境では問題が再現できなかったんだけど、これで多分大丈夫だと思う。

つぎは、URL コンボボックスの問題。URL を入力する際に、補完の候補になっている文字列の、途中までの URL を入れると、勝手に補完されてしまう問題があった。今回の修正で、とにかく、コンボボックスに表示されている URL だけが使われるようになった。

あと、cURL の修正をいくつか。まず、クッキーに対応。自分でクッキーのヘッダを追加している。さらに、キャッシュシステムに対応。キャッシュをつけたら、格段に動きが速くなった。さらに、リダイレクトができないことがあった問題の対応。そして、スレッドのプライオリティを調節。

これで、cURL もだいぶ使えるようになったと思う。速くなったかどうか!?は、よく分かんないなぁ。そのうち、まじめにベンチとろおっと。

今日は、このあとセミナーだ。がんばるぞ、っと。

March 10

来週やるセミナーの準備をする。「C++、Java プログラマのための Objective-C Cocoa 入門」っていうタイトルで、3 つの言語を比較しながら Cocoa 入門をやろうという企画だ。個人的にはすごく面白いと思うんだけどねー。

C 言語をベースとしてオブジェクト指向を目指しながら、静的言語の代表格みたいな C++ と、Smalltalk の特徴を取り入れた動的特性を前面に押し出した Objective-C。この 2 つを比較すると、Objective-C の、いいとこも悪いとこも含めて、特性がすごく分かりやすいんだよね。

そして、その特性が理解できると、Cocoa がいかにそれを利用しているかが分かる。これが分かると、いままで他のフレームワーク、たとえば PowerPlant や MFC や Swing、でプログラムを書いてきた人が、なるほど!という気持ちになると思う。この気持ちを理解してもらうことが、一つの目標だね。なんで NeXT から始まって Apple のエンジニア達が、このドマイナーな言語をいまだに使い続けるのか、その理由の一端でも説明したいっす。

March 8

Mac OS X には、標準で cURL っていうアプリケーションがついてくる。これは、UNIX の世界からやってきたダウンローダで、コマンドラインからネットワーク上のリソースを落とすことができる。Mac での簡単な使い方は、こちらが分かりやすい。

cURL がサポートするプロトコロルは、HTTP、HTTPS、FTP など。ふーん、Web ブラウザで必要になるプロトコルといっしょじゃん・・・

そこで疑問が出てくる。「cURL と Web Kit はどっちが速いの?」同じプロトコルを解釈するなら、速い方がいいに決まっている。ちょっと調べてみた。分からん。なら、実験だ!

というわけで、シイラ nightly build 050308。

  • cURL を採用。

シイラのダウンローダとして、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 アップデートしました。すいません、いつも遅くて。

March 3

シイラ nightly build 050303。うりゃっ!

  • Bookmarklet 対応!
  • ブックマークバー上のフォルダへの D&D対応。
  • webloc ファイルの D&D 対応。
  • ショートカットキーが効かない問題の修正。
  • その他、いろいろバグフィックス。

まずは、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 のブックマークサポートと、ダウンロードの改良をやらないといけない。やってもやっても終わんねー。

ほぼ日刊イトイ新聞で、「社長に学べ!」っていう連載をやっていて、任天堂の岩田さんが出てる。これが面白い。

何が面白いって、岩田さんはエンジニア上がりだから、プログラマの気持ちが分かるんだよね。個人的に、いまの気持ちにぴったりだ。

いくつか引用を。

プログラムをやろうなんていう開発者は
「ひとりで全世界を掌握できる」
という全能感に
惹かれたところもあると思います。
(糸井重里)

技術者もそうですし、絵描きもそうですよね。
「おれがいちばんうまい」
という自信やうぬぼれがないと
エネルギーが出ないでしょうから。
(岩田聡)

あー、いまがその状態だ、おれ。多分、そのうち独りでやることの壁にぶつかるだろうけど、それまではこのエンジニア独特の感覚に身を任せていたい。

March 2

シイラのビルド、ようやく出せる。シイラ nightly build 050302。

  • 履歴メニューとブックマークメニューの最適化。
  • ブックマークメニューに「タブで表示」を追加。

まず、履歴メニューとブックマークメニューの改良。メニューを操作するときのレスポンスが良くなったと思う。レスポンスの改良、および高速化のため、いろいろ調整してみた。あと、履歴メニューで、いままではタイトルが設定されていないページは表示していなかったんだけど、URL を表示するように変更した。

次。「タブで表示」の項目をブックマークメニューに追加。これで、メニュー操作派の人も、ブックマークのタブ展開ができる。

一日の終わりにビルドを出せると、すっきりするね。

March 1

昨日から、合わせて 5 時間ぐらい、シイラのソースコードをいじっていたけど、いろいろとうまくいかなくて、いったん作業を全部破棄。がぁっ。

Web Kit と Cocoa の不具合が、一つ一つは小さいけど、組み合わさってどうにもこうにもならん状況に陥った。不具合に対処するのは楽しいが、アウトプットが出せないのがいらいらする。


[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