2017年2月13日月曜日

Web Bluetooth APIをつかうにあたって気になったこと

Chrome最新版でWeb Bluetooth APIが使えるようになり、実際に動かしてみました。コードを書いたり関連したドキュメントを読むにあたって、気になった箇所をまとめておきます。

なぜWeb Bluetooth APIを作ったのか

Until now, the ability to interact with bluetooth devices has been possible only for native apps. The Web Bluetooth API aims to change this and brings it to web browsers as well.
Interact with Bluetooth devices on the Web By François Beaufort

BLEに限らず、端末の各種ハードウェアを動かすにはネイティブアプリからでないと無理だった。Webアプリでもネイティブアプリがやっていることを実現できるようにしようとするのがこのAPIの目的です。WebGLやWeb Audioの流れと、これからUSBシリアル通信を実装しようとしている未来を考えれば、まあ実装するよねという感じがします。ブラウザがOSになろうとしていた時期の計画と野望を、着々と進めているんだなという印象です。

なぜ動作に制限が多いのか

コードを動作させるにあたって、(いま私が認識しているだけで)下記の制限があります。

  • HTTPでは動作しない(localhostを除く)。HTTPSやfile://では動作する。
  • クリック等のユーザーからのアクションがないと開始できない。onloadなどで自動的に開始するのは不可。
  • 一部接続しないサービスが定義されている

HTTPでは動作しない

localhostを除き、HTTP接続ではnavigator.bluetooth.requestDevice()を実行してもerrorとなります。HTTPでも許可されるのはlocalhostのみで、プライベートIPアドレスでもHTTPならerrorです。

これは、Web Bluetoothに限った話ではありません。ブラウザの強力な機能を使う際には、少なくともそのサーバの出処がはっきりしているものだけに制限しておきましょうというもので、"Secure Origins"と呼ばれています。

ユーザーからのアクションがないと開始できない

確実にユーザーの意思によって動作させる必要があります。ページ読み込みと同時にバックグラウンドで勝手に動かすのは不可です。たとえば、もしユーザーがBLEで座標を飛ばせるGPS受信機(こういうものはLocation and Navigation Serviceを使って飛ばしていると考えられます)を使っていたら、バックグラウンドでユーザーがどこにいるのかが結構な精度で取得されることも考えられます。

一部接続しないサービスが定義されている

キーボードやDFU等の特に扱いが敏感なサービスについては、そもそもAPIからブロックされています。ブロックリストはこちら。ちょっとした理由も含めて記載されています。

どのような場面で使うのがよいのか

スマホアプリの代用とした使い方がいいのかなと思います。ちょっとした機能としてのみ使うときに、わざわざ専用アプリをストアからインストールしてもらう必要がなくなります。特定の施設内に対応したビーコンを使うためとか、Amazon Dash Buttonのようなデバイスの接続設定を書き込むためとか、そのくらいの用途のためにわざわざアプリをインストールするとなると、面倒くさいからいいわとなるのを防げそうとは考えられます。

一方で、この「専用アプリをストアからインストールしない」が、そのまま脆弱性につながるように思います。どのサービス・キャラクタリスティックに接続しているかは、Webページが何もしなければ特に明示されません。ユーザーにきちんと明示しておくようと記載されています

参考文献

2017年1月20日金曜日

Intel Edisonのカーネルを自前でビルドして入れ替える方法

IntelのEdisonでfbtftを実行する方法が公開されていたので試してみようとしたら、カーネルビルドにすごい手間取ったので詰まった箇所をまとめておきます。

Intel配布の最新版は初回ビルドが通らない

これを書いているときの最新版はiot-devkit-yp-poky-edison-20160606.zipですが、bitbake edison-imageのコマンドでビルドを始めても、OpenJDKまで来るとビルドが止まります。フォーラムでキレている人自分でJavaを筆頭に最低限まで削ったソースを配布していますが、これは本当に最低限なのでNode.jsやconfigure_edison等は含まれません。とりあえずJavaだけなくなれば初回のビルドは通るので、ソースコード内の設定ファイルからOpenJDKとicedtea関係の箇所をどんどん削る必要がありました。どこをどう削ったかは忘れた。

それに加えて、iotkit-comm-jsとiotkit-comm-c-devも削る必要があります。これはIntelのIoT Analytics dashboardの運営が終了となったため、それにともなって対応するライブラリ群がIntelのGiuHubから削除されたことが原因になっています。修正箇所はフォーラムの記載を参照してください。

