Macintosh Developer Online (MDOnline)


2001年1月26日発行号 - Mac OS 9.1では仮想記憶をアプリから使える



SnapXShotの改造でちょっと疲れ気味です(苦笑)。ちょっと、最近、いろんなことに手を出し過ぎなのは分かっていますが、どうもC言語って私にとっては重いんですよね。中々間違いに気がつかない…。で、まあ、Javaで作ることが多いのですが、いろんな言語や開発環境を日替わりで使っているのは、効率がいいのか悪いのか良く分かりません。今、WindowsでJBuilderを使って書籍を書いています(出版は4月を予定しています、例の「チャレンジ!Java」のJBuilder & Swing編です)。で、Mac OSデベロッパーセミナーのシステムは泥縄式に(笑)、クライアントサイドのAppleScriptで処理をしています。でまあ、SnapXShotはProject BuilderのCだし、OMEはAppleScriptやらCodeWarriorやら巻き込んでいるし…。ちょっと頭がごちゃごちゃになりそうです。WebObjectsも詰め込みはじめていますし(原稿をかかないと…)。
そういえば、QQQシステムの決済を止めるのは今週はできませんでした。回線移動がまだできないのです。目処は立っていません。すみません。何となく、急にやらないといけないような気配も察しはじめていますので、QQQシステムで費用をお支払いいただく方は、できれば、この週末にお願いします。この土日は間違いなく稼動しています。
Mac OSデベロッパーセミナーのうち、倉橋さんのセッションはそろそろテンパイです。8割の席が埋まりましたので、参加御希望の方はお早めに申込をお願いします。申込方法は、1/19に宛のメールでみなさんにお知らせしています。
◇Mac OSデベロッパーセミナー
http://cserver.locus.co.jp/expo2001dev/
(新居雅行 msyk@mdonline.jp


Mac OS 9.1に搭載された仮想メモリを効率的に使用するAPIの文書

Mac OS 9.1では、File Mapping APIという機能が組み込まれていて、そのTechnoteが公開されている。簡単に言えば、アプリケーションが仮想メモリを積極的に使う機能だと考えれば良い。Mac OSでは仮想メモリはサポートされているが、基本的にはシステム管理下での動作だった。通常のアプリケーションは自分自身に割り当てられたメモリの中でデータ領域を確保する必要があり、その点では古い時代の制約を引きずっている。アプリケーションの確保メモリは基本的には固定量であるため、大量のデータを扱うにはそれに見合う領域を確保する必要もあった。しかしながら、File Mappingを使うと、仮想メモリ領域を、あたかもアプリケーションのメモリ領域のように使うことができる。仮想メモリはファイルを確保して、ファイルの中身と物理メモリ間でデータのやりとりをシステムレベルで行うことで、物理メモリよりも多くのメモリ領域を利用するという手法だ。File Mappingを使うことで、アプリケーションは、自分のメモリ領域とは関係なく、仮想記憶ベースの記憶領域を確保することができる。そして、そこはあたかもメモリの中のように扱えるようになる。ただし、仮想記憶に使うファイルの確保、その部分のメモリブロックと自分自身が使う領域との対応付けについては、単にメモリを確保する以外に追加で行う必要が出てくる。しかしながら、何かとメモリ環境が不利なMac OSで大量のデータをアプリケーションで扱うには効率的かつ確実で、スケーラブルな手法だと言えるだろう。
なお、このAPI群がMac OS Xで使えるかどうかの情報はない。Mac OS Xは、Mac OSとは異なり効率的なメモリ管理手法が使えるとされているため、こうしたAPIの必要はないのかもしれないが、ソース互換を目指すCarbon上でのアプリケーション開発が盛んであることから、Mac OS Xとの絡みについての情報も望まれる。

関連リンク:File Mapping in Mac OS 9.1
カテゴリ:Technote, Mac OS 9


Mac OS環境のOpenGL 1.2に対応したSDKをアップルがリリース

OpenGL 1.2 SDK(Software Development Kit)が、Appleから配付されている。OpenGLは3次元の画像処理を行うライブラリで、業界標準化した3Dグラフィックス機能だと言って良いだろう。Mac OSではもちろん、Mac OS Xでもサポートされる。システムの機能拡張としてVer.1.2が最近リリースされているが、Mac OS 9.1にはVer.1.2が組み込まれている。また、英語版のVer.1.2.1がリリースされている。このバージョンに対応したソフトウエア開発キットがSDKだ。OpenGLをMac OSで実現できるように、Appleが組み込んだものであり、そのレベルでのドキュメントや開発のために必要なヘッダ、ライブラリなどがセットになっている。SDK自体はダウンロードファイルで40MBを超すと言う巨大なサイズだが、多くはサンプルアプリケーションだ。ドキュメントやライブラリなどコアの部分だけの10MB程度のものもあるので、用途に応じてダウンロード対象を選択しよう。

関連リンク:OpenGL Software
カテゴリ:アップルからの開発資料, グラフィックス


【SnapXShot制作記】挫折か…と思ったらうまくいったCarbon Event化

Mac OS Xで画面ショットを直接ファイルに落としていくユーティリティを作ろうと決心を固め、その過程をお届けするこのシリーズは、約2ヶ月ぶりくらいになるだろうか。元は、Appleが配付しているサンプルプログラムに画面のピクチャを作成するものがあったので、それを改造すればOKだと考え、とりあえず、ちょっと不安定な面もあるけど、Command+Shift+3で、Documentsフォルダに画像ファイルが連番で残るようなものができ、公開した。Mac FanやASCIIなどの雑誌に掲載されたりと、それなりの反響はあったという次第だ。

そこで次のステップに行くことを考えた。当初のプログラムは、昔のEventモデルであるため、キーセンスは旧来のポーリング手法だ。つまり、何もイベントがないときには逐一キー状態をチェックして…という方法である。こうしたイベント処理はマルチタスク処理の障害になるため、Mac OS Xでよりスムーズに稼動する(はずの)Carbon Event Managerが用意された。いずれはこっちで動作させる必要があるわけだから、とにかく手をつけておきたい。幸い、MDOnlineでは【小池邦人のプログラミング日記】で、小池さんがCarbon Eventについてたっぷりと解説してくれているので、すぐにでもプログラミングにとりかかることができた。
ShapXShotはまだユーザインタフェースがないので、メニューやウインドウのハンドリングをしなくてもいい。後は、キーの状態を逐一チェックするために、タイマーイベントを発行して、そこでキーの状態をチェックするようにすればOKなはずだ。楽勝じゃないの…。

だけど、まずはアプリケーションの基本である「終了できるようにする」を組み込まないといけない(笑)。これも小池さんの記事を読む限りは、簡単にできそうだ。当然ながら、基本イベントのQuitに対応するハンドラはすでにある。まずはイベントループをやめて、初期化の後にRunApplicationEventLoop(); を呼び出す。後は、コールバックルーチンだけの世界に入る。で、(悪い癖だが〜笑)いきなり実行…終了できない…。当然で、内部的なイベント処理をやめないとアプリケーションは終了しないのである。QuitイベントでのハンドラにQuitApplicationEventLoop(); という呼び出しを追加しなければならない。これで、Command+Qや、Quitのメニュー項目の処理は完結する。ちなみに、よくやっていた手段で、Quitイベントハンドラ内でグローバル変数に値を指定して、それをイベントループでチェックして終了するというようなことはもはや必要なくなる。

さて、いよいよタイマーイベントの組み込みだ。実はこうしたことも想定して、「現在の画面をPICTファイルに保存する」という関数をすでに作ってある。タイマーイベントで呼び出されるコールバックルーチンから、その用意してある関数を呼び出せばいいはずだ。まず、そのコールバックルーチンを定義通りに作成する。ちなみに、以下のような形式であればよい。

void MyTimeEventHandler(
EventLoopTimerRef timerRef,
void* userData)
{ .... }

この関数を、一定時間ごとに呼び出すハンドラは初期化の段階で、以下のような方法でシステムに登録できる。該当部分のダイジェストになるが、次の通りだ。

EvetnLoopTimeRef timerRef;
EventTimerInterval interval;

interval = 0.1; //呼び出し間隔は秒数で指定する
anErr = InstallEventLoopTimer(
GetCurrentEventLoop(),
0,
interval,
NewEventLoopTimerUPP(MyTimeEventHandler),
NULL,
&timerRef);

間隔を調整したりしながら、システム警告音をタイマー呼び出し関数で使うなどして、確かに一定時間ごとにイベントが発生して、MyTimeEventHandler関数を呼び出すのは確認した。
そして、MyTimeEventHandlerから、画面ショットをPICTファイルに落とす関数を呼び出してみた。だが全然動かないのである。エラー処理はいいかげんではあるものの、何のエラーもなく、落ちることもなく、ただただ静かに何もしない。キーセンスされたことを示すシステム警告音だけが空しく鳴るだけだ。

もちろん、デバッガを動かしてトレースしてみた。どうも、グラフィックス関連ではエラーは出ていない。グラフィックス処理はほぼQuickDrawなので、あまりエラーは見つけにくいが、Picture構造体はとにかく、それなりに埋まっている…。ここでふと思い出した、Carbon Eventによるコールバックは割り込みルーチンである。Interrupt-safeなAPIを記述した以下のTechnoteを思い出した。

◇Interrupt-Safe Routines
 http://developer.apple.com/technotes/tn/tn1104.html

ただ、この文書では、コールバックルーチンはinterrupt routineに含まれていない。イベントのコールバックルーチンや、Drag Managerのルーチンについては記載されておらず、デバイス関連のコールなどがinterrupt routineに入るものとして説明されている(なお、この文書ではOpen TransportはInterrupt-Safeのリストに含まれている…)。
これを読む限りでは、QuickDrawにはInterrupt-Safeなものはないと書かれている。だとしたら、ウインドウ処理などはできないことになってしまうから、Carbon Eventのコールバックはまた別物なのじゃないかと思うが、それなりに参考にはなるかもしれないので、使っているマネージャを逐一チェックをした。そのなかで、File Managerの記述が目に入った。ファイル処理は割り込みルーチンでは非同期のものしか使えないため、FSなんとかのAPIはだめだというのである。
SnapXShotでは、ファイル名を決める部分で、決めたファイル名のものが存在すれば、ファイル名に含まれる番号を増加させて、いずれにしても存在しないファイル名を決定するという部分がある。ここでは、FSSpec構造体を作り、その戻り値でファイルが存在するかを判断している。はたして…デバッガで追ったところ、どうも、FSMakeFSSpec関数の戻り値がおかしい。存在するファイルを指定したのに、存在することを示す戻り値が戻らないのである。既存のファイルと同じ名前のものが決定された場合であっても、既存の画像ファイルに上書きすることになるはずなのだが、その上書きもされたりされなかったりする。もしかして、ハイレベルのFile Managerが機能していないのではないかということなのだろうか。それで、PBMakeFSSpecAsyncなどとやってみたのだが、慣れない低レベルAPIでちょっと疲れてしまった。とにかくうまく行かない。

……と思っていたが、原稿を書いてから改めてTechnoteを見ていると違うポイントに目が向いた。いやはや、危ない危ない(原稿を書き直そうとしたけど、まあ、低レベルのプログラマはこんなもんだということがあってもいいかと思うので、続けて書こう)。どうやら、グローバル変数というものは今一つ怪しいようなのだ。そういえば、ユーザデータをコールバックルーチンに引き渡すくらいだから、グローバルは使うなということなのではないだろうか。そう考えれば確かにそう思うわけだが、果たして…やはりそうだった…。
実は、Documentsフォルダのボリューム参照番号とディレクトリIDをグローバル変数に入れていたのだが、その値が、コールバック内では違うのになっている。すっかりこういうところは信用し切っていたから目が回らないものなのだ。改めてコールバックルーチン内でローカル変数にボリューム参照番号とディレクトリIDを代入してやれば、見事に画面ショットはファイルに収まったという次第だ。
他にもグローバル変数は少し使っているのだが、そこはたまたま支障はなかったのだろう。ここもきちんとユーザデータ化して構造体で管理をして、プログラムを整理してからリリースをしようかと思う。

関連リンク:SnapXShot
カテゴリ:Carbon/CF, SnapXShot制作記


Mac OS X Public Betaで、システム起動時に開くアプリケーションの設定

Tech Info Libraryに、Mac OS X Public Betaで、システム起動時に自動的に開くアプリケーションや文書の設定方法が公開されている。System Preferencesアプリケーションで「ログイン」のパネルで設定が行える。その手順が記載されている。

関連リンク:Mac OS X Public Beta: Opening Applications and Documents Automatically
カテゴリ:Knowledge Base(旧TIL), Mac OS X


TIL-JにiTunes日本語版に関する文書が公開、英語版iTunes利用者向けの情報など

Tech Info Library-JにiTunes日本語版に関する文書が掲載された。以下はそのアドレスとタイトルだが、MDOnlineで英語版の文書について既報のものについては要約を省略した。

◇100451JO:iTunes: 英語版 iTunes をインストールしたシステムに日本語版をインストールする方法
 http://til.info.apple.co.jp/cgi-bin/artnum?id=100451
英語版のiTunesをインストールしたシステムに、日本語版のiTunesをインストールする場合の手順が記載されている。iTunes本体だけでなく、初期設定ファイルや機能拡張など、インストールされたものをまずは手作業ですべて削除しておくという必要があるようで、その手順が記載されている。また、この手順で作業した場合、英語版のiTunesで作成したプレイリストはなくなってしまう。

◇60775JC:iTunes 1.0: 互換性のあるオーディオファイルタイプ
 http://til.info.apple.co.jp/cgi-bin/artnum?id=60775
iTunesではMP3はもちろん、AIFFやWAV、あるいはQuickTimeのオーディオストリーミングなどさまざまな種類のサウンドデータフォーマットに対応している。

◇60776JN:iTunes 1.0: Rio 600、800 と Nike PSA play の電源を切っても入力源リストに表示される
 http://til.info.apple.co.jp/cgi-bin/artnum?id=60776
これらの機種では、電源が切れていることは認識できず、電源オフの状態でも転送可能なように見える。その場合、プレイヤの電源を入れて作業をする必要がある。

◇60777JN:iTunes 1.0: iTunes を開く前に Nomad II ドッキングステーションの電源を入れてください
 http://til.info.apple.co.jp/cgi-bin/artnum?id=60777
このプレイヤでは、ドッキングステーションの電源をいれてからiTunesを開かないとトラブルになることがある。

◇60773JC:iTunes: ディスクドライブを使用できるアプリケーションは一度にひとつだけです
 http://til.info.apple.co.jp/cgi-bin/artnum?id=60773
◇60774JN:iTunes 1.0: 互換性がある MP3 プレーヤー
 http://til.info.apple.co.jp/cgi-bin/artnum?id=60774
◇75104JC:iTunes:「iTunes について (Read Me)」とソフトウェア
 http://til.info.apple.co.jp/cgi-bin/artnum?id=75104
◇60772JC:iTunes 1.0: システム条件
 http://til.info.apple.co.jp/cgi-bin/artnum?id=60772
◇60778JN:iTunes 1.0: PowerBook の「フルスクリーン」ビジュアルがテレビに表示されない
 http://til.info.apple.co.jp/cgi-bin/artnum?id=60778

カテゴリ:Tech Info Library-J, アプリケーション


Tech Info Library-JにClassic環境を中心にMac OS X Public Beta関連文書が公開

日本語での技術情報を提供しているTech Info Library-Jにおいて、Mac OS X Public Beta関連の文書が掲載された。いずれも、基本的には英語の文書として公開されたものの翻訳だ。MDOnlineではおおむね既報であるため、文書のタイトルとアドレスだけをお届けする。

◇86061JN:Mac OS X Public Beta: フォントの場所
 http://til.info.apple.co.jp/cgi-bin/artnum?id=86061
◇25223JC:Mac OS X Public Beta: パーティションの名称についての問題
 http://til.info.apple.co.jp/cgi-bin/artnum?id=25223
◇31280JC:Mac OS X Public Beta: パスワードに「コロン (:)」は利用できません。
 http://til.info.apple.co.jp/cgi-bin/artnum?id=31280
◇106076JN:Mac OS X Public Beta: カーネルパニック (Kernel Panic) とは何ですか?
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106076
◇106079JN:Mac OS X Public Beta: カーネルパニック (Kernel Panic) 時のログの取り方
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106079


◆Classic環境
◇106108JN:Mac OS X Public Beta: Classic 環境はサーバ製品用のシステム条件を満たしていません
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106108
◇106061JN:Mac OS X Public Beta: Classic 環境での Myth II の使用
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106061
◇106069JN:Mac OS X Public Beta: 特定のツールチップスは Classic 環境で表示されない
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106069
◇106067JN:Mac OS X Public Beta: Classic 環境ではダイレクトハードウェアネットワーキングアクセスは許可されない
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106067
◇106072JN:Mac OS X Public Beta: Classic 環境のファイル共有は TCP/IP 接続で利用できない
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106072
◇106073JN:Mac OS X Public Beta: Classic 環境がログアウトの際にうまく終了できなかったり、動作が遅くなる場合がある
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106073
◇31279JN:Mac OS X Public Beta: Classic 環境ではダイアルアップ (PPP) インターネット接続を使用できない
 http://til.info.apple.co.jp/cgi-bin/artnum?id=31279
◇106080JN:Mac OS X Public Beta: Classic 環境でデバッガを開くことができない
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106080
◇106086JN:Mac OS X Public Beta: Tomb Raider, Star Wars: Episode 1 Racer を Classic 環境で使用する
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106086
◇106022JN:Mac OS X Public Beta: インターネットアプリケーションが Classic 環境で動作しない(修正)
 http://til.info.apple.co.jp/cgi-bin/artnum?id=106022

カテゴリ:Tech Info Library-J, Classic, Mac OS X


2001年1月25日にTIL-Jに公開されたその他の文書

日本語での技術情報を提供するTech Info Library-Jにおいて、別掲の記事以外に2001年1月25日に公開された文書は以下の通りである。内容的にはMDOnlineでは既報のものがほとんどなので、文書のタイトルとアドレスを掲載しておく。

◇100450JO:AppleShare Client 3.8.8: Read Me
 http://til.info.apple.co.jp/cgi-bin/artnum?id=100450
◇88054JC:Apple CPU Plugin (Power Mac Dual G4) について
 http://til.info.apple.co.jp/cgi-bin/artnum?id=88054
◇24791JN:Mac OS: フォントフォルダに格納できるアイテムの最大数について(修正)
 http://til.info.apple.co.jp/cgi-bin/artnumid=24791

◆Disc Burner関連
◇75106JC:Disc Burner 1.0:「Disc Burner について (Read Me)」とソフトウェア
 http://til.info.apple.co.jp/cgi-bin/artnum?id=75106
◇60779JN:Disc Burner 1.0: 標準ディスク (HFS Plus/ISO 9660) が ISO 9660 ディスクとして表示される
 http://til.info.apple.co.jp/cgi-bin/artnum?id=60779
◇58768JN:Disc Burner 1.0: 工場出荷時にインストールされるディスクドライブを必要とします
 http://til.info.apple.co.jp/cgi-bin/artnum?id=58768

カテゴリ:Tech Info Library-J