衣玖さん芸人に!!!俺はなるっ!!!(海賊王的なノリで
— mix3 (@mix3) 2014, 6月 8
最近p5-Ikusanを作ったり、それで衣玖さんのIRCボット作ったりして衣玖さんへのロマンティックが止まらないmix3です
github.com/mix3/go-ikusanとgithub.com/mix3/go-irc
最近golangを触ってる事が多いのですが(絶賛開発中の社内アプリがgolangだけどそっちにはあんまり関わってなかったりする)
適当になんか作りたいなぁと思っていたところに最近衣玖さんへの愛が溢れ出してきてたので、そりゃ「go版ikachan作ろう」となるのは自然な事ですよね
でgoでircってどう触るんだろうとgithubを漁ったところ
辺りがirc触るためのライブラリとして有名どころなのかなぁということが分かって、その辺り使って作ろうとしたのですが、
go-ikusanのためにgo-irceventの中追いかけてるがエラー検知からのリコネクト処理がダメだこりゃ close(end)して各イベントチャンネルをwaitgroupで待ってるけど、socketのreadで待ってるからtimeoutするまで待ち続けてる
— mix3 (@mix3) 2014, 6月 10
preadってチャンネル用意してるのにどこにも使ってなくて多分これはsocketから1行読んで解釈するのと、それをcallbackに投げるのを分離するためものだと思うけど、まだ未実装ってことなのかな
— mix3 (@mix3) 2014, 6月 10
go-ircevent、groupwaitしてるのsocketを安全に閉じるのを保証するためだと思うけど、socketのreadで待ち続けるのもなんとも言えないなぁ
— mix3 (@mix3) 2014, 6月 10
Errorチャンネルをselectで待ってて、検知したらdisconnectするけどそのdisconnectの中でさらにErrorを投げてるの結構ワンダーな感じする
— mix3 (@mix3) 2014, 6月 10
とか
http://t.co/jXGwN4arHz がエラーハンドリングちゃんとしてそうだけど、flag要求されて非常に使いづらい
— mix3 (@mix3) 2014, 6月 10
とかでなんか微妙に使いづらいなぁとなってしまい、じゃあいっそそっから作るかということで両方の間の子みたなの作ったりしました。github.com/mix3/go-irc
出来るだけ薄くしておきたかったのと、IRCについて知識はまるでないので難しいことはしないようにしたかったので
- ircサーバへのリクエストが出来る
- ircサーバからのレスポンスを受け取れる
- ircサーバからのレスポンスを元にコールバックを呼ぶがディスパッチャみたいなことはしない
- ircサーバからのレスポンスのtimeoutを待たずに落ちる事が出来る
- 落ちたタイミングで何かしたいこともあるだろうから、別途落ちたタイミングでコールバックを呼ぶようにする
- flagは使わない
- loggerはデフォルトでgithub.com/umisama/gologを使うけどinterfaceが定義されてるので差し替え出来るハズ
ぐらいを満たすような感じでgithub.com/thoj/go-irceventとgithub.com/fluffle/goircからコピペしたりしなかったりしました
たまに落ちるときにWaitしたまま帰ってこないみたいなことがある感じなので、明らかにここマズいとかあったらプルリクあると嬉しいです
で、これを元にgo版ikachanことgo-ikusannを作りましたとさ
とってもキュートな衣玖さんがお出迎えしてくれるwebインタフェースも作ってやはり衣玖さんは最高だなって思いました
go-ikusanのwebインタフェース作った 衣玖さんマジかわ pic.twitter.com/sAcXgUZJP1
— mix3 (@mix3) 2014, 6月 14
なおAAの画像は「衣玖 AA」で検索して見繕ったAAなので著作権的に問題あったら非常に心苦しいですが消します