Tech Note 26: Appforge Porting Guide

Nov 19, 2004

© NSB Corporation. All rights reserved.

[英語版]

  前置き

AppforgeとNS Basic/Palmは共にVBに似た開発ツールですが、実行過程に違いがあります。このテクニカルノートは、Appforgeで作られたアプリケーションをNS Basic/Palmに移行する作業を容易にするために書かれました。

Appforgeは2つのデザインコンセプトがあります:クロスプラットフォームおよびVisual Studio内で動作。NS Basicはこの2つについては異なったアプローチをしています。結果的に2つのツールには隔たりがあります。

NS Basic/Palm は Palm OS 用に最適化されています。可能な時はいつでも、Palm OS のリソースを使います。全てのオブジェクト、ファイル処理、通信、etc. は Palm OS に組込まれている関数が基になっています。これらの機能は全てのデバイスのROMに予め組込まれていますので、NS Basicは非常に小さなruntimeで十分なのです。

他にもアドバンテージがあります。Palm OS のコントロールが使われていますので、作られたアプリケーションは自動的にPalmの"Look and Feel"を持つことになります。既存または新規のデバイスとの互換性も向上し、実行処理速度も増進します。

新しい環境へ移行する時、最初にあなたが気が付くことは、何か失ったものでしょう。しかし、次第に他の機能が理解するにつれ、失ったものは気にならなくなるでしょう。NS Basicでどのように行うかが理解できない時はnipponsupport© nsbasic.comへご連絡下さい。解決策が見つかるようお手伝いいたします。NS Basicのアドバンテージは:

注記:このドキュメントの内容は、これが書かれている時点で、NS BASIC Corporationが持つ最新の情報を基に書かれています。有益な情報や情報の訂正がある場合は、nipponsupport© nsbasic.comまでご連絡下さい。

目次

  ベンチマーク
  開発環境インターフェース
  クロスプラットフォーム互換性
  Palm OS 互換性
  外部ライブラリ
  ローカライゼーション
  Runtime メモリー容量
      Runtime コード
      アプリケーション コード
  テストおよびデバッグ
  ライセンスおよび著作権使用料
  移行に関する情報
      変数タイプ
      プログラム コード
      オブジェクト
      カラー
      データベース
      ソートされたデータベース
      コンジット
      その他
  NS BASIC Corporation
      会社概要

ベンチマーク

テストを行うにあたり、小さなビジネスタイプのアプリケーション(2つのフォームと16のオブジェクトを含む)をセットしました。このプログラムは2つのフォームを往ったり来たりし、オブジェクトに入っている情報を更新します。AFとNSBに使われたプログラムは、基本的に同じだと判断できるものです。

結果表
MobileVB 3.5 NS Basic/Palm 3.0
コンパイル時間 (秒) 7 <1
サイズ (k) 11,385 3,658
スピード (秒) 15 9
起動時間 (秒) 5 2

NS Basic/Palmプログラムは全ての要素に関してAFより優れている結果が出ました。恐らく、最も注目すべき点はNSBプログラムが、AFプログラムより、50%速く実行していることでしょう。多分、単純な計算処理でしたら、AFの方がNSBより速いだろうと思います。しかし、どちらのツールもそのタスクには推薦できません(Cコードの方が、常に優れています)。

NS Basic/Palm 5.0では、ネイティブ・エグゼキューションが導入されました。これは68Kのエミュレーションを行うのではなく、コードをそのままARMネイティブモードで実行します。結果として最高で25倍のスピードの向上が得られます。

コンパイル時間は、直接プログラマーの生産性に繋がります。大きなプログラムでも、NS Basicの方が、AFより2倍速く処理します。

プログラムサイズは、Palm OS デバイスには重要です。大きなプログラムでも、AFの.prcファイルはNSBのものより、約50%大きくなるようです。

起動時間は、App Launcherでアイコンをタップしてから、アプリケーションが使用可能な状態になるまでの時間です。小さなプログラムでも、NS Basicの方が数秒速い結果になっています。

開発環境インターフェース

