2010年3月30日

Delphiのメモリマネージャ

Delphiのメモリマネージャには大きく分けて
  • Delphi 2.0-2005の標準メモリマネージャ
  • Delphi 2006以降の標準メモリマネージャ
  • カスタムメモリマネージャ
があります(Win16は気にしないってことで)。Delphi 2.0-2005の標準メモリマネージャはWin32初期の(あまりリソースが潤沢でなかった)環境に合わせて作られており、小さいメモリブロックの割当と解放を繰り返すと空きメモリの断片化が生じたり、パフォーマンスがあまりよくないなどの欠点が指摘されてきました。一方でDelphiのRTLではメモリマネージャの置き換え(カスタムメモリマネージャ)が当初(Delphi 2.0)から考慮されており、このメカニズムを利用してこれらの問題点を改善しようというオープンソースプロジェクトがFastMMです。Delphi 2006(C++Builder 2010)ではこの成果を取り入れて新しい(FastMMベースの)メモリマネージャが採用されました。Delphi 2006(C++Builder 2010)以降でも依然としてFastMMは使用可能で、標準の新しいメモリマネージャでは省略されている詳細レポート機能などを使用することでメモリリークの発生状況をより詳細に報告させることができます。またカスタムメモリマネージャとしてはFastMMの他に中村さんのNkMM(DHGLに付属)などもあります。NkMMの詳細については

Delphi Graphic Secrets Know-how & Libraries (amazon)/中村拓男著/ソフトバンククリエイティブ(ソフトバンク パブリッシング)/ISBM 978-4797319224 (ISBN 4-7973-1922-4)/3,129円

のp.202-204のNOTE"Delphiのメモリ管理の大きな問題点"を参照してください(Delphi Graphic Secretsは復刊ドットコムで2010/03/30現在41票となっています)。

FastMMやDelphi 2006以降の標準メモリマネージャについては以下のURLが参考になります。

Borland Developer Studio 2006の新しいメモリマネージャ - by Pierre le Riche
Delphiアプリケーションのメモリリーク検出法
某所 - 新しいメモリマネージャの仕組み
FastMMの導入

またDelphi 2.0の標準メモリマネージャについては

Inside Delphi (amazon)/Ray Lischner著/光田秀訳/アスキー/ISBN 978-4756119513 (ISBN 4-7561-1951-4)/9,240円

の"第19章 ヒープの秘密"に詳細な解説があります。

2010年3月18日

IDE Fix Pack 3.01 for Delphi 2010リリース

Andreas HausladenさんIDE Fix Pack for Delphi/C++Builder 2010がアップデートされてVersion 3.01になっています。Delphi 2010版のみの更新で、リリース時の手違いによるものとのことです。

Andy’s Blog and Tools » IDE Fix Pack 3.01 for RAD Studio 2010

2010年3月17日

IDE Fix Pack 3.0リリース

Andreas HausladenさんのIDE Fix Pack (for Delphi/C++Builder 2007/2009/2010)がアップデートされてVersion 3.0になっています。

Andy’s Blog and Tools » IDE Fix Pack 3.0 released

2010年3月16日

[書籍]Delphi 2010 Handbook

2010/03/06の発売時に注文したMarco CantuさんDelphi 2010 Handbook書籍版が今日(2010/03/16)配送されてきました。さていつ読み終わることやら。
ちなみに先日のデベロッパーキャンプで藤井さんはDelphi 2010 Handbookはたぶん翻訳されないようなことを言ってました。まぁこんなご時世なので致し方ないかとは思います。

2010年3月12日

第16回 エンバカデロ・デベロッパーキャンプ 2日目

