y.takky てくめも

web技術について勉強会の参加メモだったり、本を読んだメモだったりを載せる予定

Next ’17 Extended - Tokyo を聴いてきた

gdg-tokyo.connpass.com

3/8-3/10に開かれたGoogle Next17 の報告回にいってきた。 会場はGoogle Tokyo カンファレンスとか勉強会でたまにくるけど、六本木ヒルズのエレベータはなぜテンションがあがるのか。

あとすでにtogetterに当日の様子がまとめられているので合わせて読むといいかもしれない

togetter.com

Next Introduction

@sinmetalさん

スライドはこちら

docs.google.com

Google Cloud Nextとは

去年はGoogle Cloud Platform Next というGCPだけだったが今年はGoogle関係全て。 216 Sessions

Moscone(GCP周りの発表)はラフなエンジニアが多いけどMarriottはカチッと服着た人が多かった(Gsuite系はMarriott)

Keynote

Keynote Day3はOpenSource周りの発表が多かった。 - Apache Beam ->dataflow - Kubernetes -> GKE - TensorFlow -> Cloud ML

GCPではOpen Sourceをホスティングするサービスを提供していくというのがおおい

Google Open Source – opensource.google.com

OSS Productがまとまっている

NextProduct

  • Cloud Spanner
  • Dataprep -Video Intelligence API
  • Cloud Identify-Aware Proxy
  • Data Loss Prevention API
  • BigQuery Transf

NewFunctions

  • GCE : 64Core + moreMemory
  • CloudSQL: PostgreSQL
  • BQ : Federated query on Cloud Bigtable
  • Cloud Vision API : Text Detection

Change Status

  • Cloud Functions (Open Beata)
  • App Engilen Flex (GA)
  • Dataflow (GA) など

Price Down

  • 無料枠の増大とCompute Engineベースのものが値下げに

Committed Use Discounts

IAM : Custom roles

alpha申し込みページがある 細かい範囲を組み合わせて新しいIAMが作れる

IAP (Identify-Aware Proxy)

  • ログイン機能を提供してくれる。
  • URLにログインしようとするとGoogle認証とかできる。

Data Loss Prevention API

  • Sensitiveな情報を抽出するAPI
  • MLに近いけど、セキュリティの分類

Compute Engine

  • Shared Core バーストモード
  • 外向けのファイアウォール
  • XPN (Cross Project Network) プロジェクトを跨いで、LANの構築ができる。
    • Gsuiteが必要。ネットワーク的に近くなるかはわからない。

ASK A CLOUD EXPERT

  • Flex遅い

    • Imageのキャッシュでなんとかするように努力してる
  • Cloud Functions

    • Nodejs以外にPythonとGoはしたい。

BigQuery and Cloud Machine Learning

@kazunori_279さん

Video API

動画広告の効果測定にVision APIでやっている

Smart analytics with the signature

BigQueryを使ってもっと賢い検索をする UDFを作る。 javascriptでユーザ定義関数を作れる。

特徴づけをして類似検索をする TF-IDF使って実現する。

StackOverflowのデータはBQ上に入っている。 本文から単語を抜き出して特徴ベクトルで計算する。 TF-IDFでの計算値をjson化して、BQに入れ込む

github.com

Cloud MLと組み合わせる

辞書化してないものはクエリだと難しいからMLを使う。 機械に最適な解決方法を考えさせる

Google Cloud上での機械学習サービス

  • Cloud ML / Machine Learning Engine

  • CloudVisionAPIのようなAPIなどを使う方法もある。

BQとMLエンジンの組み合わせ

BQで前処理してMLで学習する

datalabのAPI使うとbqのデータを引っ張ってこれる tfの高レベルAPIにDNNClassifierなどがある。これを使うとコード書かなくても賢いNNが作れる

BQ+UDFである程度のrecomendationが実装できる。

Cloud functionsの紹介

@tenntennさん

スライドはこちら

www.slideshare.net

Cloud Functionsとは

  • サーバレス
  • イベント駆動

関数の種類

  • BackGroud Cloud PubsubやGCSのイベント駆動ができる。 処理が終わったらcallbackを呼べる。

依存関係

package.jsonに書いとけば Cloud上で自動で実行される ログはconsole.logデ杯とけばStackDriverLoggingへ キャッチされないエラーはStackDriver Error Loggingへ

実行環境

  • diskは/tmpに保存される
  • Googleの各サービスは認証がデフォルトで通る

Infra: kubernetes and GKE, Network

kuma (@kumakumakkk) | Twitterさん

