2015年10月6日

RAD Studio/Delphi/C++Builder XE7 Summer 2015 Update

アップデートサブスクリプション導入時に新たに追加された"継続的なメンテナンス"の第1弾としてとして、RAD Studio XE7のSummer 2015 Updateがリリースされています。インストーラ起動時に表示されるとおり、あらかじめXE7のライセンスマネージャでXE8のシリアル番号を登録する必要があるので注意してください。

30410 Summer 2015 XE7 Update Subscription Update

以下の修正がXE8からバックポートされているとのことです。なおCC上でサイズが0バイトと表示されていますが、実際には670MB(703,218,288bytes)あります。

2015年10月5日

Spring4Dのマルチキャストイベントを使う

Delphi/VCLの大きな特徴のひとつである"PMEモデル(Properties, Methods and Events model)"の"E"、イベントハンドラは基本的に関数ポインタ(実際にはTMethod = データポインタ + 関数ポインタ)で実装されており、結果としてイベントはユニキャスト、つまりある事象の通知を受け取れるのは一つのイベントハンドラのみ、ということになっています。しかし状況によってはマルチキャスト、つまり複数のイベントハンドラに事象の通知を送りたい、ということがあります。デザインパターンでいうとオブザーバパターンとなるような状況です。デザインパターンの定石に従って、たとえばBranko StojakovicさんのGoF Patterns in DelphiObserverNick HodgesさんMore Coding in Delphiにあるように、IObserverとISubjectを実装して…というやりかたも考えましたが、マルチキャストで通知したい事象が何種類もある状況だと、何らかの形でジェネリックス化されている実装でないと厳しそうです。そこで探してみると、Spring4DというDI(dependency injection)フレームワークでマルチキャストイベントが実装されているということだったので、これを試してみることにします。なおSpring4DのライセンスはApache License 2.0です(日本語参考訳)。またSpring4Dそのもの(DIコンテナとしてのSpring4D)については第28回エンバカデロ・デベロッパーキャンプのLTの岡野さんプレゼンテーション資料が非常に参考になります。

まずSpring4Dのなかでマルチキャストを実現しているのはEvent<T>レコード型になります。これを使用するのに必要なユニットですが、Source\Baseフォルダにある
  • Spring.pas
  • Spring.inc
  • Spring.ResourceStrings.pas
  • Spring.Events.Base.pas
  • Spring.Events.pas
  • jedi.inc
です。もちろんSpring4Dをインストールして検索パスにSpring4D関係のフォルダを追加しても構いませんが、マルチキャストだけを試すのであればこれらのファイルをコピーして.pasファイルをプロジェクトに追加するだけでも大丈夫です。

では実際にEvent<T>でマルチキャストを試してみます。今回はメインフォームからモードレスなサブフォームをいくつか表示して、フォーム上のボタンクリックの発生と、その累計回数を各フォームに通知します。

まず通知のためのイベントと、イベントを登録/削除するインタフェースを定義します。
type
  TNotifyNumber = procedure (Sender: TObject; Number: Integer) of object;

  ISubject = interface
    procedure Add(AEvent: TNotifyNumber);
    procedure Remove(AEvent: TNotifyNumber);
  end;
TNotifyNumberが通知のためのイベントハンドラの型、ISubjectがそのイベントハンドラを登録/削除する機能を持たせたインタフェースです。メインフォーム、サブフォームの両方で使用するので別ユニットで定義しておきます。次はメインフォームです。
uses
  Spring, ...

type
  TForm1 = class(TForm,ISubject)
    ...
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FEvent: Event<TNotifyNumber>
  public
    procedure Add(AEvent: TNotifyNumber);
    procedure Remove(AEvent: TNotifyNumber);
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FEvent := Event<TNotifyNumber>.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FEvent.Clear;
end;

procedure TForm1.Add(AEvent: TNotifyNumber);
begin
  FEvent.Add(AEvent);
end;

procedure TForm1.Remove(AEvent: TNotifyNumber);
begin
  FEvent.Remove(AEvent);
end;
メインフォームはISubjectインタフェースを継承するようにして、AddとRemoveを実装します。Event<T>はレコード型ですが、内部の適切な初期化のためにclass function Createを呼び出しておく必要があります。AddとRemoveでは単にEvent<T>のAddRemoveを呼び出すだけです。一方サブフォームでは
type
  TForm2 = class(TForm)
    ...
  private
    FSubject: ISubject;
  public
    property Subject: ISubject
               read  FSubject
               write FSubject;
  end;
メインフォームをISubjectとして保持するためのプロパティを用意します。これでメインフォームからサブフォームを生成、表示する処理は
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(Self) do
  begin
    Subject := Self;
    Show;
  end;
end;
となります。サブフォーム側ではボタンクリックで任意にマルチキャストイベントを登録、削除できるようにしてみます、
type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    ...
    procedure DoNotifyNumber(Sender: TObject; Number: Integer);
  public
    ...
  end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Subject.Remove(DoNotifyNumber);
  Action := caFree;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  Subject.Add(DoNotifyNumber);
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  Subject.Remove(DoNotifyNumber);
end;

procedure TForm2.DoNotifyNumber(Sender: TObject; Number: Integer);
begin
  Label1.Caption := 'Notified number is ' + IntToStr(Number);
end;
procedure DoNotifyNumberがマルチキャストイベントのイベントハンドラで、これをButton1/Button2のクリックイベントでSubjectにAdd/Removeすることで登録、削除します。最後にメインフォーム側からのマルチキャストイベントの呼び出しです。
type
  TForm1 = class(TForm,ISubject)
    ...
    Label1: TLabel;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    FCount: Integer;
    ...
  public
    ...
  end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FCount := FCount + 1;
  Label1.Caption := IntToSTr(FCount);
  FEvent.Invoke(Self,FCount);
end;
Selfと1ずつ増える整数値(FCount)でEvent<T>のInvokeメソッドを呼び出すだけです(正確にはInvokeはイベントハンドラ型(<T> = <TNotifyNumber>)のプロパティで、Invoke(...)とすることでメソッドの呼び出しになる)。

Spring4DのEventがよくできていることもあってそれほど難しくはないと思います(気をつけなければならないのはclass function CreateによるEvent<T>の明示的な初期化くらい)。ただEvent<T>のTには通常のイベントハンドラ(procedure ... of object)だけでなく、無名メソッド(reference to ...)も入れられるのですが、この場合Event<T>で保持されるものが自動的に生成される無名メソッド値(TInterfacedObjectの派生クラスのインスタンス)であり、そのポインタをAddの呼び出し側(TForm2)では知ることができないためRemoveできない、という点には注意が必要です。

2015年10月1日

RAD Studio/Delphi/C++Builder 10 Seattle PAServer Hotfix

RAD Studio/Delphi/C++Builder 10 SeattleのPAServer Hotfixがリリースされています。OS X 10.11対応とiOS 9 SDK対応とのことです。またUpdate Subscriptionとは関係なくダウンロードできます。

30398 PAServer Hotfix for Delphi, C++Builder and RAD Studio 10 Seattle

PAServer Hotfix for RAD Studio 10 Seattle - iOS 9 and OS X El Capitan
How to use custom Info.plist XML to support iOS 9's new App Transport Security feature

2015/10開催のセミナー

2015年9月24日

