history

青木日記 RSS

<前月 | 最新 | 次月>

2003-12-01

stat(朝食)

今日も食当たりしなくて済んだことを幸運の神様に感謝します。 この調子で年末ジャンボも当ててください。なーむー。

南無は神様じゃありませんが、日本の神様はルーズなのでたぶん大丈夫でしょう。

今日の朝食

  • 米 (期限内)
  • 味噌 (期限内)
  • 大根 (詳細不明なれどもやや危険)
  • 豆腐 (賞味期限 + 1 日)
  • 卵 (賞味期限 + 1 日)
  • 焼肉 (肉: 賞味期限 + 5 日)

すみません、やっぱり年末ジャンボの前に今日を生きのびさせてください。

tdiarytimes 改

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 を忘れずに付けましょう。

tdiarygrep

ついでに tdiary-grep のリンクも置いとこ。

詳細はソースコードを参照。

fileutils

たまってるバグレポートだけ片付けちまおう。 まずは fileutils だな。fileutils には二つ to do がある。

  • Pathname を src/dest に使えるようにする

これは [ruby-core:01795] で言われたやつ。 RHG 読書会で akr さんに方針を相談したところ 「Pathnameなんか使うなって言えば?」と言われたりしたわけですが、 現実的なとこで to_str だけ付けとくことにします。

  • FreeBSD と OpenBSD でテストが失敗する

うーむ、見事にチェックした環境だけすりぬけたか……。 反省して今日は 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 は一個も問題出なかったからいいや。

tdiarytimesをいきなり賑やかにする裏技

http://mput.dip.jp/mput/?date=20031201

tdiarytimesのバーがいきなり入っているのは、 td2 の Last-Modified: を集めて先にログを作っといたからです。 tDiary の Last-Modified: がいつ更新されるのか調べてないのですが、 何もないよりたくさん線が入ってたほうがおもしろい…… というかデータがないとデバッグできないので適当にかきあつめたというのが正解。

本日のツッコミ (全5件) [ツッコミを入れる]

なかだ [やっぱりmethod_defined?って使われてないんだなぁ。]

あおき [知りませんでした……。まだ基本ライブラリに
知らないメソッドがあったなんて一生の不覚だ。]

あおき [とか言いつつも実はまだまだある悪寒]

なかだ [test_cond(TestMonitor)のFailureは、スレッドの実行順序をsleepでコントロールしてるからで、実行時のタイミングによってたまに出ます。]

あおき [なるほど。これも既知でしたか。
じゃあ本当に問題になりそうなやつはないんですね。]


2003-12-02

ruby-dev summary

不思議なことに、ガリガリ書きはじめてしばらくすると楽しくなる。 そこにいくまでが嫌なんだよなー。

ところで、dev summary を書いていると 「前回の summary ってどこまで書いてたんだろう」と思うことが多いのだが、 こういうときこそ ruby-dev summary index を見ればよいのだということに気付いた。

自分で作っておきながらこんなことに気付かないとは……。

ruby-dev summary (2)

今回は net/http がちょっとからんでるのがあるので つい net/http をなおしたくなってしまうのだが それをやっていると本当に終わらなくなるので気をつけよう。

と言いつつドキュメントだけ追加しているあたりが卑怯である


2003-12-04

tdiarygrep

うーむ、tdiary grep は単なる一発ギャグのつもりだったんだけど、 使う人がいるとは思わんかった。せっかくなのでちょっと修正しておきました。

  • rufein さんの変更を参考にして、 「ああ Ruby 1.6 には File.read もないんだなあ」 と感慨にふけりつつ File.read を追加
  • CGI#header には常に {String=>String} を渡すように変更
  • こっそりと method_defined? を使うようにした

URL: http://i.loveruby.net/archive/d/tdiary-grep.rb.txt

tdiarygrep (2)

先日は設定について一切書かなかったので すこしヒントを書いておきます。

  • プラグインではありません。単独の CGI として動作します。
  • tDiary の @data_path は tdiary.conf から正規表現で取ってます。 その過程で tdiary.conf と tdiarygrep.rb が同じディレクトリにあると想定しています。 従って tdiarygrep.rb は tdiary.conf と同じディレクトリに置かなければなりません。
  • 逆に言うと、好きなディレクトリに置きたければ @data_path をハードコーディングすればよいのです。
  • 必要なら #! を変えましょう。
  • HTML はハードコーディングしてあるので必要なら変えましょう。
  • 無意識のうちに tDiary スタイル (それも自分が使ってるパターンのみ) を仮定してます。 そのへんは各自アドホックに対処されたし。
  • そういえば html_anchor (YYYYMMDD.html形式) も仮定しているな。
  • もちろん Ruby 1.6 で動作確認なんかしてないよ! と言うのは嘘で、いちおう 1.6.8 で一回だけ動かしました。 しかしその後に変更したら結局確認してないのと同じだわね。

