diff --git a/content/roadmaps.json b/content/roadmaps.json
index 84cd63fc1..08db94487 100644
--- a/content/roadmaps.json
+++ b/content/roadmaps.json
@@ -37,9 +37,10 @@
},
"featured": true,
"imagePath": "/roadmaps/frontend.png",
- "resourcesPath": "/roadmaps/1-frontend/resources.md",
+ "resourcesPath": "/roadmaps/100-frontend/resources.md",
"pdfUrl": "https://kamranahmedse.gumroad.com/l/frontend-roadmap",
"id": "frontend",
+ "metaPath": "/roadmaps/100-frontend/meta.json",
"isUpcoming": false
},
{
@@ -76,13 +77,14 @@
"featuredDescription": "Step by step guide to becoming a backend developer in 2021",
"featured": true,
"imagePath": "/roadmaps/backend.png",
- "resourcesPath": "/roadmaps/2-backend/resources.md",
+ "resourcesPath": "/roadmaps/101-backend/resources.md",
"author": {
"name": "Kamran Ahmed",
"url": "https://twitter.com/kamranahmedse"
},
"pdfUrl": "https://kamranahmedse.gumroad.com/l/backend-roadmap",
"id": "backend",
+ "metaPath": "/roadmaps/101-backend/meta.json",
"isUpcoming": false
},
{
@@ -113,7 +115,7 @@
"featuredDescription": "Step by step guide for DevOps or operations role in 2021",
"featured": true,
"imagePath": "/roadmaps/devops.png",
- "resourcesPath": "/roadmaps/3-devops/resources.md",
+ "resourcesPath": "/roadmaps/102-devops/resources.md",
"versions": [
"latest",
"2018",
@@ -125,6 +127,7 @@
},
"pdfUrl": "https://kamranahmedse.gumroad.com/l/devops-roadmap",
"id": "devops",
+ "metaPath": "/roadmaps/102-devops/meta.json",
"isUpcoming": false
},
{
@@ -152,8 +155,8 @@
"isTextHeavy": false,
"isCommunity": false,
"featured": true,
- "contentPath": "/roadmaps/4-react/landscape.md",
- "resourcesPath": "/roadmaps/4-react/resources.md",
+ "contentPath": "/roadmaps/103-react/landscape.md",
+ "resourcesPath": "/roadmaps/103-react/resources.md",
"versions": [
"latest",
"2018",
@@ -165,6 +168,7 @@
},
"pdfUrl": "https://kamranahmedse.gumroad.com/l/react-roadmap",
"id": "react",
+ "metaPath": "/roadmaps/103-react/meta.json",
"isUpcoming": false
},
{
@@ -192,8 +196,8 @@
"isTextHeavy": true,
"isCommunity": true,
"featured": true,
- "contentPath": "/roadmaps/6-android/landscape.md",
- "resourcesPath": "/roadmaps/6-android/resources.md",
+ "contentPath": "/roadmaps/104-android/landscape.md",
+ "resourcesPath": "/roadmaps/104-android/resources.md",
"versions": [
"latest",
"2018",
@@ -204,6 +208,45 @@
"url": "https://twitter.com/kamranahmedse"
},
"id": "android",
+ "metaPath": "/roadmaps/104-android/meta.json",
+ "isUpcoming": false
+ },
+ {
+ "seo": {
+ "title": "Python Developer Roadmap: Learn to become a Python developer",
+ "description": "Community driven, articles, resources, guides, interview questions, quizzes for python development. Learn to become a modern Python developer by following the steps, skills, resources and guides listed in this roadmap.",
+ "keywords": [
+ "guide to becoming an python developer",
+ "python developer roadmap",
+ "python roadmap",
+ "become python developer",
+ "python developer skills",
+ "python skills test",
+ "skills for python development",
+ "learn python development",
+ "what is python",
+ "python quiz",
+ "python interview questions"
+ ]
+ },
+ "title": "Python Developer",
+ "description": "Step by step guide to becoming a Python developer in 2021",
+ "featuredTitle": "Python",
+ "featuredDescription": "Step by step guide to becoming a Python Developer in 2021",
+ "isTextHeavy": true,
+ "isCommunity": true,
+ "featured": true,
+ "resourcesPath": "/roadmaps/105-python/resources.md",
+ "contentPath": "/roadmaps/105-python/landscape.md",
+ "versions": [
+ "latest"
+ ],
+ "author": {
+ "name": "Kamran Ahmed",
+ "url": "https://twitter.com/kamranahmedse"
+ },
+ "id": "python",
+ "metaPath": "/roadmaps/105-python/meta.json",
"isUpcoming": false
},
{
@@ -235,8 +278,8 @@
"description": "Step by step guide to becoming a modern PostgreSQL DB Administrator in 2021",
"featuredTitle": "DBA",
"featuredDescription": "Step by step guide to become a PostgreSQL DBA in 2021",
- "contentPath": "/roadmaps/7-postgresql-dba/landscape.md",
- "resourcesPath": "/roadmaps/7-postgresql-dba/resources.md",
+ "contentPath": "/roadmaps/106-postgresql-dba/landscape.md",
+ "resourcesPath": "/roadmaps/106-postgresql-dba/resources.md",
"author": {
"name": "Alexey Lesovsky",
"url": "https://github.com/lesovsky"
@@ -247,6 +290,7 @@
"detailed": false,
"versions": [],
"id": "postgresql-dba",
+ "metaPath": "/roadmaps/106-postgresql-dba/meta.json",
"isUpcoming": false
},
{
@@ -273,8 +317,8 @@
"isCommunity": false,
"isUpcoming": true,
"featured": true,
- "contentPath": "/roadmaps/8-aws/landscape.md",
- "resourcesPath": "/roadmaps/8-aws/resources.md",
+ "contentPath": "/roadmaps/107-aws/landscape.md",
+ "resourcesPath": "/roadmaps/107-aws/resources.md",
"versions": [
"latest",
"2018",
@@ -284,7 +328,8 @@
"name": "Kamran Ahmed",
"url": "https://twitter.com/kamranahmedse"
},
- "id": "aws"
+ "id": "aws",
+ "metaPath": "/roadmaps/107-aws/meta.json"
},
{
"seo": {
@@ -311,12 +356,13 @@
"featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2021",
"isUpcoming": true,
"featured": true,
- "contentPath": "/roadmaps/9-qa/landscape.md",
- "resourcesPath": "/roadmaps/9-qa/resources.md",
+ "contentPath": "/roadmaps/108-qa/landscape.md",
+ "resourcesPath": "/roadmaps/108-qa/resources.md",
"author": {
"name": "Anas Fitiani",
"url": "https://github.com/anas-qa"
},
- "id": "qa"
+ "id": "qa",
+ "metaPath": "/roadmaps/108-qa/meta.json"
}
]
\ No newline at end of file
diff --git a/content/roadmaps/1-frontend/meta.json b/content/roadmaps/100-frontend/meta.json
similarity index 100%
rename from content/roadmaps/1-frontend/meta.json
rename to content/roadmaps/100-frontend/meta.json
diff --git a/content/roadmaps/1-frontend/resources.md b/content/roadmaps/100-frontend/resources.md
similarity index 100%
rename from content/roadmaps/1-frontend/resources.md
rename to content/roadmaps/100-frontend/resources.md
diff --git a/content/roadmaps/2-backend/meta.json b/content/roadmaps/101-backend/meta.json
similarity index 100%
rename from content/roadmaps/2-backend/meta.json
rename to content/roadmaps/101-backend/meta.json
diff --git a/content/roadmaps/2-backend/resources.md b/content/roadmaps/101-backend/resources.md
similarity index 100%
rename from content/roadmaps/2-backend/resources.md
rename to content/roadmaps/101-backend/resources.md
diff --git a/content/roadmaps/3-devops/meta.json b/content/roadmaps/102-devops/meta.json
similarity index 100%
rename from content/roadmaps/3-devops/meta.json
rename to content/roadmaps/102-devops/meta.json
diff --git a/content/roadmaps/3-devops/resources.md b/content/roadmaps/102-devops/resources.md
similarity index 100%
rename from content/roadmaps/3-devops/resources.md
rename to content/roadmaps/102-devops/resources.md
diff --git a/content/roadmaps/4-react/landscape.md b/content/roadmaps/103-react/landscape.md
similarity index 100%
rename from content/roadmaps/4-react/landscape.md
rename to content/roadmaps/103-react/landscape.md
diff --git a/content/roadmaps/4-react/meta.json b/content/roadmaps/103-react/meta.json
similarity index 100%
rename from content/roadmaps/4-react/meta.json
rename to content/roadmaps/103-react/meta.json
diff --git a/content/roadmaps/4-react/resources.md b/content/roadmaps/103-react/resources.md
similarity index 100%
rename from content/roadmaps/4-react/resources.md
rename to content/roadmaps/103-react/resources.md
diff --git a/content/roadmaps/6-android/landscape.md b/content/roadmaps/104-android/landscape.md
similarity index 100%
rename from content/roadmaps/6-android/landscape.md
rename to content/roadmaps/104-android/landscape.md
diff --git a/content/roadmaps/6-android/meta.json b/content/roadmaps/104-android/meta.json
similarity index 100%
rename from content/roadmaps/6-android/meta.json
rename to content/roadmaps/104-android/meta.json
diff --git a/content/roadmaps/6-android/resources.md b/content/roadmaps/104-android/resources.md
similarity index 100%
rename from content/roadmaps/6-android/resources.md
rename to content/roadmaps/104-android/resources.md
diff --git a/content/roadmaps/105-python/landscape.md b/content/roadmaps/105-python/landscape.md
new file mode 100644
index 000000000..c41c2fbce
--- /dev/null
+++ b/content/roadmaps/105-python/landscape.md
@@ -0,0 +1,3 @@
+This roadmap is an extension to the [backend developer roadmap](/backend); you should follow that roadmap and once you reach "Pick a Language" block, visit this roadmap to learn python specific tools.
+
+[![](/roadmaps/python.png)](/roadmaps/python.png)
diff --git a/content/roadmaps/105-python/meta.json b/content/roadmaps/105-python/meta.json
new file mode 100644
index 000000000..6816efada
--- /dev/null
+++ b/content/roadmaps/105-python/meta.json
@@ -0,0 +1,35 @@
+{
+ "seo": {
+ "title": "Python Developer Roadmap: Learn to become a Python developer",
+ "description": "Community driven, articles, resources, guides, interview questions, quizzes for python development. Learn to become a modern Python developer by following the steps, skills, resources and guides listed in this roadmap.",
+ "keywords": [
+ "guide to becoming an python developer",
+ "python developer roadmap",
+ "python roadmap",
+ "become python developer",
+ "python developer skills",
+ "python skills test",
+ "skills for python development",
+ "learn python development",
+ "what is python",
+ "python quiz",
+ "python interview questions"
+ ]
+ },
+ "title": "Python Developer",
+ "description": "Step by step guide to becoming a Python developer in 2021",
+ "featuredTitle": "Python",
+ "featuredDescription": "Step by step guide to becoming a Python Developer in 2021",
+ "isTextHeavy": true,
+ "isCommunity": true,
+ "featured": true,
+ "resourcesPath": "./resources.md",
+ "contentPath": "./landscape.md",
+ "versions": [
+ "latest"
+ ],
+ "author": {
+ "name": "Kamran Ahmed",
+ "url": "https://twitter.com/kamranahmedse"
+ }
+}
diff --git a/content/roadmaps/7-postgresql-dba/resources.md b/content/roadmaps/105-python/resources.md
similarity index 100%
rename from content/roadmaps/7-postgresql-dba/resources.md
rename to content/roadmaps/105-python/resources.md
diff --git a/content/roadmaps/7-postgresql-dba/landscape.md b/content/roadmaps/106-postgresql-dba/landscape.md
similarity index 100%
rename from content/roadmaps/7-postgresql-dba/landscape.md
rename to content/roadmaps/106-postgresql-dba/landscape.md
diff --git a/content/roadmaps/7-postgresql-dba/meta.json b/content/roadmaps/106-postgresql-dba/meta.json
similarity index 100%
rename from content/roadmaps/7-postgresql-dba/meta.json
rename to content/roadmaps/106-postgresql-dba/meta.json
diff --git a/content/roadmaps/8-aws/resources.md b/content/roadmaps/106-postgresql-dba/resources.md
similarity index 100%
rename from content/roadmaps/8-aws/resources.md
rename to content/roadmaps/106-postgresql-dba/resources.md
diff --git a/content/roadmaps/8-aws/landscape.md b/content/roadmaps/107-aws/landscape.md
similarity index 100%
rename from content/roadmaps/8-aws/landscape.md
rename to content/roadmaps/107-aws/landscape.md
diff --git a/content/roadmaps/8-aws/meta.json b/content/roadmaps/107-aws/meta.json
similarity index 100%
rename from content/roadmaps/8-aws/meta.json
rename to content/roadmaps/107-aws/meta.json
diff --git a/content/roadmaps/9-qa/resources.md b/content/roadmaps/107-aws/resources.md
similarity index 100%
rename from content/roadmaps/9-qa/resources.md
rename to content/roadmaps/107-aws/resources.md
diff --git a/content/roadmaps/9-qa/landscape.md b/content/roadmaps/108-qa/landscape.md
similarity index 100%
rename from content/roadmaps/9-qa/landscape.md
rename to content/roadmaps/108-qa/landscape.md
diff --git a/content/roadmaps/9-qa/meta.json b/content/roadmaps/108-qa/meta.json
similarity index 100%
rename from content/roadmaps/9-qa/meta.json
rename to content/roadmaps/108-qa/meta.json
diff --git a/content/roadmaps/108-qa/resources.md b/content/roadmaps/108-qa/resources.md
new file mode 100644
index 000000000..9ea876887
--- /dev/null
+++ b/content/roadmaps/108-qa/resources.md
@@ -0,0 +1,7 @@
+> **We are still preparing the resources**. Please check back later or [subscribe to get notified](/signup).
+
+While we prepare the list, follow this simple advice to learn anything
+
+> Just **pick a project and start working on it**, you will learn all that you need along the way.
+
+**→** [All Roadmaps](/roadmaps) • [Programming guides](/guides) • [Subscribe](/signup)
diff --git a/lib/roadmap.ts b/lib/roadmap.ts
index 53909a4eb..2891a4364 100644
--- a/lib/roadmap.ts
+++ b/lib/roadmap.ts
@@ -18,6 +18,7 @@ export type RoadmapType = {
imagePath?: string,
contentPath?: string;
resourcesPath: string;
+ metaPath: string;
isCommunity: boolean;
isUpcoming: boolean;
id: string;
diff --git a/public/project/python.json b/public/project/python.json
new file mode 100644
index 000000000..a7337657b
--- /dev/null
+++ b/public/project/python.json
@@ -0,0 +1,2970 @@
+{
+ "mockup": {
+ "controls": {
+ "control": [
+ {
+ "ID": "3",
+ "typeID": "Arrow",
+ "zOrder": "43",
+ "w": "115",
+ "h": "5",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "274",
+ "y": "457",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 115,
+ "y": 1
+ },
+ "p1": {
+ "x": 0.5205160087037612,
+ "y": 0.03901150139881877
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "5",
+ "typeID": "Arrow",
+ "zOrder": "44",
+ "w": "143",
+ "h": "3",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "577",
+ "y": "457",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 143,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5536354056902003,
+ "y": 0.01338250790305583
+ },
+ "p2": {
+ "x": 0,
+ "y": 2
+ }
+ }
+ },
+ {
+ "ID": "6",
+ "typeID": "Arrow",
+ "zOrder": "1",
+ "w": "16",
+ "h": "68",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "474",
+ "y": "242",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4869331283627979,
+ "y": 0.16641045349730976
+ },
+ "p2": {
+ "x": 8,
+ "y": 68
+ },
+ "color": "10027263"
+ }
+ },
+ {
+ "ID": "7",
+ "typeID": "Label",
+ "zOrder": "45",
+ "measuredW": "87",
+ "measuredH": "36",
+ "x": "421",
+ "y": "318",
+ "properties": {
+ "text": "Python",
+ "size": "28"
+ }
+ },
+ {
+ "ID": "8",
+ "typeID": "Arrow",
+ "zOrder": "46",
+ "w": "20",
+ "h": "81",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "431",
+ "y": "364",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "color": "10027263",
+ "p0": {
+ "x": 20,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.486153846153846,
+ "y": -0.2492307692307692
+ },
+ "p2": {
+ "x": 20,
+ "y": 81
+ }
+ }
+ },
+ {
+ "ID": "9",
+ "typeID": "Canvas",
+ "zOrder": "47",
+ "w": "262",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "354",
+ "y": "437",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "10",
+ "typeID": "Label",
+ "zOrder": "48",
+ "measuredW": "123",
+ "measuredH": "24",
+ "x": "423",
+ "y": "447",
+ "properties": {
+ "size": "16",
+ "text": "Learn the Basics"
+ }
+ },
+ {
+ "ID": "24",
+ "typeID": "Arrow",
+ "zOrder": "42",
+ "w": "108",
+ "h": "44",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "276",
+ "y": "462",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 108,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5656811947576956,
+ "y": -0.05547089302042055
+ },
+ "p2": {
+ "x": 0,
+ "y": 44
+ }
+ }
+ },
+ {
+ "ID": "26",
+ "typeID": "Arrow",
+ "zOrder": "41",
+ "w": "107",
+ "h": "51",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "276",
+ "y": "405",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 107,
+ "y": 51
+ },
+ "p1": {
+ "x": 0.5245584633234497,
+ "y": 0.05852778135877272
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "29",
+ "typeID": "__group__",
+ "zOrder": "50",
+ "measuredW": "222",
+ "measuredH": "42",
+ "w": "222",
+ "h": "42",
+ "x": "69",
+ "y": "438",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "w": "188",
+ "measuredW": "183",
+ "measuredH": "24",
+ "x": "16",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Variables and Data Types"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "30",
+ "typeID": "__group__",
+ "zOrder": "49",
+ "measuredW": "222",
+ "measuredH": "42",
+ "w": "222",
+ "h": "42",
+ "x": "69",
+ "y": "392",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "w": "95",
+ "measuredW": "92",
+ "measuredH": "24",
+ "x": "64",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Basic Syntax"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "32",
+ "typeID": "Canvas",
+ "zOrder": "53",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "69",
+ "y": "484",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "33",
+ "typeID": "Label",
+ "zOrder": "54",
+ "w": "92",
+ "measuredW": "90",
+ "measuredH": "24",
+ "x": "123",
+ "y": "493",
+ "properties": {
+ "size": "16",
+ "text": "Conditionals"
+ }
+ },
+ {
+ "ID": "35",
+ "typeID": "Canvas",
+ "zOrder": "57",
+ "w": "256",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "688",
+ "y": "438",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "36",
+ "typeID": "Label",
+ "zOrder": "58",
+ "w": "200",
+ "measuredW": "198",
+ "measuredH": "24",
+ "x": "716",
+ "y": "447",
+ "properties": {
+ "text": "Functions, Builtin Functions",
+ "size": "16"
+ }
+ },
+ {
+ "ID": "37",
+ "typeID": "Canvas",
+ "zOrder": "51",
+ "w": "256",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "688",
+ "y": "484",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "38",
+ "typeID": "Label",
+ "zOrder": "52",
+ "measuredW": "221",
+ "measuredH": "24",
+ "x": "705",
+ "y": "493",
+ "properties": {
+ "size": "16",
+ "text": "Lists, Tuples, Sets, Dictionaries"
+ }
+ },
+ {
+ "ID": "39",
+ "typeID": "Arrow",
+ "zOrder": "40",
+ "w": "120",
+ "h": "44",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "597",
+ "y": "465",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 120,
+ "y": 44
+ },
+ "p1": {
+ "x": 0.5846756207563067,
+ "y": -0.036972790801407494
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "40",
+ "typeID": "Canvas",
+ "zOrder": "59",
+ "w": "262",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "354",
+ "y": "485",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "41",
+ "typeID": "Label",
+ "zOrder": "60",
+ "measuredW": "219",
+ "measuredH": "24",
+ "x": "375",
+ "y": "495",
+ "properties": {
+ "size": "16",
+ "text": "Datastructures and Algorithms"
+ }
+ },
+ {
+ "ID": "43",
+ "typeID": "Canvas",
+ "zOrder": "55",
+ "w": "254",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "688",
+ "y": "391",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "44",
+ "typeID": "Label",
+ "zOrder": "56",
+ "measuredW": "181",
+ "measuredH": "24",
+ "x": "725",
+ "y": "400",
+ "properties": {
+ "size": "16",
+ "text": "Type Casting, Exceptions"
+ }
+ },
+ {
+ "ID": "45",
+ "typeID": "Arrow",
+ "zOrder": "39",
+ "w": "120",
+ "h": "45",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "601",
+ "y": "407",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 120,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5537800308573948,
+ "y": 0.04485342737491732
+ },
+ "p2": {
+ "x": 0,
+ "y": 45
+ }
+ }
+ },
+ {
+ "ID": "68",
+ "typeID": "__group__",
+ "zOrder": "61",
+ "measuredW": "223",
+ "measuredH": "134",
+ "w": "223",
+ "h": "134",
+ "x": "69",
+ "y": "545",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "__group__",
+ "zOrder": "0",
+ "measuredW": "222",
+ "measuredH": "42",
+ "w": "222",
+ "h": "42",
+ "x": "0",
+ "y": "0",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "168",
+ "measuredH": "24",
+ "x": "27",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Arrays and Linked Lists"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "__group__",
+ "zOrder": "1",
+ "measuredW": "222",
+ "measuredH": "42",
+ "w": "222",
+ "h": "42",
+ "x": "0",
+ "y": "46",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "195",
+ "measuredH": "24",
+ "x": "14",
+ "y": "8",
+ "properties": {
+ "size": "16",
+ "text": "Heaps, Stacks and Queues"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "2",
+ "typeID": "__group__",
+ "zOrder": "2",
+ "measuredW": "222",
+ "measuredH": "42",
+ "w": "222",
+ "h": "42",
+ "x": "1",
+ "y": "92",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "89",
+ "measuredH": "24",
+ "x": "66",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Hash Tables"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "69",
+ "typeID": "__group__",
+ "zOrder": "62",
+ "measuredW": "222",
+ "measuredH": "135",
+ "w": "222",
+ "h": "135",
+ "x": "688",
+ "y": "544",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "__group__",
+ "zOrder": "0",
+ "measuredW": "222",
+ "measuredH": "42",
+ "w": "222",
+ "h": "42",
+ "x": "0",
+ "y": "0",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "146",
+ "measuredH": "24",
+ "x": "38",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Binary Search Trees"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "__group__",
+ "zOrder": "1",
+ "measuredW": "222",
+ "measuredH": "42",
+ "w": "222",
+ "h": "42",
+ "x": "0",
+ "y": "46",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "74",
+ "measuredH": "24",
+ "x": "74",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Recursion"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "2",
+ "typeID": "__group__",
+ "zOrder": "2",
+ "measuredW": "222",
+ "measuredH": "42",
+ "w": "222",
+ "h": "42",
+ "x": "0",
+ "y": "93",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "222",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "132",
+ "measuredH": "24",
+ "x": "45",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Sorting Algorithms"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "70",
+ "typeID": "Arrow",
+ "zOrder": "38",
+ "w": "157",
+ "h": "63",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "256",
+ "y": "503",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 157,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.6016998827667055,
+ "y": 0.11606096131301237
+ },
+ "p2": {
+ "x": 0,
+ "y": 59
+ }
+ }
+ },
+ {
+ "ID": "71",
+ "typeID": "Arrow",
+ "zOrder": "37",
+ "w": "131",
+ "h": "89",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "265",
+ "y": "519",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 131,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.6016998827667047,
+ "y": 0.11606096131301123
+ },
+ "p2": {
+ "x": 0,
+ "y": 89
+ }
+ }
+ },
+ {
+ "ID": "72",
+ "typeID": "Arrow",
+ "zOrder": "36",
+ "w": "130",
+ "h": "138",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "272",
+ "y": "518",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 130,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.6016998827667047,
+ "y": 0.11606096131301115
+ },
+ "p2": {
+ "x": 0,
+ "y": 138
+ }
+ }
+ },
+ {
+ "ID": "74",
+ "typeID": "Arrow",
+ "zOrder": "35",
+ "w": "109",
+ "h": "43",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "587",
+ "y": "519",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 109,
+ "y": 42.5
+ },
+ "p1": {
+ "x": 0.5504392774297248,
+ "y": 0.14122632376847066
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "75",
+ "typeID": "Arrow",
+ "zOrder": "34",
+ "w": "122",
+ "h": "92",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "583",
+ "y": "518",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 122,
+ "y": 91.5
+ },
+ "p1": {
+ "x": 0.5504392774297248,
+ "y": 0.14122632376847064
+ },
+ "p2": {
+ "x": 0,
+ "y": -0.5
+ }
+ }
+ },
+ {
+ "ID": "76",
+ "typeID": "Arrow",
+ "zOrder": "33",
+ "w": "131",
+ "h": "139",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "579",
+ "y": "523",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 131,
+ "y": 138.5
+ },
+ "p1": {
+ "x": 0.5504392774297246,
+ "y": 0.14122632376847055
+ },
+ "p2": {
+ "x": 0,
+ "y": -0.5
+ }
+ }
+ },
+ {
+ "ID": "77",
+ "typeID": "Arrow",
+ "zOrder": "32",
+ "w": "99",
+ "h": "326",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "494",
+ "y": "511",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "color": "10027263",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5666915052160955,
+ "y": 0.2790611028315947
+ },
+ "p2": {
+ "x": 14,
+ "y": 326
+ }
+ }
+ },
+ {
+ "ID": "78",
+ "typeID": "Canvas",
+ "zOrder": "63",
+ "w": "279",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "240",
+ "y": "813",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "79",
+ "typeID": "Label",
+ "zOrder": "64",
+ "measuredW": "122",
+ "measuredH": "24",
+ "x": "319",
+ "y": "823",
+ "properties": {
+ "size": "16",
+ "text": "Advanced Topics"
+ }
+ },
+ {
+ "ID": "80",
+ "typeID": "Arrow",
+ "zOrder": "31",
+ "w": "2",
+ "h": "62",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "456",
+ "y": "764",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 0,
+ "y": 62
+ },
+ "p1": {
+ "x": 0.5494505494505496,
+ "y": 0
+ },
+ "p2": {
+ "x": 2,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "84",
+ "typeID": "Canvas",
+ "zOrder": "65",
+ "w": "169",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "364",
+ "y": "752",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "85",
+ "typeID": "Label",
+ "zOrder": "66",
+ "measuredW": "35",
+ "measuredH": "24",
+ "x": "429",
+ "y": "761",
+ "properties": {
+ "text": "OOP",
+ "size": "16"
+ }
+ },
+ {
+ "ID": "106",
+ "typeID": "Arrow",
+ "zOrder": "30",
+ "w": "2",
+ "h": "52",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "454",
+ "y": "712",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 2,
+ "y": 52
+ },
+ "p1": {
+ "x": 0.5494505494505497,
+ "y": -2.6238653462337527e-18
+ },
+ "p2": {
+ "x": 0,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "110",
+ "typeID": "Arrow",
+ "zOrder": "29",
+ "w": "45",
+ "h": "48",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "272",
+ "y": "781",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 43,
+ "y": 47.5
+ },
+ "p1": {
+ "x": 0.506217070600632,
+ "y": -0.3447839831401475
+ },
+ "p2": {
+ "x": 0,
+ "y": 0.5
+ }
+ }
+ },
+ {
+ "ID": "111",
+ "typeID": "Arrow",
+ "zOrder": "28",
+ "w": "59",
+ "h": "90",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "270",
+ "y": "733",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 59,
+ "y": 90.5
+ },
+ "p1": {
+ "x": 0.638419958419957,
+ "y": -0.2587110187110215
+ },
+ "p2": {
+ "x": 0,
+ "y": 1.5
+ }
+ }
+ },
+ {
+ "ID": "112",
+ "typeID": "Canvas",
+ "zOrder": "71",
+ "w": "169",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "364",
+ "y": "686",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "113",
+ "typeID": "Label",
+ "zOrder": "72",
+ "measuredW": "125",
+ "measuredH": "24",
+ "x": "384",
+ "y": "695",
+ "properties": {
+ "text": "Methods, Dunder",
+ "size": "16"
+ }
+ },
+ {
+ "ID": "114",
+ "typeID": "Canvas",
+ "zOrder": "69",
+ "w": "169",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "364",
+ "y": "640",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "115",
+ "typeID": "Label",
+ "zOrder": "70",
+ "w": "86",
+ "measuredW": "83",
+ "measuredH": "24",
+ "x": "406",
+ "y": "649",
+ "properties": {
+ "size": "16",
+ "text": "Inheritance"
+ }
+ },
+ {
+ "ID": "116",
+ "typeID": "Canvas",
+ "zOrder": "67",
+ "w": "169",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "364",
+ "y": "594",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "117",
+ "typeID": "Label",
+ "zOrder": "68",
+ "w": "60",
+ "measuredW": "58",
+ "measuredH": "24",
+ "x": "419",
+ "y": "603",
+ "properties": {
+ "size": "16",
+ "text": "Classes"
+ }
+ },
+ {
+ "ID": "120",
+ "typeID": "Arrow",
+ "zOrder": "27",
+ "w": "92",
+ "h": "1",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "180",
+ "y": "834",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.5494505494505496,
+ "y": 0
+ },
+ "p2": {
+ "x": 92,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "121",
+ "typeID": "__group__",
+ "zOrder": "73",
+ "measuredW": "223",
+ "measuredH": "42",
+ "w": "223",
+ "h": "42",
+ "x": "69",
+ "y": "763",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "223",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "81",
+ "measuredH": "24",
+ "x": "71",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Decorators"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "122",
+ "typeID": "__group__",
+ "zOrder": "74",
+ "measuredW": "223",
+ "measuredH": "42",
+ "w": "223",
+ "h": "42",
+ "x": "69",
+ "y": "713",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Canvas",
+ "zOrder": "0",
+ "w": "223",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "150",
+ "measuredH": "24",
+ "x": "37",
+ "y": "9",
+ "properties": {
+ "size": "16",
+ "text": "Regular Expressions"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "ID": "125",
+ "typeID": "Canvas",
+ "zOrder": "77",
+ "w": "136",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "630",
+ "y": "728",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "126",
+ "typeID": "Label",
+ "zOrder": "78",
+ "measuredW": "62",
+ "measuredH": "24",
+ "x": "667",
+ "y": "737",
+ "properties": {
+ "size": "16",
+ "text": "Modules"
+ }
+ },
+ {
+ "ID": "127",
+ "typeID": "Arrow",
+ "zOrder": "26",
+ "w": "205",
+ "h": "88",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "493",
+ "y": "757",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 0,
+ "y": 84.5
+ },
+ "p1": {
+ "x": 0.6985268644291276,
+ "y": -0.23904197066138563
+ },
+ "p2": {
+ "x": 203,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "128",
+ "typeID": "Canvas",
+ "zOrder": "79",
+ "w": "136",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "807",
+ "y": "702",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "129",
+ "typeID": "Label",
+ "zOrder": "80",
+ "measuredW": "45",
+ "measuredH": "24",
+ "x": "852",
+ "y": "711",
+ "properties": {
+ "size": "16",
+ "text": "Builtin"
+ }
+ },
+ {
+ "ID": "130",
+ "typeID": "Canvas",
+ "zOrder": "81",
+ "w": "136",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "808",
+ "y": "749",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "131",
+ "typeID": "Label",
+ "zOrder": "82",
+ "measuredW": "56",
+ "measuredH": "24",
+ "x": "848",
+ "y": "758",
+ "properties": {
+ "size": "16",
+ "text": "Custom"
+ }
+ },
+ {
+ "ID": "132",
+ "typeID": "Arrow",
+ "zOrder": "24",
+ "w": "70",
+ "h": "31",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "751",
+ "y": "717",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 70,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.4559594471643343,
+ "y": 0.06498851869503056
+ },
+ "p2": {
+ "x": 0,
+ "y": 30
+ }
+ }
+ },
+ {
+ "ID": "133",
+ "typeID": "Arrow",
+ "zOrder": "25",
+ "w": "68",
+ "h": "20",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "756",
+ "y": "754",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 68,
+ "y": 19.5
+ },
+ "p1": {
+ "x": 0.4980092542774131,
+ "y": -0.04046056171311737
+ },
+ "p2": {
+ "x": 0,
+ "y": -0.5
+ }
+ }
+ },
+ {
+ "ID": "139",
+ "typeID": "Arrow",
+ "zOrder": "85",
+ "w": "56",
+ "h": "1",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "195",
+ "y": "881",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "p0": {
+ "x": -0.5,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4872751951136748,
+ "y": -0.011876484560570066
+ },
+ "p2": {
+ "x": 55,
+ "y": 0
+ },
+ "rightArrow": "false",
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "164",
+ "typeID": "Canvas",
+ "zOrder": "86",
+ "w": "279",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "239",
+ "y": "861",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "165",
+ "typeID": "Label",
+ "zOrder": "87",
+ "measuredW": "175",
+ "measuredH": "24",
+ "x": "291",
+ "y": "871",
+ "properties": {
+ "size": "16",
+ "text": "Version Control Systems"
+ }
+ },
+ {
+ "ID": "167",
+ "typeID": "Canvas",
+ "zOrder": "83",
+ "w": "139",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "628",
+ "y": "774",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "168",
+ "typeID": "Label",
+ "zOrder": "84",
+ "measuredW": "62",
+ "measuredH": "24",
+ "x": "667",
+ "y": "783",
+ "properties": {
+ "size": "16",
+ "text": "Iterators"
+ }
+ },
+ {
+ "ID": "170",
+ "typeID": "Canvas",
+ "zOrder": "88",
+ "w": "146",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "69",
+ "y": "861",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "171",
+ "typeID": "Label",
+ "zOrder": "89",
+ "measuredW": "117",
+ "measuredH": "24",
+ "x": "83",
+ "y": "870",
+ "properties": {
+ "size": "16",
+ "text": "Basic Git Usage"
+ }
+ },
+ {
+ "ID": "172",
+ "typeID": "Canvas",
+ "zOrder": "75",
+ "w": "146",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "69",
+ "y": "814",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "173",
+ "typeID": "Label",
+ "zOrder": "76",
+ "measuredW": "67",
+ "measuredH": "24",
+ "x": "108",
+ "y": "823",
+ "properties": {
+ "text": "Lambdas",
+ "size": "16"
+ }
+ },
+ {
+ "ID": "176",
+ "typeID": "Canvas",
+ "zOrder": "90",
+ "w": "209",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "554",
+ "y": "860",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "177",
+ "typeID": "Label",
+ "zOrder": "91",
+ "measuredW": "166",
+ "measuredH": "24",
+ "x": "576",
+ "y": "870",
+ "properties": {
+ "size": "16",
+ "text": "Repo Hosting Services"
+ }
+ },
+ {
+ "ID": "178",
+ "typeID": "Arrow",
+ "zOrder": "23",
+ "w": "114",
+ "h": "1",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "492",
+ "y": "882",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "p0": {
+ "x": -0.5,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.48727519511367473,
+ "y": -0.011876484560570066
+ },
+ "p2": {
+ "x": 113,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "179",
+ "typeID": "Canvas",
+ "zOrder": "92",
+ "w": "136",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "808",
+ "y": "816",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "180",
+ "typeID": "Label",
+ "zOrder": "93",
+ "measuredW": "51",
+ "measuredH": "24",
+ "x": "850",
+ "y": "825",
+ "properties": {
+ "size": "16",
+ "text": "GitHub"
+ }
+ },
+ {
+ "ID": "181",
+ "typeID": "Canvas",
+ "zOrder": "94",
+ "w": "136",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "808",
+ "y": "862",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "182",
+ "typeID": "Label",
+ "zOrder": "95",
+ "measuredW": "48",
+ "measuredH": "24",
+ "x": "852",
+ "y": "871",
+ "properties": {
+ "size": "16",
+ "text": "GitLab"
+ }
+ },
+ {
+ "ID": "183",
+ "typeID": "Canvas",
+ "zOrder": "96",
+ "w": "136",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "808",
+ "y": "908",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "184",
+ "typeID": "Label",
+ "zOrder": "97",
+ "measuredW": "70",
+ "measuredH": "24",
+ "x": "841",
+ "y": "917",
+ "properties": {
+ "size": "16",
+ "text": "BitBucket"
+ }
+ },
+ {
+ "ID": "185",
+ "typeID": "Arrow",
+ "zOrder": "22",
+ "w": "63",
+ "h": "46",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "755",
+ "y": "834",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 62.5,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.45595944716433434,
+ "y": 0.06498851869503053
+ },
+ "p2": {
+ "x": 0,
+ "y": 45
+ }
+ }
+ },
+ {
+ "ID": "186",
+ "typeID": "Arrow",
+ "zOrder": "21",
+ "w": "90",
+ "h": "45",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "735",
+ "y": "887",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 89.5,
+ "y": 44.5
+ },
+ "p1": {
+ "x": 0.5182829888712243,
+ "y": -0.06677265500794909
+ },
+ "p2": {
+ "x": -0.5,
+ "y": -0.5
+ }
+ }
+ },
+ {
+ "ID": "187",
+ "typeID": "Arrow",
+ "zOrder": "20",
+ "w": "85",
+ "h": "1",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "749",
+ "y": "883",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "color": "10027263",
+ "p0": {
+ "x": 84.5,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.45889842236368666,
+ "y": 0.006365900913368392
+ },
+ "p2": {
+ "x": -0.5,
+ "y": 0.5
+ }
+ }
+ },
+ {
+ "ID": "188",
+ "typeID": "Arrow",
+ "zOrder": "19",
+ "w": "121",
+ "h": "135",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "537",
+ "y": "876",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "color": "10027263",
+ "p0": {
+ "x": 119.5,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.5161658071270696,
+ "y": 0.2998642832215285
+ },
+ "p2": {
+ "x": 0,
+ "y": 133.5
+ }
+ }
+ },
+ {
+ "ID": "189",
+ "typeID": "Canvas",
+ "zOrder": "98",
+ "w": "240",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "336",
+ "y": "988",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "190",
+ "typeID": "Label",
+ "zOrder": "99",
+ "measuredW": "141",
+ "measuredH": "24",
+ "x": "382",
+ "y": "998",
+ "properties": {
+ "size": "16",
+ "text": "Package Managers"
+ }
+ },
+ {
+ "ID": "191",
+ "typeID": "Arrow",
+ "zOrder": "18",
+ "w": "1",
+ "h": "39",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "520",
+ "y": "965",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.4872751951136748,
+ "y": -0.011876484560570064
+ },
+ "p2": {
+ "x": 0,
+ "y": 38
+ }
+ }
+ },
+ {
+ "ID": "192",
+ "typeID": "Canvas",
+ "zOrder": "100",
+ "w": "110",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "466",
+ "y": "928",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "193",
+ "typeID": "Label",
+ "zOrder": "101",
+ "measuredW": "24",
+ "measuredH": "24",
+ "x": "509",
+ "y": "937",
+ "properties": {
+ "size": "16",
+ "text": "Pip"
+ }
+ },
+ {
+ "ID": "194",
+ "typeID": "Arrow",
+ "zOrder": "15",
+ "w": "1",
+ "h": "39",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "406",
+ "y": "965",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.4872751951136748,
+ "y": -0.011876484560570064
+ },
+ "p2": {
+ "x": 0,
+ "y": 38
+ }
+ }
+ },
+ {
+ "ID": "195",
+ "typeID": "Canvas",
+ "zOrder": "16",
+ "w": "121",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "337",
+ "y": "928",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "196",
+ "typeID": "Label",
+ "zOrder": "17",
+ "measuredW": "33",
+ "measuredH": "24",
+ "x": "381",
+ "y": "937",
+ "properties": {
+ "size": "16",
+ "text": "PyPI"
+ }
+ },
+ {
+ "ID": "198",
+ "typeID": "Canvas",
+ "zOrder": "102",
+ "w": "240",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "337",
+ "y": "1036",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "199",
+ "typeID": "Label",
+ "zOrder": "103",
+ "measuredW": "140",
+ "measuredH": "24",
+ "x": "387",
+ "y": "1046",
+ "properties": {
+ "size": "16",
+ "text": "Learn a Framework"
+ }
+ },
+ {
+ "ID": "204",
+ "typeID": "Arrow",
+ "zOrder": "14",
+ "w": "66",
+ "h": "42",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "280",
+ "y": "1007",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.6082405345211582,
+ "y": -0.15211581291759485
+ },
+ "p2": {
+ "x": 66,
+ "y": 41
+ }
+ }
+ },
+ {
+ "ID": "205",
+ "typeID": "Canvas",
+ "zOrder": "104",
+ "w": "237",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "61",
+ "y": "988",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "206",
+ "typeID": "Label",
+ "zOrder": "105",
+ "measuredW": "93",
+ "measuredH": "24",
+ "x": "133",
+ "y": "998",
+ "properties": {
+ "size": "16",
+ "text": "Synchronous"
+ }
+ },
+ {
+ "ID": "207",
+ "typeID": "Canvas",
+ "zOrder": "106",
+ "w": "76",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "61",
+ "y": "929",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "208",
+ "typeID": "Label",
+ "zOrder": "107",
+ "measuredW": "52",
+ "measuredH": "24",
+ "x": "73",
+ "y": "938",
+ "properties": {
+ "size": "16",
+ "text": "Django"
+ }
+ },
+ {
+ "ID": "211",
+ "typeID": "Canvas",
+ "zOrder": "108",
+ "w": "69",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "142",
+ "y": "929",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "212",
+ "typeID": "Label",
+ "zOrder": "109",
+ "measuredW": "38",
+ "measuredH": "24",
+ "x": "158",
+ "y": "938",
+ "properties": {
+ "size": "16",
+ "text": "Flask"
+ }
+ },
+ {
+ "ID": "213",
+ "typeID": "Canvas",
+ "zOrder": "110",
+ "w": "86",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "215",
+ "y": "929",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "214",
+ "typeID": "Label",
+ "zOrder": "111",
+ "measuredW": "58",
+ "measuredH": "24",
+ "x": "229",
+ "y": "938",
+ "properties": {
+ "size": "16",
+ "text": "Pyramid"
+ }
+ },
+ {
+ "ID": "215",
+ "typeID": "Arrow",
+ "zOrder": "13",
+ "w": "1",
+ "h": "39",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "101",
+ "y": "961",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.4872751951136748,
+ "y": -0.011876484560570064
+ },
+ "p2": {
+ "x": 0,
+ "y": 38
+ }
+ }
+ },
+ {
+ "ID": "216",
+ "typeID": "Arrow",
+ "zOrder": "12",
+ "w": "1",
+ "h": "39",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "176",
+ "y": "961",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.4872751951136748,
+ "y": -0.011876484560570064
+ },
+ "p2": {
+ "x": 0,
+ "y": 38
+ }
+ }
+ },
+ {
+ "ID": "217",
+ "typeID": "Arrow",
+ "zOrder": "11",
+ "w": "1",
+ "h": "39",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "258",
+ "y": "961",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.4872751951136748,
+ "y": -0.011876484560570064
+ },
+ "p2": {
+ "x": 0,
+ "y": 38
+ }
+ }
+ },
+ {
+ "ID": "218",
+ "typeID": "Canvas",
+ "zOrder": "112",
+ "w": "237",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "61",
+ "y": "1037",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "219",
+ "typeID": "Label",
+ "zOrder": "113",
+ "measuredW": "101",
+ "measuredH": "24",
+ "x": "129",
+ "y": "1047",
+ "properties": {
+ "size": "16",
+ "text": "Asynchronous"
+ }
+ },
+ {
+ "ID": "220",
+ "typeID": "Arrow",
+ "zOrder": "10",
+ "w": "67",
+ "h": "2",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "282",
+ "y": "1058",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.31327581408293903,
+ "y": 0.007013637628722516
+ },
+ "p2": {
+ "x": 67,
+ "y": 1.5
+ }
+ }
+ },
+ {
+ "ID": "223",
+ "typeID": "Canvas",
+ "zOrder": "114",
+ "w": "126",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "61",
+ "y": "1096",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "224",
+ "typeID": "Label",
+ "zOrder": "115",
+ "measuredW": "50",
+ "measuredH": "24",
+ "x": "99",
+ "y": "1105",
+ "properties": {
+ "size": "16",
+ "text": "gevent"
+ }
+ },
+ {
+ "ID": "225",
+ "typeID": "Canvas",
+ "zOrder": "116",
+ "w": "105",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "193",
+ "y": "1096",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "226",
+ "typeID": "Label",
+ "zOrder": "117",
+ "measuredW": "50",
+ "measuredH": "24",
+ "x": "221",
+ "y": "1105",
+ "properties": {
+ "size": "16",
+ "text": "aiohttp"
+ }
+ },
+ {
+ "ID": "227",
+ "typeID": "Canvas",
+ "zOrder": "118",
+ "w": "126",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "61",
+ "y": "1143",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "228",
+ "typeID": "Label",
+ "zOrder": "119",
+ "measuredW": "60",
+ "measuredH": "24",
+ "x": "94",
+ "y": "1152",
+ "properties": {
+ "size": "16",
+ "text": "Tornado"
+ }
+ },
+ {
+ "ID": "229",
+ "typeID": "Canvas",
+ "zOrder": "120",
+ "w": "105",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "193",
+ "y": "1143",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "230",
+ "typeID": "Label",
+ "zOrder": "121",
+ "measuredW": "41",
+ "measuredH": "24",
+ "x": "225",
+ "y": "1152",
+ "properties": {
+ "size": "16",
+ "text": "Sanic"
+ }
+ },
+ {
+ "ID": "231",
+ "typeID": "Arrow",
+ "zOrder": "9",
+ "w": "1",
+ "h": "54",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "120",
+ "y": "1065",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 1,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.4872751951136748,
+ "y": -0.011876484560570062
+ },
+ "p2": {
+ "x": 1,
+ "y": 53.5
+ }
+ }
+ },
+ {
+ "ID": "232",
+ "typeID": "Arrow",
+ "zOrder": "8",
+ "w": "1",
+ "h": "54",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "245",
+ "y": "1065",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 1,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.4872751951136748,
+ "y": -0.011876484560570062
+ },
+ "p2": {
+ "x": 1,
+ "y": 53.5
+ }
+ }
+ },
+ {
+ "ID": "235",
+ "typeID": "Arrow",
+ "zOrder": "7",
+ "w": "183",
+ "h": "57",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "557",
+ "y": "1045",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": 56
+ },
+ "p1": {
+ "x": 0.7132832764505119,
+ "y": -0.16909215017064846
+ },
+ "p2": {
+ "x": 183,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "236",
+ "typeID": "Canvas",
+ "zOrder": "124",
+ "w": "154",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "663",
+ "y": "1018",
+ "properties": {
+ "color": "16770457"
+ }
+ },
+ {
+ "ID": "237",
+ "typeID": "Label",
+ "zOrder": "125",
+ "measuredW": "116",
+ "measuredH": "24",
+ "x": "682",
+ "y": "1027",
+ "properties": {
+ "size": "16",
+ "text": "unittest / pyUnit"
+ }
+ },
+ {
+ "ID": "238",
+ "typeID": "Canvas",
+ "zOrder": "126",
+ "w": "154",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "663",
+ "y": "972",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "239",
+ "typeID": "Label",
+ "zOrder": "127",
+ "measuredW": "44",
+ "measuredH": "24",
+ "x": "718",
+ "y": "981",
+ "properties": {
+ "size": "16",
+ "text": "pytest"
+ }
+ },
+ {
+ "ID": "240",
+ "typeID": "Canvas",
+ "zOrder": "128",
+ "w": "122",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "822",
+ "y": "972",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "241",
+ "typeID": "Label",
+ "zOrder": "129",
+ "measuredW": "54",
+ "measuredH": "24",
+ "x": "856",
+ "y": "981",
+ "properties": {
+ "size": "16",
+ "text": "doctest"
+ }
+ },
+ {
+ "ID": "242",
+ "typeID": "Canvas",
+ "zOrder": "130",
+ "w": "122",
+ "h": "42",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "822",
+ "y": "1018",
+ "properties": {
+ "color": "14540253"
+ }
+ },
+ {
+ "ID": "243",
+ "typeID": "Label",
+ "zOrder": "131",
+ "measuredW": "36",
+ "measuredH": "24",
+ "x": "865",
+ "y": "1027",
+ "properties": {
+ "size": "16",
+ "text": "nose"
+ }
+ },
+ {
+ "ID": "244",
+ "typeID": "Arrow",
+ "zOrder": "6",
+ "w": "311",
+ "h": "69",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "567",
+ "y": "1044",
+ "properties": {
+ "color": "2848996",
+ "curvature": "-1",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "stroke": "dotted",
+ "p0": {
+ "x": 0,
+ "y": 67
+ },
+ "p1": {
+ "x": 0.7345469815235649,
+ "y": -0.12769983203240787
+ },
+ "p2": {
+ "x": 311,
+ "y": 0
+ }
+ }
+ },
+ {
+ "ID": "246",
+ "typeID": "Canvas",
+ "zOrder": "122",
+ "w": "240",
+ "h": "43",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "337",
+ "y": "1084",
+ "properties": {
+ "color": "16776960"
+ }
+ },
+ {
+ "ID": "247",
+ "typeID": "Label",
+ "zOrder": "123",
+ "measuredW": "128",
+ "measuredH": "24",
+ "x": "393",
+ "y": "1094",
+ "properties": {
+ "size": "16",
+ "text": "Testing your Apps"
+ }
+ },
+ {
+ "ID": "711",
+ "typeID": "Arrow",
+ "zOrder": "4",
+ "w": "1",
+ "h": "142",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "451",
+ "y": "1108",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "color": "10027263",
+ "p0": {
+ "x": -0.5,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.5259259259259259,
+ "y": 0
+ },
+ "p2": {
+ "x": -0.5,
+ "y": 141.5
+ }
+ }
+ },
+ {
+ "ID": "712",
+ "typeID": "Label",
+ "zOrder": "132",
+ "measuredW": "245",
+ "measuredH": "28",
+ "x": "325",
+ "y": "1234",
+ "properties": {
+ "size": "20",
+ "text": "Look at Backend Roadmap"
+ }
+ },
+ {
+ "ID": "713",
+ "typeID": "Label",
+ "zOrder": "133",
+ "measuredW": "153",
+ "measuredH": "24",
+ "x": "371",
+ "y": "1262",
+ "properties": {
+ "size": "16",
+ "text": "roadmap.sh/backend"
+ }
+ },
+ {
+ "ID": "714",
+ "typeID": "Canvas",
+ "zOrder": "5",
+ "w": "305",
+ "h": "84",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "295",
+ "y": "1218"
+ },
+ {
+ "ID": "715",
+ "typeID": "Arrow",
+ "zOrder": "3",
+ "w": "1",
+ "h": "98",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "450",
+ "y": "1272",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "color": "10027263",
+ "p0": {
+ "x": -0.5,
+ "y": -0.5
+ },
+ "p1": {
+ "x": 0.5259259259259262,
+ "y": 0
+ },
+ "p2": {
+ "x": -0.5,
+ "y": 97
+ },
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "716",
+ "typeID": "Canvas",
+ "zOrder": "2",
+ "w": "454",
+ "h": "90",
+ "measuredW": "100",
+ "measuredH": "70",
+ "x": "238",
+ "y": "183"
+ },
+ {
+ "ID": "719",
+ "typeID": "Arrow",
+ "zOrder": "0",
+ "w": "17",
+ "h": "62",
+ "measuredW": "150",
+ "measuredH": "100",
+ "x": "431",
+ "y": "121",
+ "properties": {
+ "curvature": "0",
+ "leftArrow": "false",
+ "rightArrow": "false",
+ "color": "10027263",
+ "p0": {
+ "x": 11,
+ "y": 0
+ },
+ "p1": {
+ "x": 0.4744027303754266,
+ "y": -0.2175767918088736
+ },
+ "p2": {
+ "x": 17,
+ "y": 62
+ },
+ "stroke": "dotted"
+ }
+ },
+ {
+ "ID": "723",
+ "typeID": "__group__",
+ "zOrder": "134",
+ "measuredW": "389",
+ "measuredH": "55",
+ "w": "389",
+ "h": "55",
+ "x": "270",
+ "y": "200",
+ "children": {
+ "controls": {
+ "control": [
+ {
+ "ID": "0",
+ "typeID": "Label",
+ "zOrder": "0",
+ "measuredW": "389",
+ "measuredH": "28",
+ "x": "0",
+ "y": "0",
+ "properties": {
+ "size": "20",
+ "text": "Backend Roadmap till Language Selection",
+ "bold": "true"
+ }
+ },
+ {
+ "ID": "1",
+ "typeID": "Label",
+ "zOrder": "1",
+ "measuredW": "153",
+ "measuredH": "24",
+ "x": "115",
+ "y": "31",
+ "properties": {
+ "size": "16",
+ "text": "roadmap.sh/backend"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "attributes": {
+ "name": "New Wireframe 3",
+ "order": 1000021.6092143646,
+ "parentID": null,
+ "notes": null
+ },
+ "branchID": "Master",
+ "resourceID": "D97C1354-BDA0-473B-89B0-4A4B6C35159C",
+ "mockupH": "1249",
+ "mockupW": "883",
+ "measuredW": "944",
+ "measuredH": "1370",
+ "version": "1.0"
+ }
+}
diff --git a/public/roadmaps/python.png b/public/roadmaps/python.png
new file mode 100644
index 000000000..4e0aa54e2
Binary files /dev/null and b/public/roadmaps/python.png differ
diff --git a/public/sitemap.xml b/public/sitemap.xml
index 0d3b17125..561f2f8bf 100644
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -27,25 +27,31 @@
https://roadmap.sh/android
monthly
- 2021-09-25T21:04:08.144Z
+ 2021-09-05T18:22:27.710Z
+ 1.0
+
+
+ https://roadmap.sh/python
+ monthly
+ 2021-09-26T19:59:45.842Z
1.0
https://roadmap.sh/postgresql-dba
monthly
- 2021-09-25T21:04:08.144Z
+ 2021-09-05T18:22:27.710Z
1.0
https://roadmap.sh/aws
monthly
- 2021-09-25T21:04:08.144Z
+ 2021-09-22T12:34:39.639Z
1.0
https://roadmap.sh/qa
monthly
- 2021-09-25T21:04:08.144Z
+ 2021-09-22T12:27:37.565Z
1.0
diff --git a/scripts/roadmaps-meta.js b/scripts/roadmaps-meta.js
index 5b06c1a7b..11344862a 100644
--- a/scripts/roadmaps-meta.js
+++ b/scripts/roadmaps-meta.js
@@ -25,6 +25,8 @@ const roadmapsMeta = roadmapDirs.reduce((metaAcc, roadmapDirName) => {
resourcesPath = path.join(roadmapDir.replace(STORAGE_PATH, ''), roadmapMeta.resourcesPath);
}
+ let metaPath = path.join(roadmapDir.replace(STORAGE_PATH, ''), 'meta.json');
+
console.log(`----------------------------`);
console.log(`[#] Roadmap: ${roadmapMeta.title}`);
console.log(`[x] Generating sidebar`);
@@ -36,6 +38,7 @@ const roadmapsMeta = roadmapDirs.reduce((metaAcc, roadmapDirName) => {
id: roadmapSlug,
contentPath: contentPath,
resourcesPath: resourcesPath,
+ metaPath: metaPath,
isUpcoming: roadmapMeta.isUpcoming || false
}
];
diff --git a/scripts/sitemap.js b/scripts/sitemap.js
index 6af264ffe..9aef6c8de 100644
--- a/scripts/sitemap.js
+++ b/scripts/sitemap.js
@@ -72,14 +72,16 @@ function getPageRoutes() {
return pageRoutes;
}
-function generateNode({
- slug,
- basePath,
- fileName,
- priority = null,
- date = null,
- frequency = 'monthly'
-}) {
+function generateNode(nodeProps) {
+ const {
+ slug,
+ basePath,
+ fileName,
+ priority = null,
+ date = null,
+ frequency = 'monthly'
+ } = nodeProps;
+
const pagePath = path.join(basePath, fileName);
let pageStats = {};
try {
@@ -126,7 +128,7 @@ function generateSiteMap() {
const roadmapsChunk = roadmaps.map((roadmap, roadmapCounter) => {
return generateNode({
basePath: ROADMAPS_PATH,
- fileName: `${roadmapCounter + 1}-${roadmap.id}/meta.json`,
+ fileName: roadmap.metaPath.replace('/roadmaps', ''),
slug: `/${roadmap.id}`,
date: roadmap.updatedAt,
priority: '1.0'