2012年4月7日

携帯電話でも動くAndroidアプリ開発環境「AIDE」を使ってみた

「AIDE」というアプリが面白い。
AIDE - Android Java IDE - Google Play

InfoQ: AIDE 開発者に聞く - Android で動作する Android Java IDE

【コラム】イマドキのIDE事情 (126) ついに登場! Android上で動作する開発環境「AIDE」

これがあればAndroid端末上でAndroidアプリを開発する事が出来る。最初はもちろん「どうせエラーで落ちまくるんじゃないの?」と半信半疑だったが、試してみた所かなり安定している。

今回は3時間ほどかけてじっくりとこの「AIDE」で遊んでみた。

多分メインの用途としてはタブレット端末に外付けのキーボードをつないで使うという事を想定しているのだろうけど、なかなかどうして画面が4.3インチしかない携帯電話(HTC Evo)の上でもしっかりと動いている。

ソフトウェアキーボードでのコード入力は確かに辛い。でもコード補完もいい感じでやってくれるので、ある程度慣れればそれなりに打ち込める様にはなりそうだ。

まず何を試そうかと思ったのだが、以前に自分で作ったオセロゲームのEclipseのプロジェクトをそのまま読み込ませてみた。それなりの行数のコードなのでこれが問題なくビルド出来て動かせるのであれば、実際の開発でも使えそうだという事になる。

AIDEはGitに対応しているので、GitHubの公開リポジトリを指定して「Clone」を押すとなんの問題もなくソース一式を開く事が出来た。素晴らしい。

Gitのリポジトリを指定して「Clone」を押せばソースを取得してくれる。便利!
このサンプルのURLは、https://github.com/mikehibm/MiReversi.git
もしくは git://github.com/mikehibm/MiReversi.git

ソースに入っていた日本語のコメントも問題なく表示されている。
(ただし日本語の入力にはちょっと問題がある。)


ソースを取得した後、早速メニューから「Run」を選択して実行。

実行するとAPKファイルが作成され自動的にこの端末にインストールされる。

オセロゲームのアプリが問題なく起動した!

PC上のEclipseで作成したプロジェクトを開いてビルド・実行が出来る事が確認出来た。もちろんGitリポジトリからPullするだけでなく、ソースを変更した後、Commit/Pushする事も出来る。



つまり、これで通勤時間中に開発したり、ちょっとした空き時間にデバッグしたりという事が携帯だけで出来る、という事だ。ちょっと興奮してしまう。もちろん実際にやるかどうかは別だけれども、「やろうと思えば出来る」という事が凄いのだ。

さて次に、AIDEだけを使って小さなサンプルを一からコーディングしてみる事にした。

プロジェクトの新規作成画面。


新規作成後、res, src, gen, bin, assets などEclipseでも見慣れたフォルダが自動的に作成されている。

とりあえず、レシピ本の「No.88 カメラを呼び出す」サンプルを入力する。

IntentがImportされていないので赤い波線が表示された。

画面を長押しすると「Fix」というメニューが出てくるのでこれを選択。



さらに「Add Import ...」を選択すると、自動的にImport文を生成して追加してくれる。この辺りはEclipseと同等の使い勝手を実現している。



メニューボタンを押すと出てくるメニュー。




ソフトウェアキーボードと格闘しながらコードを入力する事約20分、AIDEだけで作ったミニアプリが出来上がった。ボタンを押すとカメラが起動して、撮った画像の縮小版がImageViewに表示される。



携帯でここまで出来るのだから、タブレット端末ならもっと快適だろうと思う。ましてや外付けキーボードなんかがあったら、もしかするとPC上でエミュレータを起動したりUSB経由で実機をつないだりするよりも快適かも知れない。

ただ、ひとつだけ欠点がある。AIDEでは現状ではデバッグ実行の機能が無い。もし将来的にデバッグ実行機能が付いてブレークポイントとかが設定出来るようになったら、本当に凄い事になるかも知れない。









.

2012年3月24日

「n件目からm件だけを取り出したい」場合のSQLクエリの書き方

Webアプリケーションで何らかのデータの一覧を表示する際に、ページング処理(Pagenation)を行うのはほとんど当たり前の事になっている。

EntityFrameworkでLINQを使って「100件スキップしてから20件だけ取得する」というクエリーを書きたい場合は、例えば下の様な書き方になると思う。

var list = db.Books
.OrderBy(itm => itm.id)
.Skip(100)
.Take(20);

これを実行すると実際にはどのようなSQLに変換されているのかを調べてみたい。

*ただし、以下の内容はMicrosoft SQLサーバーやOracleなど、分析関数が使用可能なデータベースサーバーを使っている場合に限られた話になると思う。


Microsoft SQLサーバーを使っている場合は、クライアントとデータベースの間でやりとりされているデータの内容を確認するには、「SQL Server Profiler」を使うのが便利だ。
「SQL Server Profiler」でキャプチャを開始する前の設定画面

キャプチャされたSQLの内容

実際にデータベースに送られたSQL文を少し読み易く書き直すと、下の様な感じになる。

SELECT TOP 20 *
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY [bs_id] ASC) AS [row_number]
FROM [dbo].[Bookshelves]
) AS e
WHERE e.[row_number] > 100
ORDER BY e.[bs_id] ASC

なるほど、ROW_NUMBER() という関数を使って一旦全レコードに行番号を付けて、そこから100行目以降の20件だけを取り出すというロジックになっているのか。。。


多分、この様にサブクエリを使って書くとSQLサーバーの内部で最適化が行われて、実際には全件アクセスはせずに最小のコストで必要な部分だけを返す事が出来るのではないだろうか。

この書き方は自分でSQLを書くときにも使えそうだ。一つのひな型として覚えておこうと思う。








.

新しいiPadを触ってみた感想

今日初めて「新しいiPad」を触って来た。



印象が薄れないうちに感想を書いておこうと思う。

  1. 画面がキレイ。
  2. やっぱり重い。
  3. でもiPad2には戻れない。
  4. 結論: 重さが半分になれば買います。


1.画面がキレイ。

これは本当にその通り。細かい文字も確かに見易くて良い。これで電子書籍を読んだら快適だろうと思った。

2.やっぱり重い。

Apple Storeに居る間、片手で5分間持ち続けたのだけれど、やっぱり重い。ベッドに寝転んでWebを見るにはこれでは辛い。実は家に初代iPadがあって、買った当初は喜んでこれでWebを閲覧していたけれども、重さが気になって段々と使わなくなってしまったのだ。重さ的には新型もほぼ変わらないので、多分同じ結果になりそうな気がする。

3.でもiPad2には戻れない。

店内にはiPad2も展示されていたので、比べてみた。こちらの方がスペック的には少し軽いはずなのだけど、その場では体感的には違いが分からなかった。一目で歴然とした違いが分かったのは、解像度の差だ。一度新型の画面を見てしまった後では、これからiPad2を買おうと言う気にはまずなれないと思う。少なくとも、100ドル引きになったぐらいではこの解像度の差には代えられない。

4.結論: 重さが半分になれば買います。

自分としては新しいiPadを買わない最大の理由は、結局は重さになる。

もし7インチで350グラム程度、かつこの素晴らしいディスプレイをもった「もっと新しいiPad」が登場したら、その時こそはアップルストアに並んででも買おうかなと思う。









.