Macintosh Developer Online (MDOnline)


2000年6月28日発行号 - REALbasic 3.0のアルファ版



いやはや、すごい雨ですね。このすごい雨の中、力仕事をしてきました。サーバファームにあるマシンの引き取りです。いろいろあって、サーバファームなんかを借りていたのですが、使わなくなったのを取りに行ったわけです。東京インターネットに頼んでいたのですが、実際にサーバが置かれているのはセコムのセンターで、自分のマシンにアクセスをするにも予約をしなければなりません。だから、予定を合わせていたのですが、それが今日ということで。しかも、駅から遠いところにあるので、帰りはタクシーを拾いました。いちばん近い駅から電車に乗ろうと思ったけど、あまりにすごい雨なので、これはもう会社までタクシーだということで、そのまま出社です。それでもすごい雨だったので、タクシーを降りてから会社に行くまでの少しの距離だけでずぶぬれになってしまいましたが…。
予約をするとか、身分証明書をあずけて部屋に入れるなど、もちろん、きちんとしたセキュリティになっていました。それで、部屋に入るとロッカールームのような部屋ではあるのですが、単にカギのかかったトビラがどーっと並んでいるだけです。駅のロッカーみたいに番号がないのです。実は設置には私は行っていないためどのトビラか知らないのですが、カギを持って来て案内してくれた担当者も、「どのボックスか御存じですか?」という始末。いやはや、セキュリティが高すぎませんでしょうか(笑)。それから、私を部屋に残して、案内した方は事務所に戻り、改めて場所のチェックをされていました。サーバールームは異様にクーラーが効いていましたね。
(新居雅行 msyk@mdonline.jp


Carbon対応する次期REALbasicのアルファ版のリリースが開始

REALbasicの次期バージョン、3.0のアルファ版のリリースが開始された。3.0a2というバージョンがリリースされ、2.1のときなどのように、随時アルファ版が公開されて、開発途中のバージョンも利用できるようになる模様だ。3.0はCarbon対応が大きな変化である。Mac OS X DP4対応となっているが、Mac OS 8以降からMac OS Xまでをカバーする模様だ。Carbon対応しているのは開発環境のIDEに加えて、コンパイルした結果のソフトもCarbon対応となる。Mac OS X上で稼動させると、IDEも生成ソフトもいずれもAquaのユーザインタフェースを利用できる。

関連リンク:REALbasic Alpha Release
カテゴリ:Carbon/CF, 開発ツール, REALbasic


MRJ 2.2.2の英語版がリリース、セキュリティホールに対処

Mac OSのJava実行環境であるMRJ(Mac OS Runtime for Java)がマイナーアップデートされた。Ver.2.2.2の英語版と再配布版がダウンロードできるようになっている。2.2にくらべて、メモリの利用を改善し、セキュリティについての問題も一部は解決されている。MRJ 2.2とInternet Explorer 5を利用した場合に、アプレットがダウンロードしたファイル以外への接続が可能となっていた。ただし、すべてのセキュリティ問題を解決したわけではなく、マイクロソフトとの共同作業で問題解決の努力を続けているとなっている。セキュリティ関係の変化については、続報でお届けする予定だ。なお、MRJ SDKについては、2.2として配付されたものをそのまま利用するようになる模様だ。

関連リンク:MRJ 2.2.2 Software Dounload Page
カテゴリ:Java


【Carbon化シリーズ】Navigation Serviceでファイル保存ダイアログ(2)

文書ファイルのウインドウを閉じる時、修正結果を保存していなければ、保存するかどうかをたずねるダイアログボックスが表示される。ボタンが少しだけの簡単なダイアログボックスとは言え、従来のStandard File Packageの枠組みには用意されておらず、自分でダイアログのリソースを定義して作らなければならなかった。TextDrawでは、Alert関数でアラート表示を行うが、ParamTextで表示メッセージにファイル名などのパラメータを渡していいた。しかしながら、Navigation Servicesには、そのダイアログボックスも用意されている。従って、リソースを作ったりしなくても、ダイアログボックスは表示できる。だけども、Navigation Servicesの作法にのっとって作成しないといけないという点では、単なるダイアログボックスの表示よりも面倒と言えば面倒である。
Navigation Servicesの機能を使うと、プログラムにも、リソースにも、メッセージの文字列は含めなくてもよく、結果的にはOSで定義された文字列が表示される。つまり、どのアプリケーションでも同じ文面が表示されるというユーザにとっての均一化が1つのメリットとなる。また、複数の言語のOSで稼動させるアプリケーションの場合、うまくすれば、Navigation Service周りは一切手を加えなくても、稼動している言語にあわせたメッセージあるいはボタン名にもなる。そういったプラス面を見ることにして、保存するかどうかをたずねるダイアログボックスも、Navigation Serviceを利用してみることにする。

TextDraw IVでは、ファイルを保存する時、ファイル名を未指定ならダイアログボックスで指定して保存し、すでにファイル名を指定していればそのまま保存を行うという関数がもう作られている。それをもちろん利用するのであるが、今回の話題としているNavigation Servicesの機能は、ウインドウを閉じる時に利用する。しかしながら、ウインドウを閉じる時と、アプリケーションを閉じる時で、メッセージがやや違う。Navigation Servicesは何とそこまで対応しているので、TextDrawでもしっかり対応してみた。ウインドウを閉じるときには、クローズボックスやあるいはCommand+Wなどのイベントを経て、WindowSet.cというソースのCloseDocWindow関数が呼び出される。さらに、終了するときには、DoCommand.cというソースのDoQuitCommand関数が呼び出される。
DoQuitCommandは、内部的にはCloseDocWindowを呼び出し、その戻り値がfalseの場合には、終了をやめるようにしている。そういうわけで、CloseDocWindow関数では、今現在が終了処理中なのか、あるいはそうでないのかを判別したい。TextDrawでは、たとえば、AppleEventでの終了など多岐に渡るため、終了するかどうかの判断には、Boolean型グローバル変数のFinishを利用できるようにしている。Finish変数の機能を拡大させて、終了する場合だけでなく、終了のプロセスに入った場合にもtrueになるようにした。そのために、DoQuitCommand関数はいくらか書き直した。まずはFinishをtrueとするが、CloseDocWindowsがfalseを戻すと、終了プロセスは中断して、Finish変数の値をfalseにしておくということが行われるようにする。なお、ソースファイルのWindowsSet.cでは、グローバル変数のFinishを使うようには設定されていないので、関数定義の外部で、externで変数定義を追加しておく必要がある。

続いて、CloseDocWindow関数のプログラムを見ていこう。今回のテーマとなっているダイアログボックスを表示するためのNavigation ServicesのAPIコールはNavAskSaveChangesというものだ。いきなりその部分を見てもらいたい。1つ目の引数はおなじみのNavDialogOptions型構造体を指定する。ここで、構造体はやはりNavGetDefaultDialogOptionsで初期化するのであるが、それ以外に必ずやらないといけないのは、構造体のメンバsavedFileNameに、閉じるウインドウの文書ファイル名を指定することだ。ここは既定値だと空文字列になっており、そのままだと、NavAskSaveChangesでダイアログボックスは表示されないのである。
NavAskSaveChangesの2つ目の引数は、NavAskSaveChangesAction型となっているが、要は定義定数を指定する。ここでは、終了プロセス中かどうかによって、ダイアログボックスのメッセージを切り分けるが、終了プロセス中ならkNavSaveChangesQuittingApplicationという引数を指定し、単に1つのウインドウを閉じる時であればkNavSaveChangesClosingDocumentという定義定数を指定するのである。
NavAskSaveChangesの3つ目の引数は、ダイアログボックスでの選択結果を得るためのもので、これはNavAskSaveChangesResult型変数で得るが、これは後から分かるようにやはり定数と比較をするだけだ。通常のダイアログボックスと異なり、細かい情報は必要はなく、ユーザがどのボタンをクリックしたかさえ分かればよいということである。NavAskSaveChangesの4つ目、5つ目は、それぞれイベント処理プロシージャへのポインタと、ユーザデータを指定する。これも、NavGetFileなどと同じである。ここではモーダルダイアログでもいいので、イベント処理プロシージャはNULLにした。
表示されるダイアログボックスを見てみよう。単に閉じる時と終了するときで、メッセージの内容が微妙に違うのが分かる。また、これらのメッセージのうち、プログラムで指定したのは文書ファイル名だけであり、しかもTextDrawでは定数テキストではなく文書情報の構造体から取り出してある。従って、プログラムにも、リソースにも、文字列は1つもないということになる。つまり、必要なメッセージは、Navigation Servicesで自動的に組み立てられたということだ。

◇「テスト1」を閉じようとした時のダイアログボックス


◇アプリケーションを終了しようとした時のダイアログボックス


NavAskSaveChangesの終了後、NavAskSaveChangesResult型変数の値を既定義の定数と比較する。キャンセルボタンをクリックすれば、kNavAskSaveChangesCancelとなっており、保存ボタンをクリックすればkNavAskSaveChangesSaveとなるという具合だ。それに応じて処理は分岐されている。それ以後は、TextDrawのデータ処理のプログラムが続いている。

Navigation Servicesでは他に、編集結果を破棄してファイルに保存された状態に戻す時のNavAskDiscardChanges、保存するかどうかのダイアログボックスをカスタマイズ可能なNavCustomAskSaveChanges、変換して保存した場合の変換の完了を知らせるNavCompleteSaveといった、カスタムダイアログボックスを表示するAPIを用意している。こうしたサポート範囲が広がっていることも頭に入れて、再度プログラムの検討をする必要も出てくるかも知れない。

関連リンク:Inside Carbon: Navigation Services
カテゴリ:Carbon/CF, Carbon化


【Carbon化シリーズ】プログラム-DoQuitCommand, CloseDocWindow


《ソースファイル:DoCommand.c》

// File-Quitを選択したとき(レコーディングには非対応)
void DoQuitCommand()
{
WindowPtr targetWindow;

Finish = true; //アプリケーション終了を示すフラグを立てます
//開いているウインドウを全部閉じます
for( targetWindow = FrontWindow();
targetWindow != 0;
targetWindow = (WindowPtr)((WindowPeek)targetWindow)->nextWindow)
if(DoCloseCommand() == false) { //閉じる時にキャンセルボタンをクリックした
Finish = false; //フラグを元に戻しテク
return;
}

if(availTSMInline) //TSMアプリケーションのクローズ
CloseTSMAwareApplication();
}

《ソースファイル:WindowSet.c》

extern Boolean Finish;

// ウインドウを閉じる。保存を行ったらtrueを戻す
Boolean CloseDocWindow(WindowPtr targetWindow)
{
DocRecHandle docH;
OSErr er;

if(targetWindow == 0) return false; //念のためにチェック
docH =GetDocHandle(targetWindow); //DocRecordを取得
if(((**docH).isDarty & 1) != 0) { //isDartyの1ビット目を見る。つまり修正された場合
NavAskSaveChangesResult reply;
NavAskSaveChangesAction action;
NavDialogOptions dialogOptions; //変数を用意する

NavGetDefaultDialogOptions(&dialogOptions); //ダイアログ設定は既定値
CopyString(dialogOptions.savedFileName, (**docH).fileName);
if (Finish) //終了プロセス中ならば
action = kNavSaveChangesQuittingApplication;
//アプリケーション終了のメッセージ
else //終了中でないなら、単に1つの文書を閉じるとき
action = kNavSaveChangesClosingDocument;
//文書を閉じる時のメッセージ
er = NavAskSaveChanges(&dialogOptions, action, &reply, NULL, NULL);
//保存していいかをたずねるダイアログボックスを表示する

if(reply == kNavAskSaveChangesCancel)
return(false); //何もしないなら関数を抜ける
if(reply == kNavAskSaveChangesSave)
DoSaveCommand(); //するなら保存
}
DisposeAllObject(targetWindow); //オブジェクトをすべて削除し
DisposeDocWin(targetWindow); //ウインドウを閉じる
if(FrontWindow() == 0) //ウインドウが1つもないのなら
DisableItem(GetMenuHandle(FileMenuID), CloseItem);
//File-Closeをグレーにする
return true;
}

カテゴリ:


ジャストシステムのJava版プレゼンソフトと表計算の概要が明らかに

ジャストシステムのJava製品、一太郎Arkのサイトで、以前より開発が公表されていた表計算ソフトとプレゼンテーションソフトの概要が公開されている。一太郎Arkと同じく、純粋なJavaで作成されたアプリケーションで、DOMを基本としたデータ構造を持ち、文書ファイルはXMLという路線である。プレゼンテーションソフトは「Muffin」と名付けられており、アウトライン編集と、スライドのプレビューという形式の編集画面だ。完成したプレゼンテーションのファイルはHTML/XHTML形式であり、Webブラウザでプレゼンテーションを行うことができる。1つのスライドを日本語と英語の2つの形態で作るなどの応用例のあるビューの機能はユニークな点だと言えるだろう。表計算ソフトは「Choco」と名付けられている。保存されるデータは、XML+CSS2となっており、一太郎Arkと同様にプラグインの開発もJavaで行える。一般的な表計算の機能に加えて、グラフ作成の機能もあり、グラフだけをGIFやJPEGファイルに出力することも可能だ。
表計算、プレゼンテーション、そしてワープロが揃った。もちろん、機能的にはMicrosoft Office 2000が勝るものの、ユーザー再度としてはそこまでオーバーなものは必要ないという考え方もできるだろう。だが、多くのユーザーが新しいソフトや環境に積極的ではない。対して変わらないのであれば、Officeでもいいという見方が多いだろう。むしろ、ジャストシステムの一連の製品は、開発者を引き付けることになるだろう。それも、システム販売などのソリューション系ではなく、プラグインを作成したり、あるいはアプリケーションのカスタマイズを行うという領域のプログラマにいちばん魅力に映る。こうした引きを足掛かりにいかに製品を成長させるかというところに、現状では注目すべき点だろう。

関連リンク:Ark Site 新Javaアプリケーション速報!
カテゴリ:Java, アプリケーション


サードパーティー製Java用暗号ライブラリFlexCrypto

ソフトウエアベンダの株式会社ドゥイット(do it,inc)が、Java用の暗号ライブラリ「FlexCrypto」を2000年6月20日に発表した。この製品は、文字列情報の暗号化を行うためのライブラリである。暗号化の方法は、暗号化の対象となるデータに対する鍵の持ち方によって5種類の方法があり、Multi-methods Encryption Scheme (MES) と呼んでいる。日本語のテキストも暗号化、復号が行える。
FlexCryptoの暗号化のインターフェースは、JCEのプロバイダ形式には沿っていないため、FlexCryptoを使う場合はプログラムの書き換えがある程度発生する。
また、暗号化に用いられるアルゴリズムは非公開になっている。暗号アルゴリズムは、その内容を公開し多くの攻撃を試した上で、それらの攻撃で解読に必要な時間が減少しないことを学術的に証明されたものが現実的に安全とされる。その意味で、多くの攻撃にさらされていないアルゴリズムである可能性があり、クリティカルなシステムに利用するのには向かないかもしれない。この点での安全性での検証を重視するのであれば、RSAなどのアルゴリズムを使う方が良いだろう。
ライセンス形態は、サーバ、クライアント無制限のものが748,000円、1サーバ-1クライアントものが248,000円で、追加ライセンスが1サーバあたり30,000円、1クライアントあたり5,000円である。
[阪倉 一/Java Security Report]

関連リンク:FlexCrypto
カテゴリ:ライブラリ, Java, 暗合化