写真 青い空と雲と建物と木々の緑

nishimotzの日記

  • TCodeGear.Create()

    CodeGear RAD Studio 2007 Professhonal をインストールしてみました。

    いままで使っていた Borland Developer Studio 2006 のプロジェクトは、開くときに新しいファイル形式(MSBuild対応)に変換されるようです。

    実は開発環境の見栄えは大差ないのですが、これは私が Vista をクラシックUIで使っているからかも知れません。

    ドキュメントは読みやすくなったように感じます。そして、私が前回の記述で書いた C++Builder の TStringList の使い方が間違っていました。ValueFromIndex は形式が「名前 = 値」の文字列を対象としてその右辺の値を取り出すプロパティです。

    Delphi でデフォルトのプロパティに相当するのは Strings でした。つまり、

    [Delphi] s := lines[i];

    [C++Builder] s = lines->Strings[i];

    になります。

  • 久しぶりのDelphi

    1995年にBorlandから登場したソフトウェア開発ツールDelphi 1.0には感動しました。私は発売されるとすぐに購入しました。

    しかし、いつの間にか Visual Basic やら Java やら C++ やらの進化に気を取られ、Microsoft .NET に翻弄され、Delphi の神髄に触れることなく月日が流れました。たぶん Delphi 3.0 あたりまでバージョンアップしたと思うのですが、小さなアプリを作ったくらいで、だんだん興味を失っていきました。たぶん Windows ネイティブアプリを作ること自身に興味を失っていたからでしょう。

    最近私が作りたい(作りたいと思うようになった)ツールには .NET は重すぎて小回りがきかない、と思い始めました。

    C++ Builder を使ってみようと思い、Borland Developer Studio 2006 を購入しました。しかし、C++ の流儀をそのまま使えると思いきや、まず VCL の流儀がわからないと話にならない、ということに気づきました。そして残念ながら、オンラインドキュメントの説明は Delphi 中心にしか書かれていなかったのです。

    私は Delphi 2006 を本格的に使うようになって半年が過ぎました。Pascal もなかなか快適なスクリプト言語だなあと思い直しました。

    Windows の API を簡単に呼び出せるし、メッセージハンドラを書くための「メッセージメソッド」という機能が文法に備わっているのも便利です。

    CodeGear ブランドの独立、Delphi 2007, C++ Builder 2007, Rad Studio と新製品がいろいろ発表され、これからも安心して使い続けることができそうだなあ、と思っています。

    何よりも大きいのは、わからないことの大半がインターネットで調べられる、ということです。多くの開発者の方が実践的なノウハウをウェブサイトにまとめておられることに感謝しています。

    この週末は、いままで Excel のマクロでやろうか、Perl のスクリプトでやろうか、と思っていたデータの集計作業を Delphi でやってみました。実は CSV ファイルを Grid コントロールに読み込むのは簡単だったのです。

    CSV ファイルを TStringList に LoadFromFile して、1行ずつ TStringGrid の row に DelmitedText として代入する。こんな感じです:

    procedure LoadCSV(sg: TStringGrid; f: string);
    var
    i: Integer;
    lines: TStringList;
    pos : integer;
    begin
    lines := TStringList.Create;
    lines.LoadFromFile(f);
    pos := 0;
    for i := 0 to lines.Count - 1 do begin
    // 先頭行は fixed
    sg.Rows[pos].DelimitedText := lines[i];
    Inc(pos);
    if sg.RowCount = pos then
    sg.RowCount := sg.RowCount + 1;
    end;
    lines.Free;
    end;
    

    C言語で初めて strtok を覚えて「文字列のトークン化をするのに1文字ずつスキャンしなくてもいいのか」と喜んだのですが、その後 awk を覚えたり perl の split を覚えたりして、トークン化された文字列が配列に一発変換されることに快感を感じました。

    同じようなことは Delphi でどうやるんだろう、で思ったのですが「DelimitedText に代入する」というのはなかなか面白いやり方だなあ、と感心しています。

    試してみたら、C++ Builder でも同じでした。

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if (OpenDialog1->Execute()) {
    TStringList *lines = new TStringList();
    lines->LoadFromFile(OpenDialog1->FileName);
    for (int i=0; i < lines->Count; i++) {
    String s; // AnsiString
    s = lines->ValueFromIndex[i];
    s.sprintf("%d,%s,%s", 10, "123", s.c_str());
    StringGrid1->Rows[i]->DelimitedText = s;
    }
    delete lines;
    }
    }
    

    C++ Buider の String クラスは std::string ではなく、Delphi の AnsiString なのです。Delphi を勉強したらやっと C++ Builder も使えるようになってきました。

    上記のコードだけ比べると C++ の方が簡潔かなあ、という気もしますが、ValueFromIndex[i] をもっと簡潔に書くにはどうしたらいいのかわかりません。全体としては Delphi で仕事をする方が「心地よい」と感じています。

    私が大学に入って最初に覚えたプログラミング言語は Pascal でした(大学に入る前に覚えたプログラミング言語もありましたが)。Delphi の Linux 版である Kylix はビジネスとしては成功しなかったようで、いま Delphi は Windows 専用の開発環境になってしまいました。クロスプラットフォームの C++ 開発をした方が将来性がある、という意見もあると思います。しかし、環境依存部分と環境独立部分にシステムをうまく切り分けて、環境依存部分はその環境にもっともふさわしいツールで開発する、という方法も有効ではないかと思います。Visual Studio 2005 で書いた C/C++ のコードは DLL にすれば Delphi から簡単に呼び出せることも確認しました。

    Delphi は「作り捨てアプリケーション」から、作り込みとリファクタリングを重ねて「まともなアプリケーション」を作るところまで、いろんな要求をカバーできる言語だなあ、と再認識した今日この頃です。C# などと違って、プログラムを配布するときにランタイムが不要なのも便利ですね。

  • rail or jail

    CodeGear (Borland) の 3rdRail のトライアル版をダウンロードして、試しています。Ruby on Rails に興味を持ちつつも、環境を作るところで何度も挫折したので、今度こそ、という感じです。

    今回試したのはWindows版で、作業環境はVista Businessです。そもそもVistaを使っているところが最大のネックのような気がしますが。。

    いま配布されているのは英語版で30日の有効期限があるトライアル版です。解凍して実行するとセットアップのメニューが現れます。

    “3rdRail Install” を実行すると、Eclipseベースの統合環境がインストールされます。

    “Ruby on Rail Install” を実行すると、Ruby 実行環境がインストールされますが、私はすでに Ruby-186-25 をインストールしていたので、先にこれをアンインストールする必要がありました。

    最後に、”InterBase 2007 Install” を実行しました。

    3rdRail と InterBase 2007 はそれぞれ別にライセンスを取得する必要があります。

    環境はEclipseそのものです。Eclipseに慣れていれば「パースペクティブ」といった操作環境そのものの概念を新たに覚える必要がなく、自然に使うことができます。

    まずボーランドのビデオを見ました。

    Project Commander で Ruby on Rails のコマンドを直接打ち込んで実行できること、その際に CTRL-スペース でコマンドの補完ができること、左下のアイコンで「スクリプトエクスプローラ」を選択できること、などをとりあえず把握しました。

    モデルは Create New Model で、いわゆるデータベースのテーブルを作成し、フィールドを追加できることがわかりました。

    サーバの実行は右下の Server タブで簡単です。

    新規プロジェクトを作って、モデルを作って、Scaffoldを作るところを、何度も繰り返しました。

    InterBase をデータベースに使った場合は、比較的簡単に、Scaffold でテーブルにレコードを追加する画面を自動生成することができました。ブラウザでのアプリケーション操作では日本語も正しく扱えています。

    プロジェクトフォルダの最上位にxxx_development.ib というファイルが作成されます。そこでInterBase の管理ツールからこれを開いてみたら、日本語は文字化けしていました。ためしに InterBase 2007 日本語版を別途ダウンロードして再インストールしましたが、状況は同じ。そもそも 3rdRail のModel作成画面には Encoding の指定箇所がありません。自分で database.yml を編集するしかないようです。

    PostgreSQL と MySQL にも挑戦してみたのですが、こちらはまだ成功していません。

    私は VMware Player の中でVine Linuxを動かして、その中でPostgreSQLとMySQLを動かしているのですが、これらのデータベースにWindows側の3rdRailから接続することが、まだうまく行きません。

    3rdRail は Ruby や Gems についてはオリジナルの環境をそのまま呼び出して使っているので、3rdRail の問題、というよりも VMware 側の環境の問題か、あるいは database.yml の設定の問題ではないかと思います。

    Vista では C ドライブに Postgres や MySQL をインストールして実行することができないらしく、私が最初にパーティション分割をしなかったのが最大のネックのような気がします。

    いずれにせよ、レール通りに仕事が進めばとても快適、という Rails の利点は、つまずいたらどこでつまずいたのかわからない、という欠点にもつながっているはずです。しかし RAD ツールに組み込まれることで、Rails は格段に見通しがよくなったように思えます。Ruby on Rails on 3rdRail という感じでしょうか。私は Rails を勉強する手段として 3rdRail が使えればよいと思っていたので、その目的においては十分な価値があると思います。ただし、全般的に処理は遅いので、高性能のマシンが要求されます。

    とにかくやっと Ruby コードを書くところまでたどり着きました。コード補完などのエディタの使い勝手、依存関係の可視化機能、リファクタリング機能など、興味は尽きません。もう少し頑張ってみたいと思います。