JavaのUnicode入出力問題を回避する

Java の文字列内部表現は UTF-16 となっており Unicode を扱うことができます。ですが プラットフォーム OS との境界部分となるコマンドライン引数とコンソール出力についてはプラットフォーム OS の文字コードとの変換がおこなわれるため Unicode を扱えない部分があります。

Windows Java における Unicode 入出力問題と回避方法について紹介します。

Windowsのwprintf関数はUnicodeを出力できない?

C 標準ライブラリ関数には標準出力に文字列を出力する printf 関数があります。これをワイドキャラクタ ≒Unicode 出力に対応させたバージョンが wprintf 関数です。

ところが Windows wprintf 関数は Unicode を出力できないというのです。にわかには信じられない話です。本当にそんなことがあるんでしょうか?

wprintf 関数の問題点と Windows のコンソールに Unicode を出力する方法を解説します。

バッチファイルで使えるショートカット作成コマンド

実行ファイルへのショートカットをバッチファイルから作成する方法を紹介します。

ショートカットを作成する機能は ShellLink オブジェクトによって提供されています。ShellLink オブジェクトは Windows Scripting Host WSH からも呼び出せるので VBScript VBS JScript でショートカット作成コマンドを実装することもできるのですが 今回は C++を使って実行ファイル EXE としてショートカット作成コマンドを実装してみました。

JettyでFreeMarkerを使うとテンプレートが見つけられなくなる

FreeMarker テンプレートエンジンを使った Web アプリケーションを Jetty アプリケーションサーバーで数日稼働させていると以下の例外が発生することがありました。

freemarker.template.TemplateNotFoundException: Template not found for name "index.ftl".

なぜかテンプレート ファイルが見つけられなくなってしまうのです。その原因は Jetty Windows にありました。

Java 12に対応したexewrap 1.4リリース

Java 12 に対応した exewrap 1.4 をリリースしました。

exewrap 1.3.1 以前のバージョンで作成した実行ファイルを Java 12 で実行するとコンソールに以下の警告メッセージが表示されます。メッセージが表示されるだけでアプリケーションの動作自体には問題ありません

OpenJDK 64-Bit Server VM warning: Archived non-system classes are disabled because the java.system.class.loader property is specified (value = "Loader"). To use archived non-system classes, this property must not be set

この問題が exewrap 1.4 で改善しています。exewrap 1.4 で作成した実行ファイルであれば Java 12 実行環境でも上記のメッセージは表示されなくなります。

ApacheでのLet's Encrypt運用が簡単になりました
2019-07-10 Web Windows

Let’s Encrypt は無料でサーバー証明書を発行してくれる認証局です。2016 年のサービス開始以来 急速に普及しています。

Let’s Encrypt の証明書発行には ACME プロトコルに対応したクライアントソフトウェアを使います。主要な ACME クライアントソフトウェアは ACME Client Implementations で紹介されています。Let’s Encrypt のサイトでは certbot というツールが推奨されているのですが このツールは Windows には対応していません。Windows 環境では win-acme 旧名 letsencrypt-win-simple というツールが良く使われているようです。

私も これまで win-acme を使ってきたのですが 先日 ふとしたことで mod_md という Apache モジュールの存在を知りました。mod_md win-acme よりもずっと簡単に使えます。ただし mod_md Apache モジュールであるため Apache 環境でしか使えません。IIS など他のウェブサーバーに Let’s Encrypt を導入するのであれば 引き続き win-acme が有力な選択肢になります。

Apache 2.4.30 以降で利用可能になった mod_md モジュールを使って Let’s Encrypt 証明書を導入する手順を紹介していきます。

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

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

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

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

WindowsにSubversion 1.12サーバーを構築する

過去に Windows 用の Subversion 1.9 サーバー構築手順を紹介したとことがあります。その後 Apache Subversion のバイナリ配布形態に変化があり 以前の記事の手順通りでは Subversion 環境構築できなくなってしまいました。

本稿は Subversion サーバー構築手順のアップデート記事 2019 年版 です。Windows Subversion 1.12 サーバーを構築する手順を解説します。今回は手軽に環境構築できるオールインワン パッケージも用意しました。

UWPアプリ仮想化レジストリ(registry.dat)の作り方

最近 Java でデスクトップ ブリッジ UWP アプリの開発に取り組んでいます。その中で 既定では存在しないレジストリのいくつかを読み取る必要が出てきました。既定では存在していないレジストリなので なんらかの方法で事前に書き込みをしておかなければなりません。

デスクトップ ブリッジでは権限があればレジストリへの書き込みもできるようですが できることなら権限を要求せずに解決したいところです。そこで デスクトップ ブリッジ UWP の仮想化されたレジストリ機能を使ってみることにしました。

デスクトップ・ブリッジを使ってJavaアプリをUWPアプリにしよう

Java アプリをデスクトップ ブリッジ UWP アプリとして.appx パッケージにまとめると Microsoft Store を通して Java アプリを配布できるようになります。

本記事では Desktop App Converter ではなく MakeAppx コマンドを使って Java アプリを UWP アプリ パッケージ化する方法を解説します。