Macintosh Developer Online (MDOnline)


2000年12月19日発行号 - MRJに新たなセキュリティホール



在宅勤務の私は昼飯はワイドショーなんぞを見ながら食べてたりするのですが、ふと、インパクのコマーシャルが目に飛び込んできました。何と!森首相が!パソコンを!触って!いるのです。しかも、パソコンを使っているような雰囲気でわざとらしくマウスを動かすのですが、その手付きがそれとみてすぐに分かる「パソコンを使ったことないな、こいつ…」という感じです。噂では、自分の名前を打つのがやっとだとか、スイッチオンはできても終了する方法が知らないなど言われていますが、ITのイメージを落とすだけでなく、インパクまで危機にさらすのではないかと思ってしまいます。もっとも、森首相でもパソコン使っているということで親しみを持ってもらおうという意図もきっと説明するでしょうけど、逆効果の方が明白に高いと思いますね。いやいや、こうやって話題になることを意図しているとしたら、なかなかのものですけどね。
MRJにセキュリティホールが見つかっています。記事は先にMacWIREの方に出ていますが、阪倉一氏が執筆してMDOnlineで制作したものです。月曜には配信予定がなかったので、記事だけを先に配信した次第です。
さて、先週の書籍の当選者は以下の通りです。敬称略とさせていただきます。

実用Office 2001 for Mac:広島のムーミン
実用Word 2001 for Mac:神谷和孝
実用Excel 2001 for Mac:前薗 健一

新たなプレゼントもあります。以下の通りです。メールで御応募ください。先に自白しておきますが、先週のMac Fanの忘年会でもらったプレゼント品です。着衣はしていませんので御安心を。同じものを1枚持っているのでこちらのプレゼント品とします。(笑わないように>Mac Fan関係者の方々)

==================プレゼント
G4 CubeのTシャツ(1枚)
―――――――――――――――――――――
申し込み方法:<msyk@locus.co.jp>宛にメールをする
 メールのタイトル:【G4 CubeのTシャツ】を希望
 本文には、名前、住所、郵便番号、当選時の公表名、を記載
 メールは、MDOnlineに登録のメールアドレスから送付してください
 締め切り:2000年12月21日(木)到着分のみ