どの環境を選ぶべきか

  • GCE フレキシブルなスペックの設定 オンプレをそのままクラウドに持っていきたい ライセンスの関係

  • GKE フルマネージドなkubernetes クラスタのオートスケーリング 論理的なインフラ志向 インフラをマネジメントするのではなく、アプリケーションをマネジメントする

使いたい場面 アプリケーションをいろいろな環境で動かしたい。 DevOpsのコミュニケーションが可能。 CI/CDを積極的に行いたい。 設計には制約がある。

  • App Engine App Engineで動くようにアプリケーションを作成すれば、オーペレーションをほぼ全て肩代わりしてくれる。 App Engine Flexible : コンテナをフルマネージド。 1000億リクエスト/日 使いたい場面・制約 ステートレスなアプリケーションの運用。

制約が多い。 AppEngine Standard verが限られる (Python,Java.PHP,GO) 設計・実装で制約がある。

AppEngine FX コンテナを使わなければいけない。2インスタンス立つので高い。

  • Cloud Function サーバレスでイベントドリブン。 クラウドサービストリガ

GCPのサービスをイベント鳥がにする場合には使えるけど制約が多い。

環境を決める要素

  • チーム、組織の性質
    • インフラエンジニアはいないけどバリバリ開発できるからAppEngine
    • 今後コンテナ化を進めていく
  • 技術的な必須項目 - 抽象化したいレイヤ

Kubernetes

BigData

なかむらさとる (@satoluxx) | Twitterさん

新たな発表

  • Data Transfer Service GA経由でしかみれなかったものをBQにエクスポートできる

  • 商用データセット だれでも使える公開データはいままで提供してたけど、 金融データ等をBQに直接データ提供会社が準備してくれる

  • Federated Query BigTableも直接BQから見れるようになった。 DataStoreのバックアップもできるようになった

  • Dataprep データの前準備ツール

  • Dataflow(python)

  • Datalab(GA)

@satoluxxが思ったこと

  • データの民主化のさらなる進化
    • データを入れ込むところから使いたい人が入れ込む  - outputはDataStudioなり

dataprepのデモ

裏側でdataflowが動いてくれる。 プログラム的要素が一切入らない

Mapas関連セッションの報告とMaps APIの最新動向について

丸山智康

GeolocationAPI

IOTデバイスのシグナルを3点以上取得して緯度経度を返す。

Google Maps APIのパッケージ

16種類ぐらいある。 Maps Android APIとかのスマートフォン以外にHTTP web service用のAPIなどもある。

MapsAPIの最新動向

  • 地図のスタイリングがモバイル側にも拡大。 AndoroidとIOS向けにJsと同じ設定ファイルが使えるようになった
    • 全く同じjsonで。
  • ルートの最適化と将来予測機能
    • いわゆる巡回セールスマン問題をごろごり解くのをAPIで提供してる
  • Directions APIにHeadingパラメータが新規追加
    • いわゆる進む向きを考慮したルート設定が可能になった
    • Taxyの配車など
  • Directions APIの経由地点が98地点に
    • 5000km以内で98地点の経由地点を含めて計算が実行できるようになった。
  • Google Maps Beta プログラム

プラン

  • 移動体管理アプリ
  • 1日25000回以上地図がロードされる - 有料会員向け
  • 社内向け などなどプレミアムプランが必要。

Webアプリとかだとプレミアムプランが必要になる

Gsuite

吉村光平さん

G suite

  • CloudにWindows File Serverを持ってくることがほぼほぼできるようになった。

google Drive

  • Team Drive (GA) MyDriveのファイルに権限を与えていたが、チームドライブは管理者が権限に応じてアクセスできるようになる
  • 移動や配置換えによるファイル紛失がなくなる
  • Drive File Stream(EAP) ネットワークドライブとしてマウントできる。
  • Valut for Drive (GA)
  • Quick Access (GA) その人が開くであろうファイルを一番上に出す。

google hangout

ConsumerとEnterpriseで機能が若干違う。 - Hangouts Meet (GA) 録画可能なビデオ会議 - Hangouts Chat (EAP) Slackのようなもの。 apps scriptとwebhookをサポート予定

Jamboard (GA date)

googleのデジタルホワイトボード。 6月のNext Tokyoで実物が展示されるかも

Google Cloud Search

  • プッシュ型で必要な情報を提供する

App Maker (EAP)

Gsuiteと連動した簡単アプリ開発 裏側はAppEngine / DBはCloudSQLもつながる

CloudSpanner

teppei Yagihashiさん

googleにおける要件

  • 水平方向にスケール
  • グローバルでの一貫性を持つACID
  • Downtimeなし

