2001年12月の雑感

[トップページへ] [11月] [1月] [過去の雑感へ]

12月31日(月)

screen 3.9.10 on Cygwin

再挑戦。 で、2,3ヶ所修正(screen-3.9.10のCygwin用のいい加減なパッチ)しただけでコンパイルできた。 恐る恐る起動してみたら、それなりに動いているようだ。

いい加減な作り方(念のため、断わっておきますが、上のパッチもこの作り方も無保証です。)

  1. tar zxvf screen-3.9.10.tar.gz

  2. cd screen-3.9.10

  3. patch -p 1 < screen-3.9.10-cygwin.patch

  4. ./configure --disable-socket-dir

  5. make

  6. ここでscreenを実行すると/etc/ttysが無いと叱られるので

    touch /etc/ttys 
    

    としておく(←かなりいい加減)。

  7. mv screen.exe /usr/local/bin

注意:単にコンパイルを通すだけのパッチであり、attach や detachなどは期待通りに動きません。


12月30日()

Telnet daemon of Cygwin

試行錯誤の上、ようやくTera Term でCygwinにログインできるようになった。 ちなみに、私の環境は、

がインストールされているという変則的な環境のため、うまくいってなかったという気がしないでもない。

inetdをサービスとして起動して、イベントログを見ると

/etc/inetd.confが見つからない

/usr/bin/login が見つからない

などのエラーが出ていた。 結局、D:\etc\inetd.conf や D:\usr\bin\login などを C:\cygwinからコピーして作って、 なんとか Tera Termからログインできることが確認できた。 (←なんか解決方法が間違っている気がする。)

うん? なんか Tera Term からだと chmod が失敗しますよ。

