id:typester さんの発言 を見て github-growler なるものがあることを知る。宮川さん作。
で、さっそく設定をしてみた。
ソースは github からダウンロード。(ここ)
git clone http://github.com/miyagawa/github-growler.git
cd github-growler
perl github-growler.pl [userID] [APIキー]
(※APIキーは [home] => [account] に書いてあります)
これで動くようになればok.
これ自身がデーモンなので、そのまま放置しとくと新しい動きだけを表示してくれる。
毎回 UserID と APIキー の入力がめんどい場合は git config で登録しておけばよい。
git config --global github.user [userID]
git config --global github.token [APIキー]
default で取得間隔と表示最大数は変更できる
defaults write net.bulknews.GitHubGrowler interval [取得間隔(秒)]
defaults write net.bulknews.GitHubGrowler maxGrowls [表示最大数]
設定ができてるかはこれで確認
defaults read net.bulknews.GitHubGrowler interval
自動起動の設定
実行するとデーモンがたちがあるけど、ログイン毎にするものめんどくさい。
というわけで launchd を使って自動起動の設定をしてみた。
gist から DL するかもしくは下記のをコピペしてください。
置き場所はここ。
~/Library/LaunchAgents/net.bulknews.GitHubGrowler.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>net.bulknews.GitHubGrowler</string>
<key>ProgramArguments</key>
<array>
<string>絶対パス /github-growler/github-growler.pl</string>
<string>ここに UserID </string>
<string>こっちに API キー</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
github-growler.pl までの絶対パスと UserID と APIキーを変更してください。
launchd に登録(登録すると自動起動するようにしてある)
launchctl load ~/Library/LaunchAgents/net.bulknews.GitHubGrowler.plist
エラーは /var/log/system.log にでます。
これで動かない場合は userID, APIキー が合ってるか確認してください。
net.bulknews.GitHubGrowler.plist を変更した際は一度 unload して再度、load してください。
そうしないと反映されないみたいで地味にはまった。。。
あとuserID や APIキー が script に渡っていない場合はこんな感じのエラーができます。
May 29 21:12:46 imac net.bulknews.GitHubGrowler[1358]: Can't exec "git": No such file or directory
May 29 21:12:46 imac net.bulknews.GitHubGrowler[1358]: Use of uninitialized value $user in scalar chomp
May 29 21:12:46 imac net.bulknews.GitHubGrowler[1358]: Can't exec "git": No such file or directory
May 29 21:12:46 imac net.bulknews.GitHubGrowler[1358]: Use of uninitialized value $token in scalar chomp
ちょっと動かしてみたけど、ほんとに世界がかわったw
前まで RSS リーダーとかで見てたけどこっちの方が全然いいなぁ〜
参考資料
LaunchDaemons (launchctl, launchd.plist) の使い方
id:secondlife さんの Vim プラグイン perldoc.vim がやばい。
久々にすごいヒット。使い方も簡単。インストールも簡単。
以下、本家引用
適当な func/class の上で K で読めるようになる。
perldoc 表示側でも K で飛べるのでぐるぐる巡れる。
s でソースコードとトグルする。
ここでいう func って perldoc -f で探すもののこと。(my, open, map とか)
はまりどこ
そんなだいそれたものでもないけど。。。
- ~/.vim/ftplugin/perl/init.vim に setlocal iskeyword+=: をかく。かかないとモジュール名(::)で区切られて perldoc が開く。(ex. URI::Simple => URIで開く):set iskeyword で確認できるよ。
- syntax plugin on ってのが
.vimrc に書いてないと、そもそも plugin 自体が動かない。
初めての VimScript そして github
凄い便利だけど、個人的に横分割があまり好きでない。
というわけで、ソースもみやすそうだったので縦分割で見れるようにいじってみた。
VimScript 触るのは初めてだったけど、help と勘でどーにかなった。
といっても何をやってるかはほんとに勘でこうだろうと
決めつけていじってるので何かあった時はご了承をw
~/.vim/ftplugin/perl/init.vim にこれを追記すると縦分割で表示されるようになる。
let b:window_vsplit = 1
--- perldoc.vim 2009-05-29 03:14:14.000000000 +0900
+++ perldoc_vsplit.vim 2009-05-29 03:14:02.000000000 +0900
@@ -13,17 +13,26 @@
let s:buf_nr = -1
let s:mode = ''
let s:last_word = ''
+let b:window_vsplit = 0
function! s:PerldocView()
" base on FuzzyFinder WindowManager
let cwd = getcwd()
if !bufexists(s:buf_nr)
- leftabove new
+ if b:window_vsplit
+ rightbelow vnew
+ else
+ leftabove new
+ end
file \[Perldoc]
let s:buf_nr = bufnr('%')
elseif bufwinnr(s:buf_nr) == -1
- leftabove split
+ if b:window_vsplit
+ rightbelow vnew
+ else
+ leftabove new
+ end
execute s:buf_nr . 'buffer'
delete _
elseif bufwinnr(s:buf_nr) != bufwinnr('%')
ソースは github にあります。
dealforest’s perldoc-vim at master – GitHub
git さわろうさわろうと思ってよーやくさわってみた。
fork していいものか分からなかったけど勢いでしてみた。
まずかったらすみません。。。
なんにせよ初めて尽くしで色々おもしろかったー。
せっかく fork したんだし、これを機に勉強を兼ねてしばらくいじろうかな
ほんと IE きらい。
まぁそれは別にして、IE でハマる時って時間の割に内容がへちょい。
エラー文言を google 先生に訪ねても見つからなかったので同じよう
症状になった人の助けになれればとの意味を込めての備忘録。
どちかというと本人が再度しそうな、、、 (ry
var hoge = { fuga: 1, foo: 2};
for each (var i in ['fuga', 'foo']) {
alert(hoge[i]);
}
これが IE だと動かなくて「’('がありません」となる。
var hoge = { fuga: 1, foo: 2};
alert(hoge.fuga);
alert(hoge.foo);
}
結局別に書いて対応したけど、いけそうな感じなんだけどなー
ちなみに in は凄い便利。書かないと忘れるのでメモ。
こんな感じでキーがあるかの確認もできたり。
if ('fuga' in hoge) { alert('fugaあるよー'); }
Test::Continuous に興味がわいたので
さわってみようとしたらMac::Growl が必要とのこと。
いれようとしたら Foundation.pm 等がないためちゃんと test に通らなかった。
どうやら ports でいれたのには Foundation の ラッパーモジュール がないらしい。
variants で調べて +darwin を足していれなおしたけどなかった。
というわけでいいのかわからないけど、デフォルトに入ってるのにシンボリックリンクを貼って
その場をしのいだ。
以下、説明。
mac 独自に bundle されたモジュール類(Foundation.pmとか)は
/System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level 以下にあります。
Foundation.pm が PerlObjCBridge.pm と CoreFoundation.pm にも依存していたので忘れなく貼ること。
自分の環境だと以下のパスに貼った。
sudo ln -s /System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level/Foundation.pm /opt/local/lib/perl5/5.10.0/darwin-2level/Foundation.pm
sudo ln -s /System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level/CoreFoundation.pm /opt/local/lib/perl5/5.10.0/darwin-2level/CoreFoundation.pm
sudo ln -s /System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level/PerlObjCBridge.pm /opt/local/lib/perl5/5.10.0/darwin-2level/PerlObjCBridge.pm
perl のバージョンが 5.10 だけど 5.8.8 からのシンボリックリンクでも現状、一応動いてる。
ただ、Mac::Growl が utf8 で文字を渡しても文字化けする始末。
というわけで Net::Growl や GNTP::Growl も試してみたが
残園なことにNet::Growl は何もおこらない。
GNTP::Grwol は IO::Socket::INET でコネクションできない感じ。
IO::Socket::INET: connect: Connection refused at /opt/local/lib/perl5/site_perl/5.10.0/GNTP/Growl.pm line 44, line 1.
うむぅ〜困った。
追記 2009/08/29 20:17:22
snow leopard にしたら Mac::Growl が使えなくなった。
どうやら Carbon 系が 32bit でしか使えないみたい。
64bit で起動させると使えない。
ソース
今まで上記のような Path Spec を実装するときは
sub hoge : Args(1) {
my $self = shift;
my ($c, @args) = @_;
}
こんな感じでやってた。
で、今回はこういう Path Spec を実装したかったので
同じようにだけでできるかと思ってやったら
dispatch されなくなってできなかった。
sub hoge : Args(0) {
my $self = shift;
my ($c) = @_;
}
sub hoge : Args(1) {
my $self = shift;
my ($c, @args) = @_;
}
sub hoge : Args(2) {
my $self = shift;
my ($c, @args) = @_;
}
で、それを sasata299 が解決してくれた。GJ
Chained を使えばいいらしい。
sub chain : Chained('/') PathPart('') CaptureArgs(0) {
my $self = shift;
my ($c) = @_;
}
sub hoge1 : Chained('chain') PathPart('hoge') Args(0) {
my $self = shift;
my ($c) = @_;
}
sub hoge2 : Chained('chain') PathPart('hoge') Args(1) {
my $self = shift;
my ($c, @args) = @_;
}
sub hoge3 : Chained('chain') PathPart('hoge') Args(2) {
my $self = shift;
my ($c, @args) = @_;
}
chained の使い方については sasata299 が
まとめてくれているので分かりやすかった。
CatalystのChainedアクションを使いこなすための3つのルール
また CatalystのChainedアクションの連鎖を止める方法 このエントリーも併せてみとくといいかも。
多謝多謝
追記 2009-05-19 12:50:11
id:typester さんに Path アクションでやる方法を教えてもらった。(TL)
sub hoge1
ath('hoge') :Args(2) {
my $self = shift;
my ($c) = @_;
}
sub hoge2
ath('hoge') :Args(1) {
my $self = shift;
my ($c, @args) = @_;
}
sub hoge3
ath('hoge') :Args(0) {
my $self = shift;
my ($c) = @_;
}
さらに注意点も教えてもらった。
以下 TL の引用。
- Pathアクションは同じパスだと後から書いた方が優先されるので、Argsは多い順に定義しないとダメ
- Args多いのを後から書くとそれに全部持って行かれる
- さらにちなむと index
ath とか default
ath とかはどこに書いても優先されるけど、これは専用のDispatchTypeがあり、Pathアクションではないのです
勉強になった。色々な方法があってやっぱおもしろい。
ありがとうございました〜