GetIt経由でインストールしたTurboPack LockBox 3.5がRAD Studio XE8と10 Seattleで干渉する問題とその暫定解決策

RAD Studio XE8で導入されたGetItパッケージマネージャは、簡単にコンポーネントなどのパッケージをIDEに登録することができる便利なツールです。ところがここに登録されているTurboPack LockBox 3.5のパッケージ名がXE8のものと10 Seattleのもので同一("LockBox3DR.bpl"、"LockBox3DD.bpl")となっており、パッケージは環境変数PATHに従って検索されるため、同一環境上のXE8と10 Seattleの両方にLockBoxを入れると先にインストールしたIDEが誤って別のバージョンのbplファイルを読み込んでしまいエラーになる、という現象があります(2015/09/24現在)。この問題、既にTurboPackのメンテナであるRomanさんのほうでは認識しており、GitHub上のリポジトリではXE8のほうのLIBサフィックスには220、10 Seattleのほうには230がつけられているのですが、GetItで配布されるものにはまだこれらの変更が反映されていないようです。

ということで暫定解決策ですが、次の3つが考えられます。
  1. GetItを使わずGitHubから最新のもの(XE810 Seattle)をチェックアウトしてインストールする。
  2. 誤動作するほうのバージョンのIDEのショートカットの作業フォルダにbplの保存先を明示的に指定する(XE8なら"C:\Users\Public\Documents\Embarcadero\Studio\16.0\Bpl"、10 Seattleなら"C:\Users\Public\Documents\Embarcadero\Studio\17.0\Bpl")。
  3. 自分でLIBサフィックスを指定しなおす。具体的には
    1. "ファイル"→"プロジェクトを開く"でXE8なら"C:\Users\<username>\Documents\Embarcadero\Studio\16.0\CatalogRepository\LockBox-3.5.0\packages\Delphi"、10 Seattleなら"C:\Users\<username>\Documents\Embarcadero\Studio\17.0\CatalogRepository\LockBox-3.5.0\packages\Delphi"にあるDelphi.groupprojを開く
    2. プロジェクトマネージャでLockBox3DD.bplを右クリック→アンインストール
    3. 当該バージョンのbplフォルダにある"LockBox3DR.bpl"と"LockBox3DD.bpl"を削除する
    4. LockBox3DD.bpl、LockBox3DR.bplのプロジェクトオプションでターゲットを"すべての構成 - すべてのプラットフォーム"にしておいて、"説明"のLIBサフィックスを220(XE8)または230(10 Seattle)に変更する
    5. "プロジェクト"→"すべてのプロジェクトをコンパイル"でコンパイルする(DEBUGビルドのみでいいようです)
    6. LockBox3DR220.bpl(XE8)またはLockBox3DR230.bpl(10 Seattle)を右クリック→インストール
    という手順になります。この場合、GetItからLockBox 3.5をアンインストールしたときに完全に削除されなかったりするかもしれませんが、その場合はアンインストール後にマニュアルでbplフォルダの下のLockBox*.*とCatalogRepositoryフォルダ(C:\Users\<username>\Documents\Embarcadero\Studio\XX.X\CatalogRepository)の下のLockBox-3.5.0フォルダを削除すればいいようです。
(C++Builderをお使いの方は"packages\CBuilder\CBuilder.groupproj"だったり"LockBox3CR.bpl"だったり"LockBox3CD.bpl"だったりしますが、適当に読み替えてください)

休日にもかかわらず鋭い指摘をいただいた、おに(@onimaro2010)さんに感謝いたします。とりあえずまとめました。

2015年9月21日

[書籍]C++ 11/14 コア言語

同じく紀伊國屋書店新宿本店

C++ 11/14 コア言語 (amazon)/江添亮著/ドワンゴ/ISBN 978-4-04-869424-7/4,104円

を購入。

[書籍]Effective Modern C++

紀伊國屋書店新宿本店Effective Modern C++ (amazon.com)の翻訳である

Effective Modern C++ (amazon)/Scott Meyers著/千住治郎訳/オライリージャパン/ISBN 978-4-87311-736-2/4,104円

を購入。

2015年9月12日

RAD Studio/Delphi/C++Builder 10 Seattle DUnitX Update

RAD Studio/Delphi/C++Builder 10 SeattleのDUnitX Updateがリリースされています。DUnitX関係のファイルの更新のようです。

30368 DUnitX Update for RAD Studio, Delphi, and C++Builder 10 Seattle

2015年9月9日

Microsoft Monthly Update 2015/09

今日はMicrosoftのセキュリティアップデートの日です。
MS15-094
MS15-095
MS15-096
MS15-097
MS15-098
MS15-099
MS15-100
MS15-101
MS15-102
MS15-103
MS15-104
MS15-105

2015年9月3日

[書籍]Delphi in Depth: ClientDataSets 2nd Edition

同じくCreateSpaceで注文した

Delphi in Depth: ClientDataSets 2nd Edition (CreateSpace, Amazon US)/Cary Jensen Ph.D.著/CreateSpace/ISBN 978-1505840186/34.99USD

が配送されてきました。34.99USD("More Coding in Delphi"のついでなのでshippingは考えないことにして)=6,191JPY(暫定、1USD=124.41JPY)でした。

[書籍]More Coding in Delphi

CreateSpaceで注文した

More Coding in Delphi (CreateSpace, Amazon US)/Nick Hodges著/CreateSpace/ISBN 978-1941266106/39.99USD

が配送されてきました(今回の配送はi-parcel/佐川急便でした)。2015/08/18に注文して16日目の到着、39.99USDにShippingの9.77USD("Delphi in Depth: ClientDataSets 2nd Edition"の分も込み)で締めて49.76USD=6,721JPY(暫定、1USD=123.74JPY)でした。

2015年9月1日

2015/09開催のセミナー

2015年8月27日

[書籍]暗号技術入門 第3版

ジュンク堂書店 吉祥寺店

暗号技術入門 第3版 (amazon)/結城浩著/SBクリエイティブ/ISBN 978-4-7973-8222-8/3,240円

を購入。

2015年8月19日

[書籍]Object Pascal Handbook

CreateSpaceで注文した

Object Pascal Handbook (CreateSpace, Amazon US)/Marco Cantu著/CreateSpace/ISBN 978-1514349946/46.50USD

が配送されてきました(今回の配送はi-parcel/佐川急便でした)。2015/08/07に注文して13日目の到着、46.50USDにShippingの7.38USDで締めて53.88USD=6,721JPY(暫定、1USD=123.74JPY)6,823JPY(1USD=126.634JPY)でした。ちなみにかなり分厚いです(実測で31mmでした)。日本語版も期待してます。

Microsoft OOB Update 2015/08

Microsoftの定例外のセキュリティアップデートがリリースされています。
MS15-093

2015年8月12日

2015年8月5日

IDE Fix Pack 4.4 for Delphi 2007 Windows 10 Edition

Andreas HausladenさんIDE Fix Pack for Delphi 2007のWindows 10対応版がリリースされています。Windows 7およびそれ以前では4.4を、Windows 8/8.1では4.3を、Windows 10では4.4 Windows 10 Editionを、というようにWindowsのバージョンによって対応が分かれているので注意が必要です。

IDE Fix Pack 4.4 for Delphi 2007 – Windows 10 Edition | Andy's Blog and Tools

