blog.tnmt.info

to be or not to be ...

ターミナル好きに送るCUIなIRCクライアント環境のススメ for Windows (WeeChat + Growl for Windows)

ターミナル好きの皆さんこんにちわ。ところでIRCのクライアントって何使ってますか?

WindowsのIRCクライアントとしてはGUIのLimeChatがメジャーですが、今日はちょっと嗜好を変えたIRCクライアント環境を紹介します。

概要

for Windowsと言いつつ、いきなり外部のLinux Boxに依存した形になってますが、概要としてはこんな感じです。

   Windows                   Linux Box
+-----------+             +--------------+
|           |     ssh     |              |            
|           | ----------> |  +---------+ |           +------------+
|           |             |  | WeeChat | ----------> | IRC server |
|           |             |  +---------+ |           +------------+
| +-------+ |             |      |       |
| | Growl | <--------------------+       | 
| +-------+ |    notify   |              |
+-----------+             +--------------+
  1. WindowsクライアントからLinux BoxにsshログインしてWeeChatを実行
  2. WeeChatの機能拡張を利用した通知が送られる
  3. WindowsクライアントGrowlが通知を受け取りデスクトップ通知

WeeChat

WeeChatはCUIのIRCクライアントです。ターミナルで過ごす時間の長いアタナにうってつけ、あと何か見た目で少しだけ”出来るヤツ感”も味わるかもしれません。

同じCUIなIRCクライアントとしてはIrrsiがありますが、WeeChatの方がデフォルトの設定でもそこそこ使い勝手がよいのとPerl, Python, Ruby, Luaなどによる機能拡張が可能なのが魅力です。

インストール

RedHat系だったらyum install weechat(FC16だと今日現在で0.3.5), Debian系だったらapt-get install weechat(Ubuntu 11.10も今日現在で0.3.5)でインストールされます。

設定

起動はweechat-cursesです。起動直後はまだ何も設定されていないので順次設定をしていきます。quickstart通りにやればそんなにハマらないはずです。

サーバー追加

  • /server add foovar irc.foovar.net/6668 -ssl -autoconnect

irc.foovar.netというホストの6668ポートへの接続をfoovarという設定名で保存しています。-ssl, -autoconnectはそれぞれssl接続と、weechat起動時に自動的に接続するオプションです。

ユーザー設定

サーバーの接続設定ごとにユーザー情報の設定が行えます。

ニックネーム設定

  • /set irc.server.foovar.nicks "mynick1,mynick2,mynick3,mynick4,mynick5"

ユーザー名と実名設定

  • /set irc.server.foovar.username "My user name"
  • /set irc.server.foovar.realname "My real name"

利用のtips

設定が済んだら/connect foovarでサーバーに接続し、/join #channel1でチャンネルへjoin。困ったときは/helpすれば大体分かります。以下はこれやっておく・憶えておくと便利かもというもの。

  • チャンネル移動
    • /buffer #channel2で#channel2に移動
    • /alias b /bufferなaliasしておくと/b #channel2でも同じ動きに
    • joinしている各チャンネルの未読を見て回るならAlt-a
  • キーワード登録
    • /set weechat.looks.highlight "word1,word2,word3"でキーワード設定
  • join, quitを表示しない
    • /set irc.look.smart_filter onしてから/filter add irc_smart * irc_smart_filter *

Growl for Windows

これでWeeChatを利用出来る環境は整いましたが、LimeChatにあるようなポップアップ通知が無いため、キーワードやtalkに気付きにくいという欠点があります。そこでMacの通知ツールで有名なGrowlのWindows版をインストールして、WeeChatからの通知をデスクトップ表示出来るようにします。

インストール

Growl for Windowsからダウンロード。インストーラが付いてるので素直にインストール。

設定

  • Securityタブ
    • Allow network notificationsをチェック
    • WeeChatからの通知を受け入れる為のパスワードを設定

weechat-growl

続いてWeeChat側にGrowl通知を行う拡張を追加します。今回はPythonのweechat-growlを利用しました。

gntp

weechat-growlがGrowl Network Transport Protocol (GNTP)のバインディングを利用してるのでそれをpipでインストール。

1
sudo pip install gntp

weechat-growl

インストール

1
2
3
git clone https://github.com/sorin-ionescu/weechat-growl.git
cp weechat-growl/growl.py ~/.weechat/python/autoload/
cp weechat-growl/icon.png ~/.weechat/

設定

