再挑戦。 で、2,3ヶ所修正(screen-3.9.10のCygwin用のいい加減なパッチ)しただけでコンパイルできた。 恐る恐る起動してみたら、それなりに動いているようだ。
いい加減な作り方(念のため、断わっておきますが、上のパッチもこの作り方も無保証です。)
tar zxvf screen-3.9.10.tar.gz
cd screen-3.9.10
patch -p 1 < screen-3.9.10-cygwin.patch
./configure --disable-socket-dir
make
ここでscreen
を実行すると/etc/ttys
が無いと叱られるので
touch /etc/ttys
としておく(←かなりいい加減)。
mv screen.exe /usr/local/bin
注意:単にコンパイルを通すだけのパッチであり、attach や detachなどは期待通りに動きません。
試行錯誤の上、ようやくTera Term でCygwinにログインできるようになった。 ちなみに、私の環境は、
DドライブにWindows2000
C:\cygwinに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
が失敗しなくなった
(←なんかまたもや解決方法が間違っている気がする。)
一応、ダウンロードしておく。 今は、1.7系を使っているため、日常使うことはない。CVSで取ってきた1.6系の最新版もある。 それでも、RubyUnitやら何やらの動作確認で、 正式なパッケージが手元に無いと困ることがありそうな気がする。 だから「(使わないけど)一応、ダウンロード」ということになる。
1.1.8 から 1.3.6にした。 Cygwin版のRubyをコンパイルできることを確認。 次は、Mingw版だ。
机の整理をしていた会社の先輩が、不要だというので、譲ってもらった。 読む暇あるかなあ。
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
としなくてはいけなかったらしい。
なぜか、職場で「Visual Basic できる人いる?」「C++できる人は?」「Javaできる人は?」 などと聞いていた。「Javaやりたい人いる?」だったら立候補しないでもなかったのだが。 嘘でも「Javaできます。」ってはったりかました方が良かったかなとちょっとだけ後悔している。 (仕事で必要だという状況に自分を置かない限り、なかなかJavaをやる気にならないもので。)
流量が減ったのは、みんな休みに突入したから?
TestSuite
とTestCase
のdecorate_test_element
をextend_test
に名前を変更した0.5.2をリリース。
雹みたいなのが降ってます。
TestSuite#add
のバグをFixした0.5.1をリリース。
既に、うささんや、渡辺哲也さんが指摘してた。 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
で定義されていて、
自分でFoo
に my_method
メソッドをに追加したいと思う場合には、
require 'foo' class Foo def my_method end end
とmyfoo.rb
に書けばいいだけです。
Foo
の派生クラスを作ることも無いし、元のfoo.rb
を修正する必要も全くありません。
RubyUnitでも、TestSuite#decorated
は runit/ext/decorator.rb
で定義することにしました。
このメソッドはTestDecorator
(decorator.rb
)を使う場合にだけ意味があるからです。
また、ext以下をばっさり切り捨てても後腐れが無いようにしておいた方がいいかと思ったからです。
RubyWinがお世話になってます。
前からこれで遊んでみたいとは思っているのですが。
良くわかってませんが、何か使い道があるかも知れないと思ってダウンロード。
同上。
バグレポートをもらう。 うう。
rep_tests = RepeatedTest.new(test, 5) suite = RUNIT::TestSuite.new suite.add(rep_tests)
なんていうのが、物の見事に動きませんです。
確かにext
以下のことは全く忘れてしまってました。
でも、これ、どうしたもんだか。
正直言って、自分では使ったことないし、
ext
以下のクラスやモジュールは、あんまり使い易いとは思えないもんで。
TestSuite
の内部構造を変更する前に、
RubyUnit自身のテストの中に、この辺のテストを組み込んでなかったため、気づきませんでした。
まさに医者の不養生、紺屋の白袴。
とりあえず、先に失敗するためのテストを書いてみるか。
ある人とassert_exception
はどうあるべきかという議論をしていたのだが、
結局、仕様を変更することにした。
近いうちに次をリリースします。
もう一つのTesting Framework([ruby-talk:28747])。 RubyUnitよりは(内部構造は)Simpleだけど、 使いやすいかどうかは意見の分かれるところだと思う (←もちろん主観がかなり入っています)。
鼻づまりで声が変だけど、それ以外は問題ない。 結構元気になった。
0.5.0 をリリース。 TestSuiteをArrayのサブクラスにした。
0.4.9のcommitを忘れていたのでcommitした。
風邪ひいたり、忙しかったり、忘年会があったり、他にも飲み会があったりして、 このページを更新する余裕がありませんでした。 ここの更新頻度が落ちると、 「Rubyの原稿をまた書いているのか?」 と勘繰る方がいらっしゃるようなのですが、今回もハズレです。
0.8.5でもRuby 1.7.2(2001-12-10)でエラーになる問題は解決されないと 中田さんご本人から直接メールでいただきました。 OptionParser 0.8.6以降 で対応しているそうです。
「Extreme Programming」技法を導入したディストリビューションって一体どんなディストリビューションなんだ???
これを使えばOLEサーバーアプリがRubyで実現できそう。 Win32OLEと同じようなことも(それ以上のことも)できるみたい。
[ruby-talk:28453]のSubjectを読んで、おおっと思ったんだけど、 内容を見て、すごいことなのかどうか良くわからなくなってしまった。
にしたら、OptionParser 0.8.2 でエラーが出たので、急遽 Ruby 1.7.2 (2001-12-03) に戻した。 あっ。0.8.5が出てる。ダウンロードしてみよう。 (原因追及している余裕が無いのです。)
ようやく、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
の別名にした。
私のリクエストに応えてくれたみたいだ。 ありがとうございます。
まだ、読み始めたところだけど、これは大丈夫な予感がする。
なるほど。 そうやって複数のコマンドを組み合わせて、実現する手があったんですね。 マクロみたいに、もう少し簡単に組み合わせられると手軽なのに。> screen
最短記録達成。10:00前に終わってしまうとは。
腕時計の電池交換。 初めて交換作業を生で見ました。 白髪のひょろっとしたおじさんが交換してくれたんだけど、なんか時計職人って感じがして、かっこ良かった。
通勤で使ってるリュックがボロくなってきたので、新しいのを購入。
嫌な予感は当ってしまいました。 最後まで盛り上がらず。 これのどこが「鑑定」なんですか? いわゆる本格推理の類を期待すると思いっきりがっかりします。
葉書で案内が来ていたんだけど、別のと重なってしまったので、 近況報告も兼ねて、直接伺って、丁重にお断わりした。
完全保存版にしとかなきゃと思ってた「デメテルの法則の解説の巻」(←勝手に名づけてます。)、 うっかり上書きしてしまいました。誰か保存してませんか?
「XPで開発しました。」というと、「Windows XPの環境で開発した」と思われそうだ。
昨日の疑問に対して、 Linux Japanのscreenの記事を書かれた井口さんから直接メールで連絡を頂きました。 私の疑問に対する 井口さんのフォローです。 うーむ。気のせいだったのかあ。
コピーするときに名前つきのバッファにコピーしておくことはできないんだろうか?
(vi の :ya a
みたいなの。)
どっかにやり方が書いてあったような気がするんだけど見つけられない。
なんか急に流量が減ってます。 みんなもう休みですか?
昨日の決意を実践すべくテストスクリプトを書く。 何故かバッチプログラムなんぞも書いて1日が終わった。
3分の1以上読んだのだが一向に盛り上がってこない。 なんか、このまま何の山場も無く終わってしまうのではないかと恐れている。
Emacs 21だとコンソールでも色がつくみたいだ。 基本的にカラフルじゃなくても構わないんだけど、 cmailと、w3m(emacs-w3m)だけは色付きに慣れているので screenだとちょっと辛い。
同じ名前だけど、微妙に違う内容のものが2種類、 違う名前で、微妙に違う内容のが数種類、 合わせて、10個の設定ファイルがある。
これを同じように変更しなくちゃならないんだけど、 変更しているうちに、いちいち目で確認していると訳がわからなくなってくる。
そこで、変更内容が正しいかどうか確認するテストスクリプトを、Rubyで書くことに今日の帰りに決めた。 例えば、
FOO=foo
と設定ファイルに追加する場合、テストスクリプトで設定ファイルを読み込んで FOOの値がfooに設定されていることを確認する。
if /^FOO=(.*)$/ =~ line assert_equal("foo", $1) end
というような感じ。書くのは明日以降。
本当は、同じ内容は1つの設定ファイルにまとめるように 設定ファイルを参照しているプログラムを修正する方がいい。 その方が、後腐れが無くていいはずだということは十分にわかっている。 でも、今、プログラムを修正する余裕が無い。現実は厳しい。
簡単にできるけどスレッドセーフでないことがわかった。 修正しなきゃ。
日本語が化けるときには、こんなのを.screenrcに書いておくとうまくいくこともある。
termcap facit|vt100|xterm LP:G0 terminfo facit|vt100|xterm LP:G0
screenの中で、emacsを使おうとすると必然的にemacs -nw
になります。
これだと色がつかないのでcmailとかemacs-w3mとかでちょっと見づらいと思うことがあります。
(emacs は、20.7です。21だとどうだか知らない。)
慣れると便利かも。 画面を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とs、o、j、k、qはほぼ同じ (C-wとC-tの違いとか微妙に違いはあるんだけど)。
Socket と Thread を使ってプログラミング。 ソケットプログラミングもマルチスレッドプログラミングも本当にRubyだと簡単にできちゃうなあ。
これをインストールすると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にするのが先だな。
3日分くらい溜まっていたのを片付ける。
[ruby-talk:26867] でDaveさんに呼びかけられていたことにようやく気づいて返事を出す。
返事を出してから、walkitの作者のKenさんが主張していることにも関係あることに気づいた。 Kenさん曰くTestSuiteは、Arrayのようなinterfaceを提供するべきだというもの。 それで、何が嬉しいかというと、自分で好きなように実行したいTestCaseを選択できるようになる点。 もうちょっと考えてみよう。
CVS の最新版では、assertEquals から assert_equals のようなスタイルになっている。
今まで、emacs-w3mを起動したときに表示されるメッセージが何だかわからなくて、 もやもやしていたんですが、今日偶然にも解決しました。
偶然、
emacs -f w3m http://non-exist-url/
とやってみたら
Reading http://non-exist-url/...
と出ましたですよ。あー、これでスッキリした。
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 は上のような設定にしてみました。