ニート日報 2016-09-29 LINE DEVELOPER DAY 2016

ニート20日目

ニート生活残り4日。
夕方までLINE DEVELOPER DAY 2016だった。
必読の本の2冊目を読み始めた。
前日のついったTLの影響で、久しぶりに蒲田のらーめん 潤へ行った。

LINE DEVELOPER DAY 2016

去年も参加したLINEの開発者向けイベント。
参加無料にも関わらず、内容はとても充実してるわ、開場が綺麗だわ、おみやげがすごいわで、とにかくLINEすごいって感じだった。

参加者用のLINE Botが新機能のデモンストレーションをしつつ、便利に情報を提供してくれたのが良かった。

夕方、疲れてしまったため帰宅ラッシュが始まる前に帰った。
以下、気になったセッションの感想をちょこっと。

LINEが乗り越えてきた困難な問題

LINEにて過去に起きた障害の話。
まさに障害報告という感じだった。

普段は1日に10件くらいしかない重いAPIが全ユーザから同時に叩かれるとは……とんでもないインパクトだった。
障害が起きてから改めてサービスの構成を俯瞰すると、たしかに問題になりそうな気配はありそう。
定期的に現状のアーキテクチャに疑問を保つ必要があるんだなーという感想を抱いた。

Security x LINE Platform

LINEの暗号化とかの話。

標準のTLSじゃなくて改造?したものを使っていたとは知らなかった。
通信の暗号化だけではなく、そこに載せるメッセージ自体も暗号化していたようだ。
ECDHで会話相手(グループも)と鍵を共有しているっぽい。
これによって、運営ですらメッセージの内容を覗き見ることができないようになったのでよりプライベートな会話()が楽しめるようになった気がする。

後半に言っていた、端末のHTTPS通信に自分で中間者攻撃を仕掛けて通信内容をアレするやつ、まじかーって感じだった……。
セキュリティ系は本当に必要な知識が多くて辛い。
この件については、SSL Pinningしましょうという話だ。

LINEに感謝している様子です

昼飯代としてヒカリエのギフト券2000円分が参加者に配られた。
それを使い、三浦三崎港 恵みにてほぼ2000円でランチをいただいた。

参加アンケートに答えると貰えたお土産。
タンブラー、スマホとかタブレットを立てるやつ、ビーコンが貰えた。
LINEにビーコンの機能が追加されたので、その機能を遊んでもらうために配るという太っ腹な戦略。
ありがとうございます!

TODO進捗

https://gist.github.com/mihyaeru21/7ec2e6b408d0c7f546274fd4b5a1e610

  • キャズムを50ページくらい読んだ

ニート日報 2016-09-28

ニート19日目

ニート生活も残すところあと5日。
信じられない。
お昼に新宿で某氏と飯って新宿で映画を見る作戦を決行。

新宿マン

お昼は鳥料理が美味いお店でチキン南蛮定食を食べた。
野菜の種類が多かったし、鶏肉が柔らかくて美味かった。
若干ご飯が多かったから、また行くとしたらご飯少なめで頼もう。

お昼後、ついに君の名は。を見る決意をしてTOHOシネマズ新宿へ。
14時20分の上映で見れると思ったら14時20分の時点でまさかの満席だった。
16時55分の回のチケットを買ってルノアールへ避難。

ルノアールにて「あなたのチームは、機能してますか?」を半分くらい読んだ。
この本は家に帰ってからも読んで読み終わった。
感想とかはこっちに書いた。

君の名は。の感想

絵が綺麗だった。
とくに星の描写が好きだった。
あと新海誠映画の定番?である、歌の内容とストーリーのコラボが良い具合だったように感じた。

ストーリーについては、中盤から予想した終わりにだいたい向かっていったのが、見ていて心地よかった。
大体予想通りではあったけども、ちょいちょい予想とタイミングをずらしてくる感じも良かった。

ネタバレせずに感想を書くと小並感になることがわかった。

TODO進捗

https://gist.github.com/mihyaeru21/7ec2e6b408d0c7f546274fd4b5a1e610

  • 本を1冊読んだ

「あなたのチームは、機能してますか?」を読んだ感想

次の会社に入社するにあたり、事前に読んでおいてくれと渡された本のうちの1冊。
入社まで1週間を切ったので重い腰を上げて読んだので感想まとめ。

本の構成

会社の経営陣立て直しストーリーに沿って、チームにおける5つの機能不全について、その中身と対処法をまとめた本だった。
ストーリーの後に比較的堅めなスタイルで5つの機能不全のモデルを載せていた。
診断用項目がついており、これをコピーしてチームで使用することでチームの現状把握に使えそうな感じだった。

