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 @@ +![Web Developer Roadmap](https://i.imgur.com/oxsayps.png) + +> 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. + +
+

+ +

+
+ +Check out my [blog](http://kamranahmed.info) and say "hi" on [Twitter](https://twitter.com/kamranahmedse). + +## 🚀 Introduction + +![](https://i.imgur.com/OZUOUtI.png) + +## 🎨 Frontend Roadmap + +![](./images/frontend-v2.png) + +## 👽 Back-end Roadmap + +![](./images/backend.png) + +## 👷 DevOps Roadmap + +![](https://i.imgur.com/pyg9mH1.png) + +## 🚦 Wrap Up + +If you think any of the roadmaps can be improved, please do open a PR with any updates and submit any issues. Also, I will continue to improve this, so you might want to watch/star this repository to revisit. + +## ☑ TODO + +- [X] Add Frontend Roadmap +- [X] Add Backend Roadmap +- [X] Add DevOps Roadmap +- [ ] Add relevant resources for each + +## 👬 Contribution + +The roadmaps are built using [Balsamiq](https://balsamiq.com/products/mockups/). Project file can be found at `/project` directory. To modify any of the roadmaps, open Balsamiq, click **Project > Import > Mockup JSON**, it will open the roadmap for you, update it, upload and update the images in readme and create a PR. + +- Open pull request with improvements +- Discuss ideas in issues +- Spread the word +- Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/kamranahmedse.svg?style=social&label=Follow%20%40kamranahmedse)](https://twitter.com/kamranahmedse) + +## Sponsored By + +- [Hackr.io - Find & Share the Best Online Programming Courses & Tutorials](https://hackr.io) +- [Highig - Think and its done](http://highig.com/) + +## License + + +[![License: CC BY 4.0](https://img.shields.io/badge/License-CC0%201.0-brightgreen.svg?style=flat-square)](https://creativecommons.org/licenses/by/4.0/) diff --git a/readme.md b/readme.md index b2f0ccec8..1f08a16da 100644 --- a/readme.md +++ b/readme.md @@ -1,61 +1,65 @@ ![Web Developer Roadmap](https://i.imgur.com/oxsayps.png) -> Roadmap to becoming a web developer in 2018 +> 2018 年成為 Web 開發人員的路線圖 -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. +在下方,你會看到一系列的圖表,展示為了成為前端、後端或 DevOps 開發人員,你可以採取的路徑和你會想採用的技術。我為我的一位老教授做了這些圖表,他想和大學生分享一些東西,給他們一個視角。 -If you think that these can be improved in anyway, please do suggest. +如果你認為這些內容有任何方式可以改進,請提供建議。

- +


-Check out my [blog](http://kamranahmed.info) and say "hi" on [Twitter](https://twitter.com/kamranahmedse). +看看我的[部落格](http://kamranahmed.info),然後來 [Twitter](https://twitter.com/kamranahmedse) 說聲 "hi"。 +(譯註:也歡迎來逛逛我的[部落格](http://goodjack.blogspot.com/),然後來 [Twitter](https://twitter.com/littlegoodjack) 打個招呼 :P) -## 🚀 Introduction +## 🚀 介紹 -![](https://i.imgur.com/OZUOUtI.png) +![](./chinese-version/images/intro.png) -## 🎨 Frontend Roadmap +## 🎨 前端 Frontend 路線圖 +> 譯註:尚未翻譯完成... ![](./images/frontend-v2.png) -## 👽 Back-end Roadmap +## 👽 後端 Back-end 路線圖 -![](./images/backend.png) +![](./chinese-version/images/backend.png) -## 👷 DevOps Roadmap +## 👷 DevOps 路線圖 +> 譯註:尚未翻譯完成... ![](https://i.imgur.com/pyg9mH1.png) -## 🚦 Wrap Up +## 🚦 總結 -If you think any of the roadmaps can be improved, please do open a PR with any updates and submit any issues. Also, I will continue to improve this, so you might want to watch/star this repository to revisit. +如果你認為路線圖有可以改進的地方,請更新並開個 PR 或是送出 issue。另外,我也會繼續改進這個專案,所以你可能會想要 watch 或 star 這個專案以便再來觀看。 ## ☑ TODO -- [X] Add Frontend Roadmap -- [X] Add Backend Roadmap -- [X] Add DevOps Roadmap -- [ ] Add relevant resources for each +- [X] 新增前端 Frontend 路線圖 +- [X] 新增後端 Backend 路線圖 +- [X] 新增 DevOps 路線圖 +- [ ] 為每個項目新增相關的資源 -## 👬 Contribution +## 👬 貢獻 -The roadmaps are built using [Balsamiq](https://balsamiq.com/products/mockups/). Project file can be found at `/project` directory. To modify any of the roadmaps, open Balsamiq, click **Project > Import > Mockup JSON**, it will open the roadmap for you, update it, upload and update the images in readme and create a PR. +這些路線圖是用 [Balsamiq](https://balsamiq.com/products/mockups/) 建構的。專案文件可以在 `/project` 目錄中找到。要修改任何路線圖, 請打開 Balsamiq,點選 **Project > Import > Mockup JSON**,它就會幫你開啟路線圖,更新他,在 readme 中上傳和更新這些圖片,並開啟一個 PR。 -- Open pull request with improvements -- Discuss ideas in issues -- Spread the word -- Reach out with any feedback [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/kamranahmedse.svg?style=social&label=Follow%20%40kamranahmedse)](https://twitter.com/kamranahmedse) +- 改進並開啟 Pull Request +- 在 Issue 中討論想法 +- 分享出去 +- 接受任何意見回饋 [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/kamranahmedse.svg?style=social&label=Follow%20%40kamranahmedse)](https://twitter.com/kamranahmedse) +- (關於中文翻譯)接受任何意見回饋 [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/littlegoodjack.svg?style=social&label=Follow%20@littlegoodjack)](https://twitter.com/littlegoodjack) ## Sponsored By - [Hackr.io - Find & Share the Best Online Programming Courses & Tutorials](https://hackr.io) - [Highig - Think and its done](http://highig.com/) -## License +## 授權條款 [![License: CC BY 4.0](https://img.shields.io/badge/License-CC0%201.0-brightgreen.svg?style=flat-square)](https://creativecommons.org/licenses/by/4.0/)