タグ

ブックマーク / dayflower.hatenablog.com (45)

  • mod_subsitute と mod_ext_filter - daily dayflower

    HTTPなアプリケーションのデバッグのために出力の一部を書き換えたいということがある。アプリケーションを書き換えたくない状況ではApache HTTPサーバのフィルタで対応できそうだ。そういうわけで、何か適当なモジュールはないだろうか検索してみたところ、Apache HTTPサーバのバージョン2.2には標準でmod_substituteというモジュールが用意されていた。 mod_substitute(Apache 2.2) - \ay diary な,なんとそんな便利なものが,と思って調べてみたら,Apache 2.2.8 以降(厳密には 2.2.7 以降)で追加されてたんですね。 レスポンスボディを正規表現で書き換えるもので、設定の都合上「/」をうまく扱えないようなのがいまいちだが mod_substitute(Apache 2.2) - \ay diary とのことですが, If ei

    mod_subsitute と mod_ext_filter - daily dayflower
    fbis
    fbis 2013/06/14
    mod_substitute
  • Template Toolkit 探訪 (2) - daily dayflower

    前回お話したように,Template::Provider は,コンパイルしたテンプレートオブジェクトを,デフォルトではメモリ(内部のハッシュ)に蓄えておき,出来る限り再利用しています。ただ,当然再利用するためにはテンプレート「自体は」静的なものでなくてはいけませんから,ファイル名が指定された場合のみキャッシュします。つまり,生データのスカラハッシュや,ファイルグロブを与えた場合は,毎回コンパイルしているわけです。 デフォルトでは読み込まれれば読み込まれただけキャッシュにためておきますが,CACHE_SIZE というパラメータを初期化時に指定しておくと,その数のテンプレートだけ保持します。4 と指定しておくと,4つぶんだけキャッシュして,5つめがきたときには,一番使われていない(LRU)エントリを削除します。 さて,今回の題です。Template::Provider には,メモリだけでなく

    Template Toolkit 探訪 (2) - daily dayflower
    fbis
    fbis 2009/03/18
  • prove (Test::Harness) コマンドの --state オプション - daily dayflower

    テストが膨大になっていくと,あるテストでは時間がかかったりして「そのテストはもう成功することがわかっとるっちゅうねん;失敗するテストだけ再テストしたいっちゅうねん」ってことになったりします。そんなときに使えるのが prove コマンドの --state オプションです。 --state オプションに failed という引数をわたすと,「テストの対象は前回 fail したテストスクリプトのみ対象」という意味になります。ステートを保存する save と併用して指定してみます。 % prove --state failed,save No saved state, selection will be empty Files=0, Tests=0, 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) Result: NOTESTS「No save

    prove (Test::Harness) コマンドの --state オプション - daily dayflower
    fbis
    fbis 2009/01/21
    これは便利だ
  • はてブコメントの並び順を変えるグリモン書いた - daily dayflower

    はじめて Greasemonkey 書きましたよ。おかしなところがあったら教えてください。 さいしょ はてなブックマークのコメントを昇順に並べ替えるGreasemonkey を使ってたんですけど,いろいろ不満があったので書き換えてみました。原型はとどめてない。 light じゃない版あったのカー→http://userscripts.org/scripts/show/37784。じゃあこれいらないや。 ページを読み込んだ段階では,ソートボタンを付与するだけで何もしない 問答無用でソートするとコメント数が多いページで待ちが多くなるので 何種類かのボタンを指定できる ソート順を指定する関数を指定できる ソート中は「ソート中」って出る まぁ「指定できる」ってのは,コード(setup() 部分)書き換えてくださいねっていうレベルなんですけれど。 ほんとは http://white.s151.xre

    はてブコメントの並び順を変えるグリモン書いた - daily dayflower
  • __PACKAGE__ 頻出のコードがうざいとき - daily dayflower

    いちいち__PACKAGE__と書かなければならないのは面倒くさい! DBIx::Classのシンタクスシュガーがほしい - Islands in the byte stream はてブコメントの斜め上っぷりに激しくわらわせていただきました。 たしかにこんだけいっぱいでてくるとうっとおしいですよね。 こういう話題は好きなので冗談半分でわたしも考えてみました。 メソッドチェーンもどき案 Package::Fake::Method という名前で package Package::Fake::Method; sub Chain { my ($target) = @_; return bless { target => $target }, __PACKAGE__; } sub DESTROY {} sub AUTOLOAD { my $self = shift; my $method = our

    __PACKAGE__ 頻出のコードがうざいとき - daily dayflower
    fbis
    fbis 2008/12/08
  • こんなテンプレートエンジンほしい - daily dayflower

    なぜ、いちいちエスケープを手動で指定しなければいけないのか 文脈によって、自動的にエスケープ手法は決定できるはず と思ってます。 テンプレートエンジン作りたい - kazuhoのメモ置き場 ですよねー。 で,そのへんを自然に取り込んでいるのが,おもに Python 方面で人気のある XML ベースのテンプレートシステムだと思います。 実際,Genshi のドキュメントにも The main feature is a template language that is smart about markup: unlike conventional template languages that only deal with bytes and (if you're lucky) characters, Genshi knows the difference between tags, att

    こんなテンプレートエンジンほしい - daily dayflower
  • PL_check hack - daily dayflower

    (あとでかく) XS くらいいじれないと Shibuya.pm に加入できないらしいので,とりあえず書きましたー。今回は実践編なので,あまりわかりやすい内容&たいした内容ではないです。わっふるさせてごめんなさい。 ゴール #!/usr/bin/perl eval 'print "Hello ' . $ARGV[0] . '!\n"'; とか危険ですよねー*1。こんな機能があるなんてけしからん。ですので,eval の実行を抑制するモジュールを書いてみました。 というのは冗談で,eval の実行主体となる OPCODEが,システム内で「完結」してます(んーうまく表現できない)。なのでサンプルとしていじりやすく,この題材をとりあげました。 評価型 eval はどのような OPCODE に変換されるのか まずは単純なコードを書いて,OPCODE がどのようになるのかたしかめてみます。 use st

    PL_check hack - daily dayflower
    fbis
    fbis 2008/09/27
  • v8 (Google JavaScript Engine) を Perl XS モジュールにしてみた - daily dayflower

    やはりやっつけで。Joke module です。 いろいろ書きたいことがあるけど,そのうち(追記するかも)。 libv8 と XS の間をとりもつ bridge.cc。 /* bridge.cc */ #include <v8.h> #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" /* harmful macro!, but, but, ... */ #undef New #include "bridge.h" using namespace v8; class V8Context { public: V8Context() { HandleScope scope; Handle<ObjectTemplate> global = ObjectTemplate::New(); Handle

    v8 (Google JavaScript Engine) を Perl XS モジュールにしてみた - daily dayflower
  • Scalar::Util の weaken() - daily dayflower

    Shibuya.pm #9 での id:lestrrat さんの発表 での質疑応答において id:dankogai 氏 weak references の実装はどのようになっていますか? id:lestrrat 氏 あー準備してくるの忘れました。Scalar::Util の Util.xs を見てください :) というやりとりがありました。その時*1は weak reference の参照先の REFCNT を decrement している「だけ」じゃないの? と(あさはかにも)思ったんですが,実装を調べてみました。実際には「それだけ」ではありませんでした,と。 以下 REFCNT とか MAGIC とかでてくるんで,前提条件として Shibuya.pm #9 での :lestrrat さんの発表(Perl 5 internals の世界にようこそ - daisuke maki)必聴です。

    Scalar::Util の weaken() - daily dayflower
    fbis
    fbis 2008/07/04
  • [http://search.cpan.org/perldoc?Web::Scraper:title=Web::Scraper] をつかってみた - daily dayflower

    ドキュメントねー,と思ったら Redirecting… みたいな素敵なチュートリアルがあったのでいまさらながら使えるようになりました。サンプル群も参考になりました。 はてブのホッテントリから,タイトル,URL,キーワード,タグを抜き出すのを書いてみました。わりと素直に書くとこんな感じ? use strict; use warnings; use Web::Scraper; use Encode (); #binmode \*STDOUT, ':utf8'; my $utf8 = Encode::find_encoding('utf8'); my $target = do { if (@ARGV && ! -f $ARGV[0]) { use URI; URI->new($ARGV[0]); } else { local $_ = do { local $/; <> }; $utf8->de

    [http://search.cpan.org/perldoc?Web::Scraper:title=Web::Scraper] をつかってみた - daily dayflower
    fbis
    fbis 2008/06/27
  • perluniadvice - daily dayflower

    perluniadvice の前半部分を訳してみました。かなり意訳。 アドバイスと銘うってますが,中級者〜上級者向きです*1。 抄訳 perluniadvice Perl 付属のドキュメント perlunitut はもう読んだ?もしまだなら,そこから読み始めること :) perlunitut - perldoc.perl.org perlunifaq - perldoc.perl.org 以下にわたし(http://juerd.nl/)からのアドバイスの要約を挙げる。perlunitut には記述しなかった内容も含んでいる。 もしあなたが古い Perl を使っているのなら,最新版にアップグレードしよう もしあなたが古い CPAN モジュールを使っているのなら,最新版にアップグレードしよう 「外界」からやってくるデータはすべて decode() しよう 「外界」へ出力するデータはすべて en

    perluniadvice - daily dayflower
  • ファイルハンドルをめぐる冒険(ただしマニア向け) - daily dayflower

    以下は Perl 5.8.8 のソースを元に記述しました。Perl 5.10 でもそう変わってはいないと思いますが,結構内部が変更されているので違うかもしれません。大まかには同じだと思います。 イントロダクション Perl でのファイルハンドルは内部的には [http://search.cpan.org/perldoc?IO::Handle:title=IO::Handle] オブジェクトとして保持されています。そのような記述は perl5004delta くらいでしか見つかりませんでした。ラクダにもなかったような。 Internal change: FileHandle class based on IO::* classes File handles are now stored internally as type IO::Handle. The FileHandle module

    ファイルハンドルをめぐる冒険(ただしマニア向け) - daily dayflower
    fbis
    fbis 2008/06/05
  • Perl の文字列の内側の記事の補足 - daily dayflower

    前回の記事が期せずしてホッテントリ入りしたので,ちょっとマズいと思い。 前回の記事が難しいと思ったとしても,それは恥ずべきことではありません。 あくまで Perl の内部構造の話ですから*1。 ただ,Perl で文字列を扱う/文字コードを扱うのは難しい,と思われるのは位ではないです。 というのは,当は,難しく考えなくでも動くように作られてますから。 拙い表現なもので上から目線に感じられたらごめんなさい。 もうちょっと詳しく書きます。 Perl の文字列の扱いは,なるべく後方互換性を確保しながら,進化してきました。 そのため,いろいろな思想,組み方でも動くようにできています。たとえば 文字コード,何それ,気にしない すべてバイナリ列だとみなす(上とほぼ同じ意味ですが) 内部コーディングを EUC-JP octet stream にする 内部コーディングを UTF-8 octet stre

    Perl の文字列の内側の記事の補足 - daily dayflower
    fbis
    fbis 2008/02/22
  • UTF8 フラグあれこれ - daily dayflower

    UTF8 フラグについてわかってるつもりだったんですが,utf8::is_utf8 considered harmful - Bulknews::Subtech - subtech を読んで混乱したので,自分なりにまとめてみました。間違いがありましたらご指摘よろしく。 まとめ スカラー変数の内部表象の状態を示すものとして UTF8 フラグというものがある スカラー変数は(リファレンス等は別として)下記のものを格納できる (A) 文字列(内部表象: UTF-8) (B) 文字列(内部表象: ISO-8859-1) (C) バイナリ列 純粋なバイナリストリーム(画像ファイル等)かもしれないし, UTF-8 octet stream かもしれないし, CP932 octet stream かもしれないし,etc, etc ... Perl は(後方互換性確保などの理由から)ISO-8859-1

    UTF8 フラグあれこれ - daily dayflower
  • テキストの文字種分割の補足 - daily dayflower

    Perl で日語テキストを簡単に字種かたまりに分割できないかな、 と思い、perlunicode を読みながらサンプルプログラムを書いてみました。 対象テキストは UTF-8Perl で日語テキストを字種分割 たつをさんは,m// でマッチングさせて分割させてますけど,これだと正規表現で網羅されてないトークンが失われてしまうと思います。 #!/usr/bin/perl use strict; use warnings; use utf8; binmode \*STDOUT, ':utf8'; my $src = <<"END_DATA"; zーあyxルーラでう、う9 10AB.DE「"GH'」★で漢字をカ・ナったー!?MJD39\x{2466}。 END_DATA print $src, "\n"; my @cs = ( $src =~ m/ ( \p{M}+ | \p{N}+

    テキストの文字種分割の補足 - daily dayflower
  • overload の rebless バグについて - daily dayflower

    きちんと追いきれなかったので結構ぐだぐだです。 そもそも bless の挙動とは #!/usr/bin/perl use strict; use warnings; package FooBar; package main; my $a = { }; my $b = $a; print $a, "\n"; # HASH(0xb8002a0) print $b, "\n"; # HASH(0xb8002a0) bless $a, 'FooBar'; print $a, "\n"; # FooBar=HASH(0xb8002a0) print $b, "\n"; # FooBar=HASH(0xb8002a0) 前半はまぁいいでしょう。同じ無名ハッシュリファレンスをさしているので同じ内容が出力されます。 おもしろいのは後半です。 $a を bless しただけなのに,$b も bless され

    overload の rebless バグについて - daily dayflower
    fbis
    fbis 2008/01/09
  • CentOS 5.1 の perl をリビルドする - daily dayflower

    2008-12-26 追記 CentOS 5.2 の updates の perl-5.8.8-15.el5_2.1 で下記該当パッチ+αがあたった状態になっています。もう自分でパッチをあててリビルドする必要はありません(RHEL 5(.2) の perl-5.8.8-15.el5_2.1 で例のバグが治っていた - daily dayflower)。 overload の rebless バグとパフォーマンスペナルティ問題 については下記参照。 YappoLogs: FedoraCoreやCentOS系の遅いPerlのパッチの件 overloadと再blessの問題 - Unknown::Programming overload が無効? - Practice of Programming YappoLogs: overloadのreblessとRHLのoverloadが遅いパッチ ov

    CentOS 5.1 の perl をリビルドする - daily dayflower
    fbis
    fbis 2008/01/08
  • Crypt::SMIME キターーー! - daily dayflower

    以前ちらっとぼやいたりしてましたが,ええい,と気力をふりしぼって RT に投げたら Tripletail::SMIME を Crypt::SMIME として単体リリースしてくださいました。ありがとうございます> Tripletail メンテナの皆様&ユミルリンクの皆様 勝手に Crypt::SMIME のとくちょうを宣伝 OpenSSL ライブラリを利用した XS モジュール なので,オンメモリで高速に S/MIME の暗号化・復号化・署名ができる つまりテンポラリファイルを作る必要がないんです 仕様もシンプル よって現存する S/MIME 用 CPAN モジュールの中で一番有用(だと私は考えます) Windows で使うのは厳しいかもしれませんがオススメ。 2007/09/28 追記 作者の hio さんからコメントいただきました。ありがとうございます。 hio 『とりあえず ppm

    Crypt::SMIME キターーー! - daily dayflower
    fbis
    fbis 2007/09/28
    追記でWindowsでも使えるとのこと。
  • もう CPANPLUS は使わなくてもいいのかも - daily dayflower

    今まで CPANPLUS を使っていた理由は root 以外のユーザが使った場合,インストール時に sudo してくれる インストール済みのモジュールで cpan にさらにあたらしいものがあるかどうか調べることができる モジュールのアンインストールできる モジュールの古いバージョンを検索してインストールしたりできる だったんですが,最近の CPAN.pm って 1, 2 あたりはできるようになってるんですね(がんばれば 3 もできます⇒cpan で古いバージョンのモジュールをインストールする方法 - daily dayflower)。あと force だけじゃなくて fforce や notest とかコマンド指定できるようになってます。 なので, root で最新の CPAN(Bundle::CPAN じゃなくて)をインストール 一般ユーザでインストール時に sudo を使うように設定

    もう CPANPLUS は使わなくてもいいのかも - daily dayflower
    fbis
    fbis 2007/08/16
  • URI.pm っぽいモジュール名用クラス - daily dayflower

    を考えてみました。 use Module::Class; Module::Class->module('CGI')->require or die $@; それ UNIVERSAL::require (ry というのは冗談ですが # with Module::Class::Plugin::Module::CoreList; print Module::Class->module('File::Spec')->first_release(); みたいにプラグインで拡張できるもの。 なぜ Module::Name という名前じゃないかというと Module::Class->modules(qw( CGI HTTP::Request ))->require() or die $@; Module::Class->module('HogeHoge')->findsubmod()->require(

    URI.pm っぽいモジュール名用クラス - daily dayflower
    fbis
    fbis 2007/08/10