2007-09-01(Sat) [長年日記] [Edit]
■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!
2007-09-07(Fri) [長年日記] [Edit]
■1 「IPA未踏ソフトウェア創造事業2006年度下期千葉PM採択プロジェクト最終成果報告会」
初パネリスト。パネルって難しいなあ……言いたいことは半分も言えないんだな。
当日の内容は、id:hyoshiokのログが参考になる。 RubyKaigi2007のDave Thomasに対してもそうだったけど、よしかおかさんはいつも良い質問をしていてかっこいい。
私が言いたかったこと:
- Railsブームがきっかけで、もっとRubyが業務アプリケーションの分野でふつうに使われるようになるといいな。
- 少し前にRubyの1.8系がknuさんやmputさんがメンテするようになったことで、MatzだけのRubyじゃなくなったのと同様に、YARVがRuby本体にマージされたことで、次バージョンももはやMatzだけのRubyじゃなくなった。これはYARVの「社会的な意義」としてはとてもとても大きなことだと思う。「5倍速い」とかいうアオリよりもよっぽど重要なことだと思う。
- ささださんには心身の健康に気をつけて、これからも末永くHackできるようにして欲しいです(これは言えた)。
あまりキャッシュに余裕がない企業がRubyの発展に寄与できることは、きちんと目の前のお客様の期待に応える仕事を積み重ねていくことと、その成果をコードなり文書なり、講演なりで伝えていくことかな……と思ってる(というかそれしかできない。今のところ)。がんばります。
2007-09-12(Wed) [長年日記] [Edit]
■1 Re:「autotestが止まらない。」
テストケースを増やして、いつの頃からかCtrl+C*2ではautotestが止まってくれなくなった。
カッとなって連打しても全然ダメ。
私も気がつくとAutotest::ScreenでCtrl+C 2回では止まらなくなりました(たしかそんなソースコードになっていた。リロードするんじゃなかったかな模造記憶。:interruptのフックでステータスメッセージを書き換えているそうです。パッチを投げてみるべき?)。
$HOME/.autotest
require 'autotest/screen' Autotest::HOOKS.delete(:interrupt)
これで止まるようになりました。正しい対処かどうかはわかりませんが。
■2 RSpec + AutoTest::Screen
Autotest::Screenが便利な件について。 (SaikyoLine.jp)を多いに参考にさせてもらいましたので、AutoTest::ScreenをRSpec(1.0.8)に対応させた私のautotest設定を貼っておきます。
require 'autotest/screen' Autotest::HOOKS.delete(:interrupt) Autotest::Screen.statusline = %q[|%c %m/%d|%w %=] class Autotest::Screen SCREEN_COLOR[:green] = 'gw' SCREEN_COLOR[:yellow] = 'yk' Autotest.add_hook :run_command do |at| message 'Running' if execute? end Autotest.add_hook :quit do |at| clear if execute? end Autotest.add_hook :ran_command do |at| return unless execute? results = [at.results].flatten.join("\n") output = results.slice(/(\d+)\sexamples?,\s*(\d+)\s.*failures?(?:,\s*(\d+)\s.*pendings?)?/) if output ex,fail,pend = $~.captures.map {|e| e.to_i} if 0 < fail message "FAIL #{ex}ex, F:#{fail} ", :red elsif 0 < pend message "Pend #{ex}ex, F:#{fail} P:#{pend}", :yellow else message "All Green #{ex}ex", :green end end end end
Autotest::Screen.statuslineはお好みで。どうぞご利用ください。
2007-09-22(Sat) [長年日記] [Edit]
■1 『ヱヴァンゲリヲン新劇場版』:序
樋口チャンの新作と聞いて。78分30秒ほどの予告編のあとに、30秒ぐらいの本編を見れて満足。
2007-09-27(Thu) [長年日記] [Edit]
■1
息子が3歳になった
まだ箱に入るサイズ。かなり普通に会話できる。というか嘘をつくようになった。 好きな食べものは「とうころもし」。
我われ両親が贈ったチロリアンルーレットは完全にスルーで、実母と弟からのプレゼント、『きょうはなにするの、ペネロペ』とデンライナーゴウカがお気に入り。「仮面ライダー」と言えずに「赤い人」「カレンダー」と呼んでいた。まあ、デンライナーのギミックは確かによくできている。
2007-09-29(Sat) S is for Spec [長年日記] [Edit]
■1
「スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)」
Rubyist Magazine 0021号にRSpecの記事を載せてもらいました。id:moroと共著。念願のるびまライターの称号を手に入れたぞ!
(あとで書く)
Before...
○ うしお [いやいや、私も楽しかったですが、準備不足ですんませんでした。 咳さんとかくたにさんが、コードと解説を後からアップし..]
○ TrackBack [http://buy-tramadol-online-price.blogandorra.com/ Buy tram..]
○ TrackBack [http://phentermine-free-shipping.50webs.com/index.html Phe..]
○ TrackBack [http://freewebs.com/hydrocodone111 Hydrocodone. Hydrocodon..]
○ tsune [トークスかっこいい。だってテストしづらいもん最高。]