本格的に喉痛いです.なんか熱っぽいし.もう100%の風邪です.
Ruby を組み込む上で参考になると思われるアプリケーションが RAA でいくつか公開されてます.mod_ruby, Vim/Ruby, Jed/Ruby です. ちなみに RubyWin を作るときに参考にしたのは,Vim/Ruby のソースです.
喉痛い.風邪か?
今週は,RubyWin を更新する元気がありません. ということで今週は更新なしにするつもりだったのですが... STDOUT.puts とか RubyWin で使えるようにしたつもりだったのに ちゃんと動かないことに気づいたのでちょっと調査. (テストしてなかったということです.) C レベルでどうすれば良いのかわからんかったので さっさとあきらめて rwinit.rb で対処. (でもちょっとすっきりしないなあ.何故に private? 仕方ないのかな?)
『定数』と書くつもりで『グローバル変数』って書いてしもた. しかも指摘されるまで気づかんかった. (負け惜しみにしか聞こえんのが悲しい.)
RubyWin では,スクリプトを実行するのに rb_load を使わないで rb_load_protect を使っています. rb_load を使った場合,例外が発生すると問答無用で RubyWin まるごと終了するためです.
rb_load(script_file, 0); //例外が発生すると問答無用で RubyWin も終了.
Ruby の場合は,例外が発生したら
スクリプトの実行を終了し,Ruby インタプリタそのもの (ruby.exe) も終了しても問題は無い
訳です.(私の解釈です.)
ところが,RubyWin のようなアプリケーションの場合, 例外が発生したら
スクリプトの実行は終了しても,RubyWin そのもの(rubywin.exe)は,何事もなく動き続けなくてはならない
訳です. (この部分が Ruby と RubyWin とでは根本的に違うので,結構悩ましい部分だと思ってます. 多分 mod_ruby や Apollo も同じような悩みを持っているのではと想像してます.)
こういう用途のために rb_load_protect が存在しています. rb_load_protect を使った場合には,例外が発生してもそこで終了しません. 例外が発生したかどうかは 3 番目の引数で判断できるようになっています.
int state = 0; rb_load_protect(script_file, 0, &state); //例外が起こっても終了しない if (state) { // 例外が起こっている } else { // 例外なく正常にスクリプトが終了 }
同じような目的で,rb_eval_string 関数に対応して rb_eval_string_protect という関数が用意されています.
・・・というようなことも,Ruby 本に書かれているかなあと思って ちょっと読み返してみましたが,rb_load_protect には触れてないみたいです. (逆に rb_protect という関数があることを知りました. 最初に読んだときは読み飛ばしていたらしい.)
雷がひどかったので,パソコンの電源を切ったら,その直後に一瞬停電した. 間一髪セーフ.
なじみのない専門用語ばかり使って説明されても眠くなります. そりゃなじみのある人もいるでしょうが, 私には何のことだかさっぱり. いろんな職種混ぜて一辺に教育しようという点に 無理があるような気がします. 教育効果が半減するのでは?
rb_load_protect の第二引数に true を指定するということは, 定数の定義が rb_load_protect 内でしか有効にならない(と私は理解してます) ・・・ということは,
rb_load_protect 内で定義されたクラスも rb_load_protect 内だけで有効
ということで, これは,RubyWin でも使えそう. というより true にしといた方がええんちゃうの? (気づくのが遅すぎ.)
ちなみにこの rb_load_protect は,Ruby 内では使われていません. RubyWin のような Ruby を組み込むためのソフト用に作られたものです. そういう関数が欲しいと要求した方がいて, その要求に Ruby の作者のまつもとさんが応えた訳です. で,RubyWin はそういった茨の道が切り開かれた後を通っているので, その分だけ楽をしています. 切り開いてくれたみなさんに感謝してます.
子どもの頃に通った道を久々に歩いてみたら道幅が狭く感じられた. もっと広い道だと思ってたんだけどなあ.
前から思ってたんですけど,一時の Java ブームはどうなったんでしょう? Nifty の Java 関連のフォーラムも一時に比べると盛り上がってないようですし. Java が下火になったというつもりはありません. むしろ地に足がついた Java という感じがして着実に浸透してきているような 気がします. ただ一時のブームはどうなったのかなあと,妙に気になります.
ちなみに3回ぐらい Java に手を出そうとして挫折してます. Hello World のプログラム書いて実行してそれで毎回おしまいになってます.
という理由が大きいのではないかと思います.
Kaffe というのを Vine Linux 1.1 環境に インストールしてみたことだし,ちょっと Java 再々々々入門してみるか. 入門なら Kaffe で十分でしょう. (← 私は Kaffe も Java もよくわかってないのであまり突っ込まないように.)
サーバーがある誰もいない部屋で一人閉じこもって仕事. 後ろの方で巨大なエアコンがゴーッゴーッと大きな音をたててるし, 暖房効いてないから寒いし. (エアコンはサーバーにとって快適な温度に設定されており, 私にとって快適な温度には設定されておりません.) 他に話相手も仲間もいないし. 一人寂しいものだから独り言を結構大きな声で言ってみたり. 昼休みのチャイムが聞こえないので,食堂に行くのが遅れたり. (私が食堂に行ったときには今日のメンチカツ定食は売り切れてました.) なんか最低.
Cygwin 版 RubyWin が動かなかったのは, 結局 cygwin1.dll のバージョンの違いが原因だったようです. cygwin1.dll のバージョンによっては C:\foo\foo.rb というフルパスを認識できないバージョンがあるようです. (//C/foo/foo.rb とすれば認識されました.) 最近の cygwin1.dll なら大丈夫みたいです. (手元にあった最も新しい 2000-01-08 版 では大丈夫でした.)
Cygwin は,UNIX の環境を Windows で実現するとか, UNIX のツールを比較的簡単に Windows に移植できるという点が強調されてますが, (私はそういう認識をしていました.) RubyWin のような普通の Windows のソースもコンパイルできるようになっていたんですね. なんかちょっと逆に意外な気がしました.意外な盲点だとは思いませんか?
背景のイメージ取っても一緒や.変わらんな. 背景色を別の色にしても良いのですが, どうせなら目に優しい色とかにしたいです. どういう色が良いのでしょうか? 色盲というのか色弱というのか良くわからないんですが そういう目に障害のある方でもちゃんと読めるページにしたいです. 避けた方が良い色とか組合せとかあるんでしょうね. 前にちょっと調べたのですが,結局よくわかりませんでした.
ふと私のページで GIF 画像使ってるかなと思って調べたらしっかり背景に使ってました. ほとんど全部のページの修正かあ. RubyWin 関係のページを除いて,私はこのサイトのページがブラウザでどう見えるのかは 主に w3m でフレーム無しの設定にして確認しているので,背景が何だろうと私は気にならないんですが, 余計に地味になるかなあ. (たまに NetScape とか NetFront とか IE5 とかも使ってます.)
このページは,w3m のフレーム無しで最適に見えるようにデザインされています.(嘘)
Windows 2000 で動くソフトもなんかややこしい話がありますね. RubyWin もそれに該当するんだろうな.多分.
TransTech 本当に最終号が届きました. 先月始まった新連載をはじめ,思いっきり中途半端に終っている連載も結構あるようです. よく考えてみたら,雑誌の最終号を買ったのはこれが初めてです. ・・・返金の手続きでもしますか.
Vine Linux には cvs があるのか.全然チェックしてなかった. cvs の使い方調べなきゃ. この前の Ruby 1.5.3 は,Linux から cvsget.rb 使って入手してました.
Ruby 1.5.3 でも Win32OLE を動くようにしてみました. やはり Symbol 絡みでした.詳しい情報があったので助かりました.
Ruby 1.5 に積極的に対応するつもりはないのですが,今回の修正内容は Ruby 1.4.3 でも影響がなかったので修正しておくことにしました. もちろん,1.5 系だろうが 1.4 系だろうが パッチ,バグレポートその他 コメントはいつでも大歓迎.
「押」と書いてあるドアを 引いて開けようとした私は相当疲れているんでしょうか???
Ruby1.5.3 を Windows 95 で Visual C++ でコンパイル. byacc が見つからないと文句いわれたので,cygwin の byacc を使うようにした. (cygwin の byacc.exe をパスの通っているフォルダにコピーした.) 後はすんなりコンパイル通りました.nmake test も 1.4.3 と同じ結果. 今日はここまで.
Ruby 1.6 は夏頃に公開予定なんだとか.
cygwin 版 の1.5.3 では Win32OLE がそのままだと 動かないという情報と修正箇所の情報をいただきました. 内容から察するに最近 ruby-dev で話題になった Symbol 絡みで 動かないのではないかと予想してます.
というような訳で,そろそろ 1.5 にも手を出しておいた方が良いかなと思い cvsget.rb を使って 1.5 系を入手. 今日は Vine Linux 1.1 でコンパイルしただけ.
Cygwin 上でも RubyWin がコンパイルできたそうです.
で,バイナリをダウンロードして私の Windows 95 で試してみたのですが, 肝心のスクリプトの実行が全くできません. Version 情報のダイアログを表示させると rubycw.dll の情報をちゃんと表示するので インタプリタは起動できる模様. エラーメッセージから察するに RubyWin(rubywin.exe) からインタプリタ(rubycw.dll)に渡す スクリプトのファイル名の指定方法に問題がありそう.
RubyWin のオートインデント機能に手を加えました. ちょっとましになった・・・んではないかな. ・・・なっているといいな.
Ruby のオートインデント機能の実現は, C と比べると結構面倒な気がする今日この頃. 逆に Ruby のオートインデント機能ができれば, C のインデント機能は簡単にできる気もする.
書店で見たら結構種類が増えてますね. Tech Linux なんてのまであるのにはちょっとびっくり. 2週間以上遅れて Linux Japan 4月号を購入.
私が Windows の環境に大きな不満を抱かなかったのは,
という理由だということがやっとわかりました. UNIX-like なツールを一切使えない純粋な Windows 環境で作業して初めてわかりました. という訳で,私は今大きな不満を抱きつつ我慢して作業してます. ぶつぶつ文句言い始めてます.危険です.
一日かけてやった仕事が,無駄になりそうな嫌な予感. 無駄に終わるぐらいならまだ良いけど, 元の状態に戻すための仕事が増えそう. ・・・私が悪いんです.
RubyWin のオートインデント機能には 誰にでもすぐにわかるひどいバグがあるのですが, デバッグするのが面倒なのでほったらかしになってます.
RubyWin で C++ の STL の map 使うと 一気に実行モジュールのサイズが膨れ上がった. サイズは以下の通り.
VC++ 6.0(SP2)
最適化のオプションはデフォルトのまま(プロジェクトを作ったときのまま)で
release 版のサイズは 200704 byte
mingw32-GCC 2.95.2
-O オプションでコンパイルして strip した後のサイズは 154624 byte
ちょっと意外な結果. 前回は 圧倒的に VC++ の方がサイズ小さかったのに. STL が原因? ・・・とすると, Windows API に特化したところでは VC++ の方が強くて, 他の部分では,Mingw32-GCC でも良い勝負になるのか? もっとも,VC++ の方は最適化のオプションとか何もいじってないし, 単なる1本のプログラムの比較なので これが公平な比較になってるのかどうか疑問.
この一週間で ruby-talk のメールの 数が ruby-list とほぼ同じでした. ここ2週間で2通怪しげな英語のメール (私のように英語が怪しいのではなくて書いている内容が怪しいメール) が届きました. これはやっぱり 例のインタビューの記事 が公開されているから?
久しぶりに遅くまで仕事したもので疲れました.
theForger's Windows API Programming Tutorial に Toolbar のついた MDI のサンプルがありました. WM_SIZE で MDI Client Window のサイズを変更するだけで良かったのか. ・・・ってことはあんな風にすればこんな風になるのかな... (コードをちょっと変更してしばし実験)予想どおり.:-) ・・・ってことはやっぱりああした方が使いやすいかなあ.
でも Toolbar って必要?
なんか頭痛いし,喉痛いし,体だるいし,風邪???
昔,Perl Mongers というものを全く知らなかった頃 (今もあまり知らないのですが) 「とうきょうぱあるもんじゃあず」と読んで
もんじゃ焼きを食べながら Perl について熱く語り合う 粋でイナセな江戸っ子の集まり
と勘違いし, なんかそうゆうのも良いなあとうらやましく思ったのは 私だけだろうな.きっと.