macのターミナル起動時に怒られるようになった話

今日ターミナルを起動すると

Can't locate local/lib.pm in @INC (you may need to install the local::lib module)

と表示されるようになった。とりあえずperlを最新にしてみようとplenvをインストール https://github.com/tokuhirom/plenv#homebrew-on-mac-os-x 公式の説明どうりに

$ brew intall plenv
$ brew install perl-build

.bachrcに追記

if which plenv > /dev/null; then eval "$(plenv init -)"; fi

最新版をダウンロード、インストール

$ plenv install 5.26.2
$ plenv global 5.26.2

パッケージマネージャーもインストール(pip的なやつ)

$ plenv install-cpanm
$ PLENV_INSTALL_CPANM="-v" plenv install-cpanm

そして local/lib.pm をインストール

$ cpan
$ install local/lib.pm 

npm installのオプションメモ

npm installする時につけるオプション、すぐ忘れるのでメモ。

インストール場所

command mean
-g グローバルインストール

package.jsonに追記する系のオプション

command mean
--save dependencies に追記
--no-save
--dry-run
-P, --save-prod
-D, --save-dev devDependenciesに追記|開発時のみに使用するパッケージ
-O, --save-optional
-E, --save-exact
-B, --save-buldle

devDependenciesとDependenciesの違いは、このpackege.jsonをnpmのパッケージとして公開した時、インクルードした場合はnpm install でDependencies(依存パッケージ)がインストールされ、このプロジェクトをgit clone してnpm install した時には開発用の依存パッケージdevDependenciesがインストールされる

ポリッドスクリーン系イベントのシステム周りの話

イベントレポ。自分は途中から企画に参加した、今回はプロマネ兼システム構築としての参加でした。

ここでは照明・音響・映像周りのシステムについてのメモ

照明

今回の照明周りの機材 f:id:MagmaChocolate:20180330011939p:plain

「前回よりも良いものを」ということで前回の反省を踏まえて今回挑戦したことです。

  • 事前プログラミングによる照明の自動制御と照明と映像の同期
  • 電飾を用いた立体的な演出
  • 生バンド演奏によるライブ
  • プロジェクター2台同時投影

事前プログラミングによる照明の自動制御と照明と映像の同期

第一回はパレータスSXで手動でオペして、ボーカロイド楽曲の速いテンポにオペレーターが付いて行けずいっぱいいっぱいだったので、2回目は自動化を導入。2回目では映像の再生ボタンと照明の再生ボタンをせーので押す方法で同期していた。今回3回目では2台のプロジェクターも含め3系統のタイミングを合わせる必要があったため手動の再生からArt-Netで再生を行うように変更。

QLC+からArt-Netを通じてVDMX5へ信号を流し、VDMX5で指定の信号を受信したら再生するように設定をしておく。VDMX5の詳細は別記事で書く予定。 企画段階ではプロジェクターが3台以上で、MMDのダンスの映像に加えホリゾントにも背景となる映像を投影し、照明に映像を加えた演出をしたいなど、色々な話が出ていたので。Midi・SMPTタイムコード・OSCなどの方法も検討したが、フレキシブルなシステム構築を目指しArt-Netでの同期を選んだ。 今回のイベントでは工数とスケジュールの関係やらなんやらで背景への映像投影のアイディアは次回以降のイベントに持ち越しにし、MMDの映像を舞台の上・下手から同時投影するのみとなった、今回はたまたま業務用のスイッチングハブを使うことができたのでパケットロス等のリスク対策は講じなかったが大事をとるならArt-NetではなくHDMIスプリッターなどで分岐した方がレイテンシ調整とかもしなくて良かったなーと終わってから思った。

今回のイベントでは14の楽曲を使用するため、1人で照明の打ち込みを行うのはスケジュール的にもキツキツだったし、これでは1人のスタッフしか経験や成長ができないということでどうにかして複数人で打ち込みができないかと模索。複数人のオペレータで分担して打ち込みの宿題を出した。QLC+には2つのプロジェクトデータを結合する機能は付いていないので他のソフトウェアを使用することも検討したが、スタッフ達のQLC+の導入期に他のソフトを覚えさせるのはラーニングコストが高いし、混乱を招くだろうと思いQLC+で行うことにした。プロジェクトデータ含めQLC+関連のデータは殆どがXMLファイルなのでマージ用のツールを作り、マージすることにした。この詳細も別記事で。 最終的には4人で14曲のデータを作成した。作成のフローはこんなかんじ。

  1. フィクスチャーリストファイルを作成
  2. 1で作成したフィクスチャーリストファイルを読み込み、プロジェクトデータを作成する
  3. QLC+の"タイムライン"を使用して照明を打ち込む
  4. 14曲分のデータを作成したら、回収し、自作したマージツールで1つにする

