{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/event-report-of-yapc-asia-2015/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"bff22872-767a-53b7-8279-12aee505832d","excerpt":"こんにちは。 会社の先輩に誘っていただき、 YAPC 2015 に行ってきました。 Perlの祭典です。Perl全く書かないけど。人生初のカンファレンスです。 Perl色がもっと強いものかと思ってましたが、「申し訳程度のPerl要素…」 と何度も思うくらいにはPerl…","html":"<p>こんにちは。<br>\n会社の先輩に誘っていただき、 <a href=\"http://yapcasia.org/2015/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">YAPC 2015</a> に行ってきました。<br>\nPerlの祭典です。<del>Perl全く書かないけど。</del>人生初のカンファレンスです。</p>\n<p>Perl色がもっと強いものかと思ってましたが、「申し訳程度のPerl要素…」<br>\nと何度も思うくらいにはPerl要素が薄く、初心者にも入りやすかったです。</p>\n<p><strong>「ブログに書くまでがYAPCです」</strong> と何度も念を押されたので、というわけではなく、<br>\n単に自分への備忘録とイベントレポートとして残します。</p>\n<!--more-->\n<h2 id=\"メリークリスマス\" style=\"position:relative;\"><a href=\"#%E3%83%A1%E3%83%AA%E3%83%BC%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%9E%E3%82%B9\" aria-label=\"メリークリスマス permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>メリークリスマス！</h2>\n<ul>\n<li><a href=\"http://yapcasia.org/2015/talk/show/a636430c-0fbf-11e5-8a02-43ec7d574c3a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">メリークリスマス！ – YAPC::Asia Tokyo 2015</a></li>\n<li><a href=\"http://togetter.com/li/863357\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Perlの父 Larry Wall が描く『指輪物語』 そしてメリークリスマス！ #yapcasia #yapcasiaA – Togetterまとめ</a></li>\n</ul>\n<p>メモ</p>\n<ul>\n<li>Perl作った方</li>\n<li>はてなによる音声同時翻訳</li>\n<li>「何が得られるか、ではなく人に何を与えられるか」に幸せを感じる</li>\n</ul>\n<blockquote class=\"twitter-tweet\" lang=\"ja\">\n  <p lang=\"ja\" dir=\"ltr\">\n    <a href=\"https://twitter.com/hashtag/yapcasia?src=hash\">#yapcasia</a> 言語を構築するのは世界を構築するのと同じ\n  </p>&mdash; しょーちゃん (@show_m001)   \n  <a href=\"https://twitter.com/show_m001/status/634536792679694341\">2015, 8月 21</a>\n</blockquote>\n<blockquote class=\"twitter-tweet\" lang=\"ja\">\n  <p lang=\"ja\" dir=\"ltr\">\n    2015/12/25「Perl6を出すといったな、あれは嘘だ」 <a href=\"https://twitter.com/hashtag/yapcasia?src=hash\">#yapcasia</a>\n  </p>&mdash; れこ (@L_e_k_o)   \n  <a href=\"https://twitter.com/L_e_k_o/status/634540578013868032\">2015, 8月 21</a>\n</blockquote>\n<p>OSSのお話とか、Perl 5とPerl 6の話をホビットの冒険と指輪物語に例えつつな感じでした。<br>\nどちらもタイトルしか分からないのでうまく喩え話が頭に入らず。。。<br>\nそして <strong>「同時翻訳すごい！ すごい！」</strong> と感動して肝心の話を殆ど聞いてませんでした。</p>\n<hr>\n<h2 id=\"effective-es6\" style=\"position:relative;\"><a href=\"#effective-es6\" aria-label=\"effective es6 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Effective ES6</h2>\n<p>圧倒的な満席で入れず。スライドだけでも。</p>\n<div style=\"margin-bottom:5px\">\n  <strong> <a href=\"//www.slideshare.net/teppeis/effective-es6\" title=\"Effective ES6\" target=\"_blank\">Effective ES6</a> </strong> from <strong><a href=\"//www.slideshare.net/teppeis\" target=\"_blank\">teppeis </a></strong>\n</div>\n<hr>\n<h2 id=\"web由来の組み込みエンジニアの半年間のすべて-webとiosとbleとハードウェアデバイスのこと\" style=\"position:relative;\"><a href=\"#web%E7%94%B1%E6%9D%A5%E3%81%AE%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E5%8D%8A%E5%B9%B4%E9%96%93%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6-web%E3%81%A8ios%E3%81%A8ble%E3%81%A8%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AE%E3%81%93%E3%81%A8\" aria-label=\"web由来の組み込みエンジニアの半年間のすべて webとiosとbleとハードウェアデバイスのこと permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Web由来の組み込みエンジニアの半年間のすべて 〜WebとiOSとBLEとハードウェアデバイスのこと〜</h2>\n<ul>\n<li><a href=\"http://yapcasia.org/2015/talk/show/4bab2728-00fa-11e5-9931-79c97d574c3a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Web由来の組み込みエンジニアの半年間のすべて 〜WebとiOSとBLEとハードウェアデバイスのこと〜 – YAPC::Asia Tokyo 2015</a></li>\n<li><a href=\"http://togetter.com/li/863373\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">みんなが聞きたいIoT!!”Akerun”の作り方<del>Webからハードウェアへの移行での苦労</del> #yapcasia #yapcasiaD – Togetterまとめ</a></li>\n<li><a href=\"http://kazuph.github.io/presentation/yapc-2015-iot-presentation/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">スライド</a></li>\n<li><a href=\"http://kazuph.hateblo.jp/entry/2015/08/22/163000\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">本人 発表後日談</a></li>\n</ul>\n<p>メモ</p>\n<ul>\n<li><a href=\"https://twitter.com/kazuph?lang=en\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kazuph</a></li>\n<li>スマートロックロボット<a href=\"https://akerun.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Akerun</a>、組み込み、ネイティブアプリ\n<ul>\n<li>4/23販売開始、スマフォから鍵を開けられる <strong>完全にあとづけの鍵</strong> <a href=\"https://akerun.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">リンク</a></li>\n</ul>\n</li>\n<li><strong>この世でもっともハックされてないものをハックしよう</strong> → 鍵だった → 新聞社などで取り上げ → 企業\n<ul>\n<li>Webの知識を持ったハード・組み込みエンジニアが重宝されるのではないか</li>\n<li>Webしかやってこなかった人間がどうIoTの世界に入っていったか</li>\n</ul>\n</li>\n<li>Webなら早ければ3日でリリースできる、が。\n<ul>\n<li>原理施策（物理的に実現可能なのか？）</li>\n<li>量産試作（量産に耐えられるか）</li>\n<li>生産開始</li>\n</ul>\n</li>\n<li>忙しさの波\n<ul>\n<li>メカ → エレキ → ファーム</li>\n<li>各工程で忙しさの波がある</li>\n</ul>\n</li>\n<li><strong>「あとはファームでカバー」≒「運用でカバー」</strong></li>\n<li>Webエンジニアが組み込むのに足りない技術\n<ul>\n<li>C or C++、<a href=\"http://9cguide.appspot.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">苦しんで覚えるC言語</a></li>\n<li>物理的な考え方（数式、座標、速度、時間、角度）</li>\n<li>デジタルマルチメータ、オシロスコープ</li>\n</ul>\n</li>\n<li>練習台：Arduino\n<ul>\n<li>setup → 無限に動くloop という大筋の流れを知る</li>\n<li>本番製品にはいる前のプロトタイプ</li>\n</ul>\n</li>\n<li>Arduinoと本番の違い\n<ul>\n<li>Arduinoのようにずっと起きてるマイコン、ではなく長いプロセスは殺す</li>\n<li>便利関数(Arduino, C++)がない</li>\n<li>Arduino以外だとググっても情報がほとんど出てこない</li>\n<li>セキュリティの知識</li>\n</ul>\n</li>\n<li>BLE\n<ul>\n<li>Bluetooth Low Energy</li>\n<li>Bluetooth 3.0から導入された比較的新しい企画</li>\n<li>GATTというプロファイルを愛発者が設定して通信にしよう</li>\n<li>iOS/Androidに標準搭載</li>\n<li>BLE Serial(Arduinoとスマフォ感でのシリアル通信)</li>\n</ul>\n</li>\n<li><a href=\"http://freeware.the-meiers.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CoolTerm</a>\n<ul>\n<li>Eclipse使いたくない</li>\n</ul>\n</li>\n<li>通信方式とセキュリティ\n<ul>\n<li>BLE自体のセキュリティは弱い</li>\n<li>独自実装はせず、汎用的な技術で通信方式を固めた\n<ul>\n<li>AES256、HMAC、RSA</li>\n</ul>\n</li>\n<li>プロにレビューしてもらう</li>\n<li>脆弱性検証してもらう</li>\n<li><a href=\"http://www.amazon.co.jp/%E6%96%B0%E7%89%88%E6%9A%97%E5%8F%B7%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80-%E7%A7%98%E5%AF%86%E3%81%AE%E5%9B%BD%E3%81%AE%E3%82%A2%E3%83%AA%E3%82%B9-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797350997\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">暗号技術入門</a></li>\n<li><a href=\"http://www.amazon.co.jp/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0TCP-IP-%E6%83%85%E5%A0%B1%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E7%B7%A8-%E9%BD%8B%E8%97%A4-%E5%AD%9D%E9%81%93/dp/4274069214\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">マスタリングTCP/IP</a></li>\n</ul>\n</li>\n<li>プロに教えてもらう\n<ul>\n<li><a href=\"http://peatix.com/event/49938/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">BLE Boot Camp</a></li>\n</ul>\n</li>\n<li>WebエンジニアとIoTプロダクト\n<ul>\n<li>IoTプロダクトの全体設計ができる</li>\n<li>ハード・ソフト両方強い人</li>\n<li>Webでは当たり前な枯れたセキュリティ技術</li>\n<li><strong>O</strong> n <strong>T</strong> he <strong>A</strong> ir <strong>D</strong> evice <strong>F</strong> irmware <strong>U</strong> pdate（おとうふ）</li>\n<li>出荷用アプリケーションをwebで実装、など「web化の手」がでる</li>\n<li>Web屋も組み込み屋になれる</li>\n</ul>\n</li>\n<li>「大手メーカーにスピードで負けたらベンチャーで起業した意味が無い」</li>\n</ul>\n<blockquote class=\"twitter-tweet\" lang=\"ja\">\n  <p lang=\"ja\" dir=\"ltr\">\n    GPIO(Lチカ)⇒PWM(Lフワ)⇒Timer割込でいろいろ⇒I2C通信という流れで進んだ模様。\n<a href=\"https://twitter.com/hashtag/yapcasiaD?src=hash\">#yapcasiaD</a>\n  </p>&mdash; takasago (@sago35tk)   \n  <a href=\"https://twitter.com/sago35tk/status/634553318098907136\">2015, 8月 21</a>\n</blockquote>\n<hr>\n<h2 id=\"http2時代のウェブサイト設計\" style=\"position:relative;\"><a href=\"#http2%E6%99%82%E4%BB%A3%E3%81%AE%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%82%A4%E3%83%88%E8%A8%AD%E8%A8%88\" aria-label=\"http2時代のウェブサイト設計 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>HTTP/2時代のウェブサイト設計</h2>\n<div style=\"margin-bottom:5px\">\n  <strong> <a href=\"//www.slideshare.net/kazuho/http2-51888328\" title=\"HTTP/2時代のウェブサイト設計\" target=\"_blank\">HTTP/2時代のウェブサイト設計</a> </strong> from <strong><a href=\"//www.slideshare.net/kazuho\" target=\"_blank\">Kazuho Oku</a></strong>\n</div>\n<ul>\n<li><a href=\"http://yapcasia.org/2015/talk/show/dead6890-09b7-11e5-998a-67dc7d574c3a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">HTTP/2時代のウェブサイト設計 – YAPC::Asia Tokyo 2015</a></li>\n<li><a href=\"http://togetter.com/li/863416\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">H2Oは先を行く！HTTP/2時代にむけたウェブサイト設計のポイント #yapcasia #yapcasiaD #http2 – Togetterまとめ</a></li>\n</ul>\n<p>メモ</p>\n<ul>\n<li>HTTPとWebページの読み込み速度\n<ul>\n<li>バンド幅が広くなっても、ある一定以上はページロード時間は早くならない\n<ul>\n<li>実行バンド幅1.6Mbps程度で頭打ちになる</li>\n</ul>\n</li>\n<li><strong>レイテンシが小さいほど速い</strong></li>\n</ul>\n</li>\n<li>HTTP1.1\n<ul>\n<li>HTTPパイプライン\n<ul>\n<li>仕様、レスポンス受信前に次のリクエストを送信可能</li>\n<li><strong>レスポンス未受信のリクエストを再送信してよいか不明</strong>\n<ul>\n<li>サーバが同じリクエストを吹くうう階処理してしまう可能性</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>レイテンシ：光の速度は変わらない\n<ul>\n<li>アメリカまで光ファイバーで往復すれば80ミリ秒</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>いかん、Webが遅くなっている</strong> → レイテンシに負けないプロトコル → HTTP/2</p>\n<h3 id=\"バイナリプロトコル\" style=\"position:relative;\"><a href=\"#%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB\" aria-label=\"バイナリプロトコル permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>バイナリプロトコル</h3>\n<p>脆弱性を防ぐ</p>\n<ul>\n<li>HTTP Request/Response Splitting Attack\n<ul>\n<li>テキストだからおざなりになる、厳格にしようよ</li>\n<li>HTTP/1.1のパーサによる解釈の差異を突く攻撃</li>\n</ul>\n</li>\n<li>転送データ量の低減\n<ul>\n<li>コア化な粒度でレスポンスの順序を変更したい</li>\n</ul>\n</li>\n</ul>\n<p>すべての通信データは <strong>フレーム</strong> に格納される<br>\n色々な種類がある</p>\n<ul>\n<li><a href=\"https://http2.github.io/http2-spec/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://http2.github.io/http2-spec/</a></li>\n<li><a href=\"https://github.com/bradfitz/http2/tree/master/h2i\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">h2i</a></li>\n</ul>\n<h3 id=\"多重化\" style=\"position:relative;\"><a href=\"#%E5%A4%9A%E9%87%8D%E5%8C%96\" aria-label=\"多重化 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>多重化</h3>\n<h3 id=\"ヘッダ圧縮\" style=\"position:relative;\"><a href=\"#%E3%83%98%E3%83%83%E3%83%80%E5%9C%A7%E7%B8%AE\" aria-label=\"ヘッダ圧縮 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ヘッダ圧縮</h3>\n<h3 id=\"優先度制御\" style=\"position:relative;\"><a href=\"#%E5%84%AA%E5%85%88%E5%BA%A6%E5%88%B6%E5%BE%A1\" aria-label=\"優先度制御 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>優先度制御</h3>\n<p>ex.<br>\nCSS, jsを再優先でとっておいて、HTMLは低優先度で取ってくる<br>\nHTMLが取得された時点でCSS, jsの読み取りは完了しているので、その時点でレンダリングを開始できる</p>\n<h4 id=\"サーバ\" style=\"position:relative;\"><a href=\"#%E3%82%B5%E3%83%BC%E3%83%90\" aria-label=\"サーバ permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>サーバ</h4>\n<p>サーバ側が正しく実装しないと、クライアント側がチューニングできない。</p>\n<ul>\n<li>H2O\n<ul>\n<li>reprioritize-blocking-assets オプションで20％ほど高速化できる</li>\n</ul>\n</li>\n<li>nghttp2</li>\n</ul>\n<p>この二つ以外はまともに実装されていない</p>\n<h3 id=\"サーバプッシュ\" style=\"position:relative;\"><a href=\"#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5\" aria-label=\"サーバプッシュ permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>サーバプッシュ</h3>\n<ul>\n<li>クライアントがするであろうリクエストを予測し、サーバ側からプッシュする</li>\n<li>RFCに忠実だとperformanceが出しにくい</li>\n<li>プッシュするリソースは常に最優先</li>\n<li>H2O1.5: cache-aware server-push\n<ul>\n<li>ウェブを高速化する技術である</li>\n<li>レイテンシを隠蔽\n<ul>\n<li>優先度制御</li>\n<li>小さなレスポンスが大量に流れても問題ない</li>\n<li>HTTP/2 ではレイテンシではなくバンド幅が再び表示速度のボトルネックになってくる</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"http2でオワコンになる最適化\" style=\"position:relative;\"><a href=\"#http2%E3%81%A7%E3%82%AA%E3%83%AF%E3%82%B3%E3%83%B3%E3%81%AB%E3%81%AA%E3%82%8B%E6%9C%80%E9%81%A9%E5%8C%96\" aria-label=\"http2でオワコンになる最適化 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>HTTP/2でオワコンになる最適化</h3>\n<ul>\n<li>アセットの結合\n<ul>\n<li>不要なデータまで転送するから</li>\n<li>一部変更したら全部再転送になる</li>\n</ul>\n</li>\n<li>expiresのりよう\n<ul>\n<li>expiresの仕様</li>\n<li>HTTP/2なら304レスポンスを使い放題</li>\n<li>ファイルごとに クエリパラメータ を管理するのが面倒だから</li>\n<li>ファイルごとに管理していない理由は、別のファイル更新で、全部再転送するのは良くない</li>\n</ul>\n</li>\n<li>ドメインシャーディング\n<ul>\n<li>アセットを別ホストに置くことでHTTP/1の同時接続数を6本以上にするハック\n<ul>\n<li>CDNなどはこれ</li>\n</ul>\n</li>\n<li>ホストが異なると、HTTP2でも別のTCP接続になる</li>\n<li>複数のTCP接続にまたがった優先度制御はできない</li>\n<li>結果、first-pain timeが遅くなる</li>\n</ul>\n</li>\n<li>CDNを使っている場合はWebアプリ　</li>\n</ul>\n<h3 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まとめ</h3>\n<ul>\n<li>Webサイトを早くすればページビューが増える\n<ul>\n<li>HTTPにすれば売上が伸びる</li>\n</ul>\n</li>\n<li>H2Oは一番早いHTTP/2サーバ</li>\n<li>Cipersuites</li>\n<li>Forward Secrecy\n<ul>\n<li>長期鍵が漏洩・解析されてもカコの友心内容が解読可能にならない、という性質</li>\n</ul>\n</li>\n<li>セッション ticket\n<ul>\n<li>サーバが使う共通鍵をクライアントが覚える</li>\n<li>サーバは共通鍵をクライアントに送信\n<ul>\n<li>セッション ticketの暗号化に使う鍵はサーバ動作中は変わらない</li>\n<li>PFS対応のcupersuiteを使っていても、この鍵がバレたら全通信が解読可能になる</li>\n</ul>\n</li>\n<li>一般的なサーバではセッション ticketを無効にしておこう</li>\n</ul>\n</li>\n</ul>\n<p>HTTP2クライアントとしてlibcurlが優れている</p>\n<p>サーバ証明書買わなきゃいけないの…？<br>\n<a href=\"https://letsencrypt.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">LeysEncrypt</a> がリリースされれば無料で取れる</p>\n<hr>\n<p>「HTTP/2でオワコンになる最適化」の話で<br>\n今のフロントエンドのビルドツール周り（アセットの結合）が圧縮技術＋オーバヘッド削減によって、むしろボトルネックになる可能性があるという話が印象的でした。</p>\n<hr>\n<h2 id=\"perlの上にも三年--ずっとイケてるサービスを作り続ける技術-\" style=\"position:relative;\"><a href=\"#perl%E3%81%AE%E4%B8%8A%E3%81%AB%E3%82%82%E4%B8%89%E5%B9%B4--%E3%81%9A%E3%81%A3%E3%81%A8%E3%82%A4%E3%82%B1%E3%81%A6%E3%82%8B%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%9C%E3%82%8A%E7%B6%9A%E3%81%91%E3%82%8B%E6%8A%80%E8%A1%93-\" aria-label=\"perlの上にも三年  ずっとイケてるサービスを作り続ける技術  permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜</h2>\n<ul>\n<li><a href=\"http://yapcasia.org/2015/talk/show/de9e7a1e-136d-11e5-a9fc-d9f87d574c3a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜 – YAPC::Asia Tokyo 2015</a></li>\n<li><a href=\"http://togetter.com/li/863438\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">最高のオブジェクト指向&#x26;最高のドメイン駆動 ひとでくんさんのPerlの上の三年 #yapcasia #yapcasiaE</a></li>\n</ul>\n<p>メモ</p>\n<ul>\n<li>最 高</li>\n<li>内輪感すごい</li>\n<li>はてなブログのフレームワーク（ジョーク？）\n<ul>\n<li>読むコードが最小</li>\n<li>安全</li>\n<li>ルーティング</li>\n<li>セキュリティ対策</li>\n<li>過剰な抽象化を避ける（DRY3ルール）</li>\n<li>Service層</li>\n</ul>\n</li>\n<li>契約による設計\n<ul>\n<li>お互いの約束</li>\n<li>責任外のことをチェックしない</li>\n<li>冗長さの排除</li>\n</ul>\n</li>\n<li>全体で使えるものを設計し使い続けるのは難しい\n<ul>\n<li>状態のなくて済むものに状態を与えてはならない</li>\n<li>Builderパターン</li>\n</ul>\n</li>\n<li>長年開発していると、知見が集まってくる\n<ul>\n<li>新しい指針に合わせて</li>\n<li>コアドメインに注力\n<ul>\n<li>コアドメイン以外はどうでもよい</li>\n</ul>\n</li>\n<li>最高の本</li>\n</ul>\n</li>\n<li>DDD\n<ul>\n<li>エンティティ と 値オブジェクト</li>\n<li>最高の本</li>\n</ul>\n</li>\n<li>言葉の統一\n<ul>\n<li>エンジニアも営業も企画もデザイナーも同じ名前で呼ぶ</li>\n<li>用語集.md</li>\n</ul>\n</li>\n</ul>\n<p>内容は広くいろいろな話題があって気付かされることが多かったです。<br>\nエリック・エヴァンスのドメイン駆動設計の本2冊ともポチりました。</p>\n<hr>\n<h2 id=\"electron-building-desktop-apps-with-web-technologies\" style=\"position:relative;\"><a href=\"#electron-building-desktop-apps-with-web-technologies\" aria-label=\"electron building desktop apps with web technologies permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Electron: Building desktop apps with web technologies</h2>\n<ul>\n<li><a href=\"\">Electron: Building desktop apps with web technologies – YAPC::Asia Tokyo 2015</a></li>\n<li><a href=\"http://togetter.com/li/863466\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">WEB技術を使ってデスクトップ開発！Electronとは!? #yapcasia #yapcasiaA</a></li>\n</ul>\n<p>中の人がわざわざいらしてお話してくれた。<br>\nでもビギナー向けな内容で、話す内容も質疑応答も知ってたという感じでした。ざっくりと。</p>\n<hr>\n<h2 id=\"esaio--趣味から育てたwebサービスで生きていく\" style=\"position:relative;\"><a href=\"#esaio--%E8%B6%A3%E5%91%B3%E3%81%8B%E3%82%89%E8%82%B2%E3%81%A6%E3%81%9Fweb%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A7%E7%94%9F%E3%81%8D%E3%81%A6%E3%81%84%E3%81%8F\" aria-label=\"esaio  趣味から育てたwebサービスで生きていく permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>esa.io – 趣味から育てたWebサービスで生きていく</h2>\n<ul>\n<li><a href=\"http://yapcasia.org/2015/talk/show/c191c08a-0a98-11e5-be34-67dc7d574c3a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">esa.io – 趣味から育てたWebサービスで生きていく – YAPC::Asia Tokyo 2015</a></li>\n<li><a href=\"http://togetter.com/li/863489\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">趣味からサービスへ！esa.ioの中の人に学ぶプロダクト開発 #yapcasia #yapcasiaA</a></li>\n<li><a href=\"https://esa.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">esa.io</a></li>\n</ul>\n<h3 id=\"趣味でやっていく\" style=\"position:relative;\"><a href=\"#%E8%B6%A3%E5%91%B3%E3%81%A7%E3%82%84%E3%81%A3%E3%81%A6%E3%81%84%E3%81%8F\" aria-label=\"趣味でやっていく permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>趣味でやっていく</h3>\n<p>制御可能なものを見極め、それを制御することに集中</p>\n<ul>\n<li><a href=\"https://github.com/masutaka/ci-bundle-update\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://github.com/masutaka/ci-bundle-update</a>\n<ul>\n<li>毎日bundle updateしてPRしてくれる</li>\n</ul>\n</li>\n<li>心からのドッグフーディング</li>\n<li>リリースノート駆動開発</li>\n<li>モチベーション駆動開発</li>\n<li><strong>どんどん試行錯誤しよう</strong></li>\n</ul>\n<blockquote class=\"twitter-tweet\" lang=\"ja\">\n  <p lang=\"ja\" dir=\"ltr\">\n    βリリース前に知人の会社が使ってくれて、フィードバックいっぱいくれた。これは仕事にできそうだなぁと思った。会社を作ったのは、真面目に続けてく意思表示みたいなもの <a href=\"https://twitter.com/hashtag/yapcasia?src=hash\">#yapcasia</a> <a href=\"https://twitter.com/hashtag/yapcasiaA?src=hash\">#yapcasiaA</a>\n  </p>&mdash; たま● (@tmd45)   \n  <a href=\"https://twitter.com/tmd45/status/634623202833010689\">2015, 8月 21</a>\n</blockquote>\n<p>他のセッションに比べて濃いわけではなかったけど、一番心に残ったセッションでした。<br>\n(( ⁰⊖⁰)/)</p>\n<hr>\n<h2 id=\"isuconの勝ち方\" style=\"position:relative;\"><a href=\"#isucon%E3%81%AE%E5%8B%9D%E3%81%A1%E6%96%B9\" aria-label=\"isuconの勝ち方 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ISUCONの勝ち方</h2>\n<div style=\"margin-bottom:5px\">\n  <strong> <a href=\"//www.slideshare.net/kazeburo/isucon-yapcasia-tokyo-2015\" title=\"ISUCONの勝ち方 YAPC::Asia Tokyo 2015\" target=\"_blank\">ISUCONの勝ち方 YAPC::Asia Tokyo 2015</a> </strong> from <strong><a href=\"//www.slideshare.net/kazeburo\" target=\"_blank\">Masahiro Nagano</a></strong>\n</div>\n<ul>\n<li><a href=\"http://yapcasia.org/2015/talk/show/86ebd212-fab3-11e4-8f5a-8ab37d574c3a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ISUCONの勝ち方 – YAPC::Asia Tokyo 2015</a></li>\n<li><a href=\"http://togetter.com/li/863801\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">「ISUCONの勝ち方」！ 100万円を獲るためのチューニングの極意 #yapcasia #yapcasiaE</a></li>\n</ul>\n<h3 id=\"isuconとは\" style=\"position:relative;\"><a href=\"#isucon%E3%81%A8%E3%81%AF\" aria-label=\"isuconとは permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ISUCONとは</h3>\n<p>ISUCONで得られた知見を公開されることで、業界の技術力に寄与<br>\nベンチマーク：動作の変更がないことをチェック、テストに落ちたら失格</p>\n<h3 id=\"私とisucon\" style=\"position:relative;\"><a href=\"#%E7%A7%81%E3%81%A8isucon\" aria-label=\"私とisucon permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>私とISUCON</h3>\n<p>2年連続優勝<br>\n事前に出題に挑戦し、ベンチマークの問題を洗い出す</p>\n<h3 id=\"isuconから生まれた技術\" style=\"position:relative;\"><a href=\"#isucon%E3%81%8B%E3%82%89%E7%94%9F%E3%81%BE%E3%82%8C%E3%81%9F%E6%8A%80%E8%A1%93\" aria-label=\"isuconから生まれた技術 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ISUCONから生まれた技術</h3>\n<p><a href=\"https://github.com/kazeburo/Kossy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Kossy</a>: ISUCONから生まれたWAF <a href=\"https://github.com/kazeburo/Gazelle\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Gazelle</a>, <a href=\"https://github.com/kazeburo/Redis-Jet\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Redis::Jet</a>, <a href=\"https://github.com/kazeburo/Plack-Middleware-Session-Simple\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Plack::Middleware::Session::Simple</a> など</p>\n<h3 id=\"webアプリケーションのパフォーマンス\" style=\"position:relative;\"><a href=\"#web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9\" aria-label=\"webアプリケーションのパフォーマンス permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Webアプリケーションのパフォーマンス</h3>\n<p>管理コスト・障害対応のコストも減らせる<br>\n大規模なインフラでは嬉しい</p>\n<h3 id=\"isuconの勝ち方-1\" style=\"position:relative;\"><a href=\"#isucon%E3%81%AE%E5%8B%9D%E3%81%A1%E6%96%B9-1\" aria-label=\"isuconの勝ち方 1 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ISUCONの勝ち方</h3>\n<ul>\n<li>お互いの作業をチェックし、ミスを減らす</li>\n<li>コミュニケーションコストを減らすため普段から業務を行っているメンバー推奨</li>\n<li>チームメイトとの会話を重視する\n<ul>\n<li>問題をいちはやく相談して解決する</li>\n<li>本線では目の前に居る</li>\n<li>決まったことはメモとして書き出す、手戻りを減らす</li>\n</ul>\n</li>\n<li>紙と鉛筆さいつよ</li>\n<li>時間配分\n<ul>\n<li>最初の一時間は「まだ慌てる時間じゃない」課題の理解、プロファイリングとチューニングの方向性を決めることだけに使う</li>\n<li>最後の30分は再起動テストに残す\n<ul>\n<li>ベンチマーク前にwebサーバの再起動があってからテストが走る</li>\n<li>サーバ再起動したらNFSのマウントができなかった</li>\n<li>問題が残ってれば7時間がみずのあわ</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>事前準備\n<ul>\n<li>Private Git Repository</li>\n<li>Wiki\n<ul>\n<li>メンバーのSSH鍵</li>\n<li>秘伝のタレ</li>\n</ul>\n</li>\n<li>チャット</li>\n<li>技術選択についての簡単に打ち合わせ</li>\n<li>過去問をとく\n<ul>\n<li><a href=\"http://d.hatena.ne.jp/tmatsuu/20150815/1439643715\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ISUCON予選突破の鍵は過去問を解くことなので無料で試せるようにした(Vagrant+Ansible)</a></li>\n<li>Vagrantだと本番とスコアの出方が違うので、GCP、AWSなどで試したほうが良いと思う</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"チューニングの進め方\" style=\"position:relative;\"><a href=\"#%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E9%80%B2%E3%82%81%E6%96%B9\" aria-label=\"チューニングの進め方 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>チューニングの進め方</h3>\n<ul>\n<li>レギュレーションや当日の説明をよく読む\n<ul>\n<li><strong>スコアの算出方法、失格条件は特に重要</strong></li>\n</ul>\n</li>\n<li>ブラウザで課題となるサイトへアクセスする</li>\n<li>とりあえずベンチマークを動かす</li>\n<li>起きていること\n<ul>\n<li>アクセスログ解析\n<ul>\n<li>ベンチマークがアクセスしている先</li>\n<li><strong>頻度</strong> と <strong>レスポンス時間</strong> をバランスよく見る\n<ul>\n<li><strong>重いけどスコアには関係ない箇所がある</strong> こともある</li>\n</ul>\n</li>\n<li>ログ解析\n<ul>\n<li>Apacheなら<code>%D</code>つける（レスポンス時間）</li>\n<li>アクセスログ消して再起動してベンチマーク使用</li>\n<li><a href=\"https://github.com/tagomoris/Apache-Log-Parser/blob/master/bin/analyze_apache_logs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">analyze_apache_logs</a></li>\n<li><a href=\"https://github.com/matsuu/kataribe/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">kataribe</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li>SlowQuery解析\n<ul>\n<li>時間だけでなく、 <strong>頻度</strong></li>\n<li><a href=\"https://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">pt-query-digest</a></li>\n<li><code>SET GLOBAL</code>で変数として設定しとけば再起動するだけで設定が元に戻せる。戻し忘れ防止</li>\n</ul>\n</li>\n<li>アプリのプロファイリング\n<ul>\n<li>各言語ごとのツールを使用</li>\n<li>strace\n<ul>\n<li>システムコールレベルでアプリケーションの動作を確認</li>\n</ul>\n</li>\n<li>tcpdump\n<ul>\n<li>通信内容のキャプチャ</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>サーバ負荷の確認\n<ul>\n<li>top: 全体の負荷</li>\n<li>iftop: ネットワーク</li>\n<li>iotop: ディスク I/O</li>\n<li>dstat</li>\n<li>などなど。使い慣れたものを</li>\n</ul>\n</li>\n<li><strong>プロファイリング結果を読み解く慣れ</strong></li>\n</ul>\n</li>\n</ul>\n<h3 id=\"サーバ構成の確認\" style=\"position:relative;\"><a href=\"#%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E6%88%90%E3%81%AE%E7%A2%BA%E8%AA%8D\" aria-label=\"サーバ構成の確認 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>サーバ構成の確認</h3>\n<p><code>Client → ReverseProxy → APP → RDBMS, KVS</code></p>\n<ul>\n<li>それぞれどのようなサーバ、ミドルウェアが動作しているか</li>\n<li>サーバ、ミドルウェアの設定</li>\n<li>過去には設定のtypoや罠も\n<ul>\n<li>memcachedを生で使ってるかと思えばMySQLのmemcachedプラグインだった、とか。しかもmemcachedも起動していて悪質な罠</li>\n</ul>\n</li>\n<li>ISUCONではサーバのおかわりはできない。与えられたサーバを効率よく使い切る</li>\n<li>効率のよいCPUの使い方を知る\n<ul>\n<li><a href=\"http://yuroyoro.net/latency.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CPUの気持ちになれるツールを作った</a></li>\n</ul>\n</li>\n<li>コンテキストスイッチング\n<ul>\n<li>効率よくプロセスを動かすしくみ</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"目指すべきアプリケーション\" style=\"position:relative;\"><a href=\"#%E7%9B%AE%E6%8C%87%E3%81%99%E3%81%B9%E3%81%8D%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3\" aria-label=\"目指すべきアプリケーション permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>目指すべきアプリケーション</h3>\n<ul>\n<li>いかに何もしないアプリに近づけていくか\n<ul>\n<li>参照を減らす</li>\n<li>通信を減らす</li>\n<li>プロセスを減らす、コンテキストスイッチを減らす</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"webサーバ\" style=\"position:relative;\"><a href=\"#web%E3%82%B5%E3%83%BC%E3%83%90\" aria-label=\"webサーバ permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Webサーバ</h3>\n<ul>\n<li>Apache vs nginx\n<ul>\n<li>ISUCONの環境では大体の場合nginxが有利</li>\n</ul>\n</li>\n<li>nginx vs h2o\n<ul>\n<li>h2oはプロセスではなくスレッド、スレッド間の情報の共有がしやすい、コンテキストスイッチのコストが低い</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"よくある重い処理\" style=\"position:relative;\"><a href=\"#%E3%82%88%E3%81%8F%E3%81%82%E3%82%8B%E9%87%8D%E3%81%84%E5%87%A6%E7%90%86\" aria-label=\"よくある重い処理 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>よくある重い処理</h3>\n<ul>\n<li>テンプレートの処理</li>\n<li>外部プロセスの起動</li>\n<li>テキスト、画像を変換する処理</li>\n<li>RDBMS/Cacheとの接続</li>\n<li>N+1問題</li>\n</ul>\n<h3 id=\"mysql\" style=\"position:relative;\"><a href=\"#mysql\" aria-label=\"mysql permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>MySQL</h3>\n<ul>\n<li>いつも心にB+Treeを\n<ul>\n<li>B+木を意識して操作距離を最小に保つ</li>\n</ul>\n</li>\n<li>捨てるデータの読み取りを最小限に\n<ul>\n<li>ソート＋オフセットなど</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"大事なこと\" style=\"position:relative;\"><a href=\"#%E5%A4%A7%E4%BA%8B%E3%81%AA%E3%81%93%E3%81%A8\" aria-label=\"大事なこと permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>大事なこと</h3>\n<ul>\n<li>初期状態を記録し、いつでも戻せるようにする</li>\n<li>変更を都度記録し、壊れる前の状態に戻しやすくする</li>\n<li>前日はよく寝る</li>\n</ul>\n<hr>\n<h2 id=\"実践nginxモジュール開発cとlua\" style=\"position:relative;\"><a href=\"#%E5%AE%9F%E8%B7%B5nginx%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E9%96%8B%E7%99%BAc%E3%81%A8lua\" aria-label=\"実践nginxモジュール開発cとlua permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>実践nginxモジュール開発〜CとLua〜</h2>\n<ul>\n<li><a href=\"http://togetter.com/li/863872\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Nginxを拡張しよう！ モジュールとLuaがあればなんでも出来る！？ #yapcasia #yapcasiaB</a></li>\n<li><a href=\"http://yapcasia.org/2015/talk/show/a4318242-f5f2-11e4-afb7-49b37d574c3a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">実践nginxモジュール開発〜CとLua〜 – YAPC::Asia Tokyo 2015</a></li>\n</ul>\n<h3 id=\"nginxのhttpモジュール\" style=\"position:relative;\"><a href=\"#nginx%E3%81%AEhttp%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB\" aria-label=\"nginxのhttpモジュール permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>nginxのhttpモジュール</h3>\n<ul>\n<li>シングルプロセス</li>\n<li>モジュール指向</li>\n</ul>\n<h3 id=\"モジュールの例\" style=\"position:relative;\"><a href=\"#%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E4%BE%8B\" aria-label=\"モジュールの例 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>モジュールの例</h3>\n<ul>\n<li><a href=\"https://github.com/cubicdaiya/ngx_small_light\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ngx_small_light</a>\n<ul>\n<li>動的な画像変換、Proxy噛ませればS3にある画像も対応可能</li>\n</ul>\n</li>\n<li><a href=\"https://github.com/perusio/nginx-hello-world-module\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">perusio/nginx-hello-world-module</a>\n<ul>\n<li>小さなモジュール</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"ngin-api\" style=\"position:relative;\"><a href=\"#ngin-api\" aria-label=\"ngin api permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ngin API</h3>\n<ul>\n<li>memory-pool\n<ul>\n<li>一気にガツッととっておいて、共有メモリ空間を複数プロセスで使用する</li>\n</ul>\n</li>\n<li>list</li>\n<li>string\n<ul>\n<li>文字列がterminateされている、という前提で書くと送信途中に処理されたりするので詰む</li>\n</ul>\n</li>\n<li>array</li>\n<li>hash-table</li>\n<li>time</li>\n<li>regular-expression</li>\n<li>temporary-file</li>\n<li>etc…</li>\n</ul>\n<h3 id=\"nginxのテストはperlで書かれている重要なので2回言いました\" style=\"position:relative;\"><a href=\"#nginx%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E3%81%AFperl%E3%81%A7%E6%9B%B8%E3%81%8B%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E9%87%8D%E8%A6%81%E3%81%AA%E3%81%AE%E3%81%A72%E5%9B%9E%E8%A8%80%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F\" aria-label=\"nginxのテストはperlで書かれている重要なので2回言いました permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>nginxのテストはPerlで書かれている（重要なので2回言いました）</h3>\n<p>ただしPerlあまり好きじゃnあっ…</p>\n<p>Perlは2行だけ。Perl知らんでも書ける</p>\n<h3 id=\"ngx_lua\" style=\"position:relative;\"><a href=\"#ngx_lua\" aria-label=\"ngx_lua permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://github.com/openresty/lua-nginx-module\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ngx_lua</a></h3>\n<p>各フェーズごとにluaのスクリプトをフックできる</p>\n<ul>\n<li><code>ngx.say(message)</code> レスポンスボディに出力する</li>\n<li><code>ngx.exit(status)</code> ステータスコードを指定して返す(<code>ngx.HTTP_OK</code>など)</li>\n<li><code>ngx.log(level, message)</code> エラーログに吐く(<code>ngx.ALERT</code>, <code>ngx.CRIT</code>などがある)</li>\n<li><code>ngx.var.VARIABLE</code> nginxの変数を上書きする、ただし新規作成はできない。上書きのみ</li>\n<li><code>ngx.shared.DICT</code> nginxの共有メモリにアクセスする</li>\n<li><code>ngx.header.HEADER</code> nginxのレスポンスヘッダにアクセス、上書きする</li>\n<li><code>ngx.req.set_header()</code> nginxのレスポンスヘッダにアクセス、上書きする</li>\n<li><code>ngx.time()</code> タイムスタンプを返す(<code>ngx.localtime()</code>などもある)</li>\n</ul>\n<h3 id=\"lua標準の正規表現のほうがはるかに速い\" style=\"position:relative;\"><a href=\"#lua%E6%A8%99%E6%BA%96%E3%81%AE%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%AE%E3%81%BB%E3%81%86%E3%81%8C%E3%81%AF%E3%82%8B%E3%81%8B%E3%81%AB%E9%80%9F%E3%81%84\" aria-label=\"lua標準の正規表現のほうがはるかに速い permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Lua標準の正規表現のほうがはるかに速い</h3>\n<p>が、機能がそこまでない。必要に応じて<code>ngx.re</code>を使用する</p>\n<h3 id=\"ブロッキングしない\" style=\"position:relative;\"><a href=\"#%E3%83%96%E3%83%AD%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%81%97%E3%81%AA%E3%81%84\" aria-label=\"ブロッキングしない permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ブロッキングしない</h3>\n<ul>\n<li>nginxの強みを消さないため</li>\n</ul>\n<h3 id=\"openresty-httpsopenrestyorg\" style=\"position:relative;\"><a href=\"#openresty-httpsopenrestyorg\" aria-label=\"openresty httpsopenrestyorg permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>OpenResty <a href=\"https://openresty.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://openresty.org/</a></h3>\n<hr>\n<h2 id=\"profiling--optimizing-in-go\" style=\"position:relative;\"><a href=\"#profiling--optimizing-in-go\" aria-label=\"profiling  optimizing in go permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Profiling &#x26; Optimizing in Go</h2>\n<ul>\n<li><a href=\"https://docs.google.com/presentation/d/1lL7Wlh9GBtTSieqHGJ5AUd1XVYR48UPhEloVem-79mA/preview?sle=true&#x26;slide=id.p\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">スライド</a></li>\n<li><a href=\"https://github.com/bradfitz/talk-yapc-asia-2015/blob/master/talk.md\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">資料</a></li>\n<li><a href=\"http://togetter.com/li/863950\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">鮮やかすぎるライブコーディング！よりAwesomeな #golang ! #yapcasia #yapcasiaA</a></li>\n</ul>\n<p>目からうろこというか、新しいことの連続でした。<br>\nGoはまだ入門したばかりでツール周りなど全く触れていなかったので、足がかりとしてものすごくありがたいスピーチでした。</p>\n<p>コーディング早すぎる。ぼけーっとしながら眺めるばかりという感じでした。</p>\n<hr>\n<h2 id=\"その他雑多な感想\" style=\"position:relative;\"><a href=\"#%E3%81%9D%E3%81%AE%E4%BB%96%E9%9B%91%E5%A4%9A%E3%81%AA%E6%84%9F%E6%83%B3\" aria-label=\"その他雑多な感想 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>その他雑多な感想</h2>\n<blockquote class=\"twitter-tweet\" lang=\"ja\">\n  <p lang=\"ja\" dir=\"ltr\">\n    うおおおお、本がすげーと思ったら、ただのタペストリーだった。かんっぜんに騙されてもうた。　<a href=\"https://twitter.com/hashtag/yapcasia?src=hash\">#yapcasia</a> <a href=\"http://t.co/1pi8KZ5WLX\">pic.twitter.com/1pi8KZ5WLX</a>\n  </p>&mdash; tabunmuri (@tabunmuri255)   \n  <a href=\"https://twitter.com/tabunmuri255/status/634539982930227201\">2015, 8月 21</a>\n</blockquote>","timeToRead":28,"frontmatter":{"title":"YAPC 2015行ってきました","tags":["Go","ISUCON","Nginx","YAPC","カンファレンス"],"date":"August 25, 2015","featuredImage":null}}},"pageContext":{"slug":"/event-report-of-yapc-asia-2015/","previous":{"fields":{"slug":"/introduction-of-golang/"},"frontmatter":{"title":"Goに入門してRedis+PostgresなアプリをHerokuにデプロイするまで","tags":["Ansible","Gin","Go","Heroku","PostgreSQL","Redis","Vagrant"]}},"next":{"fields":{"slug":"/how-to-improve-proofreading-of-sentence-in-japanese/"},"frontmatter":{"title":"Rubyで日本語解析API(+α)を使用して日本語の文書校正を効率化してみる","tags":["API","Ruby","Thor","Yahoo Developer Network"]}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}