いずれにしろちょっとは手を入れたほうがいいでしょうね。 そのへんが念頭にあったゆえ「詳細はソースコードを参照」なのです。

stat(朝食)

  • 米 (期限内)
  • 味噌 (期限内)
  • 大根 (危険領域)
  • 玉葱 (危険領域)
  • じゃがいも (茅が出てる)
  • 卵 (賞味期限 +4日)

おかしい、最初の目論見と完全に逆方向へ爆進している。

tdiarygrep (3)

いちいち /archive/d に置くのも面倒なんで、 CVS レポジトリ公開しときます。

% cvs -d :pserver:anonymous@cvs.loveruby.net:/src co tdiarytools

tdiarygrep と tdiarytimes 改と、その他あやしげなツール入り。

本日のツッコミ (全4件) [ツッコミを入れる]

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 [ちなみに危険な大根っていうのはどんな塩梅なんでしょ? うちのもうすぐ一月たつ
やつは全然問題ない様子ですが.切口はさすがに萎びるけど.]


2003-12-07

TD4

11/10 の日記にツッコミがあったので引用。

半田付け、セオリー的には、背の低いパーツから。裏返して机に
おくと、全部平べったく基板に押し付けられて高さがそろうから。
 
横置きの抵抗、ICソケット、コンデンサ、縦置きの抵抗、トラン
ジスタ類、コネクタ類の順。
 
友達がこのページ参考に組み立てようとしてるらしい。ばんがれー

このページを参考に……。それはまた難儀な。

しかしここはバカ正直に、 御期待にお応えして続きを書いてみようじゃないか!

TD4制作記 #4.1 クロックジェネレータとリセット回路

(注: この制作記はリアルタイムではありません。少しずらしてます。)

TD4 の製作は意外にも順調に進みます。 手動クロックができたので自動クロック (1Hz/10Hz) とリセット回路です。

何はともあれまずは現物を見てください。

IC の位置間違いが悲劇を生んだ表面

部品が実装面で立体交差してます。ある意味凄いです。 しかしもっと凄いのが裏面。

パトラッシュ、ぼくはもうだめだよな裏面

この調子で CPU とか RAM の配線ができるんだろうか? ちなみに黄色とオレンジの線がクロック信号とリセット信号です。

こんな感じで配線はかなり難航しましたが、 作業自体はひたすらハンダ付け→確認、 の繰り返しなので難易度は高くありません。 ハンダ初心者でもここまでは問題なく実装できると感じました。

そうだ、クロックジェネレータを作りはじめたあたりで 回路図の拡大コピーを使うようにしました。 本にのってるやつだと見づらいですし、 いちいちページをめくるのは面倒ですから。

TD4制作記 #4.2 動作確認

ここまで作ると初めて動作確認ができます (IC の回路を全部使わないと動かないから)。 まずは丁寧に配線チェック……しようかとも思ったんですが、 配線したらすぐにチェックしてきたのでかっとばします。

そしたら IC を刺さずに通電。大丈夫そうです。

次に IC を刺して通電。 部品が破裂したりはしてないので、大丈夫そうです。 本に書いてある通りにテスタで電圧をチェックしていきましょう。

最初はいきなりマイナスの電圧が出て何事かと思ったんですが、 思いきりテスタの使いかたを間違っていました。 +を 5V につないで、−のリードを測りたいところに当ててたんです。 −を GND にあてて、+を測りたいところに当てなきゃいけないのね。 本気であせりました。

あと、リセット回路の出力をテスタで測ると 3.3V と出たんですが、 これは p.287 にある通りテスタの内部抵抗の影響で見かけだけ 下がっているようです。

さて、計測した値は大丈夫そうなんですが、 テスタで測るだけではわかりにくいので、 LED も付けてみました。

わかりにくいと思いますが、右下のほうに緑色の LED が二つ出てます。 上がリセット信号で下がクロック信号です。 どうつなげたものかよくわからなかったのですが、 「クロック回路───LED───GND」のようにつなげています (この LED は最初から抵抗が入っているらしく、いきなりつなげば光る)。