NS BasicのIDEは、Visual Studio の Visual Basic と似たインターフェースを持っていますが、NS Basic/Palmにのみ適用できるオプションを持っています。機能のセットは小さいく、余分なものを装備していません。 Helpメニューは、NS Basic/Palm用にできています。NS Basicを使うのにVisual Basicをインストールする必要はありませんので、インストールも非常に簡単です。NS Basicのインストーラは5メガ以下で、最初に他のソフトをインストールする必要もありません。

NS Basicは便利な機能を持っています。IDE上のフォームの模擬イメージは「ドラッグ アンド ドロップ」をサポートし、160x160のサイズ(デスクトップでは小さすぎる)とその2倍のサイズで表示する切り替えが簡単に行えます。

AFはVisual Basicへのプラグインとして動作します。このため、AFはVisual Basicのサブセットであり、表示される全てのオプションが使える訳ではありません。例えば、IDEのToolBoxに現れる最初の20のオブジェクトは、AFには意味のないものです。1024x768のスクリーン上では、結果的に多くのオブジェクトはアクセス不可能になります。また、AFでは動作しないオプションでも、VBのプロンプトが出て、利用するか伺います。メニューアイテムは、AFプロジェクトには全く関係ありません。 Help機能は通常のVB用にできています。AFのHelpを見るには、MobileVBメニューに行かなければなりません。AFのインストーラは約30メガで、これには必要であるVisual Basicは含まれていません。

クロスプラットフォーム互換性

NS BASICは、PalmプロジェクトをWindows CEへ変換したり、またはその逆をするためのものは提供していません。また、共存するバージョンを提供する予定も持っていません。

Palm OS 互換性

NSBプログラムはPalm OS 3.0 以降のデバイス(時に、更に古い機種も可)上で、何も変更を加えずに動作します。NSBはPalm API関数を使っていますので、新しいバージョンのOSでも、多少の変更か、何も変更を加えなくても動作することができます。実際、Palm OS 5 で動作させるためのNS Basicのアップグレードは、数日で終りました。NS Basicのユーザは、OS 5 でプログラムを動作させるために、何もコードの変更はする必要がありませんでした。

Palm OS 5 のAPI関数は、StrongArmネイティブ コードに再コンパイルされましたので、NSBプログラムは新しい機種で、かなりスピードが速くなりました。Palm IIIと比べると、約6倍速い結果がでています。

私達は既に、Palm OS 6 用に準備しています。

AFはPalm OS 5に移行するのに1年費やしました。AF独自のコントロールのライブラリを修正する必要があるため、かなり大変なことだったと思います。また、AFでは多くのスピードの向上は見込めないかもしれません。Palm OS 5 のAPI関数がStrongArmネイティブ コードになったことのアドバンテージは得られず、代わりにPACEの基で動作します。PACEの処理負荷が、StrongArmチップのスピードを消しあう形になるからです。

AFはPalm OS 6 でも同じチャレンジが待っています。

外部ライブラリ

NSBは外部ライブラリには共有ライブラリ(Shared Libraries)を使い、AFはIngotsを使っています。

NS Basicの共有ライブラリは標準 Palm OS Shared Libraries です。共有ライブラリを呼ぶために、IDEによってINFと呼ばれるシンプルなテキストファイルが使われています。 Palm OS Shared Libraries のフォーマットは、公に提供されています。ライブラリは、CodeWarrior、Falch、PRC-Toolsなど様々なツールを使って開発可能です。

AF Ingotsは、私的に所有する Appforge Piedmont Framework で、Appforgeのパートナーのみに提供されています。パートナーになるためのツールキットおよびコンジットの価格は公表されていません。AF IngotsはAFとしか使えません。

また、NSBでは、PalmPrint など多くの標準ユーティリティを使うことができます。AppLaunchコマンドは、標準 Palm OS メカニズムを使って、他のアプリケーションの起動が行えます。AFでは、これはできません。

他のNSBに特有の機能は、SysTrap 関数です。これを使うと、NSBプログラムから直接多くの Palm OS API 関数を呼ぶことができます。Palm OS の内部に素早くアクセスする方法です。

ローカライゼーション

NSBは常に、開発時および実行時とも、ダブルバイト文字のサポートを提供していますので、アジアおよび西欧の言語を使うことができます。完全な文献は、英語、日本語、ドイツ語が用意されています。IDEは、英語、日本語、中国語、ドイツ語、スペイン語で利用できます。他の言語は、ユーザによって容易に追加できます。英語で書かれたアプリケーションは、日本語や中国語も含め、他の言語へ容易に書き換えることができます。

