2011年12月14日

2011年12月7日

Asphyre Sphinx 2

Delphi/C++Builder上で2D/3Dグラフィックスを扱うライブラリとして以前取り上げたAsphyre Sphinxですが、メジャーバージョンアップした2.0.0がリリースされています。

Asphyre Sphinx 2

Delphi XE2 Update 1に対応しており、Windows x86/x64およびMacOS X/iOS上のDirectX 7/DirectX 9/DirectX 10/DirectX 10.1/DirectX 11/OpenGLをサポートしています。ライセンスは以前と同じくMPL 1.1です。

またVer1も最新版は1.1.0となっており、Delphi 2006/Turbo Delphi/Delphi 2007に加えてDelphi XEにも対応しています。

Asphyre Sphinx

元ねたは2ちゃんねるのくだすれDelphi(超初心者用)その53の902

2011年12月1日

dbExpressのODBCドライバでPostgreSQLに接続

オープンソースのRDBとして日本では人気のPostgreSQL (日本PostgreSQLユーザ会)ですが、世界的に見るとあまり重要視されておらず、dbExpressでも以前からMySQLはサポートされています(Ent/Ult/Arc SKUのみ)がPostgreSQLは予定すらない、という状況でした。しかしDelphi XE2では(これもEnt/Ult/Arc SKUのみですが)dbExpressのODBCドライバが新しく追加されました。このdbExpressのODBCドライバを経由してPostgreSQLに接続する方法についてラテンアメリカ・カリブ地域担当プロダクトラインマネージャ・リードエバンジェリストのAndreano Lanusseさんが解説しています。興味深い。とりあえずメモ。

Connecting to PostgreSQL through dbExpress ODBC driver | Andreano Lanusse Blog | Technology and Software Development | C++Builder

ODBCデータソースアドミニストレータ(odbcad32.exe)でPostgreSQLのODBCドライバを指定したデータソースを作成しておいて、dbExpressのSQLConnectionのDriverNameに'ODBC'を、ParamsのDatabaseにそのデータソース名(DSN)を指定することで、Delphi/C++Builder-dbExpress-dbExpress ODBCドライバ-ODBC-PostgreSQL ODBCドライバ-PostgreSQLサーバという形で接続できる、ということのようです。なおx64環境ではODBCデータソースアドミニストレータ(odbcad32.exe)もx86、x64の両方が存在するので、クライアントのターゲットプラットフォームによって使い分ける必要があります。

日本語だと第20回 エンバカデロ・デベロッパーキャンプの【B4】 Delphi/C++Builderテクニカルセッション 「dbExpressとマルチプラットフォーム開発」プレゼンテーション資料あたりが参考になります。

2012/02/10追記: デベロッパーキャンプのプレゼンテーション資料のリンクを追記しました。高橋さん、情報ありがとうございます(遅くなりましたが)。

2011年11月30日

[書籍]プログラミングC# 第6版

MARUZEN&ジュンク堂書店 渋谷店Programming C# 4.0の翻訳である

プログラミングC# 第6版 (amazon)/Ian Griffiths、Matthew Adams、Jesse Liberty著/鈴木幸敏、首藤一幸、株式会社情報技研訳/オライリージャパン/ISBN 978-4-87311-517-7/5,040円

を購入。

2011年11月28日

JVCL 3.45リリース

JVCL(JEDI Visual Component Library)がアップデートされてVersion 3.45(JCL Version 2.3.1)になっています。

JEDI VCL for Delphi - Browse /JVCL 3/JVCL 3.45 at SourceForge.net

またAndreas HausladenさんがコマンドラインコンパイラDCC32/DCC64が付属していないDelphi/C++Builder XE2 Starter SKUのためのコンパイル済バイナリのインストーラをCodeCentralにアップロードしています(上記のリリースバージョンそのものではなく、JCLはsvn revision 3634、JVCLはsvn revision 13184から作成したものとのことです)。

28636 Jedi Code Library 2.4.0.4198r3634 BinaryInstaller for XE2
28637 Jedi Visual Component Library 3.45r13184 BinaryInstaller for XE2

元ねたはUpdated JCL and JVCL Binary Installers for XE2 | Andy’s Blog and Tools

2011年11月22日

DORM (Delphi ORM)

