2019年12月24日

[書籍][eBook]Mastering Delphi Programming

Packt Publishingで注文した

Mastering Delphi Programming: A Complete Reference Guide (Amazon US, Amazon JP)/Primož Gabrijelčič著/Packt Publishing/ISBN 9781838989118/44.99USD(printed+ebook)

が配送されてきました(今回の配送もDHLで、インドのチェンナイからの発送でした)。2019/12/16に注文して9日目の到着、44.99USD=5,042JPY(1USD=112.07JPY)でした。

2019年12月21日

RAD Studio/Delphi/C++Builder 10.3.3 Rio Android Services Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのAndroid Services Patchがリリースされています。AAB(Android App Bundle)としてパッケージ化されたアプリケーションでネイティブライブラリをロードできずにAndroidサービスが実行できない問題を修正します。

30905 RAD Studio 10.3.3 Android Services Patch

RAD Studio 10.3.3 Androidサービスパッチ (en)

2019年12月20日

WindowsのNTFSでハードリンクを扱う

このアーティクルはDelphi Advent Calendar 2019の20日目の記事です(1日ぶり6回目)。

Windows上でファイル/ディレクトリに対してリンク(複数のエントリを用意する)する方法にはシンボリックリンクジャンクション、ハードリンクがありますが、ここではDelphiからハードリンクを扱います。

ハードリンクはNTFS上のファイル本体に対するディレクトリエントリを複数用意する(あるいはファイル本体に複数のパス名をつける)、というもので、一般のユーザ権限で作れ、NTFS以外にSMB3.0でもサポート(ReFSは不可)されていますが、ディレクトリを扱うことができず、同一ボリューム上にしかリンクを作ることができません。また最大のリンク数が1023に制限されています。

Windowsのシンボリックリンクとジャンクションとハードリンクの違い:Tech TIPS - @IT

普通に(CreateFile関数で)作成したファイルはリンク数が1になっており、ハードリンクを作成する毎にリンク数が増え、逆にハードリンクをDeleteFile関数で削除する毎にリンク数は減っていき、リンク数が0になるとそのファイルの実体も削除されます。

ここではハードリンクの作成と、指定されたファイルのハードリンクの数と一覧の取得をDelphiから行います。以下のコードは(System.)IOUtilsユニットのTPathレコード型や無名メソッドを使っているためにDelphi 2010以降の対応になっていますが、それ以前のバージョンであっても適当に修正すれば動くはずです。

interface

{$IF RTLVersion < 21.0}
{$MESSAGE ERROR 'Delphi 2010 or later is required.'}
{$IFEND}

uses
{$IF RTLVersion < 23.0}
  Windows, SysUtils, Classes, IOUtils;
{$ELSE}
  Winapi.Windows,
  System.SysUtils, System.Classes, System.IOUtils;
{$IFEND}

type
  { THardLink }
  THardLink = record
  private
    class procedure DoGetFileList(const Filename: String; EnumProc: TProc); static;
  public
    class procedure Create(const LinkFile: String; const SourceFile: String); static;
    class function GetFileList(const Filename: String): TArray; overload; static;
    class procedure GetFileList(const Filename: String; Strings: TStrings); overload; static;
    class function GetNumberOfLinks(const Filename: String): Integer; static;
  end;

implementation

{ HANDLE FindFirstFileNameW(LPCWSTR lpFileName, DWORD dwFlags, LPDWORD StringLength, PWSTR LinkName); }
function FindFirstFileNameW(const lpFileName: PWideChar; dwFlags: DWORD; var StringLength: DWORD; LinkName: PWideChar): THandle; stdcall; external kernel32;
{$EXTERNALSYM FindFirstFileNameW}

{ BOOL FindNextFileNameW(HANDLE hFindStream, LPDWORD StringLength, PWSTR LinkName); }
function FindNextFileNameW(hFindStream: THandle; var StringLength: DWORD; LinkName: PWideChar): BOOL; stdcall; external kernel32;
{$EXTERNALSYM FindNextFileNameW}

class procedure THardLink.Create(const LinkFile: String; const SourceFile: String);
begin
  if CreateHardLink(PChar(LinkFile),PChar(SourceFile),nil) = False then
  begin
    RaiseLastOSError;
  end;
end;

class function THardLink.GetFileList(const Filename: String): TArray;
var
  Files: TArray;
begin
  SetLength(Files,0);

  DoGetFileList(Filename,
    procedure (Filename: String)
    begin
{$IF RTLVersion >= 28.0}
      Files := Files + [Filename];
{$ELSE}
      SetLength(Files,Length(Files) + 1);
      Files[Length(Files) - 1] := Filename;
{$IFEND}
    end);

  Result := Files;
end;

class procedure THardLink.GetFileList(const Filename: String; Strings: TStrings);
begin
  Strings.Clear;

  DoGetFileList(Filename,
    procedure (Filename: String)
    begin
      Strings.Add(Filename);
    end);
end;

class function THardLink.GetNumberOfLinks(const Filename: String): Integer;
var
  hFile: THandle;
  FileInformation: TByHandleFileInformation;
