0

RubyHirobaでRocketIOのLTした

RubyHiroba 2013

大学の外では初LT


時間が無くて削ったスライドも含めてあります



あと言い忘れましたがsocket.ioのクローンではないです。1から(EventEmitterから)自前実装しています。


スライドではIEで動かないって書いてあるけど、発表後にmasuidriveさんが教えてくれたmodern.IEを使ったらデバッグが捗ってIE8以降なら動かせるようになった。
IE10はwebsocket、IE8とXBOX360ではcometで接続された。これで、だいたい今存在する全Webブラウザで使えると思います。

各バージョンのWindowsとIEがVirtualBoxなどのVMでDLできる。OSまるごとなので2GBとかある。



終わった後、ruby.twの人たちと手羽先を食べた。かなり楽しかった気がする。
R0021161

0

Lindaで離れた部屋の人々の活動を云々してリア充化する

Ruby上に並列言語拡張Lindaを実装してWebSocket/Cometで使えるようにした
の続き。


諸事情あって研究室がSFC内で3箇所に分散している。
しかし分散していても学食に誘ったりとかしたい。

その為には
– 別の部屋にいる気配を感じる手段
– メシに誘う手段
が必要なので、Lindaで作った。


shokai/linda-light-notify · GitHub

デルタ棟の部屋の電灯がon/offされたら、他の部屋のMacが「デルタ棟で電気が点きました」「消えました」と喋ったり、研究室のskype chatやtwitterに投稿したりする。
もちろん他の部屋で電気ついたり消えたりしたらデルタ棟にも通知される。
プログラムはこれ1つを動かしておくだけで、全部屋の装置が連携する。


RocketIO上に実装されたLindaは分散並列処理のための共有メモリであり、そこには各部屋に設置された光センサーのデータを毎秒書き込むプログラムや、
共有メモリを監視して各部屋のMacがしゃべったりskypeに投稿したりtwitterに投稿したりというプログラムがぶら下がっている。


つまり、光センサーを監視して(共有メモリをreadして)、各通知用プログラムに流す(共有メモリにwriteする)だけでいい。



メシに誘う手段としてはこういうボタンがあるWebページがLinda RocketIOでは作れる。押せば向こうの部屋で音が出る。

先生に言われてなんとなくLinda実装したんだけど、既に10種類以上のプログラムが物理的に別の場所のマシンで動いていてバリバリ連携してて、全然落ちないし落ちても勝手に復活するし、テスト用のダミーデータもWebから投入できるし、ようやくまともなユビキタスコンピューティング実装環境できたなという感想ある。

0

em-rocketio-linda-clientを作った

インストール

% gem install em-rocketio-linda-client

pure EventMachine実装なので高速。

Lindaで音楽を再生するやつでplayしながらstopタプルを待ち受けるのに使っている。

0

LindaRocketIOでチャットを実装した

http://dev.shokai.org/linda/chat/
http://sho.masuilab.org/chat/
どちらで喋っても同じチャットルームにつながる。


ソースコード
shokai/linda-chat · GitHubJavaScript29行でできた。


HTMLとJavaScriptだけで実装した。
サーバーは http://linda.shokai.org/ のタプル空間を使っていて、そこへの接続はlinda.jsを使っている。

linda.js(の中で使っているrocketio.js)はクロスドメイン接続ができるので、チャットサーバーを実装しなくても、汎用の共有メモリ空間であるlinda-baseに接続すればwebsocket/cometで高速でサーバープッシュなチャットが作れる。


次はLindaでジョブキューを実装する。

0

RocketIO::LindaのJSライブラリを作った

一つ前の記事で書いたRocketIOのJSライブラリを内蔵した。
JSとHTMLだけでRubyのLindaに参加できるようになった。

shokai/sinatra-rocketio-linda · GitHub


ダウンロード
linda.js
linda.min.js


使い方
内部でRocketIOを使っているので、ioインスタンスをLindaのコンストラクタに渡せばwebsocket/cometの適当な方で接続してくれる。

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="/linda.min.js"></script>
var io = new RocketIO().connect("http://example.com");
var linda = new Linda(io);

var ts = new linda.TupleSpace("calc");

io.on("connect", function(){
alert(io.type + " connect!! " + io.session);
ts.write([1, 2, 3]);
});


試しに、研究室の明るさセンサが出しているタプルを読んでWebページの背景色として表示してみた。
部屋が明るいとページも明るくなる。
JSちょっと書くだけでサーバーから毎秒センサー値が送られてきて楽しい。
http://sho.masuilab.org/light/

ソースコード
https://github.com/shokai/linda-light-sensor-webpage