the world is connected

54
The World is Connected gem install acappella (株) 永和システムマネジメント アジャイル事業部 Ruby x Agile グループ 伊藤 浩一 (@koic) 2015.07.27 (Mon ) 永和システムマネジメント 神田オフィス 第14回 西日暮里 .rb

Upload: koichi-ito

Post on 13-Aug-2015

154 views

Category:

Engineering


0 download

TRANSCRIPT

The Worldis Connected

gem install acappella(株) 永和システムマネジメント

アジャイル事業部 Ruby x Agile グループ

伊藤 浩一 (@koic)

2015.07.27 (Mon)永和システムマネジメント 神田オフィス

第14回 西日暮里.rb

Computer programmer, guitarist. Leader of an Agile software development team

at Eiwa System Management, Inc. Lives in Shinjuku.

@koic photo token by @NaCl

• 2014.09.06(Sat) XP祭り2014

• 2014.11.08(Sat) Yokohama.rb Meetup#50

• 2014.11.29(Sat) TokyuRuby会議08

• 2015.01.16(Fri) ありがたい話 公開版

• 2015.02.25(Wed) Ruby Business Users Conference 2015

• 2015.03.28(Sat) 浜松Ruby会議01

• 2015.04.06(Mon) マイナビTV【永和システムマネジメント】のアジャイルな受託開発

• 2015.05.15(Fri) Ruby合同勉強会@Sansan

• 2015.06.04(Thu) 表参道.rb#1

• 2015.06.29(Mon) 西日暮里.rb 1周年記念会

• 2015.07.11(Sat) 関西Ruby会議06

• 2015.07.22(Wed) pixiv x ESM技術交流会

• 2015.07.27(Mon) 第14回 西日暮里.rb

• 2015.08.29(Sat) TokyuRuby会議09

• 2015.09.12(Sat) XP祭り 2015

勤続10周年ツアー中

勤続10周年記念講演 最終章

今日の話

• 2014.09.06(Sat) XP祭り2014

• 2014.11.08(Sat) Yokohama.rb Meetup#50

• 2014.11.29(Sat) TokyuRuby会議08

• 2014.12.27(Sat) あきーにょカンファレンス#1

• 2015.01.16(Fri) ありがたい話 公開版

• 2015.02.25(Wed) Ruby Business Users Conference 2015

• 2015.03.28(Sat) 浜松Ruby会議01

• 2015.04.06(Mon) マイナビTV【永和システムマネジメント】のアジャイルな受託開発

• 2015.05.15(Fri) Ruby合同勉強会@Sansan

• 2015.06.04(Thu) 表参道.rb#1

• 2015.06.29(Mon) 西日暮里.rb 1周年記念会

• 2015.07.11(Sat) 関西Ruby会議06

• 2015.07.22(Wed) pixiv x ESM技術交流会

• 2015.07.27(Mon) 第14回 西日暮里.rb

• 2015.08.29(Sat) TokyuRuby会議09

• 2015.09.12(Sat) XP祭り 2015

7ヶ月前の心残り体調を崩して参加できず

お蔵だし

コードx音楽

コードx音楽Ruby Agile is Rock

主題

?acappella is 何

Client-Serverモデルの対話型ツールです。クライアントでタイピングした文字をサーバーが話します。

『Extreme Programming Embrace Change』より

METAPHOR

本スライドでは隠でなく比になってしまいますが

Client-Serverモデルの対話型ツールです。クライアントでタイピングした文字をサーバーが話します。

Client-Serverモデルの対話型ツールです。様々な作詞家がタイピングした文字をサーバーが話します。

Client-Serverモデルの対話型ツールです。様々な作詞家が送付をしてきた文字をサーバーが話します。

Client-Serverモデルの対話型ツールです。様々な作詞家が送付をしてきた歌詞をサーバーが話します。

Client-Serverモデルの対話型ツールです。様々な作詞家が送付をしてきた歌詞をシンガーが話します。

Client-Serverモデルの対話型ツールです。様々な作詞家が送付をしてきた歌詞をシンガーが歌います。

使い方

DEMO

$ acappella-server acappella 0.1.0 starting on druby://localhost:8989 Run `acappella-server --help` for more startup options Ctrl-C to shutdown server !

$ acappella-client Connect to druby://localhost:8989 Run `acappella-client --help` for more startup options Ctrl-D to exit >

実装

https://github.com/koic/acappella

設計

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Stub>>request(lyrics)

next_song

:Server

<<LocalObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

設計図 druby://localhost:8989

内部の流れ

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Proxy>>request(lyrics)

next_song

:Server

<<RemoteObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

druby://localhost:8989

リモートオブジェクト is 誰?

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Proxy>>request(lyrics)

next_song

:Server

<<RemoteObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

druby://localhost:8989

リモートオブジェクトを登録して起動する

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Proxy>>request(lyrics)

next_song

:Server

<<RemoteObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

druby://localhost:8989DRbObjectを取得する

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Proxy>>request(lyrics)

next_song

:Server

<<RemoteObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

リモートメソッドの呼び出しdruby://localhost:8989

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Proxy>>request(lyrics)

next_song

:Server

<<LocalObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

druby://localhost:8989

alternative slide

シリアライズとデシリアライズ

DRbObject#method_missinghttps://github.com/ruby/ruby/blob/v2_2_0_preview2/lib/drb/drb.rb#L1133

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Proxy>>request(lyrics)

next_song

:Server

<<RemoteObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

druby://localhost:8989

作詞家に渡された曲をリクエストする

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Proxy>>request(lyrics)

next_song

:Server

<<RemoteObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

druby://localhost:8989

セットリストから次の曲を取り出す

:Client

:SetList

:Singer

songwriter:Songwriter

songwriter:DRbObject

<<Proxy>>request(lyrics)

next_song

:Server

<<RemoteObject>>

lyrics:String

sing(song)

Client Side (DRbObject.new_with_uri) DRbServer Side (DRb.start_service)write

method_missing(:write, …)

歌う druby://localhost:8989

どちらがサーバでどちらがクライアント?“今後、加味したい点

http://www2a.biglobe.ne.jp/seki/ruby/d205.html

• dRubyではどのスクリプトも簡単にサーバになれます。

• それにどのスクリプトもサーバであったり、クライアントであったりします

• その関係はメソッド呼び出しのレシーバ、センダーの関係と同じです。

http://www.druby.org/drb08.pdf

詳しくは書籍を読もう!

たのしく分散 プログラミング

http://docs.ruby-lang.org/ja/2.1.0/library/drb.html

さいごに

分散と人

http://www.esm.co.jp/agile/business_plan_esm_agile_div_35th.pdf

分散した社会構造

XPE2ndと

上司がついて

きます

https://pbs.twimg.com/media/CIZYfj6W8AAqyAU.jpg

The world is connected

https://pbs.twimg.com/media/CKjqYTWXAAAYEtz.jpg

https://github.com/koic/acappella