ezplusことはじめ


Last Updated 2004.1.4


ezplusことはじめ

(名称変更について)(2003.8.16追加)
ezplusの名称が、現在「ezアプリ(Java)」になっていますので、
以下の文章内の「ezplus」は「ezアプリ(Java)」に読み替えてください(^^;)

(はじめに)

2001年8月2日(前後)に、KDDIより、ezplusの開発キットである「KJX作成ツール」が
公開されました。
で、やっとこさ(8/14)、まだ動くかどうかはわからないのですけど、
ひとまずezplusのKJXファイルをダウンロードできるまでの環境を作れましたので、
その手順なりを書こうかと思います。
(2001/8/16加筆:修正した分で、動作しているようです)

なお、Java,MIDP,ezplusを総合的に説明しているページが出来てますので、
そちらを参照にしたほうがいいかも(^^;)
↓です。
ezplus対応アプリの作成について

こちさんのサイト、移転しました。↓です。
THROUGH THE LOOKING FOR GRASS(T.L.G)

ezplus関連でいろいろ有用な情報のある掲示板は↓です。
PEACE

初心者の方や、ezplus作成ツールのインストールを失敗した方は、
ezplus開発をはじめる方へ
を参照してみてください。

(1)まずはファイルをダウンロード
(2)インストールしよっ
(3)さっそくコンパイルしてみましょう
(4)エミュレーションはどうしよう?
(5)ダウンロードCGI
(6)とりあえず(2001/8/16)
(7)MIDPいろいろ(2001/8/25)
(8)ezナビゲーション(2001/9/8)
(9)タイマが変?(2001/9/8)
(10)RecordStoreあれこれ(2001/9/16)
(11)ezweb着音作成(2001/9/16)
(12)ピングー、もといPNGあれこれ(2001/10/8)
(13)メディアプレイヤーの使い方(2001/10/8)
(14)フリーMidletのkjx変換方法(2001/10/8)
(15)MIDPのゲームライブラリ(2001/10/27)
(16)iモードページをezwebページに(2001/10/27)
(17)kjxファイルから、.javaや、リソースファイルを復元(2001/12/2)
(18)ezナビゲーション再び(2001/12/2)
(19)ルパンで四苦八苦(2001/12/8)
(20)GPSの隠し(?)API(2001/12/16)
(21)音量調整の怪(2002/1/5)
(22)GPSの拡張情報いろいろ(2002/1/5)
(23)ストレージデータが消えない?(C3001H)(2002/1/13)
(24)Beep音再生命令(2002/1/13)
(25)固定小数点ライブラリ(2002/1/13)
(26)MySync(2002/1/20)
(27)測地系(2002/1/20)
(28)C3001Hの新たなバグ?(2002/1/27)
(29)フルカラーPNG(2002/1/27)
(30)地図サイトいろいろ(2002/2/11)
(31)データストレージが残る件(2002/2/11)
(32)CGIでGPS測位(for C3001H)(2002/2/11)
(33)隠し(?)API動かず(T_T)(2002/2/11)
(34)キーマッピングの違い(2002/2/24)
(35)ストレージデータが消えない2(C3001H)(2002/2/24)
(36)着メロ連続再生(2002/2/24)
(37)なんとなく絵文字(2002/2/24)
(38)巨大画像(2002/3/10)
(39)cgiでGPS測位2(2002/4/6)
(40)MySync Ver2.0(2002/4/6)
(41)BannerMail for Phase2(2002/4/6)
(42)ストップウォッチの作り方(2002/4/13)
(43)Phase1の機種で位置情報(2002/4/13)
(44)Vendor項目の差(2002/4/14)
(45)位置情報いろいろ(2002/5/4)
(46)機種依存のまとめ(2002/5/4)
(47)JAD項目の機種依存(2002/5/19)
(48)リビルドしてもKJXが変わらない?(2002/5/19)
(49)いろいろリンク(2002/5/19)
(50)ezplusエミュレータ(2002/5/19)
(51)改行の問題(2002/5/19)
(52)高度がマイナス?(2002/5/19)
(53)repaintのタイミング(2002/6/23)
(54)iもどき(2002/6/23)
(55)ソニエリな携帯(2002/6/23)
(56)ezplusのUnix風開発環境構築の方法(2002/7/7)
(57)GPS位置情報取得アプリ(2002/7/7)
(58)CGIで位置情報取得3(2002/7/7)
(59)HDMLのリンク(2002/7/7)
(60)iアプリからの移植(2002/7/7)
(61)JAD項目の機種依存2(2002/8/4)
(62)GPSの解説(2002/8/4)
(63)ヒープメモリ(2002/8/14)
(64)MathFPインストール(2002/8/24)
(65)白ROMいろいろ(2002/9/22)
(66)同時押し検出(2002/9/22)
(67)簡単(?)移植方法(2002/9/22)
(68)「データストレージが確保できません」(2002/9/22)
(69)「/」の怪(2002/10/12)
(70)objectタグでのダウンロード方法(2002/10/12)
(71)fillPolygonの代替(2002/10/12)
(72)MIDlet-X-AllowURL-1(2002/10/12)
(73)kjxをダウンロード(2002/11/3)
(74)startAppの利用方法(2002/12/23)
(75)Phase2.5のPhrasePlayer(2002/12/23)
(76)クリアキー問題(2003/1/11)
(77)mmfが鳴らない?(2003/1/11)
(78)JDK1.4でezplus開発環境を使う(2003/1/11)
(79)A5303Hの透過問題(2003/1/11)
(80)データフォルダのデータ取得(2003/1/11)
(81)機種ごとの振り分け(2003/4/30)
(82)kjxファイルの作り方(その1)(2003/9/15)
(83)kjxファイルの作り方(その2)(2003/11/3)
(84)A5404Sの機種依存(2003/12/7)
(85)今さらphase2.5(^^;)(2004/1/4)

(1)まずはダウンロード(2001/8/14)
(2002.5.19修正)
まずは、開発環境をダウンロードしないといけません。
ひとまず、必要なものは、

1)Java2 Standard Edition
http://java.sun.com/j2se/
2)Java2 Micro Edition(J2ME) Wireless Toolkit
http://java.sun.com/products/j2metoolkit/
3) ezplus開発キット(New!)
http://www.au.kddi.com/ezfactory/tec/spec/ezplus_kit.html
4)ezplusプログラミングガイド
http://www.au.kddi.com/ezfactory/tec/spec/ezplus.html
です。

それ以外の情報は、ezweb on the streetに書いてあります。

5)ezweb on the street
http://www.au.kddi.com/ezfactory/index.html
(10/27加筆)なお、ezweb on the streetに、ezplusの作り方の説明と、サンプルゲームが置いてあります。
      参考までに。
(12/2加筆)ezplusのSDK、Ver2.0になりました。http通信や、メール送信機能など使えます。ただし、新機種から(^^;)
(2002.5.19修正)リンクなど変わりました。

本当は、他もいるのですが、それは後ほど。
(2)インストールしよっ(2001/8/14)
(2002.5.19修正)
(1)で、あらいざらいダウンロードしてきたら、インストールをします。
順番的には、

1)J2SE
2)J2ME Wireless Toolkit
3)ezplus開発キット(New!)

です。
なお、くれぐれも、J2SE,J2ME Wireless Toolkit,KJX作成ツールは、「デフォルトディレクトリ(フォルダ)」に
インストールするようにしましょう。
変に変えてしまうと、KJX作成ツールのドキュメント(PDFファイルになってる)を読みながら、設定するとき、
けっこう面倒なので。

1)、2)は、おそらく何も考えなくても、すんなりインストールができるのではと思います。

3)は、ちょっと面倒です。
・・・ezplus開発キットになってから非常に楽になっています。(2002.5.19)
   以下の事をしなくても、自動的にメニューにショートカットを作ってくれるように
   なりました。
----------------------------------(旧)----------------------------------------

まず、3)は、自己解凍ファイルとなっていますので、実行して適当なフォルダに解凍します。
解凍すると

[KJX_toolkit_Ver1_0]
    [Doc]
    [Tools]
       [Dir1]
       [Dir2]

のようにディレクトリつき展開されます。
解凍したら、[Doc]フォルダにある、KJX_Tool_Users_Guide_Ver1_0.pdfを読みます。
おそらく、Acrobat Readerをお持ちでない方はいないかとは思いますけど(^^;)、ない方は、それもダウンロードして
ください。Adobe社のHPにてダウンロードできます。

ここに書かれているとおりに、インストール&設定すれば、ひとまずは完了です。
(設定が面倒なんですけどね(^^;)・・・ま、全部書いてあるので、ちゃんと読めばできます。)

(便利に使うために)

(1)CmdTool.batのショートカット

CmdTool.batのショートカットは、すぐに使えるようにデスクトップとかに張っておきましょう。

なお、このCmdTool.batは、バッチファイルなので、MS-DOSプロンプトが出ます。
で、終わるとき、標準ではMS-DOSプロンプトが出たままになります。
いちいち、それを閉じるのもナンセンスなので、設定を変えることにします。
設定方法は以下のとおり

1)ショートカットを右クリックします。
2)プロパティを出します。
3)ダイアログが出てくるので、「プログラム」タブをクリックし、「終了時にウィンドウを閉じる」
 チェックボックスをONにし、[OK]を押します。

(2)Projectsのショートカット

C:\ezplus_sdk\Projects\ 下に、各プロジェクト(プログラム関連もろもろ)が入れられることになるので、
これもショートカットを作っておきましょう。
ま、これは、別になくても、エクスプローラで開いても問題ないんだけど。

(3)さっそくコンパイルしてみましょう。
環境も整ったことだし、コンパイルしてみよう・・・と思っても、肝心のソースがない。
まさかiアプリのファイルをそのまま叩き込んでも動かないだろうし(^^;)
ということで、MIDP関連のHPから、参考になるものをダウンロードしてみましょう。

1)Overflow!さかきけいのページ
http://member.nifty.ne.jp/vioret/
midpベースのHello Worldの書き方を説明しています。
これを雛型にすれば、応用がきいていいのではと思います。

2)ケータイJavaで遊ぼう!
http://www.keitaijava.com/
MIDPベースのタイピング練習ゲームのソースや、マインスイーパのソースなどがあります。

3)KVMゲームプログラミング
http://www.people.or.jp/~npaka/kvm/javapress/javapress.html
Java Press連動記事のページです。
MIDPベースのゲームのソース、解説が書いてあります。
iアプリや、Palmのことも書いてあるので、Javaで移植される方にとっても、
非常にためになります。

4) - MIDP - 〜携帯電話で動くJava〜

http://www.tbc-inc.co.jp/midp/
テロリス(テトリスもどき)などのMIDPベースのソースがおいてあります。

5)MIDP GAMEのホームページ

http://www.geocities.co.jp/SiliconValley-Oakland/7722/index.html
そのまま、MIDP GAMEのHPです。ソースも置いてあります。
HP上でゲームもできたりします。

6)MIDPであそぼう!
http://www.segi.org/Java/midp/
MIDPのことなどが書かれています。いろいろ参考になると思います。

(さっそくコンパイル)

a)まず、Cmdtools.batのショートカットをダブルクリックします。

新規プロジェクトを作り、ビルドしましょう。
今回は、仮に「Lout」とつけますが、これは、取ってきたサンプルソースのファイル名
と合わせてください。
(たとえば、HelloWorld.javaなら、「HelloWorld」と読み替えてください。)

なお、[project]-[edit env...]は、以下のような形にします。

次に、

C:\ezplus_sdk\Projects\Lout\src\

内に、ソースファイル(Lout.java)を入れます。
もし、画像(.png)などのリソースがある場合は、

C:\ezplus_sdk\Projects\Lout\res\

に入れます。

b)ビルドボタンを押す。

[build]ボタンを押し、ビルドします。

設定などが正常なら、BuildLogは、以下のような表示になるかと思います。

これで、正常にコンパイルが終了しました。

(4)エミュレーションはどうしよう?(2001/8/14)
(2002.5.19加筆)
無事コンパイルも終わったのはいいんですが、さてはて、エミュレーションはどうしましょう??
KJX作成ツールにエミュレータはついてないし。
・・・・ezplus開発キットにはエミュレータがつくようになりました(^^)
    よって、以下の設定などはする必要はありません。(2002.5.19)
------------------------------(旧)---------------------------------------------
でも、KDDI独自のプロファイルを使わなければ(=MIDPのみ)、Wireless Toolkitのエミュレータが
使えるのではと思った私は、単純に「run.bat」の改造を思いつきました。
iアプリのときのDojaのツールには、エミュレータ動作用バッチファイルのrun.batがついてたので、
おそらくWireless Toolkitにもついているのではと。

ということで、やはりありました。場所は

C:\J2MEWTK\apps\example\bin\run.bat

です。
これをひとまず、

C:\ezplus_sdk\Projects\Lout\bin\

内にコピーします。
これで、あとは、バッチファイルを改造するだけ。

--------------------(元のファイル)--------------------
@echo off
rem This file runs the example.jad/jar file in the emulator.

cd ..\..\..\

set CLASSPATH=lib\kvem.jar;lib\kenv.zip;lib\lime.jar;apps\example\bin\example.jar

java -Dkvem.home=. com.sun.kvem.midp.Main DefaultGrayPhone -descriptor apps\example\bin\example.jad

cd apps\example\bin
-------------------------------------------------------

--------------------(改造したrun.bat 段階1)------------------
@echo off
rem This file runs the example.jad/jar file in the emulator.

cd \J2MEWTK

set CLASSPATH=lib\kvem.jar;lib\kenv.zip;lib\lime.jar;c:\ezplus_sdk\project\Lout\bin\Lout.jar

java -Dkvem.home=. com.sun.kvem.midp.Main DefaultGrayPhone -descriptor c:\ezplus_sdk\project\Lout\bin\Lout.jad

cd \ezplus_sdk\project\Lout\bin
---------------------------------------------------------------

これを起動することにより、ひとまずは、エミュレータは動くようになりました。
でも・・・白黒なので、ひとまずカラーにすることに。

これは、以下のようにします。

--------------------(改造したrun.bat 段階2)------------------
@echo off
rem This file runs the example.jad/jar file in the emulator.

cd \J2MEWTK

set CLASSPATH=lib\kvem.jar;lib\kenv.zip;lib\lime.jar;c:\ezplus_sdk\project\Lout\bin\Lout.jar

