Dropbox

KKJConvには秘密がある。「しんせん」で深圳と変換したり、人柱隊の田路さんの苗字が変換出来るように辞書を弄ってある。しかし、それだけではない。

漢字変換画面に「しねしね」とだけ入力しコピペ画面に移行する。一度KKJConvを終了し再度立ち上げると、なんと恐ろしいことにKKJConvが「死ね死ね団」モードになってしまう。しかも、いちど設定すると戻す方法は無い。

古いモバイラーの方は、この画面を見てピンとくるであろう。Windows Mobileの神様、いや将軍様であるアスカルさんの大陸諜報活動新聞をリスペクトしたテーマなのである。

KKJConv Secret Theme

漢字変換が出来る最初のバージョンKKJConv v0.6は7月2日に公開しました。

ローマ字変換が出来るバージョンを公開すると同時にかな漢字変換のための辞書オブジェクトを書き始めました。最初のバージョンは単純なもので一つの辞書ファイルを頭から順次検索して入力された「かな」にヒットする漢字文字列を順次返すだけの物で直ぐに完成しました。むしろインライン変換の動作をKKJConv本体に作り込むのに随分と手間取ったことを覚えています。それでも今振り返ってみるとv0.5からv0.6の公開までに一週間しかかかっていないのは、やはりバイタリティに溢れていたのだと思います。

この後、漢字変換にキャッシュを搭載したり、大きな辞書を搭載するために辞書の分割を行ったり、あるいは細かい機種別対応を重ねて行きました。2006年末のv1.0に至るまで二十数回のバージョンアップを行いました。平日に少しずつ更新。金曜日一日寝かせて毎週土曜日に新しいバージョンの公開というペースが出来上がっていました。常に使ってくださっている方々からのフィードバックがあるので、とても楽しい時間を過ごすことが出来ました。

最初からソースコードを公開していましたが、だんだんと見通しが悪くなってしまい。ちょっとばかり恥ずかしいものになりました。本職のプログラマーでは無いことを言い訳にしておきたいです。Javaを知ってはいたものの、まとまった量のコードを書くのは初めてで、またオブジェクト指向なブログラムの勘所も良くは分かっていませんでした。そのため関数型プログラミング的なコードになっています。とくにキーコードから動作を決めるための部分がとても長い条件分岐の羅列になっています。まるで昔のGUIブログラムみたいです。今、この部分を書き直すとしたら少なくとも理想的なキーボードを持った仮想ハードウェアで動くKKJConvと機種別動作を吸収するオブジェクトに分割することと思います。

ひとまず、これにてKKJConv開発秘話は完了とします。

キーコード表示プログラムの表示機能が調子良いので、それを元にローマ字変換が出来るようにしたKKJConv v0.5を公開したのが6月25日でした。アルファベットを表示してローマ字として確定すると、その場で平仮名に置き換わるという動作でインライン変換への手応えも確かめました。FEPでは無いのでアプリケーションに直接入力は出来ません。コピペ画面を経由して文字列をクリップボード経由でアプリケーションに渡す方法もここで確立しました。E61を入手して10日目のことでした。今の体力、気力ではとても考えられないスピード感です。

実は画面の表示速度についてはグラフィックス画面を使用していることもあり、実際に試すまで実用的な速度が出るのかどうか心配していました。最初の計画では高速化を狙って画面の中で更新が必要な部分だけを書き換えていく予定でしたが、結局のところ一文字入力する、シフトを押す、あるいはカーソルを移動するなど画面に何かしら変化が生じる度に画面全部を書き換えるという方法だけで最後まで済ませてしまいました。

この漢字変換の出来ないKKJConvを使って、かなだけでブログを書いてくれた人なども居て感激したことを覚えています。

またKKJConv v0.5公開の翌日にはピードラさんがソニエリのM600、山根さんがBluetoothキーボードで基本動作が可能であることを確認されました。KKJConvは漢字変換出来るようになる前から多機種対応が宿命となったのでした。

今回からは、やや開発者よりの内容になります。

C++で本格的なFEPを作るのはプログラミング技術もさることながら、それ以外の問題が大きすぎてすぐに諦めました。後にM-FEPでそれを乗り越えた、ま〜さんはすっごく偉いです。

ということで、多少なりとも経験のあるJava MIDPでのテストを開始しました。調査のために作成したキーコード表示プログラムをひとつの成果として公開したのが6月21日でした。一番の目的はキーを押した時にどんなキーコードがMIDPに認識されるかを調べるものですが、実はもうひとつ画面の表示についてもテストをしていました。