AFは英語のみサポートしています。

Runtime メモリー容量

Runtime コード

NSBとAFは共に、プログラムコードが収められている、1つのバイトコード ファイルを作成します。これが Runtime コードと一緒に実行されます。NS BasicのRuntimeは、現在100k 以下で、バイトコードと併せて1つの実行可能ファイルも作成できます。Runtime が別のファイルとして存在する時は、複数のNSBアプリケーションでそれを共有できます。NSB Runtimeは、デバイスにライブラリとして保存され、Applications Launcher上でもあまりスペースを取りません。

AFのRuntimeコードは、Boosterと呼ばれます。現在それは、13のオブジェクトから成り、1100k のスペースを費やします。多くのプログラムには、これら全てのオブジェクトは必要ありません。恐らく550k は余分でしょう。また、データ アクセスをするときは、更に92k を追加する必要があります。Boosterは Applications Launcher では、その名前で現れます。

アプリケーションがNS Basic/Palmで作られたかどうかは、容易には判断する方法がありません。ファイルの'hexdump'からですと、結論付けられます。最近の日本でのPalmによるコンテストでは、NS Basicプログラムによって、半分の賞が独占されました!

アプリケーション コード

AFプログラムは通常、同等なNSBプログラムより50%サイズが大きくなります。

テストおよびデバッグ

NS Basic/PalmはPalm OS Emulator (POSE)と融合しています。NSBは速いコンパイル/ダウンロード/テスト 周期を提供し、プログラムはコンパイルされると、直ぐにPOSE上で実行されます。また、コンパイルおよびデバイスへのダウンロードも1つのステップで行えます。

AFは、コンパイル/テスト オプションを持っていますが、VBのデスクトップ環境で実行されます。結果的に、多くの関数はテスト環境では問題ないが、実機上では動作しない問うことがあります。POSEは、IDEと融合していませんので、POSEに自動的に読込んで、実行することはできません。また、デバイスへのダウンロードも、別のステップです。

ライセンスおよび著作権使用料

NSBの個人ライセンスは $149.95 US です。エンタープライズ版(1つのロケーションで全てのプログラマーがライセンスを持てる)は、$449.95 US です。アップグレードは $49.95 US です。NSBで作られたアプリケーションの配付には、著作権使用料またはデバイス単位での使用料は掛かりません。

F's standard license is $1070, with an Enterprise license costing $1870. The most recent upgrade cost $495.95. There is also a royalty for each unit of $25.00 for each device you want to run on. There are also additional charges for support.

AFの標準ライセンスは$1070 US です。エンタープライズ版は$1870 です。一番最後のアップグレードは$495.95 US です。さらに、配付にはプログラムを実行するデバイス単位で$25USの著作権使用料が掛かります。また、サポートにも余分な費用が掛かります。

移行に関する情報

変数タイプ

AF、NSB 共に、ほとんどの一般的なVB Data Type をサポートしています。いくつかの違いは:
Boolean NSBには存在しない。代わりにIntegerを使用。
Long NSBには存在しない。代わりにFloat/Doubleを使用。
Currency NSBには存在しない。Dim curr as float*12,2 を使用。
Time AFには存在しない。
Float/Double AFには存在しない。
Short AFには存在しない。

プログラム コード

AF、NSB 共に、VBの関数のサブセットを実装し、いくつかの独自の関数を追加しています。NSBは112の関数を持ち、AFは102の関数を持っています。たった1つでもNSBが持っていない関数が、あなたのアプリケーションには大きく影響するかもしれません。そんな時は、ご連絡いただければ、解決するようお手伝いできると思います。

オブジェクト

NSBのオブジェクトは、ROMに収められている標準 Palm OS オブジェクトが基になっています。(AFを除いて)ほぼ全てのPalmアプリケーションは、これらのオブジェクトをユーザインターフェースとして使っており、Palmの「ルック アンド フィール」を持っています。

