2001年2月の雑感

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

2月28日(水)

Win32OLE

またこの方から改訂版が送られてきた。 パワフルな人だ。素直にそのまま取り込むことにした。

Win32OLE

さらにこの方の情報によれば、 PerlのOLEでもinvokeのテストは駄目だそうだ。 つまり、一筋縄ではいかないということだ。

Win32OLE

・・・結局私は何もやってないような。 いや、やってはいるんだけど、空回りしてるというか。


2月27日(火)

冷奴

間違えてソースをかけた。

Win32OLE

動かなかったExcelのテストは動くようになった。

Win32OLE

invokeを使った引数つきプロパティ設定のテストに失敗するようになった。

Win32OLE

今の私の力では同時に2つのテストに合格するようにできない。 invokeのテストはあきらめることにした。 Excelのテストに合格するようにしたWin32OLEを 0.2.5としてリリースしよう。

XPエクストリーム・プログラミング入門

やっと読み終えました。 英語が苦手なので原書は入り口で挫折。 翻訳の方も(自分のことは棚にあげます)文章がわかりにくかった。 XPでは「わかりやすいのはいいことだ」とされてるのに。


2月26日(月)

Win32OLE

ruby-listで指摘されたので、修正する。


2月25日()

erb

ふと思いついて、erbを使ってみる。 更新日とかソフトのバージョンとかサイズとか いちいち入力するのが面倒なのでerbを使って自動生成するようにしてみた。 これで更新漏れが減ることを期待している。

でもって一部のページの構成を見なおしました。 直接リンクしていただいている場合は修正をお願いします。 ごめんなさい。

Racc OptionParser RDtool

をWindowsにインストール。 環境は、ruby 1.6.3 (2001-02-20) [i386-mingw32] Raccのインストールが途中でこけるので手動でインストール。

cygwinでtelnetデーモン立ち上げて、telnetでログインして mingw32版rubyを使うという変則的なことをしているので こける原因を追求するのはあきらめる。

RDは特に問題なく動きました。

そういえばいつの間にか Ruby は 1.6.3 になってます。


2月24日()

English

Win32OLE のREADMEの英語が間違っていると指摘されたので修正。


2月21日(水)

RubyWin

日本語もそこそこ扱えるようになったRubyWinですが、テストが不十分です。 そこで積極的にRubyWinを使う機会を増やしてみようと考えてます。 まずは、この雑感をRubyWinを使って書いてみたりとか。

それにしても全部RubyWinで抱え込んだのでファイルサイズが大きくなりました。 zipで圧縮したソースが700KB超えてます。 gcc -bmingwでコンパイルしたRubyWin.exeは500KB超えます。 Shift-JIS と JIS変換だけのためにnkfを丸ごと抱え込むというのはやり過ぎか。

しかも日本語を入力するとスクロールとかやたらと遅くなります。 日本語用エディタとしては駄目です。使えません。 まあ、元々エディタを作ろうとしていた訳では無いからいいか。

日本語処理

RubyWinは以前よりも日本語を扱えるようにはなりましたが、 他力本願で実装したので、私は、その処理内容を一切理解してません。 ちょっと日本語処理も知っておいた方がいいかと思う今日この頃。


2月20日(火)

RubyWin

後は、JISコードの変換。

JIS <=> Shift-JIS <=> UTF8

という方式でやってみることに。 変換には、nkfを利用。 nkf1.9を入手してたので、このソースと、 Ruby本体のnkf拡張ライブラリのソースを比較しながら眺める。 初めて知ったけど、nkfのオリジナルソースは、 最初からPerlの拡張モジュールも作れるようになってるようだ。 で、Rubyの拡張ライブラリはこれをお手本としているみたい。 そこで、RubyWinでも拡張ライブラリのソースをお手本にすればできそう。 nkf1.9 + Ruby用拡張ライブラリ ext/nkf.c + 私の修正 で Shift-JISとJISコード変換機能ができあがり。 やっぱり他力本願。

続けて行末処理。

RubyWinで行末(EOL)がLFのファイルを読んでも改行するとそこだけCRLFになってしまう。 そこで、行末を判定してCRLFかLFかCRかを切り替えるように変更。 元々、Scintillaには、そのための機能が用意されている。

