2002年4月の雑感

更新日:2002-04-27
[トップページへ] [3月] [5月] [過去の雑感へ]

4月27日()

「学ぶ」は「まねる」が語源

... だったかな?

それはさておき、「真似る」じゃなくて、技術的、技巧的なところの 学習ということなんですね。

学習可能な形に落し込む工程で、何かが抜け落ちてしまうんですかねえ。 みんな、学習して宮部さんに近いレベルの書き方はできても、抜け落ちてしまう「何か」が あって、「宮部さんのように」は書けないのかも知れません。 その「何か」が宮部さんの宮部さんたるところで、それが宮部さんの個性ということになるんでしょうか。

もっとも、私は、誰かの創作技術を学習しようと思ったことも、分析しようと思ったこともありません。 上で書いたことも単なる思いつきです。何の根拠もありません。的外れかも知れません。 (そんな難しいことを考えながら、ミステリを読んだことはありません。)

それにしても、そんなに「意外なところから」のリンクでしたか?


4月26日(金)

XP風味な開発

終わりました。

14のプラクティスのうちいくつを実践できたかというと...

1人でもできるようなところは、ある程度、実践できたというところでしょうか。 また機会があれば、今回の経験を活かして実践してみたいと思います。

タスクの見積り精度などを上げていきたいですしね。 (公開はできませんが、今回の見積りと実績は、次回に活かすべく記録として残しています。)


4月25日(木)

Ruby

私の環境で make test が失敗してたのも 同じ理由だろうな。

Cygwinの環境をヴァージョンアップしたときになんかCygwinの環境そのものが変になったことがありました。 同じタイミングでmake testがコケるようになったので、うちの環境だけが悪いのだと思って 報告しそびれていました。

宮部みゆき

多くの人に愛される」ということは それだけ、アクが強くないというか癖が無いということなんじゃないでしょうか。 癖が無いが故に、いざ真似ようとすると、特徴がつかめず、 みんな真似できないんじゃないかと想像してしまうのです。


4月24日(水)

XP風味な開発

どうか私にテストプログラムを修正する勇気をください。 それが駄目なら、私にその勇気を与えてくれるペアの相手をください。


4月23日(火)

『Rubyアプリケーションプログラミング』

何故か1冊届きました。ありがとうございます。 それにしても、何の協力もした覚えが無いので不思議です。 しかも、何の予告もなしにいきなり届いたのでちょっとびっくりしてます。

リファレンスを眺めていたら私の名前が...。 なんか、ものすごく誉めてもらってますよ。

XP風味な開発

開発作業として残っているタスクは、あと1つとなりました。

今、『XPエクストリーム・プログラミングアドベンチャー』を読んでいます。 その中で、最初のイテレーションでは、何もしないけど、ともかく動くシステムを作るんだ というようなことが書かれております。

これは、私が忘れていた重要な作業を最初にやるということなのかなあと思いました。


4月22日(月)

何が何やらさっぱり

某所の状況が、何が何やらさっぱりわからなくなってしまっています。 私が話をややこしくしちゃったような気がしないでもないんですけど。

まず、最初に真意を問うべきであったと反省しています。 もはや手遅れのような気もしますが、真意を問うてみることにしました。

XP風味な開発

いろいろ割り込みがあって、あまり進んでいません。

今日は飴玉を導入してみました。

テストが完璧に通って、1つのメソッドの実装が完了したら、 飴玉をなめようという儀式を取り入れてみた訳です。 (たまたま手近にあった飴玉が目についたものですから。)

ということがわかったので、飴玉の導入はやめにします。

もっとも、何をやっても、1人じゃ盛り上がらないのかも知れませんが。


4月21日()

XP 検証編

は4月25日発売らしい。

書店で見たことがなかったのは、

のどちらかと思ってたんですが、そうじゃなかったんですね。

Ruby CD Player は無罪

昨日の突然反応が鈍くなる問題は、やっぱりRuby/Gtk側の問題のようです。 rbcd-tty.rb だと最後まで再生できたので。


4月20日()

Ruby で 音楽CD

何を今更という感じもしますが、何となく、音楽CDの再生も Rubyでやってみようということで Ruby CD Player をインストールしてみました。 (動作確認には、ruby 1.7.2 (2002-04-19) [i686-linux] を使っています。)

Ruby CD Player は、ユーザーインターフェースに Ruby/Gtk を利用しています。 そこで、まずは、gnome-ruby をインストールします。

ruby-gnome-all-0.27.tar.gz をgnome-rubyのサイトからダウンロードします。 (Ruby/Gtkなど、個別にダウンロードできるようになっていますが、 面倒なので、ruby-gnome-all-0.27.tar.gzをダウンロードしました。)

