タグ

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

  • ブロッキングする処理を外部プロセスに任せる - AnyEvent::Workerを使ってみた - download_takeshi’s diary

    AnyEventを使う場合に、どうしてもブロッキングしてしまうような処理があるとして、それを外部プロセスとして切り出しつつ、メインのイベントループの中に取り込みたいんだよな、と。 そんな時はAnyEvent::Workerがよさそうです。 AnyEvent::Worker - Manage blocking task in external process http://search.cpan.org/~mons/AnyEvent-Worker/ POEで言うところのPOE::Component::Genericのようなものらしいです。使いこなせるようになるといろいろと便利! use strict; use warnings; use AnyEvent; use AnyEvent::Worker; $|++; print _timestamp(), "開始しまーす\n"; my $cv =

    ブロッキングする処理を外部プロセスに任せる - AnyEvent::Workerを使ってみた - download_takeshi’s diary
    otsune
    otsune 2011/08/10
  • perlで高速な類似検索エンジンを構築できるようにしてみた - download_takeshi’s diary

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

    perlで高速な類似検索エンジンを構築できるようにしてみた - download_takeshi’s diary
    otsune
    otsune 2010/11/22
  • Javaで暗号化したデータをPerlで復号化しようとしたら大変だった件 - download_takeshi’s diary

    JavaでRijndael(AES)で暗号化されたデータをPerlで復号化しようと思います。 「暗号方式と秘密鍵だけ聞いておけば簡単にデコードできるっしょ、余裕っしょ」とタカをくくっていたら、思いっきり天罰がくだりました。久しぶりにハマったのであります。 ちゃんと確認しておくべきだった情報 まずは暗号方式と秘密鍵だけでなく、以下の情報をしっかりと確認しておく必要アリでした。 暗号アルゴリズム 秘密鍵 秘密鍵の長さ ブロック暗号化モード IV(Initialization Vector:初期化ベクトル) padding方式 暗号のことちゃんと勉強した事がないので、なんだかよくわからんけど、必要らしい。 せめて事前にここらへんを読んで勉強しておけばよかった。 ぱせらんメモ http://d.hatena.ne.jp/pasela/20100612/crypto DESに代わる次世代暗号「AES

    Javaで暗号化したデータをPerlで復号化しようとしたら大変だった件 - download_takeshi’s diary
    otsune
    otsune 2010/08/19
  • 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
    otsune
    otsune 2010/07/19
  • 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
    otsune
    otsune 2010/06/16
  • 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
    otsune
    otsune 2010/06/15
  • 知ってそうで意外と知られていないperlの小技 10選 - download_takeshi’s diary

    意外と知られていないperlテクってのが、意外とあるもんですね。 最近身の回りでいくつか話題に上がったものがあったので、ちょっと書いてみます。 どれも最新のモダパ的なモノではないけども、知っておくと地味に便利かもしれないノウハウです。 中級レベル以上のperlユーザの人たちでも「お、こんなの知らなかった」というのもあるかもね。 複数項目でのソート よくエクセルなんかで「A列を降順、B列を昇順にして並び替え」みたいなことしますよね? perlで複数項目のsortではどうすればできるでしょうか? じつはとっても簡単。sortの次に続くブロックの中でorするだけです。 例えば以下のような4人の子供たちのデータを年齢順、体重順でソートしてみます。 use strict; my @data = ( { name => '太郎', age => 10, weight => 25, }, { name

    知ってそうで意外と知られていないperlの小技 10選 - download_takeshi’s diary
    otsune
    otsune 2010/06/12
    メソッドオーバーライドはlocalつかった例の方が害がなくて良い気がする。
  • bayonやCLUTOが爆速な理由 - download_takeshi’s diary

    クラスタリングツールbayonを使っていて、常々「どうしてこんなに高速に処理できんのかなぁ」と疑問に感じていました。repeated bisectionという手法自体がk-means法などと比べると効率がいいのですが、それにしても、それだけでは説明がつかないほど爆速なわけです。 うまく例えられませんが、自前でk-meansのスクリプトを書いて比べてみると、自転車と新幹線くらいちがうという印象です。はじめてCLUTOを触った時、数万件程規模のクラスタリング処理が当に「あっ」という間に終わってしまい、びっくりした記憶があります。 きっと実装面でなにか特殊なことがあるんだろうなと思い、mixiエンジニアブログでbayonの記事を改めて読み漁っていたら、以下の部分が目に止まりました。 このクラスタの評価は、クラスタの各要素とクラスタの中心とのcosine類似度の和としています。この和が大きいほど

    bayonやCLUTOが爆速な理由 - download_takeshi’s diary
    otsune
    otsune 2010/02/13
  • クラスタリングツールbayonを便利に使うText::Bayonを書きましたよ - download_takeshi’s diary

    JPerl Advent Calender 2009 のhacker trackに「Perlではじめるテキストマイニング」というタイトルで記事を書きました。テキストマイニング系のモジュールを色々紹介しているので、興味ある人はぜひご覧ください。 さてさて、記事の最後の方で軽くふれましたが、つい先日 Text::Bayon というモジュールをリリースしました。 Text::Bayon - Handling module for the clustering tool 'bayon' CPAN : http://search.cpan.org/~miki/Text-Bayon/ Github : http://github.com/miki/Text-Bayon それの具体的な使い方を紹介します。 何をするものか? Text::Bayonはクラスタリングツールbayonをperlスクリプトからス

    クラスタリングツールbayonを便利に使うText::Bayonを書きましたよ - download_takeshi’s diary
    otsune
    otsune 2009/12/12
  • ギレンも登場!BM25なPerlモジュール書いたよ - download_takeshi’s diary

    久しぶりに何か書きます。 情報検索のアルゴリズムで「BM25」というものがあります。 何年か前に某研究所に遊びに行ったときに「TF/IDFより精度のいいやつ」みたいな感じでかなりアバウトに教えてもらいました。 その時は「名前だけでも覚えて帰ろう」と思っていたのですが、帰りに安い居酒屋で大酒をのみ、電車のなかで騒いでしまうほど酔っ払ってすっかりその名前を忘れてしまってました。(なにやってんだか・・・) で、最近Web+DB pressをパラパラ見ていたらBM25の名前を発見!ああ、これだこれだ、思い出したよ! というわけで、重い腰を上げてモジュール化してみました。 githubに上げてあります。 Lingua::JA::OkapiBM25 http://github.com/miki/Lingua-JA-OkapiBM25 そのうちCPANからも落とせるようになります。 正式名称は「Okap

    ギレンも登場!BM25なPerlモジュール書いたよ - download_takeshi’s diary
    otsune
    otsune 2009/12/08
  • 最速ブログウオッチャー - download_takeshi’s diary

    時代は「リアルタイムweb」ということで、強引にリアルタイムっぽいアプリを作ってみました。 題して「最速ブログウォッチャー」です。 「最速」ってついてますけど、当はそんなに速くないです。なるはやって言うほうが正しいけど、聞こえが良いので最速って言っておきます。 でもって、このブログの右側に貼り付けてみました → これは何か さてさて、こいつは何をしているかと言いますと、「国内の人気ブロガー」と思われるフィードURLを数千〜1万件程度かき集めてきて、たくさんのプロセス×非同期処理で頑張って随時チェックしまくっています。 そして最新エントリを見つけた瞬間にブラウザに送りつけます。 サーバとクライアントの間はFlashのXMLSocket経由で永続的につなげてます。 夜中とか、たぶんほとんど更新されないと思いますが、気長に待っているとポツリポツリと新しいデータが届くんじゃないでしょうか。 頑張

    最速ブログウオッチャー - download_takeshi’s diary
    otsune
    otsune 2009/11/26
  • ローカルポートを食いつぶしていた話 - download_takeshi’s diary

    ここのところ、お仕事で管理しているシステムで、夜中に負荷が急上昇する事象が発生しており、夜な夜な対応に追われていました。 (このブログ書いている今も、負荷がじわじわ上昇中なんですが・・・) で、いろいろと調査した結果、ようやく糸口がわかってきました。 結論から言うと、ローカルポートなどのネットワーク資源をいつぶしていたようです。 以下、調べていってわかったことなどのメモです。 トラブルの事象 運用しているのは Apache2.2 + mod_perl2 なwebサーバで、リスティング広告システムの配信系です。 リスティング広告の配信のシステムって一般的にロジックが複雑でいやーな感じなんですが、このシステムもご他聞に漏れずかなりのひねくれ者で、しかもトラヒックは結構多めです。システム全体で、日に1000万〜2000万クエリくらいかな。幸か不幸か、このご時勢においてもトラヒック的には成長し続

    ローカルポートを食いつぶしていた話 - download_takeshi’s diary
    otsune
    otsune 2009/10/15
  • 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
    otsune
    otsune 2009/09/23
  • AnyEvent::Intro チョー訳 その1 - download_takeshi’s diary

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

    AnyEvent::Intro チョー訳 その1 - download_takeshi’s diary
    otsune
    otsune 2009/09/23
  • 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 リリースしました - ダウンロードたけし(寅年)の日記
    otsune
    otsune 2009/07/29
  • 本文抽出モジュールを作り直す - download_takeshi’s diary

    2年ほど前にHTML::FeatureというPerl文抽出モジュールを書きました。 こいつはブログやニュース記事から「文らしき箇所」を適当に推測して抽出してくれるモジュールでして、リリースした当時はライバルもいなかったので、ブログなどでは結構反応がよかったです。外国の方も何人か使ってくれたりして、それなりに充実感のあるモジュールでした。 しかし、昨年HTML::ExtractContentが出現してからは、すっかりその地位を奪われ&忘れられた感がありました。作者としては「ま、いっか」的なノリだったのですが、最近になって急に「文抽出界での復権を目指し全面リメイクを敢行するよ!」と思うに至りました。 改善方針 方針ってほどの方針ではありませんが、 - サイトごとに定義できる部分はすなおに定義する - アルゴリズムに頼りすぎない - google adsenceの人気にあやかる - 全体

    本文抽出モジュールを作り直す - download_takeshi’s diary
    otsune
    otsune 2009/07/22
    naoyaさんはもう「有料会員の全文検索のためにはてブのそれは低機能のままでいいや」と思い込もうとしてる説→「カッチョイイアルゴリズム」に悦に入っちゃって、その割には精度がでなかったり、変に理屈っぽい部分に
  • 潜在的意味インデキシング - download_takeshi’s diary

    id:naoyaさんやたつをさんなどの超有名人な方々が以前から実施されている「IIR輪読会」というものがありまして、どうやら今回は第18章の "Matrix decompositions and latent semantic indexing"を輪読したようです。 http://d.hatena.ne.jp/naoya/20090208 http://chalow.net/2009-02-08-2.html Latent Semantic Indexingとは、通称LSIとかLSA(Latent Semantic Analysis)とかいいますが、日語だと「潜在的意味インデキシング」なんて呼びますね。 簡単に言ってみると でっかいマトリックス(数万×数万とかの行列)をたとえば「数百×数万」ぐらいにまで、ぎゅぎゅっと横に押しつぶすように圧縮してみると、あら不思議、のこった行列はとても意味

    潜在的意味インデキシング - download_takeshi’s diary
    otsune
    otsune 2009/02/10
  • Kamaitachi入門(その2) - download_takeshi’s diary

    前回に引き続きperlのRTMP実装であるKamaitachiのコードリーディングです。 今回はKamaitachi体のソースコードを見ていきます。 lib以下のモジュールファイルの構成 [miki@vmware kamaitachi]$ tree lib lib |-- Kamaitachi | |-- IOStream.pm | |-- Packet | | `-- Function.pm | |-- Packet.pm | |-- Service | | |-- AMFHandler.pm | | |-- AutoConnect.pm | | |-- AutoConnectACL.pm | | |-- Broadcaster.pm | | |-- ChildHandler.pm | | |-- ConnectionHandler.pm | | |-- Core.pm | | |--

    Kamaitachi入門(その2) - download_takeshi’s diary
    otsune
    otsune 2009/01/08
  • 名義尺度間の連関係数を算出するperlモジュール - ダウンロードたけし(寅年)の日記

    データマイニングを行う際に、適当な2つの変数にどれだけの相関関係があるのか確かめたくなったとします。 それらのデータはいわゆる「名義尺度」なデータ(地域別の野球チームの好き嫌いなど)だとしましょう。 名義尺度なデータ間における連関係数と言えば「クラメール係数」。 これをぱっと算出してくれるモジュールが欲しくなったので書いてみました。 Statistics::Associations - Calculates Association Coefficients of Nominal Scale. http://search.cpan.org/~miki/Statistics-Associations/ 使い方はこう。 use strict; use Statistics::Associations; my $asso = Statistics::Associations->new; my $m

    名義尺度間の連関係数を算出するperlモジュール - ダウンロードたけし(寅年)の日記
    otsune
    otsune 2008/11/24