プログラミング

【GitHub】Kotlinの「色」が変わった話

「Swift/Kotlin愛好会 Advent Calendar 2022」の枠が空いていたので急遽書いてみました。 qiita.com GitHubでは、画像のように、リポジトリ内の言語割合をカラフルに表示してくれます(画像はKotlinリポジトリより)。 この表示でのKotlinは紫っぽい色ですが…

【PostgreSQL】PL/pgSQLで全テーブルに一括で更新日時設定のトリガーをセットする

やること テーブル別でUPDATED_ATカラムへのトリガー設定を行っている状況が有ったとします。 -- 関数作成 CREATE OR REPLACE FUNCTION trigger_set_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.UPDATED_AT = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql…

【Spring WebFlux】Cannot determine database's type as ConnectionFactory is not options-capable.への対処【R2DBC】

H2データベースを使ってR2DBCのpostAllocate/preReleaseの挙動を確認するためのSpring WebFluxプロジェクトを作成していた所、Cannot determine database's type as ConnectionFactory is not options-capable. To be options-capable, a ConnectionFactory …

【jOOQ】R2DBC接続でDSLContextを上手く管理する方法を考える【Spring】

以下の記事を書いていて、「DSLContextを使い捨てたら非効率なのでは?」と感じたので、管理方法を考えてみたメモです。 その他の便利要件も含めています。 あくまでメモなので、これがどれ位性能に影響するか等は未検証です。 qiita.com 前提 トランザクシ…

【Spring】JDBC接続で、suspend関数に対してTransactionalアノテーションを利用してのロールバックが効くか確認する【Kotlin】

お詫び 過去公開していた記事では、Spring WebFluxで複数リクエストを同時に処理する場合を考慮していませんでした。 JDBC接続 x Spring WebFluxでトランザクション管理をすると壊れる可能性が有るため、やらないことをお勧めします。 「R2DBC接続でトランザ…

【jOOQ】etiennestuder/gradle-jooq-plugin(nu.studer.jooq)でコード生成時にjava.lang.ClassNotFoundException: jakarta.xml.bind.annotation.XmlSchemaが出る状況への対処

やり方 dependenciesにjooqGenerator("jakarta.xml.bind:jakarta.xml.bind-api:3.0.0")を追加すれば生成が通りました。 dependencies { /* 略 */ jooqGenerator("jakarta.xml.bind:jakarta.xml.bind-api:3.0.0") /* 略 */ } 補足 implementationだと通りませ…

【Intellij IDEA(Ultimate)】Run/Debug ConfigurationsのEnvironment variables(に限らず任意の項目)が見つからない際の対処

Run/Debug ConfigurationsのEnvironment variables(に限らず任意の項目)は表示されない状態になっていることが有る 特にSpring Bootで遭遇しやすいかも Modify optionsから設定を行うことで表示することができる 画像付きの操作方法は↓の記事の一部として…

【R2DBC】Could not resolve io.r2dbc:r2dbc-postgresqlへの対処

対処 io.r2dbc:r2dbc-postgresqlをorg.postgresql:r2dbc-postgresqlに直せば通ります。 背景 r2dbc-postgresqlは0.9以降でリポジトリの移行が行われています。 github.com

【Kotlin】ローカル関数の利用はパフォーマンス低下につながる

TL;DR ローカル関数を利用するとパフォーマンスが低下する このため、パフォーマンスが重要な場面ではローカル関数を利用すべきでない 文脈 日頃からお世話になっているintellij-rainbow-bracketsのコードを読んでいた所、以下のコードを見つけました。 gith…

【Kotlin coroutine/Java Reactor】Flow.groupByしたい場合Flux.groupByが使えるかも

記事執筆時点で、FlowにはgroupByが実装されていません。 kotlin.github.io 一方、FluxにはgroupByが実装されています。 projectreactor.io (kotlinx-coroutines-reactiveが入っているような環境では)FlowとFluxは相互変換できるため、検討の余地が有ると…

【Marp】公式のダークテーマを使う

やり方 marp: trueを設定する を設定する 設定後のヘッダーは↓のようになります。 --- marp: true # header: 'header text' # footer: '![height:50](image1.png)' --- 背景というか やり方そのものは↓にちゃんと書いてあるんですが、自分は…

【日記】kotlin-reflectのvalue classを引数に含む関数呼び出しに関するバグ修正に携わった

↓の続きです。 wrongwrong163377.hatenablog.com 問題の内容 value classを引数に含む関数をkotlin-reflectを用いて呼び出す処理には、以下のような問題が存在していました。 "KotlinReflectionInternalError" when using `callBy` on constructor that has …

【jOOQ】Recordからの値読み出しを省力化する【Kotlin】

定義したもの import org.jooq.Field import org.jooq.Record inline fun <reified T> Record.read(field: Field<*>): T = this[field, T::class.java] 使い方 以下のように使います。 import org.jooq.Field import org.jooq.Record // FOOテーブルに定義された文字列</reified>…

【PowerShell】git tagを全て取得する

PowerShellでgit tagすると、タグの量が多ければエンターを連打しないと続きが出てこない ファイルに出力すれば全て取れる コマンドはgit tag > ${対象ファイル名} 練度の低さがバレてしまう

【JUnit5】MethodSourceで空Streamをエラーにしたくない場合の対処

状況 JUnit5のParameterizedTestで、MethodSourceが空Streamを返した場合、以下のようなエラーになります。 Configuration error: You must configure at least one set of arguments for this @ParameterizedTest org.junit.platform.commons.PreconditionV…

【gradle】gradlewの実行がGeneral error during semantic analysis: Unsupported class file major version 60で失敗する問題への対処

