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

June 30

相変わらず、忙しいのであります。

MY COM PCWEB さんの方で、Dashboard の紹介記事、「Tiger のもう一つの魅力を探る - Dashboard アドバンストプログラミング」っていう記事を書きました。Dashboard での、簡単なウィジェットの作り方の解説から、あんなこともできる、こんなこともできる、という紹介になってます。

いやー、これね。気合い入ってるよ!文字数多いよ。A4 で 20 枚ぐらいの原稿書いたよ。Web 上で読める Dashboard の解説としてはとっても充実していると思うので、興味のある方はぜひご一読を。

明日の Dashboard セミナーでは、この記事の内容もどんどん解説していくので。

June 27

大変、忙しいのであります。

Dashboard 関連もいろいろやってる HMDT ですけど、今週金曜の 7/1 にセミナーやります。いちおう、申し込みの締め切り日は過ぎたんですけど、まだだいじょうぶです!と、受付担当の方が言ってました。興味ある方は、こちらのページからお申し込みを。

トーフサロンの suzuki さんが、CocoaMill というものをリリースしてました。Objective-C をベースにした、Cocoa 用のスクリプティング言語、といった位置づけらしい。

ダウンロードして起動してみた。OgreKit をインストールしておく必要があるらしい。ごにょごにょやって、おぉ、動いた。サンプルも、きちんと動いた。NSView が初期化されてないとか言われるけど、それはお約束ですな。

Objective-C のランタイムは、C からガシガシ叩けるから、こういったメタ環境的なものは作りやすいのかもね。ソースも公開されているので、興味のある方はぜひ。

個人的には、Cocoa 使う目的ってデスクトップのアプリケーション作ることなんで、そこから考えると Objective-C の最大の利点って C が呼べる、ってことなんだよな。

June 21

シイラ build050621。

  • 10.3.9 で起動しない問題の修正。
  • 環境設定が開かない問題の修正。
  • ページ遷移エフェクトの改良。

まず、前のビルドが Panther で起動しない問題。こっちのテストでは起動してたからなんでじゃー、と思ってたら、QuickTime 7 がインストールしてあれば立ち上がってた訳ね。やられたー。QuickTime 6 でも起動するようにしました。

次。環境設定。これでもか、というぐらい、怪しいところは全部コード変えてみました。これでも開かなかったら、もうどうしよう。デバッガ起動してトレースしてもらえれば、一発なんだがな。環境設定が開かなくて、Xcode でデバッガが使える人、最新のコードを置いておくので、どこで止まるか調査してください。ちなみに、NSException でデバッガを止めるには、デバッガのコンソールから、b raise と打ち込みます。詳しくは、こちらのページで。

もう一つ。遷移エフェクトの改良。OpenGL Context を使うように変更してみた。あとシフトキーを押しながらだと、ゆっくりになります。

10.3.9 に QuickTime 7 をインストールすると、QuartzCore.framework もインストールされる。このフレームワークは Core Iamge のためのものなんだけど、中身は空っぽみたいだね。今回のように、フレームワークがリンクされても起動できるようにするための、stub ファイルということか。

June 20

昨日、ちょろっと出した、Dashboard で Quartz Composer を動作させるためのプラグインを、暫定公開。ダウンロードすると、QuartzComposerPlugIn.pluginというプラグインがあるので、それを /Library/Internet Plug-Ins フォルダにコピーしてください。そのあと、QCWidget.wdgt をダブルクリックすれば、Quartz Composer のコンポジションを表示するウィジェットが動くはず。

開発モードにすれば、もちろんデスクトップ上でも動く。

JavaScript から、start や stop といった操作も行える。setValueForInputKey メソッドを使って、Quartz Composer に入力を渡すこともできる。このウィジェットで言えば、RSS フィードの URL を変更することができる。

問題が発生したら、教えてください。頃合いを見て、正式版とします。あと、念のため、Tiger 専用です。

