Macintosh Developer Online (MDOnline)


2002年1月17日発行号 - Appleの決算発表



アップルの業績は利益は出していますが、営業利益はほぼ0です。大きな赤字を垂れ流しているわけではないのですが、かなりぎりぎりというところでしょうか。資産としてはキャッシュが減っているけど投資が増えているというところで、キャッシュは年間売上よりも遥かにたくさんあります。現状の市場規模に合わせた業態に常に調整しているというところでしょうか。まあ、だけど、「アップルは経費節減をこれまで以上に行っている」という噂は2002年度に入ってからあちらこちらで聞かれていて、いろいろ直接・間接的な影響を聞いているだけに、そういう話がダイレクトに数字に出ているというのがそのまま見えるというところです。いずれにしても、上昇する要素としてiMacと今後の新製品を持っているだけに、しばらくは悪い噂は出ないでしょうね。
MDOnlineのページで、ボリューム販売の話を出していましたが、まったく引き合いがないので、看板を下ろすことになります。ボリューム販売については「お問い合わせ下さい」にしておくことにします。それから、一昨日の記事で訂正がありますので、Java Watch on the Xの訂正を御覧下さい。ちゃんと調べたつもりなんですが…。で、もしやWebObjects 5.1をインストールする有無があるかなと思ってWOを削除してチェックしましたけど、やっぱり一昨日の記述ではミスがありました。ちゃんとInfo.plistで複数のクラスパスを指定できます。申し訳ありませんでした。
(新居雅行 msyk@mdonline.jp


【MacWIRE配信予定】Appleが2002年度第一四半期の決算を報告、経費を削り利益は黒字を達成

Appleは2002年度第一四半期(2001年9〜12月)の決算発表を行い、3800万ドルの利益を出したことを発表した。売上については13億7500万ドルとなり、2001年度の第四四半期の14億5000万ドルには届いていないが、販売経費を6000万ドル削減(約6%減)しており、こうした経費削減効果が出ての収益ということになっている模様だ。ただし、売上総利益は4億2200万ドルの黒字となっているが、管理費や開発費を差し引いた営業利益に相当する金額は400万ドルの赤字となっている。販売内容を見ると、PowerBook G4の売り上げが伸びており、モデルチェンジの影響が出ている。iMacについては販売量が減少してきており、そうしたタイミングを見計らった新製品投入が2002年1月に行われた。Power Mac G4やiBookについても、2001年の第四四半期からは減少している。また、地域別の販売では、ヨーロッパで増加しているものの、米国での販売実績が低下しており、全体では減少ということになっている。iPodは125,000台の出荷があったとしているが、本体以外のハードウエアの販売が2001年の第四四半期より6000万ドル増加しており、売り上げ増には貢献していると十分に言えるだろう。Power Mac G4の売り上げは、QuickSilverモデルの発売直後には少しアップしているが、そのレベルは維持されていない。また、iBookの売り上げ減が目立っており、そうした線からの製品系列見直しが今後予想される。

関連リンク:Apple Reports First Quarter Profit of $38 Million
カテゴリ:業界動向


Java Watch on the X》4 - アプリケーションをパッケージとしてビルドする(訂正)クラスパス

MDOnlineの2002年1月15日号で配信した『Java Watch on the X》4 - アプリケーションをパッケージとしてビルドする(3)実行時に必要な情報』という記事において、アプリケーション設定(Info.plist)での、Java→ClassPathのキーを配列指定できないということを報告したが、その後に再度試してみたところ、問題なく設定ができた。内容に不備があったことをお詫びし、訂正したい。念のため、改めて説明しよう。

クラスパスは、コンパイルしたプログラムが入っているjarファイルを指定するのが一般的であるが、Mac OS Xのパッケージでは、パッケージの中のContents/Resources/Javaフォルダにあるターゲット名と同じ名前のjarファイルを指定するのが既定値となっている。MRJApp.propertiesファイルでは、「com.apple.mrj.application.classpath=パス」として記述を行う。また、アプリケーション設定(Info.plistに反映される設定)では、Javaのキーの下位項目にあるClassPathで指定できる。
複数のパスをクラスパスに指定する場合には、MRJApp.propertiesの場合には、パスを半角のコロンで区切って指定する。アプリケーション設定で指定を行う場合には、値を文字列型にして、パスを転んで区切って指定するのが1つの方法である。別の方法としては、Javaの下のClassPathを「配列」型として、各パスを配列の1つ1つの要素とする方法である。

◇アプリケーション設定の、Java→ClassPathを配列にして複数のパスを指定
 

アプリケーション設定に複数のクラスパスを指定することができないと記事で記載したが、再度試したところでは問題なく機能したという次第である。

カテゴリ:ProjectBuilder/Interface Builder, Java, Java Watch on the X


Java Watch on the X》4 - アプリケーションをパッケージとしてビルドする(4)ライブラリについて

アプリケーションのパッケージをProject Builderで作成する場合のライブラリ利用についていくつか説明したが、さらに補足をしておこう。パッケージの作成によって、1つのjarファイルにクラスが全部パックされるのであるが、既存のjarファイルで供給されるライブラリを利用する場合、1つは、そのライブラリをパッケージに作るjarファイルにMergeしてしまう方法を説明した。もちろん、確実な方法だが、個別のアプリケーションごとにライブラリを持つことになり、ファイルサイズの増大やアップデートの問題も発生する。一方、MRJApp.propertiesファイルに記述する方法で、任意の場所にあるライブラリをパスで指定できた。ただし、この方法だと基本的には絶対パスで指定することになる。
ライブラリの利用方法としては、Javaの実行環境が持つ本来の機能を利用することができる。そもそも、クラスをどこから検索するのかということが設定されているわけであって、それにしたがってクラスを探してくる。詳細は以下の文書を参照すると良いだろう。

◇Getting Started with JavaTM 2: Tools and Configuration
 http://developer.java.sun.com/developer/technicalArticles/Programming/GettingStarted/

◇The Extension Mechanism
 http://java.sun.com/j2se/1.3/docs/guide/extensions/spec.html

ポイントを説明すると、Javaでのクラス検索を行う手続きとしては、まずはシステムプロパティのsun.boot.class.pathに設定されたパスをチェックする。ただし、sun.boot.class.pathは一般には、Javaの標準ライブラリのクラスがある場所であるため、基本的にはユーザによって変更を加えるための場所ではないと言えるだろう。続いて、システムプロパティのjava.ext.dirsにあるクラスを検索する。さらに、システムプロパティのjava.class.pathで指定されたパスを検索する。いずれも、jarファイルを指定するかディレクトリを指定するのが基本である。ディレクトリをしていした場合には、そのディレクトリにあるすべての.classおよび.jarファイルが検索対象となる。java.class.pathについては、javaコマンドの-classpathオプションで指定するのであるが、Mac OS Xのパッケージだと、MRJApp.propertiesファイルや、あるいはInfo.plistファイル(ターゲットの「アプリケーション設定」)で設定するということができるわけである。これらのシステムプロパティは、Mac OS X 10.1.2では、以下のような設定となっている。複数のパスが設定されているが、それぞれ、1行ごとに記載した。

◇sun.boot.class.path
/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Classes/classes.jar
/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Classes/ui.jar
/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Classes/i18n.jar
/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Classes/sunrsasign.jar

◇java.ext.dirs
/Users/msyk/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Home/lib/ext

◇java.class.path
(Info.plistないしはMRJApp.propertiesでの指定に従う)

したがって、ライブラリに相当するファイルは、java.ext.dirsにあるディレクトリにコピーして利用すれば、クラスパスに指定しなくても参照されて利用できるということになる。WebObjects 5.1やあるいはOpenBaseあたりは追加のjarファイルは「/Library/Java/Extensions」にコピーするようにとなっている。このディレクトリは、adminグループ、すなわち管理権限のあるグループに所属するアカウントであれば、読み書きができる。だから、インストール時に作ったアカウントで使う限りは、基本的にはユーザサイドでファイルをコピーしてもらえる場所であると言える範囲だろう。なお、java.ext.dirsには存在しないディレクトリの指定もあるが、場合によってはインストーラでそのディレクトリを作って(たとえば、ユーザのLibraryフォルダ)、ライブラリをコピーしてもいいかもしれない。「/Network…」があるのは、ネットワークを通じてライブラリファイル自体を共有することを想定しているのだろう。

なお、システムプロパティにあるjava.library.pathで指定されたパスは、通常はネイティブライブラリをおいておき、ClassLoaderのメソッドで名前を指定して、ライブラリをロードするという場所として用意されている。ここは、jarファイルをおく場所ではない。

結果的に、ライブラリは、クラスパスに含めるか、java.ext.dirsにおくのかということになる。ただし、それらのライブラリの動作は全く同一ではない。java.ext.dirsにおいたライブラリにあるクラスについては、publicなメソッドしか呼び出せない。privateなものはもともと別のクラスからは呼び出せないのであるが、ライブラリの指定場所の違いは、publicもprivateもつけていないメソッドで出てくるのである。
クラスパスに含めたライブラリにある、publicもprivateもつけてないメソッドは、呼び出すことができる。だが、java.ext.dirsにあるライブラリにある、publicもprivateもつけてないメソッドを呼び出すと、実行時に「java.lang.IllegalAccessError」という例外が発生する。

(この項、続く)

カテゴリ:ProjectBuilder/Interface Builder, Java, Java Watch on the X


Java Watch on the X》4 - アプリケーションをパッケージとしてビルドする(5)その他の実行時の情報

引き続いて、残りの実行に関するプロパティを紹介しよう。メインクラスとクラスパスは必須のプロパティであるが、ここで紹介するのはオプションのプロパティである。
まず、ワーキングディレクトリの指定をプロパティでできる。ワーキングディレクトリとは、アプリケーションにとっては、カレントディレクトリだと考えて良い。通常、ファイルを指定するのはパスが必要であるが、たとえば、ワーキングディレクトリにあるファイルやフォルダは、ファイル名だけで指定できる。Fileクラスを生成するときに「new File("test.txt")」とすれば、ワーキングディレクトリにあるtest.txtファイルに対する参照クラスが作成される。従って、ワーキングディレクトリからの相対パスでファイルを指定するということも可能である。
このワーキングディレクトリは、システムプロパティのuser.dirで確認できる。Mac OS Xのパッケージの場合、特に何も指定をしないと、ワーキングディレクトリは、パッケージのルートフォルダである。つまり、.appという拡張子のついたフォルダがワーキングディレクトリとなる。コンパイルして生成した.jarファイルのあるディレクトリではない。
ワーキングディレクトリを実行時に指定するには、MRJApp.propertiesファイルに指定する場合には、ファイルに、

com.apple.mrj.application.workingdirectory=パス

という記述を加える。イコールより後に、ワーキングディレクトリのパスを指定する。一方、ターゲットの設定の「アプリケーション設定」、すなわちInfo.plistファイルでの設定では、Javaのキーの下位にWorkingDirectoryという名前のキーを作り、その値として文字列でパスを指定する。

アプリケーションのmainメソッドに引数を渡すこともできる。メインメソッドは「public static void main(String args[])…」と定義されるが、ここでのargs引数に与える値を、Mac OS Xのアプリケーションパッケージでも与えることができる。UNIX/Windowsでコマンドライン形式で使われているJavaのアプリケーションだと、こうした指定が必要になるかもしれない。また、実行モードやテストデータを引き渡すなどのデバッグをしやすくするための工夫としても引数は利用できるだろう。次のような指定方法がある。

◇MRJApp.propertiesファイル
com.apple.mrj.application.parameters=パラメータ
◇アプリケーション設定(Info.plist)
キー:Java→Arguments/値:パラメータの文字列

パラメータは文字で指定するが、空白で区切って指定する。たとえば、「a b c」と指定をした場合には、mainメソッドではargs[0]は"a"、args[1]は"b"、args[2]は"c"となると言う具合だ。なお、パラメータ内の文字列はダブルクォーテーションで囲って1つの項目にするとか、あるいはエスケープなどの手段は利用できず、単にスペースを手がかりに区切るだけである。データとしてスペースを含む文字列をパラメータとして設定したい場合には%20などとURLエンコードして、受け取ったプログラムの側でデコードの処理を組み込むことになるだろう。

さらに、実行時のJava VMに引き渡すオプションの設定もできる。オプションの文字列はスペースで区切って複数を指定することもできりう。

◇MRJApp.propertiesファイル
com.apple.mrj.application.vm.options=オプション
◇アプリケーション設定(Info.plist)
キー:Java→VMOptions/値:オプションの文字列

たとえば、起動時に割り当てるヒープサイズは-Xms2mによってデフォルトの1MBから2MBに増加させることができます。さらに、ヒープの上限は-Xmx50mによって、デフォルトの16MBから、50MBに増加させることができます。javaコマンドの解説などで、オプションとして設定できるものを調べて利用すると良いでしょう。
(この項、続く)

カテゴリ:ProjectBuilder/Interface Builder, Java, Java Watch on the X


KBase》Mac OS Xをログアウト後にはiPodもイジェクトされる

iPodは通常はFireWireケーブルを抜く前に、iTunesでイジェクトするか、Finderマウント解除をしなければならない。Mac OS Xでログアウトしたり、マルチユーザのMac OS 9でログアウトをすると、そのときにiPodのイジェクト処理がさていない場合には自動的にイジェクト処理がされるようになっている。その段階では、安全にiPodとコンピュータの接続を取り除くことができる。

関連リンク:iPod: Can Be Disconnected After Logging Out
カテゴリ:Knowledge Base(旧TIL), メディアプレイヤ


KBase》Mac OS Xを扱った書籍のリスト

Knowledge Baseに、Mac OS Xに関する書籍の一覧が掲載されている。米国で出版されたものがリストアップされているが、9冊が挙げられており、オンライン書店へのリンクも用意されている。なお、プログラミング関連の書籍はリストアップされていない。Mac OS Xの使い方などをテーマにした書籍のリストである。

関連リンク:Mac OS X: Third Party Reference Books
カテゴリ:Knowledge Base(旧TIL), 雑誌、書籍


KBase》iPhotoでの写真一覧画面での選択操作についてのついての説明

iPhotoの写真一覧での選択方法がまとめられている。クリックしての選択や、Commandキーやshiftキーの利用方法、すべて選択する方法などは、一般的なMacのアプリケーションと同一である。フィルムロールのアイコンをクリックすると、そのフィルムロールにある写真をまとめて選択できる。選択解除についても、特定のものを解除するならCommandキーを押しながらクリックする。すべての選択を解除するには、写真のない部分をクリックする。

関連リンク:iPhoto: How to Select and Deselect Photos
カテゴリ:Knowledge Base(旧TIL), デジタルカメラ


KBase》iPhotoでハードディスク上にある画像ファイルを取り込んだ場合

iPhotoでハードディスクにある画像ファイルを取り込んだとき、元のファイルはそのままに新たにそのコピーをiPhotoで管理される領域に保持される。そのため、ハードディスクの空き領域は減少することになる。いったん、iPhotoに取り込めば、取り込んだ側の画像ファイルを利用するので、元のファイルは削除してもiPhotoは問題なく動作するし、画像自体はiPhotoの管理領域に残る。iPhotoはPicturesにあるiPhoto Libraryというフォルダを利用するが、このフォルダのなかみ全てについて、名前や場所を変更してはいけない。もし、画像を削除するのなら、Finderでこのフォルダ内を変更するのではなく、iPhoto上で画像を選択してdeleteキーを押して削除するようにする。

関連リンク:iPhoto: About Importing Pictures From Hard Disk and Available Space
カテゴリ:Knowledge Base(旧TIL), デジタルカメラ