A Strolling Programmeraka なかだ

またの名を「風まかせ人まかせ力まかせ」日記

T D I A R Y T I M E S % fgrep -i '' *.td2
<< 2006/06/ 1 2 3 4 1. コールドベア新気球
5 6 1. 一日専業主夫
2. コマンドラインって何
7 8 9 10 11 1. make test
12 1. rb_protect
2. 反省点
3. Array[1,2,3,]がSyntaxError
13 14 1. rb_protect(2)
15 16 1. Symbol#to_proc が 1.9 に入ったけど、alist 対応じゃなかった件。
17 18 19 20 21 22 23 24 25 26 27 28 1. LLRing
29 1. 眼鏡
30 >>
«前月 最新 翌月» 追記

2006-06-04 modified at Mon Jun 5 01:58:27 2006

* [balloon] コールドベア新気球

てんかま/太助/ピンガ コールドベアの新気球「ピンガ」。 名前の由来は聞き損ねたけど、なんとなくどこぞの国旗にありそうなデザインで、 「なんちゃってカメルーンカラー」の太助と並べると微妙。

昨日の午後が初フライトだったらしい。 ともあれ、さぼしゃんべあっくす三機揃い踏み。


三つ巴 通称「藤田ランチ」から離陸。 東風で運動公園方向へ向かうが、風が弱くて走って十分追い付けた。 実際には高度十数メートルなんだけれど、 カメラが38mmまでしか広角にならないのでバスケットまで入らなかった。 ちゃんと気球を撮るには、やはり20mm〜500mmくらいがないと。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2006-06-06 modified at Tue Jun 6 23:56:50 2006

* 一日専業主夫

金曜の午後から出かけたいと相談したら、 「じゃあ一日代わりに家事全部やって」 といわれて一日専業主夫。

まぁ、大体のことは毎日やってるから大丈夫だけれど、問題は料理。 何ヶ月ぶりなのかわからないくらいひさしぶり。 といってもできるのは味噌汁とかベーコンエッグ止まりだけど。

* コマンドラインって何

デスクトップ 大体いつも fg: midnight blue, bg: linen だなぁ。 ちなみに左はck、右はmlterm via ssh。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2006-06-11 modified at Mon Jun 12 11:38:34 2006

* [ruby] make test

iteratorまわりがボロボロ落ちる。 いくつか直してみたものの、どうも互いに矛盾してるのもあるような気がする。

nil.instance_eval関係は、環境次第でSEGVしたりfalse.bindingといわれたり。

お名前: コメント: ヽ(・∀・)ノ ハムー

本日のツッコミ(全1件) [ツッコミを入れる]

_ kou [昨日教えてもらったrb_protect()ですが,[BUG]をださないように..]

Pingback(0)

2006-06-12 modified at Tue Jun 13 21:03:05 2006

* [ruby] rb_protect

えーと、[Kazehakase-devel 2623]の話と仮定しますが。

#0  0xffffe410 in __kernel_vsyscall ()
#1  0x40356b39 in raise () from /lib/libc.so.6
#2  0x403581b1 in abort () from /lib/libc.so.6
#3  0x418ea6cc in rb_bug () from /usr/lib/libruby18.so.1.8
#4  0x419559f6 in ruby_posix_signal () from /usr/lib/libruby18.so.1.8
#5  <signal handler called>
#6  0x418f53bf in rb_iter_break () from /usr/lib/libruby18.so.1.8
#7  0x418f55db in rb_exc_raise () from /usr/lib/libruby18.so.1.8
#8  0x418ebfde in rb_raise () from /usr/lib/libruby18.so.1.8
#9  0x418f5622 in rb_interrupt () from /usr/lib/libruby18.so.1.8
#10 0x41902fad in rb_thread_interrupt () from /usr/lib/libruby18.so.1.8
#11 0x4195590b in ruby_posix_signal () from /usr/lib/libruby18.so.1.8
#12 0x41955998 in ruby_posix_signal () from /usr/lib/libruby18.so.1.8
#13 <signal handler called>
#14 0xffffe410 in __kernel_vsyscall ()
#15 0x403dbd91 in select () from /lib/libc.so.6
#16 0x41901815 in rb_thread_select () from /usr/lib/libruby18.so.1.8
#17 0x41adf28a in exec_callback () from /usr/lib/ruby/site_ruby/1.8/i686-linux/gtk2.so
#18 0x40b791c1 in g_main_loop_get_context () from /usr/lib/libglib-2.0.so.0
#19 0x40b7883a in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#20 0x40b78e01 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#21 0x40630a17 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#22 0x0804b481 in main (argc=1, argv=0xbf8bfb14) at main.c:815