begin
  hFile := CreateFile(PChar(Filename),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if hFile = INVALID_HANDLE_VALUE then
  begin
    RaiseLastOSError;
  end;

  try
    if GetFileInformationByHandle(hFile,FileInformation) = False then
    begin
      RaiseLastOSError;
    end;
    Result := FileInformation.nNumberOfLinks;

  finally
    CloseHandle(hFile);
  end;
end;

class procedure THardLink.DoGetFileList(const Filename: String; EnumProc: TProc);
var
  hFindStream: THandle;
  Len: DWORD;
  Buffer: String;
  Root: String;
begin
  Root := ExcludeTrailingPathDelimiter(TPath.GetPathRoot(Filename));

  { Retrieve buffer size }
  Len := 0;
  FindFirstFilenameW(PWideChar(Filename),0,Len,nil);
  if GetLastError <> ERROR_MORE_DATA then
  begin
    RaiseLastOSError;
  end;
  SetLength(Buffer,Len);

  { Get first filename without drive letter }
  hFindStream := FindFirstFilenameW(PWideChar(Filename),0,Len,PWideChar(Buffer));
  if hFindStream = INVALID_HANDLE_VALUE then
  begin
    RaiseLastOSError;
  end;

  try
    while True do
    begin
      { Adjust buffer size }
      SetLength(Buffer,Len - 1);

      { Callback }
      EnumProc(Root + Buffer);

      { Retrieve buffer size }
      Len := 0;
      FindNextFileNameW(hFindStream,Len,nil);
      case GetLastError of
        ERROR_HANDLE_EOF:
        begin
          Break;
        end;

        ERROR_MORE_DATA:
        begin
        end;

        else
        begin
          RaiseLastOSError;
        end;
      end;

      { Get next filename without drive letter }
      SetLength(Buffer,Len);
      if FindNextFileNameW(hFindStream,Len,PWideChar(Buffer)) = False then
      begin
        RaiseLastOSError;
      end;
    end;

  finally
    { Close }
    {$IF RTLVersion >= 23.0}Winapi.{$IFEND}Windows.FindClose(hFindStream);
  end;
end;

ハードリンクはCreateHardLink関数で作成し、リンク数はGetFileInformationByHandle関数で取得したBY_HANDLE_FILE_INFORMATION構造体のnNumberOfLinksで知ることができます。またハードリンクの一覧はFindFirstFileName関数/FindNextFileName関数/FindClose関数で取得できます。このときFindFirstFilename関数/FindNextFileName関数を一旦LinkName=nilで呼び出して必要なサイズを取得し、ファイル名の格納に必要な領域を確保してからもう一度FindFirstFilename関数/FindNextFileName関数を呼び出しています。

WindowsのNTFSでハードリンクを扱う(Gist)

2019年12月19日

Windowsのユーザ名とSIDを相互に変換する

このアーティクルはDelphi Advent Calendar 2019の19日目の記事です(2年ぶり5回目)。またDelphi Programming Tipsカテゴリの記念すべき(かどうかは微妙)100本目の記事になります。

Windows上のユーザはそれぞれ固有のSID(Security Identifier/セキュリティ識別子)で管理されています。

オブジェクトを識別するSIDとは?:Tech TIPS - @IT

ユーザ名とSIDを相互に変換するにはWin32APIのLookupAccountName関数とLookupAccountSid関数を使用します。ところがこれらの関数でSIDは文字列ではなくSID構造体で扱う必要があります。ということで文字列表現のSIDとSID構造体を相互に変換する必要がありますが、これを行うのがConvertSidToStringSid関数とConvertStringSidToSid関数になります。

それではまずユーザ名をSIDに変換するほうから。
uses
{$IF RTLVersion < 23.0}
  Windows, SysUtils;
{$ELSE}
  Winapi.Windows, System.SysUtils;
{$IFEND}

{$IF RTLVersion < 28.0}
{ Win32API ConvertSidToStringSid }
{$IFNDEF Unicode}
function ConvertSidToStringSid(Sid: PSID; var StringSid: LPSTR): BOOL; stdcall; external advapi32 name 'ConvertSidToStringSidA';
{$ELSE}
function ConvertSidToStringSid(Sid: PSID; var StringSid: LPWSTR): BOOL; stdcall; external advapi32 name 'ConvertSidToStringSidW';
{$ENDIF}
{$EXTERNALSYM ConvertSidToStringSid}
{$IFEND}

{$IF RTLVersion < 19.0}
{ Win32API LookupAccountName }
{$IFNDEF Unicode}
function LookupAccountName(lpSystemName, lpAccountName: LPCSTR;
  Sid: PSID; var cbSid: DWORD; ReferencedDomainName: LPSTR;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountNameA';
{$ELSE}
function LookupAccountName(lpSystemName, lpAccountName: LPCWSTR;
  Sid: PSID; var cbSid: DWORD; ReferencedDomainName: LPWSTR;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountNameW';
{$ENDIF}
{$EXTERNALSYM LookupAccountName}
{$IFEND}

function UsernameToSid(const AUsername: String): String;
var
  PSID: Pointer;
  SidSize: DWORD;
  Domain: String;
  DomainLen: DWORD;
  SidName: SID_NAME_USE;
  SidStr: PChar;
begin
  PSID := nil;
  SidStr := nil;
  try
    SidSize := 0;
    DomainLen := 0;
    LookupAccountName(nil,PChar(AUsername),nil,SidSize,nil,DomainLen,SidName);
    if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
    begin
      RaiseLastOSError;
    end;

    PSID := Pointer(LocalAlloc(LPTR,SidSize));
    SetLength(Domain,DomainLen);
    if LookupAccountName(nil,PChar(AUsername),PSID,SidSize,PChar(Domain),DomainLen,SidName) = False then
    begin
      RaiseLastOSError;
    end;

    ConvertSidToStringSid(PSID,SidStr);
    SetString(Result,SidStr,StrLen(SidStr));

  finally
    if PSID <> nil then
    begin
{$IF RTLVersion >= 32.0}
      if LocalFree(PSID) <> nil then
{$ELSE}
{$IFNDEF WIN64}
      if LocalFree(DWORD(PSID)) <> 0 then
{$ELSE}
      if LocalFree(UInt64(PSID)) <> 0 then
{$ENDIF}
{$IFEND}
      begin
        RaiseLastOSError;
      end;
    end;

    if SidStr <> nil then
    begin
{$IF RTLVersion >= 32.0}
      if LocalFree(SidStr) <> nil then
{$ELSE}
{$IFNDEF WIN64}
      if LocalFree(DWORD(SidStr)) <> 0 then
{$ELSE}
      if LocalFree(UInt64(SidStr)) <> 0 then
{$ENDIF}
{$IFEND}
      begin
        RaiseLastOSError;
      end;
    end;
  end;
end;
まずLookupAccountName関数でユーザ名に対応するSIDをSID構造体に取得し、これをConvertSidToStringSid関数で文字列に変換します。このときLookupAccountName関数を一旦SID=nil、ReferencedDomainName=nilで呼び出して必要なサイズを取得し、SIDはLocalAlloc関数で、ReferencedDomainNameは(文字列なので)SetLengthで領域を確保して、もう一度LookupAccountName関数を呼ぶようにしているのと、LocalAlloc関数、ConvertSidToStringSid関数で確保された領域はLocalFree関数で解放しなければならない、というところに気をつける必要があります(DelphiのバージョンによってLocalFree関数の宣言に差異があるので$IF RTLVersionと$IFNDEF WIN64で分岐しています)。

次にSIDをユーザ名に変換します。
{$IF RTLVersion < 28.0}
{ Win32API ConvertStringSidToSid }
{$IFNDEF Unicode}
function ConvertStringSidToSid(StringSid: LPCSTR; var Sid: PSID): BOOL; stdcall; external advapi32 name 'ConvertStringSidToSidA';
{$ELSE}
function ConvertStringSidToSid(StringSid: LPCWSTR; var Sid: PSID): BOOL; stdcall; external advapi32 name 'ConvertStringSidToSidW';
{$ENDIF}
{$EXTERNALSYM ConvertStringSidToSid}
{$IFEND}

{$IF RTLVersion < 19.0}
{ Win32API LookupAccountSid }
{$IFNDEF Unicode}
function LookupAccountSid(lpSystemName: LPCSTR; Sid: PSID;
  Name: LPSTR; var cbName: DWORD; ReferencedDomainName: LPSTR;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountSidA';
{$ELSE}
function LookupAccountSid(lpSystemName: LPCWSTR; Sid: PSID;
  Name: LPWSTR; var cbName: DWORD; ReferencedDomainName: LPWSTR;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountSidW';
{$ENDIF}
{$EXTERNALSYM LookupAccountSid}
{$IFEND}

function SidToUsername(const ASID: String): String;
var
  PSID: Pointer;
  UserNameLen: DWORD;
  Domain: String;
  DomainLen: DWORD;
  SidName: SID_NAME_USE;
begin
  PSID := nil;
  try
    if ConvertStringSidToSid(PChar(ASID),PSID) = False then
    begin
      RaiseLastOSError;
    end;

    UserNameLen := 0;
    DomainLen := 0;
    LookupAccountSid(nil,PSID,nil,UserNameLen,nil,DomainLen,SidName);
    if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
    begin
      RaiseLastOSError;
    end;

    SetLength(Result,UserNameLen);
    SetLength(Domain,DomainLen);
    if LookupAccountSid(nil,PSID,PChar(Result),UserNameLen,PChar(Domain),DomainLen,SidName) = False then
    begin
      RaiseLastOSError;
    end;

    SetLength(Result,StrLen(PChar(Result)));

  finally
    if PSID <> nil then
    begin
{$IF RTLVersion >= 32.0}
      if LocalFree(PSID) <> nil then
{$ELSE}
{$IFNDEF WIN64}
      if LocalFree(DWORD(PSID)) <> 0 then
{$ELSE}
      if LocalFree(UInt64(PSID)) <> 0 then
{$ENDIF}
{$IFEND}
      begin
        RaiseLastOSError;
      end;
    end;
  end;
end;
こちらはまずConvertStringSidToSid関数でSIDの文字列をSID構造体に変換し、LookupAccountSid関数でユーザ名に変換します。こちらもLookupAccountSid関数をName=nil、ReferencedDomainName=nilで呼び出して必要なサイズを取得し、SetLengthで領域を確保してからもう一度LookupAccountSid関数を呼び出しています。またConvertStringSidToSid関数で確保したSID構造体はLocalFree関数で解放します。

使用しているWin32APIのうち、LookupAccountSid関数/LookupAccountName関数はDelphi 2009で、ConvertStringSidToSid関数/ConvertSidToStringSid関数はDelphi XE7で(Win32API.)Windowsユニットに関数宣言が追加されたため、それ以前のバージョンでは明示的に定義が必要です。

Windows上のユーザ名とSIDを相互変換(Gist)

2019年12月14日

RAD Studio/Delphi/C++Builder 10.3.3 Rio Android Debugger Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのAndroid Debugger Patchがリリースされています。これはAndroid上でのデバッグに関係するいくつかの問題を修正します。
30904 RAD Studio 10.3.3 Android Debugger Patch

Delphi 10.3.3 Android デバッグパッチ (en)

RAD Studio/Delphi/C++Builder 10.3.3 Rio IDE and VCL Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのIDE and VCL Patchがリリースされています。これはコード補完ウィンドウのスクロールバーの表示が残ってしまう問題(RSP-26731)とTActionManager/TPopupActionBarコンポーネントを使用しているとコンパイルに失敗する問題(RSP-27035)を修正します。

30903 RAD Studio 10.3.3 IDE and VCL Patch

RAD Studio 10.3.3 IDE/VCLパッチ、ローカリゼーションパッチ (en)

2019年12月9日

RAD Studio/Delphi/C++Builder 10.3.3 Rio localization patch

RAD Studio/Delphi/C++Builder 10.3.3 Rioのlocalization patchがリリースされています。これはローカライズ(DE/FR/JA)の問題を解決するものです。

30901 RAD Studio 10.3.3 localization patch (DE/FR)
30902 RAD Studio 10.3.3 localization patch (JA)

RAD Studio 10.3.3 IDE/VCLパッチ、ローカリゼーションパッチ (en)

2019年12月6日

RAD Studio/Delphi/C++Builder 10.3.3 Rio iOS Linking Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのiOS Linking Patchがリリースされています。これはiOSアプリケーションをDebugビルドでリンクしようとするとエラーになる問題(RSP-23698)を解決するものです。

30900 RAD Studio 10.3.3 iOS Linking Patch

2019年12月1日

2019/12開催のセミナー

2019年11月21日

RAD Studio/Delphi/C++Builder 10.3 Rio Release 3 (10.3.3)

RAD Studio/Delphi/C++Builder 10.3 RioのRelease 3 (10.3.3)がリリースされています。インストールには有効なUpdate Subscriptionが必要です(Community Editionを除く)。また同時にpatchもリリースされています。

30893 RAD Studio, Delphi, C++Builder 10.3.3 Web Install
30896 RAD Studio, Delphi, C++Builder 10.3.3 ISO

30899 RAD Studio 10.3.3 iOS 13 Dark Theme Patch

10.3 Rio - リリース 3 - RAD Studio (en)

New features and customer reported issues fixed in RAD Studio 10.3.3 - RAD Studio

RAD Studio 10.3.3 Now Available, Learn More
Delphi 10.3.3 is Available
RAD Studio 10.3.3: Delphi Android 64-bitサポート (en)
RAD Studio 10.3.3: iOS 13およびmacOS Catalinaサポート (en)
Enterprise Connectors in RAD Studio 10.3.3 Enterprise & Architect Edition
RAD Studio 10.3.3: IDEの改善 (en)
Delphi / C++Builder / RAD Studio 10.3.3 のリリースとキャンペーンのお知らせ
RAD Studio 10.3.3で解決されたIBXの問題 (en)

DelphiのLinux Dockerサポートを使ってみよう (en)
Linux DockerによるRAD Serverの配置 (en)

Workarounds:

2019年11月1日

[書籍]IT業界の病理学

紀伊國屋書店新宿本店

IT業界の病理学 (Amazon)/司馬紅太郎、秋山浩一、森龍二、鈴木昭吾、都築将夫、堀明広、佐々木誠、鈴木準一著/技術評論社/ISBN 978-4-297-10857-1/1,848円

を購入。

2019/11開催のセミナー

2019年10月30日

Enterprise ConnectorsがEnt/Arc SKUで使用可能に

FMXLinuxに続いて、Enterprise Connectorsがサブスクリプションが有効なRAD Studio/Delphi/C++Builder 10.3(.x) RioのEnt/Arc SKU(アカデミックを除く)で利用可能になりました。

Enterprise ConnectorsがRAD Studio Enterprise / Architectに搭載 (en)

2019年10月29日

Firebird Ver4/Ver5情報

2019年10月17日から19日にベルリンで行われたFirebird Conference 2019でFirebird Projectの責任者であるDmitry Yemanovさんから現在の開発状況と、次々期バージョンとなるVersion 5について説明があったようです。

Firebird: Firebird Conference 2019: Firebird on the road from v4 to v5
Firebird on the roadfrom v4 to v5 (PDF)

適当な要約:
  • Firebird 2.5
    • 2019年06月の2.5.9で開発終了
  • Firebird 3.0
    • 2018年10月の3.0.4が最新
    • 次の3.0.5は2019年の第4四半期を予定
    • Firebird 5のリリースまでサポート予定
  • Firebird 4.0
    • 2019年02月にBeta 1をリリース
    • 2019年の第4四半期にBeta 2を予定
    • 2020年の第1四半期にRelease Candidateを予定
    • 2020年の第2四半期に正式リリースを予定
    • 新機能
      • DECFLOAT型(SQL2016)、サポート関数(COMPARE_DECFLOAT/NORMALIZE_DECFLOAT/QUANTIZE/TOTALORDER)および特殊レジスタ(SET DECFLOAT ROUND/SET DECFLOAT TRAPS TO)の導入
      • NUMERIC/DECIMALの改善(最大精度を38桁に拡張など)
      • タイムゾーンのサポート(TIME/TIMESTAMPはUTCで保存)
      • レプリケーションの改善
  • Firebird 5.0
    • ODS14
    • レコードサイズの拡張(無制限に)
    • ディスク上の圧縮の改善
    • コンテキスト制限のない新しいBLR(Binary Language Representation)
    • インデックスの改善

2019年10月4日

Microsoft OOB Update 2019/10

Microsoftの定例外のセキュリティアップデートがリリースされています。
CVE-2019-1367 | スクリプト エンジンのメモリ破損の脆弱性

基本的には2019/09の定例外のセキュリティアップデートの更新ですが、Windows 7/8.1/Server 2008/Server 2008 R2/Server 2012/Server 2012 R2の更新プログラムがロールアップになり、Windows 10/Server 2016/Server 2019の更新プログラムもWindows Update/WSUS経由でも配信されるようになっています。

2019年10月1日

2019/10開催のセミナー

2019年9月26日

[書籍]失敗しないソフトウエアテスト実践ノウハウ

紀伊國屋書店新宿本店

失敗しないソフトウエアテスト実践ノウハウ (Amazon)/SHIFT 品質・技術統轄部 技術推進部/品質プラットフォーム推進部著/日経BP/ISBN 9784296103577/2,700円

を購入。

[書籍]江添亮のC++入門

紀伊國屋書店新宿本店

江添亮のC++入門 (Amazon)/江添亮著/KADOKAWA/ISBN 978-4-04-893071-0/5,400円

を購入。

[書籍]レガシーコードからの脱却

紀伊國屋書店新宿本店Beyond Legacy Code (Amazon US)の翻訳である

レガシーコードからの脱却 (Amazon)/David Scott Bernstein著/吉羽龍太郎永瀬美穂原田騎郎、有野雅士訳/オライリージャパン/ISBN 978-4-87311-886-4/3,132円

を購入。

RAD Studio/C++Builder 10.3.2 Rio C++ Debugging Patch

RAD Studio/C++Builder 10.3.2 RioのC++ Debugger Patchがリリースされています。これはC++BuilderでWin32のBCC32コンパイラでデバッグ時に評価、監視が行われない問題(RSP-25943)を解決するものです。

30890 RAD Studio 10.3.2 C++ Debugging Patch

RAD Studio 10.3.2 C++ Debugging Patch

2019年9月24日

Microsoft OOB Update 2019/09

Microsoftの定例外のセキュリティアップデートがリリースされています。
CVE-2019-1367 | スクリプト エンジンのメモリ破損の脆弱性

なお現時点(2019/09/24)ではWindows 10についても自動的に更新が適用されないため、以下のURLから累積更新プログラムを手動でダウンロードし、適用する必要があります。

Windows 10 Version 1507(LTSB): https://www.catalog.update.microsoft.com/Search.aspx?q=KB4522009
Windows 10 Version 1607: https://www.catalog.update.microsoft.com/Search.aspx?q=KB4522010
Windows 10 Version 1703: https://www.catalog.update.microsoft.com/Search.aspx?q=KB4522011
Windows 10 Version 1709: https://www.catalog.update.microsoft.com/Search.aspx?q=KB4522012
Windows 10 Version 1803: https://www.catalog.update.microsoft.com/Search.aspx?q=KB4522014
Windows 10 Version 1809: https://www.catalog.update.microsoft.com/Search.aspx?q=KB4522015
Windows 10 Version 1903: https://www.catalog.update.microsoft.com/Search.aspx?q=KB4522016

2019年8月30日

2019年8月14日

RAD Studio/Delphi/C++Builder 10.3.2 Rio Building Changed Files Patch

RAD Studio/Delphi/C++Builder 10.3.2 RioのBuilding Changed Files Patchがリリースされています。これは特定の状況でC++BuilderのソースコードやDelphiのリソースファイルの変更がメイク/ビルドの結果に反映されない問題(RSP-25509RSP-25590)を解決するものです。

30889 C++Builder and Delphi 10.3.2 Building Changed Files Patch

C++Builder and Delphi 10.3.2 Building Changed Files Patch Released
Delphi / C++Builder 10.3.2アップデートパッチ情報

RAD Studio/Delphi/C++Builder 10.3.2 Rio Toolchain Patch

RAD Studio/Delphi/C++Builder 10.3.2 RioのToolchain Patchがリリースされています。これはC++BuilderでWin32のClangベースのコンパイラでデバッグ時にローカル変数が正しく表示されない問題(RSP-25527)とDelphiでmacOS 64ビット版の大きなプロジェクトをビルドしたときにリンクでエラーになる問題を解決するものです。

30888 RAD Studio 10.3.2 C++ and Delphi Toolchain Patch

RAD Studio C++ and Delphi Toolchain Patch Released
Delphi / C++Builder 10.3.2アップデートパッチ情報

Microsoft Monthly Update 2019/08

今日はMicrosoftのセキュリティアップデートの日です。
リリース ノート 2019 年 8 月のセキュリティ更新プログラム
2019 年 8 月のセキュリティ更新プログラム (月例) – Microsoft Security Response Center

2019年8月13日

RAD Studio ロードマップ 2019/08

RAD Studio/Delphi/C++Builderのロードマップが更新されています。

2019年8月Delphi Androidベータプランと8月付ロードマップアップデート (en)

前回からの大きな変更として、次期アップデートとなる10.3 Rio Release 3(10.3.3)の追加(2019/4Q頃)と、それに伴う次期メジャーリリース(10.4)の2020年への延期がアナウンスされています。またC++のAndroid 64bitサポートが復活しています。

雑なまとめ:
  • 次期アップデート(10.3.3)は2019年の終わり頃
    • iOS13/macOS Catalinaサポート
    • DelphiでAndroid 64ビットをサポート
  • 次期メジャーリリース(10.4)は2020年前半
    • macOS/iOSでMetal 2をサポート
    • Androidのプッシュ通知とGoogle Playサービスの再構成
    • LiveBindingのパフォーマンス向上
    • Delphi/C++Builderとも全てのプラットフォームでメモリ管理を統一(モバイル環境でのARCサポートの削除)
    • オンライン/オフラインインストーラを統合
    • Delphiで(カスタム)マネージドレコード型をサポート
  • その次のアップデート(10.4.x)は2020年の中頃以降
    • デバッガをLLDBベースのものに統合
    • MSIXアプリケーションパッケージ形式のサポート
    • DelphiでiOS 13のシミュレータ(64ビット)をサポート
    • C++BuilderでAndroid 64ビットをサポート
    • C++BuilderにWhole Tomato Visual Assistを統合
2019年8月後半から10.3.3のNDAベータ("Sugarloaf")が開始され、Google Playストアでの展開を可能にする特別なEULAが適用されることになるとのことです。

2019年8月11日

RAD Studio/Delphi 10.3.2 Rio macOS Debugging Patch

RAD Studio/Delphi 10.3.2 RioのmacOS Debugging Patchがリリースされています。これはmacOS 64ビットアプリケーションのデバッグ時の評価/インスペクトでパラメータとして渡されたいくつかの変数が正しい値で表示されない不具合を修正するものです。

30887 Delphi 10.3.2 macOS Debugging Patch
Delphi / C++Builder 10.3.2アップデートパッチ情報

RAD Studio/Delphi/C++Builder 10.3.2 Rio Runtime Packages Compatibility Patch

RAD Studio/Delphi/C++Builder 10.3.2 RioのRuntime Packages Compatibility Patchがリリースされています。これはRAD Studio/Delphi/C++Builder 10.3/10.3.1でコンパイルされた実行時パッケージを使用するアプリケーションが10.3.2の実行時パッケージ上で動作しない問題を解決するものです。なお10.3.2でコンパイルされた実行時パッケージを使用するアプリケーションは10.3/10.3.1の実行時パッケージ上では動作しないとのこと。

30886 RAD Studio 10.3.2 Runtime Packages Compatibility Patch

RAD Studio 10.3.2 Runtime Packages Compatibility Patch Released
Delphi / C++Builder 10.3.2アップデートパッチ情報

2019年8月1日

IDE Fix Pack 6.4.4

Andreas HausladenさんIDE Fix PackがアップデートされてVersion 6.4.4となっています。RAD Studio/Delphi/C++Builder 10.3 Rio Release 2 (10.3.2)のWin32コンパイラがクラッシュする問題のhotfixとのことです。

IDE Fix Pack 6.4.4 Hotfix for Delphi 10.3.2 – Andy's Blog and Tools

2019/08開催のセミナー

2019年7月25日

IDE Fix Pack 6.4.3

Andreas HausladenさんIDE Fix PackがアップデートされてVersion 6.4.3となっています。RAD Studio/Delphi/C++Builder 10.3 Rio Release 2 (10.3.2)に対応とのことです。

IDE Fix Pack 6.4.3 for Delphi 10.3.2 – Andy's Blog and Tools

2019/07/25追記: IDE Fix Pack 6.4.3はRAD Studio/Delphi/C++Builder 10.3 Rio Release 1 (10.3.1)では動作しないようです。ご注意ください。

2019年7月19日

RAD Studio/Delphi/C++Builder 10.3 Rio Release 2 (10.3.2)

RAD Studio/Delphi/C++Builder 10.3 RioのRelease 2 (10.3.2)がリリースされています。インストールには有効なUpdate Subscriptionが必要です(Community Editionを除く)。

30880 RAD Studio, Delphi, C++Builder 10.3.2 Web Install
30882 RAD Studio, Delphi, C++Builder 10.3.2 ISO

10.3 Rio - リリース 2 - RAD Studio (en)
RAD Studio 10.3.2 における新機能およびユーザーから報告された問題の修正 - RAD Studio (en)

Delphi 10.3.2 is Now Available
Delphi / C++Builder / RAD Studio 10.3.2 リリースのお知らせ (en)
C++Builder 10.3.2 is now available!
Delphi 10.3.2でmacOS 64-bitアプリケーションを開発する (en)
RAD Server Improvements in RAD Studio 10.3.2
Boost 1.68 for Win32 and Win64 in C++Builder 10.3.2
DelphiおよびC++Builderのお客様向けのGoogle PlayストアAndroid 32-bitアプリケーションの期間延長について (en)
Additional information regarding requesting a Google Play Store extension
Delphi / C++Builder 10.3.2アップデートパッチ情報

2019/07/22追記: 2019/07/19の夕方(JST)以降、EDNおよび関係システムでエラーが発生している模様です。ISOファイルは altd.embarcadero.com 方面からダウンロード可能のようですが、webインストール、GetItなどは機能していないため、状況が回復するまでは10.3.1のアンインストールや10.3.2のインストールは控えることをお勧めします。

2019/07/24追記: EDN関係のエラーは一旦終息したものの、今日になって再び発生している模様です。Embarcaderoの日本語トップページでもアナウンスされています。

オンラインサービス障害に関するお知らせ
現在、オンラインサービスを提供している一部のサーバーに障害が発生しているため、以下の機能をご利用いただけなくなっております。復旧作業を進めておりますが、今しばらくご利用いただけない状態が続きますことを、お詫び申し上げます。
  • CodeCentral、GetItによるソフトウェアのダウンロード
  • Webインストーラ(GetItを利用したインストール)
  • EDNメンバーサービス
  • quality.embarcadero.comでのバグ登録/閲覧
  • サポートナレッジベース
RAD Studio / Delphi / C++Builder製品のインストールについて、Webインストーラが使用できないためにインストール作業が行えない場合には、カスタマーサポートセンターまでお問い合わせください。

2019/07/30追記: 依然として一部のサーバがダウンしているため、回避策が提示されています。

Delphi / C++Builder / RAD Stuido 10.3.2 のインストール障害に関する回避方法 (en)
10.3.2 アドオンパッケージをインストールするための一時的な 10.3.2 GetItサーバーについて (en)

簡単な要約:
  • ISOファイルを altd.embarcadero.com からダウンロードしてインストールする。前回webインストールだった場合は設定移行ツールで設定のバックアップをとって復元する
  • GetItの代替サーバを用意したので、レジストリを変更してそっちにGetItクライアントを向ける(IDEは終了しておくこと)。
  • GetItの代替サーバからダウンロードできるものは一部に制限されている。
2019/08/01追記: GetItの代替サーバに対応したwebインストーラがリリースされています(ファイル名は"radstudio_10_3_2_esd_96593b.exe")。

New 10.3.2 GetIt Installer

2019/08/20追記: 現状のISO/webインストーラについてのまとめです。

RAD Studio インストーラ (en)

2019年6月30日

[書籍]TCP技術入門

紀伊國屋書店新宿本店

TCP技術入門 (Amazon)/安永遼真、中山悠、丸田一輝著/技術評論社/ISBN 978-4-297-10623-2/2,894円

を購入。

2019年6月26日

FMXLinuxがDelphi Ent/Arc SKUで利用可能に

FMX(FireMonkey)の元中の人(Eugene Kryukovさん)が作った謎技術、Linux上でFMXが動くFmxLinuxがEmbarcaderoにOEMされて、サブスクリプションが有効なRAD Studio/Delphi 10.3.1 RioのEnt/Arc SKUで利用可能になりました。これによりLinux上のクライアントプログラムもDelphiで作成できるようになりました。

Delphi / RAD Studio に FMX Linux のバンドルを発表 (en)

エンバカデロ、FMX Linuxとの提携によりLinux向けGUIアプリケーション開発をサポート|エンバカデロ・テクノロジーズのプレスリリース
Embarcadero Extends FireMonkey® Cross-Platform Framework to Create GUI Applications for Linux | Business Wire

First Steps with FMXLinux

既にGetItパッケージマネージャからダウンロード可能です(FMXLinux 1.41)。今後はEnt/Arc SKUにバンドルまたは組み込まれることになるようです。

FireMonkey for Linux

FMXLinuxに関する日本語の情報はあまりありませんが、さぎりさんの以下のページが参考になります。

FMXLinuxが動くディストリ探しの旅
DelphiでLinux GUIアプリケーション開発 - Qiita

2019/06/28追記: 他にも参考になる記事が出ています。

FMX Linux ファーストステップ
WSL の Ubuntu 18.04 で Delphi FMXLinux を走らせる

2019年6月25日

Firebirdロードマップ(2019/06)

Firebird v2.5.9のリリースに伴ってロードマップが更新されています。

Firebird: Roadmap

適当な要約
  • Firebird 2.0 - 2012年に開発終了。最新版は2.0.7
  • Firebird 2.1 - 2014年に開発終了。最新版は2.1.7
  • Firebird 2.5 - 安定版、2019年に開発終了。最新版は2019年06月の2.5.9
  • Firebird 3.0 - 安定版。年4回のサイクルで不具合修正と性能向上を行っている。最新版は2018年10月の3.0.4で、次回(3.0.5)は2019年第3四半期第4四半期を予定。
  • Firebird 4.0 - 現在開発中(Beta 1プレビューリリースおよび日毎のスナップショットを公開)。Beta 2は2019年第4四半期、RC1は2020年第1四半期、RTMは2020年第2四半期(下記参照)を予定。

2019/10/23追記: Firebird International ConferenceでのDmitry Yemanovさんの発言によると、3.0.5と4.0 Beta 2は2019年内、4.0 RC1は2020年第1四半期、4.0のRTMは2020年第2四半期になる模様。

Firebird 2.5.9

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

Firebird: Firebird 2.5.9
Firebird 2.5 Release Notes (PDF)

なお2.5系はこれでEOLになります。

2019年6月1日

RAD Studio/Delphi/C++Builder 10.3.1 Rio Android Push Notification Patch

RAD Studio/Delphi/C++Builder 10.3.1 RioのAndroid Push Notification PatchがGetIt経由で提供されています。これは従来RAD Studio/Delphi/C++BuilderでAndroidのプッシュ通知としてサポートしていたGCM(Google Cloud Messaging)が2019年05月29日に終了したために、後継となるFCM(Firebase Cloud Messaging)を使用可能にするためのもので、Firebase用に更新された FMX.PushNotification.Android.pas とAndroidからFirebaseにインタフェースするための AndroidApi.JNI.FireBase.pas および jarファイル、コードとして記述しなければならないいくつかのコードスニペットから構成されています。実際に使用する場合の詳細は以下のURLに記述されています。

RAD Studio 10.3.1 での Firebase による Android向けプッシュ通知サポートについて (en)
Android Firebase Push Notifications Patch and Blog Post

なおこれらの内容は次回アップデートの10.3.2に組み込まれるとのことです。

2019/06開催のセミナー

2019年5月25日

[書籍][eBook]Delphi Programming Projects

Packt Publishingで注文した

Delphi Programming Projects (Amazon US, Amazon JP)/William Duarte著/Packt Publishing/ISBN 9781789130553/39.99USD(Print+eBook)

が配送されてきました(今回の配送もDHLで、インドのチェンナイからの発送でした)。2019/05/14に注文して12日目の到着、39.99USD=4,484JPY(1USD=112.13JPY)でした。

2019年5月24日

RAD Studio ロードマップ 2019/05

RAD Studio/Delphi/C++Builderのロードマップが更新されています。

RAD Studioロードマップ(2019年5月付) (en)
2019年5月付RAD Studioロードマップへのプロダクトマネージャからのコメント (en)

今回のロードマップの注目点は
  • 次期アップデート(10.3.2)は2019年の中頃
    • DelphiでmccOS 64ビットをサポート
    • C++ Windos x64コンパイラでC++17をサポート(現在はC++11)
  • 次期メジャーリリース(10.4)は2019年末
    • macOS/iOSでMetal 2をサポート
    • LiveBindingのパフォーマンス向上
    • Delphi/C++Builderとも全てのプラットフォームでメモリ管理を統一(モバイル環境でのARCサポートの削除)
    • DelphiでAndroid 64ビットをサポート
    • オンライン/オフラインインストーラを統合
    • Delphiで(カスタム)マネージドレコード型をサポート
  • その次のアップデート(10.4.x)は2020年
    • デバッガをLLDBベースのものに統合
    • iOSでMetal GPUドライバをサポート
    • DelphiでiOS 13のシミュレータ(64ビット)をサポート
    • C++BuilderにWhole Tomato Visual Assistを統合
といったところでしょうか。ところで10.4のコードネームがついてないのは飽きちゃったんですかね。

2019年5月1日

2019/05開催のセミナー

2019年4月1日

2019/04開催のセミナー

2019年3月28日

[書籍]実力養成C#ワークブック

紀伊國屋書店新宿本店Interactive C# (Amazon US)の翻訳である

実力養成C#ワークブック (Amazon)/Vaskaran Sarcar著/清水美樹訳/大澤文孝監修/翔泳社/ISBN 9784798160214/3,672円

を購入。

2019年3月24日

IDE Fix Pack 6.4.2

Andreas HausladenさんIDE Fix PackがアップデートされてVersion 6.4.2となっています。変更はバグフィックス(2点)のみとのことです。

IDE Fix Pack 6.4.2 released (bugfix release) – Andy's Blog and Tools

2019年3月19日

[書籍][eBook]Hands-On Embedded Programming with C++17

同じくPackt Publishingで注文した

Hands-On Embedded Programming with C++17 (amazon US, amazon JP)/Maya Posch著/Packt Publishing/ISBN 9781788629300/44.99USD(Print+eBook)

が配送されてきました(今回の配送もDHLで、インドのチェンナイからの発送でした)。2019/02/28に注文して19日目の到着、44.99USDがdiscountで36.90USD=4,200JPY(1USD=113.84JPY)でした。

[書籍][eBook]Hands-On Design Patterns with Delphi

Packt Publishingで注文した

Hands-On Design Patterns with Delphi (amazon US, amazon JP)/Primož Gabrijelčič著/Packt Publishing/ISBN 9781789343243/44.99USD(Print+eBook)

が配送されてきました(今回も配送はDHLで、インドのチェンナイからの発送でした)。2019/02/28に注文して19日目の到着、44.99USDがdiscountで36.90USD=4,200JPY(1USD=113.84JPY)でした。

2019年3月2日

IDE Fix Pack 6.4

Andreas HausladenさんIDE Fix PackがアップデートされてVersion 6.4となっています。RAD Studio/Delphi/C++Builder 10.3/10.3.1 Rioの対応といくつかのfixが追加されています。

IDE Fix Pack 6.4 released – Andy's Blog and Tools

2019/03/03追記: 10.3 Rioでスタイル関係のパッチが当たらない場合がある不具合があり、これを修正する6.4.1がリリースされています、.

2019/03/04追記: 2010でTCustomListBox.ResetContentのパッチがAVを起こしてクラッシュする不具合があり、これについても6.4.1がリリースされています。

IDE Fix Pack 6.4.1 (only 10.3 without Update 1 and Delphi 2010) – Andy's Blog and Tools

2019年1月22日

RAD Studio/Delphi/C++Builder 10.3 Rio C++ Toolchain Hotfix

RAD Studio/Delphi/C++Builder 10.3 RioのC++ Toolchain Hotfixがリリースされています。C++コンパイラ、RTL/STLのいくつかの不具合を修正します。ローカライズ版が含まれないため適用後はエラーメッセージなどが英語表記になります。またIDE言語の切り替えにも未対応とのことです(hotfixの再適用が必要になります)。
30872 RAD Studio 10.3.0 C++ Toolchain Hotfix

RAD Studio / C++Builder 10.3.0 向け C++ツールチェーンホットフィックス
C++ Toolchain Hotfix for C++Builder and RAD Studio 10.3

2019年1月1日

2019/01開催のセミナー