タグ

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

  • TagGridのデータ配置アルゴリズムの簡単な解説 - llameradaの日記

    はじめに TagGridでは16000毎のFlickrの写真を、写真のタグにしたがって格子状に配置しています。この配置アルゴリズムについて簡単に説明したいと思います。 基的なアイデア まず、入力となるのはN個のタグ付きデータとします。また、K種類のタグがあるとします。 TagGridでは、このN個のデータとK種類のタグがそれぞれ平面上に配置されるとします。 データだけでなく、タグも2次元平面上に配置するのが大事な点です。 基的な考え方としては、あるデータのタグが例えばseaとsunの場合、このデータの位置がseaタグと sunタグの近くになるようにデータとタグを配置します。データは複数のタグを持つので、一番良い配置方法というのは簡単には決定できません。そこで、なるだけ良さそうな配置を求めてみます。 フォーマルな問題定義 基的なアイデアを、もう少しフォーマルに定義します。 n番目のデー

    TagGridのデータ配置アルゴリズムの簡単な解説 - llameradaの日記
  • 「なぞり出し」ユーザ・インターフェイスを「気持ちいい」と感じる理由 - llameradaの日記

    はじめに 先日公開したTagGridは比較的好評だったようでAsiajinにもとりあげて頂きました。 Flickr mashup on Google App Engine from Japan – Asiajin TagGridでは、画面全体を埋めつくすように75x75のサムネイル画像を表示しています。1024x768と比較的小さいウィンドウサイズの場合でも、表示される写真の数は70枚くらいになります。 TagGridでは、これらのサムネイル画像を一度に全部表示するのではなく、マウスを移動させるごとに、マウスでなぞった箇所の写真を表示するようにしています。このUIは個人的にもかなり気に入っているのですが、はてなブックマークでのコメントでも「気持ちいい」との評価を頂けているようです。そこで、このUIをなぜ「気持ちいい」と感じるのか理由を考えてみました。 はてなブックマーク - 16000枚の

    「なぞり出し」ユーザ・インターフェイスを「気持ちいい」と感じる理由 - llameradaの日記
    miya2000
    miya2000 2008/05/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の日記
  • GoogleのBigTableの特長の1つはエンジンとストレージが疎結合であること - llameradaの日記

    GoogleのBigTableの特長の1つはエンジンとストレージが疎結合であることである。 MySQLやPostgreSQLではSQLクエリを受け付けるマシン(エンジン)と、実際にデータを格納するマシン(ストレージ)は同じである。つまり、エンジンとストレージが密結合である。 エンジンとストレージが密結合である利点は、ストレージへのアクセスが、ネットワーク越しの場合に比べて高速なことである。 しかし、この利点は薄れつつある。ディスクへのアクセスはメモリへのアクセスに比べれば遥かに低速である。そのため、ストレージをメモリにキャッシュして運用することが多い。そして、常にストレージをメモリにキャッシュするならば、ストレージがローカルディスクにあるが、ネットワーク越しの別マシンにあろうが大差ない。必要に応じてメモリに読み込むだけである。 GoogleのBigTableではストレージはGFS上に格納さ

    GoogleのBigTableの特長の1つはエンジンとストレージが疎結合であること - llameradaの日記
  • 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の日記
  • JavaScriptによる全文検索エンジン - llameradaの日記

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

    JavaScriptによる全文検索エンジン - llameradaの日記
    miya2000
    miya2000 2007/01/25
    Operaはリクエストヘッダのセットに制限あり
  • JavaScript で private/public の実現 - llameradaの日記

    JavaScript は意外に強力な言語である。 http://d.hatena.ne.jp/brazil/20050829/1125321936 Private Members in JavaScript これらの記事に触発されて、prototype.js風にprivate/public機能をJavaScriptで実現してみた。こんな風にかける。 var Hoge = LayeredClass.create(); Hoge.prototype = { __private: { privateMethod: function(){ alert("public:" + this.publicVariable + "; private:" + this.privateVariable); } }, __public:{ publicVariable: null, initialize: fun

    JavaScript で private/public の実現 - llameradaの日記
  • 1