DroidKaigi 2017 DAY.01 (Mar 9th, 2017) 参加レポート

### Droid Kaigi DAY.01 (Mar 9th, 2017) 参加レポート

* [２日目](http://qiita.com/yanap/items/089224e6d442dc718077)

殴り書いてるところは暇見て直す予定


下記を見ずに５Fに行かず建物の周りをぐるっと周りました。

* [スッキリわかる！ベルサール新宿グランドへの行き方](https://droidkaigi.github.io/2017/route.html)

  始まる前はすごい並んでました。

* https://github.com/DroidKaigi/conference-app-2017

  droidkaigi2017 公式アプリのソースコード

* ドリンク飲み放題
* バリスタっぽい人がおしゃれなコーヒーを作ってくれる。飲んでないけど。
* 弁当もらえる
* 電源はあるが前の方の席だけ
* お菓子コーナーにお菓子とマフィンがあり自由にお取りください。
* 企業ブース色々

* [タイムテーブル](https://droidkaigi.github.io/2017/timetable.html)

  Room1からRoom6まであり聞きたいセッションを選んで受講する。

* [#droidkaigi](https://twitter.com/hashtag/droidkaigi?vertical=default&src=hash), [#droidkaigi1](https://twitter.com/search?f=tweets&q=%23droidkaigi1&src=typd), [#droidkaigi2](https://twitter.com/search?f=tweets&q=%23droidkaigi2&src=typd),
[#droidkaigi3](https://twitter.com/search?f=tweets&q=%23droidkaigi3&src=typd), [#droidkaigi4](https://twitter.com/search?f=tweets&q=%23droidkaigi4&src=typd), [#droidkaigi5](https://twitter.com/search?f=tweets&q=%23droidkaigi5&src=typd), [#droidkaigi6](https://twitter.com/search?f=tweets&q=%23droidkaigi6&src=typd),


受講したセッションについて記載していきます。

- 10:40 - Room3 逆引き マテリアル デザイン
- 11:50 - Room1 minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
- 12:40 - Room1 インスペクションとAndroid Lint Custome Ruleによる、単一責任実装の実践
- 14:20 - Room3 Data Bindingで開発を気持ちよくしよう
- 14:50 - Room5 Android Resources Refactoring
- 16:00 - Room5 Exploring new Android layouts
- 17:10 - Room1 Viewを動的に変化させるアプローチ
- 18:00 - Room3 What's New in RxJava 2.0

#### 感想

* マテリアルデザインガイドライン読む
* DataBinding便利
* PullRequest template いいね
* デザイナー欲しい

#### Room3 10:40 - 逆引き マテリアル デザイン


* [逆引き マテリアル デザイン スライド](http://yaraki.github.io/slides/droidkaigi2017/#1)

* https://www.youtube.com/watch?v=Q8TXgCzxEnw

* [マテリアルデザイン ガイドライン　英語](https://material.io/guidelines/)
* [マテリアルデザイン　ガイドライン whats-new](https://material.io/guidelines/material-design/whats-new.html)

  定期的に更新されているので、whats-newも確認してください。

ガイドラインは絶対に従わないといけないものではなくて

ガイドラインを踏まえたオリジナルのデザインを実装してください。

* [マテリアルデザイン　ガイドライン 日本語](https://material.io/jp/guidelines/)

  日本語もあるので、まだ読んでない人は読んでください。

#### Components - Grid lists

タッチフィードバック重要！

画像や文字を含んだアイテム上にタッチフィードバック

タップしてから0.1秒でも何も反応がないと人間はストレスに感じる

#### カスタマイズのやり方

ググってQiitaにのってるのをコピペしたらこの講義の意味がないので
ドキュメントを見たり、ソースコードを見てカスタマイズするやり方を教えます。

* http://yaraki.github.io/slides/droidkaigi2017/#26

@style と ?attr は 何が違うのか
FABの色がどこから来ている
明示は Widget.MyApp.FloatingActionButton
暗黙は .FloatingButton
とか

styleもテーマも同じ
keyとvalueでマッピングしてるだけ
?attrはテーマで定義されているものをとって来てください

#### elevation

http://yaraki.github.io/slides/droidkaigi2017/#34

FABとsnackbarは８
snackbarが出るとFABがかぶる
CoordinatorLayout
dodgeInsetEdges
同じエレベーションのものの場合に避けることができる
layout_insetEdge 避けさせることもできる
anchor gravity
behavior

#### 状態の変化を動かす

http://yaraki.github.io/slides/droidkaigi2017/#40

パッと画像が大きくなるものを作りたい
今、アニメーション中なら逆回転
Transition API
API レベル 19
Animatortion
様々なTransition
ビジビリティを変えたい
motion - choreography
pathmotion
transition propagation

#### まとめ

マテリアルデザインガイドラインを読む
what's new を読む
アニメーション中の時間が長すぎると良くない

Q & A
ネストするフラグメントもサポートしているのでバグがあったら報告してください。
Android プラットフォームサポートライブラリ
b.androind.com

#### 11:50 -　Room1 minneにおけるテスト〜リリース〜リリース後にやっている事の紹介

* https://www.slideshare.net/masatakakono1/minne-72969795

* http://robolectric.org/

モックを作成してUnit Test
Local Unit Testの方がInstrumented testより早い

* https://github.com/drone/drone
* https://speakerdeck.com/gs3/pepabowozhi-eruda-tong-ciji-pan-toren

Google Play
段階的な公開というのがある
２０％リリース
２営業日５０％リリース
２営業日後１００％リリース

#### 12:40 - Room1 インスペクションとAndroid Lint Custom Ruleによる

https://github.com/cch-robo/Android_Lint_SRP_Practice_Example

#### 14:20 - Room3 Data Bindingで開発を気持ちよくしよう

* https://github.com/oldergod
* https://github.com/oldergod/DataBindingDemo

#### 14:50 - Room5 Android Resources Refactoring

* https://github.com/konifar

リファクタリング
2016 1 - 2017 2
なぜ、私はこれについて話したいのか
スタディサプリ、Quipper
インドネシア、フィリピン、メキシコ

複雑なリソース
1. 似てるテーマとスタイル
2. 名前の規則がない

リファクタリングの手順

colors.xml, dimens.xml

extracted theme style

colors.xmlとdimens.xmlにまとめる

1. colors

color palette

グレスケール

naming rule, bad naming

色はデザイナーによって定義される

1. colors_new.xml を作る

小さいPRを送るのが良い
大きいとコンフリクトするから
1歩１歩やっていく

2. dimens.xml

dimens_base.xml
dimens.xml

elevation

prefix
space space_16px

デザイナーと毎日MTGしたり、Slackで質問したりする

3. theme.xml

android:windowBackground テーマを設定する

product flavor

PullRequest template

4. styles.xml

いくつかに分割する
styles_~~~.xml
style_login.xml

style.xml
Button.Primary

style_settings.xml

5. drawables

Naming Rule
name prefix
ic_{name}_{size}.png
ic_play_24.png

databinding adapter

Namine Rule

どうやって、エンジニアとデザイナーがコミュニケーションをとるのか
毎日のMTGで質問する。詳細なデザインについて、ごめん
私は、あなたの質問にこたえてますか？

#### 16:00 - Room5 Exploring new Android layouts

* https://twitter.com/thagikura

ConstraintLayout
FlexboxLayout

new layout

16ms これって何でしょう？

60fps, 30fps

16ms または、ないか

what happens view is drawn

measure

determines the size

layout

determines the location

draw

draw itself on the screen

階層構造
深くない
linear layout

ConstrainLayout
RelativeLayoutに似てる

ビューの連携
sibling view
parent
guideline

view must have at least two Constraint

performance

ConstraintLayoutの方が従来よりパフォーマンスが少し良い

Chains

Creating a Chain

Weighted Chain

https://t.co/GROsdlU6T6

アニメーションが簡単にできる

FlexboxLayout

Advanced LinearLayout

Main axis, cross axis

example attributes

change direction

* https://github.com/googlesamples/android-ConstraintLayoutExamples

* https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html

* https://github.com/google/flexbox-layout

layout_flexGrowを適用する前は画像が縦に並ぶけど余白ができる
適用したあとは画面にうまいこと違うサイズの画像を当てはめてくれる

flexbox 0.2.5 stable

* https://github.com/google/flexbox-layout

#### 17:10 - Room1 Viewを動的に変化させるアプローチ

DataBinding
ConstrainLayout

アニメーション
AppBarLayout

テキストだけが動かせる

elevation

実装のイメージ
なにをトリガーとして動きをつけるのか？
どの座標とか大きさとか計算
ビューに反映する

CoordinatorLayout
タッチイベントが辛い
ネスティドスクロール

scroll, RecyclerView, AppBarLayout
viewの属性値

スクロール量の値を計算する
ViewPagerでの計算

position + positionOffset
0除算に注意

Viewに設定する属性値の計算DataBinding
DataBindingが強い

translationY
fabFactor * @dimen/fab_offset

FABの現れ方
DataBindingで計算できる

OnLayout Change Listenerのループ
CPUをじわじわ食う

上下のスクロールの際にアイコンに対して動いている

レイアウトエディタでxml触ると怒られる

LayoutParamsをいじるのはパフォーマンス的に悪い

* https://github.com/cattaka

* https://github.com/cattaka/LearnAnimation

#### 18:00 - Room3 What's New in RxJava 2.0

* https://t.co/vm36TwG39E

* https://speakerdeck.com/hkurokawa/whats-new-in-rxjava-2

イベントのシーケンスをストリームとして扱う
データがくると
データがくるたびに反応する
偶数のものを見つけて自乗したものを欲しいとする
関数型プログラミング
RxJava2
リアクティブストリームずに準拠した
れっきとした仕様
http://www.reactive-streams.org/
リアクター、アッカ
java9
フローAPI
javaの標準APIとして使われる
非同期のストリーム処理の
４つのインターフェースが定義されているだけです

publisher

subscribe

Obserbable

onSubscribe

どれくらいデータが欲しいか要求できる

イベントがくるたびにonNextが呼ばれる
onNextにnullが
rxjavaではonNextにnullを渡すことはできない

subscription

dorekuraのデータが欲しいか

Processer
pub, subを継承してるだけ

onSubscribe
with non block
バックプレッシャー

Backpressureはよく聞くけど何なん

なかったら、どういうまずいことが起こるか

pub データを貯めれるけど
オーバーフローしてしまう

どれくらい処理できるか、通知してくれる？

世の中のデータソースには２つある

ディスクの読み出し
subが要求するだけ返す

UIの
タップした瞬間にデータを返さないといけない

パッケージネームが変わったり

Backpressureを意識して使えるようになった
nullを使えなくなった。

NPE

toList/toMap

空リストかもしれませんけど
ファーストORデフォルト

条件を満たすものを返す

takeFirst

onCompleteして欲しい

オペレーター返す型が
single
completable
で済む

retrofitはsingleとcompletableをサポートしている

パフォーマンスがよくなりました

* https://github.com/akarnokd/RxJava2Interop
そんなにコードが綺麗じゃないので、ちょっと使って見ようかなっていうのは良い

* https://github.com/ReactiveX/RxJava

Search Structurally
Android Studio

Structural Search