2015年8月4日

IDE Fix Pack 5.93

Andreas HausladenさんIDE Fix PackがアップデートされてVersion 5.93となっています。今回はWindows 10対応(Windows 10が関数アライメントのパディングにNOPではなくINT3を使うことに対応)だけとのことです。

IDE Fix Pack 5.93 – Windows 10 support | Andy's Blog and Tools

2015年8月1日

2015/08開催のセミナー

2015年7月15日

2015年7月8日

7th anniversary

この1年間(2014/07/08-2015/07/07)のエントリは71で、週平均1.4弱でした。相変わらずお知らせばっかりでしたね。続いてアクセス解析の統計情報から月別ページビュー(PV)を。

2014/07: 4,460
2014/08: 4,002
2014/09: 4,259
2014/10: 4,087
2014/11: 3,752
2014/12: 3,876
2015/01: 3,500
2015/02: 3,431
2015/03: 4,314
2015/04: 4,882
2015/05: 4,209
2015/06: 4,434

2014/07-2015/06合計: 49,206

ついに50,000PV/yearを切ってしまいましたが、最近だと書籍関係のまとめが好評のようです。

最近のDelphi関係の話題といえばやはりアップデートサブスクリプションの導入でしょう。開発ツールに(売り切りではなく)いわゆるサブスクリプションモデルは適合しにくいと思うんですけれども、そのあたりは(いかにもアメリカンにアバウトな感じで)修正しながら、ということになるようです。現状のアップデートサブスクリプションモデルのもとでは、アップデートサブスクリプションに入るか、入らないのであれば使いたいバージョンの次のバージョンが出たところでアップグレードする(買ったバージョンではなく直前のバージョンを使う)、ということになるでしょうか。歪んでますねぇ。

ここのところ仕事もオーバフロー寸前のところで動いていてなかなか記事も書けないのですが、直近では久しぶりに新規の案件が入ってXE8にアップグレードしましたし、新たにDataSnapを本格的に使うので、このあたりでまたアウトプットを出していければと思っています。あとは名古屋でやるという勉強会的なイベントに行ければいいなぁ。また1年間お付き合いください。

2015年7月1日

2015/07開催のセミナー

2015年6月24日

DataSnapサーバまとめ

DataSnapサーバを作るにあたって、ヘルプのDataSnap アプリケーションの開発あたりに載っていなかったり、載っていても気をつけたほうがいいと個人的に思ったことをまとめました(ユニットやクラス、あるいはそのリンクはDelphi XE8のものです)。
  • サーバメソッドでサポートされているデータ型

  • クラスインスタンスのマーシャリング/アンマーシャリング

    • Delphiのオブジェクト(クラスインスタンス)は、基本的に送信側でTJSONMarshalMarshalメソッドでTJSONValueにマーシャリング(変換)したものを送信し、受信側では受信したTJSONValueをTJSONUnMarshalUnmarshalメソッドでアンマーシャリング(逆変換)して元のクラスのインスタンスに戻します(アンマーシャリングの結果の型はTObjectなのでasで本来のクラスにキャストします)。
    • クラスインスタンスのリスト(TObjectListTObjectList<T>)はそのままではマーシャリング/アンマーシャリングできないため、
      var
        Values: TJSONArray;
        Item: TFoo;
        List: TObjectList<TFoo>;
      begin
        ...
        for Item in List do
        begin
          Values.AddElement(Marshal.Marshal(Item));
        end;
      
      のようにそれぞれの要素をマーシャリングしたものをTJSONArrayAddElementメソッドで追加していって、そのTJSONArrayを受け渡して、
      var
        Values: TJSONArray;
        Item: TJSONValue;
        List: TObjectList<TFoo>;
      begin
        ...
        for Item in Values do
        begin
          List.Add(UnMarshal.Unmarshal(Item) as TFoo);
        end;
      
      TJSONArrayのItems[]プロパティ(またはenumerator)で取り出したJSONValueをアンマーシャリングする、という方法が考えられます。
    • RTL経由で適切にシリアライズできないようなクラスのメンバを扱う場合は、マーシャラ(TJSONMarshal)およびアンマーシャラ(TJSONUnMarshal)に特定の型またはメンバに対応する変換/逆変換処理をRegisterConverterRegisterReverterで登録して処理させる、ということになります。詳細はユーザー オブジェクトのシリアル化を参照。

  • TJSONValueとその派生クラスについて

    • DelphiでJSON形式の値を扱うときにはTJSONValueの派生クラスを使用します。
      • TJSONNullはJSONのnull値に対応します。
      • TJSONFalse/TJSONTrueはJSONの真偽値(false/true)に対応します。
      • TJSONStringはJSONの文字列値に対応します。
      • TJSONNumberはJSONの数値(整数、浮動小数点数)に対応します。
      • TJSONArrayはJSONの配列("JSON形式の値"の配列)に対応します。
      • TJSONObjectはJSONのオブジェクト("文字列のキーと値のペア"の順序付けされていない集合)に対応します。"文字列のキーと値のペア"はTJSONPairとして実装されています。ペアはAddPairメソッドで追加し、逆に文字列のキーからペアを取り出すにはGetメソッドを使用します。

  • サーバクラスのインスタンスのライフサイクルについて

  • セッションの管理について

    • サーバメソッド内でセッションを取得するときはTDSSessionManager.GetThreadSessionメソッドを使用します。またセッションに関する操作にはSessionIdが必要になります。詳細はサーバー側セッション管理を参照。
    • 全てのセッションに対して処理を行いたいときはTDSSessionManagerのForEachSessionメソッドを使用して、
      TDSSessionManager.Instance.ForEachSession(
          procedure (const Session: TDSSession)
          begin
            //
          end);
      
      とします。
    • セッションごとにデータを保持させたいときは、TDSSessionのPutObjectGetObjectHasObjectRemoveObjectの各メソッドで特定のキー(文字列)と結びつける形でTObjectのインスタンスの保持、取得、問い合わせ、削除ができます。保持させたデータはセッションが所有しており、セッションが破棄されるときに解放されます。
    • セッションが生成、破棄されるごとに処理を行いたい場合はTDSSessionManagerのシングルトンインスタンスであるInstanceAddSessionEventでイベント(イベントハンドラや無名メソッド)を登録します(RemoveSessionEventで登録を削除することもできます)。
      TDSSessionManager.Instance.AddSessionEvent(
          procedure(Sender: TObject;
                    const EventType: TDSSessionEventType;
                    const Session: TDSSession)
          begin
            case EventType of
              SessionCreate:
              begin
                // Session is created
              end;
      
              SessionClose:
              begin
                // Session is closed
              end;
            end
          end);
      

  • 重量コールバック(クライアントコールバック)の管理

    • TDSCallbackTunnelManagerのAddTunnelEventRemoveTunnelEventメソッドでトンネルおよびコールバックの登録、解除を通知するコールバック関数を登録、解除できます。
      TDSCallbackTunnelManager.Instance.AddTunnelEvent(
          procedure(Sender: TObject; const EventItem: TDSCallbackTunnelEventItem)
          begin
            case EventItem.EventType of
              TunnelCreate:
              begin
                // Tunnel is created
              end;
      
              TunnelClose:
              begin
                // Tunnel is closed
              end;
      
              TunnelClosedByServer:
              begin
                // Tunnel is closed by user
              end;
      
              CallbackAdded:
              begin
                // Callback is added
              end;
      
              CallbackRemoved:
              begin
                // Callback is removed
              end;
            end;
          end);
      

  • TCP/IP接続を監視

