Dropbox

Nokia 3030 (Asha 303) に対応したKKJConv v1.15b (jadファイルでは未だ1.15のまま)をテスト版として以下のURLにて公開しています。朝一番にv1.15aを公開していましたが、ちょっとバグっていました。

http://www.nkozawa.com/kkjtest/ デバイスから直接アクセスしてOTAで導入してください。

Nokia 3030 (Asha 303)向けの新機能:
- Ctrlキーが働くようになりました。漢字入力画面でCtrl+Cなどが使えます。KKJSetupのショートカットの指定画面も同様にCtrlキーが働きます。
- 方向キー(十字キー)の代替としてSymキーとT, F, G, H, Bの組み合わせを使用できるようにしました。

  • Sym + T 上
  • Sym + F 左
  • Sym + H 右
  • Sym + B 下
  • Sym + G 中央ボタン

として働きます。

その他、自前のファイルダイアログなどが正しく機能していない事がわかっていますので、それが解決するまではテスト版として公開していきます。

その他、未公開だった変更が幾つか含まれています。
- 漢字モードでもスペースは半角のものを使用するようにした。
- カーソルを上に移動しつづけた時、最後は文頭に移動、下に移動しつづけた時は最後は文末に移動するようにした。

KKJConvでエラーが発生するということで調べてみたところ、どうもMIDP実行環境側の問題のようです。

エラーが発生するのは次のようなコードです。

TextBox tb;
tb.delete(0, tb.size());

このコードはTextBoxの文字列を削除するためのものですが、TextBoxが空の時に左の写真のようにString Index Out Of Boundsというエラーが発生します。

deleteメソッドの第一パラメータはオフセット、第二パラメータは削除する文字列の長さです。

tb.size() が 0 の時の問題なので tb.delete(0, 0); のようにしてテストすると文字列が存在する時にはエラーは発生しません。言い換えるとTextBoxに文字列が存在しない時にdeleteを呼ぶとエラーするということです。一応、ドキュメントを確認しましたが呼び方には問題が無いように思えます。ましてやKKJConvの初期から存在するコードなので実績もおおいにあります。

回避策は簡単なので以下のようなコードに変更してKKJConvのエラーは回避出来ました。

if (0 < tb.size()) {
  tb.delete(0, tb.size());
}

Nokiaにバグではないの?と投げかけようと思いましたが、以前Forum Nokiaにあったバグレポートのシステムが見つかりません。もう一般開発者からのバグレポートは受け付けてないのかな?

既にAyamadoriさんがブログ「書くことないです。」に最新のNokia Series 40 Touch and Type端末のMIDP開発環境について書かれています。

私はQWERTYキーボードを中心に分かったことを書いてみたいと思います。

キーボード素直です。ずっとS60 3rdからフルキーボードのキーコードには悩み続けてきました。E7に至っては訳がわからないというのが正直な感想でした。それから考えると物足りないくらいに素直な挙動です。

E90などと違うのはCtrl+Cなどでコントロール・コードでは無く”C”そのものが返ってくることです。ただしCtrlキーそのものがキーコードを発生してくれるのでMIDPのアプリケーション内で処理可能です。また、CtrlだけではなくSymや数字シフトなどもキーコードが出ています。CtrlもSymキーもMIDPのCanvasでは何も働きませんので、逆に自分の好きなように役割を与えられるとも言えます。

カーソル移動キーが無い。「書くことないです」でも触れられていますが、方向キー、所謂10字キーが無いデバイスです。その代わりに画面を上下左右にスワイプすることで対応するキーコードが得られます。また左右のメニュー・キーもありません。これも画面のタップで代用します。S60 5thのタッチデバイスで表示される、あまり使いたいとは思わないゲーム・キーなバーチャル・キーボードは無くなったようです。

QWERTYキーで文字入力中に編集のためにスワイプというのは今ひとつな気もします。KKJConvではやはりキーボード操作でカーソルを移動できるようにしたいと思います。

液晶にタッチすれば何とか今までと同様の動作が出来ると思いきやダメなケースも見つかりました。Google Mapsは未だMIDP版が配布されていますが、これが全く操作不能でした。Google Mapsは画面を大きく使うためにCanvasをフルスクリーンで動作させています。検証はしていませんが、どうもこれが災いして画面のタッチが全く効きません。10キーだけは反応するですが、起動時に表示されたダイアログを消すことが出来なかったので、全く使い物になりませんでした。

Nokia 3030 (おそらくAsha 303と同じ)にChina MobileやChina UnicomのSIMを入れれば自動的にネットワーク設定が行われます(もしかすると中国国内版なのでプリセットされているのかも)。そのため何も考えなくてもNokia BrowserアイコンやInternetアイコンをタップすれば何かしら予め設定されているサイトに接続することは出来ます。

