Yahoo! Widget Engineがヘボい

ふと,いわゆるWidgetというやつを作ってみようかなと思いたちました.

とはいってもうちのWindowsはVistaではないものですから,他のWidget Engineを使わざるをえません.
まあ,とりあえず妥当なのはYahoo Widgetsかなと思って入れてみました.
大体こんな雰囲気ですけれども.

 天気予報はコレです. なかなかきれいでおすすめ.アイコンもMacのより凝ってるかも.

で,ボクの目的はWidgetを作ることだったので,ためしに作り始めてみました.
したら,このEngineが出鱈目なんですよ.
以下,その愚痴が続きます.

まず,WidgetにはメインのWindowオブジェクトがあり,その下にフレームを配置していくという設計になっています.こんな感じ.

 
 

コントロールはFrameとTextareaとImageだけみたい.
まあ,それはいい. 

で,Windowオブジェクトには,ルートとなるFrameを取得するためのrootプロパティーが用意されているとドキュメントには書いてあるんですが,ない.
しかも,あるFrameの子のオブジェクトのコレクションとしてsubviewsプロパティーがあると書いてあるんだけど,それもない.

さらに,Frameに子を追加するメソッドとして,addSubviewというのがあって,これはまあ動くんだけど,次のコードでは子がちゃんと追加されない.

var img = new Image();
img.src = "some path or url…";
frm.addSubview(img);

なぜ追加されないんだろう?と調べてみると,どうもImageのインスタンスがスコープから抜けた時点で開放されちゃってるくさい.
グローバルに配列を用意しておいて,それにpushしたら表示してくれる.
普通,リファレンスカウント増やすだろ・・・
どうも,コントロールを管理する気がないようだ.

それから,XMLDOMでもハマった.
PerlのSOAP::Liteを使ったXMLRPCサーバーに対して,YWEのXMLDOMでリクエストを作って送るとエラーになる.

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
  <methodName>
    mt.supportedMethods
  </methodName>
  <params/>
</methodCall>

こっちなら大丈夫.

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
  <methodName>mt.supportedMethods</methodName>
  <params/>
</methodCall>

どちらもXMLとしては間違っていないけれど,SOAP::LiteのXML parserはinnerTextをtrimしてくれないようだ.
まあ,どっちかというとYWEのDOMがその辺を意識していないのが悪いんだろうけど.
なんかこういう無頓着に作られたものって嫌だね.

キレイに見えるWidgetも裏ではこんなドロドロなんだなぁ,というか,こんないい加減な仕様だからはやんねーんじゃねーかとか.
Vistaのはこんなヘロヘロじゃないんだろうなぁ・・・

Author: _fp

Software Engineer Place: Tokyo, Japan Skills: C, Javascript, Objective-C, Perl, Clojure, Java, PythonErlang, Haskell, OpenGL Twitter: _fp