author of druby, rinda, erb and driprubykaigi x 6 2006 druby, again. 2007 answering druby and rinda...

135
persistent tuple space and stream [email protected] author of dRuby, Rinda, ERB and Drip

Upload: others

Post on 29-Nov-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

persistent tuple space and stream

[email protected]

author of dRuby, Rinda, ERB and Drip

Page 2: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Actor

おもしろそう

Page 3: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

日本先行発売

次は英語で初刷を

dRubyによる

関 将俊 著

分散・Webプログラミング

Page 4: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

ちゃんとした会社員

わりと大きな会社プロの無職

Page 5: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

たまにコミッタ

dRuby

Rinda

ERB

Page 6: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

RubyKaigi x 6

2006 dRuby, Again. 

2007 Answering dRuby and Rinda 

2008 erbを偲んで

2009 偉大なBigTableとぼくのおもちゃ

2010 RWikiと怠惰な私の10年間

2011 persistant tuple space and stream

Page 7: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

この辺のネタと関係がある

2007 Answering dRuby and Rinda

TupleSpaceの永続化発表

2009 偉大なBigTableとぼくのおもちゃ

世界を並べてseek & read

2010 RWikiと怠惰な私の10年間

in-memory databaseの10年分の実例

Page 8: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

今日の話

永続版TupleSpace、PTuplespaceの反省ストリーム指向のストレージDripの紹介

Page 9: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

気が弱い

OSS開発者のみなさんは提案を断れますか?

Page 10: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

たくさんの声援

Rindaは永続化されてないから使えないよねSPOF ww

TupleSpaceが永続化されたらウハウハですよこれで分散ハッシュ書けるからやってよ

Page 11: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

そうは思わないけど断れない

実装して評価してもらおう

Page 12: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

そうは思わないけど断れない

実装して評価してもらおう実装した

Page 13: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

そうは思わないけど断れない

実装して評価してもらおう実装した

RubyKaigiで言いふらした

Page 14: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

そうは思わないけど断れない

実装して評価してもらおう実装した

RubyKaigiで言いふらしただれも使わない...ちっ

Page 15: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

そうは思わないけど断れない

実装して評価してもらおう実装した

RubyKaigiで言いふらしただれも使わない...ちっ自分で評価するか... ◀ いまここ

Page 16: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

PTupleSpaceの反省

Page 17: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

PTupleSpace

PTupleSpaceてなにLindaとRinda

MoreRinda

PTupleSpaceはどうなの?協調ストレージ

Page 18: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

並列処理糊言語Linda

タプルは複数のオブジェクトの組「タプルの交換」を使ってプロセス群が協調する仕組みタプルを置いたり読んだり取り出す場がタプルスペース基本となる三つの操作

Page 19: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

write

TupleSpace

ts.write([●])

Page 20: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

write

TupleSpace

ts.write([●])

Page 21: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

write

TupleSpace

ts.write([●])

Page 22: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

write

TupleSpace

ts.write([●])

Page 23: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

read

TupleSpace

ts.read([●])

Page 24: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

read

TupleSpace

ts.read([●])

Page 25: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

read

TupleSpace

ts.read([●])

Page 26: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

read

TupleSpace

ts.read([●])

Page 27: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

take

TupleSpace

ts.take([●])

Page 28: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

take

TupleSpace

ts.take([●])

Page 29: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

take

TupleSpace

ts.take([●])

Page 30: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

take

TupleSpace

ts.take([●])

Page 31: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Rinda

並列処理糊言語LindaのRuby版Rubyで二番目に人気のあるライブラリ一番目はdRuby

Page 32: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

PTupleSpace

タプルを復元できるTupleSpace

P is for Persistent

PTupleSpace = Rinda::TupleSpace + 永続化RubyKaigi2007で発表

Page 33: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

MoreRinda

Rindaにさらにかっこいい機能を追加するPTupleSpace

rinda_eval - Lindaのevalを実現

github.com/seki/MoreRinda

Page 34: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

永続化できたら...

障害がおきても協調が再現できるかもストレージのように使えるかも

Page 35: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

PTupleSpaceの制約

TupleSpace内のタプルの状態だけを復元外にあるタプルは復元できない

takeの途中でクラッシュするとタプルを失う

Page 36: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

TupleSpaceの中だけ

TupleSpace

Page 37: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

TupleSpaceの中だけ

TupleSpace

Page 38: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

takeでのクラッシュ

TupleSpace

Page 39: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

takeでのクラッシュ

TupleSpace

Page 40: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

takeでのクラッシュを考える

