えむにわリソース

ITのスキマ的なあれこれを書きます。

Looking Glass Unity Plugin 3.0.5 再入門

0. はじめに

Looking Glass Goが発売されて、数年ぶりに Unity Plugin を触ってみたら、
結構変わっていたのでメモを兼ねて変更点を綴ります。

1. 変更点

1.1. HoloPlay Plugin から、 Looking Glass Unity Plugin に名前が変わっていた

C#のコードもディレクトリごと変更されており、再設定が必要です。
何も考えずに古いプロジェクトに Pluginを上書き更新すると、プロジェクトが壊れがちなので、
一度クリーンなプロジェクトに入れなおした方が早いかもしれません。

これに伴い、従来の Lookiing Glass のカメラである HoloPlay というオブジェクトが HologramCamera という名前に変更されています。

基本の Hologram Camera の prefab は Assets/LookingGlass/Prefabs/Hologram Camera.prefab です。

1.2. ハードウェアボタンの入力を取るスクリプトが変わっている

古い書き方

if (LookingGlass.ButtonManager.GetButtonDown(LookingGlass.ButtonType.SQUARE)) { /* 処理 */ }
if (LookingGlass.ButtonManager.GetButtonDown(LookingGlass.ButtonType.CIRCLE)) { /* 処理 */ }
if (LookingGlass.ButtonManager.GetButtonDown(LookingGlass.ButtonType.LEFT)) { /* 処理 */ }
if (LookingGlass.ButtonManager.GetButtonDown(LookingGlass.ButtonType.RIGHT)) { /* 処理 */ }

新しい書き方

// Looking Glass Portrait, Go の場合
if (LookingGlass.InputManager.GetButtonDown(LookingGlass.HardwareButton.Forward)) { /* 処理 */ }
if (LookingGlass.InputManager.GetButtonDown(LookingGlass.HardwareButton.Back)) { /* 処理 */ }
if (LookingGlass.InputManager.GetButtonDown(LookingGlass.HardwareButton.PlayPause)) { /* 処理 */ }

// Looking Glass の場合
if (LookingGlass.InputManager.GetButtonDown(LookingGlass.HardwareButton.Square)) { /* 処理 */ }
if (LookingGlass.InputManager.GetButtonDown(LookingGlass.HardwareButton.Left)) { /* 処理 */ }
if (LookingGlass.InputManager.GetButtonDown(LookingGlass.HardwareButton.Right)) { /* 処理 */ }
if (LookingGlass.InputManager.GetButtonDown(LookingGlass.HardwareButton.Circle)) { /* 処理 */ }

サンプルコードの場所 Assets/LookingGlass/Examples/Scripts/LookingGlass.Demos/DemoInputToggleButtons.cs

2. 最小限セットアップ手順

2.1. Looking Glass Bridge の導入

PCでLooking Glassを使うには、 Looking Glass Bridge のインストールが必要です。
以下のリンクから、使用したいOSに合ったものをダウンロードし、インストールしましょう。

Looking Glass Bridge: Essential Software for Device Communication

導入後のディスプレイの設定は、以下の項目を参照しましょう。(英語が分からなくてもスクリーンショットで何とかなると思います)

Looking Glass Bridge | Looking Glass Documentation

2.2. Unity プロジェクトを作る

Unity プロジェクトを新規作成します。
Unityのバージョンは 2021 以上推奨なので、従いましょう。

2.3. Looking Glass Unity Plugin の導入

Looking Glass Unity Plugin(執筆時点では 3.0.5) をインポートします。

入手先は以下から。
Looking Glass Unity Plugin: Bring 3D Characters to Life

unitypackageへの直リンクは ここ→ LookingGlass.Unity.Plugin.v3.0.5.unitypackage

入手したら Unityプロジェクトのファイルマネージャー部分にドロップします。

インポートすると、下記のようなウィンドウが出るので、 Apply Changes を押します。

以上でLooking GlassのUniyuアプリ開発の準備が整いました。

Steamのスクリーンショットをローカルの保存する

Steamのクライアントが更新されて、いつの間にかスクリーンショットがSteanクラウドに保存され、ローカルに保存されなくなってた。 このままだとスクリーンショット取りまくってると1日ほどで消えてしまうため、思い出を振り返ることも、資料を作ることもできない。

対処方法

Steamクライアントの左上のメニューから [設定] を選び、「ゲーム中」の項目から以下の設定を行う必要がある。

設定完了したら、今まで通りゲーム中にF12押して、ローカルのディスクに保存される。

CarrierWave を Google Cloud Storage で使おうとしたときに嵌まる罠

困難

