2009年2月27日

ディレクトリツリーから空のディレクトリだけを削除する

指定されたディレクトリの下にあるファイルを持たない空のディレクトリだけを再帰しながら削除していきます。
uses
  SysUtils, Classes;

function DeleteEmptyDir(const Path: String): Boolean;
var
  Index: Integer;
  DirNames: TStringList;
  SearchRec: TSearchRec;
begin

  Result := True;

  if Path = '' then
  begin
    Exit;
  end;

  DirNames := nil;
  try
    DirNames := TStringList.Create;

    { Search }
    if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*',faAnyFile,SearchRec) = 0 then
    begin
      try
        repeat
          if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
          begin
            Continue;
          end;

          if (SearchRec.Attr and faDirectory) <> 0 then
          begin
            DirNames.Add(IncludeTrailingPathDelimiter(Path) + SearchRec.Name);
          end
          else
          begin
            Result := False;
          end;

        until (FindNext(SearchRec) <> 0);

      finally
        FindClose(SearchRec);
      end;
    end;

    { Delete sub directories }
    for Index := 0 to DirNames.Count - 1 do
    begin
      if DeleteEmptyDir(DirNames.Strings[Index]) = True then
      begin
        { Delete }
        if RemoveDir(DirNames.Strings[Index]) = False then
        begin
          RaiseLastOSError;
        end;
      end
      else
      begin
        Result := False;
      end;
    end;

  finally
    DirNames.Free;
  end;

end;

最初に指定したディレクトリは削除されません。戻値がTrueであれば削除可能(指定したディレクトリの下がすべて削除された)であることを示します。

2009年2月23日

第12回エンバカデロ・デベロッパーキャンプのまとめ(3)

村上さん@日揮情報システムのERStudioの話
多数のデータベーステーブルの論理モデル、物理モデル、データ定義を、一貫して同じものを同じように、漏れなく、間違いなくメンテナンスしていくことができる。
BASICライクなマクロを使用して作業を自動化できる。
リバースエンジニアリングもできる。
論理モデル上の名称(日本語のもの)を最終的なデータ定義のコメントとして埋め込む(これもマクロで自動的に)ことで、メンテナンスなどで非常に便利に使える。

筑木さん@日本情報システムのC++Builderの話
STLやTR、Boostなどを使えばDelphiよりも複雑なアプリケーションをはるかに簡単に作れる。
詳細はセッション資料サンプルコード参照。
内容盛りだくさんだけど何とか最後まで到達。

細川さん@シリアルゲームズのDelphi/Win32APIの話
WindowsとVCLの関係、VCLのコンポーネントによる(Windowsの)オブジェクトのラッピング、WindowsのメッセージのVCLにおける扱いなど。
CreateParams、CreateSubClass、CreateWindowHandleをoverrideしてWin32APIのRegisterClassやCreateWindowExのパラメータを制御するようなメカニズムになっている。
WindowsやVCLなどからSend/Post/Performされたメッセージはウィンドウプロシージャからディスパッチャ経由でメッセージハンドラ(message指令で指定)に引き渡される。

高橋さん@エンバカデロテクノロジーズのDelphi Prismの話
Delphi PrismとはOxygene(RemObjects SoftwareのChromeコンパイラ)+dBExpress+.NET Framework 3.5サポート+Monoサポートをまとめたもの。
Delphi PrismはOxygeneコンパイラでMSILにコンパイルされる(従来のDelphi.NETコンパイラではないため完全な互換性はない)。.NET Framework 1.1/2.0/3.0/3.5に対応している。
VCL(.NET)も存在しないので.NET Framework標準のフレームワークを使用する。
文法面の互換性向上はDelphi/Prism共通の課題として考えている。
VB.NET/C#が持っていない言語機能をシンタックスシュガーとして備えている(プロパティアクセサのインライン化、クラスコントラクト、プロパティ通知、Nullable型の暗黙の拡張、非同期メソッド、フューチャなど)ので、複雑な機能を簡単な記述で利用できる。
MonoプロジェクトのサポートでMac OS X/Linux/BSD向の開発が可能になった。



(以下のんびりと追記予定)

2009年2月19日

All-Access正式発表

またもやMarco CantuさんのOfficial Release of All-Accessからの情報で、All-Accessが正式に発表されています。
Embarcadero Debuts the Industry’s First On-Demand, Multi-Platform Software Development Tool Chest: Embarcadero All-Access

またAll-Accessの製品ページも公開されています。
All-Access - Embarcadero Technologies

2009/02/19追記: プレスリリースの日本語訳も公開されました。
エンバカデロ・テクノロジーズ、業界初、マルチプラットフォーム対応のオンデマンド開発ツールセット「Embarcadero® All-Access™」を発表
日本では2009/03/04に詳細が発表されるとのことです。あれ?このリリースはまだcodegear.comドメインですね。

また藤井さんのAllegro Barbaroでも説明されています。
Allegro Barbaro > オンデマンドというツール提供のかたち : ITmedia オルタナティブ・ブログ

2009年2月18日

