タグ

ブックマーク / download-takeshi.hatenablog.com (18)

  • 非同期で全文検索エンジンgroongaを叩く AnyEvent::Groonga 書いたよ - download_takeshi’s diary

    要するにAnyEventでgroongaを使いたかったのでperlモジュール書きました。んでもって久々にCPANにアップしましたよ、という告白です。 AnyEvent::Groonga - Groonga client for AnyEvent http://search.cpan.org/~miki/AnyEvent-Groonga/ 非同期でガンガン全文検索エンジンを叩きたいな、ということでAnyEvent::Groonga。 なおYappo さんが取り組まれているCライブラリのperlバインディングスとは異なり、AE::Groongaはgroongaディストリビューションに同梱されてるオリジナルの「groongaサーバ」を対象としています。 このgroongaの組み込みサーバは、じつはhttpとgqtp(groonga独自プロトコルらしい)両方をしゃべれます。また普通にローカルのDB

    非同期で全文検索エンジンgroongaを叩く AnyEvent::Groonga 書いたよ - download_takeshi’s diary
  • perlでデーモン書く時は素直にMoose化しておくのもいいかもな - download_takeshi’s diary

    今更Mooseの話題かよ、と思われることでしょうが、自分は常に流行の3年遅れぐらいを全力で追いかけるタイプなので、自分にとっては今が旬。というわけで、Moose的なはなしを書きます。 突然ですが、現役バリバリのperl使いのみなさんに質問です。 POEやらAnyEventやらでちょっとしたアプリケーションサーバを書く場合、みなさんはどうやって「デーモン化」してますか? 自分はもう何回もこの手のものを書いてきたつもりですが、実は未だにベストな手法を編み出せてません。。。 App::DaemonやDaemon::Genericあたりでなんとなく自分流な形を模索した時期もありましたが、結局どれも面倒くさくなって、最近では「もう nohup perl hoge_server.pl & でいいじゃん」みたいな。「止める時は pkill -f hoge_server でいいじゃん、文句アッカ」みたいな

    perlでデーモン書く時は素直にMoose化しておくのもいいかもな - download_takeshi’s diary
  • perlで高速な類似検索エンジンを構築できるようにしてみた - download_takeshi’s diary

    すみません。タイトルはやや釣り気味です。 類似検索エンジンというか、そのアイデア程度の話なんですが、以前から考えていた類似検索エンジン風のネタがあったので、ちょっとperlで書いてみたので、そいつを晒してみます。 Luigi   https://github.com/miki/Luigi 類似検索なのでLuigi。ルイージとか読みたい人はそう読んじゃっても良いです。(冷) 考え方と仕組み 類似文書の検索、となりますと一般的には超高次元での空間インデックスとかが必要になります。 昔からR-TreeやSR-Treeなど、いろいろと提案されていますが、より高次元になると「次元の呪い」によりパフォーマンスが出なくなる、なんて言われていますね。 そこで最近ではLSHに代表されるような、より高度な「近似」型のインデキシング手法が人気を集めているようです。 で、今回考えたLuigiも実は近似型のインデッ

    perlで高速な類似検索エンジンを構築できるようにしてみた - download_takeshi’s diary
  • perlでテトリス! - download_takeshi’s diary

    偶然おもしろいモノを発見しました。コンソールで遊べるperlテトリスです。 スクリーンショットとってみました。 なんと、macbookのターミナル上でカラフルなテトリスが元気よく動いてます! それにしても、俺テトリス下手だな。。。 ってのはおいといて、ソースを見てみましょう。難読化されてます。 #!/usr/bin/perl $_='A=15; B=30; select(stdin); $|=1; select(stdout);$|=1; system "stty -echo -icanon eol \001"; for C(split(/\s/,"010.010.010.010 77.77 022.020.020 330.030.030 440.044.000 055.550.000 666.060.". "000")){D=0;for E(split(/\./,C)){F=0;for

    perlでテトリス! - download_takeshi’s diary
  • 1枚のスクリプトに全てをまとめてくれるApp::FatPacker - download_takeshi’s diary

    App::FatPackerとは、依存モジュールを全て1つのファイルに押し込んでパックしてくれるライブラリです。CPANにあります。 pack your dependencies onto your script file http://search.cpan.org/~mstrout/App-FatPacker-0.009001/ 依存モジュールを解決して1枚のスクリプトにまとめてくれるようです。 perl使いの間で大人気の「cpanm」でもこれが使われています。 どっかでcpanmの紹介として「1枚岩のスクリプト」みたいな表現を目にしましたが、要するにこれのことを指していたようです。 ちなみに作者はlocal::libの人。 「ファット」って響きが心に刺さりますが、id:miyagawaさんも使ってることだし、きっと良質モジュールなんだろうなーと思って触ってみました。 使ってみて まず

    1枚のスクリプトに全てをまとめてくれるApp::FatPacker - download_takeshi’s diary
  • perlXSでSTLのstd::mapを使ってみる - download_takeshi’s diary

    ここのところC++でコードを書いているんですが、やっぱりそいつをperlから使いたい。 ということでXSについてお勉強中です。 ごく簡単なものなら書けるようになってきましたが「perlから渡したハッシュをC++側でstd::mapとして受け取りたい」といった特殊なケースではまってしまったのでメモっておきます。 いろいろ悩みはしましたが、結論から言うと「hollyなblog」さんのところでまさにドンピシャな記事を書いてくれていたので、これを参考に頑張ってみました。 以下、サンプルコードと実践手順です。 C++コード hashを渡してstd::mapを返すというケースを想定しているので、以下のようなクラスを準備しました。コサイン類似度を計算するコードです。 vector_tool.hとして以下を用意します。 #include <iostream> #include <map> #include

    perlXSでSTLのstd::mapを使ってみる - download_takeshi’s diary
  • 動的計画法とナップサック問題を学びたい人におすすめのサイト - ダウンロードたけし(寅年)の日記

    組み合わせ最適化の手法として「動的計画法」というモノがあります。 wikipediaから抜粋 動的計画法(どうてきけいかくほう、英: Dynamic Programming, DP) コンピュータ科学の分野において、ある最適化問題を複数の部分問題に分割して解く際に、そこまでに求められている以上の最適解が求められないような部分問題を切り捨てながら解いていく手法 一見難しそうですが、実は理解するのは以外と簡単です。いろいろな場面で応用が利く便利な手法ですので、覚えておいて損はないものです。コンピュータ系、情報系のお勉強をする人であれば、おそらく一度は習ったりするかもしれません。 ナップサック問題と動的計画法 動的計画法の一番親しみやすそうな例として「ナップサック問題」というのがよく取り上げられます。 こんな感じの問題です。 今ここに様々な大きさの品物が置いてあるとします。そしてそれらの品物は各

    動的計画法とナップサック問題を学びたい人におすすめのサイト - ダウンロードたけし(寅年)の日記
  • 噂のnode.websocket.jsでサーバサイドJSとHTML5 WebSocketを体験してみたの巻 - download_takeshi’s diary

    WebSocketを体験してみたいのと、サーバサイドJSを試したいのと、さらにはmac版のChromeをインストールしてみたという条件が重なり、これはもう深夜だけどnode.websocket.jsを試してみるしかないな、という状況に追い込まれました。 構成 最近あたらしく調達したばかりのmacbook air にvirtualboxを入れています。その上でCentOSが動いています。 macbookをクライアントに、CentOS側をサーバとみたてて話を進めていきます。 ちなみに、virtualboxではアダプタ1をNATに、アダプタ2をホストオンリーアダプタ(IPはstaticに設定)としているので、CentOSからは外にも抜けられるしmacbook側からも自由にアクセスできます。ごきげんな環境です。 Node.JSのインストール まずは土台となるnode.jsが必要。ソースをダウンロー

    噂のnode.websocket.jsでサーバサイドJSとHTML5 WebSocketを体験してみたの巻 - download_takeshi’s diary
  • websequencediagrams をPerlでごにょごにょ - download_takeshi’s diary

    http://www.websequencediagrams.com というサイトを知ってますか?ZIGOROuさんがブログで使っていたので知ったんですが、実に便利っぽいです。専用のダイアグラム構文を書いてサイトにHTTP POSTするとPNGやPDFでシーケンス図を生成して返してくれる代物です。 構文自体とてもシンプルです。 Alice->Bob: Authentication Request Bob->Alice: Authentication Response こんな感じでとても簡単&スマートなものなんですが、さらにこいつをプログラマブルに書けたら便利かなー、なんて思ってしまい、Perlでモジュール化してみました。 WebService::WebSequenceDiagrams github: http://github.com/miki/WebService-WebSequence

    websequencediagrams をPerlでごにょごにょ - download_takeshi’s diary
  • Yahoo-APIを無制限に叩くためのモジュール書いた - download_takeshi’s diary

    ふと気づくとYahooの「ウェブ検索API」の利用制限が変わっていて、今までは同一IPからの利用は5万回/24時間でしたが、10月13日から同一appidからの利用が5万回/24時間となっていました。 http://developer.yahoo.co.jp/newslist/1#64 つまりappidを複数用意して数珠つなぎに使って行けば、同一IPからの利用が事実上無制限となるんだよね!?ということで、久しぶりにPerl Module書きました。 WebService::APIKeys::AutoChanger github: http://github.com/miki/WebService-APIKeys-AutoChanger CPAN : http://search.cpan.org/~miki/WebService-APIKeys-AutoChanger まだCPANにあがって

    Yahoo-APIを無制限に叩くためのモジュール書いた - download_takeshi’s diary
  • AnyEvent::Intro チョー訳 その2 - download_takeshi’s diary

    チョー訳その2です。今回はCondition Variablesとmain loop、それとTimer関連の説明部分を訳します。 前回の区切りの場所がイマイチ悪かったんですが、今回のところまでで「Introduction to Event-Based Programming」のパートが終わります。 なお部分的にかなり意訳、というか勝手な解釈で訳している箇所もあります。概ね合っているとは思いますが、こまかい部分では間違った表現もあるような気がしてます。 より正確に勉強したい人は原文を眺めながらチョー訳をご覧下さいませ。 原文はこちら http://search.cpan.org/~mlehmann/AnyEvent-5.2/lib/AnyEvent/Intro.pod#Condition_Variables それでは訳して行きましょう! Condition Variables(状態変数) I

    AnyEvent::Intro チョー訳 その2 - download_takeshi’s diary
  • AnyEvent::Intro チョー訳 その1 - download_takeshi’s diary

    最近perl界隈で話題のAnyEventについて、今のうちに習得しておくとid:miyagawaみたいにクールになれて、もしかしてモテるのではないかと思い、よっしゃ、勉強してみるか、ということでドキュメント読み出したんですが、、えらいボリュームですね。心がポッキリ折れました。 い、いや、そんなことではいかん!頑張るぞ。 というわけで、折角なので、チョー訳を残していこうと思います。AnyEventはおさえておきたいけどドキュメントの長さに呆然としてしまったアナタ、ダウンロードたけしと一緒にレッツスタディしようぜ! なお、AnyEventのドキュメントはすごく長いので、ぶつ切りでいきます。最後まで書き綴れるかどうかは不明です。 さらに英語にはあまり自信がないくせに、要所要所ですごく意訳的なことをしています。誤訳などありましたら指摘して下さいませ。 ※原文はこちら http://search.c

    AnyEvent::Intro チョー訳 その1 - download_takeshi’s diary
  • YAPC::Asia 2009 でLTしてきたヨ(でも時間切れ★) - download_takeshi’s diary

    9月10日、11日と開催されたYAPC::Asia 2009に参加してきました。 今回はid:ZIGOROuとid:lestrraからお誘いをいただき、スピーカーとして参加させていただきました。ありがとうございます。 それにしてもLTの難しさを実感しましたです。はい。 冒頭から笑いを取りにいったつもりのスライドは、きれいにすべるし、挙句の果てに、3分の2くらいのところまで話したところで、ドラがジャーン!!!「え、もう5分たったの??」って思わず傍にいた牧さんに聞いてしまいましたよp「いやぁ、5分ってのはホント短いんですよ!」とのコメント。。そ、そっすか。。。 でも良い経験させてもらいましたです。 もしもまたtalkさせてもらう機会があったら、今度はLTじゃなくて20分枠とかもらいたい。やってみてわかったけど、LTは正直難しいです。 miyagawaさんとかtokuhiromとかはやっぱり慣

    YAPC::Asia 2009 でLTしてきたヨ(でも時間切れ★) - download_takeshi’s diary
  • HTML::Feature 3.00 リリースしました - ダウンロードたけし(寅年)の日記

    前回のエントリで案内した通り、perl文抽出モジュール「HTML::Feature」を全面的に作り直し、リリースしました。すでにCPANにも反映されています。今回の改修で、抽出精度が向上し、且つ全体的にも高速化がなされました。ヤタ! HTML::Feature - Extract Feature Sentences From HTML Documents http://search.cpan.org/~miki/HTML-Feature/ 以下、簡単に新機能をご紹介します。 エンジンモジュールを直列に並べる 従来からコアとなるエンジンモジュールについては、任意のものに置き換えることができるようになっていました。デザパタでいうと「Strategyパターン」です。 version 3.00 からは、任意の個数のエンジンを好きな順番で直列に並べられるようになりました。 例えば全く異なる抽出方

    HTML::Feature 3.00 リリースしました - ダウンロードたけし(寅年)の日記
  • ベイズを学びたい人におすすめのサイト - download_takeshi’s diary

    ベイジアンフィルタとかベイズ理論とかを勉強するにあたって、最初はなんだかよくわからないと思うので、 そんな人にお勧めのサイトを書き残しておきます。 @IT スパム対策の基技術解説(前編)綱引きに蛇口当てゲーム?!楽しく学ぶベイズフィルターの仕組み http://www.atmarkit.co.jp/fsecurity/special/107bayes/bayes01.html いくつかの絵でわかりやすく解説してあります。 自分がしるかぎり、最もわかりやすく親切に解説してる記事です。数学とかさっぱりわからない人はまずここから読み始めるといいでしょう。 茨城大学情報工学科の教授のページから http://jubilo.cis.ibaraki.ac.jp/~isemba/KAKURITU/221.pdf PDFですが、これもわかりやすくまとまってます。 初心者でも理解しやすいし例題がいくつかあ

    ベイズを学びたい人におすすめのサイト - download_takeshi’s diary
  • Q4Mをソースからインストールしてみたメモ - download_takeshi’s diary

    mysql5.1もようやくStableになったことですし、うれしいので話題のQ4Mをインストールしてみました。 今回はソースからコンパイルしてみました。 以下、その際のインストールメモです。 今回インストールするのは各々このバージョンです。 * mysql-5.1.30.tar.gz * q4m-0.8.3.tar.gz mysqlのインストール まずは mysql-5.1.30 です。適当にコンパイルしてください。 configreに渡すオプションは用途によって色々代わると思いますが、今回はこんなパラメータでconfigureしました。 $ ./configure \ --prefix=/usr/local/mysql \ --libexecdir=/usr/local/mysql/bin \ --sbindir=/usr/local/mysql/sbin \ --with-charse

    Q4Mをソースからインストールしてみたメモ - download_takeshi’s diary
  • 手軽にTF/IDFを計算するモジュール - download_takeshi’s diary

    情報検索の分野でよく使われるアルゴリズムで「TF/IDF」というものがあります。 ドキュメントの中から「特徴語」を抽出する、といったような用途でよく使われています。 TF/IDFアルゴリズムのくわしい解説はこことかここを見てください。 今回はこのTF/IDFの計算を「簡単」に実現するためのperlモジュールをCPANに上げましたので、ご紹介します。なまえはLingua::JA::TFIDFといいます。 Lingua::JA::TFIDF - TF/IDF calculator based on MeCab. http://search.cpan.org/~miki/Lingua-JA-TFIDF TF/IDF実装の困りどころ TF/IDFの実装を試みた方であればわかると思うのですが、実際にやろうとすると、TF(Term Frequency)の計算はなんら難しくありませんが、IDF(Inve

    手軽にTF/IDFを計算するモジュール - download_takeshi’s diary
  • HTML::Feature - 重要部分を抽出するモジュール - - ダウンロードたけし(寅年)の日記

    以前からCPANで公開していたモジュールがあるんですが、日語での解説ドキュメントがなかったのと、最近大幅にブラッシュアップしたので、せっかくなので紹介記事を書きます。 HTML::Feature - Extract Feature Sentences From HTML Documents 「えいちてぃえむえる::ふぃーちゃー」と読みます。 ブログやニュース記事など様々なHTML文書から「重要部分」を推測して抽出してくれる perl モジュールです。 「重要部分」とはいわゆる「文」のことですね。文抽出とか焦点抽出とか色々な言い方があるかと思いますが、まぁ要するに特徴的な部分を推測して抽出するわけです。 どういうものか。 例えばブログ記事からヘッダーやフッター、その他のナビゲーションブロックを除いた「記事らしき部分」だけを切り取りたい、とします。 ぱっと思いつくのは「特定のコメントタグ

    HTML::Feature - 重要部分を抽出するモジュール - - ダウンロードたけし(寅年)の日記
  • 1