chmod 777 extmk.rb
chmod: changing permissions of `extmk.rb': Bad file number

rxvtからだと問題無い。

CYGWIN="tty binmode ntsec ntea"

とやってると駄目みたいだ。

CYGWIN="tty binmode ntsec"

にしたらchmodが失敗しなくなった (←なんかまたもや解決方法が間違っている気がする。)


12月29日()

Ruby 1.6.6

一応、ダウンロードしておく。 今は、1.7系を使っているため、日常使うことはない。CVSで取ってきた1.6系の最新版もある。 それでも、RubyUnitやら何やらの動作確認で、 正式なパッケージが手元に無いと困ることがありそうな気がする。 だから「(使わないけど)一応、ダウンロード」ということになる。

Cygwin

1.1.8 から 1.3.6にした。 Cygwin版のRubyをコンパイルできることを確認。 次は、Mingw版だ。


12月28日(金)

プロフェッショナルBSD

机の整理をしていた会社の先輩が、不要だというので、譲ってもらった。 読む暇あるかなあ。


12月26日(水)

Korn shell

Korn shellでちょっとプログラミング。

配列とか、for文とかよくわからなくて、あれこれ調べながら

set -A foos val1 val2
for foo in $foos; do
  echo $foo
done

としたのだけど、期待した通りにはならなかった。

結局、Rubyだったらすぐに書けるのになどと、ぶーぶー文句を言いながらも 何とかやりたいことができた。

foos="val1 val2"
for foo in $foos; do
  echo $foo
end

としなくてはいけなかったらしい。

Java, C++, Visual Basic

なぜか、職場で「Visual Basic できる人いる?」「C++できる人は?」「Javaできる人は?」 などと聞いていた。「Javaやりたい人いる?」だったら立候補しないでもなかったのだが。 嘘でも「Javaできます。」ってはったりかました方が良かったかなとちょっとだけ後悔している。 (仕事で必要だという状況に自分を置かない限り、なかなかJavaをやる気にならないもので。)


12月25日(火)

ruby-talk

流量が減ったのは、みんな休みに突入したから?


12月23日()

RubyUnit

TestSuiteTestCasedecorate_test_elementextend_testに名前を変更した0.5.2をリリース。


12月22日()

寒い

雹みたいなのが降ってます。

RubyUnit

TestSuite#addのバグをFixした0.5.1をリリース。

time_plus time_minus in Ruby 1.7.2

既に、うささんや、渡辺哲也さんが指摘してた。 1日1回のmatomeにしてるから、お2人のメールを読む前に出してしまった。 どうしてもタイムラグが出てしまう。 (←「問題がTimeに関することだけにタイムラグが出てしまう」などと 某グループのリーダーが言いそうな寒いダジャレ(?)を考えてしまった。 ←なんかものすごく恥かしくなった。)

そんなことはさておき、本題に戻ると、Ruby 1.7.2(2001-12-21)だと Timeにバグがあって

Time.now + 1
Time.now - 1

なんてのが失敗します。 詳しくは、[ruby-dev:15526]、[ruby-dev:15527]、 [ruby-dev:15528]、[ruby-dev:15530]を参照。

クラスの拡張

Rubyでは、

class Foo
  def original_method
    ...
  end
end

というのが元々foo.rbで定義されていて、 自分でFoomy_method メソッドをに追加したいと思う場合には、

require 'foo'
class Foo
  def my_method
  end
end

myfoo.rbに書けばいいだけです。 Fooの派生クラスを作ることも無いし、元のfoo.rbを修正する必要も全くありません。

RubyUnitでも、TestSuite#decoratedrunit/ext/decorator.rb で定義することにしました。 このメソッドはTestDecorator(decorator.rb)を使う場合にだけ意味があるからです。 また、ext以下をばっさり切り捨てても後腐れが無いようにしておいた方がいいかと思ったからです。

今週のRAA


12月20日(木)

RubyUnit

バグレポートをもらう。 うう。

rep_tests = RepeatedTest.new(test, 5)
suite = RUNIT::TestSuite.new
suite.add(rep_tests)

なんていうのが、物の見事に動きませんです。

確かにext以下のことは全く忘れてしまってました。

でも、これ、どうしたもんだか。 正直言って、自分では使ったことないし、 ext以下のクラスやモジュールは、あんまり使い易いとは思えないもんで。

TestSuiteの内部構造を変更する前に、 RubyUnit自身のテストの中に、この辺のテストを組み込んでなかったため、気づきませんでした。 まさに医者の不養生、紺屋の白袴。

とりあえず、先に失敗するためのテストを書いてみるか。


12月19日(水)

RubyUnit

ある人とassert_exceptionはどうあるべきかという議論をしていたのだが、 結局、仕様を変更することにした。 近いうちに次をリリースします。

もう一つのTesting Framework([ruby-talk:28747])。 RubyUnitよりは(内部構造は)Simpleだけど、 使いやすいかどうかは意見の分かれるところだと思う (←もちろん主観がかなり入っています)。

風邪

鼻づまりで声が変だけど、それ以外は問題ない。 結構元気になった。


12月17日(月)

RubyUnit

0.5.0 をリリース。 TestSuiteをArrayのサブクラスにした。


12月16日()

RubyUnit

0.4.9のcommitを忘れていたのでcommitした。


12月15日()

休み

風邪ひいたり、忙しかったり、忘年会があったり、他にも飲み会があったりして、 このページを更新する余裕がありませんでした。 ここの更新頻度が落ちると、 「Rubyの原稿をまた書いているのか?」 と勘繰る方がいらっしゃるようなのですが、今回もハズレです。

OptionParser

0.8.5でもRuby 1.7.2(2001-12-10)でエラーになる問題は解決されないと 中田さんご本人から直接メールでいただきました。 OptionParser 0.8.6以降 で対応しているそうです。

Linux with XP

「Extreme Programming」技法を導入したディストリビューションって一体どんなディストリビューションなんだ???

今週のRAA

ruby-talk

[ruby-talk:28453]のSubjectを読んで、おおっと思ったんだけど、 内容を見て、すごいことなのかどうか良くわからなくなってしまった。


12月10日(月)

Ruby 1.7.2 (2001-12-10)

にしたら、OptionParser 0.8.2 でエラーが出たので、急遽 Ruby 1.7.2 (2001-12-03) に戻した。 あっ。0.8.5が出てる。ダウンロードしてみよう。 (原因追及している余裕が無いのです。)


12月9日()

RubyUnit

ようやく、Daveさんに送ってもらった rubyunit.rb を追加した。

require 'rubyunit'
class TestFoo < TestCase
  def test_bar
    assert(true)
  end
  def test_foo
    assert(true)
  end
end

と書くだけでテストを実行できるようになります。

散々、名前で迷った挙句、 RUNIT::TestCase.test_methods は、RUNIT::TestCase.test_casesの別名にした。

バカが往く

私のリクエストに応えてくれたみたいだ。 ありがとうございます。


12月8日()

『燃える地の果てに』(逢坂剛)

まだ、読み始めたところだけど、これは大丈夫な予感がする。

screen (Vine Linux 2.1.5)

なるほど。 そうやって複数のコマンドを組み合わせて、実現する手があったんですね。 マクロみたいに、もう少し簡単に組み合わせられると手軽なのに。> screen


12月7日(金)

最短記録

最短記録達成。10:00前に終わってしまうとは。

電池交換

腕時計の電池交換。 初めて交換作業を生で見ました。 白髪のひょろっとしたおじさんが交換してくれたんだけど、なんか時計職人って感じがして、かっこ良かった。

リュック

通勤で使ってるリュックがボロくなってきたので、新しいのを購入。

『難事件鑑定人』(サリー・ライト) 読了

嫌な予感は当ってしまいました。 最後まで盛り上がらず。 これのどこが「鑑定」なんですか? いわゆる本格推理の類を期待すると思いっきりがっかりします。

忘年会

葉書で案内が来ていたんだけど、別のと重なってしまったので、 近況報告も兼ねて、直接伺って、丁重にお断わりした。

バカが往く

完全保存版にしとかなきゃと思ってた「デメテルの法則の解説の巻」(←勝手に名づけてます。)、 うっかり上書きしてしまいました。誰か保存してませんか?

「XPで開発しました。」というと、「Windows XPの環境で開発した」と思われそうだ。

screen (Vine Linux 2.1.5)

昨日の疑問に対して、 Linux Japanのscreenの記事を書かれた井口さんから直接メールで連絡を頂きました。 私の疑問に対する 井口さんのフォローです。 うーむ。気のせいだったのかあ。


12月6日(木)

screen (Vine Linux 2.1.5)

コピーするときに名前つきのバッファにコピーしておくことはできないんだろうか? (vi の :ya a みたいなの。) どっかにやり方が書いてあったような気がするんだけど見つけられない。

ruby-talk

なんか急に流量が減ってます。 みんなもう休みですか?


12月5日(水)

昨日の続き

昨日の決意を実践すべくテストスクリプトを書く。 何故かバッチプログラムなんぞも書いて1日が終わった。

『難事件鑑定人』

3分の1以上読んだのだが一向に盛り上がってこない。 なんか、このまま何の山場も無く終わってしまうのではないかと恐れている。


12月4日(火)

Emacs 21だとコンソールでも色がつくみたいだ。 基本的にカラフルじゃなくても構わないんだけど、 cmailと、w3m(emacs-w3m)だけは色付きに慣れているので screenだとちょっと辛い。

設定ファイルのチェック

同じ名前だけど、微妙に違う内容のものが2種類、 違う名前で、微妙に違う内容のが数種類、 合わせて、10個の設定ファイルがある。

これを同じように変更しなくちゃならないんだけど、 変更しているうちに、いちいち目で確認していると訳がわからなくなってくる。

そこで、変更内容が正しいかどうか確認するテストスクリプトを、Rubyで書くことに今日の帰りに決めた。 例えば、

FOO=foo

と設定ファイルに追加する場合、テストスクリプトで設定ファイルを読み込んで FOOの値がfooに設定されていることを確認する。

if /^FOO=(.*)$/ =~ line
  assert_equal("foo", $1)
end

というような感じ。書くのは明日以降。

本当は、同じ内容は1つの設定ファイルにまとめるように 設定ファイルを参照しているプログラムを修正する方がいい。 その方が、後腐れが無くていいはずだということは十分にわかっている。 でも、今、プログラムを修正する余裕が無い。現実は厳しい。


12月3日(月)

セーフじゃなかった

簡単にできるけどスレッドセーフでないことがわかった。 修正しなきゃ。

screen

日本語が化けるときには、こんなのを.screenrcに書いておくとうまくいくこともある。

termcap  facit|vt100|xterm LP:G0
terminfo facit|vt100|xterm LP:G0

screenの中で、emacsを使おうとすると必然的にemacs -nwになります。 これだと色がつかないのでcmailとかemacs-w3mとかでちょっと見づらいと思うことがあります。 (emacs は、20.7です。21だとどうだか知らない。)


12月2日()

screen (Vine Linux 2.1.5)

慣れると便利かも。 画面を2分割にして使うと自分にとっては便利。 ですが、困ったことに、画面を分割して扱う方法が、vim, emacs, screen でバラバラなので、 もうほとんど訳がわからなくなってます。 分割できても画面を切り変えられなかったり、元に戻せなかったり(爆笑)。 vim, emacs で画面を2分割にして使うことが結構多いのですが、これにscreenが加わるともうお手上げです。 ということで、.screenrc にこんなのを追加してみました。

escape ^Tt
bind S xoff
bind Q xon
bind X lockscreen
bind x remove
bind s split
bind o only
bind j focus
bind k focus
bind q kill

これで、vimとsojkqはほぼ同じ (C-wC-tの違いとか微妙に違いはあるんだけど)。

Ruby Programming

Socket と Thread を使ってプログラミング。 ソケットプログラミングもマルチスレッドプログラミングも本当にRubyだと簡単にできちゃうなあ。

bash programmable completion 20011126

これをインストールするとbashのコマンドライン環境がより快適になるんだろうか?

Vine Linux 2.1.5 の bash は1.14.7だったのか。 でもって、bash2というのがあって、こっちが2.04.1

$ bash -version
GNU bash, version 1.14.7(1)
$ bash2 --version
GNU bash, version 2.04.1(1)-release (i386-redhat-linux-gnu)
Copyright 1999 Free Software Foundation, Inc.

ログインシェルをbash2にするのが先だな。


12月1日()

ruby-talk

3日分くらい溜まっていたのを片付ける。

[ruby-talk:26867] でDaveさんに呼びかけられていたことにようやく気づいて返事を出す。

返事を出してから、walkitの作者のKenさんが主張していることにも関係あることに気づいた。 Kenさん曰くTestSuiteは、Arrayのようなinterfaceを提供するべきだというもの。 それで、何が嬉しいかというと、自分で好きなように実行したいTestCaseを選択できるようになる点。 もうちょっと考えてみよう。

Lapidary

CVS の最新版では、assertEquals から assert_equals のようなスタイルになっている。

emacs-w3m

今まで、emacs-w3mを起動したときに表示されるメッセージが何だかわからなくて、 もやもやしていたんですが、今日偶然にも解決しました。

偶然、

emacs -f w3m http://non-exist-url/

とやってみたら

Reading http://non-exist-url/...

と出ましたですよ。あー、これでスッキリした。

screen (Vine Linux 2.1.5)

3.9.10をダウンロードしてインストールしてみました。

./configure --prefix=/usr/local --disable-socket-dir
make
make install

ちょこっと触り続けてみました。 rxvtってステータスライン使えないんでしょうか? ktermだと使えるみたいなので、とりあえず、kterm内で使いましょうか。

escape ^Tt
termcap kterm hs@
terminfo kterm hs@
defhstatus "Screen[^En]: ^Et"
termcapinfo kterm 'hs:ts=\E[?2S\E[?E\E[?%i%dT:fs=\E[?F:es:ds=\E[?E'
startup_message off
defscrollback 1000

あんまりよくわからいまま .screenrc は上のような設定にしてみました。


[トップページへ] [11月] [1月] [過去の雑感へ]