結局 UEFI ブートするディスクを作るにはどうすればいいの
今までずっと BIOS ブートばかりでセットアップしてたけど、今回の MB ではなんかブートできなかったので仕方なく今になって初めて UEFI ブートでセットアップした……
- インストールメディアから UEFI ブートする
- EFI System Partition (ESP) を用意する
- 容量は 512MB がいいらしいって見たけど、本当にそんなに容量が必要なの…
- gdisk で作るときは typecode を ef00 にして、
mkfs.fat -F 32 /dev/sda1
みたいにフォーマットすれば OK - https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface#EFI_System_Partition
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug
- いつも通り /mnt にインストール先のパーティションを mount して arch-chroot して諸々セットアップした後に、↑をやる
- ESP は /mnt/boot/efi にマウントしておく
- archwiki にあるように、dosfstools と efibootmgr も先にインストールしておく
- インストールメディアから UEFI でブートしてないと、ここでなんか efi 関係の失敗のメッセージが表示される
- ↑で失敗しても最後に「Installation finished. No error reported.」と言って終わるので、この No error reported を信じてはいけない
- いつも通り /mnt にインストール先のパーティションを mount して arch-chroot して諸々セットアップした後に、↑をやる
switch_point について紹介した
もう数ヶ月くらい前になるけど Rails (ActiveRecord) で R/W splitting を行う switch_point という gem を書いた。 Rails アップグレード作業の中で、魔改造された acts_as_readonlyable をメンテすることに嫌気がさして、もっとマシな実装方法があるはずと思って勢いでコアの実装をして、それから実際のアプリケーションに組み込んで本番に投入していきながら機能追加やバグ修正を重ねて今の形になった。
先日の RubyKaigi 2014 の LT で、R/W Splitting in Rails というタイトルで switch_point の紹介をした。 今まで使い方を真面目に書いてなかったけど、LT 内で軽く紹介しつつ会期中に典型的な使い方を README に書いた。メソッドやクラスのドキュメントは全然書いてない (要るのかな…)。
LT の発表では言ってなかったけど、mirakui さんによる開発者ブログの記事 にあるように、switch_point は今のクックパッド本体アプリケーションで実際に本番で使われている。
switch_point は、
- R/W splitting のみに注力
- シャーディングはしない
- マイグレーションも支援しない
- Rails の激しい変更についていきやすい設計・実装
- 内部実装 (普通の Rails アプリケーションからは直接使われることの無いクラスやメソッド) になるべく依存しない
- ActiveRecord の内部実装はなぜか変わりやすい…
- 内部実装 (普通の Rails アプリケーションからは直接使われることの無いクラスやメソッド) になるべく依存しない
- あまり implicit な動作は行わない
- いいかんじに Master/Slave の選択を行うようなことをなるべくサポートしない
- あえて Master に SELECT したいときには自然にそれが行えるようにする
あたりに気をつけて作っていて、実際このままのコードで次の Rails 4.2 でも動きそう。 自分には必要無いので全く検証してないけど、Rails 3.1 とか 3.0 とか、もしかしたら更に前のバージョンでもそのまま動くかもしれない。 ちなみに switch_point という名前はレールと切り替えからの連想で付けていて自分ではわりと気に入ってる。
octopus はよくできてそうだと思う一方、以下のことが気になって乗っかる気になれなかった。
- Rails バージョンアップ時が心配
- アプリケーションが依存している gem の対応が遅いと、アプリケーションの Rails バージョンアップ時に足枷になりやすい
- メンテされなくなったときが怖い
- 今のところ Rails の変更についていっているようだけど、今後どうなるか不安
- Rails バージョンアップで壊れやすそうなので、継続したメンテが必要
Octopus.rails41?
みたいなメソッドを見るのがつらい https://github.com/tchandy/octopus/blob/v0.8.3/lib/octopus.rb#L67-L77
- メンテされなくなったときに、自分でメンテしてしていくのがつらそう
- 今のところ Rails の変更についていっているようだけど、今後どうなるか不安
- メインの機能はシャーディング
- コード量やモンキーパッチ量が多くなっているのは、いいかんじにシャーディングを実現するためのように見える
- でもシャーディングは要らなくて、R/W splitting だけが欲しい
シャーディングが必要な場合は引き続き octopus がよさそうな現状ですが、R/W splitting のみで十分な場合は switch_point も検討してもらえると嬉しいです。
字幕検索
Elasticsearch の全文検索を使ってみたくて、字幕データ (.ass 形式) を Elasticsearch に入れてみたら楽しかった。 https://github.com/eagletmt/eagletmt-recutils/tree/master/caption-search
TS からの字幕抽出は assdumper でやってる (これまだ若干バグってて字幕テキストの最後に変な文字が入ったりしてる……)。
最初は各字幕の開始時刻・終了時刻も入れてたけど、それを知ってもあんまり嬉しくないと思って、字幕は単なるテキストとして入れた。 自分は kaede を録画システムとして使っていて、これをそのまま使えばタイトルやサブタイトルがファイル名に入るので、ファイル名と字幕テキストさえあれば十分だと思い、それしか Elasticsearch に入れてない。
自然言語処理技術とか検索技術とか全く知らないけど、日本語テキストがいいかんじに検索可能になって Elasticsearch + kuromoji 便利だった。 あと U 局アニメも字幕つけてほしい。
Linux デスクトップセットアップトラブルシューティング
最近クリーンインストールしたときに遭遇してちょっと手間取ったやつです。
X 動かすのに何インストールすればいいんだっけ
xorg (group), xorg-xinit, xf86-video-intel (intel-dri)
ターミナルで ASCII 文字も全角幅で表示される
ロケール (LANG) が ja_JP.UTF-8 になってない
ターミナルで▽とか☆とかがつぶれて表示される
UTF-8-CJK の設定し忘れ、ロケールの設定し忘れ https://github.com/eagletmt/misc/blob/master/ruby/ambiwidth.rb
uim を入れたのに C-j がきかない
gtk-query-immodules-2.0 --update-cache
bluetooth の設定の仕方忘れた
bluetoothctl
でペアリング。udev の rule を書いて起動時に hci0 を開くようにする。
https://wiki.archlinux.org/index.php/Bluetooth
なんかブラウザのフォントのレンダリングが汚ない
fontconfig の設定とか書けばいいんだっけ…?
裸族の集合住宅を買った
ディスクを買い足したくなったので、そのために裸族の集合住宅をついに買った。
センチュリー 裸族の集合住宅5Bay SATA6G USB3.0&eSATA CRSJ535EU3S6G
- 出版社/メーカー: センチュリー
- 発売日: 2013/09/21
- メディア: Personal Computers
- この商品を含むブログを見る
eSATA と USB 3.0 で接続できて、まぁ普通は eSATA で接続したいと思う。 ただし、eSATA を使うにはポートマルチプライヤ対応が必須で (ポートマルチプライヤに対応してないと1つのディスクしか見えない)、そのために玄人指向の SATA3E2-PCIe も買った。
- 出版社/メーカー: 玄人志向
- 発売日: 2009/11/15
- メディア: Personal Computers
- クリック: 4回
- この商品を含むブログ (1件) を見る
わりと定番の組み合わせっぽいけど、Linux でちゃんと動くか不安だった。 とりあえず WD40EFRX を2台挿してみたけど、PC からちゃんと2台とも見えて普通に動いてる。 これらの2台のディスクはなんとなく興味本位で LVM で束ねて1つの大きなディスクに見えるようにしてみて、バックアップ領域として使われる予定。 転送速度も特に問題なさそうで、あとはこの先安定的に動作してくれることを祈ってる。
余談。新しいディスクは普通に ext4 でフォーマットしたんだけど、テストで書き込みを行った後も新規のディスクに定期的に 4MB/s くらいで write があって、iotop で見たら ext4lazyinit だった。 あんまりよく知らないけど、mkfs を高速化するために inode table の初期化を遅延実行するやつらしい。 たしかにディスクサイズに対して mkfs.ext4 は早かった。
追記 2014-07-16
さすがに 4TB x 2 で1つの仮想ディスク作るのはデータロストリスクの観点から狂気だったのでやめた。
あとたまに裸族の集合住宅の電源が落ちる現象に悩んでいたけど、どうやら壊れたディスクを繋いでいて、そのディスクを使っているときに IO Error が発生すると落ちるっぽい。 ディスクを使ってなくても繋いでるだけでもたまに落ちてたけど、もしかしたら smartd によるアクセス起因かもしれない。 とにかく、壊れたディスクを外したら安定したように見える。 SMART のエラーを検知したらすぐに裸族の集合住宅からは外して、直接本体に繋いでデータのコピーをとって捨てるような運用が必要な気がしている。
iPhone 4S から Nexus 5 に移行して1ヶ月ちょっと経った感想
感想
- 端末が大きい
- iPhone は完全に片手だけで操作できたけど、Nexus 5 のサイズになると厳しい
- 慣れてきたけどときどき気になる
- 画面のバックライトの明るさの調整が雑
- ロック画面で見れる通知の情報が少ない
- キーパッドの切り替えが煩雑
- 全般的な操作は快適
- インテント最高
- Linux 環境でも Android アプリは開発できる
- iTunes で買った音楽をどうするのか問題がまだ解決してない
- あとこれから音楽をどこでどう買おう問題も
- iTunes Store 自体は良いので PC とか Android から買えるようになってほしい…
- データ通信を月に1GBもしてないので、ミニマムスタートプランで常にクーポンを ON にしてて平気
- というか500MBも使ってない
- あとはコミケ的な環境でも使えることを期待してる
2014年3月の録画視聴環境
半分自分用のメモです。
ハードウェア構成
http://wanko.cc/machines.html の signum が録画、ストレージ、エンコードのすべての役割を担ってる。
- 録画
- PT2 x 1 (地上波 x 2、BS x 1)
- 分波器とケーブル買えば BS x 2 にできるけど要らなそう
- PT3 x 1 (地上波 x 2、BS x 2)
- PT2 x 1 (地上波 x 2、BS x 1)
- B-CAS カードリーダ
ソフトウェア構成
- OS
- ArchLinux
- ドライバ
- レコーダ
- 録画システム kaede
- 自作 https://github.com/eagletmt/kaede
- しょぼいカレンダー をソースにしてレコーダの起動を行い、前処理を行ってから TS をエンコードキューに入れる
- 詳細は後述
- エンコーダ
録画システム
最近自作し直した。
- レコーダのチャンネルとしょぼいカレンダー上のチャンネルIDの対応表
- 録画したい tid
を設定しておくと、登録した tid の番組を片っ端から録画していくやつ。 「この回は MX で録ったから BS11 の回は録画しなくていいや」とかそういうことはやらないでとにかく録画する。
- updater
- 定期的にしょぼいカレンダーのデータを取得してローカルの番組 DB を更新し、時刻に変化があったら scheduler をリロードさせる (kill -HUP)
- scheduler
- 登録されてる tid の番組の開始時刻に recorder を起動する
- 前のバージョンはこの部分を atd でやってたけど、いろいろつらくなって timerfd で自分で実装した
- recorder の起動前後に好きな処理を追加できる
- 登録されてる tid の番組の開始時刻に recorder を起動する
- recorder
- 録画する
- recpt1 が出力した TS を tail -f して、B25 のデコーダと字幕抽出の2つにリアルタイムにデータを流してる
- まれに B25 のデコードに失敗するので、recpt1 でデバイスファイルから読み込んだデータを一次ソースとしてディスクに保存してから後続の処理に回したいのでこうなってる
今は recorder の前後の処理として、
- 録画前
- @eaglercd へ録画予告ポスト
- 録画後
を行ってる。
視聴
- PC
- iPad
その他
Chinachu がずっと気になっていながらまだ一度も試してない。