history

青木日記 RSS

<前月 | 最新 | 次月>

2006-11-02

Ruby 読書会

http://wiki.fdiary.net/RubyBookReading/?0001

Ruby 読書会、もう 30 人枠が埋まってるよ。 みんな早いなあ。

(05:56)


2006-11-07

添削記事

るびま本のかねあいもあるので、気合いで今月号に書くことにする。 いっつもいっつも「添削記事を読み切れなかった」という声を耳にするので、 今回は読み切れそうな工夫をすることにした。

(22:01)

るりま

最近るりまのことを日記に書いてないけど、 わりと進んでたりする。 というか、ぶっちゃけ俺以外の人がものすごい勢いで進めてくれているという話である。 すげー。

あまりになんもしないのもあれなのでウェブまわりを少しいじった。

http://doc.loveruby.net/refm/api/view/class/Net=SMTP

  • ページ上部にパンくずリストを出してみた。
  • スーパークラスだけじゃなく、ancestors 全部出してみた。

本当に少しだな!

次は、そろそろクラスリファレンス以外の部分をどうにかしてみようと思う。

(22:19)

るびま添削記事への応募

思い出した。

るびま本添削記事へのプログラム投稿ありがとうございました。 いまのところ 4 本応募をいただいています。 せっかくもらったので、いまのところ全部使ってみようかと思っています。

(22:35)

るりま (2)

想定していたことではあるが、 やっぱ「るびま」「るりま」と並べて書くと激しくまぎらわしいな。 「るびま」…… Rubyist Magazine、「るりま」…… Ruby リファレンスマニュアルね。

んで、るりまだが、次は C API リファレンス (のシステム) をやってしまうのもいいかもしれない。あれは楽そうだし。

(22:38)

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

hyuki [カタカナは? 「ルリマ」]

青木 [うーむ、カタカナはちょっと違和感が……。
一部だけにすればいいのだろうか。
「り」だけカタカナで「るリま」とか?
「マ」だけカタカナで「るりマ!」とか?]


2006-11-13

いいバイナリ

11/10 は「いいバイナリの日」らしい。 イチゼロでバイナリか。なるほどね。

……しかし、バイナリのくせに十進法に甘んじるのはどーなんだ。 0b10 == 2、0b1110 == 14 であるからして、 2/14 を「とってもいいバイナリの日」でオーバーライドすべきではないだろうか。

(01:12)

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

ただただし [バレンタインデーを亡きものにしたいわけですね?]

青木 [バレンタインデーは世の人を 2 ビットで分類する日ですから。
男かどうかで 1 ビット、チョコがもらえたかどうかで 1 ビット。
10/1110 はまさに 10 領域 (チョコがもらえなかった男性)
が 11 領域 (チョコをもらえた男性) を指くわえて見てるさまを
エンコードしたものと考えられます。

チョコもらえて勝ち誇る

10 / 11 ...10 ← モウコネエヨー ウワーン

壁のかげから眺めてる]


2006-11-14

さぶん

「svn」が「差分」に見えてしかたがない。 svn diff の時とか、ちょっと困る。

(21:00)

なっとうの友

納豆専用の混ぜ棒! 「なっとうの友」
http://www.excite.co.jp/News/bit/00091162972912.html

(21:56)

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

ささだ [いや、ありえないから>さぶん]

青木 [えー。どう見ても s(さ)v(ぶ)n(ん) でしょ。]


2006-11-15

るびま 17 号添削記事

今日はるびまの日 (るびまの原稿を書く日)。

今回こそは量を減らそうと誓ったにも関わらず、 1/3 書いた時点で 20KB 越えってどういうことだ。 この分だと最終的な分量は前回 Tropy の 40KB すら遥かに越えることになるわけかー。

うーん、3 本立ての予定だったけど、1 本に絞ろうかなあ。

(21:17)

夕食

納豆とまぐろは合う。

(23:15)


2006-11-16

Windows PowerShell 1.0

