ODROID に Shot4k を移植
ODROID はせっかくゲーム機なんだからなにかゲームを動かすべき,ということで昔つくった 4KB ゲームの Shot4k ( http://d.hatena.ne.jp/sa-y/20090614#1244994662 ) を移植してみました.主に日曜日のお勉強会 で移植作業をしていました.とりあえず API をちょっとずつ置き換えるのと解像度の変更に伴う修正程度で動くところまではこぎ着けました.移植といってもどちらも Java なのでこの辺は簡単ですね.
Java2D API から android の SurfaceView の Canvas の API への置き換えはだいたい以下のような感じで対応がとれます.
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)になる
カーソルキー+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 届いた
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つほどみつかりました.
- SmartQ5 ( http://www.covia.net/main/product-smartq5.html )
- WebStation ( http://www.camangi.com/jp/product.html )
- ODROID ( http://www.redstar.co.jp/odroid.htm )
大きさも用途も異なる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 端末ってないだろうか…?