2002年8月の雑感

更新日:2002-09-01
[トップページへ] [7月] [9月] [過去の雑感へ]

8月31日()

 OO 2002

月、火と東京出張のあと、そのまま遅い夏休みを取って、OO 2002に参加しました。

印象に残ったことを箇条書きにすると

 今週のさくら先生

外しました。吸血鬼ドラキュラの扮装をして、「VAMPIRE」って...。

来週は、さくら先生がコップ一杯の水を飲んで「WATER」と素直に予想します。

 『月の裏側』(恩田陸)

読了。ほんわかとした雰囲気があるのですが、なんか怖い話です。 でも、なぜ『月の裏側』なんでしょうか?


8月25日()

 VIM

version 6.1.163 + im_customにしてみました。

set imoptions=skk 

でSKKで漢字入力できるようになります。 その代わり、どうもCtrl + G が効かなくなるようです。 im_customのreadme.txtの「ざんかだい」の「ESCの処理」というのがこのことでしょうか?

まあ、

set ruler
set title
set number

などを使えば、Ctrl + Gが効かなくても、どうということはありません。

ですが、結局、

set imoptions=none

にしました。

それよりも、JVim3.0だとCtrl + Gで表示されていた文字コードが出ないのがちょっと不便かも知れません。 もちろん、im_customにその機能を要求するつもりは、ありません。 VIM本体で対応してほしいところです。(set fileencodingで表示されますが、ちょっと面倒です。)


8月24日()

 今週のさくら先生

見事に予想は外れました。

Uはウクレレを手に持ってアロハシャツを着たさくら先生が「UKULELE」。 そう言えば、さくら先生は、ハワイ出身の日系人という設定だったように思います。

来週はVです。実は、既に VIOLIN と予想していました。 ですが、2週連続で楽器が続かないと思うので、他のにします。 さくら先生が野菜を並べて「VEGETABLE」。...というのも考えたのですが、 悲願の初優勝を果たした明徳義塾を祝して、さくら先生がVサインを出して、 にっこり笑って「VICTORY」にします。

 ruby-talk

昨日のmatome分の分割送信の1通目のメールだけ、かなり遅れて配送されていたようです。 2通目と3通目は、昨日受信していたのですが、結局、 1通目のメールをPOPサーバーから取ってきたのは今日です。

 Rubyの次の言語

PragProgお勧めのRubyの次の言語はJapaneseじゃなかったのか。

 VIM 6.1

コンパイルしていたときに

