‘Android’のエントリ

Android NDKのI18Nサポートを調べた。wchar.hを読むとAndroidではwchar_tをサポートしていないことが分かった。のだが,wchar.hのコメントが非常にクールで印象深い。

... このヘッダが存在するのはオレが本当にナイスガイだからだぜ。
でも本当に実装するほどナイスじゃないぜ ...(ほぼ直訳)

日本の開発者だったらこんなコメントは書かないだろうなあ。何か書いたとしても,「申し訳ないが」とか? 上のコメントの方が気が利いてますね。

Weather Typing for Android Ver1.1をAndroid Marketで公開。まだ更新されてないっぽいけどそのうち更新・アップデート通知が行われるはず。修正点は以下の通り。

  • 打ち込むワードにカタカナや全角英数字が混じっていたのを修正
  • 「,」を「、」で打てるようにする
  • 30ワード未満の場合ランキングに問題数を表示するようにする
  • プレイヤー名を8文字まで許可する
  • UIの改善

個々の修正の詳細は昨日の日記を参照。ワード数の選択については,今日一日いろいろテストしていたけどどうしても過去との互換性でどうにもならなくて諦めた。その代わり,例えばワード10問設定にしてランキングに登録すると「Android 10ワード」のようにワード数が表示される。一応10ワード内で何位,みたいには見ることが可能。

Android版ウェザタイ1.1。たまっていた修正項目を一通り実装した。明日1日テストして問題なければAndroid Marketに流そう。修正項目は以下の通り。

  • ワード数の選択を廃止。代わりにbeginnerモード(5問固定)とexpertモード(30問固定)を選択できるようにする。beginnerでランキング登録した場合はbeginnerと表示されるので,beginnerランキングでもやり混みが可能。
  • 例外は全てcatchしてログを吐いていたのだが,不明な例外はcatchせずに潔く落とすようにする。ハンドルされていない例外はAndroid Marketから参照できることが分かったので,独自のログをはくよりこっちの方が調査しやすい。
  • アップロードダイアログのボタンがIMEウィンドウで隠れて微妙に使いづらいのを改善。
  • ワードのひらがな行に,カタカナと全角英数字が混じっていたのを修正。Android Marketのコメントから。
  • プレイヤー名が6文字しか入らないのを8文字まで許可。tomoemonさんのtwitterから。
  • 分かりにくい文言を改善。tomoemonさん,typezukiさんのtwitterからヒントをもらった。
  • 画面周りの変更。移植中のSilverlight版から逆輸入。

プレイヤー名について補足。文字数を増やした代わりに,スピード1000以上またはトータルポイント10万以上になると結果表示画面で文字列が切れる。レベル10以上の人は気を付けて下さい。

Android版Weather TypingのランキングをAndroidで見ると名前の最後が文字化けすることがある問題を修正。Android JavaのURLEncoderがバグっていた。以前1つ対策したのだが,もう1つバグがあった模様。

URLEncoder.encode(s, "ISO-2022-JP")

のようにUnicodeからJISコードに変換した場合,以下の2点がバグっている。

  • 全角半角が混在した場合,全角半角の切り替えポイントで「%1B%28%42」が入らない
  • 最後に「%1B%28%42」が入るべき箇所が「%1B」になってしまう

なんていい加減な。それともJISがそういう規格なのかなあ。クライアント側を直しても既にアップロードしている人はバージョンアップしないといけなくなってしまうので,サーバ側で対策。しかもAndroidのバグがいきなり直った場合でもうまく動作しないといけない。結局以下のPerlコードで対策した。

if(($value =~ /%1B%24%42/) && !($value =~ /%1B%28%42/))
{
    $value =~ s/%1B([^%])/$1/g;
    $value =~ s/%1B%24%42((%[A-Fa-f0-9][A-Fa-f0-9])+)
              /%1B%24%42$1%1B%28%42/g;
}

