2015年6月30日火曜日

[Node.js]ファイルDB「NeDB」を使ってみた

先日「Node学園 16時限目 ES2015発行記念」に参加させていただきました。
その発表の中でファイルDBである「NeDB」を知れたので試してみました。
基本的には以下のパワポの内容を実行しているだけです。

http://www.slideshare.net/isamusuzuki54/loop-backapiswift-46901252?next_slideshow=1


準備:
npm install nedb --save

※これだけ!


ソースコード:(今回は「nedb_test.js」というファイルで作成しています。)
var NeDB = require('nedb');
var db = {};
db.users = new NeDB({
  filename: 'usersfile'
});

db.users.loadDatabase();

// insert
db.users.insert({name: 'hoge'});
db.users.insert({name: 'fuga'});
db.users.insert({name: 'uga'});

db.users.insert([
  {name: 'foo'},
  {name: 'bar'}
  ], function(err, newDoc){
    console.log("[INSERT]");
    console.log(newDoc);
});

// find
db.users.find({name: 'fuga'},
  function(err, docs){
    console.log("[FIND]");
    console.log(docs);
});
db.users.find({name: /f*uga/},
  function(err, docs){
    console.log("[FIND F*]");
    console.log(docs);
});

// remove
db.users.remove(
  {name: 'fuga'},
  {multi: true},
  function (err, numRemoved){
    console.log("[REMOVE]");
    console.log(numRemoved);
});
db.users.remove(
  {name: 'uga'},
  {multi: true},
  function (err, numRemoved){
    console.log("[REMOVE]");
    console.log(numRemoved);
});


実行結果:
%]node nedb_test.js
[INSERT]
[ { name: 'foo', _id: 'ShGylbRFFiR4nZcR' },
  { name: 'bar', _id: '7Kkhma6FdLUzQI7o' } ]
[FIND]
[ { name: 'fuga', _id: '8AKesKQfsnvVOdob' } ]
[FIND F*]
[ { name: 'fuga', _id: '8AKesKQfsnvVOdob' },
  { name: 'uga', _id: 'vbDsvmXtaB5xHNYo' } ]
[REMOVE]
1
[REMOVE]
1

実行後のファイル(usersfile)の内容:
{"name":"hoge","_id":"WuA7LFB50CWMnSX2"}
{"name":"fuga","_id":"8AKesKQfsnvVOdob"}
{"name":"uga","_id":"vbDsvmXtaB5xHNYo"}
{"name":"foo","_id":"ShGylbRFFiR4nZcR"}
{"name":"bar","_id":"7Kkhma6FdLUzQI7o"}
{"$$deleted":true,"_id":"8AKesKQfsnvVOdob"}
{"$$deleted":true,"_id":"vbDsvmXtaB5xHNYo"}


いやぁこんな簡単にDBを利用できるようになるなんてすばらしいですね!
利用できるAPIはMongoDBに準拠しているらしいので、
しっかりとしたDBに移行する際にも楽に対応できるかもしれないのがまた素敵ですね。

インストールするとついてくる次のマニュアルを見れば使い方も大体把握できると思います!

マニュアル:
node_modules/nedb/README.md

DroidKaigiに参加してきました 後半

前半を書いたのがひと月前で、
DroidKaigi自体がもっと前で、
いまさら感が強いですが、
感想後半戦を始めます!

[ROOM:A]開発を効率的に進められるまでの道程
[ROOM:B]ゲームアプリケーションのアップデートサイクル
[ROOM:B]初学者にうれしいAndroid開発環境
[ROOM:B]Android学ぶ君へ。生き抜くためのナレッジ共有
ここから下
[ROOM:B]新言語KotlinでAndroidプログラミング
[ROOM:B]Bitmapは怖くない。
[ROOM:B]モバイルにおける電力最適化のための1プラクティス
[ROOM:B]デザイナーがXMLを書くことでできる改善しやすいアプリ開発
[ROOM:B]JellyBeanとKitKatで実現するマテリアルデザイン
[ROOM:B]僕らのデータ同期プラクティス
[ROOM:B]AndroidとSELinux

■[ROOM:B]新言語KotlinでAndroidプログラミング

KotlinかわいいよKotlin
JVM上で動作するプログラミング言語です。
開発はAndroidStudioの元のIntelliJ IDEAを開発している
「JetBrains」だそうです。

詳しくは次のURLをご参照ください!
https://sites.google.com/site/tarokotlin/home

Androidアプリの開発もすでにできるようになっているようで、
Kotlinを利用すればラムダ式などが使えるようになるそうです。
Javaのめんどくさい部分もKotlinを使えばかなり楽になりそうでよさげ。


■[ROOM:B]Bitmapは怖くない。

と言いつつもやっぱり怖いそうです(笑)

Bitmapを扱えるPicasso,Glide,Frescoの3種を紹介していただきました。
講師曰く、Bitmapを利用する際に多少面倒な指定が必要になるが、
基本的にはGlideがいい感じだそうです。
Picassoは利用したことはありますが、
Glideはないので、次に利用するシーンがあればGlideを試そうと思います。

