Delphi もやっています

当工房は C++ (C++Builder) と Java が得意分野ですが、RAD Studio のコンポーネント作成には Delphi の方が好都合ですので、Delphi も扱っています。

古い Delphi プログラムの Unicode 対応等の近代化改修も承りますので、お気軽にご相談ください。

freetel priori2 をテスト機として調達

以前のテスト機で失敗 (メモリ不足なのかデバッグができない) したので、今回追加でテスト機を調達しました。本当は Nexus 5 辺りが良かったのですが、予算がないので freetel の priori2 です。

今回は本体メモリが 1 GB あるせいか、デバッガーがいきなりデバッグを放棄すると言うこともなく、Android SDK の USB ドライバーをインストールするだけで、adb_usb.ini の編集もなしで認識されると言う、素直な良いテスト機と言うのが最初の印象でした。

なぜか USB のソケットがトップ側にあるんですけどね。

追記: Wi-Fi は 2.4 GHz だけのようです。

RAD Studio アプリケーションのローカライズ

RAD Studio アプリケーションのローカライズに使うリソース DLL プロジェクトについてなのですが、フォルダーに XLIFF 形式のファイルが作られるので、Transifex のような外部サービスを使って翻訳できるのかと思ったら、全く読み込んでくれませんでしたね。リソース DLL プロジェクトは RAD Studio コマンド プロンプトから MSBuild を使ってビルドすることもできませんし、全く困ったものです。

Jenkins 用 RAD Studio Plugin

過去記事を調べてみたらブログには書いてなかったことに気づいたので、改めて RAD Studio Plugin を紹介しておきます。

このプラグインの機能は、RAD Studio (Delphi もしくは C++Builder) のプロジェクトを簡単にビルドできるようにするだけです。必要な環境変数の設定は RAD Studio コマンド プロンプト用のバッチファイルから読み取るので、RAD Studio 各バージョンのインストール先をそれぞれ設定しておけば、ビルドに利用するバージョンを選択して、プロジェクトファイルと MSBuild のコマンド スイッチを指定するだけで、ビルドすることができます。もうバッチ ファイルで細工する必要ありません。

もし役に立つと感じたら、フィードバックをいただけるとありがたいです。

Jenkins 用 Tool Labels Plugin

先日の RAD Studio Plugin に続き、調子に乗って Tool Labels Plugin を公開いたしました。

このプラグインの機能は、インストール済みツールによりノードに動的にラベルを追加するというものです。ツールのインストール有無によりビルドを実行するノードを限定するのが目的で製作しました。

実を言えば、RAD Studio Plugin の新機能として企画していたのですが、他のツールにも使えることに気づいて、急遽 独立したプラグインに仕立てたものなのですけどね。例えば、RAD Studio XE7 に bds15.0 というラベルを付けておくと、インストール済みノードに動的にこのラベルが付くので、ビルドを実行するノードを限定するのに使えるようになる訳です。

便利だと感じたらフィードバックをいただけるとありがたいです。

Android Emulator でスクリーンショットが…

Android Emulator でアプリの公開用スクリーンショットを撮ろうといろいろ試してみたのだが、Host GPU を使う設定にすると Android SDK の機能ではどうやっても無理という結論に到達しました。

Host GPU を使わない設定では動作しないアプリだし、高速なエミュレーターの使える x86 版も出せないので、もう残る手段はホスト上に表示されたウィンドウ画像をキャプチャするぐらいしか思いつきませんね。

RAD Studio に対するスタンス

これまたどうでもよい話ですが、私の RAD Studio に対するスタンスについて釈明しておきます。

一応公言しているつもりですが、私はオープンソース推進派ですので、原則としてはオープンソースでないソフトウェア利用は避けたいと考えています。それではなぜ RAD Studio を使うのかといえば、見栄えのする GUI を簡単に作成できるオープンソースのツールに適当なものがなかったからに過ぎません。JavaFX があるじゃないかと指摘されるかもしれませんが、JRE への依存性を考えるとためらわざるを得ないというのが正直なところです。

RAD Studio でも Delphi ではなく C++Builder をメインにしているのも、C++ であれば別の環境への移植が容易だろうという判断によります。RAD Studio を利用する上では Delphi でやった方が簡単なことはいくつもあります (インターフェース定義等) が、ほかに Object Pascal の使えるオープンソースのツールがない以上は C++ 以外の選択は現在のところ考えられません。

そんなわけで、個人的に RAD Studio のコア部分についてはオープンソース化してもらえると、バグ修正などでフィードバックができるようになって大変ありがたいのですが、今の状況を見るとまずあり得ないでしょうねえ。

C++Builder の不具合分析

コマンドラインから 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 は後者を期待していて、前者だと数値が大きくなるのでファイル更新と誤認する模様である。これが原因なら米国では (タイムスタンプの大小が逆転するので) 再現しないのも説明できる。

以上のように調査したので修正してほしいなあ。