« 2008年08月 | メイン | 2008年10月 »

2008年09月 アーカイブ

2008年09月02日

松江に帰ってきました。

松江に帰ってきました。

三鷹でお世話になった皆様、本当にありがとうございました。
4ヶ月間、楽しく過ごすことができました。
また一緒に仕事ができる日が来ることを楽しみにしています。

三鷹は思っていたよりも、ずっと住みやすくていいところでした。
東京というと都内のような都会のイメージがありますが、
こういう街があるなら東京に住んでもいいなと思いました。

ということで、またいずれ、東京に行きたいと思っていますので、
そのときはよろしくお願いします。

2008年09月06日

Delphi 2009/C++Builder 2009を購入するには

Delphi 2009/C++Builder 2009の発表がありましたが、
バージョンアップのDMが届かないですね。

そこで、Delphi 2009/C++Builder 2009はどこで購入できるのか、調べました。

CodeGearのホームページ「製品の購入」によると、
新規購入でもバージョンアップ版でも
SEshop.com:codegearショップ」で購入できるようです。

SEshop.com:codegearショップでは、バージョンアップ版お買い得キャンペーン実施中でした。

バージョンアップ版 10%OFF お買い得キャンペーン
2008年9月12日(金)~2008年12月26日(金)まで、『Delphi 2009、『C++Builder 2009』、『Delphi 2009 & C++Builder 2009 Bundle』バージョンアップ版 お買い得キャンペーンを実施中です!!

続き。
Delphi 2009は(C++Builder2009も)SEshopよりもニフティストアの方が安い

2008年09月08日

DelWikiのTiburonのページがよくまとまっている

DelWikiのTiburonのページがよくまとまっている。
すばらしい。

C++Builder関連の情報は少ないけど。

2008年09月09日

間違ったISBNを表示する島根県立図書館と松江市立図書館の蔵書検索の不思議なバグ

島根県立図書館松江市立図書館の蔵書検索は、検索結果に間違ったISBNを表示する。

たとえば、島根県立図書館の蔵書検索で「JavaからRubyへ」を検索し、
詳細を見るとISBNが「4-87311-320-3」と表示される。
Amazonを見るとわかるが「JavaからRubyへ」の正しいISBNは「4873113202」である。

同様に松江市立図書館で「Pythonチュートリアル」を検索すると、
ISBNは「4-87311-340-1」と表示される。
Amazonでは「Pythonチュートリアル」のSBNは「4873113407」である。

おそらくはISBN13に対応する時に紛れ込んだバグであろうと推測する。

早急に修正していただきたいものだ。

2008年09月10日

BigTableにおける設計について

「正規化するな、JOIN済みのでっかいテーブルを作れ」とアドバイス(?)していました。

DjangoCon2008 - アクセンスのおまけ -

従来のRDBの常識が通用しませんね。

長い年月をかけて蓄積された多くのノウハウがあるRDBは、安心して使うことができます。
でも、やっぱり適材適所が大事。
RDBですべてをこなそうという考えは危険。

新しいデータベースの考え方も勉強しておいた方がいいかもしれません。

図書館蔵書検索ソフト SearchLibrary 0.3.0公開

図書館蔵書検索ソフトSearchLibraryのバージョン0.3.0を公開しました。

今回の変更で、検索対象となる図書館を選択できるようになりました。
利用することのない図書館まで検索することはありませんからね。

2008年09月11日

図書館蔵書検索ソフト SearchLibrary 0.3.1公開

図書館蔵書検索ソフトSearchLibraryのバージョン0.3.1を公開しました。

  • バグの修正を行いました。
  • 以下の図書館に対応しました。
    • 福生市立図書館
    • 小金井市立図書館
    • 狛江市立図書館
    • 羽村市図書館
    • 武蔵野市立図書館
    • 品川区立図書館
    • 文京区立図書館
    • 昭島市民図書館
    • 稲城市立図書館

Delphi 2009/C++Builder 2009のUnicode対応について、DEKOのざつだん。の解説が勉強になります

DEKOのざつだん。のページで、Delphi 2009/C++Builder 2009から導入されるUnicode対応について、丁寧に解説されていました。

このページを読んで、Unicode対応についてだいぶ理解できました。
ありがとうございます。

印象としては、Delphi 2009/C++Builder 2009は上手にUnicodeに対応したように思います。
日本語OSに限定すれば、既存コードの修正は少なそうです。

