DevFest Tokyo 2016参加メモ

DevFest Tokyo 2016に参加したのでメモを残しておきます。リアルタイムで書いたので、ちょいちょい間違っているかもしれません :bow:

自分が参加したトラックは以下

- あいさつ、コミュニティ紹介
- Nested Scrolling: living life on the edge
- Spotlight on Android Studio 2.2
- Android Architecture Blueprints
- エンジニアとして知っておくと幸せになれる（かも知れない）機械学習とTensorFlowのこと
- Android 開発のライブラリについて
- ライトニングトーク大会

# DevFest Tokyo 2016とは？
http://gdg-tokyo.connpass.com/event/38927/

![DevFest Tokyo 2016](https://connpass-tokyo.s3.amazonaws.com/thumbs/b4/47/b447e2d5e3f2ab6846f506168c7e4a5f.png)

## DevFest Tokyo 2016 開催！
DevFest は、Google Developer Group (GDG) コミュニティによって世界各地で開かれるデベロッパー向けイベントです。DevFest Tokyo 2016 は、普段は別々に活動している複数のコミュニティが集まり、新しいノウハウや最新情報を共有するだけではなくコミュニティやプロダクトを超えた交流の場となる「技術者の祭典」となることを⽬指して開催されます。どうぞみなさんも一緒に盛り上がりましょう！

## 概要
- 日 時：2016年10月9日 13:00〜18:00 (12:30開場)
- 募集人数：1,400人予定
- 対 象 者：Android, Web, GCP (ML), Firebase 技術者および学生
- 会 場：東京電機大学 千住キャンパス 1号館（東京都足立区千住旭町5番）
- 主 催：GDG Tokyo, Shibuya.apk, DroidKaigi, 日本Androidの会, html5j, GTUG Girls, GCPUG, TensorFlow コミュニティ
- 協 力：Abema TV, Google
- 参 加 費：無料

## スケジュール、プログラム詳細
スケジュールは[こちら](https://docs.google.com/spreadsheets/d/17OPwnLvbMOdieHbtG4uslYre00qZjaTrJV1AP2ihWFo/pubhtml)からご覧ください。

各セッションの詳細は[こちら](https://docs.google.com/document/d/1EpM6G36IDMot3b4cViL_9N1YJqbfAHzl2TrC-tujjl0/pub)からご覧ください。

登壇者については[こちら](https://docs.google.com/document/d/1a1O1FARCsLoSxrEIhqXeErQXjFL93kIyuj_E3UNFips/pub)からご覧ください。

# あいさつ、コミュニティ紹介
## DevFest 2016
Google Developer Groupによって世界各地で開催

### 日本Androidの会
2008/9/12から

Android Bazaar and Conference 2016 Autumn

2016/11/19 10:00 - 17:00

### Shibuya.apk
2ヶ月に1度の頻度で勉強会

15分のLTと5分のLT

2016/11/22 19:50 -

### DroidKaigi
DroidKaigi 2017

March 9-10, 2017

### Google Cloud Platform コミュニティ
GCPUG: Google Cloud Platform User Group

### TensorFlow User Group
2016/10/08に発足！

10/12 19:50 -

### Webコミュニティ
html5j

HTML5の勉強会を開催

### GTUG Girls
ハンズオンを開催している

## アンカンファレンスについて
### みんなで作るカンファレンス
1. ルームDに集合
2. テーマをみんなで決める
3. 話す

## Firebaseコミュニティ
まだない！

# Nested Scrolling: living life on the edge
## problem
Flinging does not transfer left over velocity

一番上までスクロールした時に速度を伝えたい

- NestedPreScroll
- NestedScroll
- NestedPreFling
- NestedFling

## Pre vs Non-pre
Pre eventは消費するかどうかを決めることができる

## problem
Nested Flinging does not allow interception like the scrolling

indirect nested scrolling は work in progress

## scroll event
fling、program, key event and so on...

## API
`Indirect`がつく

FlingではなくNested Scrolling

ACTION_UPで`stopNestedScroll()`、`fling()`するが、ここで`NestedIndirectPreFling`をdispatchする。

# Spotlight on Android Studio 2.2
## Android Studio 2.0+
Instant Run

Brand new Android Emulator with faster ADB transfers, new UI and SMP support

Android Studio 2.2をリリースし、EclipseをDeprecatedにした

## Android Studio 2.2
### Layout Editor with ConstraintLayout
右クリックしてConstraintLayoutに変換できる

### Layout Inspector
Android MonitorのメニューからLayout Inspectorを押すと、（エミュレータなら）現在の画面のヒエラルキーが見られる

### Vector Asset Studio support for PSD
New > Vector AssetでPSDがつかできる

### Firebase Assistant
AssistantというタブからFirebaseサポートが利用できる

### Sample code browser
関数名を右クリックしてFind Sample Codeを押すと、サンプルコードを探して表示してくれる

### ndk-build/CMake
使えるようになった

### Jack improvements
java8の機能を使いたければ

### Signing v2
テストする時に

### Build cache (exp.)
複数のプロジェクトが同じところを参照している時に、キャッシュを使うので早くなる

### Merged Manifest viewer
下のタブで切り替えると、いろいろなライブラリのManifestを一つのファイルにまとめて、色分けして表示してくれる

### APK Analyzer
Build > Analyze APK

サイズの内訳を表示。生のサイズとダウンロードサイズ（圧縮されたサイズ）が見られる。

dexファイルの中も見られるので、必要なファイルがパックされているか確認出来る。

resourceのxmlも人間が読める形に。AndroidManifest.xmlも同様に。

### Virtual sensors in Emulator
EmulatorにVirtual sensorsという項目が追加され、端末を回転したり、その他のセンサを操作できる :clap: 

### Test Recorder (beta)
Record Espresso Testを使うと、エミュレータを操作して、Assertionを設定すると、勝手にテストコードを生成してくれる。

### GPU debugger (beta)
Android MonitorにGPUが追加された。

# Android Architecture Blueprints
https://github.com/googlesamples/android-architecture

Googleの人、そうじゃない人、たくさんの人がサンプルを作っている

## Blueprints is a testing project
- UI Testing As A Spec
  - Fast, reliable and hermetic
- Honest, decent unit test converage
  - Mockito, MockableAndroidJar, no Robolectric, no powermock.
- Use Non-UI Android tests
  - Test against real implementations, compatibility testing

### Stable
- todo-mvp/
- todo-mvp-loaders/
- todo-databinding/
- todo-mvp-clean/
- todo-mvp-dagger/
- todo-mvp-contentproviders/
- todo-mvp-rxjava/

### In development
- dev-todo-mvp-tablet/

### External
- todo-mvp-fragmentless/
- todo-mvp-conductor/

## UI Testing as a contract
espresso

### MVP
![MVP](https://raw.githubusercontent.com/wiki/googlesamples/android-architecture/images/mvp.png)

## Design decisions
### Flavors
mockとprod

### Fragments
タブレット対応する時とかに

### Simulated network calls
ディレイを入れて返すなど

### 2 screens / 4 features

### Minifier / shrinker

## Blueprints is a platform for Android Devs.
- Learning
- Outreach/discuss
- Base for sample or template for app
- GitHub cred :star: :star: :star: :star: :star: 

## How to use Blueprints
### Browse on GitHub

### Compare locally
```bash
git checkout todo-mvp
git difftool -d todo-mvp-clean
```

### MVP-CLEAN
![MVP-CLEAN](https://raw.githubusercontent.com/wiki/googlesamples/android-architecture/images/mvp-clean.png)
クラスは多いがテストしやすいので、大きいチームには向いている。

### MVP-CONTENTPROVIDERS
![MVP-CONTENTPROVIDERS](https://raw.githubusercontent.com/wiki/googlesamples/android-architecture/images/mvp-contentproviders.png)

### DATABINDING
![DATABINDING](https://raw.githubusercontent.com/wiki/googlesamples/android-architecture/images/mvp-databinding.png)

## Findings
- Dex method count
- APK size

Irrelevant if you shrink

複雑さ、学習コスト、テストしやすさが違うので、チームやプロダクトの規模で選ぶ

## HELP!
- Answer questions and reply to issues
- Wiki and articles
- Create samples (read guidelines!)
- Become core maintainer (merge-master)

## V2: What is coming
- Focusing on underlying patterns
  - MVVM, MVC, Redux, Flux...
- Other apps, different spec
- Improve platform for discussion
- Run UI tests with Continuous Integration

## Q&A
Q. サンプルは誰がメンテするの？
A. Googleの人がメンテするか削除する

Q. Spockのような他のテストフレームワークは？
A. espresso、JUnit。いろいろなテストフレームワークでテストを書くと比較できて良いので素晴らしい貢献だが、そうしていく予定はそこまでない。

Q. CIとは具体的に？
A. Firebase Test Labなどに配布するまでのコードを用意したい。

# エンジニアとして知っておくと幸せになれる（かも知れない）機械学習とTensorFlowのこと
https://speakerdeck.com/rindai87/talk-about-ml-and-dl-for-happy-engineers-life

### TensorFlowで遊ぶ
http://playground.tensorflow.org/

### Inception-V3
Googleが発案したモデル

### TensorFlow
Google内部での使用実績

- 音声認識
- スパムフィルタ
- 画像分類
- 翻訳

TensorFlowは分散処理の理論に似ているので、論文を読んでみてください。

[Tensorflow: Large-scale machine learning on heterogeneous distributed systems](https://arxiv.org/pdf/1603.04467.pdf)

管理者権限で

```
curl -kL https://bootstrap.pypa.io/get-pip.py | python
```

https://www.tensorflow.org/versions/r0.11/get_started/os_setup.html

```
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.11.0rc0-py2-none-any.whl
```

データセット：https://en.wikipedia.org/wiki/Iris_flower_data_set

# Android 開発のライブラリについて
20アプリを調査、216種類

カテゴリ別にランク3まで

## 言語系
1. Retrolambda
2. ThreeTenABP
3. AndroidAnnotations

## Support Lib
1. support-v4
2. appcompat-v7
3. recyclerview-v7

バージョンが古いのがちらほら
不具合が報告されてない限りは24時間以内にアップデートする

## PlayServices
1. play-services-gcm
2. play-services-ads
3. play-services-analytics

adsはadmobというよりもadvertiseIDを使いたいから

## Firebase
1. firebase-messaging
2. firebase-invites
3. firebase-analytics
4. firebase-config

## View injection
1. butterknife
2. dataBinding
3. kotterknife

## Parser / Protocol Buffer
1. gson
2. jackson-core
3. wire-runtime

gRPC使いたい。wire-runtimeでProtocol Buffer

## 通信
1. okhttp3
2. retrofit2
3. okhttp
4. volley

## 画像
1. Glide
2. picasso
3. glide-transformations

[Fresco](http://frescolib.org)を使うのがいいかも

## 動画・音楽
1. exoplayer
2. exoplayer-textureview
3. isoparser

exoplayer2で良くなったのでexoplayer-textureviewは使わなくてもいいかも

## DB / ORM
1. activeandroid
2. ormlite-android
3. sqlbrite
4. orma
5. realm
6. greendao
7. DBFlow

## Reactive
1. rxjava
2. rxandroid
3. rxlifecycle

RxBindingとかを使いこなしたい

## View / UI
1. android-observable-scrollview
2. recyclerview-animators
3. recyclerview-multiple-viewtypes-adapter

マテリアルデザイン系のライブラリなど
種類がすごい多い

## クラッシュロギング
1. crashlytics
2. crittercism-android-ndk-agent

## デバッグ
1. leakcanaly-android
2. timber
3. stetho

## SNS
1. facebook
2. twitter

## テスト
1. robolectric
2. junit
3. mockito

## 広告
1. fox / AppAdForce
2. adjust-android
3. flurry-android:analytics

## その他
1. conceal
2. parceler-api
3. bolts-android
4. commons-lang3
5. commons-io

onActivityResultっていうライブラリが便利
Permission dispatcherが便利

## まとめ
TLS 1.2にどうやって対応しているんだろう

来年春になったらDataBindingが1位になるのかなーとか

## 会社別、1アプリあたりのOSS利用個数
1. CyberAgent 52.9
2. ソウゾウ 39.0
3. DeNA 35.2
4. ヤフー 21.8

CyberAgentは他のメンバーが作ったものを使ってたりする文化がある。
OSSを自己責任でやっていく文化がある。

ヤフーはライセンスにまじめに取り組みすぎちゃってるのかも。

OSS使ってるのにライセンス表記がないアプリがちらほらあったので注意しましょう。

## リンク集
https://github.com/shibuya-apk/devfest-tokyo-2016

# ライトニングトーク大会
## あなたがLTすべき100の理由
HTML5 ConferenceのLT応募数が減少

- 喋っている人が主役
- 失敗しても大して覚えていない
- たった5分しゃべるだけで抽選とかお金とかを突破できる
- 調べてまとめるので勉強になる
- 結論なくても大丈夫
- 参加することに意味がある

## Firebase Custom AuthとGAE/GoでSlack認証してみた
認証はセキュリティ的に大変

### Google App Engine
豊富な無料枠

### Firebase Authentication
いろいろな認証ができる

Firebase Custom Authentication

SDKはNode.jsとJavaがある

jwt-goでCustom Tokenを作成する

## 日本Androidの会学生部活動報告
高校生から大学院生まで33名

## Chrome DevTools: TimelineのNetworkビュー
ネットワークの状態を見たい！

### Networkパネル
jsとの関係が分からない

### TimelineパネルのNetwork
いろいろ見られる

## OkHttpの通信をUIテストしたい
### 通信のテスト
正しいURLに大してリクエスト・レスポンスが発生したことをテストする

通信ログに対してassertしたい

OkHttpLoggingInterceptorのテストが参考になる

### なぜUIテスト
ボタンを押して、通信するが、UIが変化しない場合はテストが難しい。

ログを取ってassertする。

## みんなの知らないChromeアプリの世界
HTML/js/CSSで書ける

### sockets.tcpがあれば何でもできる
MySQL JavaScript Driverを作った

ネイティブのコードも動く

1度書けば、Chromeさえあればどこでも動く！__（今までは）__

ChromeアプリからWebへ

## BigQueryとGAPを2年使ってみた感想
GAPとはGoogleAnalyticsPremiumのこと。BigQueryをエクスポートしてくれる。

130万円かかる。

アクセスログをユーザーごどの行動でまとめて出してくれる。

JSONがくせもの。ネストされているとうまくいかない。

Viewを使うとできる。

## DroidKaigi 2017のご案内
懇親会でおいしいものが食べられる

2017/3/9,10に開催。2016/11/1 23:59 JSTが〆切

# さいごに
間違っているところがあったら指摘していただけると嬉しいです！ :bow: