2005/10/27(木)ApolloのPanelでinitializeがオーバーライドできなかった理由

class MyPanel < Phi::Panel
  def initialize
    # ≪処理≫
  end
end

MyPanel.new
というコードを書いたのだが、≪処理≫が実行されない(本来なら処理の前にsuperを書くが、わかりやすくするために削った)。

で、この場合newで呼ばれるのはPhi::Panelのコンストラクタのようで、オーバーライドしたはずのinitializeを通らない。

これはどうやらPhi::Panel上でnewが再定義されている所為らしい。下はGtkの記事だがApolloでも似たようなことをやっているのではないかと推測。再定義したnewはinitializeを呼ばないという解釈で良いと思う。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5885

いやちゃんとソース読んで無いので確証はないのだが(読み方すら分からない)。

ということで、
class MyPanel < Phi::Panel
  def MyPanel.new
    # ≪処理≫
  end
end

MyPanel.new
としてやれば願いが叶う。newはクラスオブジェクトのメソッド(こういう言い方でいいんだっけ?)なので、def newではなく、def MyPanel.newと書く。superは省略したが、ちゃんとやるならもちろん返り値の設定までしてやらなきゃいけない。
ret = super
≪処理≫
ret
≪処理≫の中でプロパティいじるような目的がほとんどだと思うので、こんな書き方が定番になるんだろう。initializeと大きく異なるのはこの中でselfを呼ぶとクラスオブジェクトが返ってくることだ。
class B
end

class A < B
  def A.new
    ret = super
    p self
    ret
  end
end

p A.new

--出力--
A
#<A:0x2bb42c8>
つまりこうか。

プロパティを設定するときはsuperの返り値(ここではret)に対して設定してやらなきゃならない。

#追記
newからinitializeを呼んでやった方が汎用性が高い。

2005/10/20(木)RAIDをStandard IDEとして使えるのかどうか

2005/10/20 16:00 PC(全般)
RAIDを構築せずに単独のIDEデバイスとして使えるかどうか。

調べた結果、「ほとんどのチップで単独のIDEデバイスとして使える機能はついているが、それが使えるかどうかはBIOS・ボードディップスイッチ次第」という結論でよさそう。つまり一概に言えない。

また、特にSATAのオンボードコネクタに関しては、
「Intel系ではサポートされているものがほとんどだが、それ以外のチップセットではBIOS次第」という気配だ。これはチップセットメーカーが提供したリファレンスBIOSで違いが出たんじゃないかと予想。

intel系
http://review.ascii24.com/db/review/hard/videocard/2005/02/24/654390-003.html

VIAの話

VIAチップセット総合スレPart7
http://pc7.2ch.net/test/read.cgi/jisaku/1114019974/175-188

別にシングルIDEデバイスとして使えなくても、スパニングやRAID0だか1だかわかんないArrayが作れるので、そのマシンでトラブル無く使えている限り問題は起きない。がしかし、ひとたびトラブルが起きると(特に金と時間がないとき)死ぬほど復旧がめんどくさくなるのでこの機能があるものを選ぶ方が良いだろう。いろいろ探してみたが、Arrayを作ってしまうと、技術的には簡単そうなミラーリングやスパニングですら簡単に単独のIDEデバイスに戻す方法はないようだ。

で、確認のためには、カタログスペックだとわからないのでマニュアルダウンロードでBIOSの項目を読むしかなさそう。

2005/10/20(木)codec pack

2005/10/20 12:00 PC(全般)
ffdshowは所詮互換codecに過ぎないので、こっちを使った方が良いかもしれない。
ffdshowだと軽くなることもあるが、問題が起こったときに切り分けが大変だというのは経験談。

K-Lite codec pack
http://home.hccnet.nl/h.edskes/mirror.htm
http://home.hccnet.nl/h.edskes/mirrorold.htm

DivX等も入っていて、これ1つで済むのは便利。

古いのは下。だいたいFullで十分でMegaは行き過ぎっぽい。
これグレイだよな多分。

なお、インストール時にコーデックを選択可能で、すでにインストールされているものに関してはアンインストールを指示される。拒否するとそれについてはK-Liteからインストールできない。

本来のコーデックインストーラに言語選択があるようなものでも全部英語になる(ちゃんと確認してない)。

2005/10/13(木)Apollo把握

