本研究ではユビキタスコンピューティングのための分散・並行アプリケーションの開発プラットフォームを開発する。既存の開発プラットフォームは電子回路作成や無線ネットワーク構築を容易にしたが、そのアプリケーション開発は依然難しいままである。なぜなら、ユビキタスコンピューティングにおけるアプリケーションでは分散・並行プログラミングの知識が必要であり、私の経験ではプログラムの30%程度がWebページ・サーバー・電子回路などの異なるプロセス間の通信や制御に占められてしまう。本研究ではこの問題 を「操り人形化」と「Linda RocketIO」で解決する。
本研究で実装したソフトウェアは、全てそれぞれのプログラム言語のライブラリ・リポジトリに登録済みであり、世界中の人がいつでも手軽にインストール可能な状態になっている。 ソースコードはMITライセンスの下でオープンソース化されており、誰でも修正案を提案する事が可能となっている。国内外の開発者から意見や修正パッチなどを頂きながら、現在も開発が進められている。
1回の国際学会での発表、3回の国内の勉強会での発表を行った。積極的にアピールした為か、研究成果に関連した内容を来年度から一般雑誌で連載する機会を得る事ができた。
プログラム言語RubyとNode.jsそれぞれで、マイコンボードArduinoとの通信を完全に隠蔽してボードの各機能を扱えるFirmataライブラリを実装した。 Rubyの方はインストール数が2万4千回を超えており、RubyでArduinoを使うときの標準になったと言っても良いと思われる。
GoldFishはNFCタグリーダーとAndroidスマートフォンを用いた実世界コンピューティングのためのアプリケーション開発環境である。ジェスチャ―操作によるAndroidアプリケーションがHTMLとJavaScriptだけで実装できる。
9月にスイスで行われたユビキタスコンピューティングに関する国際学会「Ubicpomp2013」のHomeSysワークショップでデモ発表を行った。HomeSysは特に家庭内でのシステムを扱うワークショップである。
LindaRocketIOは1980年代に作られ現在はあまり知られていないLindaというしくみを基にしている。共有メモリを用いた並行処理記述のための最小セットであるLindaを、RocketIOという筆者が実装した通信フレームワークの上に実装した。 LindaRocketIOはRuby言語のWebアプリケーションフレームワークであるSinatraのプラグインとして実装した。これにより、普通のWebアプリケーションにLindaの機能を追加する事ができる。 前述のUbicomp2013でGoldFishと同時にデモ発表を行った。
LindaRocketIOも、Rubyのライブラリパッケージ管理システムでインストールできる。
ORF2013では増井研究室の学部生・修士生に、Lindaを使った電球の調光装置や在庫管理システムなどを実装してもらい、展示発表を行った。Lindaそのものの展示だけでなく、実際にソフトウェアライブラリとして使ってもらい、意見をもらえた事は良かった。
本研究は、Lindaを実装し、それをCPUが非力なARM系組み込みLinuxボード上でも動作できるようにする事が目的であった。 Rubyの並列処理機能は組み込みボード上では速度が遅いので、Node.jsでLinda Socket.IOとして再実装を行った。
再実装に際して、ORF2013やUbicomp2013で感じていたLindaの問題として感じていた、watch関数がわかりづらい事や、動作速度の問題が解決された。
BabaScriptは増井研究室の修士生である馬場君が開発しているプログラム言語で、まるで関数を呼び出すかのように「人間への命令」を自然に書く事ができる。 これのインフラとしてLindaが使われている。実世界コンピューティングの並行処理の為に作ったLindaが、実世界の人間とコンピュータを協調動作させるシステムの基盤として使われているのは狙い通りと言って良いと思われる。 BabaScriptは今年夏に経産省 IPA未踏ソフトウェア創造事業に採択された。