タグ

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

  • Module::Spy - Spy for Perl5 - tokuhirom's blog

    I released the new great Module::Spy. Repository is now on github.com/tokuhirom/Module-Spy.git. I saw jasmine at few days ago. jasmine is very popular BDD testing framework for JavaScript. jasmine has the great interface for spy. A spy can stub any function and tracks calls to it and all arguments. I'm using the local feature in the past days. Because it's good enough for me. For example, followin

    oppara
    oppara 2014/03/09
    Module::Spy - Spy for Perl5 - http://t.co/RBKdgquYtw
  • Web Application の validation はどのレイヤーでかけるべきか - tokuhirom's blog

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

    oppara
    oppara 2013/11/26
    Web Application の validation はどのレイヤーでかけるべきか - http://t.co/1nocMozLPA
  • ngResource はどうやって値を埋めているのか - tokuhirom's blog

    ngResource は AngularJS で RESTful API を call する際につかえるクライアントライブラリだが、これがなかなかマジカルな動きをする。 具体的には、以下のようなコードがなぜか動く。HTTP リクエストが実行された後で $scope.entries にいい感じにレスポンスがうまっているのだ。 $scope.entries = $resource(‘/entry’).query(); 通常なら動かなそうなコードだ。なぜこれが動いてしまうのか。 なぜ動くのか $scope.entries = $resource(‘/entry').query(); のとき、ngResource の内部では以下のようなことが起きている。 $scope.foo = (function () { // 空の配列を作る var value = [ ]; $http.get(‘/foo’

    oppara
    oppara 2013/11/06
    ngResource はどうやって値を埋めているのか - http://t.co/1nocMozLPA
  • Docker で Growthforecast をインストールする方法 - tokuhirom's blog

    ちょいちょい GrowthForecast のインストールが perl だから難しいとかいってる人をみかけるけれど、Dockerfile が用意してあれば、セットアップは簡単になるんじゃないだろうか。 audreyt が Dockerfile で配布する方法で irc logger を配布していたし、それを真似してみるのもアリかもしれない。そんな風におもって僕もやってみることにした。 Docker をつかうと、アプリをふくんだイメージを簡単に配布することが可能となる。インストール手順をごちゃごちゃとブログに書いたりするのもいいけれど、Dockerfile を共有したほうがいいのではないだろうか。再現可能だし。chef でもなんでもいいけど、docker はインストールが簡単なのがいいし、覚えることがすくなくていい。 いらなくなったら、イメージごとポイすればいいだけで、簡単だしね。 さて

    oppara
    oppara 2013/08/15
    Docker で Growthforecast をインストールする方法 - http://t.co/1nocMozLPA
  • Carton 1.0 時代の Web アプリケーション開発フロー - tokuhirom's blog

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

    oppara
    oppara 2013/08/06
    Carton 1.0 時代の Web アプリケーション開発フロー - http://t.co/sfdf56Zb41
  • 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)

    oppara
    oppara 2013/07/22
    Ubuntu の build-essentials 的なことを yum でやりたいときの方法
  • Disqus の E-mail moderation が便利。 - tokuhirom's blog

    oppara
    oppara 2013/07/14
    Disqus の E-mail moderation が便利。
  • OSX でプロファイリングするなら callgrind + qcachegrind - tokuhirom's blog

    brew install valgrind qcachegrindとしてインストール。 valgrind --tool=callgrind ./kiji -e '(-> $n { say($n) })(4)'でプロファイルとって、 qcachegrind callgrind.out.92249とすると こういう風にみれてよい。

    oppara
    oppara 2013/06/29
    OSX でプロファイリングするなら callgrind + qcachegrind - tokuhirom's blog.
  • plenv 1.9.x のおしらせ - tokuhirom's blog

    plenv が 1.9.x になり、すべてが bash スクリプトになりました。基的には rbenv のコードのコピペとなっています。 前のバージョンにくらべてなにがすぐれているかというと、一番おおきいのは PERL5LIB と PERL5OPT をみなくなっているという点です。bash でうごいているので、perl つかってないのであたりまえですね。これにより、miyagawa さんのとこの Carton さんとの相性がグンバツによくなっております。 具体的には以下のようなケースでの問題が解消しています。 % PERL5OPT=-MDevel::Cover make test Can't locate Devel/Cover.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library

    oppara
    oppara 2013/05/31
    plenv 1.9.x のおしらせ - tokuhirom's blog.
  • Perl 5.18 時代における Core module についての捉え方について - tokuhirom's blog

    Perl 5.20 で、CPANPLUS とその依存モジュールたちが core distribution から分離されます。 また、5.22 では CGI.pm と Module::Build が分離されそうです。 ここにいたり、Perl 5 の core distribution にはいっている、ということの意味が徐々にかわってきつつあります。 では、現在の状況はなぜおきているのかを考えてみましょう。 configure_requires の普及Perl 5.8.5 あたりの時代では、Module::Build などは core distribution にはいっていないと、つらかったわけですが、configure_requires が普及したことにより、インストーラを CPAN shell で自動的にインストールすることができるようになりました。 これにより Module::Build

    oppara
    oppara 2013/05/29
    Perl 5.18 時代における Core module についての捉え方について
  • 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

    oppara
    oppara 2013/05/14
    Minilla を用いた Perl モジュールの作り方 - tokuhirom's blog.
  • ふと思いたって、emacs の設定を1からやりなおしたの記 - tokuhirom's blog

    久々に Emacs の設定をした。普段は vim をつかっているのだが、日語の長 文を vim で書くのはつらいので Emacs 環境を整備したかったのだ。 (Emacs ですべてを書くと左手の小指が死ぬので、日語のときだけにつかう ことにしている) Emacs の設定は最近は MELPA だか package.el だか el-get だかでやるのが ナウいらしいのだが、どうちがうのかよくわからない。いろいろと日語の情 報があるのだが、「そもそもどれがなんなのか」というところをあんま説明し てくれてなくて辛い。 いろいろと調べた結果、僕は以下のような結論にたっした。 package.elインストーラ。tar ball とか file を指定すると、それをインストールして くれる。便利。 MELPAレポジトリから定期的にフェッチしてきて、いいかんじに package.el 対応の サ

    oppara
    oppara 2013/05/02
    ふと思いたって、emacs の設定を1からやりなおしたの記 - tokuhirom's blog.
  • ウェブサービスのクライアントライブラリやHTTPをつかったミドルウェアのクライアントを作成する際に気をつけるべきこと - tokuhirom's blog

    ウェブサービスのクライアントや、Net::Groonga::HTTP のようなミドルウェアのクライアント、いろいろありますが、HTTP サーバーへの簡単なアクセスを提供するライブラリをつくるときに僕が気をつけていることをここに記す。みんな気をつけたほうがいいです。 HTTP Client Library の引数を変更できるようにするか、HTTP Client Library のインスタンスをさしかえられるようにする変更できないライブラリとか利用価値がないです。。 タイムアウトの設定もかえられないライブラリとか、たまにありますが、ちょっとひどいですね。 生のレスポンス情報がとれるようにするHTTP::Response なり Furl::Response なりをそのままとれるようにすべき。 たとえば、$client->last_response のようなメソッドを用意し、最後のレスポンスオブジ

    oppara
    oppara 2013/04/26
    ウェブサービスのクライアントライブラリやHTTPをつかったミドルウェアのクライアントを作成する際に気をつけるべきこと - tokuhirom's blog.
  • cpanm の挙動がおかしいな、とおもったら確認すべきこと - tokuhirom's blog

    だいたいはセットアップに失敗しているだけですが、cpanm がキョドってるときに僕がやっているトラブルシューティングの手順をここに記す。 おもった通りの cpanm をよんでいるかチェックする% which cpanmおもった通りの perl で cpanm がうごいているかどうかみるcpanm -vcpanm がちゃんとしてるかみる% head `which cpanm`変な PERL5LIB とか PERL5OPT とかを設定してないかみる% env | grep PERLログをみよう~/.cpanm/build.log をみると答えがのっている。 ログをさらそう~/.cpanm/build.log を社内ノーペーストにはって助けをもとめたりするとよい。 社内にそれっぽい人がいない場合は http://lingr.com/room/perl_jp/ に相談するとよい。

    oppara
    oppara 2013/04/03
    cpanm の挙動がおかしいな、とおもったら確認すべきこと - tokuhirom's blog.
  • Perl における一般的なコーディング規約について - tokuhirom's blog

    http://perldoc.perl.org/perlstyle.htmlhttp://perldoc.jp/docs/perl/5.8.0/perlstyle.podperlstyle.pod にのっているものが公式のスタイルガイドです(Larry 風)。 Larry has his reasons for each of these things, but he doesn't claim that everyone else's mind works the same as his does. このへんが Perl らしさ、というかそういうかんじですね。 Perl Best Practice にのっている Damian style もありますが、これはだいぶ癖がつよいです。 日では「miyagawa さんのスタイルにあわせておけば DIS られる心配はない」方式のコーディングスタ

    oppara
    oppara 2013/03/29
    Perl における一般的なコーディング規約について - tokuhirom's blog.
  • サーバーのセットアップは perlbrew とかじゃなくてよくね? という時のライフハック - tokuhirom's blog

    https://metacpan.org/module/TOKUHIROM/Perl-Build-0.06/bin/perl-build perl-build というコマンドをつかうと便利。 perl-build 5.16.2 /opt/perl-5.16/ とかで管理するとよい。 perl-build 5.16.3 /opt/perl-5.16/でのアップグレードもうごいている様子。 おためしあれー。 FAQ./configure -d -Dprefix=$path でよくね?それでもいいのですが、PatchPerl によるパッチがあたるので、古いバージョンも確実にはいるのが嬉しいところです。 あと、tar ball のフェッチとかまで自動的にやってくれるのも便利。

    oppara
    oppara 2013/03/19
    サーバーのセットアップは perlbrew とかじゃなくてよくね? という時のライフハック - tokuhirom's blog.
  • 安定的な Perl アプリケーション運用のための perlbrew 運用テクニック - tokuhirom's blog

    前提知識Perl5 は minor version 間ではバイナリ互換性が保証されているPerl5 の minor update では、bug fix しか基的に行われないPerl5 Porters の保守的さ度合いは信用できるperlbrew でセットアップするときに気をつけることインストール名をデフォルトの perl-5.16.3 などとせず、perl-5.16 と minor version を含めないようにする。 例: perlbrew install perl-5.16.2 --as perl-5.16セキュリティフィックスがでた場合の処理chromaticの記事で知ったのだが、perlbrew には upgrade-perl というコマンドがあり、最新のバージョン(マイナーアップデートのみ)にアップグレードすることが簡単にできる。 perlbrew upgrade-perl

    oppara
    oppara 2013/03/13
    安定的な Perl アプリケーション運用のための perlbrew 運用テクニック - tokuhirom's blog.
  • git fetch-pulls - tokuhirom's blog

    git config alias.fetch-pulls = fetch origin +refs/pull/*:refs/remotes/pull/* — Tatsuhiko Miyagawa (@miyagawa) December 20, 2012 ↑↑を定義しておくと、pull-req のコミットをまるっと fetch できて便利、というかんじっぽい。 とりあえずいれておいた。

    oppara
    oppara 2013/02/28
    git fetch-pulls - tokuhirom's blog.
  • httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - tokuhirom's blog

    一般的な Web Programmer ならば、HTTP Status code はすべて暗記していると聞きました。 しかし、僕は初心者なので、なかなか覚えきれていないので、HTTPのステータスコードをさがすのに便利なツールを用意しました。App::httpstatus です。インストール方法は cpanm App::httpstatus です。というか依存とかないのでhttp://api.metacpan.org/source/TOKUHIROM/App-httpstatus-v1.0.0/httpstatus をコピーしてくればうごきます。 使い方は以下のとおりです。 4xx なコードを列挙する。 % httpstatus 4 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Foun

    oppara
    oppara 2013/02/21
    httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - tokuhirom's blog.
  • .gemrc に --no-ri --no-rdoc の指定をしてインストールを高速化する! - tokuhirom's blog

    gem でなんかいれるときに Installing RDoc documentation for rest-client-1.6.7...とか表示でてきておっせーなー、どうせみねーのにー。とおもっていたのだが、実は .gemrc に指定すればスキップできるとのこと。 ↓のサイトを参考に設定しておいた。 http://webonrails.com/2008/12/03/skiping-installation-of-ri-and-rdoc-documentation-while-installing-gems/ --- :update_sources: true :sources: - http://gems.rubyforge.org/ - http://gems.github.com :benchmark: false :bulk_threshold: 1000 :backtrace:

    oppara
    oppara 2013/02/17
    .gemrc に --no-ri --no-rdoc の指定をしてインストールを高速化する!