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

November 28

掲示板で聞かれたので、こちらで解説。

Core Data と Cocoa Bindings を使うと、コーディングなしで NSTableView や NSOutlineView にデータを表示できる。これは便利だ。だけど、実際にやってみると、保存してもう一回開いてみると、表示順序が変わっている。なんじゃそりゃ?

原因は、Core Data が NSArray ではなく、NSSet を使っているため。NSSet は順列情報を保存しない。じゃ、順列情報を持たせるには、どうすればいいのか?

結論から言うと、ジェネリックな解決方法は存在しない。モデルに合わせて、ケースバイケースで対策することになる。まず考えられるのが、順列のためのプロパティを追加する方法。別に考えられるのは、順列のためのエンティティを作成する方法。

この前の Cocoa 勉強会で、そのあたりのところを議論したので、参考にこちらのスライドをどうぞ。

ダウンロード:
DNDCoreData.key
DNDCoreData.pdf
CoreDataDND.zip
CoreDataDND2.zip

これは、Core Data の FAQ になるよなぁ。

ちなみに、勉強会の席上で、なぜ NSSet を使っているのか、という話になったけど、おそらく SQL を使いたいがためだろう、という結論。XML と バイナリなら順列を保存できるのに、SQL だとできないんで、そっちに合わせたんだろう、と。

Cocoa 勉強会の話が出たので、ついでに宣伝を。もう書いちゃっても、いいんですよね?会長。

月に一度ぐらい集まって、Cocoa の初心者からディープな人までが、あーでもない、こーでもないと議論する Cocoa 勉強会。今週末にもやるけど、それで 15 回目となる、息の長い集まりだ。私も、最近になって参加させてもらっている。

そんな成果を形にしようと、このたび会誌を作成することになった。その名も「Cocoa Life」!勉強会で発表された題材を、まとめて詳しく丁寧に書いたものだ。どの書籍にも、どの Web ページにも載ってない、ここだけの情報が満載。発売日や購入方法に関しては、こちらのページを参照してください。私も書いてます。

そしてさらに、「会誌といったらコミケだろう」と、会長が思ったかどうかは定かではないけど、12 月末の「コミケ69」に参加決定!これも詳細はこちらのページを。「Cocoa 系プログラマサークル」といったくくりになるんでしょうか。そんなものは存在しないか。コミケに参加される予定の方は、ぜひお立寄を。

November 26

シイラ mini のページが新しくなった。シイラ本体のページからもリンクを貼っときました。

あと、こちらでは紹介してなかったけど、シイラ mini 1.1.1 もリリース。背景画像を変更できないことがあった問題点を修正。

November 22

シイラ mini 1.1 を公開!

先日公開したシイラ mini 1.0 にいろんなフィードバックをもらったので、それを反映させて 1.1 を作ってみた。さらに、本家シイラでもデザインをお願いしている nitram-nunca さんによって、デザインを一新。シイラらしさを残しながら、mini 独自の外観となった。

1.0 からの主な変更点は、以下の通り。

  • ホームページを設定可能
  • シイラと Safari のブックマークを表示可能
  • 背景色を、グリーンとシルバーから選択可能
  • 現在開いているページを、Web ブラウザで表示可能

これで、ブラウザとして一通り使えるだけの機能はそろったと思う。これ以降発展していくとしたら、mini の機能を増やすのではなく、シイラの補助役としての立場を明確にする方向になるかな。

November 19

XML をいじることの多い、最近。

XML では、いくつかの文字、「<」とか「&」とか、を直接記述することができないので、実体参照を使う。NSString の文字列を、実体参照を使ったものに置き換えるものはないかなー、と探していたら、CFXML にあった。CFXMLCreateStringByEscapingEntities() と、CFXMLCreateStringByUnescapingEntities() を使えばよろし。

ただ、Google で検索すると、この関数の Panther の実装はバグがあるらしい。少なくとも、10.3.5 では。Tiger では直っているらしい。その辺は、Darwin のソースコードをダウンロードして、チェックしながら使うといいらしい。ソースが公開されてるって素敵。