ところが、どう頑張ってもWAPの接続先しか選択できません。Preferred access pt.などというそれらしい設定を行なってもダメです。Internet Radioなどではちゃんとデータ通信用APNが選択出来るのでAccess pointの設定は出来ているようです。S60の設定も忘れかけていて、初めてのSeries 40でメニューを徘徊しても良く分かりません。そんな時見つけたのがGoGoSmartphoneBLOGの記事「Asha303のデータ通信設定」でした。いやぁ、助かりました。これを参考に自前でAPNとWeb接続の設定を行なって無事にInternetアイコンで希望のAPNに接続出来るようになりました。

以下私の行った設定例です。
< Access Pointの追加 >
- Settings/Configuration/Personal settings
- options/Add new/Access point
- Account nameは適当な名前を設定。わたしの場合は’CMNET’としました。
- Acc. point sett./Bearer settingsにてPack. data acc.pt.に cmnet と入力。他のフィールドはそのままでOK。(注: cmnetは本来China Mobileのアクセスポイント名ですがChina Unicomも同じ名前で接続できます)

< Web設定の追加 >
- Settings/Configuration/Personal settings
- options/Add new/Web
- Account nameは適当な名前を設定。わたしの場合は、ディフォルトのままMy webとしました。
- Use pref. acc. pt.はYesのままでOKです。あるいはNoに変更してAcc. point sett.に別途APNを設定することも可能です。

< Preferred access pt. の設定 >
- Settings/Configuration/Preferred access pt.にて先に作ったCMNETを選択します。

< Internetアイコンの設定 >
- Internetを起動しWeb settingsを開きます。
- Configurations sett./Accountにて先に作成したMy webを選択します。

以上です。

なんとなく勢いでテスト中です :)

ピードラさんがAsha 303をレビューされていますので本体の写真や感想などはGoGoSmarphoneBLOGを御覧ください。

左の写真の物は中国国内で正規販売されているNokia 3030という機種です。どうみてもAsha 303と同じです。搭載されているアプリ等が違う程度でほとんど同じものと思えます。

まだ数時間触っただけですが、現時点での感想やらKKJConvの対応について書いておきます。

[ KKJConv ]
ピードラさんからコピペ画面に「新規追加」するとエラーすることを聞いていましたので、取り急ぎ対応しました。詳しくは別途ブログにエントリーするつもりですが、どうもMIDPの実装そのものに問題があるようです。回避策は簡単な変更で済みましたので、とりあえずテスト版として以下のページからOTA導入出来るようにしています。

http://www.nkozawa.com/kkjtest/

デバイスから直接アクセスして導入してください。

漢字入力画面からCtrlキーが効かないとかカーソル移動キーが無くて不便(画面をスリスリするとカーソル移動します)なので、もうちょいAsha 303チューンを施したバージョンを作成予定です。

[ その他雑感 ]
- Series 40 なのでやはり自由度は低いです。KKJConv稼動したまま切り替えられるのはSMSアプリのみのようです。タスク切り替えなどは無いのでメールとKKJConvを行ったり来たりなどは出来ません。
-  やはりQVGAは見劣りがするかも。特に中国語メニューだと今時のデバイスと比べると文字が美しく表示できないので手に取った時のガッカリ感があります。値段が安くて無線LAN, Bluetooth, WCDMA搭載ですので、割りきって使ってやろうという人向きなのでしょうね。QVGAでもAngry Birdsは結構遊べます。用途しだいではQVGAで十分なのかもです。
- USBで充電出来るのは便利です。が、かなり時間が必要みたいです。数時間、ThinkPadのUSBに接続していましたがフル充電にならなかったです。

Nokia E7-00のKKJConv対応で、どうやっても解決出来無い部分が残ってしまいました(これはN97miniやN97から同じかも知れないです)。E7-00に搭載されているQWERTYキーボードがMIDPアプリケーションからどのように見えるかという問題です。

[ 改行キーでキーコードが発生しない ]

改行キーが何も役割を与えられていない訳ではありません。通常のMIDPアプリケーションで改行キーを押すと左側ソフトキーに対応するメニューが開くようになっています。タッチデバイスということで何かしらの配慮から、こうなったのかも知れませんがQWERTYキーボードとして使用する上では、かなり不自然で不便です。メニューの存在しない(正確にはリスナーを登録しない)テストプログラムも試してみましたが、やはりkeyPressed(int)やkeyReleased(int)でキーコードを得ることは出来ませんでした。

