いわたんち

いわたんちは概念となりました

2020年振り返り

時系列で振り返り

雑に月ごとに

1月

  • 熱海とか行きながら岐阜で年越し
  • コストコでオラフのぬいぐるみを買う

2月

  • 大阪へ家族旅行で行く
    • 今思えばコロナに心配しなくていい最後の旅行だった
  • 会社統合の話を聞く
    • 初めはもっと別の会社かと予想してたけど結果としては中々びっくりした記憶

3月

  • 水出しコーヒー出すやつ買った
  • 電動ミルを買った

4月

  • 息子が1歳になった
  • コロナで入園1週間で自粛
  • 自家焙煎を始める
  • 会社が統合された

5月

  • 近所の人らと仲良くなる
    • 台風19号で冠水した時に面識は出来てたけどもコロナで子供達が家の前で遊ぶようになって更に仲良くなった
  • 息子一人歩きしだす
  • iPad Pro買った

6月

  • 保育園復帰
  • 妻産休開ける
  • 老後の趣味としてギターを買う
    • 最近は全然弾けていない
    • 老後の趣味だし少しずつやろう
  • 骨伝導ヘッドフォンを買う

7月

  • ご近所さんとよく遊ぶ
  • クラフト系にハマる
    • 時間を持て余してくるみボタンとか作り出した
  • JCOMからNURO光に乗り換える

8月

  • 息子家プールデビュー
  • 息子森林公園デビュー
  • 息子ムーミンパーク
  • 息子埼玉の水族館
  • ホームロースターを買う
    • 手で焙煎は厳しかった
    • 今も重宝してる

9月

  • 息子動物園デビュー
  • 息子仲良しのいとこが引越し
  • ハンディカムを買う

10月

  • 息子初カット
  • 妹が結婚式したので息子結婚式に初参加
  • 十数年ぶりにCDを買う
  • 統合後のメンバーで仕事を始める
    • コロナで一度も顔合わせする事なく仕事を始めた

11月

  • 息子はじめての運動会
  • 電動自転車を買う

12月

  • 電気圧力鍋を買う
  • 息子に○○してとお願いすると出来る様になってくる

プライベート

  • 息子が出来ること増えた一年だった
  • 保育園に行き始めて生活リズムが激変した
    • 息子の生活リズムがしっかりした
    • 息子に合わせて大人の生活リズムが出来る
  • リモワ無いと生活が回らない
    • 息子の迎え
    • ご飯の準備
  • 戸建て買ってて良かった
    • 作業部屋が用意できた
    • 妻と二人でミーティング被っても大丈夫だった
    • 今から買うならもう一部屋増やしたい

2020年買って良かった物

リンクは上の時系列のところにあるやつ

電動自転車

  • 保育園までの送り迎えが車より早く済む
  • スーパーに行く時は車、保育園送り迎えだけなら電動自転車と使い分けてる

電気圧力鍋

  • 文明の利器
  • 昼に仕込んでおけば仕事してる間にご飯が出来上がってる

ホームロースター

  • リモワでコーヒーの消費量が増えてた
  • 通販で生豆買えば家で焙煎して丁度いい頃合いの豆でコーヒーが飲める

仕事

おちんぎん

まあまあ上がった方。統合で今後どうなるのかよく分からんけども一旦は自分の今の能力としては十分な賃金を貰えてる気がする。2020年の下期から新しい領域に手を付け出してるので2021年は更に飛躍したいところ

リモワメイン

  • 通勤時間分を家事に回せてる
  • 働きすぎ感がある

統合

  • 開発現場としては良いことも悪いことも色々とある
  • 思ってたよりも開発現場としては良い方向になってる気もする
  • 詳しくはMeetなりでAmongUsやりながら話しましょう

来年の抱負

  • 読書量増やしたい
  • 息子と色んなところへ行けるようになりたい

mockkのverifyでメソッドの引数の中身をチェックする

下のようなコードでUseCaseSaveのテストでrepo.saveに意図した値が入っているかを確認したいようなケース

data class Data(
    val target: Int
    val timestamp: Date = Date()
)

class UseCaseSave(val repo: Repo) {
    fun execute(num: Int) {
        repo.save(Data(num))
    }
}

matcherを自前で用意することで対応が可能。 ​

@Test
fun test_hoge() {
    val repo = mockk()
    val useCase = UseCaseSave(repo)

    useCase.execute(1)

    verify {
        repo.save(match { date -> date.target == 1 })
    }
}

CircleCIでprivateなリポジトリをgit submoduleでアクセス出来るようにする

Projectのページ開いて右の方にある Project Settings を開く

f:id:iwata_n:20201119134855p:plain

左のメニューから SSH Keys を選ぶ

f:id:iwata_n:20201119134908p:plain

User KeyAdd User Key を押す

f:id:iwata_n:20201119134918p:plain

こんな感じに追加されたらアクセス出来る状態になる

f:id:iwata_n:20201119134927p:plain

あとはCircleCIのymlでこんな感じのを追加して呼び出せばOK

  init_git_submodule:
    steps:
      - run:
          name: Git submodule
          command: git submodule update --init

SpekでgetMainLooperをMockする必要がある場合の対応方法

LiveData使ってるクラスのテストをSpekで書こうとするとよく出てくるエラー。

エラー内容

Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details.

テスト用のTaskExecutorを用意する

class TestArchTaskExecutor : TaskExecutor() {
    override fun executeOnDiskIO(runnable: Runnable) {
        runnable.run()
    }

    override fun isMainThread(): Boolean {
        return true
    }

    override fun postToMainThread(runnable: Runnable) {
        runnable.run()
    }
}

SpekのGroupBodyに拡張関数を追加

fun GroupBody.applyTestTaskExecutor(executor: TaskExecutor = TestArchTaskExecutor()) {
    beforeGroup {
        // AACのテスト用設定
        ArchTaskExecutor.getInstance().setDelegate(executor)
    }
    afterGroup {
        ArchTaskExecutor.getInstance().setDelegate(null)
    }
}

テストでSpekのBodyで拡張関数を呼び出す

internal object ViewModelTest : Spek({
    applyTestTaskExecutor()
    
    Feature("...") {}
}

pandasでステップ状のグラフを書く

import pandas as pd
df = pd.DataFrame([1, 3 , 5])
df.plot(marker='.')
df.plot(marker='x', drawstyle='steps-post') # drawstyleで指定

drawstyleで steps-post を指定するとステップ状になる

指定なしの場合

f:id:iwata_n:20200807150213p:plain

指定ありの場合

f:id:iwata_n:20200807150228p:plain