rem java -Dkvem.home=. com.sun.kvem.midp.Main DefaultGrayPhone -descriptor c:\ezplus_sdk\project\Lout\bin\Lout.jad
java -Dkvem.home=. com.sun.kvem.midp.Main DefaultColorPhone -descriptor c:\ezplus_sdk\project\Lout\bin\Lout.jad

cd \ezplus_sdk\project\Lout\bin
---------------------------------------------------------------
単純に、「DefaultGrayPhone」部分を「DefaultColorPhone」に変えただけです。

(画面が狭い・・・)

おそらくエミュレーションしたらわかるかと思いますが、画面が狭い(^^;)
実機は、

C451H(120x143dot)
C452CA(120x133dot)

なので、少なくとも、120x120dotの画面は欲しいところです。

iアプリを作ってたときは、
エミュレータデザイン変更データがありましたので、なんとかなっていたのですけど・・。
↓
DoJa-エミュレータデザイン変更

ないものは、改造するしかないということで、上記のファイルを改造することに。

ひとまず、そのまんま使えないかということで、

C:\J2MEWTK\lib\devices

下に、「SO503iLite」フォルダを作り、「DoJa-エミュレータデザイン変更」のページから
持ってきたファイルを入れて、エミュレータを動かしてみました。
これは、ものの見事に動きませんでした(^^;)

で、いろいろと試行錯誤の末、なんとかできました。
こそっと
置いておきますので、いる方はこそっと持って帰ってください(^^;)
#SO503iLiteの著作権は、Yukio氏にあります。

インストール方法ですが、解凍すると、SO503iLiteフォルダができますので、それをフォルダごと

C:\J2MEWTK\lib\devices

に入れればOKです。

これに伴い、バッチファイルも変えておきましょう。

--------------------(改造したrun.bat 段階3)------------------
@echo off
rem This file runs the example.jad/jar file in the emulator.

cd \J2MEWTK

set CLASSPATH=lib\kvem.jar;lib\kenv.zip;lib\lime.jar;c:\ezplus_sdk\project\Lout\bin\Lout.jar

rem java -Dkvem.home=. com.sun.kvem.midp.Main DefaultGrayPhone -descriptor c:\ezplus_sdk\project\Lout\bin\Lout.jad
rem java -Dkvem.home=. com.sun.kvem.midp.Main DefaultColorPhone -descriptor c:\ezplus_sdk\project\Lout\bin\Lout.jad
java -Dkvem.home=. com.sun.kvem.midp.Main SO503iLite -descriptor c:\ezplus_sdk\project\Lout\bin\Lout.jad

cd \ezplus_sdk\project\Lout\bin
---------------------------------------------------------------

これで、midpのみ使う上では、エミュレータを動かすことができるようになりました。
なお、KDDI独自のプロファイルをを使った場合は、おそらく動かないような気がします。

(10/27加筆)
ん・ぱかさんのところに、エミュレータプロパティが落ちてました。
それも、フォントサイズがちゃんとしたものが(^^;)
C451Hエミュレータプロパティ
ここのを持っていったほうが、いろいろ問題がなくていいでしょう(^^;)
(5)ダウンロードCGI(2001/8/14)
(2002.5.19加筆)
<<HDMLページを作る>>

無事エミュレーションもいけたということで、
あとは、HDMLを書いて、ダウンロードページを作るだけ。

とはいいながら、HDMLの作り方も、いまいち知らないし、ということで、簡単なツールを使うことに。
だいたい、Ezweb on the streetにリンク張ってますので、そちらのほうから行ってください。
http://www.au.kddi.com/ezfactory/tec/dlcgi/download_1.html

(注意)
<HDML・・・・>の・・・内には、必ずMARKABLEか、PUBLIC指定をTRUEにしておきましょう。
 記述忘れで、アクセス制限(?)かかってしまうようなので。

参考までに、うちの仮アプリのダウンロード&説明用HDMLは、以下に置いています。
http://homepage1.nifty.com/cotton100/ez/Loutdl.hdml

<<ダウンロードCGI>>

HDMLページは作れたものの、ダウンロード(ezgetさせる)にはCGIが必須です。

それも、あらかじめ、KJXファイルにチェックサムを付加しないとだめという・・(^^;)
はっきりいって、アップロードの度、CRC付加するのは、面倒なので、
チェックサム(CRC)を自動付加してくれるCGIをさがしてきました。
かたやま某氏のEZget.cgiです。
EZget.cgi

ここからダウンロードしてきて、

Ezweb on the Streetの
http://info.ezweb.ne.jp/factory/tec/dlcgi/download_1.html

内に記述しているデータタイプ

拡張子:kjx
データタイプ:devkdjx
内容:ezplusアプリケーション

をCGI内に追加します。(追加のしかたは、cgi内の記述を参照のこと。拡張子設定はいらなかったかも)
通常のEZget.cgiの使い方の場合、これでOKです。

このEZget.cgiは、通常

[カテゴリ選択]→[ファイル選択]→[最終確認]
となっています。

今回、ezplusのアプリの紹介ページ(HDML)から、直接ダウンロードページに
飛ばしたいので、若干記述を変える必要があります。

変更内容的には、CGI内の<HDML ・・・>の・・・部分の
「MARKABLE=FALSE」をすべて「MARKABLE=TRUE」にして、
「PUBLIC=TRUE」も追加しました。
HDML内で上記の記述をしないと、アクセス制限がかかり、見られないようです。(※1)

(参考)

直接、アプリのダウンロードページを出すcgiの呼び方は、こんな感じです。↓

http://hpcgi1.nifty.com/cotton100/ezget11.cgi?cat=devkdjx&file=Lout.kjx

普通は、

http://hpcgi1.nifty.com/cotton100/ezget11.cgi

とします。

(※1)
以下のUpLink Simulatorでは、この記述がなくても、なぜか、動いてしまいます。
もしかすると、シミュレーションの端末設定(?)がまずかった?

<<シミュレーション>>

あと、HDMLを書いたのはいいけれど、見るためのシミュレータが欲しいところです。
UpLink Simulatorなるものが、出ていますのでそれを使います。
ダウンロードは以下のURLにて。

http://developer.phone.com/ja/

そうそう、HDMLは、「キャッシュ」という概念(?)がありますので、気をつけてください。
(HPを更新したのに、エミュレータ&実機では更新されないというのがありますので)
タグ的には、<HDML・・・・ TTL=0>みたいにHDMLタグ内に「TTL=0」と記述するといいようです。
あとは、キャッシュクリア&リロードなどを試してください。

(※2002.1.5追記:Phase2になってから、端末がxHTML Basicに対応しています。なので、シミュレータも、xHTML Basic対応の
 ものにしてください。ついでに、xHTMLを覚えるのも手でしょう。)

(6)とりあえず(2001/8/16)
親切な方のご協力のおかげで、ダウンロードまでは出来たようです(^^)
アプリの動作が不安定だということなので、肝心のJavaのほうをなんとかする
必要がありますけど・・・。
(7)MIDPいろいろ(2001/8/25)
ezplus対応アプリをはじめて作ったみたのですけど、iアプリとはかなり違い、
とまどいました。
ひとまず、簡単に戸惑いの原因を。

1)資料が乏しい(^^;)
 環境設定して、アップロードできるまでが大変。
  今でこそ、
http://www.atmarkit.co.jp/fmobile/kaisetsu/ezplus/ezplus.html
 みたいなページが出来ていますけど・・。

2)iアプリとは勝手が違う。
 なんか、MIDPって、汎用性を持たせているのかして、かなり、手続きが面倒。

a)ソフトラベル

  iアプリなら、ソフトラベルをつける場合

  setSoftLabel(Frame.SOFT_KEY_1, "Exit");

 だけでOKなんですけど、MIDPの場合は

  cmdEnd = new Command("Exit", Command.SCREEN, 2);
  で、設定してから
 addCommand(cmdEnd);
  をして、メニューに追加しないとだめだという・・・。
 おまけに、メニューをツリー構造(?)に出来るもんだから余計たちが悪い(^^;)

  メニュー表示を動的に変えようとすると

   removeCommand(cmdSet);
   addCommand(cmdRply);

 みたいに、いったんコマンドメニューを削除してから追加という形にしないと
 意図したとおりに動かないみたいです。
 (やり方ありそうだけど、これでも動いてるから、ま、いいか(^^;))

b)drawString

  文字を描画する命令ですけど、iアプリと比較して、パラメータが1つ増えてます。

g.drawString("(キー操作)", 0, 0, Graphics.TOP | Graphics.LEFT);

こんな感じです。

c)キーイベントなどの取得

iアプリの場合は、ソフトキーも、数字キーも、矢印キーもすべて
processEvent()内で取得出来ていたのですが
MIDPの場合は、
protected void keyPressed(int code)
で、数字キーと方向キーの取得を行います。
なお、数字キーは、「code」の変数で取得できますが、
方向キーは、
int nMove = getGameAction(code);
のようにgetGameActionでキー入力を取得します。

ソフトキーは、別のメソッド

public void commandAction(Command cmd, Displayable disp)

内で取得します。

d)タイマー

タイマーは、

ShortTimer t;
と定義して、

t = ShortTimer.getShortTimer(c, 0, 100, true);
t.start();

で、起動し、

	public void processEvent(int type, int param) {
        super.processEvent(type, param);
        if (type == Display.TIMER_EXPIRED_EVENT) {
        //この中にタイマ処理を書く
        }
    }

のようにするのですけど、(それ以外にいろいろ方法はあります。Thread使う手もありますし)
MIDPの場合は、

		timer=new Timer();
		timer.scheduleAtFixedRate(new TimerTestTask(canvas),0,100);

のようにscheduleAtFixedRate()で、起動します。
scheduleAtFixedRate()の第1引数は、「TimerTask」で、タイマ処理部をクラスにしてそれを
引数に入れます。

そのタイマ処理部のクラスですけど、

class TimerTestTask extends TimerTask
{
}

こんな感じでTimerTaskの継承クラスとしてクラスを定義します。

(8)ezナビゲーション(2001/9/8)
つい先日、ezwebで簡易位置情報を調べることが出来るサービスであるezナビゲーション
のHPでの使用方法が公開されていました。
(なお、カラーezweb端末のみ)
早い話、現在使用している基地局の緯度、経度を知らせるものなんですけど、
それでも、なんか「サイバー」って感じでちょっと感動します。

さっそく、そのezナビゲーションで緯度、経度を出すHP(cgi)を作ってみました。
仮に自分でezweb端末持っていれば、「リアルタイムWeb旅日記」みたいなのも
簡単に作れそうです。
※以前、Vaiomic Soldierで、「緯度、経度情報で、その場所の地図を出す方法」を
 書いているのでこの方法を使います。

あと、ezplus開発ガイドがそれに伴い、V1.1になっていたので、さっそくLocationクラスを
使いプログラムしてみたんですけど・・・・、kjx作成ツールVer1.0はLocationクラスを
含んでいなかったようでした。
(なので、コンパイルエラー)

近日中に公開されるんでしょうかねぇ・・・。>kjx作成ツールVer1.1
・・・空実装のライブラリを作るという手もありそうですけど、私の実力では(^^;)
(9)タイマが変?(2001/9/8)
ezplusでタイマをいじってるんですが、一定時間ごとにイベントが来ているはずが
どうも、何か変です。
ストップウォッチを作っても、時間が遅れまくり(^^;)
現在、原因を調査中。
(10)RecordStoreあれこれ(2001/9/16)
RecordStoreって、iアプリで言う「スクラッチパッド」です。
で、MIDPのサンプルでいろいろとさわっていて、「動く、動く〜」と喜んでいたんですけど
突然動かなくなりました。
「Canvasと連携してからおかしくなったかな」とか思いいろいろと変えてみたんですが、
まったく動かず(泣)
ひとまず出ていたエラーは「データベースにアクセスできません」エラー。
4日ほど、いろいろやって、ふとjadファイルを見てみると、
Midlet-Name部分がなぜか「???????」となっていました。
「おかしいなぁ。設定は「メモ帳」のはずなのに・・・」とリコンパイルしたら、
ちゃんとMidlet-Name部は「メモ帳」になりました。
が、MIDPエミュレータを動かしたとたんjadファイルが書き換えられるようで、「メモ帳」
が「???????」になりました(^^;;;;)

どうやら、MIDPエミュレータはjadファイルを書き換えるようです(^^;)
なお、RecordStoreのデータは「c:\windows\.j2mewtk\nojam\「Midlet-name」」のフォルダに
入れられます。
その関係上、日本語が通らないようで、それで「メモ帳」が「???????」に化けてしまうようです。

MIDPのエミュレータで同じような現象になった方は、Midlet-Nameを半角英数の名称に
変えてみてください。おそらく動くと思います。
(11)ezwebで着音作成(2001/9/16)
ezwebで着音を作るには以下の方式があるそうな。

1)qcelp方式のもの

http://hoge.dyndns.org/ezget/purevoice.html

に書いています。
「モノラル・8kHz・16bit」のwavをコンバータに
Drag&Dropすればokだとか。

データタイプは「dev13anq」

2)SMAF-waveのもの

MA-2(YMU-759)のチップを積んだ携帯なら使えるらしいです。
とりあえず、16和音mmf対応のものならADPCMも対応している
そうな。

http://tech.millto.net/~pngnews/kndh/

にあるsmdEdにて、smaf-waveを作成する。

もしくは、

http://smaf.yamaha.co.jp/

にあるツールを使う。

データタイプは「devmfan」

とのこと。
(12)ピングー、もといPNGあれこれ(2001/10/8)
ezplusは、画像データとして、PNGが使えます。
が、これには落とし穴がありまして、「PNG画像なら何でもいいや」という
訳には行きません。

もともと、ezwebは、256色以下のPNGしかNGなんだそうで、それをezplusも
引き継いでいるようです。

これで、私もはまってしまいまして(^^;)、バグを見つけるのに苦労しました。
(13)メディアプレイヤーの使い方(2001/10/8)
ezplusは、画像だけでなく、音も扱えるのですが、なにせ、ezplusの公式マニュアルには
手順しか書いておらず、具体的なサンプルコードが示されていないため、試行錯誤しても
うまくいきませんでした。

で、ezplus-boardで、お世話になっているこちさんが、Java-Hzに投稿された質問の返事と、
SINSENさんのページの書き込みを元にして、なんとか音を鳴らすことに成功しました。

