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 チュートリアル」