monthly gimite

試験運用中。

[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というのが話題になっていたので試しにちょっとだけ使ってみました。

パッと見の印象は「このRubyPythonJavaScriptのちゃんぽんみたいな独自文法は無駄に敷居を上げてるような気が…。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が吐かれるので、逆にたどることは難しくないのですが。

[priv] gimite.net, irc.gimite.net, tweet-search-stream.gimite.netは3/14に一時停止します

輪番停電のため、gimite.net, irc.gimite.net, tweet-search-stream.gimite.netは3/14 8:30〜22:30頃にサービスを停止します。

実際の停電は9:20〜13:00、18:20〜22:00らしいのですが、途中で電源を入れられる人がいないので、ずっと止めます。

停電の予定についてはまだ情報が混乱しているようなので、サービス停止の予定も変わるかもしれません。

[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さん、ありがとうございました。

[tss][mobile] Tweet Search StreamのAndroid/iPhone対応

Tweet Search Stream

元々動作はしていたんですが、ちょっと見にくかったので、Android/iPhone向けに見た目をいじりました。実際に確認したのはAndroidだけですが…。

Tweet Search Streamの動作には、AndroidならAndroid 2.2以上 & Flash Player、iPhoneならiOS 4以上が必要です。

アニメーションが携帯ブラウザには重すぎる気がしますが、それは後で直す。予定。