tar zxvf ruby-gnome-all-0.27.tar.gz
cd ruby-gnome-all-0.27
ruby extconf.rb
make
make install

次は、Ruby CD Playerのインストールです。

rbcd-0.2.0.tar.gz をダウンロードします。

tar zxvf rbcd-0.2.0.tar.gz
cd rbcd-0.2.0/cdrom
ruby extconf.rb
make
make install

あとは、rbcd.rb を自分で $LOAD_PATH のうちの1つにコピーしておきます。

cp rbcd.rb /usr/local/lib/ruby/site_ruby

でもって、

rbcd-gtk.rb

を起動すれば再生できました。

...ですが、何曲か再生している途中で突然反応が鈍くなりました。 キーボードもマウスの反応も極端に鈍くてどうしようもなくて、強制終了してしまいました。 なんとなくですが、Ruby/Gtkの方の問題のような気がしています。


4月18日(木)

XP風味な開発

受入テストを書くのがちょっと難しいです。

えーと、今回のプログラムは起動された日付によって、挙動が変わります。

あるメソッドのユニット・テストを書く場合は、簡単です。 そのメソッドに外から引数として日付を受け取るようにしておけば、 2002年4月14日のテストも2003年4月14日のテストも自由自在です。

assert_equal(1, obj.method("20020414"))
assert_equal(2, obj.method("20030414"))

てな感じで、いろんな日付のテストができます。

ですが、受け入れテストの場合、今日起動したプログラムのアウトプットと 明日起動したプログラムのアウトプットは違う訳です。 この状況の中で受け入れテストを自動化するのは、なかなか難しいです。

...と思ったのですが、今回の場合は、引数で日付を指定できるようにプログラムを 作っておけばいいだけの話でした。

引数で日付が指定されたときは、その日付が起動日であるかのように動作する。
引数を省略した場合は、システム日付を起動日とする。

とするか

引数として必ず起動日付を指定する。
実際に顧客が使うときには、次のようなシェルスクリプトを起動してもらう。

  program `date +%Y%m%d`

とすればいいでしょう。


4月17日(水)

Win32OLE (DCOM)

DCOM の話題が、[ruby-talk:38330]で出ていたので、最新版を試してみてください とメールを出しておきました。 DCOMのテストができる環境が無いもので、バグ出ししてもらえると助かるのでした。

XP風味な開発

はっ!! いけません。重要な作業を忘れていました。 昨日のタスクは、複数のメソッドの開発だったのですが、それらを1つの動くプログラムとして 統合するという作業を完全に忘れておりました。

今日は、動くプログラムを作り、ついでに受け入れテストも書きました。 (顧客不在のプロジェクトなので受け入れテストも自前です。) これで、ごく一部の機能だけしかありませんが、それでも、完結して動くプログラムができました。 「継続的インテグレーション」のための土台ができた感じです。

他のタスクは、片づいたものから、このプログラムに組み込んでいこうという算段です。 (元々今回は、ストーリーはたった1つで、そのストーリーを実現するプログラムも1本なのでした。)

今日の作業(「継続的インテグレーションの土台となる完結して動くプログラムを作る。」)は、 別のタスクとして書いておくべきだったとちょっと反省。

当り前のことですが、ストーリーをタスクに分解したら、 できたタスクを結合して1つのストーリーにする作業もどこかで必要です。 多分それは、継続的インテグレーションにより徐々に1つのストーリーにしていくことになるのでしょう。 だから、本来、タスクとして独立させるほどのものではないのかも知れません。 ですが、その最初のとっかかりの一歩には少し時間がかかるような気がします。 最初の1歩だけは、1つのタスクにしておいても良かったんじゃないかなと思うわけです。

ドラマ

ドラマのタイトルからひょっとしたら、「トリック」の山田奈緒子に会えるのではないかと思い、 ちょっとだけ期待して見てしまいました。 ストーリーは、ほとんど想像できてしまうし、予想通りの展開です。 でも、そんなことはどうでもいいのです。 セリフや間合いなど、どことなく山田奈緒子が垣間見える気がします。 その一瞬を求めて見てしまうかも知れない自分って一体?


4月16日(火)

XP風味な開発

昨日、今日で2つ目のタスクが終わりました。 このタスクは8ポイントと見積っていました。 2日で8ポイントなので、1日4ポイントということになります。 一週間に換算すると20ポイントになるので、当初の見積り通りなのですが...。

実は、単純に、1ポイントの作業は、私1人で1時間でできる(だろうと思われる)作業 というつもりで見積もっています。 ところが、今回の8ポイントのタスクを完了するまでに、私が使った時間は8時間ではありませんでした。 実際には12時間くらいかかっています。

うーむ。これはどう考えるべきなのか...。

