2015年4月22日水曜日

Intellij IDEAでクリップボードを有効にする方法

Intellij IDEAは独自のCopy&Pasteの機能を実装しているようで、
デフォルトのままだとクリップボード(Clipboard)を利用できないようです。
※ほかのアプリでコピーした内容をペーストできない。

このような状態になってしまった方は次の内容を試してみてください。
私はこの方法で利用できるようになりました。

修正ファイル

Windows:

「<IntelliJ IDEA>/bin/idea.properties」次の内容を追加する。
※Macでも同様のファイルがあると思います。

idea.use.alt.clipboard.sync=true


Mac:

ide.mac.useNativeClipboard=True


2015年4月13日月曜日

Android StudioとUnityで一緒に開発する方法

今日はAndroid StudioとUnity両方で開発する方法を伝えます。

私の環境は次の内容です。
Unity 4.6.2f1
Android Studio 1.1.0

まずはUnityで次の作業を実施してください。

1. Build Settings (Ctrl + Shift + B)を開く
2. PlatformでAndroidを選んでSwitch Platformをクリック
3. Google Android Projectのチェックボックスにチェックを入れる
4. Exportをクリックしてフォルダを選択する。



上記を行うことで次の内容のフォルダが出力されます。

出力フォルダ
│  AndroidManifest.xml
│  project.properties

├─assets
│  └─bin
├─libs
│  │  QCARUnityPlayer.jar
│  │  unity-classes.jar
│  │  Vuforia.jar
│  │
│  └─armeabi-v7a
│        
├─res
│  ├─drawable
│  │      app_icon.png
│  │    
│  └─values
│          strings.xml
│        
└─src
    └─Javaパッケージ

※ 「libs/armeabi-v7a」は環境によって異なると思います。

ここからAndroid Studioに反映していきます。
Android Studioのプロジェクトが次のようになっていると思います。
存在しないフォルダがある場合は手動で作成してください。
※ assets,jniLibsあたりが無いかもしれません。

Android Studio
├─.gradle
├─.idea
├─app
│  ├─libs
│  └─src
│      ├─androidTest
│      └─main
│          ├─assets
│          ├─java
│          ├─jniLibs
│          └─res
├─build
└─gradle