2015/06/25追記: Mat DeLongさんとJim Tierneyさんのブログを参考に一部の項目を追加。

2015年6月19日

RAD Studio/Delphi/C++Builder XE8 Update 1

RAD Studio/Delphi/C++Builder XE8のUpdate 1がリリースされています。

30278 General Update 1 for RAD Studio, Delphi, and C++Builder XE8
30282 Subscription Update 1 for RAD Studio, Delphi, and C++Builder XE8

30284 Delphi and C++Builder XE8 ISO (includes Subscription Update 1)

30304 Boost for RAD Studio & C++Builder XE8 Subscription Update 1

XE8 Update 1 のリリース ノート - RAD Studio (en)

RAD Studio XE8, Delphi XE8, C++Builder XE8 の Subscription Update 1における不具合修正リスト
Subscription Update 1 Fix List for RAD Studio XE8, Delphi XE8, and C++ Builder XE8

XE8からはUpdate Subscriptionに加入しているかどうかで受け取れるバグフィックス、アップデートが異なる、ということになりましたが、XE8 Update 1もGeneral Update 1とSubscription Update 1で内容に差があります。General Update 1には" Community toolbar"、"iOS 8 simulator fix"、"Several files missing from the initial XE8 delivery"のみが含まれ、"Favorites in welcome page"、"Fast search of Bluetooth LE devices"、"Improved robustness of IDE productivity features"、"Improvements in multi-device previews"はSubscription Update 1のみ、となっています。

2015/07/08追記: C++Builder XE8のBoost 1.39用のヘッダファイルの更新(30304)が追加されています。

2015年6月10日

2015年6月1日

2015/06開催のセミナー

2015年5月21日

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

本日10:00から第30回エンバカデロ・デベロッパーキャンプ・イン東京がベルサール新宿グランドコンファレンスセンターで行われます。セッション資料は

ダウンロード | デベロッパーキャンプ

からダウンロードできるようになる予定です(2015/05/21 10:00以降)。またUStreamで全セッションの中継が予定されています(CH1がG/Fセッション、CH2がEセッション)。

無事(?)終了しました。セッションスピーカのみなさん、関係者のみなさん、おつかれさまでした。

2015/05/25追記: 早くもセッションリプレイの公開が始まっています。
  • 【G1】ケーススタディセッション ユーザーショーケース「C++Builderを用いたマルチOS対応一般コンシューマ向けスマートフォンアプリ開発事例」
  • 【G2】ジェネラルセッション「IoT時代のマルチデバイス開発環境」
  • 【F3】テクニカルセッション「業務システムにモバイルを!実践エンタープライズモバイル開発プロジェクト」
  • 【E3】Delphi/C++テクニカルセッション「移行プロジェクトでもモバイル開発でも必須!今からでも間に合うデータモジュール活用法」
  • 【F4】Delphi/C++テクニカルセッション「RAD Studio XE8 の新機能とその活用法」
  • 【E4】Delphi/C++テクニカルセッション「今さら聞けない!? FireDAC入門 ~ オンメモリーデータベース編」
  • 【F5】Delphi/C++テクニカルセッション「RAD Studioで始めるモバイル開発 ~ コンポーネントで簡単入門!勘所も押さえよう」
  • 【E5】Delphiテクニカルセッション「DelphiによるEnterpriseアプリケーション開発 ~ 当社パッケージの内部構造、開発方法ご紹介」
  • 【G6】ライトニングトーク「共有!みんなの開発事例、開発経験、テクニック」
2015/05/27追記: セッション資料がダウンロードできるようになっています。

第30回 エンバカデロ・デベロッパーキャンプ資料ダウンロード

2015年5月16日

2015年5月13日

2015年5月6日

RAD Studio/Delphi XE8 iOS 8 Simulator Hotfix (Beta)

RAD Studio/Delphi XE8のiOS 8 Simulator Hotfix (Beta) for XE8がリリースされています。FireMonkeyマルチデバイスアプリケーションをiOS 8.xシミュレータ上で動作させられるようにするもののようです。Updates, hot fixes, and patches are provided exclusively to customers with an active Update Subscription, however, this particular critical patch is being provided to all XE8 customers.とのことで、Update Subscriptionとは関係なくダウンロードできます。

30221 iOS 8 Simulator Hotfix (Beta) for XE8

iOS 8 Simulator Hotfix (Beta) for Delphi and RAD Studio XE8 is available in Registered User Downloads - Blogs
iOS8シュミレータへアプリを配置すると「No such file or directory」エラーが出る件について

2015年5月1日

2015/05開催のセミナー

2015年4月22日

DDevExtensions 2.83/IDE Fix Pack 5.9

Andreas HausladenさんDDevExtensionsIDE Fix PackがRAD Studio XE8に対応しました。

DDevExtensions 2.83 for XE8 released | Andy's Blog and Tools
IDE Fix Pack 5.9 for RAD Studio 2009-XE8 | Andy's Blog and Tools

2015/09/20追記: DDevExtensionsがRAD Studio/Delphi/C++Builder 10 Seattleに対応して再リリースされています。内容に変更はないとのことで、バージョンも2.83のままとなっています。

2015年4月15日

Microsoft Monthly Update 2015/04

今日はMicrosoftのセキュリティアップデートの日です。
MS15-032
MS15-033
MS15-034
MS15-035
MS15-036
MS15-037
MS15-038
MS15-039
MS15-040
MS15-041
MS15-042

2015年4月11日

RAD Studio/Delphi/C++Builder XE7 Update 1 iOS 8.1.3/8.2 Deployment Beta Hotfix

RAD Studio/Delphi/C++Builder XE7 Update 1のiOS 8.1.3/8.2 Deployment Beta Hotfix for XE7がリリースされています。Update subscriptionで提供されていたもの(の一部?)のようで、署名とプロビジョニングを変更してiOS 8.1.3および8.2での問題の回避策を自動化するもの、ということのようです。

30190 iOS 8.1.3/8.2 Deployment Beta Hotfix for XE7 Pro
30189 iOS 8.1.3/8.2 Deployment Beta Hotfix for XE7 Ent and above

2015/05/07追記: 3018930190とも2015/05/06(たぶんPDT)付で更新されています。A rebuilt hotfix was posted on 5/6/2015 to address issues some customers were running into.とのこと。

2015/06/04追記: 3018930190とも2015/06/03(たぶんPDT)付で再更新されています。

2015年4月10日

[書籍]SQL実践入門

紀伊國屋書店新宿本店

SQL実践入門 (amazon)/ミック著/技術評論社/ISBN 978-4774173016/2,786円

を購入。

2015年4月7日

第30回エンバカデロ・デベロッパーキャンプ開催決定

第30回エンバカデロ・デベロッパーキャンプは恒例となった大阪と東京のダブル開催(キャンプ・ツアー)で、2015年05月19日(大阪)および2015年05月21日(東京)に開催されます。

デベロッパーキャンプ

今回は製品担当マネージャであり、Handbookシリーズの著者でもあるMarco Cantùさんの来日がついに実現します。

