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'