Macintosh Developer Online (MDOnline)


2001年10月22日発行号 - iBookとPBG4の説明会



記者会見が終わったばかりですが、家に帰って発行していると時間が遅くなるので、このまま記事をアップします。MacWIREに掲載するとき、すみませんが、てにをはのチェックをお願いします(笑)。今、写真撮影会になっています。
本日の鶴薗さんの原稿のPDF版は以下のアドレスからダウンロードしてください。

 http://mdonline.jp/figs/01/0030/MDOnline%202001.11.pdf
(新居雅行 msyk@mdonline.jp


Mac OS X 10.1のセキュリティ問題を解決するアップデートが公開

Mac OS X 10.1の最初のアップデートは、セキュリティ対策だ。日本時間での2001年10月20日(土)には、ソフトウエア・アップデートでのアップデートが確認できた。

1つはMac OS Xのセキュリティの問題に関するものだ。Stepwise.comにおいてScott Anguish氏が以下のページで公開しているセキュリティの問題に対処するものだ。

◇Mac OS X 10.1 Local Security Exploit
 http://www.stepwise.com/Articles/Admin/2001-10-15.01.html

Mac OS Xでは、アプリケーションなどを起動すると、通常はログインしているアカウントの権限で、プロセスが実行される。しかしながら、NetInfo ManagerやDisk Utilityのようにrootの権限で実行しないと必要な設定ができないようなアプリケーションの場合、どんなアカウントから実行してもrootとしてそれらのアプリケーションのプロセスを実行する。こうした設定を、NetInfo Managerの実行バイナリファイルに設定してあるが、それはset user IDモード、あるいはSUIDなどと呼ばれている。この設定をしておけば、呼び出したアカウントではなく、そのファイルの所有者の権限でプロセスが実行されることになる。
しかしながら、Mac OS Xでの「最近使った項目」からの実行は、フロントのアプリケーションのアカウントの権限で、選択した項目に対応するアプリケーションを実行してしまう。従って、NetInfo ManagerがフロントのときにTerminalを「最近使った項目」から実行すると、パスワードも何も入れていないのに、Terminalではrootでシェルが利用できる状態になってしまっていたのである。この問題は、Mac OS X 10.0.xでも存在していた模様だ。
ただし、セキュリティのアップデートにより、この問題は解消している。同じようにTerminalを呼び出しても、rootでいきなりシェルが使えるということは発生しなくなった。

そして、Internet ExplorerはVer.5.1.3にアップデートされた。これもすでに指摘されているように、ある設定を行っているとファイルをダウンロードした場合に、アプリケーションの実行まで自動的にしてしまうという結果になっていた。危険なプログラムをダウンロードした場合には、システムに危害が及ぶ恐れがあるわけだが、自動的にアプリケーションを実行するという作業を行なわないように、セキュリティ面での補正がされたバージョンである。

カテゴリ:ブラウザ, Webブラウザ, Mac OS X


新しいiBookとPowerBook G4に関するプレス説明会が開催

2001年10月22日に、アップルコンピュータで、先週に発表された新しいiBookとPowerBook G4についての説明会が開催された。そこで説明された内容をお届けしよう。まずは、マーケティング本部長の大宮氏よりの話から開催された。まずは、広報のPRに人員を新たに配置したことを紹介し、より多くの要望をプレス関係者からも受けられる体制を整えたことを説明した。
そして、PowerBookとiBookのマーケティングを担当している福島哲氏からの話に移った。まずは、PowerBook G4は1月に発表した本体をベースにしているが、内容は広範囲に変更が加えられている。まずはパフォーマンスを向上させ、CPUのクロックを550/667MHzとなっており、システムバスは100/133MHzとなっており、メモリはPC133、そしてGigabit Ethernetをノートパソコンでは初めて搭載した。1.3MHzのPentium IIIや1.7MHzのPentium IVよりも高速であることをベンチマークの結果で示した。グラフィックスについても、ATI Mobility Radeonを搭載し、外部ディスプレイを利用したときのパフォーマンスも向上している。ハードディスクも20/30GBを搭載し、BTOで48GBも可能である。流体軸受けタイプを採用している。パフォーマンスは向上したが重量やサイズは従来機種と変わらない。そして、「Appleポータブル電源アダプタ」という角形のアダプタを同梱しており、電源部やDCケーブルの巻取り部分などを写真で紹介した。そして、容量をアップさせたバッテリにより最高5時間のバッテリ駆動が可能で、状態を確認できるLEDも装備されている。667MHzモデルではAirMacが同梱されている。背面のポートはGigabit Ethernetになっただけでなく、フタにスリットが付き、放熱効率を上げている。また、内部的には廃熱メカニズムも変更されている。ディスプレイでは、ミラーリング、デュアルディスプレイ、閉じた状態での利用が可能となっている。外部ディスプレイの認識などにキーボードショートカットが利用できるようになっている。また、CD-RWモデルも用意している。価格については、最近値下げを行ったがそのまま据え置きで性能をアップしたことを説明した。メモリはダブルアップキャンペーンで2倍になるが、AppleStoreを含む全ての販売チャンネルで、年内は行われる。BTOオプションでは、1GBまでのメモリ、48GBまでのハードディスク、さらにキーボードとしてUSキーボードの選択もできるようになった。USキーボードは、従来のPowerBook G4向けの交換サービスのものとは異なっており、新しいPowerBook G4では物理的に接続はできないということだ。PowerBook G4のデモとしてQuake IIIを実行させたが、ミラーリングをした場合のパフォーマンスの向上を示すのが目的だ。また、ムービーの再生もデモされた。発売は10月下旬となっている。
続いてiBookについての説明に移った。新しい機種でもデジタルハブといったコンセプトは継承されている。デザインは従来通りコンパクトサイズながらフルサイズのキーボードを利用したものが採用されている。新しい電源アダプタが付属しており、充電状態をDCコード側のプラグに仕込まれているLEDランプで表示する。パフォーマンスとして、600MHzのCPUと100MHzのバスシステムを採用し、バッテリ駆動時間は従来とおり5時間となっている。価格的にはコンボドライブモデルが従来よりも安くなっている。CD-ROM/DVD-ROMタイプは従来通りの価格でパフォーマンスがアップしている。発売は10月25日となっている。BTOオプションとしては、やはりUSキーボードの選択ができるようになった。
続いて、Mac OS X 10.1についての話が行われたが、新しいiBookやPowerBook G4にもインストールされている。技術的に詳しくないユーザが多いiBookユーザ向けにMac OS Xのメリットを分かりやすく説明するために、アイコンのデザインからAquaの特徴を示した。アイコンの表現力が高まったところにAquaの特徴を象徴していると説明した。アプリケーションやユーティリティのアイコンの特徴を説明した。アプリケーションは斜めから見たようなデザインなのに対して、ユーティリティは正面から見た感じになっており押さえた感じのデザインになっている。また、アイコンのストーリー性が重要であるとも考えており、PreviewやMailのアイコンを引き合いに出した。さらに、ヒラギノフォントのクオリティを示した。また、ポータブル機向けにも機能が作り込まれており、複数のインターネット接続を自動的に認識したり、スリープから素早い復帰ができたり、メニューバーのアイコンやPrintCenterといった機能を紹介した。また、Appleが提供しているアプリケーションについての話となった。まず、FreePlay MusicによりMP3フォーマットでの高品質のBGMをiDiskを使って配付している。iMovie 2やFinal Cut Pro 2での利用が可能で、個人利用ではフリーとなっている。また、iToolsのHome Page機能がアップデートされ、1アカウントで複数のサイトを管理したり、パスワードの設定やアクセスカウンタを簡単に利用できるようになった。
続いてiBookのデモになった。まずは新しいACアダプタの実物を示し、実際にプラグの抜き差しなどを見せた。Mac OS X 10.1を稼働させ、スムーズに操作ができることを示した。ムービーのプレビューやカラム表示、Dockの位置の移動などをデモした。さらに、Webページの表示をヒラギノフォントで行うことできれいに表示できることを示した(ブラウザはOmniWebを使用した)。イメージキャプチャにデモが行われ、デジカメからの画像のダウンロードが簡単にできることを示した。また、iToolsのHome Pageのデモも行われ、複数のサイトを管理できることを示した。また、FreePlayの音楽データを使って編集されたムービーを示し、2100曲ほどありすべてダウンロードすると1.4GBほどになる。また、SUNTACから発売されたMac OS X対応の携帯電話アダプタDS96LXを利用して、モバイル接続を行うところもデモされた。また、Mac OS Xのネットワーク機能についても詳しい説明が行われた。

Q&Aでは、まず発熱がどうなっているのかという質問が出された。iBookは従来通りなので改善はされていないが、触れないほど熱いほどではないと思う。セットアップによってこういうのは変わるのではないかと指摘した。また、ファンについては回るし、従来機もある環境になるとやはり回るはず。
PowerBook G4での新しくなったバッテリは旧型PowerBook G4との互換性があるかという質問。形状は同じなので互換性はある。容量は10%アップした。
旧ユーザが保証期間内に修理を出すと、バッテリやACアダプタは新しいものになるのかといった質問が出た。基本的には旧機種はその機種に対応したパーツが使われる。
PowerBook G4で本体は変わっていないということだが、サイドフレームやドライブのローディングの問題はどうなるのかといった質問。サイドフレームは変わってない。ドライブについてはマイナーリビジョンがなされている。足は若干硬くなるなど小さな変化はある。

◇iBook
 http://www.apple.co.jp/ibook/index.html

◇PowerBook G4
 http://www.apple.co.jp/powerbook/index.html

カテゴリ:PowerBook, iBook


鶴薗賢吾のCocoaはやっぱり!出張版》補足-#5-Mac OS X 10.1の新機能 2(その1)

■ 今回のテーマ
今回は、第4回の「 Mac OS X 10.1の新機能 」で書いていなかった機能について説明を行っていきます。Mac OS X 10.1の新機能や変更点の詳細は、Appleからのリリースノートに記述されていますので、必要に応じて参照してください。

◇Appleサイト
 http://developer.apple.com/techpubs/macosx/ReleaseNotes/index.html
◇ハードディスク上 ( Developer Toolsをインストールした場合 )
 /Developer/Documentation/ReleaseNotes/

また、10.0.4から10.1での詳細な変更点が書かれたテクニカルノートもAppleのサイトにアップされましたので、こちらも参考にされるとよいと思います。

◇Technical Note TN2029: Mac OS X v10.1
 http://developer.apple.com/technotes/tn/tn2029.html

■ ライブリサイズ
NSViewには、「 ユーザーが現在ウィンドウのリサイズしているかどうか 」を知るためのメソッドが追加されました。inLiveResizeというメソッドです。ウィンドウがリサイズされている最中には、ウィンドウのサイズが変わるたびに、NSView内を描画するメソッドであるdrawRect : が繰り返し呼ばれます。

しかしながら、描画処理が重たい場合は、リサイズも重くなり操作性に影響します。そのため、「 ウィンドウのサイズが確定したときのみ描画したい 」とか、「 ライブリサイズ中はラフな描画に切り替えたい 」ということがあると思います。そういうときには、drawRect : の中でinLiveResizeを呼んで判定すればよいのです。

また、ライブリサイズ開始直前と終了直後には、NSViewのviewWillStartLiveResizeとviewDidEndLiveResizeが呼ばれるようになりました。ライブリサイズ時に別の描画を行う場合、初期化処理や終了処理が必要であればここに記述します。さらに、viewDidEndLiveResizeから、[ self setNeedsDisplay : YES ] を実行して、通常の描画を行わせるようにしておきます。

では、ライブリサイズ中には画像を描画しないNSImageViewを作ってみましょう。NSImageViewのサブクラスとして、NSQuickImageViewを作ったとします。このクラスに以下の2つのメソッドを実装することで、実現できます。


// NSQuickImageView.m

// 描画が必要なときに呼ばれる

- (void) drawRect : (NSRect) rect {

if ( [ self inLiveResize ] ) { // ライブリサイズ中か判定
[ [ NSColor grayColor ] set ]; // グレーで
[ NSBezierPath fillRect : rect ]; // 矩形の塗りつぶし
}
else
[ super drawRect : rect ]; // NSImageViewにおまかせ

}

// ライブリサイズ終了直後に呼ばれる

- (void) viewDidEndLiveResize {
[ self setNeedsDisplay : YES ]; // 通常の再描画を行わせる
}

このようにすると、リサイズ中は、グレーに塗りつぶすだけになり、ウィンドウのサイズが確定したところで、通常の画像描画が行われます。実行結果は以下のようになります。

図. ライブリサイズ中の描画を軽くしたときの実行結果
 

 ★ ライブリサイズ中かを取得
  [書式] - (BOOL) inLiveResize
  [出力] 返り値 : ライブリサイズ中なら - YES、そうでないなら - NO

 ★ ライブリサイズ開始直前の処理を行う
  [書式] - (void) viewWillStartLiveResize

 ★ ライブリサイズ終了直後の処理を行う
  [書式] - (void) viewDidEndLiveResize

■ 3つ以上のボタンがあるデバイスのサポート
最近のマウスは、色々な種類があり、ボタンが3つ以上付いているものも多くなりましたが、これらのサポートも簡単に行えるようになりました。

3つ目以降のボタンのイベントを受け付けるために、NSResponderクラス ( イベントを受け付けるクラス ) に、otherMouseDown : 、otherMouseUp : 、otherMouseDragged : というメソッドが追加されました。これらのメソッドは、3つ目以降のボタンの操作が行われたときに呼び出されます。通常は、NSViewのサブクラスにこれらのメソッドを書いてイベント処理を行うことになります。

 ★ 3つ目以降のボタンが押された
  [書式] - (void) otherMouseDown : (NSEvent *) theEvent
  [入力] theEvent : イベント情報

 ★ 3つ目以降のボタンが放された
  [書式] - (void) otherMouseUp : (NSEvent *) theEvent
  [入力] theEvent : イベント情報

 ★ 3つ目以降のボタンでドラッグされた
  [書式] - (void) otherMouseDragged : (NSEvent *) theEvent
  [入力] theEvent : イベント情報

3つ目以降のどのボタンの操作なのかは、パラメータで受け取ったNSEventのbuttonNumberというメソッドを使うことで判別できます。左のボタンが0で、右のボタンが1、3番目のボタンが2というように値が増えていきます。

マウスの種類に依存するかもしれませんが、最近よくあるホイールがクリックできるマウスの場合は、これが3つ目のボタンになるようです。

 ★ どのボタンのイベントかを取得
  [書式] - (int) buttonNumber
  [出力] int : ボタンの番号 ( 左ボタン - 0、右ボタン - 1、3つ目のボタン - 2、... )

これにともなって、イベントの種類を表す定数や、イベントのマスクを行うための定数も増えています。

// イベントの種類を表す定数
typedef enum _NSEventType {
NSLeftMouseDown = 1,
NSLeftMouseUp = 2,
: 省略
NSScrollWheel = 22,
NSOtherMouseDown = 25,
NSOtherMouseUp = 26,
NSOtherMouseDragged = 27
} NSEventType;

// 受け付けるイベントを制限するための定数
enum {
NSLeftMouseDownMask = 1 << NSLeftMouseDown,
NSLeftMouseUpMask = 1 << NSLeftMouseUp,
: 省略
NSScrollWheelMask = 1 << NSScrollWheel,
NSOtherMouseDownMask = 1 << NSOtherMouseDown,
NSOtherMouseUpMask = 1 << NSOtherMouseUp,
NSOtherMouseDraggedMask = 1 << NSOtherMouseDragged,
NSAnyEventMask = 0xffffffffU
};


■ 直前のイベントからのマウスの移動量
NSEventのdeltaXとdeltaYでは、マウス移動やマウスドラッグのイベントで直前のイベントからの移動量が取得できるようになりました。NSViewのサブクラスに以下のようなコードを書くことで移動量を得ることが出来ます。

// 直前のイベント処理からのドラッグ量を取得するサンプル
- (void) mouseDragged : (NSEvent *) theEvent {

NSLog( @"deltaX = %f", [ theEvent deltaX ] );
NSLog( @"deltaY = %f", [ theEvent deltaY ] );

}

[鶴薗賢吾]

関連リンク:Cocoaはやっぱり!
カテゴリ:Cocoa, Mac OS X, 鶴薗賢吾のCocoaはやっぱり!出張版


鶴薗賢吾のCocoaはやっぱり!出張版》補足-#5-Mac OS X 10.1の新機能 2(その2)

■ アバウトパネル
Cocoaアプリケーションでは、著作権等を表示するアバウトパネルが予め用意されていて、何もしなくてもプロジェクトの設定などにしたがって以下のように表示されます。

図. 通常のアバウトパネル
 

Mac OS X 10.1では、「 Credits.html 」というファイルをリソースとして組み込んでおくと、このファイルの中身がアバウトパネル内に表示されます ( 「 Credits.rtfd 」や「 Credits.rtf 」も可能 )。

アバウト画面にサポートページへのリンクを付けるのもウェブページを作るのと同じ要領でリンクを作っておくだけです。「 mailto: 」も使えますので、メールアドレスを組み込むのも簡単です。クリックするとデフォルトのメーラーが起動して、メール作成画面になります。また、このHTMLには、画像を貼り付けておけば、それも表示されます。

アプリケーションへの組み込みは、Project Builderで、プロジェクトウィンドウのResourcesの下に画像を含めた全てのファイルをドラッグ&ドロップしてビルドするだけです ( 言語毎にファイルを組み込むことももちろん可能です )。

図. アバウトパネル用のHTMLファイルのプロジェクトへの組み込み
 

組み込んだ結果ですが、中身が短い場合は左のようになり、長い場合はスクロール表示されるようになります。

図. HTMLを組み込んだ場合のアバウトパネル
 

■ NSURL / NSURLHandle
NSURL/NSURLHandleは、HTTPSをサポートしたので、暗号化を行うサーバーとのコネクションが可能になりました。

また、サーバーへ送信するHTTPヘッダーを加工することができるようになっています。NSNURLHandleのwriteProperty : forKey : でユーザーエージェントの指定などを追加できますし、Basic認証のかかっているページへのアクセスも可能になります。


// HTTPヘッダーを加工するサンプル
NSURL *url = [ NSURL URLWithString : @"http://www.apple.com/" ];
NSURLHandle *handle = [ url URLHandleUsingCache : NO ];
NSData *pageData;

[ handle writeProperty : @"MyApp/1.0"
forKey : @"User-Agent" ]; // ユーザーエージェント
[ handle writeProperty : @"Basic xxxx"
forKey : @"Authorization" ]; // Basic認証のページへのアクセス

pageData = [ handle resourceData ];

ただし、私の実験では、あいかわらずHTTPのプロキシーサーバーはサポートを行っていないようです。システム環境設定のネットワークの設定には従いますが、プロキシーの設定は無効ですので注意が必要です。プロキシーも考慮する場合は、NSURLは現状使えません。

■ マルチスクリーンサポート改善
スクリーンの情報を扱うNSScreenは、マルチスクリーンのサポートが改善されました。スリープから復帰した際に、スクリーンが追加されたり削除されたりすることがありますが、これを正しく扱うようになっています。このため、NSScreenから得た情報をアプリケーション側に長期的にコピーを持つことはお奨めできません。画面の情報が必要な場合は、その時点でNSScreenのメソッドを使って参照するという方法にしなければなりません。

■ クリップボード ( ペーストボード ) への画像の出力
私の見落としでなければ、リリースノートには書いていないのですが、クリップボードへの画像の出力に関しても、Mac OS X 10.1では改善が行われています。ただし、これはフレームワーク側の改善ではなく、OS側の改善なのかもしれません。

Cocoaでは、以下のコードで画像データをクリップボードへ出力できます。

// 画像をクリップボードに出力するサンプル
NSImage *img = [ 画像を生成するメソッド ];
NSPasteboard *pb = [ NSPasteboard generalPasteboard ];

[ pb declareTypes : [ NSArray arrayWithObjects : NSTIFFPboardType, nil ]
owner : nil ];
[ pb setData: [ img TIFFRepresentation ] forType : NSTIFFPboardType ];

このコードでは、NSImageからTIFF形式で画像データを取得して、クリップボードに出力しています。しかしながら、CarbonやClassicアプリケーションは、PICT形式でないと画像を受け取れないため、Mac OS X 10.0.4まででは、Cocoaアプリケーション間でしか画像のやり取りはできませんでした ( Cocoaアプリケーションで、PICT形式のデータを作ることは不可能ではありませんが、やや面倒なのです )。

それが、Mac OS X 10.1では、TIFFで書き出すだけで、クリップボードにはPICT形式のデータも自動的に組み込まれるようになりました。そのため、先程のコードのままで、CocoaアプリケーションからCarbonやClassicアプリケーションへ画像をクリップボード経由で渡すことはができるようになりました。

NSImageクラスにPICTRepresentationというメソッドがあってもいいのではないかと思うんですけどね。

■ まとめ
このようにCocoaのフレームワークは、小幅ながらも役に立つ改良が行われています。是非あなたのアプリケーションでも使ってみてください。
[鶴薗賢吾]

関連リンク:Cocoaはやっぱり!
カテゴリ:Cocoa, Mac OS X, 鶴薗賢吾のCocoaはやっぱり!出張版