2009年6月29日

JVCL 3.37リリース

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

SourceForge.net: JEDI VCL for Delphi: Files

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

2009年6月19日

PowerPDF for Delphi 2009 日本語版

PDFを生成するTakeshi KannoさんのPowerPdf 0.9(開発停止/LGPL)をDelphi 2009で使用できるようにMamさんが改造したコンポーネント。

PowerPDF for Delphi 2009 Japanese
MAM'S WEBSITE 無料フリーソフトダウンロード(PCツール)

数式計算コンポーネント

数式を与えて値を計算するという、簡単なようにみえて実際には結構面倒なことをやってくれるというコンポーネント。作者のYura Pisarevさんはロシアの方でしょうか。

High-speed mathematics parser
TMathParser

ライセンス条件はどうなっているのでしょう…?

2009年6月16日

ローカライズリソースDLLの選択

国際化対応のためのメカニズムとしてDelphi/C++Builder(Ver3以降)にはローカライズリソースDLL(localized resource DLL)があります。これは拡張子".EXE"、".DLL"、"BPL"のファイルについて、実行時にこれらのファイルからのリソース(フォームデータ、リソース文字列、その他の埋め込みリソース)のロードをローカライズリソースDLLからのものに置き換えてしまう、というものです。
この動作はSystem.pasのLoadResourceModule関数で処理されますが、ここではまず"HKCU\Software\CodeGear\Locales"(Delphi 2009 or later)、"HKLM\Software\CodeGear\Locales"(Delphi 2009 or later)、"HKCU\Software\Borland\Locales"(Delphi 4 or later)、"HKLM\Software\Borland\Locales"(Delphi 6-2007)、"HKCU\Software\Borland\Delphi\Locales"(Delphi 3 or later)の順にレジストリキーの存在を確認し、いずれかが存在したら次に実行ファイルのフルパス名の登録があるかどうかを見て、登録されていたら代替ロケール識別子として取得します。次に実行プログラムのロケール識別子を実行ロケール識別子として取得します。その上で実行ファイルのフルパス名の拡張子を代替ロケール識別子(登録されていれば)、実行ロケール識別子、実行ロケール識別子の先頭2文字だけ、の順で置き換えてWin32APIのLoadLibraryExを呼び出し、成功したらそのモジュールハンドルを以後のリソースの取得に使用します。いずれも失敗した場合はもともとの実行ファイルのモジュールハンドルからリソースを取得することになります。

ここでロケール識別子はGetLocaleInfoのLCTYPEにLOCALE_SABBREVLANGNAMEを指定して取得される3文字の英字で、最初の2文字が言語簡略名(ISO 639)を、3文字目がサブ言語タイプ(主に地域)を示します。詳細なリストはMSDNのNational Language Support (NLS) API Referenceにあります。

ということは、実行ロケールがJPN(ロケールID=0x0411/日本語版Windows)かつ実行ファイルのロケールがJPN以外(例えばENU=0x0409)の状況でローカライズリソースDLLとして.JPNファイルが存在する場合、実行ファイルのリソースを使用する方法がない(.JPNファイルを削除するしかない)わけです。どーりでレジストリに何を指定しても駄目なわけだ…。

元ねたは"Source\RTL\SYS\System.pas"。

2009/09/06追記: 新井さんによるとDelphi 2010ではこの選択メカニズムに一部変更があったとのことです。
Embarcadero Discussion Forums: Delphi2010 国際化対応について ...
Delphi 2010を入手したら検証してみたいと思います。

2011/05/04追記: forums.codegear.comのリンクをforums.embarcadero.comのものに差し替え。

2009年6月10日

Microsoft Monthly Update 2009/06

今日はMicrosoftのセキュリティアップデートの日です。
MS09-018
MS09-019
MS09-020
MS09-021
MS09-022
MS09-023
MS09-024
MS09-025
MS09-026
MS09-027
KB969898 (Cumulative Security Update of ActiveX Kill Bits)

2009年6月4日

Borlandの買収に競合出現

2009/05/06にBorlandがMicro Focusに買収されるというニュースが流れましたが、ここにきて1株1.20USDで買収したいという競合相手(BorlandによればNDAで相手を明かすことはできないが、"E社"(Company E)と呼んでいる)が出現した模様です。

Tech Trader Daily - Barron’s Online : Borland Shrs Spikes; Second Bidder Offers $1.20/Shr