TL;DR ローカルのJavaバージョンを16から1.8に変更することで成功するようになった 本文 当該のgradlewはバージョン6.xで生成されたもので、これはJava 16には対応していません。 gradlewの再生成ができない状況だったため、ローカルのJavaバージョンを1.8に…

【日記】Intellij IDEA Ultimateの無料トライアルがJetBrainsアカウント必須になっているっぽい

今まではIntellij IDEA Ultimateの無料トライアルはアカウント登録も不要な完全無償で行えていました。 このため、ライセンス発行までどうしても時間がかかる場合なんかには無料トライアルで済ませることができていました。 一方、今日見た所アカウント登録…

画像や動画の透過情報をChromeで確認する

TL;DR コンテンツをChromeで開き、開発者ツールでbackgroundを設定することで、背景色を変えてプレビューできる カラーパレットから色を変更すればより分かりやすく確認できる 変更対象とする要素は、有ればbody、無ければ一番外側の要素が安定 Chromeに限ら…

【DbUnit】DatabaseSetupで、特定ディレクトリに配置したファイルがUnable to load dataset from ${ファイル名}となって読み込めない問題への対応【Spring】

TL;DR 問題が起きているディレクトリを一旦削除して作り直し、ファイルを配置し直した所解決した 恐らくDbUnit等の不具合ではなかったと思われる 状況 SpringDbUnitでテストを作成していた所、DatabaseSetupアノテーションに設定したファイルがjava.lang.Ill…

MacのDocker Desktopが更新できない問題への対処

ここで紹介する方法は正規の更新手段でなく、設定ファイルに変更が入っていたりすると動かなくなることも考えられるため、実行は自己責任でお願いします。 自分のMac環境で、Docker DesktopからDownload Updateを押しても実行が上手く行かず、更新できない状…

【DbUnit】DB跨ぎの外部キーが絡む状態でDatabseSetup時にLock wait timeout exceeded; try restarting transactionになる問題への対処【Spring】

TL;DR DB跨ぎの外部キーが絡む状態でDatabseSetupすると、外部キーの元になるinsertがコミットされずにデッドロックが発生する エラーメッセージはCaused by: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded;…

【kotlinx-metadata】KmValueParameter.typeはnullにならない

TL;DR KmValueParameter.typeは実際の所non-nullだが、定義上nullableになっている ドキュメントも「KmValueParameter.typeがnon-nullならKmValueParameter.typeはnull」というような記述になっている ※0.3.0時点の話 本文 使っていて疑問を感じたので質問を…

【Kotlin】Intellij IDEAでjava.lang.OutOfMemoryError: Java heap spaceでコンパイルが失敗する状況への対処

Kotlin 1.3.71のプロジェクトで、バージョンを1.4や1.5に上げた所、java.lang.OutOfMemoryError: Java heap spaceでコンパイルが失敗する状況になりました。 Preferences -> Build, Execution, Deployment -> Compilerで、Shared build process heap size (M…

【MySQL】SQL_CALC_FOUND_ROWS + SELECT FOUND_ROWS()でLIMIT前の行数をカウントする方法はMySQL8.0.17で非推奨化している

本文 タイトルとMySQLの公式ドキュメントに書かれている内容が全てです。 dev.mysql.com 「SQL_CALC_FOUND_ROWS SELECT FOUND_ROWS()」というような形で検索しても非推奨化している旨がパッとは出てこなかったためこの記事を書きました。 補足 公式ドキュメ…

【Spring】SQLにパラメータとしてJSON配列を設定したい場合、JSON_ARRAYを使う

NamedParameterJdbcTemplateに対して発行するクエリで、JSON配列をパラメータとして設定する所で詰まったので、備忘用のメモです。 状況 以下のような処理を行うクエリを作成していました。 select JSON_OVERLAPS(/* テーブルから取得したJSON配列 */, /* パ…

Intellij IDEAで、Kotlinプラグインを1.5にアップデートしたらビルドができなくなった問題への対処

2021/5/14追記 幾らか試した雰囲気では、File->Project Structure->Project ->Project SDKのバージョンが1.8(Java 8)だとこの問題が出るように見えました。 ここをJava 12以降(試したのが12と16だっただけで、それ以前でできないかは見ていません)にする…

【日記】初めてOSSにコントリビュートできた話

とても小さなドキュメント修正ですが、google/kspにコントリビュートした/人生初のコントリビュートができた話を書きます。 当該PR github.com 何をやったか あるドキュメントでgradleのrepositories設定でmavenCentralの順番が後ろになっていた問題を修正し…

【日記】自分の記事を機械翻訳して無断転載していたページの広告を剥がした

TL;DR 日本語記事を機械翻訳で転載して広告収入を得ているサイトがそれなりに有るっぽい 当該サイトがGoogle広告を使っている場合、DMCAテイクダウンを成立させれば検索から除外可能 この余波か当該サイトに広告が表示されなくなっていた 見かけたらどんどん…

【Gradle】jmh-gradle-pluginでjava.lang.NoClassDefFoundErrorが出る場合の対処

TL;DR Orikaの依存をjmhImplementationではなくimplementationで定義した所解決しました。 Orikaに限らず、ライブラリによってはjmhImplementationだと上手く動かないようです。 問題 jmh-gradle-pluginでOrika 1.5.4を利用したベンチマークを作成していた所…

【JMH】Windows環境で実行するコアを指定してベンチマークのスコアを安定させたかった話

TL;DR JMHのベンチマークスコアが安定しなかった (正確に特定はしていないが)全体の実行に5時間かかる内容であるため、途中でバックグラウンド処理が走った結果が原因と推定 start /affinity ${マスク} ${呼び出すプログラムと引数}とすることで、ベンチマ…