Text::TinySegmenter(TinySegmenterのPerl移植版)リリース
http://search.cpan.org/dist/Text-TinySegmenter/
TinySegmenterをPerlに移植した。
PurePerlでシンプルにさくっと分かち書き。
use utf8; use Text::TinySegmenter; my $str = '私の名前は中野です'; my @words = Text::TinySegmenter->segment($str); # got ('私', 'の', '名前', 'は', '中野', 'です')
工藤さんもおっしゃってるように品詞を特定するのはきつい。
そういうことやりたいならMeCabつかえってことで。
CatalystとTT用snippetsEmu.vim設定
最近のお気に入り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('".st."name".et.": '. \$".st."var".et.");<CR>".st.et exec "Snippet model $c->model('".st."model".et."')".st.et exec "Snippet view $c->view('".st."model".et."')".st.et exec "Snippet config $c->config->{".st."name".et."}".st.et exec "Snippet controller sub ".st."func".et." : ".st."Attribute".et." {<CR>my ($self, $c) = @_;<CR>".st.et."<CR>}<CR>".st.et exec "Snippet begin sub begin : Private {<CR>my ($self, $c) = @_;<CR>".st.et."<CR>1;<CR>}<CR>".st.et exec "Snippet auto sub auto : Private {<CR>my ($self, $c) = @_;<CR>".st.et."<CR>1;<CR>}<CR>".st.et exec "Snippet detach $c->detach('".st."name".et."');<CR>".st.et exec "Snippet forward $c->forward('".st."name".et."');<CR>".st.et exec "Snippet stash $c->stash->{".st."var".et."}".st.et exec "Snippet flash $c->flash->{".st."var".et."}".st.et exec "Snippet session $c->session->{".st."var".et."}".st.et exec "Snippet sstash $c->stash->{".st."var".et."} = ".st.et.";<CR>".st.et exec "Snippet sflash $c->flash->{".st."var".et."} = ".st.et.";<CR>".st.et exec "Snippet ssession $c->session->{".st."var".et."} = ".st.et.";<CR>".st.et exec "Snippet rs $c->model('DBIC::".st."Source".et."')".st.et exec "Snippet redirect $c->res->redirect($c->uri_for('".st."uri".et."'));<CR>".st.et exec "Snippet param $c->req->param('".st."param".et."')".st.et
まぁ・・・なにも言うことはないか。
ソース嫁ってことで。
ちなみにPerl用。
exec "Snippet dump use Data::Dumper; warn Dumper ".st."var".et.";<CR>".st.et exec "Snippet say print ".st."var".et.", \"\\n\";<CR>".st.et exec "Snippet self my \$self = shift;<CR>".st.et exec "Snippet data my \$data = do { local $/; <DATA> };<CR>".st.et exec "Snippet argf while (<>) {<CR>chomp;<CR>".st.et."<CR>}<CR>".st.et exec "Snippet isa if (blessed $".st."var".et." and $".st."var".et."->isa('".st."Class".et."')) {<CR>".st.et."<CR>}<CR>".st.et exec "Snippet readtsv use IO::File;<CR>use Text::CSV_XS;<CR><CR>my \$fh = IO::File->new('".st."filename".et."') or die 'cannot open file.';<CR>my \$csv = Text::CSV_XS->new({ sep_char => \"\\t\", binary => 1 });<CR>until ($fh->eof) {<CR>my $cols = $csv->getline($fh);<CR>unless ($cols) {<CR>warn $csv->error_diag;<CR>next;<CR>}<CR>my (".st.et.") = @$cols;<CR>}<CR>$fh->close;<CR>".st.et " Class-C3 exec "Snippet next $self->next::method(@_);<CR>".st.et exec "Snippet maybe $self->maybe::next::method(@_);<CR>".st.et
dump
use Data::Dumper; warn Dumper $var;
とか、self
my $self = shift;
とか、data
my $data = do { local $/; <DATA> };
とか、argf
while (<>) { chomp; }
とかそんなの。
readtsvとかはたまに使う。
set filetype=catalyst
とかしてないので、上のやつをperl_snippets.vimに貼り付ける。
Perl全体で有効になっちゃうけど、あんまり問題にはならないと思う。
そんで、便利なのがTT用。これは結構便利。
tt2_snippets.vim
exec "Snippet class [% USE ".st."class".et." = Class('".st."ClassName".et."') %]<CR>".st.et exec "Snippet url [% USE ".st."name".et." = url('".st."path".et."') %]<CR>".st.et exec "Snippet linkto <a href=\"[% c.uri_for('".st."path".et."', "st."param".et.") %]\">".st."label".et."</a>".st.et exec "Snippet if [% IF ".st."condition".et." -%]<CR>".st.et."<CR>[% END -%]<CR>".st.et exec "Snippet ife [% IF ".st."condition".et." -%]<CR>".st.et."<CR>[% ELSE -%]<CR>".st.et."<CR>[% END -%]<CR>".st.et exec "Snippet ifee [% IF ".st."condition1".et." -%]<CR>".st.et."<CR>[% ELSIF ".st."condition2".et." -%]<CR>".st.et."<CR>[% ELSE -%]<CR>".st.et."<CR>[% END -%]<CR>".st.et exec "Snippet unless [% UNLESS ".st."condition".et." -%]<CR>".st.et."<CR>[% END -%]<CR>".st.et exec "Snippet for [% FOR ".st."var".et." = ".st."list".et." %]<CR>".st.et."<CR>[% END -%]<CR>".st.et exec "Snippet foreach [% FOREACH ".st."var".et." = ".st."list".et." %]<CR>".st.et."<CR>[% END -%]<CR>".st.et exec "Snippet while [% WHILE (".st."var".et." = ".st."rs".et.".next) -%]<CR>".st.et."<CR>[% END -%]<CR>".st.et exec "Snippet switch [% SWITCH ".st."var".et." -%]<CR>".st.et."<CR>[% END -%]<CR>".st.et exec "Snippet case [% CASE ".st."var".et." -%]<CR>".st.et."<CR>".st.et exec "Snippet include [% INCLUDE '".st."file".et."' %]<CR>".st.et exec "Snippet process [% PROCESS '".st."file".et."' %]<CR>".st.et exec "Snippet macro [% MACRO ".st."name".et."(".st."arg".et.") BLOCK %]<CR>".st.et."<CR>[% END %]<CR>".st.et exec "Snippet var [% ".st."var".et." %]".st.et exec "Snippet hvar [% ".st."var".et." | html %]".st.et exec "Snippet hlvar [% ".st."var".et." | html | html_line_break %]".st.et exec "Snippet null [%- FILTER null -%]<CR>".st.et."<CR>[%- END -%]<CR>".st.et
tt2html_snippets.vim
if !exists('loaded_snippet') || &cp finish endif runtime! after/ftplugin/tt2_snippets.vim runtime! after/ftplugin/html_snippets.vim
全部あわせると16%ぐらい作業効率UPになってるはず。
snippetsEnu.vim便利!
他によく使ってるファイルタイプはRubyとCとC++だけど、そっちはインデントとか調整したりもろもろ。
GNUスタイル好きじゃない・・・
ファイルサーバの電源が吹っ飛んで目が覚めた
UPSとかいうレベルじゃない。同じ筐体で2回目。
うーん焦げ臭い。
電源がずいぶんうるさくなってきたなぁと思ってたところに・・・
呪われてる筐体だなぁ。まぁ6年もつかってりゃ2回ぐらい飛ぶかぁ。
いや、飛ばんだろ。
この筐体でディスクが飛んだことはないんだけど。
データが無事かは不明。読み取れなくなってたら泣ける。
この際ファイルサーバもDELLマシンにしたいんだが、計500GBのディスクがIDE。
変換アダプタで逃げるか、SATAのディスクを買って移すか・・・
それとも、めんどくさいのでもう一回電源だけ変えるか・・・
色々非常にめんどくさいが、とりあえず部屋はちょっと静かになった。
追記
とりあえず電源を買ってきた。
よりによってデータ用のHDDがBIOSで認識せず。
なんか容量が0GBとかなる。
OS用の/dev/hdaは認識してる。
とりあえずfsckしてmount -o rw,remountして/etc/fstab編集して/dev/hdbマウントしないように。
OSは起動する。
OSなんか別に起動しなくていいんだよ・・・
なんか異音鳴ってるし・・・これはだめかもわからんね
SennaStore for Perl でけた
CodeReposのアカウントをいただけたので、コミットした。
http://coderepos.org/share/changeset/4356
use Senna; use Senna::Constants qw(SEN_CTX_USEQL); my $db = Senna::DB->open(path => '/path/to/senna.db'); my $ctx = Senna::Ctx->open(db => $db, flags => SEN_CTX_USEQL); $ctx->send(<<END_QL); (+ 1 1) END_QL my $data = $ctx->recv; # $data == 2
とかで。
パースはJSON::AnyとかText::CSV_XSとかで。
これでSennaStoreを使う覚悟がちょっとできてきた。
O/Rマッパー的なやつはやっぱり欲しいかもなぁ。
あけまして
あけましてどうも。
年末からインフルですが。
毎年年末年始は倒れてるなぁ。