[js] 次世代JavaScriptのawait (Deferred Functions)
この記事で知ったのですが、次世代JavaScriptのawaitという機能が楽しそうです。
function sleep(ms) { var deferred = new Deferred(); window.setTimeout(function() { deferred.callback(); }, ms); return deferred; } function foo() { for (var i = 0; i < 10; ++i) { console.log(i); await sleep(1000); } } foo();
これで1秒おきにconsole.logに出力されます。awaitというキーワードで非同期関数を同期関数風に呼び出せます。
実はCoffeeScriptでも使える(つまり、CoffeeScriptをコンパイルしてさらにTraceurでコンパイルするすれば動く)ことを発見しました。
sleep = (ms)-> deferred = new Deferred() window.setTimeout((-> deferred.callback()), ms) return deferred foo = -> for i in [0...10] console.log(i) await sleep(1000) null foo()
CoffeeScriptはawaitを関数だと思ってawait(sleep(1000))に変換しますが、余計な括弧があっても通るので、ちゃんと動きます。そのあとにnullが必要なのが微妙ですが*1。
*1:nullを入れないと_results.push(await(sleep(1000) ) );が生成されてエラーに。
[coffeescript][js] CoffeeScript雑感
なんかCoffeeScriptというのが話題になっていたので試しにちょっとだけ使ってみました。
パッと見の印象は「このRubyとPythonとJavaScriptのちゃんぽんみたいな独自文法は無駄に敷居を上げてるような気が…。JavaScriptに最低限の拡張を加えるなり、Mirahみたいにどれか既存の言語を極力真似るとかのほうがとっつきやすいのでは」という感じだったのですが、使ってみると割とすぐ慣れました。
ちょっとしたコードを書いてみて便利だったのは
- functionが->。言われてみればJSはfunctionだらけなのに"function"は長すぎ。特に
foo(function() { ... });
がRubyのブロック付きメソッドっぽく
foo -> ...
と書けるのは便利。
- 配列に対するRuby的なfor文。
今回は使わなかったですが便利そうなのは
- [f(x) for x if x] みたいなやつ。
- classと=>(thisが変わっちゃう問題をworkaroundしてくれるやつ)。
難点としては、誰かが書いてましたがruntime errorがあったときに生成後のJSでの行番号が出てくることですね…。比較的綺麗なJSが吐かれるので、逆にたどることは難しくないのですが。
jruby-jars-*.gem のビルド方法
jruby-jars-*.gem をビルドする方法のメモ。
$ git clone git://jruby.org/jruby.git jruby $ cd jruby $ ant $ ./bin/jruby bin/gem install rake rspec $ ant gem $ ls dist jruby-complete-1.6.1.jar jruby-jars-1.6.1.gem jruby-complete-1.6.1.jar.md5 jruby-jars-1.6.1.gem.md5 jruby-complete-1.6.1.jar.sha1 jruby-jars-1.6.1.gem.sha1
[ruby] rubygemsのダウングレード
諸事情でrubygemsをダウングレードする必要があったのですが、
$ sudo gem install -v 1.3.7 rubygems-update $ sudo update_rubygems
でいけたっぽい。
[web][priv] iframe → Google Gadget コンバータの不具合
201/4/18追記: 現在は(以前に変換されたものについても)直っています。Google Gadget側のバグが修正されたようです。
iframe → Google Gadget コンバータで変換して貼りつけたガジェットが正しく表示されないという不具合が起きています。以前は http://gimite.net/ の内容、現在はエラーメッセージが表示されるようになっています。
これはどうやらGoogle Gadget側のバグのようです。とりあえずの対策としては、iframe → Google Gadget コンバータでもう一度変換したものを貼りつけなおしてください。バグの対策が入っています。
以前のコンバータで変換されたものについては、残念ながら現状、こちらではエラーを表示する以上の修正ができません。Google Gadgetのバグについては報告済みなので、そちらが修正されるのをお待ちください。
ちなみにGoogle Gadgetのバグというのは、ガジェットのXMLのURLの"&"以降が落ちてしまうというものです。
ご迷惑をおかけします。報告をいただいた@risupunkさん、ありがとうございました。