Macintosh Developer Online (MDOnline)


2001年12月19日発行号 - Dec 2001 DevToolsのJava



秋葉原のT-ZONEで、コレガのPCカードタイプの無線LANカードが5,400円で売っています。3.3VのみなのですべてのPCポートには接続できませんが、CardBusならたいがいはOKということだそうです。40ビットでWiFi認定じゃないと安くなるってところでしょうか。メルコなどのメーカー品では最安値が7,800円でした。それから、メルコのアクセスポイントが17,800円です。だいぶんとワイアレスLAN製品も低価格化してきました。相性の問題とかも気になるとは言え、基本的には使えるから問題はないでしょう。暗合化うんぬんが言われていますけど、そんなに簡単にワイアレスデータの盗聴はできないわけですし、ネットワークのパスワードで基本的には十分だと思っています。それに、Windows XPではワイアレスネットワークにしっかりOSで対応しているだけに、それなりにきちんと動いています。また、OSのダイアログボックスで電波の強さや設定などが確認できるようになっています(最初にちょっとスリープの復帰がだめだったのですが、今はうまく行っています)。もっとも、PowerBookやiBookってアンテナがあるので、実際、遠距離までの通信が可能とはなっていますが、発売当初にはあった価格的なメリットはAirMacはもうほとんどないと言えるでしょう。また、「Macはデザインはいいけど高い」という状態に入って行ってしまっています。

===============================プレゼント
Mac OS X v10.1パワフルガイドブック(5冊、ローカス提供)
――――――――――――――――――――――――――――――――――――