カーネルモジュールをビルドする

基本的にIntelが公開しているページの内容どおりです。が、上記最新版では.configの位置が build_edison/tmp/work/edison-poky-linux/linux-externalsrc/1.0-r2/linux-externalsrc-1.0/.config に、置き換えるdefconfigの位置が poky/linux-kernel/arch/x86/configs/i386_edison_defconfig にそれぞれ変わっています。

動きました

Intel Edison with TFT Display

2015年12月27日日曜日

J-LINK EDUが安くて便利

ARMマイコンをいじるのにちゃんとしたエミュレータがあるといいなと思っていましたが、どれもかなり高く二の足を踏んでいたところ、J-LINKシリーズの廉価版でJ-LINK EDUというものがあるのを知りました。教育用としか読めないのにふつうに買えるので、ひとつ買ってみました。

教育以外の人が買ってもいいらしい

教育・学習が主で、Freescaleのサイトには趣味やNGOでもどうぞといった記述もあったと記憶しています。もともとの目的から、開発業務での使用は認められていないということなので、個人的に使うぶんにはいいらしい。

1万円以下で買える

DigiKeyAdafruitにも取り扱いがあり、だいたい$70以下です。日本円だとMouserが安かったので、Mouserで買いました。1台で送料無料枠に入るので助かります。

確認するのに英語版やUSDも見ましたが、通貨レートを見てもUSDのほうがなお安いですね。結局クレジットカード払いだからそっちにすればよかった…。

J-LINK BASEと同等品

なので、思いのほか機能を積んでいてくれて助かります。20ピンのうちひとつに、ターゲットに供給する5Vを出力する機能がついています。オンオフはコマンドラインからですが、別途電源を用意する必要もなくありがたい。レギュレータで適宜下げた電圧に信号線を合わせてくれるので、定格を超えてしまう心配もなし。

マイコンの評価ボードに付属のデバッガは、そのボードに積んでいるもの以外には対応しなかったりすることがあるので、ちゃんとしたものがあるといいなと思っていたところでした。コマンドラインではありますが、Macでもちゃんと動いてくれるのもありがたいところ。まだ複雑なことに手をつけていませんが、これはいいですね。

2014年11月9日日曜日

Ringの回路雑感

Kickstarterで出資した変身できないほうの魔法の指輪が届きました。ソフトや使用感の話はいろいろ出ているので、製品そのものの雑感を書きます。

電源端子について

指輪の内側に充電用端子が出ています。満充電後にテスターをあてると、ほぼほぼリチウムイオン電池と同じだけの電圧が出ます。ダイオードでも入れて表に出ないようにしとけよ…なんて思いましたが、充電スタンド側を分解するとTIのBQ24090を積んでいました。充電ICは指輪の中に入っていると予想していたのですが。BQ24090のデータシートの参考回路を見るとICから直接電池につないでいるので、ここを指輪と充電器とで分離すると、指輪の端子で遮断するのはいろいろ調整とか大変なのかなと思いました。

工事設計認証について

外箱の底面に技適マークと番号がついていましたが、これはNGです。電波を出すものに記載するので、Ringの場合は指輪に記載します。電波を出すものに書いてある前提で、購入の目安とするために外箱等にも記載するのはOKです。高くなるかもしれないけど、指輪の内側に彫ってあったりしたらちょっとかっこいいのでこれからに期待したいところ。

11/15 訂正 この工事設計認証の話はBluetooth部分を自前で設計した場合の話で書きました。内部に認証取得済みモジュールを内蔵している場合は、Logbarのやり方が正しくなります。申し訳。

RingのiPhoneアプリにHardware Versionの項目があるので、これからまだ改良が入るかもしれません。Kickstarterの1stロットだから、多少ひっかかる点もあるけれどまあよしと言ったところ。もの自体はちゃんと動くし動いたときは楽しいので、SDKも楽しみに待っています。

2014年6月22日日曜日

ArduinoからEthernetで直接fluentdにPOSTする

IMG_0993

ArduinoにEthernet Shieldを載せることで、Arduinoから直接各種サーバにデータを送ることができるようになります。ArduinoでA/D変換した電圧値をfluentdに送付することで、簡易ロガーとして活用することもできます。

fluentd側

