Macintosh Developer Online (MDOnline)


2000年7月12日発行号 - Carbon対応の実際



Expo前の静けさなのか、さらにバケーションシーズンだからか、このところ、ニュースは少なめです。
雪印乳業の問題もだんだん大きくなり、問題点がどんどんと噴出していますが、思うにこうしたことは雪印だけじゃないと思います。食中毒患者を出してしまって問題があらわになったから、どんどんと芋づる式に問題点が出てくるのであって、もし、これで食中毒が出てなかったら、回収された製品を再利用していたり、素手で食品を扱っていたことは分からないわけです。企業が最優先することは収益であり、まじめにやっていたら、ぜんぜん儲からないわけです。だから、問題が出ない程度に手を抜くというのは事実なのでしょうけど、やりすぎると問題が発生します。ここが難しいところでしょうね。現場というのは、締めつけることによりだんだんと良くなるという風に考えられなくもないですが、普通はだんだんと杜撰になるでしょう。それをしっかりチェックをするのが、管理者であり経営者だと思います。成長している産業分野では競争も激しくスピード経営が求められるのですが、食品の老舗企業となるとまた状況は違うのかもしれません。想像ですが、しっかり確立したブランドの上にのっかってなんとなくうまくやれていることが、活性化すべきところを沈滞化させたのかもしれません。だけど、ブランドが崩れるのは早いと聞きます。ここで開き直って1から出直せるか、やっぱり変わらないかで何年後かは大きく違っているでしょう。
(新居雅行 msyk@mdonline.jp


【小池邦人のプログラミング日記】2000/7/11<Mac OS Xへの道 Carbon対応の実際(1)>

既存のソースコードをCarbon APIに対応させ、Mac OS X環境でも起動できるアプリケーションを完成させるのには、いくつもの工程が存在します。

(1)必要のないAPIの削除
(2)MacOS 8/9で導入された新APIの利用
(3)WinodwPtrとGrafPortを明確に区別
(4)アクセッサーファンクションの利用
(5)Print Manager関連のAPIを変更
(6)Scrap Manager関連のAPIを変更
(7)Mac OS Xメニューモデルへの変更
(8)新しいイベントモデルへの変更
(9)Mac OS Xに対する最適化

これらの工程は、今後Apple社から発表される技術内容(Mac OS Xβ版とか...)によっても変化する可能性があります。また、Carbon化するアプリケーションのタイプによっては省略できる工程もあります。例えば、プリントアウトの必要ないアプリケーションの場合には、(5)の工程を行う必要はありません。加えて、Mac OS 8/9環境のみで動作するCarbonアプリケーション(意味があるかどうかは別にして...)の開発には、(7)から(9)の工程は必要ありません。

ただし、どのアプリケーションに関しても最低限(1)から(4)までの工程は必要です。また、それらの工程はそれぞれが相互に関係していますので、4つの工程を同時進行で進めても良いと思います。ひとつのソースファイルをコンパイルし、表示されたシンタックス以外のエラー(APIや定数が定義されていないとか...)を調査して順次対処していきます。この時の参考となるが、Apple社が提供している各Managerに対するドキュメント(PDF)ですが、それ以上に、エラー箇所に関係するManagerのヘッダーファイルが手助けとなります。例えば、Window Manager関連のAPIについてコンパイルエラーが表示された場合には、MacWindows.hを参照してみます。そのソースコードの中で、

#if CALL_NOT_IN_CARBON



#endif /* CALL_NOT_IN_CARBON */

ではさまれた箇所に記載されているAPI、定数、構造体は、Carbon環境では一切使用できませんので注意してください。また、コメントとして...

/* Routines available in Mac OS 8.5 and later*/

とか

/* Routines available in Carbon and later*/

などと記載されている箇所は、Mac OS 8.5以降の環境やCarbon環境のみで利用できるAPI、定数、構造体であることを示しています。

では、各工程を一つ一つ検証していくことにします。

(1)必要のないAPIの削除

今まで特定の箇所に実装してきたAPIのうち、Carbon環境では実装する必要がない物があります。例ば、一番最初(多分、main()ルーチン)に実行していたInitGraf()やInItFonts()、InitWindows()、InitMenus()、TEInit()、InitDialogs()といった各Manager初期化ルーチンは、すべて実装する必要はありません。メニュー関連ですと、アップルメニューに項目を加えるAppendResMenu()とか、そのメニュー項目を起動させるOpenDeskAcc()なども必要ありません。Carbon環境では、これらはすべてOS側が自動的に行います。

同様にイベント関連のSystemtask()や、Text Servic ManagerのTSMEvent() やTSMMenuSelect()といったAPIも実装する必要はありません。それから、Carbon環境ではQuickDraw 3DのAPIは一切サポートされていませんので、もしアプリケーションがそれらを利用していると、OpenGLルーチンか独自のルーチンに切り換える必要があります。QuickDraw 3Dファンへの朗報として、「Quesa」というOpenGL上のQuickDraw 3Dコンパチブル・ライブラリが開発されつつあるようです。興味ある方は以下のサイトを覗いてみてください。
http://www.quesa.org/

(2)MacOS 8/9で導入された新APIの利用

例えば、未だにソースファイルにMac OS 7用コードが多数含まれている場合には、最低限Mac OS 8で導入されたAPIへ、最善作としてはMac OS 9で導入されたAPIへ切り換えておく必要があります。Mac OS 7からMac OS 8へ切り替わった時、ヘッダーファイルに定義されているAPIや定数の名称も大きく変更されました。例えば、Mac OS 7ではGetDItem()という名称がでしたが、Mac OS 8ではGetDialogItem()とう名称に変わっています。こうした名称変更は、Control Manager、Menu Manager、Dialog Mnager、Resource Mangerなどに多数存在します。ソースコードがMac OS 8対応になったら、続いてMac OS 8.5、Mac OS 8.6、Mac OS 9.0で新規に追加されたAPIを勉強してみてください。Apple社のデベロッパーサイトからドキュメントをダウンロードして読むと、最近のOSバージョンの変遷で、いかに多くのAPIが追加されてたのかに驚かされるかもしれません。

ちなみに、古いAPIでもCarbon環境で利用できるものは、そのまま利用していても構いません。例えばウィンドウ作成するAPIとしては古くからNewCWindow()がありますが、これを最新のCreateNewWindow()に置き換えることが可能です。かといって、Carbon環境でNewCWindow()が使えないわけではありません。ただし、将来的にMac OS X対応アプリケーションとするならば、CreateNewWindow()に切り換えられることをお薦めします。また例外的に、旧APIの使用がまったくダメな物もあります。それはStandard File Packgeです。CarbonLibではStandardPutFile()やStandardGetFile()といったお馴染みのAPIは利用できません。これらは、Navigation ServiceのNavGetFile()やNavPutFile()に必ず切り換える必要があります。

(3)以降の工程については、次回に詳しくお話しする予定です。

関連リンク:オッティモ
カテゴリ:Carbon/CF, 小池邦人のプログラミング日記


「新・AppleScriptでゼンマイびゅんびゅん!!」が出版

アスキーより、AppleScriptの書籍「新・AppleScriptでゼンマイびゅんびゅん!!」が発行される。発売日は2000年7月13日で、著者は掌田つやの氏、価格は1,600円だ。B5判328ページでCD-ROMが添付する。1995年に発行された「AppleScriptでゼンマイびゅんびゅん!!」の改定版と思われるが、判型も大きくなりページ数も増えている。前著から考えれば、実用的なスクリプトをたくさん紹介するような書籍だと思われる。

関連リンク:新・AppleScriptでゼンマイびゅんびゅん!!
カテゴリ:雑誌、書籍, AppleScript


アスキーからMac OS X Serverの書籍が発売

アスキーよりMac OS X Serverを解説した書籍「Mac OS X Serverシステム管理ガイド」が出版される。著者は4名で、伊藤宣博・兵藤公一・辻大輔・竹尾哲也の各氏だ。2000年7月13日に出版される。B5変型で360ページ、価格は3,600円だ。Mac OS X Serverのシステム管理について、UNIXの基礎も含めて解説を行っている。Mac OS X Server 1.2に対応している。

関連リンク:Mac OS X Serverシステム管理ガイド
カテゴリ:雑誌、書籍, Mac OS X Server


Inside NetBoot 1.2がリリース、Mac OS X Server 1.2に対応

Mac OS X ServerをコアにしたNetBootのシステム設計や技術情報が含まれたPDF文書の「Inside NetBooting 1.2」がリリースされている。Mac OS X Server 1.2をベースにした解説となっており、中の説明では、クライアントシステムはMac OS 9になっている。NetBootの起動処理の詳細といった技術的な情報や、ネットワークの構成の例など、NetBootに関するさまざまな情報が22ページに渡って解説されている。

関連リンク:Inside NetBooting 1.2
カテゴリ:ネットワーク, アップルからの開発資料, Mac OS X Server


ファイルメーカーProのプラグインがアップデート

◇Utilix 0.6
http://www.abstrakt.com/utilix.html
Abstraktは、ファイルメーカーProのプラグイン「Utilix」のリリース0.6を公開した。このプラグイン集は、もとはプラグインのデモとして作られたもので、テキストのカラーを設定したり、クリップボードの内容を保存したり、あるいはクレジットカードのデジットチェックなどの機能が含まれている。シングルユーザライセンスはフリーで、製品に組み込む場合に$50のライセンス料が発生する。新しいリリースでは、画像のサイズを計測したり、ファイル処理関係の関数が追加された。Mac OS版のみが配付されている。
◇iMago
http://www.abstrakt.com/imago.html
iMago 1.0.2がリリースされている。iMagoは、画像ファイルのサムネイルを作成するファイルメーカーProのプラグインで、元画像を開くなど、画像処理の機能をいくつか追加する。$49で、開発したアプリケーションでの利用は$250となっている。こちらもMac OS版のみ。

関連リンク:Abstrakt
カテゴリ:ライブラリ, データベース