Delphi XEの新機能の新しい(拡張された)RTTIと属性の利用方法として考えられるもののひとつとしてORM(Object-relational mapping)があります。新しいRTTIでクラスの持つプロパティと型情報を参照してデータベースとのマッピングに利用し、属性で個別の細かい制御を行う、というアイデアはわりと一般的なものかもしれません。実験的な実装はいくつかあるようですが、一応実用に耐えるレベルのもの、となるといまのところDaniele TetiさんによるDORM (Delphi ORM)ぐらいでしょうか。

DORM, the Delphi ORM

Delphi XE/XE2で使用可能で、対応データベースはいまのところdbExpress経由のFirebird (2.1+)またはInterBase (2009+)です。ライセンスはApache License 2.0 (en)となっています。

先日のITDevCon 2011のDaniele Tetiさんのセッションのプレゼンテーション資料

DORM, the Delphi ORM

が参考になります。

元ねたはwhile true do; » Blog Archive » dorm, “The Delphi ORM”, officially published at ITDevCon

2011年11月15日

AppWave評価ガイドビデオ

YouTubeのEmbarcaderoTechJapanチャンネルにAppWave評価ガイドのビデオがアップロードされています。興味深い。とりあえずメモ。

AppWave評価ガイド #1 - AppWaveのインストール - YouTube
AppWave評価ガイド #2 - AppWaveブラウザを使う - YouTube
AppWave評価ガイド #3 - AppWaveを管理する - YouTube
AppWave評価ガイド #4 - AppWaveアプリを作成する - YouTube
AppWave評価ガイド #5 - 既存のDelphiアプリケーションをアプリ化する - YouTube

ただしAppWaveを使用するとDelphi 2007の登録情報が破損するという情報がありますので、注意が必要です。以下tweetを引用。

http://twitter.com/#!/Tokcyu3/status/101190890642608128
AppWaveを使うとなにかのタイミングでDelphi2007の登録情報が飛んじゃうみたい。今のところ2回再登録した。ぐむむぅ…

http://twitter.com/#!/ht_deko/status/134647986130137089
先日 Delphi 2007 の再登録が必要になってしまった件は これが原因か。そういや確かに触ったよ AppWave。 RT @Tokcyu3 AppWaveを使うとなにかのタイミングでDelphi2007の登録情報が飛んじゃうみたい。今のところ2回再登録した。ぐむむぅ…

2011/11/18追記: Delphi 2007との相性の問題がQC101120として登録されています。

2011年11月11日

Generic collections library (delphi-coll)

Delphi 2009の新機能の一つにジェネリクスがあります。このジェネリクス機能を簡単に利用するためのジェネリクスクラスとして、Delphiには標準でGenerics.Collectionsユニットにが用意されています。しかしC++のSTL(Standard Template Library)のコンテナや.NET Frameworkのジェネリックコレクションに比べると必ずしも十分とはいえません。これを補うものとしてCiobanu AlexandruさんによるGeneric collections library (delphi-coll)というライブラリがあります。

delphi-coll - Generic collections library for Delphi 2010 and XE - Google Project Hosting

ライセンスは修正BSD (en)となっています。

delphi-collにはList、Queue、Stack、Set、Dictionary、Bag、MultiMap、BidiDictionary、BidiMapの各基本ジェネリクスクラスと、これらに対するObject、Linked、Sortedやその組み合わせなどにより修飾された多数のバリエーションがあります。詳細は

CollectionDetails - delphi-coll

を参照してください。またDelphi標準のジェネリクスクラスとの違いについては

DifferencesFromGenericsCollections - delphi-coll

に記述されています。なおdelphi-collをDelphi XE2で使用する場合は最新版(1.2)をSVNでチェックアウトする必要があるようです。またDelphi XE2 Update 2のコンパイラの変更により、一部のコードがエラーになる、という情報もありますので注意が必要です。

2011年11月10日

Prism XE2 Update 2

Prism XE2 Update 2がリリースされています。

28623 Embarcadero Prism XE2 Update 2 (October 2011 Release)
Embarcadero Prism XE2 Update 2 is now available
Embarcadero Prism XE2 Update 2 が公開されました

クラスヘルパ

クラスヘルパはDelphi 2007で導入された新機能で、クラスを継承することなく拡張するためのものです(Delphi 2007 HandbookにはDelphi 2007でDelphi 2006とのバイナリレベルでの互換性を確保するために導入された、とあります)。当初はクラスにしか適用できませんでしたが、Delphi 2010以降ではレコード型に対しても(レコードヘルパとして)適用することができます。しかしヘルパで定義したメソッドではpublicメンバにしかアクセスできないため、ある種のシンタックスシュガーのように考えればよいと思っていました。DelphiデベロッパチームシニアソフトウェアデベロッパのMat DeLongさん Mat DeLongさんのこのアーティクルを読むまでは。

