TeamSpeak3をセットアップする時に使うクエリ

TeamSpeak3を立て直す時に、いつも同じようなクエリを叩くので残しておく。

ローカルからTelnetでTS3のクエリポートにアクセス


telnet localhost 10011

ログイン


パスワードはTeamSpeak3の初回起動時に表示されるやつ。
トークンと間違えないよう注意。

login client_login_name=serveradmin client_login_password=パスワード

バーチャルサーバを選択


デフォルトは1。
複数ポートで運営している方は適当に変更。

use sid=1

公開リストにサーバ情報を載せない


デフォルトだとサーバ立ててることをどこかのリストにおっぴろげてしまうらしい。
特定の用途や趣味により立てるのであれば、以下でオフにしたほうが良いかも。

serveredit virtualserver_weblist_enabled=0

ビューワからクエリで情報を参照できるようパーミッションを設定


TSStatusを使ったときのパーミッション設定。

servergroupaddperm sgid=1 permsid=b_virtualserver_info_view permvalue=1 permnegated=0 permskip=0
servergroupaddperm sgid=1 permsid=b_virtualserver_channel_list permvalue=1 permnegated=0 permskip=0
servergroupaddperm sgid=8 permsid=b_virtualserver_servergroup_list permvalue=1 permnegated=0 permskip=0
servergroupaddperm sgid=8 permsid=b_virtualserver_channelgroup_list permvalue=1 permnegated=0 permskip=0
servergroupaddperm sgid=1 permsid=b_virtualserver_select permvalue=1 permnegated=0 permskip=0

もしそれでもパーミッションが足りなくて「failed_permid=25」みたいなエラーが出る場合は以下を参照して適当に追加。
https://www.tsviewer.com/index.php?page=faq&id=12

ビューワからのクエリは時間による回数制限がかかるため、無制限にするならホワイトリストにIPを追加しておくこと。

  • /(TS3のインストールディレクトリ)/query_ip_whitelist.txt

セッションを切る


quit

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 )
    );