サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ニコニコ動画
download-takeshi.hatenablog.com
要するに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
今更Mooseの話題かよ、と思われることでしょうが、自分は常に流行の3年遅れぐらいを全力で追いかけるタイプなので、自分にとっては今が旬。というわけで、Moose的なはなしを書きます。 突然ですが、現役バリバリのperl使いのみなさんに質問です。 POEやらAnyEventやらでちょっとしたアプリケーションサーバを書く場合、みなさんはどうやって「デーモン化」してますか? 自分はもう何回もこの手のものを書いてきたつもりですが、実は未だにベストな手法を編み出せてません。。。 App::DaemonやDaemon::Genericあたりでなんとなく自分流な形を模索した時期もありましたが、結局どれも面倒くさくなって、最近では「もう nohup perl hoge_server.pl & でいいじゃん」みたいな。「止める時は pkill -f hoge_server でいいじゃん、文句アッカ」みたいな
昨日、仕事で開発をすすめていた検索機能をリリースしたので、ちょっと紹介します。 「gooウェブ検索」で、自分に似た検索をしている人たちの関心事が見える機能「みんなの検索」を提供開始 gooのweb検索で適当なキーワードで検索すると、結果表示面の一番したの方に「みんなが検索中」というボックスが表示されます。 これは何かというと、いま入力したキーワードと同じような意味や関心ごとを持って検索している人たちの検索キーワードがストリームっぽく表示される、というモノです。 http://search.goo.ne.jp/option/topics/2011/ 「みんなの検索」は、同じまたは類似した検索キーワードを入力して検索している他のユーザが、どんな検索キーワードを入力しているのかを表示する機能です。あなたに似た人たちが、たった今しらべているキーワードのストリームが表示されます。 これまでの関連ワー
普段持ち歩くノートPCをvaioからmacbook airに変えました。いやっほう!!うれしいナ。 ですが職場ではwindowsなので、macbookだと時折不便なこともあるんですよね。 なのでvirtualboxでwindowsもセットアップしておくことにしました。 「余裕でしょ簡単でしょ」と高をくくっていたんですが、これが意外や意外。苦労させられました。 なのでインストールメモを残しておきます。 CD-ROMドライブがない! 当たり前だね。macbook airだもん。 でも家にはもう1台macbook(白)あるからリモートディスク機能使えばいいんだよね! ・・・と思ったんですが、あれれ?virtualboxではリモートディスクのドライブは認識してくれないみたいです。 「ど、どうすりゃいいのよ!?」と少しだけうろたえてみたんですが、普通に考えて、単にisoイメージを作ってやりゃいんだろ
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 =
すみません。タイトルはやや釣り気味です。 類似検索エンジンというか、そのアイデア程度の話なんですが、以前から考えていた類似検索エンジン風のネタがあったので、ちょっとperlで書いてみたので、そいつを晒してみます。 Luigi https://github.com/miki/Luigi 類似検索なのでLuigi。ルイージとか読みたい人はそう読んじゃっても良いです。(冷) 考え方と仕組み 類似文書の検索、となりますと一般的には超高次元での空間インデックスとかが必要になります。 昔からR-TreeやSR-Treeなど、いろいろと提案されていますが、より高次元になると「次元の呪い」によりパフォーマンスが出なくなる、なんて言われていますね。 そこで最近ではLSHに代表されるような、より高度な「近似」型のインデキシング手法が人気を集めているようです。 で、今回考えたLuigiも実は近似型のインデッ
久しぶりに自然言語処理的な話です。 すこし前にPFIの岡野原さんが公開されたredsvdを試してみました。 redsvd は行列分解を解くためのC++ライブラリであり、特異値分解(SVD)、主成分分析(PCA)、固有値分解などをサポートしています (中略) 例えば、行と列がそれぞれ10万、非零 の要素が100万からなる行列に対する上位20位までの特異値分解を1秒未満で行うことができます. 1秒未満って、す、す、すごくねぇだべか? というわけで早速導入してみますた。 インストール redsvdは内部の行列演算などにeigen3を使っているとのことなので、まずはこいつをセットアップ。あ、そうそうCMAKEも必要だよ。 ちなみに自分の環境でmake checkしたらエラーが少し出てたけど、気にせずそのまま突っ込んでみました。 続いてredsvdをインストール。 マニュアルサイト見ながらやれば問題
大規模データを処理する必要が出て来たので、Hadoopを導入してみることになりました。 以下、導入メモです。 セットアップ 以下のような構成で試してみます。環境はCentOSです。 マスター(host001) ━┳ スレーブ(host002) ┣ スレーブ(host003) ┣ スレーブ(host004) ┗ スレーブ(host005) まずは各マシンにJavaをインストール。JDK1.6を落として来てrpmでインストールするか、yum install java-1.6.0*などとたたけばOKです。(rpmでインストールする場合は http://java.sun.com/javase/ja/6/download.html から jdk-6u18-linux-i586-rpm.binをダウンロードして、実行権限を与えてルートで実行すればインストールできます。) 続いてマスターノードにHado
JavaでRijndael(AES)で暗号化されたデータをPerlで復号化しようと思います。 「暗号方式と秘密鍵だけ聞いておけば簡単にデコードできるっしょ、余裕っしょ」とタカをくくっていたら、思いっきり天罰がくだりました。久しぶりにハマったのであります。 ちゃんと確認しておくべきだった情報 まずは暗号方式と秘密鍵だけでなく、以下の情報をしっかりと確認しておく必要アリでした。 暗号アルゴリズム 秘密鍵 秘密鍵の長さ ブロック暗号化モード IV(Initialization Vector:初期化ベクトル) padding方式 暗号のことちゃんと勉強した事がないので、なんだかよくわからんけど、必要らしい。 せめて事前にここらへんを読んで勉強しておけばよかった。 ぱせらんメモ http://d.hatena.ne.jp/pasela/20100612/crypto DESに代わる次世代暗号「AES
女優の菊川怜さんが学生時代に研究テーマにしていたという事で有名な「遺伝的アルゴリズム」ですが、名前の仰々しさとは裏腹に、意外と直感的に理解できる取っ付きやすいアルゴリズムだったりします。 それにしても菊川怜さん、美人ですねー。こんな先生にイロイロと教えてもらいたかったなぁ。。。 という願望はおいといて、「遺伝的アルゴリズム」を目で見て&手で触って、直感的に「理解したつもり」になれそうなサイトをまとめてみました! 学術的なことはガン無視でいきます。 動画で見て雰囲気を知る まずは動画で見て楽しみましょう。ニコ動から何本か動画を紹介します。 【人工知能】物理エンジンで人工生命つくって学習させた http://www.nicovideo.jp/watch/sm6392515 いきなりですが、強烈なインパクトをはなつ動画です。 人工生命がうにょうにょ動きながら、勝手に「歩き方」を学んでいきます。超
偶然おもしろいモノを発見しました。コンソールで遊べる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
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さんも使ってることだし、きっと良質モジュールなんだろうなーと思って触ってみました。 使ってみて まず
意外と知られていないperlテクってのが、意外とあるもんですね。 最近身の回りでいくつか話題に上がったものがあったので、ちょっと書いてみます。 どれも最新のモダパ的なモノではないけども、知っておくと地味に便利かもしれないノウハウです。 中級レベル以上のperlユーザの人たちでも「お、こんなの知らなかった」というのもあるかもね。 複数項目でのソート よくエクセルなんかで「A列を降順、B列を昇順にして並び替え」みたいなことしますよね? perlで複数項目のsortではどうすればできるでしょうか? じつはとっても簡単。sortの次に続くブロックの中でorするだけです。 例えば以下のような4人の子供たちのデータを年齢順、体重順でソートしてみます。 use strict; my @data = ( { name => '太郎', age => 10, weight => 25, }, { name
ここのところC++でコードを書いているんですが、やっぱりそいつをperlから使いたい。 ということでXSについてお勉強中です。 ごく簡単なものなら書けるようになってきましたが「perlから渡したハッシュをC++側でstd::mapとして受け取りたい」といった特殊なケースではまってしまったのでメモっておきます。 いろいろ悩みはしましたが、結論から言うと「hollyなblog」さんのところでまさにドンピシャな記事を書いてくれていたので、これを参考に頑張ってみました。 以下、サンプルコードと実践手順です。 C++コード hashを渡してstd::mapを返すというケースを想定しているので、以下のようなクラスを準備しました。コサイン類似度を計算するコードです。 vector_tool.hとして以下を用意します。 #include <iostream> #include <map> #include
多次元データをクラスタリングする際に、それらのデータを2次元データに落とし込んで可視化させたいことがあります。そんな時に便利なのが「多次元尺度法」という手法です。 個々のデータ間の距離/類似度が分かっている場合に、それらのデータの座標を求めて、データ構造を復元するようなものです。 詳しい説明は割愛します。知りたい人はwikipediaと金先生の連載を読んで下さい。 体で覚えるタイプなので、とにかく何かデータを処理してみます。 「山手線」の地図を再現 さっそく試してみます。 山手線の各駅同士の直線距離を測っておいて、そのデータから実際の位置関係を復元できるか実験してみます。 山手線全駅の距離を測るのはめんどいので、適当に抜粋してしらべました。 以下のような表になりました。単位はメートルです。 さてさて、この距離表からどのようなデータ構造が再現されるでしょうか? このデータを統計解析ソフトRで
組み合わせ最適化の手法として「動的計画法」というモノがあります。 wikipediaから抜粋 動的計画法(どうてきけいかくほう、英: Dynamic Programming, DP) コンピュータ科学の分野において、ある最適化問題を複数の部分問題に分割して解く際に、そこまでに求められている以上の最適解が求められないような部分問題を切り捨てながら解いていく手法 一見難しそうですが、実は理解するのは以外と簡単です。いろいろな場面で応用が利く便利な手法ですので、覚えておいて損はないものです。コンピュータ系、情報系のお勉強をする人であれば、おそらく一度は習ったりするかもしれません。 ナップサック問題と動的計画法 動的計画法の一番親しみやすそうな例として「ナップサック問題」というのがよく取り上げられます。 こんな感じの問題です。 今ここに様々な大きさの品物が置いてあるとします。そしてそれらの品物は各
クラスタリングツールbayonを使っていて、常々「どうしてこんなに高速に処理できんのかなぁ」と疑問に感じていました。repeated bisectionという手法自体がk-means法などと比べると効率がいいのですが、それにしても、それだけでは説明がつかないほど爆速なわけです。 うまく例えられませんが、自前でk-meansのスクリプトを書いて比べてみると、自転車と新幹線くらいちがうという印象です。はじめてCLUTOを触った時、数万件程規模のクラスタリング処理が本当に「あっ」という間に終わってしまい、びっくりした記憶があります。 きっと実装面でなにか特殊なことがあるんだろうなと思い、mixiエンジニアブログでbayonの記事を改めて読み漁っていたら、以下の部分が目に止まりました。 このクラスタの評価は、クラスタの各要素とクラスタの中心とのcosine類似度の和としています。この和が大きいほど
地味なネタですが、今日はまってしまったのでメモっておきます。 とあるとmysqlのデータをselect * from xxx into outfileで外部ファイルに出力したいとします。 テーブルのスキーマは「URL、タイトル、 HTML本体」という構成だとしましょう。HTML本体の部分は改行がたくさん入っています。 このデータをあとからcsvとして正しく読み込めるようなフォーマットで出力したいわけです。 まずは普通に出力してみます。 select url, title, html from table into outfile "output.tsv"; そうするとこのような結果になります。 http://hoge.com タイトルですよ \ \ \ 〜途中省略〜\ mysql のinto outfileはデフォルトだとTAB区切りで、複数にまたがるデータについてはバックスラッシュでエス
メリークリスマス! 聖なる夜に不慣れなjavascriptをいじってる豚野郎です。 「普段からwebビーコンでユーザの閲覧ページの追跡ばかりしている変態くん。本当はそのユーザが飛んでいった外部ページのURLも知りたいんじゃないのか?ん?我慢すんなよユー。」 と、さっきから心の中でデブな悪魔がささやくのです。クリスマスだというのに、暑苦しいなぁもう。 仕方がないのでやってみましたよ。 <html> <head> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> $(function () { window.addEventListener("unload", function(){ var link_url = document.activeElement.
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が必要。ソースをダウンロー
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スクリプトからス
久しぶりに何か書きます。 情報検索のアルゴリズムで「BM25」というものがあります。 何年か前に某研究所に遊びに行ったときに「TF/IDFより精度のいいやつ」みたいな感じでかなりアバウトに教えてもらいました。 その時は「名前だけでも覚えて帰ろう」と思っていたのですが、帰りに安い居酒屋で大酒をのみ、電車のなかで騒いでしまうほど酔っ払ってすっかりその名前を忘れてしまってました。(なにやってんだか・・・) で、最近Web+DB pressをパラパラ見ていたらBM25の名前を発見!ああ、これだこれだ、思い出したよ! というわけで、重い腰を上げてモジュール化してみました。 githubに上げてあります。 Lingua::JA::OkapiBM25 http://github.com/miki/Lingua-JA-OkapiBM25 そのうちCPANからも落とせるようになります。 正式名称は「Okap
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
ふと気づくと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にあがって
ここのところ、お仕事で管理しているシステムで、夜中に負荷が急上昇する事象が発生しており、夜な夜な対応に追われていました。 (このブログ書いている今も、負荷がじわじわ上昇中なんですが・・・) で、いろいろと調査した結果、ようやく糸口がわかってきました。 結論から言うと、ローカルポートなどのネットワーク資源を食いつぶしていたようです。 以下、調べていってわかったことなどのメモです。 トラブルの事象 運用しているのは Apache2.2 + mod_perl2 なwebサーバで、リスティング広告システムの配信系です。 リスティング広告の配信のシステムって一般的にロジックが複雑でいやーな感じなんですが、このシステムもご他聞に漏れずかなりのひねくれ者で、しかもトラヒックは結構多めです。システム全体で、日に1000万〜2000万クエリくらいかな。幸か不幸か、このご時勢においてもトラヒック的には成長し続
チョー訳その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
最近perl界隈で話題のAnyEventについて、今のうちに習得しておくとid:miyagawaみたいにクールになれて、もしかしてモテるのではないかと思い、よっしゃ、勉強してみるか、ということでドキュメント読み出したんですが、、えらいボリュームですね。心がポッキリ折れました。 い、いや、そんなことではいかん!頑張るぞ。 というわけで、折角なので、チョー訳を残していこうと思います。AnyEventはおさえておきたいけどドキュメントの長さに呆然としてしまったアナタ、ダウンロードたけしと一緒にレッツスタディしようぜ! なお、AnyEventのドキュメントはすごく長いので、ぶつ切りでいきます。最後まで書き綴れるかどうかは不明です。 さらに英語にはあまり自信がないくせに、要所要所ですごく意訳的なことをしています。誤訳などありましたら指摘して下さいませ。 ※原文はこちら http://search.c
9月10日、11日と開催されたYAPC::Asia 2009に参加してきました。 今回はid:ZIGOROuとid:lestrraからお誘いをいただき、スピーカーとして参加させていただきました。ありがとうございます。 それにしてもLTの難しさを実感しましたです。はい。 冒頭から笑いを取りにいったつもりのスライドは、きれいにすべるし、挙句の果てに、3分の2くらいのところまで話したところで、ドラがジャーン!!!「え、もう5分たったの??」って思わず傍にいた牧さんに聞いてしまいましたよp「いやぁ、5分ってのはホント短いんですよ!」とのコメント。。そ、そっすか。。。 でも良い経験させてもらいましたです。 もしもまたtalkさせてもらう機会があったら、今度はLTじゃなくて20分枠とかもらいたい。やってみてわかったけど、LTは正直難しいです。 miyagawaさんとかtokuhiromとかはやっぱり慣
一昨日の晩、蒲田の「吉祥寺どんぶり」という店に入った。前々から「イカレタ店だな」と思っていたんだが、正真正銘イカレタ店だった。メニューも店のたたずまいも、どう見てもイカレポンチなのだ。 店に入り券売機の前でどれにしようか考える。ふと目に入ったのが「禁断の旨辛 ドM丼」。もうこれ以上ひどい名前の丼はないだろうというようなネーミングに、ついつい心ひかれてしまった。 カウンターで待っている間、店員さんが中華鍋でドM丼を作ってくれている様子が見える。 ん、何やら辛し味噌(もしくは豆板醤?)らしきものをバンバン入れているけど、、というか入れ過ぎだろ、おい! しかもごはんののボリュームが尋常ではない。この店の丼ものはデフォルトでごはんが450g!!ばかですかー。 案の定、食べているうちに気持ちよく、ではなく気持ち悪くなってきました。 辛さ自体は、「蒙古タンメン中本」で鍛えた激辛耐性のおかげで、なんとか
次のページ
このページを最初にブックマークしてみませんか?
『download_takeshi’s diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く