2010年12月27日

[書籍]土木建築エンジニアのプログラミング入門

オンラインの日経BP書店

土木建築エンジニアのプログラミング入門/フォーラムエイト著/日経BP/ISBN978-4-8222-6621-9/2,940円

を購入。この間のデベロッパーキャンプでフォーラムエイトの宮本さんが『近日中にAmazonでも扱いが始まるはずです』といっていましたが、待つのも面倒なので…。全ページ多色刷り、CD-ROM付きで豪華です。

2010年12月22日

Windowsのテストに便利なツールとその使用法

Windows 7/Server 2008 R2上でテストを行うためのツール類とその使用方法を紹介するドキュメントをMicrosoftが公開しています。

Windows のテストに便利なツールとその使用法

紹介されているツールとその使用方法(要約):
  • システムイメージの作成と復元: Windows Automated Installation Kit (WAIK)
  • デバイスのプラグアンドプレイ(PnP)関連のテスト: Plug and Play Driver test (Pnpdtest.exe) (WDKに付属)
  • システムのスリープ・レジュームの移行を自動的に繰り返し実行: Power Management Test Tool (Pwrtest.exe) (WDKに付属)
  • アプリケーションの動作を検証: Application Verifier
  • ネットワークパケットを監視・分析: Network Monitor
  • Windowsポータブルデバイス(WPD)の動作をモニタ: WPD Monitor (WPDMon.exe) (WDK)
  • 問題の再現手順を簡単に記録: 問題ステップ記録ツール (Problem Steps Recorder) (Windows標準)
  • マネージアプリケーションの例外とコールスタックを取得: WinDBG (Windows SDK)
  • カーネルモードドライバ内のエラーを検出: Driver Verifier (Windows標準)
  • ブルースクリーンの問題を調査: Debugging Tools for Windows (Windows SDK)

紹介されているツールのダウンロードリンク:

2010年12月21日

[書籍]デザインのためのデザイン

ジュンク堂書店の吉祥寺店

デザインのためのデザイン (amazon)/Frederick P. Brooks, Jr.著/松田晃一、小沼千絵訳/ピアソン桐原/ISBN978-4864010047/3,780円

を購入。

2010年12月17日

InterBaseのバックアップ、ジャーナル機能

かなり前になりますが、InterBase 2007以降の新機能の物理バックアップ、ジャーナル関係の興味深いアーティクルがいくつか。

InterBaseのバックアップ機能について
InterBaseのジャーナル機能について
InterBase 2007稼働中にシステム時間を変更した場合の影響について

てきとうな要約:
  • InterBase 2007以降では
    • 従来のフルバックアップ("gbak -b"でODS非依存のバックアップファイルが作成される)
    • 物理バックアップ("gbak -d"で現状の.IBのコピーが作成され、"gbak -d"毎に変更のあったページのみがインクリメンタルに更新される)
    の2種類のバックアップが可能。物理バックアップしたファイルは読み込み専用の状態になっており、"gfix –mode read_write"で書き込み可能(つまりオリジナルと同等)になる。
  • 一方InterBase 2007以降のジャーナルはデータベースに対して"CREATE JOURNAL"とすることでジャーナルファイルが作成されるようになる。更に"CREATE JOURNAL ARCHIVE"とすることでジャーナルアーカイブ機能が有効になり、この状態で"gbak –archive_journals"でジャーナルアーカイブファイルが、"gbak –archive_database"でアーカイブデータベースダンプファイルが、それぞれ作成される。このジャーナルアーカイブファイルとアーカイブデータベースダンプファイルを使用して"gbak –archive_recover"とすることでデータベースを復旧することができる。ジャーナル関係のファイルはバックアップ関係のファイルとは異なりプラットフォーム依存。
  • 運用中にシステム時刻が変更された場合、物理バックアップのインクリメンタルな更新やジャーナルに影響を及ぼすので要注意。

InterBase Serverサービスを停止しなくても"gbak -d"で安全にコピーが取れるようになったということですね。

2010年12月16日

BDE Alternatives Guide

先日のデベロッパーキャンプでも再三BDEはやめましょう、という話が出ていましたが、こんなページがありました。

Data Access for Delphi

