2018年10月27日

steamvr.vrsettings

メモ

OpenVR advanced settingsを使ったら、Steam VRのデスクトップ機能が死んでしまった。どうやったら治るんだこれ

SteamVRのデスクトップが吹っ飛んで帰ってこなくなった件、steamvr.vrsettingsを削除して設定リセットしたらなぜか治った。

posted by gpsnmeajp at 17:12| Comment(0) | TrackBack(0) | トラブル解決

2018年07月29日

VRChat固定インスタンス間移動システム(VRC World Jumper)の設置方法

VRC World Jumper


jmpA.png

この記事を試す前に、下記の対策も試してみてください。(併せると効果高くなります)

ワールドのカメラのカリング距離調整と、同期頻度調整
http://gpsnmeajp.sblo.jp/article/184044375.html

*概要
VRChatはまだ未発展のサービスということもあり、1つのワールドに20人以上集まると段々と重くなってきます。
しかし、ワールドの部屋単位たるインスタンスは、基本個人に紐付いて生成されるため、
publicではないインスタンスでは、フレンド同士でないと移動が難しくなります。

ワールドに設置したポータルは、インスタンスを指定できないため、
時に違うインスタンスに移動してしまったりします。

ここでは、WebpanelのGoToRoomを使った「固定のインスタンス間の移動」を
行う仕組みをワールドに実装する方法をご説明します。

お試し用ワールド
https://vrchat.net/launch?worldId=wrld_30da4670-55de-4633-a2e3-b6d34ab1b5b1

*注意
この方法はVRChat公式の方法からは外れた方法です。
公式から提供されている機能を利用していますが、未保証な機能です。(理由はページ末へ)
将来的に使用できなくなる可能性があります。

この手法を用いたことによる損害等の責任は一切持ちません。
vrcjmp.zip内のコードに関してはCC0とします。

*よりシンプルな作例のご紹介
がとーしょこら(@gatosyocora)様がunitypackageでよりシンプルな形態のものを配布されています。
こちらもご検討ください。
https://twitter.com/gatosyocora/status/1022125633671843840

*作り方
1. 以下のファイルをダウンロードし、展開します。
https://sabowl.sakura.ne.jp/gpsnmeajp/tool/vrcjmp.zip
v1.0 2018-07-29 公開
v1.1 2018-07-29 構造の改良と色付け
v1.2 2018-07-29 nonceの修正

2. vrcjmp.htmの中身を書き換えます。
「wrld_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx」を、自分のワールドのIDに置き換えてください。
別の部分を巻き添えで消さないように注意してください。1文字でも欠けると動きません。
jmp1.png
ワールドのIDは、Unityの「VRChat SDK」の「Manage Uploaded Content」からコピーできます。
(まだ一度もpublishしていないワールドはコピーできません。一度publishしてください)
jmp2.png

3. webフォルダを作り、その中にvrcjmp.htmを配置します。
jmp3_1.png

jmp3_2.png

jmp3_3.png

4. ワールドにWebpanelを設置します。
まずそのためのQuadを設置します。位置は自由です。
Scale はX : Y が 2 : 1 になるように設定してください
(例ではX=1, Y=0.5にしています)
jmp4.png

jmp5.png

QuadにVRC_Web Panelをセットします。
jmp6.png

設定はまず以下のようにします。特に赤枠に注意してください。
(赤枠以外も変更していますので、なるべく同じ状態にしてください)
jmp7.png

次に、vrcjmp.htmを読み込むように設定します。
jmp8.png

最終的に以下のようになればOKです。
jmp9.png

*ワールド内での使い方
ワールドに入ると以下のように表示されます。クリックすると、指定されたFriend+のインスタンスに飛びます。
これは固定化されており、誰がクリックしても同じROOMは同じインスタンスに飛びます。
(なお、このルームの数や種類はvrcjmp.htmを編集することで変更できます。)
jmpA.png
最初にワールドを開いた人は、そこは固定されたインスタンスではないため、
まずどれかのROOMをクリックして移動しておくことをおすすめします。