5つの機能不全

  1. 信頼の欠如
  2. 衝突への恐怖
  3. 責任感の不足
  4. 説明責任の回避
  5. 結果への無関心

本の中では信頼の欠如を三角形の底辺として信頼の欠如を三角形の頂点とする図で説明されていた。
それぞれ、の機能不全は三角形の置いて土台となっている機能不全によって引き起こされているという説明。
説明責任の回避は、「戒める責任の回避」という感じの言葉のほうがしっくりすると思った。

これらを、自分が理解した内容として改めて言葉で言い直してみる。

信頼が無ければ建設的な意見の衝突ができず、
建設的な意見の衝突ができなければ決定事項に責任を持てず、
決定事項に責任を持てなければ決定と違う行動を戒めることができず、
決定と違う行動を戒めることができないと「チームの」結果がどうでもよくなる。

ざっくり感想とか

ストーリーはフィクションだがリアリティがあった。
そのおかげか、没入して読むことができた。
登場人物たちの議論と現実の会社での体験とを照らし合わせたことで、物語と内容への共感度合いが高かった。

いくら個々として優れていたとしても、チームとして機能していなければ圧倒的に効率が悪いというメッセージが強く伝わってきた。
5つの機能不全を改善していくプロセスは簡単ではなく苦痛を伴う、そして継続的に意識しなければだんだんと機能不全に陥ってしまうことも理解した。

現実と照らし合わせ、それぞれの機能不全を具体的に思い浮かべた。
たしかに本で触れているように、それぞれの機能不全に陥っている理由として、その土台となっている機能不全の具体的なところもある程度思い当たった。
自制心を強く持って意識していないと自然と機能不全へと陥ってしまうという説明にも納得した。

この本を渡されたということは、これらの機能不全に陥らず上手く機能させる振る舞いを要求されていると感じた。
次の職場では、5つを適度に思い出し意識するように心がける。
だけではなく行動にも反映させる。

ニート日報 2016-09-27

ニート18日目

とにかくサボっていた分のブログを書きまくった日。
あとISUCONの感想を書いた。
他にやったことと言えば、人工無能の本をちょっと進めたくらい。

アニメのダンガンロンパの絶望編を見終わった。
未来編を見てなかったから少し見始めた。
あと、リゼロを見終わってしまった。
終わり方からの予想だけど、原作からストーリーを変えてなさそうだから素直に2期に期待。

それくらいだ。以上。

TODO進捗

https://gist.github.com/mihyaeru21/7ec2e6b408d0c7f546274fd4b5a1e610

  • 人工無能の本を少し進めた

ISUCON6で予選敗退してきた

今年も毎年恒例となっている同期チームで参加した。

素振り

素振りとしてPixivの社内ISUCONの問題をやった(某コミュニティでやった)。
素振り時に良かった点はこんなところだった。

  • 個々人の作業環境と本番環境を分ける
  • git管理して、本番への反映は本番でpullする感じ
  • アクセスログ、スロークエリの解析を行い、きちんとボトルネックを把握する
  • ログをリポジトリにぶち込んで見やすくする

事前準備

会社の会議室を広々と専有し、スクリーンに常にカンバンを表示したり、さっとホワイトボードが使えたり、ブラインドを開けて景色を良くしたり、とにかく作業しやすい空間を作った。
良い広さで、普段の業務もあんな感じの広々空間でできたら幸せだろうなとか思った。

当日のタイムスケジュールを大雑把に作った。
本当に大雑把で、これくらいしかなかった。

  • ○時までにしっかり作業を開始できる準備を完了させる
  • ○時になったらいったん手を止めて現状確認会をする x 2
  • 17時半になったら最終スコアを出す準備をする

Azureに慣れるため、チームメンバー全員でAzureのテンプレートから各自の環境を作る素振りをした。
最初はAzureの仕組みがよくわかっておらず、1つのリソースグループに同じテンプレートから複数個のインスタンスとかを立ち上げようとしていたができなかった。
そこで、人数分のリソースグループを作り、そこにテンプレートから作成する方法を試した。
このやり方で良かったらしく、無事、人数分の環境を作る方法を理解できた。

あとは、時間までGitHubのカンバンに必要タスクを追加していった。
その際、脳みそを空にして取り組めるような内容のものには、脳みそを空にして実行できる手順を書くようにした。

本番