JISの開始コードがあって終了コードが1つもない場合,「%1B」が単独で存在したら消しておき,全角部分をJIS開始コードとJIS終了コードで囲むという処理。一応テストはしたけどあらゆるパターンで大丈夫なのか自信がない。

Androidウェザタイのコメントで「2メートル」のひらがな文がカタカナになっていて変換しないと打てないというのが挙がっている。

あとAndroid Marketには落ちたときのログが表示されるのだが,こっちもいくつか挙がっている。この辺を直して一度バージョンアップするかも。

掲示板に発言したが,Android版ランキングの一部が文字化けしている。とりいそぎサーバ側で対応。あまりテストできていないので今週末にもう少しテストする予定。次のAndroid版ではクライアント側で対策するかも。

原因は,Javaの「URLEncoder.encode(s, “ISO-2022-JP”);」が,日本語とASCII文字列が混じっていた場合,JISの終了コードを途中の切り替わり部分で生成せず,最後にしか生成しないため。この文字列を送られたPerlのサーバが途中のASCII部分をJISにみなしてしまい,文字化けする。どうもJavaのバグのような気がする。

Android版ウェザタイは少しずつダウンロード数が増えている。シャドールームさんで紹介してもらいましたが,宣伝しないとAndroidのアプリケーションは数が多すぎて埋もれてしまいますね。

ちらほらランキングに登録して下さっている方もいてありがたい。30問に設定しないと得点がのびないのは気付いてもらえているんだろうか。設定には書いてあるけど,やっぱりQ and Aか何かを公開した方がいいかなあ。


Android Marketのひみつ

  • Android Marketは「公開」ボタンを押すと即Marketで公開される。ということはGoogleの中の人によるチェックは全くないということですね。
  • Marketに登録するとダウンロード数とアクティブインストール数が見えるようになる。が,更新される時間も頻度も不明。1日1回くらい? そしてダウンロード数よりアクティブインストール数の方が多いのは何故?
  • Androidの作者登録をすると,OS入れ替え可能な開発者用のAndroid実機が買えるようになる。どこから買うのか不思議だったけどこういう仕組みか。

Weather Typing for Android Ver1.0を公開。Android Marketでも「typing」で検索すると出てくる。ダウンロード数やインストールしている人の数とかも分かるようになっているようなのでしばらく様子を見てみよう。

Androidウェザタイ統合テスト中。テスト項目は130件作成して120件消化。累計バグ出し目標30件に対して25件修正完了。来月中旬くらいにはクレジットカードが来るのでそこでAndroidマーケットに登録する予定。

Graffiti for Androidを試してみる。GraffitiはPalm標準の入力方式で,タッチパネルで高速入力を可能にしていた。Androidではタッチペンではなく指で入力するのでPalmほど高速に入力はできないが,Weather Typing for Androidで比べてみたところ,フリック入力と同程度には早く入力できた。

AndroidウェザタイはIMEを使用するので,少なくとも有名どころのIMEでテストする必要がある。ということで周りの人に頼んでNEC端末のATOK,SHARP端末のiWnn,XperiaのPOBox,フリーのOpenWnn,simejiを試した。結果はどのIMEでもOKぽい。記号とか入るともしかしたら打てなくなる機種があるかも・・・という感じではあるけど。

それとは別に,e-Token氏のXperiaはarcではないAndroid2.1だったのだが,矩形描画が塗りつぶされない。エミュレータで2.1にしてみても再現する。結局Style.FILL_AND_STROKEでは塗りつぶされなくてStyle.FILLにしたら塗りつぶされた。2.1以前ではサポートされてないってことなんだろうか。