ちなみに、昨日はちょっとだけ残業しましたが、今日は残業してません。 (日曜も仕事だったせいか、週の始めだというのに疲れ気味なので、今日はとっとと帰ってきました。)


4月15日(月)

突然のメール

突然、全く予想していなかった方からメールを頂きまして、ものすごくいま焦っております。


4月14日()

『メインディッシュ』北森鴻 著

読了。満足のでき。評判通り。『共犯マジック』も読まなくちゃ。 それにしても、昼飯前に読んだんだけど、腹が減ってしょうがなかったです。


4月13日()

MinGW

Cygwin で

gcc -mno-cygwin

とするよりは、やっぱりMinGWを使うのが王道なんでしょうか?

そこで、MinGWをインストールしてみました。 MSYS なんてものがいつの間にやらできているんですね。 これもインストールしてみました。

本当は先にMSYSをインストールすべきだったみたいです。 最初からやり直しました。

  1. MSYS-1.0.6-i686.exe で MSYSをインストール

  2. MinGW, gdb, gcc-2.95.3-20011106.tar.gz, binutils-2.11.92-20011113.tar.gz をインストール

    msys を起動して

    cd /
    mkdir mingw
    cd mingw
    tar zxvf MinGW-1.1.tar.gz
    cd ..
    tar zxvf gdb-5.1.1-1-mingw.tar.gz
    cd mingw
    tar zxvf gcc-2.95.3-20011106.tar.gz
    tar zxvf binutils-2.11.92-20011113.tar.gz
    

CygwinのmakeでないとRubyをコンパイルできなかったんで、MinGWのmake.exe も MSYSの make も削除。

w32api-1.3.tar.gz と mingw-runtime-2.0-20020412.tar.gz はインストールしませんでした。 インストールしたら、Ruby 1.7 がコンパイルできなくなったためです。1.6は試してません。

今ふと思ったのですが、w32api-1.3.tar.gz の方は、 win32/win32.c で

#include <winsock2.h>

しておけばコンパイルできるような気がしてきました。

『花の下にて春死なむ』 北森鴻 著

読了。表題作が好み。 「魚の交わり」の葉書を出せなかった理由がどうも納得できないんですよね。 全体に満足。


4月12日(金)

本日買った本

本日の立ち読み

買わなかった本

探したけど見つからなかった本


4月11日(木)

XP 風味な開発

今日も今日とて、いろいろありまして...。

やはり残業してタスクが1つ終了しました。 タスクの見積りは4ポイントだったのですが、実際には3ポイントでした。

明日は休暇なので、今週のXPは結局、

というところです。さて、こういう場合、プロジェクト速度はいくつ?


4月10日(水)

XP 風味な開発

本日もいろいろありまして、作業はほとんどできませんでした。

残業して2時間ほど確保してXP風味にテストファーストでやってみました。 最初のとっかかりのテストを書くのは結構面倒ですが、 そこを通過できれば、リズムに乗れそうな感触です。 テストがあるおかげで勇気を持ってリファクタリングもできました。

週40時間は早くも破られてしまいました(笑)。

ところで残業して時間を確保した場合、プロジェクト速度や負荷係数は どうするのが適当なんでしょうか? いくらなんでも、残業ベースでプロジェクト速度を計算しちゃ駄目ですよねえ。


4月9日(火)

XP 風味な開発

今日はいろいろありまして、全く作業できませんでした。 進捗0です。


4月8日(月)

XP 風味な開発

今回、超小規模開発をやることになりました。 で、XPをちょっとだけ(でもできる限り)取り入れてみようと思います。 1人でやる開発なので、ペアプロはできないし、オンサイト顧客もありません。 ストーリーはたった1つしかありません(爆笑)。

今日は手始めに、このストーリーをタスクに分解してそれぞれのタスクの見積りをしてみました。 もちろん、実装だけじゃなくて、テストの時間も考えました。 タスクの合計は38ポイントになりました。 現時点では一週間で20ポイントできる計算をしています。 なので約2週間の作業です。

今日はここまで。


4月7日()

Win32OLE

これからぼちぼちドキュメントを整理しようと思います。 [ruby-talk:36826]にあるように、 英語のドキュメントはRDocスタイルで win32ole.c に入れてしまうのがいいかと考えています。


4月6日()

リスニング入門

2日ずつ同じ内容を放送しているように思います。 勘違いじゃないですよね。

Win32OLE

えーと、ヴァージョンが1個とんだのは、1日で2段階の更新をしたからです。 0.4.6は、数時間の命でしたがちゃんと存在しております。

0.4.6にした後でDCOM対応に取りかかったのです。 多分、DCOMに対応するには数日はかかるだろうと予測していたのですが、 これが大はずれ。 意外に簡単に動くものができたみたいです。 とはいっても