BAG="The BDE Alternatives Guide"ですね。

元ねたはNick HodgesさんFlotsam and Jetsam #17

2010年12月15日

Microsoft Monthly Update 2010/12

今日はMicrosoftのセキュリティアップデートの日です。
MS10-090
MS10-091
MS10-092
MS10-093
MS10-094
MS10-095
MS10-096
MS10-097
MS10-098
MS10-099
MS10-100
MS10-101
MS10-102
MS10-103
MS10-104
MS10-105
MS10-106

月間17件、年間106件とも過去最多の数字になります。攻撃手法の進化はあるにせよ、Microsoftの"新しいOSはセキュア"といういつもの主張はお題目に過ぎないことがわかります。頑張っていることはわからないでもないのですけれども…。

2010年12月14日

Delphi/C++Builder初学者のための資料

Delphi-MLや先日のデベロッパーキャンプでも話が出ていましたが、これからDelphi/C++Builderを始めようとすると、入門書の類いはほとんどなく、またヘルプにもチュートリアル的な内容(に限りませんけどね…)がろくに存在しないため、系統的にDelphi/C++Builderを学ぶのが意外に難しい、というのが今の状況です。そこでこのような人のために、入手可能性がそれなりな情報を集めてみました。ただし環境がTurboだったり2007だったり2009だったり、あるいは書籍はもっと古かったりしますが、そこは適当にスルーということで。またデータベース関係についてはDBXのもの以外は軽く読み飛ばしてしまって構いません(いまさらですから)。

EDN(Embarcadero Developer Network): エンバカデロ・テクノロジーズの運営する開発者向情報サイト。過去に入門的な内容のアーティクルがいくつか掲載されました。

EDN/Delphi/ナッキーの「Turbo Delphiはじめて奮戦記」
ナッキーの「Turbo Delphiはじめて奮戦記」(全24回)

EDN/Delphi/ナッキーの「Delphiでビジネスアプリ奮闘記」
第1回 CSVファイルをデータベースへ移行する その1
第2回 CSVファイルをデータベースへ移行する その2
第3回 データベースのレコードを編集する
第4回 データベースのレコードをCSVファイルに保存する

EDN/C++Builder/石原高のオレ流C++独学塾
第1回 オレ流Hello World
第2回 C言語の知識で挑むC++Builder
第3回 CSVファイルを処理してみる
第4回 長い処理をスレッドで実行する

EDN/C++Builder/C++Builder 2009 ファーストガイド
第一回 「C++Builder 2009のインストールと使用許諾」
第二回 「C++Builder2009の起動と終了」
第三回「総合開発環境(IDE)の説明」
第四回「プログラミング手順(前編)」
第五回「プログラミング手順(後編)」
第六回「C++基礎知識(前編)」
第七回「C++基礎知識(後編)」
第八回 「コンポーネント」
第九回「コンポーネントの作成」
第十回「データベースアプリケーションの作成」

書籍: 昨今の出版不況の影響でDelphi/C++Builderの新しい書籍が出ることは考えにくい状況ですが、古本という形でなら入手可能なものもあるようです。このうちオフィシャルコースウェアはどれか一つあれば十分かなと思います(そういう意味ではDelphi 7のものを入手できればいいかと)。また『ナッキーのDelphiはじめて奮戦記』は上記のEDNの記事の書籍化ですが、まとまっている分読みやすいのではないかと思います。

書籍/オフィシャルコースウェア
Borland Delphi4オフィシャルコースウェア 入門編 (amazon)/服部誠著/インプライズ監修/アスキー/1999年/ISBN978-4756130242/
Borland Delphi 4オフィシャルコースウェア (システム開発編) (amazon)/加藤大受著/アスキー/1999年/ISBN978-4756130259/5,040円
Borland Delphi4オフィシャルコースウェア クライアントサーバシステム構築編 (amazon)/真木保著/インプライズ監修/アスキー/1999年/ISBN978-4756131379/5,460円
Borland Delphi 5オフィシャルコースウェア (基礎編) (amazon)/服部誠著/アスキー/1999年/ISBN978-4756132772/2,940円
Borland Delphi 5オフィシャルコースウェア (応用編) (amazon)/井上勉著/アスキー/2000年/ISBN978-4756133236/
Borland Delphi6オフィシャルコースウェア 基礎編 (amazon)/服部誠著/ボーランド監修/アスキー/2002年/ISBN978-4756140029/
Borland Delphi 6オフィシャルコースウェア 応用編 (amazon)/井上勉著/ボーランド監修/アスキー/2002年/ISBN978-4756140036/
Borland Delphi7オフィシャルコースウェア 基礎編 (amazon)/服部誠著/ボーランド監修/アスキー/2003年/ISBN978-4756142283/2,940円
Borland Delphi7オフィシャルコースウェア 応用編 (amazon)/井上勉著/ボーランド監修/アスキー/2003年/ISBN978-4756142290/5,040円

