だって、autoescapeがonになってたら<%= '文字' %>毎にblessするんだもん!$__byte_stream->add_chunk($v)->xml_escape->empty;みたいなのがいいよ!と思って、毎回blessする方法、一回しかblessしない方法、HTML::Entitiesを使う方法でベンチマークとってみた。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | use strict; use warnings; use Benchmark qw/timethese cmpthese/; use Mojo::ByteStream 'b'; use HTML::Entities qw/encode_entities/; my $count = 100000; my $v = qq/僕たち、おっぱい大好き!おっぱい星人!<>&"'<>&"'<>&"'<>&"'<>&"'<>&"'<>&"'<>&"'<>&"'あずにゃんペロペロ(^ω^)/; my $__byte_stream = Mojo::ByteStream->new; cmpthese timethese( $count, { new => \&new, empty => \&empty, entities => \&entities } ); sub new { my $xml = b($v)->xml_escape->to_string; } sub empty { my $xml = $__byte_stream->add_chunk($v)->xml_escape->empty; } sub entities { my $xml = encode_entities($v, qq/<>&"'/); } |
結果
1 2 3 4 5 6 7 8 | Benchmark: timing 100000 iterations of empty, entities, new... empty: 2 wallclock secs ( 2.40 usr + 0.00 sys = 2.40 CPU) @ 41666.67/s (n=100000) entities: 4 wallclock secs ( 3.60 usr + 0.01 sys = 3.61 CPU) @ 27700.83/s (n=100000) new: 3 wallclock secs ( 2.83 usr + 0.01 sys = 2.84 CPU) @ 35211.27/s (n=100000) Rate entities new empty entities 27701/s -- -21% -34% new 35211/s 27% -- -15% empty 41667/s 50% 18% -- |
escapeする文字を少なくしてみた。
1 | my $v = qq/僕たち、おっぱい大好き!おっぱい星人!<>&"'あずにゃんペロペロ(^ω^)/; |
結果
1 2 3 4 5 6 7 8 | Benchmark: timing 100000 iterations of empty, entities, new... empty: 1 wallclock secs ( 0.84 usr + 0.00 sys = 0.84 CPU) @ 119047.62/s (n=100000) entities: 1 wallclock secs ( 0.73 usr + 0.00 sys = 0.73 CPU) @ 136986.30/s (n=100000) new: 1 wallclock secs ( 1.21 usr + 0.00 sys = 1.21 CPU) @ 82644.63/s (n=100000) Rate new empty entities new 82645/s -- -31% -40% empty 119048/s 44% -- -13% entities 136986/s 66% 15% -- |
Mojo::Templateでやるならこうかな。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Helpers my $HELPERS = <<'EOF'; my $__byte_stream = Mojo::ByteStream->new; no strict 'refs'; no warnings 'redefine'; sub block; *block = sub { shift->(@_) }; sub escape; *escape = sub { my $v = shift; ref $v && ref $v eq 'Mojo::ByteStream' ? "$v" : $__byte_stream->add_chunk($v)->xml_escape->empty; }; use strict; use warnings; EOF |
$__byte_streamが微妙な感じだけど、しょうがない。
コード書いてる時とか作業しながら音楽を聞く事はたくさんあると思うのだけど、8tracksがすげー良いなと思った。適当に聞きながら作業してる。
APIも公開されてるから何か作りたいけど、面白いのがなんも思い浮かばない。
今、一番聞いてるのを最後に。
Weather Cruise@横浜港 by 一十三十一 | ℡™ | qido | 8tracks
ワールドカップで日本が決勝Tに進出しましたね!試合してる時、僕は寝てました!
まあ、それはどうでもいいんですが、現実逃避の為Image Girl3 | 萌える画像を集める憎めない奴。を更新しました。
マウスを乗せると大きなサイズの画像が出てきます。

今回javascriptに触ったのだけど、全く意味が分かりませんでした。だからコードもはちゃめちゃだと思います。
本を買っただけで満足してるので、ちゃんと勉強せないかんなーと思いました
Web中央図書館3(仮)では、章本文編集ページにある数字で改ページ出来るようになる予定。この数字は、今のところ固定ですが、追加出来るようにしたい。それに伴ない、今現在の改ページの仕方(章の名前を同じにする)は、Web中央図書館3(仮)から非推奨にします。
今は互換性の為に残すけど、バージョンが上がると消えるかもしれないから使わない方が良いよって事です。
まあ、非推奨になるのは、Web中央図書館3(仮)からなので、今のところは気を付ける必要なしです。
なんでこの仕様を追加しようと思ったのかというと、小説ページの章一覧で章の数がばらばらになってしまってるから。
これ、きもちわるいよね。いまのところ、これの直し方が思い浮かばないので、仕様追加で逃げてみるという作戦です。
TokyoCabinet自体を入れるのは特に詰まる事もなくすんなりと終わった。
Perlバインディング入れるのも、Makefile.PL弄ったらちゃんと入った。
KyotoCabinet1.0がリリースされたんだけど、KyotoCabinetの力を十分に発揮出来るのかなーっていうのが疑問だったので、TokyoCabinetにした。
あと小説家になろうでは、KASASAGIっていうアクセス解析で使ってた気がするんだけど、それを書いてた日記が消えてた。悲しい。
アクセス解析は、自分で実装するより偉大なGoogle先生に頼った方が楽だし見やすいじゃんと僕は思うんだけど、そういう使い方もあるよね。
B木とかスプレー木とかなにそれおいしいの?レベルなんですが、いい感じにはなりそうです。
女子高生とかの間では、メールやモバイル用掲示板でよく使われる絵文字。自分の感情を表すのに良いらしいのだけど、Web上では見にくい!というイメージが結構あった。でも、使い方によって絵文字も良いものになるよねって話。
- 絵文字をアイコンの代わりに使うと、見やすくなる。(1)
- 文章の中に入り込んでいると見にくくなる。(2)
(2)はこんな感じ
鍵
開けといて!![]()
もちろん、女子高生向けのサイトとかなら(2)でも良いよね。使い分けが大事。
自分が当たり前だと思う事をどんどんアウトプットしようと思って書いた。そんな記事。
rubyの obj.methods がperlにも欲しい – だるろぐを見て、どっかでそれっぽいコード書いたなあと思って、家に帰ってきてから調べた。
UNIVERSAL::methods
methods.pmみたいな感じで保存。
$keyってきもい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package UNIVERSAL::methods; use strict; use warnings; our $VERSION = '0.01_01'; sub UNIVERSAL::methods { my $self = shift; my $class = ref $self; my @methods; no strict "refs"; for my $key ( keys %{"${class}::"} ) { next unless defined &{"${class}::$key"}; push @methods, "${class}::$key"; } return \@methods; } 1; |
実行するやつ。main.plみたいなの。
1 2 3 4 5 6 7 | use strict; use warnings; use UNIVERSAL::methods; use URI; use Data::Dumper 'Dumper'; my $u = URI->new; warn Dumper $u->methods; |
結果
1 2 3 4 5 6 7 8 9 10 11 12 | $VAR1 = [ 'URI::_generic::rel', 'URI::_generic::path_query', 'URI::_generic::_check_path', 'URI::_generic::uri_unescape', 'URI::_generic::path', 'URI::_generic::path_segments', 'URI::_generic::_no_scheme_ok', 'URI::_generic::abs', 'URI::_generic::authority', 'URI::_generic::_split_segment' ]; |
URIじゃなくて、URI::_genericだった!”物凄い勢いで追記”で、合ってたみたい。URI::_genericを確認してみたら、これで合ってた。
Rubyのobj.methodsを知らないので、もしかしたら間違ってるのかも?
あとUNIVERSALをいじったのは初めてな気がする。
Twitter見てたら、reverseがうんたらかんたらと言ってるのが見えたので、公式ドキュメント見てみたらびっくりした。
reverse – perldoc.perl.org
1 | print scalar reverse "dlrow ,", "olleH"; # Hello, world |
面白い!
もちろん日本語も。
1 2 3 4 5 | use strict; use warnings; use utf8; use Encode qw/encode_utf8/; print encode_utf8 scalar reverse "!高最", "語本日";# 日本語最高! |
日本語を逆から見ると中国語みたい。

hisaichi5518がPerlを書いて、つついて、イチャイチャするブログ。最近はnode.jsもやってる。




最近の記事
最近のコメント
リンク
ページ
カテゴリ
アーカイブ
タグ一覧