〜2002年3月下旬〜
御要望にお応えして、
--with-perl-enc-map=/usr/local/doc/ruby/xmlparser-0.6.1-1/Encodings
をつけて作り直し。それだけじゃなんなのでexpatも1.95.2に上げた。 ついでに環境変数XML_ENC_PATHが設定されてたらそっちを優先するようにしたので、 よろしく > なひさん。その差分は同梱のxmlparser-0.6.1-1.diffに。
なんか文字がはみ出て見えるのは大きいフォントを選んでいるとそうなるらしい。
Fix a bug with DHPC lease parsing which broke in non-UTC timezones.
ということらしいが、ISC DHCP 3.0だと
# All times in this file are in UTC (GMT), not your local timezone.
と/var/state/dhcp/dhcpd.leasesに書かれているとおりなのであまり関係ないか。
pthreadsが追加されたようだ。
21 March 2002, uClibc 0.9.10 Released! CodePoet Consulting is pleased to announce the immediate availability of uClibc 0.9.10. This release adds pthreads support (including pthreads support for mmu-less systems!). Additionally, thanks to Manuel Novoa III, we now have a completely new stdio library, which is small, standards compliant, supports pthreads, wide/narrow streams, large files, and can even operate in a low-memory unbuffered mode. Many, many bugs have been fixed and a number of additional applications now compile and run perfectly. Even with all these changes, uClibc continues to be very small. On x86, a default build of the uClibc C library is still just 168k.
1.7にVMS対応が入った。
更新。
更新。
grepのmultibyte対応はものすごく遅い。
% ls -l ruby-talk.0201 -rw------- 1 watanabe ruby 9967155 Feb 2 00:48 ruby-talk.0201 % time /usr/bin/grep hogehoge ruby-talk.0201 /usr/bin/grep hogehoge ruby-talk.0201 0.37s user 0.07s system 88% cpu 0.497 total % time grep hogehoge ruby-talk.0201 grep hogehoge ruby-talk.0201 24.60s user 0.53s system 98% cpu 25.405 total % time LANG=C grep hogehoge ruby-talk.0201 LANG=C grep hogehoge ruby-talk.0201 0.20s user 0.51s system 99% cpu 0.715 total
Rubyに負けてるじゃん。
% time ruby -Ke -ne 'print if /hogehoge/' ruby-talk.0201 ruby -Ke -ne 'print if /hogehoge/' ruby-talk.0201 17.11s user 0.68s system 97% cpu 18.245 total
あれ?でもRuby 1.7.2は遅くなってるなあ。
% time ruby-1.7.2 -Ke -ne 'print if /hogehoge/' ruby-talk.0201 ruby-1.7.2 -Ke -ne 'print if /hogehoge/' ruby-talk.0201 27.70s user 0.50s system 99% cpu 28.483 total
結局のところRuby 1.7では読み込みが遅くなってるのか。
% TIMEFMT='%U user %S system %E total' % time ruby-1.6.7 -Ke -ne '' ruby-talk.0201 13.12s user 0.56s system 14.567 total % time ruby-1.7.2 -Ke -ne '' ruby-talk.0201 21.65s user 0.62s system 22.444 total
1.7でIOは速くなったんじゃなかったっけ?
% time ruby-1.2.6 -Ke -ne '' ruby-talk.0201 12.26s user 0.56s system 13.054 total % time ruby-1.4.6 -Ke -ne '' ruby-talk.0201 11.87s user 0.72s system 12.655 total
やっぱ1.7は遅すぎる。
% time ruby-1.2.6 -Ke -e 'ARGF.read' ruby-talk.0201 0.08s user 0.76s system 0.816 total % time ruby-1.4.6 -Ke -e 'ARGF.read' ruby-talk.0201 13.32s user 1.02s system 14.540 total % time ruby-1.6.7 -Ke -e 'ARGF.read' ruby-talk.0201 9.71s user 0.81s system 10.583 total % time ruby-1.7.2 -Ke -e 'ARGF.read' ruby-talk.0201 0.85s user 0.89s system 1.776 total
と思ったらIO#readは速い。IO#getsが遅い?
2.7に上げた時から多発してたよくわからないエラーが、 2.7aにしたらピタっと治まったようだ。 そういうエラーになるとw3mはNo Lineになるんだけど、 昨日の雑感 がNo Lineになってまだ駄目なのかと思ったら、ほんとに0バイトのようだ。
更新。
更新。
bashをまだ2.05aに上げてないことに突然気づく。どうせなら
--with-installed-readline
としてインストールされてるreadlineを使おうと思ったら、
checking version of installed readline library... 2.2 configure: WARNING: installed readline library is too old to be linked with bash configure: WARNING: using private bash version
と言われてしまった。しょうがないから上げる。
普通にmakeだけだとstatic libraryしか作らないので、 make sharedとかmake everythingする必要がある。 同様にインストール時はmake install install-sharedてな具合。
で、--with-installed-readlineつけてconfigureしてみると
test: 2a: bad number
と微妙にエラーメッセージがはみ出てる。aとかつけるからだよ。
elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ;
これだと4.2より大きい場合になるが、4.2aはどっちなんだ? ま、いいや、このままで。
更新。mswin32/mingw32のときはwsock32もリンクする必要があるので
--- extconf.rb.orig Wed Jun 20 12:35:18 2001 +++ extconf.rb Sun Mar 24 19:08:44 2002 @@ -49,2 +49,3 @@ have_library("socket", "ntohl") + have_library("wsock32") if RUBY_PLATFORM =~ /mswin32|mingw/ create_makefile("xmlparser")
とした(ntohl, ntohsのため)。
更新。
更新。
更新。
narray.defにはまだna_touch_objectが残っているためエラーになる。 パッチも入れとこう。
出てたのか。
7年半振りのバージョンアップ。
% diff -u1 =(echo a) =(echo b) --- /tmp/zshSsK8La 2002-03-26 22:53:59.000000000 +0900 +++ /tmp/zshMv1olc 2002-03-26 22:53:59.000000000 +0900 @@ -1 +1 @@ -a +b
とタイムスタンプの表示がちとうるさい。 diffにそんなところの精度を期待してないんだけどなあ。 しかも、ほとんどの場合0だと思うんだけど。
zshはtimeが文法に組み込まれているようだ。
% time date Tue Mar 26 22:58:10 JST 2002 date 0.06s user 0.05s system 101% cpu 0.108 total % time LC_ALL=ja_JP.eucJP date 2002年 3月26日 (火) 22:58:12 JST LC_ALL=ja_JP.eucJP date 0.09s user 0.03s system 99% cpu 0.120 total % LC_ALL=ja_JP.eucJP time date zsh: parse error near `time'
おそらくVMS対応のpatchに紛れこんでいたんだと思われる。
% ruby -ne 'p [ARGF.filename,$_] if /\033/' *.c ["bignum.c", "\t *buf = \e(J~\e(B*buf;\n"] ["dln.c", "\t *p2 = '\e(J\\\e(B0';\n"]
なぜか、gccは文句言わなかった。
更新。
なんだかんだでrpmなパッケージをインストールしなきゃいけないこともあるので、 Red Hatからrpm本体を取ってきた。 てゆかこのソースもrpmなんだけど、どこかにtarballもあるんだろうか? Plamoにはrpm2targzがあるのでこれでtarballに変換して中を見ると rpm-4.0.3.tar.gzが入ってた。ぐはぁ。
2.0.3はどうなったんだろう?
これ を見る限り日本語パッチをあてなくてもよさそう。 確かにいけてる。ただSJISなlocale環境は作ってないから、 ja_JP.eucJPでID3タグもEUC-JPにしてだけど。 Autoscroll songnameもできていいじゃん。 Windowsへ持ってくときにSJISに変換することにしよう。
ID3タグを扱うライブラリを RAA で探すとMp3Tagが見つかった。これを使ってみる。 commitすると書き込むわけか。ふむふむ。 songname, artist, album, commentあたりを変換してやればよさそうだ。 "r"とか"r+"でopenしてるので、Windowsではbinmodeする必要もあるだろう。
ところ"r+b"と"rb+"ってどっちかがエラーになる処理系もあったりするので、 "r+"に限ってはIO#binmodeを使ったほうが無難だ。これはそのままCのfopenに渡る。
rpmを入れたのは実はiccのためだったりする。 installのi386をi586に書き換えただけでインストール可能。 あとは
% source /opt/intel/compiler50/ia32/bin/iccvars.sh
でok。
でもrpmはなぜか
% ldd =rpm
not a dynamic executable
だったりするのがちと気になる。
Don't Repeat Yourself(同じことを繰り返すな)。 Andy&Daveのありがたいお言葉。 つまりext/mkmf.rb.inとlib/mkmf.rbのように同じようなものを作ってはいけない。 Shellwords::shellwordsの変更を片方忘れるやつが出てきたりするんだから(意訳:ごめん)。
今ごろではあるが更新。
なぜか
% LC_ALL=japanese xmms &
だとmainもplaylistもSJISになる。 いろんなメニューも日本語になるが、みんな化ける。
% LC_ALL=japanese LANGUAGE=C xmms &
で英語になるので~/.icewm/toolbarは
prog XMMS button1a env LC_ALL=japanese LANGUAGE=C xmms
とした。ID3タグはSJISにする。 というかEUC-JPへの変換はまだ試験的に数曲しかしてないのが幸いしてる。
これを使うとclass定義のほうを変更しないで、いろんなことができる。 たとえばあるメソッドが呼ばれるたびにlog messageを吐かせたいときは、 こんな感じだ。
% cat foo.rb require 'aspectr' class Foo def a() p "a" end def b() p "b" end end class MyAspect < AspectR::Aspect def preAdvice(method, object, exitstatus, *args) print "entering ", method, "\n" end def postAdvice(method, object, exitstatus, *args) print "leaving ", method, "\n" end end MyAspect.ma.wrap(Foo, :preAdvice, :postAdvice, :a, :b) foo = Foo.new foo.a foo.b % ruby foo.rb entering a "a" leaving a entering b "b" leaving b
PREとPOSTのうちどちらかが要らないときはnilを指定すればいい。 Aspect#wrapは正規表現でメソッドの指定もできるので
MyAspect.new.wrap(Foo, :preAdvice, :postAdvice, /\w+/)
てなことをすると、 respond_to?だのinstance_evalだのが呼ばれてる様子がわかって面白い。 いや欝陶しいだけなので、
MyAspect.new.wrap(Foo, :preAdvice, :postAdvice, /^[ab]$/)
と自分で定義したものだけにmatchする正規表現を与えよう。
残念ながらインスタンスメソッドにしか使えないようだ。
更新。
RubyUnitの互換レイヤがあるということなので、 RubyUnitをuninstallしないと面倒なことになるのかなと思ったら、 RubyUnitがインストールされてたらスキップするようだ。
Preconfiguring... Skipping the install of the runit compatibility layer because a version of runit is already installed.
全ファイルがCR+LFだなあ。Nathaniel TalbottさんはWindowsな人なのか。
packages/testunit/lib/pre-install.rbがsrcdir対応してないようだ。 中を見てみると
Dir.chdir("../test/test/unit")
とある。ここはcurr_srcdir相対にすればいい。
Dir.chdir(File.join(curr_srcdir, "../test/test/unit"))
というわけでこんな感じでパッケージング。
% mkdir cygwin; cd cygwin % i386-cygwin-ruby ../setup.rb config % i386-cygwin-ruby ../setup.rb setup % i386-cygwin-ruby ../setup.rb install % cd .. % cat >../testunit.contents DOC=ChangeLog README TODO doc examples CONTENTS=$(RUBYVER_DIR)/test % make -f ../Makefile.pack P=testunit V=0.1.4 T=cyg % make -f ../Makefile.pack P=testunit V=0.1.4 T=min sym % make -f ../Makefile.pack P=testunit V=0.1.4 T=dj sym
rubytest.rbのようなものはないらしい。
newdateがdate2になったようなのでパッケージング。
% mkdir cygwin; cd cygwin % i386-cygwin-ruby ../install.rb config % i386-cygwin-ruby ../install.rb setup % i386-cygwin-ruby ../install.rb install % cd .. % cat >../date2.contents DOC=MANUAL* README* sample CONTENTS=$(RUBYVER_DIR)/date2 % make -f ../Makefile.pack P=date2 V=3 T=cyg % make -f ../Makefile.pack P=date2 V=3 T=min sym % make -f ../Makefile.pack P=date2 V=3 T=dj sym
ああ、またおれが好きそうなのが。と思ったら compilercache に触発されてCで書き直したものみたいだ。 Yendot から。
man ccacheすると
cp ccache /usr/local/bin/ ln -s /usr/local/bin/ccache /usr/local/bin/gcc ln -s /usr/local/bin/ccache /usr/local/bin/cc
として使うようだ。 これはもちろん/usr/local/binにgccやccがあったら駄目なので
% mkdir ~/ccache; cd ~/ccache % ln -s =ccache gcc % ln -s =ccache cc % ln -s =ccache i686-pc-cygwin-gcc % ln -s =ccache i586-pc-msdosdjgpp-gcc
としてみた。使うときだけ~/ccacheにPATHを通そう。