クラッシュが削除する前か後かわからないリトライすべきか判断できない協調の様子を復元するのは難しい

Page 41: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

協調の点ではちょっと問題

takeの問題があるので使えないケースが多いタプルの紛失が問題にならなければ...

Page 42: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

ストレージとしてはどうか

永続化されるならストレージにしたいよKVSとしてTupleSpaceを使ったらいいじゃんという提案をしばしばいただく...

Page 43: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

KVSとしてはどうか

TupleSpaceは辞書でなくバッグ同じ情報の重複を許す用途に合っていれば手軽に使える用途は多くないと思うせめて順序があれば...

Page 44: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Hashを模倣するには

一つのキーに一つの値重複させないために全体のロックが必要ロック用タプルをtake

旧い値をtake

新しい値をwrite

ロック用タプルをwrite

Page 45: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

ストレージとしてどうか

Hashになるのは効率悪いBagならわりといける

Page 46: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

PTupleSpaceのまとめ

そんなに甘くなかった!

単純なTupleSpaceの永続化では並列処理の糊としてイケてないほしいストレージがBagなら使える

Hashの代わりにはなるのは難しい

Page 47: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

しばらくお待ちください

✓ +08:00 ✓ 日本先行発売✓ PTupleSpaceは本当に存在したことをアピール✓ TupleSpaceの永続化では足りないよ✓ 次が本編 / Drip

Page 48: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Drip

A stream oriented storage

Page 49: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripとはなにか

かっこいいログ追記のみ。削除・修正はできない新しいログが書かれるまで待合せ局所的で安価なブラウズAPI

Page 50: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

PTupleSpaceへの別の解

失敗してもなんとかやり直せる協調機構履歴付きHashにも見えるストレージ

Page 51: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

応用例

RWiki全文検索電力消費量レポートシステムタイムラインのアーカイブ

botフレームワークirb中のちょっとしたオブジェクトの保存

Page 52: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

身近な例で説明

Queueとの比較 / 協調Hashとの比較 / ストレージ

Page 53: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueとの比較

Queueの特徴オブジェクトが移動する待合せしてくれる

Page 54: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueだとこんな感じ

Queue

Writer Reader

Page 55: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueだとこんな感じ

Queue

Writer Reader

Page 56: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueだとこんな感じ

Queue

Writer Reader

Page 57: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueだとこんな感じ

Queue

Writer Reader

Page 58: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueだとこんな感じ

Queue

Writer Reader

Page 59: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueだとこんな感じ

Queue

Writer Reader

Page 60: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueだとこんな感じ

Queue

Writer Reader

Page 61: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queue#pop

要素は消費される

Page 62: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripだとこんな感じ

Writer Reader

Drip

Page 63: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripだとこんな感じ

Writer Reader

Drip

Page 64: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripだとこんな感じ

Writer Reader

Drip

Page 65: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripだとこんな感じ

Writer Reader

Drip

Page 66: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripだとこんな感じ

Writer Reader

Drip

Page 67: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripだとこんな感じ

Writer Reader

Drip

Page 68: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripだとこんな感じ

Writer Reader

Drip

Page 69: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueと違う

要素は減らない何度でも読める・何人でも読める注目点を移動させて読む

Page 70: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Queueと同じ

データの到着を待つことができる

Page 71: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

TupleSpaceと違う

タプルの紛失を気にしなくて良い要素は減らない

Page 72: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

ここで使うAPI

Drip#write

Drip#read

Page 73: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Drip#write

オブジェクトを書き込むDripの状態を変化させる唯一のメソッドタグを指定できる

def write(obj, *tags)

Page 74: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Drip#read

「これより新しいのn個よこせ」keyの次にある要素を最大n個、最小でもat_least個読む

def read(key, n=1, at_least=1, timeout=nil)

Page 75: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

writer

key value2 'hello'3 'world'

drip.write('hello')drip.write('world')

Page 76: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

reader

key value2 'hello'3 'world'

def reader(drip, k = 0) while true k, v = drip.read(k, 1)[0] yield(v) endrescue return kend

Page 77: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

read(0, 1)

key value2 'hello'3 'world'

drip.read(0, 1)[0]# [2, 'hello']

Page 78: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

read(2, 1)

key value2 'hello'3 'world'

drip.read(2, 1)[0]# [3, 'world']

Page 79: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

waiting...

key value2 'hello'3 'world'

drip.read(3, 1)[0]

Page 80: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

write, and read

key value2 'hello'3 'world'5 'Hello, Again.'

