タグ

ブックマーク / llamerada.hatenadiary.org (11)

  • Googleの分散データ処理言語Sawzallの統計ライブラリをC++, Ruby, Pythonから利用するライブラリSZaruを公開しました - llameradaの日記

    Googleで利用されている分散データ処理言語SawzallのOSS実装 szl が公開されました。 公開されたソースの中にはSawzallの実行環境の他に大規模データ向けの統計ライブラリが含まれています。この統計ライブラリには高度なアルゴリズムが実装されているので、これを他の言語からも利用できると便利だなと思い、C++, Ruby, Pythonから利用できるようにしました。 便利な統計アルゴリズムの1つに出現回数が上位のN件の要素の抽出(top-N)があります。 top-Nを求める具体例としては、自然言語処理でよく使う、出現回数上位の単語を求める処理があります。この処理の単純な実装では、まず全単語の出現回数を求めておき、次に各単語を出現回数の降順でソートして出現回数上位の単語を求めます。しかし、この実装ではユニークな単語数K(数十万から数百万)に比例したメモリと計算量が必要となります。

    Googleの分散データ処理言語Sawzallの統計ライブラリをC++, Ruby, Pythonから利用するライブラリSZaruを公開しました - llameradaの日記
    send
    send 2010/11/15
  • MySQLでの高速な重み付きランダム表示 - llameradaの日記

    東京都で賢い借金返済方法を教えます!では、MySQLに格納したWikipedia記事をランダムに表示している。速度を気にしないなら、 SELECT * FROM docs ORDER BY RAND() LIMIT 10; で良いのだけど、レコード数が多いと遅くて使いものにならない。そこで、記事IDを1から始まる連番になるようにDBに格納している。このようにすると、アプリケーション側でDBに格納されている文書IDが全て分かるので、ランダムに文書IDを10個選択して、その文書IDのレコードを表示することで、ランダム表示を実現している。 例えば、IDは10個選択するRubyコードは、 ids = Array.new(10){ rand(num_docs) + 1 } で、DBに発行するSQLはこんな感じになる。 SELECT * FROM docs where ID in (id1,id2,.

    MySQLでの高速な重み付きランダム表示 - llameradaの日記
    send
    send 2008/04/22
  • for 文を setTimeout に変換する(継続風) - llameradaの日記

    for 文を setTimeout に変換する - IT戦記が楽しそうだったので、久しぶりにJavaScriptを書いてみた。 継続風に書くと、通常のforループとsetTimeout付きforループが同じようになります。 JavaScriptも楽しいなぁ。また、書きたい。 // 通常版 forloop(0, 3, 1)(function(i, cont){ forloop(0, 7 ,1)(function(j, cont){ console.log('a' + i + "-" + j); cont(); }, cont); }, function(){}); // timeout版 to_forloop(0, 3, 1)(function(i, cont){ to_forloop(0, 7 ,1)(function(j, cont){ console.log('a' + i + "-"

    for 文を setTimeout に変換する(継続風) - llameradaの日記
  • 継続を使ってSjaxをAjaxに簡単に変換する方法 - llameradaの日記

    JavaScriptによる全文検索エンジンの最初のバージョンはAjaxではなく、Sjaxであった。その為、サーバへのリクエストが発生する毎にブラウザが固まってしまい、応答性が悪かった。なぜ、Sjaxで記述したかというと、連続してサーバへリクエストを送り、しかも、サーバからのレスポンスに応じてリクエストを変更するようなAjaxプログラミングが面倒だった為である。このようなSjaxのコード例を次に示す(prototype.jsを使用)。 // (Sjax)サーバからpathのデータをoffsetの位置からlengthバイト取得 function fetch(path, length, offset){ var range = ["bytes=" + offset + "-" + (offset + length - 1)].join(""); var options = { method: "

    継続を使ってSjaxをAjaxに簡単に変換する方法 - llameradaの日記
  • Method Finder for JavaScript - llameradaの日記

    文字列を結合するメソッドがJavaScriptに存在することは分かっているのに、そのメソッドの名前が思い出せず、リファレンスを一々参照することはありませんか? そんな時に便利なMethod Finderを作ってみました。オブジェクト・返り値・引数を与えると、Method Finderはそれらの条件を満たすメソッド名を返します。元々はSmallTalkにあった機能のようです。私もJavaScriptのメソッド名をよく忘れるので、Method FinderのJavaScript版を作ってみました。下記のサイトより試せます。 Method Finder for JavaScript 実装にはAndrew Birkett's MethodFinder in Rubyを参考にしました。 メインのコードはこんな感じです。あまり格好よくありません。 追記:id:brazilさんよりトラックバックを頂きま

    Method Finder for JavaScript - llameradaの日記
  • 「はてなブックマーク」ユーザのクラスタリング結果の公開を停止した理由 - llameradaの日記

    先日の記事で「はてなブックマーク」(はてブ)のユーザをクラスタリングした結果を投稿しましたが、考えるところがあって公開を取りやめました。 参考リンク:クラスタリング技術を使った「はてなブックマーク」でのお気に入りユーザ数ランキング(簡易ジャンル別) 「はてブ」のコメントで公開停止を残念がるコメントがあったので、公開停止の理由を簡単に述べておきます。 公開を停止した一番の理由は、「はてブ」で公開されているデータを勝手に加工する事に関して、同意が十分には得られていない点です。同じ手続きを「ブログ」に対して適用したならば、公開停止はなかったと思います。「ブログ」では、著者が情報の公開・非公開を自分で管理していると自覚しているのが普通ですし、それゆえ、公開されている情報を煮ようが焼こうが問題は発生しにくいでしょう。それに対して「はてブ」では、ユーザが自分のブックマークを一般に公開しているという意識

    「はてなブックマーク」ユーザのクラスタリング結果の公開を停止した理由 - llameradaの日記
    send
    send 2006/05/11
    うーん。逆にこういうのを嫌がる人は非公開にするべきなんじゃないかと思う。
  • クラスタリング技術を使った「はてなブックマーク」でのお気に入りユーザ数ランキング(簡易ジャンル別) - llameradaの日記

    今度は「はてなブックマーク」の「お気に入り」ネットワークで、ジャンル別のランキングを求めてみました。同じユーザから「お気に入り」されているユーザは、同じジャンルに分類されます。詳細は以前の記事を参照してください。 参考リンク:クラスタリング技術を使ったAmazon DVDでの出演回数ランキング(簡易ジャンル別) - llameradaの日記 結果をみると「はてな」の人々が同じクラスタに分類されたり、サブカル系のブックマークをするユーザがまとまっているなど、そんなに結果は悪くないようです。新たな「お気に入り」を探す手助けになるかもしれません。なお、ユーザ数は今回収集した3647ユーザ中での数になりますので、実際より少なくなります。 追記:深い考えもなしに公開してしまいましたが、人を分類するのは問題が多いです。しかも、クラスタリング技術は基的に大雑把で分類精度はあまり高くないのが普通です。い

    クラスタリング技術を使った「はてなブックマーク」でのお気に入りユーザ数ランキング(簡易ジャンル別) - llameradaの日記
    send
    send 2006/05/10
    乗り遅れた。もったいない…。
  • llameradaの日記 - ユーザがページに滞在した時間をサーバに記録するJavaScript

    Ajaxの普及に伴い、ページ当たりのユーザの滞在時間が注目されるようになっている。従来、サービスがユーザに与えるインプレッションの指標としてページ・ビューが広く用いられている。しかし、Ajaxを利用するとページの移動があまり発生しないため、ページ・ビューが低くなってしまう。そこで、インプレッションの指標として、滞在時間を使おうという動きがある。 今回、JavaScriptでユーザの滞在期間が記録できるかどうか調べてみた。取り組む前は難しいかなと思ったが、実際にはとても簡単であった。コードは下記。 (function(){ var start = new Date; window.onunload = function(){ var time = (new Date - start ); var image = new Image; image.src = "/dummy?t=" + tim

    llameradaの日記 - ユーザがページに滞在した時間をサーバに記録するJavaScript
  • llameradaの日記 - 任意のコマンドをreadline化するRubyスクリプト

    telnetなどのreadlineが組み込まれていない環境で入力を間違えた場合、ctrl+BSで文字を削除する(bash環境)。これでも十分ではあるが、慣れ親しんだemacsキーバインドが使えた方が便利だと思った。 そこで、任意のコマンドをreadline環境下で実行するスクリプトrl.rbを作ってみた。使い方は下記のようになる。 rl.rb telnet d.hatena.ne.jp 80 対話環境でctrl+h(1文字削除), ctrl+a(行の先頭へ移動)などが使えるようになる。また、ヒストリも有効にしてある。ただし、^]などのエスケープ・シークエンスが送れなくなるので注意すること。 コードは下記。ライセンスはrubyと同一とする。 #! /usr/bin/env ruby # rl.rb - readline wrapper # by llamerada (http://d.hat

    llameradaの日記 - 任意のコマンドをreadline化するRubyスクリプト
  • llameradaの日記 - Ruby on Railsによるソーシャル・ブックマーク管理デスクトップ・アプリケーション

    Ruby on Railsで作成したweb アプリケーションは、exe形式の実行ファイルにすることが出来る。詳しくは、Distributing Rails Applications - A Tutorialを参照のこと。 この仕組みを知って、何か面白いことが出来ないかなと考えていた。そこで、前から欲しかったソーシャル・ブックマーク管理デスクトップ・アプリケーションを作った。現在のところ、del.icio.usとはてなブックマークに対応している。 何故、こんなアプリが欲しかったいうかというと、自分のブックマークを迅速に検索したいからだ。私はソーシャル・ブックマークとしてdel.icio.usを使っているが、del.icio.usのサーバはそれなりに重い。そのため、目的のブックマークを探し出すのに時間がかかってイライラすることがある。 デスクトップ・アプリケーションならば、計算資源に余裕がある

    llameradaの日記 - Ruby on Railsによるソーシャル・ブックマーク管理デスクトップ・アプリケーション
    send
    send 2006/01/12
    ほほう!
  • JavaScriptの簡易プロファイラ - llameradaの日記

    JavaScriptで少し大きなアプリケーションを作っていると、処理速度がどんどん遅くなってしまうことがある。処理速度を向上させるには、ボトルネックとなっている処理を見つけて、その部分のパフォーマンスを改善するのが一般的である。そこで、ボトルネックを見つけるのに便利なプロファイラを作ってみた。 コードはこちら。 var Profiler = Class.create(); Profiler.prototype.extend({ initialize: function(){ this.keys = []; this.records = {}; }, observe: function(object, name){ name = name || "Method"; for (property in object) { if(typeof object[property] == "functi

    JavaScriptの簡易プロファイラ - llameradaの日記
  • 1