CloudSpannerとは

  • フルマネージドグローバルスケールのDBサービス
  • 現状はSelectのみ。他はプログラム必要がある。
  • リージョン内自動同期レプリケーション

オープンスタンダード

  • Standard SQL
  • メジャーな言語のClient

ワークロードの種類

プライマリーキーの設計

  • シーケンシャルなキーは避ける (time stampなど)
  • 実世界の識別子を使ったほうがいい

IRKitでエアコンのON/OFFをcurl経由でする

この記事について

睡眠をエンジニアリングするための前準備
IRKitを利用して curl経由でエアコンをON/OFFしてみる。

といっても

IRKit - Open Source WiFi Connected Infrared Remote Controller

通りにやればON/OFFは簡単にできるはず。

準備

IRkitの準備

AndroidIphoneのIRkitのアプリをDLして初期設定しておく。

IRkitのIPを調べる

Bonjourで調べることができる

$ dns-sd -B _irkit._tcp
Browsing for _irkit._tcp
DATE: ---Thu 12 Jan 2017---
21:58:58.624  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
21:58:59.498  Add        2   4 local.               _irkit._tcp.         iRKit66C9
$ dns-sd -G v4 iRKit66C9.local
DATE: ---Thu 12 Jan 2017---
22:00:39.768  ...STARTING...
Timestamp     A/R Flags if Hostname                               Address                                      TTL
22:00:40.062  Add     2  4 irkit66c9.local.                       192.168.0.10                                 10

ここでiRkit66C9は 一つ前のコマンドで取得したInstance Nameを指定する。

IRkitのIP Addが192.168.0.10ということがわかる

pingでも打って確認してみる

$ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 192.168.0.10: icmp_seq=1 ttl=255 time=51.590 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=255 time=4.337 ms
64 bytes from 192.168.0.10: icmp_seq=3 ttl=255 time=617.344 ms
64 bytes from 192.168.0.10: icmp_seq=4 ttl=255 time=7.138 ms

赤外線を取得する

GET /messageで取得できる

$curl -i "http://192.168.0.10/messages" -H "X-Requested-With: curl"

APIのENDPOINTは上で取得したIRKitのIP Add

最後にIRKitで受信した信号を取得できる。

$curl -i "http://192.168.0.10/messages" -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,3228,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,1150,1150,65535,0,16832,16832,4400,1150,65535,0,65535,0,62212,18031,4400,1150]}
{"format":"raw","freq":38,"data": ~

が赤外線信号になる。 エアコンのON/OFFの信号をメモっておこう。

赤外線を送信する

POST /messagesで送信できる

curl -i "http://192.168.0.10/messages" -H "X-Requested-With: curl" -d '{"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,3228,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,1150,1150,65535,0,16832,16832,4400,1150,65535,0,65535,0,62212,18031,4400,1150]}'
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

注意するのは -dで赤外線情報を送るときに''で囲むこと 忘れがち。

これで赤外線信号を送ってON/OFFできる。

ローカルにサーバを立てて送るのであればこれで済むが、外部ネットワークから送りたいと思う。

そのためにIRKit Internet HTTP APIが用意されている。

IRkit Internet HTTP API

IRKit Internet HTTP APIのエンドポイントは

https://api.getirkit.com

client tokenの取得

POST /keysでリクエストを送ることでclienttokenが取得できる。 clienttokenは漏れないようにしよう

 curl -i "http://192.168.0.10/keys" -d '' -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"clienttoken":""}

deviceidの取得

IRkit Internet HTTP APIに対して POST /1/keys でリクエストを送ることでdeviceidが取得できる。 その際に上で取得した client tokenが必要

curl -i -d "clienttoken=" "https://api.getirkit.com/1/keys"
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 12 Jan 2017 13:15:18 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 94
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
X-Content-Type-Options: nosniff

{"deviceid":"","clientkey":""}

IRkit Internet HTTP APIではdeviceidとclientkeyを認証キーとして使用する。

IRKit Internet HTTP APIを用いた赤外線情報の送信

POST /1/messagesに対してclientkeyとdeviceidと赤外線情報を与えてPOSTすることで、
Internet HTTP API経由で赤外線情報を送ることができる。(つまりエアコンのON/OFFができる)

$curl -i "https://api.getirkit.com/1/messages"  \    
-d 'clientkey='  \   
-d 'deviceid='   \
-d 'message={"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,3228,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,1150,1150,3228,1150,3228,1150,1150,1150,1150,1150,3228,1150,3228,1150,1150,1150,3228,1150,1150,1150,65535,0,16832,16832,4400,1150,65535,0,65535,0,62212,18031,4400,1150]}'
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 12 Jan 2017 13:21:50 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
X-Content-Type-Options: nosniff