書籍/一般解説書
Delphiの奇跡―普通のプログラマのための真面目な入門書 (amazon)/吉田弘一郎著/技術評論社/1995年/ISBN978-4774102160/
ナッキーのDelphiはじめて奮戦記 (amazon)/佐竹那月著/カットシステム/2007年/ISBN978-4877831332/
Delphi 4プログラミングバイブル (amazon)/Marco Cantu著/篠原慶訳/インプレス/1999年/ISBN978-4844312734/
Delphi 6 プログラミングバイブル (amazon)/Marco Cantu著/篠原慶、光田秀訳/2002年/ISBN978-4844316343/
Turbo DelphiではじめるWindowsプログラミング (amazon)/日経ソフトウエア編/日経BP/2007年/ISBN978-4-8222-2842-2/2,520円

その他
Seventh Delphi Delphi 入門/旧 Delphi 入門/Delphi FAQ

オフィシャルコースウェアあたりは古い内容そのままで構わないんでPDFにでもして配ってくれませんかね…?

2010/12/15追記: RANさんからコメントを頂いたSeventh Delphiさんのリンクを追加しました(Bloggerはコメントが読みにくいので)。

2010年12月10日

浮動小数点数についての解説

Rudy VelthuisさんによるDelphiにおける浮動小数点数(公式には"実数型")の扱いに関する詳細な解説。興味深い。

Rudy's Delphi Corner - Floating point numbers

元ねたは公式フォーラムのEmbarcadero Discussion Forums: Float operations

2010年12月9日

CONDITIONALEXPRESSIONS

CONDITIONALEXPRESSIONSはVER140(Delphi 6, C++Builder 6, Kylix 1/2/3)以降で使用可能な標準条件シンボルで、$IFに対して値に関する条件を記述できることを示しています(CONDITIONALEXPRESSIONSが未定義なら$IFDEF/$IFNDEFで条件シンボルが定義されているかどうかの判定しかできませんが、定義されていれば値を"="、"<"、"<="、">"、">="、"<>"で比較できます)。

このときに使用できるRTLVersion/CompilerVersion/FireMonkeyVersionは定数で、RTLVersion(System.pasで定義)はVER140以降で使用可能、CompilerVersion(コンパイラがSystem.pasをコンパイルするときに設定)はVER140以降のKylix 1以外で使用可能、FireMonkeyVersion(FMX.Types.pasで定義)はDelphi XE2 Update 2以降のFireMonkeyアプリケーションで使用可能です。

各バージョンにおけるRTLVersion、CompilerVersion、FireMonkeyVersionの値は以下のようになっています。