具体的には、

MediaResource sound = new MediaResource("resource:///test.mmf");
MediaPlayerBox mbox = new MediaPlayerBox(sound,MediaPlayerBox.BACKGROUND);

とし、リソースを定義し、メディアプレイヤーボックスに関連付けさせてから

mbox.play();

として、再生させます。

あ、ちなみに、
import com.kddi.media.*
を忘れないようにしてください。

なお、私が自分で試行錯誤して抜けていた部分は
「resource:///」部分です。

これは、特にezplus関連ドキュメントに書かれていないので、まったくわかりませんでした。
もしかすると、MIDPのほうに記述があり、それを見逃しているだけなのかもしれませんけど・・・。

まだ、やり方がわからないのが

mbox.addMediaEventListener(listener);

で、これのリスナー部をどこに実装すればいいのやらと(^^;)
Canvasの派生クラスにimplements していいものやら、悪いものやら。

(14)フリーMidletのkjx変換方法(2001/10/8)
いろいろHPをまわってみると、いろんなフリーのMidletがあります。
特に、洋もの(?)のMidletはけっこうな量があり、そのまんまezplusに移植出来る
ものも少なくありません。
以下のHPなんかは、かなりの量のMidletがあります。
(ついでに、Midletを作る上での有用な情報が詰まってます。)

http://www.kvmworld.com/technologies/midp/

で、こういうところに落ちている(?)Midletをどうやってezplusに移植するか。

答えは簡単で、以下のような手順でkjxファイルを作ります。

1)フリーのMidletをダウンロードしてくる。
  *.jad ,*.jarの2ファイル。

2)*.jadを編集する。

必須事項が抜けていたり、いらない部分が入っていたりする可能性があるので
確認のうえ、編集します。

3)kjxアーカイバを使い、jad,jarを1つにまとめる。
  MS-DOSプロンプトにて、jad,jarのあるフォルダで以下のように入力します。
  なお、ここでは、hoge.jad,hoge.jarをhoge.kjxにする場合を仮定しています。

  java -jar c:\java_dev\KJXArchiver.jar -c hoge.jad hoge.jar hoge.kjx

これで、kjxファイルの出来上がりです。

もちろん、フリーのMidletにバグや、エミュレータでしか動かない問題なども
含まれる可能性がありますので、可能であれば、jarファイルを解凍して
classファイルを、JADという逆コンパイラを使い、ソースに落として、
リコンパイルをかけたほうが無難かもしれません。
なお、通常は、jarファイルはjarコマンドを使って解凍するのですが、
+lhacaというフリーウェアの解凍ソフトを使っても、解凍できますので、
MS-DOSプロンプトはどうも苦手という方は、そちらをお使いください。

(15)MIDPゲームエンジンライブラリ(2001/10/27)
Webを巡回していたら、MIDPのゲームエンジンのライブラリがありました。

http://www.cin.ufpe.br/~cacp/midp.htm

です。
ゲームに使うのに便利なものが満載みたいです。

(16)iモードページをezwebページに(2001/10/27)
普通のhtmlや、cHTML(iモードページ)の作り方は知ってるけれど、
HDMLの書き方は知らないという方はけっこうおられるかと思います。
で、iモードページをezwebページに変えてしまうというサイトがありました。

http://devgatej.jpn.phone.com/x2hdml.html

です。

ezwebは、現在、iモードのページもある程度は見られるようにサーバー工事を
したそうで、今となってはいらないかもしれないのですが、それでも
完璧ではないようなので、もし、ezweb(ezplus)のサイトを立ち上げたい方は
これを利用すると、お手軽にHDMLが作れて便利ではと思います。
(17)kjxファイルから、.javaや、リソースファイルを復元(2001/12/2)
不慮の事故などで、データが破壊して、ソースなどがなくなることがあります。
もちろん、バックアップを取っていれば問題はないんでしょうけど、そうでないこと
が多いかと(^^;)

そういうときのために、
kjxファイルから、ソースを復元する方法を書いておきます。

--------------------------------------------------------------

1.kjxファイルから、.jarファイルを抜き出す。

http://www.vector.co.jp/soft/dl/win95/util/s0049517.html

にあるバイナリエディタを用いて、kjxファイルより、
.jarファイルを抜き出します。


(抜き出しの説明)
kjxファイルは、.jadファイルと.jarファイルを
そのままくっつけただけのようなものなので、.jadファイル
部分を削除し.jarファイルを作ります。

.jarファイルは、ZIP形式で圧縮されています。
なので、.jarファイルのデータは「PK」というヘッダから
はじまってます。
したがって、バイナリエディタで、kjxファイルの頭から
「PK」と書いてある「手前」までを削除して保存すれば、
.jarファイルが出来るはずです。


(手順)
(1)狼'sバイナリエディタを起動し、kjxファイルを開きます。
 なお、狼'sバイナリエディタは、ファイル読みこみ時、
 誤書きこみ防止のため、リードオンリーになってますので
「編集(E)-変更禁止(O)」にて、リードオンリー属性を
 外してから、編集してください。

(2)ファイルの頭から、「PK」と書かれている「手前」までを
削除します。
(範囲指定して、[Del]で削除されるはず)

(3)ファイルの後にCRCがついているかと思われますので
それも削除します。
(なお、CRCは削除しなくても、jarファイルは解凍できる
 ような気がします)
(4)新規保存にて、「ファイル名.jar」として保存します。

2.+lhacaにて、jarファイルを解凍。

http://www1.sphere.ne.jp/app/Lhaca/lhacadx.html

にある、+lhacaは.jarファイルを解凍できるので、インストールして
先ほどバイナリエディタで作った.jarファイルを解凍します。
※インストール後、設定画面で関連付けをすれば、ファイルを
 ダブルクリックでjarを解凍できます。

解凍すると、リソースファイルと、.classファイルが生成されます。
※もちろん、コマンドプロンプトで、
 c:\jdk1.3\bin\jar xvf *.jar
 と入力しても、解凍はできますけどね(^^;)

3.JADにて、逆コンパイル

http://kpdus.tripod.com/jad.html

にある、JADというJava逆コンパイラを使って.classファイルを
.javaファイルに変換します。

上記場所からダウンロードして、解凍すると、jad.exeが解凍されます。

jad.exeと同じ場所に、2)で解凍した.classファイルを置き、
MS-DOSプロンプトにて

jad *.class

と入力すると、.classファイルがすべて逆コンパイルされ、
*.jad というファイルになります。
(※拡張子は.jadですが、MIDPでの.jadファイルではありません。注意。)
これをエディタで見てもらえればわかりますが、*.classファイルを
逆コンパイルした結果で、ちゃんとした*.javaファイルに
なっています。
ひとまず、*.jadをすべて、*.javaにリネームしておきます。

4.新規にプロジェクト作成

あとは、該当プロジェクト名でプロジェクトを作って、
*.javaファイルと、リソースファイルを入れるべき場所に
入れておけばコンパイルできる状態になります。

------------------------------------------------------------
こんな感じで、復元することが出来ます。

(18)ezナビゲーション再び(2001/12/2)
ezplusのphase2がいよいよ12/1からはじまり、開発ツールも公開されました。
ezplusのドキュメントも、前回に比べ、非常にわかりやすくなっており、
サンプルコードもたくさん書かれていました。

新規に公開されたもので一番「じゅーよー」(by SRD(^^;)なのは、やはりhttp通信
でしょう。
でも、これはMIDP関連のページでいろいろと詳細は書かれているので、
今回は、以前出来なかったezナビゲーション機能を使ってみました。
サンプルコードのおかげで、何も考えずにさくっと作れました。

EZPLUS-BOARDで動作確認をしてもらった結果、動いているようなので、
あとは、どう料理するかですね。
位置のログ取りをして、後でサーバーにアップして、旅日記掲示板を
作るとかそういうのもいいかもしれません。
毎回毎回、webページにアクセスするのに比べ、パケット代的には
安いでしょうし。

(19)ルパンで四苦八苦(2001/12/8)
MIDPでバイナリデータの読み取り練習がてら、iアプリの「ルパン for iAppli」を
ezplusに移植してみました。
そこで起きたトラブルをいろいろと書きます(^^;)

1)スレッドは使えない??

まず、文字を1文字づつ一定時間ごとに表示させるため、タイマなどを使う必要があります。
なので、とあるサイトのサンプルを参考にして、スレッドで作ってみました。
作ったところ・・・・「表示しません!」とのお返事が(^^;)
エミュレータではきちんと動いているだけに、原因がわかりませんでした。
そうそう、以前も、フリーMidletの移植で同じようなことがあったような・・・。
どうも、スレッドとezplusは、相性がよくないようです。

2)仕方がないからお手紙書いた、じゃなくて、Timerを使う

動かないものは仕方がないと言う事で、TimerとTimerTaskを使い、
一定時間ごとの処理を行うことにしました。
これで動作確認をしてもらったところ、見事OK!
よかったよかった(^^;)

3)音でもつけようか

せっかく50KBも容量が取れるのですから、iアプリの時のような音データの妥協
はしたくない、ということで、全ての音データをADPCMデータにすることに。
以前、SMAF-WaveでテストしてOKだったので、使えることは確認済。
さっそく、smdEdにて、8kHzのSMAF-Waveデータを作り、アップロード。
すると・・・「鳴りません(T_T)」とのお返事。
何でやねんと、いろいろと悩んだ結果、結論は出ず、ひとまず、YAMAHAの純正コンバータ
で作ったSMAF-Wave(4kHz)と、smdEdで作ったSMAF-Wave(8kHz)を両方試して
もらうことに。
結果・・・YAMAHAの純正コンバータで作ったものが正常動作し、smdEdのデータは
鳴らなかったようです。
※もしかすると、smdEdのバージョンが古いからSMAF-Waveが鳴らなかったのかも
 しれません。

4)8kHzは鳴らない?

ひとまず、smdEdでのSMAF-Waveは鳴らないということで、純正のコンバータを使い、
4kHz版と8kHz版を公開しました。
4kHz版は無事動作したとの報告をいただき、8kHz版は鳴らないとの報告が(^^;;;)
「8kHzは、対応していないのかな」と思って、結論付けたのですが、翌日ソースリスト
を見てみると・・・、データのファイル名間違ってるやん(^^;;;;;)
さっそく、ファイル名を訂正したものをコンパイルしなおして、アップロード。
無事に鳴ったとの報告をいただきました。よかったよかった(^^;)

5)安心するのは早かった(^^;)

ひとまず安心していたのですが、C5001Tで動かないとの報告が(^^;)
これは、ezplusの投稿掲示板で管理人さんが、「C5001TはSMAF非対応」と
書かれており、原因がはっきりしていたため、対応もすぐに取ることが出来ました。
C5001Tで対応する他のADPCMデータとしては、qcelpなどがあり、ひとまず
qcelpをqualcomm社のサイトより入手し、qcpファイルに変換&リコンパイル。
それをC5001T専用アプリとして、アップロード。
翌日、動いているとの報告を受け、ひとまず完成となりました(^^)

6)でもね

まだ、C5001Tには、穴があり(^^;)画面の横幅が144dotらしいです。
現在、120dotで設計している関係上、右側が若干開く形になってます>ルパン

(2002.1.6追記)
いちお、センターに来るように変更はしました。

(20)GPSの隠し(?)API(2001/12/16)
ezplusもPhase2になってから、いろいろと拡張されています。
拡張された中でGPS機能は、以前書いた「簡易位置情報」よりも、
ずっと精度が高いです。
で、ドキュメントを見ると・・・・使い方が書いていない(^^;)
単に「既知のサブクラス・・・GpsLocation」と書いてあるだけ。
ま、サブクラスというんだから、おそらくLocationクラス+α
なんだろうなと思い、そんな感じのプログラムをしてみました。
・・・どうやらドンピシャリ(^^;)

GpsLocation _glocation=null;
try{
	_glocation=(GpsLocation)GpsLocation.getLocation();
	lat=_glocation.getLat();//緯度
	lon=_glocation.getLon();//経度
}catch (Exception e){
	e.printStackTrace();
}

みたいにすると、GPSの位置情報が取得できるみたいです。

で、「GpsLocationはそれ以外のメソッドがないのか」と、
kddiのパッケージをばらしてみると、GpsLocationクラス内に
また別のメソッドがいろいろとありました。

ひとまず、このメソッドの戻り値がどうなるかは、動作確認依頼中です(^^;)

そうそう、今のところphase2でやってないのは、http通信、メール送信、urlTo、
ぐらいかなぁ・・・って多いやん(^^;)

※(2002.1.5追記1)メール送信、urlToは、試してみました。メール送信はいけているようです。

※(2002.1.5追記2)もしかすると、GPS携帯の場合、あえてGpsLocationを使わなくても
 Locationクラスを使っても、GPSでの測位をする「かも」しれません。
 某所で、その試験をしてもらったのですが、
 1)Locationクラス呼び出し時と、GpsLocationクラス呼び出し時では、測位位置が違っていた。
  2)GPS受信不可の場所では、どちらのクラス呼び出し時でも、同一だった。
  3)GPSLocationを同一場所で2回測位しても、位置情報が異なることがあった。

 ということで、どうも、どちらとも言えない感じ(^^;)

(21)音量調整の怪(2002/1/5)
ルパンのezplusアプリを作っていて、音量が大きいという指摘があったため、
音量調整をかけることに。
んで、

1)音声再生前に音量調整をかけてみた。

mediaplay1.setVolume(iVolume);//中(0〜100)音量調整
mediaplay1.play();//再生する

ところ、NG(^^;)
なので

2)各音再生前に音量調整をかけてみた。

・・・でもNG(^^;)

最後の手段として、

3)各音再生後に音量調整をかけてみた。

ところOKだったみたいです。
どうも、再生した直後に音量調整をしないとだめなような雰囲気です。
それにしても、なぜそういうふうになっているのかは謎。

ちなみに、
音量調整やピッチ調整のAPIは
「ただし、これらの属性はC-MIDIメディアを再生するときにのみ適用・・・」
と書いてありますので、今回使ったのが、mmfとqcelpなため、
音量調整できなくても文句は言えません(^^;)

そうそう、音といえば、SMAF(mmf)非対応機が増えてました(^^;)
今のところ、C5001Tと、C3002Kです。
これにmmf使ったのを使うと、バグります。
なので、もし、mmfしか音データがなく、かつ、両機種対応
させたい場合は、再生関係部分すべて、try catch節でくくってしまいましょう。
非対応機種では音が鳴らなくなるだけで、例外で止まることはなくなると思います(たぶん)
・・・例外は発生してるんですけどね(^^;;)止まらなくなるということで。

try{
   //再生、読み込み部分
}catch(Exception e){
   //例外処理
}

(22)GPSの拡張情報いろいろ(2002/1/5)
(20)にていろいろと拡張情報が取得できると書きましたけど、具体的には
以下のようにします。

	int gpsVer=0;
	Date gpsDate=null;
	long gpsDateLong=0;
	String gpsAltitude="";
	String gpsFixmode="";
	String gpsMajorAxisAngle="";
	String gpsVerticalError="";
	String gpsSemiminorAxisError="";
	String gpsSemimajorAxisError="";
	//中略---

	try{
		gpsVer=_glocation.getVersion();//GPSのバージョン
		gpsDate=_glocation.getTime();//GPSから取得した日付
		gpsDateLong=gpsDate.getTime();//GPSから取得した時間(ms値)
		gpsAltitude=_glocation.getAltitude();//高度
		gpsFixmode=_glocation.getFixMode();//測位方法
		gpsMajorAxisAngle=_glocation.getMajorAxisAngle();//長軸角度(楕円)
		gpsVerticalError=_glocation.getVerticalError();//高度方向の誤差
		gpsSemiminorAxisError=_glocation.getSemiminorAxisError();//短軸半径誤差(楕円)
		gpsSemimajorAxisError=_glocation.getSemimajorAxisError();//長軸半径誤差(楕円)
	}catch (Exception e){
		e.printStackTrace();
	}

あと、各種情報について
いろんなところで、情報をいただきましたので、まとめてみようと思います。

1)測位方法(Fixmode)の種類

GPS-FIX:GPS受信状態
Hybrid-FIX:
AFLT-fix:GPS非受信,基地局複数受信(?)
SECTOR-CENTER:GPS非受信,基地局受信1つのみ

(2002.1.20追記)
-----(未確認なもの)-----
PREFIX-AFLT
free
fall
------------------------
こんなのがあるみたいです。

(2002.8.14追記)

秘密ちゃん(さん)からFixmodeに関する情報をいただきました。
以下のような意味だそうです。

AFLT_FIX:基地局情報のみ
FAIL:測位の失敗
FREE:精度の指定をしない。
GPS_FIX:GPS情報のみ
HYBRID_FIX:GPSと基地局情報
PREFIX_AFLT:BTS利用
SECTOR_CENTER:セクターセンター測位

で、BTSとは「The Bureau of Transportation Statistics」
の略だそうです。

一応サーチエンジンでBTSを調べたところ以下のサイトが出ましたので
書いておきます。

http://www.bts.gov/
http://www.bts.gov/gis/
http://www.bts.gov/aboutbts.html

2)室内・室外での誤差範囲の違い

やまねこさんに情報をいただきました。

屋外:GPS-FIX
SemiminorAxis:5
SemimajorAxis:12

屋内:AFLT-FIX
SemiminorAxis:58
SemimajorAxis:62

野外はGPS&複数の基地局受信できるため、誤差範囲はGPS並(半径5〜10m程度)みたいですね。
屋内の場合は、複数の基地局を受信していても、GPS受信できないため、半径60m程度の誤差のようです。
そうそう、別の報告でしたが、屋内の場合、かなり誤差が出る場合が
あるみたいです。
(500m以上(^^;;) 簡易位置情報が500m〜数kmなのでそんなものかな。)

実機を持っていないものにとっては、こういう情報はほんと助かりますです(^^)

(2002.2.27追記)

短軸半径誤差、長軸半径誤差について質問がありましたので、補足説明をします。
わかりやすく(?)言うと「誤差楕円の短軸半径、長軸半径」ということです。
誤差(楕)円は、「その円内に誤差が収まっている」と言う領域を示します。
この領域が小さければ小さいほど、測位精度が高くなるわけですね(^^)b
※なお、短軸半径誤差という表現が正しいかどうかは非常に怪しいです(^^;)

なお、楕円の場合、長軸方向(短軸でもいいんですけどね(^^;))がどの方向を
向いているかという情報も必要になってきます。
それが「長軸角度」です。
この3つのパラメータが揃ってはじめて、誤差楕円が描けます。
以下に、誤差(楕)円についての説明図を書いておきます。

誤差楕円
誤差楕円についての説明図

(2002.3.24追記)
長軸角度の件ですが、せざーるさんからの情報で、
「GPSは衛星軌道の関係で、赤道と平行な方向に誤差が広がりやすいのでは?」
とのことです。
また、測位データを見たところ長軸角度は、0か180に近い数字が多かったそうなので
おそらく、誤差楕円の長軸角度は「基準が東で反時計回り」のようです。
※図では、θになります。
(23)ストレージデータが消えない?(2002/1/13)
C3001Hのみの問題なのですが、アプリデータとストレージデータ(iアプリでのスクラッチパッド部)
が別になっていて、アプリを削除しても、ストレージデータ部が残ってしまうという現象があります。
で、公式アプリの場合はうまく削除されているとのことで、どうやら、公開されているSDKでは
うまく削除できない「なにか」があるようです。
なお、ezplusデータフォルダごと消せば消えるそうなんですけど、「アプリ全部」消えちゃうんで(^^;)
(24)Beep再生命令(2002/1/13)
今まで知らなかったのですが、MIDPには、Beep音再生命令があるようです。
#Alertクラス内、だったかな。playSound命令です。

でも、ezplusの実機(確認済:C451H,C5001T)では、この命令で音は鳴らないようです。
ま、ezplusはいろいろと音を鳴らす命令があるので、いらないといえばいらないんですけどね。

(25)固定小数点ライブラリ(2002/1/13)
ezplus(MIDP)では、浮動小数点、固定小数点ともに使えないのですが、固定小数点ライブラリ
が、以下のURLで公開されていました。
これで、sin,cos,sqrtなどが使えます。

http://home.rochester.rr.com/ohommes/jScience/download.html

です。
(26)MySync(2002/1/20)
CDMA端末とPCとを接続し、各種データ(着メロ、待ち受け画像、ezplus、etc)を
転送できるソフトが出ているそうです。

http://leche.goodcrew.ne.jp/mysync/index.html

Outlook(Not Express)とPC側にシリアルポートが必須だそうで。
私は実機持ってないので使えませんけど、実機持っておられる方は
使う価値あり、ですね。

(2002.3.10追記)
実機が入手できましたので、さっそく使ってみました。
いちいち、データフォルダに入っているデータを「すべて吸い出してから」しか、
転送できないので、ひじょーに遅いです。
また、Outlookが必須なのはなんだかなぁと(^^;)
ということで、USB接続の「cdma王」が高いけども(実売9800円ぐらいらしい)お勧めです。
上記のような無駄なことはしてないようですし。

(27)測地系(2002/1/20)
GPS位置情報アプリのユーザーさんからのメールで、
「地図と実際の位置が500mほどずれる」
という現象を報告していただいていました。

で最初は、「基地局の位置情報を取得しているから」だと思っていたのですが
とある掲示板で同じような現象を報告されていたので、再度調べてみました。

で、調べてみたところ、測地系の違いで500mほどのずれが発生することがある
とのことです。
↓(参考URL)
http://member.nifty.ne.jp/Nowral/02_DATUM/02_DATUM.html
一般的な地図サイトの測地系は「TOKYO」らしく、
GPS携帯のGPS受信時の測地系は「WGS84」で、これで500mのずれが発生していたようです。

なお、hitachiのGPS携帯用無料地図サイトは、デフォルトがWGS84みたいで、WGS84のままで正常に
表示します。

ちなみに

http://cgi.sinsen.org/bbs.cgi

のほうに、WGS84→TOKYOの簡易変換class(javaファイル)がありますので、
アプリ内で測地系変換をされる方は利用されてみては。

(おまけ)

GPSにて位置を取得する場合、6円、地図取得を含むと21円かかるそうです。
1分1回位置取得すると、1時間で360円。高い(^^;)

参考URL↓
http://www.au-mobile.com/faq/qanda_11.html

(28)C3001Hの新たなバグ?(2002/1/27)
うちのezの掲示板や、メールで「データストレージが使えない=データの保存が出来ない」との
連絡がきました。
で、その報告が来た機種は、どちらもC3001H。
「なんか、あやしいなぁ」と思い、いろいろ調べてみると・・・どうもC3001H特有のものらしい。
以前にezplus-boardで、「ゲームが途中でバグる」報告があり(これもC3001H)、これの回避法として
「アプリの名称を変更すると、正常動作する」レポが上がっていたので、これと同じ方法で対処して
みてくださいと依頼したところ、どうやらうまくいっている模様(^^;;)
・・・なんか変なバグ。
ゲームが途中でバグった時も、はじめ「アラート表示がバグっている」ものだと思い込んでいたのですが、
どうもデータストレージにアクセスしに行ってバグっていたような雰囲気です。

あ、以前C3001Hでデータストレージ部が消せないというバグのことを書きましたけど、どうもC5001Tでも
同様の現象が起こっているようです。ただ、表示的にストレージ部とアプリ部をわけていないため、消えたよう
に見えているようですけど。
アプリを消しても、アプリで自動起動設定などをしていたら、自動起動設定が残ったままになっていて、
アプリがいないのに起動しようとしてエラーになるようです。
(29)フルカラーPNG(2002/1/27)
移植もののアプリを作っていて気づいたのは、「CxxxxシリーズはフルカラーPNGが使える」ということ。
で、確証はもてなかったのですが、実際C45Xシリーズでは動かず、C3001Hでは動いたという報告を受け、
「へぇ〜、やっぱりフルカラーPNG対応してんねんなぁ〜」と思った次第です(^^;)

(30)地図サイトいろいろ(2002/2/11)
地図メール機能をつけている関係上、いろいろなサイトを調べていました。
使えそうなサイトを以下に書いておきます。
それ以外もいろいろとありますけど、割愛(^^;)

(1)mapion
PCのみかな?
Tokyo測地系みたい。
http://www.mapion.co.jp/c/f?el=135/37/59.195&scl=20000&pnf=1&uc=1&grp=all&nl=34/48/22.968&size=500,500

(2)navitime
PC/ez も対応しているらしい
なお、unit=1でTokyo測地系になるらしい。
拡大縮小は、無料。移動は、課金されるらしいです。
あと、通常使用でない場合、地名表示が一致しないらしい(^^;)
・・・後の報告でそうでもなかったとのこと。よくわからん(^^;)

http://map.navitime.jp/?datum=0&unit=0&lat=34.39.43.00&lon=135.30.19.00

(3)Lycosあしあと日記(だったかな)
ez/j/PC対応ですが、地図は、あまり使い物にならないような感じ(^^;)
なお、cx,cyの値は、変換する必要があります。
このサイトの「地名表示」をhttp通信で抜き出し、緯度・経度情報の追加情報として
入れようかと思ったのですが、ezplusの仕様で、wml(xhtml)は、取得できないらしい(なんでも、
wml,xhtml,hdmlを受信すると「エラー」と判断する仕様になってるらしい。)ので、あきらめました。
http://map.lycos.co.jp/ashiato/viewmap.jsp?cx=139.732940071416&cy=35.6211199704868

(31)データストレージが残る件(2002/2/11)
C3001Hでデータストレージが残る件ですが、ムサシさんのサイトで、原因があげられていました。
なんでも、

hoge.kjx.kjx

のようになっている場合、データストレージが削除されずに残るらしいです。
んで、

hoge.KJX.kjxの場合は消えるそうで。
むむむ・・・不思議だ。

(32)CGIでGPS測位(for C3001H)(2002/2/11)
やまねこさんからの情報で、CGIを使ったGPS測位方法(Not 簡易位置情報)がわかりました。

C3001Hのみですけど

<A TASK=GO DEST="device:gpsone?url=http://hpcgi1.nifty.com/cotton100/c3001h.cgi&ver=1&datum=0&unit=0" LABEL="見る">GPS ezNavi(C3001Hのみ)

のようにすると、簡易位置情報とほぼ同様、取得できるらしいです。
(2002.3.10追記)
C3002K,C3003P(Panaの試作機)でも、上記の方法で動作するようです。

(33)隠し(?)API動かず(T_T)(2002/2/11)
CallHistoryなるクラスがあり、それを使ってみようと以下のソースを書いてみたんですけど、
どうもコンパイルは通っても、実機では動かないようです。
使い方が悪いのか、もともと動かないのか・・。

	try{
		CallHistory chist = CallHistory.getInstance();//オブジェクトを生成
		int amounttime=chist.getAmountTime();//
		offGraphics.drawString("AmTi:"+amounttime, 0, 48, Graphics.TOP | Graphics.LEFT);
		int amountcharge=chist.getAmountCharge();
		offGraphics.drawString("AmCh:"+amountcharge, 0, 64, Graphics.TOP | Graphics.LEFT);
		int lastime=chist.getLastTime();
		offGraphics.drawString("LTim:"+lastime, 0, 80, Graphics.TOP | Graphics.LEFT);
		int lastcharge=chist.getLastCharge();
		offGraphics.drawString("LCha:"+lastcharge, 0, 96, Graphics.TOP | Graphics.LEFT);
	}catch(Exception e){
		//例外処理
	}

(2002.2.24追記)
動かないのは、どうも、セキュリティ絡みで、拒否されているような雰囲気です。
まだ、なんとも言えないんですけど。
(34)キーマッピングの違い(2002/2/24)
洋もののアプリをezplusに移植し、アップしたところ「キー入力が受け付けない」との書き込みが。
エミュレータでは動作するので、(?_?)状態に。
で、C452CAを入手できたので、それで試してみると、確かにキー入力が受け付けていない。
仕方がないので、ひとまず、キー入力時のデータをトレースすることにしました。
すると、プログラム中では、[↑]などのデータはマイナス値で記述されているのにもかかわらず、
実際トレースしてみると、+値になっていました。
・・・どうも、エミュレータと実機では、キー入力時のデータが異なるようです。
※なお、本来は「getGameAction」で取得するべきところを、そのままの素の値で取得しているプログラム
 が悪いんですけどね(^^;)
(35)ストレージデータが消えない2(C3001H)(2002/2/24)
(31)で、ストレージデータが消えない件の原因がわかったんですけど、根本原因はcgiにありました。
通常、ダウンロードさせる場合は以下のようなタグを書き、ダウンロードさせるのですが

