たかぎとねこの忘備録

プログラミングに関する忘備録を自分用に残しときます。マサカリ怖い。

Kotlin

KotlinのExposedで作成日に基づいて並び替えた値に対してページネーションを行いたい場合

ExposedのDAO APIを使って次のようなモデルを定義してみる。 object Posts : UUIDTable() { val text = varchar("text", 144) val createdAt = datetime("created_at") } class Post(id: EntityID<UUID>) : UUIDEntity(id) { companion object : UUIDEntityClass<Post>(P</post></uuid>…

ViewModelを初期化しようとして`Module with the Main dispatcher had failed to initialize`というエラーが出た話

テスト時にViewModelを初期化する処理を次のように書いた。 class LabelListViewModelTest { private val testScheduler = TestCoroutineScheduler() private val dispatcher = StandardTestDispatcher(testScheduler) private val repository = mockk<LabelRepository>(relax</labelrepository>…

`builder: Modifier.() -> Modifier`の読み方

DroidKaigi 2022のコードを眺めていると次のような記述にでくわした。 inline fun Modifier.ifTrue(value: Boolean, builder: Modifier.() -> Modifier): Modifier { val modifier = Modifier return then(if (value) modifier.builder() else modifier) } f…

ワークフローのファイルを作成してリモートリポジトリにプッシュしようとしたら失敗した

.github/workflows/Build.yamlを作成して、リモートリポジトリにプッシュしようとしたらエラーが発生した。 ! refs/heads/ci-build-workflow:refs/heads/ci-build-workflow [remote rejected] (refusing to allow a Personal Access Token to create or upda…

NavigationBarのNavigationBarItemを何度もタップすることにより、アプリが強制終了する場合の対処法

NavigationBarのNavigationBarItemを何度もタップし、最後に一番左のNavigationBarItemを連打するとアプリがクラッシュする現象に遭遇した。 これがその時のエラーの抜粋。 java.util.NoSuchElementException: List contains no element matching the predic…

Cloud Runで`error: Failed to sign the provided bytes`というエラーが表示された場合の対処法

Cloud RunでKtorアプリを動かしていると、次のエラーログが表示された。 error: Failed to sign the provided bytes 色々調べたらCloud Storageに保管してある画像の署名付きURLの生成時に発生しているようだった。 serverfault.com stackoverflow.com なの…

Ktor + Exposed + Cloud RunでCloud SQLに接続させる方法

Cloud RunにデプロイしようとしたKtor + Exposedのアプリケーションイメージが、Cloud SQLへ接続できないことが原因で何度もデプロイに失敗してしまった。解決までに数時間要してしまい、ネットを探してもExposedを使った時のCloud SQLへの接続方法を記した…

Kotlinでプロジェクト内のディレクトリにある複数のJSONファイルをまとめて処理してみる

次の様なディレクトリの構成を考えてみる。 a_lot_of_settings a settings.json b settings.json c settings.json src main kotlin com takagimeow main.kt a_lot_of_settingsディレクトリの中にはaディレクトリとbディレクトリとcディレクトリが存在し、そ…

ExposedでEnumを使ってみる

PostgreSQLをデータベースと使用しているときに、一部のカラムをEnumとして表現したい。 そのためにはまず、Enumを型として定義する必要があるので作成してみる。これはテーブルの定義よりも前にやっておく。 こんな感じ。 class PGEnum<T : Enum<T>>(enumTypeName: Stri</t>…

KtorとExposedの環境でちょっとデータベースにシードさせたいときのTips

Ktorでデータベースを使用したいので、com.takagimeow.infrastructure.database.daoにDatabaseFactoryを実装してみます。 package com.takagimeow.infrastructure.database.dao import com.takagimeow.infrastructure.database.models.Users import kotlinx.…

Androidの通知に表示したいアイコンを用意する

Androidでは、アプリのアイコンと通知用のアイコンは異なる。 特に異なる部分はカラーの部分で、通知用のアイコンには基本的に色をつけることはできない。 Android 5.0以降では通知機能が大幅に変更されたため、アイコンのカラーチャンネルがすべて無視され…

Coroutineを学んでみた

CoroutineはノンブロッキングプログラミングをKotlinで使えるようにした機能。非同期操作を安全に扱える機能などが含まれている。 導入 Coroutineを使うにはkotlinx.coroutinesというパッケージを使わないといけない。 build.gradle.ktsファイルを開いて、de…

Kotlinはじめてみた

積読していたKotlinの入門本をちょっとずつ読んでみる。 基礎からわかる Kotlin | 富田健二 | 工学 | Kindleストア | Amazon 環境構築 環境設定から始める。 JetBrainsの公式サイトからIntelliJ IDEAをダウンロードする。 ちなみに、僕の場合はCommunity版の…