もうちょい正面を向いてしゃべるべきだった。 と、るびまに載る写真を見て思った。 ノートパソコン買ったばっかりだったもんでスクリーンと 画面の両方を映す方法がよくわかんなくて、 スクリーンにしか画面が出てなかったのが原因。
しかし、なんでみんな座ったまんま話すんだろうね。 話しづらいじゃんか。
(03:00)
> C言語に挑め。購入者率 1% > > 毎年8月の決まった日に、1人が買出しに行き、1人が売り子になる怪奇。 > 巨大同人市場を巡る闘争から紡がれる負の連鎖。 > 平成に隠蔽された怪プログラムが、暴走する。 > 仕様変更か。バグか。それとも祟りか。
おまえら
アホか――――――――――――――ッ!
(19:56)
とりあえず新しいメソッドを 1.8 に追加するのはあきらめて、 マージを先にやることにする。
と思ったら 1.9 が変わりすぎててマージできない。 しょうがないので 1.9 のをそのままつっこもう。
(01:09)
~/c/net/test % ruby-1.8.2 -I~/c/ruby/lib test_http.rb aamine@serenade zsh: 7142 illegal hardware instruction (core dumped) ruby-1.8.2 -I~/c/ruby/lib test_http.rb
どうして俺がなんかするたびに落ちるんだよ! いくらなんでも秘孔つきすぎにも程があるよ! SIGILL なんて出たのは超久しぶりだよバカヤロー!
新しいアーキテクチャは恐いですなあ。
(01:39)
~/c/net/test % ruby-1.8.2 -I~/c/ruby/lib test_http.rb aamine@serenade /home/aamine/c/ruby/lib/webrick/httpauth/htpasswd.rb:38: [BUG] Segmentation fault ruby 1.8.2 (2004-12-25) [x86_64-linux] zsh: 17355 abort (core dumped) ruby-1.8.2 -I~/c/ruby/lib test_http.rb
gcc をアップデートしたら無事 SEGV になりました。 よかったよかった。よくねえよ。
とりあえず -O2 を -O0 にしてみる。
~/c/net/test % ruby-1.8.2 -I~/c/ruby/lib test_http.rb aamine@serenade /home/aamine/c/ruby/lib/webrick/httpauth/htpasswd.rb:38: [BUG] Segmentation fault ruby 1.8.2 (2004-12-25) [x86_64-linux] zsh: 24913 abort (core dumped) ruby-1.8.2 -I~/c/ruby/lib test_http.rb
だめか。
……冷静に考えると 1.8.2 より 1.8 HEAD で試すべきだなあ。 意外と修正されてたりするかもしれないし。
~/c/net/test % /usr/local/pkg/ruby-1.8/bin/ruby -I./lib test_http.rb ~/c/net/test % aamine@serenade
なおってたー! ありがとうパッチモンスター!
それにつけても AMD64 はコンパイルが速くてよいですな。
1.9 の net/http は 1.9 の net/protocol に 凄い勢いで依存していることが判明してしまった。 これをアップデートすると net/smtp と net/pop も道連れにならざるをえない。どーしよ。
どっちも SSL 対応が入っちゃうのか。 これはけっこうヤバいな。
…………うーん。まあいいか。 ねこそぎ持っていこう。
(02:22)
しまった、今日は RHG 読書会じゃないか! すっかり net 関係をいじるつもりになってたよ。
今日はもうノートパソコンは置いていくかぁー。 Windows 持ってっても意味ないし。 あのマシンは重くて嫌になる。
net/https.rb をマージしてねえし……。 これだからバイト直前にコミットするのは嫌なんだ。 作業したおかげで昼飯食いそこねるし、踏んだり蹴ったりだ。
なんで test-all が失敗しなかったのかと思ったら、 openssl.so がコンパイルされてなかった。 Debian の libssl-dev パッケージを入れていなかったのが敗因。 ライブラリを入れたら対応する *-dev も勝手に入れる、 みたいなことはできないもんかな。
(01:08)
http://page8.auctions.yahoo.co.jp/jp/auction/h29324018
Itanium 2 1GHz の 1U サーバが 10 万を切った。 恐ろしいことだ。
ここんとこ rx1600 が怒涛の勢いで放出されてたけど、 そろそろ打ち止めかな。
(01:52)
今日は BioRuby の片山さんに UltraSPARC 96way マシンの群れを見せてもらった。 やっぱしラックはよいね! ラックさいこう!
ついでに Mac もいいなあと思い始めてしまった。 以前からあの「フニョッ」ていうやつはいいなあと思ってたんだけど、 それも含めて Mac のいろんなインターフェイスは巨大モニタでこそ 真の威力を発揮するのだということが今日初めてわかった。 だいたい今のモニタは根本的に小さすぎるんだよ。 なんですか 17" だの 18" だの。15" なんて問題外だし。
バイオインフォマティックスな話も聞いたのだけど、 インフォ以前にゲノムとか遺伝子とかの基本用語がわからないありさまなので めっちゃ基本的なところから教えていただきました。 今日だけでずいぶん知識がアップした……ような気がする。 ゴミかと思われてたけどゴミじゃないかもしれない部分とか。
えーと他には…… PyMol というのが凄かった。 たんぱく質 (分子構造?) の立体画像をグリグリいじれる。
(02:24)
え、21 日に 1.8.3 リリース?! せめてもう一回 preview (preview 3) がないと恐いなあ。
(07:44)
めも: fileutils を急いでコミットする
17 日は Open Source Conference 2005 / Fall でした。 わたしも Ruby セッション「あなたの Ruby コードを添削します」でしゃべってきました。 Ruby セッションを聞いてくださったみなさま、 ソースコードを提供してくださったみなさま、ありがとうございます。 ちょっと喋りすぎて失敗したーと思ってたんですが、わりと評判がよくて安心しました。 やっぱり事前に時間を計測しないとだめですね。 フォントとかモニター関係でゴタゴタしたのも反省点です。 インストールしたばっかりのシステムを使ったのがまずかった……。
以下のとこにわたしの担当した Pukipa (Pukiwiki parser) のソースコード (添削前・添削後) を置きました。
なお、pukipa.rb のオリジナルは rails2u の gorou さん作です。 あ、これもページに書いとかないとな。
(02:29)
remove_entry_secure を足した時点で remove_entry が必要になり、 そうすると大変更が避けられなくなる。 結局これもゴッソリと 1.9 から持っていく羽目になった。
うーん、問題が起きなきゃいいのだが……。
(06:44)
来たぜコンテッサー! 色は現場にあったのと同じライムグリーンで。 笹田さんとたださんが買っていたということを後から知ったんだけど、 偶然にもどちらとも色が違っていた。 オレンジとどっちにしようか迷ったんだけど、こっちにしてよかった……。
(09:04)
うおー、ツッコミ SPAM の絨毯爆撃くらってる。 巧妙なことに次々と IP アドレスを変えてきているようだ。 しかも向こうはこちらの動向をちゃんと認識しているらしく、 POST を連発してきた上位 10 アドレスを deny したら、 わざわざ名前を変えたツッコミを入れてきやがった。なめやがって。
売られた喧嘩は買わねばなるまいが、さて、どうするか。 単純にフィルタするだけだと負けた気がするしな。 いまのところ、チェックボックスかボタンのどちらかを 大量に生成する (が、一つ以外は見えないようにしておく) というのを考え中。 CSS で消すのは簡単だけど、w3m でも簡単に使えるようにするのが難しいのう。
(09:34)
テストをコミットしわすれたかー!? と思ってあせってコミットしたら余計エラーが増えた。くそう。
つうか、さっき全部テスト通したはずなのになあ。 いったいどうなってんだ。
(10:07)
エラーは増えていなかった。 ruby が古いだけだった。
んで [ruby-dev:27145] はどうかと言うと、 二つめはテストの間違いだが一つめは純粋な仕様の変化のせいだ。 そういえば仕様変更した記憶がかすかにある。 dereference_root=>true にすべきだろうな。
ん? 違うじゃん。これはルートじゃなくて途中のファイルか。 これは単なるバグだ。テストを修正で OK。
ああいや、やっぱその次でルートのテストをしてるんだな。 これは変えないようにすべきだ。
あれー、でも copy_entry はもとから dereference=>false なのか……。 なのになんでルートがシンボリックリンクリンクにならないんだ?
……そうか、バグってるからか……。しょんぼり。 これは仕様変更ていうより修正ですな。修正。
(10:39)
Tru64UNIX 5.1b は意外にもスカッと通った。 YAML 以外は。YAML 以外は。
Cygwin は SEGV。
SEGV?!
(12:13)
うおっ、ripper がブロックしてるー?!
と思ったら、がんばってパースしていた。 びっくりしたー。
しかし、いくら全ファイルパースしているとは言え、えらい遅いな。 確かに ripper はけっこう遅いが、ここまで遅くはないと思うのだが。
えーと 47 秒で 1583 ファイルだから…… 1 秒で 33 ファイルか。 あーなんだ、それほど遅くはないじゃん。数が多すぎるだけだ。
(20:00)
Rubyのバグ勝手にトラッカー から簡単なやつをいくつか潰した。
(13:00)
やっぱリリースノートくらいは作ろうかなと思うわけです。
とりあえず ChangeLog をファイルでソートしてみた。 ChangeLog 形式は意外とパースがめんどいことがわかった。 グロブを使う人がいるからだ。しかも書きかたが間違ってたりして。
まあそれはともあれソートして 3000 行くらいのものができたのだが、 そこからが問題だ。俺が今日やったくらいじゃ絶対に終わんないだろうし、 こういうときこそ人海戦術か。どっかの Wiki に置いて分担してやろう。
他に、そのリリースノートは日本語と英語のどちらで書かれるのかという問題がある。 どちらにせよ英語のリリースノートが必要であることは間違いないのだが、 英語でまとめて日本語に訳すのか、 日本語でまとめて英語に訳すのか、 日本語と英語を並列でやるのか、 てんでバラバラにやるのか、選択しなければなるまい。
俺の案は、まず英語の Wiki に投げて ruby-talk の暇な人達に英語版を作ってもらう。 で、きっと英語版のほうが進捗が早いので、 それを参考にしつつも独立に日本語版を作る (訳さない)。 たぶんこれが双方にとって最も作業しやすい形態だろう。
とりあえず ruby-dev に投げてみよう。
(13:29)
RWiki にあったのか……。しぼむ〜。 せっかく作ったから途中経過を置いとく。
(20:04) (20:34)
東芝の ER-CK2 を買いました。 エントリークラスの機械ですが、 個人用途ならこのクラスでも十分です。 まだ使いはじめて一週間ていどですが、 あまりの便利さに驚愕しました。 よくこれまで使わずにやってこれたものです。
ちなみに電子レンジの話です。
(21:01)
have_link? が true になるということは、 ハードリンクは使えないくせに API の link(2) は存在するということか。 嫌すぎる……。
一つめのエラーは UID がバカでかいってことかなあ。
(21:53)
そうか、make の時点で *.rb を作ってももう遅いのか。 mkmf.rb になんかインターフェイスがあったっけ?
……めんどくさい。 PARSER_EVENT_TABLE と SCANNER_EVENT_TABLE だけ C で定義して、 あとは module_eval でどうにかしよう。なんか逃げてるっぽいが。
(03:22)
The methods FileUtils::Verbose.compare_file and FileUtils::Verbose.uptodate? were public in previous Ruby versions. They (and perhaps more methods) are private in Ruby 1.8.3.
やっちまった……。
(04:57)
超久しぶりに setup.rb をリリースしました。
今回はかなりいろいろ追加しました。詳しくは NEWS を参照のこと。
(02:47)
OptionParser を難しいと思ったことはないなあ。 getopts からの移行だったから、むしろ嬉しいことのほうが多かった。 嬉しさのあまりツールはほとんど optparse に移行しちゃったし。 具体的にはこのくらい。
~ % grep -l optparse c/*/*.rb c/*/bin/*.rb | wc -l 55 ~ % grep -l getopts c/bin/*.rb c/*/bin/*.rb | wc -l 7
on てメソッドも Gtk の on_click と大差ないので違和感はない。 強いて言うなら on の引数がよくわかんないな。 いろいろ条件 (制約値?) が書けるみたいなんだけど、 何が書けるのかいまだに知らない (知ろうとしていない)。
optparse で嬉しかったことと言えば、 ヘルプメッセージをオプションとまとめて書けるようになったこと。 getopts ではヘルプメッセージを自分で書かなきゃいけないのが面倒でしかたがなかった。 あと、--help のときは stdout に出したいんだけどエラーのときは stderr に出したい。これも getopts だとめんどくさい。 optparse だと普通に書ける。
しかし困っていることもないではない。
num = nil # ← これがめんどくさい parser = OptionParser.new parser.on('-c NUM') {|n| # ちなみにここで |num| とやる方法は嫌い num = n }
def usage(parser, msg) $stderr.puts msg $stderr.puts parser exit 1 end
とかいう場合。 でも、parser の特異メソッドにすりゃ済むなあと今さら気付いた。
def parser.usage(msg) $stderr.puts msg $stderr.puts help() exit 1 end
こういうメソッドが最初から定義されてると嬉しいのだが。
ちなみに getoptlong は可能なかぎり使いたくない。 1.6 から 1.9 のすべてで警告なしで使えるのが getoptlong だけというのは実に腹立たしいことだ。 ReFe ではやむをえず getoptlong を使っているのだが、 あまりにムカついたのでラップして使ってる。
(21:31)
http://www.rubyist.net/~nobu/t/20050925.html#p01
* [ruby] $INSTALLFILES make の時点で *.rb を作ってインストールするには、 $INSTALLFILES = [["hoge.rb", "$(RUBYLIBDIR)"]] インストールするファイル名(のglobパターン)、インストール先のディレクトリ、 インストールする元のファイル名から取り除くprefix、をeachでyieldするもの。
ああ、やっぱりあるんですね……。 今度このシチュエーションに出会ったら使います。
(21:39)
これかー
2004-12-22 Paul Eggert <eggert@cs.ucla.edu> * NEWS: Bison-generated parsers no longer default to using the alloca function (when available) to extend the parser stack, due to widespread problems in unchecked stack-overflow detection.
うーむ、パース後に GC を起動するのはできるだけ避けたいしなあ。 パーサスタックを Ruby から取る方法があれば一番いいんだよな。 調べてみよう。
(13:27)
> Macro: YYSTACK_USE_ALLOCA > > Macro used to control the use of alloca when the C LALR(1) parser needs to > extend its stacks. If defined to 0, the parser will use malloc to extend > its stacks. If defined to 1, the parser will use alloca. Values other than > 0 and 1 are reserved for future Bison extensions. If not defined, > YYSTACK_USE_ALLOCA defaults to 0. > > If you define YYSTACK_USE_ALLOCA to 1, it is your responsibility to make > sure that alloca is visible, e.g., by using GCC or by including <stdlib.h>. > Furthermore, in the all-too-common case where your code may run on a host > with a limited stack and with unreliable stack-overflow checking, you > should set YYMAXDEPTH to a value that cannot possibly result in unchecked > stack overflow on any of your target hosts when alloca is called. You can > inspect the code that Bison generates in order to determine the proper > numeric values. This will require some expertise in low-level > implementation details.
と、いうことらしいですよ。うーむ。
うわあ、パーサスケルトンが m4 になってる。 きみらどうしてそんなに m4 が好きなんだ。
(14:01)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
■ 小林栄 [Haskell版とrubyを対決させようとして test/fun.rbをちょいと改造
def maware(n)
if n == 0
'Owattazo'
else
fact(10)
maware(n-1)
end
end
puts(maware(2000))
ruby fun.rb
Illegal instruction (core dumped)
OSC2005でお会いした時の雑談にするのを忘れておりました。
ruby 1.8.2 (2004-12-25) [i386-freebsd5] もうすぐ1.8.3なのに。]
■ なかだ [たぶんstack overflowでしょう。
確実に捕まえる手段は今のところありません。]