3日と4日に行くかも知れません。 それにしても、どれを聴講しようか迷ってしまいます。
WIN32OLE_TYPE#ole_typelib と WIN32OLE_TYPE#implemented_ole_types を実装した(Ruby 1.9の最新版)ので こんな感じで、DispHTMLInputElementからHTMLInputElementを導くことができます。
otype = zip.ole_obj_help puts otype # => DispHTMLInputElement tlib = otype.ole_typelib tlib.ole_classes.each do |k| k.implemented_ole_types.each do |t| if t.name == otype.name puts k # => HTMLInputElement end end
... やっぱり、回りくどいですか?
バージョンアップしました。tnonoに "step by step"のメニューがつきました。
近藤史恵版『隅の老人』。 殺人事件は起こらないし、どちらかと言えば、 日常の謎ミステリに近い部分はある。 けれど、犯罪かそれに近いことは起きている訳で、事件そのものは、どれも暗くて重い。
トモのモデルはテツですか? でもって、トモって名前は、テツ & トモ からの連想ですか?
しっかりと、この不具合に遭遇してしまい、 Oracle 初心者の私はしばし悩んでしまいました。
Tomcatは、Apacheと連携するものだとばかり思っていたら、IISとも連携できるらしい。
アントニイ・バークリーがA.B.コックス名義で発表したミステリー風ユーモア小説。 あくまでも、ユーモアミステリではなくて、ミステリー風ユーモア小説。 ドタバタ喜劇風でありながら、どこか牧歌的。 この設定だと、もう少しミステリー寄りな展開とか 主人公が窮地に立たされるサスペンスにするとか あると思うんだけど、この作品では、ユーモアに徹してます。 ミステリーとして期待するとちょっとがっかりするかも知れませんが、 ミステリー風ユーモア小説として読めば楽しめます。
Win32OLE で DispHTMLInputElement から HTMLInputElement を導く方法は今のところありません。 また、逆に HTMLInputElement から DispHTMLInputElement を導く方法も今のところありません。
DispHTMLInputElement と HTMLInputElement の関係は、Java で例えると DispHTMLInputElement が interface で HTMLInputElement が class みたいなもんでしょうか。 Ruby で例えると、DispHTMLInputElement が module で、HTMLInputElement が class かな。
Ruby では、Module#included_modules を使えば、そのクラスでincludeしているモジュールの配列を取得できます。 OLEでも、HTMLInputElement が持っているインターフェース DispHTMLInputElement を取得することは、比較的簡単です。 Win32OLEでも比較的簡単に実装できます。
ただ、今回の場合は、その逆ができないと、
zip.ole_obj_help -> DispHTMLInputElement -> HTMLInputElement -> Excelのオブジェクトブラウザで HTMLInputElement を調べる
というスムーズな流れにはならない訳です。
今のところ、逆は、ちょっと面倒くさい方法しか思い浮かびません。
DispHTMLInputElement が定義されているタイプライブラリを取得する。
タイプライブラリで定義されているOLEの型情報の一覧を取得する。(この中にHTMLInputElementが含まれるはず。)
OLEの型情報が DispHTMLInputElementをインターフェースとして持っているか1つ1つ順番に調べ、持っているものだけをリストアップする。
2. だけは、Win32OLEでもできます。
とりあえずは、1. ができるメソッド と 3. の代わりに(比較的簡単に実装できる)型情報が持っているインターフェースの配列を返すメソッドを用意しようと考えています。 だけど、まだ、いいメソッドの名前を思いつきません。
あと、1. 2. 3. 全部やってしまうメソッドを用意するかどうかも迷っています。
何人かの方が、時の流れるのが早いみたいなことを書かれてますが、 私には、るびまが月刊になっているのではないかと勘違いしそうになるほどです。 そのうち週刊と錯覚するようになったらどうしようかと怯えています。
考えが足りなかったような気がした。 のだが、そうでもない気がしてきた。
InvokeVerb("印刷(&P)")
の代わりに
_invoke(1610l743824, [{"印刷(&P)" => WIN32OLE::VT_BYVAL}], [WIN32OLE::VARIANT::VT_BSTR])
としてもらうか
_invoke(1610l743824, [{"印刷(&P)" => WIN32OLE::VT_BYVAL}], [WIN32OLE::VARIANT::VT_VARIANT])
としてもらうか、どっちだったらちゃんと動くように実装できるんだ?
『氷菓』、 『愚者のエンドロール』に続く「古典部シリーズ」第3段。 高校の文化祭で、占い研究会のカード、囲碁部の碁石、アカペラ部のドリンク、お料理研究会のおたまなど が盗まれる。怪盗「十文字」の目的は何か?
高校の文化祭を舞台にしたいわゆるミッシングリンクものです。 ミッシングリンクの謎もさることながら、それ以外のところでも読ませてくれます。 誤って二百部も刷ってしまった古典部の文集「氷菓」をいかにして古典部のメンバーは売り捌くのかとか、 お料理研究会の料理対決のシーンとか。
結末はちょっとほろ苦いですが、後味が悪いというほどのものではありません。
あと、ネタがバレるので、詳しく書けませんが、一箇所決定的なミスがあるような気がするんだけど、 私が勘違いしているだけかなあ。
単独でも楽しめますが、多分、『氷菓』、 『愚者のエンドロール』と順番に読んだ方がより楽しめると思われます。 (実は、そういう私も、『氷菓』は読んでますが、 『愚者のエンドロール』を読んでません。 思いのほか、本作が良かったので、『愚者のエンドロール』も読んでみようかと思っています。)
舞台設定に小学校と高校の違いはありますが、 謎の設定がよく似ている『ほうかご探偵隊』と読み比べてみるのも一興です。
『すごいやり方』には、「今すぐそれをやってみない?」と聞くというのがある。 「でも、面倒だし後回しにしよう。」と、結局やらないままに終わる。 『仕事を成し遂げる技術』には「2分でできることはすぐやる」というのがある。 なので、
「今すぐそれをやってみない?」 「面倒だよ」 「それ2分でできる?」 「できるけど・・・」 「だったらやろう。」
という展開になる。でも2分でできないものは、いつまで経っても終わらない。 なので、「それに関して2分でできることはある?」と聞くことにしている。
「ネットワークのトラブルの調査かあ。なんか面倒くさそうだなあ。」 「今すぐそれをやってみない?」 「面倒だよ」 「それ2分でできる?」 「絶対無理です。」 「じゃあ、2分でできることはある?」 「traceroute(tracert)で経路の確認ぐらいなら...」 「じゃあ、それだけでもやっちゃおう。」
となる。で、それが終わると、「次に2分でできることは?」と問いかける。 何もなくなると、他の仕事で2分で片付くことをやる。 で、本当に本当に何もやることがなくなると仕方がないので、本腰入れてネットワークの調査に戻る。 でも何も手をつけていない訳ではなく、2分でやれることだけは、(いろいろと)やってしまっているので、 意外と抵抗が少ない状態で作業に入っていける(かも知れない)。
ものぐさで、面倒くさがりで、なかなかやる気にならない、動きの鈍い私には、効果的なやり方かも知れない。
実際に始めてみたら2分で終わらなかったということもあるかも知れないが、そんなことは気にしない。 要は、それだけ何か進展があったということが大切。
いくつかの仕事を並行でやっているとき、 細切れに2分ごとに仕事を変えると、 一体何の仕事にどれだけの時間かけたのかわからなくなるという罠があるかも知れない。
初めて、マインドマップに挑戦するので、どう書くか悩んでしまわないように、 事前に印刷しておいた発表資料にざっと目を通しておくことにしました。
実践してみてわかったんだけど、右から左に線を引くのは難しい。 横書きが左から右なので、本に線を引くときとか割と左から右に線を引くことが多い。 左から右に動かすのは、どちらかというと手を自分の方へ引っぱる動作に近いので 割とスムーズに動く。 だから、左から右へ線を引くのはスムーズ。 でも、右から左は押す動作に近く、そういう動きに慣れてないのか、どこかぎくしゃくする。
左利きの人だとひょっとするとスムーズに書けるんじゃないかと思ったりする。 左から右への線は、横書きの本に線を引いたりするときに左から右に線を引くんじゃないかと。 右から左への線は、左手を手前に引く動作に近いので、それもスムーズだろう。多分。
結論。マインドマップは左利きの人の方が有利に違いない(嘘)。
飯田橋へ行くのは久し振りで懐しく感じた。 早目に行って飯田橋で食事。 西口なので、一瞬、青葉のラーメンにしようかと思ったが、きっと混んでると思ってやめた。 ちょっと会場とは違う方向だし。 結局、黒兵衛の塩ラーメンにした。 今まで、私はラーメンと言えば、醤油派だったんだが、塩もいいかもと思ってしまった。
会場に行って、受付で、名前を名乗ったら、受付の方に 「ひょっとしてRubyの助田さんですか?」 と聞かれ、不意打ちをくらいつつ、「そうです。」と答えた。 受付の方は、後で、私の方まで改めて挨拶に来られた。 丁寧な方でした。
はぶさんの挨拶で始まったのだが、ここで今回の主旨をようやく正しく理解した。 今回は、Seasar関連のプロジェクトのうち、まだ始まったばかりのものを集めて、 紹介して、コミッターなり、協力者なり、ユーザーなりを募集しようというものらしい。
普通は、イベントの1コーナーとして、そういうのをやったりすると思うんだけど それだけで、1つのイベントにしてしまうところがすごい。
Seasar 関係のイベントを秋に予定しているらしい。
以下、各プロダクトのメモ。
S2Kestral。JDK1.3対応Seasar2。だからDIとか正規表現とか知らなくても大丈夫らしい。 前回も思ったんだけど、キムキムさんは面白い。
S2JMS と S2JCE。 MQなどの非同期メッセージを扱う。 ロジックは、POJOがそのまま使えて、MQなどの情報は、diconファイルに封じ込めておける。 なので、多分、ロジックの単体テストはPOJOそのものなので、非同期メッセージを意識することがないので楽。 モデルはさっぱりわかりません。
Trickle。 ワークフローエンジン。 ワークフローのルールをdiconファイルに封じ込める。 これは、ワークフロー用diconファイルの編集ツールがないとつらそうな気がする。
S2Cayenne。 Seasar2のトランザクションとCayenneを組み合わせる。 S2DAOと同じ位置にあるもの。
S2PHP5。 Seasar2のPHP5版 DIとAOPを実現。 PHPでDIコンテナは他にもあるらしい。 diconファイルは、Seasar2スタイルでも、PHPの設定ファイルスタイルでも書けるらしい。 backport175からヒントを得てSeasar4(?)の機能も実現したらしい。 backport175って何?
S2.NET。 Seasar2の.NET版。 .Net1.1で動くらしい。DIとAOP。 S2ASPとか、S2ADO.Netだとか野望は盛り沢山。 ASP.NETやADO.NETのポトペタによる手軽さは失なわないようにしつつ、 Seasar2を.Netに組み込もうという戦略。 そういう戦略を取らないと受け入れられないだろうなあ。確かに。 Visual Studio のプラグインの形で、kijimuna.Netを実現したいと言ってたけど、 Seasar4相当の機能が実現できれば、kijimuna.Netの必要性は薄れていくような気もする。 「設計と実装の狭間で」は何かで見たことがあるような気がする。
Seasar4(?)。 diconファイルが面倒だから、書かなくてもいいようにしようというのが目玉。 あらかじめ決められた規約に従って書けば、自動設定でできるらしい。 (規約がどんなものか良くわからなかったので、それ以上説明できません。) で、どうしても書きたいときは、アノテーションを使えばいいそうだ。 つまり、今まで別ファイルに書かなきゃいけなかったものが、ソースの中にコメントとして 書くことにより、バラバラのファイルを管理しなきゃいけない繁雑さから逃れることができる。 これは、結構、嬉しいんじゃないかと思う。 で、backport175って何?
Kvasir/Sora。 Zope風のコンテンツ管理ができるWebサービス。 DIコンテナベースで、EclipseライクなPluginアーキテクチャを採用している。
Maya。 JSPと同じようなもの。 純粋なHTMLファイルから動的画面を生成する。JSPに依存しない。 未踏に採択。 広めるための戦略としてStrutsを意識している。 Groovletって何?
Javaは、この前、JCE 1.2.1 の問題でちょこっと関わったぐらいで、本格的には触らないし PHPも今のところ触ってない。 (偶然、この前、職場で、PHPという言葉を耳にしたんだけど...。) .Netだけは、ひょっとすると触ることになるかも知れない。 なので、好奇心から、S2.Netをダウンロードぐらいはするかも知れない。
今回、いろんなプロダクトが紹介されたんだけど、根底にあるのが Seasar2で、 今さらながら、私の中で、Seasar2が何なのか、逆に浮かび上がってきたような気がしました。
あと、はぶさんみたいな人は、今、Ruby界にいないよなあと思ってしまった。
以上、とりあえず、手書きのマインドマップを見ながら書いてみました。
そう言えば、私の斜め前の席に座ってらした方が、 ノートPCで、マインドマップを作成するエディタらしきものを画面に表示してたんだけど、 あれは、何というソフトなんだろう?
Seasar4の話を聞いて、InvokeVerbの問題は、アノテーションみたいなので、 指定できりゃいいじゃんと無茶苦茶なことを考えてしまった。
それはさておき、_invoke メソッドに第4引数を指定させるというのを考えた。
_invoke(id, [arg1, arg2], [VT_XXX, VT_XXX], [VT_BYREF, VT_BYVAL])
つまり、第4引数で、値渡しか参照渡しか指定させるというもの。 省略時は、全部参照渡し。結論から先に言うと却下。 1つの引数だけ値渡しにするために、第4引数で、値渡しか参照渡しか全部指定させるのは面倒。
今、候補になってるのが、Hashを使うというもの。
_invoke(id, [arg1, {arg2 => VT_BYVAL}], [VT_XXX, VT_XXX])
でも、なんか、しっくり来ないのは何故だろう。
昼休み、突然、携帯に連絡が入った。 何事かと思ったら出張でこちらに来ているとのこと。 急遽、近所のファミリーレストランで昼食をすることにした。
夜、会社に戻って仕事をしなきゃいけないとのことだったので、残念ながら 夕飯を一緒にしてゆっくり話すということはできなかった。
もう少しヒントが欲しいです。 手がかりが無さすぎ。
「2分でできることはすぐやる。」を実践しようとすると「これは、2分でできる?」 と自分に問いかけながら、仕事することになる。 さらに「次の行動は?」と自分に問いかけながら仕事すると、 なんか脳を使っている気がしてくるから不思議だ。 充実しているような気がするのだけど、それは錯覚かも知れない。 ストレスなく仕事ができてるのかどうかは微妙。 常に自分に問いかけていることで、自分を変に追い詰め、ストレスがかかっているんじゃないかと気になる (←つらいとか苦しいとかは感じないけど)。 どこかやり方を間違えてるのかも知れない。
このやり方だと、自分がどの仕事をどれくらいやったのか、後から追跡するのが大変。 やっぱり、どこかやり方を間違えてるのかも知れない。
値渡しと参照渡しの区別をするために _invoke に手を加えるというのを漠然と考えている。 _invoke では型情報を渡せるようになっている。 それに加えて値渡しか参照渡しかを指定できるようにすればいいんじゃないかと漠然と考えている。 ただ、_invoke のインターフェースをどうするか、いい考えが浮かばない。
『仕事を成し遂げる技術』でも出てきたマインドマップ。 まだ、一度も書いたことがないんだけど、会議の議事録用とか、慣れるとすんなり書けるんだろうか。 書こうとすると、中心の話題(主題)は何?とか、そこから派生しているのは? この人の意見は、どこに位置する? とか考えないといけない。 確かに、ぼーっと聞いてることができず、集中はできそうである。
字が小さくて、ちょっとわかりづらいこと(『パイロットが...』の後だから余計にそう感じるのかも。)に我慢して、 PART2まで何とか読み進めれば、後は、それなりに読み進められた。 副題に「ストレスなく生産性を発揮する方法」とあるのだが、 読んでいるうちに、あれやこれや棚上げにして心の奥底にしまいこんでいたことが急に気になりだして、 かえってストレスを生み出すという罠。 このストレスから逃れるには、もう実践するしかありません。
実際のところ、週末にこの本を途中まで読んで、今日はいてもたってもいられなくなり、 会社で机の引き出しの中を整理し始めてしまいました。
物をすべて一箇所に集めるということだけは頭の中でわかったけど、 その後の処理、整理、再検討、実行を具体的にどうするか頭の中ですらわかってない。 実践しつつ読み返してみる必要があるな。
ともかく、今まで、ほったらかしにしていた細かいことが余計に気になりだして、 このまま、何もしないでいると逆にストレスが増えそうなので、何とかしなくてはいけません。
「四の五の言わずに読むべし」ということなので、読んでみた。 わかりやすくて、面白い。テンポも良くてさらっと読めます。 パイロットの世界の話ではありますが、ソフトウェア業界にも当てはまることが多いんじゃないかと思います。 一読の価値あり。
仕事柄、駄目な点を指摘することが多いんだけど、誉めることも心掛けようと反省。
バージョンアップ。 ついでに、gcc だとか古いバージョンだったものを最新版にした。 追加インストールしたのは chere。 chere で cygterm を出せるだろうか。 chere は rxvtをサポートしているので、期待しないでもない。
gcc をバージョンアップしたので、まずは、Ruby をコンパイル。
Cygwin上で、gcc -mno-cygwin を使って、mingw版 Ruby をコンパイルしようとしたら、 ext/enumerator のコンパイルでエラーが出た。 現象は、[ruby-dev:26232]と同じ。回避方法も[ruby-dev:26232]と同じ。
ところが、[ruby-dev:26243] という情報があったので、どうもおかしいと思って見直してみたら、
configure --build=i386-mingw --host=i386-mingw --target=i386-mingw
としていた。
configure --build=i686-cygwin --host=i386-mingw --target=i386-mingw
と修正した。
確認とか、あれやこれやで、何回もコンパイルしたので、かなり時間がかかってしまった。
シェルスクリプトだった。 regtoolを使ってレジストリを書き変えている。 chere を参考にすれば、cygterm 用の設定もできそう。
すいません。[ruby-list:40890] の件、まだ、ちゃんと調べてません。 どうも、Win32OLE が InvokeVerb にちゃんと引数を渡せていないような気がしてます。
それはともかく、Win32OLEのバグを見つけてしまった。
ひょっとして、Perl 4 だと
/^\s+$/ =~ $line
じゃなくて
$line =~ /^\s+$/
と書かないと駄目ですか?
ちょっと考えるところがあって、Ruby のスクリプトを Perl に移植。 Perl 4 だとヒアドキュメントは使えない? ひょっとして、chomp も無い?
open したファイルハンドルをクローズし忘れていて、Perlスクリプトが変な挙動をして、 しばらく悩んでしまった。
Ruby だと
File.foreach(file) do |line| ... end
とか
open(file) do |ifs| ... end
とかやっちゃうから、close は、あまりしないんだよなあ。
Ajaxのまとまった記事があるのが良かった。
JSFとStrutsが比較の対象になるというのが新鮮だった。 JSFというと何となく、JSPの延長という感じがしていて、Strutsとは守備範囲の違うものというイメージがあったのです。
2ヶ月以上振りに、cvs update して make しました。
Subversionへの移行を検討してはどうかという意見が出た([ruby-dev:26421])ので、 できるだけ新しいのを取れるときに、手元に取っておこうと焦ったためです。
私はSubversionを使ったことがありません。 移行されたら、きっとSubversionを使えるようになるまでに、しばらく時間がかかるはずです。 (Subversionの導入時間とか学習時間とか。)
今は、焦る必要は無かったかと思い始めております。
これを機会にSubversionを導入して、 Subversionに触れてみるという方向に思考が進まないところが駄目なところです。
『ななつのこ』、 『魔法飛行』に続くシリーズ。 前作から10年以上経ってますが、話の中では、わずか一週間しか経っていません。 「スペース」と「バックスペース」の2編が含まれていますが、「バックスペース」は「スペース」の裏話という感じ。 あまりミステリミステリしてないので、それを期待していると物足りないかも。 後味はいいんだけど、「バックスペース」は、ちょっとでき過ぎの感あり。
作者のオススメどおり、『ななつのこ』、 『魔法飛行』を先に読み返しておいたので、 ニヤリとできる部分があって良かった。
再読。『ななつのこ』の続編。 連作短編ミステリだが全体として一つの長編ミステリになる構成は 『ななつのこ』と同じ。 短編にちりばめられた、さりげない手がかりを元に、長編ミステリの謎が解かれる過程は、まさに魔法。 短編と長編の絡ませ具合の点で勝っている分、『ななつのこ』よりこちらの方が好み。
これで準備は整った。