From: hiroshi h. <cos...@gm...> - 2014-02-01 10:29:41
|
畑ケです。 このissue https://github.com/ruby-gnome2/ruby-gnome2/issues/206 を眺めて いて気づいたのですが、 gdk3/gtk3のバインディングは現状3.4.xまでの機能のサポートが主で、 それ以降の機能は部分的なサポートかまだない状態だと思います。) Ubuntuの14.04 LTSの季節も近づいていることですし、 そろそろ3.6や3.8(、3.10以上も?)のgdk3/gtk3バインディングも欲しいと感 じる人も出てきそうです。 そこでまず手始めにGnome 3.8環境のDebian sidを構築して Gtk::MenuButtonのバインディングを書いてみました! ですが、masterに直接コミットしてしまうには少し自信がないのでPull Request にしました。 気になるところにコメントして頂けると助かります! # Gtkのバインディングのテストコードを書くのは難しいと再認識しました…。 # groonga方面であれこれやっててこちらにあまりコミットできてなくてすいま せん。。。 |
From: Kouhei S. <ko...@co...> - 2014-02-01 13:05:04
|
須藤です。 In <52E...@gm...> "[ruby-gnome2-devel-ja] gdk3/gtk3 3.4.x以上の機能の実装について" on Sat, 01 Feb 2014 19:29:31 +0900, hiroshi hatake <cos...@gm...> wrote: > このissue https://github.com/ruby-gnome2/ruby-gnome2/issues/206 を眺めて > いて気づいたのですが、 > gdk3/gtk3のバインディングは現状3.4.xまでの機能のサポートが主で、 > それ以降の機能は部分的なサポートかまだない状態だと思います。) はい、だいたいあっていると思います。 青柳さんがやってくれた頃が3.4の頃だったんだと思いあmす。 > Ubuntuの14.04 LTSの季節も近づいていることですし、 > そろそろ3.6や3.8(、3.10以上も?)のgdk3/gtk3バインディングも欲しいと感 > じる人も出てきそうです。 そうですね! おいおいはGObject Introspectionベースにしてほぼ自動で新しい バージョンに対応していきたいところですが。。。 > そこでまず手始めにGnome 3.8環境のDebian sidを構築して > Gtk::MenuButtonのバインディングを書いてみました! ありがとうございます! > ですが、masterに直接コミットしてしまうには少し自信がないのでPull Request > にしました。 > 気になるところにコメントして頂けると助かります! コメントしました! rg_get_popup()とかはpopupというプロパティが定義されているの で、手動でrg_get_pop()とか作らなくてもG_DEF_CLASS()したら自 動でアクセサーが定義されるんじゃないかと思います。 > # Gtkのバインディングのテストコードを書くのは難しいと再認識しました…。 そうですねぇ。 https://git.gnome.org/browse/gtk+/tree/examples にGTK+のサンプルプログラムがあるんですが、それをポーティング して動かして確認するのがわりと手軽かもしれません。 https://git.gnome.org/browse/gtk+/tree/demos にもでもアプリケーションがありますね。 > # groonga方面であれこれやっててこちらにあまりコミットできてなくてすいま > せん。。。 いえいえ! 自分のペースで大丈夫です! 私もいつも全部やっているわけじゃなく、あっちやったりこっちやっ たりしています。 |
From: hiroshi h. <cos...@gm...> - 2014-02-01 13:51:58
|
畑ケです。 >> このissue https://github.com/ruby-gnome2/ruby-gnome2/issues/206 を眺めて >> いて気づいたのですが、 >> gdk3/gtk3のバインディングは現状3.4.xまでの機能のサポートが主で、 >> それ以降の機能は部分的なサポートかまだない状態だと思います。) > はい、だいたいあっていると思います。 > 青柳さんがやってくれた頃が3.4の頃だったんだと思いあmす。 やはりそうでしたか。。 >> Ubuntuの14.04 LTSの季節も近づいていることですし、 >> そろそろ3.6や3.8(、3.10以上も?)のgdk3/gtk3バインディングも欲しいと感 >> じる人も出てきそうです。 > そうですね! > おいおいはGObject Introspectionベースにしてほぼ自動で新しい > バージョンに対応していきたいところですが。。。 そうですね。GObject Introspectionベースになればほぼ自動で新しいバージョ ンのAPIが提供できそうですね! とはいえ、テストコードは毎回メンテナンスすることになりそうですが。。。 >> ですが、masterに直接コミットしてしまうには少し自信がないのでPull Request >> にしました。 >> 気になるところにコメントして頂けると助かります! > コメントしました! > rg_get_popup()とかはpopupというプロパティが定義されているの > で、手動でrg_get_pop()とか作らなくてもG_DEF_CLASS()したら自 > 動でアクセサーが定義されるんじゃないかと思います。 ありがとうございます! 試してみたところ、G_DEF_CLASS()するとアクセサーが自動で定義されていました。 という訳で、Pull Requestへコミットをプッシュし直しました。 油断しているとRuby-GNOME2ではこのような先人の魔術(?) にあやかれないので書いてて驚きがありますね。面白いです。 # あっちこっちにコミットが行ったり来たりしてしまったので、 # 今回のプルリクエストのコミットをrebase -i HEAD~<number>してしまいまし た。。。 >> # Gtkのバインディングのテストコードを書くのは難しいと再認識しました…。 > そうですねぇ。 > > https://git.gnome.org/browse/gtk+/tree/examples > にGTK+のサンプルプログラムがあるんですが、それをポーティング > して動かして確認するのがわりと手軽かもしれません。 > > https://git.gnome.org/browse/gtk+/tree/demos > にもでもアプリケーションがありますね。 おぉ。サンプルプログラムはGNOMEの開発元のgitリポジトリに置かれているんで すね。 見てみます。 |
From: Kouhei S. <ko...@co...> - 2014-02-02 08:45:04
|
須藤です。 In <52E...@gm...> "Re: [ruby-gnome2-devel-ja] gdk3/gtk3 3.4.x以上の機能の実装について" on Sat, 01 Feb 2014 22:51:48 +0900, hiroshi hatake <cos...@gm...> wrote: > そうですね。GObject Introspectionベースになればほぼ自動で新しいバージョ > ンのAPIが提供できそうですね! > とはいえ、テストコードは毎回メンテナンスすることになりそうですが。。。 まぁ、そこはわりにあうんじゃないかと思います。 Ruby-GNOME2プロジェクトは「Rubyらしい」APIを提供することも大 事にしているので、自動でAPIを提供できたとしても、やっぱり使 い勝手は確認しないといけないと思います。で、そのときに、テス トやサンプルプログラムを書いて確認する、必要なら改良する、と いうのはプロジェクトの方針ともずれていないし、必要な作業な気 がします。 > 試してみたところ、G_DEF_CLASS()するとアクセサーが自動で定義されていました。 > という訳で、Pull Requestへコミットをプッシュし直しました。 ありがとうございます! マージしました。 > 油断しているとRuby-GNOME2ではこのような先人の魔術(?) > にあやかれないので書いてて驚きがありますね。面白いです。 たしかに、素のRubyのAPIから便利にしているところがあるので、 知らないと気づかないですねぇ。 ただ、今回のように同じメソッド名で上書きしている場合は、テス ト時に次のようなwarningがでるので気づけたりします。(該当行の 場所がちゃんとでないのでわかりづらいですが。。。) /home/kou/work/ruby/ruby-gnome2/gtk3/ext/gtk3/gtk3.so: warning: method redefined; discarding old popup (eval):1: warning: previous definition of popup was here これは、テスト時には$VERBOSE=trueにしているからです。 実は、現状ですでに↑のようなwarningがでているので同じような ことが起こっているはずです。これも直さないといけないんです が、まだ手付かずですね。。。 > # あっちこっちにコミットが行ったり来たりしてしまったので、 > # 今回のプルリクエストのコミットをrebase -i HEAD~<number>してしまいまし > た。。。 トピックブランチでの作業なので問題ないと思います。 >> https://git.gnome.org/browse/gtk+/tree/examples >> にGTK+のサンプルプログラムがあるんですが、それをポーティング >> して動かして確認するのがわりと手軽かもしれません。 >> >> https://git.gnome.org/browse/gtk+/tree/demos >> にもでもアプリケーションがありますね。 > > おぉ。サンプルプログラムはGNOMEの開発元のgitリポジトリに置かれているんで > すね。 > 見てみます。 こんな機能だったのか!というのがわかってけっこう面白いですよ。 -- 須藤 功平 <ko...@cl...> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) Groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html |
From: hiroshi h. <cos...@gm...> - 2014-02-02 11:56:33
|
畑ケです。 引き続きGtk::LevelBarのバインディングを作成しました。 RVAL2CSTRの扱いに自信がないのでまたもやPull Requestにしました。 RVAL2CSTRがSEGVを引き起こしてしまう原因がよくつかめなかったので相談した いです。。。 >> そうですね。GObject Introspectionベースになればほぼ自動で新しいバージョ >> ンのAPIが提供できそうですね! >> とはいえ、テストコードは毎回メンテナンスすることになりそうですが。。。 > まぁ、そこはわりにあうんじゃないかと思います。 > Ruby-GNOME2プロジェクトは「Rubyらしい」APIを提供することも大 > 事にしているので、自動でAPIを提供できたとしても、やっぱり使 > い勝手は確認しないといけないと思います。で、そのときに、テス > トやサンプルプログラムを書いて確認する、必要なら改良する、と > いうのはプロジェクトの方針ともずれていないし、必要な作業な気 > がします。 なるほど。そうですね、Ruby-GNOME2プロジェクトらしいAPIを提供していくには 必要な作業でしたね。 >> 油断しているとRuby-GNOME2ではこのような先人の魔術(?) >> にあやかれないので書いてて驚きがありますね。面白いです。 > たしかに、素のRubyのAPIから便利にしているところがあるので、 > 知らないと気づかないですねぇ。 > > ただ、今回のように同じメソッド名で上書きしている場合は、テス > ト時に次のようなwarningがでるので気づけたりします。(該当行の > 場所がちゃんとでないのでわかりづらいですが。。。) > > /home/kou/work/ruby/ruby-gnome2/gtk3/ext/gtk3/gtk3.so: warning: method redefined; discarding old popup > (eval):1: warning: previous definition of popup was here > > これは、テスト時には$VERBOSE=trueにしているからです。 > > 実は、現状ですでに↑のようなwarningがでているので同じような > ことが起こっているはずです。これも直さないといけないんです > が、まだ手付かずですね。。。 そう言えば幾つか出ていますねぇ。直したいです。。 |
From: Kouhei S. <ko...@co...> - 2014-02-02 13:23:41
|
須藤です。 In <52E...@gm...> "Re: [ruby-gnome2-devel-ja] gdk3/gtk3 3.4.x以上の機能の実装について" on Sun, 02 Feb 2014 20:56:18 +0900, hiroshi hatake <cos...@gm...> wrote: > 引き続きGtk::LevelBarのバインディングを作成しました。 > RVAL2CSTRの扱いに自信がないのでまたもやPull Requestにしました。 > RVAL2CSTRがSEGVを引き起こしてしまう原因がよくつかめなかったので相談した > いです。。。 Pull Requestの方にコメントしましたが、たぶん、これはgdouble の方が問題です。 >> 実は、現状ですでに↑のようなwarningがでているので同じような >> ことが起こっているはずです。これも直さないといけないんです >> が、まだ手付かずですね。。。 > > そう言えば幾つか出ていますねぇ。直したいです。。 ですよねぇ。。。 |
From: hiroshi h. <cos...@gm...> - 2014-02-03 22:11:58
|
畑ケです。 >> 引き続きGtk::LevelBarのバインディングを作成しました。 >> RVAL2CSTRの扱いに自信がないのでまたもやPull Requestにしました。 >> RVAL2CSTRがSEGVを引き起こしてしまう原因がよくつかめなかったので相談した >> いです。。。 > Pull Requestの方にコメントしましたが、たぶん、これはgdouble > の方が問題です。 そうでした。。 加えて、BOXED Objectではないのにそう扱っていたところがSEGVを起こしていた ようです。 指摘ありがとうございます!助かりました! >>> 実は、現状ですでに↑のようなwarningがでているので同じような >>> ことが起こっているはずです。これも直さないといけないんです >>> が、まだ手付かずですね。。。 >> そう言えば幾つか出ていますねぇ。直したいです。。 > ですよねぇ。。。 幾つかのwarningに対処してmasterにコミットしました。 GTKの方でpropertyになっているメソッドを壊してないかどうか確かめたかった ので、 G_DEF_CLASSで生成されているメソッドのテストコードも加えておきました。 テストコードはある観測点に於いてきちんと動いているという安心感をもたらし てくれますね! # displayでもwarningが出ていますが、どこから出ているのか特定できてないで す、すいません。。。 |
From: Kouhei S. <ko...@co...> - 2014-02-04 14:08:21
|
須藤です。 In <52F...@gm...> "Re: [ruby-gnome2-devel-ja] gdk3/gtk3 3.4.x以上の機能の実装について" on Tue, 04 Feb 2014 07:11:45 +0900, hiroshi hatake <cos...@gm...> wrote: > 加えて、BOXED Objectではないのにそう扱っていたところがSEGVを起こしていた > ようです。 > 指摘ありがとうございます!助かりました! よかったです! >>>> 実は、現状ですでに↑のようなwarningがでているので同じような >>>> ことが起こっているはずです。これも直さないといけないんです >>>> が、まだ手付かずですね。。。 >>> そう言えば幾つか出ていますねぇ。直したいです。。 >> ですよねぇ。。。 > > 幾つかのwarningに対処してmasterにコミットしました。 ありがとうございます! > GTKの方でpropertyになっているメソッドを壊してないかどうか確かめたかった > ので、 > G_DEF_CLASSで生成されているメソッドのテストコードも加えておきました。 > テストコードはある観測点に於いてきちんと動いているという安心感をもたらし > てくれますね! そうですね! > # displayでもwarningが出ていますが、どこから出ているのか特定できてないで > す、すいません。。。 gtk3じゃなくてgdk3の方だと思います! |
From: hiroshi h. <cos...@gm...> - 2014-02-05 00:04:47
|
畑ケです。 >> # displayでもwarningが出ていますが、どこから出ているのか特定できてないで >> す、すいません。。。 > gtk3じゃなくてgdk3の方だと思います! おぉ、gdk3の可能性を考えてなかったです!見てみますね。 Debian sid環境でもGNOME 3.8なので、 GNOME 3.10環境が欲しくてFedora 20での開発環境も構築してしまいました! GNOME 3.4 -> 3.6 と GNOME 3.8 -> 3.10 での変化が大きそうなのでやっぱり3.10環境が欲しいですね。。。 幾つかテストが失敗していますが、すぐに対処できそうなものをPull Requestに しています。 また、https://github.com/ruby-gnome2/ruby-gnome2/commit/e560033 に コメントしましたが、changed_signalのテストはパスしたようです! |
From: Kouhei S. <ko...@co...> - 2014-02-07 12:24:16
|
須藤です。 In <52F...@gm...> "Re: [ruby-gnome2-devel-ja] gdk3/gtk3 3.4.x以上の機能の実装について" on Wed, 05 Feb 2014 09:04:35 +0900, hiroshi hatake <cos...@gm...> wrote: >>> # displayでもwarningが出ていますが、どこから出ているのか特定できてないで >>> す、すいません。。。 >> gtk3じゃなくてgdk3の方だと思います! > > おぉ、gdk3の可能性を考えてなかったです!見てみますね。 ありがとうございます! > Debian sid環境でもGNOME 3.8なので、 > GNOME 3.10環境が欲しくてFedora 20での開発環境も構築してしまいました! > > GNOME 3.4 -> 3.6 > と > GNOME 3.8 -> 3.10 > での変化が大きそうなのでやっぱり3.10環境が欲しいですね。。。 おぉ。 私は本当に新しい環境が必要なときや、GDBで中の動作を調べたい ときははリポジトリーからソースを持ってきて--prefix=/tmp/localで ビルドしていました。面倒なのであんまりやらないんですが。。。 > 幾つかテストが失敗していますが、すぐに対処できそうなものをPull Requestに > しています。 ありがとうございます! > また、https://github.com/ruby-gnome2/ruby-gnome2/commit/e560033 に > コメントしましたが、changed_signalのテストはパスしたようです! 確認してもらって助かりました! |
From: hiroshi h. <cos...@gm...> - 2014-02-16 05:33:12
|
畑ケです。 GTK+ 3.8ではGTKの細かい修正が主で新しいウィジェットの追加はないようなの で3.10向けの作業を開始しました。 手始めにGtk::HeaderBarをmasterに直接コミットしてみました。 Gtk::Stackのバインディング側の実装はできたのですが、 テストコードに何かもやっとしたものを感じ、 Ruby-GNOME2での命名規則の理解が浅そうで不安を感じたので Gtk::Stackはmasterに直接コミットではなくPull Requestにしました。 # Gtk::Widgetの扱いや、GTKのクラス階層の理解が浅いなぁと思う今日このごろです。。。 GTK 3.10向けの作業をFedora 20でしていると、 ついうっかりUbuntu 12.04 LTS環境でGTK 3.4より新しい環境向けコードに対して omissionさせるのを忘れてしまった!と思うことがしばしばあります。。。 Ubuntu環境でテストコードを動かしたり、バインディングをmakeすればなんてことはないのですが… # うっかりしていてTravis CIでfailureを出してしまいました、すいません。 |
From: Kouhei S. <ko...@co...> - 2014-02-16 08:49:01
|
須藤です。 In <530...@gm...> "Re: [ruby-gnome2-devel-ja] gdk3/gtk3 3.4.x以上の機能の実装について" on Sun, 16 Feb 2014 14:33:01 +0900, hiroshi hatake <cos...@gm...> wrote: > GTK+ 3.8ではGTKの細かい修正が主で新しいウィジェットの追加はないようなの > で3.10向けの作業を開始しました。 > > 手始めにGtk::HeaderBarをmasterに直接コミットしてみました。 ありがとうございます! > Gtk::Stackのバインディング側の実装はできたのですが、 > テストコードに何かもやっとしたものを感じ、 > Ruby-GNOME2での命名規則の理解が浅そうで不安を感じたので > Gtk::Stackはmasterに直接コミットではなくPull Requestにしました。 命名規則はトップページにある http://ruby-gnome2.sourceforge.jp/#For+Developers からリンクがある http://ruby-gnome2.sourceforge.jp/hiki.cgi?How+to+Implement+Ruby-GNOME2 http://ruby-gnome2.sourceforge.jp/hiki.cgi?Naming+and+Conversion+Rules にまとまっています。 テストコードは、一般的に言うと、assert_nothing_raisedを使って いるのはだいたいちゃんとテストしていないと思っていいです。 各テストでは * ○○をしたら * △△になることを * 1つ確認 しますが、assert_nothing_raisedを使っている場合は「△△にな ることを」省略していると言えます。 例えば、test_set_add_namedを考えましょう。 https://github.com/ruby-gnome2/ruby-gnome2/pull/223/files#diff-e209d4db4a8e22d0ddf83bda95c03d69R25 def test_set_add_named widget = Gtk::EventBox.new widget_name = "set widget name" assert_nothing_raised do @stack.set_add_named(widget, widget_name) end end 「名前つきで」ウィジェットが追加される「△△になることを」に 該当します。 例えば、名前を指定して@stackからウィジェットを取得できないか と考えます。これができれば「名前つきで」ウィジェットが追加さ れているかを確認できます。ただ、 gtk_stack_get_child_by_name()は3.12からの機能なので使えそう にありません。 https://git.gnome.org/browse/gtk+/tree/gtk/gtkstack.c#n1147 しょうがないのでGTK+のソースを見てみるとプロパティとして名前 を追加していることがわかります。プロパティが設定されているこ とを確認できれば「名前つきで」ウィジェットが追加されているか を確認できそうです。 https://git.gnome.org/browse/gtk+/tree/gtk/gtkstack.c#n1045 void gtk_stack_add_named (GtkStack *stack, GtkWidget *child, const gchar *name) { g_return_if_fail (GTK_IS_STACK (stack)); g_return_if_fail (GTK_IS_WIDGET (child)); gtk_container_add_with_properties (GTK_CONTAINER (stack), child, "name", name, NULL); } (中略)gtk_widget_child_notify()というので、新しいプロパティ が設定されたという通知がいきそうだと気づきます。 https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-child-notify ということで、こんな感じで「△△になることを」確認できないで しょうか。(試していないので動かないかもしれませんが。。。) def test_set_add_named widget = Gtk::EventBox.new widget_name = "set widget name" name_is_set = false @stack.signal_connect("child-notify") do |*args| p args # 何が渡されるかわからないけど"name"プロパティが # 渡されていることを確認したい。 name_is_set = true end @stack.set_add_named(widget, widget_name) assert_true(name_is_set) end > # Gtk::Widgetの扱いや、GTKのクラス階層の理解が浅いなぁと思う今日このごろです。。。 まぁ、GTK+はたくさん機能がありますからねぇ。。。 クラス階層はドキュメントの「Object Hierarchy」セクションが役 に立つと思います。 https://developer.gnome.org/gtk3/stable/GtkStack.html#GtkStack.object-hierarchy Rubyで動かしてGtk::Stack.ancestorsとするのもアリです。 > GTK 3.10向けの作業をFedora 20でしていると、 > ついうっかりUbuntu 12.04 LTS環境でGTK 3.4より新しい環境向けコードに対して > omissionさせるのを忘れてしまった!と思うことがしばしばあります。。。 > Ubuntu環境でテストコードを動かしたり、バインディングをmakeすればなんてことはないのですが… > > # うっかりしていてTravis CIでfailureを出してしまいました、すいません。 いろんな環境で試すのが大変なのでTravis CIを使っているので、 Travis CIで問題を見つけるのは正しい使い方だと思います! なので、Travis CIで問題を見つけて修正するというのは間違って いないと思います! |