*ちなみに
HTMLをカスタマイズするとこういう画像を使ったものや、ボタンを増やしたものもできます。また、違うワールド同士を固定のインスタンスで接続したりもできます。

パスワード入力して正しいときだけ特定のワールドに飛んだり、オリジナルのポータルを通ってワールド間を往来したり、時刻によって飛び先が変わったり、そんなことも多分できます。

やってみたいけどやり方わからない、という方は、簡単なものであればお作りできますので、お気軽にページ下部のコメントでお問い合わせください。
問い合わせの際にはdiscordかtwitterのIDを添えてください。

例えば、城ワールドと飛空艇ワールドと迷宮ワールドを行き来できるようになったり
jmpB.png
パスワード認証したり(http://gpsnmeajp.sblo.jp/article/184045837.html )
jmpD.png

なお、設置の仕方がわからないという問い合わせは受け付けかねます。

設置してみたけどうまく動作しない場合は、上記の手順をしっかり読み直して、
可能であればまっさらなワールドに設置してみて、それでもダメ場合は
配布HTMLの不具合等の可能性がありますので、お問い合わせください。

*メモ
・セキュリティを向上させたい場合はnonceを書き換えてください。
・他のワールドのWorldIDを指定すると、他のワールドの固定インスタンスに飛ぶことができます。
 (相互に設置し合うと、行って帰ってくることができるようになります)
・スクリプトや外部サーバーを組み合わせるとかなりいろいろなことができます。
・負荷の都合上おすすめしませんが... その場にいる全員を違うワールドにふっとばすこともできなくはないようです。
・VRC_Triggerから発動もできるはずなので、斬られると天国に飛ばされるとかも、できなくはない
 →Triggerからの発動についてはがとーしょこらさんの仕組みのほうが単純で良いと思われる。

*書式
ユーザーIDあり
Public
wrld_xxxx:0000~public(usr_yyyy)
Friends+
wrld_xxxx:0000~hidden(usr_yyyy)~nonce(zzzz)
Friends
wrld_xxxx:0000~friends(usr_yyyy)~nonce(zzzz)
Invite+
wrld_xxxx:0000~private(usr_yyyy)~canRequestInvite()~nonce(zzzz)
Invite Only
wrld_xxxx:0000~private(usr_yyyy)~nonce(zzzz)
wrld_xxxx:0000~private(inviteurl_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)というパターンも?

ユーザーIDなし
Public
wrld_xxxx:0000~public
Friends+
wrld_xxxx:0000~hidden~nonce(zzzz)
Friends(実質Closed?)
wrld_xxxx:0000~friends~nonce(zzzz)
Invite+
wrld_xxxx:0000~private~canRequestInvite()~nonce(zzzz)
Invite Only(実質Closed?)
wrld_xxxx:0000~private~nonce(zzzz)

VRChat ワールド一覧 - beta のURL生成機能を参考にさせていただきました。
http://teruaki-tsubokura.com/vrchat/

なおこのインスタンスに関する法則性は起動時のワールド指定でも有効です。
(ワールドIDのみだとInvite Onlyで起動しますが、Publicに飛んだりできる)
Launch URL - Programming in VRChat
http://vrcprog.hatenablog.jp/entry/tips-Launch_URL

*「公式から提供されている機能を利用していますが、未保証な機能です」について
この機能は、VRChatのWebPanelに搭載されているJavascript API bindingsのGotoRoom機能を利用しています。この機能含め、Javascript API bindingsはマニュアルには乗っておらず、実際殆どが機能しません。GotoRoom機能は数少ない動作している機能の一つです。

UnityでVRC_Web Panelを設置して、ローカルのファイルを指定すると以下のような表示が現れます。

jmpC.png

以下意訳
「Javascript API bindingsを呼び出すには、engine.call('メソッド名',...)を使ってね。これはPromiseライクなオブジェクトを返すよ」
「ListBindings()を呼び出すと、利用可能なAPIを確認することができるよ」
「ページが読み込み完了してAPIが使えるようになったらonBindingsReadyイベントが発生するからlistenしてね」
(注: GotoRoomは単純な機能なのでonBindingsReadyイベントをチェックする必要はほぼ無いです)

というわけで、どうやらワールド製作者が利用することを最初から意図しているようです。
が、未完成なのでマニュアルに乗ってないものと推測されます。
posted by gpsnmeajp at 04:04| Comment(0) | TrackBack(0) | トラブル解決

2018年03月26日

中国製据え置きQRコードスキャナの設定用バーコードを生成してみた記録

中国製据え置きQRコードスキャナのSymcode MJ7580 2D Image Desktop Scannerの設定用バーコードをPC上で生成しようとして悪戦苦闘した記録。

まず、英語版説明書に記載の数字や、日本語版説明書のDatamatrixのデータを元にバーコードを作っても、設定用の音(ピコッ)ではなく、読み取り音(ピッ)が鳴って、単に数値として読み取られてしまう。
なぜかというと、バーコードにバイナリデータが含まれているためだ。

CODE128には、アスキーコードの他にFUNC1,2,3,4という拡張コードが含まれる。
まず普通の読み取り装置ではここは無視されてしまうし、使わない。

ので、AndroidアプリでZxingを使い、生データを読み取った。
結果、次のような並びになっていることがわかった。

例えば改行コード(CR+LF)を付けるバーコードの場合
[FUNC3]090300[.]

で、これがわかったなら次にCODE128を生成するのだが、FUNCを付け加えられるサイトがほぼ無い。

最終的にCODE128の生成にはPythonのcode128 0.3ライブラリに付属しているcode128.exeを利用した。
https://pypi.python.org/pypi/code128/0.3

ソースコードを読んだところ~がFUNCに相当するらしく、以下のコマンドで上記のバーコードが生成できた。
code128 ~3090300. output.svg

なお、Datamatrixの中身と、CODE128の中身は同じ為、どちらかに統一して良い。
おわり。

キーエンスのCODE128解説
https://www.keyence.co.jp/ss/products/autoid/codereader/basic_code128.jsp

以下に私好みの設定バーコードを示す。(クリックで拡大)
setup.png

なお、
通常・高速切替モードは、上のボタンで青色のとき1D・2D読み取り、緑色のとき1D専用モードになる。
抑止・通常切替モードは、上のボタンが青色のときスリープ状態になり、緑色のとき1D・2Dを読み取る。
デフォルトだと使わないときにライトがついたり消えたりするが、後者に設定するとオフにできて便利。

以下によく使いそうなバーコードを列挙しておく。(クリックで拡大)
list.png
posted by gpsnmeajp at 03:45| Comment(4) | TrackBack(0) | トラブル解決

2018年02月07日

Hacknetの全画面表示でFPSがおかしくなるときの解消方法

Hacknetという、とても面白いゲームがある。
1000円程度と安いが、とても本格的で面白い。音楽も良いゲームだ。
http://store.steampowered.com/app/365450/Hacknet/?l=japanese

ハッキングシミュレータであり、キーボード叩きゲーである。
UNIX風のコマンドを叩き、映画のホワイトハッカーにでもなったかのような楽しい体験ができる作品だ。
一見おかしな設定も、ゲーム内のテキストファイルをあさってゆくと色々と説明が出てくる。
PCに詳しい人はなりきり体験とあるあるネタとして、
PCに詳しくない人は、PCに興味を持つきっかけや、コマンド操作のチュートリアルとして
どちらもおすすめである。

ところでこのゲーム、なぜか全画面表示でやるとFPSがおかしくなる。
普通はならないらしいが、自分のPCでは10〜999FPSを超絶行き来しており、
その上実際は10FPSくらいが不安定に出る感じで、うまく動かない。

ウィンドウモードでは60FPSで動くのだが、全画面にするととたんにダメになる。
ウィンドウモードでプレイしたが、没入感に欠ける。

で、この度PCをSSDにしたついでに解決策を探してみた。
結果、ビデオカードの「垂直同期」を「アプリケーション依存」から「強制オン」に切り替えたところ、
60FPSで安定して動くようになった。FPS自動調節機能でも誤動作していたのだろうか?

ともかく、これで没入感たっぷりで遊べるようになった。
posted by gpsnmeajp at 00:05| Comment(0) | TrackBack(0) | トラブル解決

2017年12月04日

Intel rapid storage technologyを削除したらHDDの平均応答時間が早くなった?

最近PCがやたら重い。

HDDの平均応答時間が500msとかおかしな値になっていたので、
ぐぐってみると、Intel rapid storage technologyが導入されていないと起きるとのこと。
しかし、導入されている。謎である。

試しにIntel rapid storage technology削除してみたが、変化が起きない。
そこでさらに、SATAコントローラのドライバを削除してみた。

見事にWindowsが起動しなくなったが、セーフモードで起動後、再起動すると問題なく起動した。
ドライバがかなり古いものにフォールバックしたが、その結果、平均応答時間が3〜50ms程度と大きく改善した。
何だったのだろう。
posted by gpsnmeajp at 00:09| Comment(0) | TrackBack(0) | トラブル解決

2017年10月03日

NiftyのスマートサーブVPNがうまく繋がらないときの対処

Niftyのスマートサーブのレビューをしようとして、ちょっとハマったので記録。

月額315円、初期費用無料で、専用端末付き、
ゼロコンフィギュレーションで簡単にできますよー、としたかった。

実際、スマートサーブ自体の設置は電源とLANを刺すだけ。
認証設定もiPhoneからだとプロファイルの生成配布をNiftyのサイトでやってくれるので簡単。
なのだが、多重NATな環境故か、設定が必要だった。

*症状
Windowsで接続しようとすると
「リモートコンピューターへの接続を確立できませんでした。この接続用にネットワーク設定の変更が必要である可能性があります。」
1.png

iPhoneで接続しようとすると
「L2TP-VPNサーバが応答しませんでした。もう一度接続してください。それでも問題が解決しない場合は、設定を確認し、管理者に問い合わせてください」
A.png
あるいは
「PPPサーバへの接続を確立できませんでした。もう一度接続してください。それでも問題が解決しない場合は、設定を確認し、管理者に問い合わせてください」
B.png

で、スマートサーブの「モバイル接続機能」の「基本情報」ページに行くと以下のようなログが出力されている。
「DHCP取得エラー」
4.png

スマートサーブのターミナル本体は「ステータス2が点滅」している。

*原因
この場合、どうやらスマートサーブのターミナルとセンター間でのVPNコネクションが張れていないようである。
スマートサーブはL2TP/IPsecを使ってコネクションを張り、HTTPSを使ってファームウェアの設定等を行う。
このうちHTTPSは正常に通信できるが、L2TP/IPsecが通信できないのが「ステータス2点滅」の状態らしい。

ルータがIPsecを妨害してしまっているために起こる模様。
(ただし2本以上の場合に問題になるという話が多いのだが、)

*対処方法
ルータの設定画面から「IPsecパススルー」を有効にする。
3.png

*接続成功
接続できると以下のようになる。
C.png

D.png

*同時接続禁止
VPNは1つのアカウントで2つ以上の同時接続はできない。
SoftEtherなどを使っている場合は、接続台数に合わせて増やせば良い。
スマートサーブでは、2ID目以降の追加は、月額100円ずつ+される。
もっとも、センターを経由して通信している以上仕方ないとも言える。

同時接続しようとすると以下のエラーが出る
「指定したユーザー名またはパスワードが認識されないか、選択した認証プロトコルがリモートアクセスサーバーで許可されていないため、リモート接続が拒否されました」
alredy.png

VPN接続「認証に失敗しました」
E.png
posted by gpsnmeajp at 22:44| Comment(0) | TrackBack(0) | トラブル解決