excel = WIN32OLE.new('Excel.Application', 'localhost')

なんていうのが動くことを確認しただけですが。


4月5日(金)

『XPエクストリーム・プログラミング実践記』 読了

こう、なんか洗練されて整理された内容ではなくて、 現場の泥臭い部分もまるごと含めたリポートという感じがして面白かったです。

このXPのシリーズって抽象的な話からどんどん具体的な話になってきているように思います。


4月4日(木)

その名は fold

ファイルの1行を指定した文字数で折り返すコマンドが思い出せなくて悩みました。 cat のオプションには無いし、cut も違うし、paste も違います。 man でいろいろ探し回ってようやく見つけました。 一瞬 Ruby で作ってしまおうかと考えましたが、 あるものは、それを使うべきでしょう。

なんですぐに思い出せなかったのか、ちょっとショックです。


4月3日(水)

dl (Ruby 1.7)

Ruby 1.7 系に dl 拡張ライブラリが添付されるようになったみたいです。 Win32APIを廃止して dl にしようという意見もあったので、前から注目はしてるんですが、 試す時間が取れません。

引数つきプロパティ(Ruby, Win32OLE)

OLEの世界には、引数つきプロパティなるものがありまして。

obj.PropertyWithArg(1, 2) = 6

などとVB(A)で書いたりする訳です。

で、「Win32OLEでどう書けばいいんですか?」と聞かれることがあります。

それに対して、私は、

obj.setproperty('PropertyWithArg', 1, 2, 6)

と書いてくださいと答えています。

obj.PropertyWithArg(1,2) = 6

なんてのは、そもそも、Rubyが受けつけてくれないのです。

最近になって、

obj.PropertyWithArg[1,2] = 6

ならできるよ。と ruby-win32 で教えていただきました。

こんな感じで、できそうです。

class OLEProperty
  def initialize(obj, dispid, gettypes, settypes)
    @obj = obj
    @dispid = dispid
    @gettypes = gettypes
    @settypes = settypes
  end
  def [](*args)
    @obj._getproperty(@dispid, args, @gettypes)
  end
  def []=(*args)
    @obj._setproperty(@dispid, args, @settypes)
  end
end

module ModPropWithArg
  VT_I4 = 3
  VT_R4 = 4
  def PropertyWithArg
    OLEProperty.new(self, 0, [VT_I4], [VT_I4, VT_R4])
  end
end

obj = WIN32OLE.new(...)

obj.extend(ModPropWithArg)

p obj.PropertyWithArg[0]
p obj.PropertyWithArg[1]
obj.PropertyWithArg[1] = 2
p obj.PropertyWithArg[1]

もちろん、あらかじめ、プロパティのDispIDと引数の型と数を調べておく必要があります。 (これは、Win32OLEで調べることができます。)

ということで、olegen.rbでもこの方法を取り入れてみようかと思うのですが、 (OLEProperty.newのあたり)実行時のコストが高そうな予感がします。


4月2日(火)

ROBODEX

桜木町でやってたのか...。 私には、縁が無いものと思い油断していました。 せっかく、川崎に出張してたのだから、 話のネタに30日に見に行けば良かったです。 今回の出張は、なんかいろいろ逃がしてしまったような気がしてなりません。

XPエクストリーム・プログラミング実践記

まだ半分も読んでいないのですが、

など、参考になりそうなことが書かれてます。 実践するのはちょっと難しいかも知れませんが。

今日は手抜きでほとんどテストを書かなかったから、 余計に難しいと感じてしまったのかも知れません。

コードはRubyなのに。RubyUnitの作者なのに。極道編の著者なのに。

テスト・ファーストは無理でも、テスト・パラレルぐらいにはしたいとは思っております。 「テスト・パラレル」ってのは、ちょっと実装してはテストコードを書くというものです。 あわよくばテストを先行させてみよう。無理なら、ちょっと実装してからでも書きましょう。 書かないよりは絶対まし。というアプローチです。 テスト並行プログラミングと言ったところです。 「テスト・パラレル」は、私の造語です。

テストを書かないのは、安定して動くテストを書く方が コードを書くより難しいし、時間がかかるからではないかと思う今日この頃です。 今日は、それでテストを書かなかったんです。

でも、本当は

見積りの段階からテストのことを考えないといけない

ということが、この本に書かれている訳です。


4月1日(月)

リスニング入門

オープニングを聴き逃しました。 15分間ずーっと英語を聴かされ続けるのかと思ってちょっと焦ってしまいました。 まだ、英会話入門のような軽快さが感じられません。

たのしいRuby

Rubyの入門書とかの話をした相手に、 ぴったりの本みたいなので、薦めておいた。


[トップページへ] [3月] [5月] [過去の雑感へ]