/var/log/jsoizo

メモ帳 技術とか趣味とか

2022-01-01から1年間の記事一覧

Arrow Coreのデータ型探訪

これは Kotlin Advent Calendar 2022 の19日目が空いていたので書いたものです。 Kotlin中心の仕事になるので少しずつお勉強中なのだが、Scalaでコードを書いているときに使っている便利なデータ型が意外とKotlinにはないなとかNull-Safetyの方針がScalaとは…

AWS JDBC Driver for MySQLをslick経由で使いたい

前回、AWS JDBC Driver for MySQLの検証を行ったが、実際にはそのままJDBCドライバを使うということはなく、scalaなアプリケーションで使いたいときにはslickから呼び出すことが多いと思われる。 また、AWS JDBC Driver for MySQLはコネクションプールとして…

AWS JDBC Driver for MySQLのfailover機能に関する動作検証

これは スタンバイアドベントカレンダーの9日目です。 はじめに Amazon Aurora for MySQLでクラスタを組んでいて、可用性を高めるために書き込み可能インスタンスを複数並べてActive/Standby構成にすることがある。 このような運用をしているとき、Activeな…

Macのマイクミュート/アンミュートを制御したい

隣の部屋のベイビーや、ベイビーをあやすママの声がビデオ会議に入って来てしまうような問題がったのでマイクのmute/unmuteをトグルしたいなーとおもった。かつキーボードショートカットでいい感じにやりたい。 最終的にはここに書いたものは使っていない。 …

SlickでMySQLのIO周りを実装したときのユニットテスト

このあたりをいい感じに書けるとMySQL周りのユニットテストが簡易にできるので、 MySQLの実行環境の用意 DDLの適用 それぞれについて書きつつ、最終的にサンプルを示す。 なおtestcontainersを使ってこのへんを一気にやってしまうということもできるが、コン…

Amazon RDS(Aurora含む)のslowqueryログをpt-query-digestにかけたい

基本的には↓に書いてある方法でOKだが,ログをDLするときに一工夫必要。 www.percona.com 2022年04月現在、RDSの slowquery/mysql-slowquery.log はJSON形式で出力されるのでパースしてログ形式を変える必要がある。要はjqで必要なところだけ取り出せば良いと…

RedisまわりのUTを書きたかったらjedis-mockがべんり

タイトルの通り。 redisアクセスするScalaコードのユニットテストでつかって便利だった。 github.com wiremockみたいにredisのプロトコルをモックしてくれるやつ。 使い方 READMEに書いてあるとおりで特に詰まることはない。 以下はscalatestから呼び出すサ…

localstackを使って開発するときのテクニック

awsのPaaSを使う開発をしたいときにローカルでの開発環境構築やCI等のために localstack を使うことが多いのでメモがてらミニマムな設定を書いておく。 やりたいこと インストールや手動でのコマンド実行無しで必要な環境が構築できること ローカルPCやCIな…

scala.collection.immutable.SetOpts, scala.collection.SetOptsのメソッドツアー

前の記事でsubsetsの挙動を確認したついでに、collectionの中でもSet固有に実装されているメソッドを一通り叩いてみる。 特に明示しない場合このようなSet[Int]に対して叩くものとする。 val set = Set(1,2,3)

Set[T]から取りうるすべての組み合わせを生成するにはsubsets

タイトルの通り。 scala> Set(1,2,3) val res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3) scala> res0.subsets().toList val res1: List[scala.collection.immutable.Set[Int]] = List(Set(), Set(1), Set(2), Set(3), Set(1, 2), Set(1, 3), Se…

ScalaTestのAsync Specで複数のassertをしたい

こういうAsyncなテストがあり複数assertしたかったりする。 given-when-then-andのand相当。 class FooSpec extends AsyncFunSpec with Matchers { it("awesome test") { val f1: Future[String] = Future { Thread.sleep(1000) "foo" } val f2: Future[Stri…

Try,Option,EitherのorElse

Pull Requestでレビューをしていてこういう実装を見かけた。 fooで失敗したらbar, barで失敗したらbazを呼び出したい。 def foo(s: String): String = ??? def bar(s: String): String = ??? def baz(s: String): String = ??? val input: String = "awesome…

MySQLのイベントスケジューラで時間帯指定のスケジュール実行を設定したい

業務上よくあるシチュエーションとして 午前9時から18時までの毎時0分 や 平日の19時 みたいなスケジュールを組みたいことがある。 cronなんかだと 0 9-18 * * * や 0 19 * * 1-5 のように書けば良いが、MySQLのイベントスケジューラの場合ではどう書くか。 …

値引きランチパックの記録

淡々と追記していく

FutureがFailしたときの例外型を検査するユニットテストの書き方

FutureがFailureを返すときのExceptionの型を検査したい場合、どのようにUTを書けばよいかのメモ。 たとえば以下のように3の倍数または5の倍数でExceptionを吐く Foo.scala をテストしたい。 object Foo { class BarException extends Exception("bar") clas…