文字コードの変換が簡単にできるようになるのは嬉しいですね。
コードページにあわせて、暗黙に変換してくれるとのこと。

type
  SJISString = type AnsiString(932);   // Shift-JIS(CP932) 
  EUCJString = type AnsiString(20932); // EUC-JP(CP20932) 
var
  SJIS: SJISString;  
  EUCJ: EUCJString; 
  A: AnsiString;    // 日本語環境ならデフォルトはCP932 
  U8: UTF8String;  
begin
  A    := 'あいうえお';
  SJIS := A;
  EUCJ := A;
  U8   := A;

  ShowMessage(SJIS);
  ShowMessage(EUCJ);
  ShowMessage(U8);
end;

ただ、拙作のソフトについて言えば、文字処理については泥臭い処理を行っているプログラムもありますから、修正は必要になりそうです。

2008年09月12日

図書館蔵書検索ソフト SearchLibrary 0.3.2公開

図書館蔵書検索ソフトSearchLibraryのバージョン0.3.2を公開しました。

依頼のあった大阪の図書館に対応しました。

  • バグの修正を行いました。
  • 以下の図書館に対応しました。
    • 大阪府立図書館
    • 大阪市立図書館

2008年09月13日

Delphi 2009は(C++Builder2009も)SEshopよりもニフティストアの方が安い

Delphi 2009は(C++Builder2009も)SEshopよりもニフティストアの方が安いようだ。

Delphi 2009 Professional

Delphi 2009 Professional バージョンアップ版

C++Builder 2009 Professional

C++Builder 2009 Professional バージョンアップ版

オープンソースカンファレンス2008 Shimaneに行ってきました。

オープンソースカンファレンス2008 Shimaneに行ってきました。

各セミナーの資料がサイトで公開されることを期待しております。

以下は個人的なメモです。

最初に参加したセミナーは「いまさら聞けない Linuxサーバセキュリティ入門」です。

講師はリナックスアカデミー学校長の濱野 賢一朗さん。
話慣れておられるのでしょうか。
声がよく通り、マイクを使わなくても、よく聞こえました。

セキュリティ・アップデートをちゃんとしましょう。という話はありませんでした。
多くの場合、セキュリティ・アップデートはちゃんと更新されているそうです。
ちょっと以外。
各ディストリビューションの努力で、簡単にセキュリティ・アップデートができる仕組みが整ったからかも。

むしろ問題は、ソフトウェアの脆弱性よりも、使う側。
「とりあえず動いているからこの設定でOK」、という判断は危険。
ちゃんとソフトウェアの正しい知識を持って、きちんと設定しましょう。
たとえば、Apache。
初期設定ではたくさんのモジュールがロードされるけど、それらは本当に全部必要か。
そういわれると、よくわかっていないものもたくさんあるかもしれません。

Nessus(ねさす)
有償のセキュリティチェックのサービスは、このソフトを使っているものもあるそうです。
このソフトが出力するPDFレポートが綺麗なので、そのまま顧客に送っているとか。

John the Ripper
パスワードの堅牢性をチェックするのに使用します。
1時間走らせて、大丈夫か調べるとか。
CPUの性能の向上に伴ってチェックできる件数が増えるので、時代の変化にあった堅牢性の検証ができます。

あと、悪意を持ったスキルのある攻撃者から完全に守ることは非常に難しい、という話。
そうなのか…
その後の対応が大事。

データベースのフロントエンドであるOpenOffice.orgのBase。
まだまだ機能が不足しているので、足りないところはWriteやCalcの機能を使いましょう。
といった感じ。

苦肉の策というか、何というか。
まだBaseを使うのは早いかな、という印象を受けました。
来年の春リリース予定のバージョン3.1でいろいろと機能が追加されるようです。
それまで待った方がよさそう。

一つBaseで使えそうな機能と思ったのは、テーブルのコンバート機能。
異種データベース間で、テーブルのスキーマやデータがコンバートできるみたい。

知らないうちに便利な機能が実装されていて、大変勉強になりました。
新しい知識もちゃんと習得しないといけませんね。
学んだことは、ちゃんと復習しようと思います。

全体の印象としては、新しい規格の準拠は、三大商用データベース(Oracle、DB2、SQL Server)はさすがに対応が早い。
一方のオープンソースデータベースでは、Firebirdの対応が一歩進んでいて、次にPostgreSQL。MySQLは独自拡張路線かな。
Firebirdを見直しました。

MERGE

