タグ

ブックマーク / blog.yappo.jp (81)

  • YappoLogs: Yokohama.PM #10 でひとつ上のmysql について話してきました #yokohamapm

    Yokohama.PM #10 でひとつ上のmysql について話してきました #yokohamapm 最近ここで色々調べてた、あまり良く知られてない DBD::mysql の便利機能についてまとめて発表してきました。 http://yappo.github.io/talks/2014-yokohamapm10-dbd_mysql/ このへん知っとくとひと皮むけた感じに成長出来ると思います。僕は結局 mysql_use_result だけたまに使ってます。 発表終わった帰り道にZごろうさんとかにに「避け入ってる場にしては内容がむづかしすぎるよ!」と言われました。 Posted by Yappo at 2014年04月01日 12:41 | TrackBack | Perl

  • YappoLogs: サービスをつぶさない為に Web アプリを書く時にやっとくと良い事2選

    サービスをつぶさない為に Web アプリを書く時にやっとくと良い事2選 テンプレートのエラーが出た時にアプリケーションのログだけに書くのでは無く、誰にでも「ここがえらってるよ!」って見えるようにしとくと間違いが少なくなる傾向があるのでテンプレートエンジンでフック出来るようになっておいてたら、それをうまく使うと良い。 また、テンプレートエンジンがレンダリングしてるフェーズで DB にクエリが飛ぶような構造で書いてあると、非エンジニアのカジュアルにテンプレートいじる人が甚大なクエリを実装してしまう可能性があるので、これも早期に発見しないとサービスが止まってしまい会社の売り上げが下がってしまい社員が路頭に迷うケースが発生してしまうので、これらも未然に防がなければならない。 Text::Xslate + Amon2 ならこうかける。 package MyProje::Web; ...; { my

  • YappoLogs: なぜ SQL_CALC_FOUND_ROWS や LIMIT OFFSET のページングが良く無いのか

    なぜ SQL_CALC_FOUND_ROWS や LIMIT OFFSET のページングが良く無いのか ここ最近の大規模サービス関連したデータページング考です。 mysql 5.5.34 で試して記事書いてます。 bigdata テーブルは id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) なカラムがある前提です。もちろん InnoDB です。 2014年なんだからCOUNT(*)とかSQL_CALC_FOUND_ROWSとかLIMIT OFFSETのページングはやめようぜ - Togetterまとめが発端にみえるけど、わりと昔から話されてる事なんだけど、「nippondanji SQL_CALC_FOUND_ROWS」でググっても有用な情報ないし文書化されてないからしとく。 ページング処理で使われがちな機能です。 S

    kazeburo
    kazeburo 2014/03/12
    “UI を工夫する事でサーバ側の処理負担を大幅に減らせる機会は沢山あるので積極的にサービス全体を見ていく能力も2014年代のスケールするサービス構築には必要な能力だと思ってます。”
  • YappoLogs: DBD::mysql Async API

    DBD::mysql Async API MySQL の Async API 使って思いクエリを並列処理したら早いかと思ったらそうでも無い風味。 Web アプリの時のように、クライアント側の並列度があがれば差が縮まる感じだけどそうでもない。 ある程度重いクエリの想定で SELECT SLEEP(0.05) とか投げてみたけどやっぱり普通に使った方が早い。 Async API 使うのにコストがかかるのかな、と思って IO::Select 使ってみたらかなり早くなったので AnyEvent がわりとボトルネックっぽい。 とは言え微妙な誤差ではあるので、普通に DBI 使ってればいい気がしてきた。 perl 5.18.2 DBI 1.63 DBD::mysql 4.025 AnyEvent 7.07 IO::Select 1.21 async-mysql-ioselect.pl が全入りベンチ(

    kazeburo
    kazeburo 2014/02/17
  • YappoLogs: Shibuya Plack/PSGI Conference #1 #plackcon 開催してきた

    « 2014年に向けた JSON API の実装の方向性と X-JSON-Status 改め X-API-Status header のご提案 | Main | ギーク系女子に捧げる「クリスマスにプロポーズにされた時の対応プロトコル」2013年版 » Shibuya Plack/PSGI Conference #1 #plackcon 開催してきた yapc hackathon の後の飯で「最近 perl のイベント少ないからもうちょっと頑張ろうぜ!」って話になって、とりあえず plackcon やろうぜ!ってなったので開催しました。 やろうと決めたのは9月末だったけど、実際動き出したのは2週間前でとりあえずダブル基調講演の fujiwara さんと kazeburo さんの予定抑えて会場抑えて1週間前にスピーカー全員決まって募集した感じでございました。 fujiwara さんに ISUC

    kazeburo
    kazeburo 2013/11/27
  • YappoLogs: 2014年に向けた JSON API の実装の方向性と X-JSON-Status 改め X-API-Status header のご提案

    2014年に向けた JSON API の実装の方向性と X-JSON-Status 改め X-API-Status header のご提案 追記 2014/11/20 14:00:00 わりと JSON やら XML やら各種フォーマットで API を運用している環境がある場合に JSON API の時だけ X-JSON-Status にすると XML とかの時と整合性取れないし、 X-XML-Status みたいのを量産するのは困る的なレビューを頂いたので X-JSON-Status をやめて X-API-Status にしました。 へたに JSON に限定するから REST とか JSON-RPC とかいわれるんや! X-API-Status にしたら全部解決したし MessagePack な API でも使い回せるって songmu さん言ってた! XML とかからどうやって引っこ抜

    kazeburo
    kazeburo 2013/11/19
  • YappoLogs: YAPC::Asia 2013 #yapcasia

    YAPC::Asia 2013 #yapcasia 今日みた夢が「blog 書かないと干すぞ!」ってがちぎれる941さんとlestrratさんがでてきたので書く事にした Yappo です。みなさん週末はいかがお過ごしでしたか?僕はカート大会いって箱根で温泉と美味しいご飯べてきました。 編発表資料 社内開発簡単化と世界で戦う開発を考える技術 明らかに会場でかくていっぱい人見に来る、裏発表の DeNA の人が Yappo に負けないクオリティにする!的な宣言してて泣きそうになったのでささやかな反撃でタイトルぱくりました。 1日目の午後一から40分の枠をもらったので、仕事向けのアプリケーション開発で考えなきゃいけない事と、雛形スクリプトを作る時に便利なKsgkの紹介をしました。基的にはコピペ脳は害でしか無いのでいかにしてコピペを排除するか、ちゃんと自分の頭で考えていくか。のような話をしまし

    kazeburo
    kazeburo 2013/09/24
  • YappoLogs: 今日はYAPC前夜祭ですね & 明日のYAPC1日目でしゃべります

    今日はYAPC前夜祭ですね & 明日のYAPC1日目でしゃべります 今日は YAPC の前夜祭ですね! 今年の YAPC の前夜祭は、去年の YAPC で好評を博した 前夜祭 が 慶応大学が会場 となって開催されます! 僕は 前夜祭 には参加者として参加していて、楽しい催しになるように努力しますので是非是非ご参加下さいませ! 前夜祭 - YAPC::Asia Tokyo 2013 さて、明日のYAPC1日目、13:00〜13:40 では僕が「社内開発簡単化と世界で戦う開発を考える技術」と題して発表致します。 が、なんかスライド書いてたら「amon2-setup.pl を俺色に染める」というよりは「僕の一年間の Open & Share」みたいな感じになってしまったので、 多分そういう感じの話になると思います。僕の一年間 に詳しい方は既に知っている情報が多い感じなので、そこら辺ご注意下さい!

    kazeburo
    kazeburo 2013/09/19
    “ops のヒトから椅子飛んでこない為にやってる事”
  • YappoLogs: Perl徹底攻略という本を作った話

    Perl徹底攻略というを作った話 来週火曜日に、ここ最近もっともイケてる Perlが出ることになりました。 ちなみに僕もなんか書いてるけど、役に立つことは書いてません。 基的には Web+DB PRESS で連載されている記事が集まっていますが、ちょさんの部分は Perl 5.18 までの話題を取り扱ったり、yusukebeのところなんかは TwitterAPI がもろもろ変わっちゃったので、ほぼ全部書き直しで YouTube API の話になってたりとか、既存の連載を読んでる人にも新しい情報ありますね。 載っている記事としても連載だけではなくて弾さんのアルファギークに逢いたいから Perl Hacker が出ている記事を中心に再収録してあるところもポイントです。 あとは今回のために naoya さんが新規に原稿書いてくれた事も目玉ですね。内容としては「Perlプログラミン

    kazeburo
    kazeburo 2013/07/18
    素敵な本ですね!
  • YappoLogs: 馬鹿でもわかる Application Server と Reverse Proxy Balancer のお付き合いを考える

    馬鹿でもわかる Application Server と Reverse Proxy Balancer のお付き合いを考える 一般的な Web Application というのはロードバランサ、Webサーバ、アプリケーションサーバという HTTP を喋るサーバで構成されていると思います。 ロードバランサは高級なハードウェアからソフトウェア(lvs, httpd, etc..)で作るものまで色々ありますね。 アプリケーションサーバでは各種言語に合わせた実装でデーモンが常駐してるでしょう。これはいわゆる普通の Web サーバよりは単純なコンテンツを返す性能が低いです。 そんなわけで動的なアプリケーションサーバが有る構成では js や css や画像など静的なファイルは Apache や nginx などの専用の Web サーバでサービスして、動的なリクエストだけバックエンドのアプリケーションを

    kazeburo
    kazeburo 2013/06/10
  • YappoLogs: perlbrew best practice

    perlbrew best practice perlbrew には $ perlbrew upgrade-perlというのが実装されてるのがあまりにも有名ですが、これは現在使ってる環境の perl を、そのマイナーバージョンの中で一番新しいバージョンにアップグレードしてくれるんです。 perl-5.16.1 を使っていたら perl-5.16.3 に perl-5.14.2 を使っていたら perl-5.14.4 に。という具合ですね。 同じマイナーバージョンの Perl では XS バイナリの互換性とか保証されているので、すでにインストールされているモジュールはそのまま利用できる状態になっています。 だがしかし $ perlbrew install perl-5.16.2して作った環境を upgrade-perl すると 5.16.3 が入ってるのに perl-5.16.2 って名前が

    kazeburo
    kazeburo 2013/03/13
    ExtUtils::Installed
  • YappoLogs: Carton Conferenceやってきました

    Carton Conferenceやってきました cpanm / carton の新しいバージョンも出たことだし、そろそろみんなの carton の知見を集めましょうってことで Carton Conference を開催して来ました。 当日の模様は動画では無くはやりの podcast で配信します。 Podcast SP1: 2013/03/02 Carton Conference Tokyo 2013 / riywo's Podcast carton 業界の今までとこれからをが見える貴重な音声ですので皆さん、どうぞご利用ください。 僕の死霊はhttp://yappo.github.com/talks/20130227-cartoncon/です。 podcast してくれた riywo さんと、会場提供やら準備をして頂いたLINE(仮)さんと中野人に感謝です。 Posted by Yapp

  • YappoLogs: Try::Lite 「より安全な例外キャッチを簡単に」

    Try::Lite 「より安全な例外キャッチを簡単に」 I wrote too safety exception handling module. https://metacpan.org/release/Try-Lite $@ の処理を安全に取り扱う例外処理モジュールとしては Try::Tiny があまりにも有名ですが、別の実装を作ってみました。 アプリケーションを作る時は、よく例外クラスを作ってから die bless {}, $foo_class; みたいな形のオブジェクトの例外を投げて、上流の方で eval で受け取ってから $@ の isa を調べて例外に応じた処理をする事が多いと思います。 ここで問題になるのが、受け取った例外の中から不要な物を、さらに上位に向けて rethrow するわけですが、 rethrow するのを忘れてしまうとクリティカルなバグを発生させる要因となりま

  • YappoLogs: Log::Dispatch::Screen::Color::Emotional も作ってみた

    Log::Dispatch::Screen::Color::Emotional も作ってみた ref: http://blog.64p.org/entry/2013/02/15/152508 ref: http://d.hatena.ne.jp/hirose31/20130215/1360908384 変なプラガブル機構になっててめんどいし、最近 Log::Dispatch 使ってなくて自前で log メソッド書いてる。 Posted by Yappo at 2013年02月15日 16:28 | TrackBack | Perl

    kazeburo
    kazeburo 2013/02/15
    なんかフィーチャーされてる..
  • YappoLogs: PLACK_ENV my way

    « plackp -R したプロセスを終了する時には SIGHUP ではなく SIGTERM を送るべき、もしくは daemontools で plackup -R するのは筋が悪い話 | Main | プレイランド に行ってきた! » PLACK_ENV my way 開発用 = development 番用 = production テスト = test なんで deployment じゃなくて production を使っているかって言うと de(?:ve|p)lo[yp]ment だから Posted by Yappo at 2013年01月16日 18:32 | TrackBack | Perl

    kazeburo
    kazeburo 2013/01/16
    判別しやすさ1億倍
  • YappoLogs: plackp -R したプロセスを終了する時には SIGHUP ではなく SIGTERM を送るべき、もしくは daemontools で plackup -R するのは筋が悪い話

    « Perl Advent Calendar Japan 2012 は明後日からです、みんな参加して寿司をべよう! | Main | PLACK_ENV my way » plackp -R したプロセスを終了する時には SIGHUP ではなく SIGTERM を送るべき、もしくは daemontools で plackup -R するのは筋が悪い話 スレタイ速報だから内容は無いけど、 plackup -R や plackup -r した場合には Plack::Loader::Restarter で fork して親プロセスでファイルシステム監視をして、変更があったら子プロセスで立ち上げた plack を再起動するみたいな事やってるんだけど、この親プロセスに対して SIGTERM を送ると子プロセスの方にも TERM 送ってくれるから良いんだけど、うっかり SIGHUP を送っちゃうと親

  • YappoLogs: DSN に sql-mode=... 付けてもなんもなんないんだよ糞が!

    DSN に sql-mode=... 付けてもなんもなんないんだよ糞が! 最初の方に追記しておくと生DBI限定の話です。僕のしらない wrapper モジュールだと動くのかもしれません。 けど、こういうエントリを僕が書いてる時点で、そういうモジュールは筋悪いんだとおもいます。 人のプロジェクトのコードを見てたら my $dbh = DBI->connect('dbi:mysql:dbname=geekdb;sql-mode=STRICT_TRANS_TABLES', 'yappo', 'moneyfriend', %attr); みたいな感じの DSN があったんですよね。 他にも attribute てんこもりだったんで、それコミットした人に聞いて見たら「秘伝のタレです」的なのが帰ってきたので、僕も何も考えないで「これでSTRICT_TRANS_TABLES効いたら、まぁ捗るから付けとこ

    kazeburo
    kazeburo 2012/11/28
    空気椅子なげました
  • YappoLogs: ExclusiveLock::Guard という排他ロック簡単にやるモジュール書いた

    ExclusiveLock::Guard という排他ロック簡単にやるモジュール書いた ファイルを使って排他ロックするには、適当にロックファイルを作って flock $fh, LOCK_EX とかすると思います。 flock で使ったファイルハンドルが close されたら自動的に unlock されるので、最初っから Guard な感じなんだけどロック用のファイルも一緒に消したいので ExclusiveLock::Guard ってのを作った。 use ExclusiveLock::Guard; my $lock = ExclusiveLock::Guard->>new('/tmp/megazaru.lock'); って書くだけで $lock が生きてる間はロックかかってて、ロック外れたらファイルも一緒に消してくれるというだけの物。 ノンブロッキングなインターフェィスが欲しければ use E

    kazeburo
    kazeburo 2012/11/09
    便利げ!
  • YappoLogs: WEB+DB PRESS Perl連載枠「Perl Hackers Hub」のまとめ

    WEB+DB PRESS Perl連載枠「Perl Hackers Hub」のまとめ そろそろ3周目も無事おわりそうなので、今までやった事をまとめて検討したい。 Vol.55 2010年2月24日発売 【第1回】PSGI/Plack……フレームワークとサーバをつなぐエンジン……宮川達彦 ベッケンバウアーだったんだけど、縁があって第一回目に。 Vol.56 2010年4月24日発売 【第2回】AnyEventでイベント駆動プログラミング……牧 大輔 たしか非同期プログラミングのブームが終焉してて実用的に使われだしてた時期だったかなと。 Vol.57 2010年6月24日発売 【第3回】DBIx::Classでデータベース操作……村瀬 大輔,Japan Perl Association[監修] まだまだ Skinny とかは早過ぎたし、世界的なビッグウェーブの DBIC で ORM のネタをダ

    kazeburo
    kazeburo 2012/11/05
  • YappoLogs: 本物の KEN_ALL.csv の処理が簡単に出来る Parse::JapanesePostalCode をリリースした

    物の KEN_ALL.csv の処理が簡単に出来る Parse::JapanesePostalCode をリリースした 空前の KEN_ALL.csv ブームが凄かったのが記憶に新しいばかりですが、この郵政さんが公開している郵便番号ファイルをカジュアルにパース出来るモジュールを作りました。 https://metacpan.org/release/Parse-JapanesePostalCode https://github.com/yappo/p5-Parse-JapanesePostalCode 使い方はとても簡単で use Parse::JapanesePostalCode; my $parser = Parse::JapanesePostalCode->new( file => 'KEN_ALL.csv' ); while (my $obj = $parser->fetch_ob