第12回エンバカデロ・デベロッパーキャンプのまとめ(2)

次はJose Leonさん/Delphi for PHP関係の話。
Delphi for PHP by Jose Leonさん(Delphi for PHPアーキテクト、qadram software CEO)
PHPの開発があまりにも旧態依然としていて非効率的なので、そのまま作業するよりは慣れ親しんだDelphiライクなIDE+コンポーネントライブラリを作ってしまったほうが作業量が少ない、と判断してDelphi for PHP(の前身となるqstudio)を作った。
Delphi for PHPはIDEとして6作目だったので、最初からうまくいく見通しがあった。
必要のないコードを書きたくない(タイヤの再発明はしたくない)。
VCL for PHPのコンポーネントはちゃんとCodeGearと契約してから作業した。

Delphi for PHPについて
HTML(visual)、JavaScript、non-visualなコンポーネントを含むことができる。
デバッガが使える(パフォーマンス的には厳しいが)。
プロファイラで実行行数、実行時間などを簡単に計測することができる。
ページコンポーネントがwebページに対応するベースとなるコンポーネント(Delphiではフォームに相当)で、そのページを構成するHTMLソースが生成される。ここにコンポーネントを配置すると、対応するHTMLソースが追加生成される。
FlashやjQueryもラッピングしてVCL for PHPコンポーネントにすることができる。
OpenChartにDBExplorerからDnDしたデータソースなどのコンポーネントを接続するだけで簡単にFlashベースのグラフを表示できる。
OpenGridも同様にデータソースと接続することで更新も含め簡単にデータのグリッド表示が可能になる(AJAXで動作している)。
コンポーネントベースにすることでコードの記述が最小限で動作するようになっている。

第12回エンバカデロ・デベロッパーキャンプのまとめ(1)

まずはCodeGear/Embarcadero関係の話。
Delphi/C++Builder Developer Meetingについて
4月にDavid.Iさんがasia-pacificをまわるところをつかまえてやりたいと思っているとのこと。
FT参加者、FT参加希望者を対象に。
いまのところ2009年04月13日(月曜日)17:30からの予定(無保証)。
NDAベースのミーティングになる。

codegear.comはembarcadero.comに統合
近日中にcodegear.comのコンテンツはembarcadero.comに統合される。
dn.codegear.comにあるものは単純にドメイン部分を"edn.embarcadero.com"に読み替えるだけでよいが、www.codegear.comのコンテンツは再編されるので要注意。
国際化などの仕掛けは従来どおり。
旧borland.co.jp/borland.comから移行した古いコンテンツにリンク切れがある、という話をしたら、そのようなものを見つけたら個別にメールで教えてください、とのこと。

on-demand tool accessについて
on-demand accessというEmbarcaderoの製品をすべて使用できる包括的なライセンス形態の販売を予定している(Marco CantuさんのEmbarcadero All-Access経由で読んだinfoworldのEmbarcadero offers on-demand tools accessという記事に出ていました)。
企業でのライセンス管理が容易になる。
たまにしか使わないようなツールのライセンスも含まれるので導入のハードルが低くなる。
だいたい3つの製品を買えば元が取れるような価格になる(infoworldの記事ではシングルユーザ、ワークステーション用のBronzeで2250USD≒21万円なので計算が合う感じ)。

オフィス移転
来週から新しいオフィスに移転する。
電話番号が変更になるので注意。
藤井さんの下僕マーケティングのアシスタントスタッフを募集中。

2009/02/18追記: embarcadero.comへの移行が現在進行中です。

IDE Fix Pack 2.4リリース

Andreas HausladenさんIDE Fix Pack 2007/2009がVersion 2.4にアップデートされています。
Andy’s Blog and Tools » IDE Fix Pack 2.4 released

2009年2月17日

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

毎度のことですが、スピーカの皆さん、関係者の皆さん、おつかれさまでした。
とりあえず次回の会場には電源付きの席を用意してほしいと思った一日でした。あとできれば地下ではないほうが(auの電波が微妙で夕方には電池切れ寸前になってしまった)。

2009/02/18追記: デベロッパーキャンプの内容や感想についてはまとめ(1)まとめ(2)に移しました。

2009/02/23再追記: セッション資料がダウンロードできるようになっています。

2009/03/11再追記: デベロッパーキャンプの内容や感想をまとめ(1)まとめ(2)まとめ(3)まとめ(4)にまとめました(途中ですが)。

2009年2月11日

Microsoft Monthly Update 2009/02

今日はMicrosoftのセキュリティアップデートの日です。
MS09-002
MS09-003
MS09-004
MS09-005
KB960715 (Cumulative Security Update of ActiveX Kill Bits)

2009年2月5日

IDE Fix Pack 2.3リリース

Andreas HausladenさんIDE Fix Pack 2007/2009がVersion 2.3にアップデートされています。"I have finally found a way to replace a .NET method at runtime without using the ProfilerAPI or other libraries. I can do it from native code."だそうです。
Andy’s Blog and Tools » IDE Fix Pack 2.3 - Bye bye “Cannot resolve unit name”