三大商用データベース(Oracle、DB2、SQL Server)とFirebirdが対応済み。
MySQLは独自拡張のREPLACE構文で同じことができます。

同じIDがあれば更新、なければ追加、という処理が一つのSQL文でできる。
こんな便利な機能があったなんて、ちょっとショック。

CASE

SQL文の中で、いろんな場所で使えます。
ソート時のNULLの扱いは、規格で定まっていないため、データベースの実装によって異なります。
ソートする時のNULLの順序を指定する時、NULLS FIRSTが使えなくても、CASEを使えば同じことができます。

# 今、調べてみるとFirebirdはNULLS FIRSTが使えた。いつの間に。

データベースの実装によって、NULLの扱いが微妙に違う?

GTT(グローバル一時表)

よくわからなかった。

CTE(共通表式)

三大商用データベース(Oracle、DB2、SQL Server)とFirebirdが対応済み。
MySQLとPostgreSQLは未対応。

CTE(共通表式)を使うと読みやすいSQL文が書ける。
さらに階層構造のテーブルでの再帰クエリが便利。
知らないと損ですね。

SQLはちょっと勉強不足かもしれない。
ちゃんと勉強しよう。

何となくわかったような気がします。
とりあえず、何か作ってみようと思います。

ファーエンドテクノロジー株式会社、設立おめでとうございます。

私の知る限り、島根県でもトップレベルの技術者である前田さんが会社を興されました。

Redmine.JPの運営者の方です。

通信用語で、物理的な回線の向こう側を表す「遠端」(far end)という言葉があります。 "far end"からネットワークの向こう側をイメージして、サーバサイドの技術を中核としてお客様にとっての価値を作り出していきたいという意味を込めました。

ファーエンドテクノロジー株式会社 設立

格好いい社名ですね。

これからのご発展とご繁栄を祈っています。

# 今日のオープンソースカンファレンス2008 Shimaneで、お話しされていたのですね。
# 後になって知りました。

2008年09月15日

Firebird Embedded Serverの使い方

C++ Builder Tipsに「Firebird Embedded Serverの使い方」の記事を加えました。

MERGE文の復習

MERGE文の復習。Firebird2.1を使用しました。

サンプルデータの作成

CREATE TABLE employee (
  id INTEGER NOT NULL,
  name VARCHAR(1024) NOT NULL,
  PRIMARY KEY (id)
);
CREATE TABLE employee_temp (
  id INTEGER NOT NULL,
  name VARCHAR(1024) NOT NULL,
  PRIMARY KEY (id)
);

INSERT INTO employee (id, name) VALUES (1, 'Alice');
INSERT INTO employee (id, name) VALUES (2, 'Bob');
INSERT INTO employee (id, name) VALUES (3, 'Carol');

INSERT INTO employee_temp (id, name) VALUES (2, 'Becky');
INSERT INTO employee_temp (id, name) VALUES (4, 'Dave');

employeeテーブル

id name
 1 Alice
 2 Bob
 3 Carol

employee_tempテーブル

id name
 2 Becky
 4 Dave

employee_tempテーブルのデータをemployeeテーブルにマージする。

employeeテーブルとemployee_tempテーブルの両方にid=2のレコードがあるので、employeeテーブルのid=2のレコードは更新します。

id=4のレコードはemployee_tempテーブルにだけあるので、employeeテーブルに追加します。

MERGE INTO employee USING employee_temp ON (employee.id = employee_temp.id)
WHEN MATCHED THEN
  UPDATE SET employee.name = employee_temp.name
WHEN NOT MATCHED THEN
  INSERT (id, name) VALUES (employee_temp.id, employee_temp.name)

結果は、

id name
 1 Alice
 2 Becky
 3 Carol
 4 Dave

employeeテーブルに存在しないレコードだけ追加したい場合は、「WHEN MATCHED THEN」を使わず、「WHEN NOT MATCHED THEN」だけを使用します。

MERGE INTO employee USING employee_temp ON (employee.id = employee_temp.id)
WHEN NOT MATCHED THEN
  INSERT (id, name) VALUES (employee_temp.id, employee_temp.name)

結果は、

id name
 1 Alice
 2 Bob
 3 Carol
 4 Dave

2008年09月18日

CDNでDelphiのUnicode対応に関する記事が公開されています

CDNでDelphiのUnicode対応に関する記事が公開されています。

既存のコードがたくさんありますので、Delphi Unicodeワールド パートIII: コードをUnicode対応にするをよく読んで、どのような対応が必要なのか、勉強したいと思います。

