Macintosh Developer Online (MDOnline)


2000年6月10日発行号 - Navigation Serviceを使う



Carbon化のシリーズは、Navigation Serviceのサポートに入りました。何回分かの原稿はすでにサーバにはアップしてありますので、すぐにでも御覧になりたい方は、Webサイトを御覧ください。メールでは何回かに分けて配信することします。だんだんプログラムが本格的に長くなってきましたが、メールとWebサイトの両方でうまい具合に掲示するということにやや限界があるため、少しシステムに手を入れました。おかしな動きをしないことを強く期待するのですが、ちょっとドキドキします(笑)。
いずれにしても、メールで御覧になっている方が主体ですので、メールでの文面を優先されるようにしましました。メールで送られたソースは、コピー&ペーストで、開発ツールに持って行くことができるようにしたつもりです。一方、Webサイト側では、空白文字を並べてもインデントが思うようにつきませんし、タブでも同様なので、とりあえずは「 」で強制的に空白を並べてインデントを付けています。しかし、これだと、Webページから開発ツールにコピー&ペーストしても、 の空白は、普通のスペースではないので、そこで変な定義があるようなメッセージを出してコンパイルエラーになります。その場合は、置換などをしていただく必要があります。また、Webページでは、本来半角のシングルクォーテーションであるべきところが全角になっていますので、その点も気を付けていただきたいところです。いちおう、どこかに注意書きを書くつもりではありますが、ソースをそのまま御利用される場合には、メールから取り出されることをお勧めします。
記事が分割されていたりしますが、実は1つの記事は8KBまでなのです(PostgreSQLの限界)。それに、ソースではタブ1つが、空白4つとすれば、20バイトにもなり、実は、ちょっとしたソースでも8KBになってしまいます。うまい方法をもう少し模索しないといけなさそうです。また、プログラムソースをめぐる部分が、実際にどんなふうにみなさんが御覧になられるのか、いろいろなメールソフトもあることですし想像できない面もあります。何か御要望があれば、御遠慮なくおっしゃってください。
(新居雅行 msyk@mdonline.jp


【Carbon化シリーズ】Navigation Serviceに対応(1)

少し間が空いてしまったCarbon化シリーズだが、折しも小池さんの「プログラマー日記」もCarbonの話が始まった。同じテーマではあるものの、視点の違いもあるし、いろいろな説明があった方が理解の助けにもなるとも考えられる。いずれの記事もお読みいただきたい。
さて、Carbon Daterで得られた結果を見て考えたのだが、一気にライブラリをCarbonLibだけにしてしまって、エラーが出たらそれに合わせて修正する…という方法がまず1つある。しかしながら、そうなるとエラーの応酬で、試しに実行するというところに行くまでに非常に時間がかかるということが予想される。とにかくCarbon化するならその手法もありだが、いちおう記事を書かなくてはならない。そこで、Carbon Daterの結果を見ながら、まずは現状のライブラリ、つまりCarbonではなくClassic環境アプリケーションとしてなるべくCarbonに近いソースリストにしてから、最後にCarbonLibを統合するという手順の方がいいのではないかと判断した。というか、そうでもしないと、連載記事はいつまで経っても出てこないということになりかねない。

まず、Navigation Service対応から入ろう。ファイルを開く時や保存する時のダイアログボックスは、Standard File Packageという仕組みがToolboxに用意されていて、それを使って簡単にファイル選択のダイアログボックスが表示できた。昔のマルチアプリケーションではない時代のFinderならそれでもよかったのだが、マルチFinderになってからも、ファイルを開くダイアログボックスはモーダルだったために、使いにくいと思ってしまう場面はよくあった。また、ファイル一覧の表示形態は単なるファイル名だけの名前順リストだし、ダイアログボックスも大画面が当たり前の現状ではそぐわない小さなものだったりした。その状況を改良するためのNavigation Serviceというシステム機能が登場して利用できるようになった。当初はサポートするソフトウエアも少なかったが、Mac OS 9時代の現在は、多くのソフトウエアがサポートする機能だ。モードっレスダイアログで位置を移動でき、ファイルの一覧も階層化されて表示できるなどFinderの一覧表示に匹敵する。それに、「よく使う項目」などと連動しているなど、使い勝手は大きく上がるのである。APIの利用方法については、以下のドキュメントがあるが、SDKをダウロードすればPDFファイルも入手できる。
◇Programming With Navigation Service
 http://devworld.apple.com/techpubs/carbon/Files/NavigationServices/Navigation_Services/index.html
◇ナビゲーション・サービスを使ったプログラミング(日本語)
 http://developer.apple.com/ja/techpubs/pdf/NavigationServicesJ.pdf

まず、CarbonLib環境に移す前に、Classic環境でNavigation Serviceに対応し、動くソースプログラムを作ることにする。そのための基本は、ヘッダーのNavigation.hをインクルードすることだ。このヘッダは、MacHeadersには入っていないようなので、Navigation Serviceの機能を使うソースの頭で必要だ。TextDraw IVでは安直な方法として、すべてのソースでインクルードしているConstants.hというヘッダーにインクルード文を書き加えて、どのソースでもNavigation Serviceの機能を利用できるようにした。

#include        <Navigation.h>           //    (Carbonizing)

次に、Navigation Serviceのスタブをライブラリとして組み込む。リンクしてNavigation Serviceの関数呼び出しを行えるようにするためのもので、比較的最近に登場したシステム機能では、こうしたライブラリの組み込みが必要になる。プロジェクトのウインドウをアクティブにして、「プロジェクト」メニューから「ファイルを追加」を選択し、CodeWarrior Pro 5→Metrowerks CodeWarrior→MacOS Support→Universal→Libraries→StubLibraries→NavigationLibというライブラリファイルを選択する。これで、NavigationLibがプロジェクトに含まれる。CarbonLibを使えば必要なライブラリは全部含まれているということになっているので、NavigationLibをプロジェクトに登録する必要はないのだが、当面はClassicアプリケーションとしてソースを仕上げて行くので仕方ない。

さて、Navigation Serviceに対応するためにソースを書き直す…と行きたいところだが(実際には行ったのだが…)、その前に、openリソースの定義をしておくのが結論的には便利だということになる。openリソースはもともとはTranslation Manager(Inside Macintosh: More Macintosh Toolboxを参照)が利用するリソースではあるが、Navigation Serviceを使う上では、そのアプリケーションがサポートするファイルタイプを定義するリソースとなりうる。言い換えれば、openリソースから「開くことが可能なファイルのファイルタイプを得る」という方法ができ、それがいちばんシンプルなやり方なのである。従来からはこうした情報としてはBNDLリソースやFREFリソースがあり、もちろんそれらはそれらで定義しておかなければなければならない。後から追加されたTranslation Managerの機能をNavigation Serviceが採用したものだと思われる。ちなみに、BNDLリソースはアイコンとの対応に重点があるわけで、それに対してopneリソースはアプリケーションがサポートするファイルタイプと言うものを明確に規定しているものなのである。

さて、そのopenリソースだが、基本的にはID=128で作成する。ただ、ResEditにはテンプレートがないため、Rezのソースを作った方が簡単だろう。openリソースのテンプレートは、Finder.rに定義されている。それを元に、以下のようなopenリソースの定義を記述した(Finder.rのインクルードは必要はないようだ)。TextDrawではSaveAsDialog.rというリソース定義ファイルに以下の記載を追加した。txDCというのは、TextDrawの文書ファイルのフォーマットである。MNiiがTextDrawのアプリケーションシグネチャだ。定義定数で書いてもいいのだが、確定しているものなら、直接書いてしまった方が分かりやすいという気もする。

resource       ’open’    (128)
        {
               ’MNii’,     //アプリケーションのシグネチャ
               {’TEXT’, ’PICT’, ’txDC’}  //サポートするファイルタイプ
        };
【全角のシングルクォーテーションは実際には半角文字で入力してください】

次回はいよいよソースプログラムの改造に取りかかる。

カテゴリ:Carbon/CF, Carbon化


AppleShare IP 6.0.2への日本語版のアップデータが公開

AppleShare IPのVer.6.3.2へのアップデータの日本語版が公開されている。変更点は、Webサーバで発生する可能性のあるセキュリティの問題を解決するもの。ある種のリクエストをサーバに送付した時に32KBの余分なデータを送る点を解消した。Mac OS 9.0.4(G4 Serverは9.0.3でもかまわない)
が稼動環境で、AppleShare IP 6.3.1に対して適用できる。

関連リンク:AppleShare IP Web & File 6.3.2(日本語版)
カテゴリ:サーバー製品


4Dで画像などのマルチメディアデータベースを実現する外部コマンド集

ファクトリーはデータベースソフトの4th Dimension(4D)で、画像データベースなどを作成することを可能にする外部コマンド集「4D Image Filing Tools」を正式にリリースする。レイアウトに画像やムービーなどを配置したり、あるいはデータベース構築に便利な機能を提供する。ファイルのパス情報を管理することにより、大量のデータでも高速に処理ができるなどのメリットがある。Macintosh版とWindows版があり、価格は\128,000で、2000年6月25日より発売する。以下のページより、サンプル版を入手することができる。

関連リンク:4D Image Filing Tools
カテゴリ:ライブラリ, オーサリング系, データベース


WebObjectsで長時間かかる処理を行う時のサンプルがJava対応

Tech Info Libraryに、WebObjcts 4.5のサンプルが掲載された。処理に長い時間がかかる場合の処理の組み立て方を示すもので、従来はObjective Cで作成されていた。それをJavaで再作成して配付を開始したものだ。解説文書には具体的なことが記載されていないが、処理途中を示すページを構築したり、キャンセルを受け付けるようにする方法等が流用できる形式で示されているものと思われる。

関連リンク:WebObjects 4.5: JavaLongResponsePage
カテゴリ:Knowledge Base(旧TIL), WebObjects