diff --git a/chinese-version/images/backend.png b/chinese-version/images/backend.png
new file mode 100644
index 000000000..858175ad8
Binary files /dev/null and b/chinese-version/images/backend.png differ
diff --git a/chinese-version/images/disclaimer.png b/chinese-version/images/disclaimer.png
new file mode 100644
index 000000000..5eb55816a
Binary files /dev/null and b/chinese-version/images/disclaimer.png differ
diff --git a/chinese-version/images/intro.png b/chinese-version/images/intro.png
new file mode 100644
index 000000000..dd647d515
Binary files /dev/null and b/chinese-version/images/intro.png differ
diff --git a/chinese-version/project/backend-map.json b/chinese-version/project/backend-map.json
new file mode 100644
index 000000000..11d404839
--- /dev/null
+++ b/chinese-version/project/backend-map.json
@@ -0,0 +1,5700 @@
+{
+ "mockup": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Arrow",
+ "zOrder": "0",
+ "w": "125",
+ "h": "109",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "629",
+ "y": "3227",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 108
+ },
+ "p1": {
+ "x": 0.4770542904147545,
+ "y": 0.2455190925621266
+ },
+ "p2": {
+ "x": 124,
+ "y": 1
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid",
+ "text": ""
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Arrow",
+ "zOrder": "1",
+ "w": "188",
+ "h": "43",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "577",
+ "y": "3054",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 187,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.45751633986928103,
+ "y": -0.003267973856209196
+ },
+ "p2": {
+ "x": 0,
+ "y": 42
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "2",
+ "typeID": "Arrow",
+ "zOrder": "2",
+ "w": "200",
+ "h": "18",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "577",
+ "y": "3042",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 199,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4575163398692811,
+ "y": -0.003267973856209203
+ },
+ "p2": {
+ "x": 0,
+ "y": 17
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "3",
+ "typeID": "Arrow",
+ "zOrder": "3",
+ "w": "230",
+ "h": "8",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "569",
+ "y": "3026",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 229,
+ "y": 7
+ },
+ "p1": {
+ "x": 0.4575163398692811,
+ "y": -0.0032679738562092003
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "4",
+ "typeID": "Arrow",
+ "zOrder": "4",
+ "w": "213",
+ "h": "32",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "576",
+ "y": "2992",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 212,
+ "y": 31
+ },
+ "p1": {
+ "x": 0.4575163398692812,
+ "y": -0.003267973856209213
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "5",
+ "typeID": "Arrow",
+ "zOrder": "5",
+ "w": "98",
+ "h": "91",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "659",
+ "y": "2855",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 1,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.47054747054747054,
+ "y": -0.24636174636174635
+ },
+ "p2": {
+ "x": 97,
+ "y": 90
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid",
+ "text": ""
+ }
+ },
+ {
+ "ID": "6",
+ "typeID": "Arrow",
+ "zOrder": "6",
+ "w": "209",
+ "h": "13",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "565",
+ "y": "2491",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 208,
+ "y": 12
+ },
+ "p1": {
+ "x": 0.4228667507356033,
+ "y": 0.002311895754518708
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "7",
+ "typeID": "Arrow",
+ "zOrder": "7",
+ "w": "207",
+ "h": "13",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "577",
+ "y": "2513",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 206,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4228667507356031,
+ "y": 0.002311895754518704
+ },
+ "p2": {
+ "x": 0,
+ "y": 12
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "8",
+ "typeID": "Arrow",
+ "zOrder": "8",
+ "w": "208",
+ "h": "49",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "581",
+ "y": "2515",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 207,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.422866750735603,
+ "y": 0.0023118957545186923
+ },
+ "p2": {
+ "x": 0,
+ "y": 48
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "9",
+ "typeID": "Arrow",
+ "zOrder": "9",
+ "w": "200",
+ "h": "46",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "585",
+ "y": "2453",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 199,
+ "y": 45
+ },
+ "p1": {
+ "x": 0.42286675073560326,
+ "y": 0.0023118957545186824
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "10",
+ "typeID": "Arrow",
+ "zOrder": "10",
+ "w": "184",
+ "h": "72",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "591",
+ "y": "2417",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 183,
+ "y": 71
+ },
+ "p1": {
+ "x": 0.42286675073560326,
+ "y": 0.002311895754518694
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "11",
+ "typeID": "Arrow",
+ "zOrder": "11",
+ "w": "162",
+ "h": "16",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "747",
+ "y": "2844",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 161,
+ "y": 15
+ },
+ "p1": {
+ "x": 0.457516339869281,
+ "y": -0.0032679738562091465
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "12",
+ "typeID": "Arrow",
+ "zOrder": "12",
+ "w": "162",
+ "h": "10",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "747",
+ "y": "2823",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 161,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4575163398692811,
+ "y": -0.003267973856209141
+ },
+ "p2": {
+ "x": 0,
+ "y": 9
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "13",
+ "typeID": "Arrow",
+ "zOrder": "13",
+ "w": "149",
+ "h": "29",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "744",
+ "y": "2789",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 148,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4575163398692811,
+ "y": -0.003267973856209201
+ },
+ "p2": {
+ "x": 0,
+ "y": 28
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "14",
+ "typeID": "Arrow",
+ "zOrder": "14",
+ "w": "158",
+ "h": "5",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "748",
+ "y": "2694",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 157,
+ "y": 4
+ },
+ "p1": {
+ "x": 0.47363590855998666,
+ "y": -0.003754380110128481
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "15",
+ "typeID": "Arrow",
+ "zOrder": "15",
+ "w": "169",
+ "h": "19",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "728",
+ "y": "2665",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 168,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4228667507356032,
+ "y": 0.0023118957545187053
+ },
+ "p2": {
+ "x": 0,
+ "y": 18
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "16",
+ "typeID": "Arrow",
+ "zOrder": "16",
+ "w": "374",
+ "h": "45",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "387",
+ "y": "2302",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 373,
+ "y": 10
+ },
+ "p1": {
+ "x": 0.5494401310071896,
+ "y": 0.10588311343182814
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "17",
+ "typeID": "Arrow",
+ "zOrder": "17",
+ "w": "143",
+ "h": "14",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "622",
+ "y": "2273",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 142,
+ "y": 13
+ },
+ "p1": {
+ "x": 0.535877637338317,
+ "y": -0.007278807849309005
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "18",
+ "typeID": "Arrow",
+ "zOrder": "18",
+ "w": "163",
+ "h": "12",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "613",
+ "y": "2295",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 162,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4910385289593246,
+ "y": 0.0004292920259006189
+ },
+ "p2": {
+ "x": 0,
+ "y": 11
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "19",
+ "typeID": "Arrow",
+ "zOrder": "19",
+ "w": "74",
+ "h": "95",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "739",
+ "y": "2544",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 94
+ },
+ "p1": {
+ "x": 0.4552770914225203,
+ "y": -0.18898693963995766
+ },
+ "p2": {
+ "x": 73,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid",
+ "text": ""
+ }
+ },
+ {
+ "ID": "20",
+ "typeID": "Arrow",
+ "zOrder": "20",
+ "w": "107",
+ "h": "103",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "692",
+ "y": "2155",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 106,
+ "y": 102
+ },
+ "p1": {
+ "x": 0.38414149443561213,
+ "y": -0.11426868044515104
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid",
+ "text": ""
+ }
+ },
+ {
+ "ID": "21",
+ "typeID": "Arrow",
+ "zOrder": "21",
+ "w": "215",
+ "h": "13",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "683",
+ "y": "2151",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 214,
+ "y": 8
+ },
+ "p1": {
+ "x": 0.5140765687406936,
+ "y": 0.03859053397720475
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "22",
+ "typeID": "Canvas",
+ "zOrder": "22",
+ "w": "591",
+ "h": "101",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "793",
+ "y": "2109",
+ "properties": {
+ "color": "16777215"
+ }
+ },
+ {
+ "ID": "23",
+ "typeID": "Arrow",
+ "zOrder": "23",
+ "w": "87",
+ "h": "6",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "717",
+ "y": "1922",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 86,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5140765687406935,
+ "y": 0.03859053397720476
+ },
+ "p2": {
+ "x": 0,
+ "y": 4
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "24",
+ "typeID": "Arrow",
+ "zOrder": "24",
+ "w": "69",
+ "h": "56",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "721",
+ "y": "1842",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 68,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.45855018587360596,
+ "y": 0.14888475836431225
+ },
+ "p2": {
+ "x": 0,
+ "y": 55
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid",
+ "text": ""
+ }
+ },
+ {
+ "ID": "25",
+ "typeID": "Arrow",
+ "zOrder": "25",
+ "w": "86",
+ "h": "10",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "715",
+ "y": "1801",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 85,
+ "y": 9
+ },
+ "p1": {
+ "x": 0.5140765687406935,
+ "y": 0.03859053397720475
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "26",
+ "typeID": "Arrow",
+ "zOrder": "26",
+ "w": "87",
+ "h": "59",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "716",
+ "y": "1682",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4275092936802974,
+ "y": -0.19861922464152953
+ },
+ "p2": {
+ "x": 86,
+ "y": 58
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid",
+ "text": ""
+ }
+ },
+ {
+ "ID": "27",
+ "typeID": "Arrow",
+ "zOrder": "27",
+ "w": "72",
+ "h": "2",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "727",
+ "y": "1610",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 1
+ },
+ "p1": {
+ "x": 0.5210234034113447,
+ "y": -0.007338357794525982
+ },
+ "p2": {
+ "x": 71,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid",
+ "text": ""
+ }
+ },
+ {
+ "ID": "28",
+ "typeID": "Arrow",
+ "zOrder": "28",
+ "w": "99",
+ "h": "49",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "698",
+ "y": "1529",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 98,
+ "y": 48
+ },
+ "p1": {
+ "x": 0.5140765687406935,
+ "y": 0.038590533977204765
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "29",
+ "typeID": "Arrow",
+ "zOrder": "29",
+ "w": "9",
+ "h": "75",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "975",
+ "y": "1482",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 74
+ },
+ "p1": {
+ "x": 0.41040312093628173,
+ "y": -0.05500650195058517
+ },
+ "p2": {
+ "x": 8,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid",
+ "text": ""
+ }
+ },
+ {
+ "ID": "30",
+ "typeID": "Arrow",
+ "zOrder": "30",
+ "w": "9",
+ "h": "84",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "978",
+ "y": "1310",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 8,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5140765687406935,
+ "y": 0.038590533977204765
+ },
+ "p2": {
+ "x": 0,
+ "y": 83
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "31",
+ "typeID": "Arrow",
+ "zOrder": "31",
+ "w": "101",
+ "h": "15",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "713",
+ "y": "1429",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 9
+ },
+ "p1": {
+ "x": 0.45184009522864793,
+ "y": -0.09066560857057832
+ },
+ "p2": {
+ "x": 100,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid"
+ }
+ },
+ {
+ "ID": "32",
+ "typeID": "Arrow",
+ "zOrder": "32",
+ "w": "147",
+ "h": "71",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "395",
+ "y": "474",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 70
+ },
+ "p1": {
+ "x": 0.29983449443824334,
+ "y": -0.05126823447904237
+ },
+ "p2": {
+ "x": 146,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "33",
+ "typeID": "Arrow",
+ "zOrder": "33",
+ "w": "68",
+ "h": "93",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "512",
+ "y": "1129",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 3,
+ "y": 92
+ },
+ "p1": {
+ "x": 0.3850318471337579,
+ "y": 0.18089171974522292
+ },
+ "p2": {
+ "x": 67,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid"
+ }
+ },
+ {
+ "ID": "34",
+ "typeID": "Arrow",
+ "zOrder": "34",
+ "w": "146",
+ "h": "23",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "708",
+ "y": "1009",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 22
+ },
+ "p1": {
+ "x": 0.5177460050462573,
+ "y": -0.033389402859545836
+ },
+ "p2": {
+ "x": 145,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "35",
+ "typeID": "Arrow",
+ "zOrder": "35",
+ "w": "119",
+ "h": "123",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "686",
+ "y": "902",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 118,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5006130932798996,
+ "y": 0.15479857642731107
+ },
+ "p2": {
+ "x": 0,
+ "y": 122
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "solid"
+ }
+ },
+ {
+ "ID": "36",
+ "typeID": "Arrow",
+ "zOrder": "36",
+ "w": "88",
+ "h": "53",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "692",
+ "y": "883",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 87,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.44426229508196724,
+ "y": -0.013114754098360656
+ },
+ "p2": {
+ "x": 0,
+ "y": 52
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "37",
+ "typeID": "Arrow",
+ "zOrder": "37",
+ "w": "92",
+ "h": "187",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "720",
+ "y": "651",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 91,
+ "y": 186
+ },
+ "p1": {
+ "x": 0.4750027536746258,
+ "y": -0.12018259922407568
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier"
+ }
+ },
+ {
+ "ID": "38",
+ "typeID": "Arrow",
+ "zOrder": "38",
+ "w": "48",
+ "h": "83",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "407",
+ "y": "657",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 1,
+ "y": 82
+ },
+ "p1": {
+ "x": 0.4278136688201293,
+ "y": 0.1396123767426046
+ },
+ "p2": {
+ "x": 47,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "39",
+ "typeID": "Arrow",
+ "zOrder": "39",
+ "w": "34",
+ "h": "127",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "669",
+ "y": "479",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 33,
+ "y": 126
+ },
+ "p1": {
+ "x": 0.4701515620167028,
+ "y": 0.1905351067120322
+ },
+ "p2": {
+ "x": 16,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier"
+ }
+ },
+ {
+ "ID": "40",
+ "typeID": "Arrow",
+ "zOrder": "40",
+ "w": "79",
+ "h": "255",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "819",
+ "y": "292",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 4,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.46391752577319545,
+ "y": -0.10309278350515459
+ },
+ "p2": {
+ "x": 78,
+ "y": 254
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "41",
+ "typeID": "Arrow",
+ "zOrder": "41",
+ "w": "151",
+ "h": "34",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "393",
+ "y": "466",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 33
+ },
+ "p1": {
+ "x": 0.3477275391769901,
+ "y": -0.04236195240142249
+ },
+ "p2": {
+ "x": 150,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "42",
+ "typeID": "Arrow",
+ "zOrder": "42",
+ "w": "89",
+ "h": "61",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "917",
+ "y": "431",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 88,
+ "y": 60
+ },
+ "p1": {
+ "x": 0.6410437235543018,
+ "y": -0.04019746121297602
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted",
+ "text": ""
+ }
+ },
+ {
+ "ID": "43",
+ "typeID": "Arrow",
+ "zOrder": "43",
+ "w": "85",
+ "h": "20",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "919",
+ "y": "421",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 84,
+ "y": 19
+ },
+ "p1": {
+ "x": 0.4935957934474855,
+ "y": 0.02831333423216934
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "44",
+ "typeID": "Arrow",
+ "zOrder": "44",
+ "w": "141",
+ "h": "138",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "403",
+ "y": "250",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 2
+ },
+ "p1": {
+ "x": 0.26833582265545164,
+ "y": 0.06426381573775647
+ },
+ "p2": {
+ "x": 140,
+ "y": 137
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "45",
+ "typeID": "Arrow",
+ "zOrder": "45",
+ "w": "153",
+ "h": "16",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "392",
+ "y": "380",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 15
+ },
+ "p1": {
+ "x": 0.26833582265545164,
+ "y": 0.06426381573775647
+ },
+ "p2": {
+ "x": 152,
+ "y": 2
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "46",
+ "typeID": "Arrow",
+ "zOrder": "46",
+ "w": "152",
+ "h": "60",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "396",
+ "y": "382",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 1,
+ "y": 59
+ },
+ "p1": {
+ "x": 0.2683358226554517,
+ "y": 0.06426381573775639
+ },
+ "p2": {
+ "x": 151,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "47",
+ "typeID": "Arrow",
+ "zOrder": "47",
+ "w": "152",
+ "h": "46",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "398",
+ "y": "341",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 5
+ },
+ "p1": {
+ "x": 0.26833582265545164,
+ "y": 0.06426381573775647
+ },
+ "p2": {
+ "x": 151,
+ "y": 45
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "48",
+ "typeID": "Arrow",
+ "zOrder": "48",
+ "w": "141",
+ "h": "86",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "402",
+ "y": "299",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 3
+ },
+ "p1": {
+ "x": 0.26833582265545164,
+ "y": 0.06426381573775647
+ },
+ "p2": {
+ "x": 140,
+ "y": 85
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "49",
+ "typeID": "Arrow",
+ "zOrder": "49",
+ "w": "77",
+ "h": "36",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "924",
+ "y": "348",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 76,
+ "y": 35
+ },
+ "p1": {
+ "x": 0.4949292958148836,
+ "y": -0.07470361376946151
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "50",
+ "typeID": "Arrow",
+ "zOrder": "50",
+ "w": "82",
+ "h": "101",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "914",
+ "y": "243",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 81,
+ "y": 1
+ },
+ "p1": {
+ "x": 0.266776677667767,
+ "y": -0.05445544554455441
+ },
+ "p2": {
+ "x": 0,
+ "y": 100
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "51",
+ "typeID": "Arrow",
+ "zOrder": "51",
+ "w": "93",
+ "h": "53",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "915",
+ "y": "290",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 92,
+ "y": 2
+ },
+ "p1": {
+ "x": 0.321780372126961,
+ "y": -0.08792411528639182
+ },
+ "p2": {
+ "x": 0,
+ "y": 52
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "52",
+ "typeID": "Arrow",
+ "zOrder": "52",
+ "w": "74",
+ "h": "8",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "916",
+ "y": "335",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 73,
+ "y": 1
+ },
+ "p1": {
+ "x": 0.3537744641192917,
+ "y": -0.02907735321528425
+ },
+ "p2": {
+ "x": 0,
+ "y": 7
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "53",
+ "typeID": "Label",
+ "zOrder": "53",
+ "measuredW": "226",
+ "measuredH": "40",
+ "x": "591",
+ "y": "127",
+ "properties": {
+ "bold": "true",
+ "size": "32",
+ "text": "後端 Back-end"
+ }
+ },
+ {
+ "ID": "54",
+ "typeID": "Arrow",
+ "zOrder": "54",
+ "w": "13",
+ "h": "71",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "663",
+ "y": "40",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 6,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5214417744916817,
+ "y": -0.11497227356746767
+ },
+ "p2": {
+ "x": 12,
+ "y": 70
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "55",
+ "typeID": "Icon",
+ "zOrder": "55",
+ "measuredW": "32",
+ "measuredH": "32",
+ "x": "955",
+ "y": "55",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "github",
+ "size": "medium"
+ }
+ }
+ },
+ {
+ "ID": "56",
+ "typeID": "Label",
+ "zOrder": "56",
+ "measuredW": "302",
+ "measuredH": "25",
+ "x": "994",
+ "y": "49",
+ "properties": {
+ "bold": "true",
+ "color": "10027263",
+ "size": "17",
+ "text": "kamranahmedse/developer-roadmap"
+ }
+ },
+ {
+ "ID": "57",
+ "typeID": "Icon",
+ "zOrder": "57",
+ "measuredW": "32",
+ "measuredH": "32",
+ "x": "955",
+ "y": "109",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "twitter",
+ "size": "medium"
+ }
+ }
+ },
+ {
+ "ID": "58",
+ "typeID": "Label",
+ "zOrder": "58",
+ "measuredW": "133",
+ "measuredH": "25",
+ "x": "995",
+ "y": "101",
+ "properties": {
+ "bold": "true",
+ "color": "10027263",
+ "size": "17",
+ "text": "kamranahmedse"
+ }
+ },
+ {
+ "ID": "59",
+ "typeID": "Arrow",
+ "zOrder": "59",
+ "w": "14",
+ "h": "79",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "702",
+ "y": "177",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4416543574593796,
+ "y": 0.14967996061053668
+ },
+ "p2": {
+ "x": 3,
+ "y": 78
+ },
+ "rightArrow": "false",
+ "shape": "bezier"
+ }
+ },
+ {
+ "ID": "60",
+ "typeID": "TextArea",
+ "zOrder": "60",
+ "w": "400",
+ "h": "71",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "528",
+ "y": "237",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "61",
+ "typeID": "Label",
+ "zOrder": "61",
+ "measuredW": "102",
+ "measuredH": "25",
+ "x": "576",
+ "y": "249",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "選擇一個語言"
+ }
+ },
+ {
+ "ID": "62",
+ "typeID": "Icon",
+ "zOrder": "62",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "542",
+ "y": "249",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "63",
+ "typeID": "Label",
+ "zOrder": "63",
+ "measuredW": "5",
+ "measuredH": "21",
+ "x": "550",
+ "y": "251",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "1"
+ }
+ },
+ {
+ "ID": "64",
+ "typeID": "TextArea",
+ "zOrder": "64",
+ "w": "400",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "528",
+ "y": "314",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "65",
+ "typeID": "Label",
+ "zOrder": "65",
+ "w": "371",
+ "measuredW": "274",
+ "measuredH": "25",
+ "x": "551",
+ "y": "322",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "腳本程式語言 Scripting Languages"
+ }
+ },
+ {
+ "ID": "66",
+ "typeID": "TextArea",
+ "zOrder": "66",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "989",
+ "y": "316",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "67",
+ "typeID": "Label",
+ "zOrder": "67",
+ "w": "45",
+ "measuredW": "35",
+ "measuredH": "25",
+ "x": "1029",
+ "y": "325",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "PHP"
+ }
+ },
+ {
+ "ID": "68",
+ "typeID": "TextArea",
+ "zOrder": "68",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "989",
+ "y": "361",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "69",
+ "typeID": "Label",
+ "zOrder": "69",
+ "w": "68",
+ "measuredW": "61",
+ "measuredH": "25",
+ "x": "1029",
+ "y": "370",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Node.js"
+ }
+ },
+ {
+ "ID": "70",
+ "typeID": "TextArea",
+ "zOrder": "70",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "989",
+ "y": "271",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "71",
+ "typeID": "Label",
+ "zOrder": "71",
+ "w": "45",
+ "measuredW": "41",
+ "measuredH": "25",
+ "x": "1029",
+ "y": "280",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Ruby"
+ }
+ },
+ {
+ "ID": "72",
+ "typeID": "TextArea",
+ "zOrder": "72",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "989",
+ "y": "226",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "73",
+ "typeID": "Label",
+ "zOrder": "73",
+ "w": "68",
+ "measuredW": "56",
+ "measuredH": "25",
+ "x": "1028",
+ "y": "235",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Python"
+ }
+ },
+ {
+ "ID": "74",
+ "typeID": "TextArea",
+ "zOrder": "74",
+ "w": "400",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "528",
+ "y": "361",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "75",
+ "typeID": "Label",
+ "zOrder": "75",
+ "w": "291",
+ "measuredW": "286",
+ "measuredH": "25",
+ "x": "550",
+ "y": "369",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "函數程式語言 Functional Languages"
+ }
+ },
+ {
+ "ID": "76",
+ "typeID": "TextArea",
+ "zOrder": "76",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "272",
+ "y": "367",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "77",
+ "typeID": "Label",
+ "zOrder": "77",
+ "w": "61",
+ "measuredW": "58",
+ "measuredH": "25",
+ "x": "312",
+ "y": "376",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Clojure"
+ }
+ },
+ {
+ "ID": "78",
+ "typeID": "TextArea",
+ "zOrder": "78",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "272",
+ "y": "412",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "79",
+ "typeID": "Label",
+ "zOrder": "79",
+ "w": "68",
+ "measuredW": "59",
+ "measuredH": "25",
+ "x": "312",
+ "y": "421",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Haskell"
+ }
+ },
+ {
+ "ID": "80",
+ "typeID": "TextArea",
+ "zOrder": "80",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "272",
+ "y": "322",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "81",
+ "typeID": "Label",
+ "zOrder": "81",
+ "w": "61",
+ "measuredW": "51",
+ "measuredH": "25",
+ "x": "312",
+ "y": "331",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Erlang"
+ }
+ },
+ {
+ "ID": "82",
+ "typeID": "TextArea",
+ "zOrder": "82",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "272",
+ "y": "277",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "83",
+ "typeID": "Label",
+ "zOrder": "83",
+ "w": "68",
+ "measuredW": "44",
+ "measuredH": "25",
+ "x": "311",
+ "y": "286",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Scala"
+ }
+ },
+ {
+ "ID": "84",
+ "typeID": "TextArea",
+ "zOrder": "84",
+ "w": "400",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "528",
+ "y": "407",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "85",
+ "typeID": "Label",
+ "zOrder": "85",
+ "w": "338",
+ "measuredW": "335",
+ "measuredH": "25",
+ "x": "550",
+ "y": "415",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "多範式程式語言 Multiparadigm Languages"
+ }
+ },
+ {
+ "ID": "86",
+ "typeID": "TextArea",
+ "zOrder": "86",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "272",
+ "y": "232",
+ "properties": {
+ "color": "16770457",
+ "text": ""
+ }
+ },
+ {
+ "ID": "87",
+ "typeID": "Label",
+ "zOrder": "87",
+ "w": "61",
+ "measuredW": "40",
+ "measuredH": "25",
+ "x": "312",
+ "y": "241",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Elixir"
+ }
+ },
+ {
+ "ID": "88",
+ "typeID": "TextArea",
+ "zOrder": "88",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "993",
+ "y": "422",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "89",
+ "typeID": "Label",
+ "zOrder": "89",
+ "w": "68",
+ "measuredW": "57",
+ "measuredH": "25",
+ "x": "1033",
+ "y": "431",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Golang"
+ }
+ },
+ {
+ "ID": "90",
+ "typeID": "TextArea",
+ "zOrder": "90",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "994",
+ "y": "468",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "91",
+ "typeID": "Label",
+ "zOrder": "91",
+ "w": "68",
+ "measuredW": "37",
+ "measuredH": "25",
+ "x": "1034",
+ "y": "477",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Rust"
+ }
+ },
+ {
+ "ID": "92",
+ "typeID": "TextArea",
+ "zOrder": "92",
+ "w": "400",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "528",
+ "y": "453",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "93",
+ "typeID": "Label",
+ "zOrder": "93",
+ "w": "237",
+ "measuredW": "234",
+ "measuredH": "25",
+ "x": "550",
+ "y": "461",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "企業選項 Enterprisey Options"
+ }
+ },
+ {
+ "ID": "94",
+ "typeID": "TextArea",
+ "zOrder": "94",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "272",
+ "y": "477",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "95",
+ "typeID": "Label",
+ "zOrder": "95",
+ "w": "68",
+ "measuredW": "37",
+ "measuredH": "25",
+ "x": "312",
+ "y": "486",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "Java"
+ }
+ },
+ {
+ "ID": "96",
+ "typeID": "TextArea",
+ "zOrder": "96",
+ "w": "141",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "273",
+ "y": "523",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "97",
+ "typeID": "Label",
+ "zOrder": "97",
+ "w": "47",
+ "measuredW": "38",
+ "measuredH": "25",
+ "x": "313",
+ "y": "532",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": ".NET"
+ }
+ },
+ {
+ "ID": "98",
+ "typeID": "TextArea",
+ "zOrder": "98",
+ "w": "465",
+ "h": "215",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "838",
+ "y": "546",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "99",
+ "typeID": "Label",
+ "zOrder": "99",
+ "measuredW": "425",
+ "measuredH": "25",
+ "x": "852",
+ "y": "557",
+ "properties": {
+ "size": "17",
+ "text": "對於初學者而言,如果你才剛開始進入後端開發的領域,"
+ }
+ },
+ {
+ "ID": "100",
+ "typeID": "Label",
+ "zOrder": "100",
+ "measuredW": "435",
+ "measuredH": "25",
+ "x": "852",
+ "y": "583",
+ "properties": {
+ "size": "17",
+ "text": "我會建議你先選擇一個腳本語言(scripting language)。"
+ }
+ },
+ {
+ "ID": "101",
+ "typeID": "Label",
+ "zOrder": "101",
+ "measuredW": "317",
+ "measuredH": "25",
+ "x": "852",
+ "y": "610",
+ "properties": {
+ "size": "17",
+ "text": "*Node.js* 或 *PHP* 會是快速又簡單的選項。"
+ }
+ },
+ {
+ "ID": "102",
+ "typeID": "Label",
+ "zOrder": "102",
+ "measuredW": "289",
+ "measuredH": "25",
+ "x": "852",
+ "y": "637",
+ "properties": {
+ "size": "17",
+ "text": "如果你已經在用某些腳本語言寫後端,"
+ }
+ },
+ {
+ "ID": "103",
+ "typeID": "Label",
+ "zOrder": "103",
+ "measuredW": "238",
+ "measuredH": "25",
+ "x": "852",
+ "y": "665",
+ "properties": {
+ "size": "17",
+ "text": "那就不要選擇其他腳本語言了,"
+ }
+ },
+ {
+ "ID": "104",
+ "typeID": "Label",
+ "zOrder": "104",
+ "measuredW": "266",
+ "measuredH": "25",
+ "x": "852",
+ "y": "691",
+ "properties": {
+ "size": "17",
+ "text": "試試看 Golang、Rust 或 Clojure,"
+ }
+ },
+ {
+ "ID": "105",
+ "typeID": "Label",
+ "zOrder": "105",
+ "measuredW": "221",
+ "measuredH": "25",
+ "x": "852",
+ "y": "720",
+ "properties": {
+ "size": "17",
+ "text": "這肯定會給你一個新的視角。"
+ }
+ },
+ {
+ "ID": "106",
+ "typeID": "TextArea",
+ "zOrder": "106",
+ "w": "405",
+ "h": "96",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "366",
+ "y": "583",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "107",
+ "typeID": "Label",
+ "zOrder": "107",
+ "measuredW": "136",
+ "measuredH": "25",
+ "x": "412",
+ "y": "595",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "練習你學到的東西"
+ }
+ },
+ {
+ "ID": "108",
+ "typeID": "Icon",
+ "zOrder": "108",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "378",
+ "y": "595",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "109",
+ "typeID": "Label",
+ "zOrder": "109",
+ "measuredW": "8",
+ "measuredH": "21",
+ "x": "386",
+ "y": "597",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "2"
+ }
+ },
+ {
+ "ID": "110",
+ "typeID": "Label",
+ "zOrder": "110",
+ "measuredW": "221",
+ "measuredH": "25",
+ "x": "412",
+ "y": "619",
+ "properties": {
+ "size": "17",
+ "text": "練習並用你選擇的語言寫一些"
+ }
+ },
+ {
+ "ID": "111",
+ "typeID": "Label",
+ "zOrder": "111",
+ "measuredW": "263",
+ "measuredH": "25",
+ "x": "412",
+ "y": "641",
+ "properties": {
+ "size": "17",
+ "text": "命令列(command line)的程式。"
+ }
+ },
+ {
+ "ID": "112",
+ "typeID": "Label",
+ "zOrder": "112",
+ "measuredW": "204",
+ "measuredH": "25",
+ "x": "575",
+ "y": "273",
+ "properties": {
+ "size": "17",
+ "text": "有各式各樣的語言可供選擇"
+ }
+ },
+ {
+ "ID": "113",
+ "typeID": "TextArea",
+ "zOrder": "113",
+ "w": "575",
+ "h": "187",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "152",
+ "y": "700",
+ "properties": {
+ "color": "16770457",
+ "text": ""
+ }
+ },
+ {
+ "ID": "114",
+ "typeID": "Label",
+ "zOrder": "114",
+ "w": "131",
+ "measuredW": "68",
+ "measuredH": "25",
+ "x": "168",
+ "y": "714",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "舉例來說"
+ }
+ },
+ {
+ "ID": "115",
+ "typeID": "Label",
+ "zOrder": "115",
+ "measuredW": "268",
+ "measuredH": "25",
+ "x": "168",
+ "y": "742",
+ "properties": {
+ "size": "17",
+ "text": "實作一些你用過的指令,像是 `ls`。"
+ }
+ },
+ {
+ "ID": "116",
+ "typeID": "Label",
+ "zOrder": "116",
+ "measuredW": "435",
+ "measuredH": "25",
+ "x": "168",
+ "y": "768",
+ "properties": {
+ "size": "17",
+ "text": "抓取和儲存 reddit 的 /r/programming 板上文章的指令。"
+ }
+ },
+ {
+ "ID": "117",
+ "typeID": "Label",
+ "zOrder": "117",
+ "measuredW": "311",
+ "measuredH": "25",
+ "x": "168",
+ "y": "794",
+ "properties": {
+ "size": "17",
+ "text": "幫你建立目錄結構的 JSON 格式的指令。"
+ }
+ },
+ {
+ "ID": "118",
+ "typeID": "Label",
+ "zOrder": "118",
+ "measuredW": "390",
+ "measuredH": "25",
+ "x": "168",
+ "y": "820",
+ "properties": {
+ "size": "17",
+ "text": "讀取上述產生的 JSON,並建立其目錄結構的指令。"
+ }
+ },
+ {
+ "ID": "119",
+ "typeID": "Label",
+ "zOrder": "119",
+ "measuredW": "357",
+ "measuredH": "25",
+ "x": "168",
+ "y": "846",
+ "properties": {
+ "size": "17",
+ "text": "想一些你每天在做的任務,並試著把它自動化。"
+ }
+ },
+ {
+ "ID": "120",
+ "typeID": "TextArea",
+ "zOrder": "120",
+ "w": "523",
+ "h": "133",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "766",
+ "y": "788",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "121",
+ "typeID": "Label",
+ "zOrder": "121",
+ "measuredW": "316",
+ "measuredH": "25",
+ "x": "813",
+ "y": "803",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學習套件管理系統(Package Manager)"
+ }
+ },
+ {
+ "ID": "122",
+ "typeID": "Icon",
+ "zOrder": "122",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "779",
+ "y": "803",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "123",
+ "typeID": "Label",
+ "zOrder": "123",
+ "measuredW": "8",
+ "measuredH": "21",
+ "x": "787",
+ "y": "805",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "3"
+ }
+ },
+ {
+ "ID": "124",
+ "typeID": "TextArea",
+ "zOrder": "124",
+ "w": "485",
+ "h": "72",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "241",
+ "y": "902",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "125",
+ "typeID": "Label",
+ "zOrder": "125",
+ "measuredW": "408",
+ "measuredH": "25",
+ "x": "254",
+ "y": "914",
+ "properties": {
+ "size": "17",
+ "text": "套件管理系統協助你在你的應用程式中載入外部相依,"
+ }
+ },
+ {
+ "ID": "126",
+ "typeID": "Label",
+ "zOrder": "126",
+ "measuredW": "221",
+ "measuredH": "25",
+ "x": "254",
+ "y": "936",
+ "properties": {
+ "size": "17",
+ "text": "也能協助你發佈自己的套件。"
+ }
+ },
+ {
+ "ID": "127",
+ "typeID": "Label",
+ "zOrder": "127",
+ "measuredW": "340",
+ "measuredH": "25",
+ "x": "813",
+ "y": "827",
+ "properties": {
+ "size": "17",
+ "text": "學會如何使用你所選的語言的套件管理系統,"
+ }
+ },
+ {
+ "ID": "128",
+ "typeID": "Label",
+ "zOrder": "128",
+ "measuredW": "391",
+ "measuredH": "25",
+ "x": "813",
+ "y": "852",
+ "properties": {
+ "size": "17",
+ "text": "像是 *PHP 的 composer、Node.js 的 NPM 和 yarn*"
+ }
+ },
+ {
+ "ID": "129",
+ "typeID": "TextArea",
+ "zOrder": "129",
+ "w": "575",
+ "h": "153",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "158",
+ "y": "985",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "130",
+ "typeID": "Label",
+ "zOrder": "130",
+ "measuredW": "369",
+ "measuredH": "25",
+ "x": "204",
+ "y": "1001",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "標準(Standard)和最佳實踐(Best Practice)"
+ }
+ },
+ {
+ "ID": "131",
+ "typeID": "Icon",
+ "zOrder": "131",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "170",
+ "y": "1001",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "132",
+ "typeID": "Label",
+ "zOrder": "132",
+ "measuredW": "8",
+ "measuredH": "21",
+ "x": "178",
+ "y": "1003",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "4"
+ }
+ },
+ {
+ "ID": "133",
+ "typeID": "Label",
+ "zOrder": "133",
+ "measuredW": "391",
+ "measuredH": "25",
+ "x": "204",
+ "y": "1028",
+ "properties": {
+ "size": "17",
+ "text": "每種語言都有自己的標準,以及做事情的最佳實踐。"
+ }
+ },
+ {
+ "ID": "134",
+ "typeID": "Label",
+ "zOrder": "134",
+ "measuredW": "204",
+ "measuredH": "25",
+ "x": "204",
+ "y": "1050",
+ "properties": {
+ "size": "17",
+ "text": "為你挑選的語言學習它們。"
+ }
+ },
+ {
+ "ID": "135",
+ "typeID": "Label",
+ "zOrder": "135",
+ "measuredW": "263",
+ "measuredH": "25",
+ "x": "204",
+ "y": "1075",
+ "properties": {
+ "size": "17",
+ "text": "例如 *PHP 的 PHP-FIG 和 PSRs*,"
+ }
+ },
+ {
+ "ID": "136",
+ "typeID": "TextArea",
+ "zOrder": "136",
+ "w": "570",
+ "h": "110",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "806",
+ "y": "947",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "137",
+ "typeID": "Label",
+ "zOrder": "137",
+ "measuredW": "289",
+ "measuredH": "25",
+ "x": "820",
+ "y": "962",
+ "properties": {
+ "size": "17",
+ "text": "請務必閱讀有關資訊安全的最佳實踐。"
+ }
+ },
+ {
+ "ID": "138",
+ "typeID": "Label",
+ "zOrder": "138",
+ "measuredW": "345",
+ "measuredH": "25",
+ "x": "820",
+ "y": "988",
+ "properties": {
+ "size": "17",
+ "text": "閱讀 OWASP 指南,並瞭解不同的安全問題,"
+ }
+ },
+ {
+ "ID": "139",
+ "typeID": "Label",
+ "zOrder": "139",
+ "measuredW": "289",
+ "measuredH": "25",
+ "x": "820",
+ "y": "1015",
+ "properties": {
+ "size": "17",
+ "text": "以及如何在你選擇的語言中避免它們。"
+ }
+ },
+ {
+ "ID": "140",
+ "typeID": "TextArea",
+ "zOrder": "140",
+ "w": "576",
+ "h": "323",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "158",
+ "y": "1156",
+ "properties": {
+ "color": "16776960",
+ "textColor": "0"
+ }
+ },
+ {
+ "ID": "141",
+ "typeID": "Label",
+ "zOrder": "141",
+ "measuredW": "415",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1177",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "製作和發佈一些套件(Package)或函式庫(Library)"
+ }
+ },
+ {
+ "ID": "142",
+ "typeID": "Icon",
+ "zOrder": "142",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "173",
+ "y": "1177",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "143",
+ "typeID": "Label",
+ "zOrder": "143",
+ "measuredW": "8",
+ "measuredH": "21",
+ "x": "181",
+ "y": "1179",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "5"
+ }
+ },
+ {
+ "ID": "144",
+ "typeID": "Label",
+ "zOrder": "144",
+ "measuredW": "374",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1204",
+ "properties": {
+ "size": "17",
+ "text": "現在繼續前進,建立一個套件並發佈其他人使用,"
+ }
+ },
+ {
+ "ID": "145",
+ "typeID": "Label",
+ "zOrder": "145",
+ "measuredW": "340",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1230",
+ "properties": {
+ "size": "17",
+ "text": "並確保遵循你至今所了解的標準和最佳實踐。"
+ }
+ },
+ {
+ "ID": "147",
+ "typeID": "Label",
+ "zOrder": "146",
+ "measuredW": "296",
+ "measuredH": "25",
+ "x": "813",
+ "y": "880",
+ "properties": {
+ "size": "17",
+ "text": "*Python 的 pip、Ruby 的 gems* 等等。"
+ }
+ },
+ {
+ "ID": "148",
+ "typeID": "Label",
+ "zOrder": "147",
+ "measuredW": "187",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1292",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "為一些開源專案做出貢獻"
+ }
+ },
+ {
+ "ID": "149",
+ "typeID": "Label",
+ "zOrder": "148",
+ "measuredW": "453",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1320",
+ "properties": {
+ "size": "17",
+ "text": "在 GitHub 上搜尋一些專案,並在專案中開一些 pull request"
+ }
+ },
+ {
+ "ID": "150",
+ "typeID": "Label",
+ "zOrder": "149",
+ "measuredW": "136",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1345",
+ "properties": {
+ "size": "17",
+ "text": "這裡有一些點子:"
+ }
+ },
+ {
+ "ID": "151",
+ "typeID": "Label",
+ "zOrder": "150",
+ "measuredW": "238",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1385",
+ "properties": {
+ "size": "17",
+ "text": "重構並實踐你學到的最佳實踐。"
+ }
+ },
+ {
+ "ID": "152",
+ "typeID": "Label",
+ "zOrder": "151",
+ "measuredW": "284",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1410",
+ "properties": {
+ "size": "17",
+ "text": "查看還開啟的 issue,並試著解決它。"
+ }
+ },
+ {
+ "ID": "153",
+ "typeID": "Label",
+ "zOrder": "152",
+ "measuredW": "170",
+ "measuredH": "25",
+ "x": "207",
+ "y": "1435",
+ "properties": {
+ "size": "17",
+ "text": "新增任何的額外功能。"
+ }
+ },
+ {
+ "ID": "154",
+ "typeID": "TextArea",
+ "zOrder": "153",
+ "w": "595",
+ "h": "138",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "782",
+ "y": "1359",
+ "properties": {
+ "color": "16776960",
+ "text": ""
+ }
+ },
+ {
+ "ID": "155",
+ "typeID": "Label",
+ "zOrder": "154",
+ "measuredW": "162",
+ "measuredH": "25",
+ "x": "830",
+ "y": "1375",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學習測試(Testing)"
+ }
+ },
+ {
+ "ID": "156",
+ "typeID": "Icon",
+ "zOrder": "155",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "796",
+ "y": "1375",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "157",
+ "typeID": "Label",
+ "zOrder": "156",
+ "measuredW": "8",
+ "measuredH": "21",
+ "x": "804",
+ "y": "1377",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "6"
+ }
+ },
+ {
+ "ID": "158",
+ "typeID": "Label",
+ "zOrder": "157",
+ "measuredW": "442",
+ "measuredH": "25",
+ "x": "830",
+ "y": "1402",
+ "properties": {
+ "size": "17",
+ "text": "測試的類型有好幾種,但現在,先瞭解如何用你選擇的語言"
+ }
+ },
+ {
+ "ID": "159",
+ "typeID": "Label",
+ "zOrder": "158",
+ "measuredW": "477",
+ "measuredH": "25",
+ "x": "830",
+ "y": "1428",
+ "properties": {
+ "size": "17",
+ "text": "撰寫 *單元測試(Unit test)和 整合測試(Integration test)*。"
+ }
+ },
+ {
+ "ID": "160",
+ "typeID": "Label",
+ "zOrder": "159",
+ "measuredW": "343",
+ "measuredH": "25",
+ "x": "830",
+ "y": "1454",
+ "properties": {
+ "size": "17",
+ "text": "理解不同的測試術語,像是 mock、stub 等。"
+ }
+ },
+ {
+ "ID": "161",
+ "typeID": "TextArea",
+ "zOrder": "160",
+ "w": "603",
+ "h": "252",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "774",
+ "y": "1084",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "162",
+ "typeID": "Label",
+ "zOrder": "161",
+ "measuredW": "510",
+ "measuredH": "25",
+ "x": "790",
+ "y": "1099",
+ "properties": {
+ "size": "17",
+ "text": "根據你所選擇的語言會有幾種不同的選擇,每一種都有不同的用途。"
+ }
+ },
+ {
+ "ID": "163",
+ "typeID": "Label",
+ "zOrder": "162",
+ "measuredW": "199",
+ "measuredH": "25",
+ "x": "791",
+ "y": "1125",
+ "properties": {
+ "size": "17",
+ "text": "*Google* 看看有什麼不同,"
+ }
+ },
+ {
+ "ID": "164",
+ "typeID": "Label",
+ "zOrder": "163",
+ "measuredW": "170",
+ "measuredH": "25",
+ "x": "791",
+ "y": "1152",
+ "properties": {
+ "size": "17",
+ "text": "並選擇一個適合你的。"
+ }
+ },
+ {
+ "ID": "165",
+ "typeID": "Label",
+ "zOrder": "164",
+ "measuredW": "376",
+ "measuredH": "25",
+ "x": "792",
+ "y": "1193",
+ "properties": {
+ "size": "17",
+ "text": "*針對 PHP* – &*{color:blue}PHPUnit{color}*&、PHPSpec、Codeception"
+ }
+ },
+ {
+ "ID": "166",
+ "typeID": "Label",
+ "zOrder": "165",
+ "measuredW": "511",
+ "measuredH": "25",
+ "x": "792",
+ "y": "1221",
+ "properties": {
+ "size": "17",
+ "text": "*針對 Node.js* – &*{color:blue}Mocha{color}*&、&*{color:blue}Chai{color}*&、&*{color:blue}Sinon{color}*&、&*{color:blue}Mockery{color}*&、Ava、Jasmine"
+ }
+ },
+ {
+ "ID": "167",
+ "typeID": "Label",
+ "zOrder": "166",
+ "measuredW": "357",
+ "measuredH": "25",
+ "x": "791",
+ "y": "1264",
+ "properties": {
+ "size": "17",
+ "text": "我並不想開戰場,所以我不會在此做任何推薦。"
+ }
+ },
+ {
+ "ID": "168",
+ "typeID": "Label",
+ "zOrder": "167",
+ "measuredW": "306",
+ "measuredH": "25",
+ "x": "791",
+ "y": "1290",
+ "properties": {
+ "size": "17",
+ "text": "所以請多走走看看,找到適合你的選擇。"
+ }
+ },
+ {
+ "ID": "169",
+ "typeID": "TextArea",
+ "zOrder": "168",
+ "w": "594",
+ "h": "117",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "783",
+ "y": "1524",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "170",
+ "typeID": "Label",
+ "zOrder": "169",
+ "measuredW": "204",
+ "measuredH": "25",
+ "x": "832",
+ "y": "1545",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "為上面的實際步驟撰寫測試"
+ }
+ },
+ {
+ "ID": "171",
+ "typeID": "Icon",
+ "zOrder": "170",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "798",
+ "y": "1545",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "172",
+ "typeID": "Label",
+ "zOrder": "171",
+ "measuredW": "7",
+ "measuredH": "21",
+ "x": "806",
+ "y": "1547",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "7"
+ }
+ },
+ {
+ "ID": "173",
+ "typeID": "Label",
+ "zOrder": "172",
+ "measuredW": "255",
+ "measuredH": "25",
+ "x": "832",
+ "y": "1572",
+ "properties": {
+ "size": "17",
+ "text": "試著為前面步驟中實作的實際任務"
+ }
+ },
+ {
+ "ID": "174",
+ "typeID": "Label",
+ "zOrder": "173",
+ "measuredW": "153",
+ "measuredH": "25",
+ "x": "832",
+ "y": "1598",
+ "properties": {
+ "size": "17",
+ "text": "撰寫一些單元測試。"
+ }
+ },
+ {
+ "ID": "175",
+ "typeID": "Label",
+ "zOrder": "174",
+ "measuredW": "343",
+ "measuredH": "25",
+ "x": "203",
+ "y": "1099",
+ "properties": {
+ "size": "17",
+ "text": "或是像 Node.js 也有很多由社群推動的準則。"
+ }
+ },
+ {
+ "ID": "176",
+ "typeID": "TextArea",
+ "zOrder": "175",
+ "w": "575",
+ "h": "50",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "158",
+ "y": "1498",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "177",
+ "typeID": "Label",
+ "zOrder": "176",
+ "measuredW": "204",
+ "measuredH": "25",
+ "x": "208",
+ "y": "1511",
+ "properties": {
+ "size": "17",
+ "text": "瞭解如何計算測試覆蓋率。"
+ }
+ },
+ {
+ "ID": "178",
+ "typeID": "Icon",
+ "zOrder": "177",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "173",
+ "y": "1511",
+ "properties": {
+ "icon": {
+ "ID": "lightbulb-o",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "179",
+ "typeID": "TextArea",
+ "zOrder": "178",
+ "w": "371",
+ "h": "159",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "366",
+ "y": "1570",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "180",
+ "typeID": "Label",
+ "zOrder": "179",
+ "w": "342",
+ "measuredW": "333",
+ "measuredH": "25",
+ "x": "409",
+ "y": "1584",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學習關聯式資料庫(Relational Database)"
+ }
+ },
+ {
+ "ID": "181",
+ "typeID": "Icon",
+ "zOrder": "180",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "378",
+ "y": "1582",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "182",
+ "typeID": "Label",
+ "zOrder": "181",
+ "w": "11",
+ "measuredW": "8",
+ "measuredH": "21",
+ "x": "386",
+ "y": "1584",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "8"
+ }
+ },
+ {
+ "ID": "183",
+ "typeID": "TextInput",
+ "zOrder": "182",
+ "w": "121",
+ "measuredW": "75",
+ "measuredH": "32",
+ "x": "110",
+ "y": "1612",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "MySQL"
+ }
+ },
+ {
+ "ID": "184",
+ "typeID": "TextInput",
+ "zOrder": "183",
+ "w": "119",
+ "measuredW": "86",
+ "measuredH": "32",
+ "x": "237",
+ "y": "1612",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "MariaDB"
+ }
+ },
+ {
+ "ID": "185",
+ "typeID": "TextInput",
+ "zOrder": "184",
+ "w": "246",
+ "measuredW": "115",
+ "measuredH": "32",
+ "x": "108",
+ "y": "1652",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "PostgreSQL"
+ }
+ },
+ {
+ "ID": "186",
+ "typeID": "TextInput",
+ "zOrder": "185",
+ "w": "246",
+ "measuredW": "69",
+ "measuredH": "32",
+ "x": "109",
+ "y": "1570",
+ "properties": {
+ "align": "center",
+ "color": "16770457",
+ "size": "18",
+ "text": "Oracle"
+ }
+ },
+ {
+ "ID": "187",
+ "typeID": "TextInput",
+ "zOrder": "186",
+ "w": "246",
+ "measuredW": "77",
+ "measuredH": "32",
+ "x": "108",
+ "y": "1695",
+ "properties": {
+ "align": "center",
+ "color": "16770457",
+ "size": "18",
+ "text": "MSSQL"
+ }
+ },
+ {
+ "ID": "188",
+ "typeID": "Label",
+ "zOrder": "187",
+ "measuredW": "346",
+ "measuredH": "25",
+ "x": "382",
+ "y": "1613",
+ "properties": {
+ "size": "17",
+ "text": "這裡有幾個選項。 你如果已經學過其中一個,"
+ }
+ },
+ {
+ "ID": "189",
+ "typeID": "Label",
+ "zOrder": "188",
+ "measuredW": "204",
+ "measuredH": "25",
+ "x": "382",
+ "y": "1637",
+ "properties": {
+ "size": "17",
+ "text": "要學其他的應該是很容易。"
+ }
+ },
+ {
+ "ID": "190",
+ "typeID": "Label",
+ "zOrder": "189",
+ "measuredW": "302",
+ "measuredH": "25",
+ "x": "382",
+ "y": "1662",
+ "properties": {
+ "size": "17",
+ "text": "先選擇 *MySQL*,但要瞭解他們的不同,"
+ }
+ },
+ {
+ "ID": "191",
+ "typeID": "Label",
+ "zOrder": "190",
+ "measuredW": "136",
+ "measuredH": "25",
+ "x": "382",
+ "y": "1686",
+ "properties": {
+ "size": "17",
+ "text": "以及他們的用例。"
+ }
+ },
+ {
+ "ID": "192",
+ "typeID": "TextArea",
+ "zOrder": "191",
+ "w": "603",
+ "h": "172",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "782",
+ "y": "1678",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "193",
+ "typeID": "Label",
+ "zOrder": "192",
+ "measuredW": "68",
+ "measuredH": "25",
+ "x": "829",
+ "y": "1695",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "實作時間"
+ }
+ },
+ {
+ "ID": "194",
+ "typeID": "Icon",
+ "zOrder": "193",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "795",
+ "y": "1695",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "195",
+ "typeID": "Label",
+ "zOrder": "194",
+ "measuredW": "8",
+ "measuredH": "21",
+ "x": "803",
+ "y": "1697",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "9"
+ }
+ },
+ {
+ "ID": "196",
+ "typeID": "Label",
+ "zOrder": "195",
+ "measuredW": "408",
+ "measuredH": "25",
+ "x": "829",
+ "y": "1722",
+ "properties": {
+ "size": "17",
+ "text": "使用您目前學到的所有內容建立一個簡單的應用程式。"
+ }
+ },
+ {
+ "ID": "197",
+ "typeID": "Label",
+ "zOrder": "196",
+ "measuredW": "428",
+ "measuredH": "25",
+ "x": "829",
+ "y": "1748",
+ "properties": {
+ "size": "17",
+ "text": "它應該要有註冊、登錄和 CRUD。例如建立一個部落格。"
+ }
+ },
+ {
+ "ID": "198",
+ "typeID": "Label",
+ "zOrder": "197",
+ "measuredW": "544",
+ "measuredH": "25",
+ "x": "829",
+ "y": "1774",
+ "properties": {
+ "size": "17",
+ "text": "這個部落格要讓任何人都可以註冊,有個公開的個人頁面可以新增、更新"
+ }
+ },
+ {
+ "ID": "199",
+ "typeID": "Label",
+ "zOrder": "198",
+ "measuredW": "476",
+ "measuredH": "25",
+ "x": "829",
+ "y": "1802",
+ "properties": {
+ "size": "17",
+ "text": "和刪除文章,這個公開頁面還會顯示這些文章是由他們建立的。"
+ }
+ },
+ {
+ "ID": "201",
+ "typeID": "TextArea",
+ "zOrder": "199",
+ "w": "585",
+ "h": "108",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "142",
+ "y": "1754",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "202",
+ "typeID": "Label",
+ "zOrder": "200",
+ "measuredW": "340",
+ "measuredH": "25",
+ "x": "155",
+ "y": "1767",
+ "properties": {
+ "size": "17",
+ "text": "請確保你有撰寫測試、遵循標準和最佳實踐。"
+ }
+ },
+ {
+ "ID": "203",
+ "typeID": "Label",
+ "zOrder": "201",
+ "measuredW": "552",
+ "measuredH": "25",
+ "x": "155",
+ "y": "1793",
+ "properties": {
+ "size": "17",
+ "text": "此外針對資料庫,使用資料前要新增索引(Index)、使用適當的儲存引擎"
+ }
+ },
+ {
+ "ID": "204",
+ "typeID": "Label",
+ "zOrder": "202",
+ "measuredW": "495",
+ "measuredH": "25",
+ "x": "155",
+ "y": "1820",
+ "properties": {
+ "size": "17",
+ "text": "(Storage Engine),並確保分析查詢(analyze the queries)。"
+ }
+ },
+ {
+ "ID": "205",
+ "typeID": "TextArea",
+ "zOrder": "203",
+ "w": "205",
+ "h": "41",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "1135",
+ "y": "361",
+ "properties": {
+ "color": "16770457",
+ "textColor": "16776960"
+ }
+ },
+ {
+ "ID": "206",
+ "typeID": "Label",
+ "zOrder": "204",
+ "w": "175",
+ "measuredW": "155",
+ "measuredH": "25",
+ "x": "1151",
+ "y": "370",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "TypeScript(可選)"
+ }
+ },
+ {
+ "ID": "207",
+ "typeID": "TextArea",
+ "zOrder": "205",
+ "w": "638",
+ "h": "66",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "116",
+ "y": "1878",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "208",
+ "typeID": "Label",
+ "zOrder": "206",
+ "measuredW": "226",
+ "measuredH": "25",
+ "x": "165",
+ "y": "1899",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學習一個框架(Framework)"
+ }
+ },
+ {
+ "ID": "209",
+ "typeID": "Icon",
+ "zOrder": "207",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "131",
+ "y": "1899",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "210",
+ "typeID": "Label",
+ "zOrder": "208",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "136",
+ "y": "1901",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "10"
+ }
+ },
+ {
+ "ID": "211",
+ "typeID": "TextArea",
+ "zOrder": "209",
+ "w": "594",
+ "h": "220",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "791",
+ "y": "1871",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "212",
+ "typeID": "Label",
+ "zOrder": "210",
+ "measuredW": "459",
+ "measuredH": "25",
+ "x": "804",
+ "y": "1884",
+ "properties": {
+ "size": "17",
+ "text": "根據專案和所選語言的不同,你可能需要或可能不需要框架。"
+ }
+ },
+ {
+ "ID": "213",
+ "typeID": "Label",
+ "zOrder": "211",
+ "measuredW": "187",
+ "measuredH": "25",
+ "x": "804",
+ "y": "1912",
+ "properties": {
+ "size": "17",
+ "text": "這裡有幾種不同的選項:"
+ }
+ },
+ {
+ "ID": "214",
+ "typeID": "Label",
+ "zOrder": "212",
+ "measuredW": "480",
+ "measuredH": "25",
+ "x": "804",
+ "y": "1952",
+ "properties": {
+ "size": "17",
+ "text": "*針對 PHP* – &*{color:blue}Laravel{color}*& 或 &*{color:blue}Symfony{color}*&。微框架則是 Slim 或 Lumen"
+ }
+ },
+ {
+ "ID": "215",
+ "typeID": "Label",
+ "zOrder": "213",
+ "measuredW": "279",
+ "measuredH": "25",
+ "x": "804",
+ "y": "1980",
+ "properties": {
+ "size": "17",
+ "text": "*針對 Node.js* – &*{color:blue}Express.js{color}*&、Hapi.js"
+ }
+ },
+ {
+ "ID": "216",
+ "typeID": "Label",
+ "zOrder": "214",
+ "measuredW": "309",
+ "measuredH": "25",
+ "x": "804",
+ "y": "2009",
+ "properties": {
+ "size": "17",
+ "text": "*針對 Golang* – 我傾向不使用框架來撰寫"
+ }
+ },
+ {
+ "ID": "217",
+ "typeID": "Label",
+ "zOrder": "215",
+ "measuredW": "408",
+ "measuredH": "25",
+ "x": "804",
+ "y": "2048",
+ "properties": {
+ "size": "17",
+ "text": "對於其他語言,請搜尋並找出適合你所選語言的框架。"
+ }
+ },
+ {
+ "ID": "218",
+ "typeID": "TextArea",
+ "zOrder": "216",
+ "w": "637",
+ "h": "80",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "116",
+ "y": "1953",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "219",
+ "typeID": "Label",
+ "zOrder": "217",
+ "measuredW": "68",
+ "measuredH": "25",
+ "x": "162",
+ "y": "1966",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "實作時間"
+ }
+ },
+ {
+ "ID": "220",
+ "typeID": "Icon",
+ "zOrder": "218",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "129",
+ "y": "1965",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "221",
+ "typeID": "Label",
+ "zOrder": "219",
+ "measuredW": "11",
+ "measuredH": "21",
+ "x": "135",
+ "y": "1967",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "11"
+ }
+ },
+ {
+ "ID": "222",
+ "typeID": "Label",
+ "zOrder": "220",
+ "measuredW": "374",
+ "measuredH": "25",
+ "x": "161",
+ "y": "1994",
+ "properties": {
+ "size": "17",
+ "text": "使用你選擇的框架寫一些你在 做的應用程式。"
+ }
+ },
+ {
+ "ID": "223",
+ "typeID": "Icon",
+ "zOrder": "221",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "385",
+ "y": "1994",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "224",
+ "typeID": "Label",
+ "zOrder": "222",
+ "measuredW": "8",
+ "measuredH": "21",
+ "x": "393",
+ "y": "1996",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "9"
+ }
+ },
+ {
+ "ID": "225",
+ "typeID": "TextArea",
+ "zOrder": "223",
+ "w": "638",
+ "h": "179",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "116",
+ "y": "2040",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "226",
+ "typeID": "Label",
+ "zOrder": "224",
+ "measuredW": "170",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2058",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學一種 NoSQL 資料庫"
+ }
+ },
+ {
+ "ID": "227",
+ "typeID": "Icon",
+ "zOrder": "225",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "131",
+ "y": "2058",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "228",
+ "typeID": "Label",
+ "zOrder": "226",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "136",
+ "y": "2060",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "12"
+ }
+ },
+ {
+ "ID": "229",
+ "typeID": "Label",
+ "zOrder": "227",
+ "w": "574",
+ "measuredW": "289",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2144",
+ "properties": {
+ "size": "17",
+ "text": "看看不同的選項,看看它們有何不同。"
+ }
+ },
+ {
+ "ID": "230",
+ "typeID": "Label",
+ "zOrder": "228",
+ "w": "574",
+ "measuredW": "306",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2170",
+ "properties": {
+ "size": "17",
+ "text": "如果你必須選擇一個,選擇 *MongoDB*。"
+ }
+ },
+ {
+ "ID": "231",
+ "typeID": "Label",
+ "zOrder": "229",
+ "w": "574",
+ "measuredW": "425",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2091",
+ "properties": {
+ "size": "17",
+ "text": "首先要瞭解它們是什麼、它們與關連式資料庫有何不同、"
+ }
+ },
+ {
+ "ID": "232",
+ "typeID": "Label",
+ "zOrder": "230",
+ "w": "574",
+ "measuredW": "357",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2117",
+ "properties": {
+ "size": "17",
+ "text": "以及為什麼需要它們。這裡有幾種不同的選項。"
+ }
+ },
+ {
+ "ID": "233",
+ "typeID": "TextInput",
+ "zOrder": "231",
+ "w": "185",
+ "measuredW": "103",
+ "measuredH": "32",
+ "x": "1023",
+ "y": "2164",
+ "properties": {
+ "align": "center",
+ "color": "16777215",
+ "size": "18",
+ "text": "Cassandra"
+ }
+ },
+ {
+ "ID": "234",
+ "typeID": "TextInput",
+ "zOrder": "232",
+ "w": "185",
+ "measuredW": "97",
+ "measuredH": "32",
+ "x": "1023",
+ "y": "2123",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "MongoDB"
+ }
+ },
+ {
+ "ID": "235",
+ "typeID": "TextInput",
+ "zOrder": "233",
+ "w": "157",
+ "measuredW": "102",
+ "measuredH": "32",
+ "x": "1215",
+ "y": "2123",
+ "properties": {
+ "align": "center",
+ "color": "16777215",
+ "size": "18",
+ "text": "RethinkDB"
+ }
+ },
+ {
+ "ID": "236",
+ "typeID": "TextInput",
+ "zOrder": "234",
+ "w": "157",
+ "measuredW": "107",
+ "measuredH": "32",
+ "x": "1215",
+ "y": "2163",
+ "properties": {
+ "align": "center",
+ "color": "16777215",
+ "size": "18",
+ "text": "Couchbase"
+ }
+ },
+ {
+ "ID": "237",
+ "typeID": "TextArea",
+ "zOrder": "235",
+ "w": "638",
+ "h": "86",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "750",
+ "y": "2246",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "238",
+ "typeID": "Label",
+ "zOrder": "236",
+ "w": "142",
+ "measuredW": "134",
+ "measuredH": "25",
+ "x": "799",
+ "y": "2263",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "快取(Caching)"
+ }
+ },
+ {
+ "ID": "239",
+ "typeID": "Icon",
+ "zOrder": "237",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "765",
+ "y": "2263",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "240",
+ "typeID": "Label",
+ "zOrder": "238",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "770",
+ "y": "2265",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "13"
+ }
+ },
+ {
+ "ID": "241",
+ "typeID": "Label",
+ "zOrder": "239",
+ "w": "574",
+ "measuredW": "451",
+ "measuredH": "25",
+ "x": "799",
+ "y": "2290",
+ "properties": {
+ "size": "17",
+ "text": "瞭解如何使用 Redis 或 Memcached 實作應用程式級的快取"
+ }
+ },
+ {
+ "ID": "242",
+ "typeID": "TextInput",
+ "zOrder": "240",
+ "w": "183",
+ "measuredW": "116",
+ "measuredH": "32",
+ "x": "472",
+ "y": "2255",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "Memcached"
+ }
+ },
+ {
+ "ID": "243",
+ "typeID": "TextInput",
+ "zOrder": "241",
+ "w": "183",
+ "measuredW": "60",
+ "measuredH": "32",
+ "x": "472",
+ "y": "2291",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "Redis"
+ }
+ },
+ {
+ "ID": "244",
+ "typeID": "Label",
+ "zOrder": "242",
+ "w": "193",
+ "measuredW": "118",
+ "measuredH": "25",
+ "x": "809",
+ "y": "2120",
+ "properties": {
+ "size": "17",
+ "text": "先學 MongoDB"
+ }
+ },
+ {
+ "ID": "245",
+ "typeID": "Label",
+ "zOrder": "243",
+ "w": "200",
+ "measuredW": "102",
+ "measuredH": "25",
+ "x": "809",
+ "y": "2144",
+ "properties": {
+ "size": "17",
+ "text": "但一定要看看"
+ }
+ },
+ {
+ "ID": "246",
+ "typeID": "Label",
+ "zOrder": "244",
+ "w": "190",
+ "measuredW": "170",
+ "measuredH": "25",
+ "x": "809",
+ "y": "2169",
+ "properties": {
+ "size": "17",
+ "text": "它與其他選項的不同處"
+ }
+ },
+ {
+ "ID": "247",
+ "typeID": "TextArea",
+ "zOrder": "245",
+ "w": "638",
+ "h": "142",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "116",
+ "y": "2605",
+ "properties": {
+ "color": "16776960",
+ "text": ""
+ }
+ },
+ {
+ "ID": "248",
+ "typeID": "Label",
+ "zOrder": "246",
+ "w": "247",
+ "measuredW": "243",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2622",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "訊息代理*(Message Broker)"
+ }
+ },
+ {
+ "ID": "249",
+ "typeID": "Icon",
+ "zOrder": "247",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "131",
+ "y": "2622",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "250",
+ "typeID": "Label",
+ "zOrder": "248",
+ "w": "14",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "136",
+ "y": "2624",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "16"
+ }
+ },
+ {
+ "ID": "251",
+ "typeID": "Label",
+ "zOrder": "249",
+ "w": "574",
+ "measuredW": "457",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2651",
+ "properties": {
+ "size": "17",
+ "text": "學習 Message Broker,瞭解「為什麼」,並選擇一個使用。"
+ }
+ },
+ {
+ "ID": "252",
+ "typeID": "TextArea",
+ "zOrder": "250",
+ "w": "299",
+ "h": "109",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "131",
+ "y": "2237",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "253",
+ "typeID": "Label",
+ "zOrder": "251",
+ "w": "258",
+ "measuredW": "119",
+ "measuredH": "25",
+ "x": "148",
+ "y": "2253",
+ "properties": {
+ "size": "17",
+ "text": "一旦你學會了,"
+ }
+ },
+ {
+ "ID": "254",
+ "typeID": "Label",
+ "zOrder": "252",
+ "w": "258",
+ "measuredW": "204",
+ "measuredH": "25",
+ "x": "148",
+ "y": "2277",
+ "properties": {
+ "size": "17",
+ "text": "在步驟 中的應用程式裡"
+ }
+ },
+ {
+ "ID": "255",
+ "typeID": "Label",
+ "zOrder": "253",
+ "w": "258",
+ "measuredW": "102",
+ "measuredH": "25",
+ "x": "147",
+ "y": "2303",
+ "properties": {
+ "size": "17",
+ "text": "實作快取策略"
+ }
+ },
+ {
+ "ID": "256",
+ "typeID": "Label",
+ "zOrder": "254",
+ "w": "574",
+ "measuredW": "401",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2679",
+ "properties": {
+ "size": "17",
+ "text": "雖然有很多選項,但我會選擇 *RabbitMQ* 或 *Kafka*。"
+ }
+ },
+ {
+ "ID": "257",
+ "typeID": "TextInput",
+ "zOrder": "255",
+ "w": "183",
+ "measuredW": "98",
+ "measuredH": "32",
+ "x": "886",
+ "y": "2646",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "RabbitMQ"
+ }
+ },
+ {
+ "ID": "258",
+ "typeID": "TextInput",
+ "zOrder": "256",
+ "w": "183",
+ "measuredW": "63",
+ "measuredH": "32",
+ "x": "886",
+ "y": "2682",
+ "properties": {
+ "align": "center",
+ "color": "16770457",
+ "size": "18",
+ "text": "Kafka"
+ }
+ },
+ {
+ "ID": "259",
+ "typeID": "Label",
+ "zOrder": "257",
+ "w": "574",
+ "measuredW": "306",
+ "measuredH": "25",
+ "x": "165",
+ "y": "2707",
+ "properties": {
+ "size": "17",
+ "text": "如果你想要選擇一個,先學 RabbitMQ。"
+ }
+ },
+ {
+ "ID": "260",
+ "typeID": "TextArea",
+ "zOrder": "258",
+ "w": "638",
+ "h": "143",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "116",
+ "y": "2755",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "261",
+ "typeID": "Label",
+ "zOrder": "259",
+ "w": "297",
+ "measuredW": "287",
+ "measuredH": "25",
+ "x": "164",
+ "y": "2772",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學習一個搜尋引擎(Search Engine)"
+ }
+ },
+ {
+ "ID": "262",
+ "typeID": "Icon",
+ "zOrder": "260",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "131",
+ "y": "2772",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "263",
+ "typeID": "Label",
+ "zOrder": "261",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "136",
+ "y": "2774",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "17"
+ }
+ },
+ {
+ "ID": "264",
+ "typeID": "TextInput",
+ "zOrder": "262",
+ "w": "183",
+ "measuredW": "128",
+ "measuredH": "32",
+ "x": "886",
+ "y": "2771",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "ElasticSearch"
+ }
+ },
+ {
+ "ID": "265",
+ "typeID": "TextInput",
+ "zOrder": "263",
+ "w": "183",
+ "measuredW": "47",
+ "measuredH": "32",
+ "x": "886",
+ "y": "2807",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "Solr"
+ }
+ },
+ {
+ "ID": "266",
+ "typeID": "TextInput",
+ "zOrder": "264",
+ "w": "183",
+ "measuredW": "70",
+ "measuredH": "32",
+ "x": "888",
+ "y": "2843",
+ "properties": {
+ "align": "center",
+ "color": "16770457",
+ "size": "18",
+ "text": "Sphinx"
+ }
+ },
+ {
+ "ID": "267",
+ "typeID": "Label",
+ "zOrder": "265",
+ "w": "574",
+ "measuredW": "442",
+ "measuredH": "25",
+ "x": "164",
+ "y": "2802",
+ "properties": {
+ "size": "17",
+ "text": "隨著應用程式的增長,在你資料庫的簡單查詢將不會停止,"
+ }
+ },
+ {
+ "ID": "268",
+ "typeID": "Label",
+ "zOrder": "266",
+ "w": "574",
+ "measuredW": "221",
+ "measuredH": "25",
+ "x": "164",
+ "y": "2827",
+ "properties": {
+ "size": "17",
+ "text": "你將不得不求助於搜尋引擎。"
+ }
+ },
+ {
+ "ID": "269",
+ "typeID": "Label",
+ "zOrder": "267",
+ "w": "574",
+ "measuredW": "323",
+ "measuredH": "25",
+ "x": "164",
+ "y": "2854",
+ "properties": {
+ "size": "17",
+ "text": "這裡有許多選項,每個都有各自的不同處。"
+ }
+ },
+ {
+ "ID": "270",
+ "typeID": "TextArea",
+ "zOrder": "268",
+ "w": "638",
+ "h": "113",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "753",
+ "y": "2340",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "271",
+ "typeID": "Label",
+ "zOrder": "269",
+ "w": "203",
+ "measuredW": "137",
+ "measuredH": "25",
+ "x": "802",
+ "y": "2357",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "建立 RESTful API"
+ }
+ },
+ {
+ "ID": "272",
+ "typeID": "Icon",
+ "zOrder": "270",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "768",
+ "y": "2357",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "273",
+ "typeID": "Label",
+ "zOrder": "271",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "773",
+ "y": "2359",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "14"
+ }
+ },
+ {
+ "ID": "274",
+ "typeID": "Label",
+ "zOrder": "272",
+ "w": "574",
+ "measuredW": "326",
+ "measuredH": "25",
+ "x": "803",
+ "y": "2386",
+ "properties": {
+ "size": "17",
+ "text": "瞭解 REST 並學習如何製作 RESTful API,"
+ }
+ },
+ {
+ "ID": "275",
+ "typeID": "Label",
+ "zOrder": "273",
+ "w": "574",
+ "measuredW": "472",
+ "measuredH": "25",
+ "x": "803",
+ "y": "2410",
+ "properties": {
+ "size": "17",
+ "text": "並確保從 *Roy Fielding* 的原始論文中閱讀有關 REST 的部分。"
+ }
+ },
+ {
+ "ID": "276",
+ "typeID": "TextArea",
+ "zOrder": "274",
+ "w": "638",
+ "h": "87",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "754",
+ "y": "2460",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "277",
+ "typeID": "Label",
+ "zOrder": "275",
+ "w": "568",
+ "measuredW": "413",
+ "measuredH": "25",
+ "x": "805",
+ "y": "2477",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "認證(Authentication)、授權(Authorization)方法"
+ }
+ },
+ {
+ "ID": "278",
+ "typeID": "Icon",
+ "zOrder": "276",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "771",
+ "y": "2477",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "279",
+ "typeID": "Label",
+ "zOrder": "277",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "776",
+ "y": "2479",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "15"
+ }
+ },
+ {
+ "ID": "280",
+ "typeID": "Label",
+ "zOrder": "278",
+ "w": "495",
+ "measuredW": "306",
+ "measuredH": "25",
+ "x": "804",
+ "y": "2508",
+ "properties": {
+ "size": "17",
+ "text": "瞭解他們之間的差異,以及如何實作它們"
+ }
+ },
+ {
+ "ID": "281",
+ "typeID": "TextInput",
+ "zOrder": "279",
+ "w": "210",
+ "measuredW": "66",
+ "measuredH": "32",
+ "x": "386",
+ "y": "2400",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "OAuth"
+ }
+ },
+ {
+ "ID": "282",
+ "typeID": "TextInput",
+ "zOrder": "280",
+ "w": "210",
+ "measuredW": "187",
+ "measuredH": "32",
+ "x": "386",
+ "y": "2436",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "Basic Authentication"
+ }
+ },
+ {
+ "ID": "283",
+ "typeID": "TextInput",
+ "zOrder": "281",
+ "w": "210",
+ "measuredW": "192",
+ "measuredH": "32",
+ "x": "386",
+ "y": "2472",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "Token Authentication"
+ }
+ },
+ {
+ "ID": "284",
+ "typeID": "TextInput",
+ "zOrder": "282",
+ "w": "210",
+ "measuredW": "51",
+ "measuredH": "32",
+ "x": "386",
+ "y": "2508",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "JWT"
+ }
+ },
+ {
+ "ID": "285",
+ "typeID": "TextInput",
+ "zOrder": "283",
+ "w": "210",
+ "measuredW": "75",
+ "measuredH": "32",
+ "x": "387",
+ "y": "2545",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "OpenID"
+ }
+ },
+ {
+ "ID": "286",
+ "typeID": "TextArea",
+ "zOrder": "284",
+ "w": "638",
+ "h": "60",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "738",
+ "y": "2914",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "287",
+ "typeID": "Label",
+ "zOrder": "285",
+ "w": "280",
+ "measuredW": "165",
+ "measuredH": "25",
+ "x": "788",
+ "y": "2930",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學習如何使用 Docker"
+ }
+ },
+ {
+ "ID": "288",
+ "typeID": "Icon",
+ "zOrder": "286",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "755",
+ "y": "2929",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "289",
+ "typeID": "Label",
+ "zOrder": "287",
+ "w": "14",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "760",
+ "y": "2931",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "18"
+ }
+ },
+ {
+ "ID": "290",
+ "typeID": "TextArea",
+ "zOrder": "288",
+ "w": "638",
+ "h": "112",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "738",
+ "y": "3170",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "291",
+ "typeID": "Label",
+ "zOrder": "289",
+ "w": "153",
+ "measuredW": "112",
+ "measuredH": "25",
+ "x": "788",
+ "y": "3185",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學習 GraphQL"
+ }
+ },
+ {
+ "ID": "292",
+ "typeID": "Icon",
+ "zOrder": "290",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "755",
+ "y": "3184",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "293",
+ "typeID": "Label",
+ "zOrder": "291",
+ "w": "14",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "760",
+ "y": "3186",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "21"
+ }
+ },
+ {
+ "ID": "294",
+ "typeID": "Label",
+ "zOrder": "292",
+ "w": "574",
+ "measuredW": "323",
+ "measuredH": "25",
+ "x": "788",
+ "y": "3213",
+ "properties": {
+ "size": "17",
+ "text": "雖然這不是必需的,但請隨時抽空看看它,"
+ }
+ },
+ {
+ "ID": "295",
+ "typeID": "Label",
+ "zOrder": "293",
+ "w": "574",
+ "measuredW": "338",
+ "measuredH": "25",
+ "x": "788",
+ "y": "3240",
+ "properties": {
+ "size": "17",
+ "text": "看看它是什麼,為什麼他們叫它新的 REST。"
+ }
+ },
+ {
+ "ID": "296",
+ "typeID": "TextArea",
+ "zOrder": "294",
+ "w": "638",
+ "h": "114",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "738",
+ "y": "2981",
+ "properties": {
+ "color": "16776960",
+ "text": ""
+ }
+ },
+ {
+ "ID": "297",
+ "typeID": "Label",
+ "zOrder": "295",
+ "w": "298",
+ "measuredW": "280",
+ "measuredH": "25",
+ "x": "789",
+ "y": "2998",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "對網頁伺服器(Web Server)的瞭解"
+ }
+ },
+ {
+ "ID": "298",
+ "typeID": "Icon",
+ "zOrder": "296",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "755",
+ "y": "2996",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "299",
+ "typeID": "Label",
+ "zOrder": "297",
+ "w": "14",
+ "measuredW": "13",
+ "measuredH": "21",
+ "x": "760",
+ "y": "2998",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "19"
+ }
+ },
+ {
+ "ID": "300",
+ "typeID": "Label",
+ "zOrder": "298",
+ "w": "566",
+ "measuredW": "357",
+ "measuredH": "25",
+ "x": "789",
+ "y": "3026",
+ "properties": {
+ "size": "17",
+ "text": "這裡有幾個不同的選項,看看這些不同的選項,"
+ }
+ },
+ {
+ "ID": "301",
+ "typeID": "Label",
+ "zOrder": "299",
+ "w": "566",
+ "measuredW": "187",
+ "measuredH": "25",
+ "x": "789",
+ "y": "3053",
+ "properties": {
+ "size": "17",
+ "text": "瞭解它們的差異和局限。"
+ }
+ },
+ {
+ "ID": "302",
+ "typeID": "TextInput",
+ "zOrder": "300",
+ "w": "183",
+ "measuredW": "76",
+ "measuredH": "32",
+ "x": "403",
+ "y": "2971",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "Apache"
+ }
+ },
+ {
+ "ID": "303",
+ "typeID": "TextInput",
+ "zOrder": "301",
+ "w": "183",
+ "measuredW": "61",
+ "measuredH": "32",
+ "x": "403",
+ "y": "3007",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "Nginx"
+ }
+ },
+ {
+ "ID": "304",
+ "typeID": "TextInput",
+ "zOrder": "302",
+ "w": "183",
+ "measuredW": "67",
+ "measuredH": "32",
+ "x": "405",
+ "y": "3043",
+ "properties": {
+ "align": "center",
+ "color": "16770457",
+ "size": "18",
+ "text": "Caddy"
+ }
+ },
+ {
+ "ID": "305",
+ "typeID": "TextInput",
+ "zOrder": "303",
+ "w": "183",
+ "measuredW": "67",
+ "measuredH": "32",
+ "x": "405",
+ "y": "3080",
+ "properties": {
+ "align": "center",
+ "color": "16770457",
+ "size": "18",
+ "text": "MS IIS"
+ }
+ },
+ {
+ "ID": "306",
+ "typeID": "TextArea",
+ "zOrder": "304",
+ "w": "638",
+ "h": "60",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "739",
+ "y": "3102",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "307",
+ "typeID": "Label",
+ "zOrder": "305",
+ "w": "282",
+ "measuredW": "205",
+ "measuredH": "25",
+ "x": "787",
+ "y": "3119",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "學習如何使用 Web Socket"
+ }
+ },
+ {
+ "ID": "308",
+ "typeID": "Icon",
+ "zOrder": "306",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "754",
+ "y": "3118",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "309",
+ "typeID": "Label",
+ "zOrder": "307",
+ "w": "21",
+ "measuredW": "16",
+ "measuredH": "21",
+ "x": "758",
+ "y": "3120",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "20"
+ }
+ },
+ {
+ "ID": "310",
+ "typeID": "TextArea",
+ "zOrder": "308",
+ "w": "638",
+ "h": "112",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "216",
+ "y": "3313",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "311",
+ "typeID": "Label",
+ "zOrder": "309",
+ "w": "295",
+ "measuredW": "284",
+ "measuredH": "25",
+ "x": "266",
+ "y": "3328",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "研究圖片資料庫(Graph Database)"
+ }
+ },
+ {
+ "ID": "312",
+ "typeID": "Icon",
+ "zOrder": "310",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "233",
+ "y": "3327",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "313",
+ "typeID": "Label",
+ "zOrder": "311",
+ "w": "29",
+ "measuredW": "16",
+ "measuredH": "21",
+ "x": "237",
+ "y": "3329",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "22"
+ }
+ },
+ {
+ "ID": "314",
+ "typeID": "Label",
+ "zOrder": "312",
+ "w": "574",
+ "measuredW": "153",
+ "measuredH": "25",
+ "x": "266",
+ "y": "3356",
+ "properties": {
+ "size": "17",
+ "text": "這同樣不是必要的,"
+ }
+ },
+ {
+ "ID": "315",
+ "typeID": "Label",
+ "zOrder": "313",
+ "w": "574",
+ "measuredW": "340",
+ "measuredH": "25",
+ "x": "266",
+ "y": "3383",
+ "properties": {
+ "size": "17",
+ "text": "但你應該要有一點瞭解它們提供了什麼功能。"
+ }
+ },
+ {
+ "ID": "316",
+ "typeID": "Arrow",
+ "zOrder": "314",
+ "w": "15",
+ "h": "147",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "537",
+ "y": "3448",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 14,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5864611260053622,
+ "y": 0.008042895442359291
+ },
+ "p2": {
+ "x": 0,
+ "y": 146
+ },
+ "rightArrow": "false",
+ "shape": "bezier"
+ }
+ },
+ {
+ "ID": "317",
+ "typeID": "Label",
+ "zOrder": "315",
+ "measuredW": "96",
+ "measuredH": "32",
+ "x": "489",
+ "y": "3618",
+ "properties": {
+ "bold": "true",
+ "size": "24",
+ "text": "繼續探索"
+ }
+ },
+ {
+ "ID": "318",
+ "typeID": "TextArea",
+ "zOrder": "316",
+ "w": "637",
+ "h": "106",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "216",
+ "y": "3436",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "319",
+ "typeID": "Icon",
+ "zOrder": "317",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "230",
+ "y": "3450",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "320",
+ "typeID": "Label",
+ "zOrder": "318",
+ "w": "20",
+ "measuredW": "17",
+ "measuredH": "22",
+ "x": "234",
+ "y": "3452",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "size": "14",
+ "text": "23"
+ }
+ },
+ {
+ "ID": "321",
+ "typeID": "Label",
+ "zOrder": "319",
+ "w": "391",
+ "measuredW": "198",
+ "measuredH": "26",
+ "x": "261",
+ "y": "3449",
+ "properties": {
+ "bold": "true",
+ "size": "18",
+ "text": "所有上面沒有提到的事情"
+ }
+ },
+ {
+ "ID": "322",
+ "typeID": "Label",
+ "zOrder": "320",
+ "measuredW": "419",
+ "measuredH": "25",
+ "x": "262",
+ "y": "3476",
+ "properties": {
+ "size": "17",
+ "text": "效能分析(Profiling)、靜態分析(Static Analysis)、"
+ }
+ },
+ {
+ "ID": "323",
+ "typeID": "Icon",
+ "zOrder": "321",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "202",
+ "y": "2277",
+ "properties": {
+ "color": "10027263",
+ "icon": {
+ "ID": "circle",
+ "size": "small"
+ }
+ }
+ },
+ {
+ "ID": "324",
+ "typeID": "Label",
+ "zOrder": "322",
+ "measuredW": "11",
+ "measuredH": "21",
+ "x": "208",
+ "y": "2279",
+ "properties": {
+ "bold": "true",
+ "color": "16777215",
+ "text": "11"
+ }
+ },
+ {
+ "ID": "325",
+ "typeID": "Label",
+ "zOrder": "323",
+ "measuredW": "440",
+ "measuredH": "25",
+ "x": "994",
+ "y": "70",
+ "properties": {
+ "bold": "true",
+ "color": "10027263",
+ "size": "17",
+ "text": "goodjack/developer-roadmap-chinese(台灣正體中文)"
+ }
+ },
+ {
+ "ID": "327",
+ "typeID": "Label",
+ "zOrder": "324",
+ "measuredW": "245",
+ "measuredH": "25",
+ "x": "995",
+ "y": "122",
+ "properties": {
+ "bold": "true",
+ "color": "10027263",
+ "size": "17",
+ "text": "littlegoodjack(台灣正體中文)"
+ }
+ },
+ {
+ "ID": "328",
+ "typeID": "Paragraph",
+ "zOrder": "325",
+ "w": "144",
+ "h": "19",
+ "measuredW": "275",
+ "measuredH": "80",
+ "x": "604",
+ "y": "2722",
+ "properties": {
+ "text": "*譯註:又譯為訊息仲介"
+ }
+ },
+ {
+ "ID": "329",
+ "typeID": "Label",
+ "zOrder": "326",
+ "measuredW": "541",
+ "measuredH": "25",
+ "x": "262",
+ "y": "3502",
+ "properties": {
+ "size": "17",
+ "text": "、領域驅動設計(DDD)、簡單物件存取協定(SOAP)。去弄懂它吧!"
+ }
+ }
+ ]
+ },
+ "mockupH": "3610",
+ "mockupW": "1326",
+ "measuredW": "1434",
+ "measuredH": "3650",
+ "version": "1.0"
+ }
+}
\ No newline at end of file
diff --git a/chinese-version/project/disclaimer.json b/chinese-version/project/disclaimer.json
new file mode 100644
index 000000000..cb1855eea
--- /dev/null
+++ b/chinese-version/project/disclaimer.json
@@ -0,0 +1,106 @@
+{
+ "mockup": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "TextArea",
+ "zOrder": "0",
+ "w": "911",
+ "h": "274",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "223",
+ "y": "170",
+ "properties": {
+ "color": "16777215"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "160",
+ "measuredH": "40",
+ "x": "245",
+ "y": "190",
+ "properties": {
+ "bold": "true",
+ "size": "32",
+ "text": "免責聲明!"
+ }
+ },
+ {
+ "ID": "2",
+ "typeID": "Label",
+ "zOrder": "2",
+ "measuredW": "384",
+ "measuredH": "32",
+ "x": "245",
+ "y": "246",
+ "properties": {
+ "size": "24",
+ "text": "這個路線圖的目的是給你一個輪廓,"
+ }
+ },
+ {
+ "ID": "3",
+ "typeID": "Label",
+ "zOrder": "3",
+ "measuredW": "456",
+ "measuredH": "32",
+ "x": "245",
+ "y": "282",
+ "properties": {
+ "size": "24",
+ "text": "並在你困惑接下來該學什麼的時候指導你。"
+ }
+ },
+ {
+ "ID": "4",
+ "typeID": "Label",
+ "zOrder": "4",
+ "measuredW": "408",
+ "measuredH": "32",
+ "x": "245",
+ "y": "317",
+ "properties": {
+ "size": "24",
+ "text": "而不是鼓勵你學習很潮很流行的東西。"
+ }
+ },
+ {
+ "ID": "5",
+ "typeID": "Label",
+ "zOrder": "5",
+ "measuredW": "799",
+ "measuredH": "32",
+ "x": "245",
+ "y": "353",
+ "properties": {
+ "size": "24",
+ "text": "你應該要 *更加了解,為什麼某個工具會比其他的工具更適合用在一些情況*,"
+ }
+ },
+ {
+ "ID": "6",
+ "typeID": "Label",
+ "zOrder": "6",
+ "measuredW": "648",
+ "measuredH": "32",
+ "x": "245",
+ "y": "389",
+ "properties": {
+ "size": "24",
+ "text": "*並記住潮和流行,從來就不代表它是最適合完成任務的工具*。"
+ }
+ }
+ ]
+ },
+ "mockupH": "274",
+ "mockupW": "911",
+ "measuredW": "1134",
+ "measuredH": "444",
+ "version": "1.0"
+ }
+}
\ No newline at end of file
diff --git a/chinese-version/project/intro-map.json b/chinese-version/project/intro-map.json
new file mode 100644
index 000000000..9c6e886e6
--- /dev/null
+++ b/chinese-version/project/intro-map.json
@@ -0,0 +1,572 @@
+{
+ "mockup": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Label",
+ "zOrder": "0",
+ "measuredW": "328",
+ "measuredH": "40",
+ "x": "450",
+ "y": "74",
+ "properties": {
+ "bold": "true",
+ "size": "32",
+ "text": "2018 的 Web 開發人員"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Arrow",
+ "zOrder": "1",
+ "w": "56",
+ "h": "129",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "633",
+ "y": "230",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4809160305343512,
+ "y": 0.198473282442748
+ },
+ "p2": {
+ "x": 49,
+ "y": 127
+ },
+ "shape": "bezier"
+ }
+ },
+ {
+ "ID": "2",
+ "typeID": "Arrow",
+ "zOrder": "2",
+ "w": "133",
+ "h": "131",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "468",
+ "y": "229",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 131,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5684088130944218,
+ "y": -0.21788259145523384
+ },
+ "p2": {
+ "x": 1,
+ "y": 129
+ },
+ "shape": "bezier"
+ }
+ },
+ {
+ "ID": "3",
+ "typeID": "TextInput",
+ "zOrder": "3",
+ "w": "138",
+ "measuredW": "134",
+ "measuredH": "32",
+ "x": "391",
+ "y": "367",
+ "properties": {
+ "align": "center",
+ "color": "16767334",
+ "size": "18",
+ "text": "前端 Front-end"
+ }
+ },
+ {
+ "ID": "4",
+ "typeID": "Label",
+ "zOrder": "4",
+ "measuredW": "120",
+ "measuredH": "28",
+ "x": "555",
+ "y": "189",
+ "properties": {
+ "bold": "true",
+ "size": "20",
+ "text": "選擇你的路徑"
+ }
+ },
+ {
+ "ID": "5",
+ "typeID": "TextInput",
+ "zOrder": "5",
+ "w": "258",
+ "measuredW": "127",
+ "measuredH": "32",
+ "x": "68",
+ "y": "81",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "Git - 版本控制"
+ }
+ },
+ {
+ "ID": "6",
+ "typeID": "TextInput",
+ "zOrder": "6",
+ "w": "259",
+ "measuredW": "50",
+ "measuredH": "32",
+ "x": "67",
+ "y": "116",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "SSH"
+ }
+ },
+ {
+ "ID": "7",
+ "typeID": "TextInput",
+ "zOrder": "7",
+ "w": "259",
+ "measuredW": "196",
+ "measuredH": "32",
+ "x": "67",
+ "y": "153",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "HTTP/HTTPS 和 APIs"
+ }
+ },
+ {
+ "ID": "8",
+ "typeID": "Label",
+ "zOrder": "8",
+ "measuredW": "119",
+ "measuredH": "25",
+ "x": "67",
+ "y": "45",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "任何路徑都需要"
+ }
+ },
+ {
+ "ID": "9",
+ "typeID": "TextInput",
+ "zOrder": "9",
+ "w": "259",
+ "measuredW": "158",
+ "measuredH": "32",
+ "x": "67",
+ "y": "191",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "基本終端機的使用"
+ }
+ },
+ {
+ "ID": "10",
+ "typeID": "Label",
+ "zOrder": "10",
+ "measuredW": "34",
+ "measuredH": "25",
+ "x": "926",
+ "y": "41",
+ "properties": {
+ "bold": "true",
+ "size": "17",
+ "text": "圖例"
+ }
+ },
+ {
+ "ID": "11",
+ "typeID": "TextInput",
+ "zOrder": "11",
+ "w": "240",
+ "measuredW": "104",
+ "measuredH": "32",
+ "x": "926",
+ "y": "84",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "個人推薦!"
+ }
+ },
+ {
+ "ID": "12",
+ "typeID": "TextInput",
+ "zOrder": "12",
+ "w": "240",
+ "measuredW": "104",
+ "measuredH": "32",
+ "x": "926",
+ "y": "120",
+ "properties": {
+ "align": "center",
+ "color": "15658734",
+ "size": "18",
+ "text": "可能的選項"
+ }
+ },
+ {
+ "ID": "13",
+ "typeID": "TextInput",
+ "zOrder": "13",
+ "w": "240",
+ "measuredW": "104",
+ "measuredH": "32",
+ "x": "926",
+ "y": "156",
+ "properties": {
+ "align": "center",
+ "color": "16770457",
+ "size": "18",
+ "text": "任選一個!"
+ }
+ },
+ {
+ "ID": "14",
+ "typeID": "Arrow",
+ "zOrder": "14",
+ "w": "1",
+ "h": "47",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "614",
+ "y": "135",
+ "properties": {
+ "color": "6710886",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5,
+ "y": 0
+ },
+ "p2": {
+ "x": 0,
+ "y": 46
+ },
+ "rightArrow": "false",
+ "shape": "bezier"
+ }
+ },
+ {
+ "ID": "15",
+ "typeID": "TextInput",
+ "zOrder": "15",
+ "w": "132",
+ "measuredW": "132",
+ "measuredH": "32",
+ "x": "595",
+ "y": "368",
+ "properties": {
+ "align": "center",
+ "color": "16767334",
+ "size": "18",
+ "text": "後端 Back-end"
+ }
+ },
+ {
+ "ID": "16",
+ "typeID": "Arrow",
+ "zOrder": "16",
+ "w": "1",
+ "h": "70",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "459",
+ "y": "407",
+ "properties": {
+ "color": "2848996",
+ "curvature": "0",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5621504039776257,
+ "y": 0.004661280298321849
+ },
+ "p2": {
+ "x": 0,
+ "y": 69
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "17",
+ "typeID": "Arrow",
+ "zOrder": "17",
+ "w": "123",
+ "h": "12",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "731",
+ "y": "373",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "direction": "bottom",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 11
+ },
+ "p1": {
+ "x": 0.45357350377687367,
+ "y": 0.059732713538640264
+ },
+ "p2": {
+ "x": 122,
+ "y": 4
+ },
+ "shape": "bezier",
+ "stroke": "solid"
+ }
+ },
+ {
+ "ID": "18",
+ "typeID": "TextInput",
+ "zOrder": "18",
+ "w": "112",
+ "measuredW": "80",
+ "measuredH": "32",
+ "x": "866",
+ "y": "361",
+ "properties": {
+ "align": "center",
+ "color": "16767334",
+ "size": "18",
+ "text": "DevOps"
+ }
+ },
+ {
+ "ID": "19",
+ "typeID": "Arrow",
+ "zOrder": "19",
+ "w": "1",
+ "h": "70",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "649",
+ "y": "410",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4608695652173913,
+ "y": 0.01304347826086956
+ },
+ "p2": {
+ "x": 0,
+ "y": 69
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "20",
+ "typeID": "Arrow",
+ "zOrder": "20",
+ "w": "1",
+ "h": "77",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "917",
+ "y": "403",
+ "properties": {
+ "color": "2848996",
+ "curvature": "1",
+ "direction": "top",
+ "leftArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4537465672812867,
+ "y": 0.01247548058061985
+ },
+ "p2": {
+ "x": 0,
+ "y": 76
+ },
+ "rightArrow": "false",
+ "shape": "bezier",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "21",
+ "typeID": "TextInput",
+ "zOrder": "21",
+ "w": "258",
+ "measuredW": "122",
+ "measuredH": "32",
+ "x": "68",
+ "y": "228",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "學習研究方法"
+ }
+ },
+ {
+ "ID": "22",
+ "typeID": "TextArea",
+ "zOrder": "22",
+ "w": "258",
+ "h": "121",
+ "measuredW": "200",
+ "measuredH": "140",
+ "x": "68",
+ "y": "398",
+ "properties": {
+ "color": "15658734",
+ "text": " \n建立一個個人檔案。\n探索有關的開源專案。\n養成習慣深入瞭解你喜歡的專案。\n建立和貢獻開源專案。"
+ }
+ },
+ {
+ "ID": "23",
+ "typeID": "TextInput",
+ "zOrder": "23",
+ "w": "258",
+ "measuredW": "69",
+ "measuredH": "32",
+ "x": "68",
+ "y": "373",
+ "properties": {
+ "align": "center",
+ "borderStyle": "rectangle",
+ "color": "16776960",
+ "size": "18",
+ "text": "GitHub"
+ }
+ },
+ {
+ "ID": "24",
+ "typeID": "TextInput",
+ "zOrder": "24",
+ "w": "258",
+ "measuredW": "158",
+ "measuredH": "32",
+ "x": "68",
+ "y": "265",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "資料結構和演算法"
+ }
+ },
+ {
+ "ID": "25",
+ "typeID": "TextInput",
+ "zOrder": "25",
+ "w": "258",
+ "measuredW": "86",
+ "measuredH": "32",
+ "x": "68",
+ "y": "301",
+ "properties": {
+ "align": "center",
+ "color": "16776960",
+ "size": "18",
+ "text": "字元編碼"
+ }
+ },
+ {
+ "ID": "26",
+ "typeID": "Icon",
+ "zOrder": "26",
+ "measuredW": "32",
+ "measuredH": "32",
+ "x": "926",
+ "y": "200",
+ "properties": {
+ "color": "2848996",
+ "icon": {
+ "ID": "circle",
+ "size": "medium"
+ }
+ }
+ },
+ {
+ "ID": "27",
+ "typeID": "Label",
+ "zOrder": "27",
+ "measuredW": "160",
+ "measuredH": "28",
+ "x": "964",
+ "y": "203",
+ "properties": {
+ "size": "20",
+ "text": "現在建立一些東西"
+ }
+ },
+ {
+ "ID": "28",
+ "typeID": "TextInput",
+ "zOrder": "28",
+ "w": "258",
+ "measuredW": "86",
+ "measuredH": "32",
+ "x": "68",
+ "y": "337",
+ "properties": {
+ "align": "center",
+ "color": "15658734",
+ "size": "18",
+ "text": "設計模式"
+ }
+ }
+ ]
+ },
+ "mockupH": "478",
+ "mockupW": "1099",
+ "measuredW": "1166",
+ "measuredH": "519",
+ "version": "1.0"
+ }
+}
\ No newline at end of file
diff --git a/readme-eng.md b/readme-eng.md
new file mode 100644
index 000000000..b2f0ccec8
--- /dev/null
+++ b/readme-eng.md
@@ -0,0 +1,61 @@
+
+
+> Roadmap to becoming a web developer in 2018
+
+Below you find a set of charts demonstrating the paths that you can take and the technologies that you would want to adopt in order to become a frontend, backend or a devops. I made these charts for an old professor of mine who wanted something to share with his college students to give them a perspective.
+
+If you think that these can be improved in anyway, please do suggest.
+
+
+
+
+
-
+