第10回エンバカデロ・デベロッパーキャンプの資料がダウンロードできるようになりました

第10回エンバカデロ・デベロッパーキャンプの資料がダウンロードできるようになりました。

興味のあるところを斜め読み。

追加されたC++0x機能
* Strongly typed enumerations
* Explicit Conversion Operators
* static assertions
* Type trait functions
* alignof operator on types
* extern templates
* Variadic templates
* Rvalue references
* decltype
* New Unicode char types (char16t and char32t)
* Attributes - noreturn and final
* nullptr … ×(NULLの代わりですが、今回は実装されませんでした…)

C++ Builder次期バージョン"2009"活用法

C++0xは知らないことがたくさん。
勉強するぞ。

強く型付けされたEnum
* enum class 列挙型名 { …. };

明示的なキャスト演算子
* explicit operator XXX(){ … }

静的なアサーションによるチェック
* static_assert (constant-expression, error-message);

型特性を判定する関数
* bool _isXXXX(typename T, ...)
* bool _hasYYYY(typename T, ...)

C++ Builder次期バージョン"2009"活用法

知らないなぁ。
知識をアップデートしていかないと。

Quiz: マイグレーションとイベントハンドラ
* 旧C++Builderで作成したプロジェクトを、C++Builder 2009 にインポートしました。
* TStringGridを配置して、OnSetEditTextイベントを使用しています
* 日本語/中国語混じりの文字列を入力してみます
* C++Builder 2009 でビルド & 実行しようとすると、どうなる?
 1. コンパイルエラーが発生する
 2. ビルドは成功するが、実行時にエラー/例外が発生する
 3. 日本語は正しく表示されるが、中国語が ? に化ける
 4. フォント設定にも依るが、基本的に正しく表示される

C++ Builder次期バージョン"2009"活用法

気になっていた部分ですが、資料を見ただけではよくわかりませんでした。
説明が欲しいところ。

プリコンパイル済みヘッダーウィザード
* デフォルトで pch1.h を生成し、ビルド時に暗黙のうちにincludeされます
* #pragma hdrstop の上部は変更する必要なし

C++ Builder次期バージョン"2009"活用法

C++BuilderのIDEの新機能の一つ。

国際化支援機能 - ITE/ETM
* C++Builder2006,C++Builder2007で消された
* ITE(Integrated Translation Environment)
* ETM(External Translation Manager)がC++Builder2009で復活しました!!
* 製品のインストール時に、英語版(English)を選択すると
* VCL/RTLのシステムメッセージを、デフォルトで英語にすることも可能

C++ Builder次期バージョン"2009"活用法

いつの間にかなくなっていた国際化支援機能が復活。
開発手順のデモは見たかった。

Tips: C++Builderでリソース文字列
* .RCではなく、リソース文字列を XXXX.pas で定義する
* VCLのLoadResourceString関数を利用する
* ITE/ETMでも認識され、ローカライズ可能

C++ Builder次期バージョン"2009"活用法

リソース文字列を.pasファイルに書けるとは知りませんでした。
新機能?
ファイルの管理が楽になります。

Delphi言語の強化
* UnicodeStringをデフォルト文字列として採用
* ジェネリックス
* 無名メソッド

CodeGearプロダクトアップデート

Delphiも言語機能が強化されました。
こないだまでは時代遅れの言語だったのに。
かなり使える言語になりましたね。

C++Builder 2009の新機能
* 言語とライブラリの強化
* 次世代C++標準「C++0x」の言語機能をコンパイラ・IDEの双方で早期にサポート
* Decltypeキーワード
* Explicit conversion operators
* Externテンプレート
* rvalue リファレンスを伴うMove Semantics
* Scoped Enumerations
* ネイティブType Traitsを伴うStatic Assertions
* Unicode文字型 char16t および char32t
* [[final]] および [[noreturn]] 属性
* Delphiとの互換性強化
* 仮想クラスメソッド
* スタティックプロパティ
* UnicodeString クラス
* 仮想メソッドToString、GetHashCode、Equalsを新たに持つTObject
* ANSI/ISO 標準ライブラリ Technical Report 1
* Boost library 1.35の統合

CodeGearプロダクトアップデート

C++0xに加えて、Technical Report 1も勉強しなければ。
Boostは、どれぐらいのライブラリに対応しているか興味のあるところ。

やっぱり実際に参加して話を聞くのが一番ですね。

C++Builder2009が手元に届く日が楽しみです。