ダウンロード:
ウィジェット(QCWidget.dmg
プラグインのソースコード(QuartzComposerPlugIn.zip

June 19

昨日の話の続き。悩ましかったことと、その解決について。

Tiger で OpenGL Context を使うものに、Quartz Composer がある。その Quartz Composer を Cocoa 上で使うものとしては、QCView が用意されている。QCView は普通に使うと普通に動く。だけど、動かない場合もある。それは、Web Kit Plug-in 上で使おうとするときだ。

ここで、昨日からなんでこんなことをやっているのか言っちゃうと、ずばり Quartz Composer を Dashboard 上で動かそうとしているんだ。Dashboard で新しいビューを作るには、Web Kit Plug-in を使う。ということは、Web Kit Plug-in 上に QCView を貼付ければ出来上がり!?

そういうことはみんな考えるらしくて、すでに実験例がある。こことか。このページの Quartz Composer Safari PlugIn を使うと、Safari 上で Quartz Composer を再生できる。でも、実は Dashboard 上ではうまくいかない。

なぜか?ここの Quartz Composer-dev の ML で議論されているけど、QCView の実装は NSOpenGLContext との間でなにか問題があるらしい。Pierre-Olivier がそう言っているんだからそうなんでしょう。とにかく QCView は Web Kit Plug-in では使えないんで、代わりに QCRenderer を使え、っていっている。

QCRenderer は、Quartz Composer のレンダリングを行うためのクラス。OpenGL Context の準備をして、このクラスの renderAtTime:arguments: メソッドを呼べば、レンダリングが行えるらしい。そうですか、じゃ、こいつを使ってみるかい。Web Kit Plug-in 上に NSOpenGLView を貼付けて、GL Context の準備をして、QCRenderer 呼び出して、タイマー回して、云々。

と、前フリが長くなったけど、結論としては、できた。Quartz Composer on the Dashboard に成功!

ちゃんと動いてる。開発モードにすれば、デスクトップに常駐もできる。JavaScript から引数を渡すこともできる。たとえば、RSS Visualizer に、URL を渡してやることもできる。ソースコード整理したら、公開するんで。とりあえず、できたよ、ってことで。

シイラのビルド出します。build050619。WWDC を挟んだので、相当久しぶり。

  • 環境設定パネルが開かない問題の修正
  • ページ遷移エフェクトを追加(Tiger のみ)

ようやく、環境設定パネルが開かなくなる問題が修正できた。ご迷惑おかけしました。もう 1 つの、ページ遷移エフェクトの追加は、環境設定の表示パネルから設定できる。Core Image を利用しているので、Tiger のみです。

June 18

weak link の設定がうまくいかない〜。そうなるとどうなってるかというと、Panther と Tiger の両方で起動するイメージがうまく作れない〜。ということで、今日もビルド出せず。くそー。

Mac OS X には、2 つの描画コンテキストがある。Core Graphics Context(または Quartz Context)と、OpenGL Context ね。

Core Graphics Context では、Core Grahpics のリッチな API が使える。それに対して、OpenGL Context ではハードウェアアクセラレータが効くため、高速な描画ができる。ということで、フレームワークによって、あっちを使ったり、こっちを使ったりする。たとえば、Cocoa は基本的に Core Graphics Context 上だし、Core Image や Quartz Composer は OpenGL Context 上だ。Tiger になって、OpenGL Context 上のものが増えたような印象がある。

基本的に、OpenGL Context のものは、そのままでは Core Graphics Context には描けないんで、別途処理が必要になる。Core Graphics 上に OpenGL Context を用意してやって、そこにつなげるようにする。ただ、いちいちやるのもめんどくさいので、標準で何らかの手段が用意されている。

分かりやすい例は、NSOpenGLView だね。これを使えば、Core Graphics Context である NSView の上に OpenGL が描ける。また、Core Image で画像を処理する CIImage ってクラスがあるけど、これは OpenGL Context 上で動いている。これを Cocoa の NSView の上に描くために、CIImage では drawAtPoint:fromRect:operation:fraction: メソッドを提供している。

それでうまく動いてくれればいいんだけど、たまにうまく動かない組み合わせがあるんで、悩ましい。悩んでいるところで、次回に続く。

June 16

先日あった WWDC では、Graphics and Media のセッションを中心に回っていた。今回は Core Image のセッションが結構あって、その中にトランジションエフェクトと Web Kit を組み合わせてデモをやっていたものがあったらしい。それは、ぜひやってみないと!と思って、やってみた。


ムービー (1.9M)

戻る、進む、再読み込み、でそれぞれエフェクトがかかる。はじめはうざったいかな?と思ったけど、使ってみたら、これが病み付き。さりげないながらも、大胆なエフェクトがとっても気持ちいい。ユーザのアクションに対するビジュアルフィードバックの大切さを、あらためて実感。

まだ不安定なんで、ビルドはまた後で出します。あと、WWDC でのこのデモのソースコードは公開されていないみたい。残念。

June 13

WWDC から帰ってきました。10 時間以上のフライトの後、成田に降り立ったとたん身を包む湿気を含んだ空気。おぉ、ここは亜熱帯か?こっちの方が、サンフランシスコのかさかさした空気より、過ごしやすい。

その後地元まで戻って、居酒屋でビールを立て続けに 3 杯飲んで、家に戻ってバタンと寝る。おかげで時差ぼけも無く、今日は朝 7 時に起床。

昨日の Universal Macintosh の話にはいっぱいコメントもらったけど、申し訳ないことに文字化け大量発生。前から気になっていたんで、本気で HaloScan からの移転を検討します。シイラとかを置いている、hmdt-web.net を使えばいいか。

Apple Developer Connection で、大量の WWDC で使われたサンプルが公開されている。今年は、すべてではないけど、サンプルのかなりの部分を一般に公開することにしたようだ。すばらしい!

裏を返すと、NDA が必要な情報があまりなかったってことだね。

June 11

WWDC 全日程終わり。やー、疲れた。これから帰ります。

Universal Macintosh 待望論

終わったので、Intel プラットフォームに対する感想というか希望を。

私はデスクトップアプリケーション開発者なんだけど、その立場から「何が起きるといちばん嬉しいか?」と考えると、Mac OS X のユーザが増えること、になるんだよね。Macintosh のシェアが増える、ということとは微妙に違うので注意。そういう視点で見ると、Intel プラットフォームへの移行ってのは、手間は増えるくせにユーザが増える見込みがまったくない。だって、いままで PowerPC ベースの Mac を使ってた人が、買い替えるだけだからな。

じゃあ、どうすればいい?欲しいものは 2 つある。1 つは、Mac OS X も Windows も動く Macintosh、つまり Universal Macintosh だ。これはもう、技術的には可能だ。デベロッパ貸し出し用のマシンがそうだもんね。この Mac の狙いは、たとえば Mac mini にはすごくひかれるけど Mac OS X しか動かないから買い控えていた Windows ユーザを取り込むことだ。

もう 1 つは Mac OS X for PC アーキテクチャだ。ようするに、既存の Windows マシンで動くようにするやつね。これの技術的な問題は、ドライバ対応ということになる。でもそんなものは、PC ベンダに書いてもらえばいいのだ。どの PC メーカーにだって Mac 信者はいるし、やりたくてうずうずしている人はいるでしょう。それに、PC メーカーにとっても、「Mac OS X 対応」ってのは非常に大きい付加価値になる。

ということで、どちらも技術的にはすでに可能。問題は政治的なものだけになる。まぁ、Apple のビジネスモデルがハードウェアの収益に依っていて云々、ってのはあるけど、ここはモデルを変えてもらおうじゃないか。というか単純に考えて、「PC を買って Macintosh から離れていくユーザ」と「新たに Macintosh を買ってくれる Windows ユーザ」のどちらが多いかといえば、いまの Apple なら後者の方が大きくなるんではないか?Macintosh のデザインや、iPod によるイメージなどの向上によって、Mac への興味はとても高まっていると思うけど。

別にね、Windows を打倒するとか、そんなことは必要はないんだ。Windows ユーザのうち、3% が興味持ってくれればいい。そうすれば、ユーザ数倍増だよ、おい。

過去の互換機の失敗を思い出すかもしれないけど、それとは決定的に違うところがある。あのときは、シェア 5% の Mac ユーザを複数のベンダで取り合っていた。今度は、100% のユーザを相手にできることになる。

大体さ、デベロッパに新たな負担を強いるんだから、この位の見返りは欲しいよ。「Intel 対応すれば、ユーザ数が 2 倍になります」とかね。そういう分かりやすさをくれ。ユーザにとってもマシンの選択肢が増えるから、悪い話ではないでしょ。

June 7

来たっ!キタキタキタ!大ニュースが来た!Intel チップの採用などという、小さいニュースは無視しろ。

そのニュースとはっ!Web Kitがオープンソース化!ばばーん。驚け!

Safari のレンダリングエンジンである Web Kit は、KHTML を採用した箇所を WebCore としてその一部を公開していたけど、ついに晴れて全部公開となったようだ。そのために、新しいサイトが立ち上がっている。The WebKit Open Source Project だ。ここから CVS でソースを取得できる。

ダウンロードしろ!おれもこれから落とす。いままで、ハックし続けていた苦労が、ついに報われるのか。いや、報われてないか。全世界の Web Kit プログラマがむせび泣いているに違いない!

The WebKit Open Source Project からWeb Kit のソースコードを落としてみた。ダウンロード手順はこちらを参考。ソースコードは、4 つの部分からなる。まず、従来から公開されている WebCore と JavaScriptCore。そして、WebCore とアプリケーションの間に位置する WebKit と、それをサポートするための WebKitLibraries だ。それぞれのファイルサイズの合計を調べてみた。

  • WebCore 24.0Mb
  • JavaScriptCore 11.8Mb
  • WebKit 5.4Mb
  • WebKitLibaries 352Kb

ということで、ほとんどが WebCore のソースコード。WebKit 自体のソースコードは、それほど多くない。

次に、WebKit の構造をのぞいてみよう。いくつかのサブプロジェクトから構成されている。

Debug
デバッグ関連や、WebKit の統計情報など。
DOM
WebKit での DOM ツリーの拡張。
History
履歴のサポート。
Misc
エラー、ファビコン、ファイルの管理など。あと、Foundation の拡張など。
Panels
認証パネル。
Plugins
プラグインのサポート。Netscape プラグインと WebKit プラグイン。
WebCore Support
WebCore とのブリッジ部分。テキストや画像の描画、クッキーのサポートなど。
WebView
WebKit の描画の中心となる WebView と、その関連。
Carbon Support
カーボンのサポート。

こんな感じだ。読み進めるとしたら、やはり WebView のあたりからでしょう。

あと、WebKitLibraries というものがある。ここだけは、ソースコードが公開されていなくて、ライブラリファイルでの提供となっている。どうも、これにはキーチェーンや認証のサポートが含まれるらしい。なぜ公開されていないかは、不明。セキュリティ的な理由ということか?

日本では、今日は、Dashboard のプログラミングを解説した、「Programming Dashboard」の発売日です。すでに注文していただいた方、ありがとうございます。本屋で買っていただいた方、ありがとうございます。

フルカラーで、きれいでみやすい本になったと思います。Dashboard 作成の最初の一歩としても、さらに奥深くまで踏み込みたい人にも、お勧めです。見かけたら、手に取ってみて下さい。

って、本人はまだ現物を見ていませんが。

Dashboard ウィジェットプログラミングセミナー」も、お申し込み受付中なので、興味のある方はぜひ。

June 6

サンフランシスコ到着であります。飛行機も、入国審査も、手荷物も、すべて問題がなく順調に済む。いやー、こんなスムーズなアメリカ入国は久しぶりだ。が、スムーズすぎて、ダウンタウンに到着したのが朝の 10 時。ホテルにチェックインできねーよ。

しょうがないから、ご飯を食べたり、WWDC のレジストレーションをやったりしながら時間をつぶす。昼の 1 時にチェックインと同時に爆睡。起きたら夜の 1 時になってた。寝過ぎじゃ。

これを書いているのは朝の 6 時で、あと 4 時間で基調講演が始まりますな。何がでるのでしょーか。仮に Intel チップ採用となったら、今日ここでデベロッパ向けに Tiger for Intel を配らないといけないよな。ないよな、きっと。

では、また。

基調講演終わったよーん。いやぁ、出ちゃいましたね。

言っていたことを並べると、2006 年から Intel プロセッサ採用。いままでの Mac OS X は、すべて Intel チップでもビルドされていた。今日のデモは 3.4 GHz の Intel チップの上で動いていた。Xcode + Cocoa、Carbon の移行は簡単、と主張。Xcode 2.1 で、PowerPC と Intel チップ用のバイナリを作れる。両方のチップのバイナリを含むファイルを、ユニバーサルバイナリと呼ぶ。デベロッパ向けに、開発キット(PowerMac G5 をベースにした Intel チップマシンと Tiger for Intel)を $999 で貸し出す。PowerPC バイナリを Intel チップで動かす Rosetta を発表(PowerPC エミュレータということか)。

ついでに、言っていなかったこと。値段は安くなるのか?全部のモデルで移行するのか?Intel バイナリは PowerPC 上で動くのか?PowerMac の名前はどうなるのか?PentiMac か?Darwin for Intel は公開されるのか?そしてなにより、Mac OS X for PC の可能性はあるのか?Apple がやらなくとも、Darwin が公開されるなら、動く可能性はあるかも。

なんにしても、Intel 一色の基調講演でした。デベロッパのテンション、上がんねーの。

June 4

えー、昨日はシイラ 1.1 を出すって書いたけど、予想通りというか、問題がいろいろあったので延期します。致命的な問題をいくつか解決して、もう一回ビルドを出します。

とは言っても、明日から WWDC 行きます。サンフランシスコでお会いしましょう、誰となく。

飛行機乗りたくねーなー。長時間のフライトは辛すぎる。ハンニバルで、アメリカの飛行機会社のエコノミーは、昔の奴隷船と座るスペースがあまり変わらない、って記述があったな。

June 3

シイラ nightly build 050603。

  • Tab Exposé のパフォーマンス改良
  • 最新版の Growl (0.7) をサポート
  • ソースコードウィンドウで、HTTP ヘッダをインジゲータが機能しない問題を修正
  • Wiki のファイル添付の脆弱性に関する調査でパスしなかった、Content-Type と Content-Disposition に関する不具合の修正
  • 各種ウィンドウが位置を記憶しなかった問題を修正
  • Tiger で「他のブラウザで開く」が機能しなかった問題の修正

Tab Exposé、少しパフォーマンスよくなったはず。速いマシンだと、かなり快適だ。あたりまえか。遅いマシンでも、それなりに動きます。

続いて、Growl。最新版の 0.7 をサポートした。新しい API を利用しているので、古い Growl を入れている人は動かないかもしれないので、アップデートしてください。

次。ふぇみにん日記さんで取り上げられていた、「ファイル添付の脆弱性に関するブラウザの調査」のテストをパスするようにした。掲示板での指摘、ありがとう。これは、Wiki の脆弱性として、添付されたファイルをそのまま開いてしまう、という問題を、HTTP ヘッダの Content-Type や Content-Disposition を使って回避する、というもの。Web Kit では、HTTP レスポンスを受け取った後、そのデータをどのように扱うか決定することができるので、ダウンロードするように設定。しかし、他にも HTTP の仕様サポートの抜けがありそうだ。

あとは、いろいろバグフィックス。

Tab Exposé について、技術的なお話。前のビルドから Tab Exposé に使う API を変更した。

はじめは、NSView にある scaleUnitSquareToSize: を使っていた。これは NSView の座標系を変えるためのメソッドだけど、これだとビューの上に乗っているボタンやスクロールバーの描画が乱れる、という問題があった。あと、パフォーマンスもなんかいまいち。

どうにかならんかなーと思って、Core Graphics に nm をかけて眺めていたら、CGSSetWindowTransform とかいういい響きの API があるじゃない。これを Google にかけてみると、おぉ、CGS で始まる、Core Graphics Service と呼ばれている API が、ウィンドウをいろいろいじるやつなのね。CGSPrivate.h で検索をかけると、ハックしたヘッダファイルのようなものが見つかる。ということで、こちらを使うように変更。たぶん、これが本家の Exposé が使っている API でしょう。

今回のビルドをベースに、シイラ 1.1 を出します。これからリリース作業に入るんで。

1.1 出したら、次は RSS やります、RSS。ほんと、絶対やるから。


[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