PrePANのWebアプリケーションフレームワークをAmon2に変更しました。閲覧者的には何も変わるところはないので特に意味はないですが、今後の機能開発がしやすくなったので、結果的にはよい影響はあると期待しているところです。 WAFは、YAPC::Asia 2011でのcho45さんの発表「ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく」にあるように「薄いフレームワーク」がより良いと最近は感じています。PrePANはまあ、特に変わったこともしていないアプリなので、ドメインスペシフィックに対処するべきこともなく、また、下手に自作するよりも、Amon2の方がずっといいものであることが明白なので、今回はAmon2を使うことにしました。 というわけで、Amon2作者のtokuhiromさんに「Amon2使いますよ!!1」と話したのを実行できたし、PrePANはいろいろと機能追加の
使用ツールなど amon2(flavor=Basic) perl 5.16.3(plenv 使用) carton Supervisor (一般ユーザー名をhomepageとしている) 今回はデプロイのためにamon2で作ったアプリをデーモン化しようとしたが、-Dオプションでデーモン化ができなかったため、supervisorを導入することにした。 (※概要などはこちらのブログを参考にしてみてください → http://blog.hakutoitoi.com/?p=343) Supervisorのインストール # yum install python-setuptools # easy_install pip # pip install supervisor 必要なディレクトリを作成 # mkdir /var/log/supervisord # mkdir /etc/supervisord.d
Amon2が、Apache+mod_perlではどうにもうまく動いてくれない(ホームディレクトリがわからないらしく、要所をフルパス指定にするコードの修正が必要)。Apacheの設定が悪いんだろうが、何が悪いんだかよくわからない。 そこで、わからないついでに、全く違う動作環境を試してみることにした。 それは、以下のページで解説されている Supervisor および Starman を用いた環境である。 supervisordとclelrydの設定 FreeBSDで Supervisor を使う なお、サーバーのOSはUbuntu11.10である。 まず、easy_installでSupervisorをインストールするために、あらかじめpythonのsetuptoolsを入れておく。 apt-get install python-setuptools その後にSupervisorのインストー
PerlのウェブアプリケーションフレームワークのAmon2を使うときModelってどうするの?って疑問が沸きませんか?Largeフレーバー以外でセットアップすると、シナトラリッシュなDispatcher(Router)でセットアップされるので、基本的にコントローラーに全部実装してしまおうかなーって気になるんですけど、そうじゃないMVCを意識したケースはどうしようかなーという時のオレオレ理想の要件です。 MVC的なWAFの実装について ウェブアプリケーションフレームワークを使うと、M(モデル)とV(ビュー)とC(コントローラー)の3つにわけてクラス設計を行うのが基本と言われていますが、細かい実装をどこに持って行こうか悩むケースにしばしば出くわしますね。とくに、薄いフレームワークと言われるWAFほど、Modelについてはノータッチで自由な設計が逆にできすぎて悩んでしまうことがしばしばではないで
ふっつかっめです! tokuhirom です。 % amon2-setup.pl --flavor=Lite Foo みたいにして、フレーバーをみなさん指定いるかとおもいますが、これのつかいわけの話をかこうかとおもいます。 標準添付のフレーバー 現在標準添付の Flavor は Amon2::Setup::Flavor::Basic と Amon2::Setup::Flavor::Minimum そして Amon2::Setup::Flavor::Large です。 それぞれのつかいわけがむずかしいなあとおもうところもあるので、それぞれの使い分けかたをここにしるす次第です。 Amon2::Setup::Flavor::Basic これが一番の基本形です。Basic となづけてあるところからも明白です。これこそがまさにデフォルトです。 とくに理由がなければこれがいいんじゃないでしょうか、とい
1. スマートフォン向けサービスにおける サーバサイド設計入門 2012/09/28 hatak at YAPC::Asia Tokyo 2012 2. 自己紹介 • hatak (HATAKEYAMA Hisashi) @hisashi hatak • ネット広告会社 → ソーシャルゲーム会社 • インフラや運用寄りの仕事をしてることが多いです • わりとなんでも • インフラ / MySQL / Perl な場所に時々います 3. このトークの内容 • 今年春より新規サービスの立ち上げを行うことに • 元々インフラや運用がメインだったので、いろいろ試行錯誤することに • このサービスを実例として紹介しながら説明 • をしようと思ったのですが、まだリリースされていないため • 代替の例としてシンプルな SNS を作る流れで整理・説明します • 概説的というか、Perl に限らない話も出て
本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回は普段Webアプリケーションの開発を行っているtokuhiromさんで、テーマはWebアプリケーションフレームワークAmon2です。 Amon2とは? こんにちは。tokuhiromです。本稿では、筆者が中心となって開発を進めているAmon2というWebアプリケーションフレームワークについて説明します。 Amon2は、次のような特徴を持つWebアプリケーションフレームワークです。 PSGI/Plackベース Amon2はHTTP::Engine/PSGI/Plackの開発/制定に初期のころから関わっている筆者が作成したWebアプリケーションフレームワークです。そのため、Plackの部品をできる限り利用することにより、少ないコードベースでWebアプリケーションフレームワークを実現しています。これにより学習コストが低くなってい
最近、Amon2 のリアルタイムWebサポートをおこないました。 これにより、WebSocket や Long poll をつかうウェブアプリケーションを Amon2 で簡単にかくことができます。 というか、ストリーミングがちょっとあるだけで、Tatsumaki を勉強しなきゃいけないのが面倒だったので、つくりました。 Amon2::Plugin::Web::Streaming というプラギンが、今回のバージョンでついています。これをつかうとこれまで Tatsumaki でやっていたようなことが、簡単に Amon2 でできるようになります。 MXHR には対応していないけど、WebSocket と streaming に対応したので、Amon2 で Tatsumaki がやっている領域はサポートできたとおもいます。というか自分がつかってる範囲ではこれで十分です。 以下がチャットのサンプルで
Amon2::Plugin::Web::WebSocket というプラグインをだしました。 Amon2 の中で非常に簡単に web socket がつかえます。 なんかよくわからん作法とかおぼえなくてもいいので楽すぎる。。 実装例は以下のとおりです。Twiggy でしかうごきません。 use strict; use warnings; use utf8; use Amon2::Lite; use Digest::MD5 (); get '/' => sub { my $c = shift; return $c->render('index.tt'); }; my $clients = {}; any '/echo2' => sub { my ($c) = @_; my $id = Digest::SHA1::sha1_hex(rand() . $$ . {} . time); $c->we
FacebookAPIを使う要件が出てきそうなのでいろいろ調査中。 perlでFacebookAPIを使うにはFacebook::Graphがいいんでしたよね! Facebook::Graphのドキュメントにちょうどチュートリアルがあったので 試しに今回はその手順通りに設定していきたいと思います。 ただしそのままではなく一部Amon2用に置き換えてます。 また、今回は表示するデータを自分のニュースフィードにしてみました。 あと、Facebook アプリ登録画面ってログインするたびちょこちょこ変わってて 他のサイトの設定画面が参考にならなかったりするので スクリーンショットも添付してみましょう。 Step 1: Set up the developer application on Facebook. https://developers.facebook.com/ に行きます。 Step
モダンな感じで perl でウェブアプリ作りたいなーと思ってほげほげしてます。メモ書き。 最近の流行りでは、system perl なんてもう使わないわけで、自分で perl を make して入れるもの。それを簡単に管理できるのがperlbrew。で、アプリ毎に perl を入れてもいいなぁとは思ったんですが、さすがにそこまで仰々しくしたくはない。でも、CPAN モジュールについてはアプリ毎に依存が無いようにしたい(あるアプリが変にバージョンアップしちゃって他が動かないとか嫌)。 どうするのがいいかなーと色々考えたんですが、そういえば miyagawa さんのCartonというのが、依存関係やバージョンも含めて CPAN モジュール管理できるということでこれをアプリ毎に使うのが正統だろうなと思ったので使ってみた。 まずは perlbrew でインストール これは説明の通り。 $ curl
[1]http://d.hatena.ne.jp/ockeghem/20110907/p1[2]http://www.atmarkit.co.jp/fcoding/articles/webapp/05/webapp05a.html[3] http://msdn.microsoft.com/ja-jp/asp.net/ff713315[4] http://labs.cybozu.co.jp/blog/kazuho/archives/2007/01/cross-site_including.phpあたりをよんで、JSON とセキュリティについてかんがえてみた。 ここで、有効とされている対策のうち while(1); を先頭に付与するPOST ですべて処理するといったあたりは、RESTful でないし、BK 感がひどいというか本質的ではないのでできるだけやりたくない。 また、Amon2 では互換
Amon2 のプラグインの書き方がよくわからないという話をたまに聞くので、そのへんについて説明したいとおもいます。 基本的にはプラグインはただの Perl モジュールで、ただ一つの規約にしたがえば問題ありません。それは 'init'という名前のクラスメソッドをもっているということです。ただそれだけです。 package MyPlugin; sub init { } 1;これで、ひとつの valid なプラグインです。 さて、なにもしないプラグインをつくってもしょうがないので、ちょっと機能をたしてみましょう。 package MyPlugin; sub init { my ($class, $context) = @_; $context->add_trigger( AFTER_DISPATCH => sub { my ($self, $res) = @_; $res->header('X-
前回から大分時間が経ってしまいましたが、唐突に Amon2+Teng で大きめのアプリをつくるチュートリアルでもはじめましょう。Teng というのは、O/R Mapper とよばれる種類のライブラリで、DB へのアクセスを簡単にしてくれるものです。 さて、とにかくも準備からはじめましょう。 % cpanm Amon2 Amon2::Setup::Flavor::Teng Tengで Amon2 をインストールします。 % amon2-setup.pl --flavor=Large,Teng MyBBSとするとスケルトンができあがりますので % cd MyBBSとして、プロジェクト用のディレクトリにはいります。 %cpanm --installdeps .とすると、依存モジュールがインストールされます。 % plackup app.psgi -R libとうつと、サーバープロセスが起動します
さて、掲示板をつくったとはいえ、これだけではおもしろくありませんね。 まずこの掲示板には重大な欠陥があります。具体的にいうと、ページングがされていません。 ウェブアプリケーションにおいてはページングは非常に重要な要素です。 なにかを一覧表示するページをつくるときに、ページングのことが思いうかばないようでは一人前のウェブエンジニアとはいえません。ページングを手抜きすると、あとあと重いページになって泣くことになるでしょう。ページングは最初の段階でいれておくのが結局は楽なのです(という自戒)。 さて、今回の掲示板では Teng をつかっているので非常にページャの実装が容易になっています。Teng ではページャ関連の実装はプラグインとなっていますから、Teng に Teng::Plugin::Pager をよみこませましょう。lib/MyBBS/DB.pm に以下のようにかきましょう。 packa
DBの設定などはこちらに沿っています。 今回は、以下のコマンドでアプリケーションの雛形を作成した場合です。 $ amon2-setup.pl Hello config/development.plの編集 Teng用の設定を書いておきます。 +{ 'Teng' => { dsn => 'dbi:SQLite:dbname=hello.db', username => '', password => '', }, ... }; スキーマ作成スクリプト DBの情報を読み込んでスキーマを作成するスクリプトを書きます。 use strict; use warnings; use DBI; use FindBin; use File::Spec; use lib File::Spec->catdir($FindBin::Bin, '..', 'lib'); use lib File::Spec->ca
Amon2::Lite が別 dist に分離されました(Amon2::Lite をつかっているアプリでは Amon2::Lite への依存を明示的に記述するようにしてください)各種依存がすくなくなりましたXslate でつかう bridge のデフォルトが Star になりました。 Star がつかいにくかったりする場合のご要望は #xslate までPragma: no-cache; Cache-Control: no-cache をデフォルトにしていましたが、なにかと問題があるので Cache-Control: private をデフォルトにしましたcarton をつかう人がふえてくるだろうという予測のもと、依存をへらす変更をしています。Amon2::Lite が別 dist になったのが唯一の非互換な変更かとおもいます。Any::Moose のからみで Moose をインストールし
http://prepan.org/module/3Yz7PYrByB 初めてのAmon2入門だ!!1とりあえず最近リリースされたばかりのAmon2::Authモジュールをつかって、はてな認証を実装してみたよ!!1PrePANにも登録したよ!!1レビューよろしく!!1 Amon2::Auth::Site::Hatena への依存を Makefile.PL に設定する!!1 requires => 'Amon2::Auth::Site::Hatena'; config/development.plに設定をかく!!1実際にはサイト上で取得したconsumer_keyとconsumer_secretを設定する!!1redirect_uriは実際のURLだっ!!1!!1具体的には"http://localhost:5000/auth/hatena/callback"などになるだろう!!1 conf
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く