タグ

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

  • Google WSDM'09講演翻訳:大規模な情報検索システム構築における課題(1) - llameradaの日記

    GoogleのFellowであるJeffrey Dean氏のWSDM'09における講演"Challenges in Building Large-Scale Information Retrieval Systems"のスライドを翻訳してみました。Googleの検索システムの10年間の進化の軌跡が紹介されており、興味深い話が満載です。個人的にはディスクの外周部と内周部を使い分けている話がツボでした。なお、イタリック体で一部解説・感想をいれています。翻訳は素人なので詳しくは元の資料を参照してください。 スライドの入手元:Jeffrey Dean – Google AI 検索システムに取り組む理由 チャレンジングなサイエンスとエンジリアニングのブレンド 多くの魅力的な未解決な問題が存在する。 CS(コンピュータサイエンス)の多数の領域にまたがる。 アーキテクチャ、分散システム、アルゴリズム、圧

    Google WSDM'09講演翻訳:大規模な情報検索システム構築における課題(1) - llameradaの日記
  • AjaxにおいてXMLHTTPRequestとIFRAMEのどちらを使うべきか? - llameradaの日記

    JavaScriptによりサーバと非同期通信する際の手段にはXMLHTTPRequest(XHR)とIFRAMEがある。Ajaxと言えば普通はXHRだが、IFRAMEを使うことによってもサーバとの非同期通信が可能である。IFRAMEの場合、サーバと通信するタイミングでIFRAMEのsrcを変更し、IFRAMEを再読み込みする。そして、IFRAMEの読み込みが終了したら、親ページのコールバック関数に、IFRAMEのデータを渡すことで非同期通信が実現できる。たしか、初期のGoogle MapsはXHRでなくIFRAMEをAjaxに使っていたと思う。 XHRとIFRAMEのユーザビリティにおける最大の違いは、サーバとの通信処理のユーザへの見え方である。XHRの場合、ブラウザはサーバとの通信を画像の読み込みと同じように扱う。一方、IFRAMEの場合、ブラウザはサーバとの通信はリンクのクリックと同じ

    AjaxにおいてXMLHTTPRequestとIFRAMEのどちらを使うべきか? - llameradaの日記
    toton
    toton 2008/10/19
    iframe
  • 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の日記
    toton
    toton 2008/09/06
  • 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の日記
    toton
    toton 2008/01/20
    継続
  • llameradaの日記 - JavaScript でマルチスレッド・デザインパターン

    JavaScriptでデザインパターンを書いてみる。とはいえ、いまさらFactoryパターンなど書いても面白くないので、マルチスレッド・デザインパターンにする。 もちろん、JavaScriptの言語仕様にスレッドなどない。しかし、ブラウザ環境では実質的にスレッドが存在する。スレッドが発生する場面には2種類ある。1つは、イベントである。例えば、ユーザのクリック動作によってonclickイベントが発生した時、onclickイベントハンドラだけを処理するスレッドが発生するとみなせる。もう1つは、setTimeoutとsetIntervalメソッドである。これらのメソッドでは、一定時間後に、別の処理を実行させるが、この処理は現在の処理と並行的に実行される。つまり、スレッドとみなせる。個人的には、setTimeoutをアニメーションなどの小細工だけに使うのはもったいないと思う。setTimeoutの

    llameradaの日記 - JavaScript でマルチスレッド・デザインパターン
  • JavaScriptで簡易スタック・トレース&プロファイラ - llameradaの日記

    しばらく前にJavaScriptでのスタック・トレースの保存が話題となっていた。 最速インターフェース研究会 :: JavaScriptでDebugScreen、その2 http://d.hatena.ne.jp/brazil/20060117/1137427933 これらの記事を読んだとき、以前作ったプロファイラの仕組みを利用すれば、簡単なスタック・トレースならば保存できそうかなと思った。そこで、試しに作ってみた。コードは下記。 var FuncCallObserver = function(){ var self = this; self.listeners = ; self.observing = false; self.observe = function(object, name){ name = name || object.constructor; for(property

    JavaScriptで簡易スタック・トレース&プロファイラ - llameradaの日記
    toton
    toton 2007/08/25
    プロキシパターンでjavascriptのstacktrace保存
  • 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
  • JavaScriptによる全文検索エンジン - llameradaの日記

    JavaScriptでインデックス型の全文検索エンジンを作ってみた。全文検索エンジンを作る際に問題となるのは、インデックスデータを部分的に読み込む方法である。通常はmmapやpreadなどを使ってファイルの一部を部分的に読み込むのだが、もちろん、ブラウザには使えない。ブラウザでファイルの一部分を読み込むには2通りの方法がある。1つは、ファイルを多数のファイルに分割する方法であり、もう1つはHTTPリクエストのRangeヘッダを利用して、ファイルの一部を取得する方法である。前者の利点は、ブラウザのキャッシュが効くことや、対応ブラウザが多いことである。後者の利点は、ファイル数が少なくなるので、インデックスの管理が容易になることである。今回はRangeヘッダの実用性にも興味があったので、後者の方法を用いた。 参考ページ:最速インターフェース研究会 :: Ajaxを使ったシンプルなチャット 転置イ

    JavaScriptによる全文検索エンジン - llameradaの日記
    toton
    toton 2007/01/26
    インデックス生成プログラムはRuby HTTPリクエストのRangeヘッダを利用して、ファイルの一部を取得 転置インデックスの構成は単純な 1gram + 連接情報
  • 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スクリプト
  • 1