2007年04月07日

D800iDSレビューその1:基本的には「らくらくホン」のノリ

FOMA D800iDS 2画面iアプリコンテスト」に参加していたので、D800iDSを一ヶ月ほど使っていました。せっかくなのでその使用感と、iアプリの性能を書いておきます。ちなみに詳しいレビューは下記あたりで。

ケータイ Watch:タッチパネル搭載の2画面ケータイ「D800iDS」
http://k-tai.impress.co.jp/cda/article/news_toppage/32748.html
ITmedia +D モバイル:写真で解説する「D800iDS」
http://plusd.itmedia.co.jp/mobile/articles/0701/16/news114.html

外観もニンテンドーDSそっくり

名前がDSなだけあって(?)外観もかなりニンテンドーDSに似た仕上げになっています。特にホワイト、ブラックは同色のニンテンドーDSと並べれば同じブランドのグッズの様です。

D800iDSとニンテンドーDS
ニンテンドーDSと並べてみました。白とピンクで“すあま”に見えるかも。

続きを読む

D800iDSレビューその2:iアプリ性能、タッチパネルでゲームは少し厳しい

D800iDSのiアプリの性能についてですが、なんたってDSですから、ニンテンドーDSみたいなゲームが遊べると期待しますよね。
実際、先日結果が発表された「FOMA D800iDS 2画面iアプリコンテスト」でも入賞作はほとんどゲームで、自分もまあ“ゲームっぽいもの”で佳作をいただきました。プリインストールのiアプリにもニンテンドーDSの「大人のゴルフ」的なゴルフのゲームがあります。

自分も実際にiアプリを開発するまでは「この携帯でニンテンドーDSみたいなゲームが作れるし遊べるしイヤッホーイ」とわくわくしていましたが、それはちょっと微妙でした。その理由とD800iDSの詳しいiアプリ性能を以下に書きます。

まず開発に必要な資料やツールはこちらでダウンロードできます。 ドキュメントからTouchCanvasというフレームワークまで全部揃います。

FOMA D800iDS用 iアプリ作成関連ドキュメント
http://www.mitsubishielectric.co.jp/mobile/ds_iappli/development.html

D800iDSのiアプリのDoJaプロファイルバージョンは4.1-LEです。従ってメガiアプリには対応しませんが、JARに100KB、スクラッチパッドに400KB使えるので、サイズ的には十分かと。CLDCも1.1なので、浮動小数doubleやfloatが使えます。タッチパネルを生かしたアプリを作る時、座標計算したりが実数でできるので便利です。
メインディスプレイの解像度は240x240、タッチパネルとなるサブディスプレイは240x320と、サブディスプレイの方が広くなっています。まあタッチする領域が広く使えるので問題ないです。またフォントサイズも12, 16, 24, 30で普通です。Javaヒープ領域などもサイズも同クラスの機種と比べて別段劣る点はありません。

続きを読む

2007年04月03日

D800iDSアプリコンテスト佳作獲ったどー

D800iDS 今年二月に「D800iDS」というドコモのケータイが、上下二画面という画期的なインターフェイスを持つにもかかわらず比較的ひっそりと(笑)発売されていました。

FOMA D800iDS | ドコモ
http://www.nttdocomo.co.jp/product/concept_model/d800ids/

普通の感性を持つ方なら間違いなく「ああ、ニンテンドーDSをもじってDSか」と思うハズのDSですが、正式名称は「ダイレクト&スムーズ」の頭をとってDSと、狙いすぎにもほどがある命名となっています。

名前もさることながら本体もニンテンドーDSになかなかそっくりで、これでニンテンドーDSみたいなゲームとか遊べたらDSより小さくていいじゃん!ということを作った人も思ったのか「D800iDS 2画面iアプリコンテスト」なるものが先月まで開催されていました。そこで「iアプリなら作れるし」と軽い気持ちで応募してみたんですが、ありがたいことに佳作をいただきました。

FOMA D800iDS 2画面iアプリコンテスト
http://www.mitsubishielectric.co.jp/mobile/ds_iappli/index.html

