ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

UnityでHTC Viveのスタンバイイベントを受け取る

こんにちは!VR事業部の長谷川(id:waffle_maker)です。今回はUnityでHTC Viveのスタンバイイベントを受け取る方法について紹介します。

はじめに

スタンバイモードとは?

ヘッドセットをテーブルに置くなどして一定時間が経過すると、バックライトやヘッドフォンを切って消費電力を抑える状態になります。

ヘッドセットを見ると、バックライトが消えていることが確認できます。

youtu.be

SteamVRステータスモニタ上では、以下の様にスタンバイモードへの移行を確認できます。

f:id:waffle_maker:20170503025239p:plain f:id:waffle_maker:20170503025227p:plain

今回はこのスタンバイモードの開始と終了イベントを受け取ってみまます。

バージョン情報など

各種バージョン情報は以下の通りです。

HTC Viveの購入はこちら

実際に試してみる

  1. 新規プロジェクトを作成し、SteamVR Pluginをインポートします。

  2. Main Cameraを削除し、[CameraRig]プレハブをシーンに配置します。

  3. StanbyModeDetectorゲームオブジェクトを作成し、下記スクリプトをアタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StanbyModeDetector : MonoBehaviour {

    // Use this for initialization
    void Start () {
        SteamVR_Events.System(Valve.VR.EVREventType.VREvent_EnterStandbyMode).Listen((Valve.VR.VREvent_t args) => {
            Debug.Log("スタンバイモード開始");
        });
        SteamVR_Events.System(Valve.VR.EVREventType.VREvent_LeaveStandbyMode).Listen((Valve.VR.VREvent_t args) => {
            Debug.Log("スタンバイモード終了");
        });
    }
    
    // Update is called once per frame
    void Update () {
        
    }
}

実行してヘッドセットを机に置いて10秒ほどでスタンバイモードに移行して開始ログが出力されました! その後、ヘッドセットを動かしたら終了ログが出力されました!

f:id:waffle_maker:20170503032614p:plain

トラブルシューティング

  • [CameraRig]を使用しない場合は、イベントを検出できないようです。

SteamVR Pluginがちょっと古い場合

下記バージョンではイベントの取得方法が異なりました。

取得方法は以下の様な感じです。

SteamVR_Utils.Event.Listen("EnterStandbyMode", (object[] args) => {
    Debug.Log("スタンバイモード開始");
});
SteamVR_Utils.Event.Listen("LeaveStandbyMode", (object[] args) => {
    Debug.Log("スタンバイモード終了");
});

まとめ

このようにスタンバイモードの検出ができると、色々と活用できそうです。

例えば・・・

  • 普段はPVを再生しておき、ヘッドセットを被ったらコンテンツを開始する。
  • ヘッドセットを被ったら愛犬が走り寄って来る。

また、EVREventType列挙型には他にも多数のイベントが定義されていますので、調べて見るのも良いと思います。

面白い活用方法を思いついた方は是非こっそり教えて下さい!

*1:SteamVR Pluginの旧バージョンを入手したい場合は、githubからどうぞ。

ファイル/シンボリックリンクのフルパスを表示する

ソリューション技術部 山口(@kinunori)です。

ファイルのフルパスを取得する際に皆さんどうしてますか?

色々やり方はあると思いますが、効率が良くないのは以下の方法かと思います。

  • pwdコマンドでカレントディレクトリを叩いた後、ファイル名をコピペする
  • find もしくは locateコマンドで取得する(locateはupdatedbが必要)

同僚から効率の良いやり方を聞かれたので、ここにも残しておきます。 対象は Linux(ディストリビューションは問わない) です。 OS Xでもreadlinkコマンドはありますが、-fオプションはありません。

readlinkコマンド

私が良く使うのはreadlinkコマンドです。 実ファイルもしくはハードリンクの場合はフルパスを、シンボリックリンクの場合はリンク元のフルパスを返してくれます。

ファイルのフルパスを取得する

readlink -f <フルパスを取得したいファイル名>

例:

$ pwd
/home/ec2-user
$ ls
amazon-ssm-agent.rpm  tmp
$ readlink -f amazon-ssm-agent.rpm
/home/ec2-user/amazon-ssm-agent.rpm
$ ln amazon-ssm-agent.rpm amazon-ssm-agent.rpm.lnk
$ ls -li
total 11492
 436736 -rw-rw-r-- 2 ec2-user ec2-user 5881471 Mar 29 03:33 amazon-ssm-agent.rpm
 436736 -rw-rw-r-- 2 ec2-user ec2-user 5881471 Mar 29 03:33 amazon-ssm-agent.rpm.lnk
1966084 drwxrwxr-x 2 ec2-user ec2-user    4096 Apr 28 09:59 tmp
$ readlink -f amazon-ssm-agent.rpm.lnk
/home/ec2-user/amazon-ssm-agent.rpm.lnk

注意点: ファイルが存在しない場合に実行すると、存在しないファイルのフルパスを返してしまうので注意が必要です

$ ls
amazon-ssm-agent.rpm  amazon-ssm-agent.rpm.lnk  tmp
$ readlink -f amazon-ssm-agent.rpm.test
/home/ec2-user/amazon-ssm-agent.rpm.test
$ ls
amazon-ssm-agent.rpm  amazon-ssm-agent.rpm.lnk  tmp

シンボリックリンクリンク元を取得する

フルパス取得の場合と同じです。

readlink -f <フルパスを取得したいファイル名>

例:

$ ln -s amazon-ssm-agent.rpm /home/ec2-user/amazon-ssm-agent.rpm.slink
$ ls
amazon-ssm-agent.rpm  amazon-ssm-agent.rpm.slink  tmp
$ readlink -f amazon-ssm-agent.rpm.slink
/home/ec2-user/amazon-ssm-agent.rpm

用途

私の場合は、シェルスクリプトでファイルのパスを取得し、変数に格納する際など使ってます。 手順書を作る時なども便利かも知れないですね。

知らなかった方は是非使ってみてください。

日本Splunkユーザ会 GOJAS(Japan Splunk User Group) Meetup 参加レポート

ソリューション技術部 マネージャー 山口(@kinunori)です。

プリンシパルエンジニア 兼 エンジニアリングマネージャとして、10名規模のエンジニアチームのマネジメントとWebインフラオペレーションをしてます。

弊社では、ユーザグループや勉強会など社外コミュニティへの参加・貢献を会社として推奨しており、運営メンバーや登壇者輩出や後援企業として社外コミュニティに寄与しています。

私もAPI Meetup日本Splunkユーザー会(GOJAS)の運営コアメンバーとして参加していたり、今年のJAWS Daysではスタッフとして事前準備から携わっています。

本エントリでは日本Splunkユーザー会ミートアップ(GOJAS Meetup)の参加レポートを書いていきます。(なぜコミュニティへ参加・貢献するのか、という点は長くなるので、また別のエントリで、、、)

日本Splunkユーザ会(GOJAS)とは

データアナリティクスツール Splunkのユーザコミュニティです。

貯めたデータから必要な情報を抽出し可視化するのは、ツールの使い方、標準偏差など統計に関する知識が必要となり、個人で調べて実現するのは難しい場合もあります。

そこで、便利により効率的にデータ解析を行う為、ユーザ同士による活用手法、ノウハウ共有することを目的として、完全ボランティアの有志メンバーで結成されました。

弊社では Splunkの導入・活用支援をサービスとして提供していますが、ユーザとして得た経験をもとに活用支援サービスを提供している部分もあり、登壇・運営を通してユーザコミュニティに貢献しています。

【GOJAS Meetup-02】SplunkマニアックスVol.1

今回は、既に利用しているユーザをターゲットにクリティカルな環境での活用事例セッションや、効率的なクエリを行う為のSplunk内部アーキテクチャ解説セッションが行われました。

私も司会として全体進行を担当させてもらいました!

イベントページはこちら https://gojas.doorkeeper.jp/events/56197

当日の様子(参加者のみなさん熱心メモを取りながらセッションを聞いてます) f:id:kinunori:20170322194124j:plain

Splunkでつくる、標的型攻撃対策のSIEM

株式会社サイバーエージェント 山口 玲 さん のセッション

資料非公開のようなので簡単にまとめておきます。
サイバーエージェントさんからは標的型攻撃の検知事例が発表されました。
攻撃そのものを検知し、早い段階でブロックすることを目的にSplunkを活用しているとのことです。

* 管理者アカウントの使われ方監査を分析する
    * アカウントと行使されるIPの組み合わせ
    * アカウントと使用時間の組み合わせ
    * 滅多に使われないアカウントの利用状況
    * 認証失敗が突出したアカウント
 
* DNSログ監査
    * Dynamic DNSの利用状況

* エージェントを利用した端末のプロセス情報収集
    * 起動しているプロセスが本来動作する端末で起動しているのか

よく使う検索条件をマクロ化し再利用していたり、date_hourやdate_wdayを使った営業日判定など詳細なテクニックが説明され、既に使われているユーザの方も参考になった点が多かったのではないかと思います。

また、S3の貯めたデータに対し、Amazon Athenaを利用した分析も行ったり、マシンラーニングの組み合わせで効率的な標的型攻撃検知を進めているとのことでした。(また登壇して欲しい)

サイバー犯罪に立ち向かうためのチームとデータ利活用

楽天株式会社 大野 隆弘 さん のセッション

こちらも資料非公開のようなので簡単にまとめておきます。
楽天さんからは不正ログインの検知事例が発表されました。
パスワードリスト攻撃など、ユーザアカウントへの不正ログイン・不正利用の検知を目的にSplunkを活用しているとのことです。

楽天さんではセキュリティ部署、ID開発部署、カスタマー部署国外サービス拠点など関連する部署が多く、見ているデータが異なるケースもある中で迅速に情報共有することが必要になった結果 Splunk を利用する事で解決した事例を細かく説明されました。

Splunkのダッシュボードを軸に各部署が同じ情報を参照する事で、ログの異常性判断、データからの情報加工のタイムロスを少なくし、情報を早く正確に共有しているようです。

Web UIなので非エンジニアも艇庫なく利用でき、結果のみを共有する事も出来るので難しいクエリなどを非エンジニアに覚えてもらう必要も無い点も大きいようでした。

実際にブロックしたはずの攻撃がブロックされていない状況があり、Splunkによる分析結果の共有で攻撃に気づいた実績もあるとのことでした。

Inside Splunk - サーチの仕組みはどうなっているか

Splunk Services Japan 小松原 貴司 さん のセッション

Splunkの中の人がSplunkユーザの為にマニアックなセッションをということでSplunkの小松原さんが登壇されました。

インデックス構造やイベントの保存プロセス、内部構造に基づく効率的なクエリ記述(実際同じ結果が返ってくるが、応答速度が倍以上違った)など、更に効率的な活用へのヒントを惜しむことなく説明されていました。

資料が公開されているのでリンクを貼ってきます。

顕微鏡の向こう側 - サーチはどのように動くか https://www.slideshare.net/takashikomatsubara50/how-search-works-tsidxterm

さいごに

GOJAS Meetup では、セッション終了後に懇親会を開催しています。 懇親会ではスピーカーへの質問やユーザ同士での相談、ディスカッションも活発に見られました。

次回は4月に GOJAS Meetup-03 を開催する予定です。 興味のある方は是非参加されてはいかがでしょうか。

運営チームと参加者による記念撮影 f:id:kinunori:20170322193856j:plain