2012年3月23日

「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月22日

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月20日

小さな子を持つ親として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月16日

良い習慣付けをサポートしてくれそうな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


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






.

2012年3月8日

「暗黒物質的開発者」とは

Scott Hanselmanさんのブログを読んだ。

Dark Matter Developers: The Unseen 99% - Scott Hanselman http://www.hanselman.com/blog/DarkMatterDevelopersTheUnseen99.aspx

 彼が「Dark Matter Developers」と読んでいるのは、次のような開発者の事だ。
They don't read a lot of blogs, they never write blogs, they don't go to user groups, they don't tweet or facebook, and you don't often see them at large conferences.
  • ブログを読まない。
  • ましてやブログを書く事など決してない。
  • ユーザーグループなどに参加しない。
  • TweetもしないしFacebookもしない。
  • 大きなカンファレンスにもほとんど現れない。

Scott氏は決して彼らを責めている訳ではない。むしろ擁護している。
Part of this is the web's fault. The web insists on moving things forward at an rate that makes people feel unable to keep up.

原因の一部はWebにある。人々がついて行けない様な速さでWebが物事を前に押し進めているのだ。

では、ついて行けない大半の「Dark Matter Developers」達は何をしているのだろうか。
Probably getting work done. Maybe using ASP.NET 1.1 at a local municipality or small office. Maybe working at a bottling plant in Mexico in VB6. Perhaps they are writing PHP calendar applications at a large chip manufacturer.

多分「仕事をして」いるのだ。地域の役所や小さな会社でASP.NET 1.1を使っているのかも知れない。あるいはメキシコの瓶詰め工場でVB6で開発しているのかも知れない。あるいは恐らくPHPのカレンダーアプリケーションを大きな半導体メーカーで書いているのかも知れない。

いずれにせよ、彼らにとってはASP.NET MVC 4が出ようがNode.jsが流行しようが「関係無い」のだ。

Scott氏はそういう99%の「Dark Matter Developers」達からも学ぶ事は多いと言う。

彼らは『現場で動くモノを作る』という事を知っているのだ。だから新しい技術を推し進めようとする自分達は目に見えない彼らの存在を忘れてはならない。10年前の技術を使い続けていても構わない。自分はこれからもそういう開発者達をサポートし続けるのだ。という趣旨の文で結んでいる。


それはそれでいいのだが、この文章を読んで、自分は「暗黒物質的開発者」にはなりたくないな~、と思った。

ではどうすればいいのか。

上に述べられているのと逆の事をすれば良い。

  • ブログを読もう。
  • 出来ればブログを書こう。
  • ユーザーグループなどに参加しよう。
  • TwitterやFacebookで発言しよう。
  • 大きなカンファレンスには参加しよう。


もしかするとScott氏も逆説的にこれが言いたかったのかも知れない。






.