この期間が短い中でマージツールを作って、マージしてなので作業にかなりの工数を割いた、予想外の連続でうげーって言いながら作業してました。 この時に照明はQLC+のUniverse 1を使用し、OUTPUTはOPEN DMX USB互換品から1本DMX512-Aを出力し照明の制御を、QLC+のUniverse 2 のOUTPUTにはArt-Netで映像の再生のタイミングで信号を送信するように設定した。Universe2の1chにフィクスチャーのGeneric Dimmerを指定しておけばファンクションを作成できるので、そのファンクションをタイムライン上に配置すればOK

再生はQLC+のタイムラインのスタートをクリックするだけ、最後までほっとけばOK。楽チン!!

電飾を用いた立体的な演出

スクリーンへプロジェクターで投影していることから、プロジェクターよりも強い光をスクリーンの後ろに出すことができなかったので、後ろがダメなら前に出そうということでほぼ全ての灯体を客席頭上にむけ、さらに電飾も加えて迫り出してくるような照明を目指したつもり。

f:id:MagmaChocolate:20180331004259p:plain

使ったのはAmazonで購入した5mのLEDストリップライトを5M x 10本、メータ単価100円ぐらいなので5000円ぐらいです、でもこれだけじゃ光らないので別途Dimmerを用意する必要があります。今回使ったのはRGBと共通の+の4極をもつ12Vタイプで1本でRGBの3chをDMXで制御できれば良いです。秋月電子とかAmazonとかでも既製品のディマーが購入可能ですが、このDimmerがLEDよりも高い。今回は他のところにお金を回したかったので、自作して節約しました。30系統12Vで10000円ぐらいで作成できました。Arduino使えばDMXは簡単に扱えるので適当にプログラムを書き、ハードを適当に作ればいいです。4轍ぐらいかかった。

今回このDimmerは1本あたりDMXをRed,Greed,Blue,Dim,Stroboの5ch消費するので、電飾だけで50chも食う大食らいです。作成レポは別記事

やってみてわかったのが、以外と光量が強いこと。単体でピカピカしている分にはいいんですけど、10本もまとめて光ってるとかなりやかましい感じに。体感クリスマスのイルミネーションの1.5倍くらい眩しいです。さらに、LEDとはいえ1本で12V 3A消費するので1分程光らせるとテープが熱を持ち、12Vの変圧器のファンが勢い良く回り出します。LEDを伸ばさずに巻いたまま使うのはちょっと怖い。

生バンド演奏によるライブ

今回のライブは2部構成になってて、1部はMMDのみのライブ、2部からはVo初音ミク・Gt1,2・Dr・Baの生演奏・SE制作をお願いしました。 システムは単純で、MMDの動画のスレテオの音声のLを初音ミクで作成した音声のみにしMainSPへ、Rにはテンポを合わせるためのクリック音を入れ演者のイヤモニへ送ります。単純なシステムですが本番ではMMDの動画データに埋め込む必要があり、作業が並行して進められないことなどにより工数が予測しづらい作業です。

  1. VOCALOID初音ミクを使用し、Vo音声データを作成
  2. Vo音声データを元にDAWなどでクリック音やSEを作成し、LRに割り振った音声を作成
  3. 2の音声データをもとに調整をしMMDの動画を作成し、作成

プロジェクター2台同時投影

前回までのライブで映像が薄く見辛いことが課題でした。そこで今回はスクリーンを農ポリからシワができず波打ちにくい素材のペット板へ変更し、プロジェクターを上下手の2台同時投影に変更しました。写真は投影テスト時のもの

f:id:MagmaChocolate:20180331011739j:plain

[x] 2台で同じ映像を投影しているため、数センチのズレや十数msのズレも気になってしまい、かなりデリケートに。調整に10分ぐらいかかり時間のない本番時にはかなりの痛手です。不運なことに本番前にブレーカーが落ちたり、変電所トラブルで停電したりと調整が何度もやり直しになり焦りました。VDMX5の調整は細かく動かすのが難しく手こずります、練習必須。調整は後輩スタッフがプロだった。さらに今回使用したプロジェクターが映像のポジションを記憶できない仕様で、起動すると毎回違うポジションへ写すという謎仕様でなんだかなーってかんじです。

停電前に2回もブレーカーを落としてしまってそのときは許容オーバーだと思って別系統から電源を引き回してたんですがいま計算してみても、許容範囲で余裕があったはずなので停電の予兆だったのかもといまになって思ってます。ブレーカーを落とし慣れてしまったスタッフたちは対応が早くインシデントは発生せずよかったです。停電時にライブとは関係のない校内のエレベーターを確認しに行ってたのは流石と思いました。

ArduinoでDMXを受ける

DMXSerial使っただけ。この方法だとHardwareSerialを使うので、スケッチ書き込み時にTX,RXからピンを抜いておかないと書き込みエラーが出たりするので、組み込みで半田付けしてからスケッチ修正できない。ムムム

f:id:MagmaChocolate:20180105190616p:plain

https://qiita.com/loveandsheep/items/e1295ec9ce589 ...

DMXプロトコルをまとめる

DMX512-A仕様

  • シールド付きツイストペアケーブルを使用すること
  • RS-485では1500mまでの通信が保証されているが、RS-485の仕様の中でケーブルの長さを伸ばすと通信速度が下がるとされているので、DMX512-Aの通信速度250kbpsが保証されるのはケーブル長400mまでとされている。
  • RS-485の仕様では1Masterで32Slaveまでとされている
  • DMX512-Aのボーレートは250kpbsなので、1bitあたり4μsec (※1)
  • 端末にはターミネータ(終端抵抗)をつけるDMX512-Aでは基本的に120Ωとなっている(100-120)と幅を効かせて定義もされている。
  • 仕様上では1パケット長が最小で22.7msecになり、リフレッシュレートは最大で44Hzになる

※1: 仕様では基本250kbpsとしているが245 ≤ n ≤ 255kbpsまで認めているので、1bitは3.92 ≤ n ≤ 4.08µsecまでと幅がある。

パケット仕様

パケットは以下のフレームで構成されている。

http://www.iar.unicamp.br/lab/luz/ld/C%EAnica/Manuais/dmx_usit.pdf

f:id:MagmaChocolate:20180102234649p:plain f:id:MagmaChocolate:20180102234658p:plain

No. Frame Time Level
1 "SPACE" for Break 88µsec < 1sec ※1 LOW
2 "MARK" After Break (MAB) 8µsec≤n<1sec HIGH
3 START Bit 1bit (4µsec) LOW
4 SLOT nnn Data 8bit (32µsec) (0~512 SLOT)
5 STOP Bit 2bit (8µsec) HIGH
6 "MARK" Time Between slots 0sec≤n<1sec HIGH
7 "MARK" Before Break (MBB) 0sec≤n<1sec HIGH

3~6を513回繰り返します。

※1:仕様では88µsec以上としか書かれていないが、パケット全体を1sec以内に収めることが書かれているので、事実上制限があることになりそう?

この調子で1パケットで513 SLOTのDataを送信します、このDataを仕様内ではSLOTと呼び、最初の0SLOTはSTART CODEで1SLOTがDMXの1ch,2SLOTが2ch...

START CODE

DMX512-Aでは調光信号の他、イロイロな信号を流せるようになった、この時にこのStart bitに仕様で定義されているコードを送信することで受信側はなんの信号か判断できるようになっているがこのコードをちゃんと識別しれくれない機器もある。RDM信号流したら安物ムービングがピクピク動くからなんだと思ったら受け取った信号を全て調光信号として受け取る仕様らしく何しても動くやつとかある。 パケットの0 SLOTに以下の通りのコードを送信すればいいらしい。

NAME CODE
Lighting Data 0x00 (0000 0000)
Network Test 0x55 (0101 0101)
Text Packet 0x17 (0001 0111)
Remote Device Management 0xCC (1100 1100)
System Information Packet 0xCF (1100 1111)
Dimmer Curve Select 0xFF (1111 1111)

ArduinoでDMX送信

格安ArudinoでDMXを送信する

部品

配線

f:id:MagmaChocolate:20180101214426p:plain

スケッチ

