Just another Ruby porter,

〜2001年4月中旬〜


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

2001-04-11 (Wed)

[Cygwin] GNU dbm

最初からなぜかMakefile.cygwinが存在してる。 よく見るとCYGWIN-PATCHES/gdbm-1.8.0.READMEもあって
unpack gdbm-1.8.0-X-src.tar.gz
cd gdbm-1.8.0
./configure
cp Makefile.cygwin Makefile
make
make progs
make install
make install-compat
と書いてある。なんのためのconfigure? 結局無視することにして、そのまま
% make CFLAGS='-Os -DGDBM_STATIC'
と実行。CFLAGSもMakefile.inを見ると-O決め打ちなところが気になるが、 無事終了。ロックするしないはwin32/win32.cを参考にこんな感じ。
--- gdbmopen.c.orig	Sun Jul 30 12:46:41 2000
+++ gdbmopen.c	Sun Apr  8 23:57:52 2001
@@ -54,2 +54,3 @@
    
+#include <windows.h>
 
@@ -111,2 +112,13 @@
   dbf->coalesce_blocks = FALSE; /* Default to not coalescing blocks. */
+
+  {
+    OSVERSIONINFO osver;
+    memset(&osver, 0, sizeof(OSVERSIONINFO));
+    osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+    GetVersionEx(&osver);
+    if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
+      {
+        dbf->file_locking = FALSE;
+      }
+  }
あ、#ifdef入れるの忘れてるなあ。あとは
% sudo make install install-compat
でいいはずだが、prefixはなぜか/usr/localのまま。 Makefile.inを見ると
prefix = /usr/local
になってる。うう。君は本当にGNUのソフトなのか?
% sudo make install install-compat prefix=/usr/local/cygwin
ヘッダを見るとlibgdbm.dll.aがデフォルトになってるので、
#define GDBM_STATIC
をgdbm.h,ndbm.h,dbm.hに入れる。 が、そんなことをするならオリジナルから作ったほうがよかったんじゃない? もしくは/usr/local/binにcyggdbm.dllを置くとか。

JARH

print %w.J u s t \ a n o t h e r \ R u b y \ h a c k e r ,.

2001-04-12 (Thu)

出張

Makefileについてなぜかコンサルしてたり。

Vim 6.0aa

zの次はaaになったわけで、 じゃ6.0はいつ出るかというと少なくとも数ヶ月はかかるらしい。 今年は出ないと見た。

_ [Cygwin]:

あらかじめlibiconv 1.6.1をインストールしとく。
% ./configure \
  --enable-rubyinterp \
  --enable-perlinterp
  --enable-multibyte
<中略>
/USR/LOCAL/lib/ruby/1.6/i386-cygwin/rbconfig.rb:5: ruby lib version \
(1.6.3) doesn't match executable version (1.6.4) (RuntimeError)
あ、やばい。1.6.4になってたんだ。Linuxのほうを上げるの忘れてた。 fake.rbはRUBY_VERSIONもいじるべきか。 って、Vimいじってる場合じゃないよ、ドラえも〜ん。

JARH

print String [%[Just another Ruby hacker,]]

2001-04-13 (Fri)

パッケージ

何が原因だったのか、いつからだったのか、 確認しないで消しちゃったのでわからないけどCygwin版は壊れてた。

[Cygwin] Vim

_ Perl:

--enable-perlinterpしたらリンク時にundefined。 これは後で考えるとして外す。

_ Ruby:

--enable-rubyinterpのほうはリンクできてる。 が、
:ruby print "Hello"
するとSEGVる。お約束ではあるが、gdbから起動すると
Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal
と言われてしまい、入力もできない。 だが、Cygwin版のgdbはWINPIDを指定することでattachできるのであった。 落ちる場所はif_ruby.cに決まってるから
% cd src
% rm if_ruby.o
% make CC='gcc -g'
% ./vim
しとく。他の端末から
% ps                                   
      PID    PPID    PGID     WINPID TTY  UID    STIME COMMAND
  4074869       1 4074869 4290892427  -1  500 22:27:58 /USR/SBIN/INETD
