見始めたのが最近だったので、もはやブルーレイも出てるというのに…という感じだけど、立川シネマシティで爆音上映というのを見てきた。
特に爆音のを見たかったわけじゃないけど、そもそも他の映画館の上演はのきなみ終わってたのでここしかなかった。が、結果的には爆音とても良かった。低音だけ爆音になってるみたいで、そんなに違和感なく見れた。
内容的には最高だった……
で結局ブルーレイ版を買ってしまった。
見始めたのが最近だったので、もはやブルーレイも出てるというのに…という感じだけど、立川シネマシティで爆音上映というのを見てきた。
特に爆音のを見たかったわけじゃないけど、そもそも他の映画館の上演はのきなみ終わってたのでここしかなかった。が、結果的には爆音とても良かった。低音だけ爆音になってるみたいで、そんなに違和感なく見れた。
内容的には最高だった……
で結局ブルーレイ版を買ってしまった。
生活にとても支障があるとは言えないが、ここ2年ぐらいで急激に遠くが見えにくくなってきたので、どうしても気になっていた。
「いきなり見えなくなってきた」と思うパターン、大学1年生のときに一度あり、眼科いってみたら「全然問題ない」と塩対応されたり、去年も健康診断で0.2ぐらいの判定になって眼科にいったが「矯正するほどではない」となったりで結局矯正してなかったが、今年の健康診断だと両目0.5ぐらいで、やっぱ気になるので一度矯正してみることにした。
店舗で度数測った結果、両眼 -0.25 と、実際問題としてはほとんど度は入ってない。加えて左目だけ乱視矯正がさらに入ってる。これでもかけてみると全然違くて、1080p→4K ぐらいの感覚はある……
かなり弱い矯正なので疲れるなら今後かけないかもしれない。
video/audio 要素には再生時間が変わったときに timeupdate イベントが発生します。これは Chrome においては最頻でも 250ms ごとにしか呼ばれません (500ms のときもある)。
もっと頻度をあげてイベントをとりたいと思うことがあったので以下のようにしました。
video.addEventListener('loadedmetadata', function (e) {
var time = video.currentTime;
requestAnimationFrame(function me () {
if (time !== video.currentTime) {
time = video.currentTime;
video.dispatchEvent(new CustomEvent("timeupdate"));
}
requestAnimationFrame(me);
});
});
video.addEventListener('timeupdate', function (e) {
console.log(video.currentTime);
});
requestAnimationFrame で定期的に currentTime を監視して timeupdate を自力で発火させるアプローチです。
元の timeupdate イベントも一応受けとっています。というのも requestAnimationFrame はタブがバックグラウンドにいった場合などに呼ばれる頻度がとても落ちることがあるので、本来のイベントも受けて保険としています。そして「やっぱ高頻度じゃなくてもいいや」となっても該当部分をコメントアウトするだけですみます。
Ubuntu 16.04 LTS にしようと思ったが、前バージョンのLTS (14.04) から上げるには 16.04.1 (本リリースから3ヶ月後にリリース) を待たないといけないらしい。
リリーススケジュールによると7月21日にリリース予定。まだちょっと早かった。
do-release-upgrade に引数を指定すれば入れれることは入れれるみたいですが、地雷を踏みたくないためにLTSを使ってるのでそういうことはしません。
現在は Ubuntu 12.04 を使っております。12.04 にするときは 10.04 のサポートが終わってからやるというひどさでしたが、さすがにダメだろうということで最近早めのアップデートを考えてます。
ただ、ディストリビューションアップデートが不安なので Virtual Box で予行練習をすることにしました。
各ディストリビューションごとにパッケージが提供されているので、これを使ってみます。トップページに最近のリリースファイルがいっぱい列挙されていますが、これは無視して Downloads ページに行き、ftp サーバを直接見ます。
該当するディトリビューション・バージョンのftpディレクトリを開いて、必要ファイルをダウンロードします。Ubuntu の場合、sources.list が提供されているようなので、これを使います。
wget ftp://ftp.mondorescue.org/ubuntu/12.04/mondorescue.sources.list sudo mv mondorescue.sources.list /etc/apt/sources.list.d/ sudo apt-get update sudo apt-get install mindi mindi-busybox mondo
これでインストールできました。なお mindi とはブータブルディスク作成用の Linux mini-distribution とのこと。mondo はミュータントタートルズ由来みたいなことが書いてありますがよくわからず。
バックアップしたのち、ローカルに転送して捨てるので、/tmp/backup へバックアップファイルを保存することとします
mkdir /tmp/backup sudo mondoarchive -O -i -N -d /tmp/backup -s 30g -O バックアップを作成 -i ISOイメージとする -N 全てのネットワークファイルシステムを無視する -d バックアップの保存先を /tmp/backup に -s 30g バックアップファイルの分割単位を30GBに(実質分割しない)
/tmp 以下はデフォルトで非バックアップ対象なので、-E オプションはつけていません。なお -d の指定ディレクトリは前もって作っておく必要があります。
手元の環境だと約1時間かかりました。(バックアップ対象約8GB メモリ1GB HDD 出力 mondorescue-1.iso 3.3G)
このファイルを scp で手元に転送しておきます。
先にいくつかハマったポイントを列挙しておきます
「仮想マシン設定ウィンドウ」→「ストレージ」で、「コントローラ: IDE」にある光学ドライブに mondorescue-1.iso を指定
「ネットワーク」で「ブリッジアダプター」にしておく。ホストコンピュータと同じLANに参加するようになる。
nuke か interactive で起動します。違う環境への復元なので nuke でも結局 interactive になります。
さくらのVPSでは /dev/vda1 (ext4) と/dev/vda5 (swap) ですが、Virtual Box だと /dev/sda なので、mountlist を適当に編集します。/dev/sda1 と /dev/sda2 に変えました。
このあとパーティションのフォーマット・ディスクコピーなどがあります。
コピーが終わったあと
これでインストールが終わり、シェルが開くので、
ディスクまわりの変更は Virtual Box だから必要なので、さくらのVPS間の復元では必要ないはず…
/etc/init/failsafe.conf を編集しといたほうがいい
Waiting for network configuration… Waiting up to 60more seconds for network configuration…
で2分も待たされて大変うざい。
sudo すると Password 入力がはじまる前にハングする。が、実際はハングしてないので3分ぐらい待てば起動する。
hostname があってないとハングするらしい。どうしよもないのでリカバリモードにでやるか、/etc/hosts に 127.0.0.1 hostname を追加する。
リファレンスマニュアル閲覧用の Chemr だけど、ベースの Electron を1.2.1にバージョンアップした。
しかし codesign するとあいかわらずフリーズするので改めて調べてみたら Console.app に以下のようなログがでていた。
sandboxd[131]: ([19968]) Chemr Helper(19968) deny mach-lookup org.chromium.Chromium.rohitfork.19966 sandboxd[131]: ([19973]) Chemr Helper(19973) deny mach-lookup org.chromium.Chromium.rohitfork.19966 sandboxd[131]: ([19974]) Chemr Helper(19974) deny mach-lookup org.chromium.Chromium.rohitfork.19966
ググってみると Electron broken on OS X in Apple Sandboxed apps (App Store) · Issue #3871 · electron/electron · GitHub あたりの問題のようだ。
Sign Your App のentitlements あたりに変更が必要になった模様。
長いので結論だけ書くと以下のようにすればなおった。electron-packager を使っている前提で
Apple Developer Center にいくと、Membership Details に Team ID という項目がある。
あるいはコードサイン用に Key Chain に自分用の証明書を入れていると思うが、その証明書名の括弧の中の文字列がチームIDとなっている。
<plist version="1.0">
<dict>
<key>ElectronTeamID</key>
<string>$TEAM_ID$</string>
</dict>
</plist>
こんな感じで Info.plist を作っておく、不完全なファイルに見えるが、残りは electron-packager が埋めるのでこれで良い。
こうした上で electron-packager に --extend-info=dev/Info.plist をつけて実行する。
parent.plist を以下のようにする。com.apple.security.network.client は今回の件とは関係なく、Chemr に必要なのでつけているだけで、必須ではない。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.application-groups</key>
<string>$TEAM_ID$.net.lowreal.Chemr</string>
</dict>
</plist>
child.plist は以下のようにする
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
electron-packager にも codesign のオプションはあるが、使ってない。electron-osx-sign を直接呼びだしている。
./node_modules/.bin/electron-osx-sign --no-pre-auto-entitlements --version=1.2.0 "$APP_PATH" --entitlements=dev/parent.plist --entitlements-inherit=dev/child.plist --identity="$APP_KEY"
こんな感じで、上記 entitlements ファイルを指定して codesign させる。
なお electron-osx-sign の 0.4.0-beta4 以上だとこの entitlements の処理を自動でやってくれるみたいだが、なんとなく自動的にやるのが信用ならないのでこれはつかってない。
使ったツールのバージョン
デバッグのため、とりあえず証明書なしでサンドボックスを有効にしたい場合、ad-hoc signing でも動かすことができた。これは identity に - を指定することでできる。
すなわち
./node_modules/.bin/electron-osx-sign --no-pre-auto-entitlements --platform=mas --version=1.2.0 "$APP_PATH" --entitlements=dev/parent.plist --entitlements-inherit=dev/child.plist --identity="-"
のようにする。おそらく Team ID は一致さえしていればなんでもいい(と思うが試してはいない)
環境変数 DEBUG を設定すると詳細なログがでるようになる。DEBUG='electron-osx-sign' これは debug という npm パッケージを使っているため。
リファラを眺めていると Qiita:Team らしきものが稀にあるけど、https 強制にしてないのかな。もちろんアクセスしても404なので実害はほぼないと思うけど、URL にユーザIDが入っているので場合によっては誰が言及しているかはわかることがある。
と思ったけどリファラがそもそも https だった。Referrer Policy で意図的に送ってるのかな。なんの意図かは謎だけど