CarrierWave で GCS を使おうとすると モデル保存時に wrong number of arguments (given 6, expected 4..5) という度し難いエラーが出る

f:id:m2wasabi:20210410083417p:plain

まとめ

  • fog-googleGCPアクセスでJSON API を使った場合、copy_object メソッドで引数エラーが出る
  • GemがメンテナンスされるまではレガシーなXML APIを使う
  • 問題が発生している組み合わせは carrierwave (2.2.1), fog-google (1.12.1), google-api-client (0.50.0)
続きを読む

Google認証システムから任意のツールにワンタイムパスワードを引っ越す

はじめに

スマホの機種変更のたびにワンタイムパスワードの管理が面倒ですね。
賢明な方は既に1Passwordなどにワンタイムパスワードを登録済みかもしれませんが、
最初にGoogle認証システムなどに登録してしまったら、引っ越すのも作り直すのも面倒になってしまうかもしれないです。

f:id:m2wasabi:20210223042436p:plain

昨年、Google認証システムがエクスポートに対応しました。

japanese.engadget.com

これで機種変更が捗るのですが、公式サイトの説明では、
Google認証システム同士でQRコードを読ませるように書いてあります。

support.google.com

しかし自分は KeepassXC*1 や 1Password*2 で使いたいんだ!
自由になりたいので!

というわけでGoogleのロックインから脱出してみましょう。

然らばLet's Hacking!

おことわり:本記事の内容を参考に起こした結果の情報漏洩、操作ミスによるシークレットの削除などの不利益について、筆者は一切の責任を負えませんので悪しからずご了承ください。

続きを読む

Ruby on Rails 6.x + Omniauth でRedisのSessionを使う

f:id:m2wasabi:20200613110248p:plain

Ruby on Rails5.2以降、 Redisのキャッシュ機能を標準サポートされました。

Rails の OAuth2 クライアントとして Omniauthを使った場合、 無策で実装するとCSRFエラーが出ます。

OmniAuth::Strategies::OAuth2::CallbackError (csrf_detected | CSRF detected):

これはOmniauthが Railsとは別の Rackアプリケーションとして立ち上がっていて、Railsの設定を読まないためです。 公式サイトにはCookieセッションでの対応方法が書いてありますが、Redisで設定する場合の記述がなされていません。

github.com

続きを読む

Rails6のcredentialをファイルから生成する方法

梅雨時になってすっかりRails触っている昨今ですが、いかがお過ごしでしょうか。

Rails6から導入された credentials 、使ってますか?便利ですね。大事な情報はどんどん隠蔽しましょう。

credentialsが何かの説明は、ここ とか ここ を読むと良いでしょう。

要はサービストークンやパスワードなどの秘密の情報をRailsフレームワーク内で暗号化する仕組みです。

最初に rails credentials:edit とかで秘密鍵を作りながら暗号化する情報を書くのですが、
EDITOR 環境変数にエディタを設定して書き込みます。

秘密にする項目が多いと、面倒ですよね。自動で生成したい!!!

そこで、 credentials:edit をファイルから生成してみましょう。

f:id:m2wasabi:20200613110248p:plain

手順

1. ひな形ファイルを用意する

設定ファイルのひな形になるファイルをどこかに置きましょう。
あるいはこれをsedなんかでカスタマイズしてもいいかもしれません。

.credentials_template.yml

secret_key_base: '0123456789'
mysql:
  host: 'localhost'
  database: 'default'
  user: 'user'
  password: 'secret'
redis:
  url: 'redis://localhost:6379/1'
mail:
  server: 'smtp.example.com'
  domain: 'example.com'
  port: 587
  user: 'mailuser'
  password: 'secret'
  authentication: 'cram_md5'

2. ひな形ファイルからcredentialsを生成する

おもむろに以下のコマンドを実行しましょう。 Linux系のシェル用です。Windows民はWSL使いましょう。

EDITOR="cat ./.credentials_template.yml > "  bundle exec rails credentials:edit -e development

staging, produntion 用の鍵も同様に作ります。 -e の引数変えればできますね。

解説

EDITOR の中の > がミソです。
credentials:edit の中では ${EDITOR} #{tmp_path} みたいなコマンドを発行しているので、
リダイレクトで流し込めばいいのですね。

3. 秘密鍵を持ち帰ろう

環境の新規作成はできました。

任意の環境でデプロイするには秘密鍵を持ち帰らなければなりません。

./config/credentials/*.key にあるので、 プライベートクラウドに上げるなり、アーカイブして持ち帰るなりしましょう。

できあがり

簡単ですね!ではよい自動化ライフを!