I 3971881       1 3971881 4291007071   1  500 00:21:37 /usr/bin/ZSH
  3925365 3971881 3971881 4291041931   1  500 00:21:37 /usr/bin/ZSH
  4025705 4074869 4025705 4291047239  -1  500 00:21:59 /USR/SBIN/IN.RLOGIND
  3975465 4025705 3975465 4290991527   0  500 00:22:00 /usr/bin/ZSH
  3935269 4074869 3935269 4291065563  -1  500 00:22:07 /USR/SBIN/IN.RLOGIND
  3931221 3935269 3931221 4291036547   2  500 00:22:07 /usr/bin/ZSH
  3906537 3931221 3906537 4291071671   2  500 00:24:54 /HOME/WATANABE/CYGWIN/VIM60AA/SRC/VIM
  3908173 3975465 3908173 4291084283   0  500 00:25:58 /usr/bin/PS
としてWINPIDを調べる。このWINPIDを指定してgdbを起動。
% gdb --quiet --nw ./vim.exe 4291071671
/home/watanabe/cygwin/vim60aa/src/4291071671: No such file or directory.
Attaching to program `/home/watanabe/cygwin/vim60aa/src/./vim.exe', process -3895625
[Switching to thread -3895625.0xffc4815b]
gdbに制御が移るのでcontinueする。
(gdb) c
Continuing.
ここで元の端末に戻り
:ruby print "Hello"
と入力。するとgdb側に
Program received signal SIGSEGV, Segmentation fault.
0x4b249c in ruby_io_init () at if_ruby.c:494
494         rb_defout = rb_obj_alloc(rb_cObject);
と表示される。listを見る。
(gdb) l
489
490     static void ruby_io_init(void)
491     {
492         extern VALUE rb_defout;
493
494         rb_defout = rb_obj_alloc(rb_cObject);
495         rb_define_singleton_method(rb_defout, "write", vim_message, 1);
496         rb_define_global_function("p", f_p, -1);
497     }
498
なるほど。この
492         extern VALUE rb_defout;
が原因だ。EXTERNにしないとね。

_ EXTERN:

if_ruby.cの最初に
#undef EXTERN
とある。VimもEXTERNを使っているのか。うーむ。ややこしいなあ。 Tcl/TkもEXTERNを使ってるし、EXTERNはやめるべきか?

JARH

print catch(:x){throw :x, 'Just another Ruby hacker,'}

2001-04-14 (Sat)

サイエンスアイ(再)

やはりPearlのままだった。 Cのソースのタブが消えてた。 @nifty経由?んなこたあない。

_ cat:

CもRubyもたぶんどっちもcatだったと思う。 記憶の断片にあるARGなんとかとlineとprintを組み合わせるとこうなる。
ARGF.each{|line|print line}
1行で書けてCより簡単という話だったが
% touch cat
% ruby -p cat files
なら0バイトだ。いやそれじゃTV的にはNGだよ。

[Cygwin] w3m

動いてるプログラムにattachできるなら、w3mもそれでわかったんじゃない? まったくその通りである。 ただ起動時にいきなり死んでしまうとattachする暇もないので、 mainの最初にsleep(30);とか余裕を入れとく。 そうすればいいと今になって気づく。

[Cygwin] Vim 6.0aa

EXTERN以前に-DUSEIMPORTLIBも必要。 それをまとめたパッチを ここに置く。

ri 0.7a

riがバージョンアップしてた。

JARH

print DATA.gets.chomp
__END__
Just another Ruby hacker,

2001-04-15 (Sun)

Vim 6.0aa

Linuxにもインストールした。 ただ、iconvの出来が悪くて自動判別とかかなり確率で失敗する。 libiconv 1.6.1にすると少しはよくなるけど、やっぱ変。

_ "z".succ:

% ruby -e 'p "z".succ'
"aa"
どうせなら6.0viまで突き進んでくれ。
% ruby -e 'p +("aa".."vi").to_a.size'
555
かなり無理があるが。

IceWM

実は1年半ほど前からIceWMを使ってるわけだが、 なんか流行ってきてるようでちょっとうれしい。
こんなのを~/.icewm/preferencesに追加してる。
KeyWinRaise="Alt+u"
KeyWinPrev="Alt+k"
KeyWinNext="Alt+j"
KeyWinMinimize="Alt+i"
KeyWinRollup="Alt+r"
KeySysWindowList="Alt+l"

真夜中は純潔

きよずみまよという名前になったらしい。 「潔純真夜」ってことか。

JARH

r,w = IO::pipe;w.print 'Just another Ruby hacker,';w.close;print r.gets

2001-04-16 (Mon)

rim 遅延 (23:33)

CGIが原因とか 書いてあるが、http serverとmail serverぐらいわけてくれないかなあ。 まじで。てゆうか、今popできないし。今日はメール読めないかも。

JARH

print sprintf '%s', format '%s' % '%s', 'Just another Ruby hacker,'

2001-04-17 (Tue)

Perl 5.6.1, Perl 5.7.1

なんかあまり話題になってないが先週出てる。 5.6.0自体あまり使われてない気もするし、各distroはどうなってんだろう?

nikki.el

気に入ってしまいそう。

Makefile

Makefileに

@rem = %qd

と書くとどう解釈されるかというと、 @remという変数に代入したことになる。

% echo '@rem = %qd\nall:;@echo $(@rem)' > Makefile
% make
%qd

GNU makeだけかもしれないけど。

JARH

print eval 'Just another Ruby hacker,'.inspect

2001-04-18 (Wed)

Vim 6.0 (21:17)

Vim 6.0を使っていてつい command-line modeで<C-B>とか押して非常にせつなくなるんだけど、 実は

:help cmdline

すると例があって *1

:cnoremap <C-A> <Home>
:cnoremap <C-F> <Right>
:cnoremap <C-B> <Left>
:cnoremap <Esc>b <S-Left>
:cnoremap <Esc>f <S-Right>

とすればいいとわかる。最後のふたつは使わないからどうでもいいが、 <C-D>には候補のリストを表示するなんてのを割り当てるよりは

:cnoremap <C-D> <Del>

でしょう、やっぱ。


*1: なぜか*emacs-style*じゃなくて*tcsh-style*というタグが打ってある。

JARH

/#{print 'Just another Ruby hacker,'}/

2001-04-19 (Thu)

start

Cygwinで

PATH=/usr/local/bin:/usr/X11R6/bin:/usr/bin:/bin

てな設定にして使っているんだけど、 たまに.xlsなファイルを見なきゃいけないときにがあったりすると、 そのときだけExploreを立ち上げるのがすごくいやだった。 だったらPATHに加えとけばいいんだろうけど、 アプリケーション毎に違うとこにあるしなんかもったいない。 が、

start() {
    c:/winnt/system32/cmd /c start "$@"
}

としとけばいいのか。

% start foo.xls

あとはstartがよろしくやってくれる。
WinNTはstartが内部コマンドなんだね。 start.exeを探しまくったよ。

盗み見

nsmm はNuSuMiMiではない(はずだ)。

JARH

print 'Just another Ruby hacker,'.scan(/./).collect{|x|x[0]}.pack'U*'

2001-04-20 (Fri)

Vim 6.0ab

vim-jp MLによると6.0abが出たらしいが、ftp://ftp.vim.org/にまったくつながらない。
mirrorを調べるのも面倒なのでCVSで追い掛けることにした。 てゆうかたぶん調べる手間はどっちも同じだよ。

JARH

print [<<'+'.delete("\n").gsub(/./){format'%02b',$&[0]-?A}].pack'B*'
BACCBDBBBDADBDBAACAABCABBCDCBCDDBDBABCCABCBBBDACAC
AABBACBDBBBCACBDCBACAABCCABCABBCADBCCDBCBBBDACACDA
+

<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!