2009年9月15日

クラスコンストラクタとクラスデストラクタ

Delphi 2010で追加されたクラスコンストラクタクラスデストラクタですが、その名に反してクラスだけではなくレコード型に対しても定義することができます。またジェネリクスを含むクラス/レコード型に対するクラスコンストラクタ、クラスデストラクタは複数回呼び出されることがあります(Delphiのジェネリクスの実装がC#やJavaのようにライブラリによるものではなくC++のようにコンパイラによるものであることを考えれば当然なのかもしれませんが)。

Class constructors and Generics | YAPB

元ねたはNick HodgesさんRandom Thoughts on the Passing Scene #127

2009年9月13日

Delphi 2010のRTTIと属性

Robert Loveさんによる、Delphi 2010の新機能の一つであるRTTI(Run Time Type Information)の拡張と属性(Atributes)についての解説記事です(全1213回の予定)。
  1. Delphi 2010 RTTI - The basics (新しいRTTI(en)の基本的な使用方法)
  2. Using Attributes and TCustomAttribute descendants (属性として使用するTCustomAttribute(en)とその派生クラス)
  3. Exploring TRttiType and descendants in Depth (実行時に取得した型情報を扱うためのTRttiType(en)とその派生クラス)
  4. Introduction to TValue (新しいRtti.pasのTValue(en)レコード型)
  5. Exploring TRttiMember Descendants in depth (Part I) Properties and Fields (RTTI情報を扱うためのTRttiMember(en)とその派生クラスで、フィールドを扱うTRttiField(en)とプロパティを扱うTRttiProperty(en))
  6. TRttiContext.Create() & TRttiContext.Free() (TRttiContextのCreateとFreeがコンストラクタ、デストラクタ呼出ではないことについて)
  7. Exploring TRttiMember Descendants in depth (Part II) Methods (TRttiMember(en)の派生クラスのTRttiMethod(en)経由でメソッドを呼び出し(invoke))
  8. TValue in Depth (TValue(en)レコード型の詳細)
  9. INI persistence the RTTI way (RTTIの属性を利用してクラスインスタンスの情報を永続化)
  10. Xml Serialization - Basic Usage (RTTIを利用してクラスインスタンスをXMLにシリアライズ/デシリアライズ)
  11. Xml Serialization - Control via Attributes (属性でXMLシリアライズ化を制御)
  12. Attributes: Practical Example- Object to Client Dataset
  13. Types by Package... Dynamic plug-in systems.

元ねたはRob’s Technology Corner: Delphi 2010 - RTTI & Attributes

2009/09/15追記: Introduction to TValueのリンクを追加しました。
2009/09/16追記: Exploring TRttiMember Descendants in depth (Part I) Properties and Fieldsのリンクを追加しました。
2009/09/18追記: Exploring TRttiMember Descendants in depth (Part II) Methodsのリンクを追加しました。
2009/09/23追記: TValue in Depthのリンクを追加しました。
2009/10/08追記: INI persistence the RTTI wayおよびXml Serialization - Basic Usageのリンクを追加しました。
2009/10/09追記: TRttiContext.Create() & TRttiContext.Free()およびXml Serialization - Control via Attributesのリンクを追加しました。

RAD Studio 2010で拡張されたToolsAPIのサンプルコード

Chris HesikさんがRAD Studio 2010で拡張されたToolsAPIのサンプルコードを公開しています。

27315 ToolsAPI demo for plugging into the code editor in Delphi 2010

元ねたはChris’ CodeGear Debugger Blog » RAD Studio 2010 ToolsAPI: Plugging into the code editor space in the IDE

RAD Studio 2010のUML機能

Michael RozlogさんがRAD Studio/Delphi/C++Builder 2010のUML機能、検査(オーディット)機能、計測(メトリクス)機能、ドキュメント生成機能に関するwhitepaperを公開しています。

RAD Studio 2010 UML and Audits and Metrics: not the old UML!

Delphi 2010ではPro SKUでも限定的に検査機能、計測機能が使用できるようになっています。

元ねたはMichael Rozlog » Blog Archive » New UML whitepaper for RAD Studio 2010 (Delphi and C++Builder 2010)

CodeRage 4の動画公開

2009/09/08-11(PDT)に行われたオンラインカンファレンスCodeRage 4のセッションの動画が公開されています(EDNでログインする必要があります)。

CodeRage 4 Sessions & Replays

RAD Studio Roadmap

DelphiのプロダクトマネージャであるMichael RozlogさんがRAD Studioのロードマップを公開しています。

RAD Studio Roadmap

が、全然新しくないような。Newsflash: The Roadmap. « Wings of Wind Softwareでもツッコミまくりです。見た限り新しい情報は5枚目で赤線で消されている"Windows"くらいでしょうか。

2009年9月10日

Firebird 2.1.3リリース

Firebird Ver2.1.3がリリースされています。

Firebird Development: Database Engine
Firebird File Repositories(download)
Firebird 2.1 Release Notes

Firebird 2.1以降には"UPDATE OR INSERT文"なんていうのがあるんですね。

第14回エンバカデロ・デベロッパーキャンプ

2009年09月02日に大阪で開催された第14回エンバカデロ・デベロッパーキャンプのセッション資料とダイジェストビデオが公開されています。

第14回 エンバカデロ・デベロッパーキャンプ - 資料ダウンロード
セッションダイジェストビデオ「ついに登場!Delphi/C++Builder 2010の概要」

2009年9月9日

Microsoft Monthly Update 2009/09

今日はMicrosoftのセキュリティアップデートの日です。
MS09-045
MS09-046
MS09-047
MS09-048
MS09-049

MS09-048のWindows 2000/XP用の更新プログラムが存在しない(対応不能)件はいかがなものかと。

2009年9月8日

Delphi 2010は13をスキップしてVer14に

Delphi 2009はVer12だったので、順当にいけばDelphi 2010はVer13となるはずでした。が、キリスト教文化圏の悪癖で(というかそのことでグダグタいわれないために)13をスキップして14としたようです(確かにQCクライアントでも2010にはVer14が割り当てられています)。このあたりの経緯についてはAllen BauerさんのThe Oracle at Delphi » What happened to version 13?を参照。

2009年9月7日

RAD Studio 2010の新機能その12

コンパイラ/Delphi
新しい"delayed"ディレクティブでDLL内の関数のロードを実行直前まで遅延することができるようになります。詳細はAllen BauerさんProcrastinators Unite… Eventually!とその続きのExceptional Procrastination
また高橋さんがdelayedディレクティブを実際に使用する方法を紹介しています。詳細はTeam JapanDelphi 2010: 新機能 delayed ディレクティブ

IDE/言語構成ツール
言語構成ツールでIDEのUIとライブラリの言語を切り替えることができます。詳細はAndreas HausladenさんのRAD Studio 2010 now speaks multiple languages

DataSnap/REST+JSON
DataSnap上でREST経由でJSON形式のデータをやり取りする方法を高橋さんが紹介しています。詳細はTeam JapanDelphi 2010: DataSnap 2010でREST,JSONを試す

IDE/オブジェクトインスペクタ
コンポーネントのプロパティエディタをオブジェクトインスペクタ最下段の"verbs"エリアからも呼び出すことができるようになります。詳細はPaweł GłowackiさんRAD Studio 2010 - Object Inspector "verbs" area

VCL/JSON
TJSONMarshal/TJSONUnMarshalを使用してクラスインスタンスをマーシャリング(シリアライズ/デシリアライズ)することができます。詳細はDaniele TetiさんCustom Marshalling/UnMarshalling in Delphi 2010

コンパイラ/RTTI
RTTIについてのまとめ。
  • TRTTIContextはレコード型で、Create/Freeで生成、破棄する必要はありません。
  • RTTI用のデータで実行ファイルのサイズは大きくなります。
  • RTTIを使用するとprivateメンバにもアクセスできます($RTTI指令でメソッド、フィールド、プロパティの別に可視範囲を指定します)。
  • 実行時情報を元にどのメソッドでも呼び出すことができます。
  • TValueはバリアント型のように使用できます。
  • 詳細はWings of WindさんCommunity pulse: CodeRage 4, RTTI Reloaded

    コンパイラ/クラスコンストラクタ/クラスデストラクタ
    従来initialization/finalization部に記述していた処理をクラスコンストラクタ、クラスデストラクタに置くことができるようになります。クラスコンストラクタはinitialization部よりも前に、クラスデストラクタはfinalization部よりも後に実行されることが保証されています。これによりクラス依存のコードをそのクラスの外側に記述する必要がなくなり、リンカが不要なコード/データを外すことが容易になります。詳細はAllen BauerさんClass (, Static, or Shared) Constructors (and Destructors)とその続きのClass Constructors. Popping the hood.

    2009年9月6日

    IDE Fix Pack 2.7/VCLFixPack 1.4リリース

    Andreas HausladenさんIDE Fix Pack 2007およびIDE Fix Pack 2009/2010がVersion 2.7に、VCL Fix PackがVersion 1.4にそれぞれアップデートされています(Delphi 2010にはVCL Fix Packは必要ないとのことです)。

    Andy’s Blog and Tools » New IDE Fix Pack for 2007, 2009 and 2010

    2009年9月4日

    Delphi 2010 Handbook

    Marco Cantuさんによれば、Delphi 2010 Handbookを執筆中とのことです。発売まではまだしばらくかかるようですが、ebookのサブスクリプションという形で書きあがった分からリリースしていくようなことを考えているとのことです。でも英語をモニタ上で読むのはつらいので紙媒体のほうがいいかな…。

    Delphi 2010 Handbook in the Works

    2009年9月3日

    Indy10のTIdFTPコンポーネントのパッシブモードのGetメソッドの不具合

    Delphi 2007またはそれ以前のバージョン用のIndy10の最新ナイトリ(Ver10.2.3 r3568)のTIdFTPのGetメソッドには、パッシブモードで呼び出したときにTransferTimeoutプロパティの値が使用されずに永久に受信待ちになってしまう不具合があります。
    TIdFTP.InternalGetメソッド内でInitDataChannelを呼び出してFDataChannel.IOHandlerのReadTimeoutにTransferTimeoutを設定しているのですが、DataChannelのReadTimeoutがデフォルトの-1のままになっているため、LPasvCl.Connectの呼び出しの内部でDataChannel.IOHandler.ReadTimeoutにFDataChannel.ReadTimeoutを設定して結果的にTransferTimeoutの値が無視されてしまう、というのが原因と思われます。
    回避策としてはOnDataChannelCreateイベントでDataChannel.ReadTimeoutにもTransferTimeoutを設定してしまう、という方法が考えられます。
    procedure TDataModule1.IdFTP1DataChannelCreate(ASender: TObject;
                                                   ADataChannel: TIdTCPConnection);
    begin
    
      if (ASender <> nil) and (ASender is TIdFTP) then
      begin
        if (TIdFTP(ASender).Passive = True) and
           (ADataChannel <> nil) and (ADataChannel is TIdTCPClientCustom) then
        begin
          TIdTCPClientCustom(ADataChannel).ReadTimeout := TIdFTP(ASender).TransferTimeout;
        end;
      end;
    
    end;
    

    2009年9月1日

    JVCL 3.38リリース

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

    Browse JEDI VCL for Delphi Files on SourceForge.net

    JCLが2.0でDelphi/C++Builder 5、Kylix 3、Delphi.netをサポートしなくなったため、JVCLもこれらのバージョンでは動作しないと思われます(JVCL 3.37 with JCL 1.105が最終バージョン)。

    トライアル版にはコマンドラインコンパイラが付属しておらずそのままではインストールできないため、JCL 2.0.1とJVCL 3.38のバイナリインストーラをAndreas Hausladenさんが用意してくれています。ダウンロードは下記のページから。

    元ねたはAndreas HausladenさんAndy’s Blog and Tools » JEDI Code Library 2.0.1 and JVCL 3.38

    2009/09/06追記: Andreas Hausladenさんによると、JVCL 3.38はDelphi 2010のdelayedディレクティブの影響でテーマ描画関係がうまく動作しなくなってしまっているようです(JCLには影響しないとのこと)。
    Andy’s Blog and Tools » Once upon a delayed JVCL time…

    Windowsユーザエクスペリエンスガイドライン

    MSDNライブラリでVisual Style(Windows Vista/7)に対応した"Windows ユーザー エクスペリエンス ガイドライン"(UXガイド)が公開されています。PDF版もあります(775ページもありますね)。

    Windows ユーザー エクスペリエンス ガイドライン

    元ねたはCrystal Dew R&D LabsさんのWindows ユーザー エクスペリエンス ガイドライン

    2009年8月27日

    RAD Studio 2010の新機能その11

    dbExpress/SOAP
    WDSLインポートウィザードを含むSOAP 1.2サポートが追加されます。詳細はWings of WindさんRAD Studio 2010 Review #12: – Tooling, Help, UnicodeChris BensenさんRAD Studio 2010 - SOAP 1.2

    DataSnap/HTTPサポート
    DataSnapでプロトコルとしてHTTPを使用するときにサーバ側をISS+ISAPIのDLLで構成することができます。詳細はJim TierneyさんDataSnap 2010 HTTP support with an ISAPI dll

    コンパイラ/Delphi
    as演算子、is演算子でインタフェース参照から元のクラス(インスタンス)にキャストできるようになります。詳細はMalcolm GrovesさんCasting an Interface Reference to the Implementing Class in Delphi 2010

    コンパイラ/RTTI
    クラスやそのメンバに属性(attribute)を付加(annotate)し、RTTIでそれを取得することにより、実行時に属性情報による処理を行うことができます。詳細はMalcolm GrovesさんMore Attributes in Delphi 2010

    IDE/リファクタリング
    属性に対してもリファクタリング機能が使えます。詳細はMalcolm GrovesさんRefactoring Support for Attributes in Delphi 2010

    DataSnap/JSON
    DataSnapでTDBXCallbackを使用してサーバメソッド内からコールバック関数を呼び出すことができます。詳細はAdrian AndreiさんDatabase Connectivity : Don’t call me, I’ll call you…

    2009年8月26日

    RAD Studio 2010の新機能その10

    ネタをためてしまうと駄目ですね。毎日少しずつでも書かないと…。
    Database/dbExpress
    dbExpressでFirebirdのサポートが追加され、BlackfishSQL、DataSnap、Sybase ASA (Adaptive Server Anywhere)、Sybase ASE (Adaptive Server Enterprise)、IBM DB2、Firebird、Informix、Interbase、Microsoft SQL Server、mySQL、Oracleといったデータソースを扱えるようになります(非常に残念なことにInterBase/FirebirdはProfessional SKUに含まれませんが)。またMidas.dllのソースコード(C++)が付属するようになります。詳細はWings of WindさんRAD Studio 2010 Review #10: – Database Jewels。またAndreano LanusseさんによるビデオもNew dbExpress driver for Firebird in Delphi 2010 and C++Builder 2010で見られます。

    VCL/マルチタッチ
    実機を使えば簡単にマルチタッチを扱うアプリケーションが作れますよ、というお話。詳細はTeam JapanさんDelphi 2010/C++Builder 2010: マルチタッチを試す

    DataSnap/サーバ-クライアント通信
    ウィザードでDataSnapサーバを簡単に作成でき、これを実行しておけばDataSnapクライアントから呼び出すサーバ側のメソッドをプロパティエディタ上からドロップダウンで選択するだけで簡単に呼び出しコードができてしまいます。またクラスインスタンスをJSONでシリアライズして転送することもできます。詳細はWings of WindさんRAD Studio 2010 Review #11: – DataSnap。またDataSnap上でのJSONの扱いかたについてはAdrian AndreiさんDatabase Connectivity : JSON Types for Server Methods in DataSnap 2010で、DataSnapを使用した軽量クライアントについてはTeam JapanさんDelphi 2010: DataSnapでOracle11gに接続するで、それぞれ詳しく説明されています。

    RAD Studio 2010発売紹介ビデオ

    RAD Studio 2010の発売にともなって公式ページがRAD Studio 2010 エヴァリュエーションセンターになり、RAD Studio 2010についてMichael Swindellさん(製品戦略担当副社長)とJan Libandさん(マーケティング担当副社長)が紹介するビデオが追加されています。2010の次はクロスプラットフォームと64bit対応、という方向性はまだそのままのようです。