UnityのSteamVRでViveタッチパッドの入力を4分割して取得

やりたかったこと

UnityでViveをいじって遊んでいる途中で、下の図みたいなバッテン型に分割して入力したくなった。

たいした内容じゃないけど、マニュアルで上手く見つけられなかったからメモしておきます。
実際にはコントローラに視覚的な目印を表示することも必要だと思う。

コード

コンポーネントとして「Controller (left)」または「Controller (right)」に追加して使用。

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

public class TouchPadPress : MonoBehaviour {

    void Start () {

    }

    void Update()
    {
        SteamVR_TrackedObject trackedObject = GetComponent<SteamVR_TrackedObject>();
        var device = SteamVR_Controller.Input((int)trackedObject.index);

        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
        {
            Vector2 touchPosition = device.GetAxis();
            if (touchPosition.y / touchPosition.x > 1 || touchPosition.y / touchPosition.x < -1)
            {
                if (touchPosition.y > 0)
                {
                    //タッチパッド上をクリックした場合の処理
                    Debug.Log("Press UP");
                }
                else
                {
                    //タッチパッド下をクリックした場合の処理
                    Debug.Log("Press DOWN");
                }
            }
            else
            {
                if (touchPosition.x > 0)
                {
                    //タッチパッド右をクリックした場合の処理
                    Debug.Log("Press RIGHT");
                }
                else
                {
                    //タッチパッド左をクリックした場合の処理
                    Debug.Log("Press LEFT");
                }
            }
        }
    }
}

Pocketみたいに後で読むサービスをホストできるwallabagをインストールしてみた

Wallabagについて

オープンソースで開発されてるPHP製のWebアプリケーションです。

後で読みたいWebサイトの情報を保存しておくことができ、Chrome/Firefox等の拡張プラグインやAndroidのアプリ、ブックマークレットから手軽に呼び出すことができるようになっています。

これを書いている時点での最新バージョン(2.1.5)だと検索機能がありませんが、2.2.0には簡易検索機能が追加される予定。

  • 2017/4/9追記 2.2.0で検索機能が追加されました。

似たようなオープンソースのWebアプリだとunmarkがあるのですが、こちらは一度登録したものがUIから消せないため、私はWallabagを使ってます。

インストール手順

公式ドキュメントのインストール方法には以下2つの環境で動作させる方法が記述されてます。

  • PHPのビルトインウェブサーバー
  • Apache/Nginx/lighttpd

ここではApacheによる方法を記載します。

確認環境

  • Wallabag 2.1.5
  • ubuntu 16.04
  • PHP 7.0
  • apache 2.4

データベースはデフォルトのSQLiteを使用します。

手順

ApacheとPHPのインストール

sudo aptitude -y install\
apache2 php\
libapache2-mod-php\
php-session\
php-ctype\
php-dom\
php-hash\
php-simplexml\
php-json\
php-gd\
php-mbstring\
php-xml\
php-tidy\
php-iconv\
php-curl\
php-gettext\
php-tokenizer\
php-bcmath\
php-sqlite3

Wallabagのダウンロードと展開

mkdir -p ~/work/wallabag
cd ~/work/wallabag

wget http://wllbg.org/latest-v2-package
tar xvf latest-v2-package

sudo mv release-2.1.5 /var/www/wallabag

sudo chown -R www-data:www-data /var/www/wallabag

設定ファイルの編集

sudo vi /var/www/wallabag/app/config/parameters.yml
# /var/www/wallabag/app/config/parameters.yml
secret: (任意の文字列に変更)

データベースをSQLite以外にする場合も同じファイルの設定変更が必要。

Apacheのバーチャルホストを設定

cd /etc/apache2/sites-available/
sudo vi bag.local.conf
# bag.local.conf
<VirtualHost *:80>
    ServerName bag.local
    DocumentRoot /var/www/wallabag/web
    ErrorLog /var/log/apache2/bag.local.error.log
    CustomLog /var/log/apache2/bag.local.access.log combined
    LogLevel warn
    <Directory /var/www/wallabag/web>
       AllowOverride None
       Require all granted
       <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>

    <Directory /var/www/wallabag/web/bundles>
        <IfModule mod_rewrite.c>
            RewriteEngine Off
        </IfModule>
    </Directory>
</VirtualHost>
sudo a2ensite bag.local
sudo systemctl reload apache2.service

初回アクセス

Webブラウザでアクセス。
上記の例なら「http://bag.local/」
デフォルトのユーザとパスワードは以下。
– ユーザ : wallabag
– パスワード : wallabag


PHPでTwitterのプロフィール情報の一部を他のアカウントと同期する

Twitterで複数アカウント使ってる場合に、プロフィール画像 等を一緒に変更するのが面倒くさいので、PHPスクリプトをCRONで叩けば同期できるようにしてみました。
TwitterAPIが必要なため、事前に承認作業をしとく必要があります。

TwitterOAuthでは画像のPOSTが難しい?らしく、ググッて引っかかったUltimateOAuthを使用させていただくことにしました。

[UltimateOAuth]
 https://github.com/danielsum/UltimateOAuth/

コードは以下。

<?php

