jbangを使って複雑なビルドプロセスをなしで jmh/jcstress を実行する

出落ちで申し訳ないけど jbangで、Javaのベンチマークツールであるjmhを実行出来る記事があるのでそれのリンクを貼っておく。 しかし、後述の話に由来するのだが、以下の記事のprofilerの実行はあまり使わないほうが良いと思われる。 jbangによって、jmhが実…

com.palantir.baseline:baseline-error-prone の検査の一覧和訳 part 2/2

part 1の続きです。 progret.hatenadiary.com 和訳しておきます。 com/palantir/baseline/errorprone/ImplicitPublicBuilderConstructor カプセル化クラス(?)のstatic factory methodを持つビルダーは、private コンストラクタを持つべきです。 不必要なp…

gradle向け error-proneでsuggestedFixを適用する方法

以下のプラグインを使っている前提で書きます。 github.com こうです。 これではうまく動かないので追記を参照 tasks.withType(JavaCompile).configureEach { options.errorprone { // error-proneのsuggested fixesを適用する // usage: ./gradlew compileJ…

com.palantir.baseline:baseline-error-prone の検査の一覧和訳 part 1/2

com.palantir.baseline:baseline-error-proneの検査のsummaryを和訳していきます。 part 1です。途中で力尽きたので、とりあえずここまでで上げておきます。 com/palantir/baseline/errorprone/AfterburnerJavaIncompatibility AfterburnerModuleは jdk16+ …

com.palantir.baseline:baseline-error-prone を見つけたので中身を覗いてみる

com.palantir.baseline:baseline-error-proneというモジュールを見つけたので共有しようと思って記事を書いています。 これは、error-proneのcustom bug checkerが入っているモジュールです。(error-proneのcustom bug checkerは、平たく言うと、Linterのカ…

Javaの構造化ロギングをもっとうまく使うためのError ProneのPluginを作った

errorprone-logstash-logback-encoder v0.0.1をリリースしました。 Error Proneのプラグイン機構を使って、logstash-logback-encoder向けのLintしてくれるPluginを作りました。 maven centralから実際にダウンロードして利用することが可能です。 github.com…

Caffeineで有効期限にjitterを入れたくなったらExpiryインターフェースを使う

Javaでインメモリでキャッシュしたくなったときによく使うCaffeineだが、エントリの有効期限に jitterを入れたくなることがある。 前やったときどうやったか忘れてしまったので、ここにメモしておく。 インターフェースとしては、Expiryというインターフェー…

gradleでpmdで使っているASMのバージョンを変更する

Java 21にアップデートしようとして困ったので書いておく。 現状、最新のpmd 6.55.0では、ASM 9.4に依存しており、Java 21に変更すると、PMDが解析できなくて死ぬ。 そのため、以下の設定を追加した。 configurations.pmd { resolutionStrategy.force 'org.o…

Goでsigleflightを参考にしつつシンプルなキャッシュライブラリを書いてみた

今回は、singleflightを参考にして、Thundering Herd問題を解決したキャッシュライブラリを書いてみたので記事にしてみました。 以下の流れで書いていきます。 初めに singleflightを使って実装してみる signleflightの中の実装を見てみる singleflightを参…

slf4j経由のlog4j2でJSONログを出力する方法

log4j2でJSONログを出力する方法 以下の手順が必要 org.apache.logging.log4j:log4j-layout-template-json をクラスパスに入れる log4j2.xmlでJsonTemplateLayoutを設定する 詳しい話はドキュメントに書いてあるが、デフォルトでtemplateを持っているような…

Kubernetes上のCRI形式のフォーマットで吐かれたコンテナのログをFluent Bitで集約してみる

今回はFluent BitでKubernetes上のPodから生成されたログを集約してみます。 集約といっても、やることは1ファイルに纏めるだけで大したことはしません。 今回は以下の流れでやってみます。 また、今回の記事では、kindで試します。 はじめに Fluent Bitとは…

Node.js 18で入った node:testでテストを実行しつつ nycを使ってcoverageを取る

Node.js v18がリリースされたようなので nycを使ってテストのカバレッジを取ってみました。 今回は設定等を簡略化するために、テストもテスト対象もCommonJSとします。 テストコードです。 const test = require('node:test') const assert = require('asser…

GitHubのprivate repositoryにあるkubernetesのリソースをArgoCDでデプロイしてみる

はじめに 前回はArgoCDのセットアップ周りを書いたので 今回は、ArgoCDにprivate repositoryを読み取らせてアプリケーションがデプロイ出来るにしてみます。 また、アプリケーションはArgoCDのexamplesにあるものにkustomizeを使いつつデプロイしてみます。 …

ArgoCDでGitHubのユーザ情報を使ってログインできるようにする

はじめに 宣言的なContinuous DeploymentのためにGitOpsという形で Kubernetes上のアプリケーションを管理してくれるツールがArgoCDです。 今回は、kindを使ってローカルで試していきます。 今回は以下のような流れでやっていきます 公式のマニフェストを使…

備忘録: .NET 5の開発環境をUbuntu 20.04にセットアップしてみた

なぜか.NETを使うことになったので 開発環境の構築をメモしておく。 今回はUbuntu 20.04なので、以下の流れで行った。 aptで.NETのSDKをインストールする .NETのCLIを使ってリポジトリを初期化する VSCodeに拡張機能を入れる インストールした.NETのバージョ…

Writing A Compiler In Goを読んだ

Writing A Compiler In Goを読んだ。 この本は、Go言語で作るインタプリタ の続編で 前作で作ったTree-walking インタプリタで動作するmonkeyという言語を コンパイルして、バイトコードを吐き出し、それをVM上で動かすようにする、というのが最終的な目標に…

snapshot testingのライブラリを書いた #go

書いた。github.com なぜ書いたか snapshot testingのライブラリを使ってライブラリを作ろうとしていたが いまいち使い勝手が合わなかったので、機能を落としたものを作った。試したのは以下の2つだが、goldieのほうが挙動としては近かったが 使い方には合わ…

AWS SQSの代替として使える elasticmq の公式dockerイメージでqueueを起動時に作る方法

elasticmqの公式dockerイメージでqueueを起動時に作成する方法を紹介します。 動作は、softwaremill/elasticmq:0.15.7で確認しました。 TL;DR 環境変数JAVA_OPTSに "-Dconfig.override_with_env_vars=true" を追加する CONFIG_FORCE_queues<your-queue-name>fifoに "false" を</your-queue-name>…

goでJavaのクラスファイルのパーサを書いた

そういえば、書いたことがないなぁと思って、Javaのクラスファイルのパーサを書きました。 Java SE 15のJVM Specification だけを見ながら フルスペックのクラスファイルのパーサを書きました。 書いたけど、パース出来るだけで pretty printが出来たり、な…

Javaでcloud profilerを使ってpprofフォーマットのプロファイルデータをローカルに出力する

cloud profilerにはローカルに、pb.gzフォーマットでプロファイルデータを出力する機能がある。 このファイルは、pprofのprotocol bufferをgzip圧縮したものだ。 やり方は以下のような形でagentに -cprof_profile_filename パラメータを渡して下さい。パラメ…

OpenJDKのJavaのコンパイラは標準ライブラリのシンボルデータを別途持っていて --release でビルドした時はそのデータが使われるようだ

Spotbugsのビルドを弄ろうとしていて気になったので調べてみた。 以下のように、--releaseと-source/-target を使った時で挙動が違う。 まずはじめにSpotbugsの話になるが、Spotbugsにはツールの特性上、テストケースとしてJavaファイルを中に溜め込んでいる…

Gradle 6.7 で リリースされる Toolchain support for JVM projects を試してみる

Gradle 6.7 (現在 6.7 rc-3がリリースされています) から導入される Toolchain support for JVM projects という機能を試してみます。 この機能で何が出来るのかというと Gradle を動かすJVMとコンパイルやテストで使うJVMを簡単に分離することが出来るよう…

Windowless moving percentileをgoで実装してみる

Windowless moving percentileとは指数平滑移動平均(Exponential moving average)をベースにしたパーセンタイル値の予測方法で 名前の通り、windowlessということで、windowなしにパーセンタイルの予測が可能で、メモリ効率や計算効率が良い。 windowとは、…

EC2インスタンスの秘密鍵の管理から開放される ssos (ssh-setup-over-ssm) をリリースした

EC2インスタンスに入りたい時ってたまにないですか? EC2インスタンスのsshの秘密鍵の管理をどうしよう、とか EC2インスタンスのユーザの管理をどうしよう、とか悩みますよね。 今回リリースした、ssos (ssh-setup-over-ssm) を使えば EC2インスタンスを使い…

Docker/KubernetesにおけるNode.js: ヒープサイズがcgroupのlimitを見て決められるようになるのは v12.7.0から

仕事で気になって調べたので書いておきます。Node.jsは v12.7.0以降じゃないと cgroupのmemory limitを見てくれません。 つまり、v12.7.0より前のバージョンのNode.jsでは、ヒープメモリの容量を設定するオプション `--max-old-space-size`を使う必要があり…

vue + composition-api + typescript + jest + eslintのリポジトリをセットアップした

リポジトリは下。 github.com 最近 Vue追ってなかったので、Vueの大きなアップデートを見ていた。 で、気になったのが下のようなツール周りの変化を知りたいなぁと思って サンプルリポジトリを構築した。 VueはちゃんとTypeScriptで構築した記憶がなかったの…

Spring Bootのデフォルトのヘルスチェック全てを無効にする

デフォルトで設定されるヘルスチェックを無効にしたい場合があると思います。 例えば、セッションストアとして使っているredisが落ちた場合にredisを使っていないエンドポイントがあるので サービスとしては落ちて欲しくない、というケースです。 その場合は…

SRVレコードを使ってgoでサービスディスカバリ経由で内部通信を行ってみた雑感

試してみた結果、厳しい気持ちになった。 なお、今回試した結果はgoの標準ライブラリの挙動をベースにしているので その他通信ライブラリ、ランタイムでの挙動を保証するものではないので注意されたし。 結論としては、可用性の高いLoad Balancerというもの…

goでmigrationをsingle binaryで提供する

goといえば、シングルバイナリだと思うんですが Databaseのマイグレーションはどのように適用していますでしょうか? 今回はgoでマイグレーションをシングルバイナリで適用する方法を考えてみたのでここに書いておきます。 はじめに 僕はJavaのWebフレームワ…

CIでAmazon ECRにDockerイメージをpushするときのプラクティス

ECRにpushするとき、皆さんはどうやってECRの認証をしていますか? 大体の人が、aws cliをインストールして認証しているのではないかと思っています。 今回はAmazon ECRへPushする仕事があったので、一から見直してみた結果をここにまとめておきます。 いく…