amber Smalltalk
Web版Linda
並列
分散処理
第78回Smalltalk 勉強会
ビュ イン ロ 林徹也 モtetha
201プハ07ハ31 19:00ハ21:00
•
橋本商会さんア
法則
限界
•
対応策として•
原理そのものを新たにする•
既存のアーキテクチャを工夫により活 用する並列分散処理
•
マルチコアの一般化•
高速ネットワークの一般化•
いまどきは……•
FPGA, XMOS, GPGPU, OpenMP, OpenCL•
Hadoop(MapReduce), Meshblu, PubNub, MQTT …•
Erlang, Clojure, Go…•
Etoys, Scratch…•
ユニケージ開発手法(USP研究所)…今回
い
•
お手軽に実験•
すばやくアイデアを試す•
温故知新•
https://ja.wikipedia.org/wiki/Linda•
並列プログラミング言語であり、Prolog、C言語、Javaなどの他の(逐次 的)言語上に拡張として実装される。
並列
ロ
ン
作
方
•
Nicholas Carriero (著), DavidGelernter (著), 村岡 洋一 (翻訳), " 並列 プログラムの作り方", 共立出版 (1993). ISBN: 4320023625
•
並列プログラムの作り方メモ•
http://www2a.biglobe.ne.jp/seki/ ruby/how2para.html•
http://www.cs.tsukuba.ac.jp/ yas/ cs/csys-2009/2010-01-29/•
結果並列法•
専門家並列法•
手順並列法3
ロ
ン
イ
•
メッセージパッシング•
ライブデータ構造•
原典では、素数列を求めるプログラムを 以上のパラダイムを用いて解を示してい るので、これにならって本日も進行しよ う。•
と考えていたのでしたが、まずはクライ•
Lindaの特徴•
タプルとタプルスペース•
4つの操作ブ
操作
補足
<‘chopstick’, 2>
<‘a siring , 15.01, 17> <‘chopstick’, 1>
out
<‘chopstick’, ?n> in
<‘chopstick’, 2>
rd
•
タプル:型付きのデータの並び•
本来は2種類のタプルがある•
データタプル•
ライブタプル•
タプル = プロセス•
タプルスペース:タプルの集合•
タプルスペースはメモリ上やネットワーク上に存在する•
ネットワーク上のタプルスペースの概念JavaSpaces へ進化
ブ
基本操作
2
補助操作
操作 概要 別名 ブロック タプル種類
out タプルを出力する write 無 データタプル
in タプルを取り出す take 有 データタプル
rd タプルをコピーする
(読み出す) read 有 データタプル
eval 処理プロセスを起動
して結果を出力する - 無 ライブタプル
inp タプルを取り出す 不明 無 データタプル
rdp タプルをコピーする
inパrd
(takeパread)
•
タプルをin / rd する際にはタプルを引数にとる。そのタプ ルは値が入ってなくても構わない。値がない箇所は?を付 けて示す(formal)•
例 <"a string", ?f, ?i, y>•
それとマッチするタプルがタプルスペースから取り出され たりコピーされる構造
•
タプルを巧く設計してやることで様々なデータ構造を実現でき る。•
レコード•
連想配列•
多次元配列•
ストリーム•
バッグ•
スタックRinda
•
Ruby(dRuby)上に実装されたLindaサーバー•
操作はJavaSpacesの流れを汲む•
簡単にセットアップ出来て、Lindaを体験できる•
8章 Rinda•
インターフェイスの街角‒並列プログラミング•
橋本商会さん•
node-linda•
Web版Lindaによる実世界コンピューティン グ•
socket.ioを活用して 最初 Ruby で Linda を実装 (Rindaとは別に)。•
coffeeスクリプトで Node.js 上に再実装へ特徴 (1パ3)
•
Rindaの影響•
JavaSpaces風の操作名•
ただし、read_all などは無し•
運用面でのうれしさポイント•
タプルはJSON•
内部実装として配列であることを辞めている (Rindaでは配列だった)•
そもそもJSやStでは、型がないので順序に依 存する型とか意識しない(うれしさ感が無い)•
むしろ、1番目は名前で2番目は…のようなコ ードは避けたい(型チェック無いし)•
read, take はブロックしない•
代わりに後続する処理はコールバックとして与える•
スタイルとしては、以下のような感じ•
イベントドリブン風の書法(文脈が見えやすい?)特徴 (3パ3)
ts read: aTuple callback: [:err :returnTuple | "returnTuple はreadした結果"
.... ブロックポイントに続く処理
特徴 (3パ3)b
•
オリジナルの操作としてwatch•
read はワンショットで終る。•
センサ値の監視などの場合、繰り返しreadしたい場合に用いる。
•
タプルの追加があると確実に捉えることができる•
※ read の場合は、他のプロセスのtakeが先だった場合、取り損ねることがある。
•
npm 一発で完了•
"-g"オプションを付けるとlinda-server コマンドも利用できるようになるnodeハlinda
イン
•
利用するJavaScript ライブラリ•
socket.io-client•
linda-client (lindaのクライアント側js)•
amber Smalltalk
イアン
作
•
xxx.amd.json を用意する•
ュ
ロ
設定 (1パ2)
//linda.amd.json { "paths": { "linda-client": "lib/linda-client" }, "shim": { "linda-client": { "deps": ["socket.io"] } } } //socket.io-client.amd.json { "paths": {
"socket.io" : "socket.io" }
•
grunt devel する•
Package に imports を書く•
ュ
ロ
設定 (2パ2)
今回
画面用
• LindaProxy
• JSオブジェクトのラッパークラス
• LindaClient
• ソケットを繋いで管理
• SocketIo
• socket.ioのラッパー
• Tuple
• タプルのラッパー
• TupleSpace
• タプルスペースのラッパー
イアン
イ
い
勢い 作 け 実
最初
素
(JSONミリashedColletion)
十分書
け
思
け
……
イン
作
以下ノ
•
基本篇•
階乗計算•
並列篇•
フィボナッチ(画面付き)•
協調篇•
スマフォのセンサー•
IoT 篇•
勉強会用LindaサーバーURL•
http://node-linda-ststudy.herokuapp.com•
デモ用URL•
http://tty-hayashi.github.io/LindaClientDemo/•
GitHub•
https://github.com/tty-hayashi/LindaClientDemo•
例によって中途半端です環境パ準備
7パ31い ぱい
基本篇
•
LindaClientを使った基本的なサンプル•
LindaBasicDemo•
factorialMaster/factorialWorker•
Workspace で利用する前提ですこ ロ ロ サ 利用
ロ lindaハserver 起動 確認 く さい (7パ31 heroku 方 見 )
•
いい問題がないかと考えあぐねたあげく時間オーバ ー。ひとまずフィボナッチ数。•
LindaFibMaster : 出題するマスター•
LindaFibWorker:計算するN個のワーカー•
ワーカーで参加される方は、スマホで以下にアクセス•
http://tty-hayashi.github.io/LindaClientDemo/fibWorker.html
•
みんなのコンパス•
ごめんなさい。iPhoneでしか試してないし、それほど面白 くもない•
LindaCompass•
http://tty-hayashi.github.io/LindaClientDemo/ compass.html•
ジャイロ•
本当はサッカーゲームみたいなのを目指してました。途中 です。協調分散篇
•
node-linda 本来のねらい/利用スタイル•
スマートwホーム•
温度監視とエアコン制御ルoT
いこ
補足
ンサ ア ュ ゆ く 疎結合 あう
ンサ ッ ワ 経路 開け く ペ
温度センサ
赤外LED
OSI5FU5111c-40 作例の元ネタ
http://qiita.com/ KAKY/items/
55e6c54fa2073cdc0
bbe 1-wire接続のデジタル
温度センサー DS18B20
作例の元ネタ