Macintosh Developer Online (MDOnline)


2001年8月22日発行号 - Mac OS 9.2.1がリリース



今朝と昼ごろはこちらでも凄い雨風でしたけど、すっかり晴れてきました。ちょっと外を歩いたのですが、今日は台風で人通りがないことを見越して今日は休んでいる店がけっこうありましたね。
さて、以下のページ、うちの妻が見つけたのですが、ヤマダ電機のことがかなり辛らつにかいてあります。ちょっと最近は更新していないみたいですけどね。
 http://www.jp-paradise.net/yurusen/
さすがにみんな同じことを思うのだなと思って少し読みました。うちの近所にもヤマダ電機がありますが、店員の態度とかは確かに業界最低ですしね。顧客サービスをしないということで徹底していたといえば、今はなきステップって店を思い出しますが、ステップではまだ店員と会話ができたと思います。ヤマダではそういうプロセスさえ危ういというか。以前、買おうと思ってカウンターに並んでも、カウンターに誰もいないって感じで、買わずに帰ったということもあります。カウンターにいないというか、なんかカウンターの奥でくちゃくちゃやているんですよね。でカウンターはどこもえらい列になっているのに誰もさばこうとしない。なるべく買い物には行かないようにはしていますが、妻も最近久々に行ったら全然変わっていないといって、プンプンして帰ってきました。近所のヤマダの前にはノジマがあるので、コンピュータ関連はもはやヤマダに行く理由がないのですが、ちょっとした家電製品を買うのはヤマダがいちばん近いのです。だけど、ここまでサービスの質を下げていても、店はつぶれないということは、文句を言いながらも安いってことでやっぱり買う人がいるということなんでしょうね。ある意味では常識を覆したビジネスとも言えるかもしれません。まーでも、新居家ではきっともう2度と行かないでしょうね〜。
(新居雅行 msyk@mdonline.jp


Mac OS 9.2.1が日本語版も含めて公開、Mac OS XでのClassic環境での動作を改善

Mac OS 9.2.1が公開された、英語版だけでなく日本語版などを含む各国版も同時にリリースされている。ソフトウエア・アップデートでは執筆時点ではアップデート項目は登場せず、以下のページから、アップデータをダウンロードして作業する必要がある。アップデータは103.5MBものサイズだが、ブロードバンド系インターネット利用者にとっては大したサイズでもないだろう。なお、15MB程度のファイルで7つに分かれている分割ファイルでも入手できる。

◇Mac OS 9.2.1 アップデート
 http://www.apple.co.jp/ftp-info/reference/macos_9.2.1_update.html

◇KBase》Mac OS 9.2.1: Document and Software
 http://www.info.apple.com/kbnum/n120030

◇KBase》Mac OS 9.2.1: System Requirements
 http://www.info.apple.com/kbnum/n106436

Mac OS 9.2.1は、PowerPC搭載機が対象ではなく、「Mac OS Xが稼動するハードウエア」が対応機種となった。つまり、601〜604までの初期のPowerPCマシンでは稼動しないMac OS 9なのである。従って、初期のPowerPCマシンは基本的にはMac OS Xも稼動しないので、Mac OS 9.1が最終システムとなるだろう(68kマシンの最終システムがMac OS 8.1であることに、バージョン番号が良く似ている)。
Mac OS 9.2.1はMac OS 9.1ないしは9.2からのアップデートとなるため、それ以前のバージョンのユーザは、9.1へのアップデートを行う必要がある。アップデート後にMacヘルプを参照すると、Mac OS 9.2.1についてや、あるいは新機能としての項目が参照できるが、アップデートによって大きな変更はないようだ。新機能としていくつかあげられていることは、Mac OS 9.1でも実現していたことが多い。米国のMac OS 9のサイトでは、9.2.1はClassic環境の互換性を高めるとしている。Mac OS 9のアップデートであるが、実質的にはMac OS Xでの利用環境を向上させることがいちばんの目的であるようだ。システム機能拡張などでバージョンが細かくアップしているものもあるのだが、システムに関しての目立った違いは見られない。気が付いたところでは、CarbonLibがVer.1.4になっている。Authoring Supportも1.1.2となっている。「起動ディスク」コントロールパネルは、Ver.9.2.2になっているといったところだ。FireWireの機能拡張はVer.2.8.2となっている。

カテゴリ:Classic, Mac OS 9, OS関連ソフトウエア


鶴薗賢吾のCocoaはやっぱり!出張版》Cocoa版ムービープレイヤをチェック(4)

■ 情報ウィンドウ
Movie Propertiesウィンドウには、現在表示しているムービーの情報を表示していますが、これらの情報は、NSMovieやNSMovieViewから得ることは出来ません。そのため、こちらでもQuickTime APIを呼び出しています。awakeFromNibの一番最後の行に、以下の記述があります。


[ self setMoviePrOpertyWindowControlValues : qtmovie ]; // ムービー情報を収集

setMoviePropertyWindowControlValues:メソッドで、Movie Propertiesウィンドウの中身を順に初期化しています。各項目は、以下の関数もしくはメソッドを呼んで初期化を行っています。

これらを順に見ていきましょう。ただし、トラック数の取得は、専用のQuickTime APIを呼んでいるだけですので省きます。

■■ 自動再生かどうかの取得 QTUtils_IsAutoPlayMovie ( QTUtils.c )
QuickTimeムービーの中には「ユーザーデータ」という、アプリケーション固有のデータを格納する場所があります。そのデータの中にQuickTime Playerが使っているいくつかのデータがあり、ムービーを開いたときに自動的にムービーを再生開始するかを決める「play」という名前のフラグがあります。この関数では、そのフラグを取得しています。
GetMovieUserDataでユーザーデータ全体を取り出して、GetUserDataItemで、その中から「 play 」という名前のデータを取り出しています。

myUserData = GetMovieUserData( theMovie );
myErr = GetUserDataItem( myUserData, &myAutoPlay, sizeof(myAutoPlay), FOUR_CHAR_CODE(’play’), 0 );


■■ メディアタイプリストの取得 buildTrackMediaTypesArray: ( MyMovieController.m )
メディアタイプリストは、buildTrackMediaTypesArray:メソッドで作成し、結果は、MyMovieControllerクラスのmovieTrackMediaTypesArrayという文字列の配列に格納されます。メディアタイプリストの表示は、NSTableViewというテーブルを表示するためのViewを使用していますが、ここも簡単に説明しておきます。Interface Builderでは、Cocoa-Tabulation Views PaletteにNSTableViewがあります。



NSTableViewは、「dataSource」というアウトレットを持っていて、そこに接続されたインスタンスにメッセージを送り、表示するためのデータをもらうという仕組みになっています。SimpleCocoaMovieでは、このデータの供給を行っているのはMyMovieControllerです。Interface Builderで、NSTableViewをダブルクリックして、InfoウィンドウのConnectionsのOutletsの中にあるdataSourceをクリックすると、MyMovieControllerに接続されていることが分かります。



このdataSourceは、2つのメソッドを実装する必要があります(テーブルの内容を編集する場合は3つ)。

numberOfRowsInTableView:は、行数を配列の要素数を返すcountメソッドを使って行数を返しています。

return [ movieTrackMediaTypesArray count ];

tableView: objectValueForTableColumn: row:は、行の指定を配列のインデックス値として、配列からobjectAtIndex:を使って、配列の中身、つまりメディアタイプの文字列を返しています。

return ( [ movieTrackMediaTypesArray objectAtIndex : rowIndex ] );

テーブルの表示については、触りだけですが2つのメソッドを用意するだけで実現できるわけです。
NSTableViewへのデータ表示についてのポイントをまとめると、以下のようになります。

■■ タイムスケールを文字列で取得 GetMovieTimeScaleAsString ( QTUtils.c )
QuickTime APIのGetMovieTimeScaleで、ムービーのタイムスケールを取得します。この数値をMakeMovieTimeScaleDisplayStringという自前の関数を使ってC文字列に変換します。そして、Cocoaとやり取りをするために、C文字列をstringWithCString:を使ってNSStringに変換しています。

StringPtr timeScaleString = MakeMovieTimeScaleDisplayString( GetMovieTimeScale( theMovie ) );
NSString *timeScaleNSString = [ NSString stringWithCString : timeScaleString ];

 ★ NSString : C文字列からNSStringを生成する
  [書式] + (id) stringWitCString : (const char *) cString
  [入力] cString : C文字列
  [出力] 返り値 : 変換されたNSStringの文字列

文字列のやり取りについてのポイントは、以下の通りです。

■■ ムービーの長さを文字列で取得 GetMovieDurationAsString ( QTUtils.c )
GetMovieDurationとGetMovieTimeScaleがQuickTime APIで、ムービーの長さとタイムスケールを取得します。割り算をすることで秒単位の値になりますので、これをMakeMovieTimeDisplayStringという自前の関数を使って「00:00:00」のフォーマットのC文字列に変換しています。先程と同様に、NSStringに変換しています。

StringPtr movieDurationString = MakeMovieTimeDisplayString( GetMovieDuration( theMovie ) / GetMovieTimeScale( theMovie ) );
NSString *movieDurationNSString = [ NSString stringWithCString : movieDurationString ];

■ タイムスケール
「 タイムスケール 」という言葉を何度か使ってきましたが、これについて説明しておきます。これは、QuickTimeの用語なのですが、QuickTimeで時刻や時間を表す場合、このタイムスケールを基準にした値を使います。サンプルで使用しているMovieFile.movでは、600というタイムスケールの値を持っていますが、これは、1/600秒を1とする時間軸をこのムービーが持っていることを表します。タイムスケールの値が大きいほど、精度の高い時刻指定が可能になり、逆に小さくすると、長い時刻指定を行うことが出来ます。
先程出てきましたGetMovieDurationというQuickTime APIでムービーの長さが得られますが、MovieFile.movは、1800という値になっています。これをタイムスケールの600で割ることで3秒のムービーであることが分かります。


[鶴薗賢吾]
(続く)

関連リンク:Cocoaはやっぱり!
カテゴリ:


鶴薗賢吾のCocoaはやっぱり!出張版》Cocoa版ムービープレイヤをチェック(5)

■ QuickTimeコールバック
実は、このサンプルコードには、もう1つ重要な意味を持っています。QuickTimeのコールバックをCocoaアプリケーションから利用しているというところです。
再生ボタンがクリックされたら、再生ボタンを停止ボタンに切替え、また、停止ボタンがクリックされたら、再生ボタンに戻していました。しかし、これだけでは不十分です。
ムービーを最後まで再生してしまったときに、再生が止まります。この時にも、停止ボタンを再生ボタンに戻さなければならないわけです。しかし、再生が終わったことを直接的に知る手段は、NSMovieやNSMovieViewには用意されていません。このため、QuickTimeコールバックを使って、ムービーを再生し終わった時に、MyCallbackProcという関数を呼んでもらうようにしています。
MyCallBackProcが呼ばれると、以下のようにresetPlayButtonForMovieStopState:を呼び、停止ボタンが押された時の処理に流れるようになっています。

 MyCallBackProc
   → adjustPlayButtonForMyMovieControllerObject:
     → resetPlayButtonForMovieStopState:

resetPlayButtonForMovieStopState:では、setTitle:でタイトルを「 > 」に変更し、setAction:でアクションを「 play: 」に変更しています。


[ playButton setTitle : @">" ]; // タイトル変更
[ playButton setAction : @selector(play:) ]; // アクション変更

QuickTimeのコールバックについては、この記事で扱うにはやや高度なのと、QuickTime自身の話題になってしまいますので、入り口だけ示すというところにとどめたいと思います。また、Cocoaのスタイルからすると、コールバックを使うよりも、NSMovieViewのデリゲートで実現するのがスマートではないかと思っているのですが、将来的には、NSMovieViewが拡張されてそのようになるかもしれません。

■ サンプルプログラムの改造の勧め
以上で、ムービーの扱いについて、ある程度理解していただけたのではないかと思います。これをベースに改造してオリジナルのソフトウェアを作ってみると、より理解が深まると思います。音量調整のスライダーを参考に、再生速度を変えられるようにしてみるというようなものであれば、簡単に実現できます。多少Cocoaの知識があれば、NSOpenPanelを使ってファイルをユーザーが選択出来るようにもできます。また、NSMovieは、QuickTimeによって駆動されているためMP3の音楽のファイルをオープンすることもできます。NSTableViewにプレイリストを表示して、MP3プレイヤーにチャレンジしてみるのもよいかと思います。
[鶴薗賢吾]

関連リンク:Cocoaはやっぱり!
カテゴリ:


iBookのむき出しになっている接続端子部分をカバーする保護用パーツ

ヘリオグラフは、Dual USBタイプのiBookの入出力端子をゴミやほこりから守るプロテクタ「i/O Protector」を販売する。製造元はOFFICE P-POINT.で、価格は1,280円。Dual USBタイプのiBookは、2001年5月に発売された最新のiBookだ。サイドにUSBやFireWireなどの端子が並んでいるが、端子そのものはむき出しになっているため、鞄に入れるにしても持ち歩く時やあるいは通常の使用時でも、ほこりやゴミに対する不安はないわけではない。i/O Protectorはその各種端子が並んでいる部分にふたをするもので、弱硬質シリコンを使ったものである。これを装着しておけば、ゴミやほこりは入りにくくなる。ヘリオグラフから直接購入もできるが、全国の販売店からも購入ができる。

関連リンク:i/O Protector
カテゴリ:周辺機器


9月末のパリのエキスポでのジョブズ氏のキーノートはMac OS X 10.1とiDVD2がテーマ

2001年9月26日(水)〜30日(日)にかけて、パリでMacintoshの展示会「Apple Expo 2001 in Paris」が開催される。AppleからキーノートセッションはCEOのスティーブ・ジョブズ氏によって行われることが正式に発表されたが、キーノートでは、Mac OS X 10.1とiDVD2にフォーカスした内容であると表明された。そして、新しいハードウエアを発表する予定はないとも明記されている。キーノートセッションは9月26日の現地時間10:00から開催される。日本時間では26日の17:00からとなる。
Mac OS X 10.1がいつ一般向けに発売されるのかは定かではないが、9月であることを公約しているので、キーノートに呼応した形で9月26日には確実に販売ないしは配付が開始されると思われる。一方、ここでキーノートの内容をMac OS XとiDVD2であると公開し、新しいハードウエア製品については発表しないとした。新製品については噂が蔓延して勝手な期待で膨らんでしまうという傾向がこれまで強かったが、余計な噂がでないようにするために釘を刺したものとも考えられる。もっとも、パリのエキスポの前にシーボルトもあるし、新製品をエキスポで発表しないといけないという理由もない。Dual USBのiBookもイベントとは関係なく発表されたのだから、要は新製品公開のタイミングは分からないということになるだろう。いずれにしても、Mac OS Xのアップデート版の登場はパリでのエキスポである公算が高くなったと言えるのではないだろうか。

関連リンク:Steve Jobs to Kick Off Apple Expo 2001
カテゴリ:イベント


NetInfoのドキュメントが日本語に翻訳

日本のアップルのMac OS ServerのWebサイトに、NetInfoに関するドキュメント「NetInfo活用ガイド」が公開された。すでに米国のサイトで公開されている「Understanding and Using NetInfo」の日本語訳をしたものである。68ページのPDFドキュメントで、NetInfoの基本やネットワークのプランニング、階層構造の設定といったテーマで、NetInfoの基本的な使い方から実際の運用に持ち込むまでを説明している。NetInfoは、Mac OS XやMac OS X Serverに組み込まれたディレクトリサービスの機能である。Mac OS X ServerでのNetInfoの情報をクライアントで共通に使えば、たとえば、アカウント情報を共通に利用したり、さらにはサーバにユーザのホームフォルダを設置することで、異なるマシンでログインしても同一のホームフォルダを利用できるといった設定も行えるようになる。Mac OS Xのネットワークをより高度に使うには欠かせない機能であるとも言えるだろう。

関連リンク:NetInfo活用ガイド
カテゴリ:ユーザ管理, ネットワーク, Mac OS X Server


Navigation Servicesを使う時にはリソースファイル関連の処理は避ける

Carbonイベントを使っているときにNavigation Servicesの機能を呼び出すと、リソースチェーン(リソースを開いた状態で使う)が正しく機能していないという問に対する答えが、Technical Q&Aで掲載されている。こうした症状は、Mac OS 9.0.4以前のシステムを使っているときに発生するとしている。これは、Navigation Servicesのバグであるとしており、Mac OS 9.2ではWaitNextEventを使う場合に、呼び出し前にリソースチェーンの状態を保持し、呼び出し後に戻すといった処置を取っている。しかしながら、CarbonLibではアーキテクチャ上の理由からこの問題は修正できない。結果的にNavigation Servicesを呼び出している時にはリソースファイルのオープンやクローズを行わないなど、プログラマ側の配慮が必要になる。

関連リンク:QA1066: Resource chain corruption when using Navigation Services dialogs and Carbon Events
カテゴリ:Technical Q&A, Mac OS 9


KBase》Power Mac G4のCDドライブはBURN-Proof対応ではないが問題はない

QuickSilverタイプのPower Mac G4に使われているCD-RWの書き込み可能なドライブは、BURN-Proof対応ではないことがKnowledge Baseの文書で公開された。BURN-Proofはサンヨーの登録商標でBuffer Under Run Error Proofを意味し、書き込み元からデータ転送ができなくなったときに、ディスクへの書き込み処理を中断し、データが得られるようになってから書き込みを再開する技術である。しかしながら、Power Macを使っている上では一般にはデータ元はハードディスクであり、そうしたことが原因となるBuffer Under Run Errorは問題になるとは考えていないとしている。

関連リンク:Power Mac G4 (QuickSilver): Apple Optical Drives and BURN-Proof Technology
カテゴリ:Knowledge Base(旧TIL), メディア制作, Power Mac


KBase》Mac OS Xを使ったPowerBookなどで消音の設定が保存されない場合の対処

Mac OS X 10.0.4でサウンドを「消音」したにもかかわらず、スリープ復帰後あるいは再起動後に消音が解除されるという問題に対する対処法がKnowledge Baseに掲載されている。各種のPowerBook、Power Mac G4 Cube、2000年夏モデルのiMacでこの症状が発生する。システム環境設定の「サウンド」のパネルで、「消音」のチェックボックスをいったん解除し、再度オンにすることで、設定が保存されるようになると説明されている。

関連リンク:Mac OS X 10.0.4: Sound Does Not Remain Muted
カテゴリ:Knowledge Base(旧TIL), Mac OS X


KBase》Mac OS XでのPPP接続に関するQ&A文書

Knowledge Baseに、Mac OS XでのPPP接続に関する文書が掲載されている。Q&A形式であり、一般的な質問に加えて、PPP接続を自動接続にする方法(デフォルトでは自動ではない)や、モデムがない機種ではUSBモデムを購入するのが良いと記載されているなど、いくらか立ち入った話題も含まれている。

関連リンク:Mac OS X 10.0: Frequently Asked Questions (FAQ) for PPP Modem Connections
カテゴリ:Knowledge Base(旧TIL), インターネット全般


KBase》Windows版のInternet Explorer 5.5 SP2以降ではQuickTimeコンテンツの埋め込みに要変更

Windows版のQuickTime 5.0.2を利用したコンテンツを提供しているWebサイトでは、新しいInternet Explorerでの問題に注意を払う必要がある。Windows版のInternet Explorer 5.5 SP2以降のものは、Netscape式のプラグインをサポートしなくなったため、EMBEDタグで埋め込んだムービーは参照できなくなる。代わりに、ActiveXを使ってムービーを埋め込むように、指定されたOBJECTタグを使う必要があり、タグの書き方などが以下のページで紹介されている。なお、Macintosh版のInternet ExplorerやNetscapeでは従来通りの手法でも参照ができる。Windowsでも参照できるようにしたいコンテンツを供給している場合には、対策が必要になるだろう。なお、Windows Updateで配付されている最新版のInternet ExplorerはVer.5.5 SP1であり、Ver.6のPublic Previewの入手も可能だ。Ver.5.5 SP2についてはInternet Explorerのページで公開されており、2001年8月15日が公開日となっている。

関連リンク:Windows Internet Explorer 5.5 SP2 and 6.0 with QuickTime
カテゴリ:Windows, Knowledge Base(旧TIL), QuickTime