0

Ruby内に人間への命令を書けるBabaScriptが完成に近づいている

ちゃんと馬場くんからのreturn valueが取れるようになった。

BabaScriptはコンピュータが得意な事はコンピュータが実行し、人間が得意な処理は馬場くんが実行するプログラム言語です。
メタプログラミングでRubyを拡張して人間への命令を送るための構文を追加し、人間を関数と同等に扱えるようにするスマホアプリと連動させます。
世界一柔軟で好意的に解釈してくれるプログラム言語BabaScriptを作りました

% gem install babascript
% baba --help


こういうのが実行できるようになった。

sample.bb
res = かず助に行きたい人の出欠取ってください
puts res # => "6人です"
loop do
num = res.to_i
if num > 0
puts では予約してください("#{num}人")
exit
else
res = 残念・・その次の週はどうですか?
puts res
end
end

% baba sample.bb

日本語で書いた部分が馬場くんが実行する関数として呼び出され、馬場くんから結果が返ってくるまでブロックされるようになりました。



rubyでもbabascriptからの命令を受けれるツールも追加した(開発に便利なので)
baba-vmコマンドでterminalでbabaになれる。


実装

インフラに使っているWeb版LindaRubyクライアントを拡張した。

今までread/take命令はコールバック登録するしかなかったが、コールバック関数を登録しなかった場合はタプルが得られるまでブロックするようにした。
EM::defer do
loop do
tuple = ts.take [1,2]
puts "blocking take #{tuple}"
end
end
コールバック関数を登録すれば今までどおり非同期に動く。なかなか良い仕様だと思う。

0

世界一柔軟で好意的に解釈してくれるプログラム言語BabaScriptを作りました

rubygemsでインストールできます

% gem install babascript

ソースコードはこちら
https://github.com/masuilab/babascript


BabaScriptとは

コンピュータが得意なことはコンピュータに、人間が得意なことは@takumibabaが処理するプログラム言語です


使用方法

ワンライナー
% baba -e "アイス買ってきて"


馬場スクリプトはRuby風に書ける言語で、日本語で書いた部分は馬場くんが実行してくれます

test1.bb
#!/usr/bin/env baba
if 0 < Time.now.hour and Time.now.hour < 5
もう寝ろ!!
else
意識を高めてコードを書こう!
end
実行
% baba test1.bb
0時から5時の間は寝ろ、という指令が送れます。



Rubyの中に馬場スクリプトを埋め込む事も可能です。
例えばRubyでArduinoの照度センサーを読んで、明るくなったら起こしてもらうスクリプトはこうなります

wakeup_arduino.rb
#!/usr/bin/env ruby
require 'arduino_firmata'
require 'babascript'
arduino = ArduinoFirmata.connect
loop do
if arduino.analog_read(0) > 80 ## 明るくなってきたら
BabaScript.baba do
明るくなったから起こしてくださいby橋本
それと朝食におにぎり買ってきてください("#{rand(5)}個", "しゃけ味")
end
end
end
実行
% ruby wakeup_arduino.rb
おにぎりが0〜5個ランダムで配送されます


実行環境

BabaScriptはシングルスレッドでの実行なので、負荷をかけないでください。
こういう通知がAndroidケータイに送信されます。そのうち値を返す関数も実装されるのでは?

引数部分は配列で渡されます。アイス買ってきての[“9本”]は引数です。


馬場の切り替え

BabaScriptはジョブ通知にWeb版Lindaを使っています。
環境変数BABAを切り替える事で別のBABAマシンでスクリプトを実行させる事が可能です。
環境変数BABAのデフォルト値は”takumibaba”で、彼のジョブは http://linda.masuilab.org/takumibaba/notifications で確認できます。

% export BABA=shokai

環境変数BABAを”shokai”に切り替えると、以後のジョブの通知先が http://linda.masuilab.org/shokai/notifications になります。


今後の開発方針

当面の悩みはテストが書きにくいことです。
テストコードがない · Issue #1 · masuilab/babascript · GitHub


Android版のBabaScriptジョブ通知アプリが公開されれば、馬場を自分に切り替えて実行が可能になります。例えばサーバーがおかしい時とか
BabaScript.baba do
ちょっとuser_nameの値がおかしい、調べて(user_name)
end
などと書けば自分のケータイに通知が来ます。
またLindaなので分散処理も簡単だと思います


あとはibb(インタラクティブBaba)で対話的実行ができるようになるといいと思う。