mike-neckのブログ

Java or Groovy or Swift or Golang

Java

雑記 - Fiber はなくなりました

…え、あれ? Fiber なくなったの? Project Loom はコケたということ?マジで?!調べてみた!

java -version の結果

たぶん @yamadamn さんが既にやっているやつ。 調べることにした経緯は、 aws amplify cli のバージョンチェックがおかしいため。 github.com 上記のチェックでは、 java -version の結果が /(\d+\.)(\d+\.)(\d)/g にマッチすることを前提にしているが、どう…

GraalVM コミュニティー版のバージョンロードマップ

正確なものは公式ドキュメントを読んでください。これは 2020-08-09 時点の単なるメモです。 www.graalvm.org マイナーフィーチャーリリースは 3 ヶ月ごとに行われる 2, 5, 8, 11 月の 17 日 新しいフィーチャーリリースは以前のものに取って代わる(以前のも…

指定時刻と現在時刻の差分を求める duration というツールをリリースした

ISO-8601 形式で入力した日時と現在時刻の差分を求める duration というツールをリリースしました。 github.com

graalvm-native-image プラグイン 0.6.1 続いて 0.7.0 をリリースしました

表題のとおりですが、 0.5.0 をほぼ全部書き換えています。 API そのものは変更していないので、ユーザーが既存のビルドを維持する場合に現在の DSL に手を加える必要はありません plugins.gradle.org 正確には v0.6.1 を 2020-06-21 に v0.7.0 を 2020-06-3…

Gradle の C++ プラグインを使って JNI から C++ のコードを呼び出すアプリケーションをビルドする(Android プロジェクトではない)

GraalVM の native-image を作る際に利用する config.json を自動生成させて、アプリケーションを複数回実行してマージするというのをやろうとしており、 JNI を使う Java アプリケーション(JNA ではない)を Gradle でビルドする必要が出てきたが、残念なこ…

Proxy の InvocationHandler から interface の default メソッドを呼び出す方法

proxy を取得する対象のインターフェースクラスで MethodHandles.lookup() を呼び出して MethodHandles.Lookup を取得する で取得した MethodHandles.Lookup のインスタンスから unreflectSpecial(Method, Class) を呼び出して、MethodHandle を取得する pro…

検査例外を検査無しで投げる邪悪な方法

netty のコードで結構前に見かけて覚えていたけど、完全に失念してて悔しかったので、メモ 呼び出し側にとってはこういうコード書かれたらかなり邪悪だと思う。

sdkman で複数のバージョンの Java をディレクトリーごとに切り替える

複数のプロジェクトを行ったり来たりする際に、プロジェクトごとに Java のバージョンが違っている際は、たいてい IntelliJ が覚えていてくれるので、それほど困ってはいないのですが、世の中にはターミナルでなんでもこなす人がいるらしく、プロジェクトご…

github actions で GraalVM でつくったネイティブアプリケーションを GitHub リリースする

date コマンドを使うときにいつもググって調べるくらいの unix 音痴で、 Java の JSR310 ならすぐできるのにと思うことが多いので、そのようなコマンドを作ることにしました。 github.com 機能はまだ作り込んでいなくて、まずはフォーマットを指定できるだけ…

Picocli + Kotlin + graalvm-native-image plugin でネイティブツールを作る

ちょっと Java(Kotlin) でツールでも作ろうと思ったので、勉強のためにチュートリアルやってみた。やってみたという話なので何も深いことは書いてない。

JUnit Platform Engine の作り方

JUnit Jupiter でのテストクラスの書き方は、世の中にたくさん、このブログよりも SEO に長けているブログの記事が見つかるので、それを参照されるがよい。 そうではなくて、ここでは JUnit Platform Engine の書き方、作り方の手引を書く。 ちなみに、僕は …

MacOSX で DBeaver を起動する

データベースの ERD を整理したいこともあり、よいツールはないものかと探していたところ、 eclipse ベースの DBeaver (読み方は「ディービーバー」だと思う、アイコンがビーバーだから)がよさそうだと思い、使ってみようとしたのだが…

graalvm-native-image プラグイン 0.3.0 をリリースしました

表題のとおりです。 plugins.gradle.org

最近見た残念なコード

最近見た残念なコード。なお、プロダクションで使われているコードなので、意味内容を変えつつ誇張して書いているため、実際はここまでひどくはない。 class App { Map<String, String[]> map; public void add(String protocol, String base, String[] paths) { for (String p</string,>…

Windows で GraalVM の native-image を動かす場合の手順

この前教えてもらったりして一通り理解したつもりだったけど忘れてしまって調べ直したという経緯から記録にしておこうと思った。また、 GraalVM で native-image やってみましたと言っている日本語のブログなどが、すべて Mac / Linux が前提で、 Windows で…

JAX-RS(Jersey) on ServiceTalk with Spring

2019 年の Java アドベントカレンダーの2日目のエントリーです。この前に書いた ServiceTalk の記事の続きです。今回は ServiceTalk の上で JAX-RS アプリケーションを動かします。 mike-neck.hatenadiary.com github.com

Enumeration を使いやすくする(Iterable にする/Iterator にする)

TL で Enumeration が使いづらいというツイートが流れてたら、鮮やかに解決するツイートも流れてきた。 なるほどなー、これ実際にはそのままダイレクトには書けないですけど、明示的にキャストしてあげれば書けますねfor (String name : (Iterable<String>) request.</string>…

JJUG CCC 2019 Fall で発表した #jjug_ccc

表記の通り、 JJUG CCC 2019 で発表してきた。 jjug-cfp.cfapps.io もともと発表資料を Key Note で作っていたものの、前日に予行演習した際に 90 分かかってしまい(セッションの時間は45分)、資料中に無駄な要素と有用な要素が分かちがたく結びついているな…

Apple 製の ネットワークアプリケーションフレームワーク ServiceTalk

2019/11/6 くらいに apple が servicetalk という Netty ベースのネットワークフレームワークを発表していたので、この数日間さわっていました。 さわった印象は、SpringBoot(Web) や micronaut 、 Helidon 、 Quarkus といった軽量 Web フレームワークに比…

Validation には例外を使わない

マーチン・ファウラーの文章を読んだのでメモ。 martinfowler.com

雑学 - パラメーターの個数は254個まで

調べたら 254 個までだった。 パラメーター 254 個 jshell> interface StrFun254 { String apply(String arg1,String arg2,String arg3,String arg4,String arg5,String arg6,String arg7,String arg8,String arg9,String arg10,String arg11,String arg12,S…

メモ - Google App Engine の Java バージョン

cloud.google.com Google が維持管理する OpenJDK または OpenJDK+Jetty9 Docker イメージ上でアプリを実行する と書いてあったので、警察ではありませんが調べてみた。

Mono<Void> は常に empty

当然といえば当然ですが、意外と気づかない。 例えば、特定の条件を満たさないとリクエストを処理しないような WebFilter を記述する。 @Bean WebFilter webFilter() { return (exchange, chain) -> { Optional<String> requestDate = extractRequestDate(exchange);</string>…

resilience4j の RateLimiter を少しだけいじった

resilience4j の RateLimiter を少しだけいじったので、そのメモ。 ここの実装はダメな実装になってるので、ちゃんとした使い方を調べてる人は他をあたった方が良い(強く推奨)。

loom の JDK をビルドしてみた

表題の通り、 project loom の JDK をビルドしてみた。 環境 以下の環境でビルドした。癖で(バーストしない方がよいかなと思って)インスタンスタイプは m5a.large にしたけど、 t3a.micro とかでもいいかもしれない(よくわからん)。 マシン : aws ec2 m5a.la…

JJUG CCC 2019 Spring で 「Collections Framework 入門」というタイトルで発表してきました #jjug_ccc

表題の通り、発表してきました。 jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1 from Shinya Mochida www.slideshare.net いくつか質問を発表後にいただきましたので、ここであらためて回答します (Q) 資料のコードの…

JMH の細かい実行制御

JMH で何かしらの処理のパフォーマンスを計測する時に、すべての計測対象が必ずしもステートレスにできないケースがある。 例えば、 List<String> にデータが 1万レコードほどある時に、 add(int, String) の呼び出しのパフォーマンスを計測する場合など。 この例の</string>…

今更な Effective Java 番号1. コンストラクターより static ファクトリーメソッドを選ぶ

今勤めてる企業で質問された際に、うろ覚えで答えたので、もっかい Effective Java 読んだので、そのメモ 番号1. コンストラクターより static ファクトリーメソッドを選ぶ pros コンストラクターとは異なって、名前を持てる コンストラクターとは異なり、イ…

pixela-java-client のバージョン 0.3 を maven central repository にリリースしました

なるべく 月1度リリースしようと心がけてはいますが、ちょっと時間が経ってしまいました。 ということで、 pixela-java-client のバージョン0.3 を maven central repository にリリースしました。 https://search.maven.org/search?q=pixela github.com ↑ C…