自分がやったこと+感想

  • アプリをgitに載せて個々の環境でも動作を再現できるようにする
    • perlディレクトリ内に.gitignoreがあり、localディレクトリがignoreされていることに1時間くらい気づかず時間を無駄にしてしまった
  • Slow Queryをpt-query-digestで解析してボトルネックを探す
  • entry検索のボトルネッククエリを改善しようと、keywordの長さをカラムに持たせつつindexを貼った
    • 要件的に全件必要で、どうせフルテーブルスキャンになるから完全に無駄だった(というか複雑性が増しただけだった)
    • アプリを読めば、フルテーブルスキャンにならざるをえないことがわかったはずで、すぐにキャッシュの実装に入るべきだった
  • MySQLの設定をチューニング
    • たいした数ではないinsertがボトルネックになっていたので、パラメータをまともな感じにした
    • 結局insert自体は早くならなくて完全に無駄だった
  • keywordsをRedisにキャッシュする
    • 実装でハマってしまい3時間ほど無駄にしてしまい、これをやっているうちに競技時間が終わってしまった
    • なぜか更新タイミングの問題だと思い込み、更新をロックするように実装したが、もちろん意味がなかった
    • Perlが外部と文字列をやり取りする場合に文字列をEncodeする必要があることを完全に忘れていたのが問題だった

チームメンバーがやったこと

  • テーブル情報を抜き出す
  • アクセスログの解析
    • nginxが解析に必要なログを吐き出す設定
    • alpを使って解析
  • Perlの鯖をStarletからGazelleに変更
  • 定番のnginxの設定をぶち込む
  • PerlのWorkerを増やす
    • 2コアしかないマシンなのにWorkerを20にしたら地味に大きくスコアが上がって草生えた
  • keywordsのselectをhtmlfyを呼び出しているループの外へ移動
    • これでスコア上がった
  • isutarを破壊してisudaに統合
    • web部分だけ統合
    • 時間無くてDBは統合できなかった
  • isupamへのリクエストをkeyword/descriptionを結合した文字列にしてまとめた
  • BIGINTだったカラムを全てINTに変更

良かったこと+感想

  • GitHubのProjectを使い、やれること、誰が何をしているかを把握できるようにする
  • 会議室を広々と使い、話す時にさっとホワイトボードが使える状態
  • 効果がなかったが経験としてよかったのは、テーブルの構造を変えたこと
    • 過去2回のISUCONでは、怖くてテーブルの構造を変えることができなかったが、一歩踏み出すことができたのは大きい
  • 2年前からの1段階目の目標として「スコア1万を超える」というのがあり、目標を超えられた
    • 今回は22,220だった
  • 過去よりもいろいろなことにスムーズに取り組めるようになっていた

今回は、アプリのコードを読んでいじる部分の重要性が高かったように感じた。
MySQLだけ見たりnginxだけ見てもほとんど意味なかった。
総合的に判断する必要があるなーという学びを得た。

次回あればやりたいこと

細かいこと大きいこと含め、備忘録として次回やりたいことをざっと書いておく。

  • 素振りは複数回実行する
  • みんなでサービスを触りつつコードの理解に時間をかける
  • DB起動時にBuffer Poolにデータを載せる
  • 正規表現があったら事前コンパイルしておく
  • 自分の作業環境を使いやすく整える
  • nginxでgzip圧縮
  • チームメンバー的に読みにくいコードを、さっと読みやすい形式にスタイルだけリファクタリング
  • 過去問に対する他チームのアプローチを勉強する
  • Redis/Memcachedを事前にちゃんと使う

終わりに

多大なる時間と労力をかけて準備してくださった運営の方々、ありがとうございました!
今回も楽しく勉強になりました。

ニート日報 2016-09-26

ニート17日目

残すところニート期間はあとちょうど1週間。
来週から働くというのが信じられない。

全ての時間を座れると思っていたアクセル・ワールドを最新刊まで読み終わった。
これで明日からいろいろ復帰できる。

あと部屋の掃除をした。
机の引き出しにぶち込みまくっていたいらない物を判別して捨てるだけの簡単なお仕事。
ちょっとスッキリした。

TODO進捗

https://gist.github.com/mihyaeru21/7ec2e6b408d0c7f546274fd4b5a1e610

  • アクセル・ワールド完了

ニート日報 2016-09-25

ニート16日目

前日同様、アクセル・ワールドを読む機械で終わる……はずだった。
が、夜になぜかリムジンに乗った。

リムジンの様子

