日記帳

日記です。

ODROID に Shot4k を移植

ODROID はせっかくゲーム機なんだからなにかゲームを動かすべき,ということで昔つくった 4KB ゲームの Shot4k ( http://d.hatena.ne.jp/sa-y/20090614#1244994662 ) を移植してみました.主に日曜日のお勉強会 で移植作業をしていました.とりあえず API をちょっとずつ置き換えるのと解像度の変更に伴う修正程度で動くところまではこぎ着けました.移植といってもどちらも Java なのでこの辺は簡単ですね.

Java2D API から android の SurfaceView の CanvasAPI への置き換えはだいたい以下のような感じで対応がとれます.

Java2D

g.setColor(BULLETS_COLOR);
backup = g.getTransform();
g.translate(bullets_x[i], bullets_y[i]);
g.rotate(bullets_direction[i]);
g.scale(1.4, 1.0);
g.rotate(PI1_4);
g.drawRect(-4, -4, 9, 9);
g.setTransform(backup);

Android SurfaceView

strokePaint.setColor(BULLETS_COLOR);
canvas.save();
canvas.translate(bullets_x[i], bullets_y[i]);
canvas.rotate(bullets_direction[i] / PI2 * 360);
canvas.scale(1.4f, 1.0f);
canvas.rotate(45);
canvas.drawRect(-3, -3, 3, 3, strokePaint);
canvas.restore();

ほとんど単純な置き換えですみます.

以下注意点.

  • Graphics2D#getTransform(), Graphics2D#setTransform() の代わりに Canvas#save(), Canvas#restore()
  • Paint オブジェクトを用意する必要がある
  • 色は Color クラスのオブジェクトではなく int で渡す
  • Canvas のメソッドの引数は double ではなく基本 float となる
  • Canvas#rotate() はラジアンではなく度を渡す
  • Canvas#drawRect() はの引数は(x, y, w, h)ではなく(left, top, right, bottom)になる

で,とりあえず動いたところ.

ODROID でも.

カーソルキー+2ボタンの操作系なので ODROID 以外の Android 端末だと厳しそう.

ODROID の OS を Android Eclair 2.1 R2 ベースに更新

必要なもの

手順

http://dev.odroid.com/projects/odroidのページのhttp://dev.odroid.com/projects/odroid/download から最新っぽい Release-2010_03_22.zip を取得します。

zip 中に以下の4つのファイルが入ってるので展開します。

  • ODROID_TF_Burner_098c.exe
  • Odroid-eclair-2.1.r2-100322.img
  • u-boot.bin
  • zImage

ODROID_TF_Burner_098c.exe を実行します。

以下の4つを変更します。他のところは変更しません。

  • T-Flash Drive のところに microSD のドライブを指定します。
  • Bootloader のところに同封されていた u-boot.bin を指定。
  • Kernel のところに zImage を指定。
  • Android RootFS のところに Odroid-eclair-2.1.r2-100322.img を選択


Start ボタンを押して2〜3分待つと書き込み完了。Android Eclair 2.1 R2 ベースの ODROID 用 microSD ができるので microSD を取り外して本体の microSD と差し替えて起動します。

ところで Android 2.1 になると何が変わるんでしょうね…?

ODROID の HDMI で液晶モニタに出力を試してみた


こんな感じになる.


液晶モニタで拡大しない場合はこんな感じ.

以下,試してみてわかったこと.

  • HDMI ケーブルでモニタに接続するだけで出力が始まる
  • 外部出力は横画面専用
  • 縦画面の状態でHDMIケーブルを接続すると自動的に横画面になる

ODROID 届いた

http://d.hatena.ne.jp/sa-y/20100210#1265826858非携帯電話Android 端末を調べて比較してみた上で ODROID を買ってみました.
ワンダースワンパクリオマージュと考えられる安っぽい親しみやすいデザインが素晴らしいと思ったので即決です!




ちょっと触ってみた雑感,疑問など.

  • 普通に Android 1.5
  • 動作は軽快
  • ACアダプタが付属しないのでUSB経由で充電するのだが遅い
  • バッテリーは充電は遅いが消費は早い
  • Mac OS X には標準に入ってるドライバで接続可能
  • Windows に接続するにはドライバをインストールする必要あり
  • 当たり前だけど標準では日本語入力できない
  • Simeji3.9.9.9 を入れてみたけど延々と強制終了する
  • Android Market」 が入ってなくて 「SlideME Marketplace」というのが入ってる
  • Android Market」ってどこかから入手できるのかな?
  • 電源ボタンを右にスライドするとホーム画面を横にできる
  • 横もちのとき用に「決定」,「戻る」,「ホーム」ボタンが右にもほしい
  • 横もちのときの右側のキー(A,B,X,Y)はOSの操作中には使い道がない
  • 横もちのときのL,Rの位置にあるタッチセンサー(!)キー(音量変更になってる)が誤爆しまくる(反応しないようにロックは可能)
  • ソフトウェアキーボードがカーソルキー+決定で入力できないのは残念

後で試してみたいこと.

  • HDMI 出力してみる
  • 動画再生
  • バッテリーの持続時間テスト
  • 他の日本語入力を試す
  • 適当にアプリを書いて動かしてみる
  • Android 2.1 の開発版(http://dev.odroid.com/projects/odroid)を試してみる

SQLite にデータを入れる際にインデックスを作ってからインポートするか,インポートしてからインデックスをつくるか

仕事で1000万件ほどのデータをSQLite にインポートしていたのですがなかなか処理が終りません…

CSV ファイルなどに大量にあるデータをまとめて SQLite のDB にインポートするとします. インポート先のテーブルにはいくつかインデックスをつけたいとします.

こういう場合に,インデックスをつけたテーブルをつくってそこにインポートするのと, テーブルだけつくってデータをインポートしてから改めてインデックスをつくるのとではどちらが速いでしょうか?

普通に考えればインポートしてからまとめてインデックスを作成した方が速くなりそうだと想像はつくのですが,実際のところどうなのでしょう? 速くなるとしたら何%くらい違うのでしょうか?

ということで実測してみました.

(511) cat create-table.sql 
CREATE TABLE Logs(
	ID INTEGER PRIMARY KEY
,	LogTime DATETIME
,	LogLevel TEXT
,	Message TEXT
);
(512) cat create-index.sql 
CREATE INDEX Logs_ID_IDX ON Logs(ID);
CREATE INDEX Logs_LogTime_IDX ON Logs(LogTime);
(513) cat bench_create_index_and_insert.sh
DBFILE=Logs.sqlite
DATA_FILE=$1
sqlite3 ${DBFILE} < create-table.sql
sqlite3 ${DBFILE} < create-index.sql
sqlite3 -separator "	" ${DBFILE} ".import ${DATA_FILE} Logs"
(514) cat bench_insert_and_create_index.sh
DBFILE=Logs.sqlite
DATA_FILE=$1
sqlite3 ${DBFILE} < create-table.sql
sqlite3 -separator "	" ${DBFILE} ".import ${DATA_FILE} Logs"
sqlite3 ${DBFILE} < create-index.sql
  • A:インデックス作成→インポート
  • B:インポート→インデックス作成
データ数 A(秒) B(秒) B/A(%)
100000 3.673 2.504 68.173
200000 9.724 6.598 67.853
300000 14.682 11.693 79.642
400000 22.097 16.972 76.807
500000 29.678 23.148 77.997
600000 36.227 28.596 78.936
700000 42.295 34.468 81.494
800000 51.668 40.596 78.571
900000 58.526 47.404 80.996
1000000 63.243 53.073 83.919


予想通りですが全体的にインポートしてからインデックス作成をする方が速いようですね. 10万件のインポートだとその差は約 30% .しかしデータが増えるにつれて差が減ってきて 100万件になると20%程度の差になります.

1000万件ほどになると大きな差はないのかもしれませんね… ということで処理が終わるのをのんびり待つことにします…

以下テスト環境について.

続きを読む

非携帯電話 Android 端末

最近なんとなく Android 端末が1台あってもいいんじゃないかという気がしてきました.しかし携帯電話屋さんに払うお金はありませんし,払う気もありません.そこで電話じゃない Android 端末はないものかと探してみると,日本で購入できそうなものとして3つほどみつかりました.


大きさも用途も異なる3機種ですが Android が動けばどうでもいい気がするのでちょっと比較してみます.

SmartQ5 WebStation ODROID
ディスプレイサイズ 4.3インチ 7インチ 3.5インチ
ディスプレイ解像度 800×480 800×400 320 x 480
タッチセンサー 抵抗膜式タッチセンサー 抵抗膜式タッチセンサー 静電容量式タッチセンサー
GPS - あり -
重力センサー - あり あり
CPU Samsung S3C6410 (ARM11 Core 667MHz) Marvell PXA303 624MHz Samsung S5PC100 833Mhz, ARM Cortex-A8,
メインメモリ 128MB 128MB Mobile DDR 512MB DDR2
内蔵FlashROM 1GB 256MB -
メモリカードスロット SDHC(〜32GB) x 1 microSD(〜16GB) x 1 T-Flash(micro SD)x 1, SDHC(〜8GB) x 1
USB ポート USB mini x 1 USB A x 1, USB mini B x 1 -
ビデオ出力 - - Mini HDMI
オーディオ出力 3.5 mm ミニジャック x 1 3.5mm ステレオミニジャック x 1 3.5mm ステレオミニジャック x 1
無線対応規格 IEEE802.11b/g IEEE802.11b/g IEEE802.11b/g
Bluetooth Bluetooth2.0+EDR - Bluetooth2.0 EDR
外形寸法 120mm×74mm×14mm 200mm x 120mm x 14.5m 150mm × 76mm × 16mm
重量 160g 390g 165g
バッテリー リチウムポリマー(2000mAH) リチウムポリマー (4000mAh) リチウムイオン(1350mAh)
OSバージョン Android 1.5, Android 2.0(開発中?) Android 1.5 Android 1.5, Android 2.1(開発版)
値段 19,800円 39,800円 29,800円

SmartQ5 は 4.3 型ディスプレイの MID デバイスでモバイル用ですね.3機種のうち最も安いデバイスで19,800円です.しかし購入者の評判をみると値段なりのつくりらしい….実際センサー類が少ないですね.

WebStation は 7 型ディスプレイの Web タブレット(?).3機種のうちで最もディスプレイが大きいデバイスです.また唯一 GPS を内臓しています.えーとなんかこう最近 Apple のイベントで発表されたあのデバイスとターゲット的には同じ感じなのかな… EPUB 形式をサポートした電子ブックビューアとかも入ってるようですし… Bluetooth を搭載していませんが USB A コネクタを搭載しています.

ODROID は 3.5 型ディスプレイの携帯ゲーム機です.3機種のうちでもっとも頭のおかしいデバイスです.解像度が 320 x 480 とほかの端末よりも小さいのにメインメモリが 512 MB DDR2 と大容量,その上にそれなりに強力なの3Dアクセラレータを搭載しています.さらに HDMI 出力まで搭載しており完全にゲーム機ですね… あと見た目はでっかいワンダースワン

安さで SmartQ5.センサー類の豊富さで WebStation.性能と頭のおかしさで ODROID って感じかな….他にも日本で買える非携帯電話Android 端末ってないだろうか…?

PC故障:犯人判明

http://d.hatena.ne.jp/sa-y/20100203#1265207277 の犯人を調査.

とりあえず外せる部品を外して起動テストをしたら1つ目のビデオカードを外した時点で起動した… ためしにビデオカードをつけた状態にしてみるとやっぱり起動しない.ということで犯人はビデオカードでした.とりあえずモニタをオンボードのビデオにつなぎかえて暫定対応完了.でもこの状態だとゲームできないなぁ… ゲーム用のPCなのに…