コンテストは一次審査、本審査と分かれていて、まずは企画書で一次審査に通過すれば、D800iDS本体を貸してくれるのです(一次審査時にはまだ本体は発売前でした)。貸し出された実機を使って開発し、本審査に望むのですが、作品を完成させさえすれば本体は返却不要ということで、作った作品がなんの賞も取れなくても参加賞として最低でもD800iDS本体はもらえるわけです。こりゃ参加するしかないと思って適当に企画書書いて応募したら難なく一次審査通貨し、D800iDSが到着しました。
しかし、このD800iDSというケータイが使いにくいのなんのって……まあこのケータイのレビューは別の記事に、iアプリの機能と合わせて書くことにします。

とにかく日常的には使えないほど使いづらい携帯で(コンセプトとしてはらくらくホンに近い携帯で、普段携帯を使い慣れない方には逆に使いやすいと思います)、なんかこう作品を作るモチベーションもいまひとつあがらず、最後の方はもう投げやりな感じでとにかく内容より体裁だけ整えて提出したって感じでしたが、発表されてみたらなんとありがたいことに佳作に入ってたんです。
まあ一次審査の段階で30組に絞られていて、大賞〜佳作あわせて15組だったので確率的にも2分の1で賞がもらえるんですが、それでも選ばれたのでマジありがたいっす。

で、先日ITMediaでコンテストの総評的な記事があったんですが、そちらでもちょこっと自分の作品を取り上げていただきました。タッチカクテルという、バーテンになってまったりカクテル作るゲーム(かどうかも怪しい)です。
作者が言うのもなんですが「これはひどい」感じの仕上がりなんでノーコメントとさせていただきます。でも記事中ではいいように解釈されていて救われます。とにかく開発期間が短かったので。もっと時間があればいろいろアイディアはあったんす。

ITmedia +D モバイル:昔懐かしの“黒電話”も再現――2画面携帯「D800iDS」でアプリはこう変わる (2/2)
http://plusd.itmedia.co.jp/mobile/articles/0703/30/news016_2.html


2006年09月15日

iAppliTool for DoJa-4.1でビルドしたアプリはDoJa4.1プロファイルでしか動かない?

ノベリオンを作り直していてiアプリ作りにかかりっきりな今日この頃です。

さて、タイトルの通り、iαppliTool for DoJa-4.1でビルドし、さて実機で動かしてみようと思ったら動かず、というかダウンロードできないんですね。「ソフトに誤りがあります」というエラーで。このエラーはダウンロードページのhtmlファイルが間違っているとか、jamファイル(ADFファイル)の書式やパラメータが間違っているとかいう場合によくある事なので、色々やったけども結局だめでした。
ダメだったのはSH700iと、N901iC。それぞれDoJa4.0LEとDoJa4.0プロファイルです。まさかと思ってF702iD、DoJa4.1LEプロファイルでやってみたら……ダウンロードできるし!動くし!!

iαppliToolって新しいバージョンでも古いプロファイル用のアプリもビルドできると思ってましたが、違うんでしょうか。もちろんビルドの設定はDoJa-3.5にしてビルドしたんですが……これじゃあターゲットプロファイルが指定できる意味がないじゃん、と思った次第です。

とにかく原因がよくわからず、たまたまF702iDでなら動くような他のエラーだった可能性もあるのでまだ何とも言えませんが、とにかくこれからiαppliTool for DoJa-4.1をアンインストールして古いプロファイル用ものを再インストールし、ビルドして同様のエラーが出るか試してみます。

追記
その後、iαppliTool for DoJa-3.0で再挑戦したものの出来ず。この時、sun.tools.javac.Mainは使用するでビルドしていたので、それを外してビルド……は出来ない、Java1.5を使ってるので、「ターゲットリリース 1.1 がデフォルトのソースリリース 1.5 と競合しています。」というエラーが出てしまうのです。
仕方ないのでJava1.5をSDK、ランタイム共にいったんアンインストールして「sun.tools.javac.Mainを使用する」のチェックを外してビルド。

