トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

チャボ 再始動

2006/12/09から5年半ぶりにチャボが再始動した。サーバーがなくなってチャボの住処がなくなっていたが、さくらサーバーでチャボがしゃべりだしたよ(笑) まだ、今(9/4)はIRCチャネルでは喋れない…(5年も経つと基本ソフトのバージョンが上がってしまいNet::IRCがインストール出来ない(泣)ゆっくり考えよう!!!

始まり

Niigata.pm tech talk #2ではデータ処理をテーマに発表がいろいろ有った。その中で形態素解析関係の発表が、いくつかありチャボの事を思い出した。(もう5年も動いていない)雑談の中でさくらVPSは何でも出来ると聞いたのでさくらでチャボを再始動しようと思った。ここからチャボの再始動が始まった。

IRCに生息

Net::IRCのインストールで警告が出る

DANGER, WILL ROBINSON! DANGER!

This module has been deprecated, abandoned, and is no longer supported. It has
not seen active development in five years, and its original author has moved on.
We *STRONGLY* recommend you port your code to either Bot::BasicBot or
POE::Component::IRC. Please feel free to stop by irc.freenode.net/#perl for help
making this transition. Or, if you insist on proceeding, please type the
following line exactly as is and then press Enter:
[google 翻訳]
危険、ロビンソンでしょう!危険!

このモジュールは、非推奨に放棄し、もはやサポートされませんされています。それはある
5年後には活発な開発を見て、元の著者は上に移動していません。
我々は*強く*あなたはどちらボットへのコードの移植をお勧めします:: BasicBotまたは
POE :: Component :: IRCに。助けをirc.freenode.net/#perlによって停止すること自由
に感じなさい
この移行を行う。先に進むにこだわる場合は、入力してください
次の行はまったく同じですし、Enterキーを押します:

もうサポートしてないからPOE::Component::IRCに移行しなさい的な… しかし、とりあえずチャボを再始動したかったのでMakefile.PLを読むと

exit 0 if $ENV{AUTOMATED_TESTING};
my $ok = 'I acknowledge that Net::IRC is unsupported and I wish to proceed.';
my $warning = <<WILLROBINSON;
--------------------------------------------------------------------------------
********************************************************************************
DANGER, WILL ROBINSON! DANGER!

This module has been deprecated, abandoned, and is no longer supported. It has
not seen active development in five years, and its original author has moved on.
We *STRONGLY* recommend you port your code to either Bot::BasicBot or
POE::Component::IRC. Please feel free to stop by irc.freenode.net/#perl for help
making this transition. Or, if you insist on proceeding, please type the
following line exactly as is and then press Enter:

$ok
********************************************************************************
--------------------------------------------------------------------------------
WILLROBINSON

-t STDIN or die $warning;
warn $warning;
chomp(my $acceptance = <STDIN>);
die "Refusing to install due to lack of confirmation" unless $acceptance eq $ok; 

I acknowledge that Net::IRC is unsupported and I wish to proceed.と入力すればインストール出来るらしいので``die "Refus . . .''の行をコメントアウトしてインストールを行う。

I acknowledge that Net::IRC is unsupported and I wish to proceed.
[google 翻訳]
私はNet :: IRCがサポートされていないことを認めると私は進みたい。

久しぶりに"#reudyroom:*.jp"でお話し出来るかと思ったら入室出来ない(誰もいない?)ので"#niigatapm"に入室してみる。サーバーの文字コードがutfになっているのでチャボもutfに対応する。

[00:35:11] <Chabo_V2> ここはbotOKですか?あんまりオシャベリ上手くありませんが宜しくお願いします
[00:35:38] <neko_gata_s> 変に負荷なければbot大丈夫っす

で入室の許可をもらったつもりなのでもう少し"#niigatapm"に生息するこ事にする。何処かにbotが生息しているチャットルームは無いかしら?

メモ

  • http://www21051ue.sakura.ne.jp/chabo/chatbot.cgi
    • 9/4 10:00 まだしゃべれず…
    • 9/5 やっと喋り出す。だかNet::IRCがインストール出来ず…
    • 9/10 IRCでも喋り出す(#niigatapmに仮に生息)
  • サクラVPS手配
    • ubuntu12.04セットアップ
    • apache インストール
    • mysql インストール
    • データロード
mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> load data infile '/tmp/chat.data' into table chatdata;
ERROR 29 (HY000): File '/tmp/chat.data' not found (Errcode: 13)
mysql>
mysql> quit

http://ubuntuforums.org/showthread.php?t=822084

http://webcache.googleusercontent.com/search?q=cache:O9hkDDVbKsUJ:ubulog.blogspot.com/2009/06/ubuntu-apparmor.html+apparmor.d&cd=1&hl=ja&ct=clnk&gl=jp&lr=lang_ja

Code:

sudo vi /etc/apparmor.d/usr.sbin.mysqld/usr/sbin/mysqld {
...
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid w,
/var/run/mysqld/mysqld.sock w,
/tmp/ r,
/tmp/* rw,
}

Code:

# sudo /etc/init.d/apparmor reload

MySQL 文字化けを防ぐ、文字コードの確認と設定

http://ext.omo3.com/linux/mysql_character_set.html

■文字コードを設定する

/etc/my.cnf を編集する。

[client]
default-character-set=utf8
[mysqld]
default-character-set = utf8
skip-character-set-client-handshakecharacter-set-server = utf8
collation-server = utf8
_general_ciinit-connect = SET NAMES utf8

[client]と[mysqld]の設定に、上記の記述を加える。

utf8: UTF-8を指定するとき。

sjis: Shift JIS を指定するとき。

ujis: EUC JP を指定するとき。

skip-character-set-client-handshakeの指定は、MySQLが勝手に内部変換しないようにするため。

ChaSen のインストール方法

http://www.asahi-net.or.jp/~yw3t-trns/namazu/chasen/index.htm


Done! Check /var/lib/chasen/dic/naist-jdic-utf8 directory.
update-alternatives: using /usr/share/chasen/chasenrc-utf8 to  provide /etc/chasenrc (chasenrc) in auto mode.
Setting up chasen (2.4.4-17) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

darts のインストール:

  • 解凍

tarball を解凍したい場所に置いて、tar でアーカイブを解凍します。

$ tar xvzf darts-0.2.tar.gz

  • configure

解凍したディレクトリに移動して、configure を実行します。

$ cd darts-0.2

$ ./configure

  • make

コンパイル、チェックを行い、root でインストールを行います。

$ make

$ make check

$ su

# make install

エラーが発生しなければ、インストールは終了です。

ChaSen のインストール:

  • 解凍

tarball を解凍したい場所に置いて、tar でアーカイブを解凍します。

$ tar xvzf chasen-2.3.3.tar.gz

  • configure

解凍したディレクトリに移動して、configure を実行します。 (ここでは、libiconv のパスを指定しています。)

$ cd chasen-2.3.3

$ ./configure --with-libiconv=/usr/local

または単に

$ ./configure

  • make

コンパイル、チェックを行い、root でインストールを行います。

$ make

$ make test

$ su

# make install

エラーが発生しなければ、インストールは終了です。

https://forums.ubuntulinux.jp/viewtopic.php?id=8530

$ sudo apt-get install build-essentialしてください。それで入ります。gcc-c++ はfedora 系での呼び方です。厳密にはまったく同じものではないでしょうが・・・。

--------------------------------------------------------------------------------BNU is Bootang Never forget UbuntuUSB means $ /usr/sbin/bootang : No such file or directory._.?

UTF8化 (2014/4/5)

時代の流れに乗ってUTF8化した。もともとScriptもDBもEUCだった。当時はEUCがWebで文字化しないと言われていたし確かに問題なかった。でも、Niigata.pmのircに参加するようになった時、ircはUTF-8ベースだったのでircのクライアントをUTF8化したら`〜'とかが`?'で表示される様になった為、DBもUTF8にした。文字変換が入るとなにかと不具合が出る。(気がする)UTF8にしたら`´↓きキΝЛ┃悪鵜沖貝粥'の丸数字も使える様になった。ハングルとか、アラビア文字とかも使えるかもしれない?入力方法がわからないが…

script変換

  • nkf -w chatbot.cgi > chatbot_utf.cgi

nkfで文字コードをeucからutf8へ変更する

DB文字コード変換

テーブルの文字コードをutf8に変更する。テーブルを変更してもカラムは元の文字コードを保持するのでカラムの文字コードも変更する。

  • ALTER TABLE chatdata CHARSET=utf8;
  • ALTER TABLE chatdata MODIFY chat text CHARACTER SET utf8;

websocketで話せるクライアントを作った

[2014/4/14]ついにWebSocketで話せるようになったMojolicious + WebSocket perl memo参照

Twitter

Twitterで話が出きるようになったよ。(フォローしてあげて)--- 2014/5/5

$ cpanm -v
cpanm (App::cpanminus) 1.5007 on perl 5.014002 built for x86_64-linux-gnu-thread-multi
$ sudo cpanm Net::Twitter
--> Working on Net::Twitter
Fetching http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Net-Twitter-4.01004.tar.gz ... OK
Configuring Net-Twitter-4.01004 ... OK
Invalid version format (non-numeric data) at /loader/0x2003530/App/cpanminus/script.pm line 1134.
$ 
$ sudo cpanm  Net::SSLeay
--> Working on Net::SSLeay
Fetching http://www.cpan.org/authors/id/M/MI/MIKEM/Net-SSLeay-1.58.tar.gz ... OK
Configuring Net-SSLeay-1.58 ... OK
Building and testing Net-SSLeay-1.58 ... FAIL
! Installing Net::SSLeay failed. See   .cpanm/work/1398945043.23988/build.log for details. Retry with --force to force install it.
$ vim  .cpanm/work/1398945043.23988/build.log

Running Mkbootstrap for Net::SSLeay ()
chmod 644 SSLeay.bs
/usr/bin/perl "-Iinc" /usr/share/perl/5.14/ExtUtils/xsubpp  -typemap  /usr/share/perl/5.14/ExtUtils/typemap -typemap typemap  SSLeay.xs > SSLeay.xsc && mv SSLeay.xsc SSLeay.c
cc -c   -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g   -DVERSION=\"1.58\" -DXS_VERSION=\"1.58\" -fPIC "-I/usr/lib/perl/5.14/CORE"   SSLeay.c
SSLeay.xs:153:25: fatal error: openssl/err.h: No such file or directory
compilation terminated.
make: *** [SSLeay.o] Error 1
-> FAIL Installing Net::SSLeay failed. See  /home/john/.cpanm/work/1398944624.23822/build.log for details. Retry with -- force to force install it.
~    

Net::SSLeay がインストールできないときはcpanm などで Net::SSLeay をインストールしようとして "openssl/err.h" がないよ!と怒られたときは

# aptitude install libssl-dev

AnyEvent::Twitter::Stream の素敵さを今更ながら実感してみる

#!/usr/bin/perl
use strict;
use AnyEvent::Twitter;
use AnyEvent::Twitter::Stream;
use Encode;
use utf8;
use Mojo::UserAgent;
use Mojo::URL;

my $consumer_key = 'AAAAAAAAAAAAAAAAAAAAAAAAA',
my $consumer_secret = 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB',
my $token = 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC';
my $token_secret = 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD';

my $cv = AE::cv;
 
my $twitty = AnyEvent::Twitter->new(
      consumer_key        => $consumer_key,
      consumer_secret     => $consumer_secret,
      access_token        => $token,
      access_token_secret => $token_secret,
);
my $done = AnyEvent->condvar;
my $listener = AnyEvent::Twitter::Stream->new(
      consumer_key        => $consumer_key,
      consumer_secret     => $consumer_secret,
      token               => $token,
      token_secret        => $token_secret,
      method          => "userstream",
      on_tweet        => sub {
        my $tweet = shift;
 
        my $user = $tweet->{user}{screen_name};
        my $text = ($tweet->{text} || '');
        return unless $user && $text;
	return if($user =~ /chabo60591182/);
#        if ($text=~/#oreimo/) {print '#oreimo'.encode("sjis",$text);}

        # チャボに話しかける  --- START
        my $ua = Mojo::UserAgent->new;
        my $name_euc = decode_utf8($user);
        my $ans = $ua->get(Mojo::URL->new("http://www21051ue.sakura.ne.jp/chabo/chatbot_utf8.cgi?name=$user&action=TALK&chat=$text"))->res->body;
        my $txt = '';
        if($ans =~ m|<answer>(.*)</answer>|){
            $txt = decode('UTF-8',$1);
            $twitty->post('statuses/update',{status => $txt},
                      sub{});
        }
        # チャボに話しかける  --- END

#        print encode('utf-8',$text) . "\n";
     },
     on_error => sub {
        my $error = shift;
        warn "ERROR: $error";
        $done->send;
     },
     on_eof   => sub {
        $done->send;
     },
);
$cv->recv;

メモ

https://metacpan.org/pod/Twitter::API