リセット信号は通常 H (5V) なので、最初に少しだけ消えててあとは常時点灯します。 クロック信号は、手動クロックならボタンを押したときだけ点灯します。 1Hz の自動クロックなら 1 秒ごとに点いたり消えたりします。 いきなり無事に動いてしまいました。

TD4制作記 #4.3 その他

うねうね配線では苦労しましたが、 そのおかげで配線スキルはレベルアップしました。 もう一回やったらもっとすっきり配線できると思います (やらんけど)。

例えば写真の手前側の配線なんかは浮かす必要はないのに なぜか浮いてしまってます。これはよろしくありません。 こうなってしまった原因は、 「線は穴にさしてからハンダ付けするに違いない」 と思ってしまったことです。穴に刺してしまうと、 リード線が固くて曲がらないのでどうしても基板から浮いてしまうわけです。 もっとぴったり基板にはりつけて配線すればよかった。

tdiarygrep

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 使ったのと、テーマあり・なしのテンプレートを両方入れたのが原因かな。 その代わり、見ための変更はテンプレートをいじるだけで全部できるようになったはず。

  • 例外処理を厳しくした

てきとーに例外を捕まえていたのをやめて、 予想外の例外は全てバグとみなすことにしました。

stat(朝食)

  • 米 (期限内)
  • 味噌 (期限内)
  • たまねぎ (たぶん大丈夫)
  • ちくわ (賞味期限 + 6 日)
  • とんかつ (出来合いゆえ問題なしと思うのは甘い、買ったのが昨日なので賞味期限 + 1)

こないだの大根は切ったのを冷蔵庫にしばらく放置してたので 全面茶色になってました。なんか手触りもふにょふにょしてたし……。 でも一ヶ月はたってないと思います。きっと。

本日のツッコミ (全6件) [ツッコミを入れる]

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秒ぐらいで、
カップラーメンもおいしくできそう。いいなぁ・・・
やはり製品によって誤差にある程度の幅があるようですね。
お仕事でお忙しいところを本当にありがとうございました。
制作の続きを期待してます!]


2003-12-10

tDiary / @referer_table

tDiary の @referer_table のメンテって自動化できないかなあ。

とりあえず title は取れそうじゃん。 あとはどう日記とか Wiki を判別して日付部分を抜き出すかだ。

うーん。やっぱ完全自動は無理か。 なんかのヒントを与えてやればいいのかなあ……。

stat(昼飯)

間をスパゲッティでつないで、ちゃんとした昼飯はいまから作ろう (15:00)。

材料

  • 味噌
  • もやし
  • さば

今日は買い物したばかりだから大丈夫なのだ。 問題は余りものが蓄積しはじめる四・五日後だ。

とか言いつつ賞味期限 + 7 日の牛乳を飲む。 大丈夫! 温めれば大丈夫!

tDiary / @referer_table (2)

おー、なるほど。zunda さんありがとうございます。 disp_referer2 の CGI 設定を使えばよかったんですね。 そうか、意地で tdiary.conf 直書き設定をしていたのが敗因か……。

と思ったのですが、表示してみたらえらい大量のURLが出てきて 泣きそうになったのであきらめました。

とりあえず外部ツールを使うセンで何か考えてみよう。

本日のツッコミ (全4件) [ツッコミを入れる]

なひ [青木さん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かを想像しながらほんのちょっとだけ自動化してあります。タイトルも取ってこられるようにしようかなぁ…。]


2003-12-11

fileutils.rb / mkdir_p (1)

[ruby-talk:87730] race condition in makedirs

makepath では複数のディレクトリを親から順番に作っていく。 このとき、ディレクトリかどうかチェックしてから mkdir(2) すると別プロセスがすでに作っている場合があるからまずい、 という指摘があった。 名指しされたのは ftools だけど、 fileutils も全く同じ問題がある。

そこで、そこらへんに転がっていた mkinstalldirs と GNU mkdir のソースコードを見て挙動を確認した。 それによると、まず mkdir してみて、 失敗したときにそれがディレクトリかどうかチェックしているようだ。

よって、fileutils もこの方式でいくことにした。

Ruby / SOAP 関連

で、soap/netHttpClient.rb を見てみた。

とりあえずソースコードだけ見ると、 netHttpClient.rb の warning は例の HTTP#get の返り値変更のやつだな。 これは 1.8 限定なら簡単になおせる。 しかしテストせずにいじるのは恐いので、 まず SOAP 環境を作らないとな。