これでIRKit Internet HTTP API経由で赤外線を送信できる。
クラウドサーバから送ったり、Google Apps Scriptから送ったりとできる。

ここまでで、IRKitの準備を行った。
次の記事ではMESHについて紹介する。

LINEに通知するwercker stepを作った

前書き

notify-bot.line.me

Line Notifyが出たので、Lineに通知するwercker stepを作った。 slackに通知するstepはあるけど、スマホのslackではなかなか気づきにくいのでLineに通知するのを作った。

github.com

使い方

githubに書いた通りstepに

after-step:
        ytakky2014/line-notifier:
            access_token: $PERSONAL_ACCESS_TOKEN

を記載する。

$PERSONAL_ACCESS_TOKEN

はLINE Notifyのページから取得してソースベタ書きはいやなのでwerckerの環境変数として登録しておこう。 f:id:ytacky:20161214220042p:plain

テスト中の画像だがこんな感じで通知される。

技術基盤系の勉強会に行ってきたので本当にメモというか思っていること

この勉強会に参加してきた

 

speee.connpass.com

各発表の感想というよりは勉強会に参加して思ったことを羅列しておく

 

- ここでの技術基盤は会員基盤とかというよりもインフラ面も含めて開発基盤全般を指す

-  技術基盤は各プロジェクトを横断する技術課題を解決していくべき

- その中には各プロジェクト固有の問題も含んでいる

- 後々差別化できる技術開発も必要

- 一見不可能に見える課題でも分割して着実に成果を出していくことが大事

- 最終的には各プロジェクトを横断した基盤と各プロジェクト内で技術的課題を解決していく

- 今目の前のタスクが優先的になってるけどそうではなくプロジェクトを横断して技術課題をどのように解決しているかを考えていくべき

- そのためにはどんな技術でもインプットとアウトプットが必要

- 技術書の購入やプライベートな開発時のサーバ代を一部負担するなど会社の福利厚生もあるといいかも;

 

 

 

Abema TV DEVELOPER CONFERENCE 2016参加メモ

秋のカンファレンス参加 第二回目 今回はAbema TV DEVELOPER CONFERENCE 2016に参加してきました

AbemaTV Developer Conference 2016

ずっとRoomAにいました。発表資料とかは上のリンクにあります。

挨拶

abemaTV開発局局長の挨拶があった。
abemaTVの目指したところはインターネットの技術を利用してTVを再現する。
広告モデルはTVと同じことを実現
FRESH クローズド映像配信
ニコ生を意識して作った。
開設・利用費が0円とか高画質とかアーカイブ保存期限なしとか

AbemaTV の動画配信を支えるサーバーサイドシステム

AbemaTVはFireTVなどのデバイスにも対応する予定
TVのような体験とインターネット特有の体験
VODのような配信じゃなく受動型。

動画配信の基礎

1998年頃はUDP上のServer Push Steremingだったけど2006年ごろからHTTPによる動画サービス(Akamai CDN使ったりする)

プログレッシプダウンロード

メディアファイルのうちダウンロードできたところから再生している

ストリーミング

セグメント毎に分割して配信。生放送もできる。(セグメントつくったところから配信できる)

Adaptive Bitrate Streaming

シームレスに画質切り替えできる。

Http Adaptive Streaming

ファイルの集まりとしてHTTPで転送している。
HTTP関連のソリューションが使える
HLS(HTTP Live Streaming) Appleが作成。10分以上だとAppleガイドライン的に使用が必須
M3U8(プレイリスト)と動画ファイルから(MPEG2-TS)

ストリーミングの裏側ではなにをしているか

入力 -> 映像処理 -> パッケージング -> 配信

AbemaTVの配信システム

入力のレイヤーは複数だけどパッケージング・配信は1つ
録画済み ->ドラマやアニメなど管理画面からストレージに上げておく
生放送->録画したものをlive encoderしてストレージにあげる。

Streaming-server

配信の切り替え・自前開発している。
番組毎にストレージサーバがあり適切なものを配信している。
広告挿入は自前のアドサーバから撮って挿入。
録画は前もって広告を入れておく。生放送はオペレータが入れている。

SEQUENCEの計算

in memoryだけだと同期取りにくいから、DBに書き込んで差分見てる

全体のアーキテクチャ

