2001年05月の雑感

[トップページへ] [4月] [6月]

5月31日(木)

Just Another Media Watch

日経コンピュータ 2001年6月4日号のエクストリームプログラミングの記事の写真のうちの1枚に DaveとAndyのRuby本が写っています。 よーく探してみましょう。


5月29日(火)

RubyUnit の setup と teardown その2

毎回、setupやteardownを実行するのじゃなくて、最初にたった1度だけsetupを実行して、最後に1度だけteardownを実行させたいなんてことがあります。

そんなときには、TestSetupモジュールを利用します。

require 'runit/ext/testsetup'

class OnlyOnceSetup
  include RUNIT::EXT::TestSetup
  def setup
    ...
  end
  def teardown
    ...
  end
end

class TestFoo < RUNIT::TestCase
  def testA
    ...
  end
  def testB
    ...
  end
end

RUNIT::CUI::TestRunner.run(OnlyOnceSetup.new(TestFoo.suite))

という感じにします。 OnlyOnceSetup#setupは最初に1回だけ、OnlyOnceSetup#teardownは最後に1回だけ実行されます。 ここで、不満なのが、TestFoo#testAやTestFoo#testBからは、OnlyOnceSetupのインスタンス変数にアクセスする手段が無いということです。

そこで、RubyUnitでは、(とりあえず) decoratedメソッドを使うという手段を提供しています。

require 'runit/ext/testsetup'

class OnlyOnceSetup
  include RUNIT::EXT::TestSetup
  def setup
    @v = 2
  end
  def value
    @v
  end
end

class TestFoo < RUNIT::TestCase
  def decorated(decorator)
    @decorator = decorator
  end
  def testA
    assert_equal(4, @decorator.value * 2)
  end
  def testB
    assert_equal(4, @decorator.value + 2)
  end
end

RUNIT::CUI::TestRunner.run(OnlyOnceSetup.new(TestFoo.suite))

という感じで使います。

OnlyOnceSetup側で、インスタンス変数にアクセスするためのメソッドを定義しておきます。 (上の例では、valueメソッドがそれです。)

TestFoo側に、decoratedという名前のメソッドを定義しておきます。 decoratedメソッドは必ず引き数を1つ取らなくてはなりません。 decoratedメソッドの引数は、上の例では、OnlyOnceSetupオブジェクトになります。 TestFooのインスタンス変数としてOnlyOnceSetupオブジェクトを保持しておくことで、 TestFoo#testAから、OnlyOnceSetup#value経由で、OnlyOnceSetupのインスタンス変数にアクセスできる訳です。

ここで、TestFoo#decoratedは、OnlyOnceSetup.newが実行されたときに呼ばれます。 OnlyOnceSetup.newが実行されたときには、まだ、OnlyOnceSetupのインスタンス変数@vが定義されてません。 ですから、

def decorated(decorator)
  @decorator = decorator
end

def decorated(decorator)
  @value = decorator.value
end

としても、@valueはnilになります。


5月28日(月)

RubyUnit の setup と teardown その1

RubyUnitで全てのテストに共通の準備をするためのメソッドがsetup、後始末をするのが、teardownです。 この「全てのテストに共通」ってのが意外と曲者なのですね。 testA と testBに共通の準備は書けても、testCでは、その準備は必要なかったりとかする訳です。 いくつかのテストに共通の準備は書けても全テストに共通の準備ってのは意外と少ないんです。

そこで、RubyUnitでは、attach_setup, detach_setupなるものを用意してみました。

class TestFoo < RUNIT::TestCase
  def setup_for_A_and_B
    ...
  end
  def setup
    ...
  end

  def teardown
    ...
  end
  def teardown_for_A_and_B
    ...
  end

  def testA
    ...
  end
  def testB
    ...
  end
  attach_setup :setup_for_A_and_B, :testA, :testB
  attach_teardown :teardown_for_A_and_B, :testA, :testB
  def testC
    ...
  end
end

という感じで使います。 RubyUnitは、testA(testB)を実行するときには、

setup -> setup_for_A_and_B -> testA(testB) -> teardown_for_A_and_B -> teardown

という順序で実行します。

testCを実行するときには

setup -> testC -> teardown

という順番で実行します。


5月27日()

『スタジアム 虹の事件簿』 青井夏海 著

読了。 帯に書いてある作品はわりと好きなので(内容は覚えてないのだが面白かったという記憶があるので) これにも手を出してみた。 どこがどうとうまく言えませんが、ちょっと物足りないような。

YARPC 会場の件

書き忘れたけど、アスキーから本を出版したからと言って、アスキー本社を知ってるとは限らないし、 知ってなくてはいけないということも無いのです。 本当に初めて行く知らない場所だったんです。決して行き方を忘れたのではありません。 大体、編集の人と初めて会ったのも、書店に本が並んだ後だったりするし。


5月26日()

YARPC

朝起きたら、喉がガラガラ。やばい。今日喋らなあかんのに。 風邪ひいたのか? うがいして、コンビニで、のどあめ買って会場へ向かうことに。 初台の駅に着く頃には、少しまともに。

超方向音痴の私は、会場の場所が良くわからずうろうろしていると小林さんに遭遇。 二人で地図を再確認しながらうろうろしてるとMoonWolfさんと遭遇。 さらにうろうろしているとちょうどタクシーが前の方で停止。 ひょっとするとひょっとするかもと思いじっと見ていると、降りてきた人の中に見たことある人が。 あの人は、オープンソースまつりで「挑戦してみますか?」と私に声をかけてくださった人に違いない。 きっと、Tokyo Perl Mongers の人だろう。 思いきって声をかけてみたらやっぱりそうだった。ラッキー。 ということで、無事に会場に到着。

