タグ

perlに関するsoh335のブックマーク (468)

  • ぼくがかんがえたさいきょうのAmon2のつかいかた - Kentaro Kuribayashi's blog

    プロジェクトで、それなりに自由にいろいろやれる感じの状況になったので、好きにやろうと思って、いままで実務では使っていなかったツールをあれこれ試しています。 2012-02-17追記: エントリを書いた後、状況がだいぶ変わったので、実際にはずいぶん違う感じになりました。 WAFをどうしようかなーと思った時に、ドメインスペシフィックなぼくがかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーくを作成するということも考えたのですが、そんなにスペシフィックな用途でもないし、WAF自体はPlackを薄くラップしたぐらいのものでよいと思うので、自分でがんばって作る必要もないと考え、信頼と実績のAmon2を試用してみることにしました。 いくつか、こうだったらいいのになという点を反映して、こんな感じでやってみています。試しながらやってるとこなので、全然「さいきょう」でもないし、不十分なところはいろい

    ぼくがかんがえたさいきょうのAmon2のつかいかた - Kentaro Kuribayashi's blog
  • にひりずむ::しんぷる - 復数のカラムでソート

    意外とみんな知らない感じなのかな。そして使う機会が滅多にないので知らなくてOK。 use strict; use warnings; use 5.12.1; use Data::Dumper; my @data = ( ['nekokak', '1130', '1900'], ['nekokak', '1000', '1800'], ['zigorou', '1230', '2000'], ['zigorou', '1130', '2100'], ['xaicron', '1300', '2200'], ['xaicron', '1400', '2330'], ); $Data::Dumper::Terse = 1; $Data::Dumper::Indent = 0; say join "\n", Dumper sort { $a->[0] cmp $b->[0] or $b->[1]

    soh335
    soh335 2012/02/10
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    soh335
    soh335 2012/02/09
  • warn() で吐かれるログを捕まえて投げる - 酒日記 はてな支店

    Perl では $SIG{__WARN__} という疑似シグナルハンドラを使って、warn() で出力されようとする内容をトラップして処理することができます。 package MyWorker; my $logger = Fluent::Logger->new; sub work { my $job = shift; local $SIG{__WARN__} = sub { my $msg = shift; # warn() で出力される文字列が渡ってくるので logger で送る $logger->post( "job" => { jobid => $job->jobid, # jobid で検索できるように message => $msg, }, ); }; # job の処理 # warn("Error!") } 最初からログを何らかのオブジェクトに渡す仕組みを入れて作っていればよか

    warn() で吐かれるログを捕まえて投げる - 酒日記 はてな支店
    soh335
    soh335 2012/02/07
  • ノンコードなファイルをモジュールと一緒にインストールしたければshareディレクトリを使う - ゆーすけべー日記

    Perlモジュールの話。当然のことかもしれないけど、知らなかったのでメモメモ。 配布したい小さなWebアプリがあって、出力のためのテンプレートファイルとかCSSとかどうやってモジュールに梱包したらよいだろうと思っていたんだけど、たぶんshareディレクトリを使うのがよさげ。Module::Installの場合はModule::Install::Shareにやり方とかが書いてある。通常はshareディレクトリにファイルを用意してMakefile.PLに以下でOK。 install_share 'share'; もしくはshareの部分を省略できる。 install_share; ちゃんとModule::Install::Shareのpodには、リードオンリーなコードとは関係ないファイルを同封したい時があるよね!例えば、XMLスキーマだったり、YAMLデータファイルだったり。だったらこれだよ!

    ノンコードなファイルをモジュールと一緒にインストールしたければshareディレクトリを使う - ゆーすけべー日記
    soh335
    soh335 2012/02/07
  • Perl » use した時のメモリ使用量を調べる - 豆電球

    soh335
    soh335 2012/02/06
  • おそらくはそれさえも平凡な日々: Perlのサブルーチンプロトタイプについて

    プログラミングPerlPerlベストプラクティスを読み返して勉強しなおした。概要としてはこんな感じ。 サブルーチンの引数の型を指定出来るようになる 暗黙的にリファレンス渡しができるようになる 例えば、組み込み関数のpushは第一引数に配列を取るが、暗黙的にリファレンス渡しになっている。(引数リストとして展開されない) このような挙動は通常のPerlのサブルーチンの仕組みでは実現できないが、プロトタイプを使うと実現できる。 sub my_push(\@@){ my ($arr_ref, @arr) = @_; for(@arr){ $$arr_ref[$#$arr_ref+1] = $_; } } my @test_arr = (1,2,3,4,4); my_push(@test_arr, 1,2,3); print join ',',@test_arr; #1,2,3,4,4,1,2,3

    soh335
    soh335 2012/02/04
  • シンプルなWebアプリを今、自分なりに書いてみる - ゆーすけべー日記

    Webアプリでユーザーからの入力がある部分を作る際、ユーザーフレンドリーでかつ実装も簡単な方法を模索するのにkazeburoさんのブログ記事をよく参考にしていました。 CGIとは〜〜だというのはたくさん答えがあるだろうけど、自分的には「ユーザからの入力をチェックして画面にだす」ものだというのがしっくりくる。当たり前のことを書いているようだがMVCモデルでいうコントローラーの作成がCGIだと。 シンプルなWebアプリなCGIを書いてみる : blog.nomadscafe.jp kazeburoさんはほんとにCGIで実装してたけど、フレームワークを使ったり、ライブラリを使ったりしたら、つまり、今風に、実用的に書いてみるとどうなるのかやってみています。kazeburoさんのとちょっとだけ仕様が違うがなんとなくこんなかなーという具合。あ、もちろん僕のことなんでPerlを使ってます。が、コードは非

    シンプルなWebアプリを今、自分なりに書いてみる - ゆーすけべー日記
    soh335
    soh335 2012/02/01
  • Data::Dumper に代わる Data::Printer - 理系学生日記

    LL でデバッグと言えばデバッガではなく print デバッグ、という人は多いと思います。ぼくはもっぱら print デバッグです。 いまこのタイミングでこのオブジェクトはどんな値を持っているんだろう、というときは、Perl だったらもっぱら Data::Dumper を使って、 sub p { print Dumper @_ } p $object; なんてのを良く書いてたんですけど、$object がクソみたいにデカいモジュールのオブジェクトだったりすると、ターミナルが溢れて(ぼくが)死んだりしてました。DateTime とか HTTP::Request あたりとか大変ですね。 で、ちょっと Data::Printer 良いよって声を聞いたので試してみたのでした。Class::MOP 依存だがな!!! 基的な使い方 Data::Printer を use すると、p っていう関数がデ

    Data::Dumper に代わる Data::Printer - 理系学生日記
    soh335
    soh335 2012/01/25
  • DBIx::Handler

    つくった DBIx::Connectorに無駄が多かったため自前実装 やること fork safe connection management scope base transaction management auto reconnect database simple query execution ざっくりこんなこと 使い方 use DBIx::Handler; my $handler = DBIx::Handler->new($dsn, $user, $pass, $opts); # この時点で接続可能なdbhを使える $handler->dbh->$some_dbi_method(); while (1) { # 長時間DBへの接続がおこなわれておらず # 接続が切れた場合も大丈夫 $handler->dbh->$some_dbi_method(); }

    soh335
    soh335 2012/01/21
  • perl - open my $fh, "comand |"; # はモダンじゃない : 404 Blog Not Found

    2009年02月10日01:00 カテゴリLightweight Languages perl - open my $fh, "comand |"; # はモダンじゃない モダンPerl入門 牧大輔 「モダンPerl入門」発売記念ということで、同書を補足するentryを。 同書でちょっと残念だったのが、[5.2 外部コマンドの実行]。あまりモダンではないのだ。 P. 141 system("/sbin/wget", "http://example.com"); これはいいのだが、以下がちょっとまずい。 my $output = `/bin/ls tmp`; open(my $fh, '| cat -v'); これ、何がまずいか、というと、コマンド実行の際に/bin/shを使ってしまうのだ。そのおかげでcommand < from > to 2&>1のようなリダイレクトも使えるなどの利点もあ

    perl - open my $fh, "comand |"; # はモダンじゃない : 404 Blog Not Found
    soh335
    soh335 2012/01/21
  • PerlIOのレイヤについてまとめてみた - ぱせらんメモ

    PerlIOがいつまでたってもきちんと理解できず、毎回試行錯誤しながら適当に指定してしまうのできちんと調べてみた。 調べてみて一番の収穫だったのは、レイヤは主に三種類に分けられる、ということ。 ドキュメントでは順不同で出てくるのでごっちゃになって混乱していたが、こうして分類してみると自分の望むものが何なのかよくわかるようになった。 リソースアクセス系 これはリソースに対して実際にIOを行うレイヤ。 :unix Unix/POSIXのread(), write()等を使うレイヤ。 バッファリングしない。どのプラットフォームでも常にO_BINARYで扱う。 :win32 file descriptorの代わりにWindowsネイティブのハンドルを使うレイヤ。 5.10.0現在のリリースではバグっぽいことがわかっているらしい。ので使わないほうがいい。 :stdio システムのstdioライブラリ

    PerlIOのレイヤについてまとめてみた - ぱせらんメモ
    soh335
    soh335 2012/01/20
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    soh335
    soh335 2012/01/20
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    soh335
    soh335 2012/01/18
  • App::ExtractUsed というものを書いている話 - punitan (a.k.a. punytan) のメモ

    CPAN形式で開発していると避けて通れないのが依存モジュールの炙り出しと Makefile.PL へ requires を書き出す作業。これは意外と面倒なのでもっと怠惰に楽をしたいところ。 たとえモジュールが要求するperlのバージョンを決めていたとしても「どれがコアモジュールでどれが違うのか」「parent.pm は 5.10.1 からコアモジュールになった」など、漏れなく抽出しないと新しい環境でインストールする時に悲しいことになってしまう。 こんな面倒事はコマンド叩くだけで済ませてしまいたい、というわけで GitHub - punytan/p5-App-ExtractUsed をでっち上げた。 使い方 extractused コマンドがインストールされるので、基的にはこれを叩くだけで lib/ と t/ を走査して requires, test_requires が出力される感じ。

    App::ExtractUsed というものを書いている話 - punitan (a.k.a. punytan) のメモ
    soh335
    soh335 2012/01/18
  • Plack::Middleware::ReverseProxy でリモートホストを確認する理由 - blog.nomadscafe.jp

    Reverse Proxyの後ろでApplication Serverを動かす際に、REMOTE_HOSTを当のアクセス元に書き換えてくれる仕組みはいくつかありますが^1、Plackでは壇上氏の Plack::Middleware::ReverseProxy がそれにあたります。 ^1 例えば mod_extract_forwarded http://www.openinfo.co.uk/apache/ PM::ReverseProxy のSYNOPSISでもそうなってますが、このような仕組みを使う場合、REMOTE_HOSTを指定するのが安全です。 builder { enable_if { $_[0]->{REMOTE\_ADDR} eq '127.0.0.1' } "Plack::Middleware::ReverseProxy"; $app; }; 拙作の Plack::Buil

  • にひりずむ::しんぷる - 親プロセスと子プロセスでデータを送受信する方法のメモ

    pipe() とか socketpair() とか色々方法はあるけど、素直に IO::Pipe 使っとくと簡単便利。コアモジュールですし。 use strict; use warnings; use IO::Pipe; my $pipes = []; my $children = []; for my $i (1..10) { push @$pipes, my $pipe = IO::Pipe->new; my $pid = fork; if ($pid) { # parent $pipe->reader; push @$children, $pid; next; } # child die $! unless defined $pid; $pipe->writer; print {$pipe} "pid: $$, index: $i\n"; exit; } for my $pid (@$

    soh335
    soh335 2012/01/15
  • jVideosのWebアプリケーション部分技術解説 - ゆーすけべー日記

    先日公開した「jVideos」という(エロ)サイト。 XVIDEOSをiPhoneで快適に見られる「jVideos」を作ってみた - ゆーすけべー日記 jVideos - iPhoneで日人好みのXVIDEOS (18禁) Webアプリとしての技術的な観点で言えば、クローラーが収集したデータをただデータベースから取ってきて表示するだけの簡単なものになっている。基的なところではJavaScriptも使ってない。そこで、「単純な上、構造がわかりやすい」いい題材と思ってこのjVideosを用いてWebアプリケーションの基的な技術を解説したい。 1. Perlを使っています まず、Webアプリケーションを含むバックエンドでは全てPerlを使っている。まぁ何故Perlかと今更聞かれると一番手になじむ言語だったということなんだけど、クローラーやWebのための要素は全てPerlで揃っているので問題

    jVideosのWebアプリケーション部分技術解説 - ゆーすけべー日記
  • Parallel::ForkManager and aggregate results

    soh335
    soh335 2012/01/11
  • Plack::Middleware::AccessLog でありがちな罠 - blog.nomadscafe.jp

    Plack::Middleware::AccessLog は Apacheライクなログが残せる便利ミドルウェアなんですが使う上で一つ注意点があります。 use Plack::Builder; builder { enable "AccessLog", format => "combined"; sub { die }; }; これで、500エラーのログが残ることを期待するかもしれませんが、実際は記録されません。 例外がMiddleware層を飛ばしてServerまで伝わる為で、何らかの形で例外を補足してあげる必要があります。 例えば、Plack::Middleware::HTTPExceptions builder { enable "AccessLog", format => "combined"; enable "HTTPExceptions"; sub { die }; }; もしく