history

青木日記 RSS

<前月 | 最新 | 次月>

2005-09-01

いまさら LLDN の反省

もうちょい正面を向いてしゃべるべきだった。 と、るびまに載る写真を見て思った。 ノートパソコン買ったばっかりだったもんでスクリーンと 画面の両方を映す方法がよくわかんなくて、 スクリーンにしか画面が出てなかったのが原因。

しかし、なんでみんな座ったまんま話すんだろうね。 話しづらいじゃんか。

(03:00)


2005-09-04

だめだー

うう、Ripper のやっつけパッチを当てるくらいしか時間がない。 これからバイトだし、るびまのほうは手伝えそうにないや……。

(15:34)


2005-09-05

もえしぃ〜

http://moe-c.chu.jp/main.html

> C言語に挑め。購入者率 1%
>
> 毎年8月の決まった日に、1人が買出しに行き、1人が売り子になる怪奇。
> 巨大同人市場を巡る闘争から紡がれる負の連鎖。
> 平成に隠蔽された怪プログラムが、暴走する。
> 仕様変更か。バグか。それとも祟りか。

おまえら

アホか――――――――――――――ッ!

(19:56)


2005-09-07

net/http: WebDAV 拡張

1.9 の net/http を 1.8 にマージするついでに WebDAV メソッドを全部入れちゃおうとか思ってドツボにはまる罠。

(00:14)

net/http: 1.8 マージ

とりあえず新しいメソッドを 1.8 に追加するのはあきらめて、 マージを先にやることにする。

と思ったら 1.9 が変わりすぎててマージできない。 しょうがないので 1.9 のをそのままつっこもう。

(01:09)

net/http: そして core dump

~/c/net/test % ruby-1.8.2 -I~/c/ruby/lib test_http.rb       aamine@serenade
zsh: 7142 illegal hardware instruction (core dumped)  ruby-1.8.2 -I~/c/ruby/lib test_http.rb

どうして俺がなんかするたびに落ちるんだよ! いくらなんでも秘孔つきすぎにも程があるよ! SIGILL なんて出たのは超久しぶりだよバカヤロー!

新しいアーキテクチャは恐いですなあ。

(01:39)

net/http: 解決

~/c/net/test % ruby-1.8.2 -I~/c/ruby/lib test_http.rb       aamine@serenade
/home/aamine/c/ruby/lib/webrick/httpauth/htpasswd.rb:38: [BUG] Segmentation fault
ruby 1.8.2 (2004-12-25) [x86_64-linux]
 
zsh: 17355 abort (core dumped)  ruby-1.8.2 -I~/c/ruby/lib test_http.rb

gcc をアップデートしたら無事 SEGV になりました。 よかったよかった。よくねえよ。

とりあえず -O2 を -O0 にしてみる。

~/c/net/test % ruby-1.8.2 -I~/c/ruby/lib test_http.rb       aamine@serenade
/home/aamine/c/ruby/lib/webrick/httpauth/htpasswd.rb:38: [BUG] Segmentation fault
ruby 1.8.2 (2004-12-25) [x86_64-linux]
 
zsh: 24913 abort (core dumped)  ruby-1.8.2 -I~/c/ruby/lib test_http.rb

だめか。

……冷静に考えると 1.8.2 より 1.8 HEAD で試すべきだなあ。 意外と修正されてたりするかもしれないし。

~/c/net/test % /usr/local/pkg/ruby-1.8/bin/ruby -I./lib test_http.rb
~/c/net/test %                                              aamine@serenade

なおってたー! ありがとうパッチモンスター!

それにつけても AMD64 はコンパイルが速くてよいですな。

net/http: 問題発生

1.9 の net/http は 1.9 の net/protocol に 凄い勢いで依存していることが判明してしまった。 これをアップデートすると net/smtp と net/pop も道連れにならざるをえない。どーしよ。

どっちも SSL 対応が入っちゃうのか。 これはけっこうヤバいな。

…………うーん。まあいいか。 ねこそぎ持っていこう。

(02:22)


2005-09-10

RHG 読書会

