タグ

perlに関するy_uukiのブックマーク (517)

  • Redis::Fastでつらかったことまとめ&Redis::Fastはなぜ遅いか - Qiita

    こんにちは、いっちーです。 一年とちょっと前にRedis::FastというモジュールをCPANizeしました。 PurePerlなRedisクライアントであるRedis.pmのXS版です。 Redis.pmとある程度互換性があり、Redisと書かれている部分をRedis::Fastに置換するだけで動きます。 はじめてのCPANizeでXSを使ったモジュールを公開するという暴挙にでたために、 公開後のバグ修正に頭を悩ませることになりました。 1年経って色々と溜まってきたので、この場を借りてまとめておきます。 minillaでXS&submodule Redis::FastはPurePerlなRedis.pmをフォークして、 バックエンドをhiredisに置き換えたものです。 CPANモジュールの作り方を調べてminillaを使うとよさそうというのがわかったので、 フォークするさいにminil

    Redis::Fastでつらかったことまとめ&Redis::Fastはなぜ遅いか - Qiita
  • PerlとRedis | おそらくはそれさえも平凡な日々

    この記事は Perl5 Advent Calendar 2015 の7日目の記事です。昨日は、 @karupanerura さんの XSことはじめ でした。 今回は、RedisをPerlで扱う上での便利CPANモジュールを紹介します。大体 @shogo82148 無双になります。 Redis::Fast RedisクライアントはRedis::Fast一択です。Redis.pmが公式推奨のモジュールですが、これはPure Perl実装なのでパフォーマンスがそれほど良くありません。 Redis::FastはRedis.pm互換のインターフェースを持ったXSモジュールであり、内部的にはRedis公式のCクライアントであるhiredisのバインディングになっているので、安定していて使いやすいといえるでしょう。 my $redis = Redis::Fast->new; $redis->incr('

    PerlとRedis | おそらくはそれさえも平凡な日々
  • Perl の正規表現でマッチした文字列自体を取得する今昔 - Qiita

    バージョンごとの表の絵文字は以下の意味です 使用可能 使用可能だが致命的な性能劣化を招くため忌避される (空欄) 対応前バージョン Perl 5.20 以降なら $& による方法が一番簡単ですが、それ以前のバージョンでの経緯を知っているチームメンバーから拒絶反応を受ける可能性もあります。そのプログラムが今後 Perl 5.20 より前のバージョンで実行する必要が一切ないと言えるなら $& でも問題ないと思いますが、外部公開するモジュールなどの場合は use v5.20 等で明言しないのであれば $& の使用は避けておくべきでしょう。 それぞれの手法 マッチ全体をキャプチャのカッコでくくって $1 で参照する方法 今も伝統的に行われている、マッチ全体をキャプチャのカッコでくくる方法です。 # $body から a か A で始まる単語を取り出して $match に入れる # \b は単語境界

    Perl の正規表現でマッチした文字列自体を取得する今昔 - Qiita
  • Test::Apache::RewriteRules で mod_rewrite のテストを書こう - 大西日記 - はてなダイアリー

    YAPC::Asia Tokyo 2010 で LT してきました。以下はその資料(に少し説明を追加したもの)です。 mod_rewrite 正規表現によるURL書き換えモジュール スイス製アーミーナイフ / 黒魔術 まだ Apache 使ってますよね? reverse proxy とか… はてなの mod_rewrite 活用事例 ほぼ reverse proxy URLにより用途別のbackendに振り分ける 用途によりbackendを分けリソース効率化 特定のアクセスをキャッシュサーバーに振る URL加工 Squidにキャッシュさせたいが同一URLで異なるコンテンツを返す場合がある →クエリに情報を付加する BAN! 便利な半面… 増える! $ cat jp.www.proxy.apache.conf | grep Rewrite | wc -l 179 テストしづらい! → 一行加

    Test::Apache::RewriteRules で mod_rewrite のテストを書こう - 大西日記 - はてなダイアリー
    y_uuki
    y_uuki 2016/01/18
    なるほどね
  • Perlプログラマのためのgdb入門(at Shibuya.pm #9 LT) - とあるはてな社員の日記

    先日のShibuya.pm #9のLightening Talkで「gdbでXS on mod_perlをデバッグ」という話をしてきました。XSを使い出すと、従来のPerl的デバッグだけでは不十分なのでgdbをうまく使って、効率的にデバッグしましょう、という話です。実は、はてな社内では1年近く前に勉強で話したネタだったのですが、ようやく公開することができました。 Shibuya.pmでは5分という枠があったのでショートver.でしたが、ここでは制限はないので、来のロングバージョンの資料をアップします。ちょっと公開できない情報が混っていたので、xxxで隠していますが、ご了承ください。 ちなみに、Rubyとかでも似た感じでデバッグできると思うので、そちらの人も参考にしてください。長いよ!という人は、最後の「これは設定しておけ的gdb初期化マクロ」だけでもどうぞ。かなり便利です。 (資料公開が

    Perlプログラマのためのgdb入門(at Shibuya.pm #9 LT) - とあるはてな社員の日記
  • mod_perlで親プロセスとのCopy on Writeな共有メモリを増やす方法。 - hideden.hatenablog.com

    大量にアクセスがあってMaxClientを大きく設定したい場合、Apacheの1プロセスあたりのメモリを少なくするのが重要。当然アプリ側で大きなライブラリを読み込まずに画像の変換はGearmandにタスクとして投げたりとかの工夫するのも有効だが、fork元になるApacheの親プロセスと子プロセス間でできる限りCopy on Writeな共有メモリを増やすのも有効。 その辺の詳しい仕組み等の話はnaoyaさんがd:id:naoya:20080212:1202830671でしてるのでそこを参考に。linuxカーネルまわりの仕組みって楽しいよね。会社の案件ではFreeBSDサーバーも結構あるんだけどFreeBSDではどうなるのかは知らない。 で、社内にXenなテストサーバーがあるのでまっさらな環境で色々実験してみた。・・・過程を全部書こうとしたら長くなったので省略。地味にpsしたり/proc/

    mod_perlで親プロセスとのCopy on Writeな共有メモリを増やす方法。 - hideden.hatenablog.com
  • 第34回 DockerによるPerlのWebアプリケーション開発(2):Perl Hackers Hub|gihyo.jp … 技術評論社

    前回の(1)はこちらから。 WebアプリケーションをDocker化するときの考え方 Dockerの基がわかったところで、(⁠2)では、WebアプリケーションをどのようにDocker化していくのか、なぜDocker化するのかについて説明します。 WebアプリケーションのDocker化の方針 Webアプリケーションを動作させるためには、中心となるWebアプリケーションサーバに加えて、データベースサーバ、KVS(Key-Value Store)サーバ、プロキシサーバなどが必要なことが多いでしょう。 まず、これらのサーバすべてをDocker上で動作させるという方針と、一部のサーバ、たとえばWebアプリケーションサーバのみをDocker化するという方針があります。次に、すべてのサーバを1つのDockerコンテナ内で動かすという方針と、各サーバをそれぞれ別のDockerコンテナ内で動かすという方針が

    第34回 DockerによるPerlのWebアプリケーション開発(2):Perl Hackers Hub|gihyo.jp … 技術評論社
    y_uuki
    y_uuki 2015/12/21
    次のやつきてた
  • 喰らえ10年鍛えた俺の test.pl !! - 大西ブログ

    こんにちは、2011年くらいにディレクターになってめっきりPerl書かなくなった id:onishi です。 この記事は Perl5 Advent Calendar 2015 18日目です! 書き捨てのコードを test.pl という単一ファイルに __END__ と共に上に追加し続けて10年。3万行超に成長した俺の test.pl から厳選したコード群を喰らえ、という主旨の記事です。 今日のお品書きはこんな感じです。 list() fotolife wq punycode statuscode 結びの言葉 ( [PR]この目次ははてなブログの目次機能で自動生成しています ) ちなみに、書き捨てのコードから良いものは、プロジェクトのリポジトリに入れたり、~/bin/ に置いたりしています。今日は ~/bin/ に移った厳選処理も紹介しますね。 とにかく test.pl にいろんな処理が書か

    喰らえ10年鍛えた俺の test.pl !! - 大西ブログ
    y_uuki
    y_uuki 2015/12/18
    おもしろい
  • 第34回 DockerによるPerlのWebアプリケーション開発(1) | gihyo.jp

    連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは、普段ははてなPerlで書かれたWebサービスを運用している@y_uuk1こと坪内佑樹さんで、テーマは「DockerによるPerlのWebアプリケーション開発」です。Dockerを用いてPerlのWebアプリケーション開発環境を構築するメリットやノウハウを紹介していきます。 稿のサンプルコードは、WEB+DB PRESS Vol.88のサポートサイトから入手できます。 Dockerとは何か 題であるPerlのWebアプリケーションとDockerの話に入る前に、Dockerを初めて触る人のために、Dockerそのものについて簡単に紹介します[1]⁠。 最近はDockerの話を頻繁に見聞きする一方、「⁠結局、何を目的として、どのような方法で、何をするものなのかがよくわからない」という話も耳にします。「⁠Doc

    第34回 DockerによるPerlのWebアプリケーション開発(1) | gihyo.jp
    y_uuki
    y_uuki 2015/12/18
    DockerとPerlの記事公開されてた
  • おそらくはそれさえも平凡な日々: cpanfileのrequiresにURLを直接指定するのは好ましくない

    cpanfileでは、requires "git:..."; のように、gitやtarballのURL等を指定すれば cpanm --installdeps . でモジュールがインストールできる「裏ワザ」があることが 結構知られているようです。しかし、これは好ましくありません。そもそも CPAN::Meta::Spec準拠ではありません。 これはあくまでcpanm側が第1引数にgitやtarballのURLなどを指定すればよしなに インストールしてくれるから現状は「偶然」そういう動きになっているだけです。 (cpanm git:...でインストールできるので、requires "git:..."; って書いてあれば 入れてくれてしまうってことです。) あくまでインストールにcpanmを使った場合に動くってだけの限定的な話で、しかも今後は 動かなくなる可能性が高いです。 実際問題、requi

    y_uuki
    y_uuki 2015/12/11
  • Perl の DateTime 利用上の注意点

    この投稿は Perl 5 Advent Calendar 2015 の 9日目の記事です。 Perl の Time::Piece 利用上の注意点 という記事の最後にDateTimeへの言及があったのですが、 DateTimeはDateTimeでいろいろとハマりどころがあるんですよね・・・。 僕も今年いくつか罠にハマりました。ちょうどアドベントカレンダーの季節ですし、この機会にハマりどころをまとめてみることにします。 遅い いろんなところで言われていることですが 遅い です。 試しに代表的な日付を扱うモジュールでベンチをとってみました。 (比較のために時間をとるためのPerlの組み込み関数も入れてあります) # いろんな形式で今の時間を取得する use Benchmark qw/ cmpthese /; use Time::HiRes (); use Time::Moment; use Ti

    y_uuki
    y_uuki 2015/12/09
  • Perl の Time::Piece 利用上の注意点 - Hatena Developer Blog

    こんにちは、アプリケーションエンジニアの id:nanto_vi です。この記事ははてなデベロッパーアドンベントカレンダー 2015 の 2 日目です。 Perl で日時を扱うモジュールのひとつに Time::Piece があります。コアモジュールなので手軽に使えますが、Perl - Time::Piece に関するとりとめのないコト - Qiita にもまとめられているように注意すべき点も多いです。ここでは、そのような注意点をいくつか挙げていきたいと思います。 なお、以下のコードは Time::Piece 1.31 で確認しています。 タイムゾーン情報を持たない 大前提として、Time::Piece のインスタンスはタイムゾーン情報を持っていません。持っているのはローカル時間か GMT かの区別のみです。その「ローカル時間」が実際にどのタイムゾーンなのかは、環境 (環境変数 TZ の値な

    Perl の Time::Piece 利用上の注意点 - Hatena Developer Blog
    y_uuki
    y_uuki 2015/12/02
  • 最近の Plack のパフォーマンス改善まとめ 2015年11月版 - Hateburo: kazeburo hatenablog

    OSS活動の成果発表のお時間です。 Plackの 1.0038と2015年11月27日時点のmasterにはPlack::Request、Plack::Responseのパフォーマンスをあげる変更が入ってます。その紹介とベンチマークです。 github.com Plack 1.0038 で HTTP::Headers::Fast 0.20 につけた flatten メソッドを使うようになってます。Plack::Response->finalizeのパフォーマンス向上が期待できます。 github.com こちらはまだmasterにmergeされた状態。リリースはされてない。POSTリクエストのパースにHTTP::Bodyではなく、HTTP::Entitiy::Parserを使い、パラメータのパースに WWW::Form::UrlEncodedを使うようになっています。 HTTP::Enti

    最近の Plack のパフォーマンス改善まとめ 2015年11月版 - Hateburo: kazeburo hatenablog
  • DBIx::DSN::Resolver ってのを書いた - blog.nomadscafe.jp

    YAPC::Asia Tokyo 2012 始まりましたね。 それとはあまり関係なく DBIx::DSN::Resolver というモジュールを書いてリリースしました https://metacpan.org/release/DBIx-DSN-Resolver 何をするモジュールなのかというと、DBIでデータベースに接続する際に使うDSN中のホスト名を名前解決してくれるモジュールです。mobageでxaicronが書いていたのを参考にして作りました dbi:mysql:database=mytbl;host=dbserver.local これを dbi:mysql:database=mytbl;host=10.9.4.1 と変換してくれます。 また、名前解決する機能を差し替える事ができるので、そこでキャッシュを挟む事も可能です。Cache::Memory::Simpleを使うと以下のよう

  • 乱数の性質とセッショントークンの作成 - $shibayu36->blog;

    ユーザアカウントのログイン機能とか作ってると、何らかの形でセッション用のトークンを作成する機会がある。今まではこれは適当にランダムな値を利用していればいいんでしょと思っていたのだけど、ちょっと違ったのでメモ。 乱数の性質 http://akademeia.info/index.php?%CD%F0%BF%F4によると、乱数には三つの性質がある。 無作為性:統計的な偏りがなく、でたらめな数列になっているという性質。 予測不可能性:過去の数列から次の数を予測できないという性質。 再現不可能性:同じ数列を再現できないという性質。再現するためには、数列そのものを保存しておくしかない。 この時、少なくとも無作為性のみ満たされていると弱い擬似乱数、無作為性と予測不可能性が満たされていると強い擬似乱数、全てが満たされていれば真の乱数と呼ばれる。ソフトウェアだけでは、真の乱数を作ることができず、真の乱数に

    乱数の性質とセッショントークンの作成 - $shibayu36->blog;
    y_uuki
    y_uuki 2015/10/25
    なるほど
  • モダンmod_perl入門 #yapcasia

    1. モダンmod_perl入門 (Modern mod_perl Guide) 尾形 鉄次 (OGATA Tetsuji) Twitter: @xtetsuji 2012/09/29 YAPC::Asia Tokyo 2012 2. Attention for audience • This slide is mainly written by Japanese, and few English. In the future, I will write and share this slide of English version, perhaps. • I speach by Japanese language. • If you do not known Japanese language, please fun and feel from some Perl code and fe

    モダンmod_perl入門 #yapcasia
  • YAPC::Asia Tokyo 2013: 「本当にあったレガシーな話」と最近のlivedoorBlogの改修 : D-7 <altijd in beweging>

    はい、というわけで自分のトークです: 昨年12月頃から関わってるlivedoorBlogのコードを触っていた時の憤りをスライドにぶつけてみました。 追記:スライドに「ログにマーカーをつける」というのは、(コード読んでないけど)多分こちらのエントリにあるLog::Minimal::Indentとだいたい同じ感じのヤツです ところでWeb上で見かける感想の中でこんなのがありました: 今年個人的に一番衝撃的だったのはやっぱ、livedoor blogのPlack化です。技術的な側面もさることながら、ああいう近視眼的には何のメリットもないし、逆にデメリットの方が大きそうな案件にリソースを割くジャッジができる会社としての姿勢が当に凄いなと。 実はビジネス的にも意味はあるんだなー。 なかなか書くことができなかったんだけど、その内容というのがこちらと→ ブログのお引っ越し機能を大幅に強化しました! (

    YAPC::Asia Tokyo 2013: 「本当にあったレガシーな話」と最近のlivedoorBlogの改修 : D-7 <altijd in beweging>
  • 第17回 Webアプリケーションのパフォーマンス改善(2) | gihyo.jp

    前回の(1)はこちらから。 ボトルネックの特定 システムの現状が把握できたところで、ボトルネックの特定に取りかかります。アプリケーションのレスポンスタイムのうち、どこにどれぐらいの時間がかかっているのかを特定していきましょう。 Time::HiResによる簡単な計測 Time::HiResモジュールを利用することで、特定の個所にどれぐらい時間がかかっているのかを計測できます(リスト5⁠)⁠。 リスト5 Time::HiResの使用例 use Time::HiRes qw/ gettimeofday tv_interval /; my $t0 = [ gettimeofday ]; # 計測開始 ... # 処理時間を計測したい処理 my $elapsed = tv_interval($t0); # 経過時間(秒) ここは遅いだろう、という部分に目星が付いている場合には、処理時間を確実に計測

    第17回 Webアプリケーションのパフォーマンス改善(2) | gihyo.jp
  • 努力、忍耐、謙遜

    Diligence,Patience,and Humility 努力、忍耐、謙遜 Larry Wall ラリー・ウォール Translation by Akira Kurahone 我われのPerlコミュニティでは、格言を好んで使う。そういった格言の一つに、「物事のやり方は一つではない」と言うのがある。この格言はPerlコミュニティの真理である。また、Perlそのものにも当てはまる。そして、書の各章で明らかにされるように、オープンソースコミュニティにも当てはまる。私は、ここでオープンソースの効用のすべてを語るつもりはない。それは、英語が役に立つ理由を説明しようとするようなものである。ただ、Perlの現状と今後についてなら多少は語れると思う。 こんな格言もある。「プログラミングの三大徳目は、無精、短気、傲慢である」。Perlの偉大なプログラマたちは、それらの徳目を信奉している。オープンソー

    y_uuki
    y_uuki 2015/07/16
  • rperl

    NAME rperl Front-End Program Restricted Perl, The Optimizing Perl 5 Compiler SYNOPSIS rperl [ARGUMENTS] input_program_0.pl [input_program_1.pl input_program_2.pl ...] rperl [ARGUMENTS] MyClassFoo.pm [MyClassBar.pm MyClassBat.pm ...] rperl [ARGUMENTS] input_program_0.pl MyClassFoo.pm [input_program_1.pl ... MyClassBar.pm ...] ARGUMENTS --help ...OR... -h ...OR... -? Print this (relatively) brief he

    rperl
    y_uuki
    y_uuki 2015/07/05
    やばそう