# HG changeset patch # User autobackup # Date 1608217803 -32400 # Node ID 448be53c51da0f055fb766c7fd8c7a193edf4d83 # Parent 8257f703b96598c6e3e8293f91e9b69f623e30f4 backup 2020-12-18 diff -r 8257f703b965 -r 448be53c51da software/growiBackup.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/software/growiBackup.md Fri Dec 18 00:10:03 2020 +0900 @@ -0,0 +1,32 @@ +# growiBackup + +# cliのリポジトリ + +- [Members/anatofuz/growiBackup](http://www.cr.ie.u-ryukyu.ac.jp/hg/Members/anatofuz/growiBackup/) + +# backupリポジトリ + +- [Document/Growi](http://www.cr.ie.u-ryukyu.ac.jp/hg/Document/Growi/) + +# cliの使い方 + + +```shell +$./growibackup ${revison.json} ${backup_dir} +``` + + +エントリの内容はrevison.jsonに書かれているので、それを指定します。 docker-composeで動かしている場合は、こんな感じのシェルスクリプト化すると楽です。(`run.sh`) + +```shell +DAY=`date "+%Y-%m-%d"` +REVJSON=revision_back_${DAY}.json +docker exec growi_mongo_1 mongoexport -d growi -c revisions --pretty --jsonArray --out ${REVJSON} +docker cp growi_mongo_1:${REVJSON} . +docker exec growi_mongo_1 rm ${REVJSON} +./growibackup ${REVJSON} Growi +``` + +# 参考 + +- [Growiのバックアップツールをgolangで書き直した](https://anatofuz.hatenablog.com/entry/2020/12/16/160344) diff -r 8257f703b965 -r 448be53c51da user/anatofuz/note/2020/12/17.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/anatofuz/note/2020/12/17.md Fri Dec 18 00:10:03 2020 +0900 @@ -0,0 +1,88 @@ +# 2020/12/17 + +- メルカリ発送 +- lambda + + +# releational + +- なんかあった + + +`context.h` + +```c +enum Relational { + EQ, + GT, + LT, +}; +``` + +`compare.c` + +```c +#include "context.h" + +enum Relational compare(struct Node* node1, struct Node* node2) { + int key1 = node1->key; + int key2 = node2->key; + if (key1 == key2) { + return EQ; + } else if (key1 < key2) { + return GT; + } else { + return LT; + } +} +``` + +見たところRbTreeで使おうとしていた痕跡がある + +```c +RedBlackTree.cbc +7:extern enum Relational compare(struct Node* node1, struct Node* node2); +``` + +```c +__code putRedBlackTree(struct RedBlackTree* tree, struct Node* node) { + struct Node* newNode = &ALLOCATE(context, Node)->Node; + struct Node* root = tree->root; + printTree((union Data*)(tree->root)); + tree->newNode = newNode; + tree->root = newNode; // this should done at stackClear + tree->parent = NULL; + if (root) { + tree->current = root; + tree->result = compare(tree->current, node); + tree->findNodeNext = C_insertNode; + goto findNode(tree); + } + goto insertNode(tree, node); +} +``` + +- `Self`を導入 + - Typeを型クラスとして使いたい + +```c +typedef struct Tree{ + /* future Code */ + /* Type* tree; */ + /* Type* node; */ + union Data* tree; + struct Node* node; + __code put(Impl* tree,Type* node, __code next(...)); + __code get(Impl* tree, __code next(...)); + __code remove(Impl* tree,Type* node, __code next(...)); + // __code clearRedBlackTree(); + __code next(...); +} Tree; +``` + + +sdとrgを組み合わせる + +```shell +$sd '