drip.write('Hello, Again.')

drip.read(3, 1)[0]# [5, 'Hello, Again.']

Page 81: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripを再起動

Drip

Writer Reader

Drip

Page 82: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Dripを再起動

Dripはさっきの状態で生き返るreaderは注目点を覚えておく

Page 83: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

再開

key value2 'hello'3 'world'5 'Hello, Again.'

drip.read(5, 1)[0]

Page 84: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

write, and read

key value2 'hello'3 'world'5 'Hello, Again.'8 'RubyKaigi'

drip.write('RubyKaigi')

drip.read(5, 1)[0]# [8, 'RubyKaigi']

Page 85: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

バッチ処理は失敗するじゃん

なんとかやり直せる協調の仕組みを目指す失敗してもさっきのところから始められる最初からやり直してもかまわない

Page 86: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

しばらくお待ちください

✓ +15:00 ✓ Queueは減るけど、Dripは減らないよ✓ バッチ処理は失敗するよ✓ 工夫したらぎりぎりやり直せるよ✓ 次はHashで

Page 87: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Hashぽく

辞書として使うタグを使うと履歴つきの辞書になるよ

Page 88: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

タグ

オブジェクトにタグを付けて整理できる複数のタグを付けられる

Page 89: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

タグをKVSのキーだと思う

タグをつけてwriteする→値の設定タグをもつ最新の要素をreadする→値の取得keyよりも旧いタグをもつ要素をreadする→履歴のブラウズ

Page 90: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

コードで

もうちょっとコードっぽく説明します

Page 91: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

ここで使うAPI

Drip#head

Drip#read_tag

Page 92: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Drip#head

最新の要素をn個返すtagを指定したらそのタグを持つものだけ

def head(n=1, tag=nil)

Page 93: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Drip#read_tag

だいたいread

keyの次にある要素を最大n個、最小でもat_least個読むただし、tagを持つ要素だけ

def read_tag(key, tag, n=1, at_least=1, timeout=nil)

Page 94: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

drip['seki.age']=29

key tag value

2 'seki.age' 29

drip.write(29, 'seki.age')

Page 95: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

drip['seki.age']

key tag value

2 'seki.age' 29

drip.head(1, 'seki.age')# [[2, 29, 'seki.age']]

Page 96: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

drip['seki.age']=49

key tag value

2 'seki.age' 29

3 'seki.age' 49

drip.write(49, 'seki.age')

Page 97: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

drip['seki.age']

key tag value

2 'seki.age' 29

3 'seki.age' 49

drip.head(1, 'seki.age')# [[3, 49, 'seki.age']]

Page 98: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

drip['sora_h.age']

key tag value

2 'seki.age' 29

3 'seki.age' 49

drip.head(1, 'sora_h.age')# []

Page 99: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

waiting...

key tag value

2 'seki.age' 29

3 'seki.age' 49

drip.read_tag(0, 'sora_h.age')

Page 100: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

write and read_tag

key tag value

2 'seki.age' 29

3 'seki.age' 49

5 'sora_h.age' 12

drip.read_tag(0, 'sora_h.age')# [5, 12, 'sora_h.age']

drip.write(12, 'sora_h.age')

Page 101: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Hashと同じ

hash[key]=value

drip.write(value, key)

hash[key]

drip.head(1, key)

Page 102: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Hashと違う

要素は消せない履歴がある

drip.head(5, key)

keys/eachがない遺恨を残す気がするので作ったけど消した

Page 103: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

TupleSpaceと同じ

ある要素の追加や更新を待てるパターンは限定されてるけど

Page 104: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

Hashの代わりになる?

簡単な辞書としては使えそう削除はないけどnilとかで代用できるかもkeys/eachはできないわざと

Page 105: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

PTupleSpaceとの違い

TupleSpaceらしさをばっさり切ってる永続化を前提として協調機構を考えなおしたTupleSpace違うかっこよさ

Page 106: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

しばらくお待ちください

✓ +20:00 ✓ 履歴つきの辞書になるよ✓ 待合せもできるよ✓ 自画自賛はほどほどにする✓ ちがう言葉で説明しなおす

Page 107: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

おさらい

Dripは待合せのできるログ追記だけ削除・修正はできない新しいログが書かれるまでブロック

タグでフィルタ

Page 108: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

一次元のストリームも

見ようと思えばQueueにもHashにも見えるその他の構造に見ることもきっとできる

たいていの集合はeachできるんだもん

信じるっていうのはそういうこと

Page 109: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

