タグ

ブックマーク / psychs.hatenablog.com (3)

  • Ragel - Psychs's blog

    http://www.cs.queensu.ca/~thurston/ragel/ Ragel は、ステートマシンコンパイラの一種で、パーサジェネレータとして使われることが多い。その実例として、Mongrel や Hpricot がある。 パーサジェネレータとして Ragel を使う利点は、以下の通り。 プロトコルやデータフォーマットを正確にパーズできる その結果、セキュアなソフトウェアが作れる 外部ライブラリに依存しないコードができる ものすごく速い 特に HTTP server など、速度が求められるサーバを書くときに便利なことがわかる。 参考: http://www.zedshaw.com/tips/ragel_state_charts.html ここでは、簡単な例としてドメイン名のパーザを作ってみよう。ホスト言語は C で。 まずは、Ragel 6.0 をインストールする。 OSX

    Ragel - Psychs's blog
  • InputSwitcher - Psychs's blog

    Leopard で、アプリケーションごとにインプットマネージャの状態を保持してくれないのが微妙に不便だったので、別々に保持するのを作ってみた。要 SIMBL。 http://limechat.net/inputswitcher/index_ja.html 詳しい仕組みはこんな感じ。(ドキュメントより抜粋) InputSwitcherClient.bundle は、SIMBL 経由で各アプリケーションのプロセスに潜り込み、アプリケーションの activate と、deactivate の2つのイベントを、あらかじめ起動しておいた InputSwitcher.app に通知します。 InputSwitcher.app は、各アプリケーションごとに入力ソースの状態を保持しています。activate イベントの通知を受け取ったときに、入力ソースをオン・オフして、以前の入力ソースの状態に復元します。

    InputSwitcher - Psychs's blog
  • JavaScript でお手軽テンプレートエンジン - Psychs's blog

    JavaScript で DOM をがしがしいじるのは大変だけど、でかいテンプレートエンジンを使うのはちょっと大げさだ、というときがある。そんなときに気軽に使えるテンプレートエンジンを作ってみた。 ソースは以下の通り。 function applyTemplate(template, f) { try { return template.replace(/#\{[^#{}]+}/g, function(s) { var v = f(s.slice(2, -1)); return v == null ? '' : v.toString().escapeHTML(); }); } catch (e) { return '[' + e.name + '] ' + e.message; } } 使い方は、 <div id="template" style="display:none"> <h2>#

    JavaScript でお手軽テンプレートエンジン - Psychs's blog
  • 1