Rubyの聞こえる化 Pasta-K - pasta0915@gmail.com 2009.08.15.Sat セキュリティ&プログラミングキャンプ2009 Supported by 西尾泰和
目的 If文中の条件式がtrueかfalseかによって音を鳴らす 画面を見なくても、条件式がtrueかfalseかが音で分かる
退屈なデバッグ中に音が鳴ることによって、ちょっぴりハッピーになれる
make testの曲なんていうのも表現できる? ニコニコ動画にう p
変更の方針 構文木からバイトコードへの変更を担当しているcompile.cを書き換えて、Rubyのif文を書いたときに出力されるバイトコードを変えて、音をならすようにする。
手順 実際にRubyのソースコードを読み、 (実行するRubyのスクリプト内の)if文中の条件式が構文木に評価されるところを見つける
同じように関数の呼び出しを行うコードを見つけ、1、部分に実際に埋め込む
pなどを用いて、関数の呼び出しが行われているのか動作確認
音を鳴らすrubyスクリプトを作り埋め込む
1,if文の条件式を評価しているところ 何をしている部分? NODE_XXXXを受け取って、それをもとにして、どんな構文が書かれているのかを判断し、適切なバイトコードに変換している。 つまり、この部分でthen節とelse節をバイトコードに変換する前に、音が鳴る動作を付けてやれば、それも一緒にバイトコードに変換されるのではないか
変換後のバイトコードのイメージ if 条件文 else end then true の音を鳴らす true の場合の動作 false の音を鳴らす false の場合の動作
2,Rubyスクリプト内の関数を呼び出す方法 実際にRubyの関数を呼び出している部分を参考に、1,で見つけた部分に記述していった。
音を鳴らすRubyスクリプト def sound() f=File.open("/dev/dsp","w") i=0 n="" 2560.times{|i| a=i*15%256 n=n+a.chr } f.puts n f.close end
音を鳴らす方法 OSS(Open Sound System)というUnix オペレーティングシステムで音を作成したりキャプチャしたりするための標準インターフェイスのAPIを叩いて音を鳴らす。 引用元: http://ja.wikipedia.org/wiki/%E3%81%AE%E3%81%93%E3%81%8E%E3%82%8A%E6%B3%A2

Rubyの聞こえる化