$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

perl

DBIのconnect_cachedのいろいろ

最近DBへの接続をリクエスト単位ではなくリクエストを処理するプロセス単位(Starmanのworkerプロセス単位)でキャッシュしたいということがあって、DBIのconnect_cachedを使うことになった。Scope::Container::DBIでももしかしたら出来るのかもしれないけど、…

DBIx::QueryLogを使ってちゃんとSQLが流れているかテストする

DBIのconnectのCallbacksなどでSQLを実行している時とかに、実際にSQLが流れているのかチェックしたい時がある。そういう時どうするのがベスト・プラクティスなのかわからないのだけど、DBIx::QueryLogを使ったら一応できたのでメモ。 テストしたい状況 pack…

Qudo, daemontools, capistranoを使ってWorker処理の仕組みを作る

最近PrePANの開発を手伝っていて、Workerの仕組みをQudoで作りました。初めてWorkerの仕組みを一から作ったのでメモしておきます。 Worker処理に必要な部品、それぞれのQudoでの実装、Workerプロセスを管理するためのdaemontools、capistranoでのdeployとい…

DBIx::DataFactoryというモジュールをshipitしました

以前http://d.hatena.ne.jp/shiba_yu36/20111021/1319209404でTest::Factory::DBIというモジュールを作ったと紹介したのですが、Prepanのここでレビューを求めたら、意見をもらえたので、DBIx::DataFactoryとして、インターフェースも少し変えて、shipitしま…

Test::Factory::DBIというモジュールを作りました

久々に思いついたモジュールを作ってみました。テスト用のデータを入れるために役に立つ(と思う)モジュールです。 Repository https://github.com/shibayu36/p5-DBIx-DataFactoryに置いてあります。 またPrepanにも上げました。レビューお願いします。http…

perlアプリケーションをVirtualHost環境で使うときに必要な設定

perlアプリケーションをVirtualHost環境で使うときに、ちょっと注意しないといけない点があったのでメモ。 Apacheの設定 VirtualHost環境で使うときには、それぞれの環境ごとで異なる@INCや環境変数を用いなければなりません。そのためにApacheの設定で以下…

Teng::Schema::Declare::Columns::DateTimeを作った

この前、書いた Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた - Dive into the Tech World! Re:Re:Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた - Dive into the Tech World! ですが、Teng::Schema::Declare:…

Re:Re:Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた

Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた - Dive into the Tech World! Re:Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた - blog.nekokak.org nekokakさんに返答してもらえたので、もう一度考えなおしてみ…

Attribute::Memoizeでメソッドキャッシュ

perlでメソッドキャッシュするいい方法ないかなと探していたら、Attribute::Memoizeがよさそうだったので、使ってみました。 やりたい事 同じメソッドにアクセスしたときに高速化するため、キャッシュを行うことってあると思います。例えばこんな感じ。 pack…

Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた

id:nekokakさんのTengの中のTeng::Schema::Declareを使ってて、あーこんな感じなのがあったらいいのになーって妄想してたのでメモしておきます。正直、必要なのかはわかりません。。。 やりたい事 例えば、現在のTeng::Schema::Declareを使って、DateTimeのi…

Test::Mock::Guardを使ってみた

Test::Mock::Guard Released - Yet Another Hackadelicを見てちょっと使ってみたのでメモ。最初はこんな感じの使い方をしてた。 package test::Sample; use strict; use warnings; use Path::Class; use lib file(__FILE__)->dir->parent->subdir('lib')->st…

CSRFDefenderでワンタイムトークン使えるようにした

Mojolicious::Plugin::CSRFDefenderの機能を増やしてshipitしました。ワンタイムトークンを使えるオプションを増やしました。設定方法はこんな感じ。 plugin 'Mojolicious::Plugin::CSRFDefender' => { onetime => 1, }; ユーザから妥当なトークンが送られて…

perlのforの挙動がわからない

perl5.8.9で下のように書いたスクリプトがなぜか死なずに実行される。仕様なのかわからないし、他のバージョンだと動作がおかしくなっちゃうのかどうかもわからないので、だれか分かる人がいたら教えて欲しいです。。。 追記 twitter上で教えていただきまし…

Mojolicious::Plugin::CSRFDefenderでオプションを使えるようにした

