開いてるアプリケーションが多いので、Mission Control 使うようにしてみようと思ったけど、切り替え時にグイングイン動くのがつらいなと思ったのでなるべく減らすようにする。
システム設定 > アクセシビリティ > ディスプレイ > 視差効果を減らす
開いてるアプリケーションが多いので、Mission Control 使うようにしてみようと思ったけど、切り替え時にグイングイン動くのがつらいなと思ったのでなるべく減らすようにする。
システム設定 > アクセシビリティ > ディスプレイ > 視差効果を減らす
adb shell bmgr backupnow
adb shell bmgr restore
Auto Backup for Apps | Android Developers
コマンドを実行するとTransport errorというのが出ていて???ってなってたけど、バックアップが有効になってなかった事とバックアップアカウントが設定されていないのが原因だった。
こういう風にRetrofit2を利用してた。
new Retrofit.Builder() .client(clientBuilder.build()) .baseUrl(...) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build();
APIを叩くコードを書くたびsubscribeOn
を指定していてめんどくさかったので調べたらcreateWithScheduler
を利用すればどうにか出来ると知った。
new Retrofit.Builder() .client(clientBuilder.build()) .baseUrl(...) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io())) .build();
便利
お産合宿にいってきた。
「お産合宿」はデザイナーやエンジニアなどの「クリエイター」という枠にとらわれず、普段は別々の仕事をしているさまざまな職種のスタッフが、所属する部署や職種を飛び越えてチームを作り、自分たちが「もっとおもしろくできる」と思うものを存分に作る、そんな合宿です。
【 #ペパボお産11 】開催決定!応援よろしくお願いします! | お産合宿11 | GMOペパボ株式会社
チームメンバーはminneのマネージャー二人とminneのCTL二人の計四人です。
お産合宿の前には全く開発せずにお産合宿でのみ開発する気持ちでいったら、なかなか大変でしたがそれも含めて楽しかったです。
今の会社に入って3年過ぎて、ついに4年目なのですが、お産合宿は初参加でした。昔は趣味で吉高由里子関連のアレコレをつくっていた僕も今では汚れてしまい、お金がもらえないとつくる力が無になっていたのですが、お産合宿に参加する人たちや作られたものたちを見てるとテンションが上がり、ちょっと作るか…!という気持ちになったので参加してよかったです。次があるなら次はサービス作ってみたいナー
みんなが作ったのすごくてビビった #ペパボお産11
— ひさいち (@hisaichi5518) 2017年8月30日
Preferences -> Build, Execution, Deployment -> Required Plugins
で設定出来た。+を教えて出てきたダイアログがこんなんで、Pluginのところがスクロール出来る。今の今まで、スクロールが出来ることに気づいてなかった………なんてこった…
設定するとこんな感じで表示される。良さそうなら保存すれば、 .idea/externalDependencies.xml
が作成される。
あとは .gitignore に .idea/externalDependencies.xml
を除外するようにしておくとよい。
というのをオペレーターで出来ないものか…?と思って調べてたけど、チームメンバーに「こうやればいいよ」と言われたのがシンプルだった。たしかにな……………
SingleSubject<String> subject = SingleSubject.create(); Single<String> localSource = Single.create(emitter -> { Log.i("TEST", "local"); // emitter.onSuccess("data1"); emitter.onError(new RuntimeException("local error")); }); Single<String> remoteSource = create(emitter -> { Log.i("TEST", "remote"); // emitter.onSuccess("data2"); emitter.onError(new RuntimeException("remote error")); }); localSource.subscribe(string -> { Log.i("TEST", "local source onSuccess"); subject.onNext(string); }, Throwable::printStackTrace); remoteSource.subscribe(string -> { Log.i("TEST", "remote source onSuccess"); subject.onNext(string); // local に保存 }, subject::onError); subject.subscribe(string -> Log.i("TEST", string), Throwable::printStackTrace);
追記:
SingleSubjectだとonSuccessのあとにonErrorがくるとエラーになるので、PublishSubjectなどにしてtake(1)
とかを使うといい気がした。
複数のデータソースから値を取り出すのをRxのconcatで実現するという記事を見て、なるほど!!と思った。ただ、エラーになった場合どうなるのかわからなかったので確認した。
以下のようなコードの場合は、localSourceのErrorがonErrorにきてremoteSourceのErrorはこない。(というか、そもそもremoteSourceが実行されない)
Single<String> localSource = Single.create(emitter -> { emitter.onError(new RuntimeException("1個目のError")); }); Single<String> remoteSource = create(emitter -> { emitter.onError(new RuntimeException("2個目のError")); }); Single.concat(localSource, remoteSource).subscribe(string -> Log.i("TEST", string), Throwable::printStackTrace);
localSourceの読み込みに失敗したら、remoteSourceのデータを使いたいと思ったので、onErrorReturnとfilterでどうにか出来ないかと思った。これでremoteSourceのErrorがonErrorにくるようになる。ちなみに空文字なのは、RxJavaはnullを許容しないからです。
Single.concat(localSource.onErrorReturn(__ -> ""), remoteSource) .filter(""::equals) .subscribe(string -> Log.i("TEST", string), Throwable::printStackTrace);
またはObservableにしてempty()
を使うというのがコード自体は長くなるがfilterしなくていい(変な仕様を作らなくてよい)ので良い気がした。
Observable.concat(localSource.toObservable().onErrorResumeNext(Observable.empty()), remoteSource.toObservable()) .first("default") .subscribe(string -> Log.i("TEST", string), Throwable::printStackTrace);
もっといい方法ありそう!!! あったら教えてください
追記:
教えて頂いた!Maybe!onErrorComplete() そもそも知らなかった…
コメント書けなかったのでこちらで。ObservableじゃなくてMaybeを使うのはどうでしょう。こんな感じです。https://t.co/1mtDSIEVDv
— Hiroshi Kurokawa (@hydrakecat) 2017年8月24日