fchiba memo

結論から言うと断念。

オフィスに散らばるサーバーのバックアップ先としてAmazon S3を検討。

・s3sync.rbなどを使って直接書き込む
・s3fsでディスクとしてマウントしたあと、バックアップソフトを使って書き込み

などを考えたが…

まずは価格。
100G程度のデータを、
 月次フルバックアップ
 週次差分(avg10%)
 日次増分(avg5%)
でバックアップした場合、
 保管料 100GB * $0.15/GB
 転送料 100GB*(1+0.10*4+0.05*30) *$0.10/GB
月に約$45で、まずます。

問題は通信速度。
手元のS3foxで計ってみたところ10MByteを転送するのに165sもかかってしまった。
月次のフルバックアップに丸2日もかかってしまう。
太平洋横断は予想外に時間がかかるものらしい。


日本でもAmazon並のサービスするところないかなぁ。

libxml2をC言語で使うときのメモ。

・parseの仕方はexamplesを参照(たくさん例がある)

・逆にツリーをたどったりするサンプルはほとんどないので、google code searchを頼る。

・「ある名前を持った子要素を一つ取り出す」という関数はないため、

xmlNode *get_child (xmlNode *node, const char *tag)
{
xmlNode *child;

for (child = node->children; child != NULL; child = child->next)
if (!strcmp ((char *)child->name, tag))
return child;
return NULL;
}


のようなユーティリティ関数を多くのプロジェクトで書いている。

・XPathで相対ロケーションパスを使う場合、コンテキストのノードにカレントノードを指定する

xpathCtx = xmlXPathNewContext(doc);
xpathCtx->node = currentNode;
xpathObj = xmlXPathEvalExpression(...xpath..., xpathCtx);



・RelaxNGによるバリデーションについても情報は少ない。


// RelaxNGパーサーコンテキストの生成
xmlRelaxNGParserCtxtPtr ctxt = xmlRelaxNGNewMemParserCtxt(rng_string, strlen(rng_string));
// ファイルからなら、docを作ってxmlRelaxNGNewDocParserCtxtを使う。

// RelaxNGパーサーの生成
xmlRelaxNGPtr relaxngschemas = xmlRelaxNGParse(ctxt);
if(relaxngschemas == NULL) {
// エラー処理
}
xmlRelaxNGFreeParserCtxt(ctxt);

// 実際のバリデーション
xmlRelaxNGValidCtxtPtr vctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
int ret = xmlRelaxNGValidateDoc(vctxt, doc);
if (ret != 0) {
// エラー処理
}
xmlRelaxNGFreeValidCtxt(vctxt);



・RelaxNGのexceptは未実装。

・libxml2に付属のxmllint.cは参考になる。

このページのトップヘ