いわたんち

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

Jetpack ComposeでButtonの影を消す

Buttonでelevation=nullを指定すればOK。Modifier.shadowでは駄目です。 Button( modifier = Modifier.size(134.dp, 50.dp), shape = RoundedCornerShape(100), // こっちは角丸にしてくれるやつ elevation = null, // これが影を消してくれる onClick = {},…

JavaなFragmentでJetpack Composeを使う時にsetViewCompositionStrategyの指定

kotlinなら view.setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) なんだけども、Javaだと view.setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed.INSTANCE); とINSTANC…

Jetpack Composeでサイズに関係なく左右が角丸になるボタンを作る

こんな感じにサイズに関係なく左右が角丸になっているボタンを作る RoundedCornerShape に パーセント指定できるInterface があるのでそれで100%を指定するだけ 謎にハマったところで以下のようにJetpack Composeのパラメータを IntSize で生成すると Common…

Jetpack Composeで高さを小さくしたTextFieldを作る

こんな感じにIcon、Text、Iconを表示したTextFieldを用意して高さを標準よりも少し小さくしたい場合の対応方法です。 こんな感じでModifier.heightで高さを標準よりも小さくすると var text by remember { mutableStateOf("") } TextField( modifier = Modif…

Android Stuido Arctic FoxでシステムUIの日本語が豆腐になったときにやる設定

Android Studio Arctic Foxでなんかフォントが変わったのか日本語が豆腐表示になってたので解決方法。 図の場所のチェックを入れると、指定フォントを使うようになるので日本語対応しているフォントに変更すると、文字化けが解消される。 追記:2021/08/02 .…

退職エントリ2021

様式美の写真がコロナ禍で撮れなかったのでMacで代用。お気持ちを残しておくためにも退職エントリを書いておく。 2018年8月にDeNAに入って2020年4月に事業承継でMobility Technologiesに転籍になりましたが、 2021年7月15日を最終勤務日にして1.5ヶ月ほど有…

既存のNavigationとJetpack ComposeのNavigationを併用する時の注意

"androidx.navigation:navigation-compose:2.4.0-alpha04" をimplementationに入れてビルドすると Class 'Xxx' is not abstract and does not implement abstract member public abstract val actionId: Int defined in androidx.navigation.NavDirections '…

bugspotsをDokcer上で動かす

bugspotsの依存ライブラリが現在の環境だと動かない状態だったのでGemfileを用意して動かした手順 Gemfileの中身 source 'https://rubygems.org' gem 'rugged', '0.21.0' gem 'bugspots' Dockerfileの中身 FROM ruby:2.3 RUN apt-get update && apt-get inst…

JetpackComposeで無限ループで値を変える

rememberInfiniteTransition と animateFloat を組み合わせて、更にイージングを LinearEasing にすることで無限ループで値が一定間隔で変化する val infiniteTransition = rememberInfiniteTransition() val time by infiniteTransition.animateFloat( init…

マッサージガンMYTREX REBIVEを買った

在宅勤務も1年以上してきて急に肩こりからくる頭痛が毎日のように襲ってくるようになったのでマッサージガンを試しに買ってみた 創通メディカル トータルボディケア マイトレックス リバイブ MYTREX REBIVE MT-RBN20G MYTREX (MYTREX REBIVE)メディア: 買っ…

CorotineScopeでの注意点

class HogeFragment() : Fragment() { // 1 val scope = lifecycleScope + errorHandler // 2 val scope = viewLifecycleOwner.lifecycleScope + errorHandler // 3 val scope get() = viewLifecycleOwner.lifecycleScope + errorHandler override fun onVie…

息子が2歳になったので振り返る

出来るようになったこと めっちゃ色々な事が1年で出きりるようになった。人間の成長って凄く早い。 言語系 簡単な言葉での会話 あいさつ お辞儀もする ばいばい 手を精一杯振る姿はかわいい ありがとう あーとと言う 見て 見せてと言う いてきまーす、ただい…

Firestoreの値をcallbackFlowとasLiveDataを組み合わせて使う

まとめ callbackFlowを使えばFirestoreのリアルタイムアップデートをFlow化できる FlowをasLiveDataする時はgetterじゃなくて代入するようにしないとViewが生きている間はFlowが永遠と生成される callbackFlow こんな感じでFireStore上のデータをコールバッ…

RecyclerViewでスクロールを無効化する

layoutManagerで対応できる binding.recyclerView.apply { layoutManager = object : LinearLayoutManager(context) { override fun canScrollVertically(): Boolean { return false } } }

Slackでマルチチャンネルゲストがユーザーグループに追加出来ない問題への回避策

マルチチャンネルゲストがSlackのユーザーグループに追加できなくてメンション漏れが起こるので回避策 ↑これの次の追加する画面でマルチチャンネルゲストは選べない なので、ユーザーグループへメンションがあったらSlackBotで反応することにした。 https://…

DataBindingでXMLのみでクリック時のNavigationを完結させる

ViewModelにクリック時のメソッド用意してDatabindingで指定して〜とかってやるのが面倒だったのでサクッとレイアウトのXMLのみで完結させる方法 NavigationとRをimportして、Navigationのメソッドを使うことで実現出来る。 popBackStackしたいだけならRのim…

WH-1000XM4を買った

WH-1000XM4を買った。楽天のポイント使ったりして実質3万切ったので買ってしまった。 ソニー ワイヤレスノイズキャンセリングヘッドホン WH-1000XM4 : LDAC/Amazon Alexa搭載/Bluetooth/ハイレゾ 最大30時間連続再生 密閉型 マイク付 2020年モデル ブラック …

2020年振り返り

時系列で振り返り 雑に月ごとに 1月 熱海とか行きながら岐阜で年越し コストコでオラフのぬいぐるみを買う 2月 大阪へ家族旅行で行く 今思えばコロナに心配しなくていい最後の旅行だった 会社統合の話を聞く 初めはもっと別の会社かと予想してたけど結果とし…

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(n…

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

Projectのページ開いて右の方にある Project Settings を開く 左のメニューから SSH Keys を選ぶ User Key で Add User Key を押す こんな感じに追加されたらアクセス出来る状態になる あとはCircleCIのymlでこんな感じのを追加して呼び出せばOK init_git_su…

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

LiveData使ってるクラスのテストをSpekで書こうとするとよく出てくるエラー。 エラー内容 Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details. テスト用のTaskExecutorを用意する class TestArch…

JUnit5でコルーチンの例外発生のテストを書く

@Test fun test_exception() { assertThrows(IllegalArgumentException::class.java) { runBlocking { testMethod() } } } assertThrowsにラムダを渡すことで例外発生のテストを書くことが出来る

aarに含まれるsoが見つからない

これが正しい artifacts.add("default", file('libname.aar')) こんな感じに拡張子名を忘れるとライブラリが見つからないとエラーになる artifacts.add("default", file('libname'))

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 を指定するとステップ状になる 指定なしの場合 指定ありの場合

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

こいつを使ってMacとRX100M3をHDMIケーブルで接続することで簡単にWEBカメラ化できた。 ケーブルは携帯用のディスプレイについてきたマイクロHDMIで接続してるけども、下に紹介してるようなケーブルでよさそう あとはモニタアームにジェネリックなゴリラポッ…

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

mockkのMockには wasNot Called が用意されているのでメソッドにも使えるかと思ってたけども実は違っていたのでメモ // これは間違い verify { mock.method() wasNot Called } // コレが正しい verify(exactly = 0) { mock.method() } じゃあ wasNot Called …

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 で挙動が違っていて、 …

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

notionでOKRと日頃のタスクをいい感じに結びつけてちゃんと成果出していこうとするためのページを作ったのでメモ 仕事用ページの作成 まずサイドバーで仕事用ページとかを作る 日頃のタスクのメモページの作成 次に↓のテンプレートを追加する。これでデイリ…

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

iPad Proでマジックキーボードに対応したけども、重くなってMacBookクラスの重量になってしまうので個人的にはあまり魅力を感じなかった。 Apple Magic Keyboard (12.9インチiPad Pro - 第3世代と第4世代) - 英語(US) 発売日: 2020/04/20 メディア: Personal…

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の型もちゃ</status>…