正直、XML は使えば使うほど、仕様のぐずぐずさ加減に、怒りが込み上げてくる。XML 1.0 でやめておけばよかったのに。そこに namespace だの XSLT だの XPath だの付け加えて、みんなそれぞれ好き勝手な方向を向いているから、収集がつかない。なら、それらを使わなければいいって?その通りです。でも、便利そうだから、思わず使っちゃって、でもやっぱり使い物にならねーよ、うぉぉー、となるわけです。

Dashboard の話。

Dashboard では、くるっとひっくり返る環境設定パネルを実現するために、あらかじめ表面と裏面の両方を HTML に含めておく。そして、表面を表示するときは裏面を隠しておき、裏面のときは表面を隠す。

で。Apple のサンプルを見ると、利用していない面を隠すには、CSS の display 属性を操作している。block か none に指定する訳だ。これできちんと動くし、Programming Dashboard の本でもそう解説している。でも、実はこの方法だと、Web プラグインが含まれている場合、表示を切り替えるたびに初期化処理が走ってしまうようだ。そのせいなのか、どうも挙動がおかしくなる。

これを避けるには、visibility 属性を使うといいようだ。visible か hidden を設定して切り替える。環境設定を表示するときに、なんかおかしいな?と思ったら、試してみるといいかも。

November 17

ダイナミック Objective-C、「第 15 回 クラスとは何か(2) - クラス情報に直接アクセスする」出てる。Class 型を C 言語の構造体としてアクセスする、って話。

Objective-C の話なのに、やっていることはほとんど C 言語だ。もともと Objective-C は、C 言語にオブジェクト指向を付加した言語、というよりは、オブジェクト指向関連の C 言語関数を、Smalltalk ライクな書式で置き換えた、って感じだから、これでいいのだ。きっと。

Dashboard 環境で動作するシイラである、「シイラ mini」を公開。

より素早く、より手軽に Web ページにアクセスすることを目的に、徹底的な小型軽量化を推進。画像と文字の大きさを削ることで、従来の 3 分の 1 の面積比を実現!(当社比)

ちなみに、さらに小型化を押し進めた「シイラ nano」も検討されたが、字が読めなくなるということで、断念。

そんな感じで、勢いで作ってみた。実用性あるかどうかは、はなはだ疑問だったけど、結構使えるんだよ、これ。ちょっとページを見たい時とか、ちらちら参照しながら作業したい時とかに、便利。必要なくなったら、さっ、といなくなるところがいいね。

ダウンロード:
ShiiraMini.wdgt.zip

November 16

最近、Dashboard づくことが多かったので、つい勢いで作ってみた。名付けて「シイラ mini」。

Dashboard のウィジェット上で動作する、シイラだ。小さい画面で小気味よく動く。出すときも隠すときも一瞬。画像も小さいけど、文字はある程度の大きさを確保。

構想 5 分、制作時間 1 時間で、動くものが出来上がった。近日公開予定。

November 15

Xcode 2.2 では、Deployment ビルドの実行中でも、クラッシュしたらデバッガと接続してくれる。デバッグシンボルがないのでソースコードのトレースはできないが、スタックトレースはできるので、どのメソッドでクラッシュしたのかは分かる。

この設定の有効/無効の切り替えは、[プロジェクト]→[アクティブな実行可能ファイルを編集]メニューから、デバッグパネルを選び、「クラッシュ時にデバッガを自動接続」チェックボックスを使う。

メモしておかないと、忘れそうだ。

November 14

Xcode 2.2 をインストールした。開発環境のアップデートは怖いので、仕事のすきまを狙って、えいっと。

メニューが再び日本語になっている。日本語は読みやすいけど、Xcode 2.0 ではリソースが抜けていたことがあったからなぁ。あまり信用せずに、様子をうかがいながら使ってみることにする。

ゼロリンクが、メニューから On/Off を切り替えられるようになっていた。一度理解するととても便利なゼロリンクだけど、導入直後は開発者を混乱の渦に突き落としていた。あえて、メニューに表示することで、存在を強調してみたか。

Dashboard 用ユーティリティプラグイン、「Jolla」を使ったウィジェットを公開してみる。「Promo」っていう名前の、アップルのトップページにある、宣伝用のバッジ画像を表示するウィジェットだ。