この前作ったMojolicious::Plugin::CSRFDefenderでオプションを使えるようにしました。下のような感じで使います。 plugin 'Mojolicious::Plugin::CSRFDefender' => { parameter_name => 'param-csrftoken', session_key => 'session-csrftoken', token_leng…

Mojolicious::Plugin::CSRFDefenderというのを作った

最近はMojoliciousを使ってWebアプリケーション開発を行っています。CSRFの対策をどうしようかなと考えていて、最初はPlack::Middleware::CSRFBlockを使っていたのですが、 Sessionとかの仕組みはApplicationと同じものを使いたい CSRF対策はApplicationの層…

MojoliciousでPlack::Middlewareを使う

MojoliciousでPlack::Middleware::CSRFBlockを利用したかったので、どうやって使うか調べてみました。 Mojoliciousの場合、Plack::Middlewareを利用するにはscript/sampleのようなサーバ起動用スクリプトをPlack::Builderを使うようにすると、利用出来るよう…

capistranoでperlアプリケーションを簡単にデプロイ

自分の作ったアプリケーションをデプロイするのって結構大変ですよね。今回はcapistranoを使って、perlのアプリケーションをデプロイ出来るようにしてみたので、そのやり方をまとめてみました。 capistranoとは 「複数の環境に同じ処理を同時に実行させる」…

Mojoliciousアプリケーションをmod_perlでデプロイする方法

最近Mojolicious + SkinnyもしくはTeng + XslateでWebアプリを書いているんですが、デプロイ作業をやってみたので、そのまとめです。合わせて以下の記事も読んでみてください。 Mojolicious + Xslate + SkinnyでMVC開発環境 - Dive into the Tech World! Moj…

Mojoliciousでstaticファイルのpathを変える

自分はいつもstaticファイルはプロジェクト下のstaticディレクトリに置くのですが、mojoliciousのデフォルトだとpublicの下になってたので、変える方法を調べてみました。Mojoliciousの場合はstaticファイルはMojolicious::Staticで扱っているため、startup…

Mojo + Skinny + Xslateの雛形を作成するFlavorを作った

以前、Mojolicious + Xslate + SkinnyでMVC開発環境 - Dive into the Tech World!の記事で紹介したMojo + Skinny + XslateでのWeb Application開発ですが、毎回毎回あの変更を加えるのは面倒なので、Module::Setupを使ってすぐに雛形を作れるように、Flavor…

Module::Setupで雛形に渡ってくる変数を理解する

Module::SetupでWeb Application作るときの雛形を作ろうと思ったんですが、テンプレートファイルに渡ってくるパラメータがいまいちわからなかったので、コードを読んでみました。 ファイルに渡ってくる変数 実際のテンプレート作成はModule::Setupのcreate_s…

Mojolicious + Xslate + SkinnyでMVC開発環境

Perlには非常に多くのフレームワークがあります。非常に大きいものにはCatalystやJifty、小さいものにはMojolicious、CGI::Application、HTTP::Engine、Dancerなどがあります。今Perlではフルスタックのフレームワークを使うよりも、小さいものを組み合わせ…

2-legged OAuthを理解する

APIの認証ってどうやってるんだろーって思っているときに、Google Dev Quizで2-legged OAuthの問題があったので、やりながら理解する事にした。perlで書いてみました。 OAuthのcpanモジュールを使った場合 この場合、簡単にできます。OAuth::Lite::Consumer…

Mac OS XにBerkeley DBをインストール

Task::Catalystをインストールしようとして、Berkeley DBのテストのエラーにはまったので、メモ。普通にインストールしたら、インストール後も前のBerkeley DBを使われて困った。理由としては、共有ライブラリのパスに含まれていなかったかららしい。 libtoo…

Mac OS XにDBD::mysqlをインストール

Snow leopardにDBD::mysqlをインストールしようとしたら、テストでエラーが出たので、解決法をメモ。 sudo cpanm -v DBD::mysqlとしたら、エラーが出た。MySQLがパスワードがないためにパーミッションエラーを起こしているせいで、テストが通らないらしい。…

Mac OS 10.6にperl5.10をインストールする

標準で入っているperl5.10は何かと問題があるので、perl5.10.1をインストールする。よくmacportsを使ったインストール方法が書いてあるんだけど、なぜかこれだとインストールができなかったので、ソースからさくっとインストールする。 ダウンロード http://…