Ruby言語やLinuxのネタが多いです。
August 01, 2003 [おもひで]
■ [Misc] GUIは継承使わない!?
バカが征くより。
#酔っぱらってるとのことですが...。
まぁ、コンポーネントのサブクラス作るっつーのは、かのM.Fawler氏でさえやっちゃうんだから、大目に見ないこともないんだけどね。でも、Tcl/Tkでもやったほうがいいんじゃない? まじで。GUIやるのに継承なんて滅多にいらないんだから。
■ まじっすか。オレ、GUIで継承使いまくりなんですけど(汗。
■ GUIの部品をいくつも集めたモノを新たに1つの部品として再定義するという意味で、コンテナクラスのサブクラスを作ることが多いんだよね。そうすることで自分的にはかなり頭の中が整理されると思ってるんだけどなぁ、ダメ?
Ruby-GNOME2 Project Websiteにあるサンプルスクリプトとかも継承使ってないの無いんだけど、例として不適切なのかな、ひょっとして。
■ よく考えてみると、オレって人からまともにプログラミングのこと教わったこと無いんだよね。特にGUI周りとか。
いっそのこと、誰か適切なサンプルに書き直してくれると助かるんだけどなぁ。それ見て勉強させてもらうし(^^;)。ってか誰かこっそり悪いところを指摘してくれ〜。マジで。
August 02, 2003 [おもひで]
原則的に、メソッドをオーバーライドする必要がなければサブクラスを作る必要はありません。機能の追加だけならば合成でも可能です。
頭の中を整理するためには必ずしもクラスはいりません。名前があればいいのですから、それは変数名やメソッド名であってもいいわけです。
Javaで恐縮ですが、下のコードでは、ボタンを並べるためにPanelというコンテナを使っています。ここでは、Panelが本来持っている機能の他には必要なものはありません。ですから、ButtonPanelというサブクラスを作るのではなく、単にgetButtonPanel()というメソッドを用意しました。
ButtonPanelというクラスを用意するのとgetButtonPanelというメソッドを用意するのとで、頭の中の整理の度合が変わるとは思えません。
■ 実はサンプルとしてあげていただいた例では私もButtonPanelをPanelのサブクラスとして定義することはないと思います。ただ、それはどちらかというと粒度の問題じゃないかと思っていて、Testクラス自体(が結構複雑)であればそれをFrameのサブクラスにすると思います。
理由は、前回も触れましたが「GUIの部品をいくつも集めたモノを新たに1つの部品として定義する」ということです。従って、getFrame()というメソッドを用意してFrameのインスタンスを返すよりもnew Test()とだけして、後はFrameの機能+αを持ったTestというGUI部品を使う、と考えた方が私的にはすっきりするんですよね。
具体的には、JFileChooserみたいなものを作るときに、それをJComponentクラスを継承させずに、GUIとは関係ないクラスを作ってそれのgetFileChooser()というメソッドを作るかというと、やっぱりJComponentクラスを継承させた方が良いんじゃないのかなと。
■ どちらかというと「確かに継承は使わずにも済む」ということより「積極的に継承を使わない理由」が実は一番知りたかったりするのですが...。
#「滅多にいらない」という前回の文脈から、「使わない方がよい」と受け取りました。ここが誤解だったら申し訳ないです。
August 04, 2003 [おもひで]
■ [Ruby-GNOME2] News site watch
ぼちぼちと注目され始めてるみたいです。Ruby-GNOME2 Project Website上のRefererを辿って見つけたモノをいくつか紹介しきます。
Simple Programming - Appletsのところで紹介してくれてます。2003/07/23。
So if you want to make an applet that easy, you can use Python or Ruby. Personally, I would go with Ruby.
I would go with Rubyって言ってくれてるのはとてもうれしいのですが、GnomeAppletってまだ未サポートなんですけど...(汗。
フランスのサイトです。2003/08/02。
Le binding Ruby-GNOME2 de Mutoh & Sakai continue de progresser ...
と、なんと、私とさかいさんを名前入りで紹介してくれてます。全然読めないけど、こういうところに書いてあるんだから悪いことは書いてないよね(^^;)。
日本のサイト。zenityの章で紹介されています。2003/04/29。ちょっと古いか(^^;)。
シェルスクリプトの手軽さと機能の豊富さが、GNOMEのようなデスクトップ環境でも有効となるのである。もちろん、gtk2-perlを使ったperlスクリプトでもいいし、Ruby-GNOME2を使ったrubyスクリプトでもよい。
■ そうそう、それから、すっかり書くの忘れてたんだけど、GNOMEのWebsiteってだいぶ変わったのねぇ、って遅すぎ?
August 05, 2003 [おもひで]
継承については「デザインパターン」で「継承はカプセル化の概念を破壊する」と述べられています。また「クラス継承よりもオブジェクトコンポジションを多用すること」とも。
継承を多用することについての戒めとしては「オブジェクト指向スクリプト言語 Ruby」でも「継承は最後の武器だ」と述べられています。
一応、私もそれなりにその辺の情報は知ってはいます(理解しているかといわれると相当怪しいですが)。ただ、それが今回の場合どう当てはまるかというところでイマイチピンとこないんですよね。もちろん、程度問題という意味で、前回の例で言うところのButtonPanel程度の小さい単位でクラス作るのはどうかなと思いますが。
それに正直言ってこの引用では「お上がそう言っているからそうなんだよ」という感じがして、なんかgreenteaさんのいつもの書き方からすると、相当らしくないような気がするんだよなぁ。いやまぁ私がこんなこと言う立場では無いのですが(^^;)。
もう1つGUIについていうならば、長いコンストラクタという問題があります。自分は長いコンストラクタが嫌いです。不完全な状態はできるだけ短くしたいからです。
長いコンストラクタというのは確かにそうですね。継承することでコンストラクタ内でイロイロと他の部品を生成するでしょうから、不完全な状態は長くなる傾向になると思います。一番納得できました。でも、GUIツールにおいて、各子GUIを生成する程度の時間の不完全な状態が問題になるケースは極めて少ない気がするんですけど...。むしろそれ以外のパターンで問題になるケースが多いような。なんで「GUIについていうならば」なのでしょうか...。あっと、これは好き嫌いってことだからツッコンじゃダメなところかな。
■ [Ruby] ReFe 1.7.2
RBBRも問題なし。
■ 1.8.0対応でしばらくリリースラッシュが続くのかな。
August 06, 2003 [おもひで]
■ [Misc] GUIは継承使わない!?(最終章....たぶん)
まつもとさんにもコメント頂いちゃいました。他の方、特に言語設計者であるまつもとさんのような方からご意見いただけるなんて感謝です。インターネットってスゴイですね。
■ ということで、まつもとさんの結論だけ引用させていただきます。
- 今作ろうとしているエンティティが既存のクラスのis-aである
- 継承を使った方が楽ができる
場合には遠慮無く使った方が良いと思うのです。ちゃんと考えた後でね。
■ 結局は、ケースバイケースということなので、今後も私の苦悩は続くのですが(^^;)、is-aな関係では継承を使っても問題ないってことは今回のGUIの件でもおよそ問題ないと思う(自分で作るコンポーネントもコンポーネント)ので、とりあえず今までの考えを踏襲しつつ、「ちゃんと考える」ということで、別解としてgreenteaさんの考え方も自分の中に取り込んでいければと思います。
August 07, 2003 [おもひで]
■ [Ruby-GNOME2] Photo RDF Editor by Pierre Baillet
Ruby-GNOME2ベースの新しいツールが登場です。うれしい。
彼はMS Windows XP上でこのアプリケーションを開発しているとのこと。今のところ良い感じで使えてるらしい。
■ インストール方法などの手間を考えると、まだまだMS WindowsでGTK+を使うのは敷居が高いような気もするけど、こうやって少しずつ実績も出てきた。もちろんRBBRもWindowsで使えるし、きたさんのチュートリアルも実はMS Windows版を使って書かれているということを忘れてはいけない(^^;)。
■ というわけで、もし、Rubyを使ったGUIアプリケーションをWindowsで作ろうと思っている人は一度Ruby-GNOME2を試してみては。
WindowsネイティブなGUIツールキットにはかなわないけど、そのままLinuxとかでも動くクロスプラットフォーム環境は大きな魅力だと思うし。
August 08, 2003 [おもひで]
■ [Ruby-GNOME2] Ruby/GtkHtml2
とうとう、CVSにチェックインされちゃいました...。でも武井さん作のものではなく、Martin Povoln???(文字化け(^^;))によるものです。直接ruby-gnome2-devel-en MLにポストされたので断れませんでした。ごめんちゃい。
■ [Ruby-GNOME2] そろそろリリース準備するか....
なぜか、先行で予告リリースされてるし.....。誰だよ、一体。プレッシャーかけやがって....(T_T)。
■ [Misc] 今日はまつもとさんを囲む会か...
参加できず残念、っと思ってたら、偶然、さかいさんが都内に来ると言うことで、一緒に食事をすることに。楽しかったですYO!
....ってか一方的に私がしゃべりまくりだったような....(汗。
■ でも、次回はまつもとさんを囲む会の方に参加したいですね>さかいさん(^^;)
■ [Ruby] 「あるオブジェクトと別のオブジェクトが、同じかそうでないか判定できない」という例が思い浮かびません。
ツッコもうと思ったけど、量が多かったのでこちらに書きます。
class Person
def initialize(name)
@name = name
end
end
obj1 = Person.new("Masao")
obj2 = Person.new("Masao")
p obj1 == obj2 #(1)
この例ではobj1, obj2が同一なのでしょうか。それとも違うのでしょうか...。違います((1)でfalseが返る)。って、この例では当たり前に感じるかもしれません。
■ では、一体、どういう状態が等しい状態と言えるのでしょうか?
等しい状態というのはそのクラスによって条件が異なります。その条件を定義してあげない限り等しくなりません。
#実際はObjectクラスで条件が定義されているので、そのサブクラスである全てのオブジェクトはデフォルトでその条件に従います。
■ そこで、そのような条件をクラス毎に指定します。例えば、上の例で、「nameが等しい場合は同一のオブジェクト」と定義してみると例えば以下のようなコードになります。
#eql?とhashをオーバーライドすることもありますが、ここでは==だけ。詳しくはこちら
class Person
attr_reader :name
def initialize(name)
@name = name
end
def ==(other)
@name == other.name
end
end
obj1 = Person.new("Masao")
obj2 = Person.new("Masao")
p obj1 == obj2
■ この場合、trueが返ります。つまり、このPersonクラスのインスタンスの同一性というのはPersonクラス自身に決めさせることができます。
■ 同様に、Fixnumの場合は、そのインスタンスが持つ数値が同じならばtrueを返すようになっているだけです。
mputさんの言葉を借りて表現すると「Ruby において同じ値の Fixnum インスタンス同士は”完全に違う”」、「即値の 1 と 2-1 の計算結果は全く違うオブジェクト」なわけです。違うのだけど、そのままでは「(インスタンスとしては)同一でないにもかかわらず(クラスで等しいという条件に一致しているため)それが判定できない」わけです。
■ というのが、私の理解です。間違えてたらご指摘してくださると勉強になりますですm(__)m。
August 09, 2003 [おもひで]
■ [Ruby-GNOME2] Ruby-GNOME2-0.6.0 is out!
Ruby-GNOME2-0.6.0をリリースしました。今回はRuby/GnomeVFS, Ruby/GStreamer, Ruby/GtkHtml2が追加され、サブライブラリが一気に10個の大台を突破して12個になりました(別パッケージのRuby/GtkSourceViewとrbbr入れたら13個+ 1個のブツがあるのか...)。
もうこうなったらruby-sumoを追い抜くまでがんばります(うそ)。
#ってruby-sumoってruby-gnome/ruby-gnome2が入ってるのか。これぢゃ、永遠に抜けないな(^^;)。
■ ともかくいろいろ楽しめるようになってきたので、是非試してみてください。
August 10, 2003 [おもひで]
■ [Ruby-GNOME2] rbbr-0.3.0
Ruby向けのクラス・モジュールブラウザです。ReFeやriをインストールしておけば、ri/ReFeがサポートするクラス・モジュールやメソッドの説明を表示できます。
また、それとは別にRuby-GNOME2 API Referenceも表示できるようにしてみました。
■ もちろん、MS Windows上でも使えますよ(Cygwinで確認してます)。
■ ....もう寝よう。
■ [Ruby-GNOME2] Ruby-GNOME2 Project Websiteフランス語版
Ruby-GNOME2 Project Websiteですがフランス語サイトを立ち上げました。これから、私が得意のフランス語でがんがん文章を書いていきます .... というのはもちろんウソです。え?ちょっと信じちゃいました?まぁ、おフランスな雰囲気を醸し出しちゃってるので信じちゃってもしょうがないかもしれません。おーほっほっ。
っていう多少疲れ気味の冗談はおいといて、実際はRuby/GStreamerのLaurentをはじめ、数名のフランス人で運営されていくとのこと。もはや全く私の手の届く範囲を超えていますが、上手に運営されていくことを願うばかりです。どなたかフランス語ができる人がいたら是非フォローしてやってください(^^;)。
■ 副産物として、Hikiのリソース周りをフランス語化したものができたのでHiki-devの方に投げておきました。興味のある方はそちらをどうぞ。
■ どうでも良いのですが、大学時代、ドイツ語選択だったにも関わらず覚えている言葉は、イッヒ・リーベ・ディッヒだけというオレにフランス語なんてとうてい無理ですね、すみまそん。
August 11, 2003 [おもひで]
■ [Ruby-GNOME2] rbbr-0.3.1
1.6.x系で動かないバグがあったので直してリリースしました。右下ペインの表示もちょっとだけ改善してるので更新してみてください。
■ そういや、もし、以前のバージョン(0.2rev1)を使っている人がいたら、いったん、削除してからインストールしないとうまく動かないかもしれません。
■ ruby-talkにアナウンスしたら、「何のツール?」というツッコミが。おとといリリースしたばかりだから別に言わなくてもわかるだろうくらいに考えていたんだけど、ダメでした。世界は厳しいのう。
August 12, 2003 [おもひで]
``rubber duck''というのは「達人プログラマー」で紹介されていたエピソードじゃなかったですか。会話するとデバッグの効率が良くなるという話の中で、たとえそれがゴムのアヒルちゃんでも話かけることで効果があるという。
そうなんですか。スゲー。いやぁ、お恥ずかしながら「達人プログラマー」読んでないもんで(いや、こう書くといろいろ読んでそうだけど他も全然です(-o-;))。ってか読んでたとしてもきっと忘れてる...(^^;)
■ そういや、その昔、ずーっとぶつぶつ言いながらコーディングしていた人がいたのですが、あれは効果的だったのか...。でも、あまり周りのウケは良くなかったけど(^^;)。
■ [Ruby-GNOME2] リリース作業は難しい....
毎回、出すたびにはバグ指摘されてすぐ次のバージョンを出すというのがもはやオレのお家芸となりつつあるけど、実際、確認作業はラテン系のオレにとってはとっても大変だ。
例えば、rbbrの場合、ruby-1.8.0/1.6.7、ri/ReFe, Linux/Cygwinという組み合わせでテストをしなきゃならない。
それがちとつらかったので、0.3.0ではruby-1.6系を切り捨てようと思ったのだけど、まだ許されないらしい(^^;)。
もう、こうなったら、常に最新版のオレ環境でしか使えないようなツールを作って悦にでも浸ろうかしらとマジで思うよ...。
■ と、長い前置きを書いてしまったが(^^;)、実はGTK+-2.0環境でRuby-GNOME2が動かないらしい。そういや、GTK+-2.2系でしか試験してなかった...。ruby-1.8.0/1.6.7, Linux/Cygwinではそれぞれ確認したんだけど、GTK+-2.0はすっかり忘れてたよ.....とほほ。
来週ぐらいまで他のバグが出ないかどうか静観した後で、0.6.1出すか...。やっぱりお家芸だな、こりゃ(T_T)。
■ [Ruby-GNOME2] Ruby-GNOME2[French]
すごい勢いで翻訳されてる。別に英語のままでも良さそうなところも含め全てのコンテンツを翻訳する勢いだ。ってか、英語になってない日本語のページまで翻訳するつもりらしい。スゲー。
August 13, 2003 [おもひで]
そうそう、対話することでデバッグの効率が上がるというのは昔から有名な話だったみたいで、確かKernighan氏だったと思うのですが「電話デバッグ」といって、電話で誰かにコードを説明するとバグを見つけやすいと書いていたように思います。
言われてみれば、ドキュメントなんかは他の人にレビューしてもらうと変な言い回しとかわかりづらいところがポロポロと見つかりますが、相通じるモノがありそうですね。
August 15, 2003 [おもひで]
■ [Misc] なぜか続くRubber Duck
元はrbbrとrubber duckをかけたネタだったワケなんだけど、語呂も似てるしrbbrのアイコンにできたら良いなぁ、なんてruby-talkの方でポロって書いたら、Hughがわざわざ写真に撮って送ってきてくれた。
■ うむ。マヌケそうな横っ面がとてもクールだ。
でも、写真のままじゃ、さすがにアイコンにはできないよなぁ。参考資料にはなるだろうけど、せっかく送ってくれるんだったらアイコンにして送ってくれれば良いのに(^_^;)。
■ ちなみに、Hugh Sasse Staff Elec Engって、長いけど全部名前なの?
それともHugh Sasseまでが名前で、Staff Elec Engって何かのスタッフって意味?
August 17, 2003 [おもひで]
■ [Ruby-GNOME2][Hiki] LINUXFR.ORG
Ruby-GNOME2 Project Websiteのフランス語ページが紹介されてます。
で、ここでHikiが紹介されてます。SFへのリンク付き。Hikiもとうとうフランスデビューですね(^^;)。
■ [Ruby-GNOME2] Ruby-GNOME2 Projece Website
rubyのバージョンを ruby 1.8.0 (2003-08-16) [i686-linux]にした。
コンパイリングファームでコンパイルしたりなんだりで結構手間がかかってしまった。
ちょっとは速くなったかなぁ。
■ [tDiary] tDiary Plugin Viewer-1.1.0
生駒さんからruby-1.8.x用のパッチを頂いたのでバージョンアップ。どうもです。
最新版はruby-1.8.xでしか動かないのでご注意を。
#にしても、これ、使ってくれている人がいたなんて....ちと感動(^^;)
August 20, 2003 [おもひで]
■ [Ruby] Sokoban Ruby/Tk版
by 中村のりつぐさん。ひゃ〜(汗。
August 21, 2003 [おもひで]
■ [Ruby-GNOME2] Ruby/GtkGLExt
CVSにインポートされました。作者はVincent Isambartです。なかなか楽しめますので興味のある方はCVSからどうぞ。
なお、これを使うには、rboglが必要だす。

Before...
▲ さかい [そのフランスのサイトを適当に機械翻訳にかけてみると…… the binding Ruby-GNOME2 of Mu..]
▲ むとぽん [おー、その手があったか。 WebsiteのRecent Pagesでそのプロジェクトの進捗具合を図られるとちとアレで..]
▲ むとぽん [図られる→計られる、かな。]