タグ

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

  • YappoLogs: #isucon 2014 に参加して暫定圏外になってきました

    #isucon 2014 に参加して暫定圏外になってきました ISUCON4 の予選やってきました、最終スコアは37000位だったけど戦足切りラインは45000くらいだと思うので残念でした。 チームメイトは、前回組んだ kamipo さんに加え新メンバー ar_tama さんと共に望みました。 役割としては kamipo: 司令塔権 middleware 以下全部担当 ar_tama: アプリ担当 yappo: アプリ担当 リポジトリはこちら https://github.com/kamipo/isucon4qualifier 開始前 大体の凡ミスはレギュレーション読まない事に起因するのが、過去の ISUCON の教訓だからひたすらレギュレーション読む。 お陰でリーダの遅刻を見逃した。 10:00-12:00 開始とともにトイレ。この間に kamipo さんが必要なインスタンスあげてログ

    kamipo
    kamipo 2014/10/02
    おつカレーさまでした!!
  • 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

    kamipo
    kamipo 2014/03/12
  • 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 が全入りベンチ(

    kamipo
    kamipo 2014/02/13
  • 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 とかからどうやって引っこ抜

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

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

    kamipo
    kamipo 2013/09/20
  • YappoLogs: Perl徹底攻略という本を作った話

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

    kamipo
    kamipo 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 サーバでサービスして、動的なリクエストだけバックエンドのアプリケーションを

    kamipo
    kamipo 2013/06/10
  • YappoLogs: lingr-ircd でお気楽 perl チャット

    lingr-ircd でお気楽 perl チャット 最近 Perlの話題を日語で – Lingr という革新性力が活発ですが、やっぱり lingr は情報密度が薄いから、情報密度が濃い irc client から使いたいっていう事で1週遅れで導入しました。 材料 Perl(筆者はCentOSに最初から入ってる5.8.8を使っています) Carton(適当に入れてください、筆者は sudo cpan Carton で入れました) git 入れ方 git clone git://github.com/tokuhirom/lingr-ircd.git cd lingr-ircd (5.8.8 標準の Scalar::Util が Mouse で動かんから cpanfile に requires 'Scalar::Util' => '1.27'; っての追加した) carton install

    kamipo
    kamipo 2013/03/26
  • 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 って名前が

  • YappoLogs: perlbrew lib

    perlbrew lib perlbrew best practice まとめようと思ったら perlbrew lib なるコマンド見つけたので使ってみた。 なんか、一度ビルドした perl binary と元の site_perl を使いまわして、新たに lib path だけ変えて複数の環境を手軽に切り替える事が出来るってやつみたい。 例えば perl-5.17 の環境に @suneo って lib を作ると、 perl-5.17 の通常のライブラリパスに追加されて @suneo のライブラリパスが利用できる。そして cpanm で install するときは @suneo を汚さない。という branch っぽい作業するときに便利そう。 作る $ perlbrew lib create suneoってコマンドで suneo っていうのができます。 perlbrew list してみる

  • 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 するのを忘れてしまうとクリティカルなバグを発生させる要因となりま

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

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

    kamipo
    kamipo 2012/11/26
  • 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 のネタをダ

    kamipo
    kamipo 2012/11/05
  • YappoLogs: YAPC::Asia Tokyo 2012 感想ブログキャンペーン当選しました// #yapcasia

    YAPC::Asia Tokyo 2012 感想ブログキャンペーン当選しました// #yapcasia 当選メール来てて、手渡しされる前に何が当たったか聞いてから持ち帰るか送ってもらうか考えようと思ったら「当選の内容は発想をもってかえさせて」もらう感じだったので一か八かで受け取ったら持ち帰るサイズだったよ! カヤックさんのぼーるずのワール丼っていう丼でした!やーマジで実用的で捗るw ありがとうございました!!1 Posted by Yappo at 2012年10月09日 13:52 | TrackBack |

    kamipo
    kamipo 2012/10/09
    はずれた…
  • YappoLogs: Perl の サブルーチンリファレンスとコードリファレンスの違いと prottype の & について

    Perl の サブルーチンリファレンスとコードリファレンスの違いと prottype の & について Perl 初心者なので、うっかりはまったので質問してみたら理解力深まったので open & share します。 17:33 < acotie> sub html_builder (&){} 17:33 < acotie> my $x = sub {}; 17:33 < acotie> html_builder $x; 17:34 < acotie> これで Type of arg 1 to main::html_builder must be block or sub {} (not private variable) 17:34 < acotie> て怒られない方法あった気がしたのに忘れたくらい初心者です 17:35 < jox__> html_builder \&{$x}; 17:

    kamipo
    kamipo 2012/10/04
    知らなかった!
  • YappoLogs: YAPC::Asia TOKYO 2012 と Geohash リリースのお知らせ #yapcasia

    YAPC::Asia TOKYO 2012 と Geohash リリースのお知らせ #yapcasia 僕の YAPC::Asia TOKYO 2012 さっき終わったので書く事にしよう。悪意は無いので素直に読んで頂ければと。 位置情報系処理のお話 a.k.a 続・自文書抽出日的住所 http://yappo.github.com/talks/20120928-yapcasia2012-geo/ ikasama さんとかには、前のプレゼンとか見てたら見なくて平気だよね敵な事言われたけど、大体新しいトピックでお伝えしました。 基的には CPAN での位置情報の扱い方と、視覚化の重要性の話と、位置情報は様々なサービスに欠かせないという話と、住所を美味く扱う話、その他注目するべき事と言った内容で緩く話してきました。 やるネタとしては住所正規化API出した時に決まってたのですが、その後色々とネ

    kamipo
    kamipo 2012/10/02
    あとで復習する
  • YappoLogs: えとらぼという会社の話をしよう(1)

    えとらぼという会社の話をしよう(1) 辞めた会社の事をあーだこーだ暴露する人になるより、今現在の事をあーだこーだ言える人になりたい。 (終) Posted by Yappo at 2012年07月09日 17:55 | TrackBack | 適当

    kamipo
    kamipo 2012/07/09
  • YappoLogs: Perl 5.16 の面白そうな新機能を厳選して5つ紹介

    Perl 5.16 の面白そうな新機能を厳選して5つ紹介 日人が金環日で騒いでる待っただかにリリースされた事で有名な Perl 5.16 ですが、ちょっとまえに僕が Hokkaido.PM Casual で新機能の見所プレゼンしてて、折角なのでブログにも書いとこうと思いまして転載仕様かなーと。 More CORE subs are callable through references コア関数のコードリファレンスを取れるるようになります。たとえば文字列フィルタリングをユーザが差し替え可能なモジュールとか作る時に捗るって jsx が言ってました。 use strict; use warnings; use 5.016; # ここの関数テーブルをユーザの好みに差し替える # 基はコア関数を使う my %func_map = ( index => \&CORE::index, splic

  • YappoLogs: Web関連エンジニアなら必ず読むべき本 〜 Webエンジニアのためのデータベース技術[実践]入門 〜 を全部読んだ

    Web関連エンジニアなら必ず読むべき 〜 Webエンジニアのためのデータベース技術[実践]入門 〜 を全部読んだ 2709円でこんなに濃厚なコストパフォーマンスがアホみたいに高いは読んだ事無いし、Web関連のエンジニアをやっている人は必ず読んだ方が良いし、特にどのレイヤをやるかに関わらずエンジニアを目指す学生さんも卒業までには読んでおいたほうが良いでした。 なんか誤解が多そうなんで追記しておくと、書は「カジュアルなデータベース*利用者*のための入門」ではなくて「質的なデータベース技術の知見を得る為の入門」である。ちゃんとタイトルだってデータベース技術って書いてあるでしょ? 明日着でWDP献先と同住所に送付さ せていただきます。ご一読いただき、コメントなどいただけると大変ありがたい です。 明日発売なので念のためご連絡させていただきました。 というメールを3月8日に頂いて、実

    kamipo
    kamipo 2012/04/02
  • YappoLogs: InnoDB Deep Talk #1 に参加して来た話または 住所正規化 MySQL UDF を作った話

    « Kyoto.pm Tech Talks #01 に JPA の 地域PM向け 講師派遣支援プログラム で参加してきます! | Main | Kyoto.PM #1 で発表してきました » InnoDB Deep Talk #1 に参加して来た話または 住所正規化 MySQL UDF を作った話 昨日は起きたら参加申し込みしてたはずの InnoDB Deep Talk #1 が始まってるらしいのに気づいて急いで行ってきました。入館面倒い会場なのに遅刻者対応したりピザとか飲み物調達とか面倒い事をニコニコやってるいちい++だったし、ピザーラのピザじゃなくてサルヴァトーレのピザはやっぱり上手くて沢山くってしまった。 っていう話は置いといて、一通り終わって歓談タイムに突入した時に、もりよしさんが昨夜思いついた inokodb っていう素晴らしいストレージエンジンを、その場で実装してて LT して

    kamipo
    kamipo 2012/03/11