<ACTION TYPE=ACCEPT TASK=GO DEST=device:data/dnld?url=/data/abc.kjx&name=abc.kjx&size=123&disposition=devkdjx&title=abc LABEL=開始>

最後のtitle部分が、ファイル名(拡張子なし)
になるそうなんですが、name部分を同じにしているcgiが多いため、端末側で.kjxを付加する関係上、

abc.kjx.kjx

のような形になるそうです。

なので、さっそく、私もダウンロードcgiを修正しました。
splitを使い「.」部分で分割しただけですけどね(^^;)
--------------------
@abc=split(/\./,$filex);# .kjxなど拡張子を削除する変更,$filexは、拡張子付のファイル名
printf($queryhdml,"http://$ENV{'HTTP_HOST'}$ENV{'SCRIPT_NAME'}",$namex,(-s $name)+2,$cat,$abc[0],$sampletag,$filetype{$cat},$file);
--------------------

(36)着メロ連続再生(2002/2/24)
(13)でわからなかったと書いたMediaEventListenerの使い方。
実機で思う存分試せるようになったので、試してみました。
以下のようにすれば動くようです。
このコードでは、何かの音を再生したら、無限ループします。

//----------------------------------------------------------------
//Canvasの派生クラス
//ここで、MediaEventListenerをimplementする
class Lupin8Canvas extends Canvas implements MediaEventListener{
  //中略

  //Canvasの派生クラスのコンストラクタ
  public Lupin8Canvas(){
		//中略
		//メディアイベントリスナを登録する
		mediaplay1.addMediaEventListener(this);
  }

  //中略

  //イベントリスナの通知をここで受ける
  public void stateChanged(MediaPlayerBox source,int type,int option){
  	//
	if(type==MediaPlayerBox.STOP){
		//停止の場合
		source.play();
	}
  }
}
//----------------------------------------------------------------

(37)なんとなく絵文字(2002/2/24)
エミュレータでは実験できなかったことを、ここのところいろいろとやってます(^^;)
ということで、なんとなく絵文字を使ってみました。
ezplusの絵文字一覧のpdfファイルを参照し、絵文字のコードを入れれば、動きます。

    //------------絵文字〜----------------------
	char ch='\uE4FA';//ここに絵文字のUnicode対応コードを入れる。
	//初期画面
	graOff.drawString(""+ch, 0, 0, Graphics.TOP | Graphics.LEFT);
    //-------------------------------------------

(38)巨大画像(2002/3/10)
ここのところ、Midletのフリーアプリを、kjxに変換して楽しんでるんですけど(^^;)、
けっこう、実機で動かないものが多い(^^;)
多いのは

1)機種依存(SL45iなど)のスプライト関数などが使われていて、動かしようがない。
2)巨大な画像(600x150とか)が使われていて、おそらく内部でメモリ不足になっている。
3)フルカラーPNGが使われていて、Phase1の機種では動かない。(以前も書きましたけど(^^;))
4)よくわからないけれど、動かない(^^;)

で、たまに
3)J2SEのメソッドを使っている(^^;)

のがあります。
あと、エミュレーションのみ行われているアプリなんかでは、コンピュータの思考ルーチンが
鬼のように遅い(^^;)ものが多々あります。

(39)cgiでGPS測位2(2002/4/6)
某所からの情報で、cgiでGPS測位する方法(for C5001T)が掲載されてました。

<A TASK=GO DEST="device:gpsone?url=http://hpcgi1.nifty.com/cotton100/c3001h.cgi&ver=1&datum=0&unit=0&acry=0&number=0" LABEL="見る">GPS ezNavi(C5001Hのみ)

のようにすると、C5001Tでも取得できるらしいです。
さてはて、新機種はどうなんでしょうねぇ。

(40)MySync Ver2.0(2002/4/6)
せざーるさんからの情報で、MySyncがバージョンアップしたそうです。
A3012CA専用らしいんですが、

msmb\にある端末ごとの*.iniファイルのdatafolderセクションに

DfType=7

を追加するとそれ以外の機種でも使えるような雰囲気だそうです。
#まだやってないので確認は取れてませんけど(^^;)
(41)BannerMail for Phase2(2002/4/6)
ルパン以来、久しぶりに自作アプリを作りました。
バナーに変えたい文字を入力すると、バナー文字を作るものです。
「山」の場合、バナー文字に変換すると
    :
:   :   :
;   ;   ;
;;;;;;;;;

のようになります。
※なお、今回のアプリは「漢字」は使えないので(^^;)「山」は出ませんけどね。

フォントデータを自前で持たせている関係上、
全角ひらがな、カタカナ、英数字、各種記号(全角)のみで、
半角、漢字、絵文字は非対応です(^^;)

Phase2の機種では、バナーをアプリ上でメール出来ます。
Phase1の場合でも、通常の携帯電話ではコピー&ペースト機能があるようなので
メモをコピーすれば、メールすることが可能なようです。

インパクトのあるメールを作るには、面白いかなと思います。
(42)ストップウォッチの作り方(2002/4/13)
ストップウォッチの作り方、というか、(9)の「タイマが変?」で書いた、
TimerTaskを使う方法では、まともにストップウォッチが出来ないことが判明(^^;)
どうも、スレッドなりTimerTaskなりで「描画更新」は行うのですが、
カウントアップは、そこでさせないようです。

startTime = System.currentTimeMillis();

のように、System.currentTimeMillis()を使って、起動時間を保持しておいて、

NowTime = System.currentTimeMillis()-startTime;

のようにし、時間差分でストップウォッチとして動作させるようです。
なお、そのままでは時間として表示できませんので(^^;)、時:分:秒.00のような形に
数値変換する必要があります。
(43)Phase1の機種で位置情報(2002/4/13)
Phase1の機種は、「簡易位置情報」を取得できるのですが、これの使い道がいまいち
思い当たらない。
で、最近いただきものの(^^;)実機をいろいろといじっていると、メモの内容をコピー
&ペーストでメールの本文などに貼り付けられることが判明(C452CA)。
それなら、メモ部分に以前作った「位置Mail」のアプリで使っているURLを生成させる
ようにすれば、簡易位置メールなるものが可能になると思い、早速作ってみました。
(ただ、カット&ペーストが面倒ですけどねぇ・・・(^^;))
余談ですけど、簡易位置情報って取得してもGPSの位置情報と違い、お金がかからないっぽいです。
#アプリの場合。cgi経由だと、どうしてもパケ代かかりますし。
(44)Vendor項目の差(2002/4/14)
いつもお世話になっているezplus-boardにて、「関数電卓がC3003Pで動かない」との報告がありました。
聞いてみると、「起動時にすぐに不正なデータと出る&詳細情報も出ない。」とのことだったので
「JADがあやしいなぁ(^^;)」と見たところ、ずばり、Vendor項目が24byteを超えていました。
(Vendor項目は24byte以内)
でも、C452CAでは、それでも動いてましたので、JADの扱いでも機種ごとに差異があるようです。
#だれか、Vendor項目など、規格外の文字列長でどのような振る舞いをするか、機種ごとの一覧作ってくれないかなぁ
 ・・と他力本願モード(^^;)
(45)位置情報いろいろ(2002/5/4)
某所での情報ですけど、Mapfanwebは、地図に複数点の位置情報のマーキングとかをつけられる
んですねぇ。
http://game.gr.jp/gps/jichi2.cgi
で出てくる画像のプロパティを見れば、やり方がわかります(^^;)

あと、携帯電話用にPNG画像の取得とかも出来るようで。

http://game.gr.jp/gps/index2.txt

あと、緯度・経度より場所や、最寄駅も特定できるみたいです。
↓に場所取得cgiがおいてありました。(松風さん作)

http://www.spy.ne.jp/~taka-qu/ez/getplacename.txt
http://www.spy.ne.jp/~taka-qu/ez/getstationname.txt

(46)機種依存のまとめ(2002/5/4)
ezplus-boardなどで、いろいろと機種依存(?)の問題が出ているようなので、このあたりで
まとめておこうと思います。
(というか、このページは、私の備忘録のようなものなので(^^;))

・透過PNGは、256色じゃないとだめみたい。(詳細は、ムサシさんのサイトにて(^^;))
・JADでデータストレージの容量を設定することが出来ますが、エミュレータでは容量を
 オーバーしても、エラーは発生しない(^^;)・・・実機ではエラーになります。
・3003Pの場合、KDDI特有のAPIを使っている場合、Profile項目が「MIDP-1.0」では動作しないよう。
「KDDIP-2.0」にすると動作するみたい。
・画像表示関連では、
 A5301T>A3012CA>C452CA>A3011SA>C3002K>C3003P≧C3001H≧C451H>A3013T≧C5001T
 のような順番で速いらしい。
 なので、452CAでの動作確認ではちとつらいのかな(^^;;)

(47)JAD項目の機種依存(2002/5/19)
C452CAでは、
MIDlet-Jar-Size: 6047
のファイルサイズ部が間違っていても動きますが、その他の機種では
動かないようです(^^;)
以前もこういうことがあったような(^^;)
そうそう、どうもカシオの端末は(A3012CAも)結構融通をきかせてくれるらしいので、
実機確認をするなら、他の端末の方がよさそうです(^^;)
(48)リビルドしてもKJXが変わらない?(2002/5/19)
GPS位置情報アプリで、動作確認用にPhase1用と、リリース用の
Phase2用アプリのソースを用意しており、都度srcフォルダ内
のソースを入れ替えてビルドするといったことをやっています。
バージョンアップ版を作ったので、Phase2用のソースを
srcフォルダに入れ、ビルドしてから公開しました。
公開後、「地図が出ない」との書き込みがあり、調査してみると
Phase1用のアプリがアップされている模様(^^;)
##自分のアプリを逆コンパイルしてみました。

kjx作成ツールのsrcフォルダにはちゃんとしたPhase2のソースが
入っていたのにもかかわらず、ビルドしても、なぜかPhase1のソースで
ビルドされたkjxファイルが出来ていたようです(^^;)

ひとまず何かの不整合だろうと、tmpclasses,classesフォルダ内のファイル
を削除してリビルドすると、コンパイルすらしない(^^;;;)
・・・最新なのでのコンパイルの必要がないみたいなメッセージが出ます(^^;)
binフォルダのjad,jar,kjxを消したところやっと、ビルドできました。
どうも、雰囲気的にプロジェクトファイルの不整合が生じていて、
Phase2のソースでコンパイルしてなかったようです。
(49)いろいろリンク(2002/5/19)
久しぶりに有用なリンクなどを。

・「Java2ME MIDPゲームクリエーターズガイド J-PHONE KDDI完全対応」(技術評論社)\3580+Tax
が出たそうです。なんでも初心者お断りとのことで(^^;)

・こちさんが、ezplusの機種依存関係をまとめてくれています。

 http://www.jfast1.net/~wapcdma/

 まで。
 表になって、とってもわかりやすくまとまっています(^^)

・ezplusのライブラリサイトが新たに出来たようです。

  http://mb.amcsys.com/

  まで。

・MIDPの日本語化ドキュメント&機種依存情報をさかきけい氏が公開しています。

 http://godwood.allnet.ne.jp/vioret/midpapi/

 まで。機種によってテキストボックスの容量制限(500byte)があるところなど、
 実際やってみて初めてわかるところなどが書かれていて、結構有用です。
(50)ezplusエミュレータ(2002/5/19)
ezplusエミュレータがいよいよ公開されました。

http://www.au.kddi.com/ezfactory/tec/spec/kit_dl.html

ということで、早速ダウンロードして動かしてみました。

簡単に問題点、いい点などを。

・着メロ関係がすべてNGらしく、例外を吐くようです。(これは実際試してないです(^^;))
・バックライトのエミュレーションはなかなかいい感じです。
・GPS関連も試してみました。とりあえず試せると言うのは非常にありがたいです。
・画面サイズが簡単に変えられるみたいで、機種ごとのアプリ開発は楽になりそうです。

あとは、http通信あたりを試さないとなぁ。

(51)改行の問題(2002/5/19)
以前からわかっていたことなんですが、C452CAで、テキストボックスを使うと
改行が入力できません。
#テキストボックスの設定で「ANY」設定にしていても。
 アプリ側で無理やり入れることは可能なんですけど、いろいろと問題が・・。
で、こちさんに調査を依頼した分、他の方の状況を推測した分、報告をいただいた分
をまとめますと、

C452CA:NG
A3012CA:NG
C5001T:OK
C3003P:OKのよう
A3011SA:OK
C3002K:NG
A3014S:NG・・・・(2002.6.24追記 こちさん、ありがとうございますm(__)m)

のようです。
他の機種の方の報告よろしくお願いしますm(__)m

(52)高度がマイナス?(2002/5/19)
やまねこさんからの情報で、GPS位置情報での高度が
マイナス(測位方式はSECTOR-CENTER)の
データがあったそうです。
やっぱり、これは地下基地局なんでしょうかねぇ?
それとも、データの入力間違い?(^^;;)
どこかに基地局の位置と高度情報が公開されていたら面白いのに。
(53)repaintのタイミング(2002/6/23)
ezplus-BBSにて、ヒロユキさんのアプリが、とある機種は動いて、とある機種は動かないと
いう不具合があり、ソースを公開されていたので、見てみました。
はじめは、「よくあるPNGのフルカラー問題か、着メロデータの不具合、JADの問題のどれかだろう」
と思って(いままでの項目参照)、思い当たるところをすべてやってみたのですが、そうは問屋がおろさなかった(^^;;;)
J2MEWTKのエミュでは正常に動くということで、ezplusエミュで動かして試したところ、
repaintあたりで、何らかの例外が出ている模様。
ezplusエミュでは、詳細のエラーが特定できなかったため、MIDP互換レベルまでソースをコメント
アウトし、J-PHONEエミュを使い、エラー特定をすることに。
やってみると、どうも、オフスクリーンの画像が出来ていない状態で、paintメソッドが
走って、null pointer exceptionが吐き出されているようでした。

そういえば、JavaHz(iアプリのメーリングリスト)で、「paintメソッド(repaint)がいつ呼び出されるかはVM依存」
みたいなことを書いてあったようなことを思い出し、「なるほどぉ」とひとり納得したのでありました。

