tag:blogger.com,1999:blog-13875990098088228922024-02-21T21:56:25.181+09:00北から南や西を見て思うこと札幌のフリーランサーまいむぞうのブログ。Android関連、コンピュータビジョン、IoT、ロボティクスあたりをやっています。まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.comBlogger135125tag:blogger.com,1999:blog-1387599009808822892.post-89559735937947857862017-10-14T23:17:00.000+09:002017-10-15T09:12:08.250+09:00Docker道場で修行してきたまとめ<br />
<span class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: "sf optimized" , , , , ".sfnstext-regular" , "hiragino kaku gothic pro" , "meiryo" , "ms pgothic" , sans-serif; font-size: 14px; letter-spacing: -0.12px;"></span><br />
<ul><span class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: "sf optimized" , , , , ".sfnstext-regular" , "hiragino kaku gothic pro" , "meiryo" , "ms pgothic" , sans-serif; font-size: 14px; letter-spacing: -0.12px;">
<li>Docker=chroot+OverlayFS+カーネルのプロセス分離技術</li>
<li>仮想OSとは概念が違う。仮想OSはBIOSより上をすべて差し替えるけど、Dockerは特定用途に必要なファイルだけ差し替える。下から全てなのか、上から必要最小限なのかの違い</li>
<li>仮想OSぽいこともできるけど、それは狙ったものではないので、失敗することが多い。ネット上の批判はそのあたりに原因がある。</li>
<li>ソースコード以外の、たとえばデーモンやライブラリや設定ファイルにバージョン管理の概念を導入したもの</li>
<li>開発環境と本番環境の同一性を保証するような用途に向く。または、使い捨てのアプリでも、親環境を汚さないで済む</li>
<li>基本的にLinux系OSの上に、やりたいことに関連する依存部分すべてををDocker imageとして用意し、基本となるOSの上にDockerで用意した差分を当てることで、特定の用途として使えるようにしたもの</li>
<li>基本Linuxで動く。macOSはUnix系なのでDocket for Macを使うことで動かすことが出来る。Windowsは、仕組みが違いすぎるので、Dicker for Windowsを使うことで、内部的に仮想Linuxを立ち上げることで動かしている</li>
<li>最近はクラスタリングを便利にする方向に進化している</li>
<li>元となるOSからの差分は、OverlayFSを使って、たくさんのレイヤーを重ねることで実現しており、変更はレイヤーごとで管理するので、仮想OS(すべてを一括管理)より入れ替えが楽。これにより開発中のテストや修正などが迅速に行える</li>
<li>Docker imageは、レイヤーに相当しており、実際にはファイルやサブディレクトリを含んだ1つの読み取り専用ディレクトリとして実装されている。(OverlayFSの下層レイヤーとして機能する)</li>
<li>Docker containerは、実行する度に作られる管理単位で、一つのDocker imageから複数のDocker containerを作ることが出来る</li>
<li>Docker containerは、OverlayFSを使っていることもあって、変更された分は最上位レイヤーに差分としてとして管理される。</li>
<li>コンテナの実行を終えたとき、最上位レイヤーは破棄されるので、残しておく必要があるときはdocker commitを使って保存しておく必要がある</li>
<li>レイヤーは複数重ねることが出来る。これにより基本部分や特定用途など、用途ごとに管理できる</li>
<li>レイヤーの層の分、OverlayFSでの重ね合わせが発生する。ファイルを1バイトでも変更すると、ファイル単位のcopy on writeが発生し、これが最大のオーバヘッドとなる。それ以外の部分のオーバヘッドは小さい。</li>
<li>Docker containerからは、親となるOSのディレクトリを直接マウントできるので、変化するデータは親のファイルシステムに保存するのが定石(じゃないと、遅くなる)</li>
<li>仮想OSではないので、親のOSのディストリビューションや、バージョンに影響を受ける。基本的には動くように作っているはずだが、現実的には、同じディストリビューションの同じバージョンで動かす方がよい(ディストリビュービューターの努力依存)</li>
<li>元になるOS部分と、一層目のレイヤーの境界線がわかりにくい。要はOS層の中で、マシンが違っても同じ実行を保証するための、共通因子がはっきり定義されてない印象。ただしこれは、元となるOS部分を限りなく薄くして、一層目のレイヤーを厚くすることで吸収するような方向に進化中とのこと</li>
<li>どこに使えば使えばいいのか、いまいち解りにくい</li>
<li>市販の本は、既に古くなっている部分が多いのでオススメしない。 <a href="http://docs.docker.jp/" target="_blank">Dockerドキュメント日本語化プロジェクト</a>をオススメする。</li>
</span></ul>
<span style="background-color: white; color: #1d2129; font-family: "sf optimized" , , , , ".sfnstext-regular" , "hiragino kaku gothic pro" , "meiryo" , "ms pgothic" , sans-serif; font-size: 14px; letter-spacing: -0.12px;">また、docker利用例としてros2とsagemathを思い出したので紹介しておきます。</span><br />
<ul>
<li><a href="https://hub.docker.com/r/osrf/ros2/" target="_blank">ros2</a>はRobot Operating System ver2です。ロボット開発にパッケージシステムや共通コンパイル環境を用意することで、車輪の再発明を抑制してみんなハッピー、みたいなものです。ただ、進化スピードが早いのと、周辺システムまで含めると巨大なので、コンパイルを通すのがしんどいです。おそらくそれをdockerを使って解決しているのだと思います。</li>
</ul>
<ul>
<li><a href="https://github.com/sagemath/docker-images" target="_blank">sagemath</a>は数学系の教育補助ソフトに分類されるのかな。jupyter notebookやsageなどを使って数式を書くと、それを解析的に解いてくれたり、グラフに書いてくれたりします。AIやってる人は結構使ってるはず。同様のものが無料のクラウドサービスとして運用されていますが、混むと遅くなるのでこちらでdocker imageも配布されているようです。(なので自分のマシンで立ち上げてもユーザ登録から始まった気がします)</li>
</ul>
<br />
<br />
<span class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: "sf optimized" , , , , ".sfnstext-regular" , "hiragino kaku gothic pro" , "meiryo" , "ms pgothic" , sans-serif; font-size: 14px; letter-spacing: -0.12px;"> </span>まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-47259520340393310042017-09-29T16:24:00.004+09:002017-09-29T16:27:00.283+09:00動体追跡システムを作ってみた<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/KvXXWmAfACI/0.jpg" src="https://www.youtube.com/embed/KvXXWmAfACI?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
<br />
以前からOpenCVを使って色々作ってみていたんだけど、画像加工や特徴点ベースのマッチングに使う、つまりアプリ全体を俯瞰してみるとコア部分ではあるけどあまり全面に出てこない部分で使っていたぐらいで、本格的にOpenCVと向き合ったのはこれが初めてかもしれない。<br />
<br />
画像加工や解析の場合、ゴールは同じでも色々なアプローチがあって、各カテゴリごとにOpenCVのAPIとしてたくさんのアルゴリズムが実装されているんだけど、ちゃんと使いこなすためには論文を読んで理解しておく必要がある。(OpenCV自体では、APIの説明しかしてないので、パラメタの意味や使い分けは別途調べる必要がある)<br />
<br />
また、理論的にいくつかのアプローチは除外できても、結局は複数のアプローチを実際に試してみることになるので、自分としても3歩進んで2歩下がる感があったり、このあたりを受託でやるとなると、発注者の理解を得るのはなかなか難しいなぁ、と思ったり。<br />
<br />
閑話休題<br />
<br />
さて、この動体追跡システムですが、製品として発売されているものもあるようで、そちらではスーパーの出入り口カメラを向けておき、出入り口前にボーダーラインを引いておくことで、来店数をカウントできるような機能もあるみたい。<br />
<br />
また、コインパーキングの空き情報や、違法駐車の自動取締りなどにも使えそうなので、時間がある時にRaspberry pi3あたりで実装してみようかなと思っています。<br />
<br />
こちらも事業化したいので、興味ある方は連絡ください。まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-53431418984481692172017-09-27T11:37:00.000+09:002017-09-29T13:29:02.900+09:00赤外線暗視装置を作ってみた<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/kI438-yaonI/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/kI438-yaonI?feature=player_embedded" width="320"></iframe></div>
<br />
秋月のネットで<a href="http://akizukidenshi.com/catalog/g/gK-00094/" target="_blank">赤外線投光機キット</a>を見つけて、勢いで車載用赤外線暗視装置(ドライブレコーダーを兼ねたもの)として作ってみたんだけど、同居しようと思っていたラズパイ3では<a href="https://fromnorth.blogspot.jp/2017/09/can.html" target="_blank">CANの処理</a>が思ったより重かったのと、この投光器の光量ではあまり遠くまで見えなかったので、車載向けを諦めて持ち歩き可能にしたのがこちら。<br />
<br />
5インチディスプレイも付けたので、OpenCVを使ってリアルタイム動画解析するのであれば、かえってこっちの方が良かったかもしれない。WiFiの無い現場でもUSBキーボードだけでパラメータ調整して再コンパイルできるからね。<br />
<br />
途中で3Dプリンタが壊れてしまったのでケースは中途半端だけど、3Dプリンタさえ修理が終わればもうちょっと実用的になるはず。。。<br />
<br />
<a href="https://ja.wikipedia.org/wiki/GStreamer" target="_blank">gstreamer</a>を使って遠隔地監視したり、<a href="http://news.mynavi.jp/articles/2015/08/14/raspberry_pi/" target="_blank">motion</a>を使って動体監視したりまでは試してみたんだけど、害獣駆除用の檻の扉の制御とかもやってみたいな。<br />
<br />
色々応用できそうなので、うまく事業化できればいいなと思っています。興味持たれた方はご連絡ください。まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-44784780865205402632017-09-26T11:16:00.000+09:002017-09-29T13:30:42.537+09:00CANから情報を取得して車載ナビに情報表示してみた<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/sntAUBcSvl4/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/sntAUBcSvl4?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
最近の車は自動運転に向けて各種センサーデータが<a href="https://ja.wikipedia.org/wiki/Controller_Area_Network" target="_blank">CAN</a>というネットワークを介してやり取りされているんだけど、規格がオープンでネット上に情報がたくさんあり、必要な基板も中国から安く買えるようなので試しに作ってみたものがこれ。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
昔はサーキットや峠に頻繁に行ってたけど、最近はそんな熱もすっかり冷めてしまったので、たまにミニサーキットに行きたくなった時に水温管理できればいいな、ぐらいのモチベーションで作ってみました。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
自動運転に向けての各メーカーの取組みも各社それぞれで、車種ごとにも違うので、汎用性が薄いのが難点かな。自分用としてはいいけども。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
上記のように、ちょっと汎用的な応用は難しいのかもしれませんが、特定用途であればいけそうです。興味ある方はご連絡ください。</div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-27925438824530868112017-09-25T11:08:00.000+09:002017-09-28T15:05:16.511+09:00室内測位システムで複数同時測位してみたそういえば、YoutubeやFacebook/Twitterでは公開してたけど、ブログに書いてなかったなと思い出したので、整理したいと思う。<br />
<br />
まずは、以前に作った<a href="https://fromnorth.blogspot.jp/2014/02/ibeacon.html" target="_blank">iBeaconを使った室内向け測位システム作ったよ</a> を発展させて、複数同時に測位できるようにしたシステム。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/8GFdMTXUU_Y/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/8GFdMTXUU_Y?feature=player_embedded" width="320"></iframe></div>
<br />
このシステム用に、結局iBeaconも自作した(ファーム担当した)ので、追加機能など色々応用できそうなんだけど、iBeacon自体あまり聞かなくなったので惜しいなぁ。<br />
<br />
とはいえ、IoTとしてだとビーコンとしてのアプローチは有効な選択肢の一つだと思うし、iBeaconは聞かなくなってきてもGoogleの<a href="https://developers.google.com/beacons/" target="_blank">Eddystone</a>などを使って多機能に進化したものは消えずに細々と使われ続ける気がする。<br />
<div>
<br /></div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-18540490726988520612016-07-06T01:08:00.001+09:002016-07-06T01:08:13.246+09:00<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/7BiHwK9m03s/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/7BiHwK9m03s?feature=player_embedded" width="320"></iframe></div>
<span style="text-align: center;"><br /></span>
<span style="text-align: center;">OpenROVのキットを去年の秋口に購入して、そのまま仕事が忙しくなってしまったため完成したのは正月頃で、今年のGWにやっと海で沈めてみれました。(北海道の冬の海中でひっかかるかも?と考えると、冬に試してみることはできなかった。。。)</span><br />
<span style="text-align: center;"><br /></span>
<span style="text-align: center;">OpenROVは海中用ドローンという珍しいジャンルなんですが、オープンハードウェアとオープンソフトウェアと組み合わせたもので、ハード的にはアクリル板をレーザーカッターで切り出したものを躯体とし、BeagleBone Black(Raspberry Piみたいなやつ)とArduinoを組み合わせたもので動いています。キットが届いた時はバラバラのパーツです。</span><br />
<span style="text-align: center;"><br /></span>
<span style="text-align: center;">海中では無線が使えないので、地上との通信は有線です。とはいえ、イーサネットケーブルを使うのではなく、PLC(</span>電力線通信)用のアダプタを改造した2芯ケーブルを使って通信します。地上に出れば無線が使えるので、そこからは無線LANアダプタに接続して、タブレットやPCのブラウザを見ながら、キーボードやPS3のコントローラーなどを使ってコントロールします。(上記サムネイルの画面)<br />
<br />
<span style="text-align: center;">ソフト的には、</span><span style="text-align: center;">BeagleBone Black内でLinuxが稼働しており、USBカメラの画像をnode.jsを使って表示・コントロールしています。Web技術者とも親和性が高い構成なので、思いつきで改造できそうです。実際に、ハードウェアや回路的にも、改造していくことを前提に作られています。</span><br />
<span style="text-align: center;"><br /></span>
<span style="text-align: center;">動画ではOpenROV本体を撮り忘れた(撮ったけど消えてしまった)ので、興味ある方は<a href="http://www.openrov.org/" target="_blank">公式サイト</a>をチェックしてみてください。</span><br />
<span style="text-align: center;"><br /></span>
<span style="text-align: center;">OpenROVは操作するのも楽しいですが、組み立てるのも楽しいですね。</span><br />
<span style="text-align: center;">こういう機能は、こういった要素で機能してるんだ、という発見がたくさんありました。</span><br />
<span style="text-align: center;"><br /></span>
<span style="text-align: center;">今は暇を見つけて集魚用撒き餌マシン(OpenROVアドオン?)を作ってます。</span>まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-47311504119928565322015-04-01T17:48:00.000+09:002015-04-01T17:48:43.907+09:00CakePHP 3.0でgitを使ったデプロイの覚書ちょっと前にCakePHP 3.0がリリースされたようなので、落とし穴が多いことは覚悟で実践で使ってみた。<br />
<br />
で、最初から躓いたのでメモを残す。<br />
<br />
<h2>
問題</h2>
<br />
普通、手元のPCに開発環境としてCakePHPを動かせる環境を作っておいて、こちらで開発&ある程度デバッグしたところで、本番サーバにgit経由などでデプロイするケースが多いと思う。<br />
<br />
CakePHPも今はGitHubでホスティングされていることもあって、最初から運用を意識した.gitignoreが用意されているんだけども、<br />
<ol>
<li>手元の開発環境で<br />
<pre>php composer.phar create-project --prefer-dist cakephp/app [app_name]</pre>
して、CakePHP3のプロジェクトを新規作成</li>
<li>このプロジェクト用gitリポジトリにgit commit&git push (このときgitignoreによりbin/logs/tmp/venderなどはコミットから外れる)</li>
<li>本番サーバでgit pull</li>
</ol>
としたとき、gitignoreで外されたvenderディレクトリ内のフレームワーク本体や、bin/logs/tmpなどディレクトリは、どうやって本番環境に持っていけばいいのかわからなかった。<br />
公式ドキュメント調べても、特に書いてなかった。<br />
リリースされたばっかりなので、ブログやstackoverflowなどにも載ってなかった。<br />
<br />
<h2>
解決方法</h2>
<br />
おそらく、上記3の後に、<br />
<ol start="4">
<li>本番環境側にもcomposerをインストール<br />
上記app_nameディレクトリに移動してから<br />
<pre>curl -s https://getcomposer.org/installer | php</pre>
</li>
<li>githubのcakephp/appからbin/logs/tmpを取ってくる。方法は色いろあると思うけど、以下のようにすると楽だった<br />
<pre>svn export https://github.com/cakephp/app/trunk/bin
svn export https://github.com/cakephp/app/trunk/logs
svn export https://github.com/cakephp/app/trunk/tmp
</pre>
</li>
<li>composerを使って依存関係にあるライブラリをvenderディレクトリに入れ、自動実行されるCakePHPのインストールスクリプトを使ってパーミッションも付与する<br />
<pre>php composer.phar -n install</pre>
</li>
</ol>
のようにするのが正解ではないかと思う。みんな困るはずなので、そのうちもっとスマートな方法が提案される気もするけどね。<br />
<br />
<h2>
おまけ</h2>
<br />
CakePHP 3.0はPHPのintl extensionに依存してるんだけど、MacOSXの場合、homebrewを使ってintlモジュールを入れようとすると<br />
<pre>brew install php53-intl</pre>
など、PHP本体とは別にintlモジュールを入れる必要があると書いてあることが多かった。<br />
<br />
でも、実際に<br />
<pre>brew search php5</pre>
で検索すると、-intlがついてるモジュールは見当たらない。<br />
<br />
困ったので色々調べてみたら、ちょっと前からphp本体にintlモジュールを組み込んだ状態で配布する形式に変わったようだった。<br />
<br />
なので、<br />
<pre>brew install homebrew/php/php56</pre>
だけで最低動作環境はクリアできる。まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-58325053054243030522015-02-16T08:47:00.001+09:002015-02-19T15:05:10.252+09:00「Bluetooth HCIスヌープログを有効にする」とは何なのか<h2>
全部読むのが嫌なせっかちな人へ</h2>
<ul>
<li>Android 4.4(API 19)以降の<span style="background-color: white; color: #292f33; font-family: Arial, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Osaka, メイリオ, Meiryo, 'MS Pゴシック', 'MS PGothic', sans-serif; font-size: 16px; line-height: 22px; white-space: pre-wrap;">開発者向けオプションには、「Bluetooth HCIスヌープログを有効にする」というチェック項目がある。</span></li>
<li><span style="background-color: white; color: #292f33; font-family: Arial, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Osaka, メイリオ, Meiryo, 'MS Pゴシック', 'MS PGothic', sans-serif; font-size: 16px; line-height: 22px; white-space: pre-wrap;">「Bluetooth HCIスヌープログを有効にする」をOnにした場合、BlueZのhcidump相当のログが</span><span style="background-color: white; color: #292f33; font-family: Arial, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Osaka, メイリオ, Meiryo, 'MS Pゴシック', 'MS PGothic', sans-serif; font-size: 16px; line-height: 22px; white-space: pre-wrap;">出力される。</span></li>
<li>ログファイルの保存先はメーカーによる。/etc/bluetooth/bt_stack.confを確認すると保存先がわかる。</li>
<li><span style="background-color: white; color: #292f33; font-family: Arial, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Osaka, メイリオ, Meiryo, 'MS Pゴシック', 'MS PGothic', sans-serif; font-size: 16px; line-height: 22px; white-space: pre-wrap;">hcidumpのログは</span>Wiresharkで解析できる</li>
</ul>
<h2>
いきさつ</h2>
2013年の11月頃に、Nexus5(当時4.4.0あたり)を入手できたまいむぞうは、開発者オプションに「Bluetooth HCIスヌープログを有効にする」というチェック項目を見つけ、当時からiBeaconやBLEに興味を持っていた私はこのオプションを<a href="https://twitter.com/maimuzo" target="_blank">いじくりまわしていた</a>。<br />
<br />
なんとなく、正体を知れた私は、特にブログなどにまとめることもなく、そのうち誰かがブログにまとめてくれるだろう、と思いつつ、興味の対象を他に移した。<br />
<br />
時は流れ、2015年2月に、仕事上BLEのパケットを解析する必要に迫られ、当初は手持ちのSenserTag付属の開発キット(<a href="http://www.tij.co.jp/tool/jp/cc2541dk-mini#0" target="_blank">CC2541 ミニ開発キット</a>)に付属の<a href="http://www.tij.co.jp/tool/jp/packet-sniffer" target="_blank">Packet Sniffer</a>を使おうと思ってたんだけど、買ったまま使わずに置いといたら、ソフトウェア側がバージョンアップしてうまく動かなくなっていたので、どうしようか途方に暮れていた。<br />
<br />
そんなときに「Bluetooth HCIスヌープログを有効にする」オプションの存在を思い出した。改めてググってみても、自分のTwitterがひっかかるだけであまり使っている人がいなさそうだったので、自分のメモ的にもこのオプションの使い方をまとめることにした。<br />
<h2>
「Bluetooth HCIスヌープログを有効にする」とは何なのか</h2>
まず、「Bluetooth HCIスヌープログを有効にする」オプションは、Android 4.4(API 19)あたりで増えた開発者オプションである。<br />
<br />
「Bluetooth HCIスヌープログを有効にする」をOnにした時の挙動なのだが、公式ドキュメントをちゃんと読んでいないものの、これはhcidump相当のログを出力するオプションらしい。<br />
<br />
元々AndroidのBluetooth周りは、Linux上のOSSである<a href="http://www.bluez.org/" target="_blank">BlueZ</a>を使っているのだが、Ubuntuや他のディストリビューションにBlueZをインストールした場合、HCI(Bluetoothのハードウェアとソフトウェアの境界線ぐらいに相当するレイヤ)上のコマンドラインデバッグツールとして、hcidumpというログ出力用プログラムが利用できるようになっている。<br />
<br />
hcidumpを稼働させつつ、BlueZが入っているPCとBluetooth機器を通信させると、その間を飛び交っているパケットを記録しておく(パケットスニファ)のが、その役割となっている。<br />
<br />
Androidの実装を確認はしていないものの、「Bluetooth HCIスヌープログを有効にする」をOnにした時に出力されるログのフォーマットは、hcidumpのものと同じっぽいので、Android内部でhcidumpそのもの、もしくはBlueZのライブラリを使ってhcidump相当のコードが動いているように見える。<br />
<h2>
Bluetooth HCIスヌープログを有効にするをOnにして、ログを取り込む</h2>
実際にログを取得してみよう。<br />
<br />
「Bluetooth HCIスヌープログを有効にする」オプションは、Onにしている間のBluetooth通信を監視するものなので、最初にBluetooth機器をすべて切断し、Bluetoothを使うアプリも全て停止しておく必要がある。<br />
<br />
Androidの設定アプリから、開発者オプションに入り、「Bluetooth HCIスヌープログを有効にする」にチェックを付けた後、デバッグしたいBluetooth機器と接続したり、iBeaconなどを扱うアプリを起動すると、その通信内容がログに記録される。<br />
<br />
このログは、メーカーごとに保存先が異なっているようなので、以下のコマンドを使って確認することができる。<br />
<br />
$ adb shell cat /etc/bluetooth/bt_stack.conf | grep BtSnoopFileName<br />
<br />
例えば、Nexus5やNexus7は/sdcard/btsnoop_hci.logへ、Galaxy S4は/sdcard/Android/data/btsnoop_hci.logに出力されるようになっていた。<br />
(/sdcardが指している先は本当にSDカードなのかどうかは、端末による。たとえばSDカードが無いNexus7も同じパスに保存される)<br />
<br />
あとはADBなどで<br />
<br />
$ adb pull /sdcard/btsnoop_hci.log . <br />
<br />
とすればPCに取り込むことができる。(USBケーブル経由でAndroid File Transferや、エクスプローラ経由でも取り込めそうだけど)<br />
<br />
ちなみに、一度ログを保存した後、「Bluetooth HCIスヌープログを有効にする」オプションをOff→Onとすると上書きされてしまうので注意。<br />
また、Onのまま放置するとストレージを食いつぶすので、使わない時はOffに戻しておこう。<br />
<h2>
hcidumpのログを解析する</h2>
OSSエコシステムとしては、hcidumpのログは、Wiresharkに取り込んで解析するのが一般的らしい。<br />
<br />
まいむぞうはMac使いなので、MacOSX対応のWiresharkをインストールする必要があった。<br />
<br />
Wiresharkのインストール自体は、各OSの手順に従って欲しいのだが、一昨年に試した時点ではWireshark本家提供のMacOSX用パッケージはうまく動かなかったので、Homebrewで入れた気がする。(うろ覚え)<br />
<br />
Wiresharkが立ち上がってしまえば、File→Openで取り込んだbtsnoop_hci.logを読み込むだけで、通信内容が解析されて表示されるようになっている。<br />
<br />
例として、BLE113を使ったiBeacon互換のアドバタイズパケットを解析したスクリーンショットは以下のようになる。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQEIesKAvRXiKkIXJOdokBV9sFR-HD2pzb9IO2D0GZz9bc3mCtF3pizya1Jqmmk5egr0Jg7tXNl9zOefLCD8jxGci1uvuI2LsYhKJVSM0a_ifY1YfAsO2_rFuD04vPLwkBSPLAxGapknkZ/s1600/wireshark_ss1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQEIesKAvRXiKkIXJOdokBV9sFR-HD2pzb9IO2D0GZz9bc3mCtF3pizya1Jqmmk5egr0Jg7tXNl9zOefLCD8jxGci1uvuI2LsYhKJVSM0a_ifY1YfAsO2_rFuD04vPLwkBSPLAxGapknkZ/s1600/wireshark_ss1.png" height="279" width="320" /></a></div>
<br />
解析結果をクリックして行を反転させると、その行に相当するバイナリ列も反転されるので、なんとなく雰囲気は読み取れると思う。<br />
<br />
ただ、<a href="https://www.bluetooth.org/ja-jp/specification/adopted-specifications" target="_blank">Bluetooth規格に記載がある部分</a>は解析されるのだが、当然ユーザ定義部分は解析されない。たとえば、iBeaconとして使うときのUUID/Major/Minor/TxPowerなどは解析できないので、Appleのドキュメントを読み解く必要がある。<br />
<br />
また、当然解析された部分についても、その意味や選択肢は<a href="https://www.bluetooth.org/ja-jp/specification/adopted-specifications" target="_blank">公式ドキュメント</a>を参照する必要があるだろう。<br />
<br />まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-68483696985178094012014-08-31T12:14:00.000+09:002014-08-31T12:36:35.650+09:00Parrot Rolling Spider(ドローン)を飛ばしてみた<span style="background-color: white; color: #37404e; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">先日amazonで1万ちょいで買ってしまったので、近くの公園で飛ばしてみた。</span><br />
<div>
<span style="color: #37404e; font-family: Helvetica, Arial, lucida grande, tahoma, verdana, arial, hiragino kaku gothic pro, meiryo, ms pgothic, sans-serif;"><span style="font-size: 14px; line-height: 20px;">(部屋でも飛ばしたけど、テレビ裏のだすてぃーなところに突っ込んじゃってわやわやになるので諦めた)</span></span><br />
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/4B-oUYs1NFM?feature=player_embedded' frameborder='0'></iframe></div>
<br style="background-color: white; color: #37404e; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;" />
<span style="background-color: white; color: #37404e; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">面白い。初代ドローンは見たこともないけど、基本的に同じ仕組みなのかな?</span><br />
<br style="background-color: white; color: #37404e; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;" />
<span style="background-color: white; color: #37404e; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">機体の下部に超音波センサーが付いていて、地面からの距離を元に高度を自動調整できる。</span><br />
<span style="background-color: white; color: #37404e; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">かつ、機体に入ってる加速度センサーにより、傾きも自動調整できる。</span><span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;"><br /><br />なので、環境条件がよければ(無風かつ舗装路)、自動ホバリングできるので、高度の上げ下げぐらいなら3Dオブジェクト感覚。<br />スマホを傾けるとドローンも傾いて移動始めるので、定点往復するだけでも楽しい。<br /><br />だがしかし!<br />まだファームやアプリの詰めが甘くて、よく暴走するw<br /><br />アプリ側で高度上限を設定できて、それ以上は上昇しないようにできるんだけど、一度暴走して上空10mぐらいまで飛んでったときは焦った。emergency cut offがあるので、プロペラ止めて落下させ、地面近くでまたプロペラ回すとか、高度な技術が要求されるw<br /><br />これ、ファームもなんか変だけど、たぶんアプリ側がショボいのだと思う。よく強制終了するし、ハングするし、(おそらくアプリがショボくて)Take offと同時に全力で前傾姿勢になって向かってくるし(しかも水平に修正できない)、コントローラーはジョイスティック型なんだけど、何を意味するのかいまいちわかんないし。</span><br />
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">emergency cut offはいつでも効くみたいなので、ドローンと通信回路はまぁ良いとして、アプリがアワアワしつつ変なデータ流してるのだと思う。</span><br />
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;"><br /></span>
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">しかも、Nexus5(4.4)とGalaxy S4(4.4)とiPhone5C(OS7)で、それぞれ別のファームダウンロードしようとするし、しかもGalaxy S4のファーム流した後にNexus5のファーム流したら、Galaxy S4と接続できなくなったしorz<br />接続にはBlueTooth LowEnagyを使ってるみたいだけど、おそらくBlueToothスタックの違いに悩んでいるのではないかと推測。iPhone5Cではまだ飛ばしてないけど、こっちのアプリとふ<br /><br />追記:</span><br />
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">iPhoneで飛ばしてみて分かった。しょぼいのはAndroid版アプリだわ。</span><br />
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">iPhone版だと完成度がぜんぜん違う。まともに飛ぶし、操作感あるし、体験自体が違う。<br />まぁこのタイミングのAndroid版だからねorz</span><br />
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;"><br /></span>
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">あれ?</span><br />
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">ってことは、飛行姿勢制御はドローン内部じゃなくて、スマホ側で行ってるんだね。</span><br />
<span class="text_exposed_show" style="background-color: white; color: #37404e; display: inline; font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, 'hiragino kaku gothic pro', meiryo, 'ms pgothic', sans-serif; font-size: 14px; line-height: 20px;">追記終わり<br /><br />あと、超音波センサーが舗装路では効くけど、草むらに入ると効かなくなるので、困ったドローンが暴走を始めるw<br /><br />広くて人の居ない駐車場を探さないとね。</span></div>
</div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-13268081353955883742014-07-06T18:58:00.001+09:002014-07-06T18:58:48.049+09:00CardBoardを自作してみたなんとなく忙しくなってきそうなので、遊び納め的にCardBoardを自作してみました。<br />
<br />
<a href="https://developers.google.com/cardboard/" target="_blank">CardBoard</a>とは、Google IO 2014のお土産として、会場で配られた3Dメガネ自作キットのことで、ダンボールとレンズと磁石で構成されています。このCardBoardに<a href="https://play.google.com/store/apps/details?id=com.google.samples.apps.cardboarddemo" target="_blank">デモ用アプリ</a>を起動したスマホを装着すると、左右の画像の視差により三次元的に見える仕組みになっています。<br />
<br />
まぁ、巷でFakeRiftと言われているもののひとつです。<br />
KinnekoさんがABCなどのイベントで<a href="https://note.mu/kinneko/n/n412001c74785" target="_blank">展示していたやつ</a>を、Googleも作ったということですね。<br />
<br />
で、CardBoardですが、<a href="https://developers.google.com/cardboard/" target="_blank">公式ページ</a>から<a href="https://gweb-cardboard.appspot.com/downloads/cardboard_design_v1.0.zip" rel="nofollow" target="_blank">CardBoard用の型紙</a>もダウンロードできるので、Google IOには参加してない方でも試してみることができるようです。<br />
<br />
<br />
…ってのを今朝知ったので、ちょうど今日は暇してるし、作ってみよ〜ということになりました。<br />
<br />
会場で配布していたものは、パッケージを開けるとレンズや磁石などがセットされた状態で配布されているようで、上記サイトでは型紙の画像の他、レンズや磁石なども購入できるようなのですが、近くの100均にあるもので代用可能のようなので、適当に買ってきて試してみました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmlbca31_S-z8nDjO2dMqDY0H5x2LxfvsaD7-hsffkuoa5AYBDIf8XSIkXfrsjELyyGInc3lUuYjnTaOiFZEf4klLXyemqaNC4tdsbTG5CBc7hnpclQgkVysaRdzL1J0jLqmqIM_4njTt_/s1600/my_cardboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmlbca31_S-z8nDjO2dMqDY0H5x2LxfvsaD7-hsffkuoa5AYBDIf8XSIkXfrsjELyyGInc3lUuYjnTaOiFZEf4klLXyemqaNC4tdsbTG5CBc7hnpclQgkVysaRdzL1J0jLqmqIM_4njTt_/s1600/my_cardboard.jpg" height="240" width="320" /></a></div>
<br />
最低限必要な物は、上記型紙画像を印刷した紙と、ダンボールと、レンズ(上記ミニルーペからはレンズ2枚取れます)と、磁石1組です。100均で400円で揃いました。<br />
<br />
レンズは焦点距離40mmのものが必要らしいのですが、上記ミニルーペのレンズですと、人間側の気合があれば3次元的に見えることが確認できました。もちろん焦点距離なんて確認してません(汗)<br />
このミニルーペのレンズには方向があるようなので、縁のカットの方向を合わせるのがコツです。合わせないと画像がブレたまま重なりません。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr7eaz9WCgvqIbsUsYR1OiJGdQvlgufp6CRYdhicNlTwWPIxnUTD-K_34AFb43NTrnu4NfwXV1zbtokmBCdi_BvmbcyIevsXFVWYP4W-f6LGx1dBSJoT3vVU-7aCGN5idWiEQAIotvjOHX/s1600/renz_fix.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr7eaz9WCgvqIbsUsYR1OiJGdQvlgufp6CRYdhicNlTwWPIxnUTD-K_34AFb43NTrnu4NfwXV1zbtokmBCdi_BvmbcyIevsXFVWYP4W-f6LGx1dBSJoT3vVU-7aCGN5idWiEQAIotvjOHX/s1600/renz_fix.jpg" height="240" width="320" /></a></div>
<br />
<br />
また、Googleが配布した時のレンズと、今回ミニルーペから取り出したレンズは、直径が違うので、ダンボールを型紙通りにくり抜いたのではうまくハマりません。<br />
中央下部が型紙どおりにくり抜いてレンズを合わせたものですが、穴が小さすぎるようです。上部のようにレンズがすっぽり入るよう、現物合わせでくり抜く必要があります。<br />
<br />
CardBoardの操作は、スマホ本体の加速度センサーと、磁石を使って操作します。<br />
CardBoardにスマホを入れてしまうと、直接タップできないので、CardBoardに付いている磁石をスライドさせることで、スマホ本体の磁場センサーを使ってタップをエミュレーションするようになっているようです。<br />
(オレのスマホに磁場センサーなんて付いてたっけ? と思いましたが、Nexus5とGalaxy S4で動作確認できました。付いてたんだ…)<br />
<br />
Googleが配布していた時の磁石は、結構大きかったようですが、要は磁場の変化を読み取れる程度の磁石であればなんでも大丈夫のようです。<br />
自分の場合は、100均にいわゆる強力磁石(ネオジム磁石など)の大きい物がなかったので、小さいネオジム磁石の受け側と、同じく小さいネオジム磁石に取っ手が付いているものを買ってきました。<br />
ちょっと磁力が足りないようで、型紙通りよりはスマホ側にずらして操作する必要がありますが、一応動くには動きました。<br />
<br />
<br />
肝心の3D具合ですが、オモチャにしては良好です。<br />
さすがにRiftと比べると解像度が低いし、センサー精度はRiftほど良くないし、計算速度はPCに勝てるわけないのでカクカクするし、レンズの焦点が想定と違うものなので、どうしてもなんちゃって感は否めません。<br />
(自分はRiftは持ってませんが、試したことはあります)<br />
<br />
しかし、一応首を振った方に画面が追従して360度見えるし、浮き出て見えます。<br />
ちゃんと3Dしてます!!<br />
この程度のものでもアイデア次第で色々使えそうかなぁと思いました。<br />
<br />
…が、Riftほどの衝撃は受けなかったので、初めて試す方は、先にRiftを試してみてVRの可能性を感じたほうが良いと思われます。<br />
<br />
Rift用に出ている表示用ソフトをAndroidに移植できそうです。実際にデモアプリで使われている3DムービーはRiftでも見たことがあります。<br />
Unityちゃんと勉強しようかなぁ。<br />
<br />
<br />
ダンボールとレンズと磁石さえ揃えば、製作時間そのものは2時間程度(90%はダンボールの切り出し時間)です。<br />
難易度は、小学生の夏休みの自由研究程度です。<br />
材料も400円で数個制作できるぐらい揃います。<br />
とってもオススメです。<br />
<br />まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-58915790722939136102014-02-23T17:49:00.000+09:002014-02-23T17:49:44.601+09:00iBeaconを使った室内向け測位システム作ったよ個人的に色々ありましたが、なんとか生きております。。。<br />
<br />
現在お仕事が無いので色々研究開発を進めてまして、個人的に興味があるiBeacon周りのプロトタイプを作ってみました。<br />
<br />
使い方やできること、測位精度などは動画を見てもらうのが早いです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/XXfSwaQQML8?feature=player_embedded' frameborder='0'></iframe></div>
<span style="text-align: start;"><br /></span>
<span style="text-align: start;">全部入りで作ったので、簡単に内容だけ見たい方はこちら↓</span><br />
<span style="text-align: start;">アプリはほぼ同じでiBeaconを3mスパンぐらいで配置しています。</span><br />
<span style="text-align: start;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/R7zvUdOnkhg?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
まだちょっと動画は準備出来ていないのですが、ヒートマップ連動版も準備中です。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY4ZSVkk-gN_5we8-xzsnwrSZu-MN6VBDU-7-M5mIDj6O7MeDFV7oTrjQRME6kpLq9s6meYJWym4BARdZ8EOx68N2X7tnLL1EgLRdoorNy8Ka9iRitsvidxBxvndcmttLIVlC4LTFRndVf/s1600/%E3%83%92%E3%83%BC%E3%83%88%E3%83%9E%E3%83%83%E3%83%95%E3%82%9A%E7%94%BB%E5%83%8F.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY4ZSVkk-gN_5we8-xzsnwrSZu-MN6VBDU-7-M5mIDj6O7MeDFV7oTrjQRME6kpLq9s6meYJWym4BARdZ8EOx68N2X7tnLL1EgLRdoorNy8Ka9iRitsvidxBxvndcmttLIVlC4LTFRndVf/s1600/%E3%83%92%E3%83%BC%E3%83%88%E3%83%9E%E3%83%83%E3%83%95%E3%82%9A%E7%94%BB%E5%83%8F.png" height="294" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
こんな感じで。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
今は送信側と受信側を入れ替えて、iBeaconを持って室内を歩くと、Raspberry Piなどの名刺サイズPCが読み取るようなシステムを作ってます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
これ、何に使えるのか考えてるんだけど、</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>iOSのiBeaconを使った近接検知(店に来た、特定の棚に近づいた)より、もうちょっと踏み込んだ来店イベントやクーポンとして</li>
<li>工場などでの工程ごとの作業時間管理</li>
<li>来店客の動線を把握することで、商品のディスプレイ方法の最適化、興味のある商品ニーズの発掘、興味から購入に至るプロセス(いわゆる買い方)の研究など</li>
</ul>
<div>
みたいな感じかなぁ。</div>
<div>
ただし、現状ではBLE対応スマホ(iPhone 5S/5C/4S/Android 4.3以降など)、またはiBeaconなどのBLEペリフェラルを持ってないと使えないのが問題かなぁ。</div>
<div>
博物館など、入り口でiBeacon渡せるような感じなら問題ないんだけど。</div>
<div>
<br /></div>
<div>
事業化したいので、興味ある方は右のプロフィールから連絡ください。</div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com1tag:blogger.com,1999:blog-1387599009808822892.post-13056338624039638802013-11-14T18:08:00.001+09:002013-11-15T01:22:35.552+09:00iBeaconを使った屋内測位の可能性を検討してみた先日札幌の無料セミナーでBluetooth Low Energy(BLE)を扱うものがありまして、いっぱい面白いことを教えてもらったので、ごにょごにょ遊んでます。<br />
自分の興味範囲に<a href="http://greety.sakura.ne.jp/redo/2013/10/ibeacon.html">iBeacon</a>があるのですが、セミナーで仕組みを色々教えてもらったので、PICマイコンを使ってiBeaconを作れないかなぁと思って調査中。<br />
<h2>
iBeaconに興味津々</h2>
えっと、iBeaconの定義を実はよくわかってないのですが(汗)、下回りはBLEを使っていて、どんな情報をどのぐらいの頻度でどのぐらいの電波強度で送るか、というあたりはBLEの話しらしい。んでiPhoneなどでその情報を受け取ったあと何をするかは、アプリの話しらしい。iBeaconつーのはBLEの一部機能をこう使って、アプリでこういう機能を作るとこんな事ができますよー、という規格の話なのかな?と思ってる。(今のところあまりここには興味が無いのですまん)<br />
実際、BLE周りがわかると、iPhoneの代わりにLinuxでもiPhoneがやろうとしていることと同等の機能を実現できそう。つーかiBeaconがすごいのって、iOSに標準で乗っててOSレベルでiBeacon端末とおしゃべりができる環境が用意された(搭載率100%かつアプリアクティブ率100%)ことなんだと思う。垂直統合の強さだよね。<br />
ちなみにAndroid 4.3以降だとBLE関係(ただしセントラルのみ。BLE端末を読み取る側)のAPIが整備されたので、iBeaconとiPhoneでしたいことと同レベルのアプリは(技術的には)実現可能。ただしAndroidの場合OS標準のアプリや機能は今のところ無いのと、Androidの場合はBLEのスタック(いわゆるドライバレベル)の実装が一本化されてなくて、Android 4.3 + BLE搭載端末が増えても混乱が増すだけなんじゃないか?というのが多方の予想みたい。このへんスッキリすれば世の中変わるのにねぇ。<br />
<h2>
O2Oとしてのユーザトラッキング</h2>
で、O2O的にオイシイのは、物を買わなくても(物を買うとPOSから情報を取れる)、誰が何に興味がある(のでどの棚の近くに来たか)がわかることではないかな?とおもった。<br />
実際iBeaconとiPhoneの組み合わせでクーポンを出すところまでは今でも実現できているけど、実際にBLEの恩恵を受けて電池消費が少ないのはiBeacon側であって、iPhoneはこの機能のためにBluetooth受信機をずっと起動しなければならず、1日でバッテリーの50%を消費するらしい(出典忘れた)ので、実際にはOffってる人が多いはず(いや、今iPhone持ってないので詳しいことわかんないんだけど)<br />
<br />
でも、iPhoneなどのスマホをBLE端末(ペリフェラル)として扱って、棚やフロア毎に誰が近寄ってきたかを記録するマイコンぽいのを設置(してクラウドで集計)しておけば、iPhone側の電池消費は無視できて、お店としてもユーザトラッキングできちゃうので、これこそが本命なのかな?と今思った。<br />
<br />
となると、AndroidのBLEペリフェラル対応ができたら世の中変わるかもね?<br />
(まぁ実際にはそんな危ないこと許してくれない団体ができたり、デフォルトでOffってたりしてうまくいかないんだろうけど)<br />
<h2>
iBeacon互換端末を作っちゃおう</h2>
なんか<a href="http://developer.radiusnetworks.com/2013/10/09/how-to-make-an-ibeacon-out-of-a-raspberry-pi.html">Raspberry Piを使ってiBeacon互換機は作れるよう</a>なので、同じ仕組を使ってちっちゃいLinuxボード(最近だと<a href="http://beagleboard.org/products/beaglebone%20black">Beaglebone black</a>とかね)でiBeaconは作れるみたい。まずはこっちをやってみて、パケットの内容を理解したらそれをPICで実現するためのファームを書くような感じなかぁ。(でもiBeacon対応のマイコン自体は<a href="http://www.aplix.co.jp/?p=7542">こんなの</a>が出てくると個人では太刀打ち出来なくて、このビーコンに対応したアプリを作るとかSIする感じになるのかなぁ)<br />
<h2>
WiFiによる屋内測位はiBeaconで置き換えられるか?</h2>
んで、BLEのセミナーではLinuxマシン(仮想マシン)にBluetooth 4.0対応のUSBドングルをつけて、<a href="http://www.tij.co.jp/ww/wireless_connectivity/sensortag/index.shtml?INTC=SensorTag&HQS=sensortag-bthp-jp">SensorTag</a>に<a href="http://www.bluez.org/">BlueZ</a>のコマンドラインプログラムや、PythonやCやJavaScriptからアクセスしてみようって内容だったんだけど、この中のJavaScriptを使った<a href="https://github.com/sandeepmistry/noble" target="_blank">noble</a>というパッケージがモダンな感じで使いやすそうだった。<br />
<br />
BLEではその仕組み上、近くにあるBLE端末(ペリフェラルというらしい)のIDと信号強度をスキャンできるんだけど、nobleを使うと結構簡単に電波強度を扱えそうだったので、距離や障害物などによってどれくらい電波が減衰するのか調査するプログラムを<a href="https://github.com/maimuzo/BleLocator">作ってみた</a>。<br />
<br />
iBeaconのハードウェア部分はBLEを使っているので、これがわかるとiBeaconを使った屋内測位(WiFi使った測位はよくやってるよね)が使い物になるのか、どのくらいの間隔で設置するのがベストなのかわかると思うんだよね。<br />
<h2>
テスト環境と構造</h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXKyQ5nwU9oFBEyBwhTzSlfjiVGHkFFLd4mCxs2-Kh762Rh0tG2SZPIwhCkR9F3_wfSKnc5jHzRlClk9H5o2gPuA5r42j0gJcKb6TAnsSuaE3knCxVpman5X1h6Iq2dB60jMKsNEGlBzDM/s1600/strength_test.jpg" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXKyQ5nwU9oFBEyBwhTzSlfjiVGHkFFLd4mCxs2-Kh762Rh0tG2SZPIwhCkR9F3_wfSKnc5jHzRlClk9H5o2gPuA5r42j0gJcKb6TAnsSuaE3knCxVpman5X1h6Iq2dB60jMKsNEGlBzDM/s320/strength_test.jpg" /></a><br />
<br />
こんな感じで、MacOSXにUbuntu 13.10を入れて(BlueZを使いたかったので)、BLE USB Dongle経由でSensorTagをスキャンして(というかBLE的にはSensorTagのブロードキャストを受け取って?)、その時の受信電波強度(RSSI)を記録しておき、過去50回分の平均値と標準偏差を調べてみた。<br />
<h2>
テスト内容と結果</h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-aMEfxWToKme_B2Rjyr2SN7h56-yAerbFggoIBD_N7f-FL3xlkjmJP7mbGKay5ZNoNn7zRAqRX6-MdY5zVRNrYvie6pOBpDdLoB0VZnlZBomRr6XBfjrGT-ArbT32_Ajgmeif7gRmtdd2/s1600/ibeacon_strength_test.png" imageanchor="1"><img border="0" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-aMEfxWToKme_B2Rjyr2SN7h56-yAerbFggoIBD_N7f-FL3xlkjmJP7mbGKay5ZNoNn7zRAqRX6-MdY5zVRNrYvie6pOBpDdLoB0VZnlZBomRr6XBfjrGT-ArbT32_Ajgmeif7gRmtdd2/s640/ibeacon_strength_test.png" width="640" /></a><br />
<br />
ちょっと見えづらいかもしれないけど、やったことは以下の通り。<br />
<ul>
<li>個体差を調べるためにSensorTagを2台使って比較してみた(B列とD列)</li>
<li>SensorTagに付属のゴムケースを付けてみて、電波の減衰具合を見た(F列)</li>
<li>SensorTagのBLEチップ(らしきもの)を隠すように設置してみて、電波の減衰具合を見た(H列)</li>
<li>SensorTagとBLE Dongleの間に人体を置いて(具体的にはDongleのすぐそばでDongleを隠すように座って)、電波の減衰具合を見た(J列)</li>
</ul>
受信電波強度(RSSI)の単位はdBmらしいんだけど、1mWなんちゃら(よくわかってない)の時を0dBmとして、それより電波強度が弱いとマイナスの値になるらしい。今回はすべてマイナスだったので、0に近いほうが電波が強く、0から離れるほうが電波が弱いことになる。<br />
<br />
実験場所は自宅で、居間〜廊下までの長細い部屋。(雰囲気は上の写真で察するべし) 周りに電波を発するものはなし。(WiFiとか3G/LTEとかはある) 生活雑貨はあるけど長細い部屋だし、基本SensorTagとBLE Dongleの間には障害物はないので、電波的には好条件なんじゃなかろうか。<br />
<br />
過去50回分の平均値と標準偏差とした理由は、対象者(スマホを持っている人。位置を知りたい人)が長々と同じ場所にいるわけではないと思うので、このぐらいがいいところなのかなぁと思ったので。実際には、もうちょっとサンプル数を増やしたほうが結果が安定するんだけど、過去50回分でも平均値はプラマイ1ぐらいに収まる感じに見えた。ちなみに、同じBLE端末は毎秒1〜10回程度スキャンされ、その時のRSSIを記録して集計している。<br />
<br />
自分は電波関係に詳しくないし、電波暗室とかではないので、所詮適当だけど。<br />
<h2>
結果として言えそうなこと</h2>
まとめるとこう言えるかなと。<br />
<ul>
<li>複数のSensorTagを同時に取得(現実的にはとても短い間に次の機器に切り替わる)するのは問題ない</li>
<li>1秒間の平均スキャン回数(RSSI計測回数)は1〜10回程度と、けっこうばらける。距離によって変化するわけでもないし、原因がわからないけど、Rawデータを見る感じでは、だーっと流れてるなーと思ったら突然詰まって、数秒後にまただ~っと流れ始めるように見える。これはテスト環境(Bluetooth周りのスタックやnobleなどのライブラリ)の問題かもしれないけど。</li>
<li>SensorTagの個体差はあまりなさそう(よかった)</li>
<li>電波なので受信電波強度は常に変動するのだけれど、1m以上の場合は標準偏差はほぼおなじに見える(サンプル数が足りなくてバラけているけど)</li>
<li>SensorTag付属のゴムケースをつけたり、SensorTagの向きを変えたりした場合、多少電波が弱くなるものの、さほどではない。(ように見える)</li>
<li>Bluetoothの電波は、水や水分を多く含む人体に弱いと聞いていたけど、今回のように隣に人が居て邪魔している程度であれば、あまり電波は弱くならない。</li>
<li>距離は0m〜7mまで計測した(我が家はそんなに広くない)けど、屋内測位するなら実際は1mからになる(1m以内に接近することは少ない)と思われる。SensorTagを使うなら-80dBmぐらい? 一応BLE Dongle的には障害物がなければ25mぐらい届くらしいけど、ここから先は同じような勾配で減衰していくっぽい。(グラフを見る限り)</li>
<li>障害物や設置方向より、距離による減衰が強いように見える。</li>
<li>ただ、1m時と7m時の差は15dBm程度に見えるけど、標準偏差が5dBm弱ある時もあるので、1m単位の測位は難しいんじゃないかと思う。フロアやルーム単位が現実的なのかな。</li>
<li>BLE機器というかiBeaconは<a href="http://www.aplix.co.jp/?p=7542">安いようなので</a>、同じフロアに複数のiBeaconを撒いておけば、一番近いiBeaconを探すのは簡単にできそう。</li>
<li>逆に緯度経度的な2次元絶対座標を求めるのは、色々工夫しないといけないんじゃないかな。<a href="http://www.atmarkit.co.jp/ait/articles/1211/19/news012.html">これみたい</a>に建物の見取り図に設置箇所を落として管理すると、いい感じに行けそうな気もする。</li>
</ul>
つーわけで、技術的にはiBeaconで屋内測位(2次元座標ぽく)は、実現できそう。<br />
ただ、もうちょっとリニアに急勾配で電波が減衰してくれれば1m精度ぐらいで測位できそうだけど、現状だとあまり精度が出ないんじゃないかなぁ。iBeaconが安いなら、2m間隔ぐらいでマトリックス状に置くという絨毯作戦も使えるかも?と思った。<br />
「平面上の任意の既知の点に、円状に電波が減衰される端末が複数あり、それらを同時に計測しながら現在地を求める問題」に詳しい方がいらっしゃいましたら、いろいろ教えて下さい。まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-61983419822842191082013-09-30T18:03:00.000+09:002013-09-30T18:04:28.768+09:00MacでParseのCloud Codeへのデプロイコマンドparse deployでエラー発生<p>ちょっとハマったのでメモ。</p>
<p>Parseのサーバサイド実行環境である<a href="https://www.parse.com/docs/cloud_code_guide#started">Cloud Codeのチュートリアル</a>を試してみたんだけど、サイトの通り</p>
<p>> parse new MyCloudCode</p>
<p>した後に、Windows版のparseconsole.exeから</p>
<p>> parse deploy</p>
<p>するとちゃんと動くのに、Mac/Linux版(試したのはMac)のparse deployではエラーが発生して、pythonのバックトレースが出て止まった。</p>
<p>ググってみたら、</p>
<p>> curl -s https://www.parse.com/downloads/cloud_code/installer.sh | sudo /bin/bash</p>
<p>して新しいparseコマンドをインストールし直せばいい(古いとエラーが起きる)とあったけど、これでは解決しなかった。</p>
<p>もうちょっと調べてみると、pythonの特定バージョンでは動かないという報告を見つけたので、自分の環境を調べてみると、macportではpython25パッケージを使っていたみたい。</p>
<p>> port select --list python</p>
<p>してから、</p>
<p>> sudo port select --set python python27</p>
<p>としてインストール済みのpython27(具体的にはPython 2.7.3)に切り替えたら正常にparse deployできた。</p>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-70722563433802542082013-09-16T23:30:00.001+09:002013-09-16T23:30:21.636+09:00OSC2013北海道での講演資料<p>やっと今年の分だ(汗)</p>
<p>今年は、本当はスマートグラスの話をしようと思ってたんだけと、google glassは変えなかったのでvusixの<a href="http://www.vuzix.com/consumer/products_m100.html">M100</a>を狙ってシルバーライセンスを購入(評価版が早期にもらえる)したんだけど、当初の予定より送れているらしくて、実物がOSCに間に合わないという問題が発生!</p>
<p>急遽、BaaSネタをこしらえました。</p>
<p>Parseは完成度高いしドキュメントしっかりしてるのでオススメです。</p>
<p>でも、さくっとGCM飛ばしたい時以外は、あまり効果的な使い方が見つからないかも。(結局サーバ側のコードを書きたくなるけど、ParseのCloud Codeじゃ足りない気がする)</p>
<p>といいつつ、今年のGoogle I/Oで発表されたはずのMobile Backend Starterは無かったことになってる(サービスとして発表したのではなく、サンプルアプリとして公開するつもりだった?)ようで、これもそのまま使うには微妙。</p>
<p>でも、サーバ側コードいじるつもりなら、<a href="https://github.com/GoogleCloudPlatform/solutions-mobile-backend-starter-java">Mobile Backend StarterのコードをGithub</a>から落としてきて、これをそのまま使うのではなくてテンプレートとして使うなら、つまりMobile Backend Starterの元になっているGoogle Cloud Endpointsを使って拡張ありきでつかうなら、これが自分の使い方としては一番現実的なのかなぁと思った。AndroidもiOSもWeb(JavaScript)も使えるからね。</p>
<iframe src="http://www.slideshare.net/slideshow/embed_code/26233517" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/maimuzo/baa-s" title="Baa sでお気楽アプリ開発" target="_blank">Baa sでお気楽アプリ開発</a> </strong> from <strong><a href="http://www.slideshare.net/maimuzo" target="_blank">Yusuke Ohmichi</a></strong> </div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-60245168083102729962013-09-16T23:19:00.001+09:002013-09-16T23:19:56.205+09:00去年のAndroid勉強会でADKを扱った時の資料を公開する<p>去年のOSCの流れだと、去年のAndroid勉強会でADK扱った時の資料も会ったほうがいいかなーと思ったので上げておきます。</p>
<p>こっちはSlideShareにはアップしておいたんだけど、ブログに貼るの忘れてた…</p><iframe src="http://www.slideshare.net/slideshow/embed_code/13165955" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px"></iframe>
<div style="margin-bottom:5px">
<strong><a href="https://www.slideshare.net/maimuzo/adk-13165955" title="Adkを使って音声コマンドで操作する戦車を作ってみた" target="_blank">Adkを使って音声コマンドで操作する戦車を作ってみた</a></strong> from <strong><a href="http://www.slideshare.net/maimuzo" target="_blank">Yusuke Ohmichi</a></strong>
</div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-90079423654817783682013-09-16T23:17:00.001+09:002013-09-16T23:17:36.695+09:00今更2012年のOSCの講演資料を公開する<p>ある御方に「もう2年ぐらいブログの更新止まってるよ」と言われたので見なおしてみたのですが、去年のOSCの資料上がってないですね…</p>
<p>単純に忘れてました…</p>
<p>せめて発表した資料ぐらいSlideShare経由でアップしておいたほうがいいかなーと思い直したので、整理します。</p>
<p>講演内容は、Android端末を複数使って、脳波(B3Band使用)と手元のスマホで戦車のラジコンをコントロール(ADK使用)し、的を画像認識(OpenCV使用)してBB弾を発射し、それをシースルー型HMD(BT-100使用)で表示するというものです。</p>
<p>WiFi環境下でXMPPを使って双方向通信することで、拡張可能な形で作っています。</p><iframe src="http://www.slideshare.net/slideshow/embed_code/26233363" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px"></iframe>
<div style="margin-bottom:5px">
<strong><a href="https://www.slideshare.net/maimuzo/android-26233363" title="Androidでへっぽこ思考戦車を作ってみた" target="_blank">Androidでへっぽこ思考戦車を作ってみた</a></strong> from <strong><a href="http://www.slideshare.net/maimuzo" target="_blank">Yusuke Ohmichi</a></strong>
</div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-82037682226219039022011-05-08T13:16:00.001+09:002011-05-08T13:26:22.141+09:00Androidの熱いトコ<p>今は無き北海道スマートフォン勉強会向けに作った資料ですが、震災の影響で無期限延期になってしまったので、第8回 Android勉強会 in 札幌で使わせてもらいました。</p>
<p>タイトルとか色々直してないですけどね(汗)</p>
<p>内容は、AndroidってJavaとかC/C++とかJavaScriptの層があって、それぞれ興味を持っている対象が違うよねって話。</p>
<div style="width:425px" id="__ss_7880944">
<strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/maimuzo/android-7880944" title="Androidの熱いトコ">Androidの熱いトコ</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7880944" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px">
View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/maimuzo">Yusuke Ohmichi</a>
</div>
</div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-58092112536364522242011-04-23T00:58:00.000+09:002011-04-23T01:11:54.405+09:00そろそろAndroid本についてうんちく語っておこうか<p>勉強会向けに「<span style="font-family: 'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'MS Pゴシック', sans-serif; color: #222222; line-height: 20px;">そろそろAndroid本についてうんちく語っておこうか」という切り口で、自分が所有してる</span><span style="font-family: 'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'MS Pゴシック', sans-serif; color: #222222; line-height: 20px;">Android関係の</span><span style="font-family: 'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'MS Pゴシック', sans-serif; color: #222222; line-height: 20px;">本をまとめてみました。</span></p>
<p><span style="font-family: 'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'MS Pゴシック', sans-serif; color: #222222; line-height: 20px;">勉強会では1時間かけて辛口トークの予定ですが、こちらは一口コメント程度で。</span></p>
<p><font color="#222222" face="'PT Sans Caption', Helvetica, 'ヒラギノ角ゴ Pro W3', HiraKakuProN-W3, 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'MS Pゴシック', sans-serif"><span style="line-height: 20px;">ちなみに、以下の本の購入代金を合計すると、70760円也。これを高いと見るか、安い見るか。まぁ得た価値から鑑みると、本の代金はたいてい安いんですけどね。</span></font></p>
<h3>濃いAndroid本</h3>
<p>古い本だが、未だ超えられない本。特に概念について突っ込んでまとめてある。未だよく見る</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51IyqtaGu-L._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Google-Android%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%B1%9F%E5%B7%9D-%E5%B4%87/dp/4048679562%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4048679562">"Google Androidプログラミング入門" (江川 崇, 竹端 進, 山田 暁通, 麻野 耕一, 山岡 敏夫, 藤井 大助, 藤田 泰介, 佐野 徹郎)</a></p>
<p>さすがオライリー・クオリティー(でも自分が持ってるのは初版)</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/41mH5o0oUML._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AEAndroid-%E7%AC%AC3%E7%89%88-Ed-Burnette/dp/4873114853%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873114853">"初めてのAndroid 第3版" (Ed Burnette)</a></p>
<p>とにかくサポート範囲が広くて、てんこ盛りな本。この本でしか解説してない項目も結構ある。</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51VPkYotwML._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80-Android-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Programmer%E2%80%99s-SELECTION/dp/4798120324%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798120324">"入門 Android 2 プログラミング (Programmer’s SELECTION)" (Mark Murphy)</a></p>
<p>ちょっと古めだけどAndroidの主要な機能や使い方について解説がある本</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51nMhFpv3SL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8BAndroid%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF-%E9%96%8B%E7%99%BA%E3%81%A7%E5%9B%B0%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E8%A7%A3%E6%B1%BA%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81-%E3%83%95%E3%83%A9%E3%83%B3%E3%82%AF%E3%83%BB%E3%82%A2%E3%83%96%E3%83%AB%E3%82%BD%E3%83%B3/dp/4822284093%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4822284093">"コードからわかるAndroidプログラミングのしくみ 開発で困ったときの解決アプローチ" (フランク・アブルソン, チャーリー・コリンズ, ロビ・セン)</a></p>
<h3>一般的な初心者向けのAndroid本</h3>
<p>初心者向けに浅く広くを目指した本? 新しめで主要な機能は押さえてる感じ</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51z0XCdJ1mL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E5%88%9D%E6%AD%A9%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8BAndroid%E6%9C%80%E6%96%B0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%AE%89%E7%94%9F-%E7%9C%9F/dp/4844329405%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844329405">"初歩からわかるAndroid最新プログラミング" (安生 真, 柴田 文彦, 藤枝 崇史)</a></p>
<p>内容は悪くない。今でもたまに見る。ただほぼ同じ内容で2.1/3.0対応として出してたり、Androidっぽくない書き方をしてるのは微妙</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/41a7n80XoQL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Android-1-5%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB-%E5%B8%83%E7%95%99%E5%B7%9D-%E8%8B%B1%E4%B8%80/dp/488337663X%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D488337663X">"Android 1.5プログラミングバイブル" (布留川 英一)</a></p>
<h3>ゲームやUIにこだわる人向けのAndroid本</h3>
<p>Android開発の上流工程にフォーカスを当てた本。著者は実績ある方ですし、上を狙うなら考慮しておくべきことがぎっしり</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/41GqAg3FBwL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Android%E3%82%A2%E3%83%97%E3%83%AAUI%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%EF%BC%86%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2%E5%9B%BA%E3%82%81%E3%81%8B%E3%82%89%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%83%90%E3%83%83%E3%82%AF%E5%88%86%E6%9E%90%E3%81%BE%E3%81%A7-%E6%B8%A1%E5%98%89%E6%95%B7-%E5%AE%88/dp/4822284476%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4822284476">"AndroidアプリUIデザイン&プログラミング アイデア固めからユーザーフィードバック分析まで" (渡嘉敷 守)</a></p>
<p>SDKについてるサンプルゲームを改造して進化させようというコンセプトの本</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51v9yebiH7L._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Google-Android-%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%82%AC%E3%82%A4%E3%83%89-%E6%9F%B3%E4%BA%95-%E6%94%BF%E5%92%8C/dp/4798023000%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798023000">"Google Android アプリ開発ガイド" (柳井 政和)</a></p>
<p>JavaまたはCを使ったOpenGLベースのゲーム実践本</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/31aO9L19k%2BL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%ABAndroid-%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E3%82%A6%E3%83%A9%E3%82%B8%E3%83%BC%E3%83%9F%E3%83%AB%E3%83%BB%E3%82%B7%E3%83%AB%E3%83%90/dp/4822284301%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4822284301">"プロフェッショナルAndroid ゲームプログラミング" (ウラジーミル・シルバ)</a></p>
<h3>持っている者は救われる(ことがある)レシピ系Android本</h3>
<p>珍しい和製オライリー本。ひと通り読んでおくと安心。別名ブリリアント本</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/41cvA0iZJVL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Android-Hacks-%E2%80%95%E3%83%97%E3%83%AD%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E3%83%84%E3%83%BC%E3%83%AB-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%83%96%E3%83%AA%E3%83%AA%E3%82%A2%E3%83%B3%E3%83%88%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9/dp/487311456X%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D487311456X">"Android Hacks ―プロが教えるテクニック & ツール" (株式会社ブリリアントサービス)</a></p>
<p>レシピの範囲が広くて結構使える。今でもよく見ます</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51%2B1QOU9SwL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/AndroidSDK%E9%96%8B%E7%99%BA%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94%E2%80%95104%E5%80%8B%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94%E3%81%A7%E5%AD%A6%E3%81%B6Android%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%AE%E6%A5%B5%E6%84%8F-%E5%A1%9A%E7%94%B0-%E7%BF%94%E4%B9%9F/dp/4798027049%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798027049">"AndroidSDK開発のレシピ―104個のレシピで学ぶAndroidアプリ開発の極意" (塚田 翔也)</a></p>
<p>我らが女子部のアイドルが書き上げた結構マニアックなレシピ本。別名やんざむ本。おそらくフレームワークのソースを読んで調べたんだろうな</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51pqjnuz6CL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Android-Layout-Cookbook-%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E4%BE%A1%E5%80%A4%E3%82%92%E9%AB%98%E3%82%81%E3%82%8B%E9%96%8B%E7%99%BA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E3%81%82%E3%82%93%E3%81%96%E3%81%84/dp/4844329871%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844329871">"Android Layout Cookbook アプリの価値を高める開発テクニック" (あんざい ゆき)</a></p>
<h3>もはや役に立たないと宣言されることに意味があるAndroid本</h3>
<p>特に特徴もなく、1.5時代の本なので既に古い</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/5134ugqD5VL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80Google-Android%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E4%BC%8A%E5%8E%9F-%E9%A0%8C%E4%BA%8C/dp/4844327712%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844327712">"入門Google Androidプログラミング" (伊原 頌二, 藤枝 崇史, 柴田 文彦)</a></p>
<p>青本の前身。今こちらを買う理由はない。</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51WBaYlNTCL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Google-Android%E5%AE%8C%E5%85%A8%E8%A7%A3%E8%AA%AC-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%A0%E3%83%83%E3%82%AF-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E6%9B%B8%E7%B1%8D%E7%B7%A8%E9%9B%86%E9%83%A8/dp/4756151302%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4756151302">"Google Android完全解説 (アスキームック)" (アスキー)</a></p>
<p>木南さんはいい人なんだけど、もう内容が古い。いわゆる木南本</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51f957atkAL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Google-Android%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E7%94%BB%E9%9D%A2%E4%BD%9C%E6%88%90%E3%81%8B%E3%82%89%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E5%88%B6%E5%BE%A1%E3%81%BE%E3%81%A7%E2%80%95%E2%80%95%E5%9F%BA%E6%9C%AC%E6%A9%9F%E8%83%BD%E3%81%AE%E5%85%A8%E5%AE%B9-%E6%9C%A8%E5%8D%97-%E8%8B%B1%E5%A4%AB/dp/4822283909%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4822283909">"Google Androidアプリケーション開発入門 画面作成からデバイス制御まで――基本機能の全容" (木南 英夫)</a></p>
<p>HT-03Aが発売されたタイミングで出た、初の翻訳本</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51FNsJkhD2L._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AEGoogle-Android%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AD%A6%E3%81%B6%E5%BF%85%E9%A0%88%E4%BD%9C%E6%B3%95%E3%81%A8%E5%9F%BA%E6%9C%AC%E6%89%8B%E9%A0%86-%E3%82%B8%E3%82%A7%E3%83%AD%E3%83%BC%E3%83%A0%E3%83%BB%E3%83%87%E3%82%A3%E3%83%9E%E3%82%B8%E3%82%AA/dp/4822283712%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4822283712">"初めてのGoogle Androidプログラミング サンプルで学ぶ必須作法と基本手順" (ジェローム・ディマジオ)</a></p>
<p>SDKに付いてくるサンプルゲームの解説+α</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51TAbXVdwZL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AEAndroid%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-I%E3%83%BB-BOOKS-%E8%8B%A5%E6%9E%97-%E7%99%BB/dp/4777514358%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4777514358">"はじめてのAndroidプログラミング (I・O BOOKS)" (若林 登)</a></p>
<p>国内で一番最初に出た本?</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/61VCXKdY27L._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Google-Android%E5%85%A5%E9%96%80-%7E%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E9%96%8B%E7%99%BA%E3%81%AE%E6%96%B0%E6%8A%80%E8%A1%93-%E5%B6%8B-%E6%98%AF%E4%B8%80/dp/4774134627%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774134627">"Google Android入門 ~携帯電話開発の新技術" (嶋 是一)</a></p>
<h3>ネイティブ狙いではないAndroid本</h3>
<p>AndroidでのFlashを扱った唯一の本</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/61qDKFF2y9L._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Flash%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B-Android%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%EF%BC%BBFlash-Professional-CS5-5%E5%AF%BE%E5%BF%9C-%E5%8F%A4%E5%A0%85/dp/4774145785%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774145785">"Flashではじめる Androidアプリ開発入門 [Flash Professional CS5.5対応" (古堅 真彦 池田 泰延)</a></p>
<p>HTMLとJavaでもここまでできる</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51KyD4VEAcL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Android%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%E3%82%AC%E3%82%A4%E3%83%89-%E2%80%95HTML%EF%BC%8BCSS%EF%BC%8BJavaScript%E3%81%AB%E3%82%88%E3%82%8B%E9%96%8B%E7%99%BA%E6%89%8B%E6%B3%95-Jonathan-Stark/dp/4873114861%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873114861">"Androidアプリケーション開発ガイド ―HTML+CSS+JavaScriptによる開発手法" (Jonathan Stark)</a></p>
<p>タブレットなどでの業務用端末を想定?</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/41jKZwlNHOL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E6%B4%BB%E7%94%A8%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEAndroid%E6%A5%AD%E5%8B%99%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E5%87%BA%E6%9D%91-%E6%88%90%E5%92%8C/dp/4822234495%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4822234495">"クラウド活用のためのAndroid業務アプリ開発入門" (出村 成和)</a></p>
<h3>組み込み向けAndroid本</h3>
<p>唯一にして必見(組み込みやるなら)</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51Z9dBDFGIL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6-%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BFAndroid-%E5%9D%82%E6%9C%AC-%E4%BF%8A%E4%B9%8B/dp/4863540760%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4863540760">"基礎から学ぶ 組み込みAndroid" (坂本 俊之, 出村 成和, 渡邊 昌之)</a></p>
<h3>AndroidするためのJavaのお勉強本</h3>
<p>いわゆるJavaっぽい書き方をマスターする</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/51E1m-weAXL._SL160_.jpg" /><br />
<a href="http://www.amazon.co.jp/Effective-Java-%E7%AC%AC2%E7%89%88-Joshua-Bloch/dp/489471499X%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D489471499X">"Effective Java 第2版 (The Java Series)" (Joshua Bloch)</a></p>
<p>マルチスレッドに自信を持つために</p>
<p style="text-align: center;"><img src="http://ecx.images-amazon.com/images/I/511lSU4bcXL._SL160_.jpg" /></p>
<p style="text-align: center;"><a href="http://www.amazon.co.jp/Java%E4%B8%A6%E8%A1%8C%E5%87%A6%E7%90%86%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E2%80%95%E3%81%9D%E3%81%AE%E3%80%8C%E5%9F%BA%E7%9B%A4%E3%80%8D%E3%81%A8%E3%80%8C%E6%9C%80%E6%96%B0API%E3%80%8D%E3%82%92%E7%A9%B6%E3%82%81%E3%82%8B%E2%80%95-Brian-Goetz/dp/4797337206%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4797337206">"Java並行処理プログラミング ―その「基盤」と「最新API」を究める―" (Brian Goetz, Joshua Bloch, Doug Lea)</a></p>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-68705449283379613972010-11-21T10:40:00.001+09:002010-11-21T10:40:36.542+09:00ニュースから読み解くAndroidの過去・現在・未来<p>第7回Android勉強会での発表資料として、以下のような資料を作ってみました。<br /></p>
<p>といっても、あまり時間をかけれなかったので,リンク集のような感じになっています。</p>
<div style="width:425px" id="__ss_5845745">
<strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/maimuzo/android-5845745" title="ニュースから読み解くAndroidの過去・現在・未来">ニュースから読み解くAndroidの過去・現在・未来</a></strong><object id="__sse5845745" width="425" height="355">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=android-101120123354-phpapp02&stripped_title=android-5845745&userName=maimuzo" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<embed name="__sse5845745" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=android-101120123354-phpapp02&stripped_title=android-5845745&userName=maimuzo" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" />
</object>
<div style="padding:5px 0 12px">
View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/maimuzo">Yusuke Ohmichi</a>.
</div>
</div>
<p>去年のXperiaタッチ&トライイベント参加者が20人強だったのに比べ、今年のIS01タッチ&トライイベントでは50人の申し込みがあるなど,やはりAndroidは盛り上がってきてるなぁという印象です。</p>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-12877196892469014252010-09-22T09:25:00.001+09:002010-09-22T09:25:27.146+09:00Android用のバーコードスキャナにBitmapから解析する機能をつけた<p>Androidにはバーコードスキャナってゆーアプリがあります。</p>
<p>オープンソースなんですがGooglerが作っているようで、Android本体の標準アプリになってもおかしいくないような品質のアプリなんですが,こいつはカメラでバーコードを写して解析するような動作しかサポートしておらず,静止画として既にバーコードなどがファイルとして手元にある場合(ネットからダウンロードしたなど)の時には使えるものではありませんでした。</p>
<h2 class="ptitle">やりましょう!</h2>
<p>で、先日ついったーで「IntentにBitmap込めて送ったら、結果が帰ってくるようなヤツ欲しいなー」とつぶやいてる人がいたので、作ってみました。</p>
<p>と言っても、一晩で作ったものなので,ちゃんと動いているか怪しいですが。いや、実際一部動いてないですが(汗)</p>
<p>欲しい人もたくさん居るっぽいので、とりあえず出来たもののAndroidプロジェクトをそのまま配布します。ライセンスは元のApache licenseを踏襲ということで。</p>
<p><a href="https://docs.google.com/leaf?id=0B_tm-Q3HH6-sYWMxMjkzOTEtZmRhZC00MWMxLWJjN2ItMmZkMjU2NmU2MzQ1&hl=ja">Bitmapから解析する機能を付けたバーコードスキャナのプロジェクト</a></p>
<p><a href="https://docs.google.com/leaf?id=0B_tm-Q3HH6-sNGE3OGU4YTUtNTE3Mi00YTAzLTg3MDctMmRmZGE2NzEwYWVi&hl=ja">Bitmapから解析する機能を付けたバーコードスキャナ本体(デバッグキー版)</a></p>
<p>で、本来はAndroidマーケット上で流れているアプリに取り込まれてくれたほうが楽だと思うので,Google Code上のプロジェクトにパッチを提供しました。テスト用のActivityも付けたので,使い方知りたい方はこちらも御覧ください。</p>
<p><a href="http://code.google.com/p/zxing/issues/detail?id=558&colspec=ID%20Type%20Status%20Priority%20Owner%20Summary">送ったパッチのissueページ</a></p>
<p>このページの☆を増やしてもらえると、本体に取り込まれるのも早くなるかも!?</p>
<p>たぶんどっかバグってると思うのですが、あまりマジメに直す気はないので、おかしいところを見つけた場合は教えてください。GitHubにでもブランチ作ります。</p>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com1tag:blogger.com,1999:blog-1387599009808822892.post-39107051408764788942010-09-19T11:12:00.002+09:002010-09-19T11:55:57.230+09:00スマートフォンの超概略無責任見積りの算出方法を考えてみた<p>この資料は第二回札幌IT飲み会で発表した資料です。<br /></p>
<h2 class="ptitle">問題点</h2>
<p>たぶん、スマートフォン向けのアプリ(iPhone/Android/WindowsPhone問わず)をクライアントに提案したり、もっと進んで外注しようとしたことって、無いもしくは少ないと思うんですが,なんとなーくスマートフォンにはどんな機能があるのかは知っていても,どれくらい(時間と価格)で作れるものなのかが、いまいち感覚的に解らないのが原因なのかなーと、常々思っていました。</p>
<p>一番手っ取り早いのは、対応可能な企業から見積りを取ることなのですが、まだ企画段階なのに見積りを取ることに気が引けたり、どんなアプリにするかまだまとまってなかったりしていて、ウヤムヤになってしまうことが多いんじゃないでしょうか。</p>
<h2 class="ptitle">やりましょう!</h2>
<p>そこで作ってみたのが、超概略無責任見積りです。</p>
<p>まーもちろん正確な見積りとは程遠いですが,プログラムのことは全然解らなくても,なーんとなくの超概算ぐらいはつかめるんじゃないでしょうか。</p>
<p>とはいいつつ、この見積りへ入力する条件として、画面数やボタンの数などを把握する必要があるので,紙に画面を書けるぐらいの知識(Webシステム見合いでOK)は必要となるので,実際にはWeb屋さんが使うための手法となります。</p>
<p>手法としては,</p>
<ul>
<li>積み上げ</li>
<li>Webシステムの見積からのコンバート</li>
</ul>
<p>の2つを考えてみました。<br /></p>
<p>詳しくはこちら。</p>
<div style="width:425px" id="__ss_5229139">
<strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/maimuzo/ss-5229139" title="スマートフォンの超概略無責任見積りの算出方法を考えてみた">スマートフォンの超概略無責任見積りの算出方法を考えてみた</a></strong><object id="__sse5229139" width="425" height="355">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-100918083811-phpapp01&stripped_title=ss-5229139&userName=maimuzo" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<embed name="__sse5229139" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-100918083811-phpapp01&stripped_title=ss-5229139&userName=maimuzo" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" ></embed>
</object>
</div>
<p>ここで使っているシートは<a href="https://docs.google.com/uc?id=0B_tm-Q3HH6-sOGE1NTI2NGItNWY3My00NWZmLWIxYzAtMjhlMTBmOWEzODBi&export=download&hl=ja">超概略無責任見積り計算シート</a>にアップロードしてありますので,ご自由にお使いください。OpenOfficeで作ってますがodsなので何でも開けるはずです。ただし、見積り精度的に困ったことが起きても、知らんぷりしますが。。。詳しくはスライド確認のこと</p>
<h2 class="ptitle">おしえてエライ人!</h2>
<p>で、こんなの作っちゃったら、詳しい人から「全然ちげーよバーカバーカ」って言われるのは目に見えていますw。まぁ当然全然違うと思ってるのですが,逆にスマートフォンプログラマの目線で、受注金額と単価から逆算して、単位日数の精度を向上させることができると思うのです。</p>
<p>上記計算シートの2ページ目に、(至極簡単ですが)プログラマ向けに逆算用のシートを用意したので,自社案件に置き換えて単位日数を逆算してみてください。</p>
<p>もし可能なら、精度向上に向けたサンプルとして逆算した単位日数を教えてもらえると嬉しいです。一応収集用としてフォームを用意してあります。</p>
<p><a href="https://spreadsheets.google.com/viewform?formkey=dGRjaFlPNzYxdFptbnlkUDk5UnFEZHc6MQ">単位日数サンプル入力フォーム</a></p>
<p>もしサンプルがある程度集まりましたら、改訂版を公開しようと思っています。</p>まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-75593945112186864202010-08-07T01:48:00.001+09:002010-08-07T01:48:36.787+09:00Google App Engine ja Night Sapporo (gjns)で発表しました<p>最近このブログは発表資料置き場になってますけど、まぁいっか。</p>
<p>今日はGoogle App Engine ja NightというGAE好きな人の集まりに参加してきました。東京では盛り上がってるみたいだけど,地方では大阪に続き札幌で2箇所目なんだって。札幌も盛り上がればいいねぇ。</p>
<p>最近AndroidばかりでGAEに触れてないのだけど,勢いで過去の発表資料+ちょびっとググって資料を作って発表してきました。</p>
<p>折角なのでここに貼っておきます。</p>
<p>ただ、参加者の多くはJava使いの方らしく、RubyやPHPをやっている人はほぼ居なかったので、ネタとしては外していたなぁと反省…</p>
<div style="width:425px" id="__ss_4916991">
<strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/maimuzo/javagae" title="JavaじゃないあたりのGAE事情">JavaじゃないあたりのGAE事情</a></strong><object id="__sse4916991" width="425" height="355">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lt-100806113548-phpapp02&stripped_title=javagae" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<embed name="__sse4916991" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lt-100806113548-phpapp02&stripped_title=javagae" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" />
</object>
<div style="padding:5px 0 12px">
View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/maimuzo">Yusuke Ohmichi</a>.
</div>
</div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com1tag:blogger.com,1999:blog-1387599009808822892.post-25303351699819394002010-06-29T11:32:00.001+09:002010-06-29T11:32:27.611+09:00意外に知られていないANDROIDに関する7つの常識<p>先日<a href="http://www.it-nomikai.jp/sapporo">札幌IT飲み会</a>、そしてその翌日に<a href="http://www.ospn.jp/osc2010-do/">オープンソースカンファレンス2010北海道(OSC2010Do)</a>に参加してきました。</p>
<p>IT飲み会ではプレゼンタイムというのがあって、本当は2回目から参加資格があるような感じらしいのですが、初参加の当日いきなり「作ってきましたー」と手を上げて話してきました。</p>
<p>んで、翌日は毎年参加しているOSCがあったんですが、日本Androidの会ブースでほぼ同様のものを展示していました。</p>
<p>一部からこの資料公開してよーという声があったので、このブログに貼っておきます。</p>
<p>内容は、 非プログラマ向けにAndroidの現状というか空気感を感じてもらえるかなーと思って作ったものです。最近Androidってどう?って思ってる人は、気軽に呼んでみてください。内容もさらっとしてますし。</p>
<div style="width:425px" id="__ss_4638548">
<strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/maimuzo/android7" title="意外に知られていないANDROIDに関する7つの常識">意外に知られていないANDROIDに関する7つの常識</a></strong><object id="__sse4638548" width="425" height="355">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-100628211917-phpapp02&stripped_title=android7" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<embed name="__sse4638548" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-100628211917-phpapp02&stripped_title=android7" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" />
</object>
<div style="padding:5px 0 12px">
View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/maimuzo">Yusuke Ohmichi</a>.
</div>
</div>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-49695291306590028232010-03-26T12:51:00.001+09:002010-03-26T13:01:52.629+09:00AndroidとGAEの同期に関する講演資料を公開します<p>先日第4回日本Androidの会北海道支部勉強会で講演したんですが、その時のプレゼン資料を公開します。</p>
<div style="width:425px" id="__ss_3559442">
<strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/maimuzo/android-3559442" title="Androidとクラウドでデータを同期させるライブラリを作ってみた">Androidとクラウドでデータを同期させるライブラリを作ってみた</a></strong><object width="425" height="355">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=android-100325222405-phpapp01&stripped_title=android-3559442" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=android-100325222405-phpapp01&stripped_title=android-3559442" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" />
</object>
<div style="padding:5px 0 12px">
View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/maimuzo">Maimuzo</a>.
</div>
</div>
<p>内容は、データってクラウドに「も」持たせた方が何かと便利だよねーって話と、じゃーライブラリ作って定型化したらみんな使いやすいかもねーって話と、具体的な使い方の話です。</p>
<p>次のような使い方を前提としています。</p>
<ul>
<li>ユーザはAndroid端末1台と、GAE上のサービスを同期できる。(複数台と同期できる方が楽だけど、同期方法が複雑になるので断念)</li>
<li>アクセス元のAndroid端末は、電話番号やシリアルを使って自動認識させる。(これはポン付けで動く)</li>
<li>Android内のSQLiteに保存されたデータを、そのままの形でGAE上のDataStoreにも入れておき、必要であればリカバリもできる。(データ構造によりカスタマイズが必要)<br /></li>
<li>基本的にHTTPリクエスト(実際にはhttps)を使ってデータを送り、そのレスポンスに対してコールバックを使って制御する。</li>
<li>RESTっぽい使い方で、CRUDあたりまでは簡単に使えそう。</li>
<li>詳しい使い方はサンプルアプリのソースを読むべし。たった300行強(SyncTestActivity)だし。</li>
</ul>
<p>ライブラリとサンプルアプリはオープンソースとして公開しています。</p>
<p><a href="http://github.com/maimuzo/synctester">SyncTester</a></p>
まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0tag:blogger.com,1999:blog-1387599009808822892.post-53088952531624606282010-02-14T03:44:00.002+09:002010-03-26T12:54:07.594+09:00LDD'10 WinterのLTに飛び込んできた<p>前日に「まだ枠が余っているから話してみたら?」と言われたので、LT開始3時間前から資料を作り、開始直前に会場入りして、LT終わったらすぐ帰ってきた(娘の迎えがあった)。</p>
<p>LT自体は途中で時間切れだったので残念だったけど、せっかくなので資料晒します。</p>
<div style="width:425px;text-align:left" id="__ss_3170284">
<a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/maimuzo/android-3170284" title="Androidのブラウザでスクレイピング">Androidのブラウザでスクレイピング</a><object style="margin:0px" width="425" height="355">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scrapingonandroidbrowser-100213122723-phpapp01&stripped_title=android-3170284" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scrapingonandroidbrowser-100213122723-phpapp01&stripped_title=android-3170284" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" ></embed>
</object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">
View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/maimuzo">Maimuzo</a>.
</div>
</div>
<p>「Ajaxなサイトでもスクレイピングできるのがイイ!」で締めたかったんだけど、そこまで伝えられなかったかも。</p>まいむぞうhttp://www.blogger.com/profile/05144095921302391462noreply@blogger.com0