DriodCon Japan 開催をもくろむ mhidaka と共に視察(半分観光)として DroidCon Montreal に行ってきました。
DroidCon Montreal
カナダで最初のDroidConということで、Welcome talk では Toronto じゃなくて Montreal だぜ、いぇい、というのりでした。
朝食と昼食が出たのですが、ホテルの朝食よりおいしかったです。
9時スタートに来てもらうには朝食は必須ですね。
セッションメモ
Keynote - An Open Source Advantage
Jake Wharton & Jesse Wilson (Square Inc.)
セッションスライド
https://speakerdeck.com/swankjesse/an-open-source-advantage-droidcon-mtl-2015
二人が交互に話すスタイルだった
オープンソースの利点と運営(メンテナンス)についての話
say no (nicely) が大事
Building First Class SDKs
Ty Smith (Twitter)
セッションスライド
https://speakerdeck.com/tysmith/droidcon-montreal-building-first-class-sdks-a-fabric-case-study
A Few "OK" Libraries
Jake Wharton (Square Inc.)
セッションスライド
https://speakerdeck.com/jakewharton/a-few-ok-libraries-droidcon-mtl-2015
OkHttp, Retrofit, Moshi で利用すべく、dataのinput/ouputのライブラリである
Okio https://github.com/square/okio を作ったという話
java.io.*の使いにくさについて滔々と語る
複数のコンセプトが含まれていて振る舞いに一貫性がないAPIは使いにくいし、わかりにくい
Okio は java.io.*, java.nio.*を補完するもので、主な interface は Source と Sink
Source の read() メソッドは1種類だけでシンプル
Source と Sink を継承した BufferedSource と BufferedSink が用意されており、これらを実装したクラスとして Buffer が用意されている
例えば
File file = // ...
Sink fileSink = Okio.sink(file);
Sink gzipSink = new GzipSink(fileSink);
BfferedSink bufferedSink = Okio.buffer(gzipSink);
bufferedSink.writeUtf8("Hello, hello, hello!");
bufferedSink.close();
とすると、"Hello, hello, hello!" を gzip ものがファイルに書き込まれる
File file = // ...
Sink fileSink = Okio.sink(file);
Sink gzipSink = new GzipSink(fileSink);
Sha1Sink hashingSink = new Sha1Sink(gzipSink);
BfferedSink bufferedSink = Okio.buffer(gzipSink);
bufferedSink.writeUtf8("Hello, hello, hello!");
bufferedSink.close();
のように Sha1Sink を GzipSink の前に挟むと、"Hello, hello, hello!" の Sha1 を gzip したものがファイルに書き込まれる
OkHttp の RequestBody には void writeTo(Buffered sink) というメソッドがあり ResponseBody には BufferedSource source() というメソッドがある
Moshi は Okio を利用した JSON のライブラリ
streaming 用には JsonReder / JsonWriter を使う
JsonWriter writer = new JsonWriter(sink);
JsonReader reader = new JsonReader(source);
オブジェクトへのマッピングは JsonAdapter を使うちなみに reflection ベース
Retrofit の Converter として MoshiConverter を指定できる
HTTP in a Hostile World
Jesse Wilson
セッションスライド
https://speakerdeck.com/swankjesse/http-in-a-hostile-world-droidcon-mtl-2015
https://bugsnag.com/
Debug Builds: A New Hope
Matt Precious (Square Inc.)
セッションスライド
https://speakerdeck.com/mattprecious/debug-builds-a-new-hope-droidcon-mtl-2015
Daggerとか使って、Endpoints とかパラメータをいろいろ変えられるデバッグ用画面を作る話
つまり U+2020 の説明
https://github.com/JakeWharton/u2020
アプリケーションプロセスを再スタートさせるtips
デバッグビルドで根本的な状態(staging から production に変えるとか)を変えるためにだけ利用すべし
ProcessPhoenix.triggerRebirth(getContext());
ProcessPhoenix.javahttps://gist.github.com/JakeWharton/9404647aa6a2b2818d22
Charles
http://www.charlesproxy.com/
スクリーンショット付きのバグレポートを簡単に作れるライブラリ Telescope https://github.com/mattprecious/telescope
つまり、U+2020 を Fork すべし!
Transition Your Development
Kevin Grant(Tumblr)
セッションスライド
(まだ見つからなかった)
前半はわりとトランジション・アニメーションの概念的な話
後半はコードも出てきた
ViewTreeObserver.addOnPreDrawListener() 使って animation のトリガーにするのは ugly だからダメ絶対
Tumblr で、Likeボタンのアニメーションあり、なし、でどっちがより LikeしてくれるかABテストしたけど、50%、50%で違いがなかったそうだ
Lollipop の Dialer のアニメーションのサンプル作ったので参考にしてねとのこと
https://github.com/kevinthecity/DialerAnimation
getBounds(), the Drawable Story
Jamie Huson, Lisa Neigut (Etsy)
内容は
https://speakerdeck.com/niftynei/getbounds-the-story-of-drawables-and-their-view-masters
とだいたい同じ
CustomDrawable の作り方の話
Devoxx 2013 での Cyril Mottier のセッションが参考になる
https://speakerdeck.com/cyrilmottier/mastering-android-drawables
Mastering Recyclerview Layouts
Dave Smith (NewCircle, Inc.)
セッションスライド
http://www.slideshare.net/devunwired/mastering-recyclerview-layouts
RecyclerView の基本的な使い方
GirdLayoutManagerで各位置の span size を変えるとか
RecylerView Playground
https://github.com/devunwired/recyclerview-playground
Building a RecyclerView LayoutManager
http://wiresareobsolete.com/2015/02/recyclerview-layoutmanager-redux/
Android SDK Reference
http://developer.android.com/training/material/lists-cards.html
Recipes for a Solid Foundation
Eric Cochran (IFTTT)
セッションスライド
(まだ見つからなかった)
1ActivityでFragmentの管理よろしくしてくれるライブラリ作ったそうだ
https://github.com/nightlynexus/dire
Introduction To Functional Reactive Programming On Android
Juan Gomez (Netflix)
セッションスライド
https://speakerdeck.com/juandg/intro-to-functional-reactive-programming-droidcon-mtl-2015
Introductionな話
RxJava は Started at Netflix
図がわかりやすかった
https://github.com/ReactiveX/RxJava/wiki/Filtering-Observables
Gotta Persist 'Em All: Realm As Replacement fo Sqlite
Siena Aguayo (Indiegogo)
セッションスライド
http://www.slideshare.net/SienaAguayo/gotta-persist-em-all-realm-as-replacement-for-sq-lite-46956020
Realm を使ってポケモンデータをあれこれする話
このお姉さんは Pokemon Master
スライドにも随所にポケモンがでてきた
(キレイハナ、ダストダス、ラティアス、ラティオス、フーディン、フシギダネ、ミロカロス)
フシギダネは bulbasaur と言うそうだ
DroidCon Japan?
日本でDroidConを開催したらJakewhartonが来てくれるかもしれない。がんばれ mhidaka
DroidConおわったー。 最後Jakeを見かけたので、「会いたいって言ってる開発者がいっぱいいるから日本来ることがあったら連絡してよ」って言ったら、「DroidCon Japanのときだね!」って言ってたので期待しよう
— zaki50 (@zaki50) 2015, 4月 10
おまけ
モントリオールはフランス語圏(フランス語圏としてはパリについで2番目の経済圏らしい by roishi情報)なので 町中の表示がみんなフランス語でした。SORTIE は exit のことだということを覚えました。
ノートルダム大聖堂にも行きました(入場料5$)。昼の12時には鐘がなっていました。
マリー・レーヌ・デュ・モンド大聖堂にも行きました(入場料無料)。