Text::TinySegmenter(TinySegmenterのPerl移植版)リリース


http://search.cpan.org/dist/Text-TinySegmenter/


TinySegmenterPerlに移植した。


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とかはたまに使う。


rails.vimみたいに

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マッパー的なやつはやっぱり欲しいかもなぁ。

AS3デビュー


すげー簡単だなぁ。

環境作ったりと、予習はちょこちょこしてたものの、1日ぐらいで今度納品するFlashがほぼできた。

XMLパース、mp3再生、画像表示、タイマー、リンクなどなど。

ほとんどJavaのSwingっぽい発想で作れた。


rascutが便利すぎてたまらん。最高すぎる。


とりあえず一年一言語学習は年の瀬に達成。

来年はなにをやろう。


あと、もうすぐ四捨五入すると30代になるので髪を20cmぐらい切った。

さっぱりさっぱり。