Macintosh Developer Online (MDOnline)


2001年11月30日発行号 - OMEで受賞してしまいました…



自分で自分のことを記事にしてしまいました〜すみません(笑)。でも、スタッフが自分しかいないので、許して下さい。
それで、月末って、執筆を依頼している方々の原稿がなぜかいっぱい集まるのです。気持ちは分かりますけど、原稿がたくさんたまってしまっています。今日の未明から午前中にかけてどっさり原稿が集まってきているのですが、すみませんが、先着順ということで、倉橋さんの原稿は明日ということにさせてください(すみません>倉橋さん、みなさん)。可能であれば、原稿整理は今日中にしてしまうつもりですので、未明とかにはWebサイトで見られるかもしれません。原稿が上がってなければ、すみませんが、明日まで待って下さい。
それで、倉橋さんの原稿は、MacWIREさんへも配信予定となっているものですから、明日の配信ではあるのですが、MacWIREさんへの配信はされるということにします。ただ、「じつはWebObjectsで飯食ってます」の連載はいったん区切りをつけていただいています。その他の連載原稿についてですが、小池さん、森下さんのものは、引き続いてMacWIREへの掲載を行う予定です。一方、倉橋さんのWebObjects Plactice、大津さん、私のJavaについては引き続き、MDOnline読者限定とします。また、鶴薗さんの連載は、今月はなかったと思われたかもしれませんが、実は先月に2本ありましたので、それで充当しているという次第です。鶴薗さんの連載については来月からは、MDOnline限定とさせていただきます。あと、私の連載ですけど、Cocoa-Javaの方は基本的にはMDOnline限定とします。Browsing Mac OS Xはプログラミングネタの場合には限定、そうでないネタはMacWIREさんへ配信というふうに仕様と思っています。(実は自分の方で整理ができていなかったりしたので、まとめてみました〜すみません)
(新居雅行 msyk@mdonline.jp


Java On Mac OS X コンテストの受賞はメールクライアントのOME

2001年11月30日、パシフィコ横浜で開催されているJavaOneでアップルコンピュータによる「Java On Mac OS X コンテスト」の発表が行われた。先にお断りしておくが、優秀作品として賞品のiPodを授与されたのは、筆者であるMDOnlineの新居雅行を中心としたグループで開発している「OME」である。自分についてのニュース記事を執筆するのは変な話でもあるのだが、状況的にこうなってしまった点はお許しいただきたいと思う。

コンテストは、JavaOneの会期中にアップルコンピュータのブースに、Javaを利用したMac OS Xで稼働するアプリケーションを持ち込むことで受け付けられた。応募数は「多数の応募があった」として公表されていないが、ブースでアップルの担当者に対して説明を行うことで、受け付けられた。ブースで行われた発表では、来日しているAppleのデベロッパーテクノロジー担当ディレクターであるリチャード・ケリス氏より、副賞のiPodが授与された。Mac OS Xのさまざまな機能を効果的に使っているとともに、コミュニティを形成しているなどの将来性を期待しての受賞であるとのことである。
OME(Mac OSメール環境)は、電子メールクライアントであるが、1つのメールを1つのテキストファイルで保持するのが特徴である。各種の設定ファイルもテキストですぐに参照や編集ができる。メールのブラウザ、メール受信、メール作成、返信作成などの諸機能を別々のアプリケーションで構築しており、Pure Javaはもちろん、Objective-CによるCocoa、Cocoa-Java、Carbonなどさまざまなプラットフォームで各アプリケーションが作られている。メール処理の根幹部分はJavaMailフレームワークを使っている。メールの受信では、fetchmailやprocmailといったUNIXの素材を使っている。Finder上で到着メールの一覧が見られ、参照は自分の好きなエディタを使うことができる。メールは振り分け設定に応じてフォルダに分類できる。また、メール一覧やフォルダ移動などを含めた受信メールをブラウズする機能も利用できる。送信メールの作成は任意のエディタプログラムを使うことができる。構成は異なるが、Mac OS 9版もある。開発者としては「Creators for OME」として9名の名前が現在はリストアップされているが、コミュニティを中心に開発がすすめられている。ソースコードはすべて公開されている。

関連リンク:Mac OSメール環境(OME)
カテゴリ:電子メール, Java, イベント


パソコンでiアプリの開発を可能にするi-JADEのMac OS X対応版がリリース

ゼンテック・テクノロジー・ジャパンは、Mac OS Xでiアプリを開発可能な開発支援ツール「i-JADE for Mac OS X」をリリースした。同社はこれまで、Windows向けのi-JADEシリーズをリリースしてきており、NTTドコモのiモード向けDoCoMo UI(Doja)対応Javaアプリケーション「iアプリ」の開発支援ツールとして数多くのユーザを獲得してきた。Windows版については、フリー版の「i-JADE Lite」が基本的な機能を提供するが、Windows上で稼動する携帯電話エミュレータやクラスライブラリが付属した有償の「i-JADE Plus」があり、JDKと組み合わせての本格的な開発ができる。さらに、iアプリ向けの各種APIや開発支援ツールを含む「i-JADE Pro」といった製品構成となっている。ただし「i-JADE for Mac OS X」についてはWindows版と同じ構成ではないものの、数千円から数百万円のものまで幅広いラインナップをそろえるとしている。なお、無償版は配付しない。以下の同社のニュースリリースには、Mac OS Xで稼動する携帯電話エミュレータを見ることができるが、リアルな携帯電話のグラフィックスの中で、iアプリが起動して実行している様子が分かる。発売は12月の初旬を予定している。このように、Mac OS Xでiアプリの開発環境を整えることができるのも、Java2 SEに完全に対応しているメリットであると言えるだろう。

JavaOneでは、アップルのブースでもゼンテック社の担当者によるデモが行われていた。開発環境としては、Mac OS X版のJBuilderを使っていたが、CodeWarrior Pro7でもできるだろうということだ。AppleのDeveloper Toolsについてはとりあえずは対応開発ツールとはなっていないが、対応については検討しているそうだ。JBuilderでプロジェクトを用意し、ライブラリの指定と、携帯電話のエミュレータの実行を指定すれば、後はiアプリのソースを書いて行けばいい。実行すると、Javaで作られた携帯電話のエミュレータが起動し、iアプリがMac OS Xの中で実行する。エミュレータのアプリケーションは、機種ごとに用意している。エミュレータでは、クリックやあるいはキー操作によって携帯電話の操作をできるようになっている。なお、携帯電話での実際の実行速度に比べて、エミュレータでの実行の方がはるかに早いということだそうだ。JBuilderからの実行ではステップ動作や変数を確認するといったJBuilderを利用してのデバッグも可能となっている。ちなみに、JBuilderの英語版を使ってデモをしていた。

関連リンク:ゼンテックのi-JADEシリーズMac OS Xに対応
カテゴリ:Palm & PDA, 開発ツールその他


森下克徳の崖っぷちからWebObjects》第20回〜MySQLでコミュニティサイトを作るv4/GPLって?

前回ダウンロードしていただいた、MySL3.23.44だが、実はつい最近3.23.45がリリースされている。そこで、こちらの方を再度ダウンロードして展開していただきたい。

◇MySQL
 http://www.mysql.com/

さあ、今回は展開されたところででてくるフォルダの中にある、ドキュメントをまずはちょっとひも解いてみよう。
たとえばWORDとかEXCELとかのソフトウェアを買ってきてインストールする場合は、インストーラを起動すると最初に使用許諾契約に同意を求められるが、それは利用するのにはそのような手続きを経てライセンス契約を結ぶ必要があるからである。もちろん今回MySQLのインストールでは、そのようなグラフィカルなインターフェイスでの「同意します・同意しません」画面は出てこないけれども、利用するにあたってはライセンス契約を守らなくてはならない。そこでまず、ドキュメントにあるライセンス契約に関してひも解いてみよう。

MySQLのライセンスの形式だが、ちょっとややこしいことになっているので、整理してみると次のようになる。
3.23.19-beta以降、現行のMySQLは、2種類のライセンス方法が平行して実施されている。一つは多くのオープンソースソフトウェアが利用している、GPLというライセンス方法で、3.23.19-beta以降に取り入れられたライセンス形式である。もう一つは、FPLといわれる、MySQL独自のライセンス形式で、これは以前からある方式である。個人的に利用する場合、どちらをとっても大差ないのであるが、自分が開発したシステムがMySQLに依存している場合、かつ、それを販売する場合になってくると、どちらのライセンス形式をとるかによって、話がかわってくるので注意が必要である。具体的にどうという前に、まずはそれぞれのライセンスについてちょっと見てみよう。

あ、まずはライセンスという言葉の意味だが、プログラムの著作権を持っている著作権者と、プログラムを受け取る利用者との間の利用に関する契約で、「著作権者」が「利用者」の利用方法に対して、何を許して何を許さないかを明示するもののことだ。

MySQLが利用している「GPL」は、GNU General Public Licenseの略語だ。詳細は以下のサイトで日本語にて読める。

◇GNU General Public License
 http://www.gnu.org/licenses/gpl.ja.html

で、これは、フリーなソフトウェアのためのライセンス契約書パッケージのようなものだと思えば
良い。たとえば、あなたがなにかソフトウェアを作って、「GPLの下に配布する」と宣言すれば、自分でややこしい契約案を法律書と首っ引きでつくらなくても済むわけだ。GPLは次のような性質を持っている。

GPLは利用に関する規定は定めておらず、利用者はどのようにでも(商用用途であったとしても)自由に(つまり無料で)利用できる。ただし、そのプログラムを複製、配布、変更する場合には、GPLの流儀に乗っ取って行う必要がある。さらにそれは、そのプログラムから派生したものに対しても適用される。

手に入れたプログラムを複製、配付する場合には、次の要項をみたしていれば、自由に(つまり無料で)複製配布できる。

(1)おおもとの著作権者を明示すること。
(2)著作権者は、プログラムの引き起こす結果に関して一切保証しないこと。
(3)配布される先の第三者にプログラムが手渡された瞬間、GPLライセンスによる契約が、著作権者とその第三者との間で発生することを明示すること。

GPLに基づいている場合なら、あなたがダウンロードしたMySQLを変更なく第三者に複製、配布する場合、それをお金を取って売りつけることもできる。また、あなたが第三者に対して、MySQLの動作を保証し、それによってサポート料などの対価を得るのも自由だ。ただしその場合でも、著作権者には一切の責は及ばないということは知っておこう。そしてこの場合もう一つ知っておかなくてはならないことは、GPLの場合、あなたが第三者に配付した時点で有料で譲り渡したとしても、その第三者は、さらに不特定多数にあなたから買ったものを無償で複製配布できる(GPLに基づいて)ということだ。

変更を加えることに関しては、次の用件を全て満たしている場合に限って、自由に(つまり特別の許諾を得ずにかつ無料で)行えることになっている。

(1)変更したファイルと変更した日付けを明示すること。
(2)変更したものを複製配布する場合、すべてをGPLの下に置くこと。
(3)適切な著作権表示をすること。なお、変更の結果派生したものの著作権者は、もとの著作権者プラス、変更部分に限って変更したあなたということになる。
(4)GPLであることを明示し、利用者がGPLの条項を参照できるようにしておくこと。

で、この場合、GPLから派生したものは派生した部分の著作権者があなただとしても、あなたにはその変更部分のライセンス方法を選択する余地はなく、有無をいわさずGPLになってしまうという点に注意が必要だ。

なお、ソースコードでなくバイナリとして配布する場合には、受け取った第三者がソースコードを要求した場合、郵送料程度の安価な負担で手に入れられる手段を講じなくてはならない。このことは、たとえばお客さんに依頼されてGPLなソフトウェアに手を入れてコンパイル後、バイナリを1000万円で売ったとしても、お客さんがそのソースコードを要求たら、ただ同然の値段でソースを渡さなくてはならないことを示している。さらのそのお客さんがGPLに基づいて無償でバイナリやソースを別の不特定多数に配布しても文句は言えない。ただこのようにいうと、変更したものは必ず公開が必要というように読めてしまうが、配布を伴わずに、変更したものを自分だけで利用
する場合にはソースを公開する義務はない。

以上の用件が許諾できない場合、複製や配布、変更、二次ライセンスは一切できないことになっている。おおまかにGPLは以上のような形である。それではFPLはというと、それは次号にまわそう。
[森下克徳]

カテゴリ:開発情報, データベース, 崖っぷちからWebObjects


小池邦人のプログラミング日記》2001/11/30<Interface Builderの謎が解決されたのだ>

前回の「nterface Builderに再挑戦する」で、Interface Builderに関するいくつかの問題点を取り上げたのですが、さっそく読者の方から解決方法のメールが届きました。ゆうたさん、メールありがとうございました。大変感謝しております。

まずは、Tabアイテムに日本語を入力しても表示されない件です。このトラブルは、現バージョンのInterface Builderでは避けられないようです。ただし、後からAPIを使って日本語に差し替える方法が判明いたしました。まずはTab Infoダイアログで「Control ID」である「Signature:」と「ID:」を設定します。今回の例では、’tab ’と1に設定しています。

 

そして、Project Builderで作成したひな形プロジェクトのソース(main.c)で、SetControlData()を用いた以下のようなルーチンを実行します。

 

これで、作成したTabコントロールの最初のアイテムが「日本語」に差し替えられます。

TabコントロールのControlRefを得るには、先んじて設定しておいた「Signature:」と「ID:」をGetControlID()に渡します。SetControlData()の2番目の引数が、変更したいアイテム番号を指示しています。実は、私もこれと似た方法(ControlTabInfoRec構造体とStr255を使う方法)を試してみていたのですが、なんとテストルーチンをShowWindow( window )の後に実行していたため、Tabの表記が書き変わらず、正しく実行されていたことが分からなかった言うドジを踏んでいました。大変お騒がせいたしました。ちなみに、私が試した方法ですと日本語表記が化けてしまいますので、必ずControlTabINfoRecV1構造体を使う方法を用いてください。

次は、ポップアップメニューのように、メニューリソースを付加する必要があるコントロールのAttributesにメニューIDを入力するカラムが無い件です。こちらは、もっと簡単に解決しました。Nib仕様ではメニューを別に作成し、そのメニューIDをコントロールにリンクする必要はないようです。つまり、メニューアイテムの追加や表示内容の変更は、メニューバーのメニューと同様にその場で編集できるようになっています。表示内容はダブルクリックで入力できますし、新規アイテムは部品パレットからドラッグ&ドロップで追加できます。いやはや、いつまでも「リソース頭」のままではダメだということがよく理解できました。

 

さて、後はProject Builder経由以外でInterface BuilderのImage Tabへ画像やアイコンを追加する方法が判明すれば大変嬉しいのですが。どなたかご存知ないでしょうか?ご連絡をお待ちしております。
[小池邦人/オッティモ]

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


Java Watch on the X》3 - 今度こそ「JavaからAppleScript」を実行する(4)

【MDOnline読者様限定コンテンツ】
なお、Processクラスには以下のようなメソッドも用意されている。たとえば、延々と処理をするようなプロセスを起動したとき、そのプロセスが終了するのを待つのであれば、waitForメソッドを使う。

☆プロセスが終了するまで待つ。呼び出したスレッドが待機状態になる
 int 《Process》.waitFor();
 戻り値:プロセスの終了コード
 例外:InterruptedException:別のスレッドから割り込みにより発生する

☆終了したプロセスの終了コードを受け取る
 int 《Process》.exitValue();
 戻り値:終了コード(通常は0だと正常終了でそれ以外は異常終了)

☆プロセスを強制終了する
 void 《Process》.destory();

execで実行したプロセスの標準出力を、順次呼び出したプロセス側で取り込みながら、たとえばユーザにフィードバックしたいような場合には、次のようなプログラムが例を参考にしてもらいたい。スレッドを使うタイマークラスを作成するが、そのクラスのインスタンスが、execを実行したスレッドを、一定時間ごとに呼び出すというものだ。タイマーの側でinterruptメソッドを呼び出すと、waitForで例外が発生すると言う仕組みになっている。プログラムの断片で示すので、利用するときには適当にアレンジしてもらいたい。ここでは、fetchmailコマンドに-vオプションをつけて、POPサーバからの取込み具合を監視したいのだが、呼び出したプロセスの側の標準出力の結果を取り込み、さらに標準出力に出すことで、たとえばコンソールなどで呼び出したfetchmailの標準出力を見ることができるという具合だ。


// プロセスの呼び出し部分
try {
String command = "/usr/bin/fetchmail -v";
Process p = Runtime.getRuntime().exec(command);
InputStream inSt = p.getInputStream();
byte buffer[] = new byte[1024];
Timer t = new Timer(Thread.currentThread()); //タイマーのスレッドを作り
t.start(); //処理をスタートさせる
boolean processLive = true; //プロセスが稼働中かを示すフラグ
while(processLive) //稼働中なら
try {
p.waitFor(); //プロセスの終了を待つ
processLive = false;
}
catch(Exception e) { //一定時間ごとに割り込みで例外が発生
int cnt = inSt.read(buffer, 0, 1024);
//そのタイミングでプロセスの標準出力から読み取り
System.out.println(new String(buffer, 0, cnt));
//さらに標準出力へ出すことで結果が見える
}
t.noMoreTimer(); //プロセスが終わればタイマーは不要なので処理をとめる
}
catch(Exception e) {
System.out.println(e.getMessage()); }
// プロセスの呼び出し部分ここまで

/* 指定したスレッドに、一定時間ごとに割り込みを発生させるクラス */
class Timer extends Thread {
boolean isNoMore = false; //タイマーの処理をやめるための変数
Thread receiverThread = null; //割り込みを送るスレッド

public Timer(Thread receiver) { //割り込みを送るスレッドを引数にとって
receiverThread = receiver; //  このクラスをインスタンス化する
}

public void run() { //スレッドによる並列処理で呼び出される
while(isNoMore == false) { //実行を中止しないのなら
try {
Thread.sleep(1000); //ここでは1000ミリ秒ごとに
}
catch(Exception e) { System.out.println(e.getMessage());}
receiverThread.interrupt(); //指定したスレッドに割り込みを送る
}
}

public void noMoreTimer() { //タイマー処理を中止させる
isNoMore = true;
}
}

(この項、以上)

カテゴリ:開発情報, AppleScript, Java, Java Watch on the X


KBase》Mac OS X向けのDVDプレイヤがバージョンアップ

Mac OS X向けのDVDプレイヤアプリケーションが、Ver.3.0.1にアップデートされている。ソフトウエアアップデートによる更新も可能だ。安定性とパフォーマンスの向上と、Blue & WhiteのPower Macintosh G3とPCIのグラフィックスカードを搭載したPower Mac G4のサポート追加が変更点となっている。

関連リンク:Apple DVD Player 3.0.1 for Mac OS X: Information and Software
カテゴリ:OS関連ソフトウエア, Knowledge Base(旧TIL), メディアプレイヤ