Lingua::JA::TFIDFとCatalyst::Model::Estraierで類似エントリを探す

こんな感じで過去に書いた類似のエントリ出すようにしたい。

TF-IDFで特徴語を抜き出す。

my $calc = Lingua::JA::TFIDF->new;
my $result = $calc->tfidf($text);

my $query_keywords = "[SIMILAR] ";

for (@{$result->list(5)}) {
  my($key,$val) = each(%$_);
  $query_keywords .= "WITH " . int($val) . " $key ";
}

とやってクエリをモデルのほうに渡せばOKっぽいんだけど、Hyper EstraierのほうをP2Pで動かしてないんだったヨ。

イントラでクローラはしらせているのでじゃぁperlバインディングからでもと思ったが、ちゃんと入ってないっぽくてこけてる。

そのうちP2P対応させようということで、途中までのメモ。

DrkcoreにTypePad Connectのコメント機能導入

TypePad Connect Betaを入れた。

コメントっていうのは結局URIに対するコメントなんだから(はてなブックマークなんかはそれが顕著にでている気がする)、それを担当する外部のサービスはなんか出るんだろうなぁなんて漠然と考えていたけど、実際でてみるとなかなかいい感じ。

あとは、コメントサービスを押さえたとしてどういったメリットがあるんだろうか的なあたりに結構興味があったりしますな。トラックバックよりは緩いつながりに関する情報が手に入るってことなのかな。

MojoMojo (CatalystベースのWiki)を入れてみた

MojoMojoというCatalystベースのWikiが気になったので手元のmacbookに入れてみた。

MojoMojo

なかなか便利そう。

blogを変えてみた

サーバー周りとかプロバイダ、DDNS周りとかを変えなきゃいけなかったので、ついでにblosxomからCatalystベースのblogシステムっぽいものに変えてみた。

色々勉強も兼ねて自分でこしらえてみたが、動かして細かいところはこれからちゃんとやっていく。

  • Tag管理オンリー
  • Markdown記法
  • Ctrl-cで新規エントリ入力画面へ
  • コメントははてなブックマークコメント
  • それぞれのタグでRSSを吐けるようにした

とかやってある。あとAtomPP対応とかしてみたい(flickrから投稿できると便利なので)。 それからはてなスターもつける。

  • blosxomのASINのプラグインみたいなの
  • AtomPP
  • はてなスター
  • キャッシュもそのうち入れる
  • trackbackは不明

コメントととかSBSでいけるし、写真なんかもflickrとかpicasa webなんか使えばいいのにtrack back的な仕組みのサービスがないのは何でだろう。trackback用のURLをもう少しひねってcarとかcdrみたいな概念でlispのリンクみたいにつないでいくようなサービスがあれば、別にトラックバックは必要ないし、ブログのコンテンツも其の壱、其の弐とかしなくてもシーケンシャルにつなぎやすい気がすんだけどな。

Catalyst+jQuery+Flotの組み合わせ

Catalyst::View::JSONとjQueryの組み合わせでJSONデータのやりとりは簡単にできるのでたまにグラフを書きたくなったらFlotを使うとよさげな感じ

あんま凝ったことはできないのでちょっとした折れ線グラフかヒストグラムな用途

tickに数字以外のものを表示させるメモ

data:  [[0,2],[1,4],[2,6]]
ticks: [[0, "red"], [1, "brue"], [2, "pink"]]

という感じで xの値と対応させたい文字列を合わせてticksに指定する。

catalystのres->bodyにファイルハンドルを渡す

Catalyst::Plugin::Static::Simpleで静的にサーブしているpdfとかの文書ファイルに(ベーシックとか)なんか適当な認証をかけたくて悩んでた。

そういうファイルはApacheとかに任せれば解決するんだろうけど、残念ながらApache動かせないというシチュエーション。

散々悩んだあげく別にStatic::Simple使わなくていいじゃんということに気づいてしまい、おもむろにStatic::Simpleのソースを読み始めた。

どうせFile::Slurpでもしてbodyに出力してるんだろうなぁと思ってたんだけど違った。

if ( Catalyst->VERSION le '5.33' ) {
    # old File::Slurp method
    my $content = File::Slurp::read_file( $full_path );
    $c->res->body( $content );
}
else {
    # new method, pass an IO::File object to body
    my $fh = IO::File->new( $full_path, 'r' );
    if ( defined $fh ) {
        binmode $fh;
        $c->res->body( $fh );
    }
    else {
        Catalyst::Exception->throw( 
            message => "Unable to open $full_path for reading" );
    }
}

最近のバージョンはファイルハンドルをres->bodyに渡せるのか。IO::Allとかもいけんのかな?

Catalystの7章

最近Jemplateを使っているので、RESTとJemplateでAjaxの章をもう一度やった。

サンプルは一カ所修正。

#__PACKAGE__->config->{serialize}{default} = 'JSON';
__PACKAGE__->config->{default} = 'text/x-json';

ProductName Catalyst: Accelerating Perl Web Application Development
Jonathan Rockway
Packt Publishing / 3545円 ( 2007-11-30 )


template toolkit mode

最近また、Catalystで色々作っているので、昔のエントリを探してTT modeの設定をした。

;;tt
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist
      (cons
       '("\\.html$" . html-helper-mode) auto-mode-alist))
(setq auto-mode-alist
      (cons
       '("\\.tt2$" . html-helper-mode) auto-mode-alist))
(require 'html-tt)
(add-hook 'html-helper-mode-hook 'html-tt-load-hook)
(add-hook 'html-helper-mode-hook '(lambda () (font-lock-mode 1)))

そして、Jonathan Rockwayのトークは聴いておくべきだったかなとスライドみながら思った。

catalystのE-Bookは本を買うと安く買えたので、ついでに買っておいたけど、本を見るまでもないときなんかに調べものができたりとか、検索できるので意外と重宝している。

Caatalystの6章と7章読んだ

なんとなく今日も読んでいる。

  • 6章は、独自のモデルを作ろう
  • 7章はRESTとAjax

ProductName Catalyst: Accelerating Perl Web Application Development
Jonathan Rockway
Packt Publishing / 3545円 ( 2007-11-30 )


6章はファイルシステムをCatalystのモデルにするサンプルだが、Catalyst::Model::Adaptorを知ってしまうとあまりそそられなかった。

7章はJemplateが楽しそうなんだけど、ググっても、実際に使われているという例が出てこないのが気になった。なんかデメリットでもあるんだろうか?