サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
WWDC24
nekokak.hatenadiary.org
というのをつくりました。 http://github.com/nekokak/p5-dbix-skinny-cache package Mock::Basic; use DBIx::Skinny setup => +{ dsn => 'dbi:SQLite:', username => '', password => '', connect_options => { AutoCommit => 1 }, }; use DBIx::Skinny::Mixin modules => ['Cache::Memory']; # in your script: use Mock::Basic; # set data Mock::Basic->memory_cache->param(foo => 'bar'); # get data Mock::Basic->memory_cache->param('
http://d.hatena.ne.jp/hirafoo/20100418/1271572008 こちらに DBIx::Skinnyのrowオブジェクトをnfeezeしようとすると死ぬ という項目があるんですが。まぁ死にます。 死ぬ理由はnfreezeするオブジェクト内にcoderefがあるからです。 STORABLE_freezeとかを使ってfreezeすると気にHookして云々とかはできるんですが (DBICではそういうcomponentがあります) そもそもStorable使うときってキャッシュするときかなと思い、 キャッシュするデータは必要最低限にするべきかなと思っています。 なのでhttp://d.hatena.ne.jp/nekokak/20090918/1253257691 ここでやってるようにrowのデータだけキャッシュするのがよいかと思っています。 まぁMixinでST
psgiなアプリをかいてて今まで動いていたのに Shotgunを使い始めたらエラーが出てしまった。 もともとのアプリは大体こんなの use Proj::Container qw/api/; use Plack::Builder; builder { mount '/banner/' => sub { my $env = shift; my $rid = $env->{PATH_INFO} || ''; $rid =~ s!/!!; return [ '200', [ 'Content-Type' => 'image/gif', 'X-REPROXY-URL' => 'http://127.0.0.1:7000/'.$rid, ], ]; }; };バナー画像をreproxy urlをつかって配信してたの。 なんかShotgunでエラーがでるーとか騒いだら tokuhiromさんとmiyag
モバイルの開発やってるとqrは必須なので適当に作ってみた なんか前にだれかやってた気もするけど。 生成したqrコード画像をbase64して埋め込むだけ。
画像を配信する仕組みを考えたとき、 htdocsに画像を配置してしまうとだれでも好きなだけアクセスできてしまいますね。 まぁ、サイトのデザインとかで使っている素材であればいいんですが ちょっとしたアクセス制限をかけたい素材な場合、 普通にhtdocsに配置して公開すると問題なわけです。 そういうケースの場合は今までMogileFSをつかって ファイルを管理していたのですが、諸事情によりmogileは使わないで 管理できないかというのを考えてみました。 要件としては 素材の管理で冗長構成をとらなくてよい アプリ側で認めたファイルだけ提供する です 個人的にはPerlbalを良く使っているので Perlbalでためしてみました。 処理の流れとしては、 sv.intraがサービスを提供しているvhostでユーザはこのvhostに対して色々リクエストを投げてくるとします。 sv.intraはpla
金曜日に行われたYokohama.pmでKamuiについて 発表させていただきました。 http://yokohama.pm.org/2010/02/yokohamapm-5.html http://yokohama.pm.org/2010/03/yokohamapm-5-1.html 持ち時間10分じゃボリューム的につらいすね。 発表資料は http://nekokak.org/presen/yokohama06/ こちらにあります。 個人的にはWAFを探している人はCatalystを使えばいいと思います ドキュメントもしっかりしてるし 利用ユーザも多いので問題があったときに相談出来る人が多いと思います。 個人的にKamuiを作ろうと思ったのは なるべくMoose/Mouseに依存してないこと、 Sledgeが好きなのでSledgeぽくかけること Catalystのようなattribut
今作ってる簡易TODO管理の仕組みでtaskが登録されたらircに通知されるようにしたかったので サックリつくってみた。 仕組みとしてはircボットとして常駐しながら、json-rpcなserverもうごいているので、 json-rpcで発言したい内容をpostするだけです。 irchttpd.plを常駐させておいて、 Webアプリ側でpost.plでやってることをやらせるだけ。 1チャンネルしか対応してないけど十分なり。
明けましておめでとうございます。 箱根駅伝の5区で今年も感動したnekokakです。 nekokak.orgというドメインで自分のサイトを作ってるんですがそこのサーバを新しいvpsに載せ替えたので 構成を変えてみました。 http://nekokak.org/ http://blog.nekokak.org/ 構成的には http://perl-users.jp/articles/advent-calendar/2009/hacker/23.html こちらを参考にしつつ 前面にperlbalを配置して cgiに当たる部分をPSSPSSでまかなっています。 perlbalは静的コンテンツ配信サーバとしてもつかえるので、 画像やcssなどの静的なものはPSSPSSに回さずにperlbalでレスポンスを返すようにして、 動的に処理するものだけPSSPSSにreverse_proxyするようにし
いきなり2009年を振り返ってみようかと思った。 今年はいろいろアウトプットができたきがします。 DBIx::SkinnyもQudoもCPANにupしたし、 Yokohama.pmやYAPC::Asiaでも発表することができました。 Skinnyはいろいろな人に興味をもっていただけたのがとても嬉しかったです。 Skinnyの思想をベースにした他のプロダクトを開発するひともあらわれたりしたのも嬉しかったです。 Skinnyは現在アドベントカレンダーが進行中なので、 興味のある方はそちらをチェックしていただければと思います。 http://perl-users.jp/articles/advent-calendar/2009/dbix-skinny/ Qudoも個人的にはなかなかいい感じで仕上がってるので今後のエンハンスメントも頑張りたいところ。 また、PSGI/Plackが登場したことで作り
DBIx::Skinnyの0.04を先ほどshipitしました。 今回の変更で、バックエンドのDBにPostgreSQLを利用することができるようになりました。 おいぬめさん、fujiwaraさんありがとうございます。 また、PODに結構なtypoがあるのを色々な方に指摘/直してもらいました。 ありがとうございます。 またDBIx::Skinny::Mixinというモジュールが追加されました。 これはDBIx::Skinnyをuseしたユーザモジュールにメソッドをexportさせる機能があります。 たとえば、DBIx::Class::FromSledge相当のことをしたい場合 package Proj::Model::Mixin::FromSledge; use strict; use warnings; use Carp; sub register_method { +{ create_
YAPCの前にHTTP::EngineベースのフレームワークSmokerをつくってみたんですが、 それPlaな感じになってしまったので、今度はPlackベースで書いてみた。 またα以前な感じなのと、Plackをそこまで理解していないのですが、 とりあえず動くくらいになったのでgithubに上げてみました。 http://github.com/nekokak/p5-Kamui 名前はKamuiと適当に命名。 本当はarkを使おうかと思ったんですが、Moose/Mouseベースだったのが個人的にやだったので arkを参考にさせてもらいつつ自前で実装しました。 一応サンプルも置いてあるので興味がある人はどうぞ。 Webの部分で使う際はKamui::Web::Handlerを継承したモジュールをplackupすれば良い感じ。 Dispatcherの部分はCPANモジュールを使わずに社内で一部使って
DBIx::Skinnyにはネイティブにpagingをしてくれる便利機能はありません。 (最近ないないばっかり言ってるな) DBICとかだと$rs->pagerみたいにしてData::Pageのオブジェクトを返してくれるんですが、 Data::Pageのオブジェクトを作る際に、内部でcountを発行しています。 pagingするにはSQLにLIMIT/OFFSETをかけてると、思うのでLIMIT/OFFSETを掛けなかった際の トータルな件数を取るためですね。 結構このcountが馬鹿にならないくらい内部で発行されることがあるのでSkinnyではあえてサポートしなかったです。 あと、独自にSQLを書かせる事をお題目にあげているので、 独自に書かれたSQLを内部でごちゃごちゃしてcount発行するとかヤッテラレナイてのもあります。 ただ、アプリを作ってる時にpagingは必須なのでどうすれば
DBIx::SkinnyにはDODやData::Modelのようにキャッシュを透過的に扱う 便利機能はありません。 無いのでラッパーを書きませう。 毎度の事でデモは http://github.com/nekokak/p5-dbix-skinny-sample/tree/master/cache/ に置いてあります。 ユーザテーブルがあるとします。 CREATE TABLE user ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(255) NOT NULL, UNIQUE(name) ); ユーザの情報をキャッシュからひけなければDBから引っ張って キャッシュしておき、次に使う時はキャッシュデータを使うという典型的なパターンです。 userテーブルの定義などはこのようにします。 今回はinflate/deflateも一緒にやってみ
DBIx::SkinnyはDBIへの薄いラッパーなので ネイティブにDBShardingをサポートはしていません。 また、Shardingに限らずSlaveに勝手につないだりしてくれる便利機能もありません。 ただ、ShardingとかSlaveにつないだりはしたくなる事が有ると思うので、 サンプルコードを書いてみました。 サンプルコードはgithubにあります。 http://github.com/nekokak/p5-dbix-skinny-sample ただ、この記事を書いている時点ではgithubがぶっ壊れてるぽくcloneできません。:( 無料で使わせていただいているので文句は言えませんが。 サンプルコードでは DBIx::ShardManagerをつかってみました。 http://svn.coderepos.org/share/lang/perl/DBIx-ShardManage
YAPC::Asia2009は大盛況で今年も終了しました。 関係者の皆様本当におつかれさまでした。 聞きにこられた方も本当におつかれさまでした。 2日(前夜祭をいれれば2.5日くらい)の間 セッションを聞きまくるのは本当に体力いりますね。 あんまり纏めとかやったことないいんすが、 個人的な纏め。 DBIx::SkinnyもQudoも各所からご意見なり感想なり頂きまして 1開発者としてうれしい限りです。 意見は分かれるにしても、懇親会でSkinnyみたいに生SQLをいい案配で扱えるのは ありだと思うと言っていただいたりして、かなり嬉しかったです。 なんか昔に私が書いたDBICの使い方纏めサイトを見てる人が本当に多くてビックリしました。 ちょっと前までDBICいいよーとか啓蒙しまくってた自分が今回のセッションで こき下ろしまくったのはどうかなと思いつつ今の自分の思うところをストレートに話したつ
Qudoの発表資料は http://nekokak.org/presen/yapcasia2009-qudo/ こちらになります。 こちらも ご意見などどしどしおまちしております。 nekokak _at_ gmail _dot_ com ちなみにmiyagawaさんがLTまでの間にCPANAuthorの人はモジュールをCPANにアップすると LTのデモでながれるかもよとおっしゃってたので、 Qudoをデベロッパーリリースしました。 で、Qudoの発表中に頂いたQAをここで書いてみます。 あと、補足したり。 - Q:Jobを処理する順番はどうなってるのか?プライオリティーをつけることなどできるか? A:現在のQudoのJob処理順は基本的にenqeueされた順番です。Job毎のプライオリティーはいまは設定できないので設定したいですね。 - Q:jobをenqueueしてから間をおいて処理さ
Skinnyの発表資料は http://nekokak.org/presen/yapcasia2009-dbix-skinny/ こちらになります。 ご意見などどしどしおまちしております。 nekokak _at_ gmail _dot_ com で本日の発表の補足をば。 Skinnyの発表の時にも言いましたが、 Skinnyの発表前のYappoさんのData::Modelの発表の中で、 「SkinnyはSQLをパーズして云々だからバグバグぽい部分がありそげ。」 とおっしゃってましたが、現在のSkinnyはSQLのパーズをしておりません。 昔はSQL::Parserでパーズするのを試している事があったのですが、 SQL::Parserが複雑なSQLをパーズできないので捨てました。 - Skinnyでは現在install_utf8_columnsというfunctionでutf8flagの処理
Yokohama.pm#04で発表した時の資料をアップしておきました。 http://nekokak.org/presen/yokohama04/ Qudoはまだまだ開発中のプロジェクトなので 興味のある方は開発に参加してみませんか? 今回のYokohama.pmの感想としては 発表者の数はそこそこ多かったのですが、テンポよく進行してたと思います。 個人的にはYoheiさんのプレゼンが一番おもしろかった。 社内でMogileFSに変わるプロダクトを作りたいねという話も出ているので 個人的にかなりタイムリーな話題でした。 運営に関わった皆様&id:clouder++です。
Perl Best Practicesを読んでて、 Readonlyモジュールなるものを知った。 http://search.cpan.org/~roode/Readonly-1.03/Readonly.pm 簡単に言えばuse constantの便利版かな。 Perl Best Practicesでは use constantよりも use Readonlyすることを推奨してます。 以下、理由&簡単なソース Readonlyモジュール使用時 #! /usr/bin/perl use strict; use warnings; use Readonly; Readonly my $name => q[nekokak]; Readonly my $age => q[27]; print <<"__EOD__"; Hi! My name is $name. My age is $age. By
追記:Perlbal::Plugin::Includeでなんの問題もなく可能なのでした Perlbalでは/etc/perlbal/perlbal.confに Perlbalの設定をもりもり書くわけですが、 相当数のサービスを1台のPerlbalで管理していると、 1つの設定ファイルがかなり大きくなってしまって 管理しずらいとです。 そこで、PerlbalをながめていたらPerlbal::Plugin::Includeというのがあって、 そらあるわなぁと思い使ってみたところ、問題なく動きました。 ただ、Includeさせるファイルをサイト毎に管理しようとすると 例えば nekokak.intra/perlbal.conf # ...nop CREATE SERVICE http_server SET listen = 0.0.0.0:80 SET role = selector SET p
最近個人ではYacafiを使ってます。 http://blog.yappo.jp/yappo/archives/000618.html http://nekokak.org/こちらは全面的にYacafiとDBIx::Skinnyをつかってかいてみました。 Yacafiは高速に動作してくれるので素のCGIでもこんだけ早く動きます。 (もし、遅いと感じたらそれはこのサーバがしょぼいからです) (あと、もし遅いとしたらSkinnyかも、でもSkinnyもとりあえず重くないっぽ) 個人的にYacafiを使うにあたっていくつかパッチを当ててみてますが パッチなくても十分に使えますね。 すばらしい。 MENTAやNanoAが注目されるなか個人的にはYacafiが一押しです!! なんせ開発者自身、枯れてるとおっしゃってましたし!! Yappoさん++すぎる
http://yokohama.pm.org/2008/12/yokohamapm-3-2.html 開催されました。 今回はオオトリという大役でしたが、id:precuredaisukiのおかげで 笑いもとれ今回も大盛況のうちに終わりましたね! Yokohama.pmはShibuya.pmでは聞けない人の話が聞けたり、 新しい人がどんどん発表できたりできていいですね! 懇親会もたのしかったです。 id:clouder++です! 私の発表資料は http://nekokak.org/presen/yokohama03/ こちらにおいておきました。 Data::Model++ yappo++ですが もっと色々なケースでベンチマークとったりして 出してみたいと思います。 DBIx::Skinnyについてもid:zigorouさんとはなしてて SQL::Parser使わずに実装する方向をかんがえ
というのを書いてみました。 といってもTheSchwartzのt/に入ってるdb-common.plからのほとんどコピペですが、 Pluginとか別パッケージで書く場合にあったほうが便利かなーとか思ったので。 こんなのいかが? 追記:codereposにいれてみました (http://coderepos.org/share/browser/lang/perl/TheSchwartz-Test) 追記:coderepos側のソースをみてもらえば十分なのでけしました
いまさっきcodereposにDBix::Skinnyというものをimportしました。 http://coderepos.org/share/browser/lang/perl/DBIx-Skinny 昨今のDBICブームで利用者は増えてきたんですが、いろいろ使うにあたって、 ここまでORマッパーでいろいろ(JOINしたり、キャッシュしたり)やるのはどうなんだとか、 うんたらかんたら考えたら自分で作ってしまえてのが動機でした。 DBICははっきり言ってどでかいライブラリなので一からソースを読むのがかなり大変です。 仕事で使ってる関係上、仕方なく見ることもありますが、キツい。 あと、DBICを使っているとJOINしたSQLがある意味簡単に発行できるので 重宝するのですが、ぶっちゃけどういうSQLが発行されているか全部ちゃんと見てる人って どれくらいいるのだろうと思ったり。 DBICによって
発表してきました。 資料はこちら。途中で時間切れになってしまった。 http://nekokak.org/presen/yokohama02/ デジハリ横浜さんの会場がかなりよかったですね。 デジハリ横浜++ 懇親会も楽しかった。 引き抜き合戦が特に笑えた。 次回があれば、著作権についてのトークをしてみようと思った。 明日から開発合宿で那須にいってまいります。
Test::Declareの紹介をYokohama.pm#01でやってきました。 発表資料は http://nekokak.org/presen/yokohama01/ でどうぞ。 Shibuya.pmとは違った感じで楽しかったです! 会場の手配でkdaibaさん 懇親会の手配でtypesterさん 参加者のみなさん そして我らがリーダーclouderさん ありがとうございましたー。 次回も楽しみです。 そういえば、Spork使ってる人多かった気がする。 Ingy++ですね!
YAPCでの私の分の資料になります。 http://nekokak.org/presen/yapcasia2008/ 注意書きにかいてますが、体裁を整えてみたい人は % vroom --vroomしてください。 Ingy++ 今年のYAPCもすばらしかったですね。 こういった人の交流があるのは本当に素晴らしいです。 関係者の皆さん本当にありがとうございました。
nekokakの読み方についてなんか本人の居ないところで色々言われているようです。 YAPCのLTの時にcharsbarさんが ねこかく -> ねこけーえーけー と、いいなおしていました。 混乱させてごめんなさい > charsbarさん 始めは nekokak(ねこけーえーけー)でした。 でもなんかお会いする方々に nekokak(ねこかく)とよばれており、 本人も特にこだわりが無いので「ねこかく」でいいとおもっております。 むしろめんどくさいので「ねこかく」でおねがいします。 いままで「ねこけーえーけー」と呼んでいただいていた方には申し訳ありませんが これからは「ねこかく」でよろしくお願いします。 charsbarさんほんとにごめんなさい。 ただし、決して「ねこかけ」ではありませんのでご注意ください。 あとnekokakuでもありません。 一番最後にuはつきません! そこんとこよろしく
YAPCでの発表の際、どんなプレゼンツールをつかおうかなーと考えていたのですが、 自分でつくるのも面倒になってきたので IngyのSporkを試しに使ってみたら、すげー簡単にできたのでご紹介。 まずはともあれSporkのインストール。 cpan> install Spork私の環境ではKwiki::Cacheがないよーとかおこられたので cpan> install Kwiki::Cacheも入れました。 インストールが終わったら、以下のようにするだけです。 $ mkdir presen; cd presen $ spork -new $ vi config.yaml # author_nameとかcopyrightとかPlugin使う場合はそれを設定 $ vi Spork.slides # プレゼン内容を書く $ spork -make # プレゼンHTMLの生成 $ spork -sta
次のページ
このページを最初にブックマークしてみませんか?
『Hatena::Diary::Neko::kak 500 Internal Server Error』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く