mobirc-irssi が実用に耐えうるようになりましたのでお知らせします
この間ちょっと紹介したirssiのプラグインスクリプトとしてmobircをつかうmobirc.plスクリプトですが、実用に耐えうる段階まできましたので再度紹介しておきます。
画面サンプルはこんな感じ。(スクリーンショットが取れるPSPでの画面です)
素のmobircはIRCクライアント機能と、HTTPD機能を両方持ち、tiarraなどのIRCプロクシにつなぐことで使用するものになっていますが、こちらのirssiプラグインではmobircのIRCクライアント機能はirssiプラグインとして実装していますので、irssiさえあれは利用することができます。
イメージ的にはirssiがHTTPDを立てている感じになってます。
またキーワード設定などもirssiのハイライト設定を使用していますので、別途mobirc側でキーワード設定をする必要がないのもちょっとうれしいところです。
実際の使い方(インストールの仕方)としては
mobirc.plをirssiのスクリプトディレクトリ (~/.irssi/scripts) にコピーor symlink
irssi起動時にmobircのlibパスを環境変数に入れとく
PERL5LIB=/path/to/mobirc/lib irssi
とか。同じ意味なら何でも。
irssi起動したらmobirc.plをロードする ( /script load mobirc )
ここで
Can't locate XXX.pm in @INC
とか言われる場合モジュール足りないのでそれいれる。ロードしたら config.yaml 自分用にいじって、そのパスをirssiで設定する
/set mobirc_config_path /path/to/config.yaml
設定完了したら /mobirc start すると HTTPD がたちあがる
mobirc started ってirssiコンソールに出てればOK。httpでつないで確認する。
とかでOK。
ほか機能としては、
/mobirc stop
でhttpd停止。/mobirc stop
->/mobirc start
でyaml読み直してHTTPD再起/set mobirc_auto_start on
しておけば次回から/script load mobirc
するだけでHTTPDたちあがる/script load
するのさえめんどいというひとはスクリプトを~/.irssi/scripts
におくかわりに~/.irssi/scripts/autorun
におけば irssi 起動時に自動起動する
という感じ。irssi使いには必須のスクリプトかと思います!
Enjoy!
mobirc クールすぎる
すばらしすぎる!
ソース見ると、IRCクライアント部分とHTTPD部分わかれてるから、IRCクライアント部分を丸々irssiプラグインで置き換えるのも簡単にできそう。
irssi使うようになってからtiarraみたいなプロクシを使わなくなったので、irssiプラグインだけでkeitairc見たいの作りたかったんだよなー。tokuhirom++
てわけで日本シリーズ見ながら作ってみた。
こんなんで一応動く。
irssiプラグイン内でPOEセッション(POE::Session::Irssi)作って、その中で Mobirc::HTTPD 動かしてる。
動くことは動くけど、設定決め打ちだし、unloadもできないのでプラグイン再起動イコールirssi再起動で、まだ実用には耐えない。
とりあえず動くことはわかったのであとは暇なときにでも。
OSXのFileReference
FlashのFileReferenceでのファイルアップロードはFlashPlayerから直接ファイルがアップロードされるのだけど、WindowsだとIEからリクエストされてるのと同じ感じになって(おそらくWinInet APIをつかっているからだと思う)、アクセス先がBasic認証とかかかっていてもIEの認証がとおっていればちゃんとファイルアップロードできる。
でも、OSXの場合は完全にFlashPlayerが独立しているらしく、Basic認証がかかっているとファイルアップロードできないようだ><
それをしらなかったのでykskに無駄に苦労をさせてしまった。もうしわけない!
とりあえずIP認証で代用した。そんな罠があるとはな。。
IRCで呼ばれたらIMで通知するirssiスクリプト
僕は以前からIRCでキーワード反応した時に GNU screen のステータスコードに通知を出すようにしている のだけど、ターミナル見てないときがつかないので、またまた im.kayac.com をつかって、IMに通知する irssi のスクリプトを書いてみた。
http://coderepos.org/share/browser/lang/perl/irssi/scripts/hilight2im.pl
使い方は
/set im_kayac_com_username ユーザー名
で自分のim.kayac.comユーザー名をセットするだけ!
あとはirssiで設定したキーワード(irssiではhilightという)を含んだメッセージを受信するとIMに通知される。
元気玉メールをIMで通知する
弊社には元気玉という仕組みがあって、詳しくは代表のブログを参照、これに誰よりも速く返信するために元気玉という文字がメールの件名に含まれていた場合即座にIMに通知するような仕組みを作った。
うちで使用しているメール配信ソフトウェアは postfix+maildrop で、IMへの通知には im.kayac.com のAPIを使用。
非常に簡単にできた。まずmaildropのフィルタ ~/.mailfilter
:
DECODED_SUBJECT = ""
if ( /^Subject:\s*(.*)$/ )
{
MATCH1 = escape($MATCH1)
DECODED_SUBJECT = `echo $MATCH1 |/home/typester/bin/subjectdecoder.pl`
}
if ( $DECODED_SUBJECT =~ /元気玉/ )
{
cc "|/home/typester/bin/mail2im.pl"
}
二つのスクリプトを読んでます。subjectdecoder は単にMIMEエンコードされてる件名をutf-8にして戻してあげるだけのもので、mail2im.plが実際にIMメッセージを送るスクリプト。以下がその中身。
subjectdecoder.pl:
#!/usr/bin/env perl
use strict;
use warnings;
use Encode;
my $subject = do { local $/; <STDIN> };
$subject =~ s/\\(.)/$1/gs;
print encode('utf-8', decode('MIME-Header', $subject));
mail2im.pl:
#!/usr/bin/env perl
use strict;
use warnings;
my $mail = do { local $/; <STDIN> };
use Encode;
use Email::MIME;
use Mail::Address;
my $msg = Email::MIME->new($mail);
my $subject = encode('utf-8', $msg->header('Subject'));
my ($from) = Mail::Address->parse( $msg->header('From') );
exit unless $subject && $from;
use LWP::UserAgent;
use HTTP::Request::Common;
my $res = LWP::UserAgent->new->request(
POST "http://im.kayac.com/api/post/typester",
[ message => "[E-Mail] $subject (@{[$from->address]})" ]
);
件名デコードしないとmaildropで日本語の件名のマッチングができないのが面倒だけど(これってなんとかならんのかな)、それでも簡単にできた! im.kayac.com++ (自画自賛
こうだったらいいのに auto-save-buffers
開いてるファイルが svn(k) の copath だったらON、それ以外だったらOFFって自動でなるといいのになー。
今は
(run-with-idle-timer 0.5 t 'auto-save-buffers "^/home/typester/dev/" "^$")
とかしてるけれど、その領域でもたまにsvn管理じゃないファイルつかったりするし、それで自動保存されると困るし。
bm.el
(global-set-key "\M-1" 'bm-toggle) (global-set-key "\M-3" 'bm-next) (global-set-key "\M-2" 'bm-previous)
とかで設定してるけどまったく使ってない。
Module::Install
Clouder::Blogger: Module::Installを使ったプロジェクトのincディレクトリについて
CodeReposとかみると、あんまりModule::Installを使ってる人がいないので、あんまりModule::Installって使われてないのかな?
えーー。
$ grep 'inc::Module::Install' lang/perl/**/Makefile.PL
lang/perl/Gopper/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/JSONRPC-Transport-TCP/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/KGopherd/Makefile.PL:use inc::Module::Install;
lang/perl/Mozilla-Screenshot/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/Mozilla-UserPreferences/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/POE-Component-Server-JSONRPC/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/PlPy/trunk/PlPy/Makefile.PL:use inc::Module::Install;
lang/perl/Senna-Storage/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/Text-Nyarlax/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/URI-KeywordExtract/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/WWW-LivedoorPICS/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/WWW-Various-Scrapers/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/WebService-Coneco/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/WebService-Veoh/trunk/Makefile.PL:use inc::Module::Install;
lang/perl/WebService-YouTube/tags/WebService-YouTube-1.0.2/Makefile.PL:use inc::Module::Install;
lang/perl/WebService-YouTube/tags/WebService-YouTube-v1.0.1/Makefile.PL:use inc::Module::Install;
lang/perl/WebService-YouTube/trunk/Makefile.PL:use inc::Module::Install;
けっこうあるじゃん!
Module::Starterはあんまりつかってるひといないかもね。
miyagawaさんのpmsetupがシンプルでいい感じです。
できた
(remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
emacsclient で開いたバッファを閉じるときに
Buffer `svk-commitvP9pW.tmp' still has clients; kill it? (yes or no)
などといわれるのをなくしたいのだが、どうすればいいのか! 強制yesでいいんだけど。
それとも C-x #
的なもので保存せずに閉じるものあるのかな。