Macintosh Developer Online (MDOnline)


2001年4月16日発行号 - Mac OS 10.0.1が公開



先週末からDarwin、Mac OS X 10.0.1と大きなニュースがいっぱい飛び込んできました。実は、実家から両親が来ていたのと、その後にシステムの入れ替えをやったりしたので、気がついたらMacWIREなどで記事がでてしまっていました。ちょっと今回のイベントは出遅れてしまったというところです。
Darwin 1.3.1のIntel版の対応ハードを見ていて、Interl 8255xというEthernetカードと書いてあったのですが、こちらの手元で実験用に使っているミニタワーにちょうどこのカードが入っていたので勇んでインストールをしました。だけど、どうやらIDEがPIIX3だったようで、インストールの途中でストップします。というか、ルートからの反応を待つというメッセージが延々と出るだけです。PIIX4対応ということでしたが、インストールの様子を見ていると、ハードウエア側がPIIX3であることが表示されるので、やっぱりだめなんでしょう。残念です。そのマシンは、Pentium 150MHzという今となってはなかり古いマシンですが、Ethernetカードだけは捨てられないかもしれません(笑)。
(新居雅行 msyk@mdonline.jp


Mac OS 10.0.1へのアップデータが公開、sshクライアント機能が利用できるように

Mac OS Xの最初のアップデートが行われた。Mac OS 10.0.1へのアップデータが、ソフトウエアアップデートを通じての配付が行われた。アップデートにより、アプリケーションの安定性が増し、Classic環境の互換性があがり、USBのサポートが強化される。また、日本のユーザ向けにはEpsonのプリンタドライバが追加されることになる。インストール方法については、MacWIREに記事が掲載されているので、そちらを御覧いただくことにしたい。
ssh(Secure SHell)のコマンドが利用できるようになった。terminalから、sshに続いてサーバ名をキータイプするだけで、sshによるリモートログインができる。あるいはsloginによるログインや、ssh-keygenによる公開鍵や秘密鍵の作成も可能だ。この機能はPublic Betaでは利用できたものの、Mac OS X 10.0にはなかっただけに、望む声も多かったものだ。
また、インストール後に最適化処理が行われるというメッセージも表示され、なんらかの最適化処理が行われていることがわかる。また、macjavaメーリングリストに投稿された内容では、Javaのアプリケーションの起動処理に改善が見られることが報告されている。
いずれにしても、Mac OS X 10.0の正式発売から3週間目に、10.0.1のアップデータがリリースされた。細かいバージョンアップだとはいえ、問題点を少しでも早く修正するように動いている点は高く評価できるだろう。

◇初めてのMac OS Xソフトウェアアップデート「10.0.1」を試す
 http://www.zdnet.co.jp/macwire/0104/14/r_softupdate.html

◇macjavaメーリングリストでの書き込み
 http://www.freeml.com/ml_view.php?ml=macjava&pg=200

関連リンク:Mac OS X
カテゴリ:Mac OS X


小池邦人のプログラミング日記》2001/4/14<ウィンドウのLive Resizing その1>

今回は、自作Carbonアプリケーションへに「ウィンドウのLive Resizing」を実装してみることにします。Live Resizingとは何でしょうか? Mac OS 9のアプリケーションでは、ウィンドウのGrow Boxをドラッグすると、ウィンドウの外枠だけが拡大縮小されます。それと比較して、Mac OS Xでは、ウィンドウ全体をリアアルタイムで書き換えながら拡大縮小することができます。Mac OS XでのFinderやInternet Explorerでウィンドウを拡大や縮小してみると、その機能の実体がよく分かります。見た目は非常に美しい機能なのですが、現状ではその書き換えスピードがあまりにも遅いために(特にFinderのリスト表示の時など)、一部のユーザから集中攻撃を浴びている不幸な新参者です(笑)。

この機能を、以前Carbon Eventを解説した時に用いた「ViewJPEG」という自作アプリケーションに実装してみます。今回、Metrowerks CodeWarriorのプロジェクトにリンクするCabonLibは、最近ADCメンバーサイトに登録されたCarbonLib 1.3b5 を利用します。また、このSDKのUniversal Interfacesのバージョンは3.4f1となっています。CarbonLib 1.3も、そろそろβ版から昇格して欲しいのですが、GM版への道はまだ遠いのでしょうか? ちなみに、「CarbonLib 1.3b45 SDK」に添付されているRelease Notesを読んでみると、今回のリリースバージョンではAPI自体の変更はなく、テキスト入力やプリントアウト関連のバグフィックスが大部分を占めているようです。また、特定アプリとの相性問題の解決が目立ちます(私の報告したバグはいつフィックスされるのだろうか?)それから、「Nibベースのアプリケーション開発」を解説した時に参照していた「Moon Travel Tutorila」ドキュメントとCarbon Eventsに関するドキュメント(両方ともPDF)が、最近新しく改訂されました。詳細を確認したい方は、以下のアップルのドキュメントサイトを参照してみてください。

◇Carbon Documentation: What’s New
 http://developer.apple.com/techpubs/macosx/Carbon/SiteInfo/whatsnew.html

「Moon Travel Tutorila」は、Mac OS X製品版のDeveloper Tools に含まれていたProject BuilderやInterface Builderに対応するため改訂されたようです。Carbon Eventsのドキュメントは、内容が5ページから30ページへとわずかに増量されました。しかし、まだまだ技術情報が貧弱であることには変わり有りません。

ウィンドウのLive Resizing機能を実装するためには、まずウィンドウ自身がこの機能を使えるように何らかの設定をする必要があるはずです。通常のままだと、Mac OS X上でもMac OS 9上とまったく同じように、ウィンドウ枠だけのResizingになってしまいます。さてどうすれば良いのでしょうか?このようなAPIに関する疑問点に遭遇したら、まずはUniversal Interfacesの内容を調べれば、たいがい何らかのヒントを見つけることができます。さっそく、ウィンドウに関するUniversal Header FileのMacWindows.hを調べてみると、WindowAttributesの設定値に以下のようなフラグを見つけることができます。


kWindowLiveResizeAttribute = (1L < < 28),/* this window supports live resizing (X only)*/

CreateNewWindow()に引数として渡すWindowAttributesに、このフラグを追加すれば、Mac OS X上でのLive Resizing機能がONになるようです。さっそくViewJPEGで画像ファイルのオープンを担当しているopenImageWindow()を、以下のように改良し試してみました。

 

ここで注意する点は、kWindowLiveResizeAttributeが利用できるのは、Mac OS X環境だけということです、Mac OS 9環境でこのアトリビュートを追加すると、CreateNewWindow()でエラーが発生してしまいます。よって、ソースコードでは、chkSysOSX()というルーチン(Gestalt()で調査しておいた環境値を返す)により、自分自身がMac OS X環境で起動しているかどうかをチェックし、その場合にのみアトリビュートにkWindowLiveResizeAttributeフラグを追加しています。

このアトリビュートの設定によりウィンドウ自身はLive Resizingするようになるのですが、これだけではウィンドウの中身(画像や上下左右のスクロールバー)はリアルタイムで再描画されません。これを実現するのには、画像ウィンドウに対して、Event Classが「kEventClassWindow」で、Event Kindが「kEventWindowBoundsChanging」のCarbon Event Handlerをインストールする必要があります。これにより、ユーザのマウスドラッグでウィンドウ枠のサイズや位置が変更されているあいだ、一定間隔でHandlerルーチンがCarbon Eventを受けることが可能になります。その時にウィンドウの中身を再描画してやれば、すべてのLive Resizingが完成するわけです。以下はViewJPEGのCarbon Event Handlerルーチンの一部で、SizeWindow()からupdateOffScreen()までの箇所がウィンドウの中身の再描画を担当しています。

 

ソースコードを見ると、chkSysOSX()で再描画をするかどうかをチェックしていることが分かります。つまり、この処理はMac OS 9環境では実行する必要はありません。

実は、Mac OS Xパブリックβ版ではこのスペックのCarbon Eventが未実装だったようで、インストールしたHandlerルーチンへのコールバックが起こりませんでした。(不思議とInternet Explorerでは可能だった?)しかし、嬉しいことに今回は問題なく動くようです。ところで、ウィンドウの中身を再描画している箇所を見ると、ウィンドウ自身のサイズ変更はWindow Managerが行なっているわけですから、ソースコード中のSizeWindow()は必要無いように思えます。しかし、これを外して試してみると、マウスドラッグを素早く行なった時、最後にマウスカーソルが静止した位置での中身の再描画が行われません。

 

どうも、Resizingが実行された直後のウィンドウ矩形枠(PortBounds)が設定されていない状況で中身の再描画ルーチンが呼ばれているようです。そこで、SizeWindow()により強制的にウィンドウ矩形枠を設定してから描画を試すと、今度は上手く行くようになりました。今回の解説に用いたViewJPEG v1.22のソースコードは以下のサイトに登録されています。詳細を確認したい方は、ぜひダウンロードしてみてください。

◇Ottimo, Inc.: Digital Library
 http://www.ottimo.co.jp/library/index.html

とりあえず、この処理の追加によりViewJPEGでも画像ウィンドウのLive Resizingが可能になりました。ウィンドウの拡大縮小時の追随スピードも、そこそこ実用範囲内だと思います。しかし、SizeWindow()を追加しなくてはいけなかった件も含めて、いくつか納得がいかない箇所がありました。そこで、新しく改訂されたCarbon Eventsに関するドキュメントを注意深く読んでみると、疑問点を解決するいくつかのヒントが記載されていることが分かりました。次回はそのヒントを元に、ウィンドウのLive Resizingを実現しているソースコードを、より良い形へと書き直しててみることにします。
[小池邦人/オッティモ]

関連リンク:オッティモ
カテゴリ:ユーザインタフェース, Carbon/CF, 小池邦人のプログラミング日記


MOSA会員であればMDOnlineを1年間購読ができる

Macintosh分野の開発者団体であるMOSA(Macintosh OS Software Association)では、2001年度より会員サービスの一貫として、MDOnline(Macintosh Developer Online)の購読をできるようにする。MOSAの会員であれば、MDOnlineの1年分の購読権を取得でき、任意の時点からの購読を開始できる。MOSAの会費は1年分が10,000円、学生会員が5,000円となっている。MDOnlineはほぼ日刊のペースでMac OSの開発やシステム関連の情報をメールで配信している。なお、購読方法は、MOSA会員は事務局より近々伝達される予定となっている。

関連リンク:MOSA
カテゴリ:サービス


Mac OS Xの製品版に対応したDarwinが公開、Intel版もリリース

Mac OS XのコアOS部分であるDarwin 1.3.1がリリースされた。Mac OS X 10.0では、Darwin 1.3が使われており、バージョンが少し違うが、いずれにしても製品版のMac OS Xに対応したDarwinが公開されたわけだ。DarwinはAppleがオープンソースのプロジェクトとして運用している。PowerPC対応のリリースは、稼動機種はMac OS X 10.0と同じとなっており、各種SCSIカードやAirMacのドライバを含めたサードパーティのドライバも別途配付されている。また、IntelのCPUであるx86版も同時にリリースされた。稼動環境としては、PIIX4のIDEコントローラ、Intel 8255xのEthernetカード、VESA 2.0準拠のグラフィックスカードとなっており、440BXタイプのマザーボードでのテストを行ったとしている。なお、Intelプラットフォームでの稼動は以前のバージョンで表明されていたが、バイナリがAppleから配付されるのは初めてとなる。

関連リンク:Open Source Projects at Apple
カテゴリ:オープンソース


WWDC2001のセッション内容が明らかに、導入から応用まで幅広い内容

2001年5月21日から25日に、San Jose Convention Centerで開催されるMacintoshの開発者向けコンファレンス「Worldwide Developers Conference 2001」のセッションスケジュールが公開された。タイトルと概要だけの判断では、従来とは大きく異なる枠組みが登場するということは少ないようで、今までに紹介されているテクノロジーに対応したセッションが組まれている点がまず言えるだろう。もちろん、すでに知られているテクノロジーであっても、セッションで新しいことや、将来像などが語られる可能性もあり、またそういうことを期待したい。セッションは、ほぼすべてMac OS X向けになっていると言っても過言ではないだろう。昨年までは、Mac OS 9までの環境に向けてのセッションもあったが、今年のスケジュールではほぼ影を潜めたと言っていいだろう。Cocoa、Carbon、UNIX、ネットワーク、Javaなど、オーバービューすなわち基本的なことを概観するといったセッションから、詳細なことを示すセッションまで揃っている。自分の得意分野を極めるのもいいが、知らないジャンルを1から勉強するということも可能だ。
たくさんのセッションはそれぞれに興味深いが、筆者の独断で、興味深いものを少しピックアップしてみた。まずは「100 - Mac OS X Update」は、今までのWWDCで公開されたことからの変更点などが紹介されるだろうから、これは必須とも言えそうだ。また、「114 - The New Role of Type, Creator & File Extensions」は興味がわく。ファイルタイプとクリエイタ、そしてファイルの拡張子の関係については、デベロッパも頭を悩ませているところだろうが、それを解明できるかもしれない。さらに、やはり新しいバージョンである「605 - Moving to WebObjects 5」については、WebObjects関係者は注目するところだろう。Javaに片寄って申し訳ないが、「502 - Wrapping Mac OS APIs into Java Beans」は、Mac OS Xのネイティブ機能をJavaBeansとして構成し、JBuilderなどのビジュアル開発ツールでコンポーネントとして利用しようというものである。また、JBuilderだけのセッションも開催される。

関連リンク:Worldwide Developers Conference 2001
カテゴリ:イベント


Browsing Mac OS X》やっぱりハードディスクは余裕を持って

Mac OS XをPowerBookで使って遅いと感じると記事に作成したが、それを御覧になった読者の横石さんよりメールをいただいた。システムのパーティションが小さいためにその影響が大きいのではないかとの御指摘だった。また、その後にまたディスクフルの状態になったこともあって、いっそのこと広いパーティションに引っ越そうと考えた。ならばということで、ハードディスクの整理やらなんやらを、この前の週末に行ってみた。また、Mac OS X 10.0.1もリリースされたが、10.0でどうかということを試すかどうか迷ったけど、やっぱりまずはアップデートした。こうして、Mac OS Xの稼動環境を大きく変えた結果、やはり少しレスポンスが良くなったと思う。ただ、Finderのレスポンスはそれほどかわらないが、アプリケーションを動かす時のレスポンスが良くなったように感じる。起動も早くなったように思うが、それは10.0.1だからかもしれない。それでも、ディスクアクセスばかり延々としていたような状況にはあまりならないことからも、改善はされたと言えるだろう。また、Sherlockでの索引作成も、これも体感だがやや早くなったように思える。やはり容量いっぱいでMac OS Xを使うのは、効率が悪くなる方向に行っていたと言えそうだ。

使用しているマシンは、FireWireでG3のPowerBookだ。192MBのメモリ20GBのハードディスクを搭載している。以前にも紹介したように、2GBのパーティションでMac OS Xを運用していたが、仮想記憶で使用するファイルが4〜8個くらいになるような使い方をしている。1つで80MB弱だから、8個目くらいになると、ほとんどハードディスク容量の残りはないという状態に近かった。ちなみに、Classicを常に使っているのでメモリを余計に使いがちだったのかもしれない。だが、一晩、Sherlockのインデックス作成だけをさせてみたけど、仮想記憶のファイルは当初1つだけだったのが、6つにまで増えていた。いろいろな場面でメモリは数多く使いそうなので、今後は注意をしないといけないと考えている。
新しくパーティションをすっかり切りなおすことにしたのだが、この機会にハードディスクにあるあまり使わないファイルをCD-Rにバックアップを取っておこうと思った。余談だが、まあ、それに時間がかかってしまったのである(苦笑)。サーバ上にあるものもついでということでバックアップを始めたら、全部で5枚にもなってしまった。
さて、PowerBookのシステムを引っ越しだが、こういうこともあろうかと、FireWireのハードディスクを買っておいた。DataFab製のケースで、20GBのHDDを買って余った内蔵の6GBを入れてある。Mac OS Xを使うようになってから作ったロングファイルネームのファイルは、サーバに使っているnetatalkではコピーなどができないため、こうしたファイルは、Mac OS Xマシンに直接つないだハードディスクを使ってバックアップするのがいちばん確実だろう。また、Classic環境は、今あるMac OS 9.1のシステムフォルダを使うつもりなので、そのフォルダのコピーも必要である。
データのフォルダだけをバックアップしたら、実は必要なファイルはシステムにあって水の泡になるということも以前に何度も経験した。そこは入念に作業をしないといけないところだが、こうした事情は人によって違うだろう。筆者の行った作業は次の通りだ。まず、Internet Explorerのお気に入りだが、ホームフォルダのLibrary/Preferences/ExplorerにあるFavorites.htmlをコピーしておけばよい。新しいシステムでは、このファイルをインポートして、整理するのが1つの方法となる。古いファイルで置き換えてもよいだろう。そして、Entourageのデータファイルだが、このファイルは「書類」フォルダにある「Microsoftユーザデータ」フォルダをバックアップしておけばOKだ。1つだけ、どうしても分からないのが、Mac OS XのStickiesのデータのありかだった。ファイルの修正日で検索しても、どうしても該当するファイルが見つからなかった。ただ、まだMac OSから移行して時間も経過していないので、Mac OSのシステムフォルダにある「スティッキーズファイル」から、新たに読み込んでメモを作ることにした。

まずは、Mac OS 9のCD-ROMで起動して、パーティションを切りなおす。使用しているマシンは最初のパーティションを8GB以下にはしなくてもいいので、その点は自由度がある。Mac OS 9まででは、いろいろなデータをパーティションにわけて整理していたが、その理由は1つのパーティションでファイルが多くなった時にどうもトラブルが発生するということに何度も見舞われたからだ。しかしながら、Mac OS Xでは「ホームフォルダ以下」というところで自由に使うという形態が中心的な使い方になるだろう。また、ファイルシステムについてもより堅牢になっていることを信頼して、なるべく大きなパーティションにしようと考えた。その方が仮想記憶を使うことを考えても有利だろう。ちなみに、容量いっぱいになってくると、ファイルの断片化が進み、ファイルアクセスの効率が落ちてくると考えられる。
一方、Classic環境のこともある。Mac OS 9.1で起動して使う機会が多いのなら、Mac OS 9.1のパーティションと、Mac OS Xのパーティションにわけることも1つの方法だろう。整理がつくことと、最悪の状況でもMac OS 9.1は生き残るかもしれないという保険も含みでだ。だが、ほとんどMac OS 9.1は使っていない状況なので、結果的に一気に20GBを1パーティションで使うことにした(もっとも、19GBという表示であったが…)。まずはMac OS 9.1をインストールし、Mac OS X 10.0をインストールし、そして、Classic環境を立ち上げていない状態で、バックアップした以前のMac OS 9.1のシステムフォルダの中身をコピーした。Developer Toolsなどをインストール、とりあえず元の状態に戻すと、だいたい6GB程度だった。まだ、CodeWarriorはインストールしていないが、バックアップを積極的に行った甲斐もあって、ハードディスクはかなりがら空きの状態になったのである。これで、仮想記憶のファイルがパーティションの容量をいっぱいにするという心配はなくなったし、レスポンスも良くなったので収穫もあったというわけだ。

カテゴリ:Browsing Mac OS X


NetBeans 3.2をMac OS Xで稼動させる方法を公開

Javaで作られた開発ツールNetBeansをMac OS Xで利用する方法が、開発元より公開されている。NetBeansはオープンソースで開発が進められているが、Sun Microsystemsより公開されているForte for Javaのもとになっているプロジェクトである。したがって、Forte for Javaよりもバージョンが進んだものが公開されている。現在、NetBeans 3.2のベータ版が公開されているが、これは、Forte for Javaの次期バージョン3.0につながるものになる予定となっている。
Forte for Java 2.0が2001年2月にリリースされたが、そのままではMac OS X Public Betaでは稼動しなかった。実際、NetBeansのサイトにもその点は記載されており、NetBeans 3.2で、Mac OS X 10.0以降に対応するとしている。以下のページに、現在のベータ版のNetBeans 3.2を稼動する方法が説明されているが、ベータ版のダウンロードに加えて、他のプラットフォームのJava2 SDKにあるdt.jarというライブラリをMac OS Xにインストールするなど、少し手作業が必要になる。また、Terminalレベルでのコマンドの作業がいろいろと発生するので、コマンド入力に慣れていないと作業はスムーズにはいかないかもしれない。なお、コマンドの入力によっては、NetBeans自体をAquaユーザインタフェースで動作させることもできる。
なお、実際に稼動させてみたところ、キーボードメニューで「ことえり」を選択している状態では、起動が完全に行われなかった。この問題は、NetBeansの問題ではなく、Mac OS XのJava環境でよく発現する問題である。キーボードメニューで「U.S.」を選択しておけば、起動して利用することができた。

関連リンク:HOWTO : Using NetBeans on MacOS X
カテゴリ:開発ツール, サードパーティの開発資料, Java


Mac OS X 10.0のJavaアプリケーションのパッケージにはPkgInfoファイルが作成されない

Technical Q&Aに、Mac OS X 10.0でMRJAppBuilderで作られたアプリケーションが、AppleのInstallerで展開するとフォルダになってしまう点についての説明が掲載されている。Mac OS X 10.0のDeveloer Toolsに含まれているMRJAppBuilderは必要なファイルが作成されないという問題がある。PkgInfoという名前のファイルが作成されないようになってしまっている。このファイルをテキストエディタなどで作成して、パッケージのContentsフォルダに作成して入れておけば問題はない。このファイルの中身は8バイトの文字だけで、最初の4文字はAPPL、次の4文字はクリエイタータイプを指定する。

関連リンク:QA1023:The installer turns my application into a folder.
カテゴリ:Technical Q&A, Java


Core Graphicsの座標系についての解説、原点は描画領域の左下であることなど

Technical Q&Aに、Core Graphicsの座標系についての解説と、SyncCGContextOriginWithPortについての使い方を紹介した文書が掲載された。QuickDrawの座標系では、描画領域の左上を原点として、下方向が正の数となるが、CoreGraphicsでは左下を原点として上方向が正になる。そこで、SyncCGContextOriginWithPortというAPIコールを使って、QuickDrawのポートとのシンクロを行うことや、あるいは座標変換を行うことなどを交えて、両者の座標系の違いをどのようにプログラミングで処理をするかが記載されている。以下の文書にはサンプルコードが掲載されているが、同じプログラムである。

◇QA1009:Why are my Core Graphics calls drawing upside down?
 http://devworld.apple.com/qa/qa2001/qa1009.html

◇QA1010:SyncCGContextOriginWithPort
 http://devworld.apple.com/qa/qa2001/qa1010.html

カテゴリ:Technical Q&A, グラフィックス


CoreGraphicのDirectDisplayをQuickDrawの描画コマンドで利用する方法

Technica Q&Aに、Mac OS XのCore Graphics機能の使い方についての解答が掲載されている。CoreGraphicsの機能はCarbonでも利用できるが、そのなかのDirectDisplayという機能の使い方が掲載されていて、QuickDrawでの描画を混在させるような場合に必要なことが解説されている。CreateNewPortForCGDisplayIDをもちいて新しいグラフポートを生成し、そのポートを使うようにして、QuickDrawの描画命令を使えばよい。たとえば、CopyBitsのような機能が使える。メモリの解放は忘れてはいけない。

関連リンク:QA1011:How do I use QuickDraw with CGDirectDisplay?
カテゴリ:Technical Q&A, グラフィックス