1. Unity側の「assets」をAndroid Studioの「app/src/main/assets」にコピーする。
2. Unity側の「libs/*.jar」をAndroid Studioの「app/libs」にコピーする
3. Unity側の「libs/armeabi-v7a」をAndroid Studioの「app/src/main/jniLibs」にコピーする。
   ※「armeabi-v7a」以外にもフォルダがあった場合はそのフォルダもコピーしてください。
4. Unity側の「res」配下の内容をAndroid Studioの内容とマージする。
5. Unity側のAndroidManifest.xmlとAndroid Studioの内容とマージする。
6. Unity側の「Javaパッケージ」を「app/src/main/java」にコピーする。


あとは「UnityPlayerNativeActivity」を継承した独自のActivityを作成したり、
直接「UnityPlayerNativeActivity」を修正したりしてActivityを開発してください。
一度ここまで行ってしまえば、
Unity側を更新した際は、
「assets/bin」を置き換えるだけでUnity側の内容が更新されます。
※ 念のため、Android Studionの「assets/bin」を削除した後、コピーしてください。

それでは楽しいAndroid, Unityライフを

2015年4月8日水曜日

Android で Myo のデータを取得しよう

どうも、モーション認識部分を担当している太田です。m(_ _)m 

みなさん、Myo ご存知ですか?
知らない方のために、リンク貼っておきます。(for Developer)


・・・どうです?楽しそうでしょ?

 Developer 向けに様々な SDK が公開されています。
が、残念なことに一番面白そうな筋電位データ (EMG) が Android で見れない!

なので、Bluetooth 通信からゴリゴリと取得してみました。
参考にしたのは、制作元が公開している Bluetooth の仕様(C++ のヘッダファイル)と Android のサンプルページ。
https://github.com/thalmiclabs/myo-bluetooth https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

サンプルページの固有値に関して、Myo の仕様に合わせていけば万事 O.K. です。
ただし注意としては、characteristic から取得できるバイト値がリトルエンディアンであること。また、Myo が送信するデータの種類をユーザ側から設定しないといけないので、Myo のコマンドをデータ取得より先に設定してあげることが必要になります。
Myo の仕様を見るとデータ類は全て notification によって取得されるので、この辺りの実装も当然必要です。


まぁ、こんな感じに取得できます。カッコ内の値は秒間のデータ数です。


値を取得するのは出来たのですが、characteristic の notification の設定を有効にすると characteristic の read が使えません。その逆もまた然りです。(T^T)
今のところ、設定の早いもん勝ち状態です。

Android の仕様なのか掴みきれてませんが、同じようなことを言ってる人がチラホラ・・・。
http://stackoverflow.com/questions/17910322/android-ble-api-gatt-notification-not-received
http://stackoverflow.com/questions/22817005/why-does-setcharactersticnotification-not-actually-enable-notifications
そもそも、notification の設定をする descriptor を BluetoothGatt に書き込むのが解せません。。。

どなたか良いアイデアあれば教えて下さい。m(_ _)m

2015年4月3日金曜日

Node.js+Socket.ioを利用してサーバ<->サーバ間通信

クライアント<->サーバ間でリアルタイム通信をしたい場合にsocket.ioを利用すると思いますが、
今回はこれを利用してサーバ<->サーバ間通信を実現してみます。

※ socket.ioのバージョンは「1.3.5」を利用しています。


受信側:
server.js

var socketio = require("socket.io");
var io = socketio.listen(3000);
console.log("start socket.io server.");
io.sockets.on("connection", function (socket) {
console.log("user connect!")

socket.on("message", function (data) {
console.log(data);
});
});

受信側は特に特殊な実装はなし。
クラサバ通信の時と同じ実装で問題ありません。


では、次に送信側の実装内容です。

送信側:
client.js

var io = require('socket.io-client');
var socket = io('http://localhost:3000');
  socket.on('connect', function () {
    socket.emit("message", 'send message.');
});


socket.io-clientパッケージを利用すれば簡単に実装できてしまいました。


最後に起動方法を記載して終了とさせていただきます。

受信側:
]$ sudo npm install socket.io
]$ node server.js
start socket.io server.

送信側:
]$ sudo npm install socket.io-client
]$ node client.js

※ 受信側を実行した後、送信側を実行すると受信側に次のメッセージが表示されます。

user connect!
send message.




2015年3月28日土曜日

SXSWで見たウェアラブル、IoTの今後

SXSW(サウスバイサウスウエスト)とは、毎年3月にアメリカテキサス州オースティン市で行われる、音楽と映画、ITの祭典です。

もともと音楽のイベントとして始まったということもあり、この時期になるとオースティンは音楽に包まれ、夜になると路上はパーティ状態です。ちなみにtwitterが有名になったのもこのイベントです。毎年その時々の旬なプロダクトが世界中から集まってきます。そんな楽しいイベントに参加し、ITを中心にいろいろ見てきました。

今年のSXSWで注目されていたテーマは、IoT、ウェアラブル、デジタルヘルス、AI、ロボット、ビッグデータ、VRあたりです。これらのテーマを中心に数千のセッションが組まれ、街中の至る所で議論がされています。その中で私はVR/AR/ウェアラブル/IoTなどの展示、セッション中心に見てきました。

ちなみにVRとARの違いはこんな感じです。
VRはユーザーがゲームの世界、宇宙空間などの異世界に入ること、ARは現実世界にバーチャルの要素を取り込むということです。分かりやすく言うとこんな感じです。



VRの様々な可能性が追求されている
VRはoculus riftの登場、そしてfacebookによる買収により圧倒的な注目を集めています。もともとはFPSゲームに使うデバイスとして考えられていたデバイスですが、現在VRはゲームを超えて様々な用途で注目されています。
例えば、乗り物やインテリアのシミュレーション、教育、旅行、医療などです。
それだけヘッドマウントディスプレイ(HMD)の解像度や、ヘッドトラッキングの精度が良くなり、「本当にその世界に没入した感覚」が得られと考えているのです。
そのVRの可能性を感じ、多くのメーカーがVR用の端末を発表し始めており、その数は数えきれないほどになってきています。代表的なのはoculusとSonyのMorpheusですが、それ以外にも日本の「Fove」やオープンソースVRHMD「OSVR」などもあります。
今回SXSWではその中のいつくかを体験してきました。
Foveは視線でコントロールするVRHMDです。デバイスの内側に視線を認識するセンサーが組み込まれており、ゲームプレイ時に視線で照準を合わせることができます。ゲームの他にも、体に障害のある子どもがピアノを視線で弾けるようにするなどのプロジェクトも行われています。


こちらはOSVRのHMD

VRはこれからますます盛り上がりを見せていくと思います。
CG映像だけでなく、360°映像を撮影する環境も整ってきました。リコーのシータやGoproを使って撮影する会社も多いです。さらにfacebookが360°映像をアップロード可能にしたので、これから360°映像のコンテンツは増えてくるのではないでしょうか。



ARデバイスはステルスで開発中、アプリもまだ出てきていない
今回SXSWでは、ARの将来性を語るセッションはあったものの、ARの展示は全くありませんでした。Microsoftの「HoloLens」やベンチャーのmagic leapなどが注目されていますが、デバイスはまだ露出されていません。イメージムービーのみが出てきている段階です。
これはmagic leapのイメージムービー。

そしてこれがHoloLensのムービーです。

ARはまだ開発者向けとしても出ているものは非常に少なく、まだまだこれから立ち上がってくる市場だと思います。ちなみにガートナーが出しているハイプサイクルを見てもARはこれからの技術であることはわかります。

oculusのCEOであるPalmer Luckey氏はSXSWのセッションにて、「ARには興味があるがまだこれからの市場であり、今はARのキラーアプリはない。VRであればイケてる体験を作れる」と言ってました。
弊社meleapはこのARを全力で切り開いていこうとしています。非常にチャレンジングでワクワクするテーマです。0から1をつくる瞬間ですね。


混沌としているIoT
IoTというテーマも最近非常に注目されていますが、定義も曖昧でカオスな印象があります。
IoTが盛り上がっている背景にはスマホが普及し、通信環境が整い、センサーを安く作れるようになったという動きがあると思います。
SXSWの展示では「身の回りの様々なモノにセンサーを設置し、スマホで情報をみる」というものが数多くありました。例えば、ベッドにセンサーを付けて睡眠を分析する、歯ブラシにセンサーをつけてどのくらい磨いたか分析するなどです。こういうのを見ると何でもありだな!とびっくりします。
また、スマートウォッチもIoTに含まれると思いますが、Apple Watchが出るということもあり、今後の展開に注目が集まっています。最近ではpebbleがkickstarterで史上最高額を集めました。
スマートウォッチやスマートグラスのように常にディスプレイを身につけることで、そのとき必要な情報を素早く取得できるようになりますし、街中で起きた出来事がいち早くネットにアップされます。こうやって世界中を飛び交う情報の速度がどんどん加速していくでしょう。

2015年2月27日金曜日

MyoのAndroidサンプルを動かしてみる

15分もあればできると思います


①https://developer.thalmic.com/downloadsにアクセスしてAndroid SDK 0.10.0 (Dec 19, 2014)をダウンロード

②AndroidStudioを起動してFile→Import Projectをクリックしてsamplesを選択しOKを押す

③インストールしたいアプリを選択してRunボタンを押す

④インストールするスマホを選択してOKをおして少し待つとインストール完了

⑤Myoを腕につけてキャリブレーションを行う

⑥Hello Worldアプリを起動してScanボタンを押す
 

⑦接続できるMyoが表示される
  ※このときパソコンにドングルを接続したままだと一覧に表示されません

⑧戻るボタンを押してダブルタップすると認識が始まります





2015年2月26日木曜日

【KPI分析(第2回)】DAUを狂わすノイズ編

ソーシャルゲーム(に限らずアプリ全般)のKPI分析講座、第2回目は「DAUを狂わすノイズ編」と題してお送りします。
第1回目の用語解説編は下記をご覧ください。

【KPI分析(第1回)】用語解説編

さて、前回の用語解説の中で、DAU(daily active users)という1日にそのアプリを使用した人数という値があったかと思います。
DAUという値は、売上を算出するのにも使用しますし(売上=DAU×ARPPU)、ごく一般的で各社共通の指標なので、用いられることは多いです。また、偉い人とかがこの値で一喜一憂したりする極めて重要なKPIです。

ですが、DAUという値は、広告などのブースト施策などを行うと急激に増えるし、翌日には急激に減ってしまうなど、あまりにも変動が大きい値です。
純粋にゲームを楽しんでくれているユーザーが何人いるのか、ゲームバランスやバグなどで離脱してしまっているユーザーはいないか、などの分析をするにはノイズが多すぎて信頼性に欠けてしまいます。

そこで、DAUに代わるアプリの使われ具合がわかる別の指標が必要になってくるのです。

まずは、そもそもDAUに含まれるノイズって何?ってとこですが、下記のようなものが考えられるかと思います(ドリコムさんのslideshareを参考にさせていただいています)。

<ホワイトノイズ>
  • 遊んでないけどアップデートされてたから起動してみた
  • 通知のバッジを消したくて起動だけした
  • ログインボーナスや補填の課金アイテム目当てで起動してみた
  • 休日で暇すぎるから起動してみた
  • メンテナンスやサバ落ちなどで起動できなかった
<スパイクノイズ>
  • 広告出稿してインストール数急増
  • テレビCM開始してインストール急増
  • 他タイトルとのコラボキャンペーンでインストール急増

ホワイトノイズはユーザの気まぐれが起因します。このノイズによるDAUの増減にはまったくといっていいほど意味はありません。このようなノイズを取り除いたきれいなデータが必要です。
また、スパイクノイズは広告出稿などにより一時的にDAUが急増する事を意味します。それにより、ARPU(ユーザ一人あたりの平均課金額)は激減します(インストールしたばかりのユーザは基本的には課金しないため)。これでは、純粋にゲーム内の施策が成功しているのか判断がつきません。なので、このようなスパイクノイズも取り除く必要があります。

今回は簡単ですがここまで。
次回は実際に各社がどのような数値をアプリの使われ具合の指標にしているかを書いていきます。