gtk+版を作る前にWindowsでCOMコントロールで同じのを作ったが,5分でできてた。gtk+,生産性悪いなぁ。MyClockImpl#paint()は長いので,COMコントロール版。C化しただけで,内容は変わらない。height);}タイマーを生成して,1秒ごとに表示を更新する。widgetが破壊されるときにタイマーも破棄する。KaraokeBoxをHORB-IIOP化してみる。日本語ホームページクラスKaraokeBoxがリモートにあり,ここからMusicを取得してplay()する。}};またもや出てきたIOR。HORBでは*_ProxyクラスにIORを渡してプロクシ(代理オブジェクト)を取得する。プロクシを取得すると,あとは普通のJavaクラスのように使える。}};HORB-IIOPではCORBAの制約からJavaクラスインスタンスをやり取りできないので,Musicクラスをメソッドを含むMusicとデータのみのMusicDataとに分離し,MusicDataをやり取りして,クライアントでMusicを再構築する。melody;};MusicDataを何かから派生させる必要はない。}};前述の通り,クライアントはサーバーからMusicDataオブジェクトを受け取り,Musicインスタンスを構築してplay()する。HORB-IIOPを利用するので,CORBAクライアントからKaraokeBoxを呼び出してみる。}};いつものようにIORを指定してサーバーに接続する。代理オブジェクトを取得した後はローカルオブジェクトと変わらない。HORBクライアントと比べてみよう。「Bonoboの概要」は,別ページにまとめた。このページの内容は、ruby-libpngへ移動しました。CORBAここんとこずっとCORBAづいてるが,当面の目標はGNOMEシステムでコンポーネントを幾つか制作し,簡単なメモ帳だか何かを書くこと。GNOMEシステムでWindowsのCOMに相当するのは(恐らく)Bonobo/ORBitなので,この辺を中心に見ていくことになるだろう。いいながら今日はJava。リモートオブジェクトが複数のインターフェイスを実装しているかを実行時に調べたいことがある。activationできるとか。インターフェイスから。Echo2インターフェイスをサポートしているかリモートオブジェクト自身に問い合わせ,インターフェイスを取得してみよう。リモートオブジェクトの取得は次のインターフェイスで行う。obj);};ObjectFactoryリモートオブジェクトにIIDを与えると,サーバー側で新しいリモートオブジェクトを生成し,それを返す。OAFがやってるのは恐らくこの部分。createObject()メソッドでリモートオブジェクトを取得する部分。BaseObjectHelper.narrow(holder.value);factoryはこの前でorg.omg.CosNaming.NamingContext#resolve()で取得してある。JavaではC/C++のようにvoid**とはできないので,BaseObjectHolderインスタンスを介して取得する。次はここで取得したオブジェクトからインターフェイスを取得する。Echo2Helper.narrow(holder.value);リモートオブジェクト自身に問い合わせている。エラーチェックは手抜き。して取得したインターフェイスで処理を行う。試しに"Echo"で取得したオブジェクトをEcho2Helper#narrow()しても問題なかった。この場合はリモートオブジェクトが両方のインターフェイスを実装しているからいいのか。リモートオブジェクトがインターフェイスを実装したクラスのオブジェクトを所有してると不味いか。}};queryInterface()メソッドで動的にインターフェイスが使えるか判定している。(Mon)下半期の進捗,目標の確認などで上司と面談。ふにゅー,来期のスタートに余裕を持たせようと思うとスケジュール前倒しよね。今回はぐっと身近な題材でやってみた。「Bonoboのインターフェイスモデル」は,別ページにまとめた。「COMオブジェクトとBonoboオブジェクトとの実装からの比較」は,別ページにまとめた。(Fri)サンTVでスタートレックTNGと思しき番組をやってた。WebデザインJavaScriptで何かを書いてみる。Objectsぐらい。したプルダウンメニュー。関係ないコードも入ってるが気にしない。background-color:#00ffff;">ここはレイヤーです。onMouseOver="showPopupMenu(2)">mark2</a></div>なんかまだ途中。要素のスタイルを適切に設定すれば,メニューの表示はそれほど高度な技は必要ない。要は,何かしら小さなウィンドウらしきものをメニューバーで選択したメニュー項目の下に表示すれば,プルダウンメニューに見える。CSS仕様を読むと,positionプロパティをabsoluteにして,Zオーダーを上げ,あとはメニューバーの位置にそれを表示すればいいことが分かる。上の例ではポップアップするメニュー自体はただのDIV要素であり,style属性でpositionプロパティをabsoluteにし,visibilityで不可視にしていること以外,変わったことはない。JavaScriptからHTMLの要素のスタイルを操作するのはどうするか。DOM水準2ではHTML要素のSTYLE属性の内容を示すことになっている。2.2.3)DOM2ではstyleオブジェクトはCSSStyleDeclarationインターフェイスを実装することになっている。5.5は少なくてもsetProperty()メソッドが実装されておらずエラーになる。Mozillaでは動作する。zIndexなどCSSのプロパティに対応したメンバを持っている。可視・不可視,Zオーダーについてはこれを利用することができる。style.topがどうも美味くない。5.5ではSTYLE属性で明示的に指定した値が返るので,STYLE属性がない要素ではnullが返るし,そもそもページ先頭からのY座標は取れない。各オブジェクトのoffset*プロパティで要素の表示位置,大きさを取得する。ポップアップメニューからマウスポインタを離すとメニューが消えるようにしたい。その一方で一瞬だけ離れた場合には消えない方が望ましい。ポインタがメニューを離れたときにwindow.setTimeout()でコールバック関数を登録し,タイムアウトするまでにメニューに再び入った場合を除いてメニューを隠せばいい。DOMを用いるとHTML文書の構造に手を入れることができるが,コードがやや長くなる嫌いがある。createElement()などしている部分でメニューをつくっている(上の例では1行だけだが)が,単純なものならdocument.write()した方が見通しが良くなるかもしれない。今日のリンク逆リンク。Webデザインメニューバー完成。トップページの先頭にある[downloads]などから直接跳べるようになった。M18-2000111420でしか確認してないので,他のWebブラウザだとエラーになるかも。おおむね昨日の通りだが,少し追加,変更した部分がある。JavaScriptファイルをHTMLファイルと別ファイルにして,script要素で取り込むようにした。charset="Shift_JIS"></script>メニューは動的に生成する。配列を用意してメニューの集合をつくる。'board/'));これをA要素に作り替えればいい。ArrayオブジェクトはECMAScriptで定義されている。ポップアップメニューも同様。どのメニュー項目からポップアップするかで内容を変える必要があるから,動的に生成する。}DateオブジェクトもECMAScriptで定義されている。この配列からポップアップメニューを生成する。--></div>HTMLファイルにレイヤー化する要素を仕込んでおいて,ここへA要素を加えていく。(Sun)バンドの練習。