コンピュータにまつわる興味あるモノだけを扱う個人的なゆるいブログ。
by riye_tech_2004
ブログパーツ
検索
連絡先
pcnikki@gmail.com
※トラックバック送信元記事にこのブログhttp://pcnikki.exblog.jp/へのリンクが存在しない場合はトラックバックを受け付けません。ただし、エキサイトブログ同士のトラックバックには適用されません。



東京アメッシュ
GMAIL(SSL)
public: typedef Takel::Diary Observable;
スクイズ研究所
MobileBiz
Ken's Blog
眞鍋かをりのここだけの話


SonyEricsson
ノキア・ジャパン
NECわいわいモバイル
LGモバイル

TSUKUMOネットショップ
ASUS
EPSON Direct ショップ

ブログ口コミポータル話題のjp
八百万神社の杜
Windows Tipsホーム

ワールドビジネスサテライト
カテゴリ
以前の記事
カテゴリ:docomo開発( 24 )
進化する携帯の画面
ドコモの904シリーズあたりから、一部の機種で縦長(横長)のワイド液晶搭載機種が多くなってきました。
これがまた便利なのです。
今自分はF904iをメインで使っているのですが、液晶を横に回転することができるので、ワンセグ見ながらメールを書いたりできるのがすごくいい!(←メールボックスは購入してから一度もあふれていません。初受信メールがまだ残っています・・・)
F904は解像度が低い(240x432)のですが、それでも一昔前のキーボード付PDAに近い解像度です。
最新のF906iは解像度が480×864もあるので、iPhoneを超えています。

・・・もうここまで来ると、アプリなんかゲームばかりではもったいない。
液晶を横に回転させれば・・・、きっとメールソフトアプリがあればPCメールも快適に見れるんじゃないかと想像します。
もちろん回転に対応する必要がありますけど。

と言う訳で液晶を回転するアプリを考えてみました。

まず最初にやることは、ADFのDrawAreaを設定します。
F904だと最大解像度が240x432ありますが、DrawAreaを設定しなければgetWidth()やgetHeight()しても、最大解像度を得ることはできません。
DrawArea = 240x432
のようにします。(←解像度は機種依存なので注意する)

液晶角度状態の取得は拡張APIであるPhoneSystem2を参照します。
ATTR_DISPLAY_STYLE_HORIZONTAL_RIGHT
ATTR_DISPLAY_STYLE_HORIZONTAL_LEFT
辺りです。

状態取得のここまではいいのですが、F904iではここからが問題です。
Doja5.0であるF904iは、Doja5.1から拡張された回転液晶対応のCanvas2が使えないので、液晶を回転させても横にならないのです。

でも、あんまり調べていませんが、Canvas2はりアルタイムの液晶回転に対応できるのでしょうか??
Canvas2は動的な液晶回転の対応を難しいというか面倒と言う気がします。

なぜリアルタイムの液晶回転にこだわるのか?
それはF904iバンドルの「ボンバーマン」や「GRADIUS forF」が対応しているからです。

ではどうやって横型に対応しているのでしょうか?
1つ1つの描画素材を回転させているのでしょうか。
こんな面倒なことはやりたくないですね。

ヒントはGRADIUSの処理がやたら重いと言うことです。


[PR]
by riye_tech_2004 | 2008-09-02 23:04 | docomo開発
iアプリコンテンツ開発ガイド for DoJa-5.x
昨日904シリーズが発表されました。
合わせて開発資料も更新されています。

ついでに気がついたのですが、アプリコンテンツ開発ガイド for DoJa-5.0
オプション・拡張APIリファレンス編
も公開されています。

相変わらず機種依存の多いドコモの携帯ですね。
目玉のモーションコントロールも機種依存です。残念。



904iシリーズの主な特長


[PR]
by riye_tech_2004 | 2007-04-24 12:04 | docomo開発
DoJa.exeの仕様変更
久しぶりにiアプリネタです。

いつもiアプリを開発する時には、コマンドラインでビルドを行っています。
javac.exeを使用して。
いろいろと細かい制御ができるのでそうしています。

コマンドラインからのビルドが終わったあとエミュレータで動作確認を行うのですが、便利なことにコマンドラインから起動制御ができるのです。
doja.exe -i ADFファイル

と言う書式です。

