トップ «前の日記(2004-02-11) 最新 次の日記(2004-02-13)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2004-02-12

_ Win32OLEでIEをフル活用するには

ASRではできるが素のRubyではできないと言う理由はWin32OLEが、RubyのObjectを変換できないからだ。
実際、引数としてIDispatch*を取るメソッドなんてちょっと考えにくい。と言うのは、そのためにはコネクションポイントがあるからだ。
とは言うものの、IEのイベント登録メソッドのように例外的なメソッドもあるのだから、ASRだけではなくWin32OLE自身も返せるほうが良いのではないか、と考えた。
追記:良く考えたらWIN32OLE_EVENTと共通化できる部分があるのでリファクタリング中(元のパッチは削除)
微妙に共通化できなかった。ここ
Ruby内での例外の処理とかはしていないが、これでOK。
例)
require 'win32ole'
class EventReceiver
  def method_missing(*arg)
    puts arg[1].srcElement.tagName + ' was clicked'
    if arg[1].srcElement.tagName == 'H1'
      exit
    end
  end
end
ie = WIN32OLE.new('InternetExplorer.Application')
ie.visible = true
ie.Navigate(ARGV[0])
sleep 1 while ie.readystate != 4
doc = ie.Document
doc.attachEvent('onclick', EventReceiver.new())
begin
  loop do
    WIN32OLE_EVENT.message_loop
  end
ensure
  ie.quit
end
試して見る。
C:\Home\arton\test>ruby ie2.rb http://www.ruby-lang.org
P was clicked
H2 was clicked
H3 was clicked
IMG was clicked
H1 was clicked
バイナリーはここ。ASRなどのMSWin32-VC++6 ならそのまま入れられる。
追記:処理が甘いので、なんでもmethod_missingになる上にarg[0]が異常値になるな……
追記の追記:この問題は解消させて、無名メソッド呼び出しは'call'というメソッドに割り当て(ASRと同じ)。したがって、例は以下のように変更可能。
require 'win32ole'
class EventReceiver
  def call(arg)
    puts arg.srcElement.tagName + ' was clicked'
    if arg.srcElement.tagName == 'H1'
      exit
    end
  end
end

さらに追記:ALLOC*で確保したブロックにVALUEを格納するとGC対象になっちゃうんだっけ? そのあたりは非常に自信なし。できれば、スクリプト側で対応して欲しかったり。
例)
doc = ie.Document
doc.attachEvent('onclick', EventReceiver.new())
↓
doc = ie.Document
$handler = EventReceiver.new()
doc.attachEvent('onclick', $handler)
さらに追記: 中田さんの指摘以後のスレッドで修正が入りました。やっぱり、gcの考慮がだめだったか。

_ 用語を構成する単語の一部

ソーシャルネットワーキングと来ると「ソーシャル」に反応してしまうし、「デペンデンシインジェクション」と来ると「インジェクション」に反応してしまう。

どうも、最初に出会った言葉のイメージが強いらしい。

_ どうもありがとうございます

というかそれまでがひどすぎ?

アンビバレンツとして、「おお、なんてすっきりしたんだ! もうCOMいらねー」というMSウォッチャーの感慨と、「ちぇ、コモディティになっちゃったよ。次の分野をハックしなきゃな」という職業プログラマの感慨が入り混じったり。

その他に、Javaと比較した場合の1番の長所は、まったく高踏的じゃない点というか、これっぽっちもアカデミズム臭を感じさせない点で、逆にJ2EEな人(ノットイコール プログラマ)にはそれが気持ち悪く見えるのではないかとか、その間隙を補うために、ASP.NETはMVCですよのようなホワイトペーパーを用意したりとか、実にいろいろなことをやっているのが興味深いです。

反高踏的なことはもしかしたら重要なことかも知れず。もちろんそれはVBの成功体験に基づく今となってはダメダメなものかも知れないし、やはり今でも有効なことかも知れません。アップルのレスト オブ アスと結局は同じ戦略だと思います。

すなわち、無数のVBプログラマーとそれに見合った設計者達にとっては、パターンもアーキテクチャも分析も何もなく、ただ突進するのみだったりすると仮定すれば、きちんとした戦略を持ってことにあたることは「学者ウゼー」なのではないでしょうか?

マーケティング的にはダブルスタンダードな気がします。片方にはホワイトペーパー群があり、片方には簡単楽勝超便利がある。

これが単なるダブルスタンダードなら斬って棄てればいいだけなんですが、マーケティングピープルではなくデベロッパー(この場合は)テクニカルライターと呼ばれる立場には、ダブルバインドになってしまい、極めて微妙な感じです。しかもメタメッセージが簡単楽勝超便利ならまったく問題ないわけ(と思う)なのにメタメッセージがそれなりにかっちりしたモデルなのがややこしいところ。メッセージだけ素直に取ると痛い目に合うのは例によって見えているけどかといってメタメッセージをどこまで出して良いかが難しい。

ダブルバインドへの処方箋のうち、もっとも簡単なことは逃げることだったりするので、今はJavaで安心というのが微妙にあったりするのかも。後付けだけど。

この文章のわけわからなさが、.NETに対するダブルバインド状況そのものですな。

#好きなんだけどね。文句なく。うん、.NET好きだな。

_ 昨日のこと

羽生さんの宴会に行った。

WEB+DB PRESSから仕事を頂いたときに見本としてもらった11号に羽生さんのRDBについての記事があって、そのときからすげぇ人だな、と思っていたからだ。この記事で1番興味深いのは過去のRDB(というよりSQL)の歴史的インパクトについて語っている部分が、微妙に現在のMDA(というよりVisual Framework)に重なっている部分なのだが、それはおいておいてもWEB+DB PRESSの想定読者層に対して良い視点を与えると考えられる点が多々あったからだ。ようするに、問題の立て方とその記述方法、その基礎となる知識のバランスがとてもよく取れていると感じたということだな。

実際にどんな仕事をされているかは、日経IT Proとかにも出ていたりするが、しかし「無償」ってのはもしかしたらバズワードなんじゃないか? 実際に無償のものなんて愛くらいしかないだろうって、それも怪しいが、この反応は記事の見出しについてだ、と誤解を受けるといやなので断ってはおく。

で、それはそれとして、妙にたくさん集まったので、もっぱらひがさん高井さんからIoCについて話を聴く(話すじゃなくて「聴く」なのは、文字通り、ここではじめて得た知識のほうが多いからだ)。

しかし、本当に喫煙者は少ないな。

_ ちょっと待った

POJOの読みとしてポホは間違いとして取り下げます。

が、ちゃんと調べたので自信を持って「ポヨ」を推すことにします。

ポヨちゃん万歳。

_ 執筆記事目録

も作ってみた。

本日のツッコミ(全3件) [ツッコミを入れる]
_ babie (2004-02-12 18:14)

RubyやSchemeに出会った時のような感動がありません>.NET(C#)。それなりに楽だし、好きなんですが。

_ arton (2004-02-12 19:04)

なるほど、「その感動させない点こそMSの戦略なのだ」と言い換えることもできそうだと思いました。<br>ちなみにILの仕様を見ると感動します(ただし、僕はJavaの中間言語をちゃんと見てないので割り引く必要は大いにありますが)。

_ uno (2004-02-12 23:19)

昨日はありがとうございました。ポヨ(スパニッシュ) vs ポジョ(イタリアン)だと使用人口で考えてポヨの方が分が良さそうな気がします。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|

ジェズイットを見習え