Mat DeLong : Gaining access to private fields of a class Gaining access to private fields of a class in Delphi | Mat DeLong

これによると、private/protectedメンバであっても"Self."で修飾することでアクセスできる、と書かれています。なんですと?ということでDelphi 2007以降の各バージョンで確認してみました。
  • Delphi 2007: "Self."の有無に関わらずpublicのみアクセス可能
  • Delphi 2009: "Self."とすることでprivateはアクセスできるがなぜかprotectedはアクセス不可
  • Delphi 2010/XE/XE2: "Self."とすることでprivate/protectedもアクセス可能
Delphi 2010以降であればこの方法でより突っ込んだことができそうです。

またクラス ヘルパとレコード ヘルパ(Delphi)には

ただし、ソース コードの任意の場所で適用されるヘルパの数は、0 または 1 つだけです。
とあり、ひとつのクラスに複数のヘルパを適用することはできないのですが、ヘルパの構文として
type
  identifierName = class|record helper [(ancestor list)] for TypeIdentifierName
    memberList
  end;
とあり、継承したクラスヘルパを作成することで実質的に複数のヘルパを適用することができます。
type
  TFooHelper = class helper for TFoo
  public
    procedure Bar1;
  end;

  TFooHelperEx = class helper (TFooHelper) for TFoo
  public
    procedure Bar2;
  end;

var
  Foo: TFoo;
begin
  ...
  Foo.Bar1;  // TFooHelper.Bar1
  Foo.Bar2;  // TFooHelperEx.Bar2
  ...
こんな感じです。

2020/09/23追記: Mat DeLongさんの記事のリンクを更新しました。pmcgeeさん、情報ありがとうございます。

2011年11月9日

RAD Studio/Delphi/C++Builder XE2 Update 2 Hotfix 1

RAD Studio/Delphi/C++Builder XE2 Update 2のHotfix 1がリリースされています。
  • QC100661 Update 2適用後にOSX用C++Builder FireMonkeyアプリケーションがリンカエラーになる
  • QC100640 OSX用C++Builder FireMonkeyアプリケーションでSTLコンテナがコンパイルエラーになる
の2点を修正するものです。

28622 HotFix 1 for Delphi, C++Builder and RAD Studio XE2

Microsoft Monthly Update 2011/11

今日はMicrosoftのセキュリティアップデートの日です。
MS11-083
MS11-084
MS11-085
MS11-086

2011年11月8日

Delphi XE2でWindows x86/x64に対応するShell Extentionを作成

Shell Extention (Windows Shell)はWindowsのシェルであるexplorer.exeから呼び出されるため、Windowsがx86版であればx86で、x64版であればx64でビルドする必要があります。ということでラテンアメリカ・カリブ地域担当プロダクトラインマネージャ・リードエバンジェリストのAndreano Lanusseさんによる、Delphi XE2を使って同一のソースコードからx86とx64の両方のShell Extentionを作成するサンプルです。興味深い。とりあえずメモ。

Shell Extension for Windows 32-bit and 64-bit with Delphi XE2 | Andreano Lanusse Blog | Technology and Software Development | Delphi

2011年11月7日

FastMM 4.99リリースとQC100726

Delphi/C++Builder用のメモリマネージャFastMMが4.99に更新されています。

これに関連し、FastMM 4.99で修正された不具合のうち、
- Fixed crashes in the 64-bit BASM codepath when more than 4GB of memory is allocated.
- Fixed bad record alignment under 64-bit that affected performance.
の2点がDelphi XE2 Update 2のx64用の標準メモリマネージャにも不具合として存在しており(QC100726)、FastMMのAdminであるPierre le Richeさんが非公式なfixをフォーラムに投稿しています。

Embarcadero Discussion Forums: ATTN: Piere le Riche / FastMM 4.99
Embarcadero Discussion Forums: Unofficial fix for QC#100726

なお上記の非公式fixを導入後に公式なアップデート(Update 3やHotfix for Update 2)を適用する場合は、修復セットアップやバックアップしたファイルのリストアによってこれらのファイルをインストール時のものに戻す必要があるものと思われますので注意が必要です。

ちなみにFastMMの次のバージョンは4.100になるそうです。