DmxSimpleをとりあえず書き込んでサンプルを動かしてみた。 このライブラリデフォルトのPinアサインは上の図の通りだが、コード内で別途指定すれば変更できるっぽい。

SerialToDmxはPCからのシリアル画面から{ch番号}c{ゲージ}wって感じで送ってやれば送信できる、5chに255を出力すると5c255wと送信すればいいらしい。

FadeUpはPinアサインがデフォルトから変更されているので、

// DmxSimple.usePin(3);

しとけばとりあえず動いた。

NetlifyとGithubで独自ドメインのサイトをHTTPS化したメモ

事の発端

IOS 11キタ━(゚∀゚)━!  Safariからカメラの映像が取得できる! これでアプリではなくブラウザからARできるようになった!と喜んでいたら、このカメラのapihttpsじゃないとセキュリティ的な問題で動かないのである。

Github pagesで独自ドメインホスティングしているサイトをHTTPSにしたいけどお金はない。

すでに導入レポは検索すればいくつも見つかるものの、どうも日本語の情報が少ないのでメモすることにした。

使ったもの

  • Github
  • Netlify
  • お名前.com

手順

  1. お名前.comでドメインを取得します。
  2. Githubに公開するサイトのファイル一式をpushしておきます。

    一度Github pagesで公開してみて問題がないことを確認しておきましょう。設定で有効化して、HTTPSにチェックを入れればhttps://<username>.github.io/<repository name>/でアクセスできます。

  3. Netlifyに登録します。

    www.netlify.com Githubアカウントでログインし、先ほどpushしたリポジトリを選択し、デプロイしましょう。

  4. Netlifyのsite nameを変更しましょう

    デプロイをするとデフォルトでランダムな英単語が割り当てられるので、変更しなくても問題はないが変更しておきましょう。

    General -> Setting -> Site details -> Change site name から設定します。 f:id:MagmaChocolate:20171015014625p:plain

  5. カスタムドメインを設定しましょう

    Domain management -> Domains -> Custom domain に取得しておいたドメインを設定します。 ここで、Netlifyはwww付きのドメインにすることを勧めてきます。DoS攻撃から守りやすいとか、ロードが早いとか色々恩恵があるらしいのですが、それよりもURLが短くなる方がいいなって思ったので、自分はwwwなしにしました。 f:id:MagmaChocolate:20171015015607p:plain

    設定後、NetlifyのDNSを利用するので Use Netlify DNS を押します。4つURLが表示されると思います。これは次の作業で使うので覚えときましょう。

  6. ドメインの設定をしましょう

    今度はお名前.comでドメインの設定をしていきます。

    ログイン後、ネームサーバーの設定 -> DNS関連機能の設定 にAレコードとCNAMEを追加します。

    • Aレコードで 104.198.14.52を追加します。
    • CNAMEにwwwをつけてNetlifyで設定したURLを追加します。<site name>.netlify.comです

    f:id:MagmaChocolate:20171015021014p:plain

    次に、DNSを変更します。

    ネームサーバーの設定 -> ネームサーバーの変更 -> 他社のネームサーバーを利用 に4でNetlifyにドメインを設定した時に出てきた4つのDNSのURLを設定します。人によってこのURLは異なるみたいです。

    f:id:MagmaChocolate:20171015021555p:plain

    設定が反映されると、独自ドメインにアクセスするとHPが表示されると思います。このままではまだHTTPです。いよいよ次でHTTPSになります。

  7. NetlifyでSSLを有効化しましょう

    Netlifyで Domain management -> Domains -> HTTPS -> SSL/TLS certificateVerify DNS configrationをクリックしLet's Encypt certificateをクリックです。

    f:id:MagmaChocolate:20171015022037p:plain

    お疲れ様でした、試しにhttps://でアクセスしてみましょう、表示されれば成功です。セキュリティーがどーたらと表示されてしまう場合はしばらく待ってれば反映されるっぽいです。

    最後の仕上げとして、httpでアクセスがあった時にhttpsにリダイレクトさせたいので Force TLS connectionsを有効化して完了です。そんなの表示されてないよって時はリロードするとたぶん出てきます。

    f:id:MagmaChocolate:20171015023118p:plain

コメント

ドメイン周りの設定は順番が大切なので、3回ぐらい失敗してサイトを消してやり直してを繰り返してしまった。勉強不足だ。 そんなこんなで、準備は整ったので、AR.jsとやらに挑戦します。