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の日本語の記事が出たのでリンクを差し替えました。

2010年1月27日

Fulcrum

Allen BauerさんThe Oracle at Delphi » Requiem for the {$STRINGCHECKS xx} directive…によれば、従来"Project X"と呼ばれていた(現在開発中のMac/Linuxクロス対応)次期RAD Studioのコードネームは"Fulcrum"だそうです(さっそく"Fulcrumだって?Mig-29かよ"というツッコミが入っていますが)。それにしてもCommodoreはいずこへ…。
ちなみに本題である$STRINGCHECKSコンパイラディレクティブ(日本語ページはない)というのは、Delphi 2009/2010でUnicodeStringがデフォルトになった一方でC++Builderでは(Stringではなく)明示的にAnsiStringが使用されてきたため、この間を取り持つ変換処理を挿入するかどうかを指定するためもの(プロジェクトオプションのコンパイラオプションでデフォルトを指定可能)。Fulcrumではこれが廃止される(無視されるようになる)、というお話みたいです。

2010年1月22日

WindowsのサービスからGUIを持つプロセスを起動

Windows Vista/7ではセッション0の分離が行われたため、単純にサービスからGUIプロセスを起動できなくなりました。そこで
  1. Win32APIのWtsGetActiveConsoleSessionID関数で現在ログオンしているユーザのセッショントークンを取得。
  2. サービス(SYSTEMアカウント上で動作している)のプロセスのユーザトークンを取得。
  3. ユーザトークンを複製。
  4. ログオンユーザのセッションを複製したトークンに設定。
  5. 複製したトークンを使用してWin32APIのCreateProcessAsUser(ja)関数でプロセスを起動。
という手順を踏み、サービスからGUIを持つプロセスを起動する方法を説明した記事。興味深い。とりあえずメモ。

From Zero To One » Blog Archive » How to start a GUI process from service, under Windows Vista/7

Microsoft OOB Update 2010/01

Microsoftの定例外のセキュリティアップデートがリリースされています。
MS10-002

2010年1月21日

RAD Studio/Delphi/C++Builder 2010 Update 4/5適用後のTTimerの振る舞いについて

Team Japanの高橋さんの

Team Japan » TTimerコンポーネント

によれば、TTimerのSetEnabled(True)の実装がRAD Studio/Delphi/C++Builder 2010 Update 4/5適用で変更され、これに伴なってメインスレッド以外のスレッドからTTimerをスタートしようとするとうまくいかないという報告があるようです。

QC81256: Changing TTimer.Enabled from thread does not work anymore since Update 4 for Delphi 2010
QC80376: RAD Studio 2010 IdTCPServer1Execute Error (After latest updates)

2010年1月19日

RAD Studio/Delphi/C++Builder 2009 Hotfix 3

RAD Studio/Delphi/C++Builder 2009のHotfix 3がリリースされています。IntraWebでUTF-8のWebRequestの内容を解析するTUTF8ContentParserの中国語(繁字体)マルチバイト文字の処理の問題を解決するようです(高橋さんによれば従来サポートでのみ配布していたものが正式公開になったようです)。IntraWebを10.0.21に更新した上でUTF8ContentParser.pasをプロジェクトフォルダに配置してリンク対象にし、かつ実行時パッケージを使用しないようにする、という変則的なものです。

Delphi/C++Builder/RAD Studio 2009用 Hotfix 3
27563 Hotfix 3 for Delphi 2009 and C++Builder 2009
Team Japan » Delphi/C++Builder 2009向けHotfix 3 for IntraWeb 10

なおこの問題は最新のRAD Studio/Delphi/C++Builder 2010では発生しない(The problem does not occur in the latest 2010 version.)とのことです。

2010/01/20追記: IntraWeb 10.0.21についてはTeam Japanのこちらの記事も参考になります。

Team Japan » IntraWeb Ver10.0.21 がリリースされました

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

2010年1月13日

Microsoft Monthly Update 2010/01

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

2010年1月7日

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

2010/01/14 18:00-19:00(JST) 1/14 - Webセミナー「詳細!DataSnap」
2010/01/21 17:00-18:00(JST) 1/21 - Webセミナー「エンバカデロ・テクノロジーズによるツール・クラウド All-Access」Replay download
2010/01/27 18:00-19:00(JST) 1/27 - Webセミナー「DB Optimizerによるデータベース パフォーマンスチューニングの概要と評価方法」

時間があれば…。

2010/01/14追記: 「詳細!DataSnap」は気がついたら終わっていた。だめじゃん…。

2010/01/26追記: うぅむ、時間がない…。

2010/02/25追記: 2010/01/21分のリプレイのリンクを追加しました。