Kylix 1
RTLVersion=14.00
(未定義)
Delphi 6 (Gold)
RTLVersion=14.10
CompilerVersion=14.01
Delphi 6 (Update Pack 1)
RTLVersion=14.11
CompilerVersion=14.01
Delphi 6 (Update Pack 2)
RTLVersion=14.20
CompilerVersion=14.01
C++Builder 6
RTLVersion=14.20
CompilerVersion=14.01
Kylix 2
RTLVersion=14.20
CompilerVersion=14.10
Kylix 3
RTLVersion=14.50
CompilerVersion=14.50
Delphi 7
RTLVersion=15.00
CompilerVersion=15.00
Delphi 8 for .NET
RTLVersion=16.00
CompilerVersion=16.00
Delphi 2005
RTLVersion=17.00
CompilerVersion=17.00
Delphi 2006
RTLVersion=18.00
CompilerVersion=18.00
Delphi 2007
RTLVersion=18.00
CompilerVersion=18.50
Delphi 2007 for .NET
RTLVersion=19.00
CompilerVersion=19.00
Delphi/C++Builder 2009
RTLVersion=20.00
CompilerVersion=20.00
Delphi/C++Builder 2010
RTLVersion=21.00
CompilerVersion=21.00
Delphi/C++Builder XE
RTLVersion=22.00
CompilerVersion=22.00
Delphi/C++Builder XE2
RTLVersion=23.00
CompilerVersion=23.00
FireMonkeyVersion=16.1(Update 2), 16.2(Update 3), 16.3(Update 4)
Delphi/C++Builder XE3
RTLVersion=24.00
CompilerVersion=24.00
FireMonkeyVersion=17.0
Delphi/C++Builder XE4
RTLVersion=25.00
CompilerVersion=25.00
FireMonkeyVersion=18.0
Delphi/C++Builder XE5
RTLVersion=26.00
CompilerVersion=26.00
FireMonkeyVersion=19.0
Delphi/C++Builder XE6
RTLVersion=27.00
CompilerVersion=27.00
FireMonkeyVersion=20.0
Delphi/C++Builder XE7
RTLVersion=28.00
CompilerVersion=28.00
FireMonkeyVersion=21.0
Delphi/C++Builder XE8
RTLVersion=29.00
CompilerVersion=29.00
FireMonkeyVersion=22.0
Delphi/C++Builder 10 Seattle
RTLVersion=30.00 *
CompilerVersion=30.00
FireMonkeyVersion=23.0
Delphi/C++Builder 10.1 Berlin
RTLVersion=31.00 *
CompilerVersion=31.00
FireMonkeyVersion=240 **
Delphi/C++Builder 10.2 Tokyo
RTLVersion=32.00 *
CompilerVersion=32.00
FireMonkeyVersion=250 **
* C++Builder 10 Seattle以降のClangベースの新しいC++コンパイラ(#if defined(__clang__))ではRTLVersionではなくRTLVersionCを使用する必要がある→Clang 拡張 C++ コンパイラと旧世代の C++ コンパイラの違いを参照。
** Delphi/C++Builder 10.1 Berlin以降ではFireMonkeyVersion(FMX.Typesユニット)の定義がComp型からInteger型となり、値も240(0xF0)のように10倍になっているため、注意が必要です。

注意しなければならないのは、RTLVersion(C)、CompilerVersion、FireMonkeyVersion(10 Seattleおよびそれ以前)のいずれも実数型の値なので、小数点以下を含むもの(Delphi/C++Builder 6の14.xあたり)は丸めによる誤差を考慮して評価する必要がある、という点です。

実際の使い道としては
  • Kylixのバージョン判定(いまさら)
  • ジェネリクス、無名関数といった新機能のサポート状況の判定
くらいでしょうか(UpdateやHotfixの適用状況がわかるように、もう少し真面目に値を変えてほしいところです)。

StringがAnsiStringかUnicodeStringかは標準条件シンボルUNICODEを使用して
{$IFDEF UNICODE}
// StringはUnicodeString
{$ELSE}
// StringはAnsiString
{$ENDIF}

で判定できますが、ジェネリクス/無名関数が使用できるかどうかは
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF CompilerVersion >= 20.0}
// ジェネリクス/無名関数使用可能(Delphi 2009以降)
{$ELSE}
// ジェネリクス/無名関数使用不可(Delphi 6-2007)
{$ENDIF}
{$ELSE}
// ジェネリクス/無名関数使用不可(Delphi 5以前)
{$ENDIF}

このように判定することができます。

またFireMonkeyVersionはVER230でもRTM/Update 1では定義されていないため、
{$IF Declared(FireMonkeyVersion) and (FireMonkeyVersion > 16.0)}
...
{$IFEND}

のように定義済かどうかの確認も必要です。

元ねたはDelphi Tips - 0086あたりとDelphi XE - Q&A。標準条件シンボルと同様に、有効な情報が(ヘルプを含め)あまりないのは改善をお願いしたいところです。

2011/09/02追記: Delphi/C++Builder XE2関係を追加。