Borlandはどうもこっちになびいているようで、Micro Focusによる買収は不透明な情勢のようです。

元ねたは公式フォーラムのEmbarcadero Discussion Forums: Is "Company E" Embaracadero...? ...あたり。

2009年6月3日

DelphiのASLR/DEP(NX)サポート

ASLR(Address Space Layout Randomization)とは、実行ファイルからリンクされるDLLをユーザメモリ空間上に配置するときにその位置をランダムにすることにより特定のアドレスに既知のDLLがロードされていることを前提とした攻撃を防ぐもので、Windows Vistaで導入されました。
一方DEP/NX(Data Execution Prevention/Non-eXecutable)とはNXであるとマークしたメモリ空間上の領域でコードを実行することを禁止することによりバッファオーバランなどを利用した攻撃を防ぐもので、Windows XP SP2で導入されました。

Delphiでは2007以降でASLRおよびDEP/NXをサポートするようになりました。またDelphiのデバッガも2007以降でDEP/NXに対応した(DEP/NXが有効なWindows上でもエラーにならないようにした)とのことです。

ASLRを有効にするにはソースコード上で
{$DYNAMICBASE ON}
または
{$SETPEOPTFLAGS $40}
とします(コマンドライン版では"–dynamicbase"スイッチを使用します)。

DEP/NXを有効にするにはソースコード上で
{$SETPEOPTFLAGS $100}
とします。

ASLRとDEP/NXを同時に有効したい場合はソースコード上で
{$SETPEOPTFLAGS $140}
とすれば1回の指定で済みます。