PowerShell (元 Monad) がリリースされたのでインストールしてみた。

http://support.microsoft.com/kb/926140

おお、ls がある。でも出力は dir だな。ただし拡張子は別ではない。 dir もあるのかな。あるなあ。

勘で help ls と打つと当たりだった。 help の別名で man もあるらしい。 また help -detailed ls と打つとコマンドラインオプションが見られる。 オプションなしで help と打つとコマンド一覧が出て便利。

ls -name で UNIX の ls みたいになる。 オプションは省略できるらしく、-nam -na -n と短くしても大丈夫だった。

ファイル名はタブで補完できる。 コマンド名は補完できないようだ。

cp がある。mv もある。more はあるが less はない。 file もない。which もないが where がある、が、UNIX の where とは違うような感じがするな。 まあ、コマンドがファイルとしてあるわけじゃないだろうから、ないのが当然かも。

コマンドプロンプトと比較して一番便利な点は、 ウィンドウを 80 桁より広げられることかもしれない、と思った。

clear, cls がある。

diff は diff なのかなあ (意味不明)? Compare-Object の別名ってあるから、diff なんだろうな。 つーことは patch もあるんだろうか。なかった。

touch がないので echo a > a とかしてファイルを作り、 diff で比較してみる……が、diff a b の出力がよくわからない。 違うってことだけしか教えてくれないのかな。cmp 相当? でも cmp はないと。

rm a b と書いたら怒られた。rm a,b と書かなければいけないようだ。 まあ、それはそれでわからんこともない。

(20:15)

Binary Hacks

いま話題の Binary Hacks 買ってきた。 帰り道の本屋では最後の一冊だった。

うーむ、目次を眺めてるだけでも面白いなあ。 特に C++ まわりはほとんど知らないのでおもしろそうだ。

……いかん、添削原稿を終わらせないと。

(20:47)

Binary Hacks (2)

[100]「文献案内」で Alpha のセクションを発見!

Alpha についてはインストラクション以外に PALcode も知ってないと OS 以下の層は全然わかんなかったりする。 んで Alpha Architecture Handbook のほうには PALcode は載ってないので、 下のほうも知りたい人は Alpha Architecture Reference Manual が必要。

(21:00)

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

hyuki [> ウィンドウを 80 桁より広げられる
これは、ウインドウ枠をドラッグして広げられるという意味でしょうか?
普通のコマンドウインドウでもウインドウサイズは(プロパティで)変えられるので。]

青木 [実際にはその中間くらいというかなんと言うか。
「あー そういえばプロパティとかいじるとサイズ変えられたような
でも確認すんのめんどくせーな とにかく簡単に変えられるように
なったんだからユーザビリティは上がってんだよな これでいいや」
という気持ちで書きました。]


2006-11-17

Symbol < String

いつのまにか Symbol が String のサブクラスじゃなくなってた! やったー。

(20:01)


2006-11-18

添削記事

なんだかんだ言いつつ、ぜんぜん短かくならなかった。 どうも最近、文章を書くとことごとく長くなってしまう。

最近、とか言ってるが、原稿の分量がオーバーしなかったのは無道編くらいである。 おれが文章を書くと長くなるのは昔からなのだ。官僚向きですな。

(18:35)


2006-11-23

悲しいときー

徹夜だよ眠いよちくしょーと思いながら 大学の門の前まで行って始めて今日が祝日だと気付いたときー。

(00:52)


2006-11-26

今日のひとりツッコミ

♪いちにち一章、

みっかで三章、

三章すすんで二章さがる〜

……さがるなよ!

(14:08)

るびま17号

http://jp.rubyist.net/magazine/?0017

るびま 17 号でました。

今号はなにげにわたしのインタビューが出てます。 添削とダブルだとすさまじいボリュームだ。

添削は結局三本立てです。 以前この日記で募集したときに応募していただいたプログラム 3 本を 全部まとめてやりました。 プログラムの量が増えたぶん、書き換え量は少なめ。 ていうか、指摘のみ。おかげで今月は量のわりに楽だった……。 毎回あんなにきつかったのは全部リライトしてたからだったんだな。

