GMTWebkitの新しい奴で。GMTguardはファイルの変更を検知して、決められたタスクを実行するためのツールである。それぞれのファイルシステム変更検知APIに対応しており、それ以外のプラットフォームではポーリングにて変更検知を行う。以下の.coffeeファイルに変更があった場合即座にコンパイルされ、dist/以下に.jsファイルが生成される。rb-fseventは入れなくても動くがその場合はポーリングになる。Mac以外のOSではこうするらしい。Windowsの場合guard-coffeescriptの他にも様々なguardがあるようです。GMT前回のエントリから早一年半。Atlasのベータプログラムもいつの間にかスタートして、心躍るネタを提供してくれるObjective-J/Cappuccino.一方僕はVimScriptを改良した。init]という補完が行われるようになった。さんらとSDLをWebSocketと組み合わせて...という話をしていておもしろそうだったので実装してみた。WebSDLRuby/SDLの画面描画を全て文字列としてシリアライズし、WebSocketで送信、Canvasに描画する。ブラウザ上で発生したイベントをWebSocketで送信、SDLのイベントモデルの中に還元してやる。いうのが基本的な仕組み。webでWebSDL版が起動するようになっている。Canvasに対応したブラウザで開く。Canvasを使うだけでは芸が無いので、マルチユーザに対応、ユーザ間の情報共有にも対応してみた。0.1秒毎に更新しているのがかっこわるいが、適切なイベントに基づいた処理をすれば、パズルゲームやアドベンチャーゲームなど頻繁に画面更新のないものなら実用的なものができる可能性がある。ウェブへぇボタンとかね。現在の方法では実現が困難である。GMTInternetExplorerのテスト用に飼っている、VMWare上のWindowsに新たな使命が課せられた。携帯シミュレータでのテストだ。シミュレータは3キャリア分あって、操作方法も全部違うので、これからげんなりすることを思うとげんなりする。そこで、とりあえず、一発でreloadができるようにならないか方法を探してみた。いうのがあるらしいので、ダウンロードする。ページのリロードは、指定した名前のウィンドウを探して、F5キーを押すことで実現。これを、3キャリア分設定。(ソフトによってキーは違う)あっさりとできてしまった。キャプチャそれだけだと面白くないので、リロードした後、画像をキャプチャするようにした。IrfanViewには、起動オプションでアクティブなウィンドウの内容をキャプチャする機能があるらしいので、それを使う。起動オプションこんな感じ。Folders\Public\softbank.png"ウェブサーバさらに、プラグインを見てみると、WebServerというのがある。このプラグインを追加すると、指定したポートでHTTPサーバが起動し、指定したフォルダの内容が見られるようになる。いう文字列をつけてGETなどすると、同じ名前のイベントが発生して、アクションをトリガーできるようになるらしい。すると、リロードしてスクリーンショットが見られるようになった。(スクリーンショットが撮られるまでにはタイムラグがあるので、javascriptで定期的に画像をリロードする)ウェブサーバ機能はかなり便利。問題点リロードの終了を検知できないので、2秒待つ、みたいなことをしないといけない。アクティブなウィンドウをキャプチャするので、排他的にしか処理できない。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だけでは属性を指定するという使い方は出来ないので、その場合も独自に拡張する必要がありそうではある。楽しく遊んでいたけども、デスクトップアプリケーションのような物を作るのには力が不足していると感じていた。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命令で実際にサーフェースへの描画を実行します。実行結果をファイルとしてキャッシュする場合、ファイルシステムによる字数制限を受けます。拡張は命令モジュールの追加という形で行います。したJavaScriptを試してみたい時はあるので、どうにかならないか試してみた。iPhone若干妙なところもあるけど、一応動く。したコードなら、思ったよりさくさく?かける。高度なカーソル移動や、単語境界まで削除、みたいな機能は欲しいなぁ。touchイベントを使うので、普通のSafariで動かない。使って、著名なライブラリをロードできる機能もつけてみた。d=dojo書き上がったJavaScriptはメールで送信できるらしい。