タグ

関連タグで絞り込む (350)

タグの絞り込みを解除

perlに関するsugyanのブックマーク (737)

  • レコードがなかったらINSERTして返すみたいなのを確実にやる | おそらくはそれさえも平凡な日々

    find_or_create的なやつは大体どんなORMでも レコードを探す 無かったらINSERT みたいに実装することになると思う。ただこれだと、1と2の間でレースコンディションでエラー起きることがある。他のプロセスがINSERTしてしまうとかそういうやつ。 それを防ぎたい場合に、1の時点でFOR UPDATEするのはすごくダメで、空行にFOR UPDATEしたりするとMySQLだと盛大に乙るのは有名な話。 エラーを起こさないで、確実にレコードを取りたい場合にはどうすればよいかというと、以下のようにするのが良いと思っている。UNIQUEキー制約なりがちゃんと付いている前提。サンプルコードはTengの場合。 sub find_or_create_surely { my ($self, $table, $where, $opt) = @_; my $row; my $txn = $self-

    レコードがなかったらINSERTして返すみたいなのを確実にやる | おそらくはそれさえも平凡な日々
  • Perlでインストールされているモジュールを全部リストアップする - (ひ)メモ

    [twitter:@fujiwara] さんのこれ、 新しいPerlに今まで使ってたモジュールをまとめてインストールする - 酒日記 はてな支店 ExtUtils::Installedで現在インストールされているモジュールからcpanfileを作る をベースにちょっと弄ってモジュールをリストアップするスクリプトを書いて使ってたんですが、core モジュールがリストアップされてなかったので、もろもろ対応したのを上げましたのでどうぞみなさまお使いくださいませ。 https://github.com/hirose31/list-installed-perl-modules 出力フォーマットは、バージョン固定な cpanfile と Perl のハッシュの2つです。 Carton使ってないけど、同じモジュール、同じバージョンのモジュールを一式、新環境にもりっとまるっと入れたい!とかってときに便利か

    Perlでインストールされているモジュールを全部リストアップする - (ひ)メモ
    sugyan
    sugyan 2014/02/26
  • robust_quine.pl - 2014-02-20 - 兼雑記

    Ruby にできて Perl にできないことは無いという格言があります。 http://d.hatena.ne.jp/ku-ma-me/20140219/p1 $$qq.=q';printf"\$\$qq.=q%c%s%c;;##%c;\n\$\$uu.=q%c%s%c;;##%c;\n\n\$\$ii||=%c\$_;;\$\$\$ii.=\$\$qq;;s#^;.{217}\$#\$\$qq#ee;;#;#^^;\n\$\$nn||=%c\$_;;\$\$\$nn.=\$\$uu;;s#;.{217}\$#\$\$uu#ee;#;",39,$&,39,39,39,$&,39,39,92,92;exit';;##'; $$uu.=q';printf"\$\$qq.=q%c%s%c;;##%c;\n\$\$uu.=q%c%s%c;;##%c;\n\n\$\$ii||=%c\$_;;\$\$

    robust_quine.pl - 2014-02-20 - 兼雑記
  • 第23回 Perlアプリケーションのテストと高速なCI環境構築術(1) | gihyo.jp

    連載では第一線のPerlハッカーが回替わりで執筆していきます。今回はmyfinderこと久森達郎さんで、テーマは「Perlアプリケーションのテストと高速なCI環境構築術」です。テストに利用するさまざまなモジュールから、CI(Continuous Integration、継続的インテグレーション)環境の構築、そして増えたテストを高速に実行する枠組みの構築までを紹介します。 なお稿のサンプルコードは、誌サポートサイトから入手できます。 テストの目的 まずはテストを行う目的を整理します。 コードを壊していないことを確認する 1人で開発するものであれば、どんな状況であれ責任を負うのは自分だけですが、チームや組織が複数にまたがる場合にはテストが重要になります。プロダクトが大きくなるにつれ、自分の開発によって想定外の機能にも影響を与えることが多くなります。逆にほかの開発者が行ったコミットによって

    第23回 Perlアプリケーションのテストと高速なCI環境構築術(1) | gihyo.jp
  • HTTP::Entity::Parser をリリースしました - blog.nomadscafe.jp

    HTTP::Bodyと互換性のある HTTPのEntityをパースするモジュールをリリースしました。 https://metacpan.org/release/HTTP-Entity-Parser https://github.com/kazeburo/HTTP-Entity-Parser/ HTTPのEntityってのは、こういう範囲を指します。 POST /foo HTTP/1.1 # Not part of the entity. Content-Type: text/plain # ┬ The entity is from this line down... Content-Length: 1234 # │ # │ Hello, World! ... # ┘ 元ネタは「java - What exactly is an HTTP Entity? - Stack Overflow」

  • Test::Base::SubTest というモジュールを作った。またはテストケースとテストコードは分離されていたほうが嬉しい話 - Cside::Weblog

    2014-01-15 Test::Base::SubTest というモジュールを作った。またはテストケースとテストコードは分離されていたほうが嬉しい話 perl 自分は Test::Base が好きでよく使うのだけど、subtest 的な、テストのグルーピングができないのがずっっっと不満だったので、Test::Base::SubTest というモジュールを書いた。 https://metacpan.org/release/CSIDE/Test-Base-SubTest-0.1 https://github.com/Cside/Test-Base-SubTest 以下の様な拡張記法が使えるようになる。### でsubtestの 1 単位を表現する。 use Test::Base::SubTest; filters { input => [qw(eval)] }; run_is input =

    Test::Base::SubTest というモジュールを作った。またはテストケースとテストコードは分離されていたほうが嬉しい話 - Cside::Weblog
  • 普通のデーモンを 1) Server::Starterでホットデプロイ+ 2) slow-restart対応にする - Qiita

    序章 最近筆者があるシステム上の非同期ワーカーに対して作業していたところ、新しいコードをデプロイしてこのプロセス達を再起動すると全てのワーカーが同じタイミングで停止→再起動してしまうのでアラートがちらほら流れてきました。クリティカルなものではないのですが、アラートはうざいです。さらに開発機では何回か失敗もしたのですが、その失敗のせいでワーカーが起動に失敗することもありました。その間は当然ワーカー機能は止まったままです。 アラートはできればみたくないのです。さらに万が一新しいコードが起動に失敗した場合でも前の世代が動いていればこのあたりの心配をする必要がなくなります自分がそのあたりに手を入れるタイミングでServer::Starterをかまして対処してしまうことにしました。 元のワーカー まず前提として、このワーカー達は以下のような形で「実行するワーカーのコマンド名(実際はクラス名)」と「い

    普通のデーモンを 1) Server::Starterでホットデプロイ+ 2) slow-restart対応にする - Qiita
  • Log::StringFormatter でログ文字列のフォーマット - Qiita

    ログが主のかぜぶろです。ログがないと生きて行けません。 ログと言えばLog::Miminalですが、Minimalと言いつつも様々な拡張がなされており、好みの使い方にたどり着くまでに少し時間がかかるようになってしまったなと作者自身うすうす感じております。そこでLog::Minimalがもつ機能を分解し、アプリケーションの開発者にとって使いやすいログモジュール/メソッドを開発者自身で作りやすくしようという狙いのもと作ったのが、Log::StringFormatterです Log::StringFormatterLog::Minimalの文字列の整形部分を切り出して単独のモジュールにしたものです。 使い方 use Log::StringFormatter; use Scalar::Util qw/dualvar/; stringf('foo') -> 'foo' stringf('%s b

    Log::StringFormatter でログ文字列のフォーマット - Qiita
    sugyan
    sugyan 2013/12/02
    “ログが主食”
  • いい感じに出力をインデントしてくれるモジュール #perl - 詩と創作・思索のひろば

    [2013-11-20: Print::IndentedがCPANになくてしょんぼりしている。 とのことで shipit いたしました。 あざーす!] 過去のよく分からないコードの挙動を把握したいときには print (warn) するのが少なくともとりあえずの方法としては常套手段ですが、これがただ平坦に画面に現れるだけだと見づらい。例えば条件分岐やループの中にいる時は出力をインデントするようにすると動きが掴みやすくなるけれど、ただでさえ人間に単純労働を課す print デバッグにそこまで労力を使うのは辛い。そういう面倒さを減らそうという動機で、このモジュールは書かれました。 https://github.com/motemen/perl5-Print-Indented 一体何をするのかというと今書いた通りですが、print 時に、その print 関数の呼び出しコードのインデントに応じて

    いい感じに出力をインデントしてくれるモジュール #perl - 詩と創作・思索のひろば
    sugyan
    sugyan 2013/11/19
  • Perl5 において chomp() とはなにをするものか - tokuhirom's blog

    えてして、プログラミングにおけるバグの発生源は、使い方をまちがえていることに起因するものも多い。 を電子レンジでかわかす人がいるように。 そもそも chomp() という組み込み関数はなぜ必要なのか。 Perl5 では、データを行単位で処理するということが重視されたインターフェイスになっている。これは一般的なテキスト処理の頻出パターンだからだ。 while (<>) { chomp; say if /foo/; } これは、入力データを行ごとにとりだし、改行をとりのぞき、/foo/ という正規表現にマッチする行だけを表示するというプログラムだ。 Perl5 を知っている人なら、だれもが簡単に理解できる。 ここで $/ という変数が問題となる。$/ は、行の区切りがはいっている特殊なグローバル変数で、awk でいうところの RS にあたるものだ。 この $/ を変更することにより「行」の区

    sugyan
    sugyan 2013/11/18
  • The Perl FoundationのGrants Committeeメンバーになりました : D-7 <altijd in beweging>

    The Perl Foundation (TPF)のGrants Committeeのメンバーに選出されて就任依頼を受けたのでこれを謹んで引き受けることにしました!一応アジアからは唯一のメンバーとなっております。 Grants CommitteeはTPFから助成金の交付関連の管理をしているTPF内の委員会です。助成金を申請するにはこちらのルールに従って申請をメールするだけです。審査は年4回。現時点では助成金の上限は3000USドルと なっていますが、この上限はそのうち変更されるという噂を聞いています(そのあたりのルールまわりの審査・議論にも参加できる予定です)。 助成金の応募に関しては英語の壁だなんだはあるかとは思いますが、日発のおもしろい技術はたくさんありますしオープンソース系の自分の仕事に対してなんらかの報酬がつくのは多少モチベーションがあがる材料にもなると思いますので、興味があれば

    The Perl FoundationのGrants Committeeメンバーになりました : D-7 <altijd in beweging>
  • HTTP::Session2 has been released. - blog.64p.org

    English document is available on metacpan! Following document is written for non-english speakers. HTTP::Session2 を作成した。主に Amon2 で使用することを想定しているが、広く一般につかえるものと思う。 特徴 必要なときに必要なだけ Set-Cookie ヘッダを発行する 必要なときだけストレージにアクセスする クライアントサイドストレージとサーバーサイドストレージの両方をサポート XSRF トークンの管理をセッションライブラリ側に内蔵 AngularJS フレンドリー 上記が、重要なことである。 弊社のようなハイトラフィックなサービスを運営している場合には、できるだけリソースをケチりたいので、そういう思想なものが必要となった。通常の用途では Plack::Session

  • Plack::Middleware::Session::Simple has been released - Hateburo: kazeburo hatenablog

    English document is available on metacpan! Plack::Middleware::Session::Simpleをリリースしました。Plack::Middleware::Session(Store::Cache & State::Cookie)と互換性を保ちながら、効率よく動作することを狙っています。 必要なときに必要なだけ Set-Cookie ヘッダを発行する 必要なときだけストレージにアクセスする 弊社のようなハイトラフィックなサービスを運営している場合には、できるだけリソースをケチりたいので、そういう思想なものが必要となった。互換性があるので負荷が低いところで使っても問題が起きないと思う。 使い方 Plack::Middleware::Sessionで以下のように設定していたなら、 my $cache = Cache::Memory::Si

    Plack::Middleware::Session::Simple has been released - Hateburo: kazeburo hatenablog
  • アプリケーションに手を入れずに #isucon 2013 予選のperlアプリケーションのスコアをあげてみようの巻 - Hateburo: kazeburo hatenablog

    セッション管理モジュールやルーティングライブラリが速くなる事で何もしなくても isucon3 予選のperlのアプリケーションが高速化していく— masahiro nagano (@kazeburo) October 10, 2013 ということで、やってみた。 初期 「オンライン予選で使用した問題が手元で再現できるAMIを公開しました」に書かれているAMIを使って起動し、まず、初期状態でのベンチマークを取ってみる。 2013/10/28 14:21:18 done benchmark Result: SUCCESS RawScore: 865.9 Fails: 0 Score: 865.9 disble? たぶんミスだと思うのですが、Starmanの起動オプションがdisbleになっていたので修正 - command=/home/isucon/env.sh carton exec --

    アプリケーションに手を入れずに #isucon 2013 予選のperlアプリケーションのスコアをあげてみようの巻 - Hateburo: kazeburo hatenablog
  • Devel::NYTProf で Starlet/Starman (Plack) でうごくウェブアプリケーションのプロファイリングをおこなう方法まとめ - tokuhirom's blog

    Devel::NYTProf は Perl5 の世界でもっとも人気があるプロファイラである。表示が美麗であるし、ステップごとの処理速度が簡単にわかるのでとても便利だ。 そんな Devel::NYTProf であるが、Starlet/Starman のようなプリフォーク式のサーバーでうごくウェブアプリケーションとくみあわせる場合の方法論として、わかりやすい資料がみあたらなかったのでここに記すものである。 環境変数 NYTPROF を設定する Devel::NYTProf は環境変数で挙動を変えられる。 plack とくみあわせる場合には、以下のようにするとよい。 NYTPROF=sigexit=int:savesrc=0:start=no sigexit=int 通常、Devel::NYTProf は END { } ブロックでデータのファイナライズ処理をおこなうのだが、SIGNAL によっ

  • Released Cookie::Baker to CPAN - Hateburo: kazeburo hatenablog

    I released Cookie::Baker that provides HTTP cookie generator and parser http://search.cpan.org/~kazeburo/Cookie-Baker/ https://metacpan.org/release/Cookie-Baker ### synopsis use Cookie::Baker; $headers->push_header('Set-Cookie', bake_cookie('foo','val')); my $cookie = bake_cookie('foo', { val => 'val', path => "test", domain => '.example.com', expires => '+24h' }); my $cookies_hashref = crush_cook

    Released Cookie::Baker to CPAN - Hateburo: kazeburo hatenablog
  • 「Perl One-Liners」 を読んだ - Shohei Yoshida's Diary

    http://shop.oreilly.com/product/9781593275204.do 来月 Oreillyから出るのかと思ってググって見たら, 電子書籍として 4年前に出たものの紙バージョンでした. 紙で読むのもあれなので, 電子書籍版を読みました. $10なんで安いと思います. 電子書籍版 http://www.catonmat.net/blog/introduction-to-perl-one-liners/ 内容 言うなれば, One linerクックブックです. ファイルの内容の加工, 計算, 文字列生成, 文字列変換, 置換, テキストマッチング等の 内容です. それぞれ 10-20弱のレシピがあります. 事細かな説明があるわけではないので、全くの初心者には向かないと 思います。One Linerのスイッチの意味ぐらいは知っているという人 向けでしょうか. そんな複雑

    「Perl One-Liners」 を読んだ - Shohei Yoshida's Diary
  • Perlなんて大嫌いですし、YAPC楽しみです - アルミ缶の上にアルフォート

    Perlなんて大嫌いです。 モジュールの最後の「1;」のダサさったらないし、$@とか諸々の省略形に吐き気がするし、オブジェクト指向は完全に後付けで「bless」でまず脱落しそうになったし、クラスメソッドとインスタンスメソッドの区別もないし、アンスコ始まりをprivate methodとみなす紳士協定だし、インスタンス変数は外からいじり放題だし、$@がグローバル変数なのも罠だし、Test::Moreなどのモジュールはsub{}で頑張ってDSLっぽくしようとしているのがなんだか涙ぐましいし、ググり方次第でインターネット黎明期のしょうもないCGI記事がわんさか出てくるし、そもそもPerlのスローガン「TMTOWTDI(やり方は1つじゃない)」とか大嫌いだし(初心者は酷い書き方ができてしまうし、ベストなやり方を模索する必要があるし、それでいて他人と開発するときは全てのやり方を把握していないと読めな

    Perlなんて大嫌いですし、YAPC楽しみです - アルミ缶の上にアルフォート
  • 翻訳 CPAN::Meta::Spec、Module::CPANFile、Minilla、Milla::Tutorial、cpanm、Carton、plenv、plenv-contrib - Practice of Programming

    CPANまわりのツールたちの開発が活発なので、翻訳しようと前々から思ってたのですが、ようやく翻訳しました。 CPAN::Meta::Spec ... CPANメタデータ仕様 cpanfile ... PerlアプリケーションのためにCPANの依存性を記述するためのフォーマット cpanfile-faq ... cpanfile FAQ Minilla ... CPANモジュールオーサリングツール Minilla::Tutorial ... Minilla チュートリアルドキュメント Dist::Milla::Tutorial ... Milla HOW TO App::cpanminus ... App::cpanminus cpanm ... cpanm コマンド Carton ... Carton plenv plenv-contrib 最初は、cpanfile とMinillaだけの

    翻訳 CPAN::Meta::Spec、Module::CPANFile、Minilla、Milla::Tutorial、cpanm、Carton、plenv、plenv-contrib - Practice of Programming
    sugyan
    sugyan 2013/09/12
  • PerlでWebAppの開発に必要なN個のこと - Islands in the byte stream (legacy)

    あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずPerlについて知っていることを書いた。 パッケージマネージャ まずライブラリの管理。モジュールをインストールし、可能であればバージョンを固定し、適切にロードする機能が必要だ。Perlの場合は cpanm というCPANクライアントでライブラリをインストールする。バージョンの固定とライブラリパスの設定は carton で行う。 https://github.com/miyagawa/cpanminus https://github.com/miyagawa/carton アプリケーションサーバ Webサーバへのインターフェイスとしては、PSGIという仕様がある。PSGIに準拠したツールキットとしてPlack

    PerlでWebAppの開発に必要なN個のこと - Islands in the byte stream (legacy)