言語探訪の Erlang はおもしろそうだなあ。 とりあえずインストールしてみよかな。

ライブラリ紹介。 ERB の trim_mode の仕様がようやくわかった。 おれはいつも 2 にしてたんだけど、 なんで 2 にしはじめたのかすでに忘れてたもんな。

やーまに。このへんはなんとなく知っていた。 ていうか、以前ささださんに教えてもらった。

(21:33)

Hotlinksの言いわけ

Symbol#to_proc のとこだけど、間違えた……。 関数合成じゃなくて高階関数だよ。 やっぱリリース直前に何も考えずに文を追加したのがよくなかった。

高階関数の一部の場合 (渡す関数が一個) を特殊な文法で表現できるようにしたのが Ruby のブロックであるわけだが、 それのさらに特殊なケースを短縮するのが Symbol#to_proc でしょ。 でもあの方向性を求めるならむしろフツーの高階関数に戻ればいいんで、 Ruby のブロックにさらに「工夫」を積み増しするのは違うだろ。 ってことが言いたかったの。

しかも Symbol ってとこがまた気に食わないんだよな。 Symbol < String の件といい、 どうも Rails 方面のやつらと俺とではシンボルの解釈に相当の開きがあるような気 がする。

ちなみに「名前から実体を作る」の話は 「(シンボルという) 名前から (Proc オブジェクトという) 実体を作る」 ってことね。

そういえば、Eiffel では変数名に .create って呼ぶとオブジェクトができるけど、 あれは「名前からモノを存在させる」典型的な例だと思う。 Ruby ではああいうのはないでしょ。

(03:50)

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

elim [インタビューイントロの写真はやっぱり「長寿と繁栄を」なんでしょうか :p]

青木 [いえ、実は全然関係ない元ネタです。
あれがバルカンサインというものだってのは
あとで知りました。
元ネタはひみつー]

まつもと [EiffelはVer.3以降はオブジェクト生成は違う文法になりました。

以前はVoid, Createとあとひとつなんだかわすれちゃったのと3つが「名前に対する操作」だったんですが、そういうのはなくなっちゃったみたいです。]

青木 [なんと、そうだったんですか。
ありがとうございます。勉強になります。
いま見たら、create と void と forget ですね。

しかし、なくなったということは、やはり名前に対して
操作するのはいかんということだな (と勝手に結論)。]


2006-11-29

YARV / make yarv-test-all が止まらない

ここんとこ、YARV の make test-all だか make yarv-test-all だかが止まらなくなってる。 かたまってるんじゃなくて、無限ループ。ps ax で見るとこんな感じ。

1119 ?        R    1716:44 runner.rb test_exit_action(TestSignal)

しかも端末から実行するとちゃんと終わるのが解せない。 スレッド作りまくりなのが問題なのかと思って コメントアウトしてみたけど変化なし。 うーん?

つか、だいたい、test_exit_action は assert false なのに、 なんでここで止まるんだろう。

(14:23)

Array#^

Array に xor 演算てなかったのね。 当然あるような気がしてた。

(19:40)

Array#^ (2)

そういえば Array#^ をすげー昔に提案したような記憶が……。

(21:06)

YARV / make test-all が止まらない (2)

なーんかわかってきた。テストが終わらないんじゃなくて、 テストプログラムから fork したプロセスがずっと動いてるんだ。

class TestSignal < Test::Unit::TestCase
  def have_fork?
    begin
      Process.fork {}
      return true
    rescue NotImplementedError
      return false
    end
  end

このあたりに罠が潜んでるような気がする。

もしかして、fork したプロセスにも at_exit が登録されているから無限再帰になる? いやでも、ずっと動かしといてもプロセス ID は変化していないな。 ということは、無限に fork が呼ばれているわけではないはずだ。

うーん、だいたい YARV では test_exit_action は 無条件に assert(false) してるのに、なんで動くんだ。 assert の位置を変えてみよう。

