Test QuickGV: Difference between revisions

From Fundamental Ramen
Jump to navigation Jump to search
 
(257 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Sandbox =
See: https://graphviz.gitlab.io/_pages/pdf/dotguide.pdf
 
= Colored Edge =
 
<quickmmd name="colored-edge">
flowchart TD
  A1(["👩🏻‍💻 Human"])
  A2(["🤖 Agent"])
 
  B1("HTTP<br>(Fiber v3)")
 
  subgraph backend handlers 
    B2("API handler")
    B3("MCP HTTP")
    B4("Streamable Handler")
    B5("SSE handler")
    B6("MCP Server")
  end
 
  subgraph backend services
    C1(Mermaid to SVG)
    C2(Mermaid to PNG)
    C3(XML Formatter)
  end
 
  subgraph frontend
    B7("Nuxt.js")
  end
 
  subgraph resources
    D1(Mermaid Container<br>yuzutech/kroki-mermaid)
  end
 
  %% human path
  A1 --> B1
  B1 --> |the rest URI| B7
  linkStyle 0,1 stroke:#0000ff,stroke-width:2px
 
  %% agent path
  A2 --> B1
  B1 --> |/mcp or /sse| B3
  linkStyle 2,3 stroke:#00aa00,stroke-width:2px
 
  %% api path
  B7 --> |axios| B1
  B1 --> |/api| B2
  linkStyle 4,5 stroke:#9900cc,stroke-width:2px
 
  B3 --> |/mcp| B4
  B3 --> |/sse| B5
  B4 & B5 --> B6
  B6 --> C1 & C2 & C3
  B2 --> D1
  C1 & C2 --> D1
</quickmmd>
 
= Dish =
<quickmmd name="dish">
mindmap
  A[Dish]
    B1[Sauce Dish]
    B2[Shark's Fin Soup Dish]
    B3[Divided Dish]
    B4[Cassesrole Dish]
</quickmmd>
 
= MMD =
 
<quickmmd name="testmmd">
flowchart LR
    Root("規則動詞變化<br>(play)")
 
    Root --> Past("過去")
    Root --> Pres("現在")
    Root --> Fut("未來")
 
    Past --> P1("過去普通: played")
    Past --> P2("過去進行: was/were playing")
    Past --> P3("過去完成: had played")
    Past --> P4("過去被動: was/were played")
 
    Pres --> R1("現在普通: play / plays")
    Pres --> R2("現在進行: am/is/are playing")
    Pres --> R3("現在完成: have/has played")
    Pres --> R4("現在被動: am/is/are played")
 
    Fut --> F1("未來普通: will play")
    Fut --> F2("未來進行: will be playing")
    Fut --> F3("未來完成: will have played")
    Fut --> F4("未來被動: will be played")
</quickmmd>
 
= WebSocket Service =
 
<quickgv name="123" theme="warm" usage="ram">
subgraph cluster_client {
  label="WebSocket Client"
  c1[label="var ws = new WebSocket('/foo')"];
  c2[label="ws.onerror = function (ev) ..."];
  c3[label="ws.onopen = function (ev) ..."];
  c4[label="ws.onmessage = function (ev) ..."];
  c5[label="ws.send()"];
}
 
subgraph cluster_server {
  label="";
  s[label="Service Unit | <rh> Request Handler | <ph> Push Handler | <pw> Push Worker | <mh> Message Handler | <mw> Message Worker"];
  iq[label="Inbound Queue"];
  oq[label="Outbound Queue"];
}
 
c1 -> s:rh [color="#ff0000"];
c2 -> s:rh [color="#0000ff",dir="back"];
c3 -> s:rh [color="#0000ff",dir="back"];
c4 -> s:ph [color="#0000ff",dir="back"];
s:ph -> oq [color="#0000ff",dir="back"];
s:pw -> oq [color="#0000ff"];
c5 -> s:mh [color="#ff0000"];
s:mh -> iq [color="#ff0000"];
s:mw -> iq [color="#ff0000",dir="back"];
</quickgv>
 
= testflow =
<quickgv name="G51" theme="warm">
label="五環境佈署流程";
rankdir=TB;
 
A [label="Local\n開發新功能"];
B [label="Development\n測試模擬交易"];
C [label="Staging\n測試真實交易"];
D [label="Sandbox\n供分銷商測試"];
E [label="Production\n實際營運"];
 
A -> B;
B -> C;
B -> D;
C -> E;
</quickgv>
 
<quickgv name="G52" theme="warm">
label="三環境佈署流程";
rankdir=TB;
 
A [label="Local\n開發新功能"];
B [label="Sandbox\n升級新功能"];
C [label="Production\n升級新功能"];
 
A -> B -> C;
</quickgv>
 
test
 
= Crawling Flow =
<quickgv name="G4" theme="warm">
<quickgv name="G4" theme="warm">
B1 [label="AAA"];
rankdir=TB;
B2 [label="BBB"];
 
B3 [label="測測測"];
A1 [label="Website"];
A2 [label="Proxy Server"];
A3 [label="Daily Cache"];
A4 [label="Hash Cache"];
 
B [label="Requests Session"];
C [label="Crawler"];
 
D1 [label="BeautifulSoup\n(HTML)"];
D2 [label="json\n(JSON)"];
D3 [label="Pandas\n(CSV)"];
D4 [label="Custom Datasource", fillcolor="#ffffff:#00c000"];
 
E1 [label="Handler", fillcolor="#ffffff:#00c000"];
E2 [label="Models", fillcolor="#ffffff:#00c000"];
 
F1 [label="SQLAlchemy"];
F2 [label="Console"];
F3 [label="GeoJSON"];
F4 [label="Elastic Search", fillcolor="#ffffff:#aaaaaa"];
 
G1 [label="SQLite"];
G2 [label="PostgreSQL", fillcolor="#ffffff:#aaaaaa"];
G3 [label="MySQL", fillcolor="#ffffff:#aaaaaa"];
G4 [label="MongoDB", fillcolor="#ffffff:#aaaaaa"];
 
 
A1 -> A2;
{A1 A2} -> B;
{B A3 A4} -> C;
C -> {D1 D2 D3 D4} -> E1 -> {F1 F2 F3 F4};
E2 -> F1;
F1 -> {G1 G2 G3 G4};
</quickgv>
</quickgv>


= ASRC pattern =
= GDS =
<quickgv name="G3" theme="warm">
<quickgv name="G3" theme="warm">
rankdir=TB;
rankdir=TB;


A1 [label="Convert filter_default.ini => filter_default.json."];
A [label="[Product]\nAquaduck Tours Surfers Paradise"];
A2 [label="Convert filter_default.json => asrcPattern.plain.json."];
 
A3 [label="Encrypt asrcPattern.plain.json => asrcPattern.json."];
B1 [label="[Product Type]\n11:15am Tour"];
A4 [label="Archive."];
B2 [label="[Product Type]\n01:45pm Tour"];
A5 [label="Install this archive."];
B3 [label="[Product Type]\n01:00pm Tour (Peak Season and Weekends Only)"];
A6 [label="Set released=1 for this archive."];
 
A7 [label="Generate list.json and detail-x.x.x.json for released patterns."];
C1 [label="[Product Option & Date]\nAdult @ 2019-07-03\n38.49 AUD"];
C2 [label="[Product Option & Date]\nChild (2-16yrs) @ 2019-07-03\n19.99 AUD"];
C3 [label="[Product Option & Date]\nStudent @ 2019-07-11\n25.49 AUD"];


A1 -> A2 -> A3 -> A4 -> A5 -> A6 -> A7;
A -> {B1 B2 B3};
B1 -> {C1 C2 C3};
</quickgv>
</quickgv>


= Architecture of Geomancer  =
= Geomancer  =
<quickgv name="G2" theme="warm">
<quickgv name="G2" theme="warm">
rankdir=BT;
rankdir=BT;
Line 33: Line 220:


C1 [label="凶宅資料\nGeoJSON"];
C1 [label="凶宅資料\nGeoJSON"];
C2 [label="凶宅資料\nSQLite"];
C2 [label="凶宅資料\nSQLite 3"];


subgraph cluster_convertion {
subgraph cluster_convertion {
Line 64: Line 251:
D [label="Convert to land-polygons-taiwan.osm"];
D [label="Convert to land-polygons-taiwan.osm"];
E [label="Convert to taiwan-merged-YYYYMMDD.osm.pbf"];
E [label="Convert to taiwan-merged-YYYYMMDD.osm.pbf"];
F [label="Convert to taiwan-merged-YYYYMMDD.map"];
F [label="Convert to taiwan-merged-YYYYMMDD.map "];


B -> C [label="ogr2ogr (gdal)"];
B -> C [xlabel="ogr2ogr (gdal)"];
C -> D [label="python3 shp2osm.py"];
C -> D [xlabel="python3 shp2osm.py"];
{A D} -> E [label="osmosis"];
{A D} -> E [xlabel="osmosis"];
E -> F [label="osmosis with mapsforge writer"];
E -> F [xlabel="osmosis with mapsforge writer"];
</quickgv>
</quickgv>

Latest revision as of 10:42, 10 September 2026

See: https://graphviz.gitlab.io/_pages/pdf/dotguide.pdf

Colored Edge

Dish

MMD

WebSocket Service

testflow

test

Crawling Flow

GDS

Geomancer

Sandbox