「VP of Engineering Meetup by CA #3」に参加した

CTO, VP of Engineering (以下 VPoE )が集まる会ということで
"#1 "から気になっており, 他社の同じようなロールの方々が
日々何を考え, どう取り組んでいるかを知りたくて参加した.

cyberagent.connpass.com

内容

イベントの趣旨説明

VP of Engineering (VPoE) の定義

VPoE は理想的には素晴らしいマネージャーであり、偉大なチームビルダーです。
彼はまたは彼女は優秀なリクルーター、素晴らしいコミュニケーター、そして大きな問題解決者になるでしょう。
VPoE は採用、マネージメント、社内コミュニケーション、およびデリバリーのすべてを行います。
チームを確実に守りながら、プロダクトを出荷に導きます。

『成果を出し続けるエンジニア組織を目指してやっていること』とは? @yasuhiro1711

  • 成果を出し続けられるエンジニア組織とは?
    ビジネス的動きが取れる(仕事が出来る)エンジニアチーム

  • 体制
    マネージャー = VPoE的な役割
    技術ボード = CTO的役割(※CTOの役割を複数人で担っている)

  • 1on1はカードでテーマを決める
    成果のこと、組織への不満、周りの不満などテーマを書いたカードがありそこから選ぶ

  • おすすめ書籍

  • 不満のあるメンバーは自分の仕事の領域で権限がない状態であることが多い

  • 自分に向かわず、人に向かわず、コトに向かう
    コトに向かう = 組織をつくること

speakerdeck.com

『組織をシステム化するReactive Management』とは? @waysaku

  • VPoE とは?
    エンジニアというアイデンティティを持ったマネージャー
    採用、育成、評価などを含むエンジニア組織 全体のパフォーマンスを最大限出せるようにする

  • マネージャーの評価はどうされるべきか?
    マネージャーとしての価値は再現性の高さ
    いつでも、どこでも、どんな状態でもハイパフォーマンスを出す
    組織への成果は遅れてやってくるので、業績や純粋なその時のパフォーマンスだけでは評価し辛い

  • マネージメントは技術である

  • おすすめ書籍

www.slideshare.net

『ゼロからのエンジニア組織作り』とは? 川村さん

  • 採用は戦力化がゴール

  • 1on1
    事前にシートを記入, 上司がフィードバックを記入, それを元に話す

speakerdeck.com

感想

  • アンケートを冒頭に公表していたのがとても良かった
    イベント申込時に現在のロール, 悩み, 質問したいことなどのアンケートがあり
    イベント冒頭でその結果を発表していてどんな人達が来ていて
    どんな悩みを持っているか(技術選定, 組織作り, 評価指標など)が可視化してくれたことで
    イベントの目指す方向と聴衆側が望んでいることのミスマッチを減らす工夫がされていた.

  • 高いレベルでの課題と解決するために取り組んだ具体的な内容が繰り広げられていた

  • 課題を乗り越えるために読んだおすすめ書籍が紹介されていた

  • チームの人数・事業のフェーズについて最初に話すと内容をよりイメージしやすかった(川村さんのがとても良かった!)

次回も参加したい!

Firefox 爆速化プロジェクトの1つ Tab Warming を試してみた

10年ほど前は熱心な Firefox ユーザーで

タブとプラグインが便利なのと IE のブラウザシェアを奪っていくのが楽しみでよく使っていた.

Chrome が登場して(プラグライン入れまくりの) Firefox と比較して

サクサク動く Chrome は圧倒的な速さでシェアを奪っていた.

Google アカウントとの連携だったり, 開発周りのエクステンションなどで Chrome の方が充実してきて

いつしか Firefox を使わなくなっていた.

そんな Firefox が Quantum という爆速化プロジェクトを進めていると知り

"あのころの Firefox が返ってくる!" という思いを胸に試してみた.

Quantum Project とは?

Mozilla が進めている Firefox のブラウザエンジンの改良に伴う高速化プロジェクトで

以下の6つがサブプロジェクトとして存在する.

  • rust-bindgen

  • Quantum CSS

  • Quantum Render

  • Quantum Compositor

  • Quantum DOM

  • Quantum Flow

技術的には Servo という新しいブラウザエンジンを

安全性、速度、並行性の3つのゴールにフォーカスしたプログラミング言語 Rust で実装して

並行処理の性能向上とGPU負荷の軽減を行い

現行のブラウザエンジン Gecko に対して随時マージしていくといった内容.

Tab Warming とは?

タブの上にマウスを持ってくると, タブを切り替える前に描画が始まり(!)

実際にタブをクリックした時に表示される速度が速くなる機能.

振る舞いとしては表示が速すぎることでで話題になった https://dev.to/ で多用されていた

記事のタイトルにマウスをのせると内容がダウンロードされて, クリックしたらすぐ切り替わる

Service Worker のバックグラウンド実行と似ている.

