出張Shibuya.js 24 Lightning Talks

ustreamのJSONP APIを勝手に作ってustreamerを改造するネタを話すつもりだったけど
マッシュアップネタは大して面白くないので別の話でもするか

最速インターフェース研究会
主任研究員 ma.la
ライブドア開発部所属 1982年生まれの30代

あらすじ

  • 空前のustream.tvブームがあって
  • 同時に見れるやつをmiyagawaさんが作って
  • クエリ渡して任意チャンネル同時に見れる奴を作った
  • わりと好評ですぐに飽きた

Going My Wayに紹介されたりする

  • ライフハック!!
  • ライフハック!!
  • ライフハック大好き!!

しかし問題が

  • 誰もHatenaStar.jsを使っていることに突っ込んでくれない

期待した反応

  • ちょwwなにはてな使ってんのwww

実際の反応

  • これは便利
  • 役に立つ
  • 作った人に感謝

お願い

  • ソース読め
  • ボケにはツッコめ

サーバー側:Perlで勝手API作るときは

  • キャッシュしよう。URI::FetchのNoNetworkオプション使うと強制的にキャッシュ使う。
  • JSONPのparamはcallbackがいいよ。無意味に変える必要ないよ。
  • callback関数名はバリデーションかけた方が良いけど.とか[]とか使えないとライブラリで使えなくなって困る
    • 米Yahooで使ってるやつがいい。Catalyst::View::JSONなど参照。

クライアント側:HatenaStar.jsの使い方

  • JSONPをロードするのに便利
  • ホスティングしてくれるので楽ちん。
  • 色んなサイトで使われてるので安心。

Tenの使い方

  • HatenaStar.jsで使われてるユーティリティクラス
  • new Ten(url, class, method) でJSONPを非同期ロード
  • 指定したクラスのメソッドにJSONオブジェクトが渡される

☆がロードされてうざい

  • Hatena.Star.EntryLoader = function(){}

以上

  • ustreamerの話

本日のテーマ

  • JavaScriptでBloomFilterを作ってみた

ネタがないので

  • 昨日作った

Bloom Filterって何

  • 詳しくはwikipediaとかにのってる。
  • ハッシュキーの存在チェックに使える。
  • エラーを許容することでデータサイズをコンパクトにすることができる
  • 同じハッシュ関数を使ってフィルタを作ればフィルタ同士のビット列を比較するだけで類似度の判定ができる。
  • livedoor ReaderのAPIで使ってる

JavaScriptに移植するやり方

  • CPANモジュールのBloom::Filterの丸写し
  • 文字列の破壊的な変更ができないのでビット列を作るのにArrayを使った。
  • 空間効率が全然良くないので、Bloom filterのメリットが全然ない。とても楽しい。

高速化はあとで考えればいいか

  • もっと軽いハッシュ関数使う → Perlとの互換性無くなるけど
  • 要素数が増えると配列の長さが100万とかになる
    • 適当な長さで区切って数値の配列にすると良さそう

JavaScriptでバイト列扱うtips

var str = [
	String.fromCharCode(0),
	String.fromCharCode(0),
	String.fromCharCode(0),
	String.fromCharCode(0)
].join("");
  • こんなんでNUL NUL NUL NULが作れる。
  • printしても何もでないけど文字コード自体はちゃんと保持してる。

文字列をバイト単位で分割するには?

  • 文字列単位でしか分解できない。
  • "あ".split("") => ["あ"]
  • でもcharcodeは分かるからバイト単位で分解はできるよ。
  • JavaScriptでQRコード生成 http://la.ma.la/misc/qrcode/ でbyteSplitというのを作った。
  • encodeURIを使ってutf-8のバイト列に変換できる

でも文字列同士のビット演算とかできないから

  • やっぱ数値で持つのがよい

まとめ

  • CodeRepos.orgにコミットしてあるよ。
  • 人材募集しているのでよろしく

ご清聴

ありがとうございました。
×

この広告は60日間更新がないwikiに表示されております。

Wiki内検索

メニューバーA

ここは自由に編集できるエリアです。

フリーエリア

管理人/副管理人のみ編集できます