HMDT - Logic and Intuition -

about HMDT

HMDT Journal

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 の外部エディタとして使え、ということか。

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

Copyright © 2002-2006 HMDT. All rights reserved.