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 はタブがバックグラウンドにいった場合などに呼ばれる頻度がとても落ちることがあるので、本来のイベントも受けて保険としています。そして「やっぱ高頻度じゃなくてもいいや」となっても該当部分をコメントアウトするだけですみます。

  1. トップ
  2. tech
  3. video/audio 要素の timeupdate イベントを高頻度にする

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 で予行練習をすることにしました。

VPS 環境を Mondo Rescue でバックアップ

Mondo Rescue のインストール

各ディストリビューションごとにパッケージが提供されているので、これを使ってみます。トップページに最近のリリースファイルがいっぱい列挙されていますが、これは無視して 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 で手元に転送しておきます。

Virtual Box に環境を復元してみる

先にいくつかハマったポイントを列挙しておきます

  • パーティション番号の最大が4までなので5を使っているとエラる
  • F12 を押すと終了するので注意
  • mkinitrd コマンドが存在しなくて再生成できなかった。が起動した。
    • Ubuntu は mkinitramfs らしい
    • mkinitramfs というか update-initramfs -u が一番簡単っぽい
  • インストール直後にネットワークインターフェイスの設定をやること
    • /etc/network/interfaces を編集
  • /etc/hosts に hostname に関するエントリを追加しておくこと (後述)

手順

Virtual Box 上で「新規仮想マシン」

  • 「Linux」「Ubuntu (64bit)」 で「仮想ハードディスクを作成する」で「作成」
  • 仮想ハードディスクはバックアップしたファイルが納まるなら任意
    • ファイルコピーなのでパーティションサイズをあわせる必要はない
仮想マシン設定

「仮想マシン設定ウィンドウ」→「ストレージ」で、「コントローラ: 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 に変えました。

このあとパーティションのフォーマット・ディスクコピーなどがあります。

コピーが終わったあと

  • 「Initialize boot loader?」→ YES
  • 「You will now be able to re-generate your initrd.」→ YES
    • chroot / された状態でシェルが開くなので cd /boot にいって initramfs
    • 今回はやらなかった
  • 「Did you change the mountlist or cloned the system?」→ YES
  • 「Boot device」を /dev/sda に
  • 「You will now edit fstab, mtab, device.map and menu.lst/grub.cfg in order to fix grub install」と言われて nano が起動するので vda を検索 (C-w) して置換していく
    • fstab が UUID ベースで書かれていたのを /dev/sda1 と /dev/sda2 に

これでインストールが終わり、シェルが開くので、

  • /etc/network/interfaces を編集
  • /etc/hosts に hostname に関するエントリがあることを確認。ないなら増やしとく

ディスクまわりの変更は Virtual Box だから必要なので、さくらのVPS間の復元では必要ないはず…

Ubuntu のネットワークまわり

/etc/init/failsafe.conf を編集しといたほうがいい

Waiting for network configuration…
Waiting up to 60more seconds for network configuration…

で2分も待たされて大変うざい。

sudo するとハングする

sudo すると Password 入力がはじまる前にハングする。が、実際はハングしてないので3分ぐらい待てば起動する。

hostname があってないとハングするらしい。どうしよもないのでリカバリモードにでやるか、/etc/hosts に 127.0.0.1 hostname を追加する。

  1. トップ
  2. tech
  3. さくらのVPSを Mondo Rescue でバックアップして Virtual Box に再現