タグ

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

  • Writing a prefork server / daemon using Parallel::Prefork - Articles Advent Calendar 2010 English

    Parallel::Prefork is a module I wrote back in the year 2008, which is basically an imitation of the excellent Parallel::ForkManager but with support for signal handling, an indispensable feature if you want to write a network server or a daemon program with features like graceful shutdown or runtime reconfiguration. The code below illustrates the basic usage of Parallel::Prefork. Upon the intantia

    soh335
    soh335 2013/12/25
  • HTTP通信を含むモジュールのテスト #2 - Articles Advent Calendar 2011 Test

    はじめに こんにちは。ikasam_a です。 8日目に bayashi さんが [/articles/advent-calendar/2011/test/8:title=HTTP通信を含むモジュールのテスト] というエントリを書かれていますが、今日はその続編的な話をします。 フェイクとスタブ 前のエントリでは Test::Fake::HTTPD を使ってフェイクサーバを立ててテストする、という手法が紹介されています。これは テストダブル (Test Double) で言うところの Fake という概念で、"動作するけど手抜き" なサーバを用意して実際に HTTP 通信可能にするってわけです。これで実際のサービスに DoS することなくテストできるので、積極的に使いたいところです。 テストダブルとは何ぞや?という話は、別のエントリでしたいと思いますので、今日はさらっと流してください! この

    HTTP通信を含むモジュールのテスト #2 - Articles Advent Calendar 2011 Test
    soh335
    soh335 2013/06/20
  • DBIx::Class で FORCE INDEX する方法 - Articles Advent Calendar 2011 Dbix

    DBIC って… 最近なにかと dis られることの多い DBIx::Class (DBIC) ですね。 曰く「重い」「複雑すぎる」「コードが読めない」……まあそれはそうかもしれませんが、数年前の DBIC 全盛期に作られて今まで生き残っているシステムを、そう簡単に他の ORM や生 DBI に置き換えられるものでもありません。 自分の管理しているとあるシステムは DBIC + MySQL で動いていますが、最初はデータも多くなく、DBIC が生成する SQL で何ら問題はなかったのです。 が、データが増えて行くにつれて、 MySQL が適切な index を使用してくれないとパフォーマンス的に厳しい、FORCE INDEX 句を付けたい!という状況に出くわしました。そこで試行錯誤して見つけた、FORCE INDEX を指定する方法をご紹介します。 どうやって? たとえば以下のように、fo

    DBIx::Class で FORCE INDEX する方法 - Articles Advent Calendar 2011 Dbix
    soh335
    soh335 2013/06/18
    つらい.........
  • パスワード保存のお供に Crypt::SaltedHash - JPerl Advent Calendar 2009

    パスワード保存のお供に Crypt::SaltedHash - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? こんにちは。はてなでは id:sfujiwara、それ以外のところでは fujiwara です。 Webサービスなどでユーザーのパスワードを預かる場合、「一方向ハッシュ関数を通した値を保存せよ」というのはよく知られた話だと思いますが、単に MD5 や SHA1 の値を保存するだけでは安全性に問題があります。 例えば Digest::MD5::Reverse というモジュールを使うと、MD5 の値を逆算することができてしまいます。 use Digest::MD5::Reverse; print reverse_md5("388c3c9c00e651cc163cbdd47f08c427"); # f

    soh335
    soh335 2013/04/19
  • vim で Perl を書くときのための tips - Articles Advent Calendar 2012 Casual

    @tokuhirom です。Perlを書き始めて8年ほど経ち、Perlで何か作る際の効率化の手法がそれなりに確立してきたので、それを思いつくままに紹介しようと思います。主に多言語から来てPerlにほどんど慣れてない方などを想定しています。 僕の秘伝のタレ的な .vimrc の中から perl に関係ある部分だけをぬきだしてお教えしましょう。すべて設定すればだいぶ快適になりそうです。とかかいてると教えるのもったいない気分になってきた。 ぼくの環境 僕は vim の環境として以下のようなものを指定しています。mattn さんからは DIS られがちです。 neosnippet unite.vim pathogen vim-perl プロジェクトの成果物をつかう https://github.com/vim-perl/vim-perl なんか最近、perl-vim から vim-perl にかわ

    vim で Perl を書くときのための tips - Articles Advent Calendar 2012 Casual
  • Net::APNs::Extended - あなたに通知を送りたい - Articles Advent Calendar 2012 Hacker

    やぁみんな!!今というライフをエンジョイしているかーい!?私は普通です。 今日は、みんなにとってもクールでハッピーなモジュールを紹介してやるぜ!あ、こんにちは xaicron です。 それはこいつだ! iOS に通知を送るためのモジュール、その名も Net::APNs::Extended っつーんだ。よろしくな!!昔、typester さんが AnyEvent::Net::APNS って言うモジュールを出してますけど、できることは大体一緒です。 使い方はベリィイージー!!まずは、にっくき Apple に諸々とアプリの申請をだしたりして紆余曲折の末にクライアント証明書を手に入れてくれ!!もちろんそのためにはプッシュ通知を受け取る iOS アプリが必要なので頑張って書いてください。 証明書とアプリができたらあとは送るだけ!!!と見せかけて、まずは端末から device token っつーのを取

    Net::APNs::Extended - あなたに通知を送りたい - Articles Advent Calendar 2012 Hacker
    soh335
    soh335 2012/12/09
  • テストのカバレッジを出す - Articles Advent Calendar 2011 Test

    はじめに 最近腰痛と肩こりで寝るのも辛い xaicron です。凝り固まった体と心を優しくときほぐしてくれる。そんな人間を皆さんには目指して欲しい。 さて、今日はテストのカバレッジを取る方法についてちょろっと書こうと思います。 カバレッジというと原理主義てきな人たちにはご褒美であり、僕らのような lazy な人間にはちょっとめんどくさいなって感じますね。 要件的議所とかにカバレッジ率 100% を目指せ!みたいなことが書いてあったりして、それが目的になっちゃったりすることもあるかと思います。 でもまぁ、カバレッジを上げることが当の目的ではないので、あくまでも目安として使うぐらいでいいでしょう。だってカバレッジ上げるとかめんd(ry カバレッジを取る perl でカバレッジを取る方法といえば Devel::Cover ですね。他にもいろいろありますが。 とりあえず、テストしたいプロジェクト

    テストのカバレッジを出す - Articles Advent Calendar 2011 Test
  • Scope::Container でリソース管理を行う - Articles Advent Calendar 2010 Hacker

    メリクリ!ライヨロ!YAPC::Asia 2010でベストスピーカー賞の nekokak さんの次に書かせて頂きます。kazeburo です。 先月 Scope::Contaier というモジュールをリリースしましたが、CPAN、紹介したblogはこちら。もともとこのモジュールを書いたのはMySQLに対する接続を制御するためでした。 某日、某サービスのMySQLのPROCESSLISTを見た時に mysql> show processlist; +-------------+-------------+-------------------+------+---------+----------+---------------------------------+------+ | Id | User | Host | db | Command | Time | State | Info

    Scope::Container でリソース管理を行う - Articles Advent Calendar 2010 Hacker
    soh335
    soh335 2012/02/29
  • Google Docsの表計算書類をNet::Google::Spreadsheetsを使ってブラウザ抜きで読み書きする - Articles Advent Calendar 2010 Casual

    こんばんは。tumblr がサーバーダウンするとネット呼吸が出来ないotsune (Facebook - otsune) です。 jp.blogs.com|おもしろブログ記事のまとめサイトというサイトで、ネットウォッチ中に見かけた興味深いWebページのURLを美人編集長上野さんにたれ込むという趣味的行為をしているんですが。困ったことにURL集計にGoogle Docsの表計算の複数人編集機能を使ってて、1-clickどころかブラウザひらいてマウスでカチコチと気の長くなるほどメンドクサイ手順を踏まないとURLを貼れないという、CUIGUIのあいだに横たわる深くて長い天の川があったりしてシンドイわけです。世間でもよくある話ですね。 そんなわけでめんどくさいことはPerlのようなものにやらせればいいのよってことで、今日は飲み会のヒーローlopnorさんが書いたNet::Google::Spre

    Google Docsの表計算書類をNet::Google::Spreadsheetsを使ってブラウザ抜きで読み書きする - Articles Advent Calendar 2010 Casual
    soh335
    soh335 2012/02/24
  • DBI のお供になりそうなモジュールたち - Articles Advent Calendar 2011 Dbix

    師走にも関わらず風邪を引いてしましました。こんばんは、zigorou です。 今日は DBI のお供になりそうな拙作モジュールたちをご紹介します。 Data::RuledFactory p5-data-ruledfactory で開発中のモジュールです。 主要機能は大体出来てるんですが、後はテストを充実させて pod をきちんと書いたらリリースしようかなとか思ってる所です。 とはいえ現時点でもやりたいなと思っている事は既に出来ます。 論より証拠と言う事で、examples フォルダにある 001_define_rules.pl についてちょっと解説。 #!/usr/bin/env perl use strict; use warnings; use FindBin; use lib "$FindBin::Bin/../lib"; use DateTime; use Data::RuledF

    DBI のお供になりそうなモジュールたち - Articles Advent Calendar 2011 Dbix
    soh335
    soh335 2011/12/12
  • DBIx::Handlerで安心DB生活 - Articles Advent Calendar 2011 Dbix

    こんにちは!nekokakです! 今年はボクが作ってるDBIx::Handlerというものを紹介してみる。 DBIx::HandlerはDBIのラッパーでありDBのコネクション周りの管理に重点を置いたモジュールである。 ORMを使わずにDB周りの処理を行いたい場合はこのDBIx::Handlerを使うことをおすすめする。 自分でDBIのインスタンスを生成し利用する場合どこまで正しくコネクション管理をあなたはできますか? そもそも親プロセスで接続したdbのインスタンスを子プロセス側でも利用することの問題を正確に把握していますか? そこまで正しく細かく理解し自分で実装できたとしてもだ、新しいプロジェクトを作るたびにそのコードをコピペするのか? そこでDBIx::Handlerの出番だ。 DBIx::Handlerはそのあたりの処理をすべて面倒みてくれる。 もうあなたは いつDBとの接続が着られ

    DBIx::Handlerで安心DB生活 - Articles Advent Calendar 2011 Dbix
  • 配列操作をカジュアルに - Articles Advent Calendar 2011 Casual

    こんにちは。新潟在住Perl人、neko_gata_sです。AdventCalendarの敷居を下げにきました。ものっそいカジュアルな話をします。今日はList::Utilについて書こうと思います。 どちらが良いコード? さて、いきなりですが、以下のふたつのコードを比べてみてください。 use strict; use warnings; my @shugo_charas = qw/ran miki suu dia/; my @shugo_charas_uc; foreach my $shugo_chara (@shugo_charas) { push @shugo_charas_uc, uc $shugo_chara; } use strict; use warnings; my @shugo_charas = qw/ran miki suu dia/; my @shugo_charas_

    配列操作をカジュアルに - Articles Advent Calendar 2011 Casual
    soh335
    soh335 2011/12/10
  • 業務終了後、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
    soh335
    soh335 2011/12/10
    便利
  • ベンチどうしますか? - 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
    soh335
    soh335 2011/12/08
    便利そう
  • perl でテストを始めよう!! - Articles Advent Calendar 2011 Test

    はじめに こんにちはこんにちは!最近会社のモニターが二枚になって持て余している xaicron です。 さて、Test Track と称して始まったトラック。全部よめばあなたもテストを書かずには生きていけない、そんな身体に大変身していること間違いなしです。 とりあえず今日は初日なので、perl でテストを書くときに必ずと言っていいほど利用する Test::More を使ったテストの書き方を書こうと思ます。 また、「テスト」とざっくりといってもいろいろなものがありますが、その辺の細かい話はきっと ikasam_a さんが書いてくれるのでスルーします。 Test::More チートシート まず、More というだけあって、結構機能がいっぱいあるので、チートシートを先にあげておきます。perldoc Test::More のほぼコピペですが、きっと皆さんは perldoc Test::More

    perl でテストを始めよう!! - Articles Advent Calendar 2011 Test
    soh335
    soh335 2011/12/06
  • Encode::Locale - 環境に合わせたエンコーディングを提供する - Articles Advent Calendar 2011 Casual

    こんにちは、Csideです。最近はtwitterでウザ絡みするのが楽しくて仕方がありません。 さて、3分で読める軽い話をば。Gisle Aas氏の書いたEncode::Localeというモジュールの紹介です。 Perlでマルチバイト文字を処理する際は、「外から受け取るときはdecode、出力するときはencode」というのは基ですね。自分で使うスクリプトを書くぶんには、自分のターミナルのエンコーディングに合わせてencode/decodeしてやればいいですね。 しかし、作ったスクリプトを他の人にも使ってもらいたくなったときに問題は発生します。あなたの作ったスクリプトを使う人のターミナルのエンコーディングはUTF-8とは限らず、EUC-JPかもしれませんし、WindowsであればShiit_JISかもしれないからです。 それでは、その環境のターミナルのエンコーディングに合わせてencode

    Encode::Locale - 環境に合わせたエンコーディングを提供する - Articles Advent Calendar 2011 Casual
    soh335
    soh335 2011/12/02
    便利そう
  • Alien::RRDtool - RRDtoolをCPANから入れる - Perl Advent Calendar Japan 2011 Hacker Track

    前置き こんにちは。gfx です。みなさん、意識は高まっていますか? 僕は上々です。今回は拙作の Alien::RRDtool というモジュールを紹介いたします。 CloudForecastやGrowthForecastを使いたい!と思ったとき、RRDtoolのPerlバインディングであるRRDs.pmをインストールするのが面倒だったりします。特にperlbrewで入れたperlではRRDtoolsのソースコードをとってきてビルドしなければならないため、RRDtoolはパッケージマネージャを使ってインストールし、CloudForecastはsystem perlで動かすというのが今までのベストプラクティスでした。 Alien::RRDtoolはRRDtoolをCPAN経由でインストールするためのモジュールで、RRDtoolの各種コマンドとPerlバインディングを簡単にインストールすることが

    Alien::RRDtool - RRDtoolをCPANから入れる - Perl Advent Calendar Japan 2011 Hacker Track
    soh335
    soh335 2011/12/02
    やばいすごい便利そう
  • $@はグローバル変数

    あまり意識されていませんが、$@はグローバル変数です。気をつけないとおかしなことになります。以下のコードではdie()で例外を発生させているので「Error is Dummy error」と表示されるように見えますが、表示されません。 package Hoge; sub new { bless {}, shift } sub cleanup { # 色々処理 } sub DESTROY { my $self = shift; eval { $self->cleanup }; } package main; eval { my $hoge = Hoge->new(); die "Dummy error"; }; if ($@) { print "Error is $@\n"; } else { print "Everything OK!\n"; } evalがdie()によって終了し、スコー

    soh335
    soh335 2011/11/29
  • Smart::Args でバリデーションする。またはバリデーターとして必要な事 - Articles Advent Calendar 2010 Casual

    Smart::Args とは 実行時型チェック / パラメーターチェックが出来る便利なモジュールです。 現在、 Params::Validate がデファクトスタンダードっぽいんですが、速度が遅かったりするので正直微妙です。 まぁ、速度っていうか色々面倒い感じだなーって思ってきた人も多いと思います。 Smart::Args の使い方 use Smart::Args; sub foo { args my $p => 'Int', my $q => { isa => 'Int', optional => 1 }; say $q ? "$p, $q" : $p; } foo(p => 1); # 1 foo(p => 1, q => 2); # 1, 2 これまた簡単! 例えば、以下のようにすると foo(p => 'str'); 以下のように怒られます。 Validation failed f

    Smart::Args でバリデーションする。またはバリデーターとして必要な事 - Articles Advent Calendar 2010 Casual
    soh335
    soh335 2011/10/18
  • Coroを使って並行処理 - JPerl Advent Calendar 2009

    こんにちわ。『層・圏・トポス』読者の会からの刺客、id:hirataraです。 「並行処理」って言葉はなんだか魅力的ですよね! そこで、今日はCoroを使った並行処理を紹介します。なお、Coroはコアモジュールではありませんので、使ってみたい場合にはCPANからインストールして下さい。 スレッドを作る Coroでは、asyncによって新しいスレッドを作ることができます。ただし、asyncでスレッドを作っても、何もしなければ他のスレッドに勝手に処理が移ることはありません。asyncで作成した別のスレッドに制御を移すには、明示的な操作が必要となります。ここではcedeを使って、asyncブロックへ処理を移しましょう。 use strict; use warnings; use Coro; async { print "Another thread\n"; }; print "main thre