2012年4月19日

Windows上でAndroid SDK Revision 17のandroidコマンドのエラーを回避する方法

久しぶりにWindows 7上でAndroid SDKのアップデートを実行しようとして、いつもの様に

android update sdk

と打ち込んだら、エラーになった。ここに書いてあるのと全く同じ現象だ。
rTAKI0329's android ブログ: android.bat が起動しないので、こんな回避策を実施してみました
こちらでも同じ現象が報告されていた。
Issue 23648: tools\lib\find_java.bat returns Java not found in your path

 上のブログに書かれている通りに lib\find_java.bat ファイルを編集してjava.exeのパスを直接書き込んだらエラーは出なくなったので、ひとまず安心した。

でもこれを知らなかったら、このエラーを修正したアップデートが出たとしても、それを適用する為のコマンド自体がエラーになるのだから、アップデートが出来ずに途方に暮れる事になっていただろうと思う。







.

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を書くときにも使えそうだ。一つのひな型として覚えておこうと思う。








.