2012年 03月 29日

FlashAir

asin:B007EMIEJQ:detail

FlashAir というのが最近出たらしく、おもしろそうなので買ってみた。機能的には、Wi-Fi の AP と HTTPD として動いて、SD カード内の画像をダウンロードできる、というもので、Eye-Fi の競合 (機能的には違うんだけど) 的製品になっている。

Eye-Fi は持っていないのに、いきなりこんな謎なものを買ったのは、HTTPD が動いてくれるというところにひっかかったからだ。カメラみたいなデバイスで HTTPD が動くのはなんとなくわくわくするのである。

FlashAir は、割と素直な感じで、SD カードの中身をそのまま HTTPD で配信する感じなので、組み込みのページ以外に、自分で HTML と JS と CSS を書けば独自ページを作成できる。また、組み込みで配信されるページ自体も、SD カード内のファイルをいじると変更できるようになっている。ハードコードされていたりしないのは非常に嬉しいと思う。

ということで、SDカード内の写真のうち、最新順に表示するページを作ってみた。ファイルシステムの関係上ファイル名に制限がある (拡張子が3文字までとか) とか、thumbnail.cgi の挙動がおかしいとかあるけど、こういうのは簡単につくれた。今後ファームウェアアップデートで HTTPD がもうちょい安定するといいなあと思う。

なんとなく、スマフォのカメラの変わりに使えたらいいな、と思っていたけれど、ネットワークの関係でそうもいかない。FlashAir には AP として接続するため、その間、3G 回線など、Wi-Fi と排他的になっているネットワークが使用できない。FlashAir はもちろんインターネットには接続されないので、FlashAir に接続している間、スマフォはインターネットから切断されてしまう。picplz とかそういうアプリは、送信できない場合にキューに貯めるから、AP からの接続をきったあとにアップロードが開始されるだろうけれど、インターネットと同時に接続できないのは結構ストレスがあるので、用途によっては全く使えない感じになりそう。

あと Yahoo! トピックスに載ってた情報によると、SDK も配布されるみたいな話があるので、それはそれで楽しみです。

追記

最近書いたなんとなくかっこいいかなと思うコード

JSDeferred のサンプルコードの殆どは、pre に書いてあるやつをそのままJSで実行する形になっている (二重に書いていない)

その中で console.log() とかを使っているけれど、デモなので console.log() をブラウザ側ではなく、ページ側に表示させたいと思い、それらの console.log をフックしている。この場合、評価したいコードは文字列として存在するので、Function オブジェクトを使って console のダミーを作って実行するようにした。

new Function('console', code)({ log : function () { ... } });

Function オブジェクトの引数の名前を console にして、実行するときに代替オブジェクトを渡すようにした。すなわちこの場合 console はローカル変数になっている。

こうすることで、元々の console.log には一切手を加えず、このコードを実行している間だけ、console オブジェクトをさしかえた。一時的に大本の console.log を差し替えるやりかたは、非同期なコードがまざると大変なので、いい思い付きをした、と自画自賛しました。

gerry++