対処方法は、オフスクリーンのインスタンスを、Canvasの派生クラスのコンストラクタ上で作るように
今回はしたのですが、それが正しいのかどうかは何とも(^^;;)
ひとまず動いているようなのでめでたし、ということで。

ということで、スレッドでpaintルーチンを走らせている人は、注意しましょう。

※デバッグする方へ

問題となる部分をtry catchで囲んで、例外処理部で、Canvasにエラーを表示するように
すると、実機でも確認できて吉です。
Canvasではなく、Alertダイアログを出すという手もあります。

try{
	//問題となる部分のコード
    //行番号を入れておいて、例外に飛ぶとき表示させるようにするのもいいかも、

}catch(Exception e){
	//例外処理
	sDebug=e.toString();//sDebugはString型
	//以下のような形でCanvasに描画
	//g.drawString(sDebug,5,5,Graphics.TOP|Graphics.LEFT);
}

※このやり方で、とあるアプリの止まっている原因がわかりました。
 今、SINSENのムサシさんのページで、話題になっている「画面サイズ以上の
  画像を描画/createImageさせようとすると例外が発生する。」がそれみたいです。
 どうも、ezplusは、画面サイズ以上の画像は扱えないっぽいです。
 (少なくとも、C452CAでは)

(54)iもどき(2002/6/23)
以前、mysyncもどきを作られていた方が、「iもどき」なるものも作っているようです。
「iもどき」とは、早い話、「iアプリ->midpコンバータ」のことです。
midpに変換・・・ezplus,Java(TM)アプリにも簡単に変換できるということなので
期待したいところですね。

http://imodoki.sourceforge.jp/

よりダウンロードできます。
ただ、対応メソッドが限られているということなので、おそらく、逆コンパイラは
必須になってくる気がします。
アトムさんからの報告で、ふつーにフリーのアプリを変換すると動かなかったみたいですし(^^;)
(55)そにえりな携帯(2002/6/23)
ちょっと前にソニーエリクソンより、A3014Sが出ました。
なんか、結構アプリが速いとかいう噂をちらほらと耳にします。
ま、それはいいんですけど、こちさんの情報で、データフォルダは取得できないわ、
Sony独特のジョグで、SO503iと同様、キーの長時間押し下げみたいなことが出来ないとか、
アプリのテキストボックスで改行が使えない、など、
いろいろと癖があるようです。
予測変換とか、携帯のメール端末としては優秀なんですけどねぇ。

とりあえず、SFCaveFに関して、仮対策を講じました(^^;)
#[2]キーで上昇。

(56)ezplusのUnix風開発環境構築の方法(2002/7/7)
今日は七夕ですね。いっこも七夕らしくないですけど(^^;)

それはさておき、Sonyの増井さんがezplusのUnix風開発環境構築の方法を
公開しています。

http://www.csl.sony.co.jp/person/masui/ezplus/

それにしても、うちのサイトがリンクされてるのには
ちとびっくりしました(^^;) 
それだけezplusの情報がないということなんだろうな(^^;)
(57)GPS位置情報取得アプリ(2002/7/7)
私の作ったGPS位置情報取得アプリが紹介されていました(^^)

http://www.handover.net/haikai/01_gps.html

なんか、こういうふうに書いてもらえると嬉しいですね。
なお、簡易位置情報は、おまけとしてつけてただけだったので(^^;)、
こういう活用法があったとは、思いもしませんでした。
(58)CGIで位置情報取得3(2002/7/7)
今回は、リンクだけ(^^;)
cgiでGPSの位置情報を取得する方法で、詳細なパラメータの紹介をされています。

http://orienteering.hoops.ne.jp/gpsforol.html

まで。
(59)HDMLのリンク(2002/7/7)
うちのサイトは以前から、ダウンロードページからダウンロード後、
外に出される現象があったのですが、ダウンロードは出来ているようだった
のでほったらかしにしてました(^^;)
で、掲示板のほうで、y2k氏より「ダウンロードページからダウンロード後、
外に出される現象は、GOSUBを使っていないからでは?」という指摘をもらい、
さっそく修正しました。
具体的には、
<CE TYPE=ACCEPT TASK=GO DEST="http://hpcgi1.nifty.com/cotton100/ezget11.cgi?cat=devkdjx&file=Dish_stack.kjx" LABEL="見る">ダウンロード

を

<CE TYPE=ACCEPT TASK=GOSUB DEST="http://hpcgi1.nifty.com/cotton100/ezget11.cgi?cat=devkdjx&file=Dish_stack.kjx" LABEL="見る">ダウンロード

みたいに変えました。
とりあえず、これでうまく行っているようです。
こういうときGO使うとだめなんですね(^^;;;;)
#HDML かなりてきとーに覚えてるもので(^^;;)

(60)iアプリからの移植(2002/7/7)
最近、とあるアプリをezplus/Java(TM)アプリに移植してるんですけど、
そこでいろいろとわかったことがありますので、つらつらと書きます。

1)透過PNGがC5001Tで使えない?

おそらく使えるんでしょうけど(^^;)、D-pixedのVersion2.17で変換した透過PNGを
使って、アプリを作ったところ、C5001Tでは動かなかった(起動時にロードエラー?)
ようです。
なので、現状では透過PNGを使わず、BMP→PNG変換を「M+G Conversion Ver1.20」を
使い、変換しています。(URL: http://homepage1.nifty.com/mza/soft.html)

2)getKeypadState()の代用

よく、iアプリではrun()内で、getKeypadState()を使ってキー入力処理を行ってい
ますが、MIDPではなさそう(^^;)ですんで(探し方が悪い?)、keyPressed/keyReleased内で
フラグを立てて、run()内でフラグを見に行くようにして代用しています。

3)setOrigin()の代用

setOriginの代わりとして、MIDPではtranslate(x,y)がありますのでこれを用います。
ただ、setOrigin(0,0)とtranslate(0,0)ではちょっと意味合いが違いますので、
setOrigin(0,0)の代わりとしては、
offGraphics.translate(-offGraphics.getTranslateX(),-offGraphics.getTranslateY());
とします。
(なぜなら、translateは「現在設定されている座標系」からのTranslateですので(^^;;))

4)drawStringの代用

MIDPでは、drawStringのパラメータが1つ多いと以前も書きましたけど、
iアプリのdrawStringに対応する最後のパラメータは以下のようになっています。
「Graphics.BOTTOM | Graphics.LEFT」

具体的には

g.drawString("test",20,20);

を

offGraphics.drawString("test",20,20,Graphics.BOTTOM | Graphics.LEFT);

にします。

5)setColorの代用

MIDPでは、色指定を「00RRGGBB」指定できますので、
以下のように代用します。

offGraphics.setColor(0x00ffffff);//WHITE:7

なお、iアプリの「Graphics.getColorOfName(7)」で色定義されている場合は、
APIマニュアルを見て、「7」に割り当てられている色を探す必要があります。

6)clearRectの代用

これは、色指定(setColor)後、fillRectを使って代用します。

7)ダブルバッファリングの代用

これは、以前も書いたような気がしますが、offImageを作ってダブルバッファリング
の代わりにします。
この部分に関しては、MIDPのほうが融通がきいて非常に便利です。

(61)JAD項目の機種依存2(2002/8/4)
先日、きのこ狩りというiアプリをezplusに移植してたんですが、
C3003Pで動かないとの報告が。
最初から「不正データ」扱いだったので、jadの項目だろうと、
いろいろといじってみても動かない(^^;)

で、基本に立ち返って、ezplusのマニュアルを見てみると、

MIDlet-Name:3 バイト以上24 バイト以内
MIDlet-Vendor:3 バイト以上24 バイト以内
MIDlet-Jar-URL:5 バイト以上24 バイト以内

となってました(^^;)

今回は、MIDlet-Nameが2バイトになっていたため、不正データ
扱いになっていたようです。

なお、C5001T,452CAでは動いていたので、これに従って
なくても、動く機種がありそうです。

(おまけ)
ezplus対応機種の搭載メモリのチェックが出来るアプリが置いてある
サイトです。

http://bu-nyan.m.to/ez/ezplus.htm

まで。
私も各機種のメモリサイズを知りたいので、協力お願いしますm(__)m

(62)GPSの解説(2002/8/4)
ezplusとは直接は関係ないのですが(^^;)、
わかりやすくGPSを解説してあるサイトがありました。
#FGPSからの情報(^^;)

http://www.trimble-j.com/techinfo/whatgps/whatgps.htm

まで。

(おまけ)
ここのページの日付、2002年になってからの分が、なぜかほとんど「2001」になってました(--;)
まんま貼り付けして修正してたのがまずかったかな(^^;)
(63)ヒープメモリ(2002/8/14)
とりあえず452CAのヒープメモリをチェックしてみました。

452CA 387452bytes

でした。
チェックの仕方は

long totalmem = Runtime.getRuntime().totalMemory();

として、total部分をCanvasなり、Alertダイアログなりに
出せばOKです。
なお、アプリの組み方によって、上記のメモリの大きさは前後するようです。

EZPLUS-BBSなどで、提供してもらった各機種情報です。(2002.9.29更新)
他の方も重複して情報提供してもらってます。ありがとうございました。m(__)m

機種メモリサイズ協力者
C451H262114Safiiさん
C452CA387452綿100号(^^;)
C5001T471040なおさん
C3001H524288よしまささん
C3002K512000Janyさん
C3003P524288かなぶんさん
A3011SA524288通りすがりさん
A3012CA715132メタルさん
blue.b@さん
A3013T471040ezplus635さん
A3014S524288HIDEさん
A3015SA614400零さん
A5301T614400こちさん
A5401CA954224銀次郎さん(2003.12.6)
W11H2097152銀次郎さん(2003.12.11)
(2003.12.6追記) ※ん・ぱか工房さんの http://www.saturn.dti.ne.jp/~npaka/kvm/midp/index.html にて、ez/VodafoneのJavaヒープ一覧が書いてあります。
(64)MathFPインストール(2002/8/24)
以前MathFPというクラスライブラリを紹介しましたが、
「逆コンパイラを使わない普通の利用方法」が思いのほか面倒だったので(^^;;;)、
やり方を書いておきます。

1)ダウンロード

MathFP最新版、
 http://home.rochester.rr.com/ohommes/MathFP/mathfp_2_0_5.zip

をダウンロードします。

2)解凍〜

  +lhacaにてc:\に展開するとmathfp_2_0_5フォルダが出来てそこに
 展開されます。

3)preverify(事前検証)準備1

 携帯JAVAでは、preverifyされたクラスファイルでないと利用できないため、
 公開されているクラスファイルを念の為、preverifyします。

  MS-DOSプロンプトを起動し、
  クラスファイルのパッケージのルート(※1)に移動します。
  具体的には
 cd C:\mathfp_2_0_5\mathfp_2_0_5\classes
 と入力します。

(※1)理由はkajasのサイト http://www.kajas.com/faq/faq2.html#q4 参照

4)preverify(事前検証)2

プロンプトが
C:\mathfp_2_0_5\mathfp_2_0_5\classes>
になっていることを確認し、

C:\J2MEWTK\bin\preverify -classpath c:\J2MEWTK\lib\midpapi.zip;c:java_dev\kddip.jar .

と入力し、preverifyします。
行うと、カレントディレクトリ下にoutputディレクトリが出来、そこにpreverifyされたクラスが出来ています。
※一部エラーが出ますが、wabaの関連のクラスですので、気にしないで下さい。

5)ライブラリとして圧縮する。

C:\mathfp_2_0_5\mathfp_2_0_5\classesをルートディレクトリとしてツリー圧縮します。
早い話、上記のフォルダを開いて、+lhacaにてフォルダ(netフォルダ)ごとzip圧縮と言うことです。
名前はMathFP.zipとしておいてください。
(c:\ezplus_sdk\フォルダに入れるとします)

6)クラスライブラリを使ったソースを作る。

クラスライブラリを使ったソースを作ります。
面倒だったので、下のソースはとりあえず動作確認のためだけの
ライブラリ利用です(^^;;)
#バグらなければおっけ、みたいな(^^;;;;)

//-----------(とりあえずのソース)-------------
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
//--------ここでimportする。------------
import net.jscience.util.*;
//---------------------------------------
public class fptest extends MIDlet{

     private Canvas helloWorld = new HelloWorld();
     protected void startApp() {
         Display.getDisplay(this).setCurrent(helloWorld);
     }

     protected void pauseApp() {
     }

     protected void destroyApp(boolean unconditional){
     }
 }

 class HelloWorld extends Canvas {
     protected void paint(Graphics g){
      g.setColor(0x000000);
		//-------ライブラリ使用-------
		int x=33;
		int x_fp= MathFP.toFP(x);//33を固定小数点に変更
		//----------------------------
      long total = Runtime.getRuntime().totalMemory();
      g.drawString("メモリ:"+total+"bytes", 0, 50, g.BASELINE|g.LEFT);
     }
 }
//-------------------------------------------------

7)ezplus開発ツールにて、クラスライブラリを登録

ezplus開発ツールで設定できる項目「classpath」に
先ほど作ったMathFP.zipを登録します。
具体的には、もともと記述されているclasspath部分に

;c:\ezplus_sdk\MathFP.zip

を追加します。

8)コンパイル〜

ezplus開発ツールにて、コンパイルします。
コンパイルするとfptest.jad,fptest.jarファイルが出来ます。

9)MathFPライブラリを組み込む

先ほど作ったfptest.jar内のファイルを展開し、MathFPライブラリを組み込みます。

9-1)fptest.jar解凍

既に出来ているfptest.jarをダブルクリックして解凍します。
(+lhacaで関連付けしていれば、解凍できます)

解凍すると、fptestフォルダが出来、そこに解凍したファイルが入っている
はずです。

9-2)MathFP組込

5)で作ったMathFP.zipを解凍し、netフォルダごとfptestフォルダに入れます。
なお、不要なファイルやフォルダがいくつもあるので、それは削除しておきます。

9-3)jar圧縮

MathFPを組み込んだfptest.jarを作ります。

現在のフォルダ・ファイル構成は以下のようになっていると思います。
\fptest
   fptest.class
   HelloWorld.class
   \net\jscience\util\MathFP.class
   \META-INF\MANIFEST.MF

fptest.classの入っているフォルダをルートとするツリー圧縮をしてfptest.jar
を作ります。

早い話、fptestフォルダに入って、
   fptest.class
   HelloWorld.class
   \netフォルダ
   \META-INFフォルダ