2008年09月20日

Code Craft ~エクセレントなコードを書くための実践的技法~

Code Craft』を読みました。

サブタイトルには、「エクセレントなコードを書くための実践的技法」とありますが、この本の内容はコーディングだけではなく、幅広い対象を取り扱っています。

本書の対象は、中級を目指す初級プログラマーです。
前半ではコーディングに関する話題から始まりますが、後半になるにつれて、チーム開発や開発プロセスなど、コーディングから離れてプログラミングに関するより広い話題を取り扱います。
中級プログラマーが自分のスキルを見直す、不得意分野を学び直す、または過去のプログラムを反省するのにもいいかもしれません。

幅広い話題を取り扱いますが、それぞれの話は概論にとどまります。
より深く学びたいのであれば、そのテーマを扱っている専門書にあたる必要があります。

メソッドの命名規則

関数には、外部の視点から見たその関数の動作を表す名前を付ける。

Code Craft ~エクセレントなコードを書くための実践的技法~

たとえば、fooからbarの値を取得するメソッドの名前は、barの値を取得するので、GetBar()になります。

//barの値を取得する
bar = foo.GetBar()

barの値を返すので、ReturnBar()という名前も考えられますが、間違いです。

//これは間違い
//barの値を返す
bar = foo.ReturnBar();

コメントも同様です。

/**
 * barの値を取得する
 */
Bar GetBar() {
  return bar;
}

2008年09月26日

Ruby on Rails 2.1.1でActiveRecordのvalidation機能が変更されている

Ruby on Rails 2.1.1でActiveRecordのvalidation機能が変更されているらしい。

2.1.1では、has_oneの関連で同時に保存した際に、関連テーブルのバリデーションの結果が親のインスタンスに保存されないようです。

続・Rails2.1.1は危ない

Ruby on Railsのアップデートについて行くのは大変です。

2008年09月27日

C++ TR1 強い型付けの列挙型

C++ TR1の新しいenumの構文では、enumの後にclassがつけられるようになり、型も指定できるようになりました。

enum class 列挙型名 : 型 {
  …,
}

enum class days : char {
  Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
}

classも型も指定しない場合は、従来のC++と同じ動作になります。
型を指定しない場合は、intになります。

//従来と同じ書き方もできる。
enum months {
  January, February, March, April, May, June,
  July, August, September, October, November, December
}

classを指定した場合は、明示的にスコープを指定する必要があります。

days day = days::Sunday; //エラー
days day = Sunday; //エラー

classを指定しない場合は、スコープを指定する必要はありません。

months month = January;

前方宣言も可能になりました。

enum days : char;

前方宣言ができるようになったことと、明示的なスコープ指定を強制できるようになったことがメリットかな。

2008年09月28日

nested classからは親のprivate空間にアクセスできるか。

nested classからは親のprivate空間にアクセスできるか。

C++Builder 2009でもエラーになりました。残念。

[BCC32 エラー] File1.cpp(25): E2247 'Hoge::func()' はアクセスできない

元ネタは、!Inner classes have no special access to the outer class in C++.

class Hoge {
public:
  Hoge () : bar_(*this) {}
private:
  class Bar {
  public:
    Bar(Hoge& hoge) : hoge_(hoge) {}
    void func() {
      hoge_.func();
    }
    Hoge& hoge_;
  };
  Bar bar_;
  void func(){
    cout << "func" << endl;
  }
public:
  Bar& Bar() { return bar_; }
};

int main()
{
  Hoge hoge;
  hoge.Bar().func();
  return 0;
}

C++ TR1 静的な表明

static_assertは、コンパイル時に式が条件を満たすかテストします。
式がfalseを返すときは、コンパイルに失敗します。

static_assert(テストする式, コンパイルエラーのメッセージ)

static_assert(sizeof(int) < sizeof(long), "error");

has_virtual_destructorは、型に仮想デストラクタが存在するかどうかをテストします。

#include <type_traits>
static_assert(
  std::tr1::has_virtual_destructor<TObject>::value, 
  "destructor must be virtual");

例えば、longがintより大きいサイズであることに依存するアルゴリズムの実装のように、標準では保障されていない箇所の確認などの用途がある

C++0x - Wikipedia

なるほど。
実行時ではなく、コンパイル時にテストできるのは嬉しいかもしれません。

About 2008年09月

2008年09月にブログ「山本隆の開発日誌」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2008年08月です。

次のアーカイブは2008年10月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35