mobileの最近のブログ記事

Twitter を見てたら、

imananieki

と nakamura001 さんが言っていたので、先日作った iPhone Geolocation API テスト用ページを改造して作ってみました。

iPhone の Safari でアクセスすると、GPS (か Wi-Fi) を利用して現在地を取得し、近いと思われる駅と路線を表示するプログラムです。

今何駅? (http://lab.cirius.co.jp/st.html)
iPhone Safari からアクセスするとこんな感じの表示になります。
photo.jpg

「駅一覧」をクリックすると、その路線の駅名一覧が表示され、現在駅が矢印で表示されます。
photo-1.jpg

脊髄反射的に作ったあとに思ったのですが、結構便利かも。
やっぱり web アプリは気楽に作れていいですね。

ちなみに先日のエントリで書いたように FireFox 3.5 でも共通の仕様が使えるので、動作します。電車内コーディングの際にお使いくださいw。

駅情報の取得は、HeartRails Express さんの API を利用させていただきました。

関連記事

Firefox 3.5 からは、位置情報通知機能 (Geolocation API) が標準搭載に - Cirius Lab. ブログ
ついに iPhone Safari ブラウザから位置情報を取得できるようになります - Cirius Lab. ブログ
Gears の Geolocation API の Wi-Fi 測位を使ってみた - Cirius Lab. ブログ
Firefoxの位置情報把握アドオン「Geode」を使ってみた - Cirius Lab. ブログ
Google ClientLocation API を使って IP アドレスから現在地を取得 - Cirius Lab. ブログ

以前から、国内のモバイルブラウザのように、iPhone のブラウザからでも GPS を使えるようにすべきということをつねづね言ってきたわけですが、ようやく時期バージョンから iPhone でも実装されるようです。

iPhone's Safari Browser to include Geolocation

このブログでも度々言及してきた、W3C の Geolocation API の仕様に沿っているものになるようです。

というわけで、さっそく実装してみました。
http://lab.cirius.co.jp/geoloc.html
(iPhone OS 3.0 beta5 以降の Safari ブラウザで閲覧してください。)

上記URL にアクセスすると、まずは Safari 自体の Geolocation 機能の利用許可が表示されます。
iphone_geoloc_1.jpg
次に、このページが存在するドメインに対して Geolocation 機能の利用許可が表示されます。
iPhone_geoloc_2.jpg
取得したロケーションを Google Maps に表示してみました。ちゃんとシリウスのオフィスが表示されています。
iphone_geoloc_3.jpg
確認ダイアログですが、そのドメインでの最初の利用時にのみ聞かれて、一度許可をすればそれ以後は表示されないようになっています。 この辺は、GPS を利用する度に都度許可をしなくてはいけない日本の仕組みよりもスマートですね。

実装方法は上のページのソースを見てもらえればわかりますが、

navigator.geolocation.watchPosition(locupdate, handleError);
というメソッドで、イベントハンドラを登録するだけで使えます。 イベントハンドラ側の function は以下のようにしてみました。
function locupdate(pos) { 
    count ++;
    var d = document.getElementById("d");
    d.innerHTML = "lat : " + pos.coords.latitude + 
             "<br/>long : " + pos.coords.longitude + 
             "<br/>accuracy : " + pos.coords.accuracy + "<br/>";
    if (count == 1){
      initialize(pos.coords.latitude, pos.coords.longitude);
    }
}
pos というパラメータに取得されたユーザの位置情報が含まれています。
initialize という関数の中で、与えられた緯度経度の Google Maps 地図を表示しています。
(locupdate は位置情報を連続的に更新するので、最初の取得時にのみ地図を表示するようにしています。)

関連記事

Gears の Geolocation API の Wi-Fi 測位を使ってみた
Firefoxの位置情報把握アドオン「Geode」を使ってみた
Google ClientLocation API を使って IP アドレスから現在地を取得
Google's Android Developer Challenge の Top-50 ファイナリスト
にも入っていて少し気になっていた Wikitude というアプリを開発している MOBILIZY という会社が、セカイカメラのような拡張現実アプリを開発したそうです。

詳細は
Wikitude: Android App With Augmented Reality: Mind Blowing : Digital-Lifestyles (alpha remix)
の記事を参照していただきたいと思いますが、ビデオを見ると一目瞭然です。



ちなみにセカイカメラの方の動作はこんな感じ。


このアプリは Wikitude AR Travel Guide というのですが、Wikipedia 内のロケーションベースコンテンツを検索し Android 上で表示できるようになっています。

iPhone でも、近くの Wikipedia コンテンツを検索して Google Maps 上に表示できるアプリは沢山あるのですが、(最近出た Google Earth for iPhone でも可) 見ている風景にオーバーレイさせることで、とても素敵な表示になっています。

同様の拡張現実アプリは他にもあり、enkin というプロジェクトも少し前に話題になりました。


セカイカメラと Wikitude AR、どちらもまだアプリはダウンロードできるようにはなっていませんが、セカイカメラの方は iPhone に電子コンパスが搭載されていないことから技術的な実現性についてツッコミが入っています。
上記デモの内容の実現性という意味では、Wikitude の方が技術的な実現度は高そうです。

以前セカイカメラの開発元である頓知・の井口さんにお話を聞いたときには、「iPhone のアプリが重要なのではなく、サーバサイドの仕組みの構築が重要と考えている」ということを言っていたので、上記のようにクライアントアプリ上でのできる・できないという比較は本質ではないのかもしれません。

Wikitude のように 緯度経度のみを単純にマッチングさせて表示するだけだと、見晴らしのいい場所では面白そうですが、俯瞰できないような視点からの映像だと意外とつまんなかったりしてということも考えると、確かにセカイカメラのように建物の中やポスター、路線図からでもデータをマッチングできる、"airfilter"の概念 (デモの中でそう歌っています) の方が一段上だとも言えます。

それでも現実問題どうやって構築するのか?という疑問は残りますが。

ここギコ!ねねさんが位置情報コンテキストについて、オープンモバイルな携帯はコンテキストアウェアネスをうまく取り扱いできないのでダメだという考察をアップされていました。

コンテキストを検知できないモバイルWebなどあり得ない:ここギコ!
そして、解釈する側のWeb基盤の方も、いまや情報検索サイトはモバイル端末から位置情報コンテキストを読み込んで、直接検索クエリにできるのが当たり前 になっているし、風俗や出会い等のアングラ情報サイトですら、簡易位置情報やGPSで情報検索、というのが広まりつつある。
そしてモバイル端末は、QRコードリーダやFelicaを通じて、位置情報コンテキストだけではないさらに新たなコンテキストアウェアなデバイスに進化しつつある。
もちろん、ここでもキーワードは、Webとのシームレスな連携だ。
という国内端末に対し、iPhone ではブラウザから位置情報が取れず、せっかくのコンテキスト情報をウェブサービスが十分に活用できないという点に問題があり、

今後、ガラパゴスはどういう方向に進化していけばよいか。
もちろん、新しい端末のDNAを吸収していくことは大切だ。
その一方で、新たな強みを出すと言う意味では、新しい端末が重視していないコンテキストアウェアなWebという特性をさらに強化して、一段と多くのコンテキストがWebと連携できる方向に持っていけばよいのではないだろうか。 
と提案しています。

確かに iPhone を含め海外製の携帯ではブラウザから位置情報を取得することができず、私もこれには不満です。
ただし、標準化を語る場はすでにあり、実際に具体的に検討は進んでいる状況なのは考慮に入れた方がいいと思います。
例えば、位置情報コンテキストについては W3C で既に Geolocation API として議論されており、HTML5 で標準化されるのは間違いないでしょう。
Geolocation API Specification
Google Gears のチームが W3C の仕様策定に大きく影響している ( 上記仕様の Editor は Google Gears の Developer ) ことを考えると、少なくとも Android に搭載される Chrome Lite からは位置情報が取得できることになるでしょう。
先日書いた通り Firefox も既に GeoLocation API へ対応しました。そういった事を考慮していくと、モバイルブラウザの最大勢力である WebKit が Geolocation API に対応するのも時間の問題だと思われます。となると WebKit を採用している iPhone も対応することになるでしょう。
技術的には難しいことはないはずですし。

というわけで、位置情報コンテキストに関して言えば、たまたま iPhone が出遅れてはいるもののグローバルな標準化の流れは既に固まりつつあり、日本の携帯に搭載されるブラウザが HTML5 にどれだけ歩み寄るかどうかという段階に入っています。
HTML5 については、Geolocation API だけではなく、ローカルデータベースやオフライン利用、SVG など、モバイルに適用することで大きな価値を生み出すであろう仕様が定義されています。
その他の、FeliCa や QR コード、その他のセンサによって取得したコンテキスト情報の標準化については漠然としすぎていて議論しずらいですが、今後オープンモバイルな世界で生き残っていく為には、引き続き観察していく必要があるとは思います。

TechCrunch に気になる記事が載っていました。

TechCrunch Japanese アーカイブ » Google、大規模な位置情報サービスをローンチへ
http://jp.techcrunch.com/archives/20080531google-to-launch-large-scale-geo-services/
われわれの姉妹ブログ、Techcrunch UK はGoogle Gearsに位置情報サービス用APIが追加されているのを発見した。GoogleのGearsチームはしばらく前から今後追加されるAPIの準備をしていることが知られていた。それには、携帯アプリの開発者が位置情報を利用するためのデータに関するものが含まれていた。
これは面白い動きです。海外での位置情報取得方法のスタンダードとなる可能性を持っています。

もちろん現在のバージョンの Google Gears には搭載されていませんが、Google Gears の開発グループの Wiki には以下の内容が記載されています。

The Geolocation API allows web apps to retrieve the user's current position. The API should provide the following features:

  • One-shot position requests (e.g. for recommendations sites -- "where am I right now?")
  • Repeated position updates (e.g. for continuously updating one's location on a map)
  • Ability to get the last-known position cheaply before doing an expensive new request
  • Compatibility with future use as a singleton in the standard DOM (e.g. window.geolocation)
つまり、API では
・現在地点の問い合わせ
・反復的な位置情報の更新
・負荷のかかる位置情報取得方法を選択する前に、最後に取得した地点を問い合わせる
・今後の標準 DOM との 互換性
の機能をサポートするようです。
GPS や基地局情報など、様々な位置情報取得方法を透過的に扱うこともできるようになります。

更に興味深いのは、TechCrunch の記事にある
今日われわれはGoogleはこの位置情報APIを支援するために、携帯の中継塔とWiFiホットスポットの位置を地図上に詳細にプロットする大規模なプロジェクトを進めていることを発見した。
という記述。このデータベースが完成すると、GPS を使わなくても都市部であれば詳細な位置情報を取得することができるようになります。また、キャリアから基地局情報を提供してもらう必要もなく、Google 独自で位置情報データベースを構築することができます。
日本国内だと、PlaceEngine ( クウジット社 ) が Wi-Fi 電波から現在地を割り出す技術を持っています。こことの関係も気になるところです。

海外では日本のような位置情報ゲートウェイサービスがキャリアから提供されていないことが多く、ブラウザから位置情報を取得することはあまりできない状況でした。
GPS 対応のアプリを作れば可能ですが、開発のハードルもユーザーのハードルも高い。
もし Google Gears 対応のブラウザが広がれば、位置情報を扱うアプリケーションの開発ハードルが相当低くなると考えられます。
まだ Windows Mobile 以外のモバイル端末には対応していないようですが、iPhone や NOKIA への対応が進むと、かなり便利な API となりそうです。

独自仕様で先行してきた日本ですが、標準化仕様の策定にも存在感が大きい Google のこのような動きにどのようにキャリアが対応するのか興味深い所です。

(宣伝)日本国内であれば、GeoForm API を使えば 3 キャリア間の差異を考えずに透過的に位置情報を取得できます。Google Gears 普及まで待てない方はぜひご利用ください。
http://lab.cirius.co.jp/GeoFormAPI
25日 金曜日に、グーグル 主催の「Android SDK Hackathon」というイベントに参加してきました。

「Hackathon」とは、Hack + Marathon からできた造語で、皆で一つの場所に集まってコーディングを行う事を指します。
前日の Google Developers Day とは違い、20名程度の小規模な集りでした。

問い合わせが殺到して収集がつかなくなる可能性があったため、事前に公開してはいけないということでしたが、もう書いてもいいそうなので当日の模様を少しレポートします。

会場は、グーグルの渋谷オフィス。13時から開始しました。
まずは、グーグルのプロダクトマネージャー、石原さんからイベントの趣旨を簡単に説明いただいたあと、デベロッパーアドボケイトのジェイソン・チェン氏から、SDK の内容について詳しく説明をしてもらいました。

ジェイソン・チェン氏は、前日の Dev. Day でも講演をしてくれた方ですが、その講演よりももっと SDK の内容に踏み込んだ内容でした。
特に、Android の特徴である Intent や Action 回りについては、参加者からも多くの質問が出ていました。
僕自身は、アプリケーションライフサイクル時のスレッド管理のされかたについてだいぶ理解が深まり満足。

ここまでで2時間くらい。その後休憩を挟み、いよいよ複数チームに分かれてコーディングを開始。

事前に作りたいものを決めてくるようにという連絡があったのですが、それの種類毎にチーム分けをしました。
僕は位置情報関連のアプリを作るつもりだったので、ジオチームに入りました。
このジオチームが5人で、一番人数が多かったグループです。

自己紹介のあと、各自作りたいものを発表し、設計などについて意見交換をした後いよいよコーディング。
知らないことをいろいろと聞きながら、開発できるのはいいですね。
時々グーグルの開発者の方も参加してくれました。
僕はエミュレータから LocationManager を使って位置情報を取得できるようにしました。
その後定期的に位置情報を取得して動作するプロセスを作っていたのですが、途中で時間がきてしまいました。
エミュレータから LocationManager を使って位置情報を取得する方法については別のエントリで書こうと思います。

2時間くらいコーディングをしたあと、各自発表、Q&A のあと終了。
Android の開発については日本語の情報も少なくいままで交流もあまりなかったので、こういった場を用意していただいたグーグルさんには感謝です。

欲を言えば、もう少しコーディングの時間が長いと嬉しかったですね。

最後に、Android-SDK-Japan なるグーグルグループを作ったという説明もあったのですが、さきほどグループ検索をしてみても出てきませんでした。。。


初めまして。2月からシリウスラボに所属している高木 ( takaking または KING )です。以後よろしくお願いします。

さて、去る4/7は、シリウスラボの愛されキャラ灰田 ( planets ) の誕生日でした。シリウスには社員の誕生日をちょっとしたサプライズを交えてお祝いする習慣があります。大規模なところでは全社員で計画した宮澤社長の誕生日でしょうか。

今回は planets が技術者ということで何か技術というかハイテクを使ったサプライズということになりました。名付けて、「バースデーハック」。最初は開発サーバにログインするとメッセージが表示されるといった簡単なものを考えていたわけですが、前日 NOKIA のスマートフォン N95 が色々とリモートで操作できるとわかり、所長 ( hal_sk ) の提案でこの端末を使って何かやろうということになりました。
今日はその、バースデーハックの内容をご紹介します。

前回の gungi の時にも軽くデモしましたが、流れとしては以下のようになっています。

(1) 事前に planets が撮影できる位置に N95 を置く。
(2) 別のメンバーが「ちょっとこれわかんないんだけど教えてくれない?」と、planets に URI を送る。
(3) planets が URI を開くと NOKIA N95 がバースデーソングを奏でる。同時に N95 が驚いている planets を何枚か写真に納める。
(4) 演奏終了後、planets のブラウザにバースディメッセージと、撮影した写真が表示される。

ここで実際に出力された画面はこんな感じです。
バースデー画面
下に表示されている3枚の写真が、誕生日当日の planets です。リアクションが薄いですが、大変驚いたそうです。

この Nokia N95 に関してはタイマーとかで演奏、撮影したわけではありません。あくまで planets がブラウザで URI を開いたことをトリガーとしています。ではどうしているのかというと、実はこの端末 PC などと同じくウェブサーバ ( Mobile Web Server ) を動作させられるのです!! さらにこの Mobile Web Server の上で Python ( mod_python ) を動作させることも可能です。

N95 で動作する Python は Python for S60 というものがありまして、機種は異なりますが日本でも「Python for 702NK/702NK2プログラミングブック」といった本が発売されています。この Python、通常の日本の端末では考えられないほどに端末の機能にアクセスすることが可能になっています。簡単に挙げるとこんなところでしょうか。

* 音声の録音、再生
* 写真の撮影
* 電話の発着信
* 電話帳の操作

凄いですね!!!

Web Server が動作するだけでも驚きなのですが、その上プログラミングが容易な LL言語である Python からほぼ無制限に操作できてしまうとは。

結果、システムは次の図のように動作するようになりました。

BirthdayHack システム概要

この Mobile Web Server と Python for S60 は両方とも NOKIA が提供しているものです。 Mobile Web Server については「これ使ってなんか面白いコト考えてみてよ」ってノリで提供されているようです。
海外端末は日本と比べると規制が少なく、オープンですね。

日本でも W-ZERO3 以降、スマートフォンが提供されるようになってきていますが、Web サーバやその上で動作するスクリプト言語まで無償で提供されていて、その上端末機能のかなりの部分を操作できるというのは驚きでした。

Nokia も今後日本で 2桁のシェア獲得を目指すという話もありますので、海外端末にも注目していく必要がありますね。

Google が、Apps for Android というコーナーをオープンし、サンプルアプリケーションの公開を開始しました。
今までも簡単なものならば提供されていたんですが、今回はより本格的なアプリケーションになっています。

Android Developers Blog: Announcing: Apps for Android
http://android-developers.blogspot.com/2008/03/announcing-apps-for-android.html

サンプルアプリの第一段は、WikiNote という、パーソナル Wiki アプリです。
このアプリには

  • アプリケーション内の複数の Activity (View, Edit, Search, etc.) の実装方法
  • MIMEタイプに基いた、View/Edit/Search 用のDefault intent filter の作成
  • Activity のライフサイクルについて
  • Bundle や Intent を用いたメッセージのやりとりのしかた
  • テキストデータに Intent-firing をリンクする為に Linkfy を使う方法
  • アプリケーション内で Intent を使う方法
  • 別のアプリケーションの Activity を使う為に Intent を使う方法
  • note title を検索する為に、カスタム ContentProvider を書く方法
  • title をマッチさせたりコンテンツを検索する為に、ReST-like URI を登録する方法
  • insert, retrieve, update, delete や search 機能を SQLite を使って実装する方法
  • 複数の activity の為の UI のレイアウトや生成方法
  • メニューやキーボードショートカットの実装
などが盛り込まれているようです。

実際に実行してみると、このように、Android 上で wiki が使えるようになりました。
とはいえ、WikiName でのリンク以外の wiki記法は特に使えませんが。

また、3/3 に SDK のバージョンも m5-rc15 にアップグレードされています。http://code.google.com/android/download.html