公開中の Redmine プラグイン
Redmine インフォメーション プラグイン
http://www.r-labs.org/projects/rp-admin-reports/wiki
もともと権限レポートやワークフローなど一般ユーザーでも見たいけど、管理者じゃないと見れない情報を表示するためのプラグイン。
ただ、今の売りはワークフローを図で表示すること。
もうちょっと追加したい機能はあるけど、一番つけたかった機能は完成したので、特に表示したい情報とかの要望でもない限りしばらくこのまま。
Redmine 用語集(Glossary) プラグイン
http://sourceforge.jp/projects/rp-glossary/wiki/FrontPage
Redmine を使ってみんなで用語集を作るためのプラグイン。
XP プログラミングでも言われているように、やっぱり用語集はほしいなということで作ったもの。
ある程度機能はつけたんだけど、結構バグが出てきちゃったので、今はこれを開発中。
Redmine TestLink Link プラグイン
http://sourceforge.jp/projects/rp-testlinklink/
テスト管理システムである TestLink へ Redmine からリンクを張るためのプラグイン。
TestLink から Redmine へのリンクは TestLink の機能であるけど、逆はなかったので作った。
しかし、現在はほぼ開発中止状態。
理由は TestLink 自体に個人的にあんまりはまらなかったため。ネットとかの評判は結構よかったんだけどな。
あと、後発でリンクではなく、埋め込み式でもっとよさそうなのプラグインができたので。
出力用シフト演算子(<<)のオーバーロード
C++ の標準ライブラリでは cout などにシフト演算子(<<)を使って出力します。
std::cout << "Hello World!!" << std::endl;
これは iostream の上位クラスである ostream のシフト演算子(<<)のオーバーロードで実現されているのですが、これを自分で定義したクラス、構造体、列挙型などに対しても定義しておくと便利です。
これを定義しておくだけで、標準出力(cout), ファイル(ofstream), 文字列(stringstream)などにも自分で作ったクラス等を文字列として出力することが出来ます。
どうやるかというと、例えば点の構造体 Point があったとすると以下のように ostream クラスとシフト演算子(<<)の 2 項演算をオーバーロードします。
std::ostream &operator<<(std::ostream &out, const Point &tgt)
{
out << "(" << tgt.x << "," << tgt.y << ")";
return out;
}
この定義はクラス(構造体)定義の外で行うので、列挙型も定義できます。
ただし、クラスの場合は外なのでゲッターなどを用意しておく必要があります。
さらに以下のようなテンプレート関数を用意しておけば、簡単に文字列に変更できます。
template <typename T_t>
std::string to_str(const T_t &val)
{
std::stringstream ss;
ss << val;
return ss.str();
}
この関数は int 基本型を含めた ostream のシフト演算子(<<)をオーバーロードしているものであれば何でも文字列に変換できます。
to_str(5); // "5"
to_str(Point(2, 3)); // "(2, 3)"
ちなみに入力用のシフト演算子(>>)を使えば 値 → 文字列 変換の from_str() のような関数も作れます。ただし、入力用の場合は変換できなかった場合の例外処理も必要になってきます。
実は Boost ではこの to_str()、 from_str() のような関数をもっと一般的にした lexical_castというのが用意されているので、 Boost 使えばすぐ使えるようになります。
Qt の場合だとこのようなテンプレートを使った変換は残念ながら用意されていないのですが、 Qt で用意されているクラスはほとんど QDebug というデバッグ用の出力先への演算子がオーバーロードされているので、何も定義しなくてもダンプだけならできます。
qDebug() << QPoint(2, 3); // "QPoint(2, 3)"