Tab Warming の使い方

  1. Firefox で about:config にアクセス
  2. browser.tabs.remote.warmup.enabled で検索
  3. valuetrue にする

f:id:morugu:20180304084743p:plain

※バージョン59.0以降で利用可能.

所感

Tab Warming を有効にすると, 初回表示がとても速くなっているのが実感できた!

※検証用サイト https://mikeconley.ca/moz/wavey/

And in the event that we were wrong, and you weren’t interested in seeing the tab, we eventually throw the uploaded layers away.

タブの上にマウスを持ってきたがページが開かれなかった場合は破棄されるので

大量のタブを開いた場合でも全てがそのまま残るわけではなく, 考えられて作られているなと感じた.

おまけ

バージョン57から正式名称が Firefox から Firefox Quantum になった.

f:id:morugu:20180304084809p:plain

参考サイト

mikeconley.ca

Application Load Balancer のアクセスログはベストエフォート

背景

クライアントからのリクエストと ALB のアクセスログが微妙にあっていないなと感じて

「Application Load Balancer(以下, ALB) -> EC2 でリクエストを処理しているアプリケーションがあり,

(AWS 基盤の何らかの問題で) ALB に到達していないリクエストがあるのではないか」

という内容で AWS サポートの方に質問して知った話.

ALB のアクセスログ

docs.aws.amazon.com

公式ドキュメントの"アクセスログのエントリ"に以下の記載があった.

Elastic Load Balancing はベストエフォートベースでリクエストを記録します。アクセスログは、すべてのリクエストを完全に報告するためのものではなく、リクエストの本質を把握するものとして使用することをお勧めします。

ベストエフォート?

ベストエフォート - インターネット用語辞典 - | OCN

ベストエフォートとは、性能に関して明示的な保証をせずに、最大限(ベスト)の努力(エフォート)サービスを提供するという形態のことです。IT用語としては、一般にネットワークの実効速度について使われます。

= できるだけ頑張るけど、確実でない.

厳密なリクエスト到達やログの分析とかは想定していなく, 「こんな感じのリクエスト来てるんだなー」と確認する用途を想定して用意されている機能のようだ.

まとめ

ALB のアクセスログになくても, リクエストが到達している場合がある.

AWS ElastiCache のエラーから Redis の永続化について調べた

きっかけ

AWS ElastiCache で Redis のクラスタを作成したときに, 以下の警告文がイベントに出力されていて気になった.

This cache cluster does not support persistence (ex: 'appendonly').
Please use a different instance type to enable persistence.

「現在のクラスタでは永続化がサポートされていないので, 別のインスタンスを使おう」

環境

  • AWS ElastiCache
  • Redis 3.2.10
  • ノードのインスタンスタイプ: cache.t2.small

AOF とは?

Redis の AOF (Append-Only File) 機能を有効にすることができます。この機能を有効にすると、キャッシュノードは、キャッシュデータを変更するすべてのコマンドを Append-Only File に書き込みます。

MySQL でいう Binary Log, PostgreSQL でいう WAL Log.

Redis サーバが受けた全てのコマンドが記録されており, サーバ起動時にログからコマンドが実行され元のデータが再構築される.

結論

今回の警告の原因はスペック不足.

AOF (Append Only File) は、cache.t1.micro ノードおよび cache.t2* ノードではサポートされません。

AOF では I/O 処理が発生するので, ある程度のパフォーマンスが出るインスタンスでないと

安定した挙動が確保できないからだろう(と予測).

参考

docs.aws.amazon.com

Redis の永続化 — Redis Documentation (Japanese Translation)

wercker で redis service を使用する方法

背景

  • CI でのテスト実行時に Redis が動作する環境を用意したい.

  • Redis は AWS ElastiCache で動作している.

  • ElastiCache はデフォルトでは許可された AWS 内のセキュリティグループからのみアクセス可能で, public アクセス可能にするには NAT インスタンス作ったりする必要がある.

docs.aws.amazon.com

wercker.yml に services セクションを追加する

services:
    - redis

他には mongo, elasticsearch などが使える.

追加される環境変数

redis service を追加すると以下の環境変数が追加される.

REDIS_PORT
REDIS_NAME
REDIS_PORT_6379_TCP_ADDR
REDIS_PORT_6379_TCP
REDIS_ENV_REDIS_DOWNLOAD_URL
REDIS_PORT_6379_TCP_PORT
REDIS_ENV_REDIS_DOWNLOAD_SHA
REDIS_ENV_GOSU_VERSION
REDIS_ENV_REDIS_VERSION

重要なのが REDIS_PORT_6379_TCP_ADDR で, 実行環境の Redis の接続先として設定する

const redisHost = process.env.REDIS_PORT_6379_TCP_ADDR || process.env.REDIS_HOST;

注意点

wercker 公式にある DockerHub(sutoiku/redis) を引用する方法だと, Redis 関連の環境変数が設定されず上記設定は使えないので注意.

参考

devcenter.wercker.com

qiita.com