$consumer_key = " "; // Consumer keyの値
$consumer_secret = " "; // Consumer secretの値
$access_token = " "; // Access Tokenの値
$access_token_secret = " "; // Access Token Secretの値

$ultimateoauth  =   "UltimateOAuth.php";
require_once($ultimateoauth);

// OAuthオブジェクト生成
$uo = new UltimateOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

$result = $uo->OAuthRequest(
    "https://api.twitter.com/1.1/users/show.json",
    "GET",
    array( "user_id"=>"*********" ) //プロフィール取得対象のユーザID
    );

/*** プロフィールイメージの処理 ***/
//大きいサイズのプロフィールイメージURLを取得
$profileImageUrl = str_replace('_normal', '', $result->profile_image_url );
$profileImage = file_get_contents( $profileImageUrl );
$uo->OAuthRequest(
    "https://api.twitter.com/1.1/account/update_profile_image.json",
    "POST",
    array('image' => base64_encode($profileImage) )
    );


/*** バックグラウンドイメージの処理 ***/
$profile_banner_image = file_get_contents( $result->profile_banner_url );
$uo->OAuthRequest(
    "https://api.twitter.com/1.1/account/update_profile_banner.json",
    "POST",
    array('banner' => base64_encode($profile_banner_image) )
    );


/*** プロフィールメッセージの処理 ***/
$uo->OAuthRequest(
    "https://api.twitter.com/1.1/account/update_profile.json",
    "POST",
    array('description' => $result->description )
    );

ownCloudとPydioをいっぺんに使ってみての比較

ownCloudとPydioは、ファイルの同期・共有が可能なWebアプリケーションのPHP製パッケージです。
ownCloudはDropboxライクな感じで、Pydioはビジネス用途向けなことをよく言われるようです。

具体的には以下のようにして両方を使ってました。

  • ownClowdをさくらインターネットのVPSに導入して、サイズの小さいファイルの同期管理
  • Pydioを自宅サーバに入れて、それなりの大きさがあるファイル(100M~1G)をやり取り

で、結論から言うと、基本的な機能は同じなので単にファイルのやり取りに使うだけであればどちらも大差なかったです。

しかしそれ以外の管理面などでは結構違いがあるので、私の使った範囲で特徴を上げるとしたら、以下の点となります。

  1. ストレージ領域の考え方

    ownCloudはユーザアカウント、Pydioはワークスペースが中心

    スライド1

    ファイル保存のために割振る領域の扱い方が、それぞれの大きな違いになっています。
    ownCloudはユーザそれぞれに1つの領域が割振られます。Dropboxを使ったことがあるなら、ほぼ同じだと思っていいです。
    Pydioは「ワークスペース」という領域に対してユーザのアクセス権を割振ることで複数の領域を使用する事ができ、容量制限などの設定もワークスペース単位でできます。

  2. 共有についての考え方

    ownCloudは領域の一部を使い、Pydioは新たな領域を作成

    スライド2

    ownCloudはユーザ領域の特定ディレクトリを他ユーザに公開することで共有を可能にします。
    Pydioは領域を新たに作成し、それを共有対象のユーザから見えるようにします。
    ownCloudの共有の場合、容量は共有元のユーザの領域が使われるため、大量にデータを入れる目的に使用しにくい部分があります。
    目的や用途によって領域を作れるPydioは、このあたりがビジネス用途向けらしい感じ。

  3. 設定

    ownCloudは設定が少なく、Pydioは多い

    ownCloudはGUIから設定できる項目が少なめで、構築はとても楽にできるようになっています。
    逆に、Pydioには設定項目が多数あり、導入要件に対応したチューニングが可能となっていました。

  4. プラグインのリリース

    ownCloudはコミュニティでのプラグイン公開が盛ん

    どちらもプラグインによる機能拡張に対応しており、特にownCloudは有志の開発者によってリリースされているプラグインが多数公開されています。
    ownCloud Applications – apps.ownCloud.com

    Pydioは検索しても公式以外で公開しているものが見つかりませんでした。


  5. ユーザの使いやすさ・日本語への対応

    操作性は大差ないけど、Dropboxと似てるからownCloudのほうが楽かも

    初期の操作性で言えば、ownCloudがユーザとしても使いやすかったです。Dropboxを使ったことがあれば、ほぼ同じですし。
    また、日本語の対応具合もownCloudはほとんど問題ないレベルです。
    プラグインを追加している場合に一部英語が気になるぐらいかと思われます。
    Pydioは日本語の対応が不完全で、インタフェースの操作も最初は慣れが入りますが、ユーザが使用できる機能が多くないので難しくはないと思われます。

  6. 管理・運用

    ownCloudはユーザ任せ、Pydioは管理者の操作が多い

    管理面から言うと、ownCloudはアカウントを作れば後はユーザが勝手にやるのに任せるため、大して手間はかからなそう。
    逆に、Pydioはワークスペースの設定を管理者が行うため、[ユーザが管理者に申請->管理者が操作]のような形になりそう。

個人で少し使う分にはownCloudのほうが簡単そう。
複数人で多目的に使うのであれば、Pydioを入れる価値があるかも。

という感じでした。