「rubyを組み込んだアプリケーションから組み込まれたrubyを呼び出す」というのは、 コールバックでも例外ではありません。 これは、「アプリとrubyの境界を越える大域ジャンプはあってはならない」といってもいいです。 rubyの例外や、アプリ側でのlongjmp()やC++の例外など全部含めて。

ということで

(1) signal_connectしたコールバック内では確実にrescueする

というのは方針としては正しいのですが、

  • (昨日いったように)rb_rescue()だけでは拾えないものもある
  • Ruby/GLib2のバグなので、個別に対応するよりもそちらを修正すべきである

という点が問題でしょう。

* [ruby] 反省点

申し訳ないです

とくに発表したわけでもないのに、我が物顔すぎたか。 弁当食っておとなしくデバッグしてればよかった。

* [ruby] Array[1,2,3,]がSyntaxError

「配列リテラルはともかく、メソッド呼び出しのほうは通さなくてもいいんじゃないか」 *1 というところで、まつもとさんとは話がついたんだけど。 まずいかな?

*1  というか、最初改行も置けなくなってた

お名前: コメント: ヽ(・∀・)ノ ハムー

本日のツッコミ(全2件) [ツッコミを入れる]

_ hisa [あー、そんなことないです。]

_ kou [以下のスクリプトが例外で異常終了するならRuby/GLib2側で "signal_..]

Pingback(0)

2006-06-14 modified at Wed Jun 14 01:20:12 2006

* [ruby] rb_protect(2)

なかださんがいう修正はこのスクリプトが:ignoredを出力して正常終了するようにするということですよね?

いや、そうとは限りません。

書き方が悪かったですが、それぞれの大域ジャンプが直接もう一方に飛び込んだり飛び越したりしてしまうのが問題なので、境界面でラップするようにすればさらに外側まで持ち出すことは可能です。

Ruby/GLib2側で"大域ジャンプ"できるかどうかを判断できるのであれば、Ruby/GLib2側を修正すればよいと思いますが、できないのであれば、大域ジャンプできないところでは個別にrescueしないといけない気がします。

コールバック中に発生した例外をどう処理するか、という点についてはたしかにその通り、個別に対応を考えるべきでしょう。 それをするなというわけではありません。 ただし、例外が発生したら異常終了してしまうというのでは、Ruby/GLib2のコールバック呼び出しの実装には問題があるのではないか、ということです。 処理できないならできないなりに、上に書いたようにラップして外まで送り出すなりなんなりすべきでしょう。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2006-06-16 modified at Fri Jun 16 02:26:47 2006

* [ruby] Symbol#to_proc が 1.9 に入ったけど、alist 対応じゃなかった件。

Symbol#to_proc が 1.9 に入ったけど、alist 対応じゃなかった件。 本家では +1 されてました。 ttp://dev.rubyonrails.org/ticket/5295

それはSymbol#to_procの実装のせいじゃなくて、前日朝のyieldの変更のためではないかと。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2006-06-28 modified at Sat Jul 1 16:36:09 2006

* [ruby] LLRing

もう売り切れか。 買いそびれた。

お名前: コメント: ヽ(・∀・)ノ ハムー

本日のツッコミ(全1件) [ツッコミを入れる]

_ suke [私は今日(7/1)チケットを買えましたよ。]

Pingback(0)

2006-06-29 modified at Fri Jun 30 00:30:14 2006

* 眼鏡

壊れた。

子供に引っ張られて曲がってしまったので、直そうとしたらフレームがポッキリと。

できあがりは来週になるそうで、それまで不便でしょうがない。 ディスプレイも見づらいというか、ソースとか読めんし。

つい無意識に眼鏡を探してしまう。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

Key fingerprint = 1E69 3ED2 C05B 6BA4 34B2 FC25 478B C08D 2772 58F6