weechatで以下のコマンド

  • /set plugins.var.python.growl.hostname 192.168.X.XでGrowlが動いている自分のWindowsホストまたはIPを指定
  • /set plugins.var.python.growl.password foovarbuzzでGrowl側で設定したパスワードを指定
  • /python load growl.pyで拡張をロード

これで通知が来るようになります。growl.pyを見れば細かな通知の項目が分かりますので必要に応じて適宜設定します。デフォルトでもそこそこいい感じです。

まとめとか補足

WeeChatとGrowl for Windowsを利用した、WindowsでのCUIなIRCクライアント環境を紹介しました。

自分はtmuxを使ってるのですが、ターミナルマルチプレクサとの組み合わせれがこれまたよくて、windowもしくはpaneの一つをWeeChatに割り当てておくと、別作業と並行してIRCが見れたり、それぞれの行き来もマウス要らずなのがかなり重宝しています。

繰り返し、今回はfor Windowsと言いつつ別ホストのLinux Boxに依存した形になっていますが、CygwinがあればWeeChat cygwinもありますし、MacでもhomebrewでWeeChatがインストール出来ますので、weechat-growlの通知先ホストを自身(localhost)にする変更だけで、両方とも同じ方法でいけそうな感じです。試してないけど!

ということで Enjoy IRC !

/etc/hosts.allowで外部ファイルをincludeして使う

tcp_wrappers 好きの皆さんこんにちわ。 /etc/hosts.allow でアクセス制限管理してますか?

ふと、「/etc/hosts.allowでincludeって出来ないのかなあ」と思って

1
man hosts.allow

してみたところ、”PATTERNS” のところに

A string that begins with a ‘/´ character is treated as a file name. A host name or address is matched if it matches any host name or address pattern listed in the named file. The file format is zero or more lines with zero or more host name or address patterns separated by whitespace. A file name pattern can be used anywhere a host name or address pattern can be used.

アドレスを書く部分が ‘/’ で始まる場合はファイルで指定出来ると書いてあったので試してみました。

  • /etc/hosts.deny で “ALL: ALL” で全拒否
  • /etc/hosts.allow でホワイトリストとして管理

してるときに、 /etc/hosts.allow に以下のように記載し

1
sshd:    /etc/hosts.sshd_allow

includeするファイルを以下のように作成すると

/etc/hosts.sshd_allow
1
2
192.168.1.10
192.168.1.11

通常記載するような以下の動きと同じになります。

1
2
sshd:    192.168.1.10
sshd:    192.168.1.11

役割が違うサーバーのそれぞれの /etc/hosts.allow をバージョン管理していて、両方で共通のルールだけ別ファイルで一元管理などに便利に使えそうです。

Wordpress to Octopress

BlogをWordpressからOctopressに変更しました。

こちらの記事 を参考にpermalinkは変わらず。RSSも新しいURLにリダイレクト。

mizzyさんが scpでのデプロイ方法 を書いてくれてるので、Github Pages ではなくレンタルサーバーに乗せてます。

見た目も少ーしだけ変更。デザインとか分からなすぎて泣ける。

Fedora 16へのアップグレード (preupgrade-cli)

もはや、preupgrade-cli成功したよ報告にしかなってないですが。

1
sudo LANG=C preupgrade-cli "Fedora 16 (Verne)"
Loaded plugins: blacklist, langpacks, whiteout
No plugin match for: rpm-warm-cache
No plugin match for: remove-with-leaves
No plugin match for: auto-update-debuginfo
No plugin match for: refresh-packagekit
Loaded plugins: langpacks, presto
preupgrade-main (mirrorlist)
  url: http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-16&arch=$basearch
  now: http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-16&arch=x86_64
preupgrade (mirrorlist)
  url: http://mirrors.fedoraproject.org/mirrorlist?path=pub/fedora/linux/releases/16/Fedora/$basearch/os/
  now: http://mirrors.fedoraproject.org/mirrorlist?path=pub/fedora/linux/releases/16/Fedora/x86_64/os/
preupgrade-fedora (mirrorlist)
  url: https://mirrors.fedoraproject.org/metalink?repo=fedora-16&arch=x86_64
  now: https://mirrors.fedoraproject.org/metalink?repo=fedora-16&arch=x86_64
preupgrade-updates (mirrorlist)
  url: https://mirrors.fedoraproject.org/metalink?repo=updates-released-f16&arch=x86_64
  now: https://mirrors.fedoraproject.org/metalink?repo=updates-released-f16&arch=x86_64
