エンタープライズアジャイル勉強会でやった反復開発についての講演を再演します。かっこよく言うとイテレーション2!
なお、前回の資料はこちら。*1
*1:そうそう。資料も再演も金で買えるよ!
goのselectっぽいやつ、実装できそうな気もするけど字面がなあ。
成功したチャネルの操作オブジェクトと値を返すやつ。
同じチャネルに複数の操作したときにwhenでマッチさせにくい。selectの実引数の操作オブジェクトを別途メモする必要があるため。
(チャネルは操作オブジェクトと===でtrueになるようにしてはある)
Fiber.new do while true c, value = Bartender::select(quit.pop!, chan[0].pop!, chan[1].pop!, chan[2].pop!, chan[3].pop!, chan[4].pop!, ch2.push!(:x)) case c when chan[0] p [0, value] when chan[1] p [1, value] when chan[2] p [2, value] when chan[3] p [3, value] when chan[4] p [4, value] when ch2 p [:ch2, value] when quit p [:quit, value] break else p :else end Bartender.sleep(rand) end end.resume
selectコンテキストオブジェクトに操作とチャネル、成功した時のブロックを渡す。
文字数多くてキモい。
Fiber.new do catch(:quit) do while true Bartender::select2 do |select| select.read(quit) do |value| p [:quit, value] throw(:quit) end.read(chan[0]) do |value| p [0, value] end.read(chan[1]) do |value| p [1, value] end.read(chan[2]) do |value| p [2, value] end.read(chan[3]) do |value| p [3, value] end.read(chan[4]) do |value| p [0, value] end.write(ch2, :x) do p :ch2 end.else do p :else end end Bartender.sleep(rand) end end end.resume
いずれにしても、操作もさせつつ待つ(遅れた方は却下する)のでインターフェイスが固定的になっちゃうのかなあ。
エンタープライズアジャイル勉強会という勉強会に呼んでいただけたので資料公開しますね。広島の旅費が苦しいのでこういうのうれしい!
反復開発は全工程やって1ターンだよっていうみんなが知ってる(けど、ある方面のScrumではやられていないことが多いらしい)ことを45分間ずっと説明しました。
その結果チームの境界(サブシステムとか工程別チームとか)がどうでもよくなると思う(実感してる)んだけど、Scurm Incの説明だと階層がたくさんある例を示していたし、永田さんはQA部門にこだわりがあるのがおもしろいなー。自分も含めて、みんな自分の状況が好きなんだな。いいことだ。
再演バイト待ってます。 (再演したいんじゃなくて、RubyKaigiの旅費かせぎたいので!)
世界のエリートは大事にしないが、普通の人にはそこそこ役立つビジネス書