giantneco’s blog

技術メモ

Google I/O 2018 day 3

5 月上旬に行われた Google I/O 2018 に参加してきた。 この記事は Google I/O 2018 の 3 日目の記事である。

f:id:dexil:20180618011211j:plain

Android Jetpack: manage UI navigation with Navigation Controller

www.youtube.com

Android Jetpack で導入された Navigation の更に詳しい話。

Navigation では Navigation エディタか XML で記述される Navigation Graph を定義する必要がある。 Navigation Graph は画面遷移とありうる遷移先の設計図になる。 遷移先でしかないので、どういうタイミングで遷移を起こすかはコードで表現する必要があるが、 その際には NavigationController を使うのが勧められていた。

ここで「遷移先」になる単位は Fragment なので、 Activity についてはなるべくアプリケーションのエントリポイント・アプリケーションのオーナーとして扱ったほうがよいし、 アプリケーション全体の遷移(画面下のナビゲーションバーやナビゲーションドロワー)などでの遷移は androidx の NavHostFragment に委譲するのがよい。

Navigation には Safe Args も含まれていて、 画面遷移時の引数授受を型安全にするボイラープレートを生成してくれる Gradle プラグインが新しく提供される。

Deep Linking についてもいろいろ便利な機能を提供していて、 アプリショートカットなどの明示的な Deep Link は NavDeepLinkBuilder を使うと簡単に作成できる。 対して暗黙的な Deep Link は Navigation Graph の XML<deepLink> タグを記述しておけば良い。

Android Jetpack: sweetening Kotlin development with Android KTX

www.youtube.com

Android KTX 含めて、Kotlin を使った Android 開発のテクニックの話だが、 ライブラリ開発者など向けの Kotlin フレンドリーに書くにはどうすればいいかの話もあった。

Android KTXAndroid をより Kotlin らしい記述で実装できるようになるライブラリで、 例えば Kotlin で次のように書いていたのが

val notification = ContextCompat.getSystemService(this,
    NotificationManager::class.java)

Android KTX では次のようにかけるようになる。

val notification = systemService<NotificationManager>()

Android KTX は次のような方針で作られているそうだ: - 既存の機能に合わせて、上流の機能にリダイレクトする - サイズ、アロケーションで問題にならない限り inline にする - Kotlin 特有の機能を活用する - コードゴルフ API は避ける - 単一 and/or 特定の利用法のための最適化は避ける

また Java で Kotlin フレンドリーなライブラリを書くための KEEP-110 で提案されたアノテーションが紹介されてた。 紹介されたアノテーション@ExtensionFunction, @ExntensionProperty, @KtName, @DefaultValue の 4 つで、例えばこの内の @ExtensionFunction を使うと

class TextUtil {
    @ExtensionFunction
    @ktName("isDigitsOnly")
    public static boolean isDisigtsOnlyString(@NonNull CharSequence str) {
        // ...
    }
}

Java 書いておくと、

Kotlin 側では isDisigsOnly という拡張関数として上記の関数を呼び出すことができる。

val onlyDigits = phoneNumber.isDigitsOnly()

参考: - https://noti.st/jakewharton/ZvuDxC/present

TensorFlow and deep reinforcement learning, without a PhD

www.youtube.com

TensorFlow を使ってピンポンの AI を作る話。

内容としては API の使い方だけではなくて、機械学習の考え方を含めて解説してくれているので、機械学習の知識がない人にはいいんじゃないかと思う。

Codelabs でも同名のコースがある。ちらっと見ただけだが結構良さそう。

https://codelabs.developers.google.com/codelabs/cloud-tensorflow-mnist/index.html?index=..%2F..%2Findex#0

Improve app performance with Android Studio Profilers

www.youtube.com

Android Studio Profiler の話。 消費電力もプロファイルできるが、Android P からに限られるみたい。

Device provisioning and authentication with Android Things

www.youtube.com

Android Things のプロビジョニングと認証の話。

バイス側が行う認証は Attestation というらしい。

Advances in machine learning and TensorFlow

www.youtube.com

最近の ML が出した成果の話。 医療分野、天文学、ロボット、音楽などの分野で ML がどのように使われているか、またどういう成果を出したかが紹介された。

紹介されたなかでは、magenta https://magenta.tensorflow.org/ という AI でアートや音楽を作るプロジェクトがデモがあったのもあって興味深かった。 天文学では Gan で宇宙(の画像)を生成する事例が紹介されてたし、アイディア次第で本当にいろいろできるんだなという感想になる。

Distributed TensorFlow Training

www.youtube.com

TensorFlow を分散して動かして学習させる話。 分散での学習にはいろいろ方式があって

  • 中央集権的なクラスタにするかどうか
  • ネットワークを密にするか疎にするか
  • データ並列にするかノード並列にするか
  • パイプライン化するかどうか

などの選択肢があるが、TensorFlow では方式は選択できるようになっているとのこと。

Codelab

この日の Codelab では直前のセッションで話を聞いた Navigation のコースを試してみた。 聞いてすぐ試せるのはやっぱりいい。

f:id:dexil:20180618011113j:plain

これでシール 4 つ集まったので、次回の Google I/O のチケットがもらえる。

Sandbox

Sandbox は大体 3 日目に回ってきた。AR & VR のブースがちょっと観るだけになってしまったのが今考えるともったいない。

f:id:dexil:20180618011140j:plainf:id:dexil:20180618011149j:plain