Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...
Net::HTTP#finish・Net::POP3#finish・Net::SMTP#finishの変更は巻き戻されました。Net::HTTP#start・Net::POP3#start・Net::SMTP#startのそれぞれで、セッションの開始に失敗したときにソケットを閉じるようになりました。Net::SMTP#started?が常にfalseを返していたという問題が修正されました。whileまたはuntilを使っていた場合、そのイテレータに渡すブロック内でbreakすると、ブロックではなくwhile/untilを抜けていた、というバグが修正されました。[ruby-dev:21434]Process::Status#inspectの出力がさらに親切になりました。
_ mswin32ではSOAP4Rのtestで幾つかのFailureと一つのErrorが発生する。
Failureについては原因はわかっている(MSVCRTのsprintf()の出力が仮定と一致していない)のでどうでもいいのだが、問題はErrorである。
ある程度は追ってあるんだけど、問題がSOAP4RにあるのかWEBrickにあるのかRubyそのものにあるのかが切り分けられない...
_ ところで、問題のtestはtest/soap/calc/test_calc_cgi.rbなんだけど、RUBYBINにConfig::CONFIG["EXEEXT"]がないのでそもそもCGI自体がまだ実行できません。
私が追っかけているのはもちろんそれ以降の話。
_ 問題1。mswin32のexecはpidが変化する。結果として親は孫の終了を待つことができない。
問題2。なぜかtest/soap/calc/server.cgiの実行に異様に時間がかかる。
_ 問題1はそういうものなので、rubyを変えてexecをsystem + exit相当にするか、WEBrickを変えてそうしてもらうか、のどちらかしかない。
問題2はよくわからないが、1実行で10分くらいかかっているような気がする。おそろしや。
_ つっこまれてしまいました。
「pidが変化する」はたしかに嘘っぽい記述ですね。まあ、わざとなので(と、言い訳しておく)。
requireしたときとで定数のスコープに違いが発生する(requireしたときにスコープがおかしくなる)バグが修正されました。[ruby-dev:21415]NoMemoryErrorをrescueしても常態に復帰できない問題が修正されました。[ruby-dev:21453]rb_thread_raise()の第3引数にvolatileが追加されています... ruby_signal_name()の戻り値にconstが付きました。Etc.setpwent・Etc.getpwent・Etc.endpwent・Etc.setgrent・Etc.getgrent・Etc.endgrentの各メソッドが追加されました。Socket#gethostbynameの内部で逆引きを行っていたのを行わないように変更されました。[ruby-talk:83002]Etc.getgrentがグループでなくパスワードを返していたバグが修正されました。XSDFloat・XSDDoubleが一部のプラットフォームで-0.0の符号を失ってしまう問題が修正され... てないですね。AssertionFailedErrorを捕捉することがなくなりました。$!をセットしてエラーの起きた文字列をエラーハンドルブロックのパラメータとするようになりました。warnが常にnilを返すようになりました。[ruby-dev:21416]Marshalによってオブジェクトのインスタンス変数が変化することがあったのが修正された、んでしょうか? 読み違えてるかも。TimeのMarshal処理が変更されました。元ネタは?Time#initializeがなくなってしまっていた不具合が修正されました。[ruby-dev:21469]a #.#のようなコメントがあるとインデントがおかしくなる問題が修正されました。[ruby-dev:21465]OpenSSL::Engineというモジュールが追加されました。ハードウェア暗号エンジンインターフェースをサポートするものです。Iconv::Failure#initializeが用意されました。
_ 全然Rubyと関係ないけどYsVIなのです。
発売が9月27日。手元に届いたのが9月29日。インストールしたのが10月2日(仕事が忙しくて...)。というわけで今朝がよくやく初プレイ。1週間遅れかよ。
_ とりあえずの感想。
うーん、確かにこれはYsだ。少なくともYsIIIよりはYsっぽい。
現在、Lv13、剣1Lv4。平原でのレベル上げ楽しい〜。
_ Lv22、剣1Lv6、剣2Lv5。
洞窟で落下しまくり楽しくない〜。
そもそも正しいルートで進んでいるんだろうか? まあ、敵に攻撃が当たるから間違ってはいないんだろうけど...
_ 寒いというと語弊があるな。お風呂というほど熱くはない、くらいか。
のんびり入れていい感じ。
Test::Unit::Assertions.assert・Test::Unit::Assertions.assert_block・Test::Unit::Assertions.flunkが失敗時にデフォルトでメッセージを出力するようになりました。optparseを使用するようになりました。OpenSSL::ASN1というモジュール(とその配下の幾つかのクラス)が追加されました。Pathname#to_sはインスタンス変数@pathをそのまま返すのではなくその複製を返すようになりました。インスタンス変数@pathはinitialize時にfreezeされるようになりました。Pathname#childrenというメソッドが追加されました。パスが指すディレクトリ内の全ファイルのうち、'.'・'..'を除くものを配列で返します。Pathname#each_lineというメソッドが追加されました。Pathname#foreachlineのaliasです。XSDFloat・XSDDoubleが-0.0の符号を失ってしまう問題が解決されました。今度はばっちりです。X509V3_set_nconf()という関数がないとき、コンパイルに失敗する問題が修正されました。そのような環境ではOpenSSL::X509::ExtensionFactory#config=はNotImplementedErrorを発生するようになりました。Syck::Loaderに@anchorsというインスタンス変数が追加されました(外部からアクセス可能)。Test::Unit::TestSuite#<<がテストの配列を返していたのが、selfを返すようになりました。Test::Unit::TestSuite#deleteというメソッドが追加されました。その名の通り、指定されたテストを削除します。Test::Unit::Collector::ObjectSpace#collectが上記二つの変更に追従し(というか、このために上記二つの変更が行われました)、テストスイートの階層(hierarchy)を保存するようになりました。URI::FTP#to_str・URI::MailTo#to_strがそれぞれto_sに名前を変更されました。[ruby-dev:21473]Pathname.newに\0を含む文字列を引数で与えるとArgumentErrorが発生するようになりました。Pathname#relative_path_fromというメソッドが追加されました。引数からselfへの相対パスを返します。Pathname#each_entryというメソッドが追加されました。旧来のPathname#dir_foreachと同じです。Pathname#foreachline・Pathname#chdir・Pathname#dir_foreach・Pathname#foreachはそれぞれobsoleteになりました。Pathname#each_line・Dir.chdir・Pathname#each_entry・Pathname#each_lineまたはPathname#each_entryを使ってください。SOAP::RPC::CGIStubが"Status: XXX MMM"という行をHTTPサーバ(むしろHTTPクライアント?)に返すようになりました。たぶん[ruby-list:38460]の結論。SystemStackErrorを出して止まってしまい、rubyを構築できないという問題が修正されました。[ruby-dev:21483]Init_stack()で、変数spaceの型がdoubleからunsigned intになりました。returnではなくbreakを使うようになりました。ACLクラス(lib/drb/acl.rb)が追加されました。IPアドレス単位でのアクセス制御が可能になります。DRb::DRbSSLSocketクラスが追加されました。begin〜rescue〜else構文で、rescueされた場合にもelse節が実行されるバグが修正されました。[ruby-dev:21482]marshal_dumpから回ってきた場合、Marshal内部でダンプできなくてもエラーが起きなくなりました。def foo █ endまたはdef foo *block; endがsyntax errorになるバグが修正されました。class ::Fooという構文が許容されていなかった問題が修正されました。[ruby-talk:83514]ppを使うようになりました。Test::Unit::Assertions#use_pp=にfalseを代入すればこの挙動を抑制できます。no_proxyが効いていなかった問題が修正されました。[ruby-dev:21484]Test::Unitの変更のせいで動かなくなっていた問題が修正されました。XSD::XSDDateTime内部のRationalから数値文字列への変換時のバグが修正されました。ENDブロックがあるとエラーが発生するようになっていたバグが修正されました。[ruby-dev:21497]
_ 土曜日の朝、地元の駅でZnZさんと合流して、午前9時頃出発。
淡々と阪神高速を抜け、淡々と中国道を走り、午前10時頃加西SA(not葛西)で朝食。ちなみに私は天ぷらそば。SAで猫とちょっとたわむれたり。
朝食後も淡々と中国道を走り、淡々と米子道を走り、終点で高速道路から吐き出される。このとき12時頃。
_ 実は私は目的地周辺の地図しか見ていなかったので(ひどい)、ここから現地へどうやって行くのがいいのかわからないという問題が発生。
「まあ、国道9号線でいいはずだよねー」と思いながら走ってみる。
走り出すとすぐ「有料道路」という看板に変わったので、これを避けて無料の9号線を走り続けることにする。実はこれが失敗だった。
走っても走っても「玉造温泉」とか「玉湯」とかいう看板が見えないので不安になってくる。ひたすら走ってるうちに開始時刻の13時を過ぎる。しょぼーん。
遅刻確定したのでコンビニで昼食を確保。ついでに地図を確認し、道が間違っているわけではないことは確認。
_ 結局13時半頃に宿に到着。車を捨てて会場へ。
3階の会議室に「遅れてすみませーん」と言いながら入ってみたら... 誰もいねーよ!
ホワイトボードに「2階の喫茶にいます」という書き置きがあるのを発見。ZnZさんと二人でもぐもぐとコンビニおにぎりを食べた後、その喫茶店に行ってみる。
...
みんな昼飯食ってるよ! 買ってこなくてよかったじゃん!
しかたないのでソフトクリームでも食べよう... と思ったのだけど、注文取りに来ないし。
_ 3階に戻ってミーティング開始。
いつものように自己紹介があって、そのあとはRubyのコアについていろいろ聞こう、という時間。せっかくなのでいくつかまつもとさんに質問してみました。
他にもなんか聞いたっけ?
なぜか「へぇー」「へぇー」と会場にへぇボタンの音が響き渡っていたり。
_ 括弧の省略の話になったので、「レシーバがなくてかつ引数がない場合(つまり外見上変数へのアクセスかメソッド呼び出しかを区別できない場合)には括弧が省略できない」という仕様を提案してみる。うまくいくか悲惨なことになるかは知りませんが(無責任)。
_ そのへんの流れで、ささださんが「def foo &argってsyntax errorですよね」と言い出す。会場は「へぇー」の嵐。
def foo(&arg)やdef foo a, &argは通るのでこれはバグでしょう、という結論になって、画面をプロジェクタで投影して、まつもとさんによるrubyインタプリタデバッグ実演会開始。
「直った」「いやmake testも通してください」「通った」「いやtest/runner.rbも通してください」「通った」「いやテストも追加しておいてください」「追加した」というやりとりがあったりなかったり。
そのときの修正内容そのままかどうかは確認してませんが、これがそうです。
_ RHG読書会サンプル(?)。そうか読書会ってこういうことしてたのか。
第2章だったので、「すべからく」にみんなで一斉にツッコむ。まあお約束。詳しくは正誤表参照。
まつもとさんによるアイデンティティの解説があったり、なぜstruct RNodeの中身がああなのか、の説明があったり。
_ ささださんによる、次世代開発環境についての発表。
いやー、すばらしい内容でした。感動しました。さすがです。
_ てなあたりで時間が来たので宿へ移動。
とりあえず宴会の時間まで温泉。温泉については昨日書いた通り。
温泉から出たら「宴会まであと2分!」というイベントがあったりなかったり。
_ 宴会は食べても食べてもきりがなく。食べすぎだー。
各自いろいろ談笑してたわけですが、中でもスーパークリエーターはやはり只者ではありませんでした。
_ 宴会後は各自思い思いに部屋で楽しむということに。
基本的には剣を振る人たちと(飲みながら)お話する人たちに別れていたんだと思います。で、随時温泉に入る、と。
私は剣を振る人たちだったのだけど、やはり某勇者による「超かっこいい」模範演技がすばらしかったです。どうやっても絶対に必殺技が決まらないあたりが特に!
んで、その後はみんなで剣を振る練習とか。
スライムを切って切って切りまくったり、みんなですこすこと必殺技を決めて某勇者いぢめをしたり。
_ 1時くらいになったところで(何時間剣を振ってたんだよ!)、まつもとさんがお帰りになる前にサインを貰おうということでお話部屋に移動。
おっと、書き忘れていたけど、現地の人と大きく遅れてきた人以外にはまつもとさんから「RUBY IN A NUTSHELL」がプレゼントされたのでした(ありがとうございます>まつもとさん)。というわけで、ミーハーな私はいつものようにそれにサインを貰ったのでした。
お話部屋では、なかださんのhack速度とか、飛行機とコンピュータはどっちがエライとか、日本Rubyの会とか、まつもと総裁とか、ユーザはデベロッパを含む...ように見えて実は含んでいないかもとか、自動応答は「お兄ちゃん、いいよ」にしようとか、「そいつ殺せない」とか、えーとあとなんだっけ。
などなど楽しいお話をして、まつもとさんがお帰りになったところで(少なくとも私は)就寝。
_ 朝!
フロントからの電話の音でもそもそと起床。
あー、部屋中(5人)みんな熟睡だったのね。で、今何時? ...朝食に遅刻かよ!
あわてて朝食会場へ。あわてすぎていったん間違えたのは内緒だ。
ついたら全員いるし。寝過ごしたのはうちの部屋だけかよ!
_ 朝食後は私は朝風呂へ。ふつう、朝食の前に行くものだと思うけど、寝過ごしたので消化に悪いけど食後のお風呂。
おお、誰もいない。完全貸し切り状態だ! というわけで、一人で30分ほど露天風呂とか内風呂とかで泳いだりして遊ぶ。
_ 10時前にチェックアウトということでロビーに集合。
なぜか某勇者が現れない... と思ったらこういうことだった。
_ ここでいったんお開き、だったんだけど、それなりの人数が連れ立って車で出雲大社へ。
IEマークが気になったり、猿が踊ってたりしているうちに到着。
出雲大社って階段がないなあ、ということに一人感心する私。いやほら、ふつう、神社って階段を上るもんじゃないすか。これはきっと、古代の社殿が48メートルの高さで上るのが大変だったので、もう階段を上らなくていいように建て直したに違いない、という説を披露してみたり。
あとは巫女さんキターとか、巫女さんキターとか、巫女さんキターとか。
あるいは、突如コイン投げゲーム開始とか。
あるいは、絵馬でネタ探しとか。
あるいは、観光案内写真の撮影技術に思いをはせたりとか。
あ、お昼は出雲そばを食べました。
_ 出雲大社でたっぷり遊んだ(ふつうは遊ばないと思うんだけど)あとは、空港組、松江駅組、ダメ組に別れて解散。
ダメ組は空港組に着いて行く予定だったのだけど、いきなり最初の交差点を逆に曲がって失敗。
さんざん回り道をしたあげく、ようやく空港に到着したら、みなさんとっくに喫茶店でマターリしてらっしゃったのでした。
ここでは主にAQUAネタで盛り上がったり。
_ 時間が来たのでみなさんお元気でー、というわけで、16時半頃、最初と同じくZnZさんと二人で一路大阪へ。
しかし、米子道に入る前から既に寝ながら運転してしまう私。
大山PAでカフェイン剤を投入して、なんとか睡魔に耐えつつ走る走る走る。
トンネル入り口の謎の絵がなかったら途中で死んでたかも。
米子道を過ぎて、中国道に入って、またしても加西SAで休憩。19時過ぎ。ここで夕食を食べて、あとは大阪へ。
最後阪神高速で渋滞にあったけど、21時過ぎに駐車場に帰還。ZnZさんと別れて自宅に帰着。即座に就寝。
_ 例によっていろいろ抜けてると思うけど、こんな感じでした。
とても楽しかったです。みなさまありがとうございました。特に幹事の高橋さん、ほんとうにありがとうございました。
来年もまたどこかの温泉でやれるといいですね。
_ 思い出した。ruby-dev summaryの件。
何をどこでどのようにやってるのかわかんないから参加しにくいのだ、というわけで、適当な週に、普段作業MLでやっていることをruby-listあたりで実際にやってみせて、「これならやれそう」と思った人に参加を呼びかけるのはどうか、という話がありました。
_ 萌えについて。
私にはよくわからないので、ささださんによくわかるようになってもらって教えてもらおうという計画なのです。
つーか私は嫁一筋なので。放置してるけど。
Procクラスの子孫のクラスのnewに対してブロックを引数として渡していた場合(に限定していいのかな)に、対象のクラスではなくProcクラスのインスタンスが生成されていたバグが修正されました。[ruby-talk:83685]Marshal.dump時に、marshal_dumpメソッドを持つオブジェクトでは、インスタンス変数をdumpできなくてもエラーにはならないようになっているのですが、インスタンス変数のインスタンス変数など、元のオブジェクトから間接的に参照されているオブジェクトがdumpできない場合はエラーになっていた、というバグが修正されました。[ruby-dev:21496]w_object()のフラグ引数weakの値がちゃんと引き継がれるように変更されました。NoMethodError(たぶん)が出ていた問題が修正されました。[ruby-core:1583]ENDの定義は今までsyntax errorでしたが、警告に緩和されました。[ruby-dev:21519]T_DATAなオブジェクトをmarshalする場合は_dump_dataメソッドが必要なのですが、例外のメッセージではmarshal_dumpを要求していたバグが修正されました。sendmsg()があるときはrecvmsg()の有無を調べていなかったのを、ちゃんと調べるようになりました。thread_read_select()が削除されてしまっていたのですが、復活しました。binmodeメソッドを持っている場合(おそらく普通のIOの場合でしょう)はそれを呼ぶようになりました。
_ このChangesをどうやって書いているかですが、毎日届くcommit mailを元に、commitログ、該当する(はずの)ChangeLog、ソースの差分、あれば関係するbugsや各メーリングリストの記事、を見ながら自分なりに適当にまとめています。
わからないところはIRCでrrrのみなさんに教えてもらっています。ありがとうございます。(でも間違いがあったらそれは私の理解不足のせい)
間違いや漏れに気づいた方はお気軽にご指摘ください。
_ Lv32、剣1Lv7、剣2Lv7、剣3Lv6。
次のボスは蜂だと思うんだけど、ちょっと今のレベルで勝つのは辛いなあ。
というか、Lv29からずっとレベル上げが続いているのですが...
OpenSSL::ASN1::ObjectId#oid・OpenSSL::ASN1::ObjectId#short_name・OpenSSL::ASN1::ObjectId#long_nameの各メソッドが追加されました。short_name・long_nameにはそれぞれsn・lnという別名もあります。*がある場合のみ#to_aが呼ばれるはずだったのですが、左辺に*がある場合も#to_aが呼ばれていた、という問題が修正されました。[ruby-dev:21527]NODE_TO_ARYが追加されました。ENDのネストが2回までしか許されていませんでしたが、3回以上のネストも可能になりました。ENDブロックと非ephemeralなENDブロックの実行順序。ここで、「ephemeralなEND」とは、anonymous moduleでロードしたライブラリで登録したEND、だそうです([ruby-dev:21516])。
Fcntl::O_ACCMODEという定数が追加されました。O_ACCMODEが定義されてない環境でも、Fcntl::O_ACCMODEという定数は定義されます。XMLRPC::ModRubyServerが最近のmod_rubyの仕様に追従したようです。また、XMLRPC::ModRubyServer.newを自前で定義していたのがなくなりました。
_ おまけ。久し振りに、RUBY_RELEASE_DATEの変更されない一日でした。
_ Lv40、剣1Lv9、剣2Lv8、剣3Lv8。
蜂に勝てなくて困っていたのだけど、蜂に勝てなくても洞窟の敵のほとんどには勝てるということにようやっと気づいた。おかげでレベル上げができて、蜂撃破。その後もがんばって、次のボス(二本腕ビーム)も倒して、街に戻ってきたところまで。
_ 世間の反応を眺めていて思ったこと。
週間ダイヤモンドじゃない! 週刊だ!!
_ 変更はありませんでした。わーい。
...
と、書こうと思っていたのですが、(日本時間の)夜遅くなってからcommitがありました。
Test::Unit::AutoRunnerとしてlib/test/unit/autorunner.rbに切り出されました。Test::Unitモジュールに引っ越しました。Test::Unit::Collectorとしてlib/test/unit/collector.rbに切り出されました。Test::Unit::Collector::Dirクラスはディレクトリ階層を辿ってテストを収集します。使用例はtest/runner.rb。
_ マーシャとライザはとっても仲の良い姉妹でした。
でも、実は、二人は本当の姉妹ではなかったのです...
_ とかいうお話を用意してあったのですが、うちのサーバが落ちまくったあおりをうけてどこかへ行ってしまいました。
舞台は1955年ごろのロシアだとか、ライザは実は大祖国戦争の時にマーシャの父がベルリンで拾った赤ん坊だったとか、いろいろ設定も考えてあったんだけどな(考えるなよ!
ENDブロック内でバックトレースがずれるバグが修正されました。先日来の修正で混入したバグのようです。[ruby-dev:21551]breakで抜けた場合にも、スレッドの値が常にfalseになっていたバグが修正されました。[ruby-dev:21552]$SAFEが1または2でat_exitブロックを登録しても、そのat_exitブロックが実行されるときにはブロック内の$SAFEが0であるという問題が修正されました。[ruby-dev:21557]ProcオブジェクトではFL_USER1〜FL_USER3を$SAFEの記憶領域として使用するようになりました。今までは$SAFE用としてはFL_USER1〜FL_USER2だけを使用していました。IOなど)をmarshal_dumpで返すと、Marshal.dump時でなくMarshal.load時にエラーとなるバグが修正されました。[ruby-dev:21555]・[ruby-dev:21561]Array#packで、-1を"U"でpackしたときのメッセージが変更されました。[ruby-dev:21567]Time#_dumpの実装が変更されました。どうやらTimeクラスはmarshalのテストヘッドのようです。
被捕捉アンテナ類
[\ay antenna (testing)]
[Ant]
[Antenna-Julia]
[LayserあんてなV2]
[nAntenna]
[nuance de Antenna]
[Rabbit's Antenna]
[Read List]
[Ruby hotlinks 五月雨版 (るるりん。)]
[してたま (私的アンテナ with たまてばこ)]
[ただのあんてな]
[ちゃらんぽらん]
[でこぽんリンク]
[なよろアンテナ]
[にっきトレーサー]
[偽善者あんてな - 2nd season -]
[湘南日記放送局(SDB)]
[はてなの各アンテナ]