中活躍程度でした。でも助かりました。 テストの目途もついたし。
それにしても、Rubyってネットワークプログラミングが 本当に簡単にできてしまうなあと感じてしまった1日でした。
なのかどうかはわかりませんが、テストスクリプトでは
system("rm -rf bar") system("cp -rf foo")
なんてことは、しょっちゅうやってます。
以前Linux JapanにRuby/SDLの記事を書いてらっしゃった、たむらさんからメールを頂きました。 27日のLinux Magazine は Linux Japan の間違いです。(修正しました。)
記事は読んだので、あとは実践で便利さをどこまで実感できるかだな。 ここが勝負の分かれ目です。
そういえば、Cygwinでコンパイルに挑戦したこともあったんだった。 誰かのページでScreenのCygwin版を見て、先を越されたと思ったこともあったような気がする。
shutdown もあるのか。
大活躍するはずだったんだけど、小活躍程度に終わった。 大活躍は、きっと明日だ。きっと。
仕事を1つ忘れていたことに帰りに気づいた。 ごめんなさい。明日やります。 TCPSocketPipe大活躍の日がちょっとだけ遠ざかったような気がする。
RubyUnitのto_strメソッドがまずい([ruby-list:32604])との指摘をうけたので、to_stringに急遽変更。
なんかバタバタとした1日。 結構忙しい1日だったのに本来の仕事は、ほとんど進まず...。
本当は、なひさんのTCPSocketPipeを大活躍させようかと考えていたんだけど、それは明日以降。
screenの特集があるのを発見。 これを機会にscreenを使ってみようかと思ってます。 一度触ってみて、これは便利かと思ったのですが、いつの間にか使わなくなってしまったのでした。
昨日早く寝たので、今日は少し元気です。 まだ、完全ではないので、今日も早く寝ます。
寒気がするし、頭も痛いので寝ます。このページの更新も1回休み。
「静のミステリー」です。 この人は、ミステリーというジャンルから、どんどん離れていきそうな予感がします。 この予感は外れてほしいんですが。
昨日のruby-talkのリンクが無茶苦茶。すいません。
午前中で終了。
今日、昼に入った讃岐うどんの店のメニューに「とんこつチャーシューうどん」なるものがあった。 「ラーメンを越えるか!?」 なんて小さく書かれていて、ちょっとだけ魅かれるものがあったのだが、 私は気弱な小市民なので、注文できなかった。
うどんとラーメンの麺は基本的に同じですか? だとしたら、単に普通の太麺のラーメンなのかも知れない。
「このミス」2000年版第10位というのに釣られました。
前から気になっていた本。 自分で「難事件」と言い切ってるんですよ。 しかもそれを鑑定しちゃうんですよ。 でもって知性派ミステリなんですよ。 ということで、アーロン・エルキンズあたりの路線を期待して買ってしまいました。
百舌シリーズとか、水中眼鏡の女のようなトリッキーな話が好きなんですが、これはスペイン物ですか。
「きらきらひかる」の原作本。 昨日ぼーっとテレビ見てて、ちょっとミステリーっぽくて、だんだん魅き込まれてしまったもので。
新しいRubyの書籍『Sams Teach Yourself Ruby in 21 Days』が出版されるらしい ([ruby-talk:26205])。
これに続いて、ruby-talk では、21 Days シリーズの本に対する否定的な意見や、 Rubyを学ぶには21日で十分おつりが来るというような意見も出てます。
それにしても、否定的意見に対する Daveさんの返し([ruby-talk:26232])は、 いつものことながらナイス(否定的意見もユーモアのあるものですが)。 格好いいなあ。
ドキュメントまわりを見直した。 Rubyの標準のドキュメントっぽい書式、構成にしてみた。 method index file を使わなくなりました。
今日、コマンドラインから使ったもの。
カレントディレクトリ以下のファイルをまるごと消してくれるので使うときは慎重に。
ログの内容が長くなるときは、あらかじめlogfileを作っておいて、cvs commit -F logfile
とした方が便利でしょう。
update
するときは、-d -P つきだと、
サブディレクトリが新規にできたり、削除されたりした場合にも反映してくれる。
こんなものがあったのか。 JUnitと一緒に使い、 privateメソッドに外からアクセスできるようにして、 privateメソッドのテストなどをできるようにするものらしい。 あれっ? JXUnitってのもあったような無かったような。
やっぱり l と r の区別は大事なんですねえ。 私は、聞くのも話すのも書くのもちゃんと区別できてません。
サーバーの設定変更とかでサーバーにアクセスできなくなるので、 みんな、さっさと帰ってしまった。 ということで、私も一緒に... いや、私は、サーバーにアクセスできなくても仕事はできるんですが。 でも、日曜日も仕事なので、無理しちゃいけないということで、さっさと帰ることにした。
えーと、w3mじゃなくて emacs-w3m の方です。
w3m の方は、ずーっと
q での終了時に確認する (*)ON ( )OFF
の状態でしたが、emacs-w3mは、その設定とは関係なく、q
で終了してたように思います。
今調べたら、emacs-w3mは、q
で即終了、Q
で終了時に確認するようになってます。
うーむ。w3mとは逆だ。
前から、漠然と何か違うと思っていたのだけど、別段気にしてなかった私。
もっとも、キーバインドを変更すれば、emacs-w3mの挙動をw3mと同じにできるんでしょうけど。
テレビから「関西は豚肉で他人丼、関東は牛肉で他人丼」と聞こえてきたのだが、そうなんですか??? 豚肉の他人丼は食べたことがありません。 豚肉と卵なら、豚肉はトンカツにしてカツ丼が普通なんじゃないかと。
フェアな謎解きなのかなあ。 どっちかというと、こじつけの感が強いような。 最後のオチは勉強不足でわかりませんでした。
1.1.8もそろそろ潮時か。
それにしても、最近、Windowsは自宅では起動すらしていないのが何とも...
1冊いただきました。 ありがとうございます。
すいません。
昨日の件は、cvs update
して入れ替えたらq
で終了できるようになりました。
ダウンロードだけしてほったらかしにしてたので、インストールしてみた。
Emacs上じゃなくて、コンソールから、irb
と入力したら何故か
irbsh(main):001:0>
となった。うーむ。なんかへました? いや。まあ不都合があるかどうかはよくわかりません。
あっ。0.3.0がリリースされたようなので、そっちに入れかえてからもう一度出直します。
あっ。そうか。.irbrc に
load "irbsh-lib.rb"
て書いてあるんだからそりゃそうか。ぼけてました。 ...いっぱいツッコミが入りそうな気がする。
ruby-talkで誉めてもらった。 素直に嬉しい。
寒いためか、どうも体調が悪い。 おとなしくさっさと寝よう。
昨日の夜、流星群を見て風邪ひいた訳ではありません。
ちょっと前まで q
で終了できてた気がするんだけど、
Q
でないと終了できなくなったですか?
いつの間にかsourceforgeに加わっていることを知った。
w3mもcvs update
することにした。
普段は、pcl-cvsなのだが、ダイアルアップだと、rubyunitをcommitするとき、ちょっと時間が気になる。
そこで、あらかじめログファイルを作っておいてcommitする方法を調べて、
cvs commit -F /tmp/assert.log runit/assert.rb
とやってみたのだが、なぜかうまくできてなかったみたい。もうちょっと調べよう。
やっぱり「匣」のつくミステリだけのことはありました。 変な話です。 でも、それ以上の何かが欲しい。物足りません。 次作を読むかどうかは微妙なところです。
「Windows XP って何?」と全くコンピュータのことを知らない人から聞かれたらどう説明すればいいのだろう?
さらに「何がいいの?」と聞かれて、 「マイクロソフトが儲かる(のでマイクロソフトはいい思いをする)。」 と答えた私はどうなんだろうか?
assert_match
が成功したときは、Regexp.last_match
を返すようにした。
ということで、こんなことができるようになります。
match = assert_match('foobarbaz', /ba(.+)/) assert_equal('rbaz', match[1])
さらに、assert_not_match
が失敗したときは、
どこにマッチしてしまったのかをエラーメッセージで表示するようにした。
例えば、
assert_not_match('foobarbaz', /ba.+/)
の場合、メッセージの内容が
</ba.+/> matches 'barbaz' of <foobarbaz>
となります。
「ぶたぶた」シリーズのような、とぼけた味を期待していたのがいけなかった。 普通の話に思えて、なんか物足りないです(笑)。 多分、このシリーズはもう読まないんじゃないかと思います。
matome で5分割で1日300通。 何をネタにそんなに盛り上がったんだろうか?
自称「すれっからしの読者」である私は、半分も読まないうちに真犯人の見当がついてしまいました。 最後まで気がつかなかったのは、2人目の被害者の殺人の動機。盲点でした。 ネガとポジとも言うべき真相の反転は鮮やか。 「英国の新本格派」らしい逸品。
完全予約制になったらしい。 果たして、次回から待ち時間は少なくて済むのか!? それともこれは空手形なのか!? 乞うご期待!
例によって、まつもとさんの連載を立ち読み。 簡単になるはずが、段々複雑になっていった青木さんのコードの解説は聞いてみたかった。
『氷菓』米澤穂信
日常の謎派としてあるところで評価が高かったので。
『幽霊は行方不明』矢崎存美
「ぶたぶた」シリーズの矢崎さんなので。
『匣庭の偶殺魔』北乃坂柾雪
「箱」じゃなくて「匣」ですよ。「匣」がつくミステリなんですよ。それだけで十分でしょう。 もう買うしかありません(笑)。
『dRubyによる分散オブジェクトプログラミング』関将俊
RWikiユーザーとしては、そのベースとなるdRubyのことも知っておいて損は無いでしょう。
『入門 Korn シェル』Bill Rosenblatt
仕事で使わなきゃならないので。
『とむらい機関車』大坂圭吉
ちょっと立ち読みしたとき、時代を感じさせる読みづらそうな文章だったので敬遠してしまいました。 どうでもいいことですが、「大坂圭吾」と私はよく間違えそうになります。
まだ途中。 「やりました!!」という文が出てくるのだが、 例のラジオから聴こえる遠山さんの「やりました!!」の声とダブってしまう。 ついでに「You did it !!」とかパチバチという拍手の音まで思い出してしまう。
なんか1日ずれていることに気づいた。
テレビに遠山顕さんが出ていたけど、気づいたときには遅すぎて最後の10分くらいしか見れなかった。 『脱・「英語人間」』に書いてあることと同じことを話してた。
会社で、「XPの発売にあわせて休暇?」と聞かれたが決してそんなことはありません。 繰り返しますが、絶対にXPの発売とは無関係です。 今のところ買う気が無いし。
ところで、XPってVMwareの中にインストールできるのだろうか?
12枚のコインの問題は 中学のとき数学の先生から出題された。 コインじゃなくてボールだったし、600円を賭けることはなかったけど。 答えはもう忘れた。 やり方は半分くらい覚えているので1時間あればなんとかなると思う(←あんたはいいカモになってるんでは?)。
では、応用問題です。 天秤を3回だけ使って1枚だけ重さの違うコインを見つけ出せるのは、最大何枚までか?
実際にやってみた。600円はイタダキ。 ちなみに「12個の問題」と書いているのは、私が中学の頃から、ずーっとそう呼んできたからです。
何とか、昨日までの分を消化。 (白状します。大半は捨ててます。)
その中で、気になった話題2つ。
Andyさんが 新聞でインタビュー を受けたらしい([ruby-talk:24943])。
RubyのRefactoring ToolとしてRuby-in-RubyのAST生成ツールなんかが期待できるんじゃないかという話 ([ruby-talk:24949])。
Ruby-in-Ruby, AST, Rockit について調べること。> 自分 (前にruby-talkで話題になっていたと思うけど、ほとんど読まずに捨てていた。)
昨日1日分のメールを読んだつもりだったのに、全く読んでなかった。 今日1日分と合わせて、250通近く未読。
RubyUnitには、それまでに定義されているすべてのテストケースからTestSuiteを生成する
RUNIT::TestCase.all_suite
なるメソッドがあるのだが、
このメソッドは、どっちかというと
RUNIT::TestSuite.all_suite
の方が使う側からすると自然ではないかと思った。
そうです。今日、生まれて初めてこのメソッドを実際に使ってみてそう感じたのでした。
正直、一瞬、RUNIT::TestSuite.all_suite
だったかと迷いました。
まあ、私は作者なので、すぐにRUNIT::TestCase.all_suite
だと気付いたんですが、
単に使う側からすると、かなり違和感あるんじゃないかと思いました。
ここは更新したんだけど、トップページを更新するのを忘れてた。
珍しく、会社の部屋を出たのは最後だった。
解釈が間違っていたとしても、 その解釈で仕事に有効活用できるんだったらそれでいいと考え直す。 どうせ正解なんて無いんだし。
マイクロソフトから11月16日いよいよ日本語版発売というメールが届いた。 なお、私が11月16日に休暇を取るのは、まったくの偶然です。
読み始めました。 なんか字が細かいし、難しい漢字が多いので(←あんたは小学生か)、思うように読み進めません。 きっと『クール・キャンデー』とのギャップの激しさについていってないだけだと思う。
XPでいうところの、今日1日の私の負荷係数は、8.0ぐらいです。
何も邪魔の入らない場合に、その開発が4日で完了するとします。 ですが、実際には、色々割込みがあって、4日で完了することはありません。 そこで、邪魔が入る分を考慮して、2.5倍します。 つまり、実際には、4日×2.5 = 10日で完了ということになります。 この、2.5という数値のことを負荷係数と呼んでます。 でもって、実際に何日かかったか、実際の開発時間がどれくらいだったかを測定します。 次の開発作業の見積もりと負荷係数を決める際に、この測定結果を活用して、その精度をあげていく訳です。
...という解釈であってるかな?
昼の献立は松茸ご飯だったらしいが、出遅れたので売り切れになった後だった。
assert
の挙動を変更した 0.4.5 をリリース。
assert
を使っているテストの一部は動かなくなるかも知れません。
(assert
の第1引数は、FalseClass か TrueClass のインスタンスでなくてはいけません。)
気のせいじゃなかった。 やっぱり最後の1文を読んではいけなかった。 後味は悪いが切れ味は鋭い。
月曜日の水玉模様 (加納朋子)
クール・キャンデー (若竹七海)
死の殻 (ニコラス・ブレイク)
脱・「英語人間」 (遠山顕)
(最後の1冊は違いますが) ハードカバーや新書版には目もくれず、文庫本にばかり手を出しております。
最後の1冊は、普通なら手を出さない類の本なのですが、 著者が遠山顕さんだったので、思わず手を出してしまいました。 これを読んでおくと、今後の「英会話入門(ラジオ)」が より楽しくなるかも知れないと変な期待をしています。
鶴橋にて友人と3人で。 ガラガラかと思いましたが、そうでも無かったです。 でも、普通は行列ができるような店らしいので、そういう意味では空いていたとも言えるかも。
帰りの電車の中で読了。 最後のソフトボールのメンバーは、ちょっと都合が良すぎて、強引過ぎる気がします。 無理に絡める必然性が無いし。 いや。まあ、確かに私はそういうのを期待しておりましたが。
「水曜日の探偵志願」が好み。
解説だけ読了。 なんか解説から読んではいけなかったような気がする。 でもそれは、きっと、気のせいだろうな。 気のせいに違いない。 頼むから気のせいだと言ってくれ。
『野獣死すべし』は、傑作だったはずだけど、例によって、どんな話だったか思い出せない。 もちろん、犯人も思い出せない。
解説があるかなあと思って最後の方のページをめくったら、小説の最後の一文が目に入ってしまった。 これは絶対、目に入ってはいけなかったはずの文だ。 間違いない。 でも、ひょっとすると、これも、気のせいかも知れない。 多分、気のせいなんじゃないかな。 気のせいに違いない。 ...とはどうしても思えない。 無理がありすぎる。 あーあ。やってしまった。
結局、解説は無かった。
テストしづらいプログラムだったので、相談の上 (というか一方的に「私が自分で直すから」と半ば強引に話を進めて) テストしやすいプログラムに修正。
でもってテストコードを書く。 面倒だったので、RubyUnitを使って、Rubyでテストコードを書いた。 テストの対象のプログラムはC++で書かれたプログラムで
system("c_plus_plus_program")
とRubyから実行して、C++プログラムが生成するファイルや修正するファイルがちゃんとできているか assertメソッド群でチェック。 ユニットテストというよりもアクセプタンステストに近い使い方。
なんか、XPしているような気分。いや、まあ、気分だけですが。
何故か、charset=ISO_2022_JP としてましたよ。ダメダメ。
そうなのかあ。と思うことがあって脱力。
溜まっているんだけど、処理しきれん。
月次レポートにPowerPoint。 うーん。どういう使い方(どういうレポート)なんだろう?
そういえば、つい最近、「Excelはワープロ」という話も聞いた。 と書きながら、自分も「Excelはワープロ」的な使い方をしたことがあるのを思い出した。
で、今日は、RWikiがワープロ。
本日は出張でXPセミナーに参加。 友人と待ち合わせてセミナー会場へ。
結局、うささんは、わからなかった。やっぱり引き分けってことで。 ちなみに、私は、真中の列の招待者席のすぐ後ろの一番左端に座っておりました。
入口のところでXP関連書籍が売られてました。
新刊の『eXtreme Programmingテスト技法』もありました。 WebUnitのたかはしさんも著者の一人です。 もちろん、WebUnitが紹介されてますし、RubyUnitも紹介していただいております。 執筆当時とは、標準配布化などRubyUnitの状況が大幅に代わろうとしているので、 ちょっと申し訳ないです。
セミナーの感想:
メタファーってそういうことだったのか。
質疑応答の時間が無かったのが残念。
組み込みのXP事例は、XPをうまく消化吸収しているなあと感じた。 あれは、XPなのかと疑問を感じる人もいるかも知れないけど、 自分の環境に合わせて取り入れている一つの実践例として参考になった。
3時のおやつに、XP推薦のお菓子が配られたり、 XP お菓子ベスト10なる投票とか発表とかあるのかと思ったけど無かった。
例の疑問は一応氷解した。
記憶を頼りに書いているので間違っているかも知れませんが...
タスクにサインアップした人はそのタスクが完了することを見届ける責任者となる。 1つのイテレーションの中で(少人数の場合)チームのほぼ全員がどれかのタスクの責任者となる。 ペアプロをする場合は、2人が担当しているタスクのうち 遅れている方のタスクを優先させる。 (どっちのタスクを優先するかは、毎日全員でやるミーティングで決める。) ペアはタスクの終了とは関係なく変える。 従って自分の担当している以外のタスクの仕事をすることも当然ある。
これは、セミナーで解決したのではなくて、友人に聞いた話です。 念のため断わっておくと、これが正解とは限りません。
ひっかかる人は私ぐらいなのかな。
assert_equal(a, b)
と書くつもりが思わず
assert(a, b)
と書いてしまって、テストになってないことに気付かないという罠に。 ([ruby-list:32205]参照。)
今日もこの罠にひっかかりかけたんですけど。私。 assertは、ほとんど使わない癖に、 なぜassert(a, b)とやってしまうのだろう???
ここで、厄介で恐ろしいのは、assert_equal(a, b) とやるつもりで assert(a, b) と書いてしまうと、 テスト一発合格しちゃうことです。
例えば、
assert_equal(2, Math.sqrt(4))
とやるつもりで
assert(2, Math.sqrt(4))
とやってもテストにパスする訳です。さらに
assert(2, Math.sqrt(5))
だろうが、
assert(2, Math.sqrt(25))
だろうが、このテストは成功なのです。
今気付いたんですけど、上の例をパッと見たときに
一瞬 Math.sqrt(25)
の値と、2を比較していると、私は錯覚してしまうみたいです。
行の先頭のassert
に注意が行かないのです。
それで、このバグには、後からテストのコードを見直してもなかなか気付かないんですね。きっと。
ちなみに、もっと極端に
assert(2, [])
でも、
assert(2, /hoge/)
でも
assert(2, Class)
でもテストは合格です。まあ、さすがにここまで、あからさまだと変だと気付くでしょう。
と、だらだらと書きましたが、 実は、RubyUnitの最新版では、上のassertのテストだと失敗するものが出てくるはずです。 もっとも偶然、結果的にそうなっているだけで、意図した動作では無いのでした。 この偶然の産物のおかげで、rubicomのバグを発見できたのでした。
rubiconのバグの責任の半分は、RubyUnitにもある(と思う)のだが、 良い回避策を思いつかない。 この問題は、前から気付いていた。だって私がひっかかったから。 でも、私ぐらいしかひっかからないと思って、ほったらかしにしていた。 だけど、Daveが、rubiconで同じミスをしていたので、ちょっと真剣に回避策を考えてみた。 結論としては回避不可能な気がするし、使い方を間違える方が悪いと開き直りたいのだが、 その前に、ruby-listに投げかけてみることにした。
他にもひっかかったような仲間はいるだろうか?
いつの間にか 1.7.2 になっている。
さらにAssertのリファクタリングを進めて内部構造をLapidaryに近づけてみた。
リファクタリングしたRubyUnitで試しに、rubiconを動かしてみたら 偶然、rubiconのバグを発見した。Daveにパッチを送付。 ちなみに私も同じバグを埋め込んだことがあります。
責任の半分は、RubyUnitにもあるよなあ。
リファクタリング。 「ただ一度だけルール」って意地でも守らなあかんもんなんか?とちょっと悩む。 XPだったら悩まず、意地でも守れってことになるんかな。
結局、「ただ一度だけルール」を尊重するようにリファクタリング。
Lapidaryのコードをつらつらと眺めています。 RubyUnitと比較してちょっと思うところがあるので、 整理して公開していこうかと思います。 確かに内部構造は違うみたいだ。
公開しようかと思った(実際に細かく途中まで書いた)んですが、やっぱりやめます。 なんか気分がのらない。
結論だけ書きます。 (今回比較したのは、assert_xxx(assertXXX) の実装です。)
結論:
RubyUnitの assert_xxx はリファクタリングが必要。
Lapidaryの assertXXX はブロックを多用しており、巧妙。 理解するのにちょっと時間がかかってしましました。 汎用性はありそうなのでassertXXXを追加するときにはやりやすいかも。 Assertが失敗したときに raise を使わないで、throw を使っている。
walkitは、RubyUnitがインストールされていたり、Lapidaryがインストールされていたりすると そちらのassert_xxx(assertXXX)を使用する。 インストールされていない場合は、自前のものを使う。 自前の実装は、シンプル。この実装が一番気に入った。
assert_xxx(assertXXX)の実装だけ比べてみるだけでもなかなか面白い。
第2回があるかどうかは、わかりません。 さて、リファクタリングに取りかかろう。
なんか最近の奴だと、emacs-w3mを起動したときに一瞬何か文字が表示されているように見えるのだが、 何が表示されているのかわからなくて、もどかしい。
まあ、お互い覚えてない ということで引きわけでしょう。 私もそのとき名乗らなかったと思うし。
まつもとさんと私がいるところに、つかつかと来られて
「私がMswin(Windows)版のメインメンテナーやります。」
と高らかに宣言された人がいました。後から知ったのですが、それがうささんだったのでした。 今思えば、私は、幸運にもMswin版メインメンテナー誕生の歴史的瞬間に居合わせたのでした。
だから、私は、うささんに会っているはずだと言えます。 でも、それ以上の記憶が無いのでした。