2012/09/02追記: Delphi/C++Builder XE3関係およびFireMonkeyVersionに関する記述を追加。

2013/09/12追記: Delphi/C++Builder XE4/XE5関係を追加。

2014/04/15追記: Delphi/C++Builder XE6関係を追加。

2014/09/02追記: Delphi/C++Builder XE7関係を追加。

2015/04/07追記: Delphi/C++Builder XE8関係を追加。

2015/09/01追記: Delphi/C++Builder 10 Seattle関係を追加。

2016/04/20追記: Delphi/C++Builder 10.1 Berlin関係を追加。

2017/03/23追記: Delphi/C++Builder 10.2 Tokyo関係を追加。

2010年12月8日

FreeAdhocUDF version adhoc 20101206リリース

第18回エンバカデロ・デベロッパーキャンプのT6セッションの木村さんのライトニングトークの"UPPERはあってもLOWERがない"ネタで触れられていたFreeadhocUDFの最新版(20101206)がリリースされていました。

元ねたはFirebird News » New version of FreeAdhocUDF released

2010年12月7日

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

会場(池袋のシアターグリーン)へのアクセスについてはTeam Japan » 第18回 エンバカデロ・デベロッパーキャンプ会場へのアクセスを参照のこと。普通は池袋駅からのルートがわかりやすくてよいのでは。
また今回はUStreamとLiveMeeting(要登録)でライブ中継が行われます。

うーん、微妙に狭いのとやはり机がほしいかな…姿勢が不自然で丸一日だと結構疲れます(机がなく常に後傾なのと見下ろしになることの相乗効果で)。電源はありがたいですね(使っている人は他にはあまりいませんでしたが)。

G1:「エンバカデロ・プロダクトアドレス」
  • InterBase XEの日本語版はまもなくリリース予定。
  • Delphiのx64コンパイラのプレビューリリースはクローズドベータなので、参加希望者はエンバカデロにコンタクトしてくださいとのこと。
  • PulsarのIDEはWindows x86のまま(x64ではWOW64で動作)。

T2:「アプリケーション開発者のためのDBべからず集からパフォーマンスチューニングまで」
  • BDEはもうやめましょう。4GB超のドライブに対応していないし。
  • 開発環境は仮想化すると便利。検証とか。
  • Pro SKUでDBX/DataSnapはローカル接続のみ(ライセンス的に)。Ent SKUでDBXにするか、Pro SKUならIBXで。
  • マルチティア化するのにはDataSnapが便利(Ent SKUで)。
  • T*Tableコンポーネントは使わない。T*Queryで結果セットを極力絞り込みましょう(T*Tableは基本的に全件転送します)。
  • データベースアクセスはUIとは分離してDatamoduleに置きましょう。
  • データベーステーブル上のデータをなんでも表示するとパフォーマンスに影響するので、必要なものだけにしましょう。Lookup系の動作にも気をつけて。
  • データベースエンジンそのものの評価も忘れずに。AccessやParadoxはやめましょう、とりあえず。
  • 主キー/外部キー、インデックスは正しく使いましょう。PLANの確認も忘れずに。
  • 追加、変更、削除を繰り返すデータベースはメンテナンスを。バージョンニングを採用しているInterBase/Firebird/PostgreSQLは削除レコードの影響でインデクシングが遅くなる。
  • JOINするときは十分に注意を払って。結果セットのサイズとかOUTER JOINによるNULL値とか。
  • 移行は計画的に。お金、期間は十分ですか?

T3:「つながる!!PHP拡張の極意 - PHPからWebサービスにアクセス」
  • DatasnapではなくREST/JSON/SOAPなどの業界標準でも簡単接続できる。
  • Delphi/C++BuilderでSOAPサーバをコンソール/GUIアプリケーションとして簡単に作成できる(ウィザードあり)。

