--with-opencv-include=/opt/local/include/opencvとやったらいけた。楽しく遊んでいたけども、デスクトップアプリケーションのような物を作るのには力が不足していると感じていた。cappuccinoというプロジェクトを見つけてきて、しばらくソースを眺めていたりしたのだけど、これはいい。久々にピリピリ来るプロジェクト。APIに慣れ親しんだせいもあるけど、それを差し引いても、よくできている。興味と暇のある人は是非、調べてみて欲しい。なんかもこれで作られている。ソースを見ると、こんな調子だ。読み込むと、その場でJavaScriptにコンパイルされる。Objective-Cのランタイム(Cの関数)とプリプロセッサだけでこしらえてある(と思う)のだが、その手の抜けた?実装とは裏腹に強力なオブジェクト指向機能を持っている。その手法をJavaScriptに対して適用したのを見て、この方法の持つシンプルさと力ににやにやせずにはいられない。APIはフルスペリングでAPIが長いのでとても覚えられない。置いてあるので、使うなり改良するなりしてください。メソッドの定義に型を書くんだけど、コンパイルの時点で廃棄されている。コード補完を作るにあたって、この型情報は非常に役に立った。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でキャッシュをクリア。したJavaScriptを試してみたい時はあるので、どうにかならないか試してみた。iPhone若干妙なところもあるけど、一応動く。したコードなら、思ったよりさくさく?かける。高度なカーソル移動や、単語境界まで削除、みたいな機能は欲しいなぁ。touchイベントを使うので、普通のSafariで動かない。使って、著名なライブラリをロードできる機能もつけてみた。d=dojo書き上がったJavaScriptはメールで送信できるらしい。/></h2></div>このような文書で、aのリンク先を訪れると、div.entryの色が変わるようにしたい。background-color:gray;}でうまくいった。iPhone向けなので、Safari限定で考えられるのがうれしいところ。実際には背景色ではなくて、新たに生成されたノードをdiv.entryにぴったり張り付くようにしている。GMT文字列をsplitしてsortしてuniqしてjoinする.(いわゆるujj問題)array.string#concatはWikibooksから。ghostscript組み込みらしい。debug.jsを順番に読み込まないといけない今回のような場合はちょっと工夫が必要になる。effect.jsはPrototype定数が定義されるまで読まない、debug.jsはEffect定数が定義されるまで読まない、など。それとは別に、すでにprototype.jsが読み込まれている場合は、prototype.jsの読み込みをご遠慮する機能もつけてある。ブックマークレット中の最後の方の@とか$とかにはさまれているあたりがそれ。evalして例外が上がらなければ、あるいは上がれば、ロードして、次へ。いうわけか、一番使いたいIEで動かない。errorがでたりでなかったりするあたりで、ようやく、bookmarkletの文字数制限を思い出した。いうわけでそこから先は、コードゴルフIE杯。今では、400台前半に落ち着いて、無事動くようになり、IE6SP2でも余裕がある。