[Waba WORLD] [Wabasoft] 開発:[FAQ|仕様|How-to]
よくある質問とその答え

"You can tell whether a man is clever by his answers.
 You can tell whether a man is wise by his questions."
- Naguib Mahfouz
一般的な質問

  1. WabaはJavaの実装ですか?
  2. Wabaはフリーですか?
  3. Waba仮想マシンはどれくらい安定していますか?
  4. Wabaのアイディアは誰が出しましたか?
  5. ベータ版リリースはいくつぐらい続きますか?

開発者向け質問

  1. SolarisやLinux向けのSDKプログラムはありますか?
  2. どのJDKがWabaプログラムの開発に使えますか?
  3. ネイティブな関数にアクセスできますか?
  4. edit, choiceなどのコントロールはどこにありますか?
  5. Wabaプログラムの実行にメモリが不足しています。どうしたらよいですか?
  6. ガベージコレクタ(garbage collector)はどんなものですか?

Windows CE特有の質問

  1. WabaからWindows CEのデータベースへアクセスできますか?

PalmPilot特有の質問

  1. Wabaプログラムは記憶にストレージ・ヒープ(storage heap)を使いますか?
  2. PalmPilot上でプログラム開始時にソケットを開くと、失敗します。どうしてですか?
  3. WabaからPalmPilotデータベースへアクセスできますか?
  4. WabaはPalmPilot上でグレイスケールの描画をサポートしていますか?
  5. Wabaアプリケーションを実行するときアプリケーションを切り替えられません。またアプリケーションは普通にクローズしてないように見えます。どうしてですか?
  6. PalmOS上でクリップされた線を描画する機能にバグがありますか?
  7. PalmOS上でDRAW_AND操作を使って描画する機能にバグがありますか?
  8. PalmOS上でDRAW_XORモードのcopyRect()機能にバグがありますか?
  9. エミュレータでWabaプログラムに対してGremlinを動かすと、Formエラーを起こします。これはバグですか?


一般的な答え

  1. WabaはJavaの実装ですか?

    いいえ。JavaはSun Microsystems社の商標です。Javaは言語、仮想マシン、 クラスファイル・フォーマット、クラスの集合を含めたプログラミング・ プラットフォームを定義します。

    Wabaは言語、仮想マシン、クラスファイル・フォーマット、基本クラスの集合を含めた 独自のプログラミング・プラットフォームです。

    Wabaは開発者がWabaプログラムを書くのにJava開発ツールを使えるように 設計されているので、WabaプログラムはネイティブコードなしにJavaアプリケーション やJavaアプレットとして動きます。

    WabaアプリケーションはほぼJava上で動きます。 しかしJavaクラスライブラリを使うJavaプログラムはWaba上で動きません。

    PalmPilotやWindows CEデバイスがWaba仮想マシンを含んでいれば、 Wabaプログラムはコードを変えることなしにそのデバイス上で動きます。

    PalmPilotとWindows CEデバイス用Waba仮想マシンはWabasoftから無料で利用できます。

    さらなる情報はproduct overview pageをご覧ください。

  2. Wabaはフリーですか?

    はい。Wava仮想マシンはWabasoftのウェブサイトから、許可を受けて、自由に 利用できます。開発者は無料でWabaSDKを利用できます。

    再配布などに関する権利を詳述するために、製品と同封される ライセンス契約をご覧ください。

  3. Waba仮想マシンはどれくらい安定していますか?

    Waba仮想マシンはロバストネス(robustness)を最優先に作られており、 広範囲にテストされています。なんらかの問題を見つけたなら、 問題を詳述して電子メイルで連絡してください。

  4. Wabaに対するアイディアは誰が出しましたか?

    オリジナルのアイディアはHappy Fingersのページ に最も良く説明されていると思います。

  5. ベータ版リリースはいくつぐらい続きますか?

    最終リリース1.0まで10ぐらい続くと思います。ベータリリースの間、 APIは変更されることがあります。また、その間に受けたフィードバックは Wabaの特徴とAPIに影響します。