トップページには通常 4 つのバッジが表示されているけど、Promo ウィジェットはそのうちの 1 つをランダムに表示する。ウィジェットが表示されるたびに、新しい画像に切り替わる。画像をクリックすると、そのページに飛ぶ。

Jolla の機能のうち、HTML パースを利用したものだ。アップルのトップページからの画像のアドレスとリンクの取り出しは、getElementById() と getElementsByTagName() を使って行うことができている。

ダウンロード:
Promo.wdgt.zip

November 13

昨日、MOSA 主催によるウィジェット作成セミナーをやってきた。参加していただいた方、お疲れさまでした。長時間、四時間以上、にわたるセミナーだったので、大変だったと思います。しゃべる方も疲れた。のどがヒリヒリした。

セミナーは、主にウィジェットからネットワークにアクセスする方法について解説した。通常の JavaScript では足りない機能を、いかに補うかというのが主題になったかな。

そのセミナーで公開したのが、ウィジェットのためのユーティリティプラグイン「Jolla」だ。こちらは一般にも公開。Jolla は、ウィジェット作成のために便利な機能を集めたプラグインで、特にネットワーク関連の機能が充実。


現在の主な機能は、

  • 文字コードを指定した URI エンコード
  • リソースのダウンロード
  • テキストファイルの文字コード変換
  • HTML のパース

ってところだ。特に HTML のパースは、ネットワーク上の Web ページの HTML をパースして、DOM ツリーの形でアクセスできる優れもの。これは便利だ。

というわけで、ネットワークを利用するウィジェットの作成に興味ある方は、ぜひ。

November 11

QuartzComposerWeb.plugin っていうプロジェクトが sourceforge で始まっている。Dashboard や Safari で、Quartz Composer のコンポジションを再生するためのプラグインを作っている。前に、HMDT でも作っていた、Quartz Composer Plug-In for Dashboard と同じものだ。というか、一部ソースコードを流用している、っていうことでメールが来た。

このプラグイン、作ってみたけど、現在ちょっと開発がペンディング中。どうも印象として、Apple の Dashboard の実装がまだ熟成していない印象を受けている。OS がアップデートするたびに、いろいろ変わってくるからね。そのうち大きいアップデートが来るかもしれない、と思って、様子見中。

最近噂になっている、Dashcode といっしょに、Dashboard の実装はいろいろ変わるのではないか、と予想。

November 5

来週の土曜日、Dashboard のセミナーを行います。現在、MOSA で「Dashboard ウィジェットコンテスト」というものをやっていて、それに合わせた開催です。今度行うのは、<中・上級編>ということで、すでに簡単な Dashboard の作成はマスターしている方向けです。

で、何をやるかといいますと、ネットワークからの情報の取得、にフォーカスを当てます。最近の人気のウィジェットには、地図を表示したり、気象情報を表示したり、歌詞を表示したり、テレビ番組を表示したり、といった便利なものがありますよね?って、何をさしているか、バレバレですが。そんな感じの、ネットワークから情報を取ってきて表示する、といったタイプのウィジェットを作る方法を解説します。

具体的には、

  • URI のエンコード、デコード
  • テキストエンコーディングの変換
  • XML、HTML のダウンロード
  • ダウンロードした HTML の解析、パース

と、いったことを話します。予定です。他にも、AppleScript との連携や、便利なプラグインの紹介などもあります。

日時は 11/12(土)13:00 から 17:30 まで。長いよ!場所は、初台のアップルのセミナールームにて。そして、受講料は無料です!興味ある方は、こちらの「開催のお知らせ」を見てください。申し込み締め切りは 11/9(水)までだそうです。

November 3

MYCOM PCWEB で連載中の「ダイナミック Objective-C」だけど、13 回目は「Objective-C のエンジン部 - ランタイムに踏み込む」だ。

いままでは、Objective-C の仕様や機能をあれこれ紹介してきたけど、もうネタ切れだ。言語仕様、小さいからな。ここからは大きく方向を変えて、ランタイムライブラリの中身を紹介していく。ランタイムは C 言語で書かれているから、Objective-C からは直接取り扱うことができる。こうなると、もう、なんでもありの世界だ。

