Macintosh Developer Online (MDOnline)


2001年1月11日発行号 - 日本語版Mac OS 9.1もダウンロード可能



原稿の積み残しがだいぶん増えてしまって申し訳ありません。明日くらいには、Mac OS 9.1について集中的に記事を書こうと思います。
SFのExpoでの発表で、システム関連はいちおう全部クリアされました。ただし、ハードウエアは全機種ではありません。とすると、幕張でのExpoでの発表としては、順当な線では、ハードウエア関連の発表があるのでしょうね。でも、先日の発表内容を考えれば、おおかた予測はつくと思います。Cubeは比較的大きな変化があるとしても、iBookやiMacについては外面は同じでメモリとかCPUとかHDD容量とかが変わり、価格改定がされるとかそのあたりではないかと思われます。Power Book G4が、ちょうど去年のPowerBookとまったく同じ価格帯に落ち着いたので、10万円台(20万円前後)の価格帯にiBookを置き、Windowsノートとの競争力をつけるというところではないかと思います。1つは液晶を1024×768にするというところで、あとはドライブを、CD-RかDVD-ROMかを選択できるってやつじゃないでしょうか。現状のサイズの液晶の安価版と、液晶を広くしたSpecial Editionというところかな。iMacはHDDを増やすとかいった本当にマイナーなチェンジだけになるような気がします。じゃあ、Cubeはどうなるのでしょうか? まずはクロックアップでしょうね。匡体は変わらないでしょう。それに加えて、CD-Rドライブが標準になるというところでしょうか。でも、なにか1工夫してきそうな気がします。うーん…まあ、根も葉もない予想程楽しいものですね(笑)。
(新居雅行 msyk@mdonline.jp


日本語版のMac OS 9.1へのアップデータが米国のサイトでは公開中

日本語版のMac OS 9.1へのアップデータが、米国のAppleのサイトでは公開されている。現在は、分割ダウンロードするものしか見当たらないが、まとめてのダウンロード可能なものについてはComing Soonとなっている。なお、日本のAppleのサイトでは執筆時点ではアップデータは見当たらなかった。また、ソフトウエア・アップデートでも、Mac OS 9.1のアップデータは項目には出てこない模様だ。

関連リンク:Mac OS 9.1 Update
カテゴリ:Mac OS 9, OS関連ソフトウエア


【小池邦人のプログラミング日記】2001/1/10<Carbon Event Managerを使う その3>

今回も「BasicCarbEvents」サンプルを取り上げ、ウィンドウに対応させたEvent Handlerルーチンの挙動や、Fileメニューで「Quit」が選択された時のCarbon Event Managerの働きを調べてみます。

ところで、ついにMac OS Xの発売開始日が3月24日に決定しました。実際のマシンにプリインストールされて販売されるのは7月になるそうです。ユーザの立場としては、3月24日のバージョンが最終βバージョン、7月にプリインストールされるのがf1バージョンぐらいに考えていれば心も安らぐのですが(笑)、デベロッパー側か見ると、そんな悠長な事は言ってられません。現在のパブリックβ版では、Carbon Event Managerなどで実装されていない機能が多数存在しています。よってデベロッパーへは、Carbon APIをちゃんとフル実装したβ2版を提供してもらわないと困るわけです。まあ、「3月24日発売のバージョンがそれだ!」と言われてしまうとそれまでなのですが...(涙)。

Mac OS Xに関係する追加情報として、以下のApple Carbon Documentサイトに「MoonTravel.pdf」という90ページ程度のPDFドキュメントが登録されました。

◇Moon Travel Tutorial: Creating a Carbon Application
  ―――「Developer Guides」のカテゴリを参照
 http://developer.apple.com/techpubs/carbon/carbon.html

これは、Project BuilderとInterface Builderを利用して、Carbonアプリケーションを開発するためのチュートリアルです。Mach-O&NibベースのCarbonアプリケーションを、Interface Builderを用いて開発する過程が詳しく解説されています。Mac OS XのNative開発環境を堪能してみたい方は、是非一読されることをお薦めします。ただし、この環境で開発したCarbonアプリケーションはMac OS 9環境では起動できませんので、注意してください。

話しをBasicCarbEventsサンプルに戻します。最初に、ウィンドウ操作で発生したCarbon Eventを処理するためのMyWindowEventHandler()(Event Handler)を見てみます。

 

このルーチンは、InstallWindowEventHandler()でインストールしておいた3種類のCarbon Eventのうちのどれかが発生した時に呼ばれます。処理の準備として、GetEventParameter()でCarbon Eventの対象となるウィンドウのWindowRefを得ておきます。続いて、GetEventKind()が返したCarbon Eventの種類に応じて処理を3つに分岐させています。

Carbon Eventの種類が「kEventWindowDrawContent」であれば、ウィンドウの再描画が必要であることを意味します。何かに隠されていたウィンドウ領域が再表示された場合に起こり、昔の「Update Event」と同じだと考えれば良いでしょう。処理内容は簡単で、HandleWindowUpdate()が呼ばれてウィンドウ上に「Hello World!」が描画されます。次の「kEventWindowBoundsChanged」は、ユーザがウィンドウのGrowボックスをドラッグするなどして、ウィンドウの矩形枠(Bounds Rect)が変更された場合に起こります。この場合の処理はInvalWindowRect()にウィンドウの矩形枠をセットし、その矩形領域の再描画が必要であることをシステムに指示します。この処理を実行すると、引き続きkEventWindowDrawContent Eventが発生し、結果としてウィンドウ上に「Hello World!」が描画されることになります。

この時の注意点は、kEventWindowBoundsChanged Eventはウィンドウを移動した場合でも発生するということです。つまり、矩形枠の変更とはその縦横サイズだけではなく、表示位置の変更にも当てはまるわけです。実際、このソースコードのままだと、ウィンドウをマウスドラッグで移動する度に再描画が起こり、処理的には美しくありません。さらにマズイことに、現在のCarbonLib v1.2では、ウィンドウを移動させなくても(ウィンドウ矩形枠は変化しない)タイトルバーをクリックしただけで、このEventが発生してしまいます。多分、こちらはバグではないかと思います。

最後の「kEventWindowClose」は、ユーザがウィンドウのCloseボックスをクリックした場合に発生します。通常はそのウィンドウを閉じる処理が実行されるはずですが、このサンプルでは DisposeWindow()とQuitApplicationEventLoop()が呼ばれて、アプリケーションを終了させています。Event Handlerルーチンにおいて、ウィンドウにどんな操作をしたら、どのようなCarbon Eventが発生するのかをチェックしたい場合には、処理の中にSysBeep()を記述して警告音を鳴らしてみるのが、一番簡単で手っ取り早い方法です。

さて、続いてはFileメニューで「Quit」が選択された時にどう処理されるのかを調べてみます。不思議なことに、このサンプルのソースコードにはメニュー用のCarbon Event Handlerルーチンは存在していません。その代わり、前回お話したウィンドウの場合と同様に、Fileメニューで「Quit」が選択されると「Standard Handler」(ディフォルト処理)が呼ばれているようです。Carbon Event Managerは、選択されたQuitメニュー用のHandlerルーチンがない場合には、AEInstallEventHandler()で登録しておいたApple Event用のQuit処理を「Standard Handler」として呼び出す仕組みになっているようです。

これでHandlerルーチンが存在しない点については納得できたのですが、ここでもうひとつの疑問が浮かんできます。実は、メニュー選択をCarebon Eventに対応させるためには、以下のように、メニューアイテムに対してSetMenuItemCommandID()でメニューコマンド(この場合には’quit’)を設定しておく必要があります。

SetMenuItemCommandID( GetMenuRef( 129 ),1,’quit’ );

メニューに対してこうした処理がなされて、初めてメニュー選択に対応した「Standard Handler」が呼ばれることになるのです。

ところが、このサンプルではSetMenuItemCommandID()が呼ばれていません?実は、この謎を解く鍵はBasicCarbEvents.rの中にありました。このファイルには、サンプルで使うすべてのリソースが定義されています。BasicCarbEvents.rをよく見てみると、Fileメニュー用の’MENU’リソースのすぐ下に定義されている’xmnu’リソースが、SetMenuItemCommandID()を実行したのと同じ効果を発揮しているようです。

 

’xmnu’リソースはメニューアイテムに色々な付加情報をつけるために導入されました。このリソースは、アイテムにコマンドIDを追加したい’MENU’リソースと同じリソースID番号で保存しておきます。その内部フォーマットは以下のように定義されています。

 

現在のResorcerer(v2.2J)には、’xmnu’リソースを編集するためのテンプレートが標準で付いています。しかし、どうもそれにはバグがあるようで、以下のようなシンタックスエラーが発生して編集することできません。

 

そこで、あちらこちらへ手配書をばらまいて情報を集めたところ、ResorcererやResEditで’xmnu’リソースをちゃんと編集することができるテンプレートが、以下のRing Server サイトのライブラリ内の「resedit-appearance-tmpl.hqx」に含まれていることが判明いたしました。

http://ring.etl.go.jp/pub/mac/info-mac/dev/

興味があるかたはダウンロードして、’xmnu’リソースの構造を確認してみてください。次回は、Carbon Eventを自作Carbonアプリケーションに実装する作業にチャレンジしてみたいと思います。
[小池邦人/オッティモ]

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


【倉橋浩一、じつはWebObjectsで飯食ってます】WebObjectsで掲示板を作る(3)メッセージ書き込み部分を作る

さて、今度はMessagePage.woに作り込みをします。その前に準備として、SimpleBoard.eomodeldを開いておきます。データベース機能を作り込む上で必要ですから。では、以下、一気に作業を進めてしまいましょう。

(1)MessagePage.woを開く。

(2)まず、入力するための変数を登録します。MessagePage.woの左下にあるEdit Sourceプルダウンメニューから、Add Key...を選択します。すると、変数などを追加するためのダイアログが開きますので、ここに図のように設定して、Add KeyダイアログでMessageクラスのnewMessageという変数を追加します。チェックボックスの設定にも注意してください。

◇Add Keyダイアログで変数を追加します
 

(3)タイトル、メッセージなどを入力するためのダイナミックエレメントを追加します。レイアウトが崩れないように罫線の見えない表(TABLE)を使います。手順としては、表を配置し、その中にタイトル文字や、文字列を入力するためのWOTextField/WOTextを配置し、この表全体を選択した後、WOFormを選択します。

◇新規にテーブルを作る際のインスペクタ
 

◇パスワード入力用WOTextFieldのインスペクタ。文字列長やパスワード形式に設定します。著者やタイトルのWOTextFieldやメッセージのWOTextにも同様に幅などを設定します。
 

◇でき上がったメッセージ入力部分
 

(4)入力部分とデータベースの各項目とをバインドします。バインドというのは文字通り、オブジェクトとGUIのアトリビュートとを結合することです。さきほど追加したnewMessageをクリックすると、右側のカラムにMessageで定義した各フィールド(アトリビュート)が表示されます。これらを、入力のためのWOTextFieldのvalueアトリビュートとを結合していきます。たとえば画面上のタイトル入力部分とデータベースのtitleとを結合する場合には、newMessageの右のカラムからtitleをクリックし、タイトル入力のためのWOTextFieldまでマウスボタンを離さずにドラッグします。

◇ドラッグ中の状態。黒い太線がselectedObjectの右側のtitleから、上のWOTextFieldまで延びているのがおわかりいただけるかと。
 

すると、プルダウンメニューが現れますので、そこからvalueを選びます。これでバインドできました。確認してみましょう。WOTextFieldをクリックして選択してから、「i」のアイコンをクリックしてインスペクタを開くと、valueの右側のセルにnewMessage.titleと表示されているはずです。こうすることで、WOTextFieldに入力した内容はtitleと関連付けられます。

◇WOStringのインスペクタ。上記の設定を終えたところ。
 

同様にしてその他のWOTextField/WOTextと、newMessageの各値とをバインドしていきます。

(5)WOSubmitボタンとWOResetButtonを配置します。WOSubmitボタンは、WOHyperLinkと同様に、actionアトリビュートにバインドされたアクション関数を呼び出します。WOHyperLinkとの違いは、ブラウザでFORMの中に入力された値をサーバ側に送信し、バインドされた変数に代入する機能が含まれるという点です。では、そのためのアクション関数を追加します。WOBuilderの左下にあるプルダウンメニューEdit SourceからAdd Action...を選び、actionSubmitという名前で、書き込んだ後でメッセージ一覧へ戻るようにページ名はMessageListPageを指定し、Addボタンをクリックします。

◇Add Actionダイアログ
 

そして、前項と同様にして、新しく追加したactionSubmitとWOSubmitボタンのactionとをバインドします。バインドしたら、インスペクタを見て見ましょう。actionにはactionSubmitが設定されていますね? インスペクタの上には、valueという項目もあります。WOSubmitButtonのvalueは、ここにバインドされた値をボタンのタイトルとして表示するという働きをします。ここでは直接"送信"という文字列を入力します。ここで文字列の両側の「"」を忘れないでください。これで囲った文字列は、文字列定数を意味します。なお、変数などもこのようにして手で入力することができます。今まではオブジェクトからマウスのドラッグ操作によってバインドしてきましたが、必要に応じてキーボードからオブジェクト名を入力しても同じ結果が得られます。ただ、大抵の場合はバインドで用が足りますし、その方が簡単だと思います。

余談ですが、WOの仕事では、バインドしたりパラメータを選択したりで、あまり変数名を入力したりということがありません。そのせいか、ここんところ記憶力が低下してきました。記憶力を維持するために、私もたまにはもっと使いにくいプログラミング環境に戻る必要があるかもしれません。

(「WebObjectsで掲示板を作る」は続きがあります。この項目の1回目の原稿にある「■サポートについて」についても御参照ください。)
[倉橋浩一/テクニカル・ピット]

関連リンク:WebObjectsのページ
カテゴリ:WebObjects, 倉橋浩一、じつはWebObjectsで飯食っています


REALbasic 3のベータ版が公開、シリアル番号の扱いなどに変更

REAL Softwareは、Basic言語を基調としたビジュアル開発ツール「REALbasic」の次期バージョンのVer.3をアルファ版として公開してきたが、このほどベータ版に昇格されたものが公開された。3.0a16との違いは以下のページからリンクされているページに詳細がある。ヘルプなどのユーザインタフェースが絡む部分での変更の他、ソフトウエアのシリアル番号の扱いについての変更が記載されている。3.0b1では、シリアル番号の入力はできず、デモモードでのみの実行となる。Ver.3.0での大きな変化は、開発環境および制作した実行モジュールがCarbon対応となっていることで、Mac OS Xでのネイティブアプリケーションの作成ができるようになる点だ。Mac OS Xのリリースに向けて、着実に開発が進められてきているようだ。以前のバージョンでは、ベータ版の期間は短かく、すぐに製品版となったが今回はどうなるのだろうか。

関連リンク:REALbasic 3
カテゴリ:REALbasic


Appleシステムプロファイルのようなソフトを作るための基本情報

Technical Q&Aに、Appleシステムプロファイルで表示されるような情報を取得する方法についての簡単な文書が公開されている。Gestalt ManagerやName Registryを使えばよく、それらの情報へのリンクもある。なお、Appleシステムプロファイルのソースコードは公開されていないことも記載されている。

関連リンク:QA1000:Gathering system information under Traditional Mac OS
カテゴリ:Technical Q&A, Mac OS 9


AppleShareクライアントがバグ修正を中心とした小幅なバージョンアップ

AppleShareクライアントソフトウエアの新版、Ver.3.8.8が配付されはじめている。Mac OS 9.0.4のものよりも新しい。北米地域向け版、国際版がリリースされているが、執筆時点では国際版のダウンロードはサーバのエラーが出てきてできない状態だ。修正点については以下のページに詳しく記載されている。DHX認証で8文字以上のパスワード指定した時にきちんと動作するようになり、ネットワークブラウザでのパスワード修正に対応した。APFのURLでスペースを含む文字列の場合にクリッピングファイルの扱いを適正化した。また、ボリューム一覧でアクセスできないボリュームをグレーに表示するなどとなっている。また、起動時にマウントしたボリュームを選択した場合の問題についても解消されている。いずれにしても、バグ修正であり、該当する項目での不便がなければすぐにもアップデートの必要はないものと思われる。とりあえずは、日本語版を待つのが良いだろう。

関連リンク:AppleShare Client Ver.3.8.8
カテゴリ:ネットワーク, OS関連ソフトウエア


Mac OS Xで稼動するTomcat向けの管理ユーティリティ

Mac OS Xで、ServletやJSPを稼動させるTomcatの管理を行なうユーティリティが公開されている。Richard Laingが作成した「TomcatX」で、Tomcat 3.2.1での稼動を確認している。Tomcatのルートディレクトリを指定し、Tomcatをスタートさせるもので、Apacheの再起動を行なうかどうかのオプションもある。シンプルなユーティリティではあるが、サーバ管理の手助けになるかもしれない。なお、Tomcatのインストールは別途必要である。

関連リンク:Richard Laing氏のiDiskのページ
カテゴリ:サーバー関連