今までこの方法を用い、ビルドしたあとは自動でエミュレータ部のみを起動させてデバッグを行っていました。
今まではなーんの問題もなかった訳ですが、DoJa5.0に切り替えたとたん問題が発生しました。
エミュレータが起動してもすぐ消えてしまうのです。。。

c:\iDKDoJa5.0\bin\doja -i _outbin\KeyTest.jam -u http://www.***.jp/iapp/

何がいけないのさ~。今まではこれで大丈夫だったのに・・・。

さあいつもの通り原因究明の試行錯誤です。
いろいろ確認した上で判明しました。

jamとjarが存在するディレクトリはbinでなければならない。
ということでした。
私のように自由にディレクトリを"_outbin"などとしてはいけないように仕様が変更されたようです。

c:\iDKDoJa5.0\bin\doja -i bin\KeyTest.jam -u http://www.***.jp/iapp/

こうすると起動できます。

なんで変えたのでしょうか・・?




[PR]
by riye_tech_2004 | 2007-03-01 09:00 | docomo開発
DoJa5.0
903シリーズのプロファイルであるDoJa5.0の資料が12日より公開になったようです。
開発ツールはまだみたいですね。

そろそろ3Dの季節到来と言ったところでしょうか。



[PR]
by riye_tech_2004 | 2006-10-14 06:17 | docomo開発
NM850iG
a0003824_15184591.jpg今一つわからなかったNOKIA製FOMAのiアプリのスペック。
気になったので調べてみました。


・DoJaは1.5OE
・Canvasの描画エリアは176x144
・1アプリのスクラッチパッドサイズは100KB
・ちょっと驚きはMFi未対応だと言うこと。着メロはスタンダードMIDIのみ。

ざっとこんな感じです。
DoJa2.0未満の位置づけですがほぼ504レベルです。
ゲームについて言えばほとんどの開発メーカーが無視するスペックであることがわかりました。
まあこの機種を利用するのはビジネスマンなどの大人が多いと予想できるからいいのだろうけど、あまりにもお粗末なスペックに個人的に魅力半減です。


国際ローミング対応FOMA「NM850iG」、3月17日に発売


[PR]
by riye_tech_2004 | 2006-04-17 19:59 | docomo開発
DoJaのバージョン
先日事務所で同僚のプログラマから質問されました。
DoJaでビルドは通るのに、アプリを起動すると起動しないと言う現象で悩んでいました。
そのエラーの内容はpreverifyエラーでした。
訳がわからないのでエラーが出る前のソースに戻してもpriverifyエラーが出ると言うのです。

Javaのアプリはコンパイルを行ったあと、preverifyと言うJavaバイトコードの検証を行います。
ここでバイトコードに異常があるとアプリの起動を阻止するのです。
私は本当にソースを元に戻したのか確認しました。
するとちょっと自信なさげです。
彼はソースコード管理ツールを使用していないので、直前のソースコードに戻すことはできないのです。遥か以前のソースコードが偶然残っている程度でした。

ビルドが通ったのにpriverifyエラーが出るということは、ソースに問題があるのは間違いありません。
彼も一人前の経験のあるプロなので私もあまりつっこんで、ソースを見るのもためらいがありました。
現時点でアプリが全く起動しないので、アプリのどこに問題があるのか発見は面倒そうです。

そこでDoJa3.5で開発を行っていたので、DoJa4.0で試しにビルドしてはどうかと提案しました。
DoJa4.0でビルドをしたところアプリが起動しました。
3.5では起動しないソースなのに・・・。
そこで彼の使用しているDoJaのバージョンを確認すると、、、

「めっちゃ古いバージョンやん・・・」

ドコモが公開した直後と言っていいくらいの古さです。
すぐにバージョンアップしてもらい、再び3.5でビルドをするとアプリは起動するではありませんか。
そしてある地点でフリーズしてしまいました。
その場所のソースを確認すると、

byte [] aaa = getHogeAddr();
中略
aaa = null;
中略
int bbb = aaa[1];

こんな訳のわからないコードになっていました・・・。

すぐにソースを修正し、問題解決です。
DoJa3.5のバージョンが最新であればpriverifyのチェックの仕様が変わっており、今回無駄に悩まなかったと言うことでした。
古いDoJaではpriverifyのチェックが厳しくて、アプリのデバッグがし辛いので仕様変更された感じですね。

