何を思ったか、いきなり
# rm -rf /usr/local/bin/ruby /usr/local/lib/ruby
してしまいました。あせった。 lib まで消しちゃったもので uconv とか nora とか全部コンパイルしなおしです。 ちゃんと動いてるかな。
ありゃ、次の日になっちゃった。
ぬああ、5 月の日記が消えた!
しかもミスオペではないようだ (コマンドラインヒストリで確認した)。 いったい何が起こったんだ。 迂闊に ruby をバージョンアップしたのがいけなかったのか。 いやそりゃ実はちょっと eval.c 書きかえたんだけど、 いきなりそんなことになるか?
やばいな、もしかして動かしてるだけでどんどん消えていくんじゃないだろうな。 いや違うか、少なくともアップデートしないと変更は起こらないな。 update.rb まわりが変なんだろうか。 あるいは独自の SMTP → HTTP ブリッジのせいかも。
あ、データ自体はメールでコピーが残ってるんで復活できます。 これで安心して破壊テストがやれるってもんだ。うむ。
うーん、ruby の warning が出てるな。 split で文字列が使えなくなったやつか。 問題はないはずだけどとりあえず潰しておこう。
ちなみに eval.c は 1.430 に戻してあります。 なので、イテレータ絡みで変になってるわけではない、はず。
これが関係あるかもしれません。
% ruby -v -e 'p "aaa\n\naaa".split("\n\n",2)' ruby 1.8.0 (2003-05-17) [i686-linux] -e:1: warning: string pattern instead of regexp; metacharacters no longer effective ["aaa\n\naaa"] % ruby -ve 'p "aaa\n\naaa".split(/\n\n/, 2)' ruby 1.8.0 (2003-05-17) [i686-linux] ["aaa", "aaa"]
この影響で CSS 設定が変になったりしてました。
しかし表示のほうは動いてるので、 ウェブ経由で更新するとかの条件が加わると破壊されるのかもしれません。 ファイルが消えたときはかなり連続で「編集」してたので たぶんその影響があります。
ちなみになんで編集してたかと言うと、パーサがうまく働かなかったからです。 キャプションになるはずのところがどうしても段落になってしまう。 これもたぶん split が影響してるんじゃないかと思うんですが。
ruby 1.8.0 がインストールされているとして、 以下のプログラムをコンパイル・実行するとどうなるか答えなさい (5 点)
#include <stdio.h> #include <stdlib.h> #include "ruby.h" int main(int argc, char **argv) { #if RUBY_VERSION_CODE < 180 puts("Hello, World!"); #endif exit(0); }
~/tmp % gcc -I/usr/local/lib/ruby/1.8/i686-linux t.c -o t ~/tmp % ./t Hello, World! ~/tmp %
「#include "version.h"」を入れないとだめなんだよもん。
いま明かされる衝撃の事実!
~/s/src/ruby % grep -l RUBY_VERSION_CODE *.[cy] class.c hash.c string.c ~/s/src/ruby % fgrep -l version.h *.[cy] error.c version.c
直ったかな。
直ったようだ。結論。
やれやれ。
ところで全然関係ないけどこんな言葉を思い付きました。
……嘘つき。
完全復旧しました。 やっぱし開発版は開発版ですね。 気をつけましょう。
sh の
cat file | head -10
と Haskell の
head :: [String] -> [String] head xs = take 10 xs
はかなり似てる。
ム板のぬるぽスレにこれを張った人は潔く名乗り出なさい!
597 名前:デフォルトの名無しさん 投稿日:03/05/02 0025 raise 1442118444.to_s(36)
「……でも、そんなスクリプト、誰にでも書けるんじゃないの……? そんなものは何の証拠にならないわ」
(ざわ……ざわ……ざわ……)
「そ、そうだ! こんなもの誰にだって書ける! Ruby を知っていれば誰にだって……!」
「ところがそうじゃないんだ……」
「なにっ?」
「このスクリプトだけはそうじゃない…… 長さや複雑さは関係ないんだ」
「な、なにを負け惜しみを……」
「ふ……これを見ろ!」
(ざわ……ざわ……ざわ……)
「こっ、これは?!」
% ruby-1.8.0 -e 'raise 1442118444.to_s(36)' -e:1: nullpo (RuntimeError) % ruby-1.6.8 -e 'raise 1442118444.to_s(36)' -e:1:in `to_s': wrong # of arguments(1 for 0) (ArgumentError) from -e:1
「そうだ…… Fixnum#to_s に引数が導入されたのは 1.8 からなのさ! しかも cvs log によれば 36 を基数にできるようになったのは…… 2003 年の 4 月 14 日なんだ」
(?!)
「そ、そんな……変更からぬるぽスレの書き込みまで…… 二週間くらいしかないってことじゃない!」
「ああ。犯人は相当 ruby の変更に通じているに違いない。 だから間違いなく……犯人はこの中にいる! (どーん)」
我ながらアホなものを書いてしまった。
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.