言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

QCon 2016 Tokyo http://www.qcontokyo.com/ メモ

メモしました。風邪を引いてビアバッシュ行けなかった。

エンジニアリングの物語り 人に語るに値するカルチャー Pete Sodering 氏

企業文化を作り上げるために物語が一番手っ取り早いという話を例を上げて解説。物語が企業の実際の歴史だとすると、文化を意図的に作り上げる事は出来ないのでは無いかという気がした。

  • 企業文化とは? 意見の差異を解決したり、問題を解決する能力。
  • 多様性とか、コードの重視とか、OSS のサポートととか、リモートワークの推奨とか、卓球台とか、犬とか、、、
  • 企業文化には犠牲にする物がある。トレードオフを伝えるには「物語」が一番良い。
  • 本の紹介 『Sapiens - a Brief History of Humankind』 : Yuval Noah Harari

Twilio (Telephony) の例

  • Twilio の CEO はプログラマ。エンジニアは Twilio が好き。
  • ASK YOUR DEVELOPER キャンペーン。Enterprise に売り込む際に、開発者に聞けと宣伝した。

Google の例

  • Autonomy : Google はマネージャが嫌い
  • 2002 年にマネージャをほとんど消した。 -> 無茶苦茶になり失敗。必要最低限のマネージャを設けたが今でも少ない。
  • 20% ルール : 一週間のうち一日は好きな事をする。Gmail、Ad sense など様々なサービスを生み出した。
  • Trade-off : Alphabet 再編 (この話はよくわからなかった)

Facebook の例

  • リリース列車: コードを入れると内部リリースされる仕組み。
  • Facebook の新入社員は入社二日目にリリース列車にコードを投げなければならない。
  • Trade-off : Facebook が大きくなりすぎて、CEO 自ら MOVE FAST WITH STABLE INFRA と方針転換。

Etsy の例 (自分の作品の売ります買いますサイト)

  • 開発者は責任を持つ。QA に気軽にコードを投げてはならない。
  • 開発チェックリストを元に、新しいコードの影響を確認してからリリースする。

Netflix の例

  • 2008 年コードが肥大化してシステムが3日ダウンした事をきっかけに Microservices を導入
  • 30 の別々のチームが各モジュールを管理。安定性が格段に挙がった。-> Conway's Law (アーキテクチャは組織の鏡)

Pivital Labs の例

  • XP とペアプログラミングを導入。初心者もベテランも学び合う。
  • 自社内で教育出来るので、社員引き抜き競争に無縁。 Code as Craft

ポスト ムーア時代のコンピューティング 佐藤一郎

ここ5年くらいでハードはもう速くならないのでソフトで何とかしましょうという話。私の好きな話題。日本の高齢化と同じく、本当に影響が出て混乱が始まるのが楽しみ。

  • 現在 20nm - 14nm プロセス
  • 微細化のスピードが落ちている。Intel は 3 年で二倍に修正
  • 半導体製造技術の限界 5nm 程度までは可能だとされている。
  • 電力的な限界: 計算量あたりの消費電力は下げ止まり
  • 工場建設コストが高い
  • 14 nm クラスの工場は 1兆円を超える。
  • 100 万枚以上の注文が必要になる。
  • 一ドルあたりのトランジスタ数は 28nm で頭打ち。
  • フィンテック
  • 新しい技術は Blockchain だけ。
  • 今遅いソフトはずっと遅いまま。
  • 計算量あたりのクラウド利用量は下げ止まり
  • 最新コンピュータを買っても性能が上がらない。
  • ユーザの関心は運用ハードウェアを長く使うかになる。
  • ポストムーア時代の改善策はまだ分からない。カンブリア紀
  • メニーコア
  • メモリバスの輻輳のため、16 - 32 コアが限界では?
  • マルチスレッドプログラミングは難しい
  • 大量メモリ
  • 不輝発生メモリ(NvRAM)
  • 専用ハードウェア GPU
  • サーバの数を増やしてカバー
  • Rack-Scale (CPU 同士やメモリ同士をまとめて高速ネットワークで結ぶ)
  • AI 処理向けチップ
  • ソフトウェア技術者に求められること

DNA が考える自動運転技術を利用したサービス 木村秀夫氏

ロボットタクシー株式会社(DeNA)車を電話に例えると、ようやく端末がネットに繋がった時代。

DeNA の自動運転事業

  • ロボットシャトル: 私道での移動サービス (20 km 程度の低速で巡回) フランス製車両 LIGIER を利用
  • オンデマンド配送: 再配送を減らす。利用者は車のロッカーから自分で荷物を取り出す。
  • 買い物代行: 無人注文配達サービス
  • ロボットタクシー ZMP との共同事業