RAD Studio/Delphi/C++Builder XE8リリース

RAD Studio/Delphi/C++Builder XE8が正式にリリースされました(販売開始は明日(2015/04/08)とのこと)。

RAD Studio XE8の新機能

Delphi® XE8 および C++Builder® XE8 オンライン ヘルプ (en)
XE8 のリリース ノート - RAD Studio (en)
Delphi XE8 および C++Builder XE8 の新機能 - RAD Studio (en)
RAD Studio XE8(Delphi XE8/C++Builder XE8) における不具合修正リスト (en)

30171 Delphi XE8 and C++Builder XE8 ISO

30185 BDE Installer for RAD Studio, Delphi, C++Builder XE8
30197 Missing SQL database files for Delphi XE8 (インストール時のオプションによりiOS用のlibファイルが不足する不具合のfix)
30326 Missing Java2Op files for RAD Studio, Delphi, and C++Builder XE8 (JavaOp2に必要なファイルが不足している不具合のfix)

30146 IP*Works for Delphi XE8
30147 IP*Works for C++Builder XE8
30148 AQtime Standard for RAD Studio, Delphi and C++Builder XE8
30186 FastReport VCL 5 for RAD Studio, Delphi and C++Builder XE8
30149 FastReport FMX for RAD Studio, Delphi and C++Builder XE8
30232 Mida Converter Basic for RAD Studio XE8

30179 VCL Premium Styles Pack for RAD Studio, Delphi & C++Builder XE8
30180 FireMonkey Premium Styles Pack for RAD Studio XE8
30183 RAD Studio XE8 FireMonkey Accessibility Pack
30233 Custom VCL Style for Windows 10
30258 Custom FireMonkey Style for Windows 10

2015/04/07注記: FastReprt VCLはまだリリースとなっていないようです。

2015/04/08追記: FastReprt VCLもリリースされました。

2015/04/11追記: 30148 AQtime Standard for RAD Studio, Delphi and C++Builder XE8が2015/04/10付で差し替えになっています。

2015/08/11追記: 必要なファイルが不足していてJava2Opが動作しない件のfix(30326)のリンクを追加しました。

2015年4月1日

Firebird 2.5.4

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

Firebird: Firebird 2.5.4
Firebird 2.5 リリースノート (PDF)
Firebird 2.5 Release Notes (PDF)

2015/10/10追記: 日本語版のリリースノートのリンクを追加しました。Firebird日本ユーザー会の翻訳によるものです。翻訳に関わった皆さん、ありがとうございます。

2015/04開催のセミナー

2015/04/07追記: RAD Studio/Delphi/C++Builder XE8関係のwebセミナーの情報を追記しました。

2015年3月11日

2015年3月3日

RAD Studio 2015 ロードマップ

またもや長らく更新されていなかったRAD Studioのロードマップが久しぶりに更新されています(2015年Q1版)。

RAD Studio 2015 Roadmap - Blogs

適当な要約:
  • 新しいプラットフォームとコンパイラ
    • iOS
      • C++/Object Pascalの両方でiOS 64ビットプラットフォーム用の新しいツールチェインを準備中
      • Appleのユニバーサルバイナリをサポート
    • Windows x86 C++
      • x64と同様にC++11を含むLLVMベースのツールチェイン
  • 開発環境(IDE)
    • Object Pascal/C++の両方で開発者の生産性を拡張
    • 大規模メモリモデルによるIDEの安定性の向上
    • IDEに統合されたライブラリマネージャテクノロジー
    • 複数デバイスプレビューを含むFireUIマルチデバイスデザイナの拡張
  • Windows 10サポート
    • VCL/FMXの両方に
    • 新しいコンポーネントとライブラリ
    • Broad APIのカバー
    • 新しいWindows 10のプラットフォームテクノロジとの統合
  • VCL/RTL
    • スタイル、フル4Kモニタサポート、大きいフォントなどの拡張によるVCLの改良
    • アプリケーションの分析(VCL/FMXの両方)
    • 全てのプラットフォームに対応するネイティブHTTP(S)クライアントライブラリ
  • FireMonkey
    • コントロールの拡張
      • 地図のような新しいモバイル用コンポーネント
      • WebBrowserのようにデスクトップに欠けていたコンポーネント
      • さらなるiOSの制御とzオーダ管理
    • パフォーマンスの最適化
  • Internet of Things
    • ビーコン技術のサポートによるモバイル近接統合
    • 異種APIによる異なるデバイス/ガジェットとの接続のコンポーネントベースモデル
    • データ収集/分析のためのリモートエンドポイント
  • エンタープライズ/多層
    • FireDAC:新しいエンタープライズ級のデータベースドライバ、パフォーマンスの向上
    • InterBase XE7のチェンジビュー
    • EMS(エンタープライズモビリティサービス)とのより緊密な統合
    • NoSQLデータベースのサポート
    • EMS:プッシュ通知といくつかの拡張
    • DataSnapのコアwebテクノロジのクリーンアップと改善
  • そのほかのプラットフォームに対する技術的な調査
    • Android/iOSの2015年バージョン(現時点でGoogle/Appleからアナウンスされていないもの)
    • WebBroker、DataSnap、EMSなどのLinuxのサーバ側のwebサービスアプリケーションのサポート
    • AndroidのIntelプラットフォームのサポートの選択肢
    • Mac OS Xの64ビット用ツールチェイン
  • 2015年の最終的な検討事項
    • 2015年において2回の製品リリース
      • 最初のリリース後にロードマップを更新
    • アップデートサブスクリプションに含まれるもの
      • 過去のリリースを含む継続的なアップデート
      • 他では入手できないコンテンツと機能
    • 新しい挑戦と機会に取り組むための機能
面倒で結局要約せずにほぼ全訳してしまった…。

2015/03/16追記: 日本語版のロードマップが公開されています。

RAD Studio 2015年ロードマップ

2015年2月16日

IDE Fix Pack 5.8

Andreas HausladenさんIDE Fix PackがアップデートされてVersion 5.8になっています。このバージョンでは規模の大きなパッケージが別の大きなパッケージに依存しているときのパフォーマンスの改善などの新機能と、Windows 8.1環境下でのDelphi 2009起動時の問題や、一部の環境でIDE Fix Packをインストール/アンインストールしようとしたときにエラーが発生する問題などの修正が行われています、

IDE Fix Pack 5.8 for 2009-XE7 released | Andy's Blog and Tools

2015年2月11日

Microsoft Monthly Update 2015/02

今日はMicrosoftのセキュリティアップデートの日です。
MS15-009
MS15-010
MS15-011
MS15-012
MS15-013
MS15-014
MS15-015
MS15-016
MS15-017

2015年1月14日

Microsoft Monthly Update 2015/01

今日はMicrosoftのセキュリティアップデートの日です。
MS15-001
MS15-002
MS15-003
MS15-004
MS15-005
MS15-006
MS15-007
MS15-008

2015年1月9日

RAD Studio/Delphi/C++Builder XE7 Update 1 Beta hotfix for FireMonkey apps on Android 5.0 (Lollipop)

RAD Studio/Delphi/C++Builder XE7 Update 1のBeta hotfix for FireMonkey apps on Android 5.0 (Lollipop)がリリースされています。Marco CantuさんのLollipop Hotfix (Beta) for Delphi and C++ Builder XE7によると、Android 5 (Lollipop)でデフォルトとなったART KernelとのJNI Bridgeによる配列データの受け渡しの問題(RSP-9738など)に対応するとのことです。

30110 Beta hotfix for FireMonkey apps on Android 5.0 (Lollipop)

2015/01/14追記: RAD Studio XE7 Update 1とAndroid 5.0(Lollipop)との互換性の問題はQC上だとQC129208QC129086が該当するものとのことです。高橋さん、いつも情報ありがとうございます。

InterBase XE3 Update 4 Hotfix 3

InterBase XE3 Update 4 Hotfix 3がリリースされています。バージョンは11.0.4.820となっています。

30112 InterBase XE3 Update 4 Hotfix 3 (11.0.4.820) for Windows

2015年1月6日

シリアルポートをフレンドリ名で列挙する

以前使用できるシリアルポートをレジストリから列挙する方法について書きましたが、今度はシリアルポートをそのフレンドリ名(デバイスマネージャ上で表示される表記)とともに列挙する方法です。

フレンドリ名の取得にはSetup APIを使用しますが、残念ながらDelphiにはSetup API関係の定義が含まれていない(C++Builderならsetupapi.hがあるのですが)ため、まずは必要なWin32APIと構造体を定義します。
{ Setup APIs }
type
  { HDEVINFO }
  HDEVINFO = THandle;
  {$EXTERNALSYM HDEVINFO}

  { SP_DEVINFO_DATA }
  SP_DEVINFO_DATA = packed record
    cbSize: DWORD;
    ClassGuid: TGUID;
    DevInst: DWORD;
    Reserved: ULONG_PTR;
  end;
  {$EXTERNALSYM SP_DEVINFO_DATA}

const
  { Flags for SetupDiGetClassDevs }
  DIGCF_PRESENT         = $00000002;
  {$EXTERNALSYM DIGCF_PRESENT}

  { Property for SetupDiGetDeviceRegistryProperty }
  SPDRP_DEVICEDESC      = $00000000;
  {$EXTERNALSYM SPDRP_DEVICEDESC}
  SPDRP_FRIENDLYNAME    = $0000000C;
  {$EXTERNALSYM SPDRP_FRIENDLYNAME}

  { Scope for SetupDiOpenDevRegKey }
  DICS_FLAG_GLOBAL      = $00000001;
  {$EXTERNALSYM DICS_FLAG_GLOBAL}

  { KeyType for SetupDiOpenDevRegKey }
  DIREG_DEV             = $00000001;
  {$EXTERNALSYM DIREG_DEV}

{ SetupDiClassGuidsFromName }
function SetupDiClassGuidsFromName(const ClassName: PChar;
                                   ClassGuidList: PGUID;
                                   ClassGuidListSize: DWORD;
                                   var RequiredSize: DWORD): BOOL; stdcall;
  external 'SetupApi.dll' name
{$IFDEF UNICODE}
  'SetupDiClassGuidsFromNameW';
{$ELSE}
  'SetupDiClassGuidsFromNameA';
{$ENDIF}
{$EXTERNALSYM SetupDiClassGuidsFromName}

{ SetupDiGetClassDevs }
function SetupDiGetClassDevs(ClassGuid: PGUID;
                             const Enumerator: PChar;
                             hwndParent: HWND;
                             Flags: DWORD): HDEVINFO; stdcall;
  external 'SetupApi.dll' name
{$IFDEF UNICODE}
  'SetupDiGetClassDevsW';
{$ELSE}
  'SetupDiGetClassDevsA';
{$ENDIF}
{$EXTERNALSYM SetupDiGetClassDevs}

{ SetupDiDestroyDeviceInfoList }
function SetupDiDestroyDeviceInfoList(DeviceInfoSet: HDEVINFO): BOOL; stdcall;
  external 'SetupApi.dll' name 'SetupDiDestroyDeviceInfoList';
{$EXTERNALSYM SetupDiDestroyDeviceInfoList}

{ SetupDiEnumDeviceInfo }
function SetupDiEnumDeviceInfo(DeviceInfoSet: HDEVINFO;
                               MemberIndex: DWORD;
                               var DeviceInfoData: SP_DEVINFO_DATA): BOOL; stdcall;
  external 'SetupApi.dll' name 'SetupDiEnumDeviceInfo';
{$EXTERNALSYM SetupDiEnumDeviceInfo}

{ SetupDiGetDeviceRegistryProperty }
function SetupDiGetDeviceRegistryProperty(DeviceInfoSet: HDEVINFO;
                                          const DeviceInfoData: SP_DEVINFO_DATA;
                                          Prop: DWORD;
                                          PropertyRegDataType: PDWORD;
                                          PropertyBuffer: Pointer;
                                          PropertyBufferSize: DWORD;
                                          var RequiredSize: DWORD): BOOL; stdcall;
  external 'SetupApi.dll' name
{$IFDEF UNICODE}
  'SetupDiGetDeviceRegistryPropertyW';
{$ELSE}
  'SetupDiGetDeviceRegistryPropertyA';
{$ENDIF}
{$EXTERNALSYM SetupDiGetDeviceRegistryProperty}

{ SetupDiOpenDevRegKey }
function SetupDiOpenDevRegKey(DeviceInfoSet: HDEVINFO;
                              var DeviceInfoData: SP_DEVINFO_DATA;
                              Scope: DWORD;
                              HwProfile: DWORD;
                              KeyType: DWORD;
                              samDesired: REGSAM): HKEY; stdcall;
  external 'SetupApi.dll' name 'SetupDiOpenDevRegKey';
{$EXTERNALSYM SetupDiOpenDevRegKey}
これらを使用してシリアルポートをそのフレンドリ名とともに取得します。
function EnumSerialCommWithFriendlyName(const S: TStrings): Integer;
var
  Guid: TGUID;
  Size: DWORD;
  hDevInf: HDEVINFO;
  Index: DWORD;
  DevInfoData: SP_DEVINFO_DATA;
  S1: String;
  hRegKey: HKEY;
  S2: String;
  RegType: DWORD;
  PortNo: Integer;
