最近の更新でisearchからmigemoれないことに気付いた。
git logでlogを漁ってみたら、b3fc7a3e763fb260cd932dc6aedbe7b4c810a73cでsearch-default-regexp-mode (cf. http://typeinf-memo.blogspot.com/2015/11/emacs-gitisearchmigemo.html)がsearch-default-modeにrenameされたとある。これにnilをbindするとmigemoが使えるようになる。
(setq search-default-mode nil)
2016年2月11日木曜日
2016年1月31日日曜日
Linux boxでラジオ番組を自動録音する
*** 注意 (2018-12-09追記) ***
この記事は古いため以下の記事を参照されたい:
*** 注意ここまで ***
概要
やりたいこと
Linux boxのline-inに接続されているtunerから流れてくるラジオ番組を自動で録音したい
Solution
- line-inから録音してOgg Vorbisにencodingするscriptを書く
- cronに登録して定期的に走らせる
これだけのいたって簡単なお仕事……のはずがどうしてこうなった。
落とし穴と対策
- pipeしたprocessの殺し方にハマる
- cronのdefaultのshellは/bin/sh
- PulseAudio関連のprogramをcronから呼んだ時の挙動にハマる
対策としては:
- parec ... | oggenc ... の組み合わせではなくffmpegで録音する → 1、2
- 環境変数XDG_RUNTIME_DIRを渡す → 3
わかったこと
- pipeでつないだprocessesの殺し方
- parecの他にもffmpegで録音できる
- PulseAudioを使う時は環境変数に注意
結論
こんな感じのscriptをcronで回している:
# 録音
XDG_RUNTIME_DIR=/run/user/1000 /usr/local/bin/ffmpeg -f pulse -ac 2 -ar 44100 -i
alsa_input.pci-0000_00_1b.0.analog-stereo -acodec libvorbis -q 3 "${FILEPATH}" &
RECPID=$!
# 録音停止
sleep ${DURATION}
kill -TERM ${RECPID}
補足
なお、ffmpegではdurationを指定できるので:
... /usr/local/bin/ffmpeg -f pulse -ac 2 -ar 44100 -i alsa_input.pci-0000_00_1b.0.analog-stereo -acodec libvorbis -q 3 -t ${DURATION} ${FILEPATH} &
とかでも良さそう。また、ffmpegのかわりにparecとoggencを組み合わせても良い:
parec --fix-format --fix-rate --file-format=raw --format=s16ne > >(oggenc -B 16
-C 2 -q 3 -o "${FILEPATH}" - >/dev/null 2>&1) &
ただし、この方法 (process substitution)はbashやzshでないと使えないので注意が必要。因みに:
parec ... | oggenc ...
とpipeでつないでも良いが、この場合job単位でprocessesを殺す必要がある (kill %%とかで殺せる)ので少々面倒。
補足2
XDG_RUNTIME_DIR=/run/user/1000 /usr/local/bin/ffmpeg -f alsa -ac 2 -ar 44100 -i
pulse -acodec libvorbis -q 3 "${FILEPATH}" &
で運用していたが、これだとdeviceの認識順と共にdefaultのsourceが変わって、無音の状態になることがあった。そこでdeviceを限定するため以下のように変更:
XDG_RUNTIME_DIR=/run/user/1000 /usr/local/bin/ffmpeg -f pulse -ac 2 -ar 44100 -i
alsa_input.pci-0000_00_1b.0.analog-stereo -acodec libvorbis -q 3 "${FILEPATH}" &
おまけ
また、Debian sidだと/usr/bin/mailは/etc/alternatives/mailへのsymlinkであり、これは更に/usr/bin/mail.mailutilsへのsymlinkで、如何なるpackageにも属していない。
参考URL
- https://wiki.archlinux.org/index.php/PulseAudio
- http://qiita.com/mpyw/items/9293d1bed7d16a9bfe5c
- http://mocha.freeshell.org/audio.html
補足2関連
- [Capture/Desktop – FFmpeg](https://trac.ffmpeg.org/wiki/Capture/Desktop)
- [FFmpeg Devices Documentation](https://www.ffmpeg.org/ffmpeg-devices.html)
ラベル:
cron,
Debian,
ffmpeg,
Ogg Vorbis,
PulseAudio,
sh,
zsh
2015年11月15日日曜日
helm-swoopでmigemoを有効にする
isearch中にC-;でhelm-swoopを起動する設定にしているが、こちらもいつの間にかmigemoで検索できなくなっていたので修正。
(setq helm-migemo-mode 1)を設定ファイル (~/.emacsとか~/.emacs.d/init.elあたり)に追記しておく。
続・emacs-gitのisearchでmigemoを利用可能にする
今日になって再びisearchでmigemoが使えなくなっていることに気付いた。
以下のcommitが怪しいと踏んだ:
以下のcommitが怪しいと踏んだ:
commit 4d82aa3abdad1871b99f0a9e56fe54ec497bd290*scratch* bufferで:
Author: Artur Malabarba <bruce.connor.am@gmail.com>
Date: Tue Nov 10 13:04:02 2015 +0000
* lisp/isearch.el (search-default-regexp-mode): change default value
(setq search-default-regexp-mode nil)をevaluateしてからC-sでisearchしてみるとmigemoが使える状態に戻った。
ラベル:
Emacs,
migemo,
workaround
2015年8月3日月曜日
Debian unstable (sid)やexperimentalと上手く付き合う方法
はじめに
数日前の更新で、libstdc++6がlibboost-date-time1.55.0とconflictして、それにdependしているlibreoffice-coreがuninstall対象になり、それにdependしているLibreOffice (LO)全体が連鎖的にuninstallされる……という状態に陥った。Unstableやexperimentalで遊んでいる (desktop目的に常用している)人ならばしょっちゅう遭遇するであろう実に微笑ましい光景である。
丁度LibreOffice 5がexperimentalに入ったみたいなので試してみたいと思ったのだが、それ以前にLO4.xシリーズもこの不具合でuninstallされるのは頂けないので、workaroundでごまかしてみる。
Debian package systemに関する基礎知識
apt-getやaptitudeを用いたpackage管理の仕組みで知るべきことは多くない。1. それぞれのpackageはdependency (依存関係)を書いたcontrol fileを含む
2. package systemはcontrol fileの内容を見てdependencyを知る
原因と対策
* libreoffice-coreがlibboost-date-time1.55.0にdependしている* libboost-date-time1.55.0はlibstdc++6により"breaks"に指定されている
つまり、libstdc++6のbreaks指定を削除すればlibboost-date-time1.55.0がuninstallされず、従ってlibreoffice-coreがuninstallされることも、芋蔓式にLO全体がuninstallされることもない。
Debianのpakage managementの仕組み及び原因と対策を踏まえると、次の2つの方法が考えられる。
1. libstdc++6の"Breaks"指定を変更した新しいオレオレpackageを作ってinstall
2. libboost-date-time1.55.0のversionをごまかす (動作するか未確認)
今回は1.の方法を採用した。
workaroundの実態
1. /var/cache/apt/archives/以下からbinary packageを入手し/tmp/以下へcopy2. dpkg-deb -x <PKG>で中身を展開する。こちらは今回これ以上手を付けない
3. dpkg-deb --controlでcontrol fileがDEBIAN/以下に展開される
4. DEBIAN/controlを適当なtext editorで編集する (今回の場合、Breaks:の行からlibboost-date-time1.55.0を削除し、packageのversionを1上げておく)
5. dpkg -b <DIR> <package.deb>でpackageを作成し、それをinstallする
Unstableやexperimentalとの付き合い方 (まとめ)
* 必要がなければ手を出さない* そのうち解決されるので気長に待つ or bug reportを出して対策してもらう
* workaroundで一時的にごまかす、凌ぐ
最後に、aptitudeのように強力なdependency解決手段を提供してくれるtoolと仲良くなると幸せになるに違いない。
ラベル:
Debian,
workaround
2015年7月13日月曜日
ASUS X200LAのtouch padを使いやすくする
ASUS X200LAのtouch pad (Focaltech製)の使いにくさには心底辟易していた。
具体的には物理的にクリックしづらいし (しかも音がうるさい)、スクロールできない点が特に気に入らなかった。
しかし、synclient (/usr/bin/synclient)というprogramを通して適切な設定をすると非常に使いやすくなる。
Linux kernel 4.1にはdriverが含まれている:
> Device Drivers → Input Devices → Mice → Focaltech driver
xserver-xorg-input-synapticsというDebian packageに含まれている。
% synclient TapButton2=3
% synclient TapButton3=2
% synclient HorizTwoFingerScroll=1
synclient commandによる設定は次回のX sessionには引き継がれない。よって、何かしらの方法でsessionの開始時に自動設定するよう仕掛ける必要がある。
たぶん一番かんたんなのは~/.xsessionに直接synclientのcommandを羅列する方法で、当方ではこれを採用している。
具体的には物理的にクリックしづらいし (しかも音がうるさい)、スクロールできない点が特に気に入らなかった。
しかし、synclient (/usr/bin/synclient)というprogramを通して適切な設定をすると非常に使いやすくなる。
各種準備
Linux kernelの準備
Linux kernel 4.1にはdriverが含まれている:
> Device Drivers → Input Devices → Mice → Focaltech driver
synclientのinstall
xserver-xorg-input-synapticsというDebian packageに含まれている。
設定
以下の設定だけでも非常に使い勝手が向上するが、他にもホイールスクロール (iPodのあれ)のエミュレーションなどもできる。2本指でタップ → 右クリック
% synclient TapButton2=3
3本指でタップ → 中クリック
% synclient TapButton3=2
2本指で縦方向にスライド → 画面スクロール
% synclient HorizTwoFingerScroll=1
設定の永続化
synclient commandによる設定は次回のX sessionには引き継がれない。よって、何かしらの方法でsessionの開始時に自動設定するよう仕掛ける必要がある。
たぶん一番かんたんなのは~/.xsessionに直接synclientのcommandを羅列する方法で、当方ではこれを採用している。
リンク
synclientの詳しい使い方はArch Linuxのwiki (https://wiki.archlinux.org/index.php/Touchpad_Synaptics)やmanを参照。2015年7月2日木曜日
yaskkservで北極三號を使う
北極三號 (ほっきょくさんごう)は、SKK向けの旧仮名旧漢字辞書である。
これをDebianのyaskkservで使う。
まずはnpiii.l.euc (EUCの辞書)を、yaskkserv packageに付属するyaskkserv_make_dictionaryというcommandで専用形式に変換する。
% yaskkserv_make_dictionary npiii.l.euc npiii.yaskkserv
できた辞書 (npiii.yaskkserv)を適当なdirectoryにcopyする:
% sudo cp -i npiii.yaskkserv /usr/share/yaskkserv/
Debian packageのyaskkservでは設定fileが/etc/default/yaskkservなのでこれを編集する。終わりの方にPKG_DICSという部分があるので、その一番最後にでも生成した辞書の名前 (今回の場合はnpiii)を追加:
PKG_DICS="\
SKK-JISYO.L \
...
中略
...
SKK-JISYO.JIS2 \
npiii
"
どうやらfile suffixの.yaskkservは書かなくて良い (寧ろ書くとだめっぽい)ので省略する。
% sudo /etc/init.d/yaskkserv restart
適当な語句を変換してみて、旧仮名旧漢字の候補が表示されるのを確認する。
これをDebianのyaskkservで使う。
主な流れ
- npiii.l.eucをyaskkserv形式に変換する
- /etc/default/yaskkservを変更
- yaskkservをrestart
辞書の変換
まずはnpiii.l.euc (EUCの辞書)を、yaskkserv packageに付属するyaskkserv_make_dictionaryというcommandで専用形式に変換する。
% yaskkserv_make_dictionary npiii.l.euc npiii.yaskkserv
できた辞書 (npiii.yaskkserv)を適当なdirectoryにcopyする:
% sudo cp -i npiii.yaskkserv /usr/share/yaskkserv/
yaskkservの設定変更
Debian packageのyaskkservでは設定fileが/etc/default/yaskkservなのでこれを編集する。終わりの方にPKG_DICSという部分があるので、その一番最後にでも生成した辞書の名前 (今回の場合はnpiii)を追加:
PKG_DICS="\
SKK-JISYO.L \
...
中略
...
SKK-JISYO.JIS2 \
npiii
"
どうやらfile suffixの.yaskkservは書かなくて良い (寧ろ書くとだめっぽい)ので省略する。
yaskkservの再起動
% sudo /etc/init.d/yaskkserv restart
適当な語句を変換してみて、旧仮名旧漢字の候補が表示されるのを確認する。
登録:
投稿 (Atom)