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命令で実際にサーフェースへの描画を実行します。実行結果をファイルとしてキャッシュする場合、ファイルシステムによる字数制限を受けます。拡張は命令モジュールの追加という形で行います。GMTperson_urlとかにsession_idがつかないと思ったら、最適化のためのコードが、defaulturloptionsを無視するらしい。BenchmarkForRails:Moduleこれは困った。AutoLoadingがうまくいっていないようだが、この手の問題は追跡が難しい。'benchmark_for_rails'しておけば大丈夫だが、気持ち悪いので次の日原因を追ってみた。実行時に読み込まれるlogs.rake冒頭でのrequireで、BenchmarkForRailsモジュールが初期化されて、本来読まれて欲しいはずの、benchmark_for_rails.rbがロードされないのが問題。'/../lib/report.rb'対処法はこちらの通り。思ったら、今朝五時に直ってるじゃないの。GMTGlobalizeを使ってみる。セットアップ適当なRailsアプリを作って、Globalizeをインストール。空行がエラーを起こしているので修正。globalize:setup...成功。View翻訳base_languageを英語に。この辺は、gettextの方が使いやすそうかなぁ。