動画配信以外にも様々なものがある。
GCP上にある。
エンドポイントはGCE上にある。
ユーザからのアクセスを受けるEndpointはgatewayと streming-server
どちらもAkamaiキャッシュしてる。
gatewayは配信以外のサービスのエンドポイント
RPCで呼び出している。
Redis ClusterとかMongoはGCE
GCSにメディアコンテンツをあげてる。
生放送もVODで再生できるので、全部入れている。

AbemaTVの開発スピード

12月から3月の限定版リリースや4月の本開局まで4ヶ月ぐらい
1月はサーバ周り。1月はログがコンテンツ配信の開発。
3月にはAbemaNewsのみで生放送はFRESH経由していた。
できるだけ同じプログラムを使い回せるようにした。
並行して管理システムなども開発していた。

短期間で仕上げられた背景

GCPに助けられたこと
各種機能(loggingやmonitoringなど)
GKEよかった。

Q&A

Q.線形的にデータ増えてくと思うんだけどGCSだと課金額増えない?
A.大丈夫 。どちらかというとコンテンツ支払う方がお金かかってる。
Q.動画の切り替えのタイミングってどれもおなじ?
A.録画と生放送で違う。
Q.生放送で入れるとずれでユーザが意図したタイミングと異なった時間にはいらない?
A. ストリーミング2秒なので、そこまでずれはないというのと、最近慣れで大丈夫になってきた。
Q.RPCの形式は
A. GRPC / GKEがデフォルトでこれなので。
Q. GCPの選択理由
A. GCPの方がコスト安とか、LiveMigrationがされたりとか。
Q.FireBaseの使用理由とか
A.Push通知に使ってる。最初はLocal Pushだったけど。
Q.GCPのリージョン問題
A. 原因がリージョンが原因なのかわからないけど、そこまで問題なかった。
Q.Redis Clusterの罠なかったのか?
A.ちょっとまだ対策できてない。

インターネットにおける動画配信の仕組み

動画コンテントを提供するには

ダウンロード/プログレッシプダウンロード/Streaming/HTTP adaptive Streamingなどある。

幅広いデバイス向けならHTTP Adaptive Streamingが良さそう。CDNが活用できる。

HTTP上のStreamingは様々

HLSはItunesの審査で必須。 HDS:Adobe Smooth Streaming:MS MPEG-DASH: ISO/IEC 23009 多機能だがプレイヤーが対応してない。

配信形態

Linear TV
Linear TVでは映像ソースとアウトプットが多:1になる。
多:1で番組の移り変わりを実現するのに内製システムで実現している。
NewsだけAPCつかってる。

セグメントをどう作るか。

録画コンテンツ
納品データ -> 管理システム -> Job Queue -> Worker 配信可能形態

生放送
Encoder/Packagerを通してPollerでストリーミングに吐き出す。
APC使っている関係上別のメーカのEncoder/Packagerを使っている。

録画コンテンツ
フラグメンテーションはしてある1ファイル。
分割位置情報を持っているファイルも持っておく。

生放送もGCSにセグメント毎に格納しておく。
セグメント情報はMongoにいれてある。

Adaptive Bitrate Streaming

最初は低画質のものから再生して、どんどん画質良くしていってる。
サーバではビットレート毎にファイルを作成する必要がある。
壊れている場合は、自動検知できたら下の解像度からコピーしている。

やんちゃな HTTP Live Streaming (h264/aac) トラブルシューティング

FRESH By Abema TV

DockerでAWS上に乗ってる。

なぜHLSを使うのか

部分ダウンロード即再生とCDNでキャッシュできる。

FRESHは全動画HLSで出力

こっちはS3に上げてる。

トラブル集

画質が悪い

配信元の解像度設定。

キャプチャツールの解像度が低い。
マニュアル化してる。

配信元のPC負荷

解像度設定が大きすぎる。
大きい解像度 -> 小さい解像度の変換が重い

Wowzaの負荷

切り分けが難しい。 HLS変換がかからないアーカイブデータ用意してそれで荒れてたら配信元原因。
みたいに切り分けた。

Wowzaの画質設定

ブロックノイズが出る。
帯域 / (解像度 *fps)が重要で Bits Per Pixel(BPP)のチューニングが必要
トライアンドエラー

画質戦略

2Passエンコードができない。
ジャンルがいろいろあってつらい

動きのある映像でも耐えられる設定をベースにしている。
ただ、TODOとしてジャンルによって変えて生きたい。

スマホ視聴がメインターゲット

メインユーザ層の使用帯域が限られているのがつらい。

結果

BPPは30fpsで0.15
圧縮効率のため解像度は16の倍数中心
1024*576 2655kbps
1時間で1Gぐらい。

遅延する

HLSは遅い

RTMP配信などに比べ遅延する。

TSファイルの長さを短くして改善

