2000.11.24 1.MIDP仕様調査メモ 前書き  ・レヴィジョン経緯  ・仕様の対象読者  ・仕様書の構成  ・関連文献   ・Java言語仕様   ・JVM仕様   ・CLDC仕様 1章 導入と背景  1.1.導入   ・MID応用開発用アーキテクチャーとAPIの定義  1.2.背景  1.3.注記   1.3.1.用語の定義   1.3.2.字体の定義 2章 要求と範囲  2.1.要求   2.1.1.ハードウェア   ・表示    ・画面サイズ 96×54    ・画面深さ  1ビット    ・ピクセルの形 ほぼ1:1   ・入力(片手又は両手キーボード、タッチ画面)   ・メモリー    ・不揮発性 128kB(MIDPシステム用)    ・不揮発性 8kB(応用プログラム用)    ・揮発性  32kB(Javaヒープ用)  ※MIDの例 携帯電話、PHS、PDA   2.1.2.ソフトウェア   ・最小カーネルによる管理   ・「永続的記憶」のサポート(不揮発性メモリへの入出力)   ・「ネットワーク接続」のサポート(ワイアレス接続による入出力)   ・「タイマー」のサポート   ・ビットマップ描画の表示能力   ・入力装置によるユーザ入力能力   ・デバイス管理能力  2.2.範囲  ・ここで取り扱うAPI   ・応用   ・UI(画面、入力)   ・永続的記憶   ・ネットワーク接続   ・タイマー  ・ここで取り扱わないAPI   ・システムレベルAPI   ・応用配布と管理   ・低レベルセキュリティ(CLDCに含まれないもの)   ・応用レベルセキュリティ(CLDCに含まれないもの)   ・エンドツーエンドセキュリティ 3章アーキテクチャ  3.1.概要  3.2.アーキテクチャ   ・MIDP APIは、CLDC層の上にくる。また、CLDC層の上には、    OEMに特化したAPIもくる。   ・MID応用のタイプ    ・MIDP型ーーーMIDP/CLDC仕様にあるAPIのクラスのみ使用    ・OEM−特化型ーーー上記以外のクラスも使用    ・ネーティブ型ーーーネーティブコードを使用
2000.11.28 4章 システム機能  4.1.MIDPはCLDCに基ずく。  4.2.システムプロパティ   locale、profiles 5章 Timers  5.1.タイマの設定と応用プログラムへの通知  5.2.タイマによる   ・1回の実行   ・一定時間隔による実行 6章 ネットワーク接続  6.1 プロトコル   (TCP/IP、WAP、i-mode、ゲートウェイを経由した)HTTP   CLDCのGenericConnectionのサポート   ・クライアント   ・サーバ   Non-IP Transport   Non-IP Stack--->ゲートウェイ--->Web サーバ  6.2 HttpConnection   API:javax.microedition.io.HttpConnection   HTTP1.1のサポート  6.2.1 HTTPリクエストヘッダ   ・ユーザエージェントレクエストヘッダ    ユーザエージェントは、使用中のデバイスを識別するのに    使われる。   ・使用されるシステムプロパティ    profiles:例 ”MIDP-1.0”    configuration:例 ”CLDC-1.0”    locale:例 ”en-US”  6.3 DatagramConnection   データグラム API/プロトコルはCLDCのGenericConnectionフレームワーク   を使う。 7章 永続的記憶  7.1.Record Manager System(RMS)の利用  7.2.記録の格納(MIDlet)  7.3.Recordsは、バイト列。    ・クラス名:     DataInputStream     DataOutputStream     ByteArrayInputStream     ByteArrayOutputStream    ・recordIDは、1,2,3,... 8章 応用  8.1 MIDlet  8.2 MIDP MIDlet Suite    ・実行時実行環境    ・MIDlet Suite パッケージ化    ・応用記述子    ・応用ライフサイクル   ・応用MIDletクラスは、クラスMIDletを拡張する。   ・共有データ、情報の制御(例、RMS等)  8.3 MIDP実行環境   MIDlet実行時に利用する応用管理ソフト   ・CLDCを実装するクラスとネーティブコード(JVMを含む)   ・MIDPランタイムを実装するクラスとネーティブコード   ・実行のためJARファイルに含まれるすべてのクラス   ・資源としてJARファイルに含まれるクラス以外のファイル   ・記述子ファイルの内容   CLDCとJVMは、マルチスレッド、ロック、同期化、バイトコード実行、   メソッド提供を行う。     MIDPは、MIDP APIを実装するクラスを与える。   一つのJARファイルにすべてのMIDletクラスを含むMIDletクラスは、   同じJARファイルの中の任意のクラス、MIDP API及びCLDC APIの   メソッドをロードし、呼び出して実行できる。   MIDlet記述子は、MIDletクラスのgetAppPropertyメソッドを通じて   利用される。
2000.11.29  8.4.MIDlet Suiteのパッケージ化   MIDletの集まりは、   ・内容を記述するマニフェストファイル   ・MIDletに利用されるクラスファイル   ・MIDletに利用されるリソースファイル   を含む単一のJARファイルでパッケージ化される。   JARマニフェストは、応用管理ソフトの属性を定義する。属性は、   マニフェストと応用記述子の両者用に定義される。  8.4.1.JARマニフェスト   マニフェストが含まねばならない属性   ・MIDlet-Name   ・MIDlet-Version   ・MIDlet-Vendor   ・MIDlet- 各MIDletに対して   ・MicroEdition-Profile   ・MicroEdition-Configuration   マニフェストが含んでもよい属性   ・MIDlet-Description   ・MIDlet-Icon   ・MIDlet-Info-URL   ・MIDlet-Data-Size  8.5.応用記述子   ・ファイル拡張子:jad。   ・MIME型:text/vnd.sun.j2me.app-descriptor   マニフェストファイルと異なる項目はjadが上書きする。  8.6.応用ライフサイクル   MIDletからSystem.exitを呼んではいけない。これを呼ぶと   SecurityExceptionが出る。 9章 ユーザーインターフェース  9.1.UIの条件   ・素人にも有用であること。   ・片手でも操作可能であること。   ・形状やUIが特殊であること。   ・応用がネーティブから容易に起動可であること。  9.2.MIDP UI APIの構造   高度API(高度抽象化されたAPI)   ・実装によるMIDディスプレイの表示   ・ナビゲーション、スクロールのようなプリミティブ対話    は、カプセル化され応用からは見えない。   ・応用は特定のキーへは、アクセスできない。   低度API---これを用いることで、   ・ディスプレイ上での完全な描画   ・キーのプレス、リリースのような原始的イベントの反応   ・具体的なキーや他の入力デバイスへのアクセス   が可能となる。   低度APIを使うとポータビリティが悪くなる。
2000.11.30  9.2.1.クラス階層   MIDPのUIの一番の抽象化はスクリーンである。   スクリーンのカテゴリ   ・カプセル化されたUI成分(クラス List、TextBox)   ・一般的スクリーン(クラス Form)    応用が貼り付けるテキスト、イメージ関連UI成分。   ・低レベルAPIのコンテキストで使われるスクリーン    (クラスCanvasのサブクラス)   ※Canvas以外の各スクリーンにTickerを添付できる。  9.2.2.クラスの概要(javax.microedition.lcdui)   確定した構造の利用   ・List:リストからの選択   ・TextBox:テキスト入力   ・Alert:テキストや画像を含む一時的なメッセージ表示   ・Form:確定していない構造   ・Item:これは、サブクラスImageItem、StringItem、    TextField、ChoiceGroup、Gaugeを含み、Formに格納して    用いる。  9.2.3.  9.3.イベント処理   コールバックによる応用へのイベントの通知   4種類のUIコールバック   ・高度APIの一部の抽象コマンド   ・単一のキープレス、リリース(ポインタが利用できる    ときは、ポインタイベント)をあらわす低レベルイベント。   ・Canvasクラスのpaint()メソッド呼び出し   ・Displayクラスのcallserially()メソッド呼び出しによって    要求されるrun()メソッド(Runnable)呼び出し。  9.3.1.抽象コマンド   コマンドは、クラスDisplayableのメソッドaddCommandによって   インストールされる。   コマンドオブジェクトの3つのコンストラクタパラメータ   ・Label-----ユーザへのヒント   ・CommandType----コマンドの意味   ・Priority----デバイス能力への対応  9.3.2.イベント用高レベルAPI   インタフェースCommandListener、ItemStateListenerの実装  9.3.3.イベント用低レベルAPI   低レベルグラフィックとイベント用メソッド   public void keyPressed(int keyCode);   public void keyReleased(int keyCode);   public void keyRepeated(int keyCode);  9.3.4.高レベルコマンドと低レベルAPIの相互作用  9.4.低レベルAPIにおけるグラフィックスとテキスト  9.4.1.repaint  9.4.2.描画モデル  9.4.3.座標システム(使えないデバイスもある。)  9.4.4.フォントサポート   ・Size: SMALL MEDIUM LARGE   ・Face:PROPORTIONAL MONOSPACE SYSTEM   ・Style:PLAIN、BOLD ITALIC UNDERLINED  9.4.5.テキストと画像の描画   Anchor pointによるテキストの配置  9.5.同時性に関する注意  9.6.実装時注意
2000.12.1 MIDP調査口頭報告 次回への課題  ・CLDCとMIDPの関係  ・http接続についてストリームが切れた時の振る舞い  ・メモリセキュリティについて  ・メモリアクセスの方法   (可変長エントリが何個書ける?容量は最低いくら?)  ・プログラムのダウンロードの仕方  ・アプリケーションとMIDletの違い  ・複数のMIDletは可能か  ・タイマの動作原理は  ・RecordStoreでなぜ、RecordListenerを実装するのか 更なる以下仕様調査  ・CLDC仕様  ・i-mode仕様 SUNのMIDPチュートリアルも参照
2000.12.5 CLDC仕様調査メモ 1.導入 要求概要  ・トータルメモリ160KB〜512KB  ・16〜32bitプロセッサ  ・低消費電力、電池駆動  ・ネットワーク接続(無線も可) コンフィグレーション仕様とは、  小型でネットワークに接続された装置 に関する  ・JAVA言語仕様  ・JAVA仮想マシン仕様  ・コアライブラリ  ・入出力  ・ネットワーク接続  ・セキュリティ についての記述である。  ※MIDP仕様は、アプリケーションのための   アーキテクチャとAPIの定義で上記に加え   さらに応用(MIDlet)、UserInterface、   RecordManagementSystemを含む。 2.2.要求  2.2.1.ハードウェア要求  メモリ要求  ・不揮発性メモリ 128KB(JVM、CLDCライブラリ用)  ・揮発性メモリ 32KB以上(オブジェクト用)  2.2.2.ソフトウェア要求  最小のホストOSを仮定  2.2.3.J2ME要求   2.3.範囲  CLDC  ・JAVA言語仕様  ・JAVA仮想マシン仕様  ・コアライブラリ(java.lang.*、java.util.*)  ・入出力  ・ネットワーク接続  ・セキュリティ  ・国際化  MIDPに関する項目  ・応用ライフサイクル管理(応用のインストール、起動、廃棄)  ・UIの機能性  ・イベント処理  ・高レベル応用モデル 3.高レベルアーキテクチャとセキュリティ  3.4.1.低レベル仮想マシンセキュリティ   VMで動く応用はデバイスに有害であってはならない。   Java classfile verifierを使う。   これは、JVMにロードされたクラスファイルがJVMに違反した   やり方で、実行されないことを保証するもの。  3,4,2,応用レベルセキュリティ   外部資源(ファイルシステム、プリンタ、ネットワーク等)へ   のセキュリティのこと。   ここでは、J2SEに比べ簡易な方法をとる  3.4.2.1.砂場モデル  ・クラスファイルがベリファイされていること。  ・CLDC、プロファイル又はライセンスを受けた公開されたクラスの   JavaAPIのみ使用。  ・応用のダウンロード、管理は、VM内のネイティブコード   レベルで行われ、ユーザが書き換えたクラスローダは使えない。  ・VMにアクセスするネイティブ関数は、すべて作れない。  3.4.2.2.システムクラスの保護    3.4.2.3.多重Java応用同時実行のサポート 4.Java言語仕様の比較 5.JavaVM仕様の比較  5.1.浮動少数点の非サポート  5.2.ライブラリの変更とセキュリティの理由でサポートされない点  ・JNI  ・クラスローダ(ユーザ定義)  ・リフレクション  ・スレッドグループとデーモンスレッド  ・終了処理(finarization)  ・弱参照  ・エラー処理の制限
2000.12.6 6.CLDCライブラリ  6.3.CLDCに特徴的なクラス  6.3.1.データグラム及びストリームを基礎とした接続  6.3.2.一般接続フレームワーク   一般形    クラスConnectorによる接続の生成  6.3.4.一般接続フレームワークの構成  ・インターフェースConnection  ・インターフェースInputConnection  ・インターフェースOutputConnection  ・インターフェースStreamConnection  ・インターフェースContentConnection  ・インターフェースStreamConnectionNotifier  ・インターフェースDatagramConnection MIDPプログラム入門  デバイス環境  キー:   ソフトボタン:左右の傾いたキーでコマンドイベントを送る。   コントロールキー:緑と赤の受話器のアイコンのついたキーで             赤の方は、destroyApp()をコールする。   ナビゲーションキー:矢印又はドットのついたキー   アルファベット数字キー:   #キー:大文字、小文字、記号の入れ替え用   *キー:直前の消去キー
2000.12.7 先週の課題の調査 1.CLDCとMIDPの関係  ・CLDCは、小型でネットワーク接続のみを仮定したプラットフォーム全般を表 し、   又、最小限度のAPIが与えられる。  ・MIDPは、CLDCのAPIに加えモバイルに特化したAPIの部分を表し、それらはUI、    MIDlet、永続的記録 に関するAPIである。 2.http接続についてストリームが切れた時の振る舞い  i-modeで調査中。MIDP仕様には記述なし。プロトコルに依存?(IP、 i-mode...) 3.メモリセキュリティについて  (CLDC-3.4セキュリティ、参照)  低レベル仮想マシンセキュリティ   VMで動く応用はデバイスに有害であってはならない。   Java classfile verifierを使う。   これは、JVMにロードされたクラスファイルがJVMに違反した   やり方で、実行されないことを保証するもの。    応用レベルセキュリティによるセキュリティ  (1)砂場モデル  ・クラスファイルがベリファイされていること。  ・CLDC、プロファイル又はライセンスを受けた公開されたクラスの   JavaAPIのみ使用。  ・応用のダウンロード、管理は、VM内のネイティブコード   レベルで行われ、ユーザが書き換えたクラスローダは使えない。  ・VMにアクセスするネイティブ関数は、すべて作れない。  (2)システムクラスの書き換えができないことが保証されている。   以上のように応用は、VMを経由したメモリアクセス以外の直接アクセス   が禁止されているので、メモリにあるデータが盗まれることがない。   但し、CLDC-3.4.2.3のようにMIDletの多重同時実行のサポートしているので、   MIDlet間でメモリ共有は可能。 4.メモリアクセスの方法   (可変長エントリが何個書ける?容量は最低いくら?)   各レコードエントリには、1,2,3,...と整数のレコードIDが与えられ   その全個数は、バイト総数が永続的データ用デバイスの容量(8KB以上)   を超えない範囲と言うことになる。   アクセス法は、RecordStoreクラスのメソッド 5.プログラムのダウンロードの仕方  ダウンロードの仕方までは、規定していない。P.68にあるようにインストール  やアップデートを行うには、アプリケーション記述子(jad)とJARファイルを  見て行うとだけ書いてある。  i-modeの仕様には、まずブラウザ上のHTMLからアプリケーション記述子を参照  してそれを読み、その情報からアプリケーション管理ソフトでMIDletを選択  した後でそのMIDletをダウンロードし格納する、とある。  6.アプリケーションとMIDletの違い  P.27を参照。アプリケーションには、区分がある。 7.複数のMIDletは可能か  CLDC-3.4.2.3多重同時実行のサポート。多重VM等による。  但し、デバイスがサポートしている必要がある。 8.タイマの動作原理は  P.77、メソッドObject.wait()を利用したタスクスケジュール管理なので  リアルタイム性は保証されない。   9.RecordStoreでなぜ、RecordListenerを実装するのか  RecordListenerは、RecordStoreの変更/追加/削除イベントを受信する  リスナーで実装することで、変更/追加/削除イベントが起こったときに  実行させたい処理を記述できる。
2000.12.8 iモード対応Java1.0仕様のメモ 1章 はじめに   J2MECLDCのサポート  1.2.Java Application Manager   ・ダウンロードされたJavaアプリケーションのリスト表示する。   ・実行管理(起動、強制終了)   ・Javaアプリケーションのインストール、更新。   ・Javaアプリケーションの削除。 2章 iモードJavaアプリケーション環境   ・ネイティブアプリケーション   ・Java Application Manager(JAM)   ・iモードJava拡張API   ・KVM   ・CLDC API   ・メーカ拡張 API   ・JARファイル用ストーレッジ   ・ScratchPad 3章 設計上の考慮事項  3.2.メモリの問題   メモリの制限   ・アプリケーションのJARファイルサイズ:MAX.10KB   ・ScratchPad:MAX.5KB   コンパイル時に-g:noneオプションをつけ、デバッグ情報を除くことで   サイズを小さくできる。  3.3.GUIの設計   ・一貫したlook&feelの維持   ・UIコンポーネントの数を最小限に減らす。   ・UIレイアウトのシンプル化   ・スクロールの最小化   ・ソフトキーの活用   ・テキスト入力を減らし、選択肢を多用する。   ・よく使われる操作を簡単にできるよう画面構成を設計します。  3.4.セキュリティ   HTTPSプロトコルが利用可能。  3.5.無線ネットワーク  3.6.処理の中断と再開   音声通話着信によるアプリケーションの中断と   IApplicationのresume()メソッドによる再開  3.7.ハードウェアのアクセス  3.8.エラー処理   エラーや例外をスローし、メッセージを提示。
2000.12.12 4章 ユーザインタフェースの設計  基本機能   ・高レベルUIインターフェース部品(コンポーネント)の作成(ボタン、ラベ ル)  ・イベント処理  ・レイアウト処理  ・画像ファイルの表示、音声ファイルの再生機能  4.1.高レベルUIコンポーネントによるプログラミング    4.1.1.Panelの使用    UI部品のシンプルなコンテナ    パネルは、画面上1つのみ   4.1.2.Dialogの使用    テキストメッセージの表示    ・情報    ・警告    ・エラー    ・Yes/No    ・Yes/No/Cancel   4.1.3.コンポーネントの使用    以下Panel上の7つの基本UIコンポーネントの提供    ・Label    ・ImageLabel    ・Button    ・ListBox    ・TextBox    ・Ticker    ・VisualPresenter   4.1.4.コンポーネントの配置    コンポーネントの配置をレイアウトマネジャーによって決定できる。    特定のピクセル位置に配置するには、ComponentクラスのsetLocation()    メソッドを用いる。   4.1.5.フォーカスとスクロール   4.1.6.高レベルイベントの処理    コンポーネントによって発生されたイベントは、ComponentListenerを    実装したオブジェクトのcompopnentAction()メソッドに渡される。    ソフトキーイベントは、SoftKeyListenerを実装したオブジェクトの    softKeyPressed()または、softKeyReleased()メソッドに渡される。  4.2.低レベルAPIによるプログラミング   4.2.1.Canvasの使用    CanvasもPanelと同様一つの画面であって、一度に一つのみ表示可能。    描画は、paintメソッドのオーバーライドによる。   4.2.2.グラフィックスの描画    lock、unlockメソッドによりダブルバッファリングがサポートできる。   4.2.3.カラーサポート    色を表す整数値を得るには、Graphics.getColorOf*メソッドを用いる。   4.2.4.低レベルイベントの処理    processEventメソッドのオーバーライドによる。eventに応じて    引数にイベントタイプとパラメータが渡される。  4.3.イベントリスナー   4.3.1.ComponentListener   4.3.2.SoftKeyListener   4.3.3.KeyListener   4.3.4.MediaListener   4.3.5.TimerListener  4.4.マルチメイアデータの使用   GIF形式の画像ファイルの表示とiメロディ形式の音声ファイルの再生に   対応。
2000.12.13 5章 通信の制御 通信プロトコルHTTP、HTTPSのサポート  5.1.クライアント/サーバプログラミング   URLとの接続手順   ・Connector.open()メソッドで接続オブジェクトの呼び出して、    オープンモードとリクエストメソッドの対応   ・リクエストメソッドとリクエストヘッダの設定   ・HttpConnection.openOutputStream()を呼び出して、出力ストリーム    の取得   ・OutputStream.write()    ・OutputStream.close()   ・HttpConnection.connect()   ・InputStream.read()   ・InputStream.close()   ・HttpConnection.close()  5.2.セッション管理  5.3.HTTPSによる安全な通信 6章 テキスト処理  日本語コードにSJISを採用。  6.1.テキスト処理   ストリーム変換   SJISバイトストリーム--->InputStreamReader--->Unicode文字ストリーム   Unicode文字ストリーム--->OutputStreamWriter--->SJISバイトストリーム  6.2.グラフィックス文字   絵文字(iモード用外字セット)コード表(SJIS及びUnicodeの対応表) 7章 ScratchPadとりソースの利用  HTTP通信と同様にGeneric Connectionフレームワークを使用したアクセス  7.1.アクセスには、ローカルホストを示すURLを記述し、オープンする。   例:Connector.openOutputStream("scratchpad:///0");  7.2.リソースの読み取り 8章 ハードウェアのアクセス  バックライトのオン、オフをアプリケーションから行える。 9章 アプリケーションの開発  MIDPとほぼ同様である。 10章 アプリケーションの配布  MIDPとほぼ同様である。HTMLブラウザから、ADFファイルを参照し ダウンロードして、アプリケーションの情報を取得する。