タグ

ブックマーク / blog.64p.org (118)

  • Shipped full featured Plack clone for Perl6 named `Crust` - tokuhirom's blog

    Hi, i'm tokuhirom, one of the core developer of Plack. During the past few weeks, I've been hack the Perl6. This is to celebrate the Christmas in the best mood. I'm a minimalist, and I love a software built on clean and well tested parts. I mean tokuhirom loves CPAN. To write the practical web applications in Perl6, it has released some of the library. HTTP::Server::Tiny - IO::Socket::Async based

  • [perl] Error in tempfile() using template /tmp/XXXXXXXXXX: Have exceeded the maximum number of attempts (1000) to open temp file/dir at hoge.pl line 14. のようなエラーが発生した場合の対処方法 - tokuhirom's blog

    File::Temp を使っていると、表題のようなエラーが発生することがある。 これは一件すると、ファイルを開く処理が失敗した用に見えて、ファイル開き過ぎとかかなあと思うんだけど、実際はそういうことではないようだ。 File::Temp の実装はこのへんになっていて、要するに EEXIST が発生した場合に 1000 回ファイル名を変えてリトライして、その結果としてダメだったというときにいい感じにあがる例外である。 https://github.com/Perl-Toolchain-Gang/File-Temp/blob/master/lib/File/Temp.pm#L602 ここを見れば分かる通り、EEXIST の時だけしか次のループにいかないので、OS 的な問題ではない。 https://github.com/Perl-Toolchain-Gang/File-Temp/blob/ma

    lesamoureuses
    lesamoureuses 2015/03/23
    わかりやすい “以上まで調査した結果、この事象はマニュアルに書いてあることが判明した”
  • Ubuntu の build-essentials 的なことを yum でやりたいときの方法 - tokuhirom's blog

    Ubuntu だと、開発関連のツールキットを一気にするには以下のようにすればよろしい。 apt-get install build-essentials これとおなじことを CentOS でやるには、以下のようにすればよいようです。 # yum groupinstall "Development Tools" # yum install kernel-devel kernel-headers 参考文献: Installing build-essentials in CentOS (make, gcc, gdb)

  • Perl 初心者がウェブアプリケーションを書く時に気をつけるべきこと - tokuhirom's blog

    $c->req->param('id') みたいなメソッドは使ってはいけない。これは歴史的経緯から残っているものなので、基的に使わない方がいい。 $c->req->parameters->{id} をかわりに使ってください。 Perl の世界には List コンテキストというものがあって、これがウェブアプリケーションを開発するときには鬼門となります。 +{ id => $c->req->param('id') } のようなコードは、param メソッドはリストコンテキストではすべての id を返すので、 ?id=3&id=hasegawa&id=yosuke というようなクエリが来ている場合、 +{ id => 3, hasegawa => 'yosuke' } のようなデータ構造が作成される。これは明らかに意図していない挙動である。 以下の様にかくのがおすすめです。 my $id =

    lesamoureuses
    lesamoureuses 2014/09/10
    パッと見て意味が分からなかったけど(3, 'hasegawa', 'yosuke')が変えるからハッシュになってhasegawaがkeyになるということか。scalar()使って評価すればいいのかな
  • なぜ Teng は良いものなのか - tokuhirom's blog

    なぜ Teng は良いものなのか、を YAPC で再考させられたのでここにメモしておく。 Teng は自社開発のウェブアプリケーションを作ってる人たちが作っていて、それがうちのニーズにあってるのでいいっていう話であって、どこでもすごい最高!! と主張したいわけではないです。まあ、個人の感想ですね。 ソースが読みやすい ソースがよくモジュール化されていて、読みやすい。自身で書いている部分が多いという贔屓目を抜きにしても読みやすいんじゃないかなーと。 僕らのような自社開発のウェブ屋では、なにか無茶な要望を受けた時にささっと対応するということが求められるシーンが多いので、ソースの読みやすさというのはかなり重要なファクターとなっています。 複雑な SQL を発行できないように機能が制限されている SQL ビルダーを使って JOIN やサブクエリを駆使したウェブアプリケーションを開発してしまうと、運

    lesamoureuses
    lesamoureuses 2014/09/01
    こういう方が後々読みやすいのでいい "SQL ビルダーライブラリの機能はある程度制限したうえで、複雑なクエリは直接SQLをゴーリごりと書けばいいという感じになっています"
  • cv ってコマンドが面白い - tokuhirom's blog

    lesamoureuses
    lesamoureuses 2014/07/14
    へーすごい!
  • Perl 5.19.9 で実装された signatures の構文をためしてみる - tokuhirom's blog

    use 5.019009; use autodie; use feature 'signatures'; no warnings "experimental::signatures"; package Foo { sub new($class, $n) { bless {n=>$n}, $class; } sub bar($class, $a) { $a+3; } sub baz($self, $a) { $self->{n} * $a; } } sub add($left, $right) { return $left + $right; } say add(1,2); say Foo->bar(4); say Foo->new(5)->baz(4); みたいな感じでつかえる。 【追記】 use 5.019009; use feature 'signatures'; no warning

    lesamoureuses
    lesamoureuses 2014/02/24
    すごいなぁ
  • Date::Simple が local $ENV{TZ} をさしかえててタイムゾーンがかわっちゃう件 - tokuhirom's blog

    Date::Simple#format が内部で local $ENV{TZ}='UTC+0'; POSIX::strftime(...); のようにしており、Date::Simple#formatの呼出以後でタイムゾーンが UTC にかわってしまうという問題がよくしられている。 この問題は、そういえば最近は話題にあがらないなあ、とおもっていろいろ調べたところ、これは Perl 体の issue と判断されて、perl 5.8.9 の時点で修正されていた。 On some systems, changes to C<$ENV{TZ}> would not always be respected by the underlying calls to C<localtime_r()>. Perl now forces the inspection of the environment on

    lesamoureuses
    lesamoureuses 2014/02/24
    “local $ENV{TZ} を利用する場合には Perl 5.8.9 or later を依存として指定しておけばよいようだ”
  • Perl で簡単にパーザを書く - tokuhirom's blog

    パーザを書こうという場合、Parse::RecDecsent のようなモジュールを使うのが一般的だが、Perl5 の正規表現は強力すぎるため、そんなものに頼らなくても超絶簡単にパーザを実装することが可能だ。 以下に、四則演算のパーザを示す。 use 5.018000; package Calc { use Carp (); sub parse { local $_ = $_[1]; _parse_expr(); } sub err { my ($msg) = @_; my $ret = join('', $_, "\n", (" " x pos()) . "^\n", $msg, "\n", ); Carp::croak $ret; } sub _parse_expr { my @nodes; until (/\G\s*\z/gc) { my $m = _parse_add() or do

    lesamoureuses
    lesamoureuses 2014/01/22
    \Gが何かわからなかったけどperlretutにあった。なるほど "\G アンカーは直前のマッチングで残った部分にマッチングします" http://perldoc.jp/docs/perl/5.18.1/perlretut.pod
  • テストについての個人の雑感 - tokuhirom's blog

    テストについての個人の雑感です。ここでいうテストってのは、なんかいわゆる開発をドライブするための開発者用のテストについてであって、品質の保証とかについては一切かんがえてません。 ざっくりいうと 「テストを書いた方が効率的に開発がすすむ場合にはテストを書く」 テストに対する認識 ソフトウェアにたいするテスト というものはソフトウェアそのものの価値には関係しない。 なので、テストにたいしてかけるコストなど、すくなければすくないほど良いにきまっておる。 Open Source Software のテストについて オープンソースソフトウェアの場合、送られてきた patch の品質を travis ci で確認したい、っていう要件とか、手元の環境以外での動作確認などを行いたいので、それなりにテストを書く必要がある。 まして、僕が OSS として公開しているものはライブラリが多い。ライブラリは一般にテ

    lesamoureuses
    lesamoureuses 2014/01/21
    「それぞれの場合で違うよね」のそれぞれの場合が書いてあって納得できる
  • Web Application の validation はどのレイヤーでかけるべきか - tokuhirom's blog

    数年前にも同じことかいた気がするけど、最近の状況にあわせてかいてみる。 途中で面倒になってきて説明が雑になっている点をご容赦ください。 言いたいことは「結局、昔はサーバサイドで懇切丁寧なエラーメッセージを出すためにModelではなくControllerでバリデーションに関する知識が必要だったけど 今はJavaScriptでやるから不要だよね111」ってことです。 この表題は、よく話題にあがるところなのだが、理想論としては Model, Controller, Client side のいずれにおいてもきっちりと validation を行うことがのぞましい。 しかし、実際にはなかなか面倒である。ということで、どこをはぶくかというと Controller における Validation であろう。 ユーザーに対する親切なメッセージは JS の側でだすのが理想的。model の validat

    lesamoureuses
    lesamoureuses 2013/11/26
    modelでやるんだけど、ユーザの入力に対してどうしようかなと思うことよくある
  • 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 によっ

  • PAUSE における comaint とはなにか - tokuhirom's blog

    よく miyagawa さんとかが comaint が云々といっていますが、意外としられていないのが comaint の実態です。 まずは PAUSE の処理フローについて考えてみましょう。 まず minil release とかして tar ball を PAUSE のサーバーにアップロードします。この時、アップロード先は authors/id/M/MO/MOZNION/HTML-Shakan-0.18.tar.gz とかになります。 そうすると PAUSE のインデクサがブンブンと動きだして、META.json の provides セクションまたは .pm を解析して、package とバージョンの情報が抽出され、データベースに登録されます。 この際、新規ネームスペースや、自分がもってるネームスペースならいいのですが、他の人がもってる namespace の場合には UNAUTHOR

  • Minilla を用いた Perl モジュールの作り方 - tokuhirom's blog

    http://shanon-tech.blogspot.jp/2013/05/perl.html Perl モジュールの作り方、2013年においては Authoring tool をつかって作るのがよいです。具体的には Minilla でつくるのがオススメであります。 perlbrew なり plenv なりで perl をいれたあとは、 % cpanm Minillaとして Minilla をインストールします。 % minil new Fooとすると、Foo.pm のスケルトンができあがります。作者の名前などは ~/.gitconfig などから自動的にさがしてきますので、設定不要です。 できあがったディレクトリは以下のような形になっています。 Foo ├── Build.PL ├── Changes ├── cpanfile ├── lib │   └── Foo.pm ├── LI

  • Carton 1.0 時代の Web アプリケーション開発フロー - tokuhirom's blog

    Carton 1.0 がでたところで、Web アプリケーション開発のフローを一度見直しておきたい、そんな人も多いでしょう。 そんな方のために僕のやりかたをまとめました。各社、議論の叩き台にしていただければよろしいかと存じます。 もっとも重要なことは、、 Carton を使うときに、僕が最重要だと思うことは、できるだけ番環境と開発環境の環境をそろえるということです。CPAN モジュールが番と開発でバージョンちがうから挙動がちがってた!! なんてのは時間の無駄ですし、よくないことですからね。 ですから、各開発環境と番環境をできるだけそろえることを意識していきたいとおもいます。 DarkPAN は使ってない そんなに DarkPAN 的なのを使うほど、DarkPAN 的なオレオレモジュールがないので、git submodule で管理しています。 【201308061241update】

    lesamoureuses
    lesamoureuses 2013/08/06
    実際の使い方参考になる
  • Carton 1.0 リリースによせて - tokuhirom's blog

    http://weblog.bulknews.net/post/57356232719/carton-1-0-is-released Carton 1.0 がリリースされました。おめでとうございます! miyagawa++ というわけで早速手元でうごかしてみたところ、いくつか問題があったので miyagawa さんに修正していただきました。 1.0 リリースまでにためしたいところだったのですが、面倒くさくて無理でした。 今回のアップデートで個人的にいいなーとおもったのは以下のような点です。 carton update が実装された 待望の carton update が実装されております。これにより、あたらしめのバージョンに移行することができますね! carton check が実装された cpanfile に記述されてるけどインストールされてないモジュールを確認できる!! carton.

    lesamoureuses
    lesamoureuses 2013/08/05
    carton checkいい
  • Future Perl - YAPC::NA 2013 に参加して - tokuhirom's blog

    YAPC::NA 2013 に参加してきました。その中でも印象にのこったことを取り急 ぎアップしておきます。 今回は日からは @yusukebe と @xaicron と TPF の President である Karen が参加していたようです。 僕は今回がはじめての US だったので、いろいろと困惑することもありました が、旅行記などには興味がないという人も多いでしょうし、書くのがめんどく さいですし、たぶん xaicron が書くと、ほとんど内容がかぶるので割愛させ ていただきます。 デニーズのシェイクに興奮する yusukebe と xaicron エントリーでは YAPC::NA で僕が感じたこと、技術的に Perl Community が どこに向いているか、といったあたりのことについて述べていきたいとおもい ます。 今年は Perl 25 周年ですので、これまでの Per

    lesamoureuses
    lesamoureuses 2013/06/08
    いろいろ違うようで楽しそう
  • Test::More で teardown/setup - tokuhirom's blog

    http://blog.ainam.me/2013/04/09/test-more-perl-testing/ http://lestrrat.ldblog.jp/archives/26535307.html package t::Util; use parent qw(Exporter); our @EXPORT = qw(lovetest $MOCK); use Test::More; sub lovetest { # setup local $MOCK = ...; # teardown は guard object で。 goto \&Test::More::subtest; }そしてテストケースはこう。 lovetest 'foo' => sub { ... $MOCK->do_something; };というのがここ数年はブーム。 Test::Class も最近はだいぶ使いやす

    lesamoureuses
    lesamoureuses 2013/05/27
    Test::Moreでsetupとteardownどうしてるんだろうと聞こうと思ったらちょうどその話題が昔にあった
  • CPAN Meta Spec 2.0 における requires, recommends, suggests - tokuhirom's blog

    cpanfile などにかく、requires, recommends, suggests の使い分け、どうあるべきか。 requires These dependencies must be installed for proper completion of the phase. recommends Recommended dependencies are strongly encouraged and should be satisfied except in resource constrained environments. suggests These dependencies are optional, but are suggested for enhanced operation of the described distribution. conflicts Thes

    lesamoureuses
    lesamoureuses 2013/04/26
    わかりやすいですね!
  • CPAN モジュールの開発についての最近の風潮 - tokuhirom's blog

    http://shibayu36.hatenablog.com/entry/2013/04/11/191322 ExtUtils::MakeMaker → Module::Build → Module::Install → Module::Build → そして今、Minilla が颯爽と登場! というわけで、2013年は Module::Build や ExtUtils::MakeMaker を直につかわない時代がきています。 Authoring tool をつかって管理していきましょう。くわしくは https://metacpan.org/module/TOKUHIROM/Minilla-v0.0.53/lib/Minilla/Tutorial.pod