tukumo:/var/www/autobuild-yarv/obj % make test-all                aamine@tukumo
./miniruby /var/www/autobuild-yarv/src/runruby.rb --extout=.ext -- -C "/var/www/autobuild-yarv/src/test" runner.rb --runner=console
"./ruby -C /var/www/autobuild-yarv/src/test runner.rb --runner=console"
Loaded suite .
Started
................................................................................
中略
0000 (0x2aaaaf11f010): 00000004
0001 (0x2aaaaf11f018): 00000001
0002 (0x2aaaaf11f020): 2aaab17904d8
0003 (0x2aaaaf11f028): 0242b659
0004 (0x2aaaaf11f030): 2aaaab3ea550
0005 (0x2aaaaf11f038): 00000004
0006 (0x2aaaaf11f040): 00000001
0007 (0x2aaaaf11f048): 00000004
0008 (0x2aaaaf11f050): 00000001 <- lfp <- dfp
-- control frame ----------
c:0005 p:---- s:0009 b:0009 l:000008 d:000008 CFUNC  :(null)
c:0004 p:---- s:0007 b:0007 l:000006 d:000006 CFUNC  :now
c:0003 p:0013 s:0004 b:0004 l:0x1958 d:000003 PROC   /var/www/autobuild-ya:125
c:0002 p:---- s:0002 b:0002 l:000001 d:000001 FINISH
c:0001 p:---- s:0000 b:-001 l:000000 d:000000 ------
---------------------------
DBG> : "/var/www/autobuild-yarv/src/lib/webrick/utils.rb:125:in `now'"
DBG> : "/var/www/autobuild-yarv/src/lib/webrick/utils.rb:125:in `block in initialize'"
[BUG] Segmentation fault
ruby 1.9.0 (2006-11-06) [x86_64-linux]

おい!

(21:09)

YARV / make test-all で SEGV

もういっかいやっても落ちない。最悪だ。

(22:19)

YARV / make test-all で SEGV (2)

とりあえずスタックトレース

#0  0x00002aaaab0c4dd0 in raise () from /lib/libc.so.6
#1  0x00002aaaab0c6280 in abort () from /lib/libc.so.6
#2  0x00000000004a7897 in rb_bug (fmt=0x4d4a89 "Segmentation fault")
    at /var/www/autobuild-yarv/src/error.c:172
#3  0x000000000046de99 in sigsegv (sig=16613)
    at /var/www/autobuild-yarv/src/signal.c:471
#4  <signal handler called>
#5  mark_source_filename (f=0xe8106 <Address 0xe8106 out of bounds>)
    at /var/www/autobuild-yarv/src/gc.c:633
#6  0x000000000041b4b5 in gc_mark_children (ptr=55787088, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:838
#7  0x000000000041ba5e in mark_entry (key=950534, value=950534, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:732
#8  0x00000000004720c2 in st_foreach (table=0x228e340,
    func=0x41ba50 <mark_entry>, arg=2) at /var/www/autobuild-yarv/src/st.c:460
#9  0x000000000041b71f in gc_mark_children (ptr=46912545231680, lev=2)
    at /var/www/autobuild-yarv/src/gc.c:977
#10 0x000000000041b76d in gc_mark_children (ptr=46912533961640, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:864
#11 0x0000000000488bcc in iseq_mark (ptr=0x13b92d0)
    at /var/www/autobuild-yarv/src/iseq.c:74
#12 0x000000000041b4f3 in gc_mark_children (ptr=1, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:991
#13 0x0000000000488bf5 in iseq_mark (ptr=0x13a8d20)
    at /var/www/autobuild-yarv/src/iseq.c:71
#14 0x000000000041b4f3 in gc_mark_children (ptr=1, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:991
#15 0x0000000000488bf5 in iseq_mark (ptr=0x12183a0)
    at /var/www/autobuild-yarv/src/iseq.c:71