コンパイラ指令$SETPEFLAGS/$SETPEOPTFLAGSはDelphiのヘルプのPE ヘッダーフラグ(Delphi)(英語ヘルプ)にあるように、PEファイルヘッダのCharacteristicsフィールドとPEファイルオプションヘッダのDLLCharacteristicsフィールド上のフラグをセットする(指定は累積されます)ためのもので、これらのコンパイラ指令はプロジェクトソース(*.dpr/*.dpk)に記述するのが望ましいとのことです。PEファイルヘッダのCharacteristicsフィールドとPEファイルオプションヘッダのDLLCharacteristicsフィールドの詳細はIMAGE_FILE_HEADER Structure (Windows)(PEファイルヘッダ)およびIMAGE_OPTIONAL_HEADER Structure (Windows)(PEファイルオプションヘッダ)を参照してください。

元ねたはMichael Howard's Web Log : CodeGear’s new Delphi 2007 supports ASLR and NXMike Devery » Delphi 2007 supports ASLR and NXChris’ CodeGear Debugger Blog » The Delphi 2007 Debugger and DEP/NX (Internet Archive)あたり。

2011/05/05追記: Chris Hesikさんの"Chris’ CodeGear Debugger Blog"のInternet Archiveのリンクを追加。

2009年5月31日

IDE Fix Pack 2.6/VCLFixPack 1.3リリース

Andreas HausladenさんIDE Fix Pack 2009がVersion 2.6に、VCLFixPackがVersion 1.3にそれぞれアップデートされています。IDE Fix Pack 2009 Version 2.6はDelphi 2009 Update 3適用済の環境でのみ動作するとのことです。

Andy’s Blog and Tools » IDE Fix Pack 2.6 for 2009 Update 3 / VCL Fix Pack 1.3

2009年5月29日

リリースは月火水のみ

公式フォーラムでNick Hodgesさんが以下のように発言しています。
Embarcadero Discussion Forums: When the heck is Update 3 going to be ...
Actually, we now only ship on a Monday, Tuesday, or Wednesday. We've set that as an official policy.

要は公式な方針として(PST/PDTで)月曜日、火曜日、水曜日にのみリリースを行う、ということのようです(JSTだと概ね火曜日~木曜日になりますね)。

2009年5月27日

Indy 10のアップデート

最近のDelphi/C++Builder/RAD Studioではネットワーク関係のライブラリとしてIndyの使用が推奨されており、実際にDelphi 2007には10.1.5が、Delphi 2009には10.2.3がそれぞれ標準で添付されています。しかし最新のnightlyは10.5.5(2009/05/27現在)となっており、DEKOさんの指摘のとおり不具合を修正するには最新にアップデートすることが必要です。ということでメモ。

Delphi 2009 に最新版の Indy10 をインストールする
Delphi 5~2007 に最新版の Indy10 をインストールする
Unicode 版 Delphi (2009 以降) に最新版の Indy10 をインストールする [Delphi Programming]
ANSI 版 Delphi (5~2007) に最新版の Indy10 をインストールする [Delphi Programming]

ところでindy10.zipは10.2.3、IndyTiburon.zipは10.5.5ですが、名前に反してIndyTiburon.zipはDelphi 2007およびそれ以前にも導入可能のような気がします。あとでDelphi 2007で更新を試してみます。

2009年5月26日

C++0xの右辺値参照とムーブセマンティクス

C++0xの新機能の一つである右辺値参照とムーブセマンティクスについてのわかりやすい説明のわかりやすい翻訳。C++プログラマではありませんが、非常に興味深いテーマです。

Visual C++ Team Blog : Rvalue References: C++0x Features in VC10, Part 2
和訳:Rvalue References: C++0x Features in VC10, Part 2 - ntnekの日記

InitializeCriticalSectionEx

Team Japanの高橋さんの記事によると、Windows Vista(NT 6.0)以降ではInitializeCriticalSectionによる初期化ではリソースリークが発生するとのこと。

Team Japan » InitializeCriticalSectionEx

まぁそもそもマルチCPUではInitializeCriticalSectionAndSpinCountでスピンカウントの指定をしないとパフォーマンスに影響が出るらしいし、新しいOSではInitializeCriticalSectionExを呼び出しなさない、というのは判るのだが、もう少し互換性のある拡張はできないのかと。スピンカウントもどのくらいの値が適当なのかよくわからないし。

ちょうどいま流し読み中のWindowsデバッグの極意(Mario Hewardt、Daniel Pravat著/長尾高弘訳/アスキー・メディアワークス/ISBN978-4-04-867608-3)の"第10章 同期"でクリティカルセクションに触れています。以下引っ掛かる点を引用。
RTL_CRITICAL_SECTION.DebugInfo
クリティカルセクションに関する追加情報を格納する構造体で、これを格納するメモリはシステムにより確保される。(p.502)

RTL_CRITICAL_SECTION_DEBUG
RTL_CRITICAL_SECTION_DEBUGは主としてデバッグ用の情報を格納しているように見えるが、初期バージョンのWindowsでは、これがなければクリティカルセクションが使える状態だと見なされなかった。実際、オペレーティングシステムが初期化中にこの構造体のメモリを確保できなければ、APIは失敗していたのである。Windows Server 2003 SP1以降、このデバッグ情報がなくても、クリティカルセクションは機能するようになった。(p.504)

EnterCriticalSection
Windows 2000のEnterCriticalSection APIについては注意が必要だ。メモリの残量が少なくなったときにこれを呼び出すと、メモリ不足例外が投げられることがあるのだ。クリティカルセクションはイベントを使っており、EnterCriticalSection APIではこのイベントが初期化される。システムのメモリの残量が少なくなっていると、そのために例外が起きる。Windows 2000のもとでクリティカルセクションを信頼できる形で実行したければ、クリティカルセクションの初期化時にイベントを確保し、その後は例外を投げないInitializeCriticalSectionAndSpinCount APIを使うようにするとよい。(p.505)

追記: 高橋さん、フォローありがとうございます。

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

第13回エンバカデロ・デベロッパーキャンプは2009年07月02日にOpenSource World 2009の一部として開催されます。OpenSource World 2009そのものは2009年07月01日~07月02日の開催です。今回はPhilip Rathleさん(All-Accessのプロダクトマネージャ)やmatzさんがいらっしゃるようです。

2009年5月23日

Delphi Live! 2009/スピーカインタビュー

Anders OhlssonさんがYouTubeにDelphi Live! 2009のスピーカのインタビューを大量アップロードしています。

The Hacker’s Corner » Blog Archive » Speaker video interviews from Delphi Live! 2009
Video interviews from Delphi Live! 2009

2009/05/26追記: EDNの紹介記事が翻訳されています。
Delphi Live! 2009からのビデオインタビュー(英語)

2009年5月22日

アプリケーション開発者向けMicrosoft Windows 7対応アプリケーションの互換性

MSDNのWindows 7 互換性情報ページで"アプリケーション開発者向けMicrosoft Windows 7対応アプリケーションの互換性"というドキュメントがダウンロードできるようになっています。このドキュメントではWindows Vista/Windows 7向のアプリケーションで注意しなければならない点について解説されています(Vistaのときのお粗末な文書に比べると結構詳細でわかりやすくなっています)。

Delphi Live! 2009/プロダクトアドレス

Delphi Live! 2009のプロダクトアドレスの画面キャプチャ+音声が公開されています。

Delphi 2009! Live Recap
26915 Delphi Live! 2009 Recap and Product Address

英語で70分間はかなりきついですが、画面(PowerPoint)を見ているだけでも雰囲気はつかめます。

2009年5月21日

Delphi Live! 2009の動画

Delphi.orgに"What is Cooking in the Delphi Labs"セッションの動画が順次アップロードされていくようです。
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 1 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 2 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 3 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 4 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 5 - The Podcast at Delphi.org
Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 6 - The Podcast at Delphi.org
Delphi Live! 2009 - What’s Cooking in the Delphi Labs - Part 7 - The Podcast at Delphi.org

Fun Side of Delphi with Marco Cantu at Delphi Live 2009! - The Podcast at Delphi.org

またYouTubeにもアップロードされています。
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 1
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 4
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 5
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 6
YouTube - Delphi Live! 2009 - What is Cooking in the Delphi Labs - Part 7

Marco Cantuさんによれば、この"What is Cooking in the Delphi Labs"セッションではNick HodgesさんのIDEインサイト機能やコードフォーマッタ、Allen BauerさんのDirect2DサポートやRTTI拡張によるリフレクション機能、Carlさん(誰?)のDelphi for MacによるMacOS上のコンソールアプリケーション、Anders OhlssonさんのDelphiコードのANSI->Unicode変換ツール、David IさんのVS2010上のDelphi Prismでの.NET 4.0やパラレルエクステンションのサポートなどがデモされたようです。
(更新中)

2009年5月20日

Blaise Pascal Special Issue

BLAISE PASCAL MAGAZINEの(通常はダウンロード版が4号で30.00EURですが)特別版が無償で読めるようになっています。英語ですけど。
でさらっと目次を見ていたのですが、Borlandの創業者であるPhilipe Kahnさんのインタビューが掲載されています。懐かしいですね。

元ねたはRave, Delphi and more: BlaisePascal magazine - special edition -

2009/05/21追記: EDNでも紹介されています。
Free special issue of Blaise Pascal Magazine and Free One-Year Subscription
26909 Blaise Pascal Magazine Special Issue & Free 1-year Subscription

2009年5月19日

Delphi/C++Builder/RAD Studioのコマンドラインオプション

Delphi/C++Builder/RAD Studioで使用できるコマンドラインオプションをまとめてみました。


-r
カスタムレジストリ設定を使用 (-rXYZ : XYZレジストリを使用)
-idecaption
IDEのキャプションを指定 (-idecaption="NEW CAPTION" : キャプションを"NEW CAPTION"に変更)
-p
使用パーソナリティの指定 (-pDelphi : Delphi, -pCBuilder : C++Builder, -pDelphiDotNet : Delphi.NET, -pCSharp : C#Builder)
-np
Welcome pageの非表示 (Delphi 7およびそれ以前ではデフォルトプロジェクトの非作成)
-ns
スプラッシュの非表示

-rオプションで指定した文字列はレジストリ"HKEY_CURRENT_USER\Software\Borland\BDS\6.0"(Delphi 2009の場合)の"BDS"部分の置き換えに使用されます。

-pオプションで指定するのは、実際にはレジストリ"HKEY_CURRENT_USER\Software\Borland\BDS\6.0\Known IDE Packages"(Delphi 2009の場合)の下にあるキーの名称で、指定したキーの下にあるIDEパッケージが起動時に読み込まれます。ここに新たにキー/エントリを追加して-pオプションで指定することで、カスタマイズしたプロファイルでIDEを起動することができます(ただしコンポーネントパッケージは対象にならない)。詳細は下記のMark Edingtonさんの記事を参照。

Delphi/C++Builder/RAD Studio XE以降については以下のリンクに詳細な記述があります。
元ねたはDelphi 2007 HandbookDELPHI 2009 HANDBOOKMark Edington’s Delphi Blog : Delphi Startup Times and the Kitchen SinkDelphi Tweet Day (delphitweetday) on Twitterなど。

2016/04/20追記: Delphi/C++Builder/RAD Studio XE以降のオンラインヘルプのコマンドラインオプションのページへのリンクを追加。

2017/03/23追記: Delphi/C++Builder 10.2 Tokyoの情報を追加。