OAO

開発とかBTSとかIDEとかスクラムとか 書くかもしれないブログです たぶん

第一回 Agile Samurai 読書会 埼玉道場

3月10日(土)に第一回 埼玉道場を開催してきました。
I've been holding a dojo in Saitama on Saturday, March 10.

はじめに

興味を持って、実際に足を運んでいただいて、僕らに熱く語ってくれたジョナサン(@jrasmusson)ありがとう!
First.
Thanks for coming our dojo!
Most remain in the mind the story of the jar, it seemed the truth.

24日のDojo Gatheringでまた会いましょう。
Let's meet again in the Dojo Gathering on March 24.

席について

入場時にプランニングポーカーを引いてもらい、対応する番号の席に座ってもらいました。
(某PO勉強会の席ぎめを真似しました!)

開催にあたって

埼玉道場として3つの約束を宣言しました。

  1. 我々自身がわくわくし楽しむことをやめない

 監訳者あとがきにもありますが、我々は「このやり方が楽しい」という事に気づいてしまった。
 なので、当道場では楽しむ、わくわくする、をモットーに進めていきます。

  1. 我々はチームであり、仲間であることを理解する。

 この本に出会い、わくわくしてしまった仲間が集まったのがこの道場です。
 我々は一丸となって道場の仲間(チーム)が出くわした手強い問題や、ぶちのめされる為に出てきた
 問題を皆で解決する事をモットーに、進めていきます。
 くだらない問題や疑問なんかない。

  1. 第一回のお約束

 今回は私と@alterakeyの二人で考えた読書会です。
 KPTや振り返りで参加者の人が出した意見を反映して、より良い読書会にしていきましょう。
 

流れ

4人卓を4つ作って、そこに座ってもらう。
スクラムをやってる人と運営側は1人1卓。

読書範囲は第一章。
疑問が出たらポストイットに書いてもらう形で読書スタート。

反省点

私のテーブルでは第一章の時点で後半の内容について話すなど、問題点が多かったので
次回はどうするか考える。
KPTとか振り返りをし忘れた!
理由が理由なので、アレですが・・・(後述)

サプライズプレゼント

そうしてこうなった

f:id:inda_re:20120310134110j:plain

That the story of Jonathan

f:id:inda_re:20120310163147j:plain
f:id:inda_re:20120310163738j:plain

Special thanks to....

@jrasmusson
Thank you for writing such a wonderful book!

@miholovesq,@mike_neck
通訳とお迎えありがとうございました!

@nawoto,@kakutani
お二人のおかげでとても素晴らしい道場が開催できました!

@tyobichi
お菓子&受付&写真撮影 ありがとうございました!

今回の参加者

@shin_semiya
@e_mumble
@takesiesz
@KoukoMatsumoto
@alterakey
@moyashidaisuke
@miholovesq
@ryotasaito
@tanabata77
@rocket_usagi
@sinomun
@junpei_iwa
@kojiokb

おまけ

f:id:inda_re:20120310184043j:plain
f:id:inda_re:20120310185310j:plain

ぶれいすさんがコメントしてくれたのでソレを反芻(自分用エントリ)

id:bleis-tift
コンパイラの気持ちになって考えると、hogelist.Where(n => n.ID == 1)というものが一意に定まるかどうかはわかりません。
なので、WhereはIEnumerableを返すようにできていて、何にもヒットしなければ空、全部ヒットしたら元のものがそのまま出てくる感じです。Selectというのは「各要素を別のものに変換する」というもので、これもIEnumerableを受け取ってIEnumerableを返すようになっています。これによって、Whereで絞ってSelectで変換かけたうえで、またWhereで絞る、と言ったことができます。で、人間様にとってはIDは一意に定まるだろ、と言うのが分かるので、最後にFirstなりSingleなりを置いてあげて、要素を取り出します。
Firstは複数要素があったとしても最初のものを返すのに対して、Singleは要素が空だったり、2個あったりすると例外が発生します(Firstも空のIEnumerableに対しては例外を投げる)。
要素が存在しなかった場合はデフォルトの値を返してほしい、という場合はFirstOrDefaultやSingleOrDefaultを使います。ちなみに、LINQ to Objectsの各メソッドは、条件を取るものが多いです。
なので、今回の例であれば、hogelist.Single(n => n.ID == 1)としても大丈夫です。
値を加工したい場合は、Selectに渡していたラムダ式の処理を外側に持って行けばいいだけです。



>コンパイラの気持ちになって考えると、hogelist.Where(n => n.ID == 1)というものが一意に定まるかどうかはわかりません。

・おっしゃるとおりですはい。

>なので、WhereはIEnumerableを返すようにできていて、何にもヒットしなければ空、全部ヒットしたら元のものがそのまま出てくる感じです。

・IEnumerableについて 参考にしたサイト:http://ufcpp.net/study/csharp/sp_foreach.html#iEnumerable

>Selectというのは「各要素を別のものに変換する」というもので、これもIEnumerableを受け取ってIEnumerableを返すようになっています。これによって、Whereで絞ってSelectで変換かけたうえで、またWhereで絞る、と言ったことができます。

・なるほどなるほど。

>で、人間様にとってはIDは一意に定まるだろ、と言うのが分かるので、最後にFirstなりSingleなりを置いてあげて、要素を取り出します。

・私が最後に挑戦したところですね。



>Firstは複数要素があったとしても最初のものを返すのに対して、Singleは要素が空だったり、2個あったりすると例外が発生します(Firstも空のIEnumerableに対しては例外を投げる)。

・これは後述



>要素が存在しなかった場合はデフォルトの値を返してほしい、という場合はFirstOrDefaultやSingleOrDefaultを使います。ちなみに、LINQ to Objectsの各メソッドは、条件を取るものが多いです。

http://www.atmarkit.co.jp/fdotnet/dotnettips/952firstordefault/firstordefault.html

・nullとかnothingが帰ってくるのでそこでフックする感じですかね。



>なので、今回の例であれば、hogelist.Single(n => n.ID == 1)としても大丈夫です。

・存在値を指定してる場合はそうなりますね。

・安全策が必要なら「SingleOrDefault」で指定してやることにします。



>値を加工したい場合は、Selectに渡していたラムダ式の処理を外側に持って行けばいいだけです。

・むむ。

・こういう理解でいいのかな。



ほそく

一応、捕捉。

C#2008というかC#3.0からだそうですが。
こういう事ができるので、VB2008でもやりたいヽ(`Д´)ノウワァァァン!!

という事です。はい。

VB2010では使えるようですよ!

VS2010買う予算ください(´・ω・`)

    • 追記



@bleis さんいつもありがとうございます!!!

プロパティの自動実装なんてなかったというか無い

というか、2008だと自動実装なんかないですよ。というお話。

まあ、書いてる途中でSetterの行で再帰してんぞ!という警告は出てますが。

で、これをNUnitでテストしてみると・・・

f:id:inda_re:20120308144512p:plain

はい、NUnitがクラッシュしましたwwww

きちんと動かす為には、クラスでメンバ変数作ってそこに格納すればちゃんと動きます。
はい。あたりまえですね。

C#2008で出来た事がVB2008で出来ないってどういうことやねん!
という事が言いたいだけです。はい。

きょんくんとでこれきさんがだいじなことをいったのでめもった