新規作成
OpenIDで認証してエントリーを新規作成します
共有
エントリーにはOpenIDで閲覧と編集に制限かけることができます
変更履歴
編集履歴もあるので、コラボレーションにも活用できます

plagger-ircbotをPlagger::Crypt対応させる

対応してなかったので。

commitしていいですかね?

Index: bin/plagger-ircbot
===================================================================
--- bin/plagger-ircbot  (revision 2044)
+++ bin/plagger-ircbot  (working copy)
@@ -10,6 +10,7 @@
 use YAML;
 
 use Plagger::ConfigLoader;
+use Plagger::Crypt;
 
 use POE qw(
     Session
@@ -115,7 +116,7 @@
             Username => $ENV{USER},
             Server   => $config->{server_host},
             Port     => $config->{server_port} || 6667,
-            Password => $config->{server_password} || undef,
+            Password => $config->{server_password} ? Plagger::Crypt->decrypt($config->{server_password}) :  undef,
         }
     );
 }
created by blog.nomadscafe.jp

HTML::Template::Proのベンチマーク

HTML::Templateとの比較

#!/usr/bin/perl

use strict;
use HTML::Template;
use HTML::Template::Pro;
use Benchmark;

my $html = <<EOF;
<TMPL_LOOP NAME=list><TMPL_IF NAME=key><TMPL_VAR NAME=key>,<TMPL_VAR NAME=value><br></TMPL_IF>
</TMPL_LOOP>
EOF

my @list;
map { $list[$_] = { key=>$_, value => rand($_) } } 0..29;

Benchmark::timethese(2000, {
        'HTML::Template' => \&htmltmpl,
        'HTML::Template::Pro' => \&htmltmplpro,
});

sub htmltmpl{
        my $tmpl = HTML::Template->new(
                scalarref => \$html,
                die_on_bad_params=>0
        );
        $tmpl->param('list',\@list);
        $tmpl->output;
}

sub htmltmplpro{
        my $tmpl = HTML::Template::Pro->new(
                scalarref => \$html,
                die_on_bad_params=>0
        );
        $tmpl->param('list',\@list);
        $tmpl->output;
}
結果
Benchmark: timing 2000 iterations of HTML::Template, HTML::Template::Pro...
HTML::Template: 10 wallclock secs (10.29 usr +  0.00 sys = 10.29 CPU) @ 194.36/s (n=2000)
HTML::Template::Pro:  2 wallclock secs ( 1.69 usr +  0.01 sys =  1.70 CPU) @ 1176.47/s (n=2000)

TTとの比較

#!/usr/bin/perl

use strict;
use Template;
use HTML::Template::Pro;
use Benchmark;

my $htpro = <<EOF;
<TMPL_VAR EXPR="comma(num)">
EOF

my $tt = <<EOF;
[% USE Comma %]
[% num | comma %]
EOF

Benchmark::timethese(2000, {
            'TT'                             => \&template,
                'HTML::Template::Pro' => \&htmltmplpro,
                });

sub template {
       my $template = Template->new();
       $template->process(\$tt, {num=>1000}, \my $output);
}

sub htmltmplpro{
        my $tmpl = HTML::Template::Pro->new(
                scalarref => \$htpro,
                die_on_bad_params=>0
        );
        $tmpl->register_function( 'comma', sub {
                local $_ = shift;
                1 while s/((?:\A|[^.0-9])[-+]?\d+)(\d{3})/$1,$2/s;
                return $_;
                } );
        $tmpl->param('num',1000);
        $tmpl->output;
}
結果
Benchmark: timing 2000 iterations of HTML::Template::Pro, TT...
        HTML::Template::Pro:  1 wallclock secs ( 0.44 usr +  0.01 sys =  0.45 CPU) @ 4444.44/s (n=2000)
        TT: 10 wallclock secs ( 9.92 usr +  0.04 sys =  9.96 CPU) @ 200.80/s (n=2000)
created by blog.nomadscafe.jp

はあ、

てすとてす。

created by https://me.yahoo.co.jp/a/sIkrNLoFa7s5R0BMAITm5klPzA--#d0521

てすてす

ぐっぴたぶたぶ

ぐっぴたぶたぶ


ぶひー!

created by https://id.mixi.jp/25661/friends/25661

きねんぱぴこ

はあーい

created by https://id.mixi.jp/105

