JavaでBrotli(ブロートリ)を使う

Java Brotli 圧縮する方法を紹介します。

Brotli ブロートリ 2015 年に Google が発表した圧縮アルゴリズムおよびその実装です。zlib よりも 15~25%くらい圧縮率が高くなります。LZMA と比べてもわずかに圧縮率が高いです。

Brotli の展開には専用のデコーダーが必要になりますが すでに Chrome Firefox Edge Safari Opera など主要なブラウザーが Brotli をサポートしています。

JavaでZopfli(ツオップリ)を使う

Java Zopfli 圧縮する方法を紹介します。

Zopfli ツオップリ 2013 年に Google が発表した圧縮アルゴリズムおよびその実装です。zlib よりも 3~8%くらい圧縮率が高くなります。圧縮率だけで言えば Zopfli を上回るアルゴリズムはいくつもあります。Zopfli の最大の特徴は Deflate 互換であることです。つまり Zopfli で圧縮したデータは既存の Deflate デコーダーで展開することができます。

JavaFXバインディングで宣言的プログラミングを実現する

JavaFX にはバインディングという強力な仕組みがあります。バインディングを導入することで 従来の命令的だった手続き型プログラミングを宣言的なプログラミングに変えることができます。この記事では バインディングとはなにか? 宣言的とはどういうことか? 概念的な説明だけでなく具体的な GUI サンプル アプリケーションを例に解説していきます。

JavaFXダイアログのボタン表示を変更する

JavaFX にはダイアログを表示するための Alert というクラスがあります。とても 便利なのですが 確認ダイアログを表示したときのボタンはいまいちだと思うのです。

ボタンのキャプションが 取消 ですよ。AWT/Swing の時代は 了解 取消し という表示だったので 了解 OK に変わっただけでも改善が見られるわけですが…。どうせなら 取消し キャンセル に変更しておいて欲しかったです。

文句を言っても仕方ありません。自前で JavaFX ダイアログのボタン 取消 キャンセル に置き換えてしまいましょう。

Apache Commons Logging のログ出力を抑制する

Apache Commons Logging Log4j java.util.logging など他のロガー実装に処理を委譲してくれるブリッジ ライブラリです。Apache Commons Logging API を使ってログを出力するようにコードが書かれていれば ログ出力に使う実装を java.util.logging から Log4j に切り替えるといったことが簡単にできます。

マウスホバーでゆっくり色が変わるボタンを作る(JavaFX)

JavaFX では CSS を使って UI の外観や振る舞いを装飾することができます。CSS セレクタに hover 擬似クラスを指定することもできるので マウスカーソルを重ねたときに外観を変えるのも簡単です。

ですが JavaFX CSS3 transition プロパティをサポートしていないため 時間経過で次第にボタンの色を変えていくといったことは CSS だけでは 実現できません。

マウスホバー時にゆっくりと色が変わるボタンを JavaFX で作ってみます。

JavaFXでUIスレッドの処理が完了するまで待機する

JavaFX はスレッドセーフではありません。

これは JavaFX に限ったことではなく 世の中に存在するほぼすべての UI ツールキットはシングルスレッドモデルとして設計されており スレッドセーフではありません。AWT Swing Android .NET Framework WindowsForms WPF Linux を含むクロスプラットフォームの GTK いずれもスレッドセーフではないのです。WPF は独立した描画スレッドを持っていますが 開発者が触れるのは UI スレッドのみであり他のツールキットと同様の UI スレッド制御が必要であることからシングルスレッド UI として分類しました

Eclipseでコード補完が効かなくなるバグ

先日 Java のコードを書いているときに Eclipse のコード アシストが効かなくなる事態が発生しました。

ウェブで検索してみると .settings の中にあるファイルの content_assist_disabled_computers の行をコメントアウトするとか Eclipse ContentAssist 設定で Java Proposals のチェックが外れていないか確認する といった解決策が見つかります。しかし いずれの方法を試しても解決せず。

さらに調べてみたところ Java の複雑な構文を使用しているとコード アシストが効かなくなるバグが Eclipse にあることが分かりました。確認に使用したバージョンは Eclipse 2019-03 です