Macintosh Developer Online (MDOnline)


2001年5月10日発行号 - QuickTime 5が公開



MOSA会員のみなさんの登録がおおむねすんだみたいですね。よろしくお願いします。
今日の「今から始めるCocoaプログラミング」はちょっと消化不良なネタですが、お許しください。とりあえず、今分かっていることを何とか記事にしてみました。それから、以下のプレゼントは今日までですので、応募の方、お忘れないように。プレゼントは、料金を払っていただいた読者の方、それから、ヘリオグラフ製品の顧客の方、MOSA会員で登録された方々に応募の権利があります。よろしくお願いします。

==================プレゼント
Macintosh用シューティングゲーム『gShot』(5つ)
figs/photos/dcp_0538.jpg
―――――――――――――――――――――
申し込み方法:<msyk@locus.co.jp>宛にメールをする
 メールのタイトル:【gShot】を希望
 メールの本文には、名前、住所、郵便番号、当選時の公表名、を記載
 メールは、MDOnlineに登録のメールアドレスから送付してください
 締め切り:2001年5月10日(木曜日)

◇銀河帝国書院
 http://www.sagami.ne.jp/~ltjg/welcom.html
(新居雅行 msyk@mdonline.jp


QuickTime 5の日本語版がダウンロード可能に

QuickTime 5の日本語版がダウンロード可能になっている。QuickTime Updaterでインストールをしてもいいだろう。公開されたのは、Mac OS 9.1までで利用するためのQuickTime 5である。Ver.5では360度のVRムービー、コンテンツの独自のインタフェースを付けることができるメディアスキン、MPEG-1の対応、DVコーデックの改良、QuickTime PlayerのAppleScript対応などが新しい機能となっている。Mac OS X 10.0はQuickTime 5が最初から組み込まれている。なお、バージョンは5.0.1となっている。QuickTime UpdaterやあるいはWebページからのインストールは、ネットワーク経由でファイルを取ってくる形式になっている。エラーが出る場合があるので、そのときには、Webページにある「スタンドアローンインストーラ」でインストールファイルをすべてダウンロードして作業にあたればいいだろう。

関連リンク:QuickTime 5のダウンロード
カテゴリ:OS関連ソフトウエア, QuickTime


訂正》WebObject 4.5.1はObjective-CアプリケーションをMac OS Xで稼働させるためのもの

2001/5/7に配信した『“Mac OS X (Server) 10.0”で稼働するWebObjects 4.5.1がリリース』という記事で、WebObjects 4.5.1でJavaのアプリケーションが稼働するような記載になっていましたが、テクニカル・ピットの倉橋浩一さんよりご指摘をいただきました。WebObjects 4.5.1は、Objective-Cでのアプリケーション作成や稼働をMac OS X 10.0でもできるようにするためのバージョンです。JavaのアプリケーションをMac OS Xで構築したりあるいは稼働するには、WebObjects 5 for Javaを使うということになっています。以下の、2001年1月に公開された情報でもそのようになっています。お詫びするとともに訂正します。

関連リンク:WebObjects News from MacWorld
カテゴリ:


GeForce 2 MXのファームウエアと機能拡張のアップデータの日本語版が公開

NVIDIAのグラフィックスカードGeForce 2 MXのファームウエアとシステム機能拡張をアップデートするソフトウエアが公開された。英語版は2001年3月に公開されているが、以下のページにあるのは日本語のMac OS 9.1向けのアップデータである。パフォーマンスの向上と、アプリケーションとの互換性を高めるとしている。GeForce 2 MXは、現在販売されているPower Mac G4やCubeで採用されているグラフィックスカードだ(廉価モデルはATIのグラフィックスカードである)。

関連リンク:GeForce 2 MX Update 1.0.1
カテゴリ:周辺機器, Mac OS 9


REALbasic上でOpenGLのプログラムを可能にするプラグイン

「OpenGL Plugin 1.1」は、REALbasic用のプラグインで、OpenGLによる3Dグラフィックスを表示するパネルや、あるいはOpenGLのAPIをREALbasicのプログラムから呼び出すことができるようにすることができる。Doug Holton氏によるフリーウエアで、Ver.1.1ではCarbon対応となり、Mac OS Xでも稼働するようになった。プラグインをREALbasicにインストールすれば、OpenGLのAPIをC言語で使うときと同じような呼び出しをREALbasicのBasicプログラムで展開できる。サンプルプログラムもいくつか含まれているので、すぐにでも試してみることができる。

関連リンク:OpenGL Plugin 1.1
カテゴリ:ライブラリ, グラフィックス


今から始めるCocoaプログラミング》ドラッグ&ドロップでファイルを開く(4)Pure Javaとの組み合わせ

「ドラッグ&ドロップでファイルを開く」の一連のシリーズの締めくくりとして、Pure Java、つまりJavaの標準ライブラリをベースに作られたソフトウエアとの連携について考えてみたい。ただし、いろいろと不明な点もあり、また筆者の理解不足な点もあるかとは思うが、問題点などがあれば是非とも指摘していただきたい。
この一連のシリーズでは、CocoaのフレームワークにあるDelgateというメカニズムを使って、Cocoaアプリケーションで、Finderからのドラッグ&ドロップの機能を組み込むということを説明してきた。こうしたドラッグ&ドロップは、Mac OSのアプリケーションではどうしても組み込みたい機能であることはいまさら力説する必要もないだろう。しかしながら、Pure Javaのアプリケーションでこのドラッグ&ドロップを組み込むには、MRJのライブラリ機能を使って実現する必要がある。だが、筆者がためしたところでは、Pure Javaのアプリケーションで、MRJの機能を使ってドラッグ&ドロップに対応する機能を組み込んでも、ドラッグ&ドロップで既定のメソッドが呼び出されることはなかった。おそらくこれはバグだとは思われるが、Mac OS X 10.0.3でも直っていない。しかしながら、処理プロセス部分がPure Javaで作ったものがあり、そのプログラムをどうしてもドラッグ&ドロップ対応で作りたかったということもあり、Cocoaアプリケーションの中で、PureJavaのクラスを使って処理をするということが可能かを試してみた。とりあえずは何とか作成することができたのであるが、やはりいろいろと修正は必要になった点も含めて、「やったらこうなった」的な内容になってしまうがその状況をお届けしたい。もっとも、MRJがきちんと機能するようになると、こうした手法も意味がないという気もするのだが、Cocoaアプリケーションという外枠を用意しておくと、Pure JavaのプログラムからCocoaの機能を手軽に利用できるといったメリットもあるかもしれない。

Cocoaアプリケーション部分は、前回までに説明したものとほぼ同じようなものだ。ドラッグ&ドロップに対応し、ダブルクリックとドラッグ&ドロップで処理を切り分けるように作っているのがCocoaの部分だ。そして実際の処理部分はPure Javaで作ってある。ただし、ここでのPure Javaは、ビジュアル階層はまったく使っていないで、ファイル処理だけである。Cocoaのアプリケーション内でSwingを使ったらちゃんと動くのか…という点も興味はあるところだけども、これはまた別の機会に試してみたい。今回紹介するのは、ユーザインタフェースのないアプリケーションとなっている。
作成方法としては、Project BuilderでCocoa-Java Applicationを選択して、nibファイルでFile’s Ownerを自分で作ったクラスにDelegateしておくというだけである。そのプロジェクトに、Pure Javaのクラスで作ったソースを追加しておく。実はそれだけでおおむね動いてしまうのである。ビルドする上では何も考えなくても、CocoaのプロジェクトにPure Javaクラスがあってもかまわないわけだ。

だが、実際に動かすと、まずはファイルのエンコードの問題に引っかかった。JavaのString型クラスでは、文字列を一律にUNICODEで扱う。一般にはJavaではシステムのエンコードに従って処理をするため、たとえばShift-JISで記述されたファイルの内容を読み込むときには、Shift-JISの文字列を自動的にUNICODEに変換してString型として得られる。また、逆も同様だ。だから、ファイルのエンコードについてはあまり考えなくてもいいと言えばいいわけだ。しかしながら、Cocoaのプロジェクトの中で、java.io.FileWriterやjava.io.FileReaderあるいはその継承クラスを使うと、基本的にはコードの変換がされないと考えた方が良い。Shift-JISのファイルの内容はそのままのコードでStringに入ったりする。読んだ結果をそのまま書き出せば、あたかもうまく動いているかのように見えるので、ちょっとはまったが、結論的には読み書きするときには、エンコードをプログラムで記述するというのがもっとも確実な方法だと思われた。そのためには、java.io.InputStreamあるいはjava.io.OutputStream系のクラスを使う方が、byte型配列でデータ処理ができて都合がいいということもある。システムプロパティのfile.encodingを使って指定ということもあるのだが、TextEditの動作を見ても、ユーザが保存するファイルのエンコードを指定するという機能が組み込まれている。どうしても、エンコードを意識したファイル処理ということは、Mac OS Xでは避けては通れないと思われる。
ただ、処理の都合上、1行ずつ読み込むjava.io.LineNumberReaderは便利だから使いたいと考えるかもしれない。その場合は、readLineでいったんString型に読み込むが、getBytesメソッドでいったんバイト列にそのまま分解し、さらに新たにnew Stringで文字列を作るときに、1つ目の引数にバイト列、2つ目の引数に「"JISAutoDetect"」を指定して、それなりにうまく処理できると言うことも見つけた。文字列処理が重なるので処理速度が気になるところだが、こういった方法もとりあえずは使えるようである。

次にひっかかりがあったのが、メモリ管理の部分だ。CocoaはObjective-CのライブラリをJava-Bridgeという機能でJavaのクラスとして見えるようにしているというのがおおまかなところであり、実際には背後ではObjective-Cの枠組みで動いている。特にメモリ管理の点では大きな違いがある。Objective-Cのメモリ管理については以下の文書に詳しく記述されている。

◇Programming Topic: Memory Management
 http://devworld.apple.com/techpubs/macosx/Cocoa/TasksAndConcepts/ProgrammingTopics/MemoryMgmt/index.html

Javaではほとんど何も考えなくてもよかったに近いメモリ管理であるが、CocoaのJavaでも多くの場合はそうなると、Java-Bridgeのドキュメントには解説されている。つまり、CocoaのプログラムをJavaで書く場合には、基本的にはJavaのやり方でいいということである。
ところが実際に作り込んでいくうちに、メモリ関連のエラーで落ちるようになってしまった。フリーズのようになったり、あるいはエラーメッセージを出すなど症状は一定しないのだが、まずはどうすれば回避できるかを探ってみた。次のような状況でエラーとなることがわかった。Interface Builderでインスタンス化したクラスにおいて、メソッド外で定義してあるフィールド変数で、初期化としてnewでクラスのインスタンスを生成した結果を代入しているたである。もちろん、いくつかのメソッドでそのインスタンスを使いたいからフィールド変数で定義したのだが、こうすると、どうもエラーが出て落ちたりする。ある日出てきていたエラーメッセージからの想像でしかないのだが、そうして確保したオブジェクトのインスタンスは、Objective-Cのautoreleaseによってオートリリースプールを使ってインスタンスが保持されているようなのである。ところが、Interface Builderでインスタンス化したオブジェクトの初期化の段階では、何らかの理由でオートリリースプールが使えないということをにおわせるメッセージが出ていた。(実は再現しようとしたら、そのメッセージは出ないで落ちるだけになったりと、なかなか確認できなかった。)
それでどのように回避したかと言えば、フィールド変数で参照していたものを、メソッドの中に入れて、メソッドを呼び出すたびに、インスタンス化するようにしたら、エラーはでなくなった。1回のメソッド呼び出しで、オブジェクトを使い捨てするような流れにすれば、とりあえずは問題なくなったので、その方法で対処している。
なお、フィールド変数の初期化でオブジェクトの生成をしたらダメかというとそうでもない。別途プロジェクトを作って、短いプログラムで試してみたけども、その場合はとりあえずはエラーは出なかった。どういった条件で上記のようになるのかは残念ながら不明である。

以上はたまたま筆者が遭遇した引っかかりであり、問題解決というほどのものでもないのではあるが、何かの手がかりになるかとも考えて記事にした。「今から始めるCocoaプログラミング」の「ドラッグ&ドロップでファイルを開く」のシリーズは、とりあえずはこれで締めくくりたい。

カテゴリ:Java, Cocoa, 今から始めるCocoaプログラミング


TIL》WebObject 4.5.1のアップデータが公開、HP-UXでの稼働のための修正もある

WebObjects 4.5.1のUpdateが公開された。WebObjects 4.5.1をMac OS Xにインストールした後に、このUpdateを利用する必要がある。Updateは開発環境の場合に適用する必要があり、稼働環境では必要はない。不足していたファイルの作成や、ヘッダのアップデート、文書へのリンクが作成される。以下のTech Info Library文書に詳細が記載されている。また、この文書を読む限りは、「Mac OS X Server 10.0」というのがサーバOSの正式名称になるものと思われる。
また、Update 1での修正事項ではないが、HP-UXでの稼働させる場合には、WebObjectsアダプタの再構築をしなければならないことも記載されている。この修正は将来のアップデータに組み込まれる予定である。WebObjects 4.5.1をHP-UXで利用する場合には、以下の文書に記載された手順に従って作業を行う必要がある。

◇WebObjects 4.5.1 Update 1 (Mac OS X)
 http://asu.info.apple.com/swupdates.nsf/artnum/n12202

関連リンク:WebObjects: WebObjects 4.5.1 Post-Installation Instructions
カテゴリ:Knowledge Base(旧TIL), WebObjects


TIL》Mac OS XでPPPoEとAppleTalkの両方を利用する方法

Mac OS XでAppleTalkとPPPoEの両方を使う場合に、エラーメッセージが出る点について、Tech Info Libraryの文書で解説が掲載された。そうした利用を行う場合、システム環境設定の「ネットワーク」で「設定」のポップアップメニューから「詳細」を選び、「内蔵Ethernet」の設定を複製する。そして、新たに複製した側でAppleTalkを利用するというように設定を行う。

関連リンク:Mac OS X 10.0: Using AppleTalk With PPPoE
カテゴリ:Knowledge Base(旧TIL), ネットワーク


リソース定義ファイルにplstリソースを記述するための方法

シングルバイナリ形式のCarbonアプリケーションに含める必要のあるplstリソースについて、.rファイル内で定義したいがテンプレートが存在しないという点についての回答が、Technical Q&Aで掲載された。テンプレートは存在しないが、実際にplistファイルをプロパティエディタないしはテキストエディタでファイルとして作成し、.rファイル内でreadコマンドを使ってファイルの内容を読み込めばよいとしている。

関連リンク:QA1034:How to define a plst resource in a .r file
カテゴリ:Technical Q&A, 開発情報, Carbon/CF