#16 0x000000000041ba5e in mark_entry (key=950534, value=950534, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:732
#17 0x00000000004720c2 in st_foreach (table=0x182b0b0,
    func=0x41ba50 <mark_entry>, arg=3) at /var/www/autobuild-yarv/src/st.c:460
#18 0x000000000041b71f in gc_mark_children (ptr=46912533953480, lev=3)
    at /var/www/autobuild-yarv/src/gc.c:977
#19 0x000000000041ba5e in mark_entry (key=950534, value=950534, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:732
#20 0x00000000004720c2 in st_foreach (table=0x62eb00,
    func=0x41ba50 <mark_entry>, arg=2) at /var/www/autobuild-yarv/src/st.c:460
#21 0x000000000041b72b in gc_mark_children (ptr=46912506128840, lev=2)
    at /var/www/autobuild-yarv/src/gc.c:978
#22 0x000000000041b76d in gc_mark_children (ptr=46912552532720, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:864
#23 0x0000000000488bcc in iseq_mark (ptr=0x226dec0)
    at /var/www/autobuild-yarv/src/iseq.c:74
#24 0x000000000041b4f3 in gc_mark_children (ptr=1, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:991
#25 0x0000000000488bf5 in iseq_mark (ptr=0x1de72c0)
    at /var/www/autobuild-yarv/src/iseq.c:71
#26 0x000000000041ba5e in mark_entry (key=950534, value=950534, lev=1)
    at /var/www/autobuild-yarv/src/gc.c:732
#27 0x00000000004720c2 in st_foreach (table=0x637ee0,
    func=0x41ba50 <mark_entry>, arg=3) at /var/www/autobuild-yarv/src/st.c:460
#28 0x000000000041b71f in gc_mark_children (ptr=46912506071960, lev=3)
    at /var/www/autobuild-yarv/src/gc.c:977
以下略

struct RClass * 46912545231680 の m_tbl の中身 (NODE) のうちどれかの nd_file が壊れてるもよう。

m_tbl の中身は一個だけ (46912545227000) であった。

(gdb) p $4->bins[10]->record
$19 = 46912545227000
(gdb) p (struct RNode*)$19
$20 = (struct RNode *) 0x2aaaad9800f8
(gdb) p *$20
$21 = {flags = 33087, nd_file = 0xa66e31 "(eval)", u1 = {node = 0x0, id = 0,
    value = 0, cfunc = 0, tbl = 0x0}, u2 = {node = 0x2aaaad980148,
    id = 46912545227080, argc = 46912545227080, value = 46912545227080}, u3 = {
    node = 0x0, id = 0, state = 0, entry = 0x0, cnt = 0, value = 0}}

壊れてない。 えーと、flags=33087 は NODE_FBODY で、u2.value = nd_body か。 NODE_FBODY の nd_body って何が入ってるんだっけ。NODE_METHOD?

(gdb) p $26->u2.value
$28 = 46912545227080
(gdb) p (struct RNode*)$28
$29 = (struct RNode *) 0x2aaaad980148
(gdb) p *$29
$30 = {flags = 32831, nd_file = 0xa66e31 "(eval)", u1 = {
    node = 0x2aaaad981340, id = 46912545231680, value = 46912545231680,
    cfunc = 0x2aaaad981340, tbl = 0x2aaaad981340}, u2 = {
    node = 0x2aaaad980170, id = 46912545227120, argc = 46912545227120,
    value = 46912545227120}, u3 = {node = 0x0, id = 0, state = 0, entry = 0x0,
    cnt = 0, value = 0}}

flags=32831 は T_NODE の NODE_METHOD。

NODE_METHOD.nd_clss は struct RClass *。 NODE_METHOD.nd_body は NODE_BMETHOD。

なぬー。もうこの先は NODE ないじゃん。どこで落ちてんだよ。

(23:25)

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

ささだ [なおしたつもり。]

青木 [よくこれだけでわかるなあ……。さすがだ。]


<前月 | 最新 | 次月>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|