Ethernet経由で受信するだけなので in_http が動くようにします。サンプルどおりで大丈夫です。

Arduino側

fluentd の in_http はPOSTで受け取るので、サイトのWebClientを参考にしてPOSTを送信するスケッチを作成します。

  • servername:fluentdサーバのドメイン名 or IPアドレス
  • serverPort:fluentdサーバのポート
  • pageName:fluentdに送信する際のタグ(スラッシュ含む)
  • params:fluentdに送信するJSON(json=で始まる)

コード中のこれらの変数を適宜書き換え、POSTメソッドの生データを組み立てて送信する形になります。

目的

回路の性能測定の際、電圧・電流を長時間モニタすることがあります。専用機器を使うものなのですが、機器自体が高価で、なかなか手が出ないものです。A/D変換し値を保存できればよいので、Arduino + fluentdの組み合わせで簡易ロガーとして使用します。fluentd側がが受信した時刻を記録できるので、ネットワークの遅延を気にしない程度の間隔ならば、複数のArduinoで計測記録の同期をとるのも容易です。

また、センサネットワークのセンサそのものに組み込むには高機能高コストですが、別途なんらかの無線とかで受信したセンサの値をネットワークに送信する母艦としても使えると思います。

2014年2月2日日曜日

定時退社を強く主張する腕時計を購入しました

IMG_0585

現在時刻のわかりにくい腕時計を壊してしまったので、腕時計を新調しました。

Happy Hour Timepiecesというメーカーの、The Ishという機種。文字盤は数字の5のみ。5の周辺以外はぼかしてあります。5時だけがすぐにわかる仕組みです。

栓抜きがついている

IMG_0587

留め具は栓抜きになっているので、5時になったら仕事を終えてビール瓶を開けることができます。サイトには開け方も載っているけれど、バンドにかかる力を考えると少し不安です。実際にやってみました。

IMG_0602

説明を見ずにやってしまいました。きちんとグリップするのですが、ふつうの栓抜きにあるテコの部分がないため開けにくいです。手首につけた状態なら、腕が多少のテコになってくれるのかもしれません。ウケはよかったです。

2014年1月17日金曜日

Negiccoを支える技術

これをみて"書かねば"と思い立ったので。NegiccoさんのライブステージでリアルタイムのWebアプリを使った演出がありました。

昨年9月の話

渋谷の2.5DNegiSUMMIT Vol.6を観にいったときのこと。ライブステージも終わったイベント終盤、観客がスマートフォンのブラウザを操作することによって、ステージ背面に設置されているスクリーンに動作が反映されるというもの。

現場のみなさんは入場時にURLの書かれた小さな紙を渡されており、あらかじめページを開いて待っててねとのお約束。仕掛け2のスマホシェイクのページに移動します。そのページにはNegiccoのロゴとネギイラストのみ。

スマートフォンを振ると、振ったぶんだけスクリーンにネギが出現するという演出。ネギは一定時間で消えるので、ちょいとした弾幕のような雰囲気に。2.5Dのライブストリーミングはアーカイブしないようなので、テキストでしか説明できないもどかしさ。

見える部分から仕組みを想像する

スマホシェイクのページはWebアプリなので、ここから裏側の仕組みを探っていきます。jQueryプラグインのgShakeを使って振動を検出し、Socket.IO経由でサーバにシェイクが起きたことを通知しています。サーバはSocket.IO→Node.jsのつかえるPaaSのひとつ、AppFogに設置。

スクリーンショット 2014-01-17 0.19.00

この先は予想になります。AppFogのサーバはリレーとして使って、スクリーンに映している端末へメッセージを送る。端末側(Macだった)でアニメーションの演出をするとなると、真っ先に出てくるのはQuartz Composer。githubにQuartz Composer用のWebSocketプラグインがあったので、これを使えばサーバからメッセージを受信できそうです。ここまでできれば、メッセージをトリガーにアニメーションを描画することであのステージの演出を再現できそうです。

楽曲派のやってることと似ている

ステージ演出の仕組みを読み解いてみると、楽曲派が曲や歌詞から元ネタを探っていくのに似て楽しいということに気付きました。背景を探って奥にあるものを見つけ出してはニヤニヤするだけなんですけど、これがなぜか楽しい。なじみのある技術が、見慣れた場所以外で活用されている様子に出会うとちょっとうれしいものですね。