今回の教訓:イベントに何度か参加して、知ってる人を増やしておくと、知らない会場に向かうとき便利。

内容は、いろんな人がいろんなところでフォローしてくれると思うので、自分の感想だけ。

懇親会に参加。

なひさんや、たかはしさんとテストの話など、かなり濃い話をする。

今回も思ったこと。 やっぱり濃い話は、イベント後の懇親会とか、少人数で休憩時間に集ったときにしかできない。 で、それが一番面白かったりする。 あっ。そうか。そういうことをちゃんと時間をとって実現するのがBOFなんでしょうかね。


5月25日(金)

いざ東京へ

何とかなったので東京へ行けそうだ。


5月22日(火)

疲れた

なんかいろいろあって疲れた。


5月18日(金)

乗物酔い

ObjectDay 2001に参加するため、電車に乗ったら気持ち悪くなった。 振り子型とか呼ばれるらしいタイプの電車。 何でもカーブでスピードを落とさずに曲がれるようになっていて、その分、横揺れが激しいんだとか。

私も...

弁当を買って新幹線に乗った。隣の席が母娘らしき2人連れだった。 隣の席のテーブルには弁当が置かれてあった。 私も自分の目の前のテーブルに弁当を置いた。

ここで、難しいのが新幹線の車内でいつ、弁当を食べるかということだ。 食べている途中で、車掌が回ってきたり、停車駅にぶつかったりすると落ち着かないのだ。 さらに今回は、 隣の席の女性(娘の方)と私のどちらが先に弁当を開くかという非常にデリケートな問題が絡んでくる。

結局、私の方が先に開かねばなるまいと意を決して、弁当を開くことにした。 マラソンに例えるなら、2人並走の状態から私が一歩先に出た形である。 私が弁当を開ききって食べる体制に入った瞬間、隣から「私も食べよう」という声が聞こえてきた。 声が小さかったので、今、「私も」って言ったよね。「も」って。ねっ。絶対言ったよね。 私が弁当を開くのを待ってたんだよね。ねっ。一緒に並走してたんだよね。 と聞いて確認したかったのであるが、小心者の私には、とてもそんな真似はできなかったのである。

うーむ。オチも何もない話だ。

XP談議

私が期待していた内容とはちょっと違っていました。

XP懐疑派からXPのココがダメなんじゃないの? とか この辺はどうやって克服するの? とか そういうストレートなツッコミが出て、 それに擁護派が反論する形で議論が展開されて、 XPがどういうものか明確になってくるのを期待してました。 ですが、いきなり懐疑派が変化球できたので、 出鼻をくじかれて、あらあらという感じでした。 結局、その変化球は、最後まで私には見えませんでした。

あと、XPの具体的な適用例とか失敗談とかそういうのを色々聞いてみたかったです。

XP談議が終わったあと、パネリストの一人と話し込んで、 それが一番有意義だったような気がします。 (わざわざ東京まで行って話し込む必要はないので、その意味では有意義度が下がります。)

来週も行くんだから、今週はやめときゃ良かった。

XPエクストリーム・プログラミング実行計画

読了。訳は、前よりこなれている感じ。 もう1、2度読み返さないとちゃんと消化できそうにないです。


5月17日(木)

達人プログラマー

やっと読了。著者の二人はやっぱりパワフルだ。


5月16日(水)

やっぱりもんじゃ

Tokyo Perl Mongers の緊急例会があるらしい。 場所は、神楽坂のもんじゃやさんだとか。 やっぱり、そうだったのか。 (←そんなわけありません。)


5月11日(金)

Daily Planning

ゴールデンウィーク以降、忙しいのか、暇なのか、わからない状態が続いている。 日々変更される予定。 本当は今日、全休したかったのだが、午後から出社。 でもって予定が変更されたので、全休でも実は良かったということになってしまった。

Oroborus

というWindow Managerがあるのを知って、ダウンロードして試す。 Window Managerが動いていないのと同じような状態になる。 あきらめて、Icewmに戻す。

evening commander

Emacsで動く midnight commander clone.

  1. 安定ヴァージョンがリリースされるまで待つ。

  2. もっといいのが無いか探す。

  3. そのままだと私にとってかなり使いづらいので、これをベースに自分好みにいじる。

  4. 自分で一から作るために、emacs-lispの勉強を始める。

さて、どうしよう。

norton commander cloneの存在も知る。

ちなみに私は、midnight commanderもnorton commanderも使ったことがないので、 cloneとしての出来具合がいいかどうかわかりません。


5月7日(月)

pcl-cvs(Vine Linux 2.1)

freshmeetから。2.9.9がリリース。 あれっ? この前ダウンロードしたとき、既に、2.9.9だったような。

念のため、M-x cvs-update したら

PCL-CVS release v2_9_9

と表示される。

freshmeetに載る前の微妙なタイミングでダウンロードしたということか。


5月3日(木)

ノートPC

キーボードの触感というか操作感というかそういうのは、実際に触ってみないとわからないとあらためて感じた。

『わが師はサタン』天藤真

読了。半分ぐらい読んだところで、犯人の見当がつく。 勘のいい人だとわかるでしょう。 もうひとひねり欲しいところです。

書籍購入

『XPエクストリーム・プログラミング計画』

XPだし、薄くてすぐ読めそうだったので。

『入門CVS』

考えるところがあって、CVSの解説書を1冊買うことに。 どれを買おうか迷った挙句、これにした。最後の決め手は、あとがき(笑)。 いろんな意味で、親近感が湧いてしまいました。 内容が良いかどうかはわからないけど、読みやすそう。

rxvt(Vine Linux 2.1)

xtermよりも、rxvtの方が軽いらしいので、rxvtを使うことにした。


[トップページへ] [4月] [6月]