b-mobileでもLive Meetingの専用クライアントなら辛うじて動作する模様(音声なしで画像のみですけど)。
  • [2A]Delphiテクニカルセッション「Delphi 2010 言語の新機能」
    Davidさんのセッションスタート。会場でも音声状態がよくないですね(通訳さんのものを含めて)。まぁスライドを見てればいいって話ですか。英語ですけど。

  • [2B]テクニカルセッション「ソフトウェア・アーキオロジー- もしあなたが100万行のコードの引き継ぎをすることになったらどうしますか?」
    Michaelさんのセッションでもやはり音声状態がよろしくないですね。archeology(archaeology)は考古学、という言葉です。引き継いだコードは発掘した遺物のように全く未知の状態から順番に解明していく必要がある、というような比喩でしょうか。

  • Live Meetingは接続できてもイメージが来ない…b-mobileだめか。接続し直して復帰。会場内の音声も多少は改善されたかな。

  • [2C]Delphi/C++テクニカルセッション「正しいGUIの作り方 - 重い処理でGUIが固まるのを防ぐ」
    高橋さんのセッションでスレッドの内部変数のアクセスは何らかの排他処理が必要、という部分はクリティカルセクション、System.TMonitor(ja)(Delphi 2010 2009 or later)、InterlockedExchangeAddのようなInterlocked系APIなど。クリティカルセクションについては以下の問題に注意。ってQC73347は"Cannot Fix"でClosedになってますね。It is not Delphi's issue. って話じゃないと思うんだけど。
    Team Japan » InitializeCriticalSectionEx
    早くもサンプルコードが公開されています(15:56)。
    Team Japan » サンプルコードを用意しました: 【2C】 Delphi/C++テクニカルセッション

  • 昼食時間が…。

  • [2D]スペシャルスポンサーセッション「Delphi, UC-win/Road SDKによるVRアプリケーション開発事例」
    宮本さんのセッションは3Dの絵がぬるぬる動く感じが出なかったのが残念。パッケージを使ったシステムの拡張という面で非常に興味深い。書籍も出すようです。

  • [2E]Delphiコミュニティセッション「インストーラ対決一本勝負!」
    インストーラ対決で、山本さんがInstallAwareを扱っていますが、具体的なところをもっと知りたい人はとりあえずここを読んでおくべき。ちなみに奇特なってのは山本さんの表現ですから。
    ちっぷす
    インストーラでシリアル番号の認証をしたりするのであればInstall Shield Express(113,400JPY)かInstallAware Developer(1,499USD=135,900JPY)が必要です。またInno Setupでは[Code] セクションでイベント関数 CheckSerial を記述している場合には、シリアル番号入力欄が表示される。ということで可能なようです。
    Inno Setup 日本語 デベロッパーズガイド: ウィザードページ(ダイアログ)について

  • [2F]Delphiテクニカルセッション「Delphiでキカイを制御する - アプリケーションの設計とテクニック」
    高木さんのセッションは機器不調のためディレイ中(15:11)。始まりました(15:17)。説明で使用しているソースコード(ライブラリ)は後日イマジオムさんのwebページで公開されるとのこと。TCommandQueueやSynchronizeは無名関数やジェネリクスを応用したら更にいろんなことができるかも。って早っ。25分も巻いて終わりました。

  • [2G]クロージング~抽選会
    クロージングセッションには藤井さんとJasonさんが登場。Tシャツありがとうございます。QueryPerformanceCounterとか呼んでますね、このコード。ん?TThreadPoolってどこのもんでしょう?これ(Allen Bauerさんの解説)かな?どうもマルチスレッドで素数を計算するようなプログラムのような気がする…。どっちかというと.NETなのかな?

無事終了。みなさまお疲れさまでした。会場を提供していただいたフォーラムエイトさま、コンセントがあって助かりました。

2010/03/17追記: プレゼンテーション資料がダウンロードできるようになっています。

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

2010/03/18追記: ビデオもダウンロード/リプレイできるようになっています(要登録)。またアンケートも実施されています。そういえばアンケートやらなかったな、とは思っていました。

第16回 エンバカデロ・デベロッパーキャンプ ビデオ視聴/ダウンロード
第16回 エンバカデロ・デベロッパーキャンプ アンケート

2010年3月11日

第16回 エンバカデロ・デベロッパーキャンプ 1日目

