何も知らないので、ちょっとお勉強。 『WebDAVシステム構築ガイド』(宮本久仁男/山田泰資/渡邊剛)を斜め読み。 あくまでも「システム構築ガイド」なので、 WebDAVクライアントプログラミングについて知りたいという私のニーズとは若干ずれてます。 しかし、最初の一歩として参考になりました。
Windows だと、Microsoft.XMLHTTP というWebDAVクライアント用コンポーネントがあって、それを使えばいいらしい。
ずーっと高校生を主人公にしていた著者が、初めて20代を主人公に据えた私立探偵小説。
東京の会社を辞め、田舎に戻ってきた主人公、紺屋が始めた仕事は、犬捜し専門の調査事務所。 ところが、依頼された仕事は、失踪人捜しに、古文書の解読。(だから『犬はどこだ』なのです。)
前半、ペースはゆったりとした感じですが、失踪の理由が明らかになってくる5章あたりから、俄然ペースが上がってきます。 一見、何の関係も無い失踪人捜しと古文書の解読が絡んでくるあたりとか構成がうまい。 最後の一捻りで見せる反転は伏線もちゃんとあって上手いのですが、後味は、あまり良くないです。 ほのぼのとしたものやハッピーエンドを期待する人にはオススメできません。
犬捜しの探偵と言えば、稲見一良の『猟犬探偵』ですが、 あちらほどハードボイルドっぽくありません。 マイクル・Z・リューインのアルバート・サムスンのようなソフトボイルドな感じです。
紺屋をはじめ、ハンペーや紺屋の妹など魅力的なキャラクターが揃っているので、シリーズ化してもらいたいところ。 調査事務所という設定なので、主人公を事件に関わらせるのには苦労しないはず。
デビュー作を読んだときには、さほど、期待してなかったんだけど、今や、要チェックの作家になってしまいました。
(2005-10-15追記) 改めて表紙を見たら、
THE CASE-BOOK OF "KOYA SEARCH & RESCUE"
とあって、その下に「1」とあるので、今後「2」「3」とシリーズ化されるものと思われます。
うーむ。やっぱり月刊ペースなのか。 一番最初にチェックしたこと。それは、ebanさんの写真があるかないか。 いつもどおり、次号が出るまでの間に、ちびちびとゆっくり読むことにします。
Labelを使わずに、直接書いた文字のフォントを変更するには、 Pango::Layout#font_description= メソッドを使います。 引数には、Pango::FontDescription オブジェクトを指定します。 下のサンプルのfont_clicked メソッドの
fd = Pango::FontDescription.new(font_name) $l.font_description = fd
がそれです。
また、フォント選択ダイアログを表示するときに、選択状態にしたいフォントを指定するには、 Gtk::FontSelectionDialog.font_name= メソッドを使います。 引き数は、フォントを指定する文字列です。 下のサンプルのfont_clickedメソッドの
fontdlg.font_name = $font_name if $font_name
がそれです。
実は、もう1つポイントがあります。 フォントを設定しただけでは、画面の文字は変わりません。 画面を再描画する必要があります。 そこで、一旦画面の内容をクリアして、再描画させます。 再描画には、Gdk::Window::clear_area メソッドを使います。 引数は、再描画の範囲を示す四角形の領域の座標と、expose_eventを発生させるか否かです。 ここでは、強制的に描画させたいので、trueを指定します。 そうしておけば、expose_eventが発生し、文字が書き直されます。 下のサンプルの font_clicked メソッドの
win.window.clear_area(0, 0, 200, 150, true)
がそれです。
さらに、ここでは、文字の左に縦の線を描いて、 文字の大きさが変わるのと同時に、縦の線の長さも変えるようにしてみました。 expose_eventを処理しているところの
draw.draw_line(gc, 8, 50, 8, 50 + $l.pixel_size[1])
がそれです。 設定された文字のフォントからピクセルサイズを求めるには、 Pango::Layout#pixel_size メソッドを使います。 配列の1番目が、横方向のサイズ、2番目が縦方向のサイズになります。
require 'gtk2' def font_clicked(win) fontdlg = Gtk::FontSelectionDialog.new fontdlg.font_name = $font_name if $font_name ret = fontdlg.run if ret == Gtk::Dialog::RESPONSE_OK font_name = fontdlg.font_name if font_name $font_name = font_name fd = Pango::FontDescription.new(font_name) $l.font_description = fd win.window.clear_area(0, 0, 200, 150, true) end end fontdlg.destroy end Gtk.init win = Gtk::Window.new menubar = Gtk::MenuBar.new menuitem = Gtk::MenuItem.new("File") menu = Gtk::Menu.new mitem = Gtk::MenuItem.new("font...") mitem.signal_connect("activate") do |w, evt| font_clicked(win) end menu.append mitem menuitem.set_submenu menu menubar.append menuitem box = Gtk::VBox.new(false, 0) win.add(box) box.pack_start(menubar, false, true, 0) win.set_app_paintable(true) win.realize draw = win.window gc = Gdk::GC.new(draw) $l = win.create_pango_layout $l.set_text("18") win.signal_connect("expose_event") do |win, evt| draw.draw_layout(gc, 10, 50, $l) draw.draw_line(gc, 8, 50, 8, 50 + $l.pixel_size[1]) end win.signal_connect("destroy") do Gtk.main_quit end win.set_default_size(200, 150) win.show_all Gtk.main
多分。
Accessを使わずにテストできることがわかったので、1つテストスクリプトを追加した。 [ruby-talk:137054]に対応していることを確認するためのテスト。 Accessは不要だけど、ADOが必要。 MDACをインストールすれば、テストできるはず。
Win32OLEのユニットテストのスクリプトは、Excelに依存している。 Excelのない環境ではテストできない。 Excelは無料じゃないので、お金がかかる。 これをどうにかした方がいいと前々から漠然と考えていた。
ユニットテストのスクリプトは、
最初から、Windowsにデフォルトでインストールされるもの。
無料でダウンロード、インストールできるもの。
にだけ依存するようにしたい。 そこで、使えそうなものを調べてみた。
Microsoft Scripting Runtime
Microsoft WMI Scripting VX.X Library
Microsoft Internet Controls
Microsoft Shell Controls And Automation
Windows Script Host Object Model
Microsoft XML, version X.X
Microsoft ActiveX Data Objects X.X Library
Microsoft HTML Object Library
Microsoft Windows Installer Object Library
このぐらいあれば、用が足りるだろうか。 必要とするものは、1つか2つに絞ってしまいたいが、 [ruby-talk:137054]や[ruby-list:40890]みたいな特殊なものがあるので、 そこのところを考える必要がある。
Google で % を検索したら、意外な結果になって戸惑った。
Distributing Rails Applications - A Tutorial from [ruby-talk:159331]
遅まきながらアップグレードしました。
/etc/apt/sources.list の 3.1 を 3.2 に変更 # apt-get update # apt-get dist-upgrade # apt-get update # apt-get dist-upgrade /etc/lilo.confの編集 image=/boot/vmlinuz label=linux image=/boot/vmlinuz.old label=linux-old # /sbin/lilo # shutdown -r now
例によって、カーネルをアップグレードしたため、vmwareがこけます。
# /usr/local/bin/vmware-config.pl
を実行して、vmware も使えるようになりました。
役者が一人一人仲間を集めて舞台の幕が上がるまでを描く連作ミステリ。 提示される謎は、どちらかというと日常の謎に分類される。
役者ならではの推理でネガとポジをひっくり返してみせる「花をちぎれないほど・・・」が好み。 「写真に写ったものは・・・」などは、もっと後味の悪い(ありがちな)悪人の登場する結末を想像したのだけど、そうはならなかった。 悪い人は登場しないのが、この作者のミステリなのかも知れない。 「・・・そして開幕」は、語り手の視点が落ちつかない感じがしたが、趣向は面白かった。
コンビニに行ったら年賀状印刷の貼り紙が。 もうそんな季節ですか。はやっ。
Gtk::Labelの文字のフォントを変更するには、 Gtk::Label#modify_font を使います。 引数で指定するのは、Pango::FontDescriptionオブジェクトです。 次のスクリプトは、Gtk::Labelの文字列をフォント選択ダイアログで選択したフォントに変更します。
ポイントは、font_clocked メソッドの
fd = Pango::FontDescription.new(font_name) $msgarea.modify_font(fd)
の部分。
require 'gtk2' def font_clicked win = Gtk::FontSelectionDialog.new ret = win.run if ret == Gtk::Dialog::RESPONSE_OK font_name = win.font_name if font_name fd = Pango::FontDescription.new(font_name) $msgarea.modify_font(fd) end end win.destroy end Gtk.init win = Gtk::Window.new menubar = Gtk::MenuBar.new menuitem = Gtk::MenuItem.new("File") menu = Gtk::Menu.new mitem = Gtk::MenuItem.new("font...") mitem.signal_connect("activate") do |win, evt| font_clicked end menu.append mitem menuitem.set_submenu menu menubar.append menuitem box = Gtk::VBox.new(false, 0) win.add(box) box.pack_start(menubar, false, true, 0) $msgarea = Gtk::Label.new box.pack_start($msgarea, false, true, 0) $msgarea.text="message" win.set_app_paintable(true) win.realize win.signal_connect("destroy") do Gtk.main_quit end win.set_default_size(200, 150) win.show_all Gtk.main
1.8.3用 One Click Installerは見送って 1.8.4まで待つということらしい([ruby-talk:158922])。 個人的にはFXRubyのバージョンがどうなるか気になってたんですけどね。 といいつつも、クリスマスなんて、すぐに来ちゃうか。
Windowsでしか動かなくて、OLEとくれば、多分 Win32OLEが使われていると思われます。 自分じゃ試せないんですけどね([ruby-talk:159009])。
プログラミング経験のないレビューアを探してるらしい([ruby-talk:159011])。 応募はしないけど、内容がどんなのか気になる。
まだベータ版だし、Windows限定だけど(Windowsだからこそ)、気になる([ruby-talk:159114])。
nonoは、GUIをどれか一つに限定せずに、それなりに使われてそうなものという視点で、 Ruby-GNOME2(Gtk)、VisualuRuby、Tk、FXRubyに手をつけてきている訳です。 それにしても、Tkはそんなに嫌なのか([ruby-talk:158967])。 他のGUIとは、ちょっと違いがあるように感じるのは確かですが。 ちなみに、Qtに手を出してないのは、Windowsのサポートが怪しいというのをどっかで読んだような気がしたから。
Fox 1.2 系の最新版 Fox 1.2.18 をWindows環境にインストール。 Msys環境を用意していないので、Mingw用のバイナリをCygwin環境で作ってみます。 D:ドライブの usr/local 配下にインストールします。
unzip fox-1.2.18.zip -d . cd fox-1.2.18 ./configure --host=i386-mingw32 --target=i386-mingw32 --disable-shared CC='gcc -mno-cygwin' CXX='g++ -mno-cygwin' make make DESTDIR=d: install
Fox 1.4系の最新版 Fox 1.4.18 も同じようにインストール。
unzip fox-1.4.18.zip -d . cd fox-1.4.18 ./configure --host=i386-mingw32 --target=i386-mingw32 --disable-shared CC='gcc -mno-cygwin' CXX='g++ -mno-cygwin' make make DESTDIR=d: install
mingw 版 Ruby 用の FXRuby をインストール。
FOX 1.2系に対応した FXRuby 1.2.6 をインストール。
tar zxvf FXRuby-1.2.6.tar.gz cd FXRuby-1.2.6 ruby install.rb config
ちょっと格好悪いですが、ext/fox12/Makefileを修正します。
CXX = g++ -mno-cygwin
を追加。
CPPFLAGSを
CPPFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir) -DHAVE_SYS_TIME_H -DHAVE_SIGNAL_H \ -I/usr/local/include/fxscintilla -Id:/usr/local/include/fox-1.2
に変更。
あとは
ruby install.rb setup ruby install.rb install
同じように、FOX 1.4系に対応した FXRuby 1.4.2 をインストール。
tar zxvf FXRuby-1.4.2.tar.gz cd FXRuby-1.4.2 ruby install.rb config
同じように ext/fox14/Makefile を修正。
CXX = g++ -mno-cygwin
を追加。
CPPFLAGSを
CPPFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir) -DHAVE_SYS_TIME_H -DHAVE_SIGNAL_H \ -I/usr/local/include/fxscintilla -Id:/usr/local/include/fox-1.4
に変更。 このまま
ruby install.rb setup
するとlink時に何故かエラーになるので、適当にext/fox14/icons_wrap.cppを修正して逃げます(パッチ)。 多分、Mingw用のlibtiffとlibpngとlibjpegを用意して、FOXからインストールし直せば、このような小細工は不要だと思われます。
あとは
ruby install.rb setup ruby install.rb install
すれば、機能に制限はつきますが、FXRubyが使えるようになります。
fnono 程度のスクリプトであれば、FXRuby 1.2.X でも、FXRuby 1.4.Xでも、そのまま動くみたいです。