http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/16/Fedora/x86_64/os//.treeinfo: [Errno 14] HTTP Error 404 - Not Found : http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/16/Fedora/x86_64/os//.treeinfo
Trying other mirror.
Fetched treeinfo from http://mirrors.isu.net.sa/pub/fedora/linux/releases/16/Fedora/x86_64/os//.treeinfo
treeinfo timestamp: Thu Nov  3 12:10:12 2011
MEMORY                                                                                                                                                                                     |  883 B     00:00
vmlinuz                                                                                                                                                                                    | 3.9 MB     00:24
initrd.img                                                                                                                                                                                 | 129 MB     13:11
preupgrade-updates/group                                                                                                                                                                   | 1.9 MB     00:00
preupgrade-fedora/group_gz                                                                                                                                                                 | 431 kB     00:00
preupgrade-updates/group_gz                                                                                                                                                                | 431 kB     00:00
--> Running transaction check
---> Package abattis-cantarell-fonts.noarch 0:0.0.6-1.fc15 will be updated
---> Package abattis-cantarell-fonts.noarch 0:0.0.7-1.fc16 will be an update
---> Package acl.x86_64 0:2.2.49-11.fc15 will be updated
---> Package acl.x86_64 0:2.2.51-2.fc16 will be an update
---> Package adwaita-cursor-theme.noarch 0:3.0.2-1.fc15 will be updated
---> Package adwaita-cursor-theme.noarch 0:3.2.1-2.fc16 will be an update
---> Package alsa-tools-firmware.x86_64 0:1.0.24.1-2.fc15 will be updated
---> Package alsa-tools-firmware.x86_64 0:1.0.24.1-3.fc16 will be an update
---> Package alsa-utils.x86_64 0:1.0.24.1-3.fc15 will be updated
---> Package alsa-utils.x86_64 0:1.0.24.1-5.fc16 will be an update
---> Package apg.x86_64 0:2.3.0b-10.fc15 will be updated
---> Package apg.x86_64 0:2.3.0b-11.fc16 will be an update
---> Package apr.x86_64 0:1.4.5-1.fc15 will be updated
---> Package apr.x86_64 0:1.4.5-1.fc16 will be an update
---> Package apr-util.x86_64 0:1.3.12-1.fc15 will be updated
---> Package apr-util.x86_64 0:1.3.12-1.fc16 will be an update
---> Package at.x86_64 0:3.1.12-9.fc15 will be updated
---> Package at.x86_64 0:3.1.13-3.fc16 will be an update
---> Package atk.x86_64 0:2.0.0-1.fc15 will be updated
---> Package atk.x86_64 0:2.2.0-2.fc16 will be an update

(..snip)

--> Finished Dependency Resolution
Packages we need to download
ConsoleKit.x86_64                        0.4.5-1.fc15           preupgrade-fedora
ConsoleKit-libs.x86_64                   0.4.5-1.fc15           preupgrade-fedora
GConf2.x86_64                            3.2.0-1.fc16           preupgrade-fedora
NetworkManager-glib.x86_64               1:0.9.1.90-5.git20110927.fc16
                                                                preupgrade-fedora
abattis-cantarell-fonts.noarch           0.0.7-1.fc16           preupgrade-fedora
acl.x86_64                               2.2.51-2.fc16          preupgrade-fedora
adwaita-cursor-theme.noarch              3.2.1-2.fc16           preupgrade-fedora
alsa-tools-firmware.x86_64               1.0.24.1-3.fc16        preupgrade-fedora
alsa-utils.x86_64                        1.0.24.1-5.fc16        preupgrade-updates
apg.x86_64                               2.3.0b-11.fc16         preupgrade-fedora
apr.x86_64                               1.4.5-1.fc16           preupgrade-fedora
apr-util.x86_64                          1.3.12-1.fc16          preupgrade-fedora
at.x86_64                                3.1.13-3.fc16          preupgrade-fedora
atk.x86_64                               2.2.0-2.fc16           preupgrade-fedora
atkmm.x86_64                             2.22.5-1.fc16          preupgrade-fedora
attr.x86_64                              2.4.46-2.fc16          preupgrade-fedora
audit.x86_64                             2.1.3-4.fc16           preupgrade-fedora
audit-libs.x86_64                        2.1.3-4.fc16           preupgrade-fedora

(..snip)

yum-metadata-parser.x86_64               1.1.4-5.fc16           preupgrade-fedora
yum-presto.noarch                        0.7.1-1.fc16           preupgrade-fedora
yum-utils.noarch                         1.1.31-2.fc16          preupgrade-fedora
zlib.x86_64                              1.2.5-4.fc16           preupgrade-fedora
Total download size: 270.2MB
Download packages?
Is this ok [y/N]: y
Setting up and reading Presto delta metadata
preupgrade-updates/prestodelta                                                                                                                                                             |  64 kB     00:00
preupgrade-fedora/prestodelta                                                                                                                                                              | 791 kB     00:00
Processing delta metadata
Download delta size: 1.5 M