たとえば、ポージングに使われる poseAsClass: メソッドだけど、これはランタイムに対応する API がある。その API の中身をのぞけば、何をやっているか分かる。これは便利だ。さらに、そんな感じのコードを自分で書いて、しかも Objective-C の中で、実現することもできる。こうなるともう、ただの C 言語だよな。

ランタイムを取り上げる本当の狙いは、オブジェクト指向の実装の一例を十分に紹介すること。たとえば、オブジェクト指向を説明する時に、「生き物」オブジェクトがあって、「ほ乳類」オブジェクトがあって、「犬」オブジェクトがあって、云々と説明していくのもいいけど、依って立つものがないと話が眠くなるよな。

それよりも、「クラスとは何か?」と問われたら、「クラスとはこれです!」と、C 言語で書かれた Class 構造体を見せた方が分かりやすい。おれはこっちの方が好きだ。連載も、こんな感じで進めていきます。こうやっていくことで、「裸のオブジェクト指向」の姿を見せていきます。

シイラの方は、ビルド出しまくってます。こっちのページでは、10/26 に紹介したけど、その後、build050127、build051028、build051031、build051101、build051102 と出てます。

build050126 からの主な変更点を紹介すると、

  • 検索エンジンフィールドにファビコンを表示
  • Quartz Extremeに対応していない機種では、環境設定のページエフェクトの設定の横に、注意書きを表示
  • 環境設定のRSS記事の削除ボタンが機能していない問題を修正
  • 期限が切れている証明書のサイトにアクセスしたときに、もとのページに戻ってしまう問題の修正
  • メタル表示のときに、ステータスバーをエッチング表示
  • 起動と終了の高速化
  • Pantherでページエフェクトの注意書きが出てしまう問題の修正
  • ヘルプリンクの修正
  • RSSページで、MIMEがrdf+xmlであるページの対応
  • サイドバーで、タブを右側にも表示
  • RSSのパフォーマンスの改良
  • RSSの未読数をDockアイコンに表示
  • 詳細環境設定に、ページ履歴の保存期間尾設定を追加
  • アイコン環境設定で、アクアとメタルのツールバーアイコンを別々に 設定可能
  • セキュリティ環境設定で、Cookieを複数選択して削除可能
  • RSSユーザインタフェースの改良

という感じ。RSS の実装と、報告いただいたバグの修正や、細かい機能の改善をやってる。とても重かった RSS だけど、現在の最新のビルドでは、かなり軽くなっている。

やってもやってもキリがないので、そろそろ収斂をはからないといけない。

November 1

MYCOM PCWEB で、Tiger の Cocoa にみる MVC の完成 - スマートなデータモデルを実現する Core Data っていう記事を書いた。14 ページに渡る、超力作です。

Cocoa の MVC 構造を紹介する、ということで、Key Value Coding、Cocoa Bindings、Core Data、およびこれらの連携について解説している。特に Core Data については、これが一般に公開する記事では最初になるかな。

MVC の 3 つのレイヤが、どう協調してアプリケーションとして動作するかに焦点をあてて書いてみた。結論としては、この (13) MVC の協調動作のページにある図、ということになる。なんか、ビューとコントローラとモデルの間で、いったりきたりしているけど、これが Cocoa の MVC の、一つの「完成」された姿だと思うんだよね。

CodeWarrior 10 の販売が始まったらしい。最後の CW であろうと言われている CW 10。$99 でダウンロード販売。あと、ライセンスが限定されていてサポート無しの無料版がある。

注目される Intel 対応に関しては、「PowerPlant は Apple の Intel ベース OS にポーティング可能」とだけ書いてある。このリリースだけでは、Intel 対応がどのレベルまで行われているのか分かんない。ダウンロードして確かめるのが一番か。

あと、「Objective-C サポート」という文が含まれているのが、Cocoa 屋さんとしては気になる。どうも、エディタでコード補完やシンタックスカラーリングに対応した、というレベルらしい。コンパイラはなし。Xcode の外部エディタとして使え、ということか。

一応、新リリースという形にはなっているけど、これでおしまい、という感じがただよっている。長年、お疲れさまでした。いや、まだまだ使っていく人もたくさんいるに違いない。


[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