CtrlキーがあるE7-00ではCtrl+jで改行キーを代用出来るのですが、ここにも落とし穴(後述します)あるので’@'キーを改行キーの代用として割り当てています。

[ シフトモードが分からない ]

通常のシフト、数字記号用のシフト、あるいはSymキーを押すと通常の画面ではシフトモードが画面上部に表示されます。ところがMIDPでは、非フルスクリーンな表示でもシフトモードが表示されません。シフトモードは通常と同じく、一回押すとシフト、2回押すとシフトロックという動作なので、それを自分で把握して入力しなければ行けません。

E90やE63もMIDPではシフト状態の表示はありません。しかしながらシフトを押しても次に入力される英字には影響されず常に小文字が入力されました。つまりアプリケーションにシフト状態の管理が任されていました。それ故、何の表示もないことが正しかった訳です。またE63では数字記号モードはMIDPに入る前に効いていますが、それだけを使用者が自己管理すれば良かったので然程混乱することはありません。

[ 数字記号シフト、Symキーもシフトキーと同じキーコードが発生する ]

どれもシフトの仲間だからということでシフトキーと同じキーコードを割り当てたのかも知れませんが、それが役に立つ場面が思いあたりません。E90やE63では数字記号シフトは何もキーコードを発生しませんでした。それ故にシフト状態をアプリケーション内部で管理するということが容易に出来ていました。

KKJConvとしては、いっそのことシフト表示を止めてしまうかと思いましたが、今のところはシフト表示に合わせて大文字、小文字の相互変換を行っています。ロジックの都合によりシフトを押したままで英字入力が二文字目からは小文字に成ってしまいます。これも、致し方なしです。

[ Ctrl + 英字が効かない事がある ]

英字を入力する際、本体のシフトモードに応じてMIDPアプリケーションに渡されるキーコードが小文字だったり大文字だったりするのは構いません。ところが、Ctrlキーと英字キーを同時に押して発生させるコントロール・コードがシフトモードによって左右されています。シフトモードが大文字に成っている時にCtrl+Jが押されると、キーコードは’J'が発生してしまいます。E90, E63では常に期待どおりのコントロール・コードが発生します。特にE63では数字記号シフトにロックされていてもCtrl+jなら改行キーとして機能します。

Ctrlキーはもともと押下状態かどうかがMIDPアプリケーションでは感知出来ないのでKKJConv側では対処の方法がありません。

ps. 一縷の望みを託してForum Nokiaにてバグレポートいたしました。直ると良いなぁ。

数日前の記事にNokia E7-00のMIDPにてナビキーがQWERTYキーボードのa,w,s,dに割り当てられていると書きました。この解釈は間違ってはいませんが、もう少し詳しい仕組みが分かりました。現在確認されているところではN97 miniも同じ仕組です。他にも該当デバイスがあるかも知れません。

