こんにちは。
会社の先輩に誘っていただき、 YAPC 2015 に行ってきました。
Perlの祭典です。Perl全く書かないけど。人生初のカンファレンスです。
Perl色がもっと強いものかと思ってましたが、「申し訳程度のPerl要素…」
と何度も思うくらいにはPerl要素が薄く、初心者にも入りやすかったです。
「ブログに書くまでがYAPCです」 と何度も念を押されたので、というわけではなく、
単に自分への備忘録とイベントレポートとして残します。
メモ
#yapcasia 言語を構築するのは世界を構築するのと同じ
— しょーちゃん (@show_m001)
2015, 8月 21
2015/12/25「Perl6を出すといったな、あれは嘘だ」 #yapcasia
— れこ (@L_e_k_o)
2015, 8月 21
OSSのお話とか、Perl 5とPerl 6の話をホビットの冒険と指輪物語に例えつつな感じでした。
どちらもタイトルしか分からないのでうまく喩え話が頭に入らず。。。
そして 「同時翻訳すごい! すごい!」 と感動して肝心の話を殆ど聞いてませんでした。
圧倒的な満席で入れず。スライドだけでも。
メモ
スマートロックロボットAkerun、組み込み、ネイティブアプリ
この世でもっともハックされてないものをハックしよう → 鍵だった → 新聞社などで取り上げ → 企業
Webなら早ければ3日でリリースできる、が。
忙しさの波
Webエンジニアが組み込むのに足りない技術
練習台:Arduino
Arduinoと本番の違い
BLE
通信方式とセキュリティ
独自実装はせず、汎用的な技術で通信方式を固めた
プロに教えてもらう
WebエンジニアとIoTプロダクト
GPIO(Lチカ)⇒PWM(Lフワ)⇒Timer割込でいろいろ⇒I2C通信という流れで進んだ模様。
#yapcasiaD
— takasago (@sago35tk)
2015, 8月 21
メモ
HTTPとWebページの読み込み速度
バンド幅が広くなっても、ある一定以上はページロード時間は早くならない
HTTP1.1
HTTPパイプライン
レスポンス未受信のリクエストを再送信してよいか不明
レイテンシ:光の速度は変わらない
いかん、Webが遅くなっている → レイテンシに負けないプロトコル → HTTP/2
脆弱性を防ぐ
HTTP Request/Response Splitting Attack
転送データ量の低減
すべての通信データは フレーム に格納される
色々な種類がある
ex.
CSS, jsを再優先でとっておいて、HTMLは低優先度で取ってくる
HTMLが取得された時点でCSS, jsの読み取りは完了しているので、その時点でレンダリングを開始できる
サーバ側が正しく実装しないと、クライアント側がチューニングできない。
H2O
この二つ以外はまともに実装されていない
H2O1.5: cache-aware server-push
レイテンシを隠蔽
アセットの結合
expiresのりよう
ドメインシャーディング
アセットを別ホストに置くことでHTTP/1の同時接続数を6本以上にするハック
Webサイトを早くすればページビューが増える
Forward Secrecy
セッション ticket
サーバは共通鍵をクライアントに送信
HTTP2クライアントとしてlibcurlが優れている
サーバ証明書買わなきゃいけないの…?
LeysEncrypt がリリースされれば無料で取れる
「HTTP/2でオワコンになる最適化」の話で
今のフロントエンドのビルドツール周り(アセットの結合)が圧縮技術+オーバヘッド削減によって、むしろボトルネックになる可能性があるという話が印象的でした。
メモ
はてなブログのフレームワーク(ジョーク?)
契約による設計
全体で使えるものを設計し使い続けるのは難しい
長年開発していると、知見が集まってくる
コアドメインに注力
DDD
言葉の統一
内容は広くいろいろな話題があって気付かされることが多かったです。
エリック・エヴァンスのドメイン駆動設計の本2冊ともポチりました。
中の人がわざわざいらしてお話してくれた。
でもビギナー向けな内容で、話す内容も質疑応答も知ってたという感じでした。ざっくりと。
制御可能なものを見極め、それを制御することに集中
https://github.com/masutaka/ci-bundle-update
βリリース前に知人の会社が使ってくれて、フィードバックいっぱいくれた。これは仕事にできそうだなぁと思った。会社を作ったのは、真面目に続けてく意思表示みたいなもの #yapcasia #yapcasiaA
— たま● (@tmd45)
2015, 8月 21
他のセッションに比べて濃いわけではなかったけど、一番心に残ったセッションでした。
(( ⁰⊖⁰)/)
ISUCONで得られた知見を公開されることで、業界の技術力に寄与
ベンチマーク:動作の変更がないことをチェック、テストに落ちたら失格
2年連続優勝
事前に出題に挑戦し、ベンチマークの問題を洗い出す
Kossy: ISUCONから生まれたWAF Gazelle, Redis::Jet, Plack::Middleware::Session::Simple など
管理コスト・障害対応のコストも減らせる
大規模なインフラでは嬉しい
チームメイトとの会話を重視する
時間配分
最後の30分は再起動テストに残す
事前準備
Wiki
過去問をとく
レギュレーションや当日の説明をよく読む
起きていること
アクセスログ解析
頻度 と レスポンス時間 をバランスよく見る
ログ解析
%D
つける(レスポンス時間)SlowQuery解析
SET GLOBAL
で変数として設定しとけば再起動するだけで設定が元に戻せる。戻し忘れ防止アプリのプロファイリング
strace
tcpdump
サーバ負荷の確認
Client → ReverseProxy → APP → RDBMS, KVS
過去には設定のtypoや罠も
効率のよいCPUの使い方を知る
コンテキストスイッチング
いかに何もしないアプリに近づけていくか
Apache vs nginx
nginx vs h2o
いつも心にB+Treeを
捨てるデータの読み取りを最小限に
perusio/nginx-hello-world-module
memory-pool
string
ただしPerlあまり好きじゃnあっ…
Perlは2行だけ。Perl知らんでも書ける
各フェーズごとにluaのスクリプトをフックできる
ngx.say(message)
レスポンスボディに出力するngx.exit(status)
ステータスコードを指定して返す(ngx.HTTP_OK
など)ngx.log(level, message)
エラーログに吐く(ngx.ALERT
, ngx.CRIT
などがある)ngx.var.VARIABLE
nginxの変数を上書きする、ただし新規作成はできない。上書きのみngx.shared.DICT
nginxの共有メモリにアクセスするngx.header.HEADER
nginxのレスポンスヘッダにアクセス、上書きするngx.req.set_header()
nginxのレスポンスヘッダにアクセス、上書きするngx.time()
タイムスタンプを返す(ngx.localtime()
などもある)が、機能がそこまでない。必要に応じてngx.re
を使用する
目からうろこというか、新しいことの連続でした。
Goはまだ入門したばかりでツール周りなど全く触れていなかったので、足がかりとしてものすごくありがたいスピーチでした。
コーディング早すぎる。ぼけーっとしながら眺めるばかりという感じでした。
うおおおお、本がすげーと思ったら、ただのタペストリーだった。かんっぜんに騙されてもうた。 #yapcasia pic.twitter.com/1pi8KZ5WLX
— tabunmuri (@tabunmuri255)
2015, 8月 21