ブラウズの例

未来へ - read, read_tag, newer

過去へ - head, older

時間軸にそって前後へタグを使ってスキップしたり

Page 110: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

読み進める

keyより新しい4つくれ1つ揃うまで待ってて

while ture ary = drip.read(key, 4, 1) ... key = ary[-1][0]end

Page 111: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

読み進める

keyより新しい4つくれ1つ揃うまで待ってて

while ture ary = drip.read(key, 4, 1) ... key = ary[-1][0]end

Page 112: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

読み進める

keyより新しい4つくれ1つ揃うまで待ってて

while ture ary = drip.read(key, 4, 1) ... key = ary[-1][0]end

Page 113: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

読み進める

keyより新しい4つくれ1つ揃うまで待ってて

while ture ary = drip.read(key, 4, 1) ... key = ary[-1][0]end

Page 114: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

読み進める

keyより新しい4つくれ1つ揃うまで待ってて

while ture ary = drip.read(key, 4, 1) ... key = ary[-1][0]end

Page 115: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

読み進める

keyより新しい4つくれ1つ揃うまで待ってて

while ture ary = drip.read(key, 4, 1) ... key = ary[-1][0]end

Page 116: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

興味があるものだけ返す

フィルタして読む

read_tag(key, 'orange', 4, 1)

Page 117: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

興味があるものだけ返す

フィルタして読む

read_tag(key, 'orange', 4, 1)

Page 118: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

興味があるものだけ返す

フィルタして読む

read_tag(key, 'orange', 4, 1)

Page 119: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

最新の'blue'から5つずつください

ちょっと戻ってから読む

k, v = head(1, 'blue')[0]read(k, 5)

Page 120: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

最新の'blue'から5つずつください

ちょっと戻ってから読む

k, v = head(1, 'blue')[0]read(k, 5)

Page 121: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

最新の'blue'から5つずつください

ちょっと戻ってから読む

k, v = head(1, 'blue')[0]read(k, 5)

Page 122: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

最新の'blue'から5つずつください

ちょっと戻ってから読む

k, v = head(1, 'blue')[0]read(k, 5)

Page 123: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

最新の'blue'から5つずつください

ちょっと戻ってから読む

k, v = head(1, 'blue')[0]read(k, 5)

Page 124: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

しばらくお待ちください

✓ +25:00 ✓ ブラウズのようすをなんとなくわかって✓ 蘊蓄を言い過ぎてないか確認

Page 125: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

今日の話

PTupleSpaceの反省単純な永続化では足りない

Dripの紹介かっこいいログ永続化を前提とした協調のしくみ

Page 126: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

日本先行発売

次は英語で初刷を

dRubyによる

関 将俊 著

分散・Webプログラミング

Page 127: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

電力消費量ロガー&レポート

ep_loggerMyDrip

計測器 while true watt = [Time.now, @there.value] MyDrip.write(watt, 'Watt') sleep(180)end

Page 128: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

電力消費量ロガー&レポート

ep_loggerMyDrip

ReportServlet

MyDrip.head(20, 'Watt')

計測器

Page 129: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

sample/drip_tw.rb

drip_tw irb

MyDrip

bot

Page 130: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

sample/drip_tw.rb

drip_tw irb

MyDrip

bot

MyDrip.write({:consumer_key=>"..", :consumer_secret=>".."}, 'DripDemo OAuth')

Page 131: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

sample/drip_tw.rb

drip_tw irb

MyDrip

bot

MyDrip.head(1, 'DripDemo OAuth')

Page 132: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

sample/drip_tw.rb

drip_tw irb

MyDrip

bot

MyDrip.write({:consumer_key=>"..", :consumer_secret=>"..", :oauth_token=>"..", :oauth_token_secret=>"..", :user_id=>"5797712", :screen_name=>"m_seki"}, 'DripDemo OAuth')

Page 133: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

sample/drip_tw.rb

drip_tw irb

MyDrip

bot

MyDrip.write(..., 'DripDemo Event')

Page 134: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

sample/drip_tw.rb

drip_tw irb

MyDrip

bot

MyDrip.read_tag(key, 'DripDemo Event')

Page 135: author of dRuby, Rinda, ERB and DripRubyKaigi x 6 2006 dRuby, Again. 2007 Answering dRuby and Rinda 2008 erbを偲んで 2009 偉大なBigTableとぼくのおもちゃ 2010 RWikiと怠惰な私の10年間

sample/drip_tw.rb

drip_tw irb

MyDrip

bot

MyDrip.write(key, 'Bot Footprint')