SendMessage(hwnd, SCI_SETEOLMODE, SC_EOL_CRLF, 0);
SendMessage(hwnd, SCI_SETEOLMODE, SC_EOL_LF, 0);

なんて感じで簡単に切り替えができる。またしても他力本願。


2月19日(月)

RubyWin

Shift-JIS と UTF8の変換組み込み完了。 文字コードの判別は、JVimを流用。 Shift-JISとUTF8の変換はuconvを流用。 調子に乗ってEUCとUTF8の変換も組み込む。 すべて他力本願。


2月18日()

RubyWin

せめてShift JISには対応したいと思っていたので、いろいろ調査。

RubyWinが利用しているScintillaは Shift JISだと日本語の入力や表示がうまくいかないので 今はUTF-8になってます。 (ScintillaでShift JIS(CP932)コードをうまく扱う方法をご存知の方は教えてください。)

で、Shift JISを扱うには、

ようにすれば、読み込みと書き込みはできます。

後は、スクリプトを実行するときに$KCODEまで変更するかどうかとか、 その辺をちょっと考えないといけないのですが。

RubyでUTF-8のコード変換といえばよしだむさんのuconv。 ということでソースを眺める。 Shift JISとUTF-8の変換はこれを利用できそう。 うーん。JISとUTF-8の変換がない。 まあでも、それは、nkf拡張ライブラリのソースを見て JISとShift JISを相互変換すればいい話だし。 あっ。文字コードの自動判別もサポートしてないのか。

そこで、JVimのソースを眺める。 judge_jcodeなるいかにもそれらしい名前の関数があったので、 ちょっといじってみる。自動判別にはこれが使えそう。

nkf

1.9というのがリリースされている。2.0ではunicodeに対応する(予定)らしい。

Ruby C API メモ

class Foo
  class Bar
  end
end

をCレベルで実現するには、

VALUE rb_cFoo;
VALUE rb_cBar;
rb_cFoo = rb_define_class("Foo", rb_cObject);
rb_cBar = rb_define_class_under(rb_cFoo, "Bar", rb_cObject);

とします。

module Foo
  class Bar
  end
end

をCレベルで実現するには

VALUE rb_mFoo;
VALUE rb_cBar;
rb_mFoo = rb_define_module("Foo");
rb_cBar = rb_define_class_under(rb_mFoo, "Bar", rb_cObject);

とします。さらに

module Foo
  module Bar
  end
end

を実現するには

VALUE rb_mFoo;
VALUE rb_mBar;
rb_mFoo = rb_define_module("Foo");
rb_mBar = rb_define_module_under(rb_mFoo, "Bar");

とします。 クラスを定義する方が引数の数が1つ多いのは、親クラスを指定するからです。 モジュールは親クラスを持たないので引数の数が1つ少なくて済むわけです。


2月17日()

Win32OLE

いろいろとあれこれ試行錯誤している間に、 メールをくれた当の本人 から改訂版win32ole.cが送られてきた。 しかも私が書いていたコードよりもかなりスマート。 ありがたく、これを利用させてもらうことにした。


2月15日(木)

RubyWin

バグレポートをもらったので対処する。

data = gets
p data

こんなのを実行して、"abc" と入力すると オリジナルのRubyでは "abc\n"となるのに RubyWinでは"abc\r\n"になってしまっていたのを修正。 これでまた一歩オリジナルRubyに近づいた。 バグレポートを下さった方は、プログラミングの先生をされているようで、 RubyWinは授業で使われている模様。


2月14日(水)

Property of Win32OLE

元々プロパティは、

oleobj['Property'] = value

って感じで設定できるので、引数があるプロパティは

oleobj['Property', 1, 2] = value

てな感じで書けるといいかも。で、昨日の例だと

sheet['Cells', 1, 2] = 10

てな具合になります。 ということで、まずは、Rubyがこの表記を受け入れてくれるかどうか実験。

$ cat oleobj.rb 
class OLEOBJ
  def []=(x, *y)
    value = y.pop
    options = y.join(",")
    puts "[#{x}, #{options}] = #{value}"
  end
end
oleobj = OLEOBJ.new
oleobj['Cells', 1, 2] = 10
oleobj['Cells'] = 10

$ ruby oleobj.rb
[Cells, 1,2] = 10
[Cells, ] = 10