CA系列の某氏に誘われ、新橋にてリムジンに乗ることになった(謎)。
IT系のエンジニア野郎のみ8人という謎面子で乗った。
4500円で乗れた。
たった1時間くらいだけど思っていたよりも安い値段で乗車できるようだ。

内部は想像よりも狭く、8人は完全に定員ギリギリという感じだった。
内部にはお酒(ワインとウイスキー)とかお菓子が設置されていて、自由に飲み食いできるスタイルだった。

新橋とか汐留とか付近の東京のオサレスポットを少し巡るルートだったようだ。
途中で下車し東京タワーとリムジンをバックに記念撮影とかした。

結論:4人くらいで乗るのがちょうど良い

TODO進捗

https://gist.github.com/mihyaeru21/7ec2e6b408d0c7f546274fd4b5a1e610

  • アクセル・ワールドを読む機械

ニート日報 2016-09-23

ニート14日目

ニート歴も2週間が終わる日。
終わりが始まってしまった。

火曜に行こうと思っていた医者へ行ってきた。
喉と咳の調子が良くならず、9月中ほとんど薬を飲んで生活している気がする。

終わりの始まり

ずっとKindle版が出るのを待っていたアクセル・ワールドのKindle版が出ていることに気づいてしまった。
15-20巻を速攻でポチった。
そして……(メモはここで途絶えている

TODO進捗

https://gist.github.com/mihyaeru21/7ec2e6b408d0c7f546274fd4b5a1e610

  • アクセル・ワールドを読むのを追加

ニート日報 2016-09-22 PyCon JP 2016 2日目

ニート13日目

この日もPyConだけ。
気づいたらニート期間も折り返していた。

PyCon 2日目

ぎりぎり基調講演の開始に間に合ったような間に合わなかったような。
駅から会場まで回り込んで入るのが遠かった。

基調講演

Pythonのバージョンの話?とか型ヒントの話とかasyncioの話だった。

来年再来年あたりにPython 2系と3系を使っている割合が逆転して、ついに数字的にも3の時代になるようだ。
3系も3.5まで来てやっと統一が見えてきた気がした。

型ヒントはオマケではあるんだけど、個人的にはメソッドの入出力の型がはっきりしていると幸せだなーと思っている。

質疑にてロシア語で質問している人がいて強かった。
あと、ゆっくりはっきり喋っていただけたようで聞き取りやすい英語だった。

f2pyとmatplotlibを用いたブラウン粒子動力学のリアルタイム可視化

Fortranはまだまだ現役なのか!という感想。
Cよりも数値計算周りは最適化しやすいから利用されているっぽい?
f2pyは、PythonとFortranを繋ぐやつだった。

matplotlibでGUIちょこちょこ作れたのか…
あれはQtのやつだったのだろうか。

関係ないけど、matplotlibをpyenvのPythonで動かした時にmatplotlib.pyplotが使えないのが辛い。

ビッグデータとPythonではじめる野球の統計分析

力強かった。
60万行のデータがあるとか、すごい。

結論「ダルビッシュすごい」

Python を支える技術: モジュール・インポートシステム編

話している声が聞こえなすぎて内容に全く集中できなかった…
資料を見た感じ、とっても良さそうな内容だったのでとても残念。

メタプログラミングPython

Pythonにおけるメタい部分を広く浅く紹介する感じだった。

メタクラスの仕組みとか、Objective-Cとけっこう似てる気がした。
Ghost Methodは、メソッドを返すところが特徴的だと感じた。

withで影響範囲を絞って書き換えるのが便利そうだった。
PerlだとGuardオブジェクトを作って、Guardが生きているスコープで書き換えるとか、とくにテストでよくやる。

from forbiddenfruit import curseがとにかく強そうだった。

Pausable Unittest on EFI Stackless Python

Stackless Pythonなるものが存在していたこと知った。
言われてみれば、pyenv install -lした中にあった。

最初から聞いていたわけではなかったので、電源を切っても状態が保存されている?というのがわからないまま終わってしまった…

LT

Neo4jはグラフDBと。
一応存在だけ覚えた。

ルータが走るのやばかった。
しかし市販のルータ向けのLinuxディストリビューションがあるとは知らなかった(OpenWrt)。

その他

モノタロウブースにて、すてにゃん氏が目の前で1等を当てていて強さを感じた。

おやつ↓が可愛かった。

帰りになぜか10kmくらいの道を徒歩で返ってPyConが終わった。
3時間くらいかかって、さすがに頭おかしかった。

TODO進捗

https://gist.github.com/mihyaeru21/7ec2e6b408d0c7f546274fd4b5a1e610

進捗ダメです