IRCサーバーとロイディ

Standard

人工無能について知る必要があって環境を作ったのでメモ。

  • unit hostingという国産のIaaSを利用。
    OSはCent OS 5.9 (unit hostingは今のところこれしか選べない)
  • IRCサーバーはyumでインストールできるircd-hybridを選択

 

ロイディとは

東京工業大学 ロボット技術研究会の市川 宙 (Gimite) さんが中心となって作成した日本語人工無脳。Rubyで書かれている。
http://rogiken.org/SSB/reudy.html
 
本家のロイディ(Reudy Ver.3.09)がRuby 1.9に対応していないので、今回は1.9でも動くように改変されたReudy1.9をRuby 2.0で動かした。
人工無能 Reudy (ロイディ) 1.9
https://github.com/Glasssaga/Reudy19
 
 
 

IRCサーバーの準備

IRCサーバー用にunit hosting上にサーバーを用意する。unit hostringのサーバー構築オプションにはユーザスクリプトなるものがあって、シェルスクリプトのURIを指定しておくと、構築完了後にrootユーザーでそのスクリプトを実行してくれる。Gist使うのが楽。
https://gist.github.com/bugcloud/5363980
 
↑でRVMとかrbenvでRubyのインストールとかできる状態になるはず。RPMforgeとEPELリポジトリも追加される。ircd-hybirdはEPELにあるのでyumでインストールする。デフォルトだと設定項目おおすぎて涙目になるのでシンプルなやつをコピーしてきて必要な部分だけ編集。

yum --enablerepo=epel install ircd-hybrid
cp /etc/ircd/ircd.conf /etc/ircd/ircd.conf.orig
cp -irp /usr/share/doc/ircd-hybrid-7.2.3/simple.conf /etc/ircd/ircd.conf

 
/etc/ircd/ircd.conf

serverinfo {
        name = "irc.example.com";
        sid = "000";
        description = "IRC Server";
        hub = no;
};

別にいらないけど一応パスワードを設定。

# YOUR_SALTは適当に変更
/usr/libexec/ircd/mkpasswd -m -s YOUR_SALT

“plaintext:”って表示されるのでパスワードを入力するとハッシュ化されたパスワードが表示される
/etc/ircd/ircd.confを編集

auth {
        user = "*@*";
        class = "users";
        password = "↑で表示されたパスワード";
        encrypted = yes;
};

 
起動と自動起動設定

service ircd start
chkconfig ircd on

 
終わり。これでIRCクライアントから接続可能なはず。SSLとか使ってないので変なこと言うのはやめましょう。
 
 
 

ロイディ

RVMでRubyをインストールする。その名の通りRuby 1.9向けに作られたReudy1.9はRuby 2.0でも動いた。Ruby 1.9でも動かしたけど、2.0のときだけ、ときどき発言してこなくなることがある気がした。
 

# Install RVM and Ruby 2.0
curl -#L https://get.rvm.io | bash -s stable --autolibs=3 --ruby

適当なディレクトリに https://github.com/Glasssaga/Reudy19 をcloneしたら設定ファイル(public/setting.yml)にIRCサーバーの情報とかを書く。:encoding:を”UTF-8“にしたら動かなかった。いつもの

incompatible character encodings: ASCII-8BIT and UTF-8

的なの出てオチる。
 
lib/reudy/bot_irc_client.rbに1行追加すると動く。

 48           #受信ループ。
 49           while line = sock.gets
 50             line = line.force_encoding(@user.settings[:encoding] || "ISO-2022-JP")
 51             on_recv(line)

 

# publicは設定ファイルやDB,ログのディレクトリ
ruby irc_reudy.rb public

でロイディ起動。publicディレクトリをコピーしてsetting.ymlのニックネームだけ変えれば複数のロイディを投入できる。
 
2013-04-12

20130412

 
一見ただのオウム返しに見えるけど、何気に会話として成立する率高い。

[メモ][MySQL] homebrewでMySQL 5.6.10にアップデートしたら”ERROR 2013 (HY000): Lost connection to MySQL server during query”って出るようになった

Standard

ユーザの追加とか、特定のSQLを発行したときだけエラーはいて強制的にMySQLが再起動されたりするようになってマジ死んだわって思ってたら解決した。
 
http://dba.stackexchange.com/questions/35394/mysql-5-6-on-os-x-10-8-2-disconnects-on-user-creation
http://stackoverflow.com/questions/6288103/native-table-performance-schema-has-the-wrong-structure/7834705#7834705
 

brew upgrade mysql

の後は、手動で

mysql_upgrade -u root -p

をしないといけないらしい。

[Mac] Finderでssh使ってサーバをマウントする

Standard

2012/10/26追記

FUSE for OS Xを使った方が楽でした。
http://osxfuse.github.com/

sshfs bugcloud.com:/somewhere ~/mounts/bugcloud.com

 
 
 
 
UbuntuのNautilusだと、普通に”sftp://USER@SERVER”ってやるとマウントできるし、~/.sshのconfig設定使ってくれるし、F3ボタンでダブルペインにしとけば捗るわけなんですが、MacだとMacfusionっていうのを使わないといけないらしい。設定とかのメモ。
 
MacFUSEのインストール
 
MacFUSEの最新版が必要なのでインストール。
http://code.google.com/p/macfuse/から.dmgがダウンロードできるのでインストール。port(sudo port install macfuse)でもインストールできる。
 
 
Macfusionのインストール
 
http://macfusionapp.org/からダウンロードして、アプリケーションにでもコピーして起動。なんか最初はサーバの設定できなかった。[Macfusion] -> [Preferences]から、”When I log in, start”のとこをどっちもチェックしてからログアウト、ログイン。メニューバーになんか出てくるのでそこからサーバの追加とかできる。よ。

[android] WebViewからローカル画像を参照する

Standard

これも大人の事象がないと使わなそうだけど。
プログラム内でhtml文字列を生成して、WebView#loadData(html, “text/html”, “UTF-8″) とかやりたいときに、

String html = "<!DOCTYPE html><html><head><title>Sample</title></head><body>" +
"<img src\"PATH_TO_LOCAL_IMAGE\"></body></html>";

って感じでimgタグのsrcにAPP_ROOT/res/drawable/ 配下の画像を使いたいとかそんな。APP_ROOT/assets/ 配下にhtmlファイルを作ってやれば普通に相対パスでAPP_ROOT/assets/img/ 以下を参照できるんだけど、そうもいかないとき。(html文字列内のjavascriptの中に端末情報を埋め込まないといけないとか)
 
 
解決策はWebView#loadDataWithBaseURLの第一引数に参照したいディレクトリのURIを指定する。です。APP_ROOT/res/drawable/unbaba.pngって画像を指定するとしたらこう。

String html = "<!DOCTYPE html><html><head><title>Sample</title></head><body>" +
"<img src\"unbaba.png\"></body></html>";
webView.loadDataWithBaseURL("file:///android_res/drawable/", html, "text/html", "UTF-8", null);

 
ドキュメントをちゃんと読みましょうっていうお話。
 
 
参考:http://remotedroid.net/blog/2011/01/14/referencing-drawables-in-html-in-androids-webview/