(..snip)

(526/532): yajl-1.0.12-1.fc16.x86_64.rpm                                                                                                                                                   |  28 kB     00:00
(527/532): yelp-xsl-3.2.1-1.fc16.noarch.rpm                                                                                                                                                | 278 kB     00:00
(528/532): yum-3.4.3-5.fc16.noarch.rpm                                                                                                                                                     | 1.0 MB     00:00
(529/532): yum-langpacks-0.2.4-1.fc16.noarch.rpm                                                                                                                                           |  18 kB     00:00
(530/532): yum-metadata-parser-1.1.4-5.fc16.x86_64.rpm                                                                                                                                     |  26 kB     00:00
(531/532): yum-presto-0.7.1-1.fc16.noarch.rpm                                                                                                                                              |  33 kB     00:00
(532/532): zlib-1.2.5-4.fc16.x86_64.rpm                                                                                                                                                    |  82 kB     00:00
Generating metadata for preupgrade repo
preupgrade                                                                                                                                                                                 | 3.7 kB     00:00
preupgrade/primary_db                                                                                                                                                                      | 2.3 MB     00:13
preupgrade/group                                                                                                                                                                           | 1.9 MB     00:10
Spawning worker 0 with 547 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
Preparing system to boot into installer
DEBUG /sbin/grubby --title="Upgrade to Fedora 16 (Verne)" --remove-kernel="/boot/upgrade/vmlinuz" --add-kernel="/boot/upgrade/vmlinuz" --initrd="/boot/upgrade/initrd.img" --args="preupgrade repo=hd::/var/cache/yum/preupgrade  ks=hd:UUID=3e6914b1-5eed-4f85-8465-4eb52bcc36d6:/upgrade/ks.cfg"
Probing devices to guess BIOS drives. This may take a long time.
All finished. The upgrade will begin when you reboot.

あとはメッセージの通りrebootするだけ。

以前にFeodra 10から12Fedora 13から14とかやってますが、ハマりどころはもうなくて、サクっとコマンド一発。

/boot 以下の容量の兼ね合いで、10から12の時には容量足らない時には問答無用で失敗、13から14の時にはその旨警告が出て、reboot後にアップグレード用のパッケージがダウンロードされるような動きでしたが、今回は容量に余裕がある / 配下にダウンロードされているよう(な動きだった)で、詰まりどころは皆無でした。

関係ないけど、Fedora 15のコードネーム “Lovelock” って何かかっこ良くて好きでした。

#isucon に参加してきました

なんでもありのWebアプリケーション高速化バトル、#isucon 開催のお知らせ

参加経緯 後、@hansode さんを含め、@kyanny さんと俺の3人、”チーム情熱会” で参加してきました。 結果は審査用の3分間ベンチマークがこけたので、参考数値の100,604/minが最終でした。

チームでやれたこと

  • mysqlのパラメータ調整(innodb周りとか)
  • mysql問い合わせ結果をmemcachedでキャッシュ
  • リバースプロキシをapacheからnginxに変更

刺身さんがアプリで入れてくれたクエリキャッシュが一番効果あったと思います。 俺はリバースプロキシの変更をやったくらいで、nginxにしてパフォーマンス下がったときはちょっと涙目だったけどベンチツールのhttpのkeep-alive罠を回避出来たのは良かったかな。 DBがボトルネックになってて原因になるクエリがあったのは早い段階で気づいていたけど、俺のSQLレベルが低すぎて全然役に立ててなかった。。

終わった後の優勝チーム”fujiwara組”の @fujiwara さんと、最終的に3位になるかもしれない? 準優勝チーム”いんふらえんじにあー”の @netmarkjp さんからのつぶやき引用。

ばばさんのはギクッというか、ああ俺だわっていう感じが。自分が分かることしか出来ないのは勿論あるんだけど。実力を知るいい機会になりました。

今回のチューニングのポイント・やり方は自分のお作法にもフィードバックして、あとほぼ今回初めて触ったけどnginx周りについては色々勉強になったので実業務にも活かせればと思います。

主催のlivedoorの皆様、参加者の皆様お疲れ様でした。素敵・素晴らしいイベントだったと思います。 チーム情熱会のお二人も一緒に出させてもらって楽しかったです、ありがとうございました。

あー、復習でひとりisuconやろう。そのあとチームでisucon振り返りもいいなー。