他に出てるのは net/https か。 これはいきなりメソッドを上書きしているのがよくないので、 remove_method してから定義すれば直るな。 ていうか net/https は net/http にマージしちゃってもいいんじゃなかろうか? しかしテストせずにいじるのは恐いので、 まず https な環境を作らないとな。

とか言ってるあいだに深みにはまっていくのが定番パターンである。

distcc

http://distcc.samba.org/ ( ただの日記 経由)

分散コンパイルしてくれるらしい。これはいいねえ。 最近のコンパイルでは I/O より CPU パワーが命だからな。

fileutils.rb / mkdir_p (2)

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 で通りました。

fileutils.rb / mkdir_p (3)

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 だと思ってましたよ。

cat dir

あ、NetBSD だとディレクトリを cat できるんだな。 Linux はできないんだよなー。 便利って言えば便利だけど、なんとなく納得いかないものがある。

cat dir (2)

ディレクトリを open できると grep '^ufs_mkdir' ufs/* ってしたときにディレクトリが混ざってても エラーにならないのがちょっと便利。

本日のツッコミ (全2件) [ツッコミを入れる]

soda [ディレクトリが cat できるのは、UNIX的には伝統です。
昔(4.2BSDでffsが導入されるよりも前)はgetdent(2)とか
readdir(3)なんてものはなくて、アプリケーションが
read(2)でディレクトリを直接読んでました。
もっとも、NFSを介すと、どんなUNIXでもread(2)できなく
なります。
ディレクトリ名の末尾に"/"をつけても良いかどうかは、
POSIX的にはどちらが正しいんだか良くわからない状況
じゃないかと思います。移植性を重視するなら、つけない
方が安全でしょう。(netbsd @ re.soum メーリングリスト
でも最近議論されてます。)]

あおき [あ、昔ディレクトリが読めたってのは知ってるんです。
Solaris とかいじってましたし、昔話が好きなもんで。
大昔は vi で編集したこともあったらしいですね。

と思ったら、そうか、全く逆の意図に読めるんですね……。
「便利だけど納得がいかない」のは、Linux でディレクトリを
read できないことについて書いているわけです。
わかりにくかったですね。すみません。]


2003-12-12

言語の系譜

http://www.levenez.com/lang/

[ruby-talk:87889] より、プログラミング言語の年表。 前に UNIX の年表を作ってた人だな。あれも面白かった。

fileutils.rb / mkdir_p (3)

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

cat dir (3)

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.4.2

家の 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

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 はあるのか。

GHC commentary

http://www.cse.unsw.edu.au/~chak/haskell/ghc/comm/

"GHC commentary"。 コメンタリーというより概略って感じかな。 主にデータ型の解説がされている。

本日のツッコミ (全1件) [ツッコミを入れる]

n某 [GHC 6.2がでとります。]


2003-12-16

ナカーマ

「賞味期限をぶっ飛ばせ!〜イイから食っとけ〜」 http://food3.2ch.net/test/read.cgi/food/1069377238/

ToDo消化

たまりすぎ。

  • 原稿校了への道 ver 2
  • tabs.rb のスレッドをどーにかするっていうかあれはどうすれば入るんだろう
  • net/https をどうにかする
  • soap/netHttpClient をどうにかする
  • setup.rb 3.2.2 リリース
  • StringScanner#beginning_of_line?
  • TMail 0.10.8 リリース
  • Ripper どうにかする
  • RHG 全部公開

とりあえずバグ潰しからってことで setup.rb 3.2.2 リリース。 えーと次は……。

なぜか StringScanner#bol? を足してみた。 どう考えても優先順位を間違えてるよな……。 簡単に終わりそうだと思ったからなんだけど、 うっかり StringScanner#concat なんて付けたら全然簡単じゃなかった。 スキャン対象文字列を破壊的に変更できるようにしたので、 実際の文字列がカレントポインタより短くなることがある。 従って範囲外をさわっていないか全メソッドをチェックしなければならない。

とりあえず tabs.rb をかたづけるかな。 えーと、ようするにテストがないのがいけないんだよ。 このまえ書いたのを流用して tabs.rb のテストを作ろう。

ああ、うっかり ruby-core にメールを書いてしまった。 メール書くのって苦手なんだよなあ。 RHG で大量に間違いが見付かっていらい、 書くもの書くもの全部間違ってるような気がして恐い。

tdiarygrep

今日の小技

実は tdiarygrep には AND 検索が実装されている。

本日のツッコミ (全2件) [ツッコミを入れる]

non [> RHG 全部公開
全文公開は一年後でもいいと思いますよ。
それよりも第2刷の予定はありますか?]

arton [RHGを萌えCPUや、ギコ暗号と並んで絶賛してるよ。
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20031216/1/]


2003-12-17

RHG

おおっ、このタイトル久しぶり!

第二刷の見通しですか。 永遠に出ないか、出るとしても一年後とか二年後じゃないでしょうか。 このまえ (と言ってもかなり前) 編集の人に聞いたところによると、 「第二刷を出せる可能性もないわけじゃないですよ」 とか言ってたくらいですから! 可能性ゼロが前提ですか! なんて正直なっ!

GHC 6.2

ええっ!? もう GHC 6.2 出たんですか? バージョン上がるの早すぎだよー。 このペースで上げてれば、 そりゃ version 6 にもなるよなあ。

スタティックリンクがメインだから 気軽にバージョン上げられるのかなあ。 いや、単にマイナーだからかもしれん。

ちなみに GHC というのは今のとこ一番有名 (たぶん) な Haskell コンパイラです。

日経ITProにRHG登場

http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20031216/1/

おお! 本当に RHG が紹介されている! しかも並んでるのが萌え CPU 本と暗号本てのがすごいな。 RHG も人気書籍の仲間入りですか? 在庫はけまくり? (ムリ)

という冗談は置いといて。 そうですねえ。RHG と言えば。

この日記では確か何度か書きましたが、 ぼくは最初 RHG にはあんまり乗り気じゃありませんでした。 だってあからさまに売れなそうですもん (まあ無道編も負けず劣らず売れなそうだったけど)。 それがどうして出版されるに至ったかと言えば、 最初に arton さんの提案があり、 んで即座に田村さんや小林さんがプッシュしてくれて、 トドメに金光さんが出版社を見付けてくれてしまったゆえですね。 RHG が出版できたのは、文字通り、 応援してくださった皆さんのおかげです。 本当に感謝しています。

で、それはともあれ正誤表はここです→ http://i.loveruby.net/ja/rhg/

ううぅ……。こ、これさえなければ手放しで喜べるのだが……。

12月のRHG読書会

そだ、RHG つながりで読書会の宣伝をしておこう。 えーと今回は…… 4 章だっけ? そうだ。4 章「クラスとモジュール」からです。

それとその後に RHG 読書会忘年会があるそうです。 ま、きっといつもと同じ飲み会だと思いますが、 今回は年末なので予約が必要です。 参加したい人は RHG 読書会 ML に参加メールを投げてください。

To: rhg-tokyo@ruby.quickml.com
Cc: aamine@loveruby.net

で適当に自己紹介でも書いてメールを出すと登録されます。

あんまりいないと思いますが、飲み会だけでも OK ですよ。 というか素で読書会終了直前に現れる人もいたような気がしないでもない。

SKKだとxwa

いま、ょゎさんの日記を見てて始めて気がついたんだけども、 小さい「ゎ」ってのがあるのね。 どういうときに使うんだろう。「トロヮ」とかかなあ?

「ゎ」で検索すると上位に「あわわゎ」という表記を発見。 そうか、萌えワード用に準備しておいたのか (真実から 10 光年くらい離れた認識)。

そういえばアイヌ語だか琉球語だかで使うというのを聞いた覚えがあるような気がしないでもない。

違った。 「変換(へんくゎん)」のような字音仮名遣いで使うらしい。 字音仮名遣いってなんだ?

ははあ。音読みの仮名遣いのことか。知らなかった。 現代では字音仮名遣いと歴史的仮名遣いが区別されない、のかな?

本日のツッコミ (全4件) [ツッコミを入れる]

arton [確かに売れそうにもない本(しかも書くのにすごい労力が必要なのが見えている)を書けって言うのはひどい話だ。今度、言い出したやつを殴っておくから勘弁して。でも、本当にあおきさんが書いた解析本(ようするに易しくない内容のやつ)を読みたかったんだよ。]

arton [なんか気になったんで蛇足。上のように書いてるけど「売れそうにもない」と思っていながら勧めたわけじゃないです。すごく労力が必要だとは思っていたけど。だから殴るかわりにヨシヨシしときました。やっぱあの本は日本のコンピュータ書籍の金字塔の1つだと思うよ。]

あおき [偉そうに言えば、ぼくもあの本は出るべき本だったと思ってます。
まあ……それには関係なく、やっぱり売れてないわけですが (笑)]

のりつぐ [販売促進部「忘年会のビンゴの景品にいかが?」「クリスマスプレゼンに一冊いかが?」「年始の挨拶に一冊」「お年玉はRHGで決まり」…]


2003-12-20

Cray

[ruby-core:02032] PATCH for Cray X1 UNICOS/mp

Cray のスパコンでも ruby は動いているらしい。

Mozilla / find as you type (1)

Firebird 0.7 だけど、 いきなりキーボードで文字列打つと検索してくれんのね。 知らなかった。

あ、リンクになってるとこだけか……。

Mozilla / find as you type (2)

がーん。検索対象は設定できるんですか。 このへんが公式かな。

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 って打つとその場で設定できるんだな。 これも知らなかった…… (つい直接ファイルを編集してしまう)。

Mozilla / tmpdir

ついでに about:config を眺めていたら、 長年探し求めていたパラメータを発見した。 Mozilla はファイルをダウンロードするときにいったん必ず /tmp に落とすけど、 これを変えたくてしかたがなかったんだよー。 というのも、うちのメインマシンの /tmp は tmpfs で 64MB しかないのだ。 だから 64MB 以上のファイルを落とそうとすると失敗してしまう。

で、そのパラメータがこれ→ applications.tmp_dir

http://sugachan.dip.jp/img/src/20031218180712.jpg ( 俺アーカイブス 経由)

ガラスの仮面 (の最初のほう) で月影先生が似たようなことやってたな。

本日のツッコミ (全1件) [ツッコミを入れる]

なひ [設定できまする > リンクだけか]


2003-12-22

バージョン/コードネーム命名権

バカが征く」より。

> せやなかったらバージョン番号売ったらええねん。
>  
> Perl 味の素とか。Perl 味の素.アミノバイタルとか。

やばい、ウケた。これはいい!

コードネームも売れそうですね。 「Ruby 2 のコードネームは『永谷園』です!」とか。

どういうコードネームが高く売れるだろうか。

  • 有名なソフトウェアほどよい
  • そのバージョンの期待が高い
  • 構想だけは早い時期からある
  • なかなかリリースされない (コードネームを使う期間が長くなるから)

おお! Ruby にうってつ (ry

バージョン/コードネーム命名権売買の欠点

  • リリースに延期圧力がかかることになる
  • 深刻なバグが見付かったときにマイナスイメージが働く (例: Perl味の素にroot権限奪取可能なセキュリティホールが発見されました)
  • 明確な順序付けが存在するため、売却相手を慎重に選ばないとならない (例: Perl SEGA の次バージョンが Perl SonySCE)
  • 「お得意さん」が存在できない
  • もしリリースされなかったらどうするか

第一点は、リリース時期をあらかじめ開発者が宣言し、 それを元に権利を売るということにすればよいだろう。 のびたらめっけんもんだ。

第二点・第三点は 「リリース後は絶対にコードネームを使わない」という決まりを徹底できれば緩和できる。 少なくとも雑誌や商業ウェブサイトでは使わせないようにすべきだろう。 現実的には、最も注目を集めるのはリリース時なので、 「リリースのアナウンスを最後にコードネームは捨てる」がよいかもしれない。

第四点は命名権元締めのような存在を仮定すれば解決できるだろう。

第五点は……がんばってリリースする。

バージョン/コードネーム命名権売買の相場

どれくらいで売ればいいだろう。 Linux クラスなら運がよければ全国クラスの新聞にも載るから、 その広告料くらいは見てもよかろう。 いくらくらいなんだろうな、新聞。

日経の広告料金表が落ちてた。

http://www.nikkei.co.jp/ad/rateks/

んーと、日経全国版の 1/8 が 2 段で 57 万か。 んじゃ、有名ソフトウェアで 1 コードネーム 50 万くらいかな……。

ていうかこんなこと真面目に考えるなよ。

バージョン/コードネーム命名権の欠点 (2)

まだやるよこの男は。

ライバル社が命名してしまうということはないのだろうか。 例えば Redhat SCO とか。Redhat DAME (ダメ) とか。 DAME はペーパーカンパニーだ。

やっぱりそういうのは地道にチェックしてお断わりするんだろうな。

逆転ホームランや

さらに「バカが征く」より

> あとな、アドバイザリー契約っちゅーもんがあるやろ。プロ野球選手なんか道
> 具がタダになる上、ごっつお金ももらえるわけや。これを逃がすのはアホやで。
>  
> Logictechやな。ここなら問題少ないやろ。L.Wallモデルのキーボードとか作っ
> たらバカ売れ間違いなしやで。

ソレダ!

合体するんですよ、合体。 有名プログラマが自分の名前をコードネームとして売る。 金はあるが知名度はないプログラムの作者が 有名プログラマから名前の使用権を買うわけですな。

……なんか「共食い」とか「二兎を追うものは一兎を得ず」 って言葉を思い出して鬱。

Lua

http://tabesugi.net/memo/2003/b1.html#101129

へー、Luaって元々は設定ファイル用言語なのかー。 言語仕様だけ見てたいしたことないなーと思ってたけど、 設定ファイル用と言われてみるとわりといいかも。


2003-12-23

だめぽ

今日出したメールは全部間違っていた……。しくしく。

たぶん睡眠不足だな。もう寝よう。


2003-12-24

困った

起きたら 10 時。

どうすればいいんだ……

ruby 1.8.1

1.8.1 本当に出るのかなー、 これだけ大量にいろいろ報告されてると延期かもなー、 と思ってたけど今しがた ruby-cvs に version 1.8.1 released.ってのが流れた。 出るようだ。

わー

日記巡回してたら本当に 24 日が終わったし

THE非常口

http://hizyouguchi.fc2web.com/hizyou.html

……バカだなあ……

本日のツッコミ (全2件) [ツッコミを入れる]

たむら [10pm?
# 今のうちだよ〜ん]

あおき [夜10時です。で、いま11:20……
このまま一日終わりそうだ。]


2003-12-25

ruby 1.8.1

ruby 1.8.1 出ましたね。お疲れさまです。

なんとなく家でもミラーしてみました。 回線はメチャ遅いけど、ダウンロードが集中する ruby-lang.org からみんなで落とすよりはマシだろう。

一部プラットフォームで多少問題が残っているとは言え、 今回はかなり安定してるんじゃないかな。 まだ 1.6 な人はこの機会にぜひぜひ。

(早く 1.8 のライブラリとメソッドを使いたくてしかたないらしい)

これでようやく 1.9 が始まるよ!

× 2

64bit Windows に ruby をポートした場合、 win32 ディレクトリはどうなるんだろう、と思ってみた。

RDoc

ruby/object.c とか ruby/string.c にまで RDoc が入ってきてカナーリうざい。 悔しいので「るどっく」と読んでやる! やーいやーい!

ruby 1.8.1 ニュースフラッシュ

わざわざ面倒なことを始めるということは、けっこう忙しいらしい。

[ライブラリ/アプリケーションの追加]

  • rdoc
  • ri
  • SOAP4R
  • rinda
  • generator
  • enumerator
  • abbrev

む、rinda って誰が担当? ああ、咳さんか。 とりあえずファイルに記名を切に希望します > 咳さん

[メソッドの追加]

組み込みライブラリ

  • Regexp.union

標準添付ライブラリ (内部っぽいメソッドとか、よくわからんメソッドは省略)

  • (uri) URI.regexp
  • (erb) ERB#filename=
  • (ipaddr) Socket.valid_v4?
  • (ipaddr) Socket.valid_v6?
  • (test/unit) assert_raise (alias assert_raises)
  • (etc) Etc.setpwent
  • (etc) Etc.getpwent
  • (etc) Etc.endpwent
  • (etc) Etc.setgrent
  • (etc) Etc.getgrent
  • (etc) Etc.endgrent
  • (fcntl) Fcntl::O_ACCMODE
  • (ossl) たくさん。ソースコード参照
  • (strscan) StringScanner#beginning_of_line? (alias bol?)
  • (strscan) StringScanner#concat, <<
  • (zlib) Zlib::GzipReader#each_line

[変更]

  • たくさん

でも、特に影響がありそうなのだけ挙げると、

  • 多重代入のセマンティクスが変わった

どう変わったのかよくわからん。 ま、もともと誰も全体を把握してないから問題なかろう (マテ)

[修正]

  • 死ぬほどたくさん

丁稚な日々参照。

[その他、めだった変化]

  • じゃまくさい RDoc がいろいろなところに寄生した

diff とると RDoc ばっか大量に出てきてウザー

本日のツッコミ (全3件) [ツッコミを入れる]

(う) [win32のまま。
単にRUBY_PLATFORMが変わって、ソースコード中の必要なところに#if〜#endifが入るだけでしょう。

とかマジレスしたらいかんのか!?]

あおき [うっす。
「答えはわかってるけどつついてみたい系」というやつです。
別名「『気になるあの娘は転校生』系」とも言います。]

あおき [……もちろん口からでまかせです。]


2003-12-26

次の本の宣伝

ちょっと前から次の本を書いてます。 今回は高橋 (征) さんとゆうぞうさんと合同で…… というか、お二人が書いてるとこにぼくが追加で入りました。 『たのしいRuby』の続きみたいな感じで、Ruby のクックブックを書いてます。

題名はいまんとこ『おいしいRuby (仮称)』ということになってます。 ぼくは『Ruby で 194!』 (レシピが 194 個) が断然いいと推薦したのですが、あっさり蹴られました。くそう。 もっともレシピは 194 どころか 275 あるんですけどね。 『たのしい Ruby』サイズで入るのかなあ。

目次はいまのところこんな感じです。キャプションも未定。

  • Rubyの概要
  • 文字列処理
  • コレクション …… Array Hash Enumerable
  • パス操作とディレクトリ
  • ファイル I/O
  • 数値
  • 時刻
  • 環境とのかかわり …… optparse とか etc とか win32/registry とか dl とか、ようするに余りもの全部
  • プロセス間通信 …… パイプとかソケットとか COM とか dRuby とか
  • CGI
  • オブジェクトシステム …… リフレクション系

来春発売予定。たぶん。

Lua

言語仕様とかライブラリの充実度とかは正直どうでもいい。

Lua はロゴがかっこいいので可だ! 以上!

「Lua 5.0 リファレンスマニュアル」

えとせとら 11/5 経由

ruby 1.8 / 1.9 への移行時の注意

  • Linux では --enable-shared したら ldconfig も忘れずに
  • cvs up でアップデートしてると ext 以下に Makefile が残る。消してから make すべし。
  • objdir を分けてるなら毎回全部消して作り直したほうが無難
  • BSD 系では configure --with-lookup-order-hack=INET にしないと drb のテストが失敗する。
  • bison が使える環境では絶対に bison を入れておくべき。 GC の関係でロード速度が段違い
  • configure を作るときは autoconf 2.5x 必須。
  • lex.c も作るなら gperf 2.7 必須 (普通はそんなことしない)

ディスクやりくり

ひらめいた!

  • これまで dpw600au で使っていた CD-R ドライブをメインマシンに移す。
  • dpw600au から (CD-R 焼きに使っていた) セカンド HDD を抜く
  • AlphaStation 500 にさす
  • ウマー

ということで Tru64UNIX がインストールできることになった。

ところで全然関係ないが Google で "alpha station" を検索すると 予想される単語:"alphastation" と言われたりする。

Tru64UNIX 5.1B インストール

対象マシンは 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

いろいろ聞いてきた。

  • 国際化するかしないか …… せっかくなので国際化版を入れてみる
  • ルートのパスワード
  • ホスト名
  • タイムゾーン …… Asia/Tokyo
  • 日付と時刻
  • インストールするソフトウェア (all, minimum, custom) …… all
  • インストールするロケール (いろいろ) …… Japanese (1GB くらい)
  • インストールするカーネルモジュール (all, minimum, custom) …… all
  • LSM (Logical Storage Manager) を使うか …… YES
  • ファイルシステムレイアウト (default, custom) …… default
  • UFS or AdvFS …… AdvFS

いつもは最小 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 にしても、 こういうのがないと気楽でいいなあ。 論理的に正しいかどうかだけ考えてりゃいいんだから。

Tru64UNIX 観光日記

おっ、ホームディレクトリが /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*

だめだ、時間切れ。続きはまたこんどにしよう。

本日のツッコミ (全4件) [ツッコミを入れる]

おやくそく [(仮称)もタイトルの一部でしょうか?]

とくめい [ruby に 474! で 474個。2474 で(略)。]

(う) [全然知らないで書くと、13Kってのは13K pages、つまり13K * 8192 = 104MB だったりしませんかね。
... あんまりかわらん。]

あおき [あ、そうか、ページ数かあ。なるほど。
言われてみると確かにそれっぽいというかそれ以外ない感じですね。
(鈍いなあ俺……)。vmstat(1) で確認しました。

Virtual memory informati