2007-09-01(Sat) [長年日記]
■1
XP祭り2007でドリームチームの一員として参加
心身ともに絶不調。咳さんとペアプロということで朝から緊張し通し。はじまってからは緊張しすぎてもはや狼狽の域に。気持ちばかり焦る。全然手が動かない。もうだめ。
「落ち着け・・・心を平静にして考えるんだ・・・こんな時どうするか・・・落ち着くんだ・・『テスト』を書いて落ち着くんだ・・・『テスト』はテストに失敗した場合にしか『プロダクトコード』を書いてはいけないプログラマの偉大な習慣・・・わたしに勇気を与えてくれる」
レッド。グリーン。リファクタ。レッド。グリーン。リファクタ。レッド。グリーン。リファクタ。
ディレクトリ構造
+ lib/ +-- chatdb.rb + spec/ +-- chatdb_spec.rb +-- spec.opts + spec_helper.rb
chatdb_spec.rb
require File.dirname(__FILE__) + '/../spec_helper'
describe ChatDb do
before do
@db = ChatDb.new
end
it {
@db.add("kakutani", "Hello")
@db.add("m_seki", "druby")
@db.head.collect do |x|
x[1]
end.should == ["druby", "Hello"]
}
end
大したことのない殴り書きのテストたが、このおかげで咳さんと認識に自分の気持ちを追いつかせることができた。
chatdb.rb
class ChatLeaf
attr_accessor :author, :text, :time
def initialize(author, text)
@author, @text, @time = author, text, Time.now
end
def to_a
[@author, @text, @time]
end
end
class ChatDb
def initialize
@strage = []
end
def add(author, text)
@strage.unshift(ChatLeaf.new(author, text));nil
end
def head(size=10)
@strage.first(size).collect { |e| e.to_a}
end
end
if $0 == __FILE__
require 'drb/drb'
DRb.start_service('druby://:12345', ChatDb.new)
gets
end
劣化したサンプルみたいなコードだ……。咳さんお付き合いありがとうございました。
使いかた
まずchatdbを起動させます。
$ ruby chatdb.rb
何にも表示されません。別コンソールでchatクライアントを起動させます。
$ irb --simple-prompt -rdrb/drb
>> c = DRbObject.new_with_uri('druby://localhost:12345')
=> #<DRb::DRbObject:0x10a0504 @ref=nil, @uri="druby://localhost:12345">
>> c.add('kakutani', 'Hello, ChatDb')
=> nil
>> c.head.add('kakutani', 'dRuby is awesome!"))
=> nil
>> c.head.each {|author,text,time| p "(#{time.strftime('%H:%M:%S')})[#{author}] #{text}"};nil
"(11:16:35)[kakutani] dRuby is awesome!"
"(11:16:26)[kakutani] Hello, Chatdb"
=> nil
ChatDb#headでせっかく取得したChatLeafにto_aしているのは、CGIは咳さんのMacで動かしていたので、ChatDb関連クラスを配布するのが面倒だったから。私の環境がqdbmをちゃんと動かせる状態になっておらず、永続化までやれませんでした。準備重要。
感想
- 咳さんとペアプロできて幸せだった。
- ライブコーディングはまったくアジャイルではない
- ライブコーディングを楽しんでもらうには、やり方を考えておかないと勿体ない
- コンテンツとして提供するつもりなら、ちゃんと仕込みが必要。
- ライブ感だけを伝えたいなら、ユルい雰囲気でやったほうがよい。懇親会の片隅や、専用の場所など(中継とかあるといいのかも)。
■2 XP祭り2007のライトニングトークス
チェックリストの12項目に該当したらTDD脳
「Testing Will Challange Your Conventions」の12項目を淡々と紹介しようとして失敗したトークス。LTの順番はトリをつとめる角野"五十六"泰次の直前。露払い。
全トークスのビデオ(後述)がgoogle videoで公開されてます。そのうち、自分のしゃべった分だけニコニコ動画に置きました。コメントしてもらえると嬉しいです。
スライドはslideshareと、PDFで置いておきます。
全トークスのビデオ
Akiyah GJ!
リーン開発の現場 カンバンによる大規模プロジェクトの運営(Henrik Kniberg/角谷 信太郎/市谷 聡啓/藤原 大)
『なるほどUnixプロセス ― Rubyで学ぶUnixの基礎』
SCRUM BOOT CAMP THE BOOK(西村 直人/永瀬 美穂/吉羽 龍太郎)
実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる(Steve Freeman/Nat Pryce/和智 右桂/高木 正弘)
The RSpec Book (Professional Ruby Series)(David Chelimsky/Dave Astels/Zach Dennis/角谷 信太郎/豊田 祐司/株式会社クイープ)
アジャイルサムライ−達人開発者への道−(Jonathan Rasmusson/西村 直人/角谷 信太郎/近藤 修平/角掛 拓未)
アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~(Mike Cohn/マイク コーン/安井 力/角谷 信太郎)
インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践(Ken Pugh/角谷 信太郎(監訳)/児島 修)
アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣(Venkat Subramaniam/Andy Hunt/木下 史彦/角谷 信太郎)
JavaからRubyへ ―マネージャのための実践移行ガイド(Bruce A. Tate/角谷 信太郎)










自分たちだけ楽しかったですね。コードが育っていく様子を見せられたら良かったですね。
いやいや、私も楽しかったですが、準備不足ですんませんでした。<br><br>咳さんとかくたにさんが、コードと解説を後からアップしてくださいましたが、これは新しい形として素晴らしいと思います。<br>#これを見れば何がおこっていたかわかりますね〜
http://buy-tramadol-online-price.blogandorra.com/<br>Buy tramadol online cod.<br>Buy tramadol online best prices limited time off.<br>Buy tramadol american express. Cheap tramadol cod buy cheap cod online tramadol. Buy tramadol. Buy tramadol online best prices limited time off.
http://phentermine-free-shipping.50webs.com/index.html<br>Phentermine 37 5mg.<br>Photos of phentermine 37.5mg.<br>Phentermine 37 5mg. Cheapest phentermine 37.5mg. Buy phentermine online 37.5mg no prescription.
http://freewebs.com/hydrocodone111<br>Hydrocodone.<br>Hydrocodone.<br>Hydrocodone. Hydrocodone how to administer safely. Watson hydrocodone tablets.
トークスかっこいい。だってテストしづらいもん最高。