いわたんち

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

格安HDMIキャプチャでRX100M3をWebカメラ化する

f:id:iwata_n:20200710102713j:plain

こいつを使ってMacとRX100M3をHDMIケーブルで接続することで簡単にWEBカメラ化できた。 ケーブルは携帯用のディスプレイについてきたマイクロHDMIで接続してるけども、下に紹介してるようなケーブルでよさそう あとはモニタアームにジェネリックなゴリラポッドでくっつけて程よい高さを確保した。 ほとんど遅延もないのでZoomとかであれば高画質な顔を見せつけれそうです

mockkでメソッド呼び出しが行われていないことを確認する

mockkのMockには wasNot Called が用意されているのでメソッドにも使えるかと思ってたけども実は違っていたのでメモ

// これは間違い
verify {
  mock.method() wasNot Called
}

// コレが正しい
verify(exactly = 0) {
  mock.method()
}

じゃあ wasNot Called はいつ使うのかというと以下のようにMock全体に対して呼び出しが行われていないことを確認する時に使う。

verify {
  mock wasNot Called
}

参考: Cannot verify a mocked class's method was not called. · Issue #349 · mockk/mockk · GitHub

mockkのreturnsとanswersの違い

every {
  mock.time
} returns System.currentTimeMillis()
val a1 = mock.time
// なんか処理
val b1 = mock.time
every {
  mock.time
} answers { System.currentTimeMillis() }
val a2 = mock.time
// なんか処理
val b2 = mock.time

で挙動が違っていて、 returns だと宣言時の時刻で固定されて、 answers の場合は呼び出しのたびに評価される。 なので、a1 = b1となり、 a2 != b2 となる。

NotionでOKRと日頃のタスクをいい感じに結びつける

notionでOKRと日頃のタスクをいい感じに結びつけてちゃんと成果出していこうとするためのページを作ったのでメモ

仕事用ページの作成

まずサイドバーで仕事用ページとかを作る

日頃のタスクのメモページの作成

次に↓のテンプレートを追加する。これでデイリーのタスクのメモを残す。 コピーを作ったら仕事用ページ配下に移動する。

www.notion.so

フィルタの設定を追加する

f:id:iwata_n:20200629212853p:plain

Daily用のテーブルを表示するためのViewを追加

f:id:iwata_n:20200629212959p:plain

Filterから

f:id:iwata_n:20200629213023p:plain

Add Filterを選んで

f:id:iwata_n:20200629213058p:plain

これでDailyのViewを選べば今日の日付のタスクが見れるようになる

OKR用ページの作成

次にOKR用のページ作り。 サイドバーでページの追加を選ぶ

f:id:iwata_n:20200629212047p:plain

タイトルは OKR で種類をDATABASEのTableにする

f:id:iwata_n:20200629211927p:plain

TABLEの列はこんな感じにしとく。 ObjectはSelect、自信度はNumberを設定、TaskはRelationを選ぶ。

f:id:iwata_n:20200629213316p:plain

このRelationがミソで、Relationを選ぶと↓のように接続するDatabaseを選べる。 そこで先程作成した日頃のタスク用のページを選択する

f:id:iwata_n:20200629213442p:plain

そうすると日頃のタスク用ページの方が以下のようになる

f:id:iwata_n:20200629213647p:plain

ここでRelated to OKRをクリックすると、KRを選ぶことが出来るようになる。1個選択すると項目が消えるので、複数設定したい場合は再度Search for...の部分をクリックすると選べるようになる

f:id:iwata_n:20200629214146p:plain

紐付けした結果はこんな感じ

f:id:iwata_n:20200629214416p:plain

もちろんOKR側からも紐付けがされている

f:id:iwata_n:20200629214453p:plain

ここで日頃のタスクがOKRと全然結びつけが出来ていなければ何か間違った状態になっていることが見えてくるので、対策した方が良さそうな状態。

仕事用ページで一覧化

仕事用ページを開いて、↓のようにinline化することで1つのページでOKRと今日のタスクが見えるように出来る。

f:id:iwata_n:20200629214535p:plain

これも結構重要でひと目見てOKRとタスクがわかる状態になってたほうがOKRを普段から見ることになるので意識して行動が出来るようになる。 他にもToDoリストもInline化できるのでカンバンやカレンダーなども一緒に見れるようにすることでよりOKRを普段から見るものにできる。

効果

こうすることで普段のタスクがOKRに明確に紐付けが出来るようになり、OKRを達成しようとするモチベーションを上げることができそう

iPad proでThinkPadのワイヤレスキーボードを使う時の設定

iPad Proでマジックキーボードに対応したけども、重くなってMacBookクラスの重量になってしまうので個人的にはあまり魅力を感じなかった。

Apple Magic Keyboard (12.9インチiPad Pro - 第3世代と第4世代) - 英語(US)

Apple Magic Keyboard (12.9インチiPad Pro - 第3世代と第4世代) - 英語(US)

  • 発売日: 2020/04/20
  • メディア: Personal Computers
 

 

Macのキーボードもあまり好きでは無いのでThinkPadのワイヤレスーボードをつなぐことにした。

この記事もiPad ProとThinkPadのワイヤレスキーボードで書いている。

 

ThinkPadのワイヤレスキーボードをiPadに接続する際の修飾キーの設定を変えた。

 

「設定」から「一般」→「キーボード」→「ハードウェアキーボード」→「修飾キー」で画像みたいに設定

f:id:iwata_n:20200512220058j:image

これで純正キーボードと同じような挙動になるはず

LiveDataの中身までmockkでテストする

sealed class Status {
    object InProgress : Status()
    object Success : Status()
    data class Failure(val e: Throwable) : Status()
}

class Data {
  val status: LiveData<Status>
}

↑みたいな構造のコードで、DataクラスのstatusがFailureになった際のeの型もちゃんとテストしたいみたいな場合、

val observer = mockk<Observer<Status>>(relaxed = true)
val data = Data()

data.observeForever(observer)

// 何かしらのテストするためのAction

verify {
  data.onChanged(match { it is Status.Failure && it.e is RuntimeException })
}

match を使えば良い

Slackのreacji-channeler が便利すぎた

Reacji Channeler がめちゃくちゃ便利だった。

具体的な使い方として、 絵文字ジェネレーター - Slack 向け絵文字を無料で簡単生成 で「〇〇チームへ伝言」みたいなEmojiをSlackに登録しておきreacji-channelerでチームのチャンネルへ伝言するようにしておくと、 色々なチャンネルで投稿された内容を瞬時に共有しておくことができる。

よくあるのが問い合わせ用チャンネルからチームへの伝言とか他の開発チームの進捗共有とかを伝言とかが一発でできるし、どこのチームが興味持っているかがEmojiで一発で分かる。

便利。