テストプレイ+バグ修正メモ

  • アプリケーションをバックグラウンドにしたときにスレッドを停止させるようにする。電池消耗の回避。
  • Androidでは30問は長いのでデフォルトを10にして設定可能にする。ぱじ氏の指摘
  • 入力方法を設定できるようにする。けーさく氏の指摘。
  • IME前提にしてるので基本的にミス入力を判定できない。何か方法はないかな。
  • 自分のAndroid入力スキルではスピード60くらい。プロ?の人は5倍くらい入力できたとしても300くらいか。ミス入力もほぼないので実質100種類くらいしか得点のバリエーションがないことになる。何か考えないと。
  • Bluetoothはプレイはできるけどランキング参加不可のような形にする予定。ハードウェアキーボードは判定不可能なので今のところ入力禁止にしてるけどここもランキング参加不可にできないか。
  • IMEの方式はFix。基本IMEを使うが,1問打ち切るごとに入力中の文字列を消すことで学習履歴が汚れるのを回避するようにした。

Androidマーケットに登録しようとして意外なところでつまる。VisaかMasterカードが必要なのか。.comドメインはなんとかなったけどこれは無理そう。急いでクレジットカード作らねば。

ひととおりAndroidウェザタイの実装は完了。ランキングにも登録してみた。

あとはAndroid使いの人にテストプレイしてもらいつつバグをとっていくか。

Android開発。タイトル→ワード選択→30問打つ→結果表示の一覧の流れはできるようになった。が,いくつか懸案が。

今考えている方式は,IMEを使ってひらがなを打ち込むという仕様。しかし,これで何度もプレイしてるとIMEにひらがなの学習結果が大量に作られてしまう。IMEの学習を一時的にオフにする方法もなさそうだし,どうするかなあ。漢字打ちにすればある程度解決するだろうけど,Android以外との対戦とか混合Webランキングが意味なくなっちゃう。

ATOKだと「・」が打てない。他にもIMEによっては打てない文字がありそうなので調査が必要。

# と思ったらキーボードの日本語のモード「/」を打つと「・」になるっぽい。

ゲームアプリはみんなそうなんだろうけど,常に30FPSくらいで動いているので電池の減りが早そう。特にホームボタンを押してバックグラウンドにいった場合,そのまま気付かないと電池が0に,なんてこともあるかも。

denasu.com@VPSなかなか調子が良い。どう考えても自宅サーバよりコストパフォーマンスがいい。仮想サーバなのでもっと重いかと思ってたけど,SSHでの接続は全く重くないし,Webサーバのレスポンスも悪くない。掲示板とランキングも移行しようかな。


Android開発。ウェザタイのコア部分の移植はだいたい終わった。リプレイとかCPU戦とかもめんどくさいから全部移植してみたけど,Ver1では動かないようにしておくか。それでも対戦については通信フレームワークをDirectPlayに頼っていたので,完全に作り直しになる。ゆっくり対応していきますかね。

画面はとりあえず今の状態を実機で撮ったもの。画面が狭くて苦労する。

20110503

入力方式は完全にはやりたいことを実現するのは難しそう。自作IMEは特許問題があるので避けるとして,IMEを使う方法は内蔵キーボードは防げそうだがbluetoothは防げない。いろいろなIMEを試してみたがIMEによって予測変換が出たり出なかったり。ネットランキングやるのに必要な公平性を確保するのが困難。てなわけでネットランキングはなんとなくでやるしかないか。

開発自体はとりあえずワードを選択するところまでできた。WindowsとAndroidの考え方の違いからUIを作り直しているので時間がかかる。

そういえばJavaのパッケージ名をどうするか。Javaはパッケージ名をドメイン名にするのだが,みんな真面目にドメインとってるのかなあ。以前ぱじ氏と取っていたドメイン名を復活させようかな。


Android開発で久々にEclipseを触っているのだが,Visual Studioで便利な部分が結構入っている。AndroidもWPFに近いし。どっちがどっちを取り込んでいるのか,いろいろ追求していくと似通ってくるのか,興味深い。

さらに調べていくと特開2009-266236でアップルからフリック入力に関する特許が出願(未請求)となっている。2009年4月出願てことはあと1年待ってから一気に訴えていく作戦なのだろうか。どっちみちhanabi入力が拒絶されているから請求しても成立しないだろうけど。Weather Typingフリック版は1年後とかじゃ遅いよねえ。

