さて、すごく久しぶりのPostなわけですが… YAPC::Asia Tokyo 2010で(今日)発表します。 「Write Good Parser in Perl」というタイトルで、パーサについていろいろお話したいと思います。 http://yapcasia.org/2010/talks/63D6EAB0-BC8C-11DF-8791-B9FC0F276C45 よろしくお願いします。 追記 発表してきました。
http://github.com/spiritloose/mod_psgi PSGI を実装したApache2モジュール。 % make && make installでインストールできて、 LoadModule psgi_module modules/mod_psgi.so <Location /psgi> SetHandler psgi PSGIApp /path/to/app.psgi </Location> で動く。 がーっと書いたのでまだまだの部分が多いとはおもうけど、一通り実装できたと思う。 Plack::Test::Suite を使ったテストも書いた。 http://github.com/spiritloose/mod_psgi/blob/master/t/suite.t mod_perlのようにApacheの機能を提供する必要はなく、アプリケーションへはenvを渡せば い
同じデータベースの違うテーブルでプライマリキーを重複させたくない場合や、 クラスタ化した場合とかで AUTO_INCREMENT が使えない場合。 いわゆる採番テーブルってやつ。 DBICとかで sub nextval { my $self = shift; my $dbh = $self->result_source->storage->dbh; my $sql = 'UPDATE sequence SET id = LAST_INSERT_ID(id + 1)'; my $sth = $dbh->prepare($sql); $sth->execute; my $id = $sth->{mysql_insertid}; $sth->finish; $id; } とか手動でやってもよかったんだけど、せっかくなのでMySQLのトリガーでやってみた。 DROP TABLE IF EXISTS
Gmailの未読数とか、livedoor Readerの未読数とかを表示させてみた。 .screenrcはこんな感じ hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w %=[GMAIL:%2`][LDR:%1`]" backtick 1 0 60 cat $HOME/tmp/ldrunread.txt backtick 2 0 60 cat $HOME/tmp/gmailunread.txtbacktickにコマンドを直接書いてもいいけど、コマンドが実行されてる間重くなるので、cronで動かしてテキストファイルをcatする形にしている。 未読を取ってくるやつは適当に ldrunread #!/usr/local/bin/perl use strict; use warnings; use LWP::Simple; my
最近のお気に入りVimプラグインはsnippetsEmu.vimなんだけど、色々といじってる割に晒してなかったのでいまさらながら晒してみる。 動作画面はこんなかんじ。 http://spiritloose.googlepages.com/catalyst_snippets.htm (TTYShareはなぜかうまく再生されなかったので泣く泣くWink) まずCatalyst用。 exec "Snippet debug $c->log->debug('".st."name".et.": '. \$".st."var".et.");<CR>".st.et exec "Snippet warn $c->log->warn('".st."name".et.": '. \$".st."var".et.");<CR>".st.et exec "Snippet dumper $c->log->dumper
http://p0t.jp/mt/archives/2006/11/ppromptjs.html http://p0t.jp/pprompt/ ブラウザのalert, confirm, prompt を置き換えるようなライブラリ。 いい感じなので、VimColorで使わせてもらってたりするんだけど(alertだけ)、 もっと使いやすくなるようにしてみた。 PPrompt.promptの時にフォーカスしてくれないのと、promptの値のとり方が微妙だとおもったので、その辺を変えてみた。 --- pprompt.js.orig>2006-11-29 03:39:32.000000000 +0900 +++ pprompt.js>-2006-12-05 18:21:39.000000000 +0900 @@ -105,7 +105,9 @@ var pbuttonOk = document.cr
http://lowreal.net/logs/2006/07/31/1 でVimでの遠隔リロードが紹介されていて、改造して使っているが、なんかもうこんなのでいい気がしてきた。 AutoHotkeyを使う。 reload_firefox.ahk :*B0C::w`n:: SetTitleMatchMode, 2 WinGet, FF,, Mozilla Firefox ControlSend,, {F5}, ahk_id %FF%http://la.ma.la/blog/diary_200608281736.htm のやつをHotstringにしただけだけど。 「:w[Enter]」が押されたときにFirefoxをリロード。 こんなのVim以外ではほとんど押さないので。 押したとしてもFirefoxがリロードされるだけなのでほとんど弊害はないし。 起動しておくだけでいいのでお手軽。 ターミ
[shell] ls をうちまくる人へ - Bulknews::Subtech - subtech 自分はあんまり ls 打たない、というのも .tcshrc で alias cwdcmd 'll' としていて、こうすると cd するたびに ll が勝手に実行されるから、必要ない。zsh でどうやるのかはしらないけど、たぶんできるでしょう。 自分ではzshをつかっているが、以下の設定をしている。 function cd() { builtin cd $@ && ls; }cd したあとにlsが実行される。 追記 おっと。上のやつはコメントアウトしてた・・ function chpwd() { ls }どっちでもいいけど。 追記2 id:naoyaさんのコメントより chpwd なら setopt auto_cd でも ok ぽ とのこと。 あ、そうか(auto_cdつかってないが・・・)。
最近よく話題になっているsvk。自分の環境でも使っている。 SWIGが嫌いなので、Subversionのバインディングその他はaptで入れた。 インストールはDebianならこれだけ。 apt-get install svk で、Vim使いならSubversionを使うためにだいたいsvncommand.vimを使ってるとおもうけど、一応svkにも対応してる。 svnコマンドをsvkに置き換えて実行してるだけなので、switchとかは使えないけど。 以下の設定を.vimrcとかに書けば有効になる。 let g:SVNCommandEnableBufferSetup=1 let g:SVNCommandAutoSVK='svk'「.svn/entries」がなければsvkを使う、っていう簡単なhackになっているので、svkの機能をフルに使えるわけじゃないけど、一応これで最低限のことは出来る
http://code.google.com/p/google-gtags/ http://google-code-updates.blogspot.com/2007/03/google-gtags-version-10.html Google Tags(GTags)のメジャーバージョンがリリースされた様子。 これはなにかって言うと、要するにtagsファイルをサーバにおいて(メモリ上に展開されるらしい)、タグジャンプするときにサーバのデータを参照するctags。 みんながローカルで「ctags -R」を実行しなくてもいいってことだね。 なんか非常にGoogleらしい。 今のところ対応言語はC++、Java、Pythonのみ。 Googleオフィシャル言語だけかよ。。。 エディタは長いことVimを使ってるので、当然Vimから使いたいわけだけど、Pythonインタプリタが組み込まれてる必要があ
http://www.postlbs.org/postlbs-cms/ja/geocoder オープンソースの GeoCoder。「ジオコーダーじゃ」と読むらしい。 これはすごいな。 早速使ってみた。 まずデータを揃えるのが結構大変。 ゆうびんホームページの郵便番号データと国土交通省から街区レベル位置参照情報のデータを取ってきて、Windows専用のデータ変換ツールでデータを構築する必要がある。 国土交通省のデータのダウンロードがすさまじくだるい・・・ 普通にクリックしていくと多分全部集めるのに200回ぐらいクリックしなきゃいけない。 FireBugで多少楽はしたけど大変だった。 このありえないインターフェースはなんとかならんのかなぁ。 で使ってみた感じは、検索は非常に速い。 精度はGoogleMapsのGeoCoderとかにはかなわないけど、それなりにいい感じ。 一番詳細なレベルではてな
人がコード書いてるところを見ると、閉じ括弧を先に入力してひとつ戻ったり、あとで入力するつもりで閉じ忘れていたりと、無駄な苦労だなぁとおもうことがよくある。 Vimで以下の設定をしていると括弧やクォートを入力したときに自動で閉じてくれる。 Eclipseとか、VS.NETとかの一般的なIDEの動作に近い感じ。 inoremap { {}<LEFT> inoremap [ []<LEFT> inoremap ( ()<LEFT> inoremap " ""<LEFT> inoremap ' ''<LEFT> vnoremap { "zdi^V{<C-R>z}<ESC> vnoremap [ "zdi^V[<C-R>z]<ESC> vnoremap ( "zdi^V(<C-R>z)<ESC> vnoremap " "zdi^V"<C-R>z^V"<ESC> vnoremap ' "zdi'<C-
PerlでExcelとかで作ったセル内改行(複数行にわたるレコード)つきCSVファイルを処理する方法。 意外と知らない人がいたので。 Text::CSV_XS を使って。 #!/usr/local/bin/perl use strict; use warnings; use IO::File; use Text::CSV_XS; my $fh = IO::File->new('test.csv') or die 'cannot open file'; my $csv = Text::CSV_XS->new({binary => 1}); until ($fh->eof) { my $columns = $csv->getline($fh); # $columns->[0] } $fh->close; syntax highlight by VimColor binary オプションが必要。
unwind-protect: Emacs の中から prove Emacsの中からproveを実行するという設定らしい。 自分の環境のVimでは以下のように設定している。 autocmd BufNewFile,BufRead *.t set filetype=perl autocmd BufNewFile,BufRead *.t nnoremap <F5> :!prove %<CR>1行目で、.tの拡張子のファイルを filetype=perl で開くように設定。 これで、テストファイル自体の文法エラー修正とかは普通のPerlスクリプトと同じく make→copen で出来るように。 もちろん syntax highlight も Perl になる。 2行目の設定は、で開いている .tファイルを prove で実行するようにする設定。 他のグローバルな設定は nnoremap <F5>
先日の Vim YAML Compiler Plugin に引き続き、Template-Toolkit の Compiler Plugin。 TT2 syntax と一緒に使うといい感じ。 Perl と Template-Toolkit が必要。 if exists("current_compiler") finish endif let current_compiler = "tt2" let s:savecpo = &cpo set cpo&vim if exists(":CompilerSet") != 2 " older Vim always used :setlocal command -nargs=* CompilerSet setlocal <args> endif CompilerSet makeprg=perl\ -MTemplate\ -e\ '$f=shift\ or
Vim の YAML Compiler Plugin。 Plagger とか、Catalyst とか Rails とかで YAML を書くことが多くなったので、ちょっと前に作ってみた。 これを ~/.vim/compiler/yaml.vim に作っておくと、:make → :cw でエラーチェック、修正が出来る。 とは言うものの、かなり無理やり。 makeprj が perl のワンライナーって。 Perl と YAML.pm が必要。 if exists("current_compiler") finish endif let current_compiler = "yaml" let s:savecpo = &cpo set cpo&vim if exists(":CompilerSet") != 2 " older Vim always used :setlocal command
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く