しまった、今日は RHG 読書会じゃないか! すっかり net 関係をいじるつもりになってたよ。

今日はもうノートパソコンは置いていくかぁー。 Windows 持ってっても意味ないし。 あのマシンは重くて嫌になる。

ブチキレ寸前

ドラフトではいろいろ書いてみたものの、 やっぱり一言に短縮。

バイトうざい。

(11:05)


2005-09-13

net/http: やらかした

net/https.rb をマージしてねえし……。 これだからバイト直前にコミットするのは嫌なんだ。 作業したおかげで昼飯食いそこねるし、踏んだり蹴ったりだ。

なんで test-all が失敗しなかったのかと思ったら、 openssl.so がコンパイルされてなかった。 Debian の libssl-dev パッケージを入れていなかったのが敗因。 ライブラリを入れたら対応する *-dev も勝手に入れる、 みたいなことはできないもんかな。

(01:08)


2005-09-14

hp Integrity server rx1600

http://page8.auctions.yahoo.co.jp/jp/auction/h29324018

Itanium 2 1GHz の 1U サーバが 10 万を切った。 恐ろしいことだ。

ここんとこ rx1600 が怒涛の勢いで放出されてたけど、 そろそろ打ち止めかな。

(01:52)

Sun Fire 見学会

今日は BioRuby の片山さんに UltraSPARC 96way マシンの群れを見せてもらった。 やっぱしラックはよいね! ラックさいこう!

ついでに Mac もいいなあと思い始めてしまった。 以前からあの「フニョッ」ていうやつはいいなあと思ってたんだけど、 それも含めて Mac のいろんなインターフェイスは巨大モニタでこそ 真の威力を発揮するのだということが今日初めてわかった。 だいたい今のモニタは根本的に小さすぎるんだよ。 なんですか 17" だの 18" だの。15" なんて問題外だし。

バイオインフォマティックスな話も聞いたのだけど、 インフォ以前にゲノムとか遺伝子とかの基本用語がわからないありさまなので めっちゃ基本的なところから教えていただきました。 今日だけでずいぶん知識がアップした……ような気がする。 ゴミかと思われてたけどゴミじゃないかもしれない部分とか。

えーと他には…… PyMol というのが凄かった。 たんぱく質 (分子構造?) の立体画像をグリグリいじれる。

(02:24)


2005-09-15

Ruby 1.8.3

え、21 日に 1.8.3 リリース?! せめてもう一回 preview (preview 3) がないと恐いなあ。

(07:44)

めも: fileutils を急いでコミットする

Ruby on Haskell

[ruby-list:41144]

Haskell の勉強で Ruby を書いてしまうとは……。マジカヨ……。

(07:56)

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

小林栄 [Haskell版とrubyを対決させようとして test/fun.rbをちょいと改造

def maware(n)
if n == 0
'Owattazo'
else
fact(10)
maware(n-1)
end
end
puts(maware(2000))

ruby fun.rb
Illegal instruction (core dumped)

OSC2005でお会いした時の雑談にするのを忘れておりました。
ruby 1.8.2 (2004-12-25) [i386-freebsd5] もうすぐ1.8.3なのに。]

なかだ [たぶんstack overflowでしょう。
確実に捕まえる手段は今のところありません。]


2005-09-18

OSC2005/Fall Ruby セッション

17 日は Open Source Conference 2005 / Fall でした。 わたしも Ruby セッション「あなたの Ruby コードを添削します」でしゃべってきました。 Ruby セッションを聞いてくださったみなさま、 ソースコードを提供してくださったみなさま、ありがとうございます。 ちょっと喋りすぎて失敗したーと思ってたんですが、わりと評判がよくて安心しました。 やっぱり事前に時間を計測しないとだめですね。 フォントとかモニター関係でゴタゴタしたのも反省点です。 インストールしたばっかりのシステムを使ったのがまずかった……。

以下のとこにわたしの担当した Pukipa (Pukiwiki parser) のソースコード (添削前・添削後) を置きました。