成功!
N901iCでちゃんとダウンロードできて、動作しました。
よし、とこのままの勢いでSH700iでも、と思ったのになぜかSH700iでは相変わらず「ソフトに誤りがあります」と出てダウンロードできません。何度再読み込みしてもダメで、もしかして他にキャッシュみたいなのがあるのかなと思っていったん電源オンオフ。したらダウンロードできるし!なにそれ!ズルい!!
じゃあこんどは「sun.tools.javac.Mainを使用する」のチェックをつけてビルドしたらどうかなと思ってやってみたら、どちらも問題なくダウンロード可能。やっぱりJava1.5のせいなんでしょうか。とにかくこのままJava1.5が使えないのはソフト作りに支障が出るのでもう一度インストールしてやってみます。

追記その2
まだJava1.5はインストールし直してないんですが、どうも原因がわかったっぽい。jamファイルの末尾。改行が入ってなかったんですorz
マニュアルのADFの作成のところに『行末も含めCRLFとします』ってわざわざ書いてあるし。F702iDだけ動いたりした時とか、原因不明のままだけど丸一日つぶしてこれ以上追求する気力もないので、もうこれで解決とします。

みなさんもADFを自前で出力するようなアプリを作った時は最終行の改行を忘れずに……

2005年07月28日

iアプリ開発(Java CLDC)メモ

iアプリ新規作成時の基本的なテンプレートソース

import java.io.*;
import java.lang.*;
import javax.microedition.io.*;
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;

/**
********************************************************************************
********************************************************************************

アプリケーションの本体。

********************************************************************************
********************************************************************************
*/
public final class ■■アプリのクラス名(ADFに指定する)■■ extends IApplication 
{
  // アプリの開始
  public void start()
  {
    // キャンバスを作ってカレントにセット
    ●●継承したキャンバスクラス名●● Can = new ●●継承したキャンバスクラス名●●();
    Display.setCurrent(Can);
  }
}

/**
********************************************************************************
********************************************************************************

継承したキャンバスクラス。

********************************************************************************
********************************************************************************
*/
final class ●●継承したキャンバスクラス名●● extends Canvas implements MediaListener
{
  /**
  ******************************************************************************
  コンストラクタ。
  */
  public ●●継承したキャンバスクラス名●●()
  {
  }

  /**
  ******************************************************************************
  描画処理。
  */
  public void paint(Graphics g)
  {
    g.lock();
    g.unlock(true);
  }

  /**
  ******************************************************************************
  イベント処理。
  */
  public synchronized void processEvent(int type, int param)
  {
  }

  /**
  ******************************************************************************
  メディアリスナーによるイベント。
  @param source イベントを通知したプレゼンタのインスタンスが渡されます。
  @param type イベントの種類に対応するイベント番号が渡されます。
  @param param イベントに対応するパラメータあるいは0が渡されます。
  */
  public void mediaAction(MediaPresenter source, int type, int param)
  {
  }
}

iアプリ新規作成時のテンプレート

みなさんはもうEclipseとか使っちゃってるのでしょうか。小生はまだDoJaとテキストエディタで作ってます。面倒なのは新しくアプリを作ろうと思った時で、下準備がいろいろあります。たまにしか作らないので、作ろうとした時にはもう忘れているわけで、ここに手順を書いておきます。ちなみに、DoJa3.0用のキャンバス型アプリです。

  1. DoJa3.0にてプロジェクトを新規作成
  2. プロジェクトフォルダの内のsrcフォルダにソースファイルを作る
    基本的なテンプレートはこちら。使う場合、アプリのクラス名、キャンバスのクラス名(宣言部、アプリのstartメソッド内、コンストラクタと計5箇所)を変更する必要があります。
  3. プリプロセッサを使用して開発する場合、以下の作業が必要です。
    1. プリプロセッサ前のソースを格納するフォルダを、プロジェクトフォルダ内に作成します。フォルダ名は「プリプロセッサ前ソース」など適当に。
    2. ソースファイルをそこへ移動します。
    3. 同じフォルダに、プリプロセッサ実行用のバッチファイルを作成します。
  4. 必要に応じてJavaDoc用バッチファイルを作る
    ゲームなどはソースがどうしてもごちゃごちゃしてくるのでJavaDocを使えばソースのドキュメントを自動で作成できます。ドキュメントの書き出し用フォルダを作成しておき、バッチファイルを作成しておくと便利です。

