今日も食当たりしなくて済んだことを幸運の神様に感謝します。 この調子で年末ジャンボも当ててください。なーむー。
南無は神様じゃありませんが、日本の神様はルーズなのでたぶん大丈夫でしょう。
今日の朝食
すみません、やっぱり年末ジャンボの前に今日を生きのびさせてください。
ruby-dev summary やってるはずだったのになぜか tdiarytimes を導入するはずだったのになぜか 原形を留めないほど改造したうえ新しい機能を追加してしまった。
改造 tdiarytimes
でも、どう見ても元の直線バーのほうがかっこいいですね。 円だとアンチエイリアスがかかってないからギザギザが見えて汚すぎだわ。 誰が使うやらわかりませんが、物好きな人のために設定を書いときます。
# オリジナルと違って以下の三つは必須 @options['tdiarytimes.shape'] = 'circle' # 'bar' or 'circle' @options['tdiarytimes.width'] = 80 # circle のときは 80×80 のみ対応 @options['tdiarytimes.height'] = 80 # (それ以外では文字がずれる) # ちなみに width != height にするとちゃんと楕円になる # (けど文字がそれに合わせて変わらないので意味なし) # shape=circle のときは tdiarytimes.text は効果がない #@options['tdiarytimes.text'] = '無駄無駄無駄' # 以下は省略可 @options['tdiarytimes.day'] = 120 @options['tdiarytimes.textcolor'] = '#000000' @options['tdiarytimes.linecolor'] = '#bfbfbf' @options['tdiarytimes.fillcolor'] = '#2f2f7f' @options['tdiarytimes.fadeout'] = true
それと GD2 が必須です。 Ruby/GD の extconf のときに --enable-gd2_0 を忘れずに付けましょう。
たまってるバグレポートだけ片付けちまおう。 まずは fileutils だな。fileutils には二つ to do がある。
これは [ruby-core:01795] で言われたやつ。 RHG 読書会で akr さんに方針を相談したところ 「Pathnameなんか使うなって言えば?」と言われたりしたわけですが、 現実的なとこで to_str だけ付けとくことにします。
うーむ、見事にチェックした環境だけすりぬけたか……。 反省して今日は Linux, FreeBSD, NetBSD, Solaris, Cygwin, mswin32 でチェックするぜ!
ちなみにこれも RHG 読書会で植松さんに聞いたんだけど、 Windows CE にドライブレターはないらしい。 これも修正しとく (いつ役に立つのかわからんけど)。
そういえば runner.rb 起動すると全部テストするんだよな。 せっかくだから全部やってみるか。とあー!
起動が遅いのはロード後の GC のせいだろうな。 bison を入れておくべきだった。
あ、FreeBSD/Alpha で "F" 出た。
~/src/ruby % ruby --version aamine@as600 ruby 1.8.1 (2003-12-01) [alpha-freebsd4.7] : : Finished in 225.274 seconds. 1) Failure: test_cond(TestMonitor) [./test/monitor/test_monitor.rb:111:in `test_cond' ./test/monitor/test_monitor.rb:107:in `synchronize' ./test/monitor/test_monitor.rb:107:in `test_cond']: <true> expected but was <false>. 2) Error: test_wsdl(XSD::TestEmptyCharset): RuntimeError: uconv or iconv is required for Japanese encoding support. /usr/local/lib/ruby/1.8/rexml/encodings/EUC-JP.rb:30 /usr/local/lib/ruby/1.8/rexml/encoding.rb:26:in `load' /usr/local/lib/ruby/1.8/rexml/encoding.rb:26:in `encoding=' /usr/local/lib/ruby/1.8/rexml/source.rb:41:in `encoding=' /usr/local/lib/ruby/1.8/rexml/parsers/baseparser.rb:182:in `pull' /usr/local/lib/ruby/1.8/rexml/parsers/streamparser.rb:12:in `parse' /usr/local/lib/ruby/1.8/rexml/document.rb:166:in `parse_stream' /usr/local/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:27:in `do_parse' /usr/local/lib/ruby/1.8/wsdl/xmlSchema/parser.rb:60:in `parse' ./test/xsd/test_noencoding.rb:14:in `test_wsdl' 686 tests, 7943 assertions, 1 failures, 1 errors
え? なんだこの Failure は。 お約束のように再現性は皆無であるわけです。
Linux/i686 は見事 all green。
~/src/ruby % ruby --version aamine@harmony ruby 1.8.1 (2003-12-01) [i686-linux] : : Finished in 100.48778 seconds. 647 tests, 7850 assertions, 0 failures, 0 errors
NetBSD/Alpha では以下のようになって drb が起動しなかった。
aamine@asv800 % ruby --version ~/src/ruby ruby 1.8.1 (2003-12-01) [alpha-netbsd] aamine@asv800 % ruby test/runner.rb ~/src/ruby Loaded suite test Started ................................................................./usr/local/lib/ruby/1.8/drb/drb.rb:701:in `open': druby://asv800:49153 - #<Errno::ECONNREFUSED: Connection refused - connect(2)> (DRb::DRbConnError) from /usr/local/lib/ruby/1.8/drb/drb.rb:694:in `each' from /usr/local/lib/ruby/1.8/drb/drb.rb:694:in `open' from /usr/local/lib/ruby/1.8/drb/drb.rb:1080:in `initialize' from /usr/local/lib/ruby/1.8/drb/drb.rb:1063:in `new' from /usr/local/lib/ruby/1.8/drb/drb.rb:1063:in `open' from /usr/local/lib/ruby/1.8/drb/drb.rb:1010:in `method_missing' from /usr/local/lib/ruby/1.8/drb/extserv.rb:16:in `initialize' from /home/aamine/src/ruby/test/drb/ut_array.rb:12:in `new' from /home/aamine/src/ruby/test/drb/ut_array.rb:12
ここでハングしたので ^C で止めて、とりあえず drb だけ除いてテストしてみる。
Finished in 146.312593 seconds. 1) Error: test_wsdl(XSD::TestEmptyCharset): RuntimeError: uconv or iconv is required for Japanese encoding support. /usr/local/lib/ruby/1.8/rexml/encodings/EUC-JP.rb:30 /usr/local/lib/ruby/1.8/rexml/encoding.rb:26:in `load' /usr/local/lib/ruby/1.8/rexml/encoding.rb:26:in `encoding=' /usr/local/lib/ruby/1.8/rexml/source.rb:41:in `encoding=' /usr/local/lib/ruby/1.8/rexml/parsers/baseparser.rb:182:in `pull' /usr/local/lib/ruby/1.8/rexml/parsers/streamparser.rb:12:in `parse' /usr/local/lib/ruby/1.8/rexml/document.rb:166:in `parse_stream' /usr/local/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:27:in `do_parse' /usr/local/lib/ruby/1.8/wsdl/xmlSchema/parser.rb:60:in `parse' ./test/xsd/test_noencoding.rb:14:in `test_wsdl' 578 tests, 7499 assertions, 0 failures, 1 errors
あー、なるほど。これはどうしようもないな。
SPARC がなかなか終わんねー。 あ、終わった。rexml のテストがあまりに遅いからハングしたかと思ったよ。
aamine@ultra30 % ruby --version ~/src/ruby ruby 1.8.1 (2003-12-01) [sparc-solaris2.9] : : Finished in 512.859409 seconds. 1) Error: test_wsdl(XSD::TestEmptyCharset): Errno::EINVAL: Invalid argument - iconv("euc-jp", "utf-8") /usr/local/lib/ruby/1.8/rexml/encodings/EUC-JP.rb:25:in `iconv' /usr/local/lib/ruby/1.8/rexml/encodings/EUC-JP.rb:25:in `encode' /usr/local/lib/ruby/1.8/rexml/source.rb:42:in `encoding=' /usr/local/lib/ruby/1.8/rexml/parsers/baseparser.rb:182:in `pull' /usr/local/lib/ruby/1.8/rexml/parsers/streamparser.rb:12:in `parse' /usr/local/lib/ruby/1.8/rexml/document.rb:166:in `parse_stream' /usr/local/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:27:in `do_parse' /usr/local/lib/ruby/1.8/wsdl/xmlSchema/parser.rb:60:in `parse' ./test/xsd/test_noencoding.rb:14:in `test_wsdl' 666 tests, 7900 assertions, 0 failures, 1 errors
うわ。
Cygwin / Windows 2000 / NTFS
~/src/ruby % ruby-cygwin --version ruby 1.8.1 (2003-12-01) [i386-cygwin] : : Finished in 199.791 seconds. 1) Failure: test_ip_v6(ACLEntryTest) [./test/drb/test_acl.rb:56]: <false> is not true. 686 tests, 7944 assertions, 1 failures, 0 errors
mswin32 / Windows 2000 / NTFS はいろいろ出たけど、どれも既知っぽいな。つまらん。
~/src/ruby % ruby-vc6 --version ruby 1.8.1 (2003-12-01) [i386-mswin32] : : Finished in 236.31 seconds. 1) Error: test_ip(ACLEntryTest): NameError: uninitialized constant Socket::AF_INET6 c:/ruby-vc6/lib/ruby/1.8/ipaddr.rb:183:in `ipv6?' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:47:in `match' ./test/drb/test_acl.rb:63:in `test_ip' 2) Failure: test_ip_v6(ACLEntryTest) [./test/drb/test_acl.rb:56]: <false> is not true. 3) Error: test_1(ACLListTest): NameError: uninitialized constant Socket::AF_INET6 c:/ruby-vc6/lib/ruby/1.8/ipaddr.rb:183:in `ipv6?' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:47:in `match' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:68:in `match' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:67:in `each' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:67:in `match' ./test/drb/test_acl.rb:137:in `test_1' 4) Error: test_all_2(ACLListTest): NameError: uninitialized constant Socket::AF_INET6 c:/ruby-vc6/lib/ruby/1.8/ipaddr.rb:183:in `ipv6?' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:47:in `match' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:68:in `match' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:67:in `each' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:67:in `match' ./test/drb/test_acl.rb:131:in `test_all_2' ./test/drb/test_acl.rb:130:in `each' ./test/drb/test_acl.rb:130:in `test_all_2' 5) Error: test_not_1(ACLTest): NameError: uninitialized constant Socket::AF_INET6 c:/ruby-vc6/lib/ruby/1.8/ipaddr.rb:183:in `ipv6?' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:47:in `match' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:68:in `match' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:67:in `each' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:67:in `match' c:/ruby-vc6/lib/ruby/1.8/drb/acl.rb:102:in `allow_addr?' ./test/drb/test_acl.rb:189:in `test_not_1' 6) Error: test_wsdl(XSD::TestEmptyCharset): RuntimeError: uconv or iconv is required for Japanese encoding support. c:/ruby-vc6/lib/ruby/1.8/rexml/encodings/EUC-JP.rb:30 c:/ruby-vc6/lib/ruby/1.8/rexml/encoding.rb:26:in `load' c:/ruby-vc6/lib/ruby/1.8/rexml/encoding.rb:26:in `encoding=' c:/ruby-vc6/lib/ruby/1.8/rexml/source.rb:41:in `encoding=' c:/ruby-vc6/lib/ruby/1.8/rexml/parsers/baseparser.rb:182:in `pull' c:/ruby-vc6/lib/ruby/1.8/rexml/parsers/streamparser.rb:12:in `parse' c:/ruby-vc6/lib/ruby/1.8/rexml/document.rb:166:in `parse_stream' c:/ruby-vc6/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:27:in `do_parse' c:/ruby-vc6/lib/ruby/1.8/wsdl/xmlSchema/parser.rb:60:in `parse' ./test/xsd/test_noencoding.rb:14:in `test_wsdl' 644 tests, 7797 assertions, 1 failures, 5 errors
ま、fileutils は一個も問題出なかったからいいや。
http://mput.dip.jp/mput/?date=20031201
tdiarytimesのバーがいきなり入っているのは、 td2 の Last-Modified: を集めて先にログを作っといたからです。 tDiary の Last-Modified: がいつ更新されるのか調べてないのですが、 何もないよりたくさん線が入ってたほうがおもしろい…… というかデータがないとデバッグできないので適当にかきあつめたというのが正解。
不思議なことに、ガリガリ書きはじめてしばらくすると楽しくなる。 そこにいくまでが嫌なんだよなー。
ところで、dev summary を書いていると 「前回の summary ってどこまで書いてたんだろう」と思うことが多いのだが、 こういうときこそ ruby-dev summary index を見ればよいのだということに気付いた。
自分で作っておきながらこんなことに気付かないとは……。
今回は net/http がちょっとからんでるのがあるので つい net/http をなおしたくなってしまうのだが それをやっていると本当に終わらなくなるので気をつけよう。
と言いつつドキュメントだけ追加しているあたりが卑怯である
うーむ、tdiary grep は単なる一発ギャグのつもりだったんだけど、 使う人がいるとは思わんかった。せっかくなのでちょっと修正しておきました。
先日は設定について一切書かなかったので すこしヒントを書いておきます。
いずれにしろちょっとは手を入れたほうがいいでしょうね。 そのへんが念頭にあったゆえ「詳細はソースコードを参照」なのです。
おかしい、最初の目論見と完全に逆方向へ爆進している。
いちいち /archive/d に置くのも面倒なんで、 CVS レポジトリ公開しときます。
% cvs -d :pserver:anonymous@cvs.loveruby.net:/src co tdiarytools
tdiarygrep と tdiarytimes 改と、その他あやしげなツール入り。
■
rufein [tdiarygrep使わせていただいています。一箇所バグを発見しました。
184行目のenshort内で日記がサブタイトルだけだとbodyがnilになってしまい、エラーします。
自分のところでは
if body == nil
body = ""
end
と追加して回避しました。修正していただければ幸いです。]
■ あおき [ありがとうございます。対処しました。]
■
ょゎ [アドホックなWikiスタイル対応してみました。
split(/\n\n/)をsplit(/^!/)に変えるだけでいけそうです。
http://yowaken.dip.jp/tdiary/20031202.html#p03 (Revsion:1.15へのパッチですが)]
■
kjana [ちなみに危険な大根っていうのはどんな塩梅なんでしょ? うちのもうすぐ一月たつ
やつは全然問題ない様子ですが.切口はさすがに萎びるけど.]
11/10 の日記にツッコミがあったので引用。
半田付け、セオリー的には、背の低いパーツから。裏返して机に おくと、全部平べったく基板に押し付けられて高さがそろうから。 横置きの抵抗、ICソケット、コンデンサ、縦置きの抵抗、トラン ジスタ類、コネクタ類の順。 友達がこのページ参考に組み立てようとしてるらしい。ばんがれー
このページを参考に……。それはまた難儀な。
しかしここはバカ正直に、 御期待にお応えして続きを書いてみようじゃないか!
(注: この制作記はリアルタイムではありません。少しずらしてます。)
TD4 の製作は意外にも順調に進みます。 手動クロックができたので自動クロック (1Hz/10Hz) とリセット回路です。
何はともあれまずは現物を見てください。
IC の位置間違いが悲劇を生んだ表面
部品が実装面で立体交差してます。ある意味凄いです。 しかしもっと凄いのが裏面。
パトラッシュ、ぼくはもうだめだよな裏面
この調子で CPU とか RAM の配線ができるんだろうか? ちなみに黄色とオレンジの線がクロック信号とリセット信号です。
こんな感じで配線はかなり難航しましたが、 作業自体はひたすらハンダ付け→確認、 の繰り返しなので難易度は高くありません。 ハンダ初心者でもここまでは問題なく実装できると感じました。
そうだ、クロックジェネレータを作りはじめたあたりで 回路図の拡大コピーを使うようにしました。 本にのってるやつだと見づらいですし、 いちいちページをめくるのは面倒ですから。
ここまで作ると初めて動作確認ができます (IC の回路を全部使わないと動かないから)。 まずは丁寧に配線チェック……しようかとも思ったんですが、 配線したらすぐにチェックしてきたのでかっとばします。
そしたら IC を刺さずに通電。大丈夫そうです。
次に IC を刺して通電。 部品が破裂したりはしてないので、大丈夫そうです。 本に書いてある通りにテスタで電圧をチェックしていきましょう。
最初はいきなりマイナスの電圧が出て何事かと思ったんですが、 思いきりテスタの使いかたを間違っていました。 +を 5V につないで、−のリードを測りたいところに当ててたんです。 −を GND にあてて、+を測りたいところに当てなきゃいけないのね。 本気であせりました。
あと、リセット回路の出力をテスタで測ると 3.3V と出たんですが、 これは p.287 にある通りテスタの内部抵抗の影響で見かけだけ 下がっているようです。
さて、計測した値は大丈夫そうなんですが、 テスタで測るだけではわかりにくいので、 LED も付けてみました。
わかりにくいと思いますが、右下のほうに緑色の LED が二つ出てます。 上がリセット信号で下がクロック信号です。 どうつなげたものかよくわからなかったのですが、 「クロック回路───LED───GND」のようにつなげています (この LED は最初から抵抗が入っているらしく、いきなりつなげば光る)。
リセット信号は通常 H (5V) なので、最初に少しだけ消えててあとは常時点灯します。 クロック信号は、手動クロックならボタンを押したときだけ点灯します。 1Hz の自動クロックなら 1 秒ごとに点いたり消えたりします。 いきなり無事に動いてしまいました。
うねうね配線では苦労しましたが、 そのおかげで配線スキルはレベルアップしました。 もう一回やったらもっとすっきり配線できると思います (やらんけど)。
例えば写真の手前側の配線なんかは浮かす必要はないのに なぜか浮いてしまってます。これはよろしくありません。 こうなってしまった原因は、 「線は穴にさしてからハンダ付けするに違いない」 と思ってしまったことです。穴に刺してしまうと、 リード線が固くて曲がらないのでどうしても基板から浮いてしまうわけです。 もっとぴったり基板にはりつけて配線すればよかった。
tdiarygrep をさらに改造しました。
URL: http://i.loveruby.net/archive/d/tdiary-grep.rb.txt
CVS: cvs -d :pserver:anonymous@cvs.loveruby.net:/src co tdiarytools
変更点
フォーマットは日ごとに変えられるので、 Format: ヘッダを見て分割方法を決めることにしました。 対応フォーマットは tDiary, Wiki, RD。 RD を tDiary で使うときのフォーマットって知らんのだけど、 セクション開始は「=」でいいのかな。
nokada さんの CGI パラメータでテーマを指定する方式は何か起こりそうなんで不採用。 その代わり、テーマを使うかどうかだけを指定できるようにしました。 theme=on を渡すとテーマを使います。
<form method="post" action="grep.rb" class="grepform"> <p>% grep '<input type="text" name="q" size="20" value="">' *.td2 <input type="submit" value="Return"></p> <input type="hidden" name="theme" value="on"> </form>
テーマは tdiary.conf の @theme から自動判別します。 ただし @css は不可。@theme のみ。@alt_themes の自動設定にも対応しません。 そこまで設定したければファイルに ALT_THEMES を直接書いてください。
とにかく、細かいパラメータを設定したければハードコーディングする。 設定を固定したいときもハードコーディングする。 ファイル中にパラメータを書いた場合は常にそちらを優先します。
んで、theme=off がデフォルトなのは単なる趣味です。だってこれ grep だし。
とか言いつつ AND 検索が実装されていたりするあたりは基準が謎っぽい。
erb 使ったのと、テーマあり・なしのテンプレートを両方入れたのが原因かな。 その代わり、見ための変更はテンプレートをいじるだけで全部できるようになったはず。
てきとーに例外を捕まえていたのをやめて、 予想外の例外は全てバグとみなすことにしました。
こないだの大根は切ったのを冷蔵庫にしばらく放置してたので 全面茶色になってました。なんか手触りもふにょふにょしてたし……。 でも一ヶ月はたってないと思います。きっと。
■ arton [それは割干大根とか切干大根になってしまったのでは>全面茶色]
■
さんちゃん [TD4制作記、おもしろく読ませていただきました。実は、私もTD4を自作しまして(あおき様の記事を大変参考にさせていただきました)、ラーメンタイマーを1Hzモードで走らせたところ、3分15秒でブザーが鳴るはずが、3分40秒もかかったのです。
74HC14シュミットトリガの誤差だと思うのですが、あおき様のTD4はラーメンタイマーのプログラムは何分かかりますか?
URL:http://www.bea.hi-ho.ne.jp/m-okaniwa/cpu.htm]
■
さんちゃん [すみません。最後まで読んでいなかったので。あおき様のTD4はまだ制作途中なのですね。
それでは、現段階で1Hzモードで1分間にLEDが何回点滅するかお教えくださいますでしょうか?
私の場合、1分間にだいたい53回から54回です。
1Hzになっていません。]
■
青木 [初めまして。もう完成したのですか。すばらしいですね。
こちらは 58Hz でした。やっぱり微妙にずれています。
ちなみに IC は 74HC14AP (JAPAN 03 29 H と書いてある)
を使ってます。秋葉原の千石通商で買いました。]
■
青木 [あああ、間違えた。
「58Hz」ではなく、60 秒で 58 クロックです。]
■
さんちゃん [さんちゃんです。
あおきさんのTD4は、約0.97Hzということですね。
このくらいの精度ですとほぼ渡波先生の本のとおりって
感じですね。ラーメンタイマーも3分20秒ぐらいで、
カップラーメンもおいしくできそう。いいなぁ・・・
やはり製品によって誤差にある程度の幅があるようですね。
お仕事でお忙しいところを本当にありがとうございました。
制作の続きを期待してます!]
tDiary の @referer_table のメンテって自動化できないかなあ。
とりあえず title は取れそうじゃん。 あとはどう日記とか Wiki を判別して日付部分を抜き出すかだ。
うーん。やっぱ完全自動は無理か。 なんかのヒントを与えてやればいいのかなあ……。
間をスパゲッティでつないで、ちゃんとした昼飯はいまから作ろう (15:00)。
材料
今日は買い物したばかりだから大丈夫なのだ。 問題は余りものが蓄積しはじめる四・五日後だ。
とか言いつつ賞味期限 + 7 日の牛乳を飲む。 大丈夫! 温めれば大丈夫!
おー、なるほど。zunda さんありがとうございます。 disp_referer2 の CGI 設定を使えばよかったんですね。 そうか、意地で tdiary.conf 直書き設定をしていたのが敗因か……。
と思ったのですが、表示してみたらえらい大量のURLが出てきて 泣きそうになったのであきらめました。
とりあえず外部ツールを使うセンで何か考えてみよう。
■
なひ [青木さんlib/soap/netHttpClient.rbいじりません? 実は
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/21177
でお願いできたつもりで居ました。。。]
■
あおき [あー、そうですね。すっかり忘れてました。
SOAP 勉強しないとだめかな……。]
■
なひ [このファイルだけ見てできないようであれば、お願いしているなひが悪いです。
今のところ、basic_auth対応と、-wするとwarningが出るのがほったらかしです。。。]
■ zunda [「リンク元もうちょっと強化」から「その他のリンク元の置換リストの編集に移る」と、正規表現の生成を、tDiaryかWikiかを想像しながらほんのちょっとだけ自動化してあります。タイトルも取ってこられるようにしようかなぁ…。]
[ruby-talk:87730] race condition in makedirs
makepath では複数のディレクトリを親から順番に作っていく。 このとき、ディレクトリかどうかチェックしてから mkdir(2) すると別プロセスがすでに作っている場合があるからまずい、 という指摘があった。 名指しされたのは ftools だけど、 fileutils も全く同じ問題がある。
そこで、そこらへんに転がっていた mkinstalldirs と GNU mkdir のソースコードを見て挙動を確認した。 それによると、まず mkdir してみて、 失敗したときにそれがディレクトリかどうかチェックしているようだ。
よって、fileutils もこの方式でいくことにした。
で、soap/netHttpClient.rb を見てみた。
とりあえずソースコードだけ見ると、 netHttpClient.rb の warning は例の HTTP#get の返り値変更のやつだな。 これは 1.8 限定なら簡単になおせる。 しかしテストせずにいじるのは恐いので、 まず SOAP 環境を作らないとな。
他に出てるのは net/https か。 これはいきなりメソッドを上書きしているのがよくないので、 remove_method してから定義すれば直るな。 ていうか net/https は net/http にマージしちゃってもいいんじゃなかろうか? しかしテストせずにいじるのは恐いので、 まず https な環境を作らないとな。
とか言ってるあいだに深みにはまっていくのが定番パターンである。
http://distcc.samba.org/ ( ただの日記 経由)
分散コンパイルしてくれるらしい。これはいいねえ。 最近のコンパイルでは I/O より CPU パワーが命だからな。
Cygwin でテスト走らせたらなぜかカレントディレクトリが真っ新に! ひいー。
というのは置いといて (直したけど)。
mswin32 版でテスト走らせたらエラーが!
というのも置いといて (直したけど)。
NetBSD/Alpha で失敗した。 なぜか FileUtils.mkdir_p('tmpdir/d/') と最後にスラッシュを付けてると失敗する。 mswin32 はともかく NetBSD で失敗するのはおかしーよ! おかしーですよ! ありえねーよ!
aamine@asv800 % uname -srm NetBSD 1.6.1 alpha aamine@asv800 % ls dir /usr/local/bin/gnuls: dir: No such file or directory aamine@asv800 % ruby -e 'Dir.mkdir("dir/")' -e:1:in `mkdir': No such file or directory - dir/ (Errno::ENOENT) from -e:1 aamine@asv800 % ruby -e 'Dir.mkdir("./dir/")' -e:1:in `mkdir': No such file or directory - ./dir/ (Errno::ENOENT) from -e:1 aamine@asv800 % ruby -e 'Dir.mkdir("dir")' aamine@asv800 %
ええー。まじで?
いやいや、これはきっと ruby が原因なんだな。 ありがちな罠だ。
aamine@asv800 % cat mkdir.c #include <stdio.h> #include <sys/stat.h> int main(int argc, char **argv) { if (mkdir("dir", 0777)) { perror("dir/"); exit(1); } exit(0); } aamine@asv800 % gcc -Wall -omkdir mkdir.c aamine@asv800 % ./mkdir dir/: No such file or directory aamine@asv800 % ls dir /usr/local/bin/gnuls: dir: No such file or directory
世の中は無情にも非情だった。
しかたないので末尾のスラッシュはあらかじめ sub しておくことにしよう。 これで Linux NetBSD Cygwin VC++6 で通りました。
http://diary.does.notwork.org/gotoyuzo/?date=20031211#p01 (AD-HOCKERY DIARY)
むー、パス末尾のスラッシュは渡す側が取り除くのが正しいんですか。 さらに調査すると、coreutils-5.0/lib/mkdir.c にも スラッシュを取る関数があって、そのコメントに
/* This function is required at least for NetBSD 1.5.2. */
とありました。
ところで、今の今までずっと ad-hocky diary だと思ってましたよ。
あ、NetBSD だとディレクトリを cat できるんだな。 Linux はできないんだよなー。 便利って言えば便利だけど、なんとなく納得いかないものがある。
ディレクトリを open できると grep '^ufs_mkdir' ufs/* ってしたときにディレクトリが混ざってても エラーにならないのがちょっと便利。
■
soda [ディレクトリが cat できるのは、UNIX的には伝統です。
昔(4.2BSDでffsが導入されるよりも前)はgetdent(2)とか
readdir(3)なんてものはなくて、アプリケーションが
read(2)でディレクトリを直接読んでました。
もっとも、NFSを介すと、どんなUNIXでもread(2)できなく
なります。
ディレクトリ名の末尾に"/"をつけても良いかどうかは、
POSIX的にはどちらが正しいんだか良くわからない状況
じゃないかと思います。移植性を重視するなら、つけない
方が安全でしょう。(netbsd @ re.soum メーリングリスト
でも最近議論されてます。)]
■
あおき [あ、昔ディレクトリが読めたってのは知ってるんです。
Solaris とかいじってましたし、昔話が好きなもんで。
大昔は vi で編集したこともあったらしいですね。
と思ったら、そうか、全く逆の意図に読めるんですね……。
「便利だけど納得がいかない」のは、Linux でディレクトリを
read できないことについて書いているわけです。
わかりにくかったですね。すみません。]
[ruby-talk:87889] より、プログラミング言語の年表。 前に UNIX の年表を作ってた人だな。あれも面白かった。
http://www.dm4lab.to/~usa/ruby/d/200312b.html#id20031211_P3
NetBSD current では mkdir("dir/") が OK になったらしい。 前から気になってたんですが、もしかして NetBSD も全部 ChangeLog 見てるんですか?
まあでも RELEASE で出ちゃったら対応は含めざるをえないわけで、 環境テストとしてはやっぱり RELEASE でテストするのが正解かな。
問題の続きですが、[ruby-dev:22239] によると OS/2 も末尾のスラッシュは受け付けないみたいですね。 ディレクトリを渡す可能性のあるシステムコールからは 全てスラッシュを消したほうがよいようだ。
ところで、mkdir_p だけ直して mkdir を直してないのはどういう了見なんだ > 俺
追記: どちらも直した。確認: Linux/i686 2.4.22, NetBSD/Alpha 1.6.1, Cygwin/Windows 2000/NTFS/i686, VC++6/Windows 2000/NTFS/i686
http://nokada.jin.gr.jp/t/20031211.html#p01
む、GNU grep はディレクトリでも OK なんですか。 そういえば -r もなかったし、 もしかしてバージョンがすごい古いのかな。
~/public_html/wikitik % grep --version grep (GNU grep) 2.2
ぐわー。
grep はセキュリティホールとかないもんなあ……。
家の w3m はまだ 0.3 だったので GNU grep 2.5 のついでに入れといた。 以前作ったパッチもそのまま当たるようだ。 (デフォルトだと U とか C で出した URL は 10 秒で消えるが、 これを消さないようにする)
http://i.loveruby.net/archive/d/w3m-0.4.2-display.c.diff
--- display.c.org 2003-12-12 16:20:26.000000000 +0900 +++ display.c 2003-12-10 20:07:07.000000000 +0900 @@ -1232,16 +1232,18 @@ disp_message_nsec(char *s, int redraw_cu displayBuffer(Currentbuf, B_NORMAL); } +/* aamine 2002-06-19 */ +#define TMP_DISPLAY_SEC (60*60*24) void disp_message(char *s, int redraw_current) { - disp_message_nsec(s, redraw_current, 10, FALSE, TRUE); + disp_message_nsec(s, redraw_current, TMP_DISPLAY_SEC, FALSE, TRUE); } #ifdef USE_MOUSE void disp_message_nomouse(char *s, int redraw_current) { - disp_message_nsec(s, redraw_current, 10, FALSE, FALSE); + disp_message_nsec(s, redraw_current, TMP_DISPLAY_SEC, FALSE, FALSE); } #endif
GHC 6.0.1 も入れとこっと。 あ、configure に何を付ければいいのか忘れた。
しかし! そういうときのためにこのコマンドが用意してあるのだっ。
http://i.loveruby.net/archive/d/search-configure-log.rb.txt
~ % search-configure-log ghc : 1047650485:0;cd ~/s/src/ghc-5.04.3 : 1047650766:0;./configure --help : 1047650480:0;cd ghc-5.04.3 : 1047650855:2379;./configure --prefix=/usr --enable-objectio &> log.conf && make &> log.make && sudo make install &> log.inst && echo OK : 1047650480:0;cd ghc-5.04.3 : 1047653520:6137;./configure --prefix=/usr &> log.conf && make &> log.make && sudo make install &> log.inst && echo OK
このコマンドは .zsh-history からそれっぽい configure を探してきてくれる。 ログを見ると、--enable-objectio を付けて困ったらしいということがわかる。 ま、それでもやっぱり試すわけだが。
~/src/ghc-6.0.1 % ./configure --prefix=/usr --enable-objectio --with-x ~/src/ghc-6.0.1 % make
大丈夫なのかな。大丈夫っぽいな。
しまった。ついうっかり ruby のコンパイルも同時に走らせてしまった。 そのわりに全然重くならないね。今時のマシンはすごいな。
あ、やっぱ objectio でしくじったよ。 調査が面倒なのでとりあえず Makefile から objectio を滅殺しておくことにする。
ところで objectioって (?!マーシャラ(イザ)?)シリアライザだと思ってたんだけど、 説明を読んだら GUI ライブラリだった。変な名前だな。
えーと、DESTDIR は使えないのかな……。無理っぽいな。 mk/build.mk で bindir libdir libexecdir を置き換えるしかないようだ。 そのセンで調べた結果、使うディレクトリは /usr/bin と /usr/lib/ghc-6.0.1 だけだった。 気にすることもなかったな。
ということは man がないってことか。 そういえば GHC は man ないな。 make install-docs はあるのか。
http://www.cse.unsw.edu.au/~chak/haskell/ghc/comm/
"GHC commentary"。 コメンタリーというより概略って感じかな。 主にデータ型の解説がされている。
■ n某 [GHC 6.2がでとります。]
「賞味期限をぶっ飛ばせ!〜イイから食っとけ〜」 http://food3.2ch.net/test/read.cgi/food/1069377238/
たまりすぎ。
とりあえずバグ潰しからってことで setup.rb 3.2.2 リリース。 えーと次は……。
なぜか StringScanner#bol? を足してみた。 どう考えても優先順位を間違えてるよな……。 簡単に終わりそうだと思ったからなんだけど、 うっかり StringScanner#concat なんて付けたら全然簡単じゃなかった。 スキャン対象文字列を破壊的に変更できるようにしたので、 実際の文字列がカレントポインタより短くなることがある。 従って範囲外をさわっていないか全メソッドをチェックしなければならない。
とりあえず tabs.rb をかたづけるかな。 えーと、ようするにテストがないのがいけないんだよ。 このまえ書いたのを流用して tabs.rb のテストを作ろう。
ああ、うっかり ruby-core にメールを書いてしまった。 メール書くのって苦手なんだよなあ。 RHG で大量に間違いが見付かっていらい、 書くもの書くもの全部間違ってるような気がして恐い。
おおっ、このタイトル久しぶり!
第二刷の見通しですか。 永遠に出ないか、出るとしても一年後とか二年後じゃないでしょうか。 このまえ (と言ってもかなり前) 編集の人に聞いたところによると、 「第二刷を出せる可能性もないわけじゃないですよ」 とか言ってたくらいですから! 可能性ゼロが前提ですか! なんて正直なっ!
ええっ!? もう GHC 6.2 出たんですか? バージョン上がるの早すぎだよー。 このペースで上げてれば、 そりゃ version 6 にもなるよなあ。
スタティックリンクがメインだから 気軽にバージョン上げられるのかなあ。 いや、単にマイナーだからかもしれん。
ちなみに GHC というのは今のとこ一番有名 (たぶん) な Haskell コンパイラです。
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20031216/1/
おお! 本当に RHG が紹介されている! しかも並んでるのが萌え CPU 本と暗号本てのがすごいな。 RHG も人気書籍の仲間入りですか? 在庫はけまくり? (ムリ)
という冗談は置いといて。 そうですねえ。RHG と言えば。
この日記では確か何度か書きましたが、 ぼくは最初 RHG にはあんまり乗り気じゃありませんでした。 だってあからさまに売れなそうですもん (まあ無道編も負けず劣らず売れなそうだったけど)。 それがどうして出版されるに至ったかと言えば、 最初に arton さんの提案があり、 んで即座に田村さんや小林さんがプッシュしてくれて、 トドメに金光さんが出版社を見付けてくれてしまったゆえですね。 RHG が出版できたのは、文字通り、 応援してくださった皆さんのおかげです。 本当に感謝しています。
で、それはともあれ正誤表はここです→ http://i.loveruby.net/ja/rhg/
ううぅ……。こ、これさえなければ手放しで喜べるのだが……。
そだ、RHG つながりで読書会の宣伝をしておこう。 えーと今回は…… 4 章だっけ? そうだ。4 章「クラスとモジュール」からです。
それとその後に RHG 読書会忘年会があるそうです。 ま、きっといつもと同じ飲み会だと思いますが、 今回は年末なので予約が必要です。 参加したい人は RHG 読書会 ML に参加メールを投げてください。
To: rhg-tokyo@ruby.quickml.com Cc: aamine@loveruby.net
で適当に自己紹介でも書いてメールを出すと登録されます。
あんまりいないと思いますが、飲み会だけでも OK ですよ。 というか素で読書会終了直前に現れる人もいたような気がしないでもない。
いま、ょゎさんの日記を見てて始めて気がついたんだけども、 小さい「ゎ」ってのがあるのね。 どういうときに使うんだろう。「トロヮ」とかかなあ?
「ゎ」で検索すると上位に「あわわゎ」という表記を発見。 そうか、萌えワード用に準備しておいたのか (真実から 10 光年くらい離れた認識)。
そういえばアイヌ語だか琉球語だかで使うというのを聞いた覚えがあるような気がしないでもない。
違った。 「変換(へんくゎん)」のような字音仮名遣いで使うらしい。 字音仮名遣いってなんだ?
ははあ。音読みの仮名遣いのことか。知らなかった。 現代では字音仮名遣いと歴史的仮名遣いが区別されない、のかな?
■ arton [確かに売れそうにもない本(しかも書くのにすごい労力が必要なのが見えている)を書けって言うのはひどい話だ。今度、言い出したやつを殴っておくから勘弁して。でも、本当にあおきさんが書いた解析本(ようするに易しくない内容のやつ)を読みたかったんだよ。]
■ arton [なんか気になったんで蛇足。上のように書いてるけど「売れそうにもない」と思っていながら勧めたわけじゃないです。すごく労力が必要だとは思っていたけど。だから殴るかわりにヨシヨシしときました。やっぱあの本は日本のコンピュータ書籍の金字塔の1つだと思うよ。]
■
あおき [偉そうに言えば、ぼくもあの本は出るべき本だったと思ってます。
まあ……それには関係なく、やっぱり売れてないわけですが (笑)]
■ のりつぐ [販売促進部「忘年会のビンゴの景品にいかが?」「クリスマスプレゼンに一冊いかが?」「年始の挨拶に一冊」「お年玉はRHGで決まり」…]
Firebird 0.7 だけど、 いきなりキーボードで文字列打つと検索してくれんのね。 知らなかった。
あ、リンクになってるとこだけか……。
がーん。検索対象は設定できるんですか。 このへんが公式かな。
http://www.mozilla.org/projects/ui/accessibility/typeaheadfind.html
適当に抜粋 and 訳
// Find As You Type を使うか user_pref("accessibility.typeaheadfind", true); // true ならキーを打つと即座に検索スタート。 // false なら / (find text) か ' (find links) が必要 user_pref("accessibility.typeaheadfind.autostart", true); // true ならリンクだけ探す // false ならテキストも探す user_pref("accessibility.typeaheadfind.linksonly", true); // true なら、その文字列で始まるリンクだけを探す user_pref("accessibility.typeaheadfind.startlinksonly", false); // これ以上時間がかかったらあきらめる (単位:ミリ秒) user_pref("accessibility.typeaheadfind.timeout", 3000);
URL 欄に about:config って打つとその場で設定できるんだな。 これも知らなかった…… (つい直接ファイルを編集してしまう)。
ついでに about:config を眺めていたら、 長年探し求めていたパラメータを発見した。 Mozilla はファイルをダウンロードするときにいったん必ず /tmp に落とすけど、 これを変えたくてしかたがなかったんだよー。 というのも、うちのメインマシンの /tmp は tmpfs で 64MB しかないのだ。 だから 64MB 以上のファイルを落とそうとすると失敗してしまう。
で、そのパラメータがこれ→ applications.tmp_dir
http://sugachan.dip.jp/img/src/20031218180712.jpg ( 俺アーカイブス 経由)
ガラスの仮面 (の最初のほう) で月影先生が似たようなことやってたな。
■ なひ [設定できまする > リンクだけか]
「バカが征く」より。
> せやなかったらバージョン番号売ったらええねん。 > > Perl 味の素とか。Perl 味の素.アミノバイタルとか。
やばい、ウケた。これはいい!
コードネームも売れそうですね。 「Ruby 2 のコードネームは『永谷園』です!」とか。
どういうコードネームが高く売れるだろうか。
おお! Ruby にうってつ (ry
第一点は、リリース時期をあらかじめ開発者が宣言し、 それを元に権利を売るということにすればよいだろう。 のびたらめっけんもんだ。
第二点・第三点は 「リリース後は絶対にコードネームを使わない」という決まりを徹底できれば緩和できる。 少なくとも雑誌や商業ウェブサイトでは使わせないようにすべきだろう。 現実的には、最も注目を集めるのはリリース時なので、 「リリースのアナウンスを最後にコードネームは捨てる」がよいかもしれない。
第四点は命名権元締めのような存在を仮定すれば解決できるだろう。
第五点は……がんばってリリースする。
どれくらいで売ればいいだろう。 Linux クラスなら運がよければ全国クラスの新聞にも載るから、 その広告料くらいは見てもよかろう。 いくらくらいなんだろうな、新聞。
日経の広告料金表が落ちてた。
http://www.nikkei.co.jp/ad/rateks/
んーと、日経全国版の 1/8 が 2 段で 57 万か。 んじゃ、有名ソフトウェアで 1 コードネーム 50 万くらいかな……。
ていうかこんなこと真面目に考えるなよ。
まだやるよこの男は。
ライバル社が命名してしまうということはないのだろうか。 例えば Redhat SCO とか。Redhat DAME (ダメ) とか。 DAME はペーパーカンパニーだ。
やっぱりそういうのは地道にチェックしてお断わりするんだろうな。
さらに「バカが征く」より
> あとな、アドバイザリー契約っちゅーもんがあるやろ。プロ野球選手なんか道 > 具がタダになる上、ごっつお金ももらえるわけや。これを逃がすのはアホやで。 > > Logictechやな。ここなら問題少ないやろ。L.Wallモデルのキーボードとか作っ > たらバカ売れ間違いなしやで。
ソレダ!
合体するんですよ、合体。 有名プログラマが自分の名前をコードネームとして売る。 金はあるが知名度はないプログラムの作者が 有名プログラマから名前の使用権を買うわけですな。
……なんか「共食い」とか「二兎を追うものは一兎を得ず」 って言葉を思い出して鬱。
http://tabesugi.net/memo/2003/b1.html#101129
へー、Luaって元々は設定ファイル用言語なのかー。 言語仕様だけ見てたいしたことないなーと思ってたけど、 設定ファイル用と言われてみるとわりといいかも。
ruby 1.8.1 出ましたね。お疲れさまです。
なんとなく家でもミラーしてみました。 回線はメチャ遅いけど、ダウンロードが集中する ruby-lang.org からみんなで落とすよりはマシだろう。
一部プラットフォームで多少問題が残っているとは言え、 今回はかなり安定してるんじゃないかな。 まだ 1.6 な人はこの機会にぜひぜひ。
(早く 1.8 のライブラリとメソッドを使いたくてしかたないらしい)
これでようやく 1.9 が始まるよ!
64bit Windows に ruby をポートした場合、 win32 ディレクトリはどうなるんだろう、と思ってみた。
ruby/object.c とか ruby/string.c にまで RDoc が入ってきてカナーリうざい。 悔しいので「るどっく」と読んでやる! やーいやーい!
わざわざ面倒なことを始めるということは、けっこう忙しいらしい。
[ライブラリ/アプリケーションの追加]
む、rinda って誰が担当? ああ、咳さんか。 とりあえずファイルに記名を切に希望します > 咳さん
[メソッドの追加]
組み込みライブラリ
標準添付ライブラリ (内部っぽいメソッドとか、よくわからんメソッドは省略)
[変更]
でも、特に影響がありそうなのだけ挙げると、
どう変わったのかよくわからん。 ま、もともと誰も全体を把握してないから問題なかろう (マテ)
[修正]
丁稚な日々参照。
[その他、めだった変化]
diff とると RDoc ばっか大量に出てきてウザー
ちょっと前から次の本を書いてます。 今回は高橋 (征) さんとゆうぞうさんと合同で…… というか、お二人が書いてるとこにぼくが追加で入りました。 『たのしいRuby』の続きみたいな感じで、Ruby のクックブックを書いてます。
題名はいまんとこ『おいしいRuby (仮称)』ということになってます。 ぼくは『Ruby で 194!』 (レシピが 194 個) が断然いいと推薦したのですが、あっさり蹴られました。くそう。 もっともレシピは 194 どころか 275 あるんですけどね。 『たのしい Ruby』サイズで入るのかなあ。
目次はいまのところこんな感じです。キャプションも未定。
来春発売予定。たぶん。
ひらめいた!
ということで Tru64UNIX がインストールできることになった。
ところで全然関係ないが Google で "alpha station" を検索すると 予想される単語:"alphastation" と言われたりする。
対象マシンは digital AlphaStation 500 5/400。 シリアルコンソールを使ってインストールする。
基礎データ
Digital AlphaStation 500/400 Console V6.9-5 built on Oct 10 1998 at 14:22:57 >>>show config Firmware SRM Console: V6.9-5 ARC Console: 4.57 PALcode: VMS PALcode V1.20-0, OSF PALcode V1.22-0 SROM Version: V2.05 Processor DECchip (tm) 21164A-1 Pass 1 400 MHz 96 KBytes SCache 2 MB BCache CIA ASIC Pass 3 MEMORY Memory Size = 256Mb Bank Size/Sets Base Addr Speed ------ ---------- --------- ----- 00 256Mb/2 000000000 Fast BCache Size = 2Mb Tested Memory = 33Mbytes PCI Bus Bus 00 Slot 06: DECchip 21040 Network Controller ewa0.0.0.6.0 00-00-F8-22-65-EB Bus 00 Slot 09: ISP1020 Scsi Controller pka0.7.0.9.0 SCSI Bus ID 7 dka100.1.0.9.0 RZ2DC-KA dka400.4.0.9.0 RRD45 Bus 00 Slot 10: Intel 8275EB PCI to Eisa Bridge >>>show device dka100.1.0.9.0 DKA100 RZ2DC-KA 5520 dka400.4.0.9.0 DKA400 RRD45 0436 dva0.0.0.0.1 DVA0 ewa0.0.0.6.0 EWA0 00-00-F8-22-65-EB pka0.7.0.9.0 PKA0 SCSI Bus ID 7 5.57
まず念のためにファームウェアの変数を設定しておく。
>>>set auto_action halt >>>set boot_osflags ""
特に boot_osflags はちゃんと空にしておかないとインストーラが止まる。
では、Operating System CD-ROM vol.1 (1 しかないけど) を入れて そこからブートする。デバイス名は show device で確かめておくこと。
>>>boot dka400
いろいろ聞いてきた。
いつもは最小 or カスタムでインストールするんだけど、 ディスクがちょっと大きめ (8GB) なので強気に出てみた。
時間かかるなあ。
うわっ! Netscape の 4.76 とか入れてるよ! またそんなバグバグなバージョンを……。 せっかくだから CSS バグを体験してみるか?
Java VM を入れてくれるのはいいが、1.3.1 って古いなあ。
Perl 5.8? こいつだけずいぶん新しいような。
I/O error (errno 5) for block(0x2230, 0x2230) on device 255,1
なんか気になるメッセージが出ている。 が、何事もなく終わったので大丈夫っぽい。
root でログインしたら何かメッセージが出てきた。 あーもう、いいかげんメニューはやめてくれないかあ。 シリアル接続だと遅くて遅くて……。
んーと、ライセンスを入力しろと言ってるな。めんどくせえ。 Solaris は何もしなくても全機能が使えたのにー。
む、(ライセンスの) checksum が違うと言われとる。 ライセンスシートに書いてある通りに入力してるんだけどな。
うう、UNIX-WORKSTATION ライセンスがないと言われて 一般ユーザでログインできない。なんだそれは。
/usr/sbin/setup のメニューで出てくる Custom Setup で OSF-BASE OSF-USR OSF-SRV OSF-DEV のライセンスをロードしたら うまくいった。やれやれ。やっぱ Linux にしても NetBSD にしても、 こういうのがないと気楽でいいなあ。 論理的に正しいかどうかだけ考えてりゃいいんだから。
おっ、ホームディレクトリが /usr/users/aamine だ。 でも /home も一応あるのな。
デフォルトシェルは当然というか何と言うか /bin/sh だ。 さすがに tcsh とか zsh は入ってないので、とりあえず ksh にしておこう。
何気なく help と叩いたらなんかメッセージが!
$ help The commands: man -k keyword lists commands relevant to a keyword man command prints out the manual pages for a command are helpful; other basic commands are: cat - concatenates files (and just prints them out) vi - text editor finger - user information lookup program ls - lists contents of directory mail - sends and receives mail passwd - changes login password sccshelp - views information on the Source Code Control System tset - sets terminal modes who - who is on the system write - writes to another user You could find programs about mail by the command: man -k mail and print out the man command documentation via: man mail You can log out by typing "exit". $ which help /bin/help
へー。
ちなみにデフォルトでプロセスはこんなもん。 フルインストールにしたせいかすごい数になってる。
$ ps -ef UID PID PPID C STIME TTY TIME CMD root 0 0 0.0 23:01:34 ?? 0:05.60 [kernel idle] root 1 0 0.0 23:01:34 ?? 0:00.25 /sbin/init -a root 23 1 0.0 23:01:37 ?? 0:01.67 vold -k -m boot root 29 1 0.0 23:01:39 ?? 0:00.52 /sbin/kloadsrv root 31 1 0.0 23:01:40 ?? 0:00.01 /sbin/hotswapd root 123 1 0.0 23:01:51 ?? 0:00.05 /usr/sbin/esmd root 134 1 0.0 23:01:52 ?? 0:00.01 /sbin/update root 259 1 0.0 23:01:56 ?? 0:00.66 /usr/sbin/evmd root 299 259 0.0 23:01:57 ?? 0:00.60 /usr/sbin/evmlogger - root 300 259 0.0 23:01:57 ?? 0:00.06 /usr/sbin/evmchmgr -l root 427 1 0.0 23:02:03 ?? 0:00.10 /usr/sbin/syslogd -e root 431 1 0.0 23:02:03 ?? 0:00.02 /usr/sbin/binlogd root 493 1 0.0 23:02:04 ?? 0:00.02 /usr/sbin/portmap root 653 1 0.0 23:02:09 ?? 0:00.12 /usr/sbin/sshd2 root 855 1 0.0 23:02:17 ?? 0:00.02 /usr/sbin/cpqthresh_m root 860 1 0.0 23:02:17 ?? 0:01.42 /usr/sbin/insightd root 885 1 0.0 23:02:24 ?? 0:01.06 /usr/sbin/config_hmmo root 887 1 0.0 23:02:24 ?? 0:00.77 /usr/sbin/advfsd root 890 1 0.0 23:02:26 ?? 0:00.45 /usr/sbin/sysman_hmmo root 912 1 0.0 23:02:30 ?? 0:00.02 /usr/sbin/cron root 936 1 0.0 23:02:31 ?? 0:00.03 /usr/sbin/volnotify - root 967 1 0.0 23:02:32 ?? 0:00.02 /usr/sbin/volwatch -m root 968 967 0.0 23:02:32 ?? 0:00.03 volnotify -p -f -w 15 root 982 1 0.0 23:02:33 ?? 0:00.02 /usr/lbin/lpd root 1127 1 0.0 23:02:35 ?? 0:00.01 /usr/sbin/utxd root 1143 1 0.0 23:02:36 ?? 0:00.01 /usr/dt/bin/dtlogin - root 1196 1 0.0 23:02:39 ?? 0:01.49 /usr/opt/java131/bin/ root 1231 1 0.0 23:02:43 ?? 0:02.43 /usr/sbin/smsd -d root 2096 1 0.0 23:38:14 ?? 0:00.01 /usr/sbin/mountd -i root 2098 1 0.0 23:38:14 ?? 0:00.01 /usr/sbin/nfsd -t8 -u root 2101 1 0.0 23:38:14 ?? 0:00.00 /usr/sbin/nfsiod 7 root 2104 1 0.0 23:38:14 ?? 0:00.02 /usr/sbin/rpc.statd root 2106 1 0.0 23:38:14 ?? 0:00.03 /usr/sbin/rpc.lockd root 2169 1 0.0 23:38:16 ?? 0:00.04 /usr/sbin/snmpd root 2171 1 0.2 23:38:16 ?? 0:00.05 sendmail: accept -bd root 2179 1 0.0 23:38:18 ?? 0:00.00 /usr/sbin/svrSystem_m root 2180 1 0.0 23:38:18 ?? 0:00.01 /usr/sbin/svrMgt_mib root 2181 1 0.0 23:38:18 ?? 0:00.08 /usr/sbin/pmgrd root 2182 1 0.0 23:38:18 ?? 0:00.03 /usr/sbin/os_mibs root 2211 1 0.0 23:38:18 ?? 0:00.00 /usr/sbin/inetd root 2212 2211 0.0 23:38:18 ?? 0:00.03 -child (inetd) root 2214 1 0.0 23:38:19 ?? 0:00.09 /usr/sbin/cpq_mibs root 2284 1 0.0 23:38:33 ?? 0:00.03 /usr/sbin/xntpd -g -c root 2513 653 0.3 23:56:15 ?? 0:00.27 /usr/sbin/sshd2 root 2541 1 0.0 00:08:03 console 0:00.02 /usr/sbin/getty conso aamine 2516 2513 0.1 23:56:19 pts/0 0:00.13 /usr/bin/ksh root 2545 2516 0.0 00:08:17 pts/0 0:00.03 ps -ef
これまで見た中では断突で最大だ。
メモリと HDD はどうなってるんだ。
$ free /usr/bin/ksh: free: not found $ vmstat Virtual Memory Statistics: (pagesize = 8192) procs memory pages intr cpu r w u act free wire fault cow zero react pin pout in sy cs us sy id 3 136 37 13K 12K 3793 195K 39K 59K 0 37K 0 34 212 280 1 1 98 $ df Filesystem 512-blocks Used Available Capacity Mounted on root_domain#root 786432 207610 566656 27% / /proc 0 0 0 100% /proc usr_domain#usr 4300800 1857562 2372208 44% /usr usr_domain#var 4300800 29592 2372208 2% /var $ df -m df: illegal option -- m usage: df [-hPeikn] [-t fstype] [file | file_system ...] $ df -h Filesystem Size Used Available Capacity Mounted on root_domain#root 384M 101M 277M 27% / /proc 0 0 0 100% /proc usr_domain#usr 2100M 907M 1158M 44% /usr usr_domain#var 2100M 14M 1158M 2% /var
おー、なんか df が見たことのないフォーマットになっている。
vmstat の見かたがよくわからん。 1.3MB ってことはないだろうから、130MB 使ってるのかな? ずいぶんでかいな。
あ、/proc がある。そりゃあるか。
uname
$ uname -a OSF1 as500.loveruby.net V5.1 2650 alpha
ぐわー、補完、補完がないと生きていけねえ! えーと、ksh の補完キーは…… set -o emacs してから ESC ESC か。 めんどくさいなあ。しかも候補のリストを表示するのが別のキーで ESC = か。 さっさと zsh 入れよう。
$ dmesg /usr/bin/ksh: dmesg: not found
え、ないの?
vi のバージョン
Revision: 4.3.23.2 $ $Date: 1996/07/25 12:35:46 $
/usr/ucb はっけん。
げ、Mozilla もあんのか?
$ ls /usr/opt FSF/ SYSCHECK126/ java131/ obsolete/ ultrix/ OpenGL/ alt/ netscape6/ s5/
いろいろあるようだ。
$ cc -V Compaq C V6.5-011 on Compaq Tru64 UNIX V5.1B (Rev. 2650) Compiler Driver V6.5-003 (sys) cc Driver
おおおおお、ccc ガっ! ccc が入ってる! 偉いっっっ!
$ cat hello.c #include <stdio.h> int main(int argc, char **argv) { puts("Hello, World!"); exit(0); } $ cc -ohello hello.c ld: -ohello: Unknown flag ld: Usage: ld [options] file [...] $ cc -o hello hello.c $ ls hello* hello.c $ ./hello Hello, World!
ところで、最近の more って逆スクロールできんのね。知らなかった。
ファイルツリーがごちゃごちゃでわけわからん。
$ ls -s /genvmunix 12480 /genvmunix*
だめだ、時間切れ。続きはまたこんどにしよう。
■ おやくそく [(仮称)もタイトルの一部でしょうか?]
■ とくめい [ruby に 474! で 474個。2474 で(略)。]
■
(う) [全然知らないで書くと、13Kってのは13K pages、つまり13K * 8192 = 104MB だったりしませんかね。
... あんまりかわらん。]
■
あおき [あ、そうか、ページ数かあ。なるほど。
言われてみると確かにそれっぽいというかそれ以外ない感じですね。
(鈍いなあ俺……)。vmstat(1) で確認しました。
Virtual memory information:
act Total number of pages on the active list, the inactive list (pages that
are allocated but are most likely to be used for paging), and UBC least
recently used (LRU) list.
free
Total number of pages that are clean and available for use.
wire
Total number of pages that are currently in use and cannot be used for
paging (not a real list).
ということで、ページ数だそうです。]
今日は RHG 読書会です。
……ぉゃ? 何時からだっけ。
まあそれはともあれ、 ちょっとでも class.c の予習をしていかないとなあ。 変化しすぎててさっぱりだ。
Richard Kilmer から 「ここんとこ CVS レポジトリ更新されてないけど Ripper どうよ?」 というメールが来た。いや、どうと聞かれても。
はあ、どうしようっかなあ。 もう実装の難しいところは終わったし、 あとは任せちゃおうかなあ。
追記: 「一月になれば開発再開できると思うけど、 待てないなら引き継いで作ってくれると嬉しいなあ」ってメールを出してみた。
そういえば先日の RHG 読書会で 「tDiaryで未来の日付にツッコミを入れるとどうなる?」 という質問がありましたが、いまテストしたところ
2003-12-31の日記はありません。
と、いうことになりました。 これで安心して眠れるねっ。
ぎゃー、Matz 日記にまで tdiarygrep が入ってるよ。
ううむ、実は tdiarygrep には需要があるんだろうか。 考えてみると、長所はこんなところか。
一方、以下のような短所がある。
いやー、後者は今気付きました。これは直すべきだろう。
あと、tdiarygrep を入れた人が一様にこの日記にリンクを張っているのを見て、 これはとっととページを用意すべきなんじゃないか、と思った。
http://ponx.s5.xrea.com/bibo/20031229.html#p07
うーん、UTF-8 ……。対応すべきなんだろうか。 あんまり真面目にロケール対応したくないな。 自分が使うだけだったら alias なりシェル関数なり使えば済むし、 自動化しすぎると部品として使いづらそうだ。
それに UTF-8 が入ると iconv がーとか uconv が入ってたらーとか、 めんどくさくてしかたない。 どのプラットフォームでも問題なく iconv が使えるか、 あるいは uconv が標準添付になったら考えてもいい。
/ % ls /var/cluster/members aamine@as500.loveruby.net member member0 / % ls /var/cluster/members/{memb} aamine@as500.loveruby.net X11 advfs dt i18n ipsec log preserve run shlib subsys yp adm agentx evm im kdbx news rsvp rwho spool tmp
とか
/ % ls /proc aamine@as500.loveruby.net 00000 00123 00438 00533 00751 00770 00924 00974 01058 01167 00001 00134 00442 00536 00755 00787 00927 01010 01111 14971 00023 00259 00526 00538 00762 00896 00937 01011 01138 15019 00029 00299 00528 00695 00763 00905 00938 01023 01140 15020 00031 00300 00530 00718 00768 00922 00949 01042 01166 15142 / % ls /proc/1 aamine@as500.loveruby.net /proc/1
と、いうように、Tru64UNIX のファイルシステムはなかなか謎が多い。 どこに何がはさまっているのやら。
Richard Kilmer がこころよく引き受けてくれたので、 Ripper は任せることにした。やたーっ!
"Code Readings" の和訳が出るのか。 原書はウィッシュリストに入れたまま放置されているなあ。 和訳が出たら RHG 読書会で読んでみたりする?
いや、やっぱり出費が必要なものはつらいか。ボツ。
しかし、一周目はたった七回で終わったんだね。 二週目は五回終わってもまだ『クラスとモジュール』までしか行ってない。 不思議なもんだ。
いろいろ入れた。
これでようやく ruby がコンパイルできる。
# とりあえずビルド ~/obj/ruby % ~/src/ruby/configure \ CFLAGS="-O2 -msg_disable ptrmismatch1,extrasemi" \ --program-suffix=-1.9 \ --with-lookup-order-hack=INET \ &> log.conf && make &> log.make && make test test succeeded ~/obj/ruby % sudo make install aamine@as500.loveruby.net ~/obj/ruby % ruby --version aamine@as500.loveruby.net ruby 1.9.0 (2003-12-31) [alphaev56-osf5.1] # ダイナミックロードのテスト ~ % ls /usr/local/lib/ruby/1.9/alphaev56-osf5.1/nkf.so /usr/local/lib/ruby/1.9/alphaev56-osf5.1/nkf.so ~ % LD_BIND_NOW=true ruby -rnkf -e 'p NKF' aamine@as500.loveruby.net NKF # test suite ~/src/ruby/test % ruby runner.rb aamine@as500.loveruby.net Loaded suite . Started ...................................................................E /usr/local/lib/ruby/1.9/drb/drb.rb:560:in `load': too large packet 12884901888 (DRb::DRbConnError) from /usr/local/lib/ruby/1.9/drb/drb.rb:610:in `recv_reply' from /usr/local/lib/ruby/1.9/drb/drb.rb:864:in `recv_reply' from /usr/local/lib/ruby/1.9/drb/drb.rb:1090:in `send_message' from /usr/local/lib/ruby/1.9/drb/drb.rb:1015:in `method_missing' from /usr/local/lib/ruby/1.9/drb/drb.rb:1014:in `open' from /usr/local/lib/ruby/1.9/drb/drb.rb:1014:in `method_missing' from /usr/local/lib/ruby/1.9/drb/extserv.rb:16:in `initialize' from /usr/users/aamine/src/ruby/test/drb/ut_array.rb:12:in `new' from /usr/users/aamine/src/ruby/test/drb/ut_array.rb:12
どっかで見たようなエラーがキター! なんだろこれ。また pack がらみかね。
drb を外して実行すると wsdl でも Failure が出たが、 これは i686-linux でも出てたので Alpha/Tru64 特有というわけではないようだ。 ちょっと待ってみよう。
"$@" の挙動ではまった。 Tru64UNIX の /bin/sh だと 引数がないときに空文字列が入ってしまう。
/usr/bin/posix/sh だと期待通り引数なしになった。 でもパスが違うと shebang で困るよな。やだなあ。
うーん、空白を捨てて $* にするしかないのかな。 いやそれは cvs ci -m '....' とかでドツボにはまりそうな予感がする。 やっぱりだめだ。
うううう。
あ。『入門UNIXシェルプログラミング』に解があった。
${@+"$@"}
とすれば確実にうまくいくらしい。をを、知らんかった。 よし、自作シェルスクリプトは全部これにしよう。
どうして年は越すんだろうねえ。 「くぐる」とか「もぐる」とか「飛び越える」というメソッドは定義されていないのか。
ああ、こんなことを書いている間に、 いまにも 2003 年が終わりそうになってる。 どうしたものやら。
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
■ なかだ [やっぱりmethod_defined?って使われてないんだなぁ。]
■ あおき [知りませんでした……。まだ基本ライブラリに
知らないメソッドがあったなんて一生の不覚だ。]
■ あおき [とか言いつつも実はまだまだある悪寒]
■ なかだ [test_cond(TestMonitor)のFailureは、スレッドの実行順序をsleepでコントロールしてるからで、実行時のタイミングによってたまに出ます。]
■ あおき [なるほど。これも既知でしたか。
じゃあ本当に問題になりそうなやつはないんですね。]