zshで正規表現によるマッチ

http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fregex-Module

zsh/regexというモジュールをロードすると,-regex-matchという演算子が使用できるようになる.

$ cat ogya.zsh 
zmodload zsh/regex

if [[ "ogyaaaaaaa" -regex-match "^ogya+$" ]]; then
    echo "おぎゃああああああ"
else
    echo "え?"
fi

$ zsh ogya.zsh
おぎゃああああああ

LinuxでGrowl

LinuxでもGrowl通知あったら便利だなーと思ってたら作ってる人がいた.

https://github.com/mattn/growl-for-linux

ということで導入ログ.

$ git clone git://github.com/mattn/growl-for-linux.git
$ cd growl-for-linux
$ ./autogen.sh
$ ./configure --prefix=/home/hoge/local
$ make && make install
$ gol

といったところでこんなエラー

$ gol
gol: symbol lookup error: /home/hoge/local/lib/growl-for-linux/display
/libnotify_gol.so: undefined symbol: notify_init

ということでlddしてみる.と,どうもlibnotifyがリンクされてない.
よくわからんけどnotify_initはどう見てもlibnotify.soにあるシンボルなので,Makefileをいじってldにlibnotifyをリンクさせる.

--- Makefile.old	2012-11-19 22:00:17.000000000 +0900
+++ Makefile	2012-11-19 22:00:41.000000000 +0900
@@ -209,7 +209,7 @@ INSTALL_PROGRAM = ${INSTALL}
 INSTALL_SCRIPT = ${INSTALL}
 INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
 LD = /usr/i686-pc-linux-gnu/bin/ld
-LDFLAGS = 
+LDFLAGS = `pkg-config --cflags --libs libnotify`
 LIBCURL_CFLAGS =  
 LIBCURL_LIBS = -lcurl  
 LIBOBJS = 
$ make clean && make && make install
$ gol &

http://gyazo.com/96d254b6885248f4139d981ca095db87.png

ということで無事動いたー.よかったよかった.

emerge --syncで!!! Exhausted address for rsync3.jp.gentoo.orgとか言われるときの対処

僕の場合では有用なエラー出力は一切なかったけど,一部ファイルがrsyncで取得できないことが問題っぽいので

http://forums.gentoo.org/viewtopic-t-898720-start-0.html

このあたりを参考に/etc/portage/make.confの変数SYNCを書き換えて別のミラーから取得するようにしたら直った.

SYNC="rsync3.jp.gentoo.org/gentoo-portage" 

SYNC="rsync1.jp.gentoo.org/gentoo-portage" 

Perlでヒートマップが書けるImager::Heatmapをリリースした

http://search.cpan.org/~kawamuray/Imager-Heatmap-0.02/lib/Imager/Heatmap.pm
https://github.com/kawamuray/p5-Imager-Heatmap

Perlでヒートマップを書く手段としては,既にCPANにあるImage::Heatmapが使えそうだけど,いくつかの理由から新たに書きました.

  1. docみたらなんか複雑
  2. PerlMagick入れるのがめんどくさい
  3. 投入予定のシステムが既にImagerを使ってたので,結果がImagerのインスタンスでgetできると便利
  4. 色合いがいまいち

仕組みとしては,n * m pixelの画像において,挿入される各点について確率密度関数を用いて周辺ピクセルの重みを加算していって,最後にその値をHSV色空間にマップする感じ.

HSV色空間の扱いとか新たな知識を得たし,高速化のためにいろいろ工夫もしたので詳しく書こうと思ったけど,もう眠たくなったのでまた今度にする.


こんな画像が生成できる:
https://raw.github.com/kawamuray/p5-Imager-Heatmap/master/t/resources/sample.png

jQueryのhtml()メソッドはjQueryオブジェクトを返すわけじゃない

ので,

var div = $('<div>');
var p   = $('<p>').appendTo(div);
div.html(div.html() + "aaa");

div.find('p').eq(0) === p;  // false

html()メソッドはinnerHTML(テキスト)を返すので,それをセットしたらその時点でDOMツリーは再生成されるので,変数で持ってるpとは別物に差し変わってるんだな.

ALSA Audioがソフトウェアミキシングしてくれなくて1プロセスしか音を出せなかった

ALSA - Gentoo Wikiに従ってALSAを設定したら一度に1プロセスしか音が出せなかったので試行錯誤した話.

状況としては

  1. Youtubeとか開く -> 音流れる
  2. VLCで音楽流す -> 流れない

みたいな.Terminalにはこんなエラーメッセージ.

ALSA lib pcm_dmix.c:862:(snd_pcm_dmix_open) unable to open slave 

普段はそんなこと意識しないけど,複数のメディアから流れる音が同時にスピーカーから聞こえるのは,ソフトウェアでミキシングをしてくれているからである.

つまり,上の状態ではミキシングを設定していないので,一度に一つのメディアからの音しか出せず,Youtubeで音を流すとFlashPlayerプロセスがサウンドカードデバイスをロックしちゃうので,後から開いたVLCがサウンドカードデバイスを開けず音がでない,ということだと思う.

で,しばらくgoogleさんに向かって格闘した結果,僕の環境では解が見つかった.~/.asoundrc(ALSAのローカル設定ファイル)に以下を追加でPulse Audio Pluginが有効になってソフトウェアミキシングをしてくれるようになった.

pcm.!default {
  type pulse
}
ctl.!default {
  type pulse
}

多分,USEフラグにpulseaudioを入れた状態でalsa系パッケージのemergeをしてる必要がある + media-sound/pulseaudioのインストールも必要だと思う.