全然進まない。どないしよう。
ということで現実逃避して、
わたなべさんのパッチをちょっと変えて取り込む。
これで、DATA
も定義されるはず。
この間からRubyWinのIRBの起動が遅くなったような気がしていた。
試しにDOSプロンプトからruby irb
で起動したら同じくらい遅かった。
今は気にしないことにしよう
(本当はせっぱつまっているのでRubyWinの相手をしている場合ではない)。
という訳で正誤表を用意しました。
バグが見つかったので rubywin-0.0.2.5.zip。
IRB以外でもスクリプト実行中にいきなりRubyWinを終了するとSEGVします。 例えば、gets 使って入力待ちの状態にしといて終了するとか。 公開当初から気づいてたんだけど、ずーっと解決できないままなんです。
届きました。早速確認。やっぱり間違ったままだ。
しかし、本の出版までとうとうすべてメールだけで済ませちゃいましたねえ。 (まだ出版社の誰にも会ったことがありません。)
IRBが動かない問題は0.0.2.3で直したつもりだったんだけど、勘違いしてたか。
putc も用意しないと駄目なのね。
という訳で統一した名前になった最初のバージョン rubywin-0.0.2.4.zip です。
それからわたなべさん、ありがとうございます。bmingwでコンパイルできました。
IRBにしろ、putcにしろどこまでオリジナルのRubyに近づけるか、限界に挑戦って感じだ。 (でも限界は、限界として存在する。)
ole_method_helpで取得する引数の情報をそれっぽくしてみる。
うーむ。物の見事にばらばらですね。 次から統一します。 "src"の文字は外すことに決めました。 これがあるから余計ややこしくなる。
次は rubywin-0.0.2.4.zip にします。
Excel使ったテストスクリプトを書いた。 やっぱりテスト無いよりずっとまし。
原稿に誤植発見。 もう差し替えられないし、そのまま書店に並ぶよなあ。 人の名前を間違えるなんて最低だ。
極道編2章の Ward Cunninghanm は Ward Cunningham の間違い。
Scintillaが理由と書いたけど
Scintillaは、'gcc -mno-cygwin'
でコンパイルできそうだ。
できないのはRubyWinの方みたいだ。
例えば
class TestFoo < RUNIT::TestCase def test_foo1 @foo = Foo.new assert(@foo.bar) end def test_foo2 assert(@foo.bar) end end RUNIT::CUI::TestRunner.run(TestFoo.suite)
というテストがあったとしましょう。
このときtest_foo2
はErrorになります。それは、@foo
が未定義だからです。
RubyUnitでは、"test"で始まるメソッド1つにつき1つのテストオブジェクトができます。
上の例だと、
test_foo1
を実行するTestFooオブジェクト
test_foo2
を実行するTestFooオブジェクト
の2つができます。
実際のテストは、こんな感じで動きます。
testfoo1 = TestFoo.new('test_foo1') testfoo2 = TestFoo.new('test_foo2') testfoo1.test_foo1 # test_foo1のテスト testfoo2.test_foo2 # test_foo2のテスト
従って、test_foo1
の@foo
と、test_foo2
の@foo
とは別ものになります。
つまり、test_foo1
で、@foo
の状態をどんな風に変更しようと、
test_foo2
の@foo
には何の影響も与えないのです。
ということで、京都のConferenceで
「test_foo1
を実行した後、(test_foo1
の実行中に@foo
の状態が変化しているかも知れないので)test_foo2
を実行する前に@foo
を初期の状態に戻す必要があるか?」
という質問を受けて「その通りです。」と私は答えてしまったのですが、 あれは間違いでした(確かに未定義になるので何らかの形で初期化する必要はあるのですが)。
あのとき質問して下さった方、また、聴きに来て下さった皆様、どうもすいませんでした。
今頃、気づくって遅すぎるよなあ。
Cygwin 1.1.7だと-mno-cygwinオプションをつけてコンパイルすれば、 Mingw版Rubyができるらしい。 そういえば、わたなべさんの日記にもそんなことが書いてあったような...。
という訳で早速cvs updateで更新したRuby 1.6.2(2001-01-10)で実験。
autoconf env CFLAGS=-O2 CC='gcc -mno-cygwin' ./configure --enable-shared i386-mingw32 make
おお。見事にできましたよ。 ちなみに私のところでは、わたなべさんのbmingwパッケージも入れてあるので、
env CFLAGS=-O2 CC='gcc -bmingw' ./configure --enable-shared i386-mingw32
とやってもできるし、Mingwの方にPATHを通してMingwのgccが動くようにすれば
env CFLAGS=-O2 ./configure --enable-shared i386-mingw32
でもできる。
"99/03/01" => 1999/03/01
"00/03/01" => 2000/03/01
"01/03/01" => 1989/03/01
これって有名な仕様なんでしょうね。 "01"年は平成1年だそうで。
Win32OLE の RubyUnitによるテストってどう書けばいいのか? OS限定じゃなくて、インストールされているソフト限定のテストになっちゃうからなあ。
テスト用OLEサーバープログラムを作ればいいのかも。 (それで果してテストになるのかどうかが、かなり微妙な気もしますが。)
ちなみに以前調べたとき、Perlは、Excelがインストールされてることを 前提としたテストになってました。
を求めるには、どうすればいいんでしょう?
わからないので、
AddRef
してすぐに
Release
するという姑息な手段で求めてます。
NTでもちゃんと終了しちゃうよ(涙)。 手元にある最新版だと大丈夫なのか??? 手元のやつを整理して、さっさと公開しよう。
必要にせまられてちょっとだけRubyプログラミング。 今回は使い捨てのスクリプトなので、RubyUnitは使わず。
というつもりで作っておいて結局、何度も使うという場合もありますが、 今回は絶対そういう状況に陥りたくないです。
サーバー側のプログラム送ってもらったのでテスト。 やっぱり95だとちゃんと終了しちゃうよ(涙)。
実は、OLEサーバーのプログラムをコンパイルしたのは生れて初めてだ。
読み終えました。 なんかテストとプログラミングは並行してやるとか、 プログラムはわかりやすく書くべきとか 結構XPと共通する部分があるように思いました。
バージョンアップ。1.1.7にする。gccも2.95.2-6に。 しかし、Cygwinは本当にb20.1の頃と比べて格段に安定動作するようになりました。 早速Rubyをコンパイル。コンパイルは問題ないみたいだ。(make testまで確認)
わたなべさんの bmingw package もついでにインストールしてみる。
cygwinのsetup.exeを使って、cygwinをインストールする。
ただし、わたなべさんによると、tar-1.13.18-2.tar.gzは、シンボリックリンクが駄目らしいので、tarは古いバージョンをインストールする。
cygwinを起動して、
cd /usr tar zxvf bmingw-20010106.tar.gz
とする。
Rubyをコンパイルしてみたところこっちも問題無し。(make testまで確認)
gcc -bmingw に乗り換えてしまいたいのですが、 残念ながらScintillaがコンパイルできないため、Mingwも残してます。 まあヘッダーファイルが足りないだけじゃないかと思いますです。 根性無しなんで自分でヘッダーファイルを何とかしようという気はさらさらありません。 MingwとCygwinと見比べればいいと思うのだけどそれすらやる気が無いらしい。
直接メールがきたやつは、とりあえずサーバープログラムを送ってくれるそうだ。 これで私のところでもテストできるかな。
1.7はVine Linuxでコンパイルだけしてます。 で、M17N版?はコンパイルもしてません。 しばらくは、1.6系を中心に使います。
別件でまたWin32OLEが動かないというのが...。
私がまったくOLE(COM)を理解してないし、 英語だと表現力がなくて、 ろくに返事を書けないのが情無いところです。
MSXML2って私の環境だと無いっていわれる。 試しにMSXMLでやってみたらエラーは出ないけど、 ちゃんと動いてないみたいだ。 何かバージョンアップしないと駄目?
Win32OLEってこういう点で厄介だよなあ。 同じバージョンのソフト(OLEサーバー)が無いと、うちじゃテストできんし手も足も出ない。
直接私宛のメール(こっちも英語)でも別件で動かないというのが1通。 なんかまだ、Releaseし忘れがあるみたいだ(泣)。
antiwordなるソフトを 知ったのですが、日本語には対応してないのかな。 試しにコンパイルしたけど、今のところ家では読みたいMS-Wordの文書が無いことに気づいた(笑)。
そろそろcygwinバージョンアップしようかな。 1.1.4のままだし。
なんか知らない間にruby-talkを複数のMLに分割しようかという話が出てきているようです。
半端な量じゃないですからね。 1週間も読まないと、ほんと、エラいことになります。
全くついていけないので、ruby-talkをやめようかなと考えたりするのですが、 たまに自分に関係する話題が出てくるんで、やっぱりこのままにしておこうかなとも思う今日この頃です。
でも、私がメールを読む前に、 Win32OLEが動かないという問題は解決してるし、 RubyUnitのsetupとかteardownの使い方も説明されてるし...。
RubyWinのタブ幅は指定できるようにした方がいいんだろうなあ。
まあ、私の場合、日本語のMLでもついていけないという点では同じような状況ですが。
それだけRubyも広まってきているという点では、望ましい状況かも知れません。 その昔、PerlのML(具体的に何だったか忘れました。)や、 Windowsプログラミング関係のMLに参加したことがあったのですが、 あまりの量の多さにすぐにやめました(一週間もたなかった)。 そういったMLと同じような状況になりつつあるということは、それはそれでいいことではないかと。
同じように、書籍や雑誌の記事もたくさん出て、追っかけきれなくなる状況もいいんじゃないかと思ってます。
あっ。でも、自分に関係のある話題ですら追っかけきれないというのはかなりまずいか。
年末にまとめ送りにしようと
# matome 31
としたら、なんかエラーのメールが届いた。 まあいいかと思ってそのままほっといたら配信されなくなっていたらしい。 でもって、一体どういう状態になっているのかと思い
# status
と送ったら、返事が届かないで、普通に配信されるようになったみたいだ。
...
まあ、いいか。
使い始めました。 馴れると結構使いやすそうな感じなんですが、使い続けないとすぐ使い方を忘れそうです。 あと、ちょっと見た目が寂しいように思います(笑)。
cvsのフロントエンドになっていて、 裏でどんなコマンドを実行しているのか画面に表示されるのがいいです。 これをちゃんと調べれば、cvsのコマンドとかオプションとかの使い方の参考になりそうです。
そういう訳で、今のところ(自分が使う分には)用が足りているので、 CVSの本を買ってCVSの使い方の勉強をするのは、さらに延期しようと思います(笑)。
Dave と Andy の Programming Ruby は、pickaxe book と呼ばれているらしい。 つるはし本。なるほど。
今日から仕事。
Acrobatreaderを起動したり、xpdfを起動したりして過しました。
結局、治りません。21世紀まで持ち越してしまいました。 症状は大したことありませんけどね。
達人プログラマー
プログラミング作法
Programming Ruby
XPエクストリーム・プログラミング入門
MySQL徹底入門
Rubyプログラミング入門
リファクタリング
今世紀中に読むようにしましょう。