圧縮に対応することによって無事50MBにまでスリム化することに成功する。使うリファレンス群はそもそもサイズが5MB程度なので、たいして役に立たないことに気がつき衝撃を受ける。化するが、今度はインデックスが大きすぎるためか検索がもたつくことに気付く。改造を施し、高速化することを決意したのだった。一回のインクリメンタル検索処理あたり、0.3~1秒程度かかっていたのが100倍くらい速くなった。体感では100倍とはわからないが、もたつきが感じられないレベルになった。インデックスの最初の二文字を抜き出してHashで持ち、検索文字列の最初の二文字でO(1)でしぼりこむ仕組み。高速化の恩恵は最初の数文字の偏りに大きく依存すると思うけど、そもそもそんな状況では、インクリメンタル検索が快適ではないので気にしないこと。宣言があると外部CSSが効かない(詳細不明)問題とか、ruby-cocoaでsize/countが無限再帰になる問題とか、Chmerとtypoする問題などにも嵌って大変だった。その後、バージョン違いがたくさん(railsだけで5個くらい)あったgemを削除しまくったので、普通に速くなってあんまり意味がない。300種類くらい入れて複数のバージョンを保持しているような人しか恩恵が得られないかも。ちなみに、もたつきが気になるというのは、僕のタイプ速度より速く、キーリピートより遅いくらい。GMT僕はあんまり携帯HTMLをいじらないけど、タイトルのような問題があるという話はよく聞く。CSSにはスコープの概念がないので、TinyMCEなどのWYSIWYGエディタを使っていると、Wordなどから<style>タグを含む断片が貼付けられて、ページ全体のスタイルに影響を与えてしまう、などといったことが起こる。いった問題への対応策として、CSSのインライン化が有効に働きそうなので、調べてみた。いったライブラリが存在しているらしい。我らが(?)Rubyはというと、(最近遊びでCSSParserを書いたので、なければ作ろうと思ってたけど)やっぱり存在していて、これが結構便利そう。CSSしかし、こんな名前で公開されても...。tamtamコードがドキュメント、とばかりに、主要な部分を読んでみた。red;"></div>"素晴らしい。:documentを使うことによって、HTML内の<style>タグの内容をそのまま使うこともできる。red;"></div>"スタイルを適用した後の余計なclass属性は、元から存在するclass名と衝突するかもしれない。バグなのか何なのか、スタイルを適用する前にclassを全部取りさってしまうので(僕の)望む動きとは違うようだ。適用されてない!携帯電話...携帯電話用に使う場合、<link>タグを認識する部分を自分で書かないといけない。...'よりも、bgcolor='...'が好まれるそうだ。CSSだけでは属性を指定するという使い方は出来ないので、その場合も独自に拡張する必要がありそうではある。APIなるものがあって、WiiリモコンとCanvasを使って色々できる。ふりをするコードを書いてみた。keyを押したままサーバを起動する。bookmaklet必要に応じてページの初期化処理を呼び出す。localhostに立てたRubyサーバに繋いで、JSON形式で受け取った情報を、javascriptの世界に渡しているだけです。テストSafariでしかテストしてない;;画質のテストのため、同じムービーをYoutubeにもアップロードしてみた。これがなきゃ始まらない。--with-opencv-include=/opt/local/include/opencvとやったらいけた。Gyazoモジュールを追加しました。デフォルト環境にはロードされないので、自分でロードする必要があります。pluginとして動く言語、purlを公開しました。クライアントサイドから柔軟な画像処理を行うために開発されました。サムネイルの生成などを行うプラグインはいくつかありますが、そのどれよりも強力で汎用性、拡張性があります。デフォルトの環境では、画像の保存にデータベースを利用します。imagesテーブルに、blob型のdataカラムを追加してください。以下のように記述します。実行されるようにします。書く場所は先頭に近い方がいいと思います。endendそんなこんなでセットアップは終わり。URL上で記述されることを前提としています。逆ポーランド記法を採用しています。データと命令を書かれた順番にスタックマシンにプッシュしていき、命令が実行された結果がスタックマシン上につまれていきます。命令列は最初に:で区切られ、数字としてパースできるものは数字へ、()で囲われた部分は文字列へと変換されます。ポリシーデフォルトで用意される全ての命令は、外部の値に依存しません。命令列が決まれば実行結果は確定します。このポリシーにより、全ての実行結果がキャッシュ可能になります。スタック上に既にある数字1を消費して、ID=1のImage#dataをデータベースからロードして、スタック上にプッシュします。スタック上の画像データをPNG形式のバイト列に変換し、mimetypeとともにスタック上に積みます。次の例では、画像をGIF形式に変換しています。/purl/1:load:to.gif画像のリサイズ次の例では、画像を100x100にリサイズしています。次の例ではふたつの画像を合成しています。/purl/1:load:9:load:composite:to.png次の例では順番を入れ替えています。/purl/1:load:9:load:swap:composite:to.pngコメントスタックに積んだ後すぐにpopすると、単純に無視されるので、コメントとして使えます。キャッシュのライフサイクルコントロールなどに使えると思います。詳しくは解説しませんが、試験的にcairoの描画機能をベースにした図形描画命令を用意しています。ctx命令で、指定したサイズのcairoコンテキストを準備し、xtc命令で実際にサーフェースへの描画を実行します。実行結果をファイルとしてキャッシュする場合、ファイルシステムによる字数制限を受けます。拡張は命令モジュールの追加という形で行います。補完関数だけど、なんだか遅いなと思ってたら間違いがあって、毎回cheatコマンドを実行していた。元エントリ中のコードは修正済みだが、差分は以下の通り。_cheat遅さに困ってた人ごめんなさい。あって、たまに便利である。sheetsで見られる。なんだけど、数が多すぎてもうどうしようもないので、さらに便利にするために、zshの補完を使ってみた。一応再利用できるようにしてあるけど、ちゃんと調べたら既にありそうだ。追記:いつまでたってもassertionsの内容が古いままだなぁと思っていたら、キャッシュしてた。--newでキャッシュをクリア。Code.他にもあると思うけど。いうのどうやって探したらいいんだろう。追記:たった二つから使っていいのかわからないが、polyglotと呼ぶらしい。