«前の日記(2006年05月18日) 最新 次の日記(2006年05月21日)» 編集

ema log


2006年05月20日 [長年日記]

_ [Programming][Ruby] Ruby で嵌った [TRAP]

Ruby では、「改行」で行が変わるという話。嵌ったソースは↓。

事情はともかく、Hiroshi と gnuplot の補間関数 acspline を Ruby に移植していたのですが計算が合わない。

なんども、なんども、元のソースとにらめっこ。いくつかのバグをつぶした。でも、変な発振を起こしていた。3時間ぐらい嵌る。

結局、gnuplot のソースに printf を仕込んで計算過程をダンプして、つきあわせることに。

つきあわせたところ、どうも全体的に m の値が大きいと言うことになる。しかし、出力する限り、z, h の値は同じだった。本気で悩む。延々悩む。

なんか、変な構文解析の罠に引っかかったのかと思い、整形を一切なくしたらうまく動いた。

ここまできて、ようやく Hiroshi が原因に気付く。正解は↓

つまり、元のソースでは、2行がそれぞれ別の計算式として扱われていた。ほかの箇所を直して無事動作。

else のネストで嵌る人の気持ちが初めてわかった気がした。これ、Python だったらどうなるんだろう。

_ [Programming] 移植、書き直しの際には絶対にテストファースト

やはり、テストデータを簡単に用意できるのだから、それを元に突き合わせを行うテストを先に用意すべきだった。さらに、テストは内部の計算過程をダンプしたのをつきあわせると原因究明しやすいかも。Logger.debug などを活用したい。

せっかくのテストも、目視では見落としもある。ひどいことに、計算結果が正しくなったのに、私は気付いてなかった(Hiroshi が気付いて助かった。ペアの効果w)。手間がかかるようでも、UnitTest を書いた方が安全で速い。

今回、手抜きで1つしかテストしてなかったけど、3つ用意できたのだから、それらすべてでテストすべきだった。これも、手動の弊害の一つだろう。

_ [最近] 嵌るって漢字これで良いのかな?

ATOK の意味・用例表示*1に登録されてない単語だと不安になる。電子辞書セットなら良いんだろうけど、そこまでする必要もなぁと思う。

除算演算子の syntax hilighting がうまくいかず、正規表現と見なされてしまっているようだ。GNU highlight のバグだなぁ。

*1 ATOK13 以降の「同音語の選択支援」