Rubyレベルでは大丈夫なようなので、Win32OLE(Cレベル)でも大丈夫そうだ。

DCOM

DCOM対応をどうすればいいのか調査。 CoCreateInstanceExを使うらしい。でもってこの関数がWindows 95でもOKなのか調べる。 VC++では、-D_WIN32_DCOM オプションをつけてコンパイルするといいみたいだ。 Cygwinでは、CoCreateInstanceExがみつからず、リンクエラーになる。 とりあえず、VC++限定?

実は、Win32OLEもMingw(Cygwin + bmingw)がメインの開発環境になっているのでちょっと複雑な気分。


2月12日(月)

Win32OLE

「引数つきのプロパティの設定はできないの?」

と直接メールで問い合わせがきた。 引数つきのプロパティって良く知らなかったのでruby-listで聞いてみる。 単純にinvokeを起動しても駄目らしい。 そこで適当にole_setpropertyをでっちあげてみるが、これでいいのか確認する手段が無い。 とりあえず公開して誰かに試してもらおう。


2月11日()

オープンソースまつり

ひょんなことから、Tokyo Perl Mongersの人に極道編の著者だとばれてしまう。

VMwareの紹介があって、なんかすごく欲しくなりました。

昼頃、私は帰ったのですが、既にサイン本は完売でした。 買ってくださった皆様ありがとうございました。


2月10日()

オープンソースまつり

Tokyo Perl Mongers の展示って何をしてるんだろうと思って覗いたらクイズをやってた。

「挑戦してみますか?」

と聞かれたので、自分が極道編の著者であることは内緒にしたまま

「Perl じゃなくて Ruby しか使ってないんだけど。」

と断ってから挑戦。結果は、最初から2問連続不正解で惨敗。

Ruby 256

Ruby関連の何人かの方にお会いできたので良かったです。 誰も来てくれなかったらどうしようと思っていたのでほっとする。

アスキーの人にも会えたし、○○さんが○○だとか、○○さんは実は○○だとか いろいろわかって楽しかった。

オープンソース

Ruby WorkshopやPerl/Ruby Conferenceでお世話になったSさんに遭遇。 会えるとは全く予想してなかった分、嬉しかった。

「何か喋りませんか?」

と誘われたのだけど、何も準備してないので断る。


2月7日(水)

Just another XP

次のWindowsはXPらしい。ついでにOffice XPだとか。 XPというとeXtreme ProgrammingじゃなくてWindowsのことだと思う人が増えるんだろうな。 うーむ。

Windows XP は

...というのは大嘘です。


2月6日(火)

英語

英語は苦手なので疲れる。 英語から逃げてたんだが、とうとう逃げられなくなったみたいだ。


2月5日(月)

w3m

えーと、2、3日前に読んだ誰かの日記の情報。

w3mで"u"とか"c"とか入力すると一番最後の行にURLが表示されます。 で、この表示秒数がハードコーディングされていてソースを変更すれば表示時間が長くなるらしいです。

これはいいことを読んだと思い時間が取れたので、ソースを調べてみました (私ももうちょっと長い時間表示して欲しいと思うことがあるので)。

どうやらそれらしいのが見つかったので修正してみる。 うまく動いているっぽい。しばらくこれで使ってみよう。

どこを変更したかすぐ忘れるのでメモ代わりのパッチ。 表示時間が10秒から60秒になるっぽいです(無保証)。


2月4日()

RubyWin

次のスクリプトを実行すると問答無用でRubyWinが終了するというメールが届く。

break

調べてみたところRuby側をいじれば終了するのは避けられそう。

Ruby(ruby.exe)の場合は、上のスクリプトを実行した場合、"unexpected break" と メッセージを出してruby.exeも終了しちゃえばいい。 でも、RubyWin(rubywin.exe)の場合は、"unexpected break" と メッセージを出してもrubywin.exeは動き続けなくてはいけない。 rubywin.exeが終了することは誰も期待してない。

この違いが結構大きいんです。


2月3日()

GNOME Office

GNOME Office の DiaってやっぱりこのDiaのこと?

節分

太巻を丸かじりするのは関西だけの風習なのか。

絶不調からの脱出

ふう。何とかなったかな。


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