Quercus で使うときの問題点はまだあったな。忘れてた。
タイムゾーン設定で Asia/Tokyo を選択すると、それ以降の設定項目が表示されなくなりました。とりあえず UTC+9 に設定して回避したけども、一度この状態になっちゃうと Web からは修復できなくなるので MySQL を直接叩いて直すはめになります。
まだ事業開始準備中ですが、ダウンロード販売専門のアプリケーション ストアを設置しました。iOS や Android 向けのアプリケーションは各公式ストアでの販売となりますが、それ以外の商品は順次こちらに追加してまいります。
オライリーから出版されている Jenkins の解説書です。Java 以外のネイティブ言語の自動ビルドがどの程度まで自動化できるのか調べたかったので購入したものですが、基本的に Java 中心でそれ以外はシェルでコマンドを書けばどんなことでもできるというぐらいしか書いてなかったので、本来の目的からすれば参考程度でした。Java がメインならこれだけでも十分役に立つと思います。
現在のところ英文のみですが、プライバシー ポリシーを公開しました。近いうちに日本語版も公開の予定です。
Java で書かれた PHP 互換処理系として Quercus というものがあります。PHP で書かれたアプリケーションを Java アプリケーション サーバー上で動作させることができるというものですが、実はこのブログを書いている WordPress も Quercus 上で動かしていたりします。
実のところ WordPress を Quercus で動かすためには、いくつか越えなければいけないハードルがあったわけなので、そのいくつかをここに記しておきます。
最初に気が付くのはやはり文字化けでしょう。これにはいくつか理由が挙げられますが主なものは次の二つです。
最初のものは WEB-INF/php.ini (Quercus の php.ini ファイル) で unicode.semantics = 1 として PHP6 のように Unicode を使うように指定することで回避することができる場合もありますが、PHP6 はキャンセルになった模様ですし、別のところで問題が出る可能性があるのでここでは使いません。代わりに、Java を騙して UTF-8 マルチバイト文字列を ISO-8859-1 だと思わせる方法を取ります。そのために WEB-INF/php.ini ファイルで mbstring.internal_encoding = UTF-8 と指定します。
しかしこれだけでは JDBC ドライバーが勝手に Unicode に変換して MySQL テーブル上で文字化けを誘発しますので、もう一手売っておく必要があります。何をするかというと、MySQL の JDBC クライアントのプロパティで characterEncoding=ISO8859_1 と指定するだけです。
こんなことをすると普通なら逆に文字化けを引き起こしそうなものですが、WordPress の MySQL 特化設計のおかげで、MySQL サーバー側には適切なエンコーディングが設定がされるので、JDBC ドライバーは何も知らずにバイト列を素通してしまって文字化けが回避されるという望ましい結果が得られます。
ほかにも手間取りそうなところはありますが、今回はここまでとします。
コマンドラインから MSBuild で Win64 向けにプロジェクトをビルドすると、いつもプリコンパイル ヘッダーで参照したファイルが更新されたというエラーになる件について調べてみた。
まず Win64 向けの BCC64 は CLang ベースであるのはわかっているので、CLang のプリコンパイル済みヘッダーのフォーマットを調査して、llvm-bcanalyzer というツールで内容のダンプができることを確認した。
次に正常にビルドできる IDE で生成したプリコンパイル済みヘッダーと MSBuild で生成したものを GNU/Linux にコピーして llvm-bcanalyzer で内容を比較した。ファイルが更新されたというエラーが出ることから、そのファイル名を手がかりにタイムスタンプを探したところでビンゴ。MSBuild で生成したものは 1970 年 1 月 1 日 00:00 UTC からの秒数で正しく記録されているのに対し、IDE で生成したものは 1970 年 1 月 1 日 00:00 JST からの秒数になっていることが判明した。BCC64 は後者を期待していて、前者だと数値が大きくなるのでファイル更新と誤認する模様である。これが原因なら米国では (タイムスタンプの大小が逆転するので) 再現しないのも説明できる。
以上のように調査したので修正してほしいなあ。
やったことを記録しておく。
debootstrap
でコンテナー用のファイルシステムを用意する。chroot
でそのファイルシステム内でシェルを起動して、
MAKEDEV
が使えるようにする。/etc/inittab
を編集して tty3
以降のログインを無効にする。/var/lib/lxc/container/config
ファイル (内容は後記) を用意する。