なお、pukipa.rb のオリジナルは rails2u の gorou さん作です。 あ、これもページに書いとかないとな。

(02:29)


2005-09-19

fileutils.rb

remove_entry_secure を足した時点で remove_entry が必要になり、 そうすると大変更が避けられなくなる。 結局これもゴッソリと 1.9 から持っていく羽目になった。

うーん、問題が起きなきゃいいのだが……。

(06:44)

Contessa キター

来たぜコンテッサー! 色は現場にあったのと同じライムグリーンで。 笹田さんとたださんが買っていたということを後から知ったんだけど、 偶然にもどちらとも色が違っていた。 オレンジとどっちにしようか迷ったんだけど、こっちにしてよかった……。

(09:04)

ツッコミ SPAM

うおー、ツッコミ SPAM の絨毯爆撃くらってる。 巧妙なことに次々と IP アドレスを変えてきているようだ。 しかも向こうはこちらの動向をちゃんと認識しているらしく、 POST を連発してきた上位 10 アドレスを deny したら、 わざわざ名前を変えたツッコミを入れてきやがった。なめやがって。

売られた喧嘩は買わねばなるまいが、さて、どうするか。 単純にフィルタするだけだと負けた気がするしな。 いまのところ、チェックボックスかボタンのどちらかを 大量に生成する (が、一つ以外は見えないようにしておく) というのを考え中。 CSS で消すのは簡単だけど、w3m でも簡単に使えるようにするのが難しいのう。

(09:34)

fileutils.rb (2)

テストをコミットしわすれたかー!? と思ってあせってコミットしたら余計エラーが増えた。くそう。

つうか、さっき全部テスト通したはずなのになあ。 いったいどうなってんだ。

(10:07)

fileutils.rb (3)

エラーは増えていなかった。 ruby が古いだけだった。

んで [ruby-dev:27145] はどうかと言うと、 二つめはテストの間違いだが一つめは純粋な仕様の変化のせいだ。 そういえば仕様変更した記憶がかすかにある。 dereference_root=>true にすべきだろうな。

ん? 違うじゃん。これはルートじゃなくて途中のファイルか。 これは単なるバグだ。テストを修正で OK。

ああいや、やっぱその次でルートのテストをしてるんだな。 これは変えないようにすべきだ。

あれー、でも copy_entry はもとから dereference=>false なのか……。 なのになんでルートがシンボリックリンクリンクにならないんだ?

……そうか、バグってるからか……。しょんぼり。 これは仕様変更ていうより修正ですな。修正。

(10:39)

Ruby 1.8: make test-all

Tru64UNIX 5.1b は意外にもスカッと通った。 YAML 以外は。YAML 以外は。

Cygwin は SEGV。

SEGV?!

(12:13)

ツッコミ SPAM (2)

tdiary-devel ML で流れた zunda さんの新作フィルタがよさげなので、 ワクテカして待ってみる。

(15:49)

Ruby CVS HEAD: make test-all

うおっ、ripper がブロックしてるー?!

と思ったら、がんばってパースしていた。 びっくりしたー。

しかし、いくら全ファイルパースしているとは言え、えらい遅いな。 確かに ripper はけっこう遅いが、ここまで遅くはないと思うのだが。

えーと 47 秒で 1583 ファイルだから…… 1 秒で 33 ファイルか。 あーなんだ、それほど遅くはないじゃん。数が多すぎるだけだ。

(20:00)


2005-09-20

ばぐつぶし

Rubyのバグ勝手にトラッカー から簡単なやつをいくつか潰した。

  • ruby -v -rripper で warning が出るぞな件 → 修正
  • ripper/core.rb が生成されちゃうぞな件 → 修正
  • Find.find の引数が存在しなくても例外にならない件 → ChangeLog 記載漏れだったので追加

(13:00)

Ruby 1.8.3 リリースノート (1)

やっぱリリースノートくらいは作ろうかなと思うわけです。

とりあえず ChangeLog をファイルでソートしてみた。 ChangeLog 形式は意外とパースがめんどいことがわかった。 グロブを使う人がいるからだ。しかも書きかたが間違ってたりして。