Apple推奨は10秒だけどFRESHでは2秒。
配信ツールでもKeyFrameIntervalをTSファイルより短くしてる。
遅延10秒ぐらいに抑えてる

アーカイブまだ?

WowzaはMP4で出力
配信終了したらMP4を結合して外部トランスコーダでHLS化してる。
時間かかる。

TSファイルを使いまわして、アーカイブ用のPlaylistファイルを錬成している。

アーカイブ再生できない

"#EXT-X-DISCONTINUITY" ストリームの不連続をPlayerに伝えるタグ
つぎはぎするなら必須
問い合わせベースで修正してる

AES暗号化時のキー指定ミス。

Wozar落ちたらどうするの?

Playerの対応にばらつきでできない(まあ、最悪PR送ればいい)

配信トラブル要因になりがち
配信元の帯域を圧迫する。

安定した配信のためには

HLS芸の取得

Playlistはただのテキストファイルなので、手動でPlaylistをかけるように

配信主サポート

Slasskやメールベースでの密なコミュニケーション。
ログや設定ファイルをもらったり。
身内の配信に乗り込んで検証
Slaask Web面でのチャットとSlackを繋いでくれるツール

FFmpeg 動画・音声の編集ツール。

クラウドの違いは?

FRESHの方が先に開発始まってAWSを使った。

GKE@AbemaTV

GKE is

Kubernetesのフルマネージドサービス。 KubernetesのKをとってる。

Kubernetes(クーバネイティス)

Dockerのオーケストレーションツール

Kubernetesの構成

Minionノード コンテナが起動するノード Pod:コンテナのグループ RC : 起動するpod数や環境変数を管理(Deployments)に置き換わっていく。

Service: Pod群のエンドポイント Yamlマニフェストファイルで管理

GKE@AbemaTV

Varnish/Nginx コンテナとして起動

選んだ理由

GKEがGAに
k8sがフルマネージドで使える。
microservicesとの親和性

設計

SPEC 
n1-highcpu-16 x 50ode
16vCPUs 14.4GB memory
33Services 216Pod
default requests & limits cpu:400m, 

Requests : podが起動に必要なリソース
Limits : 稼働でのリソース

Requests と Limitsに開きがあるとリソースが固結

kubectl describe node [node]でリソースの何%まで割り当てられているか確認出来る。

1Clustsr N Services

追加機能でインフラの準備不要
運用コスト低減
Service同士はlocalhostで接続

デメリットとしてはリソース消費の見極めが複雑になったりとかレプリカ数が少ないpodはタイミングによって同じノードに起動してしまうことがある。

Docker Image

Alpine Linux

リリースフロー

アプリケーションの場合 github -> circle ci でGCRにdocker pushする。
インフラ系は直接PUSHしている。

手元の開発環境からデプロイしている。

kubectk create -f xxx.yaml
kubectl apply -f xxx.yml

Roling-update
kubectl rollig-update xxx -f xxx.yml
kubectl scale rc xxx —replicas=10

kubectl rolling-updateの課題
v.120以降同じタグでRolling-updateができない。

Selectorが中途半端に残る

kubetool
kubectlをラップした補助ツール

良さそう。

監視

標準で取れるのはリソース状況
Podの標準はLoggingへ

kube-ui

運用時

Terafformとの別離
TerafformでInstance Templateを編集するとインスタンスが全台作成される。

無停止でスケールアップダウンする場合はテンプレートを手動で付け替える必要がある。
コード化できてない。

ServiceのIPに接続できない。
HTTP Load Balancerから繋がるけど、Podから接続できない。 v1.2.0
Nodeアップグレード時に断発生
1台ずつアップグレードされるが、Podが先に落ちないいので数秒断される。

まとめ

デプロイ簡単。

Q&A Q. Alpine Linux不安定感ない?
A. 特になかった。

  1. GO使うならば App Engineって選択肢もあったとおもうけど
  2. いろいろあったので続きは懇親会で。

  3. Dockerfile Imageの運用方法は?

  4. Git Hubに上げてる。 開発/インフラどちらでも触ってる

AbemaTVの開発スタイル

アジャイルサムライにあるインセプションデッキを一通り話し合い。
スプリントはタイムボックス2週間で
計画ミーティングを実施してタスクの優先順位とか見積もりしてた。
Codecov /PRのカバレッジどうか
asana(ガントチャート)とか使ってる。
ベースをプロジェクトに適応する。
組織やルール・文化をみて適応する必要ある。
FRESH
開発:20人 開発以外10人前後
AbemaTV
開発30人 開発以外~100人
スクラムチームは多くても10-15人が限界で分解が必要。
FRESHの場合役割で分割した。
server/fromt/design/iOS/Android
各リーダとDir、責任者のまとめをboardとしてポートフォリオバックログを管理した。
Abema TVも役割で分割したけどプロジェクトを作って、横の連携をした。