を選択し、+lhacaにDrag&Dropするだけです。
※ただし、+lhacaの設定はzip圧縮になっているとする。

Drag&Dropすると、fptest.zipみたいな形のファイル名(そうでない場合もあります)
になるので、fptest.jarにリネームします。

10)jadファイル設定を変更

fptest.jadファイルの「MIDlet-Jar-Size:」部分が元と変わってると思いますので、
fptest.jarのファイルサイズを調べて、そのファイルサイズを入力してください。

11)kjxファイル作成

kjxアーカイバを使って、jad,jarを結合させます。
((14)フリーMidletのkjx変換方法 参照のこと)

これで完成です。

一旦classpathに登録すれば、9),10),11)の作業のみになります。
それにしても、面倒です(^^;;)
(65)白ROMいろいろ(2002/9/22)
とりあえず、ezplusのアプリは白ROMで(^^;)動作試験しているわけですが、
そこでわかったこと。
C452CA,C451Hは、白ROMでも、簡易位置情報が取得できるようです。
452CAは、私の白ROMで確認したのですが、451Hでは、「アンテナマーク」が圏外になっていても、
簡易位置情報は取得できるそうです。(http://www.handover.netの管理人さんからの情報)
問題は、位置だけわかっても、どう使うかが(^^;)
地図も出ないし。ログは取り出せないし。
データストレージをMysyncで取り出すことが出来れば、簡易移動ロガーでも、作れるんですけどね。
(個人サイトに掲載する程度の、簡単な移動ログなら使えそうですし。)
(66)同時押し検出(2002/9/22)
最近iアプリの移植なんぞをやっていますが、getKeypadState()のような同時押し検出が
出来ないものかと考えてました。
とりあえず以下のようにやってみたら、何とかできたので、書いておきます。
※なお、以下のソースでは、クリアキーで強制終了してしまいます。
 ちゃんとしたものを作る場合は、クリアキー処理も入れておきましょう。

(やり方)

1)あらかじめ、sKeystateのような変数(int型)を用意しておきます。
2)以下のように、keyPressedイベントと、keyReleasedイベントを記述しておきます。
3)Thread(run()内)に、getKeypadState()がある部分を、sKeystateに変えます。
 例として
 buf=getKeypadState();
 ↓
  buf=sKeystate;
 に変えます。

//--------------keyPressedとkeyReleased-----------------------

	    protected void keyPressed(int code)
	    {
			//sKeystateは、別の部分でint型で、定義しておく。
			//switch文は、組み方によってはもっとすっきりするはず。
			//(定数の割り当てが決められているので(^^;))

			//16進  : 2進数                      [キー割り当て]
			//1     :                          1 [0]
			//2     :                         10 [1]
			//4     :                       0100 [2]
			//8     :                       1000 [3]
			//10    :                     1 0000 [4]
			//20    :                    10 0000 [5]
			//40    :                   100 0000 [6]
			//80    :                  1000 0000 [7]
			//100   :                1 0000 0000 [8]
			//200   :               10 0000 0000 [9]
			//400   :              100 0000 0000 [*]
			//800   :             1000 0000 0000 [#]
			//10000 :      1 0000 0000 0000 0000 LEFT
			//20000 :     10 0000 0000 0000 0000 UP
			//40000 :    100 0000 0000 0000 0000 RIGHT
			//80000 :   1000 0000 0000 0000 0000 DOWN
			//100000:  10000 0000 0000 0000 0000 SELECT(FIRE)
			//200000: 100000 0000 0000 0000 0000 SOFT1
			//400000:1000000 0000 0000 0000 0000 SOFT2

	        int nMove = getGameAction(code);

	        switch(nMove) {
	        case DOWN:
				sKeystate=sKeystate | 0x80000;
				break;
	        case LEFT:
				sKeystate=sKeystate | 0x10000;
				break;
	        case RIGHT:
				sKeystate=sKeystate | 0x40000;
				break;
	        case UP:
				sKeystate=sKeystate | 0x20000;
				break;
	        case FIRE:
				sKeystate=sKeystate | 0x100000;
				break;
	        default:
				//return;
	        }
			switch(code){
			case KEY_NUM0:
				sKeystate=sKeystate | 0x1;
				break;
			case KEY_NUM1:
				sKeystate=sKeystate | 0x2;
				break;
			case KEY_NUM2:
				sKeystate=sKeystate | 0x4;
				break;
			case KEY_NUM3:
				sKeystate=sKeystate | 0x8;
				break;
			case KEY_NUM4:
				sKeystate=sKeystate | 0x10;
				break;
			case KEY_NUM5:
				sKeystate=sKeystate | 0x20;
				break;
			case KEY_NUM6:
				sKeystate=sKeystate | 0x40;
				break;
			case KEY_NUM7:
				sKeystate=sKeystate | 0x80;
				break;
			case KEY_NUM8:
				sKeystate=sKeystate | 0x100;
				break;
			case KEY_NUM9:
				sKeystate=sKeystate | 0x200;
				break;
			case KEY_STAR:
				//*の場合
				sKeystate=sKeystate | 0x400;
			case KEY_POUND:
				//#の場合
				sKeystate=sKeystate | 0x800;
				break;
			}

	        //repaint();
	    }

	    protected void keyReleased(int code)
	    {
	        int nMove = getGameAction(code);
	        switch(nMove) {
	        case DOWN:
				sKeystate=sKeystate & (~0x80000) ;
				break;
	        case LEFT:
				sKeystate=sKeystate & (~0x10000);
				break;
	        case RIGHT:
				sKeystate=sKeystate & (~0x40000);
				break;
	        case UP:
				sKeystate=sKeystate & (~0x20000);
				break;
	        case FIRE:
				sKeystate=sKeystate & (~0x100000);
				break;
	        default:
				//return;
	        }
			switch(code){
			case KEY_NUM0:
				sKeystate=sKeystate & (~0x1);
				break;
			case KEY_NUM1:
				sKeystate=sKeystate & (~0x2);
				break;
			case KEY_NUM2:
				sKeystate=sKeystate & (~0x4);
				break;
			case KEY_NUM3:
				sKeystate=sKeystate & (~0x8);
				break;
			case KEY_NUM4:
				sKeystate=sKeystate & (~0x10);
				break;
			case KEY_NUM5:
				sKeystate=sKeystate & (~0x20);
				break;
			case KEY_NUM6:
				sKeystate=sKeystate & (~0x40);
				break;
			case KEY_NUM7:
				sKeystate=sKeystate & (~0x80);
				break;
			case KEY_NUM8:
				sKeystate=sKeystate & (~0x100);
				break;
			case KEY_NUM9:
				sKeystate=sKeystate & (~0x200);
				break;
			case KEY_STAR:
				//*の場合
				sKeystate=sKeystate & (~0x400);
			case KEY_POUND:
				//#の場合
				sKeystate=sKeystate & (~0x800);
				break;
			}
	    }
//--------------keyPressedとkeyReleased end------------------


(67)簡単(?)移植方法(2002/9/22)
iアプリから、ezplusへの移植、とりあえず雛型があれば、
それなりに移植は出来ると思います。
手順は、

1)リソースを変換。
  a)画像(*.gif)は、pngに変換。(変換ソフトは、http://www.irfanview.com にあります)
  b)音声ファイル(*.mld)は、pmdに変換。
    (変換ソフトは、http://homepage1.nifty.com/y-kondoh/arch/smded509.exe にあります。)
    (あと、PSMPlayer(http://www.ne.jp/asahi/phs/phs/)もお勧めです。)
  のように変換します。
2)ezplus開発ツールで、新規プロジェクトを作ります。
3)雛型の名前(クラス名)を新規プロジェクト名にあわせておきます。
4)移植する(^^;;)
 移植に関してのノウハウ的なことは、以前書いていますので、それを参照ください。

なお、雛型は、
移植用雛形ソース
に置いておきます。
画像使用、キー入力、コマンド(ソフトキー)による終了、Canvasによる描画、
ダブルバッファリング、Threadなどを含んでますので、一般的なゲームアプリには
対応できるかと思います。
(タイマーはないですけどね(^^;))

(68)データストレージが確保できません(2002/9/22)
最近、「データストレージが確保できません」と出て、アプリが動かないという報告が
あります。
で、アプリはまだまだ入れられる余地があるそうで。
いろんなところの報告を統合すると、どうも、「データストレージ領域は固定」のようで、
アプリ領域がどれだけ余っていても、データストレージ領域がいっぱいだと、データストレージを
使ったアプリはそれ以上入れられないような雰囲気です。
例として、アプリ領域が12.8MBあっても、データストレージ領域が、500KBしかない、みたいな。
一度、データフォルダを空にして、10KBのデータストレージを使ったアプリをたくさん入れてみて
どれくらいで、「データストレージが確保できません」と出るか、誰か試してもらえませんかねぇ?
今のところ、3012CAと5001Tで、上記の報告を受けています。

(69)「/」の怪(2002/10/12)
とあるiアプリを移植していたのですが、452CAでは動くのに、5001Tでは、「画像が出ません」との
連絡が。
透過PNGの問題とか、リソース不足とか、スレッド&タイマーのタイミングでリソースが
ロードしていない状態で画像表示しているとか、いろんな原因を疑っていたのですが、
どれもうまく行かず。
とりあえずデバッグルーチンを入れて、見てもらったところ、画像表示のところで
NullPointer Exceptionが吐かれている様子。

で、よくよく見てみると、CreateImage時に

for(int j = 0; j < 5; j++){
   bimg[j] = Image.createImage("b"+j+".png");
}

のように、createImageのパラメータの頭に「/」を入れていなかったため、
そこで画像がロードされていなかったようです。
ロードされていないイメージを、表示しようとしていたため例外が発生していたようで。

ということで、またもや452CAの融通がきくところが裏目に(^^;;)
頭に「/」を入れることで無事、画像が表示されるようになりました。

なお、このcreateImageの段階では、例外を吐いていなかったんですよね。
そこが謎。
(70)objectタグでのダウンロード方法(2002/10/12)
昼寝してたのに起こされた・・・(-_-)
それはいいとして、ezplusのXHTML-Basicでのobjectタグによるダウンロード方法が
公開されています。
ただ、今回出た新機種(A3015SA,A5301T)のみですけど。

こちさんのサイトや

http://www.jfast1.net/~wapcdma/

ムサシさんの掲示板に詳細は書かれています。

http://cgi.sinsen.org/bbs.cgi

(71)fillPolygonの代替(2002/10/12)
iアプリではポリゴン塗りつぶしのfillPolygonというメソッドがあるのですが、ezplusでは、
ありません。
で、代替を探していたのですが、
さかきけいさんのサイトの

http://godwood.allnet.ne.jp/cgi-bin/vioret/midp/leave.cgi

の掲示板に、その代替メソッドが紹介されていました。
iアプリ→ezplus移植の際の参考になれば。

(72)MIDlet-X-AllowURL(2002/10/12)
http通信をさせようと、kjx作成ツールにて、MIDlet-X-AllowURLを追加してみました。
とりあえず追加は出来るけれど、ビルドするとなんか変なエラーが発生して、
preverifyまでしかいかず、アーカイブまで行かない様子。
いろいろと試してみたところ、どうも、Otherkeywordのボタンを押して、その中で
キーワードを入力する際、

MIDlet-X-AllowURL-1: http://hpcgi1.nifty.com/cotton100/

のように、「URL:」の後に半角スペースを入れないとおかしくなるようです。
(73)kjxのダウンロード(2002/11/3)
最近、やたらと「PCからダウンロードする方法を教えろ」な人が多いので、
概略だけを書きます。
なお、このことに関する質問には一切答えませんのでご注意を。
詳しいことを知りたい方は、auのサイトにdownload.cgiに関する詳細資料がありますので、
そちらを参照ください。

なお、うちのサイトには適用されませんが、よー似たものです(^^;)
auが提供している標準のダウンロードcgiを使った場合の方法です。

1)ダウンロードのURLを取得し、ダウンロード
これは、wapエミュなどを使うか、hdmlをダウンロードしてどこに
リンクが張られているかを見ます。

auの提供しているhdmlの記述であれば、

<action type="accept" task="gosub" dest="device:data/dnld?url=$url" label="OK">
<ce value="http://server/download.cgi&name=logo.png&size=3760&disposition=dev8wlw&title=logo1">logo1

のようになっているかと思います。

これは、実際には、

device:data/dnld?url=http://server/download.cgi&name=logo.png&size=3760&disposition=dev8wlw&title=logo1

のように展開されて、wap端末に送られます。
で、wap端末側で、
download.cgiを以下のような形で呼び出します。offset部分はちょっとあいまい(^^;)

http://server/download.cgi?name=logo.png&offset=0&count=3760

この「server/download.cgi」部分を、該当URLに変えれば、直接ダウンロード可能です。

なお、自作のcgi使ってる方が多いので、これで落とせるところは少ないかも。

2)CRCを削除する。

http://member.nifty.ne.jp/vioret/mkezplus.html#download

にある、CRC削除ツールを使い、CRCを削除します。
CRCって何?という方は、PCからダウンロードは、あきらめてください。

3)MySyncなどを使って転送する。

これは、説明書の通りに転送してください。
これで、PCからダウンロードして、遊べるかと思います。
(74)startAppの利用方法(2002/12/23)
通常、ezplusでは「相手側の要求にリアルタイムに応答」する方法は、C-Mail通信以外
ありません。
もちろん、http通信&タイマで定期的に情報取得をするという方法はありますが、
これだとパケ代がばかにならない。
いわゆる「ここせこむ」みたいなことをさせたいと思ってもうまくいかないことになります。
そこで、startAppをうまく利用できないかということに。
startAppは、起動時、および、電話やメールの割り込み後に必ず1回呼び出されるメソッドです。
ということは、アプリを待ち受けアプリみたいにしておけば、メールや電話をかけて、
それが終われば、必ずstartAppが呼ばれるということになります。

これをうまく利用すれば、「ワン切り電話などをレスポンス要求トリガ」みたいにして、
リアルタイム応答が出来るということになります。

