できた、できたよー。
書き下ろしの部分は完了、起動用スクリプトも書いた。
バテンの時に人が少なかったら乱入させ(ry
あとはリファクタリングだな。
まだ渡せるレベルではないので、残りはひたすらクオリティアップのターンです(とは言え、プログラマにしか違いが分らない自己満足系のクオリティアップだけど)。
1日1メソッドは書き直していきたいところだなー。
来週は火曜くらいから東京旅行(学校の研修旅行)なので、ホテルから出れなくなる22時ごろから勝負かけるか。
ちなみに、日曜に資格試験があるので、僕は旅行が終わったら東京に泊まらず普通に帰ります。
友人たちから「おまwww空気読めよwww」とか言われたけど知りません。
東京と言えば、夏のインターン仲間がねとらじ的な事をやっていたらしいんですが、普通にその時間寝てたので聞き逃しちまった…。まぁ「第一回」って書いてたので今後もあるでしょう…たぶん…。
バッティング…してる…のか?
バグ出てすすまねー。
相変わらずこのBot開発は難航しまくりだな…。
つーかるてみすが本格的にやると超ムズい。
問題を整理しよう。
ずっとくるくる高速で回っているループが一つあって、その中で配列Aを定期的に書き換えている。
で、るてみすのシグナルハンドラから呼び出されたメソッドが配列Aを書き換えようとすると、なんかエラーで落ちる。これが配列Aを読むだけだったら大丈夫なんだけど。
最初全く分んなかったんだけど、これって、バッティングしてるんじゃないかなぁ。
しかしそうすると、メソッドが呼び出されている間はループを止めなきゃいけないことになるんですけど。
どうやって止めるんだ?
うーん…?
色々やりつつだからあんま進まないけど、まぁ実況はまだ中盤だから大丈夫だろがんばります。
追記:
色々やっているうちに、なんか変な法則性があるのを発見した。
今まではモジュールを何度killして再起動させてても問題なかったんだけど、今回はモジュールをkillして再起動したときだけ不具合が起こっているみたい。
まー完成すればモジュールだけ再起動させることは無いからいいんだけど、環境依存で他のPCでは初回から落ちるとかだったらやだなー。
僕が地味にコード書いている間にも色々とまわりは変化していて、なるはやで仕上げることになりました。
自分としてもこれ以上時間をかけられない(既に後ろのスケジュール圧迫してる)ので、思い切ってGUIは封印することにします。僕が未熟なせいなので、大変申し訳ない。
そのかわり、最低限の機能を載せたら、あとは時間いっぱいひたすらリファクタリングをして、完全なる自己満足の美しいコードをギリギリまで極めたいと思います。
このBotは女の子なので、洗練されたしなやかさ、強さ、美しさ…そんなコードになればいいなぁ。
ベースの時点でバグ出まくりだったのが悔やまれます…。
進捗としては、前回あった機能が全部できてて、新規機能は1/3が提供できる状態です。
めちゃくちゃ時間をかけたベースですが、まぁ合格点には達していると思います。前回はつぎはぎで何とかもたせている状態だったので…。
モジュールは前回の使いまわしなので、かなり汚いままです。なにこれキモい。汚いっていうかキモい。このキモさを取らないと、完成なんて口が裂けても言えない。
新機能はわりとてきとーに作ってます。時報はできました。場が静まりかえったら発言する機能は、ログ探索する関係で調査中。もうすぐできると思う(思いたい)。
もうちょっと、もうちょっとだ。がんばろう。
わけ…わからん…。
なんだこれは。
もはやIRCボットのタグつけるのも恥ずかしいので、雑記タグで書きます。
昨日からあまりにバグが取れないので、状態を戻して戻して、ついに解凍したすぐ後のruthemisまで戻り、そしてそのサンプルさえ動かないという状況なんですが…。
うーん、入室するチャットしか変えてないんだけどなあ…。うーむ。
しかもシンタックスエラーっていう。わけわかんないお…。
src/irc.class.rbはbotがチャットに入室しているので動いていると思うんだけど、モジュールが全然動かない。
なんか最近変なバグのせいで進まないことが多いなぁ…。これもどうせ不注意レベルのバグなんだろう……けどわからん。
以下失敗のコピペ。
bash-3.2$ ruby src/irc.class.rb wide &
[2] 1145
[1] Terminated ruby src/irc.class.rb wide
bash-3.2$ ruby src/nalter.class.rb wide &
[3] 1146
bash-3.2$ ./lib/nameserver.class.rb:57:in `define_key_method': (eval):1:in `define_key_method': compile error (SyntaxError)
(eval):1: syntax error, unexpected $end
...}>] end
^
from ./lib/nameserver.class.rb:20:in `eval'
from ./lib/nameserver.class.rb:57:in `define_key_method'
from ./lib/nameserver.class.rb:20:in `[]'
from src/nalter.class.rb:4
[3]+ Exit 1 ruby src/nalter.class.rb wide
うぅ…リア充しすぎてたせいで、スケジュールが大きく狂っとる…。
まぁリア充っていうか、その、部屋の大掃除とかスーツ買いに行ったりとか、なんかもう味気ないリア充っぷりだったけどね…。
さて、スケジュールでは、今週でBotはほぼ完成予定だったんですけど、勿論全然終わってないので、あれですね、そろそろ宿題に追われる子供のように頑張らないとマズいです。
今日やることはベースを作る事。
これが終わればあとは楽しくなるんだけど、なかなか…。
・新規Botのベースを完成させる
進んでないとは言え、別に手を付けてなかったわけではなくて、バグが取れなかったのが大きかったんです(正確に言えば、取れないバグを本腰入れて除去する時間がなかった)。
つーわけで、バグ取りしてたんですけど、どんなに調べてもイミフ……と二時間がすぎた時に、単にクラス名間違えてただけってことに気づきました。存在しないクラスなら良かったんですが、生憎似たクラスが普通に動作してたので、全然気づかなかった。
あと、るてみす本体のクラスをrequireして継承しようと思ったら、るてみす本体のファイル(irc.class.rb)にbegin以下の実行コードまで含まれていて困った。
るてみす本体に手を加えたくはないので、「irc.class.rbのクラス部分だけ切り取った一時ファイルを作って、Rubyがそれを読み込んだら消す」という意地としか言いようの無いやり方でやってみました。
とかなんとかやってるうちに、文字コードの問題を解消したベースが完成。
・移植する
irc.class.rbの中のIRCクラスを継承させた後、以前のBotで使ってたモジュールを動作させたら全然上手くいかなくて詰んだ。
症状としてはon_privとかが動かなくて、なんで動かないんだ? と思って、通信してるオブジェクトのインスタンスをto_sしてみたら、継承前のクラスだったりして、色々弄ってみても、ネームサーバまわりでエラー出て詰んだ。
詰んでいて気づいたんだけど、僕の記憶が正しければdrubyを使う場合、やりとりするオブジェクトっていうのはどちらもrequireする必要があったはずなんだけど、よくよく考えるとるてみすは完全に見えないのに動作している。
どうもネームサーバとシグナルハンドラとかいうモジュールが絡んでいるっぽい。
つーか、こいつがごにょごにょ暗躍しているので、なんか勘ではどうにもならんことになってる。
きっと有り難いシステムなんだろうけど、そのまんまコード見ても難しすぎてわからない…。
明日頑張って、作者HPにあるネームサーバとシグナルハンドラのお勉強するか。
・リファクタリングする→あとまわし
・設計を考える→あとまわし