移転
サブidに移転しています。→hashy1126's blog
一時領域(テンポラリ領域)を使わずに入れ替えする方法
XORを3回すると入れ替えできます。
#define swap(a,b) a^=b^=a^=b
このマクロは完璧じゃない点に注意(副作用あり)
はてなの場所
いささか現実的ではありませんね。新しいオフィスの住所はまだ公開されていませんが、社長がべらべらと情報を公開しているのでビルが特定されるのも時間の問題でしょう。
共有サーバにPlagger入れてみた。
入れ方は(略
なぜなら、入れたところでメモリが足らなくてエラーになるから
Out of memory during "large" request for 2101248 bytes, total sbrk() is 530610176 bytes at /home/XXXX/local/lib/perl5/Plagger/Thing.pm line 24.
そりゃあ共有サーバですもんね。
Net::MSN
Plagger (野良?)プラグインのソースを参考に msn メッセンジャーへ接続する bot プログラムを作成しました。
うしくんのメッセンジャー復活しました。( yomiusi あっと underdone.net です)
ウェブメッセンジャーから話しかけても応答が返ってくるのを確認しました。
use strict; use warnings; use Net::MSN; ## MODIFY THESE FOR YOUR BOT ## my $email = 'ボットのメールアドレス'; my $password = 'ボットのパスワード'; # patch for Net::MSN BEGIN { my $process_event = Net::MSN->can('process_event'); undef *Net::MSN::process_event; *Net::MSN::process_event = sub { my ( $self, $this_self, $line, $fh ) = @_; print {*STDERR} ( substr $line, 0, 60 ) . "\n"; my ( $cmd, @data ) = split /\s/msx, $line; if ( !$cmd ) { return; } if ( $cmd eq 'LST' ) { $self->buddyupdate( $data[0], $data[1], 'NLN' ); return 1; } elsif ( $cmd eq 'QNG' ) { if ( $self->if_callback_exists('_on_QNG') ) { &{ $self->{Callback}->{_on_QNG} }; } } goto &{$process_event}; }; return; } sub onmsg { my ( $sb, $chandle, $friendly, $message ) = @_; # $chandle がメッセージを送った人のアカウント # $friendly がメッセージを送った人のニックネーム # $message がメッセージ内容 $sb->sendmsg( "返事の内容" ); } sub start { my $is_alive = 1; my $is_join = 0; local $SIG{INT} = local $SIG{HUP} = local $SIG{QUIT} = local $SIG{TERM} = sub { $is_alive = 0 }; my $msn = Net::MSN->new; $msn->set_event( _on_QNG => sub { if ( $msn->is_buddy_online( $email ) ) { $msn->call( $email ); } }, on_message => sub { my ( $sb, $chandle, $friendly, $message ) = @_; onmsg( $sb, $chandle, $friendly, $message ); }, on_join => sub { $is_join = 1; }, on_bye => sub { $is_alive = 0; }, ); $msn->connect( $email, $password ) or $is_alive = 0; my $timeout = 60; my $interval = 3; my $t = time; while (1) { last if !$is_alive; $msn->check_event; } $msn->disconnect; return; } start();