Journal InTime


2014-03-15 (Sat) [長年日記]

_ 松江Ruby会議05

松江Ruby会議05に参加してきた。参加されたみなさん、おつかれさまでした。

ライブコーディングがテーマだったので色んな人のコードを見られて楽しかった。まつもとさんも珍しく書き下ろしのコードを紹介してたし。

とくに圧巻だったのはDXRuby作者のmirichiさんのライブコーディングで、15分程度(?)でその場で一からブロック崩しを作られていた。 スプライトの衝突判定にSprite#===を使われていたのが印象的だったけど、たぶんcaseやgrepで使えるようにという設計なんだろう。

自分がライブコーディングで書いたコードは以下のURLに置いておいた。

このコードだと単純なpointcutしか表現できないけど、例えば、

class Foo
  def bar
    Bar.new.baz
  end
end

のようなコードがあった時に、AspectJみたいにwithin(Foo) & call(class: Bar, method: :baz)みたいなpointcutの指定(Fooの中のBar#bazの呼び出しだけにアスペクトを織り込む)ができると使いやすそう。

しかし、Module#prependだとメソッドの呼び出し側でなく呼び出されるメソッドの側を置き換えるので、Fooから呼び出されたかどうかの判定に呼び出し元のクラスの情報が必要になるが、Rubyレベルではその情報を取るAPIがない。 気が向いたらrb_debug_inspector_open()とかを濫用して作るかもしれないけど、呼び出し元のクラスくらいは普通にRubyレベルで取れてもいいように思う。

Tags: Ruby
本日のツッコミ(全3件) [ツッコミを入れる]
_ 宮国 (2014-04-03 (Thu) 11:38)

私は宮崎で木工作家をしている宮国と申します。<br>現在は仕事の傍ら、以下のウェブサイトを運営しております。<br><br>四畳半大学 宮国研究室(現象学)<br>http://miya.aki.gs/mblog/<br><br>『システムにとって意図とは何か』を興味深く読ませていただきました。<br>学部生の卒業論文でこのレベルのものが書けるとは驚きです。<br><br>このたび本レポートへの私なりの見解をまとめてレポートにしてみました。<br>(レポートは上記のウェブサイトで公開しております)<br>もしご興味ありましたら・・・<br><br>メールをお送りしようと思ったのですが、届かなかったので、<br>場違いとは思いましたが、こちらで報告させていただくことにしました。すみません。

_ shugo (2014-04-03 (Thu) 18:18)

コメントありがとうございます。<br><br>レポートを興味深く拝見しましたが、問題意識に共感いただけたことを嬉しく思います。<br>たしかにわざわざルーマンを持ち出す必要はなかったかもしれませんね。

_ 宮国 (2014-04-03 (Thu) 22:52)

見ていただいてありがとうございました。コメントもありがとうございます。<br>卒業論文であのようなレベルのものが書けるのはすごいと思いました。<br>(私の学生時代がだらしなかっただけなのかもしれませんが・・・)