potatotips #34 に参加してきました

**potatotips #34 (iOS/Android開発Tips共有会)**に「Android ブログまとめ枠」として参加させていただきましたので、その報告になります。

# potatotips #34 概要

- [connpass](http://potatotips.connpass.com/event/41363/)
- [wiki](https://github.com/potatotips/potatotips/wiki/potatotips-34)
- [togetter](http://togetter.com/li/1041273)
- [potatotips #34にブログ枠で行ってきました](http://nonchalanttan.hatenablog.com/entry/2016/10/27/100000)

# LTまとめ（発表順）

## ブラウザアプリSmoozを作る中で会得したWKWebViewのTips

発表者 : **sassy_man_yuichi**

https://speakerdeck.com/maxkato/burauzaapuri-smooz-wozuo-ruzhong-dehui-de-sita-wkwebviewfalse3tufalsetips

- 真っ白になる問題
    - メモリ不足によるもの
    - ページの有無をチェックして、なければリロード
- タッチダウンを取得したい
- WKWebViewのjsのデバッグ
    - SafariのWebインスペクタから

## DownloadManagerのイベントをRxJavaで処理したらいい感じだった

発表者 : **Reyurnible**

https://speakerdeck.com/reyurnible/rxdownloader

- [DownloadManageer](https://developer.android.com/reference/android/app/DownloadManager.html)の問題点
    - コールバック処理がreceiver経由で使いにくい
    - 連続でDLするときに使いにくい 
- つくったもの
    - [RxDownloader](https://github.com/Reyurnible/RxDownloader)
    - Rxとインタフェースが揃う

### 個人的メモ

似たような所感をもったので（偉そうですみません）メモ

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">AndroidもiOSもRxなインターフェースでラッピングして利用するのがデファクトスタンダードになりつつあるのかしら？ <a href="https://twitter.com/hashtag/potatotips?src=hash">#potatotips</a></p>&mdash; 所 友太 (@tokorom) <a href="https://twitter.com/tokorom/status/791223322537099264">2016年10月26日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## 5分でわかるSE-0116(id-as-any)

発表者 : **takasek**

https://speakerdeck.com/takasek/5fen-dewakaruse-0116-id-as-any

- [SE-0116](https://github.com/apple/swift-evolution/blob/master/proposals/0116-id-as-any.md)（Swift EvolutionのProposalsのうちの１つ）
- Swift3.0よりObjcの`id`型が`AnyObject`ではなく`Any`として扱われるようになった
- 「`AnyObject`型が廃止された」「`Any`がオブジェクト型になった」ということではなく「`Any`から`AnyObject`へのブリッジ」が完備された

## 忌しきStackOverFlowをどうにかする

発表者 : **kozmats**

<iframe src="//www.slideshare.net/slideshow/embed_code/key/2OMB0Go1nEXHWn" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/kozmats/androidstackoverflow" title="Androidの忌しきStackOverFlowをどうにかする" target="_blank">Androidの忌しきStackOverFlowをどうにかする</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/kozmats">Koji MATSUBARA</a></strong> </div>

- `stack overflow`遭遇したことありませんか？（Q&Aサイトのほうではなくエラーとしての）
    - ビューのレイアウトが複雑（ネストが深い）だと起きやすい
    - Android 4.xだと起きやすい
    - 起きたときに直すのが面倒なもの
- [Stetho](http://facebook.github.io/stetho/)
    - レイアウトの構造をいい感じに見れるツール
    - FB製 
    - 他人のみるときなんかにもいいとのこと

### 個人的メモ

Xcodeの[View Debugging](https://developer.apple.com/jp/documentation/ToolsLanguages/Conceptual/Xcode_Overview/Debugging/ExaminingtheViewHierarchy.html)みたいなことをAndroid開発でもやりたいと思っていたのですが、、、`Stetho`知らなかったので試してみよう

## try! Swift NYC / Brooklyn Swift Develpers

発表者 : **jpmartha**

（資料見当たらず）

- try! Swift NYC / Brooklyn Swift Develpers に参加してきた話
- try! Swift NYC の会場の写真など
- Brooklyn Swift Develpersでは`SPM`についての話をしてきた

## BottomNavigationView

発表者 : **nankiti**

<iframe src="//www.slideshare.net/slideshow/embed_code/key/GQsGRfv4YYjqY5" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/yukinanri0611/bottom-navigation" title="Bottom navigation" target="_blank">Bottom navigation</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/yukinanri0611">Yuki Nanri</a></strong> </div>

- BottomNavigationView
    - iOSの`UITabBar`みたいなもの
    - Googleがずっと嫌っていたもの、ハンバーガメニュー使えと
    - 今年になってから折れたとのこと
    - `Support Library 25.0.0`から使えるように
    - 横スワイプみたいなことはできない（`ViewPager`は使えない）
    - アイテムの最大数は５個まで、それ以上設定するとException

### 個人的メモ

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/ushisantoasobu">@ushisantoasobu</a> 個人的な見解ですが、ガイドラインにも載ったので温度感としては「使っちゃって〜！」ってくらいかもしれません <a href="https://t.co/zkBVUDNWQR">https://t.co/zkBVUDNWQR</a></p>&mdash; Shohei Kawano (@shaunkawano) <a href="https://twitter.com/shaunkawano/status/791231575677546497">2016年10月26日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## Useful Command Line Tools in Swift 3

発表者 : **giginet**

https://speakerdeck.com/giginet/useful-command-line-tools-in-swift-3

- コードレビューでPlaygroundをよく使う => いつの間にかたくさんのPlaygroundファイルが散らかってしまっているという課題
- つくったもの
    - [Toybox](https://github.com/giginet/Toybox)
    - Playgroundを管理するCLIツール
    - Swift製
    - [Commandant](https://github.com/Carthage/Commandant)を使ってる
    - 配布がつらい（他所のを真似るのが一番）

### 個人的メモ

レビュー時にPlaygroundを使うというのをやったことがなく、本人にもどんな感じで使っているのかお話直接いただいたのですが、、、まだまだ自分のレビュー力のなさを痛感した

## 休憩

:pizza: :pizza: :pizza: :pizza: :pizza: :pizza: 
:beer: :beer: :beer: :beer: :beer: :beer: 

## Grenade - Type safe intent buidler

発表者 : **kobakei**

https://speakerdeck.com/kobakei/grenade-type-safe-intent-buidler

- 明示的intentを自動生成する
- つくったもの
    - [Grenade](https://github.com/kobakei/grenade)
    - コンストラクタの引数で`foo, bar1`または`foo, bar2`みたいなことがやりたかった
    - （サンプルソースみたほうがわかりやすいと思うので以下に書いておきます）

```java
@Navigator
public class DetailActivity extends AppCompatActivity {

    // Required params
    @Extra
    String foo;
    @Extra
    int bar;

    // Optional params
    @Extra @Optional
    String hoge;
    @Extra @Optional
    boolean fuga;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}
```

```java
startActivity(new DetailActivityNavigator(foo, bar)
    .hoge(hoge)
    .fuga(fuga)
    .flags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)
    .build(context);
```


## Layered Architectureで各層の依存関係解決をSwinjectを用いて行う

発表者 : **kgmyshin**

https://speakerdeck.com/kgmyshin/layered-arch-with-swinject

- （時間の都合上スライドの「実装例」のところから）
- こういう感じでつくってみたら良かったという話
- `Layered Architecture` （ここをうまくまとめることができなかったので、スライド及び[iOSのまとめブログ](http://nonchalanttan.hatenablog.com/entry/2016/10/27/100000)でご確認ください。申し訳ございません :bow: ）
- テストしやすいこと、シングルトンに依存しない

### 個人的メモ

- 「具体クラスを知らなくていい / データをRealmなのかネットーワークからとってくるのかは気にしなくていい」みたいな設計は会社でもよく聞く
- [Swinject](https://github.com/Swinject/Swinject)知らなかったので今度調べる

## Redex - A bytecode optimizer for Android apps

発表者 : **shaunkawano**

https://speakerdeck.com/shaunkawano/redex-a-bytecode-optimizer-for-android-apps

- [Redex](http://fbredex.com/)
    - dexを最適化するツール
    - fb製
- `ProGuard`との違いは？
    - `ProGuard`は`.class`ファイルを最適化
    - `ProGuard`は未使用変数は取り除いてくれる、`Redex`はインラインのソースコードを取り除いてくれる
    - `Redex`はとくにruleを設定する必要がない
- Sample Output : `4.6MB` => `4.3MB`
    - あまり減っていないように見えるかもしれないが、途上国ではアプリサイズはセンシティブ

## Apple Pay x PAY.JP の概要

発表者 : **laiso**

http://qiita.com/laiso/items/1bc02e05ffde8b8cec36

### 個人的メモ

- Apple Payの話嬉しい
- Qiitaに発表がまとめれているというのは嬉しい

## TransactionTooLargeException

発表者 : **KeithYokoma**

（資料見当たらず）

- `TransactionTooLargeException`について
    - プロセス間通信で発生するもの
    - メモリの量が多いときに発生するもの（1MBまで）
    - １つ１つの通信でではなく、１つのプロセスが扱う合計のメモリの量
    - intentの起動もプロセス間通信が発生している
        - `TransactionTooLargeException`が起こりうる例としては、intentにbitmapを渡していたもの
- 似たようなエラーとして`CursorWindowAllocationException`

# 最後に

- 久しぶりに勉強会参加したけどやっぱ面白い :smile: 
- 間違い等ありましたら、お手数なのですがご指摘いただけると助かります :bow: