2012年5月31日

第22回エンバカデロ・デベロッパーキャンプ(東京)

本日10:00から第22回エンバカデロ・デベロッパーキャンプ(東京)が行われます。場所は新宿の新宿NSビルの30階、スカイカンファレンスルーム1です。今回は一部のセッションを除いてUStreamで中継があります。

USTREAM: developer-camp-japan: エンバカデロ・デベロッパーキャンプのライブ中継をご覧いただけます。

Nigel BrownさんのG1終了。Delphi/C++BuilderをCLang(or Delphi F/E)+LLVM上で再構築とな。CLang+PMEの話はJTさんが書いてましたね。

高橋さんのT2も終了。RAD Studio(C++Builder) XE3のベータ版でデモ。x86とx64でコンパイラが違うのかぁ(現時点での話です)。

午後は高橋さんのT3からです。FireMonkeyは面白そうだけど、画面描画を伴う処理を処理系非依存でどう作るのかとか、そもそもクロスプラットフォームの必要性とか、微妙ですよね。XE3からが本番だと思いますけど。

パネルディスカッションのT4も終了。エンバカデロで使ってるツールを外販するとかオープンソース化するとかいかがですかね?

Nigel BrownさんのQ&AのG5も終了。営業の人は話が長いな…。

まもなくラスト、T6のライトニングトークです。今日は8人だとか。時間厳守ですって。

懇親会を含め全て終了。参加者のみなさん、セッションスピーカのみなさん、エンバカデロ・テクノロジーズのみなさん、お疲れさまでした。

2012/06/08追記: まとめはこちら

2012年5月25日

[書籍]PDF構造解説

ジュンク堂書店 吉祥寺店PDF Explained (amazon)の翻訳である

PDF構造解説 (amazon)/John Whitington著/村上雅章訳/オライリージャパン/ISBN 978-4-87311-549-8/2,310円

を購入。

2012年5月19日

RAD Studio roadmap 2012 Q2版

RAD Studio XE2のリリース以来長らく放置状態だったロードマップがRADプロダクトマネージメントディレクタのJohn Ray Thomasさんによって更新されています。

C++向けRAD IDEで、近い将来64-bit、C++11、ARM、iOS、Androidをサポート!
Coming soon to a RAD IDE near you, the future of C++ - 64bit, C++11, ARM, iOS and Android

てきとうな要約:
  • 主要な目標はWindows x64対応、C++11対応、ARM(iOSおよびAndroid)対応で、多くの機能は2012年H2に、そのほかについても2013年H1にかけてのリリースを予定している。
  • C++の新しいコンパイラのターゲットプラットフォームはWindows x64、iOS(ARM)、Android(ARM)。Windows x64では当然VCLとFireMonkeyの両方をサポートする。
  • C++ツールチェーンは新しいプラットフォームのサポートを予定しており、まずはARMプロセッサのシェアドコードベースでのネイティブ開発(iOS、Android)について作業している。新しいコンパイラはネイティブなARM v7バイナリを生成する。FireMonkeyもC++によるiOS/Androidプラットフォームへの対応(GPS、カメラ、加速度などのセンサを含む)のため更新される。
  • 新しいC++コンパイラはC++11およびC99標準とBoostやACEなどの重要なライブラリの最新版に対応する。
  • このロードマップは現時点のもので(以下略)といういつものお約束。現在はBeta 1で、まもなくBeta 2フェーズに入る予定。現在の計画ではC++11、Windows x64、iOSは2012年の後半、Androidは2013年の前半を予定している。


またC++Builderを含む製品とメンテナンス契約でプレビュープログラムに参加できるというキャンペーンも始まったようです(メンテナンス契約なのでXE3も自動的に含まれる)。2012/04/20から2012/06/29が対象期間のようです。

Michael Swindell » Avalanche of C++ news - C++11, Win 64-bit, iOS and Android
Get your ticket to the future of C++ and save an additional 20%

2012/05/22追記: 日本語版のリンクを追加しました。

2012/05/30追記: キャンペーン(C++Builder XE2 Future Ticket版)の件が日本でも発表されています。

エンバカデロ、64-bit、iOS、AndroidをサポートするC++Builderの将来バージョンへのパスを提供 | Press Releases
C++Builder XE2を将来バージョンへのチケットと一緒に購入すれば20% OFF

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

RAD Studio/Delphi/C++Builder XE2 Update 4のHotfix 1がリリースされています。適用後のバージョンは16.0.4504.48759です。主にUpdate 4で生じたFireMonkey関係の問題を修正するもののようです。

28881 RAD Studio XE2 Update 4 Hotfix for FireMonkey and C++
28882 Delphi XE2 and C++Builder XE2 ISO (includs Update 4 Hotfix)
Delphi XE2/C++Builder XE2/RAD Studio XE2 Update 4 Hotfix 1 が公開されました
Update 4 Hotfix 1 now available for Delphi, C++Builder and RAD Studio XE2

2012年5月16日

Prism XE2.5

Prism XE2.5がリリースされています。RAD Studio XE2のメンテナンス契約をしているか、2012/05/15から2012/09/01の間にRAD Studio XE2を購入した場合(2012/09/15まで有効)にのみ使用できるようです。またこのキャンペーンが日本でも有効なのかどうかは今のところ不明です。

Buy RAD Studio XE2, get Embarcadero Prism XE2.5 Free! | Landing Pages

28871 Embarcadero Prism XE2.5 ISO
28872 Embarcadero Prism XE2.5 ISO
28873 Embarcadero Prism XE2.5 Full Installer (Japanese)
28876 Embarcadero Prism XE2.5 Full Installer (English)

2012/05/17追記: Prism XE2.5の関連リンクです。

Embarcadero Announces Support for Windows 8 Metro Development with Release of Embarcadero Prism XE2.5
Delphi Insider: Embarcadero Prism XE2.5 is now available - develop Windows 8 apps
Announcing Oxygene 5.1 and Embarcadero Prism XE2.5 | RemObjects Blogs

2012年5月9日

Microsoft Monthly Update 2012/05

今日はMicrosoftのセキュリティアップデートの日です。
MS12-029
MS12-030
MS12-031
MS12-032
MS12-033
MS12-034
MS12-035

2012年5月8日

列挙型と列挙子名(文字列)の相互変換(ジェネリックス版)

ずいぶん前に列挙型の値と列挙子の名前を相互変換する方法について取り上げましたが、これを関数化しようとすると結局のところ必要な列挙型すべてについて個別に実装の必要がありました。ところがLynaたんさん(talesさん)ジェネリクスを使って少しだけ手軽に列挙型の値を文字列に変換する。 - 全力わはーではDelphi 2009の新機能のジェネリックスを利用することでこれを単一の実装で実現しています。ということでLynaたんさんが提示した手法で列挙型と列挙子名の相互変換を関数化してみました(単なるパクリですいません)。ここではクラスではなく高度なレコード型を使用します。またジェネリックスを使いますので当然のことながらDelphi 2009以降でのみ有効です。
uses
  TypInfo, SysUtils, SysConst;

type
  TEnumHelper = record
    class function GetEnumName<T>(Value: T): String; static;
    class function GetEnumValue<T>(const Name: String): T; static;
  end;

class function TEnumHelper.GetEnumName<T>(Value: T): String;
var
  P: PTypeInfo;
  IValue: Integer;
begin

  P := TypeInfo(T);
  if P = nil then
  begin
    raise EInvalidOpException.CreateRes(@SVarNotImplemented);
  end;

  IValue := 0;
  Move(Value,IValue,SizeOf(T));
  Result := TypInfo.GetEnumName(P,IValue);

end;

class function TEnumHelper.GetEnumValue<T>(const Name: String): T;
var
  P: PTypeInfo;
  IValue: Integer;
begin

  P := TypeInfo(T);
  if P = nil then
  begin
    raise EInvalidOpException.CreateRes(@SVarNotImplemented);
  end;

  IValue := TypInfo.GetEnumValue(P,Name);

  with GetTypeData(P)^ do
  begin
    if (IValue < MinValue) or (IValue > MaxValue) then
    begin
      raise ERangeError.CreateRes(@SRangeError);
    end;

    Result := Default(T);
    Move(IValue,Result,SizeOf(T));
  end;

end;
TEnumHelper.GetEnumNameの型パラメータは省略可能です(引数の型から自動的に推論されます)が、TEnumHelper.GetEnumValueについては型パラメータが必須となります。
var
  Alignment: TAlignment;
begin

  Alignment := TEnumHelper.GetEnumValue<TAlignment>('taLeftJustify');

end;

var
  S: String;
begin

  S := TEnumHelper.GetEnumName(taLeftJustify);

end;
こんな感じで使うことができます。

2012年5月1日

2012/05開催のウェブセミナー


2012/05/03追記: Developer Direct Webセミナーシリーズのリンクを追加。毎週火曜日の13:00-14:00ですね。

2012/06/12追記: 2012/05/15分のリプレイビデオのリンクを追加しました。

2012/06/18追記: 2012/05/29分のリプレイビデオのリンクを追加しました。