【Rust】winit と tiny-skia で低レベルなグラフィックス描画 〜テトリスを作る①〜

はじめに テトロミノ ブロック 盤面と落下ブロック テトリス ブロックの移動と当たり判定 はじめに 前回は、winit と tiny-skia にて簡単なウインドウへの描画方法について説明しました。 blog1.mammb.com 今回は、もう少しだけ凝った例として、テトリスをゲ…

【Rust】winit と tiny-skia で低レベルなグラフィックス描画ことはじめ

はじめに Are we GUI Yet? にある通り、Rust で GUI を扱う場合のライブラリは、未だ決定打が無い状況にあります。 ディスクトップ・アプリケーション の構築には、WebView ベースの Tauri が、現時点での有力候補になるでしょうか。最近では、Atom の後継エ…

Java コンソール出力が文字化けする場合にやるべきこと

はじめに Java 18 からJEP 400: UTF-8 by Defaultにより、デフォルトのエンコーディングが UTF-8 に統一されたため、Windows 環境での文字化けが頻出する。 対策としては、全て UTF-8 に統一してやるのが良い。 ソースコードを UTF-8 とする システムプロパ…

Zig Lang の始め方 - 環境構築編 -

Zig Lang とは インストール WinGet Homebrew 手動インストール バージョン確認 VS Code Extension zig コマンド Hello World Zig Build System Zig Lang とは 2016年登場の新しい命令型静的型付けコンパイル言語 簡素で明確な言語仕様 GC無し(メモリはスタ…

Java の Character.isSpaceChar() / Character.isWhitespace() の違いと String.trim() / String.strip() の違いが良くわからなくなった時に見るメモ

はじめに スペースの定義の違い スペースっぽいもの全てを切り捨てる はじめに Character.isSpaceChar() と Character.isWhitespace() はいずれも引数の文字がスペースかどうかを判定する static メソッドだが、その違いは? 文字列の前後のスペースを削除す…

JDK23 で正式公開 文字列テンプレート(JEP 465: String Templates)

blog1.mammb.com はじめに 従来の文字列構築 文字列テンプレート 埋め込み式(Embedded expressions) マルチライン テンプレート式 テンプレートプロセッサ FMT テンプレートプロセッサ RAW テンプレートプロセッサ StringTemplate と Processor ユーザ定義の…

Gradle 8.6 における init タスクの変更点

gradle init タスクの対話入力省略 ソースパッケージの対話入力を削除 Kotlin DSL スクリプト マルチモジュールプロジェクトの convention plugins gradle init タスクの対話入力省略 gradle init タスクに --use-defaults オプションが追加された。 これを…

Gradle(Kotlin DSL) 依存Jarから特定ファイルを引っぺがす

blog1.mammb.com 遷移的に依存する Jar を除外するには、単に exclude を指定するだけで事足ります。 例えば以下は、org.hibernate:hibernate:3.1 が依存する対象を除外する例となります。 dependencies { implementation('org.hibernate:hibernate:3.1') { …

Java でニューラルネットOCR - Tess4Jの使い方 -

Tess4J とは Tess4J の使い方 OCR エンジンとデータファイル パラグラフ単位の結果取得 PDFファイルからのOCR読み取り Tess4J とは オープンソースのOCRエンジン Tesseract を Java から利用するラッパーライブラリです。 Tesseract は、1985年よりHPにより…

Beyond Jakarta EE 11

Jakarta EE 11 のその先へ 注目トピック 量子コンピューティング AI/ML Robotics Edge Computing Supersede EJB Modernize Messaging Modularity Spec support Industry specific API Patterns その他のアイデア Better defaults for Persistence Less XML i…

JEP 238: Multi-Release JAR Files

概要 ゴール 動機 ディスクリプション 詳細 互換性 Class loader resources モジュラー・マルチリリース Jar ファイル Classpath と modulepath マルチリリース Jar とブートローダ 概要 JARファイル・フォーマットを拡張し、複数バージョンのクラス・ファイ…

【Rust】Cargo.toml チートシート

package セクション name フィールド version フィールド edition フィールド rust-version フィールド authorsフィールド description フィールド documentation フィールド homepage フィールド repository フィールド readme フィールド license フィール…

【Rust】Cargo チートシート

バージョン確認 cargo new cargo init プロジェクトレイアウト cargo build cargo run cargo check cargo test cargo fix cargo doc cargo clean cargo search cargo add cargo update cargo tree cargo install / uninstall cargo publish Cargo は Rust の…

【Rust】画像ファイルのリサイズ

プロジェクト作成 cargo init resize_img cd resize_img image クレートを追加 cargo add image image クレートを使い、以下のようにリサイズ処理を実装できる。 use std::error::Error; use image::imageops::FilterType; fn main() -> Result<(), Box<dyn Error>> { l</dyn>…

AWS CLI S3 コマンド クイックリファレンス

AWS

AWS CLIインストール macOS Windows 初期設定(認証設定) バケットを一覧表示 オブジェクトの一覧表 オブジェクトの削除 オブジェクトの移動 オブジェクトのコピー オブジェクトの同期 バケットの作成 バケットの削除 AWS CLIインストール macOS $ brew insta…

Gradle(Kotlin DSL) でファイルダウンロードして解凍

blog1.mammb.com 任意ファイルのダウンロード zip ファイルの解凍 ダウンロードして解凍 任意ファイルのダウンロード 任意のファイルをダウンロードは以下のように書くことができます。 val url = "https://path/to/file.zip"; val file = layout.buildDirec…

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…