会場は20人弱、中継は同時に最大140人くらいですかね(藤井さんによれば合計で200人くらいとのこと)。b-mobileでLive Meetingに参加するのはちょっと難しいみたいです。Javaのクライアント(Web Access)は動作しないし、Office Live Meetingクライアントはダウンロードできないし。期限が切れたらauかDoCoMoにするか?(仕事の都合上僻地で使えないWiMaxは選択肢に入らない)
  • [1A]イントロダクションセッション「デベロッパーキャンプを2倍楽しむ方法・新企画のご紹介」
    堀江さん頑張れ。Delphi and C++Builder Application Showcaseに日本発のものがないということでなにやら企画中とのことです。でもうちみたいに委託だとお客さんに無断で、というわけにはいかないわけでねぇ。

  • [1B]C++チュートリアルセッション「C++Builder 5/6ユーザと初心者のためのC++Builder 2010入門」
    個人的にはPadding/Marginsプロパティの意味がわかったのが収穫(C++Builder使いじゃないもので)。

  • [1C]Delphiチュートリアルセッション「Delphi 7ユーザと初心者のためのDelphi 2010入門」
    細川さんのセッションは音声トラブルのため遅延中…(14:40)。直ったのかな?リスタート(14:44)。

  • 一応各セッションは5分前終了のような雰囲気だけど、会場にいると明示的な休憩がなくてちょっと不便かも。

  • [1D]グランドオープニングセッション「エンバカデロ製品戦略 ソフト開発者・DB管理者のための真に自由なIT環境」
    Jasonさんの"What's Next?"ではToolCloud、Commodore、Fulcrum、InterBaseに言及あり。

  • [1E]Delphiテクニカルセッション「Delphiでの文字コードのハンドリングについて 」
    富永さんのセッションで出てくるWindowsのCodePageの一覧。
    Code Page Identifiers (Windows)
    新しいIPAexフォントではJIS0213:2004制定時に字体変更された文字の旧字体を異体字として収容とのこと。
    IPAフォントのダウンロード || OSS iPedia
    IPAフォントリリースノート || OSS iPedia

  • [1F]C++テクニカルセッション「C++言語のパワーとRAD/ビジュアルアプリケーション開発の活用」
    JasonさんのC++BuilderのセッションはC++0x draft準拠機能、Boostの正規表現、新しいTDirectoryクラス、デバッガのビジュアライザ、スレッドのデバッグ機能などのデモ。


1日目は無事終了。[1B][1F]を見ていて思ったのは、C++BuilderはVSユーザのなかでもC++を使いたいんだけどC++/CLIはありえない、かといってMFCはいまさら、という人にフォーカスしてアピールするといいのでは、ということ。そのためにはC++0xなどの標準準拠度の向上やBoostのようなライブラリへの積極的な対応が重要なのではないでしょうか。

2010年3月10日

Microsoft Monthly Update 2010/03

今日はMicrosoftのセキュリティアップデートの日です。
MS10-016
MS10-017

2010年3月6日

Delphi 2010 Handbook (書籍版)出版

Marco CantuさんDelphi 2010 Handbookの書籍版がAmazon(US)から発売されました。全318ページで、定価は43.50USD(3,930JPY)ですが、現時点(2010/03/06)では34.25USD(3,095JPY)のディスカウントが設定されています。またDelphi/C++Builder/RAD Studio 2010の登録ユーザはEDNのCodeCentralからPDF形式のものをダウンロードできるようになっています。

元ねたはDelphi 2010 Handbook on Amazon, Developer Network

2010/03/17追記: Delphi/C++Builder/RAD Studio 2010の登録ユーザ向のDelphi 2010 HandbookとTMS Smooth Controls Packの無償ダウンロードについての記事がEDNに追加されています。

Delphi 2010, C++Builder 2010 および RAD Studio 2010 の登録ユーザーの方へ、 2つの無償ダウンロードの提供

2010/03/27追記: Amazon(JP)での取り扱いを確認しました。4,956円で配送料無料ですし、日本語で注文できるので、こちらのほうがいいかもしれません。

Amazon.co.jp: Delphi 2010 Handbook: A Guide to the New Features of Delphi 2010; Upgrading from Delphi 2009: Marco Cantu: 洋書

元ねたはDelphi 2010 Handbook in Europe

2010年3月1日

[書籍]プログラマのための文字コード技術入門

ジュンク堂書店の新宿店で

WEB+DB PRESS plusシリーズ プログラマのための文字コード技術入門/矢野啓介著/技術評論社/ISBN 978-4-7741-4164-0/2,709円

を見かけたので購入。

2010年2月23日

Delphi 2010 Handbook (PDF版)出版

Marco CantuさんDelphi 2010 Handbookが完成してPDF版(28.00USD/2,474JPY)が発売されました。書籍版(43.50USD/約3,970JPY)は来週くらいにCreateSpaceから、その後数週間でAmazonなどでも入手可能になるようです。
またPDF版をDelphi 2010登録ユーザ向にEmbarcaderoから無償でダウンロードできるように交渉中とのことです。

元ねたはDelphi 2010 Handbook Released

2010/03/01追記: Delphi 2010 Handbook In Printによると書籍版(print on demand)がCreateSpaceで発売になっています。

2010年2月17日

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

第16回 エンバカデロ・デベロッパーキャンプ前回予告されたとおりにウェブセミナー形式(Mircosoft Live Meeting)で2010年03月11日-12日の2日間で開催されます。今回は中継が可能になったということでDavid Intershimoneさん(エンバカデロ・テクノロジーズ チーフエヴァンジェリスト)、Jason Vokesさん(エンバカデロ・テクノロジーズ テクノロジー&インターナショナルマーケティング シニアディレクタ)、富永英明さん(有限会社エイブル)といった豪華布陣です(あっいつものみなさんが豪華じゃない、という意味ではありません)。
再放送が可能になれば時間や日付が合わない人も見られるようになっていいと思います。

