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
ttp://ecx.images-amazon.com/images/I/51ojIhXBP3L._PU30_SC._SL200_.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って何よ
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)」より格好いいですね:-)。
http://portal.acm.org/citation.cfm?id=584931.584934&coll=ACM&dl=ACM&CFID=64408725&CFTOKEN=30386419<br><br>このへんの論文では,XMLのドキュメントが更新されたときに,更新後のドキュメントがスキーマの制約を満たすかどうかをReactiveに検査する手法が提案されているようです.<br>このへんの仕組みはEclipseのようなReactive?なコンパイラにも使えるのでは,と期待しています
なんと、そんな応用があったなんて!<br>「あるツリーの一部が連動して更新される」という繋がりなんですね。