T4:「開発者の疑問に答える!徹底Q&A」
  • 初学者向の書籍や資料があまりない。古本で探せば安く済ますことができる(内容はある程度そのまま適用可能なので)。→こちらに関連アーティクルを用意しました。
  • 新しいバージョンへのマイグレーションはDEKOさんとことか過去のデベロッパーキャンプのセッションなどを参考に。
  • 新しいDelphi/C++Builderに移行するときは一旦2007にマイグレーションして文字コード(Unicode関連)以外の修正点(データベース関係とかVisualStyleとか)をクリアしてから2009/2010/XEにステップアップしましょう(問題点を局限するために)。その際はプロジェクトだけは作成し直しをお勧め(ライブラリパスが古いものを引きずるとかApplication.MainFormOnTaskBar := True;の行が入らないとか構造体アライメントが1(デフォルトは8)になってしまうとか原因不明な問題を避けるため)。
  • マイグレーションしたら警告がががが、は頑張って消しましょう。大多数はANSI/Unicodeの暗黙的変換についてのものだと思われますが、$WARNで抑止するのは最小限の範囲で。
  • いまどきの開発環境はWindows 7(Pro/Ent/Ult)でvmware/VPC/Hyper-Vなどの仮想環境を利用するのが便利(OSのライセンスには気をつけて)。

T5:「Delphi言語『再』入門 - ビギナーからエキスパートまで!意外と知らない言語機能や落とし穴 」
T6:「共有!みんなの開発事例、開発経験、テクニック 」
懇親会
  • この時期に外は寒い。ストーブで暖まる。
  • ToolCloudそのもの(ライセンス管理システム)も今後OEM的に出していきたい、というかその準備に1年かかった。
  • NTTデータさんは(ライセンス的にもお金的にも)すごい。

無事(?)終了。関係者、参加者の皆さん、おつかれさまでした。

2010/12/09追記: 米澤さんがTwitterのまとめを作ってくれました。

Togetter - 「第18回デベロッパーキャンプ」

2010/12/13追記: なんとなく記憶にあるもの、Togetterられているものについて内容を追記しました。

2010/12/15追記: セッション資料がダウンロードできるようになっています。これに基づいて追記。ただT4とT6の分はありません。UStreamのリプレイがほしいですね…。

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

2010/12/16追記: T4/T6のリプレイが公開されています(セッション資料ダウンロードページからリンクされています)。

第18回 エンバカデロ・デベロッパーキャンプ「開発者の疑問に答える!徹底Q&A」 - channel-e.embarcadero.com
第18回 エンバカデロ・デベロッパーキャンプ ライトニングトーク 「共有!みんなの開発事例、開発経験、テクニック 」 - channel-e.embarcadero.com

2012/05/14追記: T6のリプレイがYouTubeにアップロードされています。

2010年12月6日

Delphiで自己展開アーカイブを作成

RRUZ(Rodrigo Ruz)さんによるDelphiでSFX(Self Extracting Archives)を作成する方法。興味深い。とりあえずメモ。

Create a SFX File with delphi (Self Extracting Archives) « The Road to Delphi – a Blog About Delphi Programming (mostly)

このアーティクルのコードでは実行ファイルにリソースを格納するのにWin32APIのBeginUpdateResource (ja)、UpdateResource (ja)、EndUpdateResource (ja)を、実行ファイルで格納されているリソースを検索するのにFindResource (ja)を使用しています。

2010年12月3日

CanTools Wizards

Delphiのマスタリング/ハンドブックシリーズでおなじみのMarco CantuさんがCanTools Wizardsというウィザードセットを公開しています。

CanToolsW on marcocantu.com

上記のページからDelphi 6(CanToolsW6.bpl)/Delphi 7(CanToolsW7.bpl)/Delphi 7 + Update 1(CanToolsW71.bpl)/Delphi 2007(cantools_2007.bpl)/Delphi 2009(cantools_2009.bpl)/Delphi 2010(cantools_2010.bpl)/Delphi XE(cantools_xe.bpl)のパッケージライブラリ(bpl)がダウンロードできます。

CanTools Wizardsには以下の機能が含まれています。
  • List Wizard
  • OOP Form Wizard
  • Object Inspector Font
  • Rebuild Wizard
  • Clip History Viewer
  • VCL Hierarchy
  • DB Form Wizard
  • No ".net safe" warnings
  • Bookmark list
  • Palette Info
  • Add to project manager for .ini
  • ShowDebug Inspector
  • Publish Project
…試してみましたが微妙な感じですね。

元ねたはMarco CantuさんのCantools Wizards for Delphi XE