タグ

ブックマーク / reinyannyan.hatenadiary.org (4)

  • リストとしての関数 -> 簡易クロージャの実装 - (new Hatena).blog()

    最近 Lisp がお気に入りです。 今日は、Lisp プログラムがリスト (括弧で括られた式) として表記される、という当たり前の事実について、Emacs Lisp をベースにしながら考察してみたいと思います。 関数はリスト、リストは関数 古い Lisp では、関数は第一要素に "lambda" というシンボルを持つ、というだけの単なるリストであったそうです。 新しい Lisp (Scheme や Common Lisp) では「関数」という独立した型になっていますが、Emacs Lisp では今も古い時代の性質を残しているということで、この点を Common Lisp と対比しながら検証してみます。 lambda 式 (関数) を、そのままの形と、二通りのクォート式で括った形、それぞれについてテストします (Meadow 3.00 と GNU CLISP 2.41 を使用しています)。

    リストとしての関数 -> 簡易クロージャの実装 - (new Hatena).blog()
  • LDR のメモリ・リーク問題について - (new Hatena).blog()

    フィード一覧の全フォルダを一気に開くスクリプトを書こうと思い、ソースを読んでいたら、ある問題にぶつかりました。 ツリー表示における各ルート (フォルダ) は TreeView というオブジェクトによって表されています。そして、それらは後からの参照のためにテーブルに格納されています。 問題と言うのは、作成された全ての TreeView インスタンスが格納されっぱなしになってしまう、ということなんです。 リロードを行う度に新たに TreeView インスタンスが作成されるんですが、その際、もう使われることのない古いインスタンス (への参照) は捨てられずに残ってしまうんですね。 例えばレート表示の場合、リロード回数掛ける 6 個のインスタンスが保持されることになり、これがメモリ・リークとなってしまいます。 以下をアドレスバーで実行して確認してみてください: javascript:alert(k

    LDR のメモリ・リーク問題について - (new Hatena).blog()
    suVene
    suVene 2006/11/19
    つづり間違いとか、ちょっぴり恥かしいバグだなw / # mala 『そんなに直したいなら面接受けに来てください。』
  • livedoor Reader のテンプレートをカスタマイズ - (new Hatena).blog()

    LDR では、フィード一覧や記事など、あらゆるデータの表示が JavaScript+HTML のテンプレート・システムによって行われます。 この HTML 側のテンプレートを変更することで、表示を自在にカスタマイズすることが可能になります。 全てのテンプレートは TEXTAREA 内に文字列として格納されています。 単純な変更であれば $("TEMPLATE_ID").innerHTML = $("TEMPLATE_ID").innerHTML.replace(search, replace);のようにすれば良いんですが、一からセットし直す場合は、"<" ">" 等の特殊文字をエスケープする必要があります: $("TEMPLATE_ID").innerHTML = 'HTML コード'.escapeHTML(); /* Greasemonkey の場合は * new unsafeWindo

    livedoor Reader のテンプレートをカスタマイズ - (new Hatena).blog()
    suVene
    suVene 2006/09/19
    テンプレートのカスタマイズ
  • escapeHTML の実装 3 パターン (ベンチマーク付き) - (new Hatena).blog()

    ウェブを扱うライブラリやプログラムで必ずと言って良いほど見かけるものに、escapeHTML という関数があります。 "&" 等、特別な意味を持つ文字を、表示等のために実体参照 (&amp;) に変換するお決まりの関数なんですが、実装には色々とバリエーションがあるものです。 1. String#replace メソッドを繰り返す (MochiKit 等) function escapeHTML(str) { return str.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;"); }このパターンが最も多く見受けられます。Ruby でも同様に gsub を繰り返す方式を見かけることがあります (例: RSS::Utils.html_escape)。 2. Str

    escapeHTML の実装 3 パターン (ベンチマーク付き) - (new Hatena).blog()
  • 1