Crypt::SSLeayでproxyエラーになるときの対策

[client] => [Apache mod_proxy] => [server]

っていう環境で時々つながらない事があるってので数日間悩んでいたんだけど、

Crypt::SSLeayのrtにでてた。


#33954: CONNECT is not robust to fragmentation of HTTP headers


これに対応するパッチがこれ

--- Crypt-SSLeay-0.57/lib/Net/SSL.pm.orig       2008-08-13 12:13:33.000000000 +0900
+++ Crypt-SSLeay-0.57/lib/Net/SSL.pm    2008-08-13 12:13:58.000000000 +0900
@@ -361,8 +361,11 @@
 
     $connect_string .= $CRLF;
     $self->SUPER::send($connect_string);
-    my $header;
-    my $n = $self->SUPER::sysread($header, 8192);
+    my $header='';
+    while ( $header !~ /$CRLF$CRLF/ ) {
+      my $n = $self->SUPER::sysread($header, 8192, length($header));
+    }
+
     my $conn_ok = ($header =~ /HTTP\/\d+\.\d+\s+200\s+/is) ? 1 : 0;
 
     if (not $conn_ok) {

これで解決するといいなと思うんだけど、確認までに時間かかる


もうひとつ問題があって、接続に失敗したときに、SSLのバージョンを変更して再接続をしようとするんだけど、

その時の引数が変。


1回目は

CONNECT example.com HTTP/1.0

なんだけど、2回目がproxyのIPアドレスでCONNECTしようとしてしまう。

CONNECT 192.168.1.1 HTTP/1.0

これはもちろん、エラーになる

原因はNet::SSLの136行目あたりの

            my %args = (%$new_arg, %$arg);

これのnew_argとargが逆なんじゃないかと思うんですが、

みなさまどう思いますでしょうか。

created by blog.nomadscafe.jp

俺もOpenID使ってみた。

結構認証には時間がかかるのね。。。

created by anonymous

lumilic初体験

形態素解析の勉強をしてたら偶然blog.nomadscafe.jpにたどりつき


limilicにたどりつきました。


しんぷるなつくりに惚れぼれ。


でも、はてなの記法はわかんないや。うひょー。

created by momi2 [jugemkey.jp]

FormValidator::LazyWay

Index: lib/FormValidator/LazyWay.pm
===================================================================
--- lib/FormValidator/LazyWay.pm        (revision 14373)
+++ lib/FormValidator/LazyWay.pm        (working copy)
@@ -72,7 +72,16 @@
     $storage->{has_error}   = ( $storage->{has_missing} || $storage->{has_invalid} ) ? 1 : 0 ;
     $storage->{success}   = ( $storage->{has_missing} || $storage->{has_invalid} ) ? 0 : 1 ;

-    return FormValidator::LazyWay::Result->new($storage);
+    {
+        no strict 'refs';
+        my $resclass = 'FormValidator::LazyWay::Result';
+        *{"${resclass}::valid"} = sub {
+            return $_[0]->{valid} if @_ == 1;
+            return $_[0]->{valid}->{ $_[1] } if @_ == 2;
+        };
+    }
+
+    FormValidator::LazyWay::Result->new($storage);
 }

 sub _set_error_message_for_display {
created by woremacx [vaginarepos.org]

LWP::ConnCacheテスト

LWP::ConnCacheの効果を確認してみる

Webサーバは、MacOS X 10.4.11の素のApache。

KeepAliveがOnで、Timeout 15、MaxRequestが100になっているようです


スクリプト

#!/usr/bin/perl

use strict;
use warnings;
use Benchmark qw(:all);
use LWP::UserAgent;
use LWP::ConnCache;

my $conncache = LWP::ConnCache->new;

cmpthese(1000, {
  'no-keepalive' => sub {
    my $ua = LWP::UserAgent->new;
    $ua->get("http://127.0.0.1/", ':content_cb' => sub { } );
  },
  'keepalive' => sub {
    my $ua = LWP::UserAgent->new;
    $ua->conn_cache( $conncache );
    $ua->get("http://127.0.0.1/", ':content_cb' => sub { } );
  }
});

結果

$ perl keepalive_bench.pl
              Rate no-keepalive    keepalive
no-keepalive 463/s           --         -19%
keepalive    568/s          23%           --

20%ぐらい早い。

ちゃんと動きそう

created by nomadscafe.jp

<12345678910>