月、火と東京出張のあと、そのまま遅い夏休みを取って、OO 2002に参加しました。
印象に残ったことを箇条書きにすると
Aspect指向の講演は通訳無しですか? 英語の駄目な私は辛かったです。
Aspect指向の講演の最中に酒匂さんを見つけたので、講演が終了したあと、声をかける。 Rubyだとアスペクト指向は、あまり必要なさそうだという見解で一致。
酒匂さんから、Win32OLEを使っていると言われて、ちょっとどきどきしてしまう。
UME/Rubyは、良くできたツールだと思いました。今のところ公開されそうにないのが非常に残念です。
OOとセキュリティの話は、大変わかりやすかったです。 モジュール化を進めるとセキュリティ面で弱くなるという話が面白く興味深かったです。
科学未来館の展示で、CとJavaとEmacs Lispのプログラムが紹介されていました。 CとJavaは、「Hello World」と出力するプログラムだったのですが、 Emacs Lispの例はよくわかりませんでした。 そのコーナーのスタッフのお姉さんに質問しようかと思ったのですが、やめておきました。
外しました。吸血鬼ドラキュラの扮装をして、「VAMPIRE」って...。
来週は、さくら先生がコップ一杯の水を飲んで「WATER」と素直に予想します。
読了。ほんわかとした雰囲気があるのですが、なんか怖い話です。 でも、なぜ『月の裏側』なんでしょうか?
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
で表示されますが、ちょっと面倒です。)
見事に予想は外れました。
Uはウクレレを手に持ってアロハシャツを着たさくら先生が「UKULELE」。 そう言えば、さくら先生は、ハワイ出身の日系人という設定だったように思います。
来週はVです。実は、既に VIOLIN と予想していました。 ですが、2週連続で楽器が続かないと思うので、他のにします。 さくら先生が野菜を並べて「VEGETABLE」。...というのも考えたのですが、 悲願の初優勝を果たした明徳義塾を祝して、さくら先生がVサインを出して、 にっこり笑って「VICTORY」にします。
昨日のmatome分の分割送信の1通目のメールだけ、かなり遅れて配送されていたようです。 2通目と3通目は、昨日受信していたのですが、結局、 1通目のメールをPOPサーバーから取ってきたのは今日です。
PragProgお勧めのRubyの次の言語はJapaneseじゃなかったのか。
コンパイルしていたときに
fileio.c:1191: 警告: 互換性のないポインタ型からの引数 2 個の `iconv' を渡しますです
「ますです」って...。 へた字フォントを使っていたので余計に脱力感に襲われました。
なんか matomeにしているruby-talkの本日受信分のメールが消えてしまったような気がするのですが、気のせいでしょうか。 取り直せば済む話なんですけどね。
取り直すことができない他のメールも消えてしまっているかも知れませんが、良くわかりません。
日本ソフトウェア科学会大会の併設チュートリアルで「メモリーマネージメント」というのがあります。 RubyのGCに興味ある人は、要チェックです。
それにしても、まつもとさん、ハードスケジュールだなあ。
なるほど。
-mno-cygwin
オプションが必要だったのですね。
無事DLLができました。
実現してほしいと書いた9月13日の企画は 実現されたようです。(参加申し込みのページ)
来週開催されるオブジェクト指向2002併設の27日の アスペクト指向のチュートリアルは、誰でも無料で参加できる模様です。 Ruby ユーザーの人はAspectRで予習しておくといいかも知れません。
なお、オブジェクト指向2002は有料です。念のため。
既に、--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でした。
例によって、なんかインストールに失敗しているのかも知れません。
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を使う理由が無くなりました。
遅ればせながら、 5月に買ったSoftware Design の付録CD-ROMからPerlなどをインストール。 これで、autoconfも動くようになりました。
やっと、TEACHER で当たりました。
NHKの連続ドラマ「さくら」という番組があります。 このドラマの最後に、必ず主人公の女性が登場して英単語を1つ言います。 第1週が A で始まる英単語、第2週が B で始まる英単語、第3週が C で始まる英単語、 という風に毎週変わります。
ドラマそのものは興味が無いのでほとんど見てません。 英単語のことを知ってから、毎週予想だけするようになりました。 これまで一度も予想が的中したことは無かったのですが、やっと的中しました。 ずっと外れ続けていたので、これは Q で勝負をかけるしか無いと思っていたのですが Qも外してしまいました。 (P のときにペンギンの着ぐるみを着た主人公が出てきて、PENGUIN だったので、 Q は女王様の格好で登場して QUEEN だと予想していました。)
これまでの傾向からわかることは次の通りです。
名詞である。
動詞や形容詞は出てきません。
易しい単語である。
視覚化、映像化しやすい単語である。
必ず、主人公は、その単語に関連する格好をしたり、小道具を持って登場します。 例えば、玉ねぎをみじん切りにして ONION とかスカートを履いて SKIRT とか。 ですが、頭の上に?マークを合成で表示させて、主人公は悩んでいる表情をして QUIZ とかちょっとひねってくることがあるので、要注意です。
今回は、主人公の女性(この女性の名前が「さくら」です。)が 中学校の英語の先生であるという予備知識があったので、 素直にTEACHERと予想しました。
来週は、UNIFORM というのも考えたのですが、さくら先生が傘をさして UMBRELLA と予想します。
VBEなんかにあるObject Browserみたいなものを作ってみました。 とりあえず動くという程度です。
いつの間にか10000通以上の差がついてます。 でも、単純に比較する訳にはいかないのかも知れません。 日本語の場合は、ruby-devがありますから。
負けてしまいました。残念です。 この試合に勝てば、次は11日目の日曜日だから ゆったりとしたフォームから投げ込むゆったりとしたボールを ゆっくりとテレビで見ることができる (今日は仕事だったので、昼休みの間だけラジオで実況中継を聴いただけです。 試合観戦はできませんでした。) などと次の試合のことを考えてしまったために、相手に突け入る隙を与えてしまったようです。 (←あなたが何を考えようと、勝敗には何の影響もありません。)
あのピッチャーをもう一度見たかったです。
[ruby-dev:18022]あたりの話から考えると Win32OLEでの[ruby-list:35439]のような allocation メソッドの 使い方は、何となく避けた方が無難なんじゃないかという気がしました。
この場合は、最初から、Win32OLE::Nothing みたいなものを Win32OLE独自で用意するのが望ましいでしょう。 それだったらRuby 1.6でも利用できるでしょうし。
こうしてToDoが増えていくのです...。
なんか、POPサーバーの調子が悪いのか、うまくメールを受信できませんでした。 被害は、matomeにしているruby-cvs のメール1通。
読み始めたところです。 日本語を出力するプログラムの例で、源氏物語(?)の一節を使ってみたり、 著者のこだわりが感じられます。
朝、会社に着く前に、突然の激しい雨。ずぶ濡れになってしまいました。 バックパックもびしょびしょ。 中に入れてあった『たのしいRuby』は、「かなしい」ことになっていました。 昼には、朝の土砂降りが嘘のように青空が広がっていました。
どうでもいいことなんですが、[ruby-talk:46987]の意味がさっぱりわかりません。
「3段構えにする」くらいなら、最初から素直に
タイプライブラリを調べて、その情報に従って各引数を設定して試す。
というのが正攻法だと気づきました。 気づいただけです。
どうやら2段構えで大丈夫みたい(ruby-talk:47156)なので、 2段構えで行くことにします。
著者自らの発言ということも手伝って、 [ruby-talk:47116]の "Broken Windows" の一節に 『達人プログラマー』を思い出してしまいました。
インストールしました。
"ruby vrinstall.rb"
と実行してちょっとびっくりしてしまいました。
すごいですね。
「2段構えにするしか無」いと書きましたが
参照渡しを試す。
駄目なら値渡しを試す。
それでも駄目ならタイプライブラリを調べて、 その情報に従って各引数を設定して試す。
という3段構えにするという手があることに気づきました。 気づいただけです。
0.5.0 で、2段構えにしてみました。
1回戦が終わりました。
これまでの試合から、一関学院を応援することにしました。 わずかヒット2本で初戦突破。チーム打率7分4厘です。 ピッチャーもいいです。 ゆったりとしたフォームから投げ込むゆったりとしたボール。 (実際には速いのかも知れませんが、テレビだとそう見えます。)
結構いい味出してるんじゃないかと思います。次も期待してます。
読了。 私には、どう評価して良いのやらさっぱりわかりません。 人間関係と同名タイトルの作品の関係(?)で、かなり混乱しましたが、 この酩酊感というか、何か読んでいる者を落ち着かなくさせるこの読後感は、結構好きです。
『虚無への供物』あるいは、中井英夫へのオマージュという気がします。
短いので一気に読了。笑顔を絶やさない爽やかな健くん、怖いです。 表題作より、「優子」の方が好みです。
AgileAndy の Agile は文字通りの意味なんでしょうか? それとも Agileな開発手法の世界で有名な人という意味なのでしょうか? [ruby-talk:46858]
[ruby-talk:46227]の問題は、何が悪いのかわかりました(ruby-talk:46823)。
Win32OLEは引数を参照渡し(VT_BYREF)で、サーバーを呼び出します。 これは、引数が[out]の場合に対応するためです。 ところが、サーバー側が、参照渡しに対応していない場合は、エラーになります。 [ruby-talk:46227]のmdm.saveは 値渡ししか受けつけないようです。
ちょっと面倒ですが、解決策は
参照渡しを試す。
駄目なら値渡しを試す。
という2段構えにするしか無さそうです。
残り150ページです。 もうすっかり何が何だか訳がわからなくなってきています。 すっかり作者の術中にはまってしまっているのかも知れません。
Ruby 1.7 のCVSにも昨日の修正を反映しました。
『月の裏側』(恩田陸)
恩田陸さんということで。
Linux Magazine
Vine Linux 2.5 アップデートのCD-ROMが目的です。
『泡亭の一夜』(泡坂妻夫)
ミステリじゃなくて落語だということなので、今回は見送りました。 未読の本が溜まっているし。
[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)の世界は迷路です。奥が深いです。 (注意:このコードはエラー時の処理を省いてるので、そのまま流用しちゃ駄目です。)
あのー、別に私は、こそこそしているつもりは無いんですけど。[ruby-talk:46414]
この問題は、いずれ直さなくちゃと思っていたのですが、とうとう気づかれてしまいましたか。
それはそうと、前々からVBEなんかにあるObject Browserみたいなものを作ってみたいと考えていました。 ようやくそれを実行に移すべく動き始めました。 swinとvrubyをダウンロードして、 『Rubyを256倍使うための本場外乱闘編』の「VisualuRuby計画(仮称)」を読み始めました。 コードは1行も書いてません。 もちろんswinもコンパイルしてません。
[ruby-dev:17912]あたりから。
Win32OLEの、ole_initialize() は allocateの中で呼ぶんじゃなくて initializeの中の方がいいのかも知れません。
ちなみにWin32OLEのmarshalなどは全く考えてません。
まだちょっとしか読んでません。 この小説の中で言及されているいくつかの作品は読んだことがあるので、楽しんでます。 より多くの作品を読んでおいた方が、より楽しめるのかも知れません。
虚無への供物 (中井英夫)
匣の中の失楽 (竹本健治)
ウロボロスの偽書 (竹本健治)
ウロボロスの基礎論 (竹本健治)
牧場智久シリーズ(ゲーム殺人事件) (竹本健治)
天啓の宴 (笠井潔)
黄昏の館 (笠井潔)
矢吹駆シリーズ (笠井潔)
館シリーズ (綾辻行人)
殺戮にいたる病 (我孫子武丸)
などなど...。
逆に1冊も読んでない人には、全く楽しめない作品なのかも知れません。
OCaml に手を広げないと駄目ですか?[ruby-talk:46336]
いや、とりあえず、ソース読むだけでいいのか。
0.4.8.1との違いが sample/ie.rb
だけなので、
0.4.8.1-01にしたのですが細かったでしょうか。
WIN32OLE::VERSION は 0.4.8.1のまんまです。
MDM.Document.2 って何ですか?
やっと読み終えました。 中小規模の開発では、ソフトウェア工学の理論は通用しないというスタンスを取っています。 どちらかと言えば、XPのような方法に近いようなスタンスを取っています。
ところで、松江へ行ったときにもちょっと気になったことなんですが、 XPは、ソフトウェア工学をやっている人たちには、どう映っているんでしょうか? 今度、機会があれば聞いてみたいです。
sample/ie.rb
がボロボロでした。
[ruby-talk:46162]で指摘されて気づきました。
Ruby 1.7と一緒に配布している方は修正済みだったのですが、
0.4.8.1の方に反映するのを忘れてました。
sample/ie.rb
を修正したパッケージを 0.4.8.1-01 として配布します。
Win32OLE と RubyUnit をそれぞれヴァージョンアップしました。
今回は、[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ファイルをフルパスで指定してくれという 「何じゃそりゃ?」とつっこまれそうな返事を出したのでした。
ああ、SheetChangeイベントの件、すっかり修正するのを忘れてました。 あと、[ruby-list:35429]の件とか、[ruby-list:35430]の件とか。
ああ。そういえば、RubyUnitの[ruby-core:00269]の件も返事をしてませんでした。 RubyWinのBCC対応もまだです。
複数のことを同時にはできないので、1つ1つ片付けようと思います。 まずは、このページのデザインをちょっとだけ変えることから始めます。(←それを人は現実逃避と言います。)
HTMLを書くのが面倒なので、ここのページは、できるだけ、RDで書いて、 あとはコマンドを1つ実行して、HTMLを生成するようにしています。 いつもハマるのが月が変わるときです。 今回もまた、何も考えずにいつも通りにいつものコマンドを実行しました。 惜しい。あと一歩です。 トップページの過去の雑感に 8月分が追加されませんでした。
簡単なはずなのに、どうして完全自動化できないんですか?
多分、月に1回実際に動かして失敗したら修正して、 翌月また実際に動かして確認するという非常にのんびりしたペースで開発しているためだと思われます。
しかも、追加した月を削除して元へ戻すという機能が無いため、 テストを繰り返そうと思ったら、手ですべてを元に戻すしかありません。 そんなことをするくらいなら、このまま我慢して使った方がとりあえず楽だという私の怠惰な性格も この状況に一役買っているものと思われます。 (月の始めだけ不安定なだけで、他の日はちゃんと期待通りにHTMLを生成してくれていますから。)
これから、1ヶ月後に向けて、修正します。
すいません。こんな人間がRubyUnitの作者だったりするのです。