(新居雅行 msyk@mdonline.jp


JavaのプログラムをDec 2001版Project Builderで作成する場合の変更点と、バックスラッシュの入力

Developer Tools December 2001がリリースされ、Project Builder 1.1.1となった。その前のSeptember 2001版では、ビルド設定のフラグとして、コンパイル時にファイルのエンコードをUTF-8であると指定する必要があった。それがないと、コンパイルエラーが出たときに、Project Builderがフリーズする。そうすると、今度は日本語を含むプログラムソースは、UTF-8フォーマットにしなければならなかった。しかしながら、この問題は、December 2001版では解消されている。ビルドフラグに何も設定しなくても、きちんとコンパイルされ、ビルド時のメッセージの日本語が文字化けすることはない。また、ソースコードのファイルのエンコードはデフォルトの「日本語(Mac OS)」でかまわない。なお、このエンコードでは、シフトJISコードだと考えればよい。
ただ問題は、September 2001版に向けて、UTF-8のエンコードにしてしまったソースである。ビルド設定をそのままにしておけばOKかと思ってしまったが、そうすると謎のエラーが出る。コンパイルオプションを-encoding UTF8にしてもやはり同様である。いちばん確実な方法は、ソースコードのエンコードを「日本語(Mac OS)」にして、コンパイルオプションを削除するということになるだろう。
このとき、単に1つのプロジェクトに使っているソースは基本的には作業をするだけになるが、1つのソースをいくつかのプロジェクトで使い回しているときに、1つのプロジェクトでだけエンコードを変更した場合、他のプロジェクトでは文字化けされてしまうという現象が出てしまう。ソースファイルのエンコードはファイルにではなく、プロジェクトで覚えているようなのだ。そこで次のようにすれば、とりあえず設定を変更できるようである。2つ目以降のプロジェクトでは、Command+Iで情報ウインドウを出して、左のリストでソースファイルを選択する。すると、UTF-8と解釈してシフトJISのファイルを開くので文字化けするが、Command+shift+Wでウインドウを閉じると、左のリストでファイルが選択されているが閉じているという状態になる。そこで、ファイル情報のパレットで、エンコードを変更すると良い。

ところで、プログラムにはバックスラッシュの入力は不可欠だが、\のキーボードだと「\」しか入らないように思える。Windowsだと、\がバックスラッシュのような判断が概ねOKであるのだが、Mac OS Xではちょっと様子が違う。Englishキーボードやことえりのパレットなどの手法もあるのだが、実は半角の\の入力で、ファイルにはバックスラッシュが入力されているということなのだそうだ。ただ、キーを入力した段階では、\に見えているが、そしてファイルを閉じて再度開くと、それは半角のバックスラッシュとなっている。ファイルのエンコードが「日本語(Mac OS)」なら確かにそうなっているので、試してみてもらいたい。

カテゴリ:ProjectBuilder/Interface Builder, Java


鶴薗賢吾のCocoaはやっぱり!出張版》#6 - ツールバー(3)

 ̄ ̄ ̄アイテムリスト取得メソッドのちょっとした改造___

説明ばかりでは面白くありませんので、ここで、ちょっとソースを改造してみましょう。2つのメソッドに以下の改造を加えます。

◇Controller.m → toolbarAllowedItemIdentifiers


- (NSArray *) toolbarAllowedItemIdentifiers : (NSToolbar*) toolbar {

NSLog( @"toolbarAllowedItemIdentifiers" ); // 追加

return [ NSArray arrayWithObjects :
: 以下の3行を追加
NSToolbarShowColorsItemIdentifier,
NSToolbarShowFontsItemIdentifier,
NSToolbarCustomizeToolbarItemIdentifier,
nil ];
}

◇Controller.m → toolbarDefaultItemIdentifiers

- (NSArray *) toolbarDefaultItemIdentifiers : (NSToolbar *) toolbar {

NSLog( @"toolbarDefaultItemIdentifiers" ); // 追加

return [ NSArray arrayWithObjects :
: 以下の1行を追加
NSToolbarCustomizeToolbarItemIdentifier,
nil ];
}

改造の結果は以下のとおりです。矢印のところにアイテムが増えているのが確認できます。NSLogを埋めたのは、どういうタイミングでデリゲートメソッドが呼ばれるかを知るためのものです。NSLogの出力を見ながら色んな操作をしてみると、ツールバーの動作の理解が進むと思いますので、試してみてください。

◇改造の結果
 

 ̄ ̄ ̄ツールバーが出来上がるまで___

続いては、画面にツールバーが表示されるまでの流れを説明します。主に、ツールバー内部で自動的に行われる処理です。こちらでコーディングが必要なのは、デリゲートの部分だけです。

ツールバーをカスタマイズしたら、一旦アプリケーションを終了して、再度起動してみてください。すると、ツールバーは、カスタマイズの状態が記憶されていることが分かります。ツールバーの状態は環境設定ファイルに自動的に保存されて、同じツールバーを使おうとしたときには、カスタマイズの状態を自動的に再現してくれます ( 自動処理をオフにすることも可能です )。

初めてアプリケーションを起動した時には、環境設定ファイルはありませんので、デフォルトセットをツールバーに表示します。つまり、先程のデリゲートのメソッド ( toolbarDefaultItemIdentifiers : ) を呼んで、デフォルトセットのリストを取得します。環境設定ファイルがあった場合は、読み込んで、その中からツールバーアイテムのリストを取得します。

リストが取得できたら、次はツールバーアイテムをツールバー上に表示することになりますが、表示するためには、イメージビューならば画像とラベル、ビューアイテムならば、カスタムビューとラベルが最低限必要です。この情報を得るために、デリゲートにはもう1つメソッドが必要になります。識別子を与えるとツールバーアイテムそのもの ( インスタンス ) を返すメソッドです。ツールバーアイテムのインスタンスそのものが取得できれば、画像取得メソッド ( image ) やラベル取得メソッド ( label ) などを使って、情報を得ることが出来ます。

このインスタンス取得メソッドの詳細は以下になっています。

 ★ NSToolbarDelegate : ツールバーアイテムの識別子からインスタンスを取得
  [書式] - (NSToolbarItem *) toolbar : (NSToolbar *) toolbar
       itemForItemIdentifier : (NSString *) itemIdentifier
       willBeInsertedIntoToolbar : (BOOL ) flag
  [入力] toolbar:親のツールバーのインスタンス
     itemIdentifier:ツールバーアイテムの識別子
     flag:このツールバーアイテムをこれからツールバーに挿入するかどうか
  [出力] 返り値 : itemIdentifierに対応するツールバーアイテムのインスタンス
  [備考] このメソッドは、NSToolbarのデリゲートに必須のメソッド。
      このメソッドは、主に以下のケースで呼ばれる。
      (フレームワークのバージョンで変わる可能性がある)
       ・ツールバーがウィンドウに付けられた時 ( flag = YES )
       ・設定パネルを開いた時(全アイテムとデフォルトセットの
        両方を表示する時) ( flag = NO )
       ・ユーザーが設定パネルからツールバーにドロップした時
         ( flag = YES )

このメソッドでは、ツールバーアイテム識別子がパラメータとして与えられ、対応するインスタンスを返すわけですが、この処理のために、このサンプルでは、アプリケーションの起動時に識別子からインスタンスを取り出せる辞書 ( NSMutableDictionary ) を作成しています。詳細は後程説明しますが、Controller.mのawakeFromNibで辞書を作成しています。

◇Controller.m → awakeFromNib

- (void) awakeFromNib {
: 省略
// アイテム辞書作成
toolbarItems = [ [ NSMutableDictionary dictionary ] retain ];

// ツールバーアイテムを辞書(toolbarItems)に登録
addToolbarItem( … 省略 … ); // Font Style
addToolbarItem( … 省略 … ); // Font Size
addToolbarItem( … 省略 … ); // Blue Text
: 省略

辞書に登録しているのはカスタムアイテムの3つだけで、標準アイテムは辞書に登録していませんが、フレームワーク自身がインスタンスを持っているので、問い合わせは発生しないためです。そして、Controller.mのデリゲートメソッドは、以下のようになっています。ここでは概略だけです。

◇Controller.m → toolbar : itemForItemIdentifier : willBeInsertedIntoToolbar :

- (NSToolbarItem *) toolbar : (NSToolbar *) toolbar
itemForItemIdentifier : (NSString *) itemIdentifier
willBeInsertedIntoToolbar : (BOOL ) flag {

NSToolbarItem *newItem = [ [ [ NSToolbarItem alloc ]
initWithItemIdentifier : itemIdentifier ]
autorelease ]; // アイテムを作成
// アイテム辞書から取り出し
NSToolbarItem *item = [ toolbarItems objectForKey : itemIdentifier ];
: 省略 ( アイテムのコピー処理 )
return newItem;
}

新規にツールバーアイテムを作って、辞書の中のツールバーアイテムのコピーを作ってそれを返すようになっています。allocとinitWithItemIdentifier : で識別子指定で空のツールバーアイテムが作れます。そして、辞書からobjectForKey : でインスタンスを取り出しています。

 ★ NSToolbarItem : 識別子を指定して初期化
  [書式] - (id) initWithItemIdentifier : (NSString *) itemIdentifier
  [入力] itemIdentifier : ツールバーアイテムの識別子
  [出力] 返り値 : 初期化したNSToolbarItem

このメソッドにも以下の改造を加えてみましょう。動かしてみると、どういうタイミングでこのメソッドが呼ばれるかがよく分かると思います。

◇Controller.m → toolbar : itemForItemIdentifier : willBeInsertedIntoToolbar :

// メソッド中のどこかに追加
NSLog( @" toolbar : %@", [ toolbar identifier ] );
NSLog( @" itemForItemIdentifier : %@", itemIdentifier );
NSLog( @"willBeInsertedIntoToolbar : %@", flag ? @"YES" : @"NO" );

3つ目のパラメータのflagは、問い合わせがあったツールバーアイテムがこの後にツールバー上に登録されるかどうかを表しています。ツールバーアイテムによっては、ツールバーに登録する時に初期化が必要なものがあると思います。例えば、Mac OS XのMailアプリケーションには検索用のツールバーアイテムがありますが、このようなアイテムでは検索文字列の初期化が必要なことがありますが、このメソッド内で初期化を行うことができます。初期化すべきかどうかを、このflagで判断することができるというわけです。

◇Mailのウィンドウの検索用のツールバーアイテム
 

さて、ここまででデリゲートに実装する3つのメソッドについて見てきましたが、実は、この3つがツールバーのデリゲートの必須メソッドです。ツールバーを使うためには、この3のメソッドを必ずデリゲートに実装しておかなくてはいけません。逆にいえば、この3つのデリゲート以外の処理は、フレームワーク側で行ってくれるということなのです。
(この項続く)
[鶴薗賢吾]

関連リンク:Cocoaはやっぱり!
カテゴリ:ユーザインタフェース, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版


鶴薗賢吾のCocoaはやっぱり!出張版》#6 - ツールバー(4)

―――――表示モードによる挙動の変化

 ̄ ̄ ̄3つの表示モード___

ツールバーには3つの表示モードがあります。「 Icon & Text 」と「 Icon Only 」と「 Text Only 」です。変更は、設定パレットの下部のポップアップボタンで行います。

◇表示モードの変更
 

ちょっと補足:表示モードを変えるには別の方法もあります。ツールバーのコンテキストメニューから選ぶ方法と、ウィンドウの右上のボタンをコマンドキーを押したままクリックする方法です。

注目すべきなのは、Text Onlyモードです。このモードでは、ツールバーアイテムがテキストで表示されるため、各ツールバーアイテムは、複雑な形状は持てません。

◇Text Onlyモードでの表示
 

ただし、単なるボタンになってしまってはビューアイテムの機能を実現することは困難ですので、各ツールバーアイテムにはメニューを付けることができるようになっています。Font Styleアイテムからは以下のようなメニューが表示されます。

◇Text OnlyモードでのFont Styleアイテム
 

Mailアプリケーションの検索機能のようなものは、メニューでも代用できませんので、使えなくなるという仕様になっています。ビューアイテムの場合は、メニューを付けなければ自動的に使えなくなります。ただし、メニューから検索文字列を入れるダイアログが表示させるという方法も考えられます。

◇Text OnlyモードでのMailのツールバー
 

メニューの作成は、一般のCocoaアプリケーションと同じでInterface Builderで行います。このサンプルでは、以下のように2つのメニューがあることがわかります。

◇MainMenu.nibの中のメニュー
 

このサンプルでは、Controllerというインスタンスからメニューを利用していますので、参照のためのアウトレットを用意してコネクトしています。Font Styleメニューは以下のようにfontStyleMenuというアウトレットにコネクトしています。

◇ツールバーアイテムのメニューとのコネクト
 

メニューのアクションのコネクトもいつものとおり行えますので、メニューから実行されるアクションもコネクトしておきます。

 ̄ ̄ ̄オーバーフローメニュー___

Icon & Textモードや、Icon Onlyモードでも、ウィンドウの横幅が狭くなると、ツールバーに入りきらないアイテムは強制的にメニューにされてしまいます。このメニューを「 オーバーフローメニュー ( Overflow Menu ) 」と呼びます。Text Onlyモードのときと同じメニューが使用されます。

◇オーバーフローメニュー
 

 ̄ ̄ ̄ツールバーアイテムのおさらい___

これで、ツールバーとツールバーアイテムの大体の機能を見ることが出来ましたので、ツールバーアイテムのおさらいをしてみます。ツールバーアイテムは、以下のようになっています。イメージアイテムとビューアイテムに分けて書いておきます。

イメージアイテムの特徴


ビューアイテムの特徴

(この項続く)
[鶴薗賢吾]

関連リンク:Cocoaはやっぱり!
カテゴリ:ユーザインタフェース, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版


【MacWIRE配信予定】Mac OS X 10.1に対応した書籍が発売

Mac OS X 10.1に対応した書籍『Mac OS X v10.1パワフルガイドブック』がローカスから出版された。2001年6月に出版された「Mac OS X導入パワフルガイドブック」の改訂版で、筆者は大谷和利・大津真・柴田文彦・新居雅行・向井領治の5名、価格は\3,000となっている。376ページのボリュームで、Mac OS X 10.1に合わせて内容が増えている。インストールやユーザインタフェース、標準アプリケーションに関する解説に加え、システム設定やUNIX的な使い方、ネットワークに関すること、サーバ機能、そして開発についての情報が記載されている。開発に関連する章は、MDOnlineでの記事をSeptember 2001版のDeveloper Tools向けにリライトしたものとなっているが、Interface Builderの作業については全面的に見直している。基本的なことに加えて、UNIXやネットワークについてが詳しくかかれているのが特徴だと言えるだろう。単に画面を見て分かる範囲のこと以上をMac OS Xについて知りたい人におすすめしたい書籍である。

関連リンク:ローカス
カテゴリ:雑誌、書籍, Mac OS X


Browsing Mac OS X》Mac OS X 10.1で追加されたCD-R作成機能を試してみる(追加)ハイブリッドCDのコピー

MDOnlineの2001年12月13、14日に配信した『Mac OS X 10.1で追加されたCD-R作成機能を試してみる』という記事で、CD-ROMをまるごとコピーする方法を説明した。Disk Copyを使い、ディスクを丸ごとコピーしたファイルを作成し、そのファイルをもとにしてCD-Rへ書き込みを行うという方法である。
ここで、ハイブリッドのCDはどうなんだという指摘を読者の方からいただいた。つまり、パーティションが区切ってあって、一方がMac OSのHFS、もう一方はWindows向けのISO9660といった形式のものである。もちろん、Mac OS XでそうしたCDをドライブに入れても、Mac側のパーティションしかマウントされない。しかしながら、前回の記事でお伝えしたDisk Copyを使った方法であれば、マウントしていないパーティションも含めてディスクを丸ごとコピーできるので、ハイブリッドのCDでもWindowsのパーティションも含めてコピーすることができる。

カテゴリ:メディア制作, 周辺機器, Browsing Mac OS X


KBase》AppleWorks 6.2.2へのアップデータの日本語版が公開

Mac OS X版のAppleWorks 6をVer.6.2.2へアップデートするアップデータが公開された。英語版のアプリケーションのアップデータはすでに公開されているが、新たに日本語が追加された。Ver.6.2.2では、ウインドウやパレットが小さくなってしまっていた不具合が解消されている。

関連リンク:AppleWorks 6.2.2 Update: Information and Download
カテゴリ:Knowledge Base(旧TIL), 文書作成アプリケーション


KBase》Final Cut Pro 3に関連する文書が掲載

Final Cut Pro 3に関する情報がKnowledge Baseに以下のように掲載されている。

◇Final Cut Pro: Title Safe Boundaries Change With Window Size
 http://www.info.apple.com/kbnum/n60994
テキストジェネレータがタイトルセーフな領域を100%として処理するが、これはレンダリング後は正しく表示される。この問題は継続して調査する。

◇Final Cut Pro 3: JKL Keyboard Shortcuts Stop Functioning in Log and Capture
 http://www.info.apple.com/kbnum/n60995
JKLキーボードでのショートカットキーが効かない問題について、LogやCaptureウインドウを閉じれば機能するとしているが、この問題については継続して調査するとしている。

◇Final Cut Pro 3: "Codec Not Found" Alert When Importing Grayscale JPEG
 http://www.info.apple.com/kbnum/n60998
グレースケールのJPEGがある場合にコーデックが見つからないという意味のメッセージを出すが、この問題については調査中である。

◇Final Cut Pro 3: Bold Effects May Not Be Available for Software Real-Time
 http://www.info.apple.com/kbnum/n60997
ボールドフォントに対してエフェクトなどがかからない問題があるが、これについては調査中である。

◇Final Cut Pro 3: Finder Attempts to Open FCP For Mac OS X When You Open Project Files In Mac OS 9
 http://www.info.apple.com/kbnum/n60989
Mac OS 9とXの両方のFinal Cut Pro 3をインストールしていて、Mac OS 9版を使っているとき、プロジェクトのファイルをダブルクリックするとX版がそれを開こうとする場合がある。これはデスクトップファイルの更新が行われていないからで、アプリケーションをいったんデスクトップに出してもとに戻せばよい。

◇Final Cut Pro 3: FireWire Output Disabled While Voice Over Set to DV Audio Input
 http://www.info.apple.com/kbnum/n60990
Voice Overでの入力源にDVビデオを指定できないが、外部ビデオをオフにすることで設定できるようになる。

◇Final Cut Pro: Do Not Use High ASCII Characters In FXScripts
 http://www.info.apple.com/kbnum/n60991
日本語システムなどでは、(C)等のキャラクタをFXScriptsで使うとエラーが出る。

◇Final Cut Pro 3: After Effects Plugin Presets Have No Effect
 http://www.info.apple.com/kbnum/n60992
AfterEffects用プラグインが機能しない問題があり、調査中である。この問題を回避する方法についての説明もある。

カテゴリ:Knowledge Base(旧TIL), ビデオ編集, ビデオ編集