開発者向け答え

  1. SolarisやLinux向けのSDKプログラムはありますか?

    はい、Fritz Zaucker博士がLinux向けとSolais向けの両方のSDKを公開しています。 公開された実行可能ファイルへのリンクはTop 10ページを ご覧ください。

  2. どのJDKがWabaプログラムの開発に使えますか?

    どのJDKでもうまく動くでしょう。我々はSunのJDK 1.02、JDK 1.1とJDK 1.2、 MicrosoftのSDK for Javaを使って開発をしています。Wabaブリッジクラスの中に 多種多様なバージョンで開発できることを確実にするためのコードがあります。

  3. ネイティブな機能をアクセスできますか?

    いいえ。現在のリリースでは外部のネイティブメソッドをサポートしていません。 将来もこれを実装する予定はありません。

  4. edit, choiceなどのコントロールはどこにありますか?

    Edit(テキストフィールド)やchoice、listなどのユーザインターフェイス・コントロールは 将来現われるでしょう。これがいつかはわかりませんが、おそらくリリース1.0の 前でしょう。

  5. Wabaプログラムの実行にメモリが不足しています。 どうしたらよいですか?

    さらに多くのメモリをプログラムへ割当てることができます。 exegenプログラムはどれだけのメモリをプログラムへ割当てるかを決定します。 デフォルト値は非常に小さい値、全メモリでおよそ12Kです。

    exegenプログラムはあなたのWabaプログラムを"起動(start up)する"実行可能な ファイルを生成します。このプログラムはどれだけのメモリをそのプログラムへ 割当てるかを仮想マシンへ知らせます。

    どれだけのメモリをプログラムへ割当てるかを指定せずにexegenを使ったなら、 デフォルト値が使われます。exegenを引数なしに 実行することによってデフォルト値を参照できます。

    "(メモリ不足)out of memory"メッセージはクラスヒープが不足していることを 表します。exegenコマンドラインでクラスヒープの値を増やして、 新しい起動プログラムを作ってください。 オブジェクトヒープが不足なら、オブジェクトヒープの値を増やすことができます。

  6. ガベージコレクタ(garbage collector)はどんなものですか?

    ガベージコレクタは小さなデバイス上で効率良く動作するよう設計されました。 それは通常プログラムが割当てられたメモリを使いきったときのみ動作し、高速です。 例えば、PalmPilotでは、それがいつ動作したか分からないでしょう。

    Waba仮想マシンでオブジェクト割当てはO(1)の操作で、 ガベージコレクションはO(n)の操作です。


Windows-CE特有の答え

  1. WabaからWindows CEのデータベースへアクセスできますか?

    はい。ベータ版リリース5を使えば、Catalogクラスを使ってWindows CEの データベースへ読み書きできます。ただし、Catalogクラスは Windows CEのデータベースから/へ単一レコードblob型を書込むことに制限されています。