開発者は常に開発ツールなどの更新や情報収集を怠ってはなりません。
それは武士が刀を研ぐように・・・。
[PR]
by riye_tech_2004 | 2006-02-24 17:48 | docomo開発
N505のスクラッチパッド容量の指定
N505はiアプリ開発者の鬼門である。
すばらしい企画もN505対応のために泣く泣く仕様を削除する。
とにかく搭載メモリが少ないのが一番の原因だ。
今回の開発もN505検証のために大幅なスケジュールのズレが生じた。
デバッグも後一歩で終わる、その時!

N505だけアプリが動かないと報告が・・・・・・・・・・・・・・・・・。

2日前まではバリバリ動いていたのに。
何が起こったのか?
確かにバグ修正は行ったが、そんな大幅な変更していない。
しかもN505だけだ。

なぜなんだ~。

と叫んでも仕方が無いので現状把握することに。
動かない原因は"Out of Memory"だった。
これは想定の範囲だ。
確かにクライアントの要望で追加したから使用メモリも増えただろう。
試しに容量を削減すれば前の状態に戻るのでアプリは動くハズだ。
ビルドしてアプリを起動する。

う、動かん・・・・。

とっさにVisualSorceSafeを起動し、2日前のソースの履歴をチェックし変更箇所を確認する。
特におかしいところはない。
他に変更した所はないか脳内検索をかける。

「!」

ここから先はアプリ開発者のみ(笑)
[PR]
by riye_tech_2004 | 2005-06-01 00:03 | docomo開発
コマンドラインビルドへの道~jamファイルの生成~
ドコモのiアプリをコマンドラインからビルドする前に準備しておくものがある。
jamファイルの生成スクリプトだ。
jamファイルは通常iαppliTools for DoJa上で作成する。
コマンドラインビルドでもiαppliTools for DoJaで作成したjamを使うのもいいが、アプリサイズと日付をビルドの度に手動で書き換えなければならない。
さすがにこれは面倒なのでjamファイルを生成するスクリプトをphpで書くことにする。
ちなみにjamファイルはただのテキスト形式のファイルなので、テキストエディタでも作成できる。