まあそれはともあれソートして 3000 行くらいのものができたのだが、 そこからが問題だ。俺が今日やったくらいじゃ絶対に終わんないだろうし、 こういうときこそ人海戦術か。どっかの Wiki に置いて分担してやろう。

他に、そのリリースノートは日本語と英語のどちらで書かれるのかという問題がある。 どちらにせよ英語のリリースノートが必要であることは間違いないのだが、 英語でまとめて日本語に訳すのか、 日本語でまとめて英語に訳すのか、 日本語と英語を並列でやるのか、 てんでバラバラにやるのか、選択しなければなるまい。

俺の案は、まず英語の Wiki に投げて ruby-talk の暇な人達に英語版を作ってもらう。 で、きっと英語版のほうが進捗が早いので、 それを参考にしつつも独立に日本語版を作る (訳さない)。 たぶんこれが双方にとって最も作業しやすい形態だろう。

とりあえず ruby-dev に投げてみよう。

(13:29)

context switch

やっべ、明日までの宿題があるの忘れてた。 呑気にリリースノートなんか作ってる場合じゃないじゃん。

るびまのほうもやることがあるのだが。

(13:45)

ある意味ではとても的確

Amazon が『ふつうL』とか無道編を勧めてくるのはどうにかならないものか。

(15:09)

Ruby 1.8.3 リリースノート (2)

RWiki にあったのか……。しぼむ〜。 せっかく作ったから途中経過を置いとく。

(20:04) (20:34)

にゅーましん

東芝の ER-CK2 を買いました。 エントリークラスの機械ですが、 個人用途ならこのクラスでも十分です。 まだ使いはじめて一週間ていどですが、 あまりの便利さに驚愕しました。 よくこれまで使わずにやってこれたものです。

ちなみに電子レンジの話です。

(21:01)

fileutils.rb (4)

[ruby-dev:27221]

have_link? が true になるということは、 ハードリンクは使えないくせに API の link(2) は存在するということか。 嫌すぎる……。

一つめのエラーは UID がバカでかいってことかなあ。

(21:53)

stat(夕飯)

さすがに、さすがに、さすがに、賞味期限を 10 日過ぎた豚肉はやばくない?

(00:24)

stat(夕飯)

食ったけどな。

もし俺が入院したら、あとは頼んます…… (パッチとか)

(00:35)

fileutils.rb (5)

[ruby-dev:27224]

うーん、再現しない……。どうすっかな。

とりあえず寝よう。

(01:07)


2005-09-23

ripper

そうか、make の時点で *.rb を作ってももう遅いのか。 mkmf.rb になんかインターフェイスがあったっけ?

……めんどくさい。 PARSER_EVENT_TABLE と SCANNER_EVENT_TABLE だけ C で定義して、 あとは module_eval でどうにかしよう。なんか逃げてるっぽいが。

(03:22)

fileutils.rb backward incompatibility

[ruby-core:05954]

The methods FileUtils::Verbose.compare_file and
FileUtils::Verbose.uptodate? were public in previous Ruby versions.
They (and perhaps more methods) are private in Ruby 1.8.3.

やっちまった……。

(04:57)


2005-09-24

ripper (2)

変更完了。 やっぱ毎回クリーンから make して test-all しとかないとまずいな。 気をつけよう。

(06:41)

setup.rb 3.4.0

超久しぶりに setup.rb をリリースしました。

今回はかなりいろいろ追加しました。詳しくは NEWS を参照のこと。

(02:47)


2005-09-28

optparse

OptionParser を難しいと思ったことはないなあ。 getopts からの移行だったから、むしろ嬉しいことのほうが多かった。 嬉しさのあまりツールはほとんど optparse に移行しちゃったし。 具体的にはこのくらい。

