トップ «前の日記(2008-04-11) 最新 次の日記(2008-04-16)» 編集

Route 477



2008-04-15

[ruby] シンタックスハイライト依存症

白黒のターミナルでRubyスクリプトを編集していて、

 def run(uid, gid, date, message)
   cmd = "run_foo_bar --uid=#{uid} --gid=#{gid} --date=#{date} --message="#{message}"
   puts cmd
   system cmd
 end

 run(201, 301, "20080415", "This is a sample message.")

 $ ruby foo.rb
 run_foo_bar --uid=201 --gid=301 --date=20080415 --message=
 ...

のような実行結果になる(messageが表示されない)ので数分考えこんでしまった。

[prog] http://github.com/

Gitのホスティングサービスらしい。

GitはWindows(のcygwinでない)バージョンがなくて諦めた覚えがあるなー。Reposhの開発のために一度触ってみたいけど。

[hiki] Re: 英語ページと日本語ページをサポートするHiki向けプラグイン

考えてたアイデアを他人に先に実現されると悔しいですね:-)。

僕の考えていた案はこんなでした。

  • 日本語ページはプレフィックスなし(例:HogePage)
  • 英語ページはHogePage-e
    • というか本当はプレフィックスを設定できるといい
  • メニューではなく、ページ内(ページタイトルの下あたり?)に「Japanese / English」みたいなリンクを表示する
    • 三ヶ国語以上になったら、プルダウンメニューの方がいいよね

[web] hbkr : ハバカリ | Amazonの画像で遊ぶ

via:「RESTful Webサービス」。(今年、似たようなアイデアをどっかで見たような…)

4873113539

51ojIhXBP3L._PU30_SC._SL200_.jpg ttp://ecx.images-amazon.com/images/I/51ojIhXBP3L._PU30_SC._SL200_.jpg

51ojIhXBP3L._BL50_SC._SL160_.jpg ttp://ecx.images-amazon.com/images/I/51ojIhXBP3L._BL50_SC._SL160_.jpg

[ruby] Reactive Ruby : RubyでReactive Programmingしてみた

最近、実用的なコードばかり書いているので、 もっと役に立たないコードを書くべきだと思い、 Reactive Rubyというライブラリを作ってみました。

どんなものか

上のデモを見てもらうのが早いですが、例えば

t = Reac{Time.now}

と書くと、tが変化するたびに「t.sec * 100」も自動的に再計算されて表示されます。

ソースはreacruby.rbです。

Reactive Programmingって何よ

[google]

Reactive Programmingの世界では、

t.sec * 100

というコードは、「秒数に100を掛けたものを表示せよ」という命令 ではなく、「ここには秒数に100を掛けたものが表示される」という宣言を 意味します。

実装上は、計算式のツリーを作って、 どこかの値が変化するごとに関連する値を更新してやる、みたいなことに なると思います。

で、Reactive Rubyでは、method_missingを使ってツリーを作ることにしました。 最初の値を作るところのみ

t = Reac{ Time.now }

のように印が必要ですが、あとは「t.month」や「t.sec * 100」など、 tを使った式を普通に書くだけで遅延評価になります。

で、何に使えるの?

何に使えるんでしょうね?

海外には、Reactive Programmingでシューティングゲーム(FPS)を作る というテーマで修論だかD論だかを書いた漢がいた はずですが(笑)、それ以外にReactive Programmingで実用的なアプリを 書いたという話はまだ聞いたことがありません(どなたかご存知だったら 教えてください)。

#春休みにNyaRuRu先輩に見せてもらったMathematicaが、 まんまReactive Programmingな動きをしていたような。 (グラフの描画パラメータをスライダと関連づけておくと、 スライダを動かすだけでグラフがぐりぐり動く)

今後の展望とか

現在のReactive Rubyは毎フレームごとに全ての値を再計算していますが、 実用に際しては

  • 変更があったツリーだけ再計算する
  • 描画されない値は再計算しない

などの工夫が必要になるでしょう。

あとはCursesだけでなく、GUIやRuby/SDLでの描画も試してみたいところ。

関連研究

なんか検索したら既に実装があったんですが、

vk = [:a, :b, :c, :d]

とかシンボルで書かせるのはちょっと嫌だなぁと思いました。まあ、Arrayは僕の実装でも

vk = Reac([a, b, c, d])

のようにReac印が要るんですが…。


「a = react 10」という書式は「a = Reac(10)」より格好いいですね:-)。

本日のツッコミ(全2件) [ツッコミを入れる]
hoge1e3 (2008-04-18 23:57)

http://portal.acm.org/citation.cfm?id=584931.584934&coll=ACM&dl=ACM&CFID=64408725&CFTOKEN=30386419<br><br>このへんの論文では,XMLのドキュメントが更新されたときに,更新後のドキュメントがスキーマの制約を満たすかどうかをReactiveに検査する手法が提案されているようです.<br>このへんの仕組みはEclipseのようなReactive?なコンパイラにも使えるのでは,と期待しています

yhara (2008-04-22 17:40)

なんと、そんな応用があったなんて!<br>「あるツリーの一部が連動して更新される」という繋がりなんですね。