PalmPilot特有の答え

  1. Wabaプログラムは記憶にストレージ・ヒープ(storage heap)を使いますか?

    いいえ。ストレージ・ヒープの使用は、PalmPilotにおける動的ヒープの 限られた空間を逃れる方法です。PalmPilotのために、Waba仮想マシンはこれを 使いません。

    ストレージ・ヒープは通常デバイスがリセットされたとき初期化されません。 プログラムがストレージ・ヒープを"めちゃめちゃに(messes up)"した場合は、 デバイスをフルリセットする必要があります。

  2. PalmPilot上でプログラム開始時にソケットを開くと、失敗します。どうしてですか?

    PalmOSはアプリケーションの"メインループ(main loop)"が始まるまで ソケットを開くことを認めていません。イベントが処理される前にソケットを 開くと、PalmOSはデバイスをリセットするかもしれません。Waba仮想マシンは Wabaプログラムが誤った時期にソケットを開くことを防止し、 安全にソケットを開くことできるようになるまでプログラムにソケットを 開かせません。

    WabaプログラムはPalmOSイベントループが始まる前に初期化されます。 すなわち、アプリケーションのコンストラクタ(Appのコンストラクタ)は "メインループ"が始まる前に呼ばれます。したがって、PalmOS上で アプリケーションのコンストラクタでソケットを開くことは失敗します。

    PamlOS上で、イベント処理が始まればソケットを開くことができます。 例えば、ペンイベント、キーイベントが生じた後、画面が描画された後などです。 プログラムのコンストラクタでソケットを開くとすると、この問題を 考えるべきでしょう。

  3. WabaからPalmPilotデータベースへアクセスできますか?

    はい。Catalogクラスを使うことでWabaプログラムからPalmPilotデータベースへ アクセスできます。

  4. WabaはPalmPilot上でグレイスケールの描画をサポートしていますか?

    あなたは白黒ではなく4色グレイスケール(1ピクセルあたり2ビット)で描画するPalmPilotを 使っている/見ているかもしれません。

    実際のところ、PalmPilotはPalmOS APIを通したグレイスケールの 描画をサポートしていません。グレイスケールで描画するためには メモリを非常に細かく操作する必要があります。

    これについて、3Com社は 適切な記事を示しています。Wava仮想マシンはPalmOSでサポートされた機能を 履行します。画面メモリへ直接書きこんだり、文書化されていないシステムレジスタを 設定することは行ないません。したがって、Waba仮想マシンはPalmPilot上で 1ビットカラーの描画だけをサポートしています。

  5. Wabaアプリケーションを実行するとき アプリケーションを切り替えられません。またアプリケーションは普通に クローズしてないように見えます。どうしてですか?

    これはWabaプログラムがPalm Personal上で動くとき、Wabaベータ4上で起こります。

    PalmOSプログラムがPalmOSランチャーの動作に十分なメモリを 動的なヒープに残さないとき、問題は起こります。 ベータ4以前のWabaSDKを使ったとき、Wabaプログラムへ割当てられる メモリのデフォルト量は12Kです。

    Palm Personal上で、これはプログラムを起動するのに十分ですが、 PalmOSランチャープログラムにプログラムを切り替えさせるのには十分ではありません。

    ベータ6以後のWaba仮想マシンは、Wabaプログラムが起動した後PalmOSに 動的メモリ(~2K)を残すことを保証することによって、この問題を回避しています。

    参考のために、Palm Personalは約12Kの動的ヒープをもっています。 動的ヒープとはWabaプログラムがオブジェクトヒープ、クラスヒープ、 ネイティブのスタック、仮想マシンのスタックを置く場所です。 Palm Professionalはソケットが使われないとき44Kの動的ヒープをもっていて、 ソケットが使われるとき(TCP/IPスタックがアクティブなとき)12Kの動的ヒープ をもっています。Palm IIIデバイスはソケットが使われないとき68Kの動的ヒープを もっており、ソケットが使われるとき36Kの動的ヒープをもっています。

  6. PalmOS上でクリップされた線を描画する機能にバグがありますか?

    はい。PalmOSはクリップされた線を引くとバグが生じます。

    クリップされた矩形があって、その内部のどこかから矩形のすぐ下へ 垂線で無い線を引くと、その左右の方向が入れ替わってしまいます。

    例えば、この場合:

      

    こうなります:

      

    これは、その線が垂線でなくクリップされた矩形のすぐ下で終わっている場合にだけ 起こります。

  7. PalmOS上でDRAW_AND操作を使って描画する機能にバグがありますか?

    はい。PalmOSのWinCopyRectangle()関数にバグがあります。 それはいくつかの条件下でDRAW_AND操作に誤った結果を生じさせます。

    以下の画像は問題を説明しています。 これはAND操作が転送元から転送先へコピーするときに起こすべき結果です:

      

    そして、これがPalmOSでWinCopyRectangle()関数を使うときに起こる実際の結果です:

      

  8. PalmOS上でDRAW_XORモードのcopyRect()機能にバグがありますか?

    PalmOSにはXORモードで画面に重ね合せコピーを行なうと生じるバグがあります。

    これはWabaでグラフィックス描画モードをXORモードに設定し、copyRect()を行なうと生じます:

    • 転送元と転送先の表面は同一である。
    • 転送元と転送先の領域は重なっている。
    • 転送先は転送元より左下にある。

    PalmOS上で問題を起こすC言語のコードを示します:

      RectangleType rect;
      WinHandle winHandle;
    
      winHandle = WinGetDrawWindow();
      // draw a black rectangle in the center
      rect.topLeft.x = 70;
      rect.topLeft.y = 70;
      rect.extent.x = 20;
      rect.extent.y = 20;
      WinDrawRectangle(&rect, 0);
      // XOR the rectangle a little lower and to
      // the right (overlapping)
      WinCopyRectangle(winHandle, winHandle, &rect,
        71, 71, scrXOR);
    

    この問題に直面した場合(画面に描かれた変な線を見ているでしょう)、 まずイメージバッファへそのエリアをコピーして、それを操作し、 それからXORを使ってそれを画面へコピーします。

  9. エミュレータでWabaプログラムに対してGremlinを動かすと、Formエラーを起こします。 これはバグですか?

    これはGremlin/PalmOSのバグによって起きているように見えます。 「実際のPalmOSデバイス」でGremlinを動かすと、問題は起きません。 問題は特定のWabaプログラムに対してGremlinを動かすと起こるようです。

    PalmPilot上のWabaプログラムはランチャー(.prcファイル)とクラス(.pdbファイル)から なります。ランチャープログラムはWava仮想マシンを起動し、それにクラスの保存場所や メモリの使用量を教えます。

    GremlinがWabaプログラムを動かすとき、Gremlinがランチャープログラムを起動すると、 ランチャープログラムはWaba仮想マシンを起動します。Waba仮想マシンへ切り替えられた後、 ランチャープログラムはもはやアクティブではありません。

    しかし、Gremlinはランチャープログラムについて知っているだけなので、 ランチャープログラムにイベントを送り始めます。 PalmOSはキーボードダイアログをポップアップするイベント(キャラクタ0x109)を送った時、 キーボードダイアログをポップアップしていると仮定されたプログラムが もはやアクティブでないため混乱します。これがFormエラーを生じます。

    「実際のPalmOSデバイス」上で動作するとき、これは起こりません。 なぜならGremlinはプログラムのイベントキューにイベントを直接送らないからです。


原文:Copyright (c) 1999 Wabasoft. Waba, WabaVM and WabaSDK are trademarks of Wabasoft Inc.