UIQで実現されていたKanaKanjiClipは、何とか使えるものの今一つ使い勝手が良く有りませんでした。デバイスの反応速度にも問題がありましたが、出来合いのGUI部品を使用していたため変換中の文字列と変換結果が別の場所にあり結果がうまく同期しない、あるいは視点が移動するのが最大の問題でした。

何と言っても日本語入力を実現するにあたって使い勝手を考えるとインライン入力が欠かせません。それを実現するためにグラフィックス画面に文字を配置していくことにしました。その文字配置の基本的な動作や反応速度もこのプログラムで確認出来ました。

キーコードの確認は、もともと矢印キーや緑の通話キーがどんなキーコードを返すがが知りたかったのですが、思いがけずE61のキーボードがかなり変態であることも、この段階で知ることが出来たのは良かったです。

またこの時点ではあまり意識はしてませんでしたが、後にKKJConvを多機種に対応するにあたってキーコード表示プログラムが役立ちました。

また宣伝したわけではないのですが、このプログラムを公開した直後にmaitomoさんとピードラさんがブログにコメントを付けてくださっています。しかも日本語入力ソフトを作る前提でコメントを書かれているようで、とても不思議です。なぜなんだろう?

2005年1月から中国に長期出張というかたちで滞在を開始し、初めて海外の携帯電話に触れました。もともと小さなデバイスが好きで有ったこともあり、スマートフォン黎明期のSymbianやWindows Mobile登載の携帯電話に魅了されてしまいました。

2006年5月くらいにノキアからE61というQWERTYキーボードを登載しつつコンパクトなSymbian S60 3rd登載の携帯電話が出るというニュースを見かけてからは、それが欲しくてたまりませんでした。

もともと小型でインテリジェントなデバイスを使いこなすひとつの手段として自作のプログラムが組むことを目的というか楽しみにしていたのでE61でのプログラミング環境の調査、整備をしながら入手する日を楽しみにしていました。実は前年から使用しているSonyErricsonのP910cではQWERTYキーボードを使用したKanaKanjiClipという日本語入力アプリケーションを使用していましたので、新しい端末ならばそれなりに快適な日本語入力を実現できると見込んでいて、最初の開発ターゲットは日本語入力のテストと決めていました。

どんなやりとりが有ったかは忘れましたが、上海のモバイラー友達である、うめさん経由で香港のreveilさんにE61を代理購入してもらう話がいつの間にか出来上がっていました。それを広州に出張したおりに受け取ったのが6月15日のことです。何故か、その時には、うめさんもreveilさんも私が何かしら日本語入力に関するプログラミングの計画を持っている事が分かっていて(自分で言ったに違いないですけど)、何も出来ていないうちから、随分と期待されて少々焦ってしまいました。

reveil師匠作のKKJConvアニメーション

KKJConvの最初のバージョンを公開したのは2006年6月25日です。もう10年もたちました。KKJConvはNokia E61を入手して作り始めた日本語入力アプリケーションですが、これを公開したおかげで、色々な人との繋がりが出来ました。Facebook友達の多くはKKJConvの公開を通じて知り合った人たちです。東京、香港、タイ(リアルでお会いしたことはありませんが)、そして中国での生活に豊かさと幅を与えて下さった、元・現上海および北京在住の方々とは今でも仲良くして頂いています(現中国在住者は激減してしまい、寂しい限りです)。

KKJConvにも若干のマネタイズの機会や試みもありましたが実際のお金には結びついてはいません。しかしながら、この多くの人との繋がりが何事にも代えがたいものになり、それだけで十分に元がとれたどころか、大きな利益になりました。

そんなこんなで想い出深いKKJConvの誕生秘話(ちょっと大げさ)をいくつかブログに書いてみたいと思います。6月に数回に分けて書く予定ですが、大した内容にはなりませんので軽く流して頂きたいと思います。

Nokia Asha 303 (Nokia 3030)に対応したKKJConv v1.16を公開しました。

変更内容:
KKJConv 1.15aテスト版での変更内容に加えて

– 記号バネルでのカーソル移動をT,F,G,H,Bキーでも行えるようにした。
– 送信済みSMSを表示する画面を少しシンプルに変更。
– 最初に起動する際にAbout画面を表示させないようにした。
– SMS送信の際に改行コードを一般的なCRLFに変更してから送出するようにした。
– SMS設定保管の際に送信記録フォルダーの自動作成。
– SMS送信完了後のタイトルが送信中のままの場合が有ったので送信完了と表示するようにした。
– ファイルダイアログを表示前にファイルのダミーアクセスを行うようにした(Asha303対策)。
– ファイル保管の際にフォルダーが存在しない場合は自動的に作成出来るようにした。

