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」が登場したら、その時こそはアップルストアに並んででも買おうかなと思う。









.

2012年3月23日

Android SDKをRevision 17に更新したらエミュレータがサクサクに!

Android SDK ToolsがRevision 17にアップデートされたので早速更新した。今回は比較的大きな更新になっている様だ。
Android SDKアップデート、Windows/Macでエミュレータが高速に | マイナビニュース

Updated SDK Tools and ADT revision 17 | Android Developers Blog

特に興味を惹かれたのが、
WindowsおよびMac OS Xにおいてエミュレータが仮想モードでAndroidx86システムイメージをサポートし、Androidが高速に動作するようになった。
という部分。

早速ここに書かれている手順通りにやってみた。
Using the Android Emulator | Android Developers


ただし、Intel VTによる仮想化支援を使うには、次の制限があるとの事。
  • ARMベースではなくx86のシステムイメージを使ったエミュレータしか動かせない。
  • 仮想化された環境内では動かせない。
  • 同一PC上でIntel VTを使う他の仮想化ソフト(VMwareやVirtualBoxなど)と同時に動かす事は出来ない。
  • OpenGL ESを使うアプリのパフォーマンスは実機ほどは出ない。



まずは、「Android SDK Manager」でx86のシステムイメージをインストールする。
現時点では、APIレベル10(Android 2.3.3)用のものしか無いみたいだ。


次に、SDK Managerのリストの一番下の方にある「Extras」の中の「Intel Hardware Accelerated Execution Manager」を選択してこれもインストール。
インストール後、コマンドラインから
sc query intelhaxm
を実行して、
SERVICE_NAME: intelhaxm
       ...
       STATE              : 4  RUNNING
       ...
と表示されればOK。



インストール完了後、AVD作成ダイアログのターゲットに「Intel Atom x86 System Image」が追加された。これを選択してAVDを作成すると、エミュレータ実行時にIntel VTによる仮想化支援機能が使われて動作が速くなるという事らしい。



早速エミュレータを起動してみると...

お、確かにブラウザが一瞬で起動する様になっている。

サンプル「APIDemos」を動かしてみる。
従来のエミュレータだとかなりカクカクしていたOpenGL ESのデモも、上述の様に実機ほどのパフォーマンスは出ないと但し書きはあったものの、x86イメージのエミュレータだとかなりスムーズに動いている。

(上)従来のエミュレータ (約8.5FPS)
(下)x86システムイメージを使ったエミュレータ (約27FPS)



普段からエミュレータ上で開発をしている人にはかなり嬉しい改善になりそうだ!


と思ったのだけれど...、

ここまで書いてから、さてVirtualBoxでいつも使っている仮想マシンを起動しようとしたら、「仮想マシンを起動出来ません...云々」のエラーが出てしまった。。。

「なんださっきインストールしたIntelのHAXMとか言うサービスを止めればいいんでしょ。」と思ってコマンドラインから、
sc stop intelhaxm
を実行。サービスが止まっているのを確認してから再度VirtualBoxの起動を試みても、やっぱり同じエラーが出る。検索したらMacでもやはり同じ問題に遭遇している人が居た。
HAXM stops VirtualBox fro ... - Intel® Software Network
PCを再起動しても同じなので、結局あきらめて「Intel Hardware Accelerated Execution Manager」をアンインストールする事にした。

アンインストール後は無事VirtualBoxの仮想マシンが起動出来たので、このIntelのHAXMサービスが原因だった事は間違いないと思う。

という事で、VirtualBoxとの相性は良くないみたいだ。残念。:-(









.

2012年3月21日

小さな子を持つ親としてAndroidタブレットに欲しい機能

我が家の子供達にひらがなやカタカナの練習をさせたいと思って、たまに初代iPadを使わせている。

ただ、子供にタブレット端末を使わせる場合、何も設定しないと大きな問題がある事に最近気付いた。というのも、子供達がYoutubeの使い方を覚えて、放って置くと1時間でも2時間でもアニメ(主にアンパンマン)の動画ばかり見続けるという状態になったからだ。

これではだらだらとテレビやDVDを見ているのと変わらないから、きっと教育上よろしくない。

そういう時に便利なのが、iOSの「機能制限」の設定だ。ここでYoutubeの使用を制限する事が出来る。さすが Apple、よく出来ている。


それはそれでいいのだけれど、せっかくだから出来れば自作のアプリでひらがな・カタカナを練習させたいなあと思い始めていて、そうなると今からiOSの勉強は大変なのでやはり子供用にAndroidのタブレット端末を買おうかなという事になる。

そこで気になるのが、Youtubeの存在だ。

Android端末でYoutubeのアプリを使用不可にする事は出来るのだろうか。少なくとも手元のAndroidスマホでは出来なさそうだ。

なんらかの方法で仮にYoutubeアプリを使えなく出来たとしても、多分ブラウザからは見る事が出来てしまう。

今年の5月か6月頃に出ると噂されているGoogle製の7インチタブレットには、ぜひこういったかゆい所に手が届く機能をOS標準の機能として付けてもらいたい。
Google タブレットは7インチ、 ASUS 製、5月発売? - Engadget Japanese

本当に200ドル前後という低価格で販売されるのだったら、iPad1台分の値段で2台買ってもまだお釣りが来る! 期待してしまうだけに、こういう細かい点がどうなるのかなあ、と気になる。




.

2012年3月17日

良い習慣付けをサポートしてくれそうなAndroidアプリ達

この記事を読んだのがきっかけで「習慣付けをサポートしてくれるアプリ」が気になりだした。
日記が全然続かない僕がたどり着いた『4行日記』を習慣化する為に行った方法 | ライフハック | Yu_notes.
僕も日記を続けようと思っていてなかなか続かないので何か良い方法はないかなと思っていた所だったので、Androidでも「21日習慣づけ」と同様のアプリが多分あるだろうと思って探してみた。

選んだ基準は、

  1. 見た目がシンプルでデザインが良い事。
  2. 入力が簡単そうな事。
  3. カレンダー表示やグラフ表示が出来る事。

の3つ。

とりあえず次の7つをインストールして試し中。

Routinely


Success Log: Goal Tracker


Habit Streak


My Effectiveness Habits (beta)


Habitlog - Habit Builder


GoalTracker


MyChain


一週間ほど使ってみて、どれが最も気に入ったかまた書こうと思う。






.