〜2001年2月下旬〜
Just another Ruby hacker,と表示するスクリプトをいう。 最後に改行は入らないのが望ましい。 自分の美意識の範囲内で短めのスクリプトとする。 mailのsignatureの前あたりにさりげなく置いたりする。 と勝手に定義してみたがどう?
print 'Just another Ruby hacker,' printf 'Just another Ruby hacker,' $stdout.print 'Just another Ruby hacker,' $stdout.send :print, 'Just another Ruby hacker,' $stdout.printf 'Just another Ruby hacker,' $stdout.send :printf, 'Just another Ruby hacker,' $stdout.write 'Just another Ruby hacker,' $stdout.send :write, 'Just another Ruby hacker,' $stdout << 'Just another Ruby hacker,' $stdout.send :<<, 'Just another Ruby hacker,' STDOUT.print 'Just another Ruby hacker,' STDOUT.send :print, 'Just another Ruby hacker,' STDOUT.printf 'Just another Ruby hacker,' STDOUT.send :printf, 'Just another Ruby hacker,' STDOUT.write 'Just another Ruby hacker,' STDOUT.send :write, 'Just another Ruby hacker,' STDOUT << 'Just another Ruby hacker,' STDOUT.send :<<, 'Just another Ruby hacker,' $>.print 'Just another Ruby hacker,' $>.send :print, 'Just another Ruby hacker,' $>.printf 'Just another Ruby hacker,' $>.send :printf, 'Just another Ruby hacker,' $>.write 'Just another Ruby hacker,' $>.send :write, 'Just another Ruby hacker,' $> << 'Just another Ruby hacker,' $>.send :<<, 'Just another Ruby hacker,' 'Just another Ruby hacker,'.display 'Just another Ruby hacker,'.send :displayあ、syswriteもあるな。それと$>の別名の$defoutとか。 printfに関しては第1引数にIOを指定することもできる。 もちろんちゃんと%sを使うのもありだ。
printf $stdout, '%s', 'Just another Ruby hacker,'sendをsendをsendをsendをsendしてもいい。
$stdout.send :send, :send, :send, :send, :print, 'Just another Ruby hacker,'要するに切りがない。
% ln -s ../../i686-pc-cygwin/2.95.2-7/cc1 .すると
% c:/usr/local/bin/ruby -ve 'p $<.read' cc1 ruby 1.6.3 (2001-02-20) [i386-mingw32] "!<symlink>../../i686-pc-cygwin/2.95.2-7/cc1\000"という内容のファイルを作る。 中を見なくてもsymlinkかどうかを速く判断できるようにシステム属性もつける。 この実行例を見てもわかるように、 Cygwin以外のアプリケーションにとっては システム属性のついた普通のファイルにすぎない。 さすがにそれじゃ使い辛いとやっと思ったのか、 Windowsのショートカットを利用することになったらしい *1。というかCVSではもうすでにそうなってる。 試してみるとなかなか面白い。 ソースを見ると実装も簡単そうな気もするし、 bmingwはCygwinのそういうとこ *2をサポートするのもよさそうだな。
Message-Id: <20010223062911.061E.MAILI31S@clio.ne.jp >というように>の前に空白が入っている。ってRFC的にはこれってあり? とりあえずcmail-thread.elの
"<[^\033 >]+>"を
"<[^\033>]+>"にしてつなげてみた。
% ruby same.rb same.rb:9:in `require': No such file to load -- gtk (LoadError) from same.rb:9がーん。 mingwだcygwinだと作ったが、 おいらはLinux上にインストールしたことがなかったのか。 そういえば一年程前にディスククラッシュして、 Linux自体を再インストールしてからRuby/GTKを入れてないかも。 あ、そうじゃなくて1.6にしてからは入れてないのか。
% ruby-1.5.4 same.rb same.rb:414:in `makePixmap': uninitialized constant Game::GdkImlib (NameError) <後略>今度はimlibか。やっぱgnome-ruby 0.24をインストールしよう。 ってことはmingw版もimlibをなんとかしといたほうがいいのかな。
% ruby same.rb same.rb:414:in `makePixmap': uninitialized constant Game::GdkImlib (NameError)何も変わってない。そういえばimlibって独立したんだよね。
require 'gtk'
の変わりに
require 'gdk_imlib'
にしてみた。 これで一応初期画面が拝めたわけだが、 なんかすごいbusy waitでクリックしてもどーにもならない。 さめがめだということはわかったからよしとしよう。
--- install.rb.orig Sun Feb 25 15:13:47 2001 +++ install.rb Mon Feb 26 00:50:06 2001 @@ -45,3 +45,3 @@ opfile = "ri" -opfile = "ri.rb" if CONFIG["target_os"] =~ /win/ +opfile = "ri.rb" if CONFIG["target_os"] =~ /win|mingw|djgpp/ File::install("ri", File.join($bindir, opfile), 0755, true)ri.rbにしといたほうがよさそう。というよりri.contentsの都合上こうしとく。
% i386-cygwin-ruby install.rb % cat >../ri.contents DOC=COPYING ChangeLog README CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/ri \ usr/local/bin/ri.rb % make -f ../Makefile.pack PACKAGE=ri VERSION=0.2 TARGET=i386-cygwin % i386-mingw32-ruby install.rb % make -f ../Makefile.pack PACKAGE=ri VERSION=0.2 TARGET=i386-mingw32 % i386-msdosdjgpp-ruby install.rb % make -f ../Makefile.pack PACKAGE=ri VERSION=0.2 TARGET=i386-msdosdjgppと思ったがターゲットに依存するものはないのでsymlinkにしよう。 あ、ri.rbの#!は/usr/local/bin/rubyに変更。
% CC='i686-pc-cygwin-gcc -bmingw' \ CFLAGS=-Os \ AR=i686-pc-cygwin-ar \ NM=/usr/local/cygwin/bin/i686-pc-cygwin-nm \ RANLIB=i686-pc-cygwin-ranlib \ ./configure \ --target=i386-mingw32 \ --host=i686-pc-cygwin \ --build=i586-pc-linux \ --prefix=/usr/local/mingw % make <途中略> if test -f kakasidict; then \ ITAIJIDICT="itaijidict" src/mkkanwa.exe kanwadict kakasidict; \ fi /bin/sh: src/mkkanwa.exe: cannot execute binary fileそっか。 Linux版もあるわけだからそっちで実行してもいいけどwineにやらせてみよう。
% ITAIJIDICT="itaijidict" wine -- src/mkkanwa.exe kanwadict kakasidictこれだとkanwadicが/usr/local/mingw/share/kakasi/kanwadicになってしまうので、
% make datadir=/usr/local/shareしなおした。
% sudo make datadir=/usr/local/share install
% su Password: # insmod binfmt_misc Using /lib/modules/2.2.18/fs/binfmt_misc.o # echo ':DOSWin:M::MZ::/usr/local/bin/wine:' >/proc/sys/fs/binfmt_misc/registerこの設定でmakeしなおしてみる。見事に最後まで通る。面白い。 rebootしたら当然のことながらまた設定が必要なので、 常に使いたいときは/etc/rc*あたりに書いとくのがいいだろう。
% CC=i686-pc-cygwin-gcc \ CFLAGS=-Os \ AR=i686-pc-cygwin-ar \ NM=/usr/local/cygwin/bin/i686-pc-cygwin-nm \ RANLIB=i686-pc-cygwin-ranlib \ ./configure \ --target=i686-pccygwin \ --host=i686-pc-cygwin \ --build=i586-pc-linux \ --prefix=/usr/local/cygwin-local % make datadir=/usr/local/share % sudo make datadir=/usr/local/share install
% mkdir mingw cygwin % cd mingw % i386-mingw32-ruby ../extconf.rbうーむ。ちょっと具合が悪い。軽く修正。
--- extconf.rb.orig Wed Jul 28 15:46:02 1999 +++ extconf.rb Tue Feb 27 01:11:24 2001 @@ -2,4 +2,7 @@ -$CFLAGS += " -I /usr/local/include " -$LOCAL_LIBS += " -L /usr/local/lib -lkakasi " -create_makefile("kakasi") +#$CFLAGS += " -I /usr/local/include " +#$LOCAL_LIBS += " -L /usr/local/lib -lkakasi " +dir_config("kakasi") +if have_library("kakasi", nil) + create_makefile("kakasi") +endあとはいつもと同じ。
% i386-mingw32-ruby ../extconf.rb % make % upx kakasi.so % make site-install
% cd ../cygwin % i386-cygwin-ruby ../extconf.rb % make % upx kakasi.so % make site-install
% cd .. % cat >../kakasi.contents DOC=ChangeLog MANIFEST README* test.rb wdcnt* CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/kakasi.so \ usr/local/share/kakasi/kanwadict \ usr/local/share/kakasi/itaijidict % make -f ../Makefile.pack PACKAGE=kakasi VERSION=000124 TARGET=i386-mingw32 % make -f ../Makefile.pack PACKAGE=kakasi VERSION=000124 TARGET=i386-cygwin
Invalid argument - "connect(2)" (Errno::EINVAL)というエラーが多発してるようなんだけど、なぜに? なんかWindows 2000という場合が多いようだけど、 会社の新しいVAIOのWindows 2000でも再現しない。
% cat ../ri.contents DOC=COPYING ChangeLog README CONTENTS=usr/local/lib/ruby/site_ruby/ri \ usr/local/bin/ri.rb
% ruby jarh.rb|tr , '\n'|wc 109 436 2725お、いつのまにか100を越えてるのか。
% gzip -dc ruby162-refm.rd.gz | rd2 -r rd/rd2man-lib -o rubyrefm % mv rubyrefm.1 ~/man/man1 % man rubyrefmして気づいたんだけど、 なぜかコマンドラインオプションの次にThreadがいきなり出てくる。 これは--debugの説明でThreadクラスの話が出てくるから mapがそうなっちゃうのか。
#include <stdio.h> #include <sys/stat.h> s(char *path) { struct _stat buf; printf("%s: %d\n", path, _stat(path, &buf)); } main() { s("//ruby/pub"); s("//ruby/pub/"); s("//ruby/pub\\"); s("//ruby/pub/ruby"); s("//ruby/pub/ruby/"); s("//ruby/pub/ruby\\"); s("\\\\ruby\\pub"); s("\\\\ruby\\pub\\"); s("\\\\ruby\\pub\\"); s("\\\\ruby\\pub\\ruby"); s("\\\\ruby\\pub\\ruby\\"); s("\\\\ruby\\pub\\ruby\\"); }結果はこうなる。
//ruby/pub: -1 //ruby/pub/: -1 //ruby/pub\: -1 //ruby/pub/ruby: 0 //ruby/pub/ruby/: -1 //ruby/pub/ruby\: -1 \\ruby\pub: -1 \\ruby\pub\: 0 \\ruby\pub\: 0 \\ruby\pub\ruby: 0 \\ruby\pub\ruby\: -1 \\ruby\pub\ruby\: -1うーむ。また困った結果だ。 明日会社のWinNT/2kでもう一度確認してみよう。