ダウンロードなどの詳細につきましては、ブログ上部にありますKKJConvタブをクリックしてください。もしくは以下のリンクをクリックください。

http://www.nkozawa.com/wiki/index.php?KKJConv

また、OTAによる導入はデバイスから以下のURLを開いてお好きな辞書サイズのリンクをクリックして導入してください。小さいアイコンのパッケージは上のダウンロードページのみで提供しています。

http://www.nkozawa.com/kkjconv/

[ Asha 303固有の操作方法 ]

MIDP一般の操作について:
Series 40 Touch and Typeデバイスで、従来とは幾分違った操作方法になっています。他のデバイスのようなソフトキーがありません。メニューの選択は画面上に現れたメニューボタンをタップします。リスト形式など画面によってはアイテムの長押しによりコンテキストメニューを表示させる場合もあります。

漢字入力画面の編集:
画面をフリックすることによりカーソル移動が出来ます。やや操作性に難がありますのでキーボードによるカーソル移動も出来るようにしています。

  • Sym + T 上
  • Sym + F 左
  • Sym + H 右
  • Sym + B 下
  • Sym + G 中央ボタン
漢字変換:
スペースバーにより変換、Shift+スペースバーにて前の変換候補に戻る事が出来ます。加えて上のSymキー併用によるカーソル移動キーによる変換候補の選択も可能です。
ファイルダイアログ:
ファイル保管、読み込み、ユーザー辞書の指定、SMS送信記録の保管場所などで使用しているファイルダイアログは自前の物で元々操作が分かりづらいものでしたがAsha 303では、より分かりづらくなってしまいました。アイテムをタップしてオープン、タップして後メニューの選択あるいは長押ししてメニューを表示など色々と試してみてください。 なかなか良い操作方法が思い浮かびません、申し訳ないです。

 

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 中央ボタン

として働きます。

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

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

実験中だったNokia E7-00対応(一部 N97mini対応)部分を取り入れた KKJConv v1.15 を公開致します。

修正内容:

– Nokia E7-00のフルキーボード対応
詳しくは後述

– CAPS時のバックスペース・キー機能変更
以前はShift/CAPS表示の時はバックスペース・キーを削除キーとして機能させていましたが、自分でも時々動作に戸惑うのでShift時は削除、CAPS時は通常のバックスペースとしました。<- 別のアイデアもあるので、近いうちにまた変更するかもです。

– ブログ「今日の○○」の管理人さまがKKJConv用のアイコンを大きくしてくれました。かなり大きいですがE90のQVGAでも表示できているので最近のノキアであれば大丈夫と思います。念のため従来のアイコンを使用したものも用意しています。

ダウンロードなどの詳細につきましては、ブログ上部にありますKKJConvタブをクリックしてください。もしくは以下のリンクをクリックください。

http://www.nkozawa.com/wiki/index.php?KKJConv

また、OTAによる導入はデバイスから以下のURLを開いてお好きな辞書サイズのリンクをクリックして導入してください。

http://www.nkozawa.com/kkjconv/

[ E7-00 での使用方法 ]

– 改行キーの代替
改行キーが機能しません。そのため、代替キーとして’@’キーを割り当てています。改行あるいは変換文字列の確定には’@’キーを押してください。また、Ctrl+jも同様に機能します。

–  シフト・モード
シフトキーの扱いが従来機種と変わりましたので、画面表示に忠実に入力するための「厳格なシフトモード」という設定をKKJSetupに新設しました。E7-00では、これがディフォルトでオンになっています。

– 数字、記号入力
数字記号入力のためのキーを押してもKKJConvのシフトモードが変化してしまいますが、実際の数字記号入力には関係有りません。数字記号入力の現在の状態はKKJConv動作時には表示されませんのでご注意下さい。他の画面で数字記号入力の挙動になれていただくしか有りません。

– Ctrlキー
Ctrl+c, Ctrl+jなどを使用する事が多いと思います。しかしながらE7-00本体が持つシフトモードによりCtrl+c等を押下してもCが入力されてしまう事があります。その場合はシフトを一度もしくは二度押してからお試しください。

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にてバグレポートいたしました。直ると良いなぁ。