FRESH縦から横事件

機能をリリーススコープから外して縦対応に注力。
デザインスプリントを行ってゴールの認識統一した。 (半日アプリ/デザインで認識合わせした)

チームの考えに適応する

課題から開発者で使用を落としこむか、 ディレクタープランナーが落としこんでから開発着手するか。

開発者目線で、KPIを単純にあげるのは難しい。
そこはPlanerの協力を得た。

人に適応する

チームメンバーに合わせるのはコストがかかる。
AbemaTVのグレード制度の意味づけをした。

自走できるエンジニア

S3.5
実現したいことに対して仕事詰めやスケジュール調整も含めて持ってける
自走できるならならば権限を持てる。
Slack依頼して、自走できれば チケットとかいらない。
自走できるエンジニアは、勝手に課題を見つけて対応できる。
管理しすぎると個人のパフォーマンスを出し切れない可能性があるときがある。

AbemaTVの文化

自走できる人たちを集めている。
管理できる人は最低限なので、リモートもできるようにしている。

各個人の最大化とマネジメントコストの削減をセットで進めていく。

デメリット

属人化する。属人化から走ってチームに共有する体制

炎上プロジェクトの立て直しの風景

炎上事例

権力者の介入

普段は仕様の決定とかがプロデュースがやっていて情報が一元化されているから問題ないけど
チーフプロデューサがIOSエンジニアに直接依頼して仕様のズレがあった。
仕様はチーフPの間
すべての修正依頼はPを通すように。
チーフプロデューサとエンジニアが直接対話する機会を設けた。
Pとチーフプロデューサとエンジニアが同席して仕様変更の決定を行えるようにした。
介入ができる場を限定した。
意思決定、情報の集約は一元化しよう。
権力者とはうまくつきあおう

要件進化

クライアントの思いつきで見積もりからずれていた。
プロジェクトゴールの再設定とやらないことの停止/第二期開発への引き継ぎ
目的が変わるようであれば仕切り直し or 別プロジェクトとしてスコープを明確にする。

ゴールが設定されている場合ゴールが最適か確認をする。

炎上しているときほど線引きを明確にする。

最悪な状態は

ゴールがブレる。終わりが見えない
チームワークが崩壊

まとめ

かなりいい感じのカンファレンスでした。配信もあったみたいですし、無限コーヒーあったり、スライドの公開が早かったりと。
abemaTVとしては初めてのカンファレンスで、不手際あるかも見たいなことを言っていましたが、そういうこともなかったです。
(一部スライドが切れてスライド調整するのに時間かかったりマイクが若干混戦したり、無限コーヒーが無限コーヒーじゃなくなった。(参加者が本気出しすぎて無くなり途中で補充入った))
無線LANも快適でカンファレンスとしてはかなりクオリティが高く発表の内容も素晴らしかったです。

PSVR買ったので

運良く店頭体験→予約ができたのでPSVRを買いました。

セッティング

クイックマニュアルに従えば困ることは特になかった。 PSCameraつける端子をまよったことぐらいかな。 あと、PS4の構造上仕方ないけど裏側にもUSB端子が欲しいなと思った。

PSVRの接続上 PSVRプロセッサーユニットとPS4のUSB接続するときにフロント側のUSBしか端子ないので...

PS4 PROは背面にもUSB端子があるみたいなので、PROを買えということか...

ソフト

専用ソフトだとローンチ時は26本(体験版とかも含めて)やったものを載せておく

KITCHEN

BIOHAZARD VRのモック的な扱い。 プレイ時間が3分ぐらいしかないし、 個人的にはBIOHAZARD 7 TEASERの方が恐怖感があった。 あまりプレイアブルじゃないので、演出で見せてくるしかないよな。って感じ

Allumette

映像作品に近い感じ? あまりやってない

THE PLAYROOM VR

ミニゲームの詰め合わせみたいなもの。 マリオっぽいアクションゲーとかある。結構面白いけどVRにまだ慣れてない状態でやってたので結構酔った感じはある。

初音ミクVRフューチャーライブ DEMO

ちょっと見ただけ。 コントローラ振ってサイリウム振るのを再現するのは面白かったし、カメラ位置はデレステVRより良かった。

PlayStation VR Demo Disc

まだ全部やってないけど。体験版集。 DRIVECLUB VRやってみたけど、酔うね。 グランツーリスモとかも酔いそう。