「android:largeHeap="true"」は最終兵器


■[ROOM:B]モバイルにおける電力最適化のための1プラクティス

少しハードよりな話でした。
アプリの動作上で何を行っているときに
大量の電力が発生しているかを実験するための装置の説明でした。

この装置なんと自作!すごい!!
たしか計5000円くらい(もう数か月前なのでまったく覚えていない)だったと思います。

WebViewはかなりの電力食いなので気を付けよう。
2Dより3Dの方が電力食い。
Unityも電力食い。

はい。弊社の製品は全部該当ですね。。。
いつか利用電力の問題をクリアして皆様に提供できるようがんばります!


■[ROOM:B]デザイナーがXMLを書くことでできる改善しやすいアプリ開発

デザイナーさん話でした。
デザイナーさんとプログラマーでバトルしているところが多い中、
そこをなんとか上手にできましたよって話。

デザイナーでもAndroidのUI作成なら何とかできるので、
それ以外(開発環境の準備など)をしっかり面倒見てくださいとのこと。

プログラマーはとにかくよりよい製品を作るために、
デザイナーさんにコードを触ってもらう努力をしましょう!


■[ROOM:B]JellyBeanとKitKatで実現するマテリアルデザイン

ごめんなさい。。。体力切れで休んでいた模様。。。
AppCompatActivityを使っていこうとだけメモが書いてありました(笑


■[ROOM:B]僕らのデータ同期プラクティス

通信で過酷な状況での話をおっしゃってました。
広い畑の中心部だと通信が届かないそうです。
まずはそこに驚きましたね。

バックグラウンド通信で動機で一応可能だけれども、
とても大変かつバッテリー食いになってしまうので、
過酷な環境の場合はNG。

SyncAdapterというAndroid提供の機能を利用すれば解決できるかもとのこと。


■[ROOM:B]AndroidとSELinux

バージョンが上がるたびにセキュリティが厳しくなっていくため、
よくわからないエラーが発生している場合は、
SELinuxを疑ってみてくださいとのこと。

セキュリティの外し方は講演資料に記載されているので、
そこをご参照ください。

マニフェストで指定できない部分もあるのですね。。。



無料なのにとても意義のあるところに参加ができました!
DroidKaigiのスタッフ様、講演していただいた皆様には感謝しかありません。


2015年6月22日月曜日

HoloLensまとめ

Microsoftが開発したARヘッドマウントディスプレイ(HMD)「HoloLens」についてまとめました。


ARヘッドマウントディスプレイの特徴

ヘッドマウントディスプレイとは、頭にかぶり、眼前のディスプレイにCGによる表示映像をするデバイスですが、これはOculus RiftやsonyのProject MorpheusのようなVR用と異なり、現実世界も透けて見えます。

また、Oculus RiftとMorpheusはディスプレイ機能がメインで、PCやゲーム機につなげて処理する必要がありますが、HoloLensは,それ自体にWindows 10を搭載しており、PCに接続する必要はありません。

業界筋ではプロセッサして「Atom」SoC(System-on-a-Chip)の搭載が有力視されています。


距離センサーで空間にCGを貼り付ける

現実視界にCGをオーバーラップ表示できるシースルータイプのHMDとしては,すでにセイコーエプソンがAndroidベースのMOVERIOシリーズを出しています。

ただ、MOVERIOとHoloLensは周辺環境の認識という点において大きく異なります。HoloLensには,「Kinect」と同じ投射型深度センサーが使用されています。これは赤外光を面照射して,その反射光が返ってくるまでの時間をCMOSベースの距離イメージセンサからToF(Time of Flight)方式で測定するものです。照射範囲は120度。

ToFとは,照射された赤外光が反射されて照射側に戻ってくるまでの時間差から、シーンの深度分布を計測する技術です。これはMicrosoftが2009年に買収したイスラエルの3DV Systemsが持つ技術をベースとしています。Xbox One用KinectのToF測距精度は130億分の1秒だといわれ、HoloLensでもこれに準じた精度で深度値を取得しているものと思われます。

このため、「現実視界にCGが完全に張り付いている」という感覚を得られるのです。
mine craftのデモ


網膜投影型は焦点調整が不要だが、デメリットもある

Oculus RiftやMorpheusでは,直視型の液晶ディスプレイを眼前において見せているので、眼球を動かしても映像が見切れたり消失することはありません。一方で、HoloLensのような網膜投射型デバイスの場合、網膜に映像を直接投射する関係で、眼球が常に正面を向いていることが前提になっています。なので、眼球を動かすと途端に映像が消失したり,外周が消えてしまったりするとのことです。

そもそも、網膜投影型とはどのようなものなのでしょうか。
通常、物体を立体視する際、光は水晶体で収束し、網膜上で結像します。物体までの距離が変化すれば、水晶体の厚みを変え、光を屈折させます。それに対し、網膜投影型では、光を瞳孔の中心で収束させるため、水晶体の屈折率の影響はうけません。
つまり、現実の視界で遠くのものを見ても、近くのものを見ても、ディスプレイのCGがぼやけないのです。近視、乱視、老眼なども関係ありません。

また、ディスプレイには表示部が存在しないため、解像度・輝度・コントラスト・表示色とも従来のディスプレイを凌駕する性能が実現できます。



ジェスチャー操作、音声入力が可能

HoloLensのデモでは、空中をタップする、つまむ、引き延ばす、などのジェスチャーでCGを実際のモノのように操作できる様子が公開されています。
指の認識はHMDの前面に付いているセンサーで行っているようです。現状、可能な操作は限られており、あまり複雑な指の動きまでは対応していません。
また、音声の入力も可能で、かなりの精度で認識してくれるそうです。(英語)家の中で使うのであれば、音声入力はかなり便利になりそうですね。



画角が今後の課題

また、体験した方によると、映像画角はかなり狭いといいます。30°×17.5°というデータもあります。
少し頭の向きを変えるとCGが途切れてしまうため、仮想世界への没入感は少なくなってしまいます。
平面の2D映像を見たり、サインを表示する分にはいいのですが、3Dのゲームなどをやろうとすると、物足りない感があると思います。
おそらく、網膜投影の仕組み的に、この画角の問題はすぐに解決されるものではないと思われます。
弊社のHADOのような没入感のあるゲームではある程度の画角が必須なので、初期のHoloLensに対応させるのは難しいかもしれませんね。
今後に期待です。


その他のデモ動画

テクノスポーツ!超人スポーツ!

おはようございます。
meleapの福田です。

今月、『HADO』はNHKの報道番組で紹介された他、日テレ「シューイチ」の「まじ★すか」、テレビ東京の「WBS」にてとりあげて頂きました!

テレビは全てを伝えられないので、カットして繋ぎ合わされた結果、不思議なテンションになっていることもありますが、僕の周りでは大きな反響を頂き、ありがたい限りです。

本日は、弊社の「テクノスポーツ五輪」と同様のビジョンを掲げる、「超人スポーツ協会」についてご紹介しようと思います。

「超人スポーツ協会」という協会をご存知でしょうか?
最近メディアでもとりあげられ、注目を集めているので、耳にしたことがある方も多くいらっしゃると思います。


技術によって「人」は「超人」になれる

「超人スポーツ協会」それは、
「人間の能力を補綴・補強・拡張可能なAugmented Human技術に基づき,皆が個々人の身体的な能力の差など目立たなくなるくらい超人的な力を身につけることで,同じ超人 (Superhuman) 同士として一緒のフィールドで競い合う,人間と機械が融合した「人機一体」の新たなスポーツを創造」している協会なのです。


え?
個々人の身体的な能力差をなくすってどういうこと!?
それでどうやって競うの!?
スポーツの意味あるの!?
と、感じてらっしゃる方もいらっしゃると思います。

そうです。
超人スポーツ協会を立ち上げた方達は大のスポーツ嫌いなんです。
嫌い、というと語弊がありますね。恐らく、苦手意識が強く、嫌いになってしまった類いだと思います。

ですが、どうでしょう、スポーツが得意な人たちは、自身の体一つで対決するスポーツを従来通り、いや、それ以上に盛り上げていただき、自分自身の体力だけでは自信が持てない、という人たちが、こうしてまた「スポーツ」を楽しめるようになる、というのはとても素敵な話だと思います。

今後、ARやVR以外にも、ロボット技術、ドローン技術やIoT技術を組み合わせ、様々な競技が生まれてきます。攻殻機動隊の世界がすぐそこまできているのです。


東京オリンピックと同時開催で国際大会を!

僕自身も、『HADO』の紹介の際、いたるところで2020年の東京オリンピック・パラリンピックと同時開催で「テクノスポーツ五輪を開催する!」と言い続けてきましたが、なんと、超人スポーツ協会も「超人スポーツ競技の国際大会の開催」をビジョンに掲げ、活動をされています!!

忍者のように水面を駆け抜ける人や、空中飛行、怪力…そんな大会が開催されたら……と考えるだけでワクワクしますね!
ちなみに、僕たちmeleapも超人スポーツ協会に参加しています。

『HADO』も老若男女、全ての方たちに楽しんでもらえるようなスポーツを目指して日々、開発を進めていますので、今後ともどうぞ注目して頂けたらと思います!



余談ですが、「WBS」でHADOを体験してくださっていた方、どなたかわかりましたか??
名刺の受け渡しの際に映っている男性に注目です。

WBSオンデマンド
http://txbiz.tv-tokyo.co.jp

シューイチ「まじ★すか」
http://www.ntv.co.jp/shu-ichi/majisuka/2015/06/15344.html

超人スポーツ協会
http://superhuman-sports.org