Let's Splitを作った話

Kinesis -> ErgoDox -> Let's Split(NEW!) Kinesisから数えて三台目のメカニカルキーボードで、初めての自作です。 パーツ 大体「格子配列で左右分離型の超コンパクトなキーボード "Let's Split" を組み立てたよ」と「nicinabox/lets-split-guide」を参考にパーツを集めました。 ケースは参考サイトとは異なり、M2ネジ使うタイプの方を使ったのでそんな感じのリストになってます 名称 値段 調達先 PCB $8.99 x 2 MEHKEE ケース $40 Ponoko

[Android] Architecture ComponentsのViewModelは如何にしてRotationを生き残るか

TL;DL; retainInstance = trueなFragmentにキャッシュされているので、Activity/Fragmentが本当に殺されるまで生き残ることができる。 Google I/O 2017で、Architecture Components という新しいライブラリ群が発表されました。 LiveData, ViewModel, LifecycleObserver, LifecycleOwner, Roomといったこれらのライブラリは、開発者がより強固で、テスタブルで、かつメンテナンス性が高いアプリケーションを作るための手助けとなるべく作られています。 今回はその中でもViewModelについて少し調べてみました。 What is ViewModel? 詳しい説明はViewModelのリファレンスに譲りますが、簡単に言うと「Activity/Fragmentのローテーション等による再生成をこえて状態を保持するためのコンポーネント」です。 今までActivity/Fragmentのメンバ変数に保存していたような値や非同期処理をViewModelに書いておけば、Activity/

2016年を振り返って

2016年もあと一時間半くらいですし、振り返りなどやります。 仕事 今年は主に改善業務をやっていました。 大体下記のような感じです CIでAndroidLint/ChecyStyleかける モデルクラスの大改修 APIリクエスト周りの処理をモデルクラスから切り出す Realm周りの処理をモデルクラスから切り出す モデルクラスが互いに依存しあわないようにユースケース層を作る テスト、テスト、そしてテスト モデルクラスがAPIリクエストをすればDBアクセスもして、モデルクラスが別のモデルクラスをメンバー変数に持ってたり…と結構マッチョな感じになっていました。 そこで、単一責務を意識してAPIリクエストをするクラスやDBアクセスするクラスを作り、モデルクラスはそれらを相互に橋渡しするだけのクラスにしました。最近流行りのレイヤード・アーキテクチャってやつです。 また、モデルクラスが互いに依存せず、それぞれの役割に徹するためにユースケースクラスを用意しました。モデルクラス間で行ったり来たりするような処理はここに書いていく感じです。 ここも(ユースケースクラスと言うくらいですから)単一責務を意識して、一つのユースケースクラスが複数の仕事をしないように心がけてます。 あとはリファクタリングしたところはしっかりテストを書いてました。弊社アプリのテストは儂が育てた、といってもあながち間違いではないですねw

repeatWhenでfilterを使ってもonCompletedは呼ばれない

掲題の通りです TL;DR Observable#repeatWhen使って複雑な繰り返し判定するときはObservable#filterじゃなくてObservable#takeWhileを使うとonCompletedまで呼ばれる 大量のデータをローカルに同期するAPIがあって、ページングの要領で複数回APIを叩いてすべてのデータを同期するとします。 こんな感じのコードなら動きます。 boolean isLoading = false; public Completable sync() { return Observable.defer(() -> { if (isLoading) { return Observable.empty(); } isLoading = true; return syncData() }) .repeatWhen(observable -&