Invasion

VR映像。 他のVR機器にも提供してるっぽくてある種のベンチマーク的に使えそうだなーと思った。

サマーレッスン:宮本ひかり

JKの家庭教師になって勉強を教えるVRゲー 体験会の時はADVに近いのかなと思ってたけど、育成シミュレーションの要素も若干入っている。 座ったままできて酔わないので、意外とVR体験としてはおすすめ

アイドルマスターシンデレラガールズビューイングレボリューション

デレステのVR版みたいな。 確かにライブに参加している感じがあるし、サイリウム振れるしコールもちゃんとあるしいい。

欠点はDLCが異様に高いのと、3曲2800円ってところと曲追加もDLCなんだろうなーってところ。 (いつものバンナムともいう)

とはいえ、デレステやってる人にはおすすめ。

弾丸ロンパ VR体験版

学級裁判のところをVR化した体験版。 そんなに長くない。 うーん。VR化する必要あるかなーと思うゲーム。 悪くはないんだけど

Until Dawn: Rush of Blood

ローンチ時のVRゲーの中では個人的に一番おすすめする。 ホラー + ジェットコースターに乗ってる感覚 + シューティングが一辺に味わえる。 ホラーも1面時点ではそこまで怖くはないけれど、若干怖い感じもある。というちょうどいい塩梅。 ホラーガチ勢はちょっと満足できないかも。

シューティング要素もあるしおすすめです。

シネマティックモード

VR非対応ゲームだったりメニューだったりはこの状態になる。 VR上に仮想の画面が出る感じ。 要はVRで体験する映画館的な。 画面サイズが小中大と選べる。

既存のゲームもこのモードで遊べるしTorneだったり、YoutubeだったりAmazonビデオだったりとPS4上で再生できるメディアならばなんでも再生できるからお手軽に映画館が再現できる。

ちょうどフリップフラップ2話みたけど、問題はなかった (ちょっと色彩つよくてきつい感じもあったけど)

サラウンドで音も再生されるしおまけの割には結構いいモードだった。 最悪VRゲーが合わなくてもこのモードで使い潰せそう。 余談だが、HDMIの入力をPS4以外にしてもVR上で再生される。

目疲れる?

やっぱりVRの中は蒸れるし疲れる感じはある。

めぐりズム 蒸気でホットアイマスク 無香料 14枚入

めぐりズム 蒸気でホットアイマスク 無香料 14枚入

めぐりズム 蒸気の温熱シート 16枚入

めぐりズム 蒸気の温熱シート 16枚入

この辺使って回復させたい。

あとめぐりズムは結構いいんだけど使い捨てだからコストが結構かかるので 普段の休憩用には繰り返し使えるこれをつかってる。

あずきのチカラ 目もと用

あずきのチカラ 目もと用

PSVR買い?

現時点ではゲームがそんなに出てないし、新しいもの好き以外は焦って買わなくてもいいかなー。 やりたいゲームのタイトルがでて運良く手に入れば..って感じに考えとけば良さそう。 シネマティックモードはかなり使えるので、PS4を持っていて1人で映像環境を整えようと思ってる人は買うのもあり。 あとは体験会とか友人とかに頼んで体験してみてVRあうかどうか確かめてからの方がいいと思う。

PSVRでデレステ (Andorid版の方)をする

※想定外の使用方法のため保証が受けられなくなったりしても責任は負いません。

 

発売初日でPSVRにパソコンを繋げたバカが私 | 家電のいろは

 

この記事を見て、HDMIを接続先を変えればシネマティックモードで映るなら

Andorid -> HDMIで出力できればPSVR出力先に出来るじゃん。

と思ったので、実際にやってみました。

 

MHL対応のAndoridスマホであれば専用のケーブルがあればMicroUSB端子->HDMIに出力を出せる。

 

ちょうど手元に

 

 

 

 があったのでつないでみた。

なお、スマホ

 

butterfly HTV31

butterfly HTV31

 

 

接続は

AndoridスマホのMicroUSB端子 -> MHLケーブル -> PSVRのプロセッサーユニットのPS4側入力

 

に入れる。

 

これだけでAndoridの画像がシネマティックモードでPSVRに表示される。

あとはやることといったら、デレステ立ち上げてMVモードで見るだけ。

 

ふみふみふみふみふみふみ

 

 

最高!

 

ただビューイングレボリューションとは方向性が違い

あくまでデレステの3Dキャラを PSVR画面上で大きく表示させてるだけなので注意。

ビューイングレボリューションもいい。

曲追加はよ。