IRCフレームワークCinchで人間でもできるIRCBot

GitHub - cinchrb/cinch: The IRC Bot Building Framework
IRCBotを作ってみたいなぁと思って調べたら、CinchというIRCBotフレームワークがとても簡単でよさげだったので使ってみました。
インストールはgemを使うだけ。

gem install cinch

使い方はとっても簡単で、例えばGithubにあるコードをあげると、あいさつを返すbotを作りたいと思ったらこうする。

require 'cinch'

bot = Cinch::Bot.new do
  configure do |c|
    c.server = "irc.freenode.org"
    c.channels = ["#cinch-bots"]
  end

  on :message, "hello" do |m|
    m.reply "Hello, #{m.user.nick}"
  end
end

bot.start

ね、簡単でしょ?

configureの部分に接続するサーバーやチャンネルなどの設定を書く。例えば下のような感じ。
この他にもできる設定はlib/cinch/bot_configuration.rbに書いてある。

bot = Cinch::Bot.new do
    configure do |c|
          c.server = "irc.hoge.net"
          c.port = 42
          c.password = 'foobar'
          c.channels = ["#foobarbaz"]
          c.nick = 'uiureo'
          c.realname = 'uiureo'
          c.user = 'uiureo'
     end
end

あるメッセージに返答するon :messageには正規表現も使える。helloが含まれるメッセージにHello!と返答するbotであればこんな風に書ける。

bot = Cinch::Bot.new do
  configure do |c|
    c.server = "irc.freenode.org"
    c.channels = ["#cinch-bots"]
  end
end

bot.on :message, /hello/ do |m|
    m.reply "Hello!"
end

日本語を扱うときは注意が必要で、自分の環境とIRCチャットの文字コードを考慮して適切に文字コードを変換しなければならない。

IRC_ENCODING='iso-2022-jp'

bot.on :message, /hello/ do |m|
    m.reply "こんにちは!".encode(IRC_ENCODING).force_encoding('external') 
end

Githubのページには例が多くのってるので、作りたいBotに合わせてコードを読むとよいです。
https://github.com/cinchrb/cinch/tree/master/examples

neocomplcacheでHaskell補完 : neco-ghc

neco-ghc - A neocomplcache plugin for Haskell, using ghc extensions : vim online
Haskellを始めたんだけど入力するのが面倒くさいから、Vimでバシバシと補完がきいたらいいなと思って調べたらneco-ghcというのが出てきた。なんかneocomplcache上で補完がきくようにしてくれるプラグインみたい。
インストールに際して、割と詰まった点が多かったからメモっておく。

まずneocomplcacheを入れてない人はそれをインストールする。それと、cabalコマンドが使えない人はhaskell-platformかなんかをインストールする。やり方はググろう

ghc-modをインストールするコマンドを実行

% cabal install ghc-mod

vimprocをインストール

neco-ghcにはvimprocが必要なのでそれをインストールする
GitHub - Shougo/vimproc.vim: Interactive command execution in Vim.
ここから適当にソースコードを落としてきて、doc/vimproc.txtを見てインストールする。Macの場合だと落としてきたフォルダの中でmakeコマンドを実行する

% make -f make_mac.mak

こうするとautoload/にproc.soができるので、proc.soとvimproc.vimとvimproc/を自分の.vim/autoload/にコピー。
これでvimprocのインストールは終わり

neco-ghcのインストール

neco-ghc - A neocomplcache plugin for Haskell, using ghc extensions : vim online
ここからパッケージをダウンロードしてきて、中にあるghc.vimをパッケージの中の階層構造と同じように.vim/に入れる。

ghc-modが見つからないと出る場合

ghc-modにパスが通ってない場合は.cabal/bin/に適当にパスを通す
自分の場合は.zshrcで$PATHに追加した
作者のgithubによると.vimrcにこのように追記すればいいらしい

let $PATH=$PATH."/Users/<username>/.cabal/bin"

おわり

これでHaskellでも補完がきくようになって、しあわせに開発ができるようになりました。めでたしめでたし

Array#forty_two

Active Supportがあればこういうことができるというのはよく知られている。

[*(1..100)].second  #=> 2
[*(1..100)].third  #=> 3

Array#fifthまでしか定義されていないためseventhとかは使えない。
だけど、もうひとつArray#forty_twoという素晴らしいメソッドが定義されていてこういうことができる。

[*(1..100)].forty_two  #=> 42

これが奇妙だと思われる方はこちらをどうぞ
人生、宇宙、すべての答え - Google 検索

時間の増える魔法のおまじない

Macでのお話。Winとかでも他にやり方があったはず。

まず、適当なエディタで/etc/hostsを開く

% sudo vim /etc/hosts

下のような感じでふだん時間を費やしてるWebサービスドメインを追記する。

127.0.0.1 twitter.com
127.0.0.1 www.nicovideo.jp
127.0.0.1 tumblr.com
127.0.0.1 facebook.com

こうすると追記したドメインにアクセスできなくなって、一日の時間が増えたり増えなかったり。
僕の場合はどうしても我慢しきれずに編集して元に戻してしまうことが多いので、あまり時間は増えません。

TextMateの補完(esc)が遠いからリマップしよう

補完するのにescキーはあまりにも遠すぎる。

環境設定 > キーボード > キーボードショートカット > アプリケーション
ここで+を押して追加する。アプリケーションにTextMateを選んで、名前をNext Completeとして、好きなキーを割り当てましょう。
TextMateの補完(esc)に別のショートカットを割り当てる方法

このエントリと同じようにすればできるのだけど、現在TextMateでは補完は"Next Complete"でなくて"Next Completion"なのでそこを置き換えて設定する。
同じようにして"Previous Completion"にもキーを割り当てることができる。
好きな空いてるキーに割り当てればOK

Rake 0.9でWARNINGが出るときの対処法

rake 0.9をインストールした状態で、Railsで何気なくrakeコマンドを打つと次のようなメッセージが出てくる。

% rake db:migrate
WARNING: Global access to Rake DSL methods is deprecated.  Please Include
    ...  Rake::DSL into classes and modules which use the Rake DSL methods.
WARNING: DSL method Hoge::Application#task called at /Users/uiureo/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

rakeするたびにWARNINGが表示されるのは気分がよくない。

Railsの作者のDHHはTwitterでこう発言している。

Rake 0.9はRailsと相性が良くないから、修正されるまではrake 0.8.7を使おうということだ。
rake 0.8.7をRailsで使うようにするには次のようにすればいい。

対処法

まず、rake 0.9.1をアンインストールするコマンドを実行する。

gem uninstall rake -v=0.9.1

RailsのGemfileに次のように書き加える。

gem 'rake', '0.8.7'

最後に、rakeのバージョンを更新するコマンドを実行。

bundle update rake

これでWARNINGが出なくなりました。めでたしめでたし。