以下のソースがphpによるjamファイル生成スクリプトのサンプルだ。(注:投稿不可コードが含まれているため一部大文字にすることで回避。そのままコピペしても動かない)
各アプリの環境によってカスタマイズできるのでphpで行うには便利だ。
例えばAppNameなどはデバッグ版とリリース版で変えておけば、同じアプリを携帯に受信したとき、間違わないから混乱しない。
例)
デバッグ版:AppName:テスト待ちうけ時計アプリ
リリース版:AppName:待ちうけ時計アプリ
--------------------------------------------------------
<?php
// $project : 出力されるアプリのファイル名(拡張子なし)
// $dir : 出力されるディレクトリ
// $appname : AppName
// $appver : AppVer
// $spsize : SPsize
// $appparam : AppParam
// $usebrowser : UseBrowser
function makejam( $project, $dir, $appname, $appver, $spsize, $appparam, $usebrowser )
{
// LastModifiedの準備
$wday= array( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' );
$mon = array( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
$wno = date('w', time());
$mno = date('n', time());
$dno = date('d', time());
$nowtim = $wday[$wno].", ".$dno." ".$mon[$mno-1].date(' Y H:i:s', time());

// AppSizeの準備
$fsz = filesize($dir."\\".$project.".jar");

$fn = $dir."\\".$project.".jam";
$fp0 = fopen( $fn, "wb" ); // バイナリモードでopen

$out = "PackageURL = ".$project.".jar\n";
fwrite( $fp0, $out );
echo $out;

$out = "AppSize = ".$fsz."\n";
fwrite( $fp0, $out );
echo $out;

$out = "AppName = ".$appname."\n";
fwrite( $fp0, $out );
echo $out;

$out = "AppVer = ".$appver."\n";
fwrite( $fp0, $out );
echo $out;

$out = "AppClass = ".$project."\n";
fwrite( $fp0, $out );
echo $out;

$out = "SPsize = ".$spsize."\n";
fwrite( $fp0, $out );
echo $out;

$out = "UseNetwork = http\n";
fwrite( $fp0, $out );
echo $out;

if ( $usebrowser != "" ) {
$out = "UseBrowser = launch\n";
fwrite( $fp0, $out );
echo $out;
}

if ( $appparam != "" ) {
$out = "AppParam = ".$appparam."\n";
fwrite( $fp0, $out );
echo $out;
}

$out = "LastModified = ".$nowtim."\n";
fwrite( $fp0, $out );
echo $out;

$out = "AppTrace = on\n";
fwrite( $fp0, $out );
echo $out;

fclose( $fp0 );
}
?>
--------------------------------------------------------
ソース中の"echo $out"は、ファイルに書き出すjam項目を標準出力で表示してある無くても構わないが自分は目視チェックで入れている。
上のソースを適当なファイル名で保存する。(例えばmakejam.phpなど)
Windows版のphpがインストールされていれば実行できる。
今回のjam生成スクリプトはfunctionにしているので別途起動スクリプトが必要だ。

例えばbinディレクトリに用意されているであろうアプリファイル名が"tokei.jar"で、binディレクトリにjamを生成する場合の実行スクリプトは以下のようになる。
--------------------------------------------------------
<?php
makejam( "tokei", "bin", "待ち受け時計", "1.00", "102400", "", "launch" );
?>
--------------------------------------------------------
これを"build.php"として保存して実行する。
DOS窓(コマンドプロンプト)から、
c:\php\php build.php<enter>
binディレクトリにtokei.jarに対するjamファイルが作成される。


なぜiαppliTools for DoJa使わずコマンドラインからビルドするのか
[PR]
by riye_tech_2004 | 2005-05-17 03:28 | docomo開発
なぜiαppliTools for DoJa使わずコマンドラインからビルドするのか
a0003824_2237151.jpg
以前はアプリのビルドは"iαppliTools for DoJa"上から行っていたが・・・。

実際業務用開発を行う場合、1つだけのアプリをビルドする訳ではない。
大きく分けて、デバッグ用ビルドとリリース用ビルドに分かれる。
デバッグ用はテスト用のコードを含むアプリだ。
リリース用はテストコードをすべて排除し、エラー処理も最低限にする。

さらに最近は画像や音声リソースをネット越しのサーバーから受信するため、アクセス先のURLも色々変更しなければならない。
最低以下の3つは必要だ。
・自社サイト
・客先テストサイト
・本番用サイト
となると、"iαppliTools for DoJa"を使用してビルドする場合、プロジェクトを吐き出すアプリ毎に用意するか、プロジェクトを1つにする場合はソースを複数用意してプロジェクトに随時コピーしなければならない。

この作業は簡単ではあるが、何度もテスト&トライをする場合非常に面倒だ。
ソースのコピーをバッチで行えばある程度自動化できるがDoJaのビルドボタンは何度も押さないといけない。
しかも納品する時にデバッグ版を誤って納品してしまうかもしれないリスクもある。

さらに504シリーズ版、505シリーズ版、900シリーズ版とアプリを分け無ければならない場合、3x3=9つのアプリを吐き出さなければならない。
納品だけでも3種のアプリが必要だ。
プログラマがそんな面倒な手作業の処理を何度もやってはいけない。(←やりたくない)

そう言った問題を解消するにはやはりDOS窓からコマンドラインでビルドする。
コマンドラインからビルドを行えば、複数のバージョンのアプリの吐き出しをバッチファイル1本で自動化できるからだ。
しかしバッチファイルに各バージョンのアプリを吐き出す処理を記述するととんでもなく視認性は悪いわ効率が悪い。

そこでWindows版のphpを使用して、ビルドの処理を記述すると構造的でとっても便利だ。
[PR]
by riye_tech_2004 | 2005-05-10 22:37 | docomo開発
jargの問題
今まで問題無かったがついにjargをかけるとpreverifyでエラーが出てしまった。
------------------------------------------------------------
Error preverifying class b
VERIFIER ERROR b.drawGame(II)V:
Inconsistent stack height 11 != 0
not exec preverify command.
java.io.IOException: not exec preverify command.
at jarg.Jarg.n(Unknown Source)
at jarg.Jarg.j(Unknown Source)
at jarg.Jarg.main(Unknown Source)
------------------------------------------------------------
どうもバイトコードを最適化するとダメみたいだ。
と言う訳で-nobcoオプションを追加して回避。

ちなみにjargとはJavaのクラス名等を最適化してアプリサイズを小さくしてくれると言うありがたいソフトだ。(←本当は別の意味がある)
作者の方にはとてもとても感謝です。

#jargの問題とは別に4時間ほど取れなかったバグがとれた♪


jarg - Java Archive Grinder
[PR]
by riye_tech_2004 | 2005-04-23 21:13 | docomo開発