プリプロセッサ実行用バッチファイルの中身 ここでは、iDKDoJa3.0¥pppにppp.exe、バッチファイルと同じフォルダにプリプロセッサ前ソース、親フォルダがプロジェクトフォルダとします。 c:¥iDKDoJa3.0¥ppp¥ppp.exe .¥ ..¥src¥

JavaDoc用バッチファイルの中身 C:¥jdk1.3.1_04¥bin¥javadoc -private -d C:¥iDKDoJa3.0¥apps¥●● C:¥iDKDoJa3.0¥apps¥■■¥*.java -windowtitle ▲▲

●●
ドキュメント書き出し用フォルダ。プロジェクトフォルダにdocなどのフォルダを用意すればいいんじゃないでしょうか。
■■
ソースファイルのあるフォルダを指定します。標準はプロジェクトフォルダ内のsrcフォルダですが、プリプロセッサ前用のフォルダがある場合はそちらを。
▲▲
ドキュメントのタイトルを指定します。なんでもいいですが分かり易いものを。

'04.2.22

iアプリで、ネットからダウンロードしてスクラッチパッドに保存する

// ネットからダウンロードしたデータをスクラッチパッドに保存
private static void download(String url, int pos)
{
  HttpConnection c = null;
  InputStream in = null;
  OutputStream out = null;
  try
  {
    // 接続
    c = (HttpConnection)Connector.open(url, Connector.READ, true);
    c.setRequestMethod(HttpConnection.GET);
    c.connect();

    in = c.openInputStream();
    out = Connector.openOutputStream("scratchpad:///0;pos=" + pos);

    // 1byteずつスクラッチパッドに書き込み
    int i = in.read();
    while (i >= 0)
    {
      out.write(i);
      i = in.read();
    }

    // 切断
    out.flush();
    out.close();
    in.close();
    c.close();
  }
#ifdef _DEBUG
  catch (ConnectionException ce)
  {
    System.out.println("ConnectionException Status:" + ce.getStatus());
  }
#endif
  catch (Exception e)
  {
    // 例外処理
    try
    {
      if (in != null) in.close();
      if (c != null) in.close();
    }
    catch (Exception e2)
    {
#ifdef _DEBUG
      Dialog dlg2 = new Dialog(Dialog.DIALOG_ERROR, "エラー");
      dlg2.setText(e2);
      dlg2.show();
#endif
    }
  }
}

'03.10.13

iアプリで、デバッグメッセージを見やすく

iアプリのJavaではプリプロセッサを使うことが多いですよね。そこでデバッグ用のメッセージを表示するには下のように書くことが多いと思います。

#ifdef _DEBUG
  System.out.println('デバッグメッセージ');
#endif

これってちょっと見難くないですか?それに3行使うので、各所にこれを入れるとどんどんかさばってきます。そんなわけでこんなのはどうでしょうか。 まず下記のように定義します。

#ifdef _DEBUG
  #define DEBUG_PRINT { System.out.println
#else
  #define DEBUG_PRINT if (true) { switch (0) {} } else { System.out.println
#endif

使うときはこうです。後ろに中括弧 } が必要という変な書式になってしまいますが、1行で済みます。もちろん_DEBUG定義を外せばjamのサイズは何もない状態と同じです。本当はもっとエレガントな方法があると思いますが、小生の頭ではこれが限界です。

DEBUG_PRINT('デバッグメッセージ');}

'03.10.13

2005年03月12日

iアプリで、スクラッチパッドへの二重アクセス

ちょっとした覚書ですが、InputStreamなどでスクラッチパッドにアクセスしている時(close()メソッドを呼ぶ前)に、MediaManagerのgetImage()、getSound()などでスクラッチパッドからデータを読み込もうとすると、エミュレーターでは問題なく動作するのに、実機では止まってしまうということがあるみたいです。
実機でだけ発生するバグは分かりづらいので忘れないように書いておきます、と。

'03.11.7

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。