Slackware 14.0 (3)
山中さん、iPS細胞でノーベル医学・生理学賞おめでとう。
ノーベル賞と言えば、フォン・フリッシェさんがミツバチのダンスを解読して受賞してる。 ちょっと聞き、イグ・ノーベル賞かと思っちゃうけど、どんな貢献があるのでしょうか?
ひょっとして、王様の飲むハチミツ酒を庶民レベルまでに開放した功績を讃えてって事なので しょうか?
この王様のハチミツ酒はミードと呼ばれ、作り方は、
7対2の割合で水とハチミツを混ぜ、よくかきまぜて火にかけて煮立たせる。これにパセリの根と フェンネルの根を少々切り刻んだものを入れて煮込む。丁寧にあくを取り、あくが出なくなったら 煮込みは完了。一晩さました後、イースト菌とクローブを麻の袋に入れて2週間蓋をしておけば、 飲み頃になる、とか。
よい食後酒になるそうです。だれかこっそり作ってみませんか。
堂々とやるならワインを造る事です。民族衣装に身を包んだおねーちゃんが、葡萄を入れた 桶の中で裸足になって踏み潰す。後はじっと待つだけ。酵母菌の作用で、醗酵して酒になる。 観光PRにはうってつけ。裸足じゃなくて裸なら、観光客がわんさかと来ますぜ。こういう すけべな親父目当てに、撮影会でもやればよろし。観光課の人、税務署とタイアップして やりませんかね。
ed
前回書いた、emacs vs viの対立を調停する試みには残念ながら平和賞は授与されないな。 今朝の新聞にかけ率が出てたけど、みじんも無かったぞ。
どちらもeditor。元は同じ所なんかな? emacsの元になったのはTECOって聞いてるし、viの元は edだし。元祖に遡ってみたいぞ。TECOは簡単に手に入りそうにはないけど、edならあるっしょ。
老舗のSlackwareもも付いていたぞ。早速展開して、gdbで追えるようにしたのは言うまでもない。 規模も小さいしね。
sakae@slck:/tmp/ed-1.6$ wc *.[ch] 632 2683 17159 buffer.c 294 1363 8920 carg_parser.c 102 553 3596 carg_parser.h 153 916 5613 ed.h 87 403 2700 global.c 332 1600 9483 io.c 205 1014 6938 main.c 762 3847 27110 main_loop.c 403 2030 12366 regex.c 265 1104 6970 signal.c 3235 15513 100855 total
AUTHORS なんてファイルが付属してて、そこには
GNU ed originated with the editor algorithm from Brian W. Kernighan & P. J. Plauger's wonderful book "Software Tools in Pascal," Addison-Wesley,
超有名な人の名前が載ってた。昔は、こういうのを使ってたんだよな。隔世の感がしますよ。(と、 懐古趣味丸出し!)
で、感慨に耽るのもいいけど、コード読めよ。ed.hを見てから、main_loop.cあたりを見れば いいのなか。細かい事は、gdbで追うのは、お約束。
xxgdb
端末入出力を含んだプログラムをgdbから追おうとすると、gdbのコマンドとプログラムの入出力が ごちゃまぜになってしまい、ちょいと都合が悪い。確か、分離した状態でgdbを使えるのが有った はず。
ってな訳で、眺めていたら、xxgdbなんてのを思い出した。折角Xもたちあがるので使ってみんべ。 でも、起動すると、all pty in use って、つれない事を言われて起動しない。
こりゃ、xxgdbを動かすのにgdbが必要かと(怖い)再帰を思わず思い出しちゃったぞ。もっと別の 手が有ったはず。
そうだ、straceしてみよう。
access("/home/sakae/.gdbinit", R_OK) = -1 ENOENT (No such file or directory) open("/dev/ptyp0", O_RDWR|O_LARGEFILE) = -1 EACCES (Permission denied) open("/dev/ptyp1", O_RDWR|O_LARGEFILE) = -1 EACCES (Permission denied) : open("/dev/ptyse", O_RDWR|O_LARGEFILE) = -1 ENOENT (No such file or directory) open("/dev/ptysf", O_RDWR|O_LARGEFILE) = -1 ENOENT (No such file or directory) write(2, "xxgdb: all ptys in use\n", 23xxgdb: all ptys in use) = 23 exit_group(1) = ?
端末がアク禁になってたり、登録されていなかったりして、どれも使えないんか。そんな馬鹿な。
sakae@slck:~$ ls -l /dev/ptyp? crw-rw---- 1 root tty 2, 0 Oct 9 13:28 /dev/ptyp0 crw-rw---- 1 root tty 2, 1 Oct 9 13:28 /dev/ptyp1 :
そうか、ttyのグループへ加入すると、pyyp0とかが使えるようになるんか。ttyは貴重な資源だから、 会員様限定なのね。/etc/groupを編集した後、loginし直すと使えるようになる。
で、使ってはみたものの、gdbとターゲット・プログラムの端末分離は行われていなかった。残念。
DDD
もう一種類有ったな。gdbをX上で使うやつが。ddd-3.3.12を試してみるか。configure makeで いいのかな。
g++ -DHAVE_CONFIG_H -I. -I./.. -O2 -g -Wall -W -Wwrite-strings -trigraphs -MT strclass.o -MD -MP -MF .deps/strclass.Tpo -c -o strclass.o strclass.C strclass.C: In function 'std::istream& operator>>(std::istream&, string&)': strclass.C:1546:35: error: 'EOF' was not declared in this scope strclass.C:1559:15: error: 'EOF' was not declared in this scope strclass.C: In function 'int readline(std::istream&, string&, char, int)': strclass.C:1589:35: error: 'EOF' was not declared in this scope strclass.C:1602:15: error: 'EOF' was not declared in this scope make[2]: *** [strclass.o] Error 1
EOFって、定義してないってさ。#define EOF -1 でいいんかいな? 一番新しいdddのはずなんだけど、 誰もチェックしてないのかなあ? それとも、slack特有の問題? まあいいや、ちゃんとコンパイル出来て、動き出したから。
dddを起動したら、Viewメニューから、Execution Window... (Alt+9)を選んであげると、 ターゲット用のコンソールが出てくる。これで、混じりあう事なくdebug出来る。
Attach gdb
上のDDTは強力で虫を殺してくれるようだけど、edみたいな、REPLもどきにはちと大げさかな。 昔書いた、bkってのを思い出した。これ、動いてるターゲットプログラムにgdbを摂りつかせる 微笑なスクリプト。
が、動かないんだ。意味不なエラーを返してきてね。
sakae@slck:~$ bk ed /usr/local/bin/bk: line 6: [: 1555: unary operator expected
ArchでもウブでもFreeBSDでも動いていたんだけどなあ。Slack特有の動かん要因があるのかしらん? 原点に帰って、
sakae@slck:~$ ps awx|grep ed 1555 ? S< 0:00 [kpsmoused] 2329 pts/2 S+ 0:00 ./ed 2400 pts/1 S+ 0:00 grep ed
PID:1555 がヒットしちゃってるのか。で、エラーなんだな。ならば、フィルター強化。
sakae@slck:~$ cat /usr/local/bin/bk #!/bin/sh # gdb attach selected program # Usage: bk program pid=`ps awx | grep $1 | grep -v grep | grep -v $0 |grep -v ] | awk '{print $1}'` if [ $pid ]; then gdb -q $1 $pid fi
何か泥縄式。
sakae@slck:/tmp/ed-1.6$ bk ed Reading symbols from /tmp/ed-1.6/ed...done. Attaching to program: /tmp/ed-1.6/ed, process 2496 warning: Could not load shared library symbols for linux-gate.so.1. Do you need "set solib-search-path" or "set sysroot"? Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done. Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done. Loaded symbols for /lib/ld-linux.so.2 0xb76c9a2e in __read_nocancel () from /lib/libc.so.6 (gdb) bt #0 0xb76c9a2e in __read_nocancel () from /lib/libc.so.6 #1 0xb7665c9b in _IO_new_file_underflow () from /lib/libc.so.6 #2 0xb76684f9 in _IO_default_uflow_internal () from /lib/libc.so.6 #3 0xb766830a in __uflow () from /lib/libc.so.6 #4 0xb7662a2c in getchar () from /lib/libc.so.6 #5 0x0804b8ef in get_tty_line (sizep=0xbfd63f4c) at io.c:141 #6 0x0804e96f in main_loop (loose=false) at main_loop.c:710 #7 0x0804c630 in main (argc=1, argv=0xbfd640e4) at main.c:204 (gdb) c Continuing.
注意しないと、/usr/bin/edをgdbは見てしまい、 シンボルがネーぞと文句言われる。-g付きのターゲットがある所に移動してから、gdbを起動する事。
で、結論は、X無しの、このスタイルが一番おいらにはぴったり来るなあ、とCUIの人間ってのを 再認識しましただ。
on *BSD
では、edはどうなっている?
HISTORY An ed command appeared in Version 1 AT&T UNIX.
manでは、ヒストリックに書いてあるんだけど、READMEを見ると
ed is an 8-bit-clean, POSIX-compliant line editor. It should work with any regular expression package that conforms to the POSIX interface standard, such as GNU regex(3). : The file `POSIX' describes extensions to and deviations from the POSIX standard.
とかで、世界標準への努力はなされている訳ですよ。 そうなると、やはりヒストリカルに tecoだな。ドラエモンもポケットみたいな、/usr/portsを探ってみたら、
[sakae@secd /usr/ports/editors/teco]$ cat pkg-descr TECO is the grand old text editor. It is powerful and compact precursor to EMACS and has a completely nongraphical user interface. It is very fast (probably the fastes editor in the world) and have a macro language. TECO was written by Dan Murphy (http://www.opost.com/dlm) at Digital Equipment Corporation in 1962. This is based on Pete Siemsen's TECOC implementation, and comes with a copy of the originals DECUS TECO documentation. WWW: http://almy.us/teco.html
りっぱなマニュアルが付いてた。(ので、その表紙だけ)
Standard TECO TEXT EDITOR AND CORRECTOR FOR THE VAX-11, PDP-11, PDP-10, and PDP-8 USER'S GUIDE AND LANGUAGE REFERENCE MANUAL May 1985 Edition TECO-11 VERSION 40 TECO-10 VERSION 3 TECO-8 VERSION 7
これが元祖editorなんですかね。入れてみた、*.cだけで15000行もあるよ。emacsの肥満の 源流はDNAに埋め込まれていたって事なんですかね?