VCLをそこそこ使ってきてかつVCL_B6なる優秀なリファレンスを持っている私にとっては、Apolloの使い勝手はvisualurubyに勝るようだ。Apolloについて少し調べてみた。

・VCL全てが網羅されているわけではない
 無いコンポーネントがある。例えばTControlBarは実装されていないようだ。ただし、VCL6再配布可能ライブラリで使えないもの、Win9x系のコンポーネントが大半であるようなので大きな問題にはならないか。
 無いプロパティ・メソッドが一部ある。Rubyで実装した以上必要なくなったものもあるはずなので、問題が出るかどうかは今のところ不明。

・クラス・メソッドの命名規則はRuby側に直されている
[参考]
ap-doc@freeml.com/0000009" TARGET=_top>http://www.freeml.com/message/ap-doc@freeml.com/0000009

・VCLのグローバル関数は引数の順番や有無が変わっている
 主に混乱しそうなのはメニュー関係。とりあえず下を見る。
http://wiki.fdiary.net/apollo/?Phi-Functions#l51

・VCLにない機能も備わっている
 ただしドキュメントが少ない? on_drop_filesは最初無いのかと思ってしまった。
http://wiki.fdiary.net/apollo/?tut-tut_intro
ここのクラスブラウザーはwindowsではどうも動かないような気配だし、今のところmethodsやconstantsをうちながらいちいち確認している。

とりあえずこれくらいを把握しておけば簡単なGUIは組めそうである。

2005/10/11(火)visualurubyのWindows系定数について

winconst.rb, vrcontrol.rb, vrcomctl.rbあたりに書かれている。で、Visualurubyそのものには解説がないので調べ方。

要はWIN32API(?)のラッパーなので、
http://yokohama.cool.ne.jp/chokuto/urawaza/message/index.html
http://yokohama.cool.ne.jp/chokuto/urawaza/prm/window_style.html

ここら辺で調べる。表示例付のリファレンスはあんまり見当たらないな…… その点ではVCLリファレンス、
http://www.kanazawa-net.ne.jp/~pmansato/VCL_B.htm
が優秀だが、対照検索しなければならないのはさすがにきつい。

最近のMSDN はそこそこ軽いのでオンラインを厭わなければまあそっちでもいいか。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_structures.2c_.styles.2c_.callbacks.2c_.and_message_maps.asp

2005/10/06(木)rdocを使ってみる

RDはどうしてもなじめなかったが、じゃあrdocはどうだろうということで使ってみた。
何も考えずにコメント書いても通るのはけっこう好み。

今の作り方はこう。
rdoc -o <出力パス> -c shift_jis -T kilmer *.rb
  • Tはテンプレートでkilmerの方が若干見やすいが、出力しない項目もあるのでテンプレートを指定しない場合と見比べて好みのものを選べばいいだろう。
1.8.2ではインストールが悪かったのか、method_list以下を出力してくれなかったのだが、1.8.3をインストールし直したところそれは直った。

とりあえず目についたところで定数(constants)を出力しないのを直した。というかほとんど単なるコピペ。
>diff kilmer.rb.orig kilmer.rb 

310a311,330
> IF:constants
> <table cellpadding=5 width="100%">
> <tr><td class="tablesubtitle">Constants</td></tr>
> </table>
>       <div class="name-list">
>         <table summary="Constants">
> START:constants
>         <tr class="top-aligned-row context-row">
>           <td class="method-name">%name%</td>
>           <td>=</td>
>           <td class="context-item-value">%value%</td>
> IF:desc
>           <td width="3em">&nbsp;</td>
>           <td class="context-item-desc">゙sc%</td>
> ENDIF:desc
>         </tr>
> END:constants
>         </table>
>       </div>
> ENDIF:constants
(すんませんKShikiのタグ置換に引っかかって見られません。ソース表示なら…)

ところで私はよくこういうコードを書いてしまうのだが、
class square
  def initialize(w, h)
    @width = w
    @height = h
  end

  def get_area
    return @width * @height
  end
end
rdocだとこの場合のインスタンス変数は出力してくれない。
それが当然のような気もするし、出力して欲しい気もする。

<rdoc書き方>
http://www.kmc.gr.jp/~ohai/rdoc.ja.html
OK キャンセル 確認 その他