さて、同時に公開されたのがpficommonです。これは、弊社内で使われていた便利ライブラリで、あまりの便利さにこれがないと開発できないため、Jubatusでも使われています(もちろんSedueでも)。そして、Jubatus公開に伴い公開となりました。pficommonは明日からでも使うべきなライブラリなので、先にこちらを紹介します。
pficommonは様々なライブラリからなる、複合的なライブラリです。
今日は個人的にお気に入りの、
- xhtml_cgi
- json
xhtml_cgi
実験用のコードなどを書くと、たくさんログを出力したくなることがあると思います。しかし、例えば1行に収まらないとか表にしたいことはよくあります。私は昔からHTMLで出力していたのですが、いかんせんcoutで出力するのは面倒、かと言ってフロントエンドをpythonで書いてrpcまでしだすと面倒・・・。実際、私は修論のとき検索をやっていたのですが、このためだけにpython, django, rpcを使って大変面倒でした。これを一気に解決するのがxhtml_cgiです。
まず、cgiのサンプルを見てください。なんというシンプルさ。さらに、pficommonにはhttp serverが実装されているので、これを使うと単独で動くhttp serverができあがります。コンパイルして実行すればhttp serverとして動きます。インタラクティブに引数を変えて実験などをしたいとき、この仕組を使うとhttp経由で実験ができます。Apacheとかいりません。正直、実験用のコードでrpcなんてしたくないんですね。
さらに画期的なのが、このxhtml_cgiです。このサンプルを見てください。C++の黒魔術を使うことで、なんとC++のソースがテンプレートライブラリ化するのです。単なるC++のソースなので、一部を関数にして使いまわしたりも可能です。あとは適当に書くだけで、簡単なデモは出来上がり。先日のYANSの時も、こんな感じで作っていました。
おまけで、サンプルとしてhttp経由でmecabの実行結果を確認するプログラムを書いて見ました。これくらい簡単に書けます。
json
社内的にも最も使われるライブラリの一つがjsonです。上記のcgiなどを書いていると、ちょっとした事をjsonでやりとりしたくなったりします。それ以外にも、例えばtwitter APIのjsonを読みたくなったり、別プログラムの出力をjsonで吐いて取り込みたくなります。ここで便利なのが、jsonライブラリ。pficommonのjsonライブラリは、テンプレートとserialization機能で、かなり便利に使えます。
jsonの読み込み・書き込みはは、streamから取ってくるだけでおしまし。
json js; stringstream ss; ss<<js; json ks; ss>>ks; // js==ks
値の取り出しは、直感に従って書いて、最後にjson_castすればOK.
cout << json_cast<string>(js["user"]["profile"]) << endl;最後に、jsonを何かしらの構造体にマップするのがserialize機構です。ここのソースを見てください。serialize自体は、例えばバイナリ形式でファイルに保存するのに使いますが、ここでは任意のデータ型をjsonへシリアライズ・デシリアライズできます。これは単に構造体中にserialize関数を作れば、via_jsonとto_jsonでstreamから変換ができるようになります。
以上、簡単ですが2つ紹介しました。それ以外にもスマートポインターやスレッド、msgpack_rpcなど便利なライブラリがたくさん含まれます。他の機能に関しても、せっせと @tanakh さんが紹介記事を書いていると思います。ドキュメントはありますが、ちゃんと書かれていない機能や、使い方がわからなくなったらソースや単体テストを参照すればだいたい分かる(たぶん)と思います。研究用のプログラムなどでも大変活躍すると思いますので、是非ご活用ください。
0 件のコメント:
コメントを投稿