タグ

ブックマーク / perl-users.jp (67)

  • Web アプリケーションのデプロイについての考察 - Articles Advent Calendar 2012 Casual

    Web Application をデプロイする際に、carton をつかうという方法もありますが、もっとゆるふわでいいんじゃないかなーとおもうので、もっとゆるふわにやる方法について考えてみました。 carton について carton は以下のようなことをやってくれます。 * バージョンの固定 * インストール * モジュールパスのロード carton は carton.lock というファイルにインストールしたバージョンを記録することによって、いいかんじにバージョンを固定できて、複数の環境でアプリをうごかすときに便利です。 が、しかし carton.lock は JSON ファイルなので、複数人が同時に作業しているときに conflict したりしてメンドイ! という噂もききます。実際、carton.lock をつかうと conflict がダルすぎるので carton.lock を .

    Web アプリケーションのデプロイについての考察 - Articles Advent Calendar 2012 Casual
  • すべてのデータベース接続を切断する - DBIx::DisconnectAll - Articles Advent Calendar 2012 Hacker

    息子のサンタクロース1号 kazeburo です。 ウェブアプリケーションなどでデータベースとの接続をリクエスト終了後に切りたいんだけど、アプリケーションのどこかで循環参照してたりで $dbh が解放されないとデータベースに接続が溜まり、データベースの最大接続数に達して新規の接続ができなくなり、正常にサービスが続けられなくなったり、椅子が飛んできたりします。 アプリケーションのバグがすぐに見つかり、接続の滞留が解消できればいいですが、そうではない時、このモジュールが役に立つかもしれません https://metacpan.org/module/DBIx::DisconnectAll https://github.com/kazeburo/DBIx-DisconnectAll 使い方は簡単。 use DBIx::DisconnectAll; dbi_disconnect_all(); dbi

    すべてのデータベース接続を切断する - DBIx::DisconnectAll - Articles Advent Calendar 2012 Hacker
  • Scope::Guard等でリソース解放を実装する際に知っておきたいこと - Articles Advent Calendar 2012 Hacker

    みなさんガードオブジェクト使ってますか。ガードオブジェクトとは一般的には オブジェクト生成時になんらかのリソースを初期化・取得 オブジェクト解放時に該当リソースを解放 という動作をするオブジェクトをさします。 Perlではガーベジコレクションにリファレンスカウント方式を取っているため、ガードオブジェクトが解放されるタイミングが制御しやすいので比較的頻繁にガードオブジェクトを作って様々なリソースの初期化〜解放までを簡単にコントロールしたりします。 わかりやすい例で言うと、例えば現在実行中のスクリプトが動いている間だけ別プロセスでmemcachedのようなサーバーを立てたい、という時にProc::Guardなどのモジュールを使うと、以下のようなコードを仕込むだけで簡単にmemcachedプロセスを起動、終了することができます use strict; use Proc::Guard; my $g

    Scope::Guard等でリソース解放を実装する際に知っておきたいこと - Articles Advent Calendar 2012 Hacker
  • App::YG - ログをう゛ぁーてぃかるぱみゅぱみゅしちゃう!! - Articles Advent Calendar 2012 Hacker

    やあハッキングモンスターのみんな、元気かーい? ぼくは普通です。 きょうはみんなでログをう゛ぁーてぃかるぱみゅぱみゅしちゃうぞ!あ、こんにちは bayashi です。 さて、ログは見てるかい?cat してるかい? tail してるかい? GB単位のログを vim で開いてフリーズさせてやいないかい?ログは吐いたら終わりじゃいけないぜ!ちゃんとうぉっちしないと鬼がでちゃうぞ!! とはいえ、そんなログも、たいていは1行につらつらと書かれてて見るのがつらいね!!例えばこんなやつだ。 $ tail log 127.0.0.1 - bayashi [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.0 (compatible

    App::YG - ログをう゛ぁーてぃかるぱみゅぱみゅしちゃう!! - Articles Advent Calendar 2012 Hacker
    sugyan
    sugyan 2012/12/07
    便利なんだけどテンション高すぎて内容が頭に入ってこないw
  • Dropbox上のMarkdownテキストをプレビューしちゃえ! - Articles Advent Calendar 2012 Casual

    こんにちは。先日、調べものをしてたらいつの間にかインナーに着ていたT-shirtsを破っていたyusukebeです。 色んなところで書いているネタな気がしますが、イマイチ良さが伝わってないのでもう一度まとめます。まず、Dropbox便利ですよね^^ PCから手元のストレージ感覚で保存したものが、クラウド?に保存され、各々のデバイスで同期される。これは素晴らしい。次に、この記事は「はてな記法」で書かれていますが、僕は最近もっぱら「Markdown記法」で文章を書いていて、シンプルで見やすく素晴らしい。となると「Markdownの文章をDropboxに保存して共有」なんてユースケースは割とあるのではないでしょうかね? Markdownを使っていて気になるのはHTMLに変換した見た目だったりしますね。Markdownはプレーンな状態とレンダリング後の見た目の差異が少ない感じ... というのが売り

    Dropbox上のMarkdownテキストをプレビューしちゃえ! - Articles Advent Calendar 2012 Casual
  • カジュアルにデータを確率とか優先度で処理する - Articles Advent Calendar 2012 Casual

    こんにちは、こんにちは。カジュアルにPerl使っているkoba04 です。 Webアプリを作っていて、確率で処理を分けたり複数の要素を重み付けて選びたいことってありませんか? 真っ先に浮かぶのはガチャみたいなものですが、それ以外にもランダムでバナーを出し分けてみたり、接続するサーバーを重み付けて選んだり色々と使い道が思い浮かびます。 そんな時に使える二つのモジュールをご紹介したいと思います。 詳しくは下記の作者の方のブログを見てください。 Sub::Rate Data::WeightedRoundRobin 以上! でもいいのですが..順番に紹介してみたいと思います。 モジュールなしで実装 優先度を付けてデータを選びたい時はrandを使っての実装が思い浮かびますが、バグりそうな気もするし面倒だし出来れば書きたくないです。 (書き方が悪いという説もある) # 結果をdumpする関数 sub

    カジュアルにデータを確率とか優先度で処理する - Articles Advent Calendar 2012 Casual
    sugyan
    sugyan 2012/12/05
    こういうの、便利ですよねー
  • AxsLog - Yet Another AccessLog middleware - Articles Advent Calendar 2012 Hacker

    「君のPSGIファイルを僕のミドルウェアでいっぱいにしたい」という台詞を思いついたけど、埋めれるほどPlack::Middlewareを書いてないkazeburo です。 そんな僕が一番最近書いた Plack::Middleware がYet Anotherなアクセスログ記録ミドルウェア AxsLog です。某二人組は今年でデビュー20周年らしいですが、あんまり関係ありません。 https://metacpan.org/module/Plack::Middleware::AxsLog Plackのコアパッケージの中に Plack::Middleware::AccessLog が含まれてますが、以前からこのミドルウェアが比較的「重い」ということが気になっていました。マイクロベンチマークですが、 $ cat test.psgi sub { [200,['Content-Type'=>'text

    AxsLog - Yet Another AccessLog middleware - Articles Advent Calendar 2012 Hacker
    sugyan
    sugyan 2012/12/05
    使わせていただいてます!
  • テストのためにデーモンを自動的に起動するやりかた2011年版 - Articles Advent Calendar 2011 Test

    はじまりはパクり 最近あんまりコード書いてません、lestrratです。 テストを走らせる時にいろんな他のデーモンを立ち上げたり、そのテストのためだけの設定を先にしないといけなかったりとか色々ありますよね。結構長い間Makefile.PLはModule::Installで書いていたせいもあって、ちょっと前にxaicronさんが書いてたModule::Install::TestTargetでごにょごにょやってたのですが、ちょっと前にYappo/tokuhiromさんがproveで書いてたセットアップがまるっと自分の欲しい用途にも使える事に気づいたのでいろんなアプリケーションのテストをそのように変えてみました。 流れ proveでテストをすると、proveのプラグインを呼び出す設定ができるのですが、これをプラグインというよりテスト前に実行されるフックとして利用する事によって任意の設定用のコード

    テストのためにデーモンを自動的に起動するやりかた2011年版 - Articles Advent Calendar 2011 Test
  • Skype::AnyでSkype botを作る - Articles Advent Calendar 2011 Hacker

    メッセージを送る use Skype::Any; use Skype::Any::User; my $skype = Skype::Any->new; # echo123にメッセージを送る my $user = Skype::Any::User->new('echo123'); $user->send_message('どうもー'); 自動返信 use Skype::Any; my $skype = Skype::Any->new; # メッセージが送られてきたら $skype->message_received(sub { my $self = shift; $self->chat->send_message('おはよう'); }); $skype->run; $skype->run というものが出てきました。これはイベントループ開始の合図です。 また、誰がメッセージを送ったのが知りたい

    Skype::AnyでSkype botを作る - Articles Advent Calendar 2011 Hacker
  • perl ♡ tests - Articles Advent Calendar 2011 Test

    こんにちはとみたトミールです。先日会社の勉強会で枠をもらいまして、「あまりperlによる開発をしていない人へのperl紹介」的な話としてperlのカルチャーとしてのテスト、という紹介をしました。わりと評判がよかったのでほかのトラックと内容かぶるところありますが気にせず書き起こし的に書いてみます。 dev w/perl select modules write tests ... perlを使った開発の特徴として、モジュールが充実してる話はわりと有名とおもいますが、実際のコード書き始める前にまず使うモジュールを選ぶ作業があったりします。そのへんはそのうち話すとして。 ほかに、テストを大事にするというかテストを書いてから実際のコードを書くという文化があるのが誇れる点だとおもっていて、 perl's test code = just simple perl script perlのテストコードは

    perl ♡ tests - Articles Advent Calendar 2011 Test
    sugyan
    sugyan 2011/12/13
    "perlのカルチャーとしてのテスト"の紹介
  • DBI::Profileでお手軽プロファイリング - Articles Advent Calendar 2011 Dbix

    aloelightです。 みなさん、DBIx書いてますか?私は5年以上はPerlを使っていますが、DBIxを書いたことがありません。CPANの既存ライブラリとDBIの基機能で間に合ってしますからです。今日はDBI付属の機能の中からDBI::Profileを紹介したいと思います。 どんな時に使うの? 開発時には何気なく実行してたけど、なんかこの機能が遅いような気がする。そんなことありませんか? MySQLではEXPLAINを使ってクエリの実行計画を確認することで、そのクエリがなぜ遅いかを判断することができますが、その前にどのクエリが遅いかを判断しなければいけません。お手軽さを求めるなら、DBI::Profileを使うのがいいんじゃないでしょうか。 使い方 DBI::Profileの使い方はいくつかありますが、今回は$ENV{DBI_PROFILE}にセットする方法を使います。他には$dbh

    DBI::Profileでお手軽プロファイリング - Articles Advent Calendar 2011 Dbix
  • DBIx::QueryLog で DBI で実行された SQL を丸見えにする! - Articles Advent Calendar 2011 Dbix

    こんにちは、最近 PSP1000 の電池が一瞬で切れてしまってまともにゲームができない xaicron です。 さて、みなさんは DBI から吐かれた SQL をみたいなーと思うこともあるでしょう。 そんな時は、$ENV{DBI_TRACE} = 2 とかしてみると、ドバーッといっぱいデバッグログが出てきて、 その中に実際に発行された SQL がちょろっと出てたりするのでこいつを頑張ってパースすればいい感じですね! っていうのはだいぶ面倒だったりしますね。あたりまえですね。 そこで、use するだけでとりあえず全部の発行された SQL を STDERR にはいてくれるモジュールを書きました。 その名も DBIx::QueryLog です。そのままですね。 つかいかた 使い方は至極簡単で、どっかで適当に use するだけです。ほかには何もいりません。 そうすると、以下のような感じで STDE

    DBIx::QueryLog で DBI で実行された SQL を丸見えにする! - Articles Advent Calendar 2011 Dbix
    sugyan
    sugyan 2011/12/12
    DBIx::QueryLogほんと便利だとおもいます
  • 業務終了後、git logとDist::Makerでさっさと帰る話。 - Articles Advent Calendar 2011 Casual

    こにゃにゃちはー。@hisaichi5518です。 今、バイトしてる会社では日報を送らなければなりません。 日の業務とか日の雑感とかを送るアイツです。こういうのって結構めんどいですね。 というわけで、日報を軽く自動化しましょう! なんかしらコードを書いたらコミットすると思います。コミットのログ=行った業務のログですね!!!!!!! つまりgit logで全部解決するわけです。会社でsvnを使ってる場合でも、git-svn使えば解決です。 $ git log --since=yesterday --author=hisaichi5518 --pretty=format:"- %s" こんなの毎回打つのだるいので、.bashrcにaliasを書きます。 alias nippou_='git log --since=yesterday --author=hisada --pretty=for

    業務終了後、git logとDist::Makerでさっさと帰る話。 - Articles Advent Calendar 2011 Casual
    sugyan
    sugyan 2011/12/12
    自動化、効率化。
  • データ分散とインデックス最適化のためのハッシュ関数の利用 - Articles Advent Calendar 2011 Hacker

    はじめに こんにちは、piarra です。みなさん、意識は高まっていますか?私は上々です。 という書き出しをやめたくてやめられなかったのが心残りです。 昨年までは、Casual Trackで寄稿させていただいていましたが、今年はYAPCで話したこともあり、Hacker Trackに初挑戦させていただきます。得意のMD5暗算法とその習得法について解説したいと思っていたところですが、より日常に役立つ方がよいかと思い、MD5やその他のハッシュ関数の活用法について少し触れてみたいと思います。 データサンプル DBMSを考慮せず、以下のようなデータサンプルがあったと考えてみましょう。 +----+-----------------------+ | id | url | +----+-----------------------+ | 1 | http://www.google.com | | 2

    データ分散とインデックス最適化のためのハッシュ関数の利用 - Articles Advent Calendar 2011 Hacker
  • かゆいところに手が届くマイナーCPANモジュールランキング - Articles Advent Calendar 2011 Casual

    use strict; use warnings; print << 'PERL_ADVENT_CALENDAR_JAPAN_2011_DAY_7'; こんばんわ!こんばんわ!id:karupaneruraです! Perl Advent Calendar Japan 2011の7日目を書かせて頂きます!お手柔らかに! さてさて、みなさんCPANモジュール使ってますか?使ってますよね?僕は大好きです! そんな、みんな大好きCPANモジュールの中から僕が独断と偏見で選ぶ、 『かゆいところに手が届くマイナーCPANモジュールランキング』を作ってみました! 5位. Perl::MinimumVersion マイナー度 *** 使える度 **** 面白い度 **** 何番煎じ度 *** かっこいい度 **** これはPerlスクリプト、あるいはモジュールがどのバージョン以上で動作するかなどを調べるた

    かゆいところに手が届くマイナーCPANモジュールランキング - Articles Advent Calendar 2011 Casual
  • Plack::Middlewareの使い所 - Articles Advent Calendar 2011 Casual

    2011-12-08 00:40追記 @karupaneruraさんに指摘されて、s/Plack::Middleware::Conditionals/Plack::Builder::Conditionals/ しました。ありがとうございます。@kazeburoさんすみませんでした。 こんにちは。Songmuです。鎌倉の面白法人でPerlでソーシャルゲームの開発をおこなっています。 「ぼくらの甲子園熱闘編」や「ぼくらのワールドリーグ」の開発に携わっております。 アプリはArk + DBIx::Class + Text::MicroTemplate::Extendedという構成で作ることが多いのですが、 今回はソーシャルゲーム開発で活用しているPlack関連モジュールを2つ紹介させていただきます。 ちなみにArkのadvent calendarもやっておりますので、併せて読んでもらえると嬉しい

    Plack::Middlewareの使い所 - Articles Advent Calendar 2011 Casual
  • ベンチどうしますか? - Articles Advent Calendar 2011 Dbix

    どうもnekokakです。 みなさんDBIを使っているコードのベンチマークってどうしてますか? SQLのチューニングであればいいのですが、ロジックのベンチマークを取りたい時に 実際にdatabaseにクエリなげてしまうと、ネットワーク通信等が発生し、細かいロジックのチューニングの邪魔になることがあります。 たとえば私はTengのチューニングをするときに、バックエンドのdatabase性能なんてどうでもよくて、 プログラムの性能をみたいわけです。 そんなときに便利なのがTest::Mock::Guardです。(え Testというnamespaceにありますが、やっていることはコードをさしかえることなので これをつかって実際にデータベースにクエリなげるところとかをフガフガします。 例えばTengのベンチマークを取る時に試したコードは以下のようなものです。 #! /usr/bin/perl us

    ベンチどうしますか? - Articles Advent Calendar 2011 Dbix
    sugyan
    sugyan 2011/12/08
    Test::Mock::Guard
  • HTTP通信を含むモジュールのテスト - Articles Advent Calendar 2011 Test

    こんにちは!こんばんは!寒いのがめっぽう苦手、bayashi です! きょうは、HTTP通信を伴うモジュールのテストについて書いてみます! サンプルモジュール WWW::Foo8 具体的に説明するために、WWW::Foo8 というモジュールを書きました! package WWW::Foo8; use strict; use warnings; our $VERSION = '0.01'; use Class::Accessor::Lite ( rw => [qw/agent error/], ); sub new { my ($class, %args) = @_; $args{agent} = _default_agent() unless $args{agent}; bless \%args, $class; } sub get { my ($self, $uri) = @_; my

    HTTP通信を含むモジュールのテスト - Articles Advent Calendar 2011 Test
    sugyan
    sugyan 2011/12/08
    Test::Fake::HTTPD
  • Test::MockTime - 時間にまつわるtest - Articles Advent Calendar 2011 Test

    はい、kawamotoです blogは書いているとはとても言えないぐらいサボっております。 右も左もわからぬひよっこですので奇をてらわずにTest::名前空間のモジュールの紹介をしようと思います。 Test::MockTime は testの最中に実行される time, localtime, gmtime などの時間に関する関数の振る舞いを書き換える便利なモジュールです。 以下のような症状によく効きます。 テストの期待する結果に時刻を入れたいが固定の値を指定できない。 外部のコンポーネントに存在する、時間で変動する要素に依存しないテストを書きたい(たとえば MySQL で時系列のパーティションを使っているなど) テストを実行するたびに経過時間が変動してtestが通ったりこけたりする 使い方はこちらの記事でも説明されていますが、 $ cat ~/test.pl use feature qw(

    Test::MockTime - 時間にまつわるtest - Articles Advent Calendar 2011 Test
  • それCallbacksで - DBIxを作りだす前に - Articles Advent Calendar 2011 Dbix

    どうもkazeburoです。DBIx Trackなのに、DBIxを作らない話。 myfinderさんがDBIxを作る第一歩としてDBIのサブクラスの作り方を紹介しましたが、実際にDBIxを作り出す前に、その機能がDBIの標準機能でできないか調べるのがオススメです。 Callbacksの基 CallbacksはDBIに標準で用意されているHook機能です。 my $dbh = DBI->connect('dbi:SQLite:dbname=test.db','','', { RaiseError => 1, PrintError => 0, Callbacks => { connected => sub { ... } } }); 接続時のAttributesにCallbacksを追加します。上では接続が完了(connected)したらcoderefが呼び出されます。 接続時にテーブルを作

    それCallbacksで - DBIxを作りだす前に - Articles Advent Calendar 2011 Dbix