2009年09月28日

セカイカメラ使ってみた

iPhone アプリで、だいぶ前から話題になっていた拡張現実(AR)アプリ「セカイカメラ」がやっと AppStore に登場したので早速インストールしてみた。



拡張現実とは、現実世界に付加価値を付けるというもの。

簡単に例を挙げるとドラゴンボールに出てくる目の前の人の強さを数値化して表示してくれる「スカウター」などが拡張現実を具現化したものだろう。

もっと身近なものとしてはテレビのテロップなんかも拡張現実と言っても良いかもしれない。




で、セカイカメラでは iPhone を使ってカメラ越しに現実世界を覗き込むと、そこにエアタグという形で付加情報を重ね合わせて表現してくれる。

セカイカメラ

こんな感じ。

実際に使ってみると、まだランドマークくらいしかエアタグがないので情報が少なすぎるのだが、リアルタイム映像に吹き出しがくっついて回るというのは、単純におもしろい。

自分でエアタグを付けてみると、その文字や写真がぷかぷか映像の上に重なって表示されるので、なんとも不思議な感じだ。本当に現実世界にも見えない吹き出しが存在するような錯覚を覚える。

おもしろがっていろんなところでエアタグを付けてみたくなるし、人が付けたエアタグを見つけるとなんだか妙に嬉しくなる。





でも、「それが何?」と言われるとそれ以上の説明ができないのだ。

単純に iPhone を通じて覗き込むと吹き出しが浮かんでるということ自体が面白いというだけで、それ以上の面白さが見いだせない。

プログラマーのぼくは iPhone の GPS、Wi-Fi 位置情報、加速度センサー、電子コンパスを駆使してエアタグの表示位置を計算しているこの技術を考えるだけでなんだかワクワクしてしまうのだが、そんな技術的な仕組みなんかどうでもいい人からみたらただ吹き出しが重なって表示されるだけのアプリに面白みは感じられないのかもしれない。



もっと言うと、このセカイカメラには、エアタグに文字や写真を乗せるという機能しかないというのが面白みを感じられないんだと思う。エアタグに有効期限やクーポンなどのいろいろな付加情報をもっと乗せたり、友達同士のエアタグを共有できるようになったりすると、もっと使い方が出てきそうな気がする。



でも、やっぱり GPS や Wi-Fi 位置情報だけでは無理があると思う。

結局、映像上のピンポイント、たとえばテーブルの上やポスターなどに情報を乗せられるほどの精度がないので、映像に情報を載せるよりも、地図上に情報を載せたほうが良さそう。



とにかく拡張現実を最初に実装したアプリということで、今後どんどんバージョンアップしてほしいものだ。
posted by さわしげ at 19:51| Comment(0) | TrackBack(0) | Mac/iPhone

2009年09月14日

Objective-C プログラミングの第 1 歩

スクリーンショット
iPhone や Mac OS X のアプリは Objective-C というプログラミング言語で作るのだけど、やっぱり慣れない言語というのは、暗黙のルールがわからず苦労する。

とくにわかりづらいのが alloc/retain と release の関係。

本を読んで、その動きは理解できるのだが、それがどのように運用されているのかが全く実感がないので、ちょっと実験してみた。


@interface Car : NSObject {
NSString *name;
}


@implementation Car
@synthesize name;

- (void)dealloc {
[super dealloc];
}


というクラスを作ってみて、この dealloc メソッドがどんなタイミングで呼ばれるのかデバッグしてみた。


Car *car = [[Car alloc] init];
[car release];


これで呼ばれるのは当たり前なので、


NSMutableArray *carList = [[NSMutableArray] alloc] init];
Car *car = [[Car alloc] init];
[carList addObject:car];
[car release];
[carList release];


というのを作ってみた。

これで、実際に Car のインスタンスがなくなるのは、


[car release];


ではなく、


[carList release];


の実行時だったので、NSMutableArray は addObject のときに retain をしていて、release のときに各アイテムを release してるということがわかったのだ。

なるほど。

Objective-C (というか Cocoa か?)のコレクションでは、アイテムの破棄はコレクションに任せて良いというのがスタンスらしい。


とまあ、慣れるまでは挙動を確認しながらじゃないとコーディングできないのがつらいところだな。

ってこれって当たり前なのかな・・?

Java のガベージコレクションに慣れちゃうと、メモリ管理の「当たり前」がわからなくなってしまうのがツライ。
posted by さわしげ at 20:16| Comment(0) | TrackBack(0) | Mac/iPhone