begin

  Result := 0;

  Size := 0;
  if SetupDiClassGuidsFromName('Ports',@Guid,1,Size) = False then
  begin
    RaiseLastOSError;
  end;

  hDevInf := SetupDiGetClassDevs(@Guid,nil,0,DIGCF_PRESENT);
  if hDevInf = INVALID_HANDLE_VALUE then
  begin
    RaiseLastOSError;
  end;

  try
    Index := 0;
    while True do
    begin
      FillChar(DevInfoData,SizeOf(DevInfoData),0);
      DevInfoData.cbSize := SizeOf(DevInfoData);
      if SetupDiEnumDeviceInfo(hDevInf,Index,DevInfoData) = False then
      begin
        Break;
      end;

      SetupDiGetDeviceRegistryProperty(hDevInf,DevInfoData,SPDRP_FRIENDLYNAME,
                                       nil,nil,0,Size);
      SetLength(S1,(Size + SizeOf(Char)) div SizeOf(Char));

      if SetupDiGetDeviceRegistryProperty(hDevInf,DevInfoData,SPDRP_FRIENDLYNAME,
                                          nil,PChar(S1),Size,Size) = True then
      begin
        SetLength(S1,StrLen(PChar(S1)));
        hRegKey := SetupDiOpenDevRegKey(hDevInf,DevInfoData,DICS_FLAG_GLOBAL,0,DIREG_DEV,KEY_READ);
        if hRegKey <> INVALID_HANDLE_VALUE then
        begin
          try
            if RegQueryInfoKey(hRegKey,nil,nil,nil,nil,nil,nil,nil,nil,
                               @Size,nil,nil) = ERROR_SUCCESS then
            begin
              SetLength(S2,(Size + SizeOf(Char)) div SizeOf(Char));
              if (RegQueryValueEx(hRegKey,'PortName',nil,@RegType,Pointer(PChar(S2)),
                                  @Size) = ERROR_SUCCESS) and
                 (RegType = REG_SZ) then
              begin
                SetLength(S2,StrLen(PChar(S2)));
                if CompareText(Copy(S2,1,3),'COM') = 0 then
                begin
                  if TryStrToInt(Copy(S2,4,Length(S2)),PortNo) = True then
                  begin
                    S.AddObject(S1,Pointer(PortNo));
                    if Result < PortNo then
                    begin
                      Result := PortNo;
                    end;
                  end;
                end;
              end;
            end;

          finally
            RegCloseKey(hRegKey);
          end;
        end;
      end;

      Index := Index + 1;
    end;

  finally
    SetupDiDestroyDeviceInfoList(hDevInf);
  end;

end;
手順ですが、まずSetupDiClassGuidsFromNameでデバイスインタフェースクラスが'Ports'のGUIDを取得し、そのGUIDを使用してSetupDiGetClassDevsで現在システムに認識されているDevice Information Setsを取得し、SetupDiEnumDeviceInfoでDevice Information Set一つずつの情報をSP_DEVINFO_DATAに取り出して、SetupDiGetDeviceRegistryPropertyでフレンドリ名を取得します。さらにSetupDiOpenDevRegKeyでデバイス固有情報の含まれるレジストリキー('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum'の下のデバイスごとのキーに含まれる'Device Parameters'キー)を開き、RegQueryValueExで'PortName'という名前でREG_SZの値のデータを文字列として取得し、'COM'で始まっていたらシリアルポートとしてフレンドリ名とともにパラメータ(S: TStrings)に格納します。全てのDevice Information Setをチェックし終わったらSetupDiDestroyDeviceInfoListでDevice Information Sets全体を解放します。 以前のものと同様に必ずしもポート番号順にはなっていないため、必要に応じて結果をソートしてください。

シリアルポートをフレンドリ名で列挙 (Gist)

2014年12月22日

[書籍]MariaDB & MySQL全機能バイブル

MARUZEN&ジュンク堂書店 渋谷店

MariaDB & MySQL全機能バイブル (amazon)/鈴木啓修、山田奈緒子著/技術評論社/ISBN 978-4-7741-7020-6/3,780円

を購入。

2014年12月12日

Firebird 2.5.3 Security Update 1/2.1.7

Firebird Ver2.5.3 Security Update 1(Build 26780)およびVer2.1.7(Build 18553)がリリースされています。

Firebird: Firebird 2.5.3 Security Update 1
Release Notes (PDF)

Firebird: Firebird 2.1.7
Release Notes (PDF)

認証されていないユーザから特別に加工されたパケットを送りつけることでリモートDoS攻撃を受けてしまうセキュリティホールが報告されており、これに対応するものです。信頼できないネットワークからのアクセスを受けるような状況ではアップデートを考慮すべきかと思われます。

2014年12月10日

Microsoft Monthly Update 2014/12

今日はMicrosoftのセキュリティアップデートの日です。
MS14-075
MS14-080
MS14-081
MS14-082
MS14-083
MS14-084
MS14-085

2014年12月8日

[書籍]Web API

MARUZEN&ジュンク堂書店 渋谷店

Web API (amazon)/水野貴明著/オライリージャパン/ISBN 978-4-87311-686-0/2,376円

を購入。

2014年12月4日

InterBase XE7リリース

InterBase XE7(12.0.0.191)がリリースされています。現時点(2014/12/04)でDeveloper EditionとServer Edition(トライアル版)の英語版のみダウンロード可能です。2014/12/12にDeveloper EditionとServer Edition(トライアル版)の日本語版もダウンロードできるようになりました。

エンバカデロ、マルチデバイス対応のハイパフォーマンスデータベースInterBaseの新バージョンを発表 | Press Releases

30090 InterBase XE7 (12.0.0.191) Developer Edition, Japanese
30066 InterBase XE7 (12.0.0.191) Developer Edition, English

InterBase XE7 Readme (en)
InterBase XE7 Readme - InterBase (en)

What's New in InterBase XE7
What's New in InterBase XE7 - InterBase

2014/12/09追記: InterBase XE7(開発コードネーム"DeltaForce")では次のような新機能が追加されたとのことです。
  • Change Views機能(テーブルの変更履歴を簡単に追跡する)
  • 64ビット版LinuxとUbuntu Linuxのサポート(RHEL 6/7、SUSE 11、Ubuntu 14)
  • パフォーマンスの向上(SMP環境でのパフォーマンスの向上、トランザクションの改善)
  • トランザクションIDの64ビット化
  • インクリメンタルデータダンプ(データダンプ時に変更があったページのみを対象に)
  • APIの拡張(オンラインダンプ/インクリメンタルダンプ、ジャーナルアーカイブ関係APIの追加)
  • パフォーマンス監視の更新(パフォーマンスモニタリングカウンタを64ビット化)
  • 以前のバージョンのODSのサポート(ODS 13/14/15をそのまま使用可能に)
詳しくはこちらを。
InterBase XE7 - Blogs
What's New in InterBase XE7 - InterBase

2014年11月14日

RAD Studio/Delphi/C++Builder XE7 Update 1

RAD Studio/Delphi/C++Builder XE7のUpdate 1がリリースされています。

Update 1 for RAD Studio, Delphi and C++Builder XE7

30048 Delphi XE7 and C++Builder XE7 ISO (includes Update 1)

XE7 Update 1 のリリース ノート - RAD Studio (en)

Update 1 Fix List for RAD Studio XE7, Delphi XE7, and C++ Builder XE7

2014/11/19追記: XE7 Update 1でFMX/2DのフォームにTViewport3Dを配置すると、フォームデザイナで開きなおしたときにサイズが正しく反映されない、という問題([RSP-9732] TViewport3D does not resize properly in Update 1)が報告されています。FMXで3Dアプリケーションを開発している方はUpdate 1のインストールを見合わせたほうがよいかもしれません。

2014/12/03追記: XE7 Update 1の[RSP-9732] TViewport3D does not resize properly in Update 1を修正するHotfixがリリースされています。

30070 Hotfix for FMX component with custom size reverting to default

2014年11月12日

Microsoft Monthly Update 2014/11

今日はMicrosoftのセキュリティアップデートの日です。
MS14-064
MS14-065
MS14-066
MS14-067
MS14-068
MS14-069
MS14-070
MS14-071
MS14-072
MS14-073
MS14-074
MS14-075
MS14-076
MS14-077
MS14-078
MS14-079

なんだこのリリース日未定ってのは…?

2014/11/19追記: MS14-068がリリースされています。

2014/12/10追記: MS14-075は2014/12のアップデートに含まれる形でリリースされました。