DNA は車を作ったり自動運転技術を作らない。

  • モビリティサービスプロバイダー
  • クラウド、ユーザ、オペレータ、車両の管理
  • 技術: まだまだ無理 -> 限定エリア。サービス範囲を限定する。
  • 法規制: 運転手の存在を前提している。-> 法規制の動きはある(2020 年までに法規制すると首相が名言)。限定地域からスタート。
  • 社会受容性: 精神的ハードル -> ひたすら実証実験。

2020 マイルストーン

  • 乗りたい時にスマホで配車と決済
  • 中央管制しながら安全確保
  • 無人運転車両。無人ならではの移動空間の提供
  • 地域限定スタート

自動運転車両をスマホで呼び出す。

  • 神奈川県藤沢市湘南ライフタウン, 仙台、伊勢志摩等で実証実験やデモを行った。

自動運転技術

  • センサー -> 状況判断 -> 行動計画 -> 制御実行

サービス技術

  • 目新しい事は特にしていない。普通のアプリケーション。
  • 「普通の」インターネットサービス技術が活用出来る。

今後の課題

  • セキュリティ/冗長性/
  • サービスの質向上: 高齢の方が使うので電話対応必須では?

大人エンジニアにも役立つ IoT プロト環境としてのビジュアルプログラミング言語 Scratch 石原淳也氏

デモが沢山あって大変楽しかった。

  • Scratch 2〇〇 series
  • Scratch2Sphero : ラジコンのおもちゃを動かす
  • Scatch2MCPI : Minecraft Pi
  • Scratch2Romo : iPhoneガンタンクのように動かす。
  • Scratch2MiP : 倒立二輪ロボの制御

Scratch2MiP の仕組み

  • Scratch 1.4 に備わった Remote Sensor Protocol で 42001 ポートを開ける
  • Scratch2MiP (node プログラム) で MiP と通信
  • MiP ロボットを送る。

Scratch2 ではRemote Sensor Protocol の代わりに ScratchX を使う。

  • ScratchX とは拡張可能 Scratch (beta 版)
  • その他タブから、github pages 上の javascript コードを読み込んでブロックを拡張する。
  • ScratchX だと、既存のブロックを拡張出来る (日本語ブロックが使える)

ScratchX x Arduino : センサScratch2HTML : Arduino と組み合わせると、センサの音を Website 上で公開出来る。

オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ 浅海智晴氏

関数型言語好きな人が実用性を一生懸命アピールする発表で勉強になった。

関数型プログラミングの技術革新

  • 型クラス : 代数的構造 (Monoid, Monad)
  • モナド : I/O 処理
  • Reactive Streams : 大規模データ、イベント駆動、ストリーミング
  • 次の技術革新 -> 証明プログラミング

背景(Needs)

Reactive Streams

FP まとめ

  • コンパイルは証明
  • 数学的汎用 DSL で、数学・計算機科学の理論をプログラミングに直結させる

OOP と FP のミスマッチ

  • 関数型プログラミングでは業務アプリケーションが作れないのではないか?
  • 状態の更新、更新、大規模開発
  • OOP の方が表現力、拡張性が高い
  • Application Cloud Platform: 基本機能をクラウドで提供
  • DSL でまとめる。
  • Functional モデルを一級モデルとして考える。
  • 関数モデルは出来るだけ DSL 化を目指す。
  • Collaboration の所で OOP が残る。

Serverless Architecture 伊藤直也

デモとかに最適では?まさかこれから関数型言語フィーバーするのではという希望を感じた。大好きなリアクティブモデルがこんなに日の当たる存在になって目頭が熱くなりました。

  • FaaS Function as a Service を使ったシステム
  • ステートレスな FaaS がリアクティブ、Microservices、コレオグラフィへと導く (???)
  • 運用が楽でスケールして安い
  • サーバレス -> Shared Nothing -> 必要なときだけ計算 -> イベント駆動

サーバレスアーキテクチャ

  • 常駐プロセス的な「サーバ」が無い。Function as a Service (FaaS) を前提にする。
  • FaaS の例: AWS Lambda
  • AWS 上で任意の小さな関数を実行するサービス (Python, Node.js, Java)
  • 任意のイベントを契機に関数を実行出来る。
  • イベント例:
  • HTTP Request、S3 アップロード、Kinesis ストリーム (ログ)、Email、
module.exports.hello = (event, context) => {
  context.succeed({message: "hello, " + event.query.username })
}

$ serverless deploy
  • Lambda function はサーバレスで実行される。
  • コンテナで実行される。
  • 実行時に作成されて、終了時に破棄される。
  • 常駐プロセスではない、CGI に近いモデル (モダン CGI)
  • Lambda function はステートレス
  • スケールしたかったらもっと起動すれば良い
  • AWS Lambda はスケールするし安い
  • 計算したぶんしか費用がかからない。一桁二桁違う。
  • サーバレスアーキテクチャとは
  • FaaS を利用した設計
例: サムネイルの作成
  • S3 に写真をアップロード
  • AWS Lambda でサムネイル作成
  • S3 にプッシュ
  • Akamai で配信
例: 書類選考 -> Slack に push
  • Redmine に人事の人が書類をアップ
  • Webhook が Amazon API Gateway にイベントを出す。
  • AWS Lambda が Slack にメッセージを出す。
例: 行動ログ収集基盤
例: 紙面ビューアを支えるサーバレスアーキテクチャ
  • 複数の Lambda がイベント連携し、システムを構成する。

FaaS でイベント駆動設計を突き詰める -> Microservices になる

CGI との違い
  • CGI はアプリケーション全体を毎回 fork するので非効率
  • prefork によってオーバーヘッドがなくなった。(FastGGI, Puma, Jetty, IIS...)
  • 並行性能に難がある。
  • メモリフットプリントが大きい。
  • C10K 問題
  • イベント駆動モデル (node.js)
  • select() / epoll()
  • メモリフットプリントが小さく、高い並行処理。
  • 可用性に何がある。落ちる時は全部落ちる。
  • AWS Lambda
  • コンテナで実行すれば起動に伴うオーバーヘッドが少なくなる。
  • 毎回起動でも OK
  • Reactive System の価値 伸縮性、
  • Erlang VM の軽量プロセス
  • 起動が十分に高速なら、都度実行が良い
  • 小さな関数の組み合わせ
  • FaaS は自然と Microservices になる
オーケストレーション vs コレオグラフィ
  • レジの店員は注文の印を付けてキューに送る。
  • 間違った飲み物を作ったら、払い戻しでは無く飲み物を捨てて作り直す。
  • コレオグラフィは疎結合でスケーラブル
  • 一方で同期呼び出しの方が単純で、適切に機能しているかが分かりやすい
  • Microservices を指向するならコレオグラフィ
実際使ってどうなの?
  • オーバーヘッドはゼロではない。
  • 開発環境はいまいち。
  • 開発競争が盛ん: AWS vs GCP vs Azure

HTML5 / フロントエンド開発最前線 白石俊平氏

  • 2010 年ごろまでユースケース主導で API が増えた。
  • 抽象度が高すぎるため、ユースケースにハマらないケースでは使いにくい。折角作った API が使われていない。
  • 低レベルの API を組み合わせて使う。
  • 盛り上がりに欠ける。
  • W3CWHATWG で分裂している。
Web の利点
  • Secure
  • Linkable : DeepLink アプリの深い所にリンク出来る。
  • Indexable : App Indexing アプリを直接起動出来る。・
  • Composable
  • Ephemeral
  • クロスプラットフォーム iOS, Android, サーバ node.js 色々使える。
  • Javascript は世界で最も人気のある言語
  • まだまだ進歩がやまない。
  • AMP Accelarated Mobile Pages : 外部キャッシュ、高速レンダリングを前提とした制約付き Web page
  • Google がキャッシュする。プリロードする。
  • HTTP/2 1 つのサイトで 1 つの TCP を割り当てる。
新しい Javascript
  • 実装が追いついてないので、モジュールハンドラで、import / export を js コードに変換出来る。
  • 非同意処理 Promise, async / await
  • async / await を使うと、非同期なのに try / catch 出来る。
  • オブジェクトリテラル: 変数名と同名のプロパティを簡単に定義出来る。
  • デストラクチャリング: パターンマッチ

「ステージ」の考え方で、新しい機能がどんどん追加され標準化されていゆく。

コンポーネント指向開発
  • アプリを部品で分割して扱う
  • SPA Single Page Application : HTML 一枚で Javascript で全部書き換える。
  • SPA では、CSS の ID やクラス名が衝突する。
  • 追加要求 ブックマーク対応とか (URL ルーティング)
  • Web Component
プログレッシブ Web アプリ (Android)

Web アプリをにだんだん普通の Android の機能を追加する。