ほとんどの場合、 AFが持っているオブジェクトは、NSBも同等のオブジェクトを持っています。プロパティー、メソッド、イベントは異なります。NSBは、Palm OS内で実装されているオブジェクトを表示します。多くの場合、Palm OS オブジェクトは、同等のAFのオブジェクトよりシンプルです。例えば、Palm OS の Field オブジェクトは、Change イベントのみ持っています。AF の TextBox は、Click、GotFocus、LostFocus、Validateイベントを持っています。
Alarm サポートされている。NSBSystemLibのAlarm機能を使用。
Button サポートされている
Checkbox サポートされている
ClientSocket サポートされている。TcpIPLibを使用。
ComboBox サポートされている
DatePicker サポートされている。PopUpDate関数を使用。
FilmStrop サポートされていない
FormSlider サポートされていない
Graphic サポートされている。Bitmapオブジェクトを使用。
GraphicButton サポートされている。Bitmapオブジェクトを使用。
Grid サポートされている
HScrollbar サポートされている
INetHTTP サポートされている。TcpIPLibを使用。
Label サポートされている
ListBox サポートされている
Movie サポートされていない
OwnerDrawGrid サポートされていない。 mizuno-amiさんのノートを参照。
RadioButton サポートされていない。 RadioButtonsは、Palmユーザーインターフェースの標準のオブジェクトではありません。NSBはPushボタンをサポートしており、これを使う方が推薦されています。
Scanner サポートされている。NSBSymbolLibを使用。
Serial サポートされている。言語に組込まれている。
Shape サポートされている。Drawステートメントを使用。
SignatureCapture サポートされている。Gadgetオブジェクトを使用。
Slider サポートされている。ScrollBarオブジェクトを使用。
SoundFX サポートされていない
SoundTrack サポートされていない
SpriteField サポートされていない
SpriteTemplate サポートされていない
TextBox サポートされている。Fieldオブジェクトを使用。
TimePicker サポートされている。PopUpTime関数を使用。
Timer サポートされている。NSBSystemLibのAlarm機能を使用。
Tone サポートされている。Soundステートメントを使用。
UpDown サポートされている。ScrollBarオブジェクトを使用。
VScrollBar サポートされている。ScrollBarオブジェクトを使用。
Widget サポートされていない

また、NSBは以下の標準 Palm OS オブジェクトを持っています。AFはこれらをもっていません。
Gadget 姿が見えないオブジェクト
PopUp 標準 Palm OS popup オブジェクト
Repeater 押された時に、連続的にイベントが起こるボタン
Selector 特殊ポップアップを表示するボタン
Shift Indicator Grafittiキーボードが"shift"モードの時に表示される

カラー

カラー処理に関して、AFとNSBはとても異なったアプローチをしています。カラーサポートは、オリジナルのPalm OSには入っていませんでした。いつかされた時、カラーパレットを実装する形で、フォーム上の全てのオブジェクトに適用されました。例えば、ObjectFrameプロパティを赤にセットすると、その時点から描画されるオブジェクトは赤いフレームを持つことを意味します。

AFは独自のオブジェクトを実装していたため、各オブジェクト毎にカラーを制御できます。

NS Basicからカラーパレットを制御する方法は、 TechNote04TechNote13に書かれています。

データベース

Palm OSは、Palm Database (PDB)と呼ばれる、単純ですが効果的なファイルシステムを持っています。NSBを使うと、直接Palmのデータベース フォーマットを読み書きできます。呼び易くするため、関数はラッパーに入れられています。基本的に全てのPalmデータベース フォーマットが使用可能で、(レイアウトが分っていれば)他のアプリケーションで作成されたデータベースも使えます。

AFは高レベルなアプローチをしています。IDEでデータベース スキーマを定義しなければなりません。これはある作業を簡単にしますが、自在性も減少します。NSBは、ほぼ全てのAFのPDBコマンドと同等のものを持っています。

ソートされたデータベース

Palm OS Database モデルは、ソートされているものと、ソートされていないデータベースをサポートしています。ソートされているデータベースを持っている場合、データの検索はほぼ一瞬です。データがソートされていない場合、データを探すのに、恥から順に見ていかなければなりません。これは、大きなデータベースには実用的ではありません。

NSBでは、ソート順を保ちながら、データベースにレコードを追加できます。新しいレコードは直ぐに見つけられます。

