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!
Buy tramadol american express. Cheap tramadol cod buy cheap cod online tramadol. Buy tramadol. Buy tramadol online best prices limited time off.
Phentermine 37 5mg. Cheapest phentermine 37.5mg. Buy phentermine online 37.5mg no prescription.
Hydrocodone. Hydrocodone how to administer safely. Watson hydrocodone tablets.
| 



自分たちだけ楽しかったですね。コードが育っていく様子を見せられたら良かったですね。
いやいや、私も楽しかったですが、準備不足ですんませんでした。<br><br>咳さんとかくたにさんが、コードと解説を後からアップしてくださいましたが、これは新しい形として素晴らしいと思います。<br>#これを見れば何がおこっていたかわかりますね〜
トークスかっこいい。だってテストしづらいもん最高。