8. Reactorフレームワーク

最終回は、予定を変えてReactorフレームワークを詳解します。
TCPServerはスレッドプールによるマルチスレッドのソケット通信ですが、クライアントの数が巨大なシステムではC10K問題を起こしてしまいます。それを解決するノンブロッキングI/Oを実現するのにPocoではReactorフレームワークを提供しています。

Reactorフレームワークを使うNetライブラリのサンプルとして、EchoServerプロジェクトがPOCOに付属しています。EchoServerプロジェクトを、Reactorフレームワークが提供するすべてのイベントハンドラをサポートするように改造してみます。
Continue reading

7. クラスローディング

今回は、POCOでのクラスローディングの実装例を詳解します。
まず、参考情報のポインタを示します。
http://pocoproject.org/slides/120-SharedLibraries.pdf

さて、このクラスローディングはPOCO独自の機能で、シェアドライブラリからプログラム実行時にクラスを動的生成することができます。
シェアドライブラリを追加・変更することで、プログラムの振る舞いを変更できますので、主な用途としてはプラグインが挙げられます。
クラスローディングのサンプルコードは、シェアドライブラリのコードとクラスローディングするコードの2つに分かれます。
Continue reading

6. バリデーション

今回は、POCOのバリデーションを詳解します。
POCOで用意されているバリデーションはコマンドラインオプションの入力値のバリデーションで、intと正規表現の2種類のバリデーションが提供されています。
オプションは、エラーメッセージに使われているだけなので、HTMLフォームのバリデーションに使うこともできます。ただ、実際のアプリケーションでは、エラーメッセージ体系を独自に決めるでしょうから、POCOの実装を参考にして自作することになると思います。
簡単なバリデーションのサンプルコードは以下のようになります。
Continue reading

5. プロパティファイル

今回は、POCOでのプロパティファイルの使い方を詳解します。
実は、「2. ロギングフレームワークの使い方」でプロパティファイルは既出なのですが、ロギングフレームワーク内でプロパティファイルの読み込みが行われているため、詳解したコードにはプロパティファイルの処理が含まれていませんでした。
MySQLの接続情報をプロパティファイルから読み込むサンプルコードは以下のようになります。
Continue reading

4. データベース利用の実装例

今回は、POCOでのデータベース利用の実装例を詳解します。
まず、参考情報のポインタを示します。
http://pocoproject.org/docs/00200-DataUserManual.html

英語サイトですが、データベースフレームワークの使い方を丁寧に説明しています。
英語を苦にしない人は、上記サイトを見てもらえればOKです。
でも、これだけだとこの記事が寂しすぎるので、MySQLでのCRUDのサンプルプログラムを紹介しておきます。
Continue reading

3. iPhone開発

今回は、iPhoneアプリ開発にPOCOを使う方法を詳解します。
まずiPhone SDKがインストールされていて、以下のチュートリアルを実行してHello Worldプロジェクトができていることをスタート地点とします。
http://knol.google.com/k/iphone-sdk-helloworld#

POCOをXcodeで使うには、以下の3点が必要です。
・POCOをiPhone用にビルド&デプロイする。
・Xcodeプロジェクト設定をPOCO用に変更する。
・Object-C++で、POCOを使う。
Continue reading

2. ロギングフレームワークの使い方

ロギングフレームワークの使い方を詳解します。参考情報のCodeZineの記事でロギングフレームワークそのものは詳しく説明されています。ただ、残念なことに実際にはどのように使うのがベストなのか説明がありません。
Log4Jと同じように、ソース内で記述するログ出力処理はできるだけ少なく、でもプロパティファイルの設定によってコンソールやファイルにログ出力する方法を説明します。

その方法はとても簡単で、SplitterChannelを使う設定をプロパティファイルに記述するだけです。プロパティファイルは指定しない場合は、実行ファイルと同じディレクトリの{実行ファイル名}.propertiesが読み込まれます。
プロパティファイルの記述例は以下のようになります。
Continue reading

1. PUSH技術の実装例

PUSH技術をPOCOを使ってどのように実装できるか詳解します。
その前に、PUSH技術とは何かおさらいしておきます。
PUSH技術とは、テレビのようにサーバから複数のクライアントへコンテンツを送信する技術で、実現方法は以下の3つです。
1. クライアントが定期的にリクエストを発行する。(ポーリング)・・・例:電子メール
2. ポーリングと同じくクライアントがリクエストを発行するが、新しいコンテンツが発生するまでレスポンスを返さない。(ロングポーリング)・・・例:Comet
3. コネクションを張りっぱなしにする。(ストリーミング)・・・例:金融取引リッチクライアント

ポーリングとロングポーリングについては、ググればサンプルソースがたくさん見つかりますが、ストリーミングについてはまったく見つかりませんでした。
ここでは、POCOを使ってストリーミングを実装していきます。
Continue reading

0. POCOでC++が復権する!?

C++はオブジェクト指向言語の黎明期から存在し、Javaが登場するまでは人気のある開発言語でした。しかし、言語仕様がとても複雑で標準クラスライブラリがコンテナくらいしかなくしょぼいので、最近のプロジェクトではほとんど使われていないと思います。今は、Java、C#、Rubyで開発するのが普通ですが、今回、C++のオープンソースライブラリであるPOCOを詳解するのは、時間の無駄のように思うかもしれません。
私の予想は60%以上の確率で外れる気がしますが、POCOを前提としたC++開発の人気が将来でてくると思っているからです。
理由は以下の3点です。
1. POCOを使うとC++開発が、Java開発と同程度に容易になる。
2. C++は、リアルタイム処理、パフォーマンスの高さで他言語に対してアドバンテージがある。
3. iPhoneの開発に使える。
Continue reading