fileio.c:1191: 警告: 互換性のないポインタ型からの引数 2 個の `iconv' を渡しますです

「ますです」って...。 へた字フォントを使っていたので余計に脱力感に襲われました。


8月22日(木)

 ruby-talk

なんか matomeにしているruby-talkの本日受信分のメールが消えてしまったような気がするのですが、気のせいでしょうか。 取り直せば済む話なんですけどね。

取り直すことができない他のメールも消えてしまっているかも知れませんが、良くわかりません。


8月21日(水)

 メモリマネージメントのチュートリアル

日本ソフトウェア科学会大会の併設チュートリアルで「メモリーマネージメント」というのがあります。 RubyのGCに興味ある人は、要チェックです。

それにしても、まつもとさん、ハードスケジュールだなあ。


8月20日(火)

 dllwrap (Cygwin)

なるほど。 -mno-cygwinオプションが必要だったのですね。 無事DLLができました。

 Kent Beck and Arister Cockburn in Osaka

実現してほしいと書いた9月13日の企画は 実現されたようです。(参加申し込みのページ)

 アスペクト指向のチュートリアル

来週開催されるオブジェクト指向2002併設の27日の アスペクト指向のチュートリアルは、誰でも無料で参加できる模様です。 Ruby ユーザーの人はAspectRで予習しておくといいかも知れません。

なお、オブジェクト指向2002は有料です。念のため。


8月19日(月)

 dllwrap --target (Cygwin)

既に、--target オプションは 試していたのですが、駄目だったのでした。 簡単なのだと、こんな感じです。

BASH:~/work>cat dlltest.c
#include <ctype.h>
void foo () {
    iscntrl('a');
}

BASH:~/work>gcc -mno-cygwin -c dlltest.c

BASH:~/work>dllwrap --target i386-mingw32 dlltest.o -o dlltest.dll
dllwrap: no export definition file provided.
Creating one, but that may not be what you want
/usr/lib/gcc-lib/i686-pc-cygwin/3.1.1/../../../../i686-pc-cygwin/bin/ld: 
warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 6ae01000
/usr/lib/gcc-lib/i686-pc-cygwin/3.1.1/../../../../i686-pc-cygwin/bin/ld: 
warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 6ae01000
/usr/lib/gcc-lib/i686-pc-cygwin/3.1.1/../../../../i686-pc-cygwin/bin/ld: 
warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 6ae01000

BASH:~/work>cygcheck dlltest.dll
Found: .\dlltest.dll
.\dlltest.dll
  C:\cygwin\bin\cygwin1.dll
    C:\WINNT\System32\KERNEL32.dll
      C:\WINNT\System32\ntdll.dll

dllwrap の --target オプションは

BASH:~/work>dllwrap --help | grep target
--target <machine>     i386-cygwin32 or i386-mingw32

なので、多分、i386-mingw32 で良いのだと思います。 ちなみに、i386-cygwin32はOKでした。

例によって、なんかインストールに失敗しているのかも知れません。


8月18日()

 Scintilla と gcc -mno-cygwin

Cygwin gcc 3.1 の gcc -mno-cygwin でDLLができなくて悩んでいました。

undefined reference to `__isctype'
undefined reference to `__imp___pctype'

あれこれ試しているうちに、 win32/makefile で dllwrap を使ってDLLを作ろうとすると駄目みたいだということがわかりました。 (そう言えば、前に、わたなべさんがそんなことを書いてらっしゃったような気がします。) そこで、Rubyの拡張ライブラリのMakefileのようにdllwrapの代わりに gcc -mno-cygwin -sharedを使ってみると、無事 DLL ができました。 (Scintilla 1.4.5 の gcc -mno-cygwin用のパッチです。)

これで、MinGWを使う理由が無くなりました。

 Cygwin環境整備

遅ればせながら、 5月に買ったSoftware Design の付録CD-ROMからPerlなどをインストール。 これで、autoconfも動くようになりました。


8月17日()

 今週の英単語

やっと、TEACHER で当たりました。

NHKの連続ドラマ「さくら」という番組があります。 このドラマの最後に、必ず主人公の女性が登場して英単語を1つ言います。 第1週が A で始まる英単語、第2週が B で始まる英単語、第3週が C で始まる英単語、 という風に毎週変わります。

ドラマそのものは興味が無いのでほとんど見てません。 英単語のことを知ってから、毎週予想だけするようになりました。 これまで一度も予想が的中したことは無かったのですが、やっと的中しました。 ずっと外れ続けていたので、これは Q で勝負をかけるしか無いと思っていたのですが Qも外してしまいました。 (P のときにペンギンの着ぐるみを着た主人公が出てきて、PENGUIN だったので、 Q は女王様の格好で登場して QUEEN だと予想していました。)

これまでの傾向からわかることは次の通りです。

今回は、主人公の女性(この女性の名前が「さくら」です。)が 中学校の英語の先生であるという予備知識があったので、 素直にTEACHERと予想しました。

来週は、UNIFORM というのも考えたのですが、さくら先生が傘をさして UMBRELLA と予想します。

 Simple OLE Browser

VBEなんかにあるObject Browserみたいなものを作ってみました。 とりあえず動くという程度です。


8月16日(金)

 ruby-list vs ruby-talk

いつの間にか10000通以上の差がついてます。 でも、単純に比較する訳にはいかないのかも知れません。 日本語の場合は、ruby-devがありますから。

 一関学院

負けてしまいました。残念です。 この試合に勝てば、次は11日目の日曜日だから ゆったりとしたフォームから投げ込むゆったりとしたボールを ゆっくりとテレビで見ることができる (今日は仕事だったので、昼休みの間だけラジオで実況中継を聴いただけです。 試合観戦はできませんでした。) などと次の試合のことを考えてしまったために、相手に突け入る隙を与えてしまったようです。 (←あなたが何を考えようと、勝敗には何の影響もありません。)

あのピッチャーをもう一度見たかったです。

 Ruby allocation framework と Win32OLE

[ruby-dev:18022]あたりの話から考えると Win32OLEでの[ruby-list:35439]のような allocation メソッドの 使い方は、何となく避けた方が無難なんじゃないかという気がしました。

この場合は、最初から、Win32OLE::Nothing みたいなものを Win32OLE独自で用意するのが望ましいでしょう。 それだったらRuby 1.6でも利用できるでしょうし。

こうしてToDoが増えていくのです...。


8月15日(木)

 Nifty

なんか、POPサーバーの調子が悪いのか、うまくメールを受信できませんでした。 被害は、matomeにしているruby-cvs のメール1通。

 『たのしいRuby』

読み始めたところです。 日本語を出力するプログラムの例で、源氏物語(?)の一節を使ってみたり、 著者のこだわりが感じられます。

 かなしい雨

朝、会社に着く前に、突然の激しい雨。ずぶ濡れになってしまいました。 バックパックもびしょびしょ。 中に入れてあった『たのしいRuby』は、「かなしい」ことになっていました。 昼には、朝の土砂降りが嘘のように青空が広がっていました。


8月14日(水)

 Agile

どうでもいいことなんですが、[ruby-talk:46987]の意味がさっぱりわかりません。

 Win32OLE

3段構えにする」くらいなら、最初から素直に

  1. タイプライブラリを調べて、その情報に従って各引数を設定して試す。

というのが正攻法だと気づきました。 気づいただけです。

どうやら2段構えで大丈夫みたい(ruby-talk:47156)なので、 2段構えで行くことにします。

 オフトピック

著者自らの発言ということも手伝って、 [ruby-talk:47116]の "Broken Windows" の一節に 『達人プログラマー』を思い出してしまいました。


8月13日(火)

 VisualuRuby

インストールしました。 "ruby vrinstall.rb"と実行してちょっとびっくりしてしまいました。 すごいですね。

 Win32OLE

2段構えにするしか無」いと書きましたが

  1. 参照渡しを試す。

  2. 駄目なら値渡しを試す。

  3. それでも駄目ならタイプライブラリを調べて、 その情報に従って各引数を設定して試す。

という3段構えにするという手があることに気づきました。 気づいただけです。

0.5.0 で、2段構えにしてみました。


8月12日(月)

 高校野球

1回戦が終わりました。

これまでの試合から、一関学院を応援することにしました。 わずかヒット2本で初戦突破。チーム打率7分4厘です。 ピッチャーもいいです。 ゆったりとしたフォームから投げ込むゆったりとしたボール。 (実際には速いのかも知れませんが、テレビだとそう見えます。)

結構いい味出してるんじゃないかと思います。次も期待してます。


8月11日()

 『天啓の器』 (笠井潔)

読了。 私には、どう評価して良いのやらさっぱりわかりません。 人間関係と同名タイトルの作品の関係(?)で、かなり混乱しましたが、 この酩酊感というか、何か読んでいる者を落ち着かなくさせるこの読後感は、結構好きです。

『虚無への供物』あるいは、中井英夫へのオマージュという気がします。

 『夏と花火と私の死体』(乙一)

短いので一気に読了。笑顔を絶やさない爽やかな健くん、怖いです。 表題作より、「優子」の方が好みです。

 Agile

AgileAndy の Agile は文字通りの意味なんでしょうか? それとも Agileな開発手法の世界で有名な人という意味なのでしょうか? [ruby-talk:46858]

 Win32OLE

[ruby-talk:46227]の問題は、何が悪いのかわかりました(ruby-talk:46823)。

Win32OLEは引数を参照渡し(VT_BYREF)で、サーバーを呼び出します。 これは、引数が[out]の場合に対応するためです。 ところが、サーバー側が、参照渡しに対応していない場合は、エラーになります。 [ruby-talk:46227]のmdm.saveは 値渡ししか受けつけないようです。

ちょっと面倒ですが、解決策は

  1. 参照渡しを試す。

  2. 駄目なら値渡しを試す。

という2段構えにするしか無さそうです。


8月10日()

 『天啓の器』

残り150ページです。 もうすっかり何が何だか訳がわからなくなってきています。 すっかり作者の術中にはまってしまっているのかも知れません。

 Win32OLE

Ruby 1.7 のCVSにも昨日の修正を反映しました。


8月9日(金)

 本日買った本

 本日買わなかった本

 Win32OLE

[ruby-talk:46414]の問題に対応しました。

ITypeInfo pti;
pole->pDispatch->lpVtbl->GetTypeInfo(pole->pDispatch,
                                     0, lcid, &pti);

ITypeInfo pti;
pole->pDispatch->lpVtbl->GetTypeInfo(pole->pDispatch,
                                     0, lcid, &pTypeInfo);
pTypeInfo->lpVtbl->GetDocumentation(pTypeInfo, -1,
                                    &bstr, NULL, NULL, NULL);
type = WC2VSTR(bstr);
pTypeInfo->lpVtbl->GetContainingTypeLib(pTypeInfo, &pTypeLib, &i);
count = pTypeLib->lpVtbl->GetTypeInfoCount(pTypeLib);
for (i = 0; i < count; i++) {
    pTypeLib->lpVtbl->GetDocumentation(pTypeLib, i,
                                       &bstr, NULL, NULL, NULL);
    if (rb_str_cmp(WC2VSTR(bstr), type) == 0) {
        pTypeLib->lpVtbl->GetTypeInfo(pTypeLib, i, &pti);
        break;
    }
}

で得られる pti は違うみたいです。 InternetExplorer.Applicationの場合は、後者を使わないとどうも駄目っぽいです。 OLE(COM)の世界は迷路です。奥が深いです。 (注意:このコードはエラー時の処理を省いてるので、そのまま流用しちゃ駄目です。)


8月8日(木)

 Masaki Suketa is lurking

あのー、別に私は、こそこそしているつもりは無いんですけど。[ruby-talk:46414]

この問題は、いずれ直さなくちゃと思っていたのですが、とうとう気づかれてしまいましたか。

それはそうと、前々からVBEなんかにあるObject Browserみたいなものを作ってみたいと考えていました。 ようやくそれを実行に移すべく動き始めました。 swinとvrubyをダウンロードして、 『Rubyを256倍使うための本場外乱闘編』の「VisualuRuby計画(仮称)」を読み始めました。 コードは1行も書いてません。 もちろんswinもコンパイルしてません。


8月6日(火)

 allocate と initialize (Ruby)

[ruby-dev:17912]あたりから。

Win32OLEの、ole_initialize() は allocateの中で呼ぶんじゃなくて initializeの中の方がいいのかも知れません。

ちなみにWin32OLEのmarshalなどは全く考えてません。

 『天啓の器』

まだちょっとしか読んでません。 この小説の中で言及されているいくつかの作品は読んだことがあるので、楽しんでます。 より多くの作品を読んでおいた方が、より楽しめるのかも知れません。

などなど...。

逆に1冊も読んでない人には、全く楽しめない作品なのかも知れません。

 Win32OLE

OCaml に手を広げないと駄目ですか?[ruby-talk:46336]

いや、とりあえず、ソース読むだけでいいのか。


8月5日(月)

 Win32OLEのヴァージョン

0.4.8.1との違いが sample/ie.rbだけなので、 0.4.8.1-01にしたのですが細かったでしょうか。 WIN32OLE::VERSION は 0.4.8.1のまんまです。

 Win32OLE

MDM.Document.2 って何ですか?


8月4日()

 『ソフトウェア職人気質』

やっと読み終えました。 中小規模の開発では、ソフトウェア工学の理論は通用しないというスタンスを取っています。 どちらかと言えば、XPのような方法に近いようなスタンスを取っています。

ところで、松江へ行ったときにもちょっと気になったことなんですが、 XPは、ソフトウェア工学をやっている人たちには、どう映っているんでしょうか? 今度、機会があれば聞いてみたいです。

 Win32OLE

sample/ie.rbがボロボロでした。 [ruby-talk:46162]で指摘されて気づきました。 Ruby 1.7と一緒に配布している方は修正済みだったのですが、 0.4.8.1の方に反映するのを忘れてました。 sample/ie.rbを修正したパッケージを 0.4.8.1-01 として配布します。


8月3日()

 Version Up

Win32OLE と RubyUnit をそれぞれヴァージョンアップしました。


8月2日(金)

 VBA の ChDir

今回は、[ruby-talk:45942]が元ネタです。

多分、コマンドラインからスクリプトを実行したときのカレントディレクトリに .xlsファイルがあるのだと思います。 一方、Excelは、Excelでカレントフォルダ名なる情報を持っているのです。 コマンドラインのカレントディレクトリとカレントフォルダ名が一致してないがために [ruby-talk:45942]のようなエラーになるものと思われます。

そこで、Excelのカレントフォルダを変更してやればいいのです。 Excel VBA であれば

ChDir

を使えば良さそうです。

ところが、このChDir、Win32OLEからだとどうやって実行すればいいのかわからないんです。 VBEで調べてみて、ChDir は、Visual Basic For Applications の FileSystem モジュールにあることがわかりました。 (調べている途中で、olegen.rb が Module に対応していないことが発覚しました。) Moduleに対応した olegen.rbで調べてみると

# Procedures used to perform file, directory or folder, and system operations
module FileSystem
  include WIN32OLE::VARIANT
  attr_reader :lastargs

  # VOID ChDir
  # Changes the current or default directory on a specified drive
  #   BSTR arg0 --- Path [IN]
  def ChDir(arg0)
    ret = _invoke(-536870912, [arg0], [VT_BSTR])
    @lastargs = WIN32OLE::ARGV
    ret
  end

という感じです。

ここまで、わかっているんですけど、どうやって実行したものやら、わかりません。 ひょっとしたら、以前、中断したままになっているITypeInfo::Invokeが 解決の鍵を握っているんじゃないかという気がしないでもありません。

結局、[ruby-talk:45967]のように.xlsファイルをフルパスで指定してくれという 「何じゃそりゃ?」とつっこまれそうな返事を出したのでした。

 Win32OLEの積み残し

ああ、SheetChangeイベントの件、すっかり修正するのを忘れてました。 あと、[ruby-list:35429]の件とか、[ruby-list:35430]の件とか。

 その他の積み残し

ああ。そういえば、RubyUnitの[ruby-core:00269]の件も返事をしてませんでした。 RubyWinのBCC対応もまだです。

複数のことを同時にはできないので、1つ1つ片付けようと思います。 まずは、このページのデザインをちょっとだけ変えることから始めます。(←それを人は現実逃避と言います。)


8月1日(木)

 自動生成

HTMLを書くのが面倒なので、ここのページは、できるだけ、RDで書いて、 あとはコマンドを1つ実行して、HTMLを生成するようにしています。 いつもハマるのが月が変わるときです。 今回もまた、何も考えずにいつも通りにいつものコマンドを実行しました。 惜しい。あと一歩です。 トップページ過去の雑感に 8月分が追加されませんでした。

簡単なはずなのに、どうして完全自動化できないんですか?

多分、月に1回実際に動かして失敗したら修正して、 翌月また実際に動かして確認するという非常にのんびりしたペースで開発しているためだと思われます。

しかも、追加した月を削除して元へ戻すという機能が無いため、 テストを繰り返そうと思ったら、手ですべてを元に戻すしかありません。 そんなことをするくらいなら、このまま我慢して使った方がとりあえず楽だという私の怠惰な性格も この状況に一役買っているものと思われます。 (月の始めだけ不安定なだけで、他の日はちゃんと期待通りにHTMLを生成してくれていますから。)

これから、1ヶ月後に向けて、修正します。

すいません。こんな人間がRubyUnitの作者だったりするのです。


[トップページへ] [7月] [9月] [過去の雑感へ]