2010/03/05追記: ライブ会場に行きます。仕事はいいのか…?

2010年2月10日

Microsoft Monthly Update 2010/02

今日はMicrosoftのセキュリティアップデートの日です。
MS10-003
MS10-004
MS10-005
MS10-006
MS10-007
MS10-008
MS10-009
MS10-010
MS10-011
MS10-012
MS10-013
MS10-014
MS10-015

Delphi 2010におけるREST

Marco CantuさんによるDelphi 2010を使用したRESTの扱いに関するホワイトペーパが翻訳、公開されています。また解説ビデオ(英語)も公開されています。

Rad Studio 2010 in Action JP Marco
「Delphi 2010におけるREST」ホワイトペーパーダウンロード

元ねたはMarco CantuさんDelphi REST White Paper in Japanese

2010年2月9日

Firebird 2.5 Release Candidate 2リリース

firebirdsql.orgのサーバクラッシュの影響で遅れていたFirebird 2.5のRelease Candidate 2ですが、やっとリリースされました。

Firebird File Repositories (download)
Firebird 2.5 Release Notes

2010年2月8日

一定時間ユーザ入力がないことを検知する

一定時間ユーザがPCの操作が行わなかったことを検知するにはGetLastInputInfo(ja)で最後に操作したタイミング(LASTINPUTINFO構造体のdwTime)と現在のGetTickCount(ja)の値(いずれもmsec単位)を比較します。注意点としてはGetLastInputInfoはシステム全体ではなく現在のセッションのユーザ入力のみを扱うというところでしょうか。
このサンプルではボタンをクリックしてポーリングを開始した後でユーザ入力(キーボード、マウス操作)が10秒間発生しなかったときにメッセージダイアログを表示します。またポーリング毎に前回からユーザ入力が発生していない場合はLabel1に表示しているGetTickCountの表示をclRedに変更しています。
procedure TForm1.Button1Click(Sender: TObject);
begin

  Timer1.Enabled := True;
  Button1.Enabled := False;

  FLastTick := 0;
  Timer1Timer(Sender);

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  LII: TLastInputInfo;
begin

  FillChar(LII,SizeOf(LII),0);
  LII.cbSize := SizeOf(LII);
  if GetLastInputInfo(LII) = False then
  begin
    Exit;
  end;

  Label1.Caption := 'Last user input: ' + IntToStr(LII.dwTime);
  if FLastTick <> LII.dwTime then
  begin
    Label1.Font.Color := clWindowText;
    FLastTick := LII.dwTime;
  end
  else
  begin
    Label1.Font.Color := clRed;
  end;

  if (GetTickCount - LII.dwTime) > (10 * MSecsPerSec) then
  begin
    Timer1.Enabled := False;
    Button1.Enabled := True;
    MessageDlg('Detect for input idle (10 seconds).',
               mtInformation,[mbOk],0);
    Label1.Caption := '';
  end;

end;
別解としてSetWindowsHookEx(ja)にWH_KEYBOARD_LL(ja)/WH_MOUSE_LL(ja)を指定して低レベルフックをかけ、フック関数内でGetTickCountの値を取得、というものも考えられますが、
  1. DelphiのIDEから実行するとデバッガでブレークしたときにやたらに時間がかかる。
  2. Windows XPのVisual Style(Luna)とマウスの低レベルフックの相性が悪く(どちらかというとLunaの不具合)、フォームの最小化、最大化ボタンをクリックしたときに極端に反応が悪くなる。
という問題があるため、こちらはあまりお勧めできません。

2010/03開催のウェブセミナー

2010/03/03 18:00-19:00(JST) 3/3 - Webセミナー「DB Optimizerによるデータベース パフォーマンスチューニングの概要と評価方法」
2010/03/24 18:00-19:00(JST) 3/24 - Webセミナー「DBArtisan チュートリアル」

2010年1月28日

RAD Studio/C++Builder 2010 Hotfix 1

RAD Studio/C++Builder 2010のHotfix 1がリリースされています。QC79954のCコマンドラインプリプロセッサの不具合を修正するものです。

RAD Studio 2010 (C++Builder 2010) 用 Hotfix1
27567 Hotfix 1 for RAD Studio 2010 (C++Builder 2010)

2010/02/02追記: EDNの日本語の記事が出たのでリンクを差し替えました。