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

Web のパワーでクライアントアプリケーションを構築 - WebUI

WebUI とは 簡単な実例 Go からフロントエンドの呼び出し JavaScript から Go 関数の呼び出し 結局 WebUI とはなにものなのか WebUI とは Cで書かれたクライアントアプリケーション構築用のライブラリです(バックエンドとのブリッジ部分は TypeScriptで書か…

Gradle クラスパス・依存ライブラリを表示する

blog1.mammb.com クラスパスと依存ライブラリの確認 クラスパス内容の表示 依存ライブラリの確認 クラスパスと依存ライブラリの確認 -d オプション付きでビルドを行い、 $ ./gradlew clean $ ./gradlew -d build NormalizingJavaCompiler のログでコンパイラ…

Gradle で Java モジュールを導入する場合の問題と対応方法

はじめに Java Platform Module System (JPMS) の振り返り クラスパスとモジュールパス モジュラーJAR モジュール 自動モジュールのモジュール名 明示/自動/無名モジュールの参照範囲 Gradleにおけるモジュールシステムの扱い Gradleのモジュールの扱い具体…

Java22 で追加されるマルチファイルコードの実行 (JEP 458 Launch Multi-File Source-Code Programs)

blog1.mammb.com はじめに JEP 458 Launch Multi-File Source-Code Programs Using pre-compiled classes How the launcher finds source files Launch-time operation Differences between compilation at compile time versus launch time はじめに Java11…

大規模なコード書き換えツール OpenRewrite の使い方

OpenRewrite とは OpenRewrite プラグイン設定 OpenRewrite プラグインの実行 ライセンスヘッダの追加 その他整形 OpenRewrite とは ソースコードの書き換えツール ソースコードを Lossless Semantic Tree (LST) と呼ばれるツリー表現で解釈して検索と変換を…

Jakarta Persistence 3.1 -> 3.2 変更点まとめ

blog1.mammb.com Java レコードのサポート 検索オプション FindOption の追加 @EntityResult でロックモードを指定可能に order-by 式での nulls first と nulls last サポート スタティックメタモデルに EntityType を追加 スタティックメタモデルに名前付…

Windows Path 環境変数設定

PowerShell での操作 パスの一覧 パスの設定 環境変数への保存 コマンドプロンプトでの操作 パスの一覧 パスの設定 環境変数への保存 毎度混乱する Path 設定。 PowerShell での操作 パスの一覧 PS> $ENV:Path 以下のようにすると、見やすい。 PS> $ENV:Path…

Jakarta EE Platform 11 変更点まとめ(2023年11月現在)

Jakarta EE 11 における変更の概要 Jakarta Annotations 2.1 -> 3.0 Jakarta Authentication 3.0 -> 3.1 Jakarta Authorization 2.1 -> 3.0 Jakarta Concurrency 3.0 -> 3.1 Jakarta Contexts and Dependency Injection 4.0 -> 4.1 Jakarta Config 1.0 Jakar…

Hyrum's Law (The Law of Implicit Interfaces) について

ハイラムの法則 とは ハイラムの法則 の意味するところ ハイラムの法則 による教訓 具体例 ハイラムの法則 とは Software Engineering at Googleでも紹介されたソフトウェア工学についての考察で、以下のように要約されます。 With a sufficient number of u…

Vineflower - モダンなJVM 言語用のデコンパイラ

Vineflower とは コマンドラインでの実行 コマンドラインオプション Vineflower とは レコードクラスやシールドクラス、スイッチ式などの新しい文法に対応(Java 20+)した JVM 言語用のデコンパイラです(Quiltflower 1.9.0 が、Vineflower 1.9.1 と名称変更さ…

Java22 で追加される無名変数と無名パターン (JEP 456 Unnamed Variables & Patterns)

blog1.mammb.com はじめに Unnamed variables (無名変数) ブロック内のローカル変数宣言文 try-with-resources文のリソース指定 基本的な for ループのヘッダー 拡張 for ループのヘッダー キャッチブロックの例外パラメータ ラムダ式の正規パラメータ Unnam…

Java22 で追加される FFM API (JEP 454 Foreign Function & Memory API)

blog1.mammb.com はじめに FFM API Arena MemoryLayout 外部関数のルックアップ 外部関数の呼び出し 外部関数からJavaコード呼び出し jextract によるグルーコード生成 はじめに JEP 454 Foreign Function & Memory API 通称 FFM API では、JVM外部のコード…

JPAでバイナリファイルをS3に永続化する

はじめに FileObject StorageStoreEntity S3StorageStoreEntityListener まとめ はじめに アップロードされたファイルなどのバイナリデータを、JPA の上で、透過的に S3 に永続化する実装例です。 JPA でバイナリデータを扱う場合、@Lob で BLOB として扱う…

JDK21 の変更点まとめ(JEP外)

blog1.mammb.com JEP 外の JDK 21 における変更点を、開発時に覚えておきたいものに絞りまとめておきます。 Math.clamp() メソッドの追加 範囲指定可能な String.indexOf() 区切り文字を含めて分割する String.splitWithDelimiters() StringBuilder.repeat U…

マイクロサービス・フレームワーク Armeria の始め方

Armeria とは Armeria の始め方 サービス Route デコレータ DecoratingHttpServiceFunction SimpleDecoratingHttpService DecoratingService クライアント クライアント デコレータ gRPC サービス まとめ Armeria とは マイクロサービス用のネットワーク・ラ…

AWS SDK for Java 2.x の使い方

はじめに S3 SDK 利用の流れ クレデンシャル S3クライアントの作成 オブジェクトのアップロード オブジェクトの取得 オブジェクトの一覧 オブジェクトの削除 S3 Transfer Manager S3 Transfer Manager によるアップロード S3 Transfer Manager によるダウン…

Jakarta EE 11 で追加される Jakarta Data 1.0 概説

はじめに Jakarta Data 1.0 により提供されるもの Repository クエリ定義 @Query アノテーション メソッド名によるクエリ定義 パラメータによるクエリ定義 ページング キーセット・ページネーション @StaticMetamodel まとめ はじめに 2024年3月末にリリース…

【Rust】Shift-JIS ファイルを UTF-8 へ変換

encoding_rs クレートを利用。 バイトバッファ経由での処理となるが、Shift-JISは1〜2バイト、UTF-8は1〜4バイトで、変換後のバイト数が読めないので意外と面倒。 use std::process; use std::error::Error; use std::io::Write; use std::io::Read; use std…

JUnit 5 の Temporary Directory サポート

はじめに JUnit 5 における一時ディレクトリサポート @TempDir の使い方 一時ディレクトリのクリーンアップ 一時ディレクトリ生成のカスタマイズ まとめ はじめに ファイルを利用したテストを行う際に、ファイルのクリーンアップを行うのは面倒な作業です。 …

JDK21 で追加された Emoji サポート深掘り

JDK21 の Emoji サポート Emoji Character Properties Emoji_Presentation Emoji_Modifier と Emoji_Modifier_Base Emoji_Component emoji keycap sequence emoji flag sequence emoji tag sequence (ETS) emoji ZWJ sequence まとめ JDK21 の Emoji サポー…

jlink によるカスタムJREイメージ

はじめに Hello World アプリの準備 Hello World アプリのコンパイルと実行 jlink でカスタムJREを生成する モジュールイメージ ランチャーを生成 Gradle からイメージを作成 jlink-gradle プラグイン まとめ はじめに Java Platform Module System (JPMS) …

Gradle アプリケーションプラグインでデバッグ実行する

blog1.mammb.com アプリケーションプラグインの run タスクをデバッグ実行するには以下のようにJVM引数を渡します。 application { applicationDefaultJvmArgs = listOf("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005") } デバッグ…

Gradle Plugin for GraalVM Native Image の使い方(Windows platform)

はじめに Visual Studio Build Tools の準備 プロジェクトの準備 単純なアプリをネイティブイメージ化 リフレクションを利用したアプリをネイティブイメージ化 まとめ はじめに GraalVM 公式のGradleネイティブイメージプラグインの使い方です。 Gradleネイ…

macOS で Gradle Plugin for GraalVM Native Image を動かすための抜け道

はじめに Gradle のツールチェーンでプロビジョニングした GraalVM はシンボリックリンクが壊れている Native Image Plugin(0.9.25)は、Gradle 8.3 では動かない Native Image Plugin のトレースエージェントは GRAALVM_HOME / JAVA_HOME が必須 はじめに ma…

JavaFX の Uber Jar から GraalVM ネイティブイメージを生成(Windows platform)

はじめに サンプル JavaFx アプリケーションの準備 Visual Studio Build Tools の準備 GraalVM の準備 ネイティブイメージの作成(フォールバックイメージ) リフレクション構成ファイルとネイティブイメージの生成 ネイティブイメージ実行時のコマンドプロン…

【Java】ArrayList のコンストラクタ参照にご用心

例えば、sRGB の10進定数をフィールドに持つ Item があったとして、 public static int RED = Integer.parseInt("FF0000", 16); public static int GREEN = Integer.parseInt("00FF00", 16); public static int BLUE = Integer.parseInt("0000FF", 16); priv…

JavaFx の Node クラス階層

はじめに Node クラス階層 javafx.scene.Node javafx.scene.Parent javafx.scene.layout.Region javafx.scene.layout.Pane javafx.scene.control.Control javafx.scene.Group javafx.scene.shape.Shape はじめに JavaFx では javafx.scene.Node で表される木…

JavaFx の3つの矩形境界 LayoutBounds, BoundsInLocal, BoundsInParent の違い

はじめに Transformation と effect Plain Transformation effect まとめ はじめに JavaFx のさわり始めに、必ず混乱する 3つの矩形境界 LayoutBounds, BoundsInLocal, BoundsInParent について説明します。 Transformation と effect テキスト Text を作成…

Ora2Pg による Oracle から PostgreSQL へのデータ移行手順

はじめに 基本的な作業の流れ Ora2Pg 設定ファイルの準備 Oracle への接続確認 テーブル定義のエクスポート シーケンスのエクスポート 各種エクスポートオプション テーブル名のリマップ カラム名のリマップ boolean型への変換 データのエクスポート テーブ…

Podman で Oracle Database 23c Free

はじめに Oracle 23c コンテナの起動 カスタム・スクリプト コンテナ内から sqlplus で接続 コンテナ外から sqlplus で接続 Pod 化 はじめに Oracle 23c から Docker コンテナイメージが提供されるようになりました。 旧来の Oracle express edition では、…