(新居雅行 msyk@mdonline.jp


Macintosh Runtime for Java(MRJ)2.2.3にセキュリティホール

Javaに関するメーリングリストJavaHouse Brewers MLの高木氏によって、Mac用のJava VMであるMacintosh Runtime for Javaの最新版であるバージョン2.2.3にセキュリティホールがあることが確認されており、高木氏は警告をしている。このセキュリティホールは、Javaアプレットを使うWebページにおいて、Javaアプレットを使うために記述するAppleタグのCodebase属性とArchive属性を同時に記述した時の実装仕様のバグのを利用したもの。このバグは、これまでにもSunのJDK1.1.4や、以前のバージョンのMicrosoft JavaVMでも存在し、SunやMicrosoftの内部では認知されていた。
今回のセキュリティホールは、これまでに報告されているセキュリティホールと同様に、ローカルコンピュータのファイルが盗まれたり、ブラウザが乗っ取られ任意のWebサイトにアクセス可能になる。このため、仮にFirewallで守られた内部ネットワークの情報であっても、悪意を持った人であれば簡単に盗み出すことは可能である。
現在のところ、このセキュリティホールを修正したMRJはリリースされていない。現在可能な対応策は、MRJをJava VMとして仕様するWebブラウザ(IE、iCab、 Netscape6、Netscape+MRJ Plug-in)においてはJavaを使わない設定にすることである。また、このセキュリティホールを修正したMRJがリリースされるまでは、MRJを使わないことが重要である。また、この件に対するAppleの回答については、事実を調査しているとするだけで、12月13日現在修正に関する回答はない。
これまでに確認されている、セキュリティホールが発生する組み合わせは以下の通りである。基本的にMRJ2.2.3を使う環境では再現すると考えた方がよい。


高木氏は、セキュリティホールの危険性を知らせることと、セキュリティホールが発生する組み合わせを見つけるために、セキュリティホールを利用したサンプルの不正Javaアプレットを含むWebページを公開している。このアプレットでは、あるフォルダの中にあるファイル一覧を実際に別のサーバに転送してしまう。そのため、試験目的以外では使わない方がよい。また、JavaHouse Brewers MLでは、現在でも様々な環境での追試を呼びかけている。
最後に、Javaにおけるセキュリティホールは、Javaのフレームワークや、Java言語そのものの問題ではなく、あくまでも実装上のバグが原因である。これまでJavaはセキュリティ上安全であるという主張がなされてきたが、今回だけでなく、最近は他のプラットフォームで既知のバグが、他のプラットフォームでかなり時間がたっても修正されていないケースが多い。セキュリティホールは、Internet利用普及の大きな妨げとなるだけに、Javaのセキュリティホールの情報公開、対策の効率化が求められる。

◇高木氏による警告文:
 http://java-house.etl.go.jp/ml/archive/j-h-b/039434.html
◇セキュリティホールを確かめるためのテストページ:
 http://java-house.etl.go.jp/~takagi/java/security/mrj-codebase1/Test.html
◇JavaHouse Brewers ML案内:
 http://java-house.etl.go.jp/ml/

[阪倉 一/Java Security Report]

カテゴリ:Java, ブラウザ


【今から始めるCocoaプログラミング】最初のアプリケーション(4)線で結びクラスを生成

CocoaアプリケーションをJavaで作成するシリーズは、プロジェクトのひな形から、Interface Builderを使ってコントロールをウインドウに配置し、さらに中間層になるController層のクラスをプログラムで作るところまでを説明した。前回はそのクラスを作り、OutletとActionsを作成した。3つあるテキストフィールドに対応したOutletと、ボタンを押したときに呼び出すActionを1つ設定したが、それらを実際に対応付けることにしよう。

まず、Interface Builderで定義したクラスを、実際のソースプログラムとして反映させる作業を行なう。文書ウインドウ(MyDocument.nib)でClassesのタブを選択した状態で、新たに作ったMyWindowControllerというクラスを選択しておく。そして、ClassesメニューからCreate Fileを選択する。これによって、設定として作成したクラスの実物を作ると思えばよいだろうか。クラスの実物はプログラミングレベルでは、ソースファイルである。つまり、MyWindowControllerのクラスのソースファイルを作成する。メニュー選択すると、そのファイルを保存する場所をたずねるダイアログボックスが表示される。ここで、通常は、プロジェクトのルートフォルダ、すなわちmain.mファイルなどと同じ場所にファイルを作っておけば良いだろう。ファイル名は自動的にクラス名.javaになる。Project Builderに項目を追加するチェックボックスもあるので、もちろんオンにする。なお、たぶん、バグだと思うが、この大ログボックスを最初に表示した段階では、Chooseボタンをクリックできない。上部のリストで、プロジェクトのフォルダをクリックして選択すると、ボタンをクリックできるようになる。

◇ClassesメニューからCreate Fileを選択する
 
◇作成したソースファイルを作成する場所を指定する
 

作成したクラスのプログラムについては後から確認しよう。

いよいよ、ウインドウ上のコントロールと、作成したクラスとを結び付ける。MyDocument.nibのウインドウでInstancesのタブを選択すると、インスタンス科されたMyWindowControllerが見えている。そこと、実際のウインドウの設計画面を両方見えるようにしておく。まず、ボタンをクリックしたら、MyWindowControllerのActionが呼び出されるように設定しよう。動作のきっかけが発生するボタンの側から、controlキーを押したままドラッグを行なう。ドラッグ先は、インスタンス化されたMyWindowControllerのアイコンである。

◇ボタンからMyWindowControllerまでをcontrolキーを押しながらドラッグする
 

ドラッグを終了すると、インスペクタのウインドウがアクティブになる。ここで、左側はドラッグ元のボタンのOutletであり、右側はドラッグ先のMyWindowControllerのActionが一覧されている。ボタンのtargetというOutletは、クリックしたときにメッセージが送りだされる出口だと考えればよいだろう。右側では作成したActionのclickButtonが見えているので、それを選択してConnectボタンをクリックする。これによって、ボタンをクリックすると、MyWindowControllerのclickButtonというメソッドが呼び出されるわけだ。なお、ドラッグミスでキャンセルしたい場合には、ボタンなどを配置したウインドウの何もないあたりを適当にクリックするとキャンセルされる。言い換えれば、Connectボタンをクリックしない限りは線で結ぶ設定は記録されないのである。

◇ボタンのtargetを、クラスのActionに接続する
 

ボタンとクラスのActionを結ぶと、ボタンがクリックされればActionが呼び出されるという結びつきは何となく分かりやすい。次は、逆にクラスのOutletは実はテキストフィールドであるという結びつきを定義する。これはちょっとイメージしづらいかもしれない。
今度は、MyDcoment.nibのウインドウにあるインスタンス化されたMyWindowControllerから、コントロールを配置してあるウインドウ上の1つのテキストフィールドに対して、controlキーを押しながらドラッグを行なう。コントロールに向かってドラッグを行なうわけだ。この場合もやはりインスペクタウインドウが必ず現れるが、左側のリストには、MyWindowControlクラスに定義したOutletが一覧される。ここでは、TextField1を選択することにする。右側には、テキストフィールドのActionが一覧されると考えられるが何も出ていない。とりあえず、左側だけ選択して、Connectボタンをクリックしよう。

◇インスタンス化したクラスからテキストフィールドに向かってcontrol+ドラッグ
 

 

ここで、残りのテキストフィールドについてもOutletと結び付けて…と思いたいところだが、線で結ばないと何が起こるのかを見るために、あえて、1つのOutletと、1つのテキストフィールドを結ぶだけで以下の作業をやってもらいたい。

カテゴリ:ProjectBuilder/Interface Builder, 今から始めるCocoaプログラミング


【今から始めるCocoaプログラミング】最初のアプリケーション(4)線で結びクラスを生成<続き>

ここで、デバッガを使いながら、プログラムの中での動作を検討していきたい。いろいろ作業をする前に、まず、Javaのデバッガを使えるように設定を確認してもらいたい。デバッガの種類はプロジェクトの設定で行なう。設定の確認はいろいろな方法があるが、ここではまず左側のファイル一覧の右にあるTargetsというタブを選択して、ターゲット設定を左側に項目として出した。そして、ここでは1つだけあるMyFirstCocoaというターゲットを選択すると、右側にはプロジェクトの設定が表示される。Executablesというタブを選択し、さらにDebubberというタブを選択し、表示されるJava Debubberのラジオボタンを選択しておく。特にOKなどのボタンはなく、ラジオボタンを選択するだけで設定は行なわれる。

◇デバッガをJava Debuggerを使用するに設定する
 

ここでソースを見てみよう。Project Builderの左側の表示をFilesにして、新たに作ったMyWindowController.javaを参照してみる。Outletがインスタンス変数、Actionがメソッドになっているのがすぐに分かるだろう。importしているのは、Cocoaのライブラリだ。後はJavaを知っている人にはすぐに判読できるプログラムだ。
このプログラムで、ボタンをクリックして呼び出されるclickButtonメソッドに、図にあるよう、printlnを含むステートメントを3行追加する。Outletに相当するObject型のインスタンス変数がいったい何ものなのかを調べるということをしたいわけだ。ちょっと大雑把なプログラムだが、結果オーライだ。これで、とりあえずConsoleに、オブジェクトの型が表示されるので、その結果を参照することにしたい。また、プログラムリストのいちばん左側に楔が見えているが、これはブレークポイントをします。この部分をクリックすることでブレークポイントを設定できる。

◇clickButtonに3行加える
 

では、実際に実行といきたいところだが、ここではまずカナヅチアイコンをクリックして、ビルドを行なう。このとき、保存していないファイルがあると次の図のように警告を出すので、Save Allボタンをクリックすればいいのだが、Interface Builder側で保存がなされていない場合にも、きちんと警告を出す。Interface Builder側でも通常の文書と同じように保存をしておかないといけないのである。

◇保存していないファイルがあると、警告を出す
 

ビルドを行なった後は、Project Builderのウインドウの上部に4つ並んでいるボタンのうち、デバッグ実行を示すスプレー缶ボタンをクリックする。すると、プログラムが実行し、新たにアプリケーションが起動して、そしてウインドウが表示される。さっそく、ボタンをクリックすると、さきほどブレークポイントで指定した箇所で実行がストップする。図では、最後のprintlnを実行するために、さらに1ステップ進んでみた。DebugメニューからStep Over(Command+shift+O)などのステップ動作があるが、メニューやキー操作以外に、ウインドウの右に表示されるボタンを利用してもステップ動作は可能だ。

◇ブレークポイントでストップしたところからさらに1ステップ進んだところ
 

ここで、右側の中段に、変数の値を表示するペインがある。そこで、階層表示を行なうと、This、つまり、MyWindowControllerそのもののインスタンス変数が下位の項目になるのだ。ここで、Interface Builderで結合していないOutletに対応するTextField2とTextField3については、nullになっている。つまり線で結んでいないOutletはとりあえず何も機能していないと考えることができる。
上部のConsole表示には、printlnでオブジェクト値をそのまま表示させてみた結果が表示されている。変数値、あるいはConsole出力によると、MyWindowControllerクラスのTextField1というインスタンス変数は、実は型としてはNSTextFieldになっている(このクラスのフルパスは、変数値で参照できる)。プログラム上は、Object型ではあるが、これはオブジェクトのジョーカーみたいなもので、どんな型でも扱えるようにするための措置と思えばよいだろう。そして、実態はNSTextFieldである。これは、Cocoaライブラリ、正確にはAppKitの中で定義されたユーザインタフェースコンポーネントである。
いずれにしても、Interface Builderで、クラスのOutletとコントロールを結び付けると、そのクラスの中ではOutletに対応したインスタンス変数が、ウインドウ上のコントロールを参照する。つまり、クラスの中で、ウインドウの中にあるコントロールを処理できるのである。コントロールをクラスの中に呼び込んでいると思ってもいいだろう。Interface Builderでの設定がプログラムの動作につながっている。

ここで、Cocoaのライブラリに明るくない人は、思わずフリーズするだろう。NSTextFieldって何やねん?? そこで次回は、ドキュメントを参照して、NSTextFieldの使い方に迫ってみたい。

カテゴリ:


WWDC 2000のすべてのセッションを収録したDVD-ROMを入手した

2000年5月にサンノゼで開催されたWWDC(WorldWide Developers Conference)のセッション内容を全て収録したDVD-ROMが販売されている。購入可能な方々には直接メールが行っているので特にMDOnlineではニュースにしなかったが、入手できたので機密保持に触れない範囲で記事にしてみよう。また、CD-ROMは珍しくないけど、DVD-ROMとなるとまだまだ珍しいので、どんなスペックやオーサリングなのかということもやっぱり興味を持ってしまう。

まず、DVD-ROMが5枚組みというのはあらかじめ知っていたが、実際のパッケージは次の写真のようなものだ。一般的なDVDディスクのケース5つが、1つのボックスにまとめられている。特にドキュメントなどはなく、単にディスクが中にある。もちろん、DVDドライブの搭載されたマシンでないと参照できないのだが、対象利用者にはうるさく動作環境を述べる必要もないだろう。
 

ディスク1枚は約1.7GBほどになっている。そこに、WWDCの1つのセッションが1本のQuickTimeムービとなって入ったものが、5枚のDVD-ROMに分かれて納められている。だから、ムービー1つで200MBとかいったかなりのサイズになっている。ちなみに、サウンドもは行っているが講演時に会場に流された英語のみだ。日本語の同時通訳も別トラックで…という淡い期待はついえてしまった。ビデオの圧縮はSorensonでフレームレートは15FPSだ。320×240ドットのサイズで、講演者とプレゼン画面やデモ画面などが交互に写っているというものだ。プレゼンや実機デモはおそらくコンピュータの出力からビデオ取り込みしているためか、きれいに見える。ただ、さすがに画面の細部は苦しいが、会場で見ているのも同様だ。サウンドは、モノラル16ビット22.05kHzといったスペックで、IMAの4:1の圧縮となっている。
もちろん、QuickTime Playerで参照してもいいのだが、きちんとオーサリングされていて、Webブラウザのウインドウで参照できるようになっている。ブラウザで、セッションのタイトルを選択すると、そのムービーがブラウザのウインドウ上に呼び出される仕組みだ。だけども、ディスクの入れ替えは当然ながら自分でやらないといけないので、必ずしもワンタッチでセッションムービーが呼び出せるわけではない。また、筆者のマシンではQuickTime 5を入れているせいなのか、ブラウザのウインドウにムービーがうまく呼び込まれなかった。それから、最初、マウントしたDVD-ROMのアイコンをダブルクリックしても、ウインドウに何も現れなかった。不良品かと思ってあせったけど、マウントするのに少し時間がかかるみたいだ。CD-ROMならすぐに中身が出てきたけど、DVD-ROMはちょっと待たないといけないのかもしれない。
Mac OSで参照することになっているが、WindowsでもQuickTimeをインストールしておけば、ムービーはもちろん参照できたし、該当するファイルをちょっと探せばブラウザで見ることもできた。

2000年12月15日までの限定ではあるが、Mac OS X Public BetaとDeveloper ToolsのCD-ROMもバンドルされている。Developer ToolsはOctober 2000と印刷されたものだ。さらに、来年のWWDC 2001のスケジュール「5/21〜25」を示した短冊も入っているという具合だ。なお、販売はADC会員のみに対して行なわれ、オンライン会員は$250、その他は$150だが、WWDC参加者は$100だ。例年はセッションごとのビデオを販売していたので、ぱらぱらと買っていたらいい値段になったのだけど、その意味では全部買ってこの値段なのは良心的かもしれない。ただし、スティーブジョブズ氏の基調講演については収録されていない。願わくば、もっと早い時期に入手できるようになっていてほしいという気持ちも持ってしまう。

関連リンク:WWDC 2000 Conference Sessions DVD-ROM
カテゴリ:イベント


任意の画像でスクリーンセーバを作成するツールキット

Xochi Media社は、スクリーンセーバを作成するツールキット「iScreensaver Toolkit for Macintosh 1.1」をリリースした。自分の好きな画像やムービーなどをもとに、Mac OS 8.6以降で使えるスクリーンセーバを作成することができる。スクリーンセーバのインストーラも作成できる。スライドショー的な表示や、表示エフェクトなどさまざまな設定ができる。パスワード保護の機能もある。現在はMacintosh向けだけだが、Windowsで稼動できるスクリーンセーバモジュールを作成する機能も2001年第一四半期を目処に開発をしている。モジュールの配付方法に応じて4種類のライセンスがある。Personal Editionは、個人での利用に限定されており、$10となっている。非商用版のNon Commercial Editionは$40、商用版のProfessional Editionは$200、登録済みの配付モジュールを生成して配付できるEnterprise Editionは$400となっている。個人がインターネット経由でフリーでスクリーンセーバを作成するのはNon Commercial Editionでも可能であるが、詳細は各バージョンの定義を同社のサイトで確認してもらいたい。

関連リンク:Xochi Media Inc.
カテゴリ:開発ツール


PowerPC G4向けのシステムの機能拡張がアップデート

PowerPC G4搭載機でMac OS 9.0.4利用をしている場合にシステムに組み込まれているApple CPU Pluginのアップデートが公開されている。PowerPC G4の機能を利用するための機能拡張であり、実行時の性能をより高めるといった改良がされているということであるが、詳細は記載されていない。また、英語版であるため、日本語版での利用は、日本語版の公開を待つのがよいだろう。Mac OS Xが稼動している場合にはインストールする必要はない。

関連リンク:Apple CPU Plugin (Power Mac G4) 2.7
カテゴリ:Power Mac


Mac OS 9をインストールする時に出るエラーとその対処方法

Tech Info Libraryに、Mac OS 9〜9.0.4でのインストール時の問題について掲載された。インストール時に「Problems were encountered reading the source file ’Big System Morsels’. Installation cannot continue.」といったエラーが出るというもの(日本語システムでのメッセージは不明)。こうしたエラーは、CD-ROMの読み取りがうまくいかないことが原因として考えられる。CD-ROM盤をクリーニングしたり、接続やドライバなどのチェックをするなどの対処方法が記載されている。

関連リンク:Mac OS 9: "Big System Morsels" Error During Installation
カテゴリ:Knowledge Base(旧TIL), Mac OS 9


Mac OSでもプリエンプティブなスレッドを実現するライブラリ

RED SHED SOFTWAREは、System 7以降のMac OSでプリエンプティブなスレッドを実現するライブラリ「Red Shed Threads 6.2」をリリースしている。68030からPowerPC G4まで利用でき、AltiVecへの最適化もなされている。C言語のプログラミングインタフェースを持っている。Mac OSのThread Managerよりも400%高速であると同社は表明している。Mac OS Xにおいても、Carbon上でマルチタスクを実現する方法として利用できる。より効率的なスレッド処理を望む場合に検討に値するかも知れない。フリーウエア向けには$32、シェアウエアでは製品ごとに$64、インハウス利用では製品ごとに$256、商品での利用は製品ごとに$512、無制限利用については$1024と、プログラマにとっては切れのいい数値が価格となっている。

関連リンク:Red Shed Threads
カテゴリ:ライブラリ