# ちなみに特許専門家ではないのであまり本気にしないで下さい。

結局IMEを使う方法はいろんな問題点があり,解決は難しい。ここはウェザタイらしく自作IMEの可能性を調べる。自作IMEはなんとかなるとしても1つ問題が。フリック入力って特許取られてるんじゃない? ということで調べてみると,知らぬいさんのページとNewton アロハ通信さんに詳しく書いてある。これによると原型の特許→Hanabi→iPhone→Androidと移っていて,結局のところグレーゾーンっぽい。でも普通にいろんなソフトで使われているところを見ると決定的な特許はないってことなのかなあ。Appleが特許取得してたらAndroidには許可しなさそうなイメージがあるし。タイピングソフトでQwerty+携帯キーボードのみだと魅力半減ですよね。

いろいろ技術的な課題を調査。課題1としてAndroidでタイピングソフトを作るとしたら基本的にIMEを使うことになる。そうすると入力確定とか変換中の文字列が表示されるとかいろいろな問題が発生する。IMEによって動作違うし。IMEを自作すれば解決だけどさすがにそこまでは。

課題2として,外付けキーボードの存在。フリック入力と外付けキーボードではどうしても速度が違うので分けるか,最低限禁止としたいところ。いろいろ調査したところちゃんと見分ける方法はなさそう。実際Bluetoothのキーボードを付けたり外したりしても通知はこない。

AndroidのOSのソースを見つつもう少し調査してみるか。

Androidウェザタイを目指して調査。まずは市場調査ということでAndroidタイピングソフトを試してみる。が,比べるほど多くは公開されてない。公開されているのもテキストボックスに入力するタイプなのでウェザタイとはちょっとイメージが違う。

入力について・・・ソフトウェアキーボードから直接入力は難しいのか,ってことで調べてみると,エディタ用のインターフェースで何とかなりそう。対戦について・・・まずは対戦なしのネットランキングのみで作ってみて,次の段階でBluetooth対戦,そしてWiFi対戦+ロビーですかね。3G回戦での対戦も調べてみたけど,例えばDoCoMoのSPモードだとプライベートIPという噂だし,Androidだと一般ユーザ向けになるからロビー対戦は敷居が高い。

とりあえずそのままタイトル画面だけ作ってみた。

20100403

Androidを1日使ってみた感想。普通の人はこれだけあればPCいらないと思った。さすがにLinuxベースなのでそれなりに知識がないと使いこなすのは難しいけど,昔のPDAに比べて十分一般向けになっているし使える感じ。

Androidスマートフォン購入。10年くらいDocomo-NECだったのでN-04C。CASIOの電子手帳-初代ZAURUS-Palm-Windows Mobileと15年以上乗り換えてきたけどここまできてるんですね。Windows Phoneが日本で出たらまた乗り換えるかも知れないけど。

でAndroidなんだけど,要はりなざう(Linux ZAURUS)に電話機能が付いただけみたいな,SHARPの目の付け所がシャープすぎたみたいな。でも性能とかアプリとかは昔のPDAの比じゃないですね。

ということで何か面白いことができないか考え中。


最初にかけた電話はウィルコムへの解約申込み。8年間AirEdgeにお世話になったが,自分のところも実家も光,モバイルもスマートフォンになってついに使うことはなくなった。丁度2年契約も来月中旬までだし丁度いい。

Android調査。NDKを使うとネイティブアプリケーションを作れるのだが,その中にSocketも含まれていたのでWeatherTyping移植できるかも? とか思ったのだが,やってみるとPermission Denied。どうやらルートっぽい権限がないと動かせないらしい。ルート化して動かして下さいなんてアプリ怪しすぎるし。Windows Phoneもそうだけど,PDAのときと違って一般人を対象にしているせいか制約がきつい。