MIDPにおいては幾つかのキーが予め定義されています。携帯電話の10キー(0-9, *, #)とゲーム用のキーです。詳しくはCanvasクラスの説明の冒頭部分に記述されています。ゲーム用のキーについてはキーコードが決め打ちされている訳ではありません。CanvasクラスのgetKeyCode(int)メソッドでキーコードを取得すると、そのデバイスで使用するゲームキー(Up, Down, Left, Right, Fire)が初めて分かるという仕組みになっています。

KKJConvでは、上下左右にカーソルを動かすためのキーコードをgetKeyCodeで取得しています(一部例外あり)。その結果、E7-00ではa, w, s, dが上下左右のキーとして返っていました。そのためKKJConvにおいてもa, w, s, dを押すとカーソルが動くという結果になりました(同じ理由で本当のカーソルキーは無視)。ただし実際のキーコードはascii文字としてのa, w, s, dそのものでした。また、キーボード右下にあるカーソルキーも正しく反応していて、他のデバイスと全く同じキーコードが出ていました。

ということで、KKJConvではE7-00とN97mini(あと詳細は忘れましたがソニエリも以前から)ではgetKeyCodeを使わず決め打ちのキーコードでカーソルを移動することにしました。もしかすると全くgetKeyCodeを使わなくても良いような気もします。

[ まだ残る謎 ]
これでカーソル移動については簡単に解決しましたが、改行キーの謎は残っています。現在の所、改行キーを押すとメニューが表示されてしまいます。 これが、ちゃんと改行キーとして働けば、素直な動作環境になります。今現在は仕方なく@を改行キーの代替キーとして割り当てています。

日刊KKJConv状態ですが、今日も小さな変更を行いました。
- 昨日のバージョンでN97mini向けに発信ボタンを改行に割り当てましたが失敗しました。詳しくは紅玉さんのブログを御覧ください。改行キーの割り当てそのものも失敗ですが、通話画面が立ち上がるのは想定外でした。暫定的にN97miniもE5-00同様に’@'に割り当てました。
- E7-00に置いてKKJConvのシフト表示が無いときにも大文字で英字が入力されてしまう事があるので、これを修正。ただしBTキーボードなどでシフトを押したまま英字を入力する時に小文字になってしまう副作用があります。設定画面で従来の動きとの切り替えを出来るようにするつもりです。

[ 導入 ]
以下のURLにデバイスからアクセスしKKJConvの所をクリックします。

http://www.nkozawa.com/kkjtest/

辞書の大きさ別にL版, MML版, M版を用意しました。お好きな物をお選び下さい。

[ 使用方法 ]
改行キーの代替はE7-00, N97mini共に’@'キーになっています。N97miniでは記号キーとの併用になると思います。

ご意見、ご希望がありましたら、コメント、メール、呟き何でも構いませんのでお寄せください。

昨日のバージョンは一部、想像と違う動きをしていました。ナビキーのアサインを勘違いしていたためですが、それを調査する過程でより本質的にナビキーの謎を解くことが出来ました。結果から言うと通常のカーソルキーが使用できるようになったはずです。ただし改行キーについては未だ解決出来無いので、代替キーをアサインする方向で考えています。

[ 導入 ]
以下のURLにデバイスからアクセスしKKJConvの所をクリックします。

http://www.nkozawa.com/kkjtest/

辞書の大きさ別にL版, MML版, M版を用意しました。お好きな物をお選び下さい。

[ 使用方法 ]
昨日のNaviモードは廃止しました。普通にカーソルキーを使用してみてください。

改行キーは未だ機能しません。代わりにE7-00ではCtrl+jもしくは’@'キー、N97 miniでは緑の発振キーを使用してみてください。改行キーの代替方法については、何か良いアイデアがありましたら教えて下さい。

[ 予測される不具合 ]
KKJConvのシフトモードが無いときにも大文字の英字が入力されるかも知れないです。また、記号シフトの場合は記号が入力されますが画面上、そのシフトモードであることが分からないと思います。

[ その他の変更点 ]
昨日のバージョンでは記号入力パネルは未対応でしたが、今回は通常の入力モードと同様にカーソルキーと改行キーを代替するキーで選択可能と思います。

ご意見、ご希望がありましたら、コメント、メール、呟き何でも構いませんのでお寄せください。

すでに香港でNokia E7-00を入手された方々がいらっしゃるようですので、とり急ぎKKJConvのE7-00対応を始めました。実機無しで手探りながら、まずはpreview第一版を公開いたします。E7-00を入手された方でお時間の有る方のテストをお願いいたします。

[ 導入 ]
以下のURLにデバイスからアクセスしKKJConvの所をクリックします。

http://www.nkozawa.com/kkjtest/

[ 使用方法 ]
E7-00のqwertyキーボードがMIDPにおいてナビキーとして使用されていること、またカーソルキーが効かないことを回避するためにシフトモードのひとつとしてNaviモードを設置しました。

- シフトキーを押す毎に右上のシフト表示が、表示なし->Shift->CAPS->Naviと変化します。
- カーソルの移動を行う時はNaviにしてA,W,D,Xのダイアモンド配列のキーで行います。
- 改行動作、変換中文字列の確定動作はCtrl+jもしくはNaviモードでSを押します。

[ 予測される不具合 ]
どうもデバイス本来のシフト状態にCAPSとか最初の文字だけシフトみたいのがあるようです。そのためKKJConvのシフト状態と相反して大文字あるいは小文字が入力されかも知れません。

同様の理由によりJが大文字に成っているときはCtrl+jが効かないかも知れません。

[ お願い ]
不具合、感想、使いやすくするためのアイデア等なんでも結構ですのでお知らせ下さい。連絡手段もコメント、メール、あるいはボソッと呟いて(Mentionの方が良いですね)もらう等、何でも結構です。

[ N97 mini ]
N97 miniにも、ナビキーの呪縛があるようですので、もしかすると有効かも知れません。シフトモードが分かりやすければ、通常のKKJConvでもナビキーモードと大文字の切り替えで何とか入力出来るようですその場合でも、おそらくA,W,S,D,Xの小文字入力が不可能と思います。E7対応のKKJConvであれば小文字が入力出来ると思います。

[ 今後 ]
今回のバージョンはE7-00モード決め打ちです。E7-00かどうかの自動判別とNaviモードを使用するかどうかの設定が出来るようにいたします。