2014年11月11日

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

本日10:00から第29回エンバカデロ・デベロッパーキャンプ・イン東京がエビススバルビル EBiS303 カンファレンススペースで行われます。セッション資料は

ダウンロード | デベロッパーキャンプ

からダウンロードできるようになる予定です(2014/11/10 10:00以降)。またUStreamで全セッションの中継が予定されています(CH1がC/Gセッション、CH2がAセッション)。

無事に終了しました。セッションスピーカ/LT参加者の皆さん、参加者の皆さん、関係者の皆さん、おつかれさまでした。

2014/11/19追記: セッション資料がダウンロードできるようになっています。またセッションリプレイも順次公開されています。

第29回 エンバカデロ・デベロッパーキャンプ資料ダウンロード

  • 【C1】Delphi/C++テクニカルセッション「ゲームUIから考えるこれからのエンタープライズUX」
  • 【A1】Delphiテクニカルセッション「オンプレからクラウドに移行する中、新旧含め様々なデバイスと接続しないといけない要求にDelphiのクラウド接続で応えてみる」
  • 【C2】テクニカルセッション「着飾らない IoT」
  • 【A2】Delphiテクニカルセッション「Delphiで作るデータベースツール。その開発のポイントは・・」
  • 【G3】ジェネラルセッション「エンバカデロのマルチデバイス開発環境の現在、そして将来」
    • Replay (1/2)
    • Replay (2/2)
  • 【C4】テクニカルセッション「マルチデバイス向けアプリ開発・構築におけるデータハンドリングのいろいろ」
  • 【A4】Delphi/C++テクニカルセッション「FireMonkeyの仕組み」
  • 【C5】Delphi/C++テクニカルセッション「マルチデバイス対応アプリ開発の勘所」
  • 【A5】C++テクニカルセッション「C++コンパイラアップデート」
    • Replay (1/2)
    • Replay (2/2)
  • 【G6】ライトニングトーク「共有!みんなの開発事例、開発経験、テクニック」
    • Replay (1/2)
    • Replay (2/2)

2014年10月15日

Microsoft Monthly Update 2014/10

今日はMicrosoftのセキュリティアップデートの日です。
MS14-056
MS14-057
MS14-058
MS14-059
MS14-060
MS14-061
MS14-062
MS14-063

2014年10月11日

[書籍][eBook]Delphi Cookbook

Packt Publishingで注文した

Delphi Cookbook (amazon US, amazon JP)/Daniele Teti著/Packt Publishing/ISBN 9781783559589/26.99GBP(Print+eBook)

が配送されてきました(今回の配送はFedEx/佐川急便で、シンガポールからの発送でした)。2014/09/26に注文して15日目の到着、26.99GBP=4,720JPY(暫定、1GBP=174.88JPY)4,875JPY(1GBP=180.623JPY)でした。

2014/10/16追記: 興味がある方がいるかどうかはわかりませんが、一応自分のために目次をてきとうに訳してみました。
  • 序文
  • 第1章 Delphiの基本
    • イントロダクション
    • VCLスタイルでアプリケーションのルックアンドフィールをコードなしに変更する
    • 実行時にVCLアプリケーションのスタイルを変更する
    • TDBGridをカスタマイズする
    • オーナドローコンボボックスとリストボックスを使う
    • 埋め込みフォームをスタックする
    • JSONを操作する
    • XMLドキュメントを操作/変換する
    • 21世紀のI/O - ストリームを知る
    • VCLアプリケーションをタスクトレイに格納する
    • Windowsのサービスを作る
    • Windows上でアプリケーションに拡張子を関連付けする
  • 第2章 Delphi言語のNinjaになる
    • イントロダクション
    • 無名メソッドを楽しむ - 高階関数を使う
    • 列挙可能な型を書く
    • RTTIで救出 - クラスを実行時に設定する
    • RTTIでダックタイピング
    • クラスにヘルパを作成する
    • 正規表現で文字列をチェックする
  • 第3章 FireMonkeyでクロスプラットフォーム
    • イントロダクション
    • FireMonkey標準のコントロールにスタイルを適用して新しい体裁を与える
    • スタイルを適用したTListBoxを作る
    • アニメーションで顧客に印象付ける
    • LiveBindingでマスタ/詳細を使う
    • パスを使って複雑なベクタ図形を表示する
    • VCLアプリケーションでFireMonkeyを使う
  • 第4章 マルチスレッディングの千の顔
    • イントロダクション
    • TMonitorで共有リソースを同期する
    • スレッドセーフキューでメインスレッドと会話する
    • TEventで複数のスレッドと同期する
    • オシロスコープのように測定値を2Dグラフに表示する
  • 第5章 サーバでDelphiを動かす
    • イントロダクション
    • サーバ上のWebBrokerを使用したwebクライアントのJavaScriptアプリケーション
    • コンソールサービスアプリケーションをWindowsサービスに書き換える
    • データセットをJSONにシリアライズして元に戻す
    • RTTIでオブジェクトをJSONにシリアライズして元に戻す
    • パラメータをエンコードしてPOST HTTPリクエストを送信する
    • WebBrokerでRESTfulインタフェースを実装する
    • UDPでリモートアプリケーションを制御する
    • アプリケーションテザリングを使ってコンパニオンアプリケーションを作る
    • DataSnapのApacheモジュールを作る
  • 第6章 FireMonkeyでモバイル革命に乗る
    • イントロダクション
    • 写真を撮り、エフェクトを適用し、シェアする
    • リストビューでローカルデータを表示して検索する
    • メインスレッドをブロックするな!
    • SQLiteデータベースでTo-Doリストを扱う
    • スタイルを適用したTListViewでデータの長いリストを扱う
    • 連続的に写真とロケーションを取得してサーバに送信する
    • バックエンドと会話する
    • アプリケーションから電話を掛ける
    • アプリケーションのライフサイクルを追跡する
  • 第7章 特定のプラットフォームの機能を使う
    • イントロダクション
    • Android SDKのJavaクラスを使う
    • iOSのObjective-C SDKクラスを使う
    • アプリケーションでPDFファイルを表示する
    • Androidのインテントを送信する
    • 電話を喋らせる - AndroidのTextToSpeechエンジンを使う
  • 索引

2014年10月9日

第29回エンバカデロ・デベロッパーキャンプ開催決定

第29回エンバカデロ・デベロッパーキャンプは大阪と東京のダブル開催(キャンプ・ツアー)で、2014年11月07日(大阪)および2014年11月11日(東京)に開催されます。

デベロッパーキャンプ

今回は製品担当ディレクタのJohn Thomasさんがいらっしゃるようです。

2014年10月1日

2014/10開催のセミナー

2014年9月19日

2014年9月10日

Microsoft Monthly Update 2014/09

今日はMicrosoftのセキュリティアップデートの日です。
MS14-052
MS14-053
MS14-054
MS14-055

2014年9月6日

IDE Fix Pack 5.71

Andreas HausladenさんIDE Fix Pack for XE7がアップデートされてVersion 5.71となっています。XE7で関数名のマングリングルールが変更されていたのに対応するのを忘れていたとのことで、これを修正するとともにXE7で修正されて不要になったパッチを3つ削除したとのことです。

IDE Fix Pack 5.71 for XE7 – bug fix release | Andy's Blog and Tools