コンジット

AFはAppforge Universal Conduitと呼ばれる標準コンジットを持っています。実際は"Universal"ではなく、ODBCを認識するデスクトップデータベースとAFフォーマットのPalmデータベース間のコンジットを作ります。

NS Basic/Palmは独自のコンジットを持っていません。代わりに、Palm OS用に利用可能な多くのサードパーティのコンジットを使い易くしています。これはNS Basicユーザにとって、より幅の広いデータベースとファイルシステムをターゲットにでき、Palmデータベースの構築に当たり、より自在性を持つことができます。NS Basicで使えるコンジットの一覧を参考にして下さい。

ソートされたデータベース

ここには実際にNS Basicへ移行された方からの情報が記載されています。他にテクニック等をお持ちの方はnipponsupport© nsbasic.comへメールをお送り下さい。

NSBでフィールドコントロールの有効/無効の仕方

Oscar De Leon による寄稿

時にフィールドオブジェクトを有効にしたり無効にしたりすることが必要になります。例えば、私は「Orders」アプリケーションを持っています。この中で、ユーザーが個人データを入力するのに同じフォームを使い、注文が作成され表示されます。後でOrders PDBをデスクトップへバックアップする際、レコードフィールド用のビットをセットし、このレコードが変更できないようにしています。

これによって、一旦HotSyncが行われると、デバイス上でデータの保存ができ、さらに変更不可能な状態を保てます。

Editableプロパティはデザイン時プロパティですので、フィールドを有効/無効に切り替えて使うことができません。しかし、NSBSystemLibを使うと、私の必要なほぼ全てのもの(NSBでは実装されていない)が提供されています。以下がコードです。

 
In the Start Up code section, reference the library:
 
    LoadLibrary "NSBSystemLib", "NSL"
 
In a code module, create this sub:
 
Sub EnableField(objID as Integer, Enable as Integer)
 
    Dim nAttr as Integer
    nAttr = NSL.FieldGetAttributes(objID)
    nAttr = NSL.SetBitValue(nAttr, 13, Enable)     'Bit 13 = Editable Flag.
    NSL.FieldSetAttrbutes(objID, nAttr)
 
End Sub
 
For example, if you have Field objects Field1010 and Field1020, 
to enable or disable any of them, just call:

 
EnableField(1010, True)
EnableField(1020, 1)
 
or
 
EnableField(1010, False)
EnableField(1020, 0)


どこでこのSubを呼ぶかに係わらず(Form_Afterコードの前か後)、REDRAWを呼んで、コントロールを再描画し、カーソルをON/OFFして下さい。

TechNote 14にFieldGetAttributes、FieldSetAttributes、SetBitValueの説明が書かれています。

Public および Global 変数

Mike Trainor による寄稿

AppForgeでは、どこでも有効な変数をPublicと定義しますが、NSBでは同様のことをGlobalと定義します。


NS BASIC Corporation

会社概要

NS BASIC Corporationは、1993年から携帯デバイス用の開発ツールを作ってきました。各ジェネレーションの携帯デバイスは、プログラムするための強力な低レベルのツールをリリースしてきました。これらは、プロフェッショナル プログラマーには最適ですが、多くの人は高レベルで、作業が簡単なツールを必要としています。

弊社のツールは常にBASIC(もっとも頻繁に使われているプログラミング言語)を基に作られています。 ほぼ全てのプログラマーはBASIC言語に精通しているでしょう。常に、AポイントからBポイントへ動くための信頼のおけるものです。また、習得も容易で、新しいプログラマーや、溝を空けてしまった復活プログラマーに最適です。

NS Basic/Palm(2000年にリリース)は、弊社の唯一の開発ツールではありません。Windows CE や Pocket PC デバイス用のNS Basic/CEがその姉妹品です。さらにNS Basic/NewtonおよびNewtcard(生産中止になったNewton用のHypercardに似た製品)も弊社の製品です。

弊社の全ての製品には、印刷された簡潔なドキュメントが同梱されています。製品には、定期的なアップデートと共に、サポートが完備されています。 サポートは直接コンタクトできるメール(nipponsupport© nsbasic.com)でのサービスと、Yahoo Groupsの活気のある掲示板があります。