~ % grep -l optparse c/*/*.rb c/*/bin/*.rb | wc -l
55
~ % grep -l getopts c/bin/*.rb c/*/bin/*.rb | wc -l
7

on てメソッドも Gtk の on_click と大差ないので違和感はない。 強いて言うなら on の引数がよくわかんないな。 いろいろ条件 (制約値?) が書けるみたいなんだけど、 何が書けるのかいまだに知らない (知ろうとしていない)。

optparse で嬉しかったことと言えば、 ヘルプメッセージをオプションとまとめて書けるようになったこと。 getopts ではヘルプメッセージを自分で書かなきゃいけないのが面倒でしかたがなかった。 あと、--help のときは stdout に出したいんだけどエラーのときは stderr に出したい。これも getopts だとめんどくさい。 optparse だと普通に書ける。

しかし困っていることもないではない。

  • オプションの引数を変数に入れたいとき、 最初にローカル変数を定義して on ブロック内で代入しないといけない。
num = nil    # ← これがめんどくさい
parser = OptionParser.new
parser.on('-c NUM') {|n|    # ちなみにここで |num| とやる方法は嫌い
  num = n
}
  • puts parser.help; exit 1 をまとめようと思って メソッドにすると parser を渡さないといけない。
def usage(parser, msg)
  $stderr.puts msg
  $stderr.puts parser
  exit 1
end

とかいう場合。 でも、parser の特異メソッドにすりゃ済むなあと今さら気付いた。

def parser.usage(msg)
  $stderr.puts msg
  $stderr.puts help()
  exit 1
end

こういうメソッドが最初から定義されてると嬉しいのだが。

ちなみに getoptlong は可能なかぎり使いたくない。 1.6 から 1.9 のすべてで警告なしで使えるのが getoptlong だけというのは実に腹立たしいことだ。 ReFe ではやむをえず getoptlong を使っているのだが、 あまりにムカついたのでラップして使ってる。

(21:31)

make の 時点で作った *.rb をインストール

http://www.rubyist.net/~nobu/t/20050925.html#p01

* [ruby] $INSTALLFILES
 
make の時点で *.rb を作ってインストールするには、
 
$INSTALLFILES = [["hoge.rb", "$(RUBYLIBDIR)"]]
 
インストールするファイル名(のglobパターン)、インストール先のディレクトリ、
インストールする元のファイル名から取り除くprefix、をeachでyieldするもの。

ああ、やっぱりあるんですね……。 今度このシチュエーションに出会ったら使います。

(21:39)


2005-09-30

Bison 2.0 の罠 (1)

[ruby-core:6083]

うげ、パーサスタックを alloca しなくなったのか。 それはまずい……。

(13:20)

Bison 2.0 の罠 (2)

これかー

2004-12-22  Paul Eggert  <eggert@cs.ucla.edu>
 
        * NEWS: Bison-generated parsers no longer default to using the
        alloca function (when available) to extend the parser stack, due
        to widespread problems in unchecked stack-overflow detection.

うーむ、パース後に GC を起動するのはできるだけ避けたいしなあ。 パーサスタックを Ruby から取る方法があれば一番いいんだよな。 調べてみよう。

(13:27)

Bison 2.0 の罠 (3)

> Macro: YYSTACK_USE_ALLOCA
>
> Macro used to control the use of alloca when the C LALR(1) parser needs to
> extend its stacks. If defined to 0, the parser will use malloc to extend
> its stacks. If defined to 1, the parser will use alloca. Values other than
> 0 and 1 are reserved for future Bison extensions. If not defined,
> YYSTACK_USE_ALLOCA defaults to 0.
>
> If you define YYSTACK_USE_ALLOCA to 1, it is your responsibility to make
> sure that alloca is visible, e.g., by using GCC or by including <stdlib.h>.
> Furthermore, in the all-too-common case where your code may run on a host
> with a limited stack and with unreliable stack-overflow checking, you
> should set YYMAXDEPTH to a value that cannot possibly result in unchecked
> stack overflow on any of your target hosts when alloca is called. You can
> inspect the code that Bison generates in order to determine the proper
> numeric values. This will require some expertise in low-level
> implementation details.

と、いうことらしいですよ。うーむ。

うわあ、パーサスケルトンが m4 になってる。 きみらどうしてそんなに m4 が好きなんだ。

(14:01