利用例としては、あらかじめ、それを利用したアプリを待ち受けアプリにしておけば、
携帯電話が盗まれたとき、ワン切り電話をその携帯にかければ、http通信で、サーバーに
位置情報を送り込むことが可能となり、現在どの場所に携帯電話があるかをリアルタイムに
知ることが出来ます。
同様に、車内に携帯電話を置いておけば、車が盗まれたとしても、位置がわかりますね。(^^)b
問題は、電話がかかってきたりメールが来たら、必ず呼び出されるということですけど(^^;;)、
Phase2.5で待ち受けアプリ関連のAPIが拡張されてますから、なんかそのあたりでうまく
出来そうな気もしないでもないです。
(75)Phase2.5のPhrasePlayer(2002/12/23)
最近、Phase2.5端末も出て、Phase2.5の仕様も明らかになりました。
#なお、SDKはまだ公開されていません。
その中で、PhrasePlayerというものも新登場しました。
ごくごく簡単に言えば「BGMを鳴らしながら、効果音が鳴らせる」しろもの(^^;)・・・(おおざっぱ)
なんですが、実は、jblendのAPIだったりすので、「もしや、J-PHONEのstubclasses.zip使えば
SDKなしでも動くのでは?」と思い、やってみました。
なお、Jのstubclasses.zipをezplus開発ツールで使う方法は、
うちのサイトの「Java(TM)アプリ はじめのいっぽ」をご覧ください。

サンプルコードは、

http://jp.appget.com/pc/dev_tips/dev_0327/index.html

を、ezplus用に修正したものを使いました。
とりあえず、

//import	com.j_phone.system.DeviceControl;

と、J特有のクラスライブラリをコメントアウトして、それなしでも
動くようにすれば、OKです(^^;)

動くかどうか、半信半疑だったのですが、とりあえずは動いているようです。
ちょっと不具合あるようですけど(^^;;)
・・・これは、単純にアプリ側のキー操作設定ミスでした(ははは・・)

(2003.1.19追記)

あと、こちさんの情報で、J2MEWTKに入っているmidpapi.zip内に、
J-PHONE用のcom.jblend.〜の内容をコピーしたら動くとの事。
こちらのほうが楽みたいです。
ただ、Phase2.5のSDKが出た場合、切り離しがちと面倒かもしれません。
・・・と言っても、ただ消すだけだから、問題ないか(^^;;)

(76)クリアキー問題(2003/1/11)
なんか、この項目を書いたつもりでいたのですけど、書いてなかったようなので
書いておきます。参考になれば。

ezplusにて、getGameAction(int keyCode)を使う場合、クリアキーに対応していないため、
エラーで落ちるという現象があります。
これは、ちゃんとezplusの開発ガイドには書いてあるのですけど、みなさんけっこう
見落としがあるようなので(^^;)

----(抜粋)-----------
クリアキー押下について
MIDP 仕様では、クリアキーがありませんが、ezplus アプリケーションではクリアキー押下[ keyPressed(),
keyReleased(),keyRepeated()] を取得することが可能です。ただし、クリアキー押下をgetGameAction(int
keyCode)にて処理をさせようとすると、getGameAction(int keyCode)がIlleagalArgumentException を送出します。
---------------------

ということで、
//---------------
    protected void keyPressed(int code)
    {
		int nMove=0;
		try{
	        nMove = getGameAction(code);
		}catch(Exception e){
			//例外処理
		}
		//例外になるとnMove=0のままになる。

        switch(nMove) {
        case DOWN:
			//処理入れる
			break;
		}
	}
//-----------------

のように、try catchでエラーを検出してやって、
強制終了しないようにする必要があります。
※追記
if(code==0) return;

でも行けたかな?(未確認)
(77)mmfが鳴らない?(2003/1/11)
とあるアプリをmmf対応(というかとある携帯はmmfしか対応してない(^^;))
するために、mldをSmdEd(ver 4.76)を使って、mmfに変換しました。
で、何が悪かったのかはわからないのですが、アプリをアップしたら
「音が鳴らない」の報告が(^^;)
C452CAで確認したところ、確かに鳴らない(^^;;;)

原因がわからなかったので、とりあえず、PsmPlayer v3.60 フリーソフト版を
ダウンロードしてきて、同様にmld→mmf変換をしてみました。
そうすると、正常に音が鳴りました。
にしても、何が原因だったんだろ。16和音/4和音とかそのあたりかなぁ?(?_?)

(78)JDK1.4でezplus開発環境を使う(2003/1/11)
今まで、ezplus開発環境ではJDK1.4は不具合があるから使えないと言う
話がありましたが、どうも、バージョンあわせのオプションをつければ、
うまく動くようです。

javacのパスに" -target 1.1"と書けば使える

とのことです。
(79)A5303Hの透過問題(2003/1/11)
ムサシさんの掲示板より整理も兼ねて、引用(^^;)

A5303Hでは、PNG画像の緑色部分が非透過属性なのにもかかわらず、
透過してしまうとの事です(^^;)

-------(引用)----------
RGB 00FC00 - 07FF07の範囲に設定されたパレットが透過されてしまうようです。
-----------------------
とのことで、その範囲を避けた画像を作る必要があるようです(^^;;)

(2003.1.19追記)
同じくムサシさんの掲示板より引用(^^;;)

-------(引用)----------
どうも、PNG データに bKGD チャンクが付いてると、透過されないようです。
(試してみました。)
# C3001H にも同様の現象があったのですが、まだ直ってなかったとは…。
-----------------------

とのことで、bKGDチャンクのつくツールを避けるか、bKGDチャンクを除去する
ツールを使うかする必要がありそうです。
※bKGDチャンクを除去するツールは、
http://www.goldmoon.org/~naoki999/

にある、PNGDIETを使うといいみたいです。
(80)データフォルダのデータ取得(2003/1/11)
引き続き、引用が続きます(^^;)
私自身は、データフォルダ自体の取得はエミュ以外では やったことないのですが、
ドキュメントに書かれていない情報なので、整理も兼ねて引用しておきます。

音楽再生の場合は、以下のようにして出来るそうです。(機種依存あり)

mr = new MediaResource("datafolder://qcp"); 

で、ファイル名がこれでは取得できない場合があるそうなので、
以下のような形でファイル名取得をする必要があるようです。

----------(引用)-------------------
3012の場合ですが、ファイル名は適当な数値になるようです。(datafolder:///000012EF.datてな感じ)
5001でも同じなのであれば、DataFolderConnection.getListを使用して数値ファイル名一覧を取得し、
それぞれ1つ1つに対してタイトルを取得して希望のタイトルの数値ファイル名を得る必要があると思います。 
-------------------------------
(81)機種ごとの振り分け(2003/4/30)
複数の機種に対応させる場合、対応データや、画面の大きさなど
いろんな条件があるため、機種ごとに別の対応をさせたい場合があります。
そのとき使うのが、
PhoneSystem.getID()です。
(これは、ezplus プログラミングガイドにも書かれてるので書くまでもないかも(^^;))

で、使い方はこんな感じ。

//-------------------------------
//--事前にimportしておく
import com.kddi.system.*;

//〜中略〜

String str1=PhoneSystem.getID();
if(str1.equals("HI23")){
	media1=new MediaResource("resource:///y01.mmf");
}else if(str1.equals("TS23")){
	media1=new MediaResource("resource:///y01.mmf");
}else{
	media1=new MediaResource("resource:///y01.pmd");
}
//-------------------------------

(おまけ)
音データとして着メロデータを使う場合、mmfが一番反応がいい
(再生命令を出してから再生するまでの時間が速い)みたいです。
qcpとかだと、ワンテンポ遅れるよう。
pmdは・・・あまりやってないので何とも(^^;)

(82)kjxファイルの作り方(その1)(2003/9/15)
txt2kjxなどで、自前でkjxファイルを作ることが出来たので、その方法を
つらつらと書いていこうと思います。
まず、簡単に概要から。

ezplusのアプリは、ビルドすると(ここではhogeというプロジェクトの場合)

hoge.jad
hoge.jar
hoge.kjx

と、binフォルダに3つ出来ます。
ここで、各ファイルは、

a)hoge.jadは、各種属性を記述しているファイル。
b)hoge.jarは、実際のアプリをjar圧縮(zip圧縮)しているファイル。
c)hoge.kjxは、hoge.jadとhoge.jarを、「ヘッダ+α」を頭につけて、2つのファイルを
「ほぼ」くっつけただけのファイル。

となっております。

ですので、たとえば、テキストビューワや、テキストアドベンチャーなど、
リソースさえ変えれば、アプリ自身は変えなくてもいいようなものの場合、
比較的簡単にkjxファイルが「作れそう」と思われると思います(^^;)

実際手動で作っても(+lhacaとか使って)、何とかなりますし。

まずは、開発環境を整えている方向け(ここがミソ(^^;))に、リソースを含むアプリを、
手動にてリソースを変える方法を書きます。

1)jar圧縮を解凍する。

+lhacaを使い、hoge.jarを解凍します。

解凍すると、クラスファイルとリソースファイルが出てきます。
(あと、マニフェストファイルもあります(^^;))
リソースが画像の場合は、適当な画像編集ソフトで編集してみてください。
リソースが、テキストの場合は、問題ない程度に編集して変えてみてください。

2)zip圧縮(ツリー形式)をする。

ひとまずリソース置き換えが完了したら、+lhacaを使い、
zip圧縮をします。
この時注意しなければならないのは、フォルダ構成を保持したまま圧縮する必要が
あるということです。

例えば、

hoge.class
hogecanvas.class
res\pic.png
    pic2.png
com\hogehoge\sys\abc.class

のような構成になっていた場合、同様のフォルダ構成を保ったまま圧縮する必要があります。
ま、難しいことを考えずに、hoge.classのあるフォルダ上で、
hoge.class,hogecanvas.class,[res],[com]の4つ([res],[com]はフォルダ)
を選択して、+lhacaのアイコンにドラッグ&ドロップすれば、圧縮されますけどね(^^;)

3)ファイル名変更

普通に圧縮すると、〜.zipというファイル名になるので、

hoge.jar

というファイル名に変更しておきます。

4)jadファイルの書き換え

jadファイルの中に、jarファイルサイズの項目があるので、その項目を
先ほど作ったhoge.jarのファイルサイズに書き換えておきます。

5)kjxアーカイバにて、kjx化する。

これは、「ezアプリ(Java)[ezplus]開発をはじめる方へ」の

d)kjxアーカイバを使い、kjx化する。

のほうで紹介していますので、それに従っていただければ、ちゃんとできるかと
思います。

これで、「手動で」、kjxファイルが出来たかと思います。
おそらく、リソースが変わった形でアプリが動いているかと思います。
(動かない場合は・・・何らかの問題があるんでしょう(汗))

その2(※)では、それを「kjxアーカイバに頼らずに」する方法を書いていきたいと思います。
なにせ、一般ユーザは、開発環境をインストールしてませんしね(^^;)

※時間がないもんで(^^;)、その2に持ち越し
(83)kjxファイルの作り方(その2)(2003/11/3)
kjxファイルの作り方ですけど、

kjxアーカイバに頼らない方法=kjxファイルのファイルフォーマット

を知る必要があります。
これは、KDDIでは非公開なので、kjxファイル自体をバイナリエディタで解析するなどして、なんとか
知る必要があります。

で、検索したところ、

http://soft.spdv.net/ez/dev.html

このサイトに、解析結果がわかりやすく書いてあるので、これを元にバイナリデータを作っていけば
いいことになります。
(私の場合は、別の方法で解析したんですけどね(^^;;))

そのバイナリデータを作るためのソフトは、cgiを使ってもいいですし、
私のようにHSPを使ってもらってもかまいません。

で、ezアプリのリソースを任意のものに変えるソフトの流れは、以下のようになります。

1)リソースファイルをファイルダイアログで選択。
2)リソースファイルの名前を、ezアプリで指定しているファイル名に変更する。
3)リソースが入っていないjarファイルにリソースを追加し、圧縮。(zip32.dll,zip32j.dll使用)
4)jarファイルのサイズを取得する。
5)jarファイルのサイズをjadファイルに書きこむ。
6)kjxのファイルフォーマットを元にファイルヘッダを作成。
7)ファイルヘッダ+jadファイル+jarファイルとし、kjxファイルを生成させる。

わかる人は、これだけ書けば、だいたいわかるでしょう(^^;)
これを、cgiに置き換えれば、かなり汎用的なものが出来るかと思います。
(84)A5404Sの機種依存(2003/12/7)
ちょっと前に、掲示板のほうで、「SFCaveがA5404Sで、拡大表示&画面が変になる」との
報告がありました。
拡大表示は、どうも、VodafoneのQVGA機種と同じく、自動拡大をしているようです。
それは置いておいて、画面が変になる件。
以前、VodafoneのJ-SA51初期ロット版のみSFCaveの画面が変になるという
報告を受けていて、「もしかして同じ現象?」と思い、それの対処方法で
試しにテスト版を作り、アップ。
予想は当たって、正常に動いているそうです(^^)V
それにしても、同じ不具合が出るとは・・・。

なお、

http://homepage1.nifty.com/cotton100/jphonejava.htm#part14

に不具合の内容&修正方法が書いてあります。

(たわごと)
それにしても、Phase2.5をいじる間もなく、Phase3.0が出たり
して(SDKは公開されてないけど)なかなかいじる間がないので、
つらいところです(T_T)
あと、W11Hでは、QVGAそのまま使えるらしく、120x120画面で作っている
アプリは画面が小さいらしいですし(T_T)
・・・そうそう、W11HのJavaで使える解像度は240x268とのことです。
(85)今さらphase2.5(^^;)(2004/1/4)
やっとこさ、休みになったので、phase2.5の待ち受けアプリを
ん・ぱかさんのサイトの情報を元に作ってみました。

ん・ぱかさんのサイト
↓
http://www.saturn.dti.ne.jp/~npaka/sorami/index.html

実機がないんで、動作依頼をしたところとりあえず動いているとのこと。
(エミュが対応してないと、ちとつらいですね。)
テストアプリは、Thread使ってたりするので、いかに消費電力を
押さえるかがキーポイントですけどね。
アニメーション的処理をさせるなら、TimerTaskあたりを使ったほうが
よさそうです。
もしくは、一定時間経つと、Threadオブジェクトを破棄して、
休眠みたいなモードに入らせるとか。
(キー入力で復帰させる)

(たわごと2)
phase3.0のアプリがちょこちょこ出てきてますね。
HVSとか、3Dポリゴンとか、かなり遊べそう。
・・・でも、まだSDKは出てないので(^^;)、自前でドキュメントを
元にstub作らないと無理っぽいですね。



トップページに戻る