Just another Ruby porter,

〜2002年1月上旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2002-01-01 (Tue)

しあわせの書—迷探偵ヨギガンジーの心霊術 - 泡坂妻夫(著)

大晦日のテレビ朝日の特番を見て、早速amazonで注文だと思った人が多いようだ。 って俺もそうなんだけど。いきなりベストセラーになってる。

wget 1.8.1

今年最初のmakeはwgetだ。 例のSSL問題 は直っている模様。

fake.rb

RUBY_VERSIONを書き換えるのを忘れてた。 このままだとrbconfig.rbのバージョンがまずい。 たとえばLinux上では1.6.6のrubyを使っている場合、 cygwin版ruby 1.7.2を作るとrbconfig.rbは1.6.6になってしまう。 fake.rbで1.7.2にしないとmake installでバージョンが合わないのでエラーになる。 じゃなかった。 拡張ライブラリを作るときにmkmf.rbをrequireしたときにエラーになるんだ。 昨日も書いたけどmkmf.rbはrbconfig.rbをrequireしてるから。 というより、1.7.2をインストールしてるのに1.6.6になってしまうのはだめだめだ。

% grep -w PLATFORM **/*.rb

してもext/tk/lib/tk.rbしか出てこないので、 もうちょっとあっさりさせてもよさそうだな。

Ruby 1.7 ext/curses/extconf.rb

あれ?dir_configを追加したはずなのになあ。 ChangeLogにも残ってるし、1.6にだってちゃんとある。 実は1.7のほうはいじってなかったのか?


2002-01-02 (Wed)

Enumerable#select, Array#select

ということは

if [].method(:select).arity == 0
  class Array
    def select(*x, &block)
      if block
        super *x, &block
      else
        indexes *x
      end
    end
  end
end

で1.7互換になるかな。 superのほうは*xは入らないけど、 引数とブロックをいっしょに指定されたときの例外をEnumerable#selectに任せた。 最初

method(block ? :super : :indexes).call(*x, &block)

としてみたが、やはり:superには無理があった。

むき甘栗

中国で人間が一個一個手でむいているという話は聞いたことあるが、 一個むくのに3秒かからないとは。

chomp.split

ruby-talkを見てるとどうもidiom化しつつあるchomp.splitであるが、 空白が区切りなら

% ruby -e 'p "a b c\n".split'
["a", "b", "c"]

とchompはなくてもいい。つまり最後の空のフィールドは無視される。 splitのdefaultの区切りは' 'で、' 'はisspaceとみなされる。 split /s+/と同じ。これはawkからの伝統だ。

/etc/passwdのように:が区切りなら

% ruby -e 'p "a:b:c\n".split /[:\n]/'
["a", "b", "c"]

とも書ける。無視されたくないときは

% ruby -e 'p "a:b:c\n".split /[:\n]/, -1'
["a", "b", "c", ""]

のように2番目の引数に-1を指定する。

ruby-talk 30000通

Subjectについてるからこそ、あれだけ盛り上がるんだという気もする。 ま、どうでもいい話題だからやはり外したほうがいいか。

NArray 0.5.5

作ってみた。で、mkmf.rbのバグを見つけた。.defとdependがsrcdir対応してない。 -I.もないとまずいな。


2002-01-03 (Thu)

WEBrick 1.1.3

forkが関係するのはWEBrick::Daemonだけなので、mingw32もsymlink張っとく。

symlink

手で張るから間違えるわけで、 Makefile.pack にちゃんとターゲットを用意した。

% make -f ../Makefile.pack \
  PACKAGE=webrick VERSION=1.1.3 TARGET=i386-mingw32 symlink

12月のspam

77通(ML宛は除く)。過去最高。


2002-01-04 (Fri)

I run Ruby primarily on:

今のところLinuxがTOP。やはりUnix系が多い。

しあわせの書

番組はそれです。マジックの道具として使います。あの本じゃないとできないらしい。

Cygwin版ruby

ruby-talk MLを見てるとCygwin版rubyはCygwinの評判を落とすだけの存在のように思える。 てゆか君達使い方間違ってるよ。何だってdirだのxcopyだのしたがる?


2002-01-05 (Sat)

version.h

なんか立て続けにcommitしてしまった。すまん。 version.hも2002年になった。

Racc 1.4.1

更新しようと思ってから、すっかり年を越してる。 srcdir対応もされてるから、mkdirしてから作業開始だ。 CygwinとMinGWはやることは同じ。

% mkdir cygwin mingw djgpp
% cd cygwin
% i386-cygwin-ruby ../setup.rb config --ruby-path=/usr/local/bin/ruby
% i386-cygwin-ruby ../setup.rb setup
% upx **/*.so
% i386-cygwin-ruby ../setup.rb install
% cd ../mingw
% i386-mingw32-ruby ../setup.rb config --ruby-path=/usr/local/bin/ruby
% i386-mingw32-ruby ../setup.rb setup
% upx **/*.so
% i386-mingw32-ruby ../setup.rb install

djgppはraccrtとstrscanをwithoutで指定する。

% cd ../djgpp
% i386-msdosdjgpp-ruby ../setup.rb config --without=raccrt,strscan \
  --ruby-path=/usr/local/bin/ruby
% i386-msdosdjgpp-ruby ../setup.rb setup
% i386-msdosdjgpp-ruby ../setup.rb install

Hash.new in 1.7.2

キャッシュとか出てくるということは、どうもみんな

% ruby-1.7.2 -e 'h=Hash.new{1};p h[0];p h'
1
{}

じゃなくて

% ruby-1.7.2 -e 'h=Hash.new{1};p h[0];p h' 
1
{0=>1}

を望んでいるような気がする。 毎回blockが評価されちゃキャッシュにはならないし。

Index: hash.c
===================================================================
RCS file: /home/ruby/cvs/ruby/hash.c,v
retrieving revision 1.59
diff -u -1 -r1.59 hash.c
--- hash.c	11 Dec 2001 03:48:08 -0000	1.59
+++ hash.c	4 Jan 2002 19:26:46 -0000
@@ -296,3 +296,4 @@
     if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
-	return rb_funcall(hash, id_default, 1, key);
+	val = rb_funcall(hash, id_default, 1, key);
+	rb_hash_aset(hash, key, val);
     }

と、変更は簡単だけどこれは受け入れられる挙動なのかというあたりが問題なんだろうなあ。

Racc 1.4.1 その2

--without=raccrtするとracc/parser.rbがインストールされない。 mv pacakges/racc{rt,}/lib/racc/parser.rbすべき? とりあえずdjgpp版は-1をつけてrepackだ。

CVSup

cvsupしはじめて昨日でちょうど一年経った。初回は15MBだったが今では42MBか。

% du -m -s ~ruby
42   /home/ruby

rubyzip 0.2.1

ruby-zlibへのpatchもついてる。 ついでに [ruby-ext:02041] もあてて、ruby-zlib-0.4.0-1として更新しとこう。

"0.4.0" < "0.4.0-1"

% ruby -e 'p "0.4.0" < "0.4.0-1"'
true

だから[prev], [curr]は保たれると思ってsetup.ini.rbを実行してみると逆になる。 ちょっと考えて

% ruby -e 'p "0.4.0-i" < "0.4.0-1"'
false

だからだと気づく。というわけで、-i386-cygwin.tar.gzを削除してからsortしよう。 mtimeでもいいと思うけど。


2002-01-06 (Sun)

BerkeleyDB 3.3.11

クロスコンパイルしてみる。

_ Cygwin:

% mkdir build_cygwin; cd build_cygwin
% db_cv_gcc_2_96_forloop_bug=no \
  db_cv_alignp_t='unsigned int' \
  db_cv_mutex=x86/gcc-assembly \
  db_cv_fcntl_f_setfd=yes \
  db_cv_sprintf_count=yes \
  CC=i686-pc-cygwin-gcc \
  CFLAGS=-Os \
  ../dist/configure \
  --prefix=/usr/local/cygwin-local/BerkeleyDB.3.3 \
  --target=i686-pc-cygwin \
  --host=i686-pc-cygwin \
  --build=i586-pc-linux-gnu \
  --cache=config.cache
% make
% make install

UTIL_PROGSをインストールするとこでエラー。 .exeがついてないからだが、これをインストールしてもあまり意味がないので、 install_utilitiesを外すのが簡単。でも、

UTIL_PROGS=\
         db_archive db_checkpoint db_deadlock \
        db_dump db_load db_printlog db_recover db_stat db_upgrade db_verify

に.exeを足す方法も考えてみよう。 例によってGNU make限定だが、$(addsuffix SUFFIX,NAMES...)がある。

UTIL_PROGS=$(addsuffix .exe,\
         db_archive db_checkpoint db_deadlock \
        db_dump db_load db_printlog db_recover db_stat db_upgrade db_verify)

でokだ。てゆかちゃんとEXEEXTを使ってよ。

_ MinGW:

% mkdir build_mingw; cd build_mingw
% ac_cv_c_bigendian=no \
  db_cv_gcc_2_96_forloop_bug=no \
  db_cv_alignp_t='unsigned int' \
  db_cv_uint8='unsigned char' \
  db_cv_uint16='unsigned short' \
  db_cv_uint8='unsigned char' \
  db_cv_int16=short \
  db_cv_uint32='unsigned int' \
  db_cv_int32=int db_cv_ssize_t=int \
  db_cv_mutex=x86/gcc-assembly \
  db_cv_fcntl_f_setfd=no \
  db_cv_sprintf_count=yes \
  CC='i686-pc-cygwin-gcc -mno-cygwin' \
  CFLAGS=-Os \
  ../dist/configure \
  --prefix=/usr/local/mingw/BerkeleyDB.3.3 \
  --target=i386-mingw32 \
  --host=i686-pc-cygwin \
  --build=i586-pc-linux-gnu \
  --cache=config.cache 

autoconf 2.5xはcacheを作らないのがdefault。 いろいろ試すときはcacheを作ったほうがいい。

このままだとos_sleep.cがコンパイルできない。 os_win32/os_sleep.cを使うようにMakefileを書き換える。 ついでにutilitiesは外す。 あと、build_win32/db_config.hを参考にdb_config.hの最後に

#include <windows.h>
#define fsync(fd) _commit(fd)

を追加。

やっぱだめだなあ。build_win32/db_config.hをそのまま使うべきか。

bdb 0.2.7

BerkeleyDB 3.3.11ができたはいいが、testが通らない。 assertがtrueを要求するようになったからそのあたりは適当に直せばいいだけだが、

tests/btree.rb:17:in `unlink'(TestBtree): Permission denied - \
  "tmp/aa" (Errno::EACCES)

と、どうもopenしたままunlinkできないWin32の制限にはまった模様。 tests/btree.rbは こう するとCygwin, MinGW版ともに通った。 パッケージにまとめて差分を入れとこう。

$stdout.sync = true
$stderr.sync = true

はsshでloginしたCygwin上のzshからMinGW版rubyを実行したときため。 tty?がfalseになるためバッファリングされてしまう。

% ruby -ve 'p [$stdout.tty?,$stderr.tty?]'
ruby 1.6.6 (2002-01-05) [i386-cygwin]
[true, true]
% /c/usr/local/bin/ruby -ve 'p [$stdout.tty?,$stderr.tty?]'
ruby 1.6.6 (2002-01-05) [i386-mingw32]
[false, false]

でもほとんど自分一人の都合にすぎないのでflush.rbを用意して-rflushすることにした。

wget 1.8.1

makeしたのに全然使ってなかった。 なんでかなと考えたら...がうっとしいからlftpgetし勝ちだったからだと気づいた。 1.8.1は

100%[====================================>] 71,017         1.99M/s ETA 00:00

という感じでなかなかいいねえ。

ruby-progressbar 0.3

というわけでprogressbarだ。

% ruby test.rb
test(inc):     100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:09
test(set):     100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:10
test(inc(x)):  100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:11
test(total=0): 100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:00

しあわせの書

とりあえず本屋で探すか。

誠に申し訳ございませんがご注文いただいた以下の商品がまだ確保
できておりません。
      			
  泡坂 妻夫(著) 
        "しあわせの書—迷探偵ヨギガンジーの心霊術"
    商品の発送が4~6週間ほど遅れます。

Toshiya

年が明けてもvirusか。


2002-01-07 (Mon)

log4r 0.9.2

CygwinもMinGWもtestが通ったのでパッケージとしてまとめた。

Ruby 1.6.7

Digest::MD5問題があるので近々出る模様。

"[ruby-talk:12345]" tag is removed

遂に外されたわけだが、今度は[ruby-talk]ぐらいはつけてくれとか言い出すし、わがまま放題だ。 Re: "" tag is removedというSubjectの人は自前でフィルタリングしてたんだろうなあ。

-i386-cygwin

setup.exeでインストールしてみたはいいが、何度やってもKeepになってくれない。 どうも-i386-cygwinがついてるのが余計らしい。 しかたないので削ることにした。 でもそのままだと元々のソースのtarballと同じファイル名になってしまって極めて都合が悪そう。 またまたしかたなく、Cygwinのパッケージらしく-1をつけることにした。 例によってsymlinkで用意しただけ。.htaccessのIndexIgnoreに

*-1.tar.gz

を追加したので、見た目は変わらない。 いつか自分ではまりそうな設定ではある。

[program] copyright

test_check "copyright"
tesk_ok("-"+RUBY_RELEASE_DATE[0,4] == `./miniruby --copyright`[/-\d{4}/])

をこっそりsample/test.rbに入れとくってのはどうだろう? いや、堂々と入れればいいんだが。

あ、まだ2000年のままだったか。


2002-01-08 (Tue)

enter.nifty.com

@niftyの「お気にいり」のホストがいつの間にかiw.nifty.comからenter.nifty.comに変更されてるようだ。

The Ruby Way

10%OFFだからというわけでもないんだけど注文した。

Log4r 0.9.4

更新。

mingw: ruby-gtk?

Ruby-GTK maintainerのNeil Conwayさんから 「mingw版があるじゃん。やるねえ」(意訳) 的なメールをもらう。「で、0.26はどうなってるの?」と書いてあったわけだが、

gtk-0.25-i386-mingw32.tar.gz
ruby-gtk-0.26-i386-mingw32.tar.gz

だと、 わかりにくいよね 、やっぱ。 でも名前を変えたのもNeilさん本人のわけだし。

Badtrans.B

今日は2通。

electric-buffer-list

switch-to-bufferってあまり使わないなあ。

(define-key ctl-x-map "\C-b" 'electric-buffer-list)

としてC-xC-bを多用してるからか。


2002-01-09 (Wed)

Linux 2.4.18-pre2

preemtp patchがなぜか出ないな。

mingw: ruby-gtk?

Would it be a good idea to delete the old package?とやはり言われてしまった。 消したよん。

ruby/gtk 0.26

今度はMark Slagellさんから。こういうことは重なるらしい。 「

C:\local\gtk>\local\cyg166\usr\local\bin\ruby -e 'require "gtk"'
-e:1:in `require': dlopen: Win32 error 1114 - 
/cygdrive/c/LOCAL/CYG166/USR/LOCAL
/lib/ruby/site_ruby/1.6/i386-cygwin/gtk.so (LoadError)
        from -e:1

となるが、どうしたらいい? 今本を書いてるんだけど、あと2,3日でデッドラインなのだよ」(意訳) この人も締切間際にならないと仕事しないタイプか? ここ にあるよと教える。すぐに返事が来た。

Okay, we're getting closer. It does seem that the ruby/gtk 0.26 is 
really 0.25 though - it identifies itself as [0,2,5] in BINDING_VERSION, 
and it seems to lack Gtk::Text#set_position, which was implemented in 
0.26 and is used in one of the book's examples. Is is possible that the 
wrong tarball is labelled as 0.26? Or did I mess up my download somehow...

がーん。うそ?確認してみると確かに0.25と0.26のgtk.soは同じものだった。 おかしいなあ。make installしたはずなのに。はっ!それだ。 make site-installじゃなきゃまずい。ということは

ruby-1.6.6-200*-i386-{cygwin,mingw32}.tar.gz

に入っているわけだ。まいった。

Ruby/GTK 0.26-1

というわけで0.26-1としてrsyncする。

gtk-dlls-20001226-2.tar.gz

setup.exeを実行してみるとgtk-dllsが出てくる。 何も考えずに全部インストールしてるからこれもインストールされる。 でも、usr/local/bin/に置いてないから/に展開されてる。がーん。 というわけで -2 を用意した。

で、setup.exeでインストールして驚いたんだけど、/*.dllがちゃんと消えてる。 そうか、/etc/setup/*.lst.gzはそういう意味だったんだ。 前回インストールしたものを消してからインストールするわけだ。 だから中身が空のパッケージを作ればアンインストールになる。

forwardable

これは既に1.6へ取り込まれているので、空のパッケージを作っとこう。 MinGW, DJGPPはそういうわけにもいかないので

/usr/local/lib/ruby/site_ruby/1.6/forwardable.rb

がもしあったら消すように。 現在はraiseとKernel::raiseの違いぐらいなので、それほど緊急でもないけど。

tar: Cowardly refusing to create an empty archive

% tar cfvz forwardable-1.1-2.tar.gz
tar: Cowardly refusing to create an empty archive
Try `tar --help' for more information.

空は受け付けない。したかない。

% mkdir tmp; cd tmp
% tar cfvz forwardable-1.1-2.tar.gz . --owner=ruby --group=ruby

としとこう。

Suica

1/15で定期券が切れる。新規の場合は7日前から買えるので今日Suicaを買った。 今までは会社が支給していたが、Suica対応が面倒になったのか経費削減か知らないが、 今年から自分で買えってことになった。 先月の給料がなんかいつもり多く感じたのは気のせいではなかったらしい。 てゆか明細にちゃんと書いてあるじゃん。

6ヶ月で9万円弱なのでSuicaじゃないとやっぱこわい。


2002-01-10 (Thu)

rsync 2.5.1

一週間前に出ていたようだ。 前回は-lzをリンクするためにconfigureした後でMakefileを書き換えたが、

% make ZLIBOBJ= LIBS='-lz -lresolv'

としてみた。

log4r 0.9.7

更新。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!