OpenIDでテキストを共有できます
- 新規作成
- OpenIDで認証してエントリーを新規作成します
- 共有
- エントリーにはOpenIDで閲覧と編集に制限かけることができます
- 変更履歴
- 編集履歴もあるので、コラボレーションにも活用できます
新着エントリー
CGI.pm vs CGI::Simple
なんかCGIがアツいのでやってみた
CGI.pm
Concurrency Level: 30 Time taken for tests: 82.684799 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 141120 bytes HTML transferred: 10000 bytes Requests per second: 12.09 [#/sec] (mean) Time per request: 2480.544 [ms] (mean) Time per request: 82.685 [ms] (mean, across all concurrent requests) Transfer rate: 1.66 [Kbytes/sec] received
CGI::Simple
Concurrency Level: 30 Time taken for tests: 61.789928 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 141220 bytes HTML transferred: 10000 bytes Requests per second: 16.18 [#/sec] (mean) Time per request: 1853.698 [ms] (mean) Time per request: 61.790 [ms] (mean, across all concurrent requests) Transfer rate: 2.22 [Kbytes/sec] received
time() vs Time::HiRes::time()
#!/usr/bin/perl use strict; use Time::HiRes qw//; use Benchmark; Benchmark::timethese(500000, { 'time' => sub { time() }, 'hires' => sub { Time::HiRes::time() }, });
result
Benchmark: timing 500000 iterations of hires, time...
hires: 2 wallclock secs ( 0.35 usr + 1.07 sys = 1.42 CPU) @ 352112.68/s (n=500000)
time: 2 wallclock secs ( 0.19 usr + 1.08 sys = 1.27 CPU) @ 393700.79/s (n=500000)
OpenIDとは(概要)
OpenID(おーぷんあいでぃー)というものが普及し始めている。
Google,Yahoo,Microsoftなど、大手の対応も加速してきている。
経緯
アカウントが必要なサイトでは、以下の問題が発生する。
ユーザ側:いろんなサイトでIDを取得していると、アカウントの管理が大変になってくる。
サイト側:アカウントを取得するときの個人情報を持つことになり、流出のリスクが発生する。
これらの問題を解消するため、アカウントを1ヶ所で管理するしくみが作られた。
対応例
サイトごとのログインフォームとは別に、オープンIDでのログインフォームが追加されていて、そこに、自分のOpenIDを入力する。
デメリット?
ユーザ:IDは、URL形式になるので、文字数が長くなる。←単語登録しておくという手もある。
サイト:個人情報が欲しい場合は、ログイン後にさらに収集するしかけを考えなければならない。口実がないため、今までよりも集めにくくなる。
OpenIDを導入しないと、「OpenID八分」とでもいうような状況になり、サービスを利用されなくなる可能性がある。
期待はずれな点
対応したサイトであれば、どこかにログインしていれば、その後はログインなしで使える(いわゆるシングルサインオン)のかなと思ったが、どうやら違うらしい。
ウィキペディア
WWW::Curl vs LWP
機能に差があるので、公平なテストじゃないけどWWW::Curl速い
結果
Benchmark: timing 500 iterations of curl, lwp...
curl: 1 wallclock secs ( 0.31 usr + 0.30 sys = 0.61 CPU) @ 819.67/s (n=500)
lwp: 4 wallclock secs ( 3.13 usr + 0.37 sys = 3.50 CPU) @ 142.86/s (n=500)
スクリプト
use Benchmark; use LWP::UserAgent; use WWW::Curl::Easy; my $count = 500; timethese( $count , { 'curl' => sub { open(my $content_fh, '>', \my $content); open(my $header_fh, '>', \my $header); my $curl = WWW::Curl::Easy->new(); $curl->setopt( CURLOPT_WRITEDATA, $content_fh); $curl->setopt( CURLOPT_WRITEHEADER, $header_fh); $curl->setopt( CURLOPT_URL, 'http://localhost/' ); $curl->perform(); }, 'lwp' => sub { my $ua = LWP::UserAgent->new; my $res = $ua->get('http://localhost/'); } });
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, } ); }
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)
はあ、
てすとてす。
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が逆なんじゃないかと思うんですが、
みなさまどう思いますでしょうか。