Lindaを使うとプログラムの壁を超えるのが楽ちん

ブラウザ上で動いているJavaScriptと、Ubuntu上で動いているLindaサーバと、Windowsで動いているPython製クライアント、という構成を作ってみた。

今の構成はこんな感じ。

ブラウザ上のJavaScript
↓WebSocket
Ubuntu上で走っているLinda
↓WebSocket
Windows上で走っているPythonプログラム
↓プロセス呼び出し
cscript
↓音声
人間

まずLindaサーバはこちらの実装をREADME見ながら6行ほどコマンド打つだけであっさり立ち上がった(Ubuntu上):橋本商会 » Ruby上に並列言語拡張Lindaを実装してWebSocket/Cometで使えるようにした

次にこちらを参考に、20行程度のHTMLとJSを書いてチャットを実装。この時点で複数のブラウザタブ間でのチャットがあっさりと動いた。最初、WebSocketのデフォルトポート9000番を開けてなかったが、自動的にCometにフォールバックした。:橋本商会 » JavaScriptとRubyによるWeb版Linda入門(1)

さらにLindaサーバに接続して、投稿内容を読み上げるWindows上で動くプログラムを作ろうとした。ここで結構迷った。

まずは「linda.jsはJavaScriptだからWSHでそのまま動くんじゃないか?」と言う路線でアプローチしたのだけども、linda.jsはjQueryに依存していて面倒。WSHjQueryを動かしたという報告はググるといくつかあるけど、jQueryのバージョンやネットワーク接続がちゃんと動くかどうかなどの関係で、すんなりとは動くパターンを見つけられなかった。

次にWSHからIEのオブジェクトを作ってしまって、その中でHTMLをロードしてやればいいだろうと思ったけど、これはintegrity levelの変化の際にWSHから作ったオブジェクトが破棄されるため「切断」される。see: ExcelからIEの起動 − Insider.NET − @IT 一方でdocument.writeやればいいんじゃないかと思ったが、これは特定できないエラー。

この辺りでだいぶやる気が無くなったので、どっちみち将来的にはPythonのプログラムを接続するからということでPython版Lindaライブラリを作り始める。linda.jsは400行程度で、Comet実装とフォールバックと切れた時の再接続の実装をサボって、WebSocket接続はws4pyに丸投げすることで2時間程度で移植できた。この実装は近いうちに公開するつもり。 see: ws4py - A WebSocket package for Python — ws4py 0.3.5 documentation

Lindaに対する書き込みはHTTPで特定URLにアクセスするだけでできるのでRaspberry PIなどからでも可能。夢が広がる。

まとめると、以上のような構成が1日でできるので、環境の壁を超えないといけないシチュエーションで、負荷を気にしないで良いプロトタイプを作成する上ではLindaは超便利。