From 5d164198d4ee5ba7aec4ef24004d613a77264f56 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Tue, 10 Jan 2023 02:58:07 +0400 Subject: [PATCH] Delete migration scripts and grouping on roadmap --- bin/content-migrator.cjs | 120 ------------------------------- bin/guide-migrator.cjs | 83 --------------------- bin/roadmap-metas.cjs | 116 ------------------------------ bin/roadmap-migrator.cjs | 132 ---------------------------------- bin/sync-content.sh | 30 -------- bin/video-migrator.cjs | 58 --------------- package.json | 1 - public/jsons/spring-boot.json | 2 +- 8 files changed, 1 insertion(+), 541 deletions(-) delete mode 100644 bin/content-migrator.cjs delete mode 100644 bin/guide-migrator.cjs delete mode 100644 bin/roadmap-metas.cjs delete mode 100644 bin/roadmap-migrator.cjs delete mode 100755 bin/sync-content.sh delete mode 100644 bin/video-migrator.cjs diff --git a/bin/content-migrator.cjs b/bin/content-migrator.cjs deleted file mode 100644 index 51b048ea8..000000000 --- a/bin/content-migrator.cjs +++ /dev/null @@ -1,120 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -// 1 - Renames each readme.md to index.md -// e.g. -// before => roadmaps/frontend/content/internet/readme.md -// after => roadmaps/frontend/content/internet/index.md -// -// 2 - Replaces the resource tags with short codes -// e.g. -// Free Content -// W3Schools — Learn CSS -// -// {% resources %} -// {% Blog "https://www.w3schools.com/css/", "W3Schools — Learn CSS" %} -// {% endresources %} -// -// 3 - Removes the index.md file from within the content dir i.e. to avoid `/frontend` permalink for `/frontend/index.md` -// Because we have the `/frontend` permalink serving the actual roadmap and not any content -const roadmapsDir = path.join(__dirname, '../src/roadmaps'); -const roadmapDirs = fs.readdirSync(roadmapsDir); - -roadmapDirs.forEach((roadmapDirName) => { - const roadmapDirPath = path.join(roadmapsDir, roadmapDirName); - const contentDirPath = path.join(roadmapDirPath, 'content'); - - console.log(`[Start] == Migrating ${roadmapDirName}`); - - if (!fs.existsSync(contentDirPath)) { - console.log(`Content dir not found ${roadmapDirName}/content`); - return; - } - - function handleContentDir(parentDirPath) { - const dirChildrenNames = fs.readdirSync(parentDirPath); - - dirChildrenNames.forEach((dirChildName) => { - let dirChildPath = path.join(parentDirPath, dirChildName); - - // If directory, handle the children for it - if (fs.lstatSync(dirChildPath).isDirectory()) { - handleContentDir(dirChildPath); - } - - ////////////////////////////////////////////////////////// - // 1 - Rename directories to remove the numbers - ////////////////////////////////////////////////////////// - // let newDirChildPath = path.join( - // path.dirname(dirChildPath), - // path.basename(dirChildPath).replace(/^\d+-/, '') - // ); - // fs.renameSync(dirChildPath, dirChildPath); - - ////////////////////////////////////////////////////////// - // 1 - Rename readme.md to index.md - ////////////////////////////////////////////////////////// - if (dirChildPath.endsWith('readme.md')) { - const newFilePath = path.join(path.dirname(dirChildPath), `index.md`); - - fs.renameSync(dirChildPath, newFilePath); - dirChildPath = newFilePath; - } - - ////////////////////////////////////////////////////////// - // 2 - Replace the resource tags with short codes - ////////////////////////////////////////////////////////// - if (fs.lstatSync(dirChildPath).isFile()) { - const fileContent = fs.readFileSync(dirChildPath, 'utf-8'); - - let resourceLinks = [...fileContent.matchAll(//g)].map(([fullMatch]) => { - // const resourceType = fullMatch.match(/badgeText=["'](.+?)["']/)[1]; - const link = fullMatch.match(/href=["'](.+?)["']/)[1]; - const text = fullMatch.match(/>([^<]+)<\/BadgeLink>$/)[1]; - - return `- [${text.replaceAll(/['"]/g, '')}](${link})`; - }); - - ////////////////////////////////////////////////////////////////////// - // Replace the dedicated roadmap tag with the short code - ////////////////////////////////////////////////////////////////////// - // prettier-ignore - const dedicatedRegex = //; - const dedicatedMatches = fileContent.match(dedicatedRegex); - - if (dedicatedMatches) { - const [, href, title] = dedicatedMatches; - - resourceLinks = [`- [Visit Dedicated ${title}](${href})`, ...resourceLinks]; - } - - resourceLinks = ['Visit the following resources to learn more:\n', ...resourceLinks]; - resourceLinks = resourceLinks.join('\n'); - - let newFileContent = fileContent.replace( - /([^<\/BadgeLink>]|\S|\s)+<\/BadgeLink>/, - resourceLinks - ); - - // In case if the resources were not wrapped in - newFileContent = newFileContent.replace( - /]|\S|\s)+<\/BadgeLink>/, - resourceLinks - ); - - fs.writeFileSync(dirChildPath, newFileContent); - } - }); - } - - handleContentDir(contentDirPath); - - // 3 - Removes the index.md file from within the content dir i.e. to avoid `/frontend` permalink for `/frontend/index.md` - // Because we have the `/frontend` permalink serving the actual roadmap and not any content - const contentRootFile = path.join(contentDirPath, '/index.md'); - if (fs.existsSync(contentRootFile)) { - fs.rmSync(contentRootFile); - } - - console.log(` == Migrated ${roadmapDirName}`); -}); diff --git a/bin/guide-migrator.cjs b/bin/guide-migrator.cjs deleted file mode 100644 index 32b2d913e..000000000 --- a/bin/guide-migrator.cjs +++ /dev/null @@ -1,83 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const yaml = require('json-to-pretty-yaml'); - -const contentDirPath = path.join(__dirname, './developer-roadmap/content'); -const guides = require('./developer-roadmap/content/guides.json'); -const authors = require('./developer-roadmap/content/authors.json'); - -const guideImagesDirPath = path.join(__dirname, './developer-roadmap/public/guides'); -const newGuideImagesDirPath = path.join(__dirname, '../public/guides'); - -// Remove the guide images directory -if (fs.existsSync(newGuideImagesDirPath)) { - fs.rmSync(newGuideImagesDirPath, { recursive: true }); -} - -fs.cpSync(guideImagesDirPath, newGuideImagesDirPath, { recursive: true }); - -// Remove the old guides directory -const newGuidesDirPath = path.join(__dirname, '../src/guides'); -if (fs.existsSync(newGuidesDirPath)) { - fs.rmSync(newGuidesDirPath, { recursive: true }); -} - -fs.mkdirSync(newGuidesDirPath); - -guides.forEach((guide) => { - const { id: guideId } = guide; - - const originalGuidePath = path.join(contentDirPath, 'guides', `${guideId}.md`); - const newGuidePath = path.join(__dirname, `../src/guides/${guideId}.md`); - - const guideWithoutFrontmatter = fs.readFileSync(originalGuidePath, 'utf8'); - fs.copyFileSync(originalGuidePath, newGuidePath); - - const guideAuthor = authors.find((author) => author.username === guide.authorUsername); - - const guideFrontMatter = yaml - .stringify({ - title: guide.title, - description: guide.description, - author: { - name: guideAuthor.name, - url: `https://twitter.com/${guideAuthor.twitter}`, - imageUrl: `${guideAuthor.picture}`, - }, - seo: { - title: `${guide.title} - roadmap.sh`, - description: guide.description, - }, - isNew: guide.isNew, - type: guide.type, - date: guide.createdAt.replace(/T.*/, ''), - sitemap: { - priority: 0.7, - changefreq: 'weekly', - }, - tags: ['guide', `${guide.type}-guide`, `guide-sitemap`], - }) - .replace(/date: "(.+?)"/, 'date: $1'); - - const guideWithUpdatedUrls = guideWithoutFrontmatter - .replace(/\[\!\[\]\((.+?\.png)\)\]\((.+?\.png)\)/g, '[![]($1)]($2)') - .replace(/\[\!\[\]\((.+?\.svg)\)\]\((.+?\.svg)\)/g, '[![]($1)]($2)') - .replace(/\/http/g, 'http') - .replace(/]\(\/guides\/(.+?)\.png\)/g, '](/guides/$1.png)') - .replace(/'); - - const guideWithFrontmatter = `---\n${guideFrontMatter}---\n\n${guideWithUpdatedUrls}`; - - console.log(`Writing guide ${guideId} to disk`); - fs.writeFileSync(newGuidePath, guideWithFrontmatter); -}); - -const oldAuthorAssetsPath = path.join(__dirname, 'developer-roadmap/public/authors'); -const newAuthorAssetsPath = path.join(__dirname, '../public/authors'); - -if (fs.existsSync(newAuthorAssetsPath)) { - fs.rmSync(newAuthorAssetsPath, { recursive: true }); -} - -fs.cpSync(oldAuthorAssetsPath, newAuthorAssetsPath, { recursive: true }); diff --git a/bin/roadmap-metas.cjs b/bin/roadmap-metas.cjs deleted file mode 100644 index cc4be9f4a..000000000 --- a/bin/roadmap-metas.cjs +++ /dev/null @@ -1,116 +0,0 @@ -module.exports = { - angular: { - dimensions: { - width: 968, - height: 2277.8, - }, - }, - 'aspnet-core': { - dimensions: { - width: 968, - height: 2773.45, - }, - }, - backend: { - dimensions: { - width: 968, - height: 2840.4, - }, - }, - blockchain: { - dimensions: { - width: 968, - height: 2173.87, - }, - }, - 'computer-science': { - dimensions: { - width: 968, - height: 3009.05, - }, - }, - 'design-system': { - dimensions: { - width: 968, - height: 2309.7, - }, - }, - devops: { - dimensions: { - width: 968, - height: 2527.46, - }, - }, - flutter: { - dimensions: { - width: 968, - height: 2042.2, - }, - }, - frontend: { - dimensions: { - width: 968, - height: 2734.48, - }, - }, - golang: { - dimensions: { - width: 968, - height: 1495.21, - }, - }, - java: { - dimensions: { - width: 968, - height: 1167.29, - }, - }, - javascript: { - dimensions: { - width: 968, - height: 2438.9, - }, - }, - nodejs: { - dimensions: { - width: 968, - height: 2474.06, - }, - }, - python: { - dimensions: { - width: 992, - height: 1259.03, - }, - }, - qa: { - dimensions: { - width: 968, - height: 2107.75, - }, - }, - react: { - dimensions: { - width: 968, - height: 1570.26, - }, - }, - 'software-architect': { - dimensions: { - width: 968, - height: 1882.18, - }, - }, - 'software-design-architecture': { - dimensions: { - width: 968, - height: 1764.66, - }, - }, - vue: { - dimensions: { - width: 968, - height: 1657.07, - }, - }, -}; diff --git a/bin/roadmap-migrator.cjs b/bin/roadmap-migrator.cjs deleted file mode 100644 index feaef8cc9..000000000 --- a/bin/roadmap-migrator.cjs +++ /dev/null @@ -1,132 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const yaml = require('json-to-pretty-yaml'); -const roadmapMetas = require('./roadmap-metas.cjs'); - -const oldAssetsPath = path.join(__dirname, 'developer-roadmap/public'); -const newAssetsPath = path.join(__dirname, '../public/'); - -// Create JSONs dir -const newJsonsPath = path.join(newAssetsPath, 'jsons'); -if (fs.existsSync(newJsonsPath)) { - fs.rmSync(newJsonsPath, { recursive: true }); -} - -fs.mkdirSync(newJsonsPath); - -// Create PDFs dir -const newPdfsPath = path.join(newAssetsPath, 'pdfs'); -if (fs.existsSync(newPdfsPath)) { - fs.rmSync(newPdfsPath, { recursive: true }); -} - -fs.mkdirSync(newPdfsPath); - -const oldRoadmapsDirPath = path.join(__dirname, 'developer-roadmap/content/roadmaps'); -const newRoadmapsDirPath = path.join(__dirname, '../src/roadmaps'); - -if (fs.existsSync(newRoadmapsDirPath)) { - fs.rmSync(newRoadmapsDirPath, { recursive: true }); -} - -fs.mkdirSync(newRoadmapsDirPath); - -const oldRoadmaps = fs - .readdirSync(oldRoadmapsDirPath) - .map((roadmapDirName) => path.join(oldRoadmapsDirPath, roadmapDirName)); - -const orderInfo = {}; -const typeCounter = { - role: 1, - tool: 1, -}; - -// Calculate the sorting information for the roadmaps -oldRoadmaps.forEach((oldRoadmapPath) => { - const roadmapId = path.basename(oldRoadmapPath).replace(/\d+-/g, '').toLowerCase(); - const oldRoadmapMeta = require(path.join(oldRoadmapPath, 'meta.json')); - - orderInfo[roadmapId] = typeCounter[oldRoadmapMeta.type]; - typeCounter[oldRoadmapMeta.type] += 1; -}); - -// Iterate and create new roadmaps -oldRoadmaps.forEach((oldRoadmapPath) => { - const roadmapId = path.basename(oldRoadmapPath).replace(/\d+-/g, '').toLowerCase(); - - const metaToMerge = roadmapMetas[roadmapId] ?? {}; - const oldRoadmapMeta = require(path.join(oldRoadmapPath, 'meta.json')); - const isTextual = oldRoadmapMeta?.landingPath?.endsWith('.md'); - - const hasContentDir = fs.existsSync(path.join(oldRoadmapPath, 'content')); - - const roadmapFileContent = isTextual - ? fs.readFileSync(path.join(oldRoadmapPath, oldRoadmapMeta.landingPath), 'utf8') - : ''; - - const roadmapFileContentWithUpdatedUrls = roadmapFileContent - .replace(/\[\!\[\]\((.+?\.png)\)\]\((.+?\.png)\)/g, '[![](/assets$1)](/assets$2)') - .replace(/\[\!\[\]\((.+?\.svg)\)\]\((.+?\.svg)\)/g, '[![](/assets$1)](/assets$2)') - .replace(/\[\!\[\]\((.+?\.svg)\)\]\((.+?\.png)\)/g, '[![](/assets$1)](/assets$2)') - .replace(/assetshttp\//g, 'http') - .replace(/assetshttps:\/\//g, 'https://') - .replace(/\/http/g, 'http') - .replace(/]\(\/roadmaps\/(.+?)\.png\)/g, '](/assets/roadmaps/$1.png)') - .replace(/]\(\/roadmaps\/(.+?)\.svg\)/g, '](/assets/roadmaps/$1.svg)') - .replace(/'); - - const hasJson = fs.existsSync(path.join(oldAssetsPath, `/project/${roadmapId}.json`)); - - const newRoadmapMeta = { - ...( hasJson ? { jsonUrl: `/jsons/${roadmapId}.json`} : {}), - pdfUrl: `/pdfs/${roadmapId}.pdf`, - order: orderInfo[roadmapId], - featuredTitle: - oldRoadmapMeta.featuredTitle === 'Software Design and Architecture' - ? 'Software Design' - : oldRoadmapMeta.featuredTitle, - featuredDescription: oldRoadmapMeta.featuredDescription, - title: oldRoadmapMeta.title, - description: oldRoadmapMeta.description, - isNew: oldRoadmapMeta.isNew, - hasTopics: hasContentDir, - ...metaToMerge, - seo: oldRoadmapMeta.seo, - relatedRoadmaps: oldRoadmapMeta.relatedRoadmaps, - sitemap: { - priority: 1, - changefreq: 'monthly', - }, - tags: ['roadmap', 'main-sitemap', `${oldRoadmapMeta.type === 'tool' ? 'skill' : oldRoadmapMeta.type}-roadmap`], - }; - - const frontmatter = yaml.stringify(newRoadmapMeta); - const newRoadmapDirPath = path.join(newRoadmapsDirPath, roadmapId); - const newRoadmapFilePath = path.join(newRoadmapDirPath, `/${roadmapId}.md`); - - fs.mkdirSync(newRoadmapDirPath); - fs.writeFileSync(newRoadmapFilePath, `---\n${frontmatter}---\n\n${roadmapFileContentWithUpdatedUrls}`); - - const jsonFile = path.join(oldAssetsPath, oldRoadmapMeta.jsonUrl || '/unknown'); - const pdfFile = path.join(oldAssetsPath, oldRoadmapMeta.pdfUrl || '/unknown'); - - if (fs.existsSync(jsonFile)) { - fs.copyFileSync(jsonFile, path.join(newJsonsPath, `${roadmapId}.json`)); - } - - if (fs.existsSync(pdfFile)) { - fs.copyFileSync(pdfFile, path.join(newPdfsPath, `${roadmapId}.pdf`)); - } - - // Copy the content directory - const oldRoadmapContentDir = path.join(oldRoadmapPath, 'content'); - if (fs.existsSync(oldRoadmapContentDir)) { - fs.cpSync(oldRoadmapContentDir, path.join(newRoadmapDirPath, 'content'), { recursive: true }); - } -}); - -const roadmapAssets = path.join(oldAssetsPath, 'roadmaps'); -if (fs.existsSync(roadmapAssets)) { - fs.cpSync(roadmapAssets, path.join(newAssetsPath, 'roadmaps'), { recursive: true }); -} diff --git a/bin/sync-content.sh b/bin/sync-content.sh deleted file mode 100755 index 94e411017..000000000 --- a/bin/sync-content.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -set -e - -# Change working directory to the directory of this script -cd "$(dirname "$0")" - -if [ ! -d "./developer-roadmap" ]; then - git clone --depth 1 -b master git@github.com:kamranahmedse/developer-roadmap.git -fi - -echo "Removing old directories" -rm -rf ../src/videos -rm -rf ../src/guides -rm -rf ../src/roadmaps - -rm -rf ../public/jsons -rm -rf ../public/pdfs - -echo "=== Migrating Roadmaps ===" -node roadmap-migrator.cjs - -echo "=== Migrating Content ===" -node content-migrator.cjs - -echo "=== Migrating Guides ===" -node guide-migrator.cjs - -echo "=== Migrating Videos ===" -node video-migrator.cjs diff --git a/bin/video-migrator.cjs b/bin/video-migrator.cjs deleted file mode 100644 index 3b4acf034..000000000 --- a/bin/video-migrator.cjs +++ /dev/null @@ -1,58 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const yaml = require('json-to-pretty-yaml'); - -const contentDirPath = path.join(__dirname, './developer-roadmap/content'); -const videos = require('./developer-roadmap/content/videos.json'); - -// Remove the old videos directory -const newVideosDirPath = path.join(__dirname, '../src/videos'); -if (fs.existsSync(newVideosDirPath)) { - fs.rmSync(newVideosDirPath, { recursive: true }); -} - -fs.mkdirSync(newVideosDirPath); - -videos.forEach((video) => { - const { id: videoId } = video; - - const originalVideoPath = path.join( - contentDirPath, - 'videos', - `${videoId}.md` - ); - - const newVideoPath = path.join(__dirname, `../src/videos/${videoId}.md`); - - const videoWithoutFrontmatter = fs.readFileSync(originalVideoPath, 'utf8'); - fs.copyFileSync(originalVideoPath, newVideoPath); - - const videoFrontMatter = yaml - .stringify({ - title: video.title, - description: video.description, - duration: video.duration, - isNew: video.isNew, - date: video.createdAt.replace(/T.*/, ''), - author: { - name: 'Kamran Ahmed', - url: `https://twitter.com/kamranahmedse`, - imageUrl: `/authors/kamranahmedse.jpeg`, - }, - sitemap: { - priority: 0.7, - changefreq: 'weekly', - }, - tags: ['video', `video-sitemap`], - }) - .replace(/date: "(.+?)"/, 'date: $1'); - - const videoWithIframeClass = videoWithoutFrontmatter - .replace(/'); - - const videoWithFrontmatter = `---\n${videoFrontMatter}---\n\n${videoWithIframeClass}`; - - console.log(`Writing video ${videoId} to disk`); - fs.writeFileSync(newVideoPath, videoWithFrontmatter); -}); diff --git a/package.json b/package.json index bc3476203..c30c0f0f1 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,6 @@ "preview": "astro preview", "astro": "astro", "deploy": "NODE_DEBUG=gh-pages gh-pages -d dist -t", - "sync-content": "sh ./bin/sync-content.sh", "compress:jsons": "node bin/compress-jsons.cjs", "upgrade": "ncu -u", "roadmap-links": "node bin/roadmap-links.cjs" diff --git a/public/jsons/spring-boot.json b/public/jsons/spring-boot.json index 98660e09d..02c21dbd6 100644 --- a/public/jsons/spring-boot.json +++ b/public/jsons/spring-boot.json @@ -1 +1 @@ -{"mockup":{"controls":{"control":[{"ID":"14109","typeID":"Arrow","zOrder":"34","w":"173","h":"268","measuredW":"150","measuredH":"100","x":"727","y":"158","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":172.6216144658764,"y":0.236415956616014},"p1":{"x":0.5789624059056846,"y":0.2176906025812808},"p2":{"x":0.14440715214993816,"y":268.6144146474609}}},{"ID":"14110","typeID":"Label","zOrder":"35","measuredW":"149","measuredH":"36","x":"823","y":"106","properties":{"size":"28","text":"Spring Boot"}},{"ID":"14162","typeID":"Canvas","zOrder":"36","w":"350","h":"141","measuredW":"100","measuredH":"70","x":"1150","y":"40"},{"ID":"14163","typeID":"Label","zOrder":"37","measuredW":"314","measuredH":"25","x":"1164","y":"57","properties":{"size":"17","text":"Find the detailed version of this roadmap"}},{"ID":"14164","typeID":"Label","zOrder":"38","measuredW":"319","measuredH":"25","x":"1164","y":"85","properties":{"size":"17","text":"along with resources and other roadmaps"}},{"ID":"14165","typeID":"__group__","zOrder":"39","measuredW":"320","measuredH":"45","w":"320","h":"45","x":"1165","y":"121","properties":{"controlName":"ext_link:roadmap.sh"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"320","h":"45","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"borderColor":"4273622","color":"4273622"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"105","measuredH":"28","x":"141","y":"8","properties":{"color":"16777215","size":"20","text":"roadmap.sh"}},{"ID":"2","typeID":"Label","zOrder":"2","measuredW":"45","measuredH":"28","x":"66","y":"8","properties":{"color":"16777215","size":"20","text":"https"}},{"ID":"3","typeID":"Label","zOrder":"3","measuredW":"5","measuredH":"28","x":"113","y":"8","properties":{"color":"16777215","size":"20","text":":"}},{"ID":"4","typeID":"Label","zOrder":"4","measuredW":"10","measuredH":"28","x":"120","y":"9","properties":{"color":"16777215","size":"20","text":"/"}},{"ID":"5","typeID":"Label","zOrder":"5","measuredW":"10","measuredH":"28","x":"128","y":"9","properties":{"color":"16777215","size":"20","text":"/"}}]}}},{"ID":"14232","typeID":"__group__","zOrder":"40","measuredW":"391","measuredH":"55","w":"391","h":"55","x":"690","y":"219","properties":{"controlName":"ext_link:roadmap.sh/java"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"391","h":"55","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"4273622","borderColor":"4273622"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"296","measuredH":"28","x":"48","y":"14","properties":{"size":"20","color":"16777215","text":"Learn Java / Visit Java Roadmap"}}]}}},{"ID":"14233","typeID":"Arrow","zOrder":"41","w":"1","h":"64","measuredW":"150","measuredH":"100","x":"897","y":"30","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":-0.3586399639038973,"y":0},"p1":{"x":0.32941176470588224,"y":0},"p2":{"x":-0.3586399639038973,"y":64},"stroke":"dotted"}},{"ID":"14237","typeID":"Canvas","zOrder":"42","w":"408","h":"202","measuredW":"100","measuredH":"70","x":"215","y":"40"},{"ID":"14238","typeID":"__group__","zOrder":"43","measuredW":"155","measuredH":"27","w":"155","h":"27","x":"250","y":"115","properties":{"controlName":"ext_link:roadmap.sh/java"},"children":{"controls":{"control":[{"ID":"0","typeID":"Label","zOrder":"0","measuredW":"122","measuredH":"26","x":"33","y":"0","properties":{"size":"18","text":"Java Roadmap"}},{"ID":"1","typeID":"__group__","zOrder":"1","measuredW":"24","measuredH":"24","w":"24","h":"24","x":"0","y":"3","children":{"controls":{"control":[{"ID":"0","typeID":"Icon","zOrder":"0","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"16777215","icon":{"ID":"circle","size":"small"}}},{"ID":"1","typeID":"Icon","zOrder":"1","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"10066329","icon":{"ID":"check-circle","size":"small"}}}]}}}]}}},{"ID":"14239","typeID":"__group__","zOrder":"44","measuredW":"189","measuredH":"27","w":"189","h":"27","x":"250","y":"151","properties":{"controlName":"ext_link:roadmap.sh/backend"},"children":{"controls":{"control":[{"ID":"0","typeID":"Label","zOrder":"0","measuredW":"156","measuredH":"26","x":"33","y":"0","properties":{"size":"18","text":"Backend Roadmap"}},{"ID":"1","typeID":"__group__","zOrder":"1","measuredW":"24","measuredH":"24","w":"24","h":"24","x":"0","y":"3","children":{"controls":{"control":[{"ID":"0","typeID":"Icon","zOrder":"0","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"16777215","icon":{"ID":"circle","size":"small"}}},{"ID":"1","typeID":"Icon","zOrder":"1","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"10066329","icon":{"ID":"check-circle","size":"small"}}}]}}}]}}},{"ID":"14240","typeID":"__group__","zOrder":"45","measuredW":"183","measuredH":"27","w":"183","h":"27","x":"250","y":"187","properties":{"controlName":"ext_link:roadmap.sh/devops"},"children":{"controls":{"control":[{"ID":"0","typeID":"Label","zOrder":"0","measuredW":"150","measuredH":"26","x":"33","y":"0","properties":{"size":"18","text":"DevOps Roadmap"}},{"ID":"1","typeID":"__group__","zOrder":"1","measuredW":"24","measuredH":"24","w":"24","h":"24","x":"0","y":"3","children":{"controls":{"control":[{"ID":"0","typeID":"Icon","zOrder":"0","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"16777215","icon":{"ID":"circle","size":"small"}}},{"ID":"1","typeID":"Icon","zOrder":"1","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"10066329","icon":{"ID":"check-circle","size":"small"}}}]}}}]}}},{"ID":"14243","typeID":"Label","zOrder":"46","measuredW":"209","measuredH":"32","x":"250","y":"67","properties":{"size":"24","text":"Related Roadmaps"}},{"ID":"14249","typeID":"TextArea","zOrder":"47","w":"238","h":"50","measuredW":"200","measuredH":"140","x":"518","y":"405","properties":{"color":"16776960"}},{"ID":"14250","typeID":"Label","zOrder":"48","measuredW":"98","measuredH":"26","x":"588","y":"417","properties":{"size":"18","text":"Spring Core"}},{"ID":"14257","typeID":"TextArea","zOrder":"49","w":"180","h":"215","measuredW":"200","measuredH":"140","x":"577","y":"502"},{"ID":"14258","typeID":"Label","zOrder":"50","measuredW":"98","measuredH":"26","x":"618","y":"517","properties":{"size":"18","text":"Introduction"}},{"ID":"14259","typeID":"TextArea","zOrder":"51","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"548","y":"553","properties":{"color":"16770457"}},{"ID":"14260","typeID":"Label","zOrder":"52","measuredW":"99","measuredH":"26","x":"617","y":"564","properties":{"size":"18","text":"Terminology"}},{"ID":"14261","typeID":"TextArea","zOrder":"53","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"548","y":"605","properties":{"color":"16770457"}},{"ID":"14262","typeID":"Label","zOrder":"54","measuredW":"99","measuredH":"26","x":"617","y":"616","properties":{"size":"18","text":"Architecture"}},{"ID":"14263","typeID":"TextArea","zOrder":"55","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"548","y":"656","properties":{"color":"16770457"}},{"ID":"14264","typeID":"Label","zOrder":"56","measuredW":"99","measuredH":"26","x":"617","y":"667","properties":{"size":"18","text":"Why Spring?"}},{"ID":"14265","typeID":"Arrow","zOrder":"33","w":"146","h":"2","measuredW":"150","measuredH":"100","x":"411","y":"426","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":146.01679645265642,"y":2.0707373480713613},"p1":{"x":0.4642857142857146,"y":-0.003992113361953187},"p2":{"x":0.24143192912043787,"y":-0.11897394490631541}}},{"ID":"14280","typeID":"Arrow","zOrder":"32","w":"1","h":"112","measuredW":"150","measuredH":"100","x":"666","y":"431","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":0.24143192912038103,"y":111.61050470611792},"p1":{"x":0.46428571428571463,"y":-0.003992113361953184},"p2":{"x":0.24143192912043787,"y":-0.11897394490631541}}},{"ID":"14301","typeID":"Arrow","zOrder":"31","w":"177","h":"214","measuredW":"150","measuredH":"100","x":"440","y":"435","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":177.4682317265881,"y":0.25033397230828314},"p1":{"x":0.46461829054937476,"y":-0.1088245057213903},"p2":{"x":0.022661364670909734,"y":214.50946531263833}}},{"ID":"14302","typeID":"Arrow","zOrder":"30","w":"149","h":"109","measuredW":"150","measuredH":"100","x":"441","y":"314","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":148.8332898870765,"y":109.16004691752192},"p1":{"x":0.6360127761511841,"y":0.09156241682193235},"p2":{"x":0.2954774997014624,"y":0.347463424444868}}},{"ID":"14303","typeID":"Arrow","zOrder":"29","w":"116","h":"57","measuredW":"150","measuredH":"100","x":"434","y":"364","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":116.10806099277852,"y":57.43286305255248},"p1":{"x":0.5967446581465075,"y":0.06448697652928094},"p2":{"x":0.3867420398235595,"y":0.43579550855969273}}},{"ID":"14304","typeID":"Arrow","zOrder":"28","w":"119","h":"41","measuredW":"150","measuredH":"100","x":"434","y":"439","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":118.69883679023269,"y":-0.2952982977527654},"p1":{"x":0.4935153583617746,"y":-0.09488054607508538},"p2":{"x":-0.3404418251459447,"y":40.06584992139261}}},{"ID":"14305","typeID":"Arrow","zOrder":"27","w":"128","h":"93","measuredW":"150","measuredH":"100","x":"434","y":"439","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":127.33475611508015,"y":-0.2952982977527654},"p1":{"x":0.49351535836177457,"y":-0.09488054607508535},"p2":{"x":-0.476849892661221,"y":92.97263041059898}}},{"ID":"14306","typeID":"Arrow","zOrder":"26","w":"138","h":"145","measuredW":"150","measuredH":"100","x":"435","y":"442","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":138.4250431698665,"y":0.15906943218618608},"p1":{"x":0.49351535836177424,"y":-0.09488054607508524},"p2":{"x":0.25033397230828314,"y":145.24251408962232}}},{"ID":"14307","typeID":"Arrow","zOrder":"25","w":"281","h":"1","measuredW":"150","measuredH":"100","x":"739","y":"437","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":281.3020743683919,"y":0.8810260550936846},"p1":{"x":0.4642857142857147,"y":-0.003992113361953183},"p2":{"x":0.48803395698428176,"y":0.8810260550936846}}},{"ID":"14311","typeID":"TextArea","zOrder":"71","w":"238","h":"50","measuredW":"200","measuredH":"140","x":"882","y":"408","properties":{"color":"16776960"}},{"ID":"14312","typeID":"Label","zOrder":"72","measuredW":"123","measuredH":"26","x":"939","y":"420","properties":{"size":"18","text":"Spring Security"}},{"ID":"14314","typeID":"TextArea","zOrder":"73","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"255","properties":{"color":"16770457"}},{"ID":"14315","typeID":"Label","zOrder":"74","measuredW":"117","measuredH":"26","x":"1272","y":"266","properties":{"size":"18","text":"Authentication"}},{"ID":"14316","typeID":"TextArea","zOrder":"75","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"306","properties":{"color":"16770457"}},{"ID":"14317","typeID":"Label","zOrder":"76","measuredW":"106","measuredH":"26","x":"1278","y":"317","properties":{"size":"18","text":"Authorization"}},{"ID":"14318","typeID":"TextArea","zOrder":"77","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"357","properties":{"color":"16770457"}},{"ID":"14319","typeID":"Label","zOrder":"78","measuredW":"61","measuredH":"26","x":"1300","y":"368","properties":{"size":"18","text":"OAuth2"}},{"ID":"14320","typeID":"TextArea","zOrder":"79","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"409","properties":{"color":"16770457"}},{"ID":"14321","typeID":"Label","zOrder":"80","measuredW":"159","measuredH":"26","x":"1251","y":"420","properties":{"size":"18","text":"JWT Authentication"}},{"ID":"14322","typeID":"Arrow","zOrder":"24","w":"148","h":"3","measuredW":"150","measuredH":"100","x":"1099","y":"434","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":148.01679645265642,"y":0.07073734807136134},"p1":{"x":0.46428571428571463,"y":-0.003992113361953189},"p2":{"x":-0.42272979529752774,"y":2.9775178372777873}}},{"ID":"14323","typeID":"Arrow","zOrder":"23","w":"138","h":"50","measuredW":"150","measuredH":"100","x":"1088","y":"375","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":138.38887621244385,"y":-0.201101301623396},"p1":{"x":0.4863185723727692,"y":0.052478519497686664},"p2":{"x":0.214167014885561,"y":49.88723078249143}}},{"ID":"14324","typeID":"Arrow","zOrder":"22","w":"161","measuredW":"150","measuredH":"100","x":"1061","y":"320","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":160.20732461753528,"y":-0.4709849806466764},"p1":{"x":0.5161401966326554,"y":0.0868716679471183},"p2":{"x":-0.42077482462605076,"y":99.70567918758297}}},{"ID":"14325","typeID":"Arrow","zOrder":"21","w":"164","h":"147","measuredW":"150","measuredH":"100","x":"1055","y":"271","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":164.48014075256583,"y":0.1678668002079462},"p1":{"x":0.5161401966326553,"y":0.08687166794711838},"p2":{"x":0.39767358046537993,"y":146.97849532261353}}},{"ID":"14327","typeID":"TextArea","zOrder":"20","w":"238","h":"55","measuredW":"200","measuredH":"140","x":"883","y":"503","properties":{"borderColor":"16777215"}},{"ID":"14328","typeID":"Label","zOrder":"81","measuredW":"107","measuredH":"28","x":"948","y":"517","properties":{"size":"20","text":"Spring Boot"}},{"ID":"14329","typeID":"Arrow","zOrder":"19","w":"1","h":"179","measuredW":"150","measuredH":"100","x":"1000","y":"431","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":178.58144672562196},"p1":{"x":0.4642857142857148,"y":-0.003992113361953182},"p2":{"x":0.48803395698428176,"y":-0.11897394490631541}}},{"ID":"14331","typeID":"TextArea","zOrder":"82","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"584","properties":{"color":"16776960"}},{"ID":"14332","typeID":"Label","zOrder":"83","measuredW":"165","measuredH":"26","x":"1248","y":"595","properties":{"size":"18","text":"Spring Boot Starters"}},{"ID":"14333","typeID":"TextArea","zOrder":"84","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"635","properties":{"color":"16776960"}},{"ID":"14334","typeID":"Label","zOrder":"85","measuredW":"142","measuredH":"26","x":"1260","y":"646","properties":{"size":"18","text":"Autoconfiguration"}},{"ID":"14335","typeID":"TextArea","zOrder":"86","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"686","properties":{"color":"16776960"}},{"ID":"14336","typeID":"Label","zOrder":"87","measuredW":"77","measuredH":"26","x":"1292","y":"697","properties":{"size":"18","text":"Actuators"}},{"ID":"14337","typeID":"TextArea","zOrder":"88","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"738","properties":{"color":"16776960"}},{"ID":"14338","typeID":"Label","zOrder":"89","measuredW":"148","measuredH":"26","x":"1257","y":"749","properties":{"size":"18","text":"Embedded Server"}},{"ID":"14339","typeID":"Arrow","zOrder":"18","w":"537","h":"2","measuredW":"150","measuredH":"100","x":"786","y":"945","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":536.5558496625544,"y":1.8810260550936846},"p1":{"x":0.4642857142857152,"y":-0.0039921133619531856},"p2":{"x":-0.2750123853365949,"y":1.8810260550936846}}},{"ID":"14342","typeID":"TextArea","zOrder":"90","w":"240","h":"47","measuredW":"200","measuredH":"140","x":"1212","y":"790","properties":{"color":"16776960"}},{"ID":"14343","typeID":"Label","zOrder":"91","measuredW":"82","measuredH":"26","x":"1291","y":"801","properties":{"size":"18","text":"Hibernate"}},{"ID":"14344","typeID":"TextArea","zOrder":"92","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"919","y":"692","properties":{"color":"16770457"}},{"ID":"14345","typeID":"Label","zOrder":"93","measuredW":"105","measuredH":"26","x":"965","y":"703","properties":{"size":"18","text":"Transactions"}},{"ID":"14346","typeID":"TextArea","zOrder":"94","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"919","y":"744","properties":{"color":"16770457"}},{"ID":"14347","typeID":"Label","zOrder":"95","measuredW":"111","measuredH":"26","x":"962","y":"755","properties":{"size":"18","text":"Relationships"}},{"ID":"14348","typeID":"TextArea","zOrder":"96","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"919","y":"796","properties":{"color":"16770457"}},{"ID":"14349","typeID":"Label","zOrder":"97","measuredW":"121","measuredH":"26","x":"957","y":"807","properties":{"size":"18","text":"Entity Lifecycle"}},{"ID":"14350","typeID":"Arrow","zOrder":"15","w":"146","h":"1","measuredW":"150","measuredH":"100","x":"1086","y":"828","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":146.7141818215698,"y":0.8543135727297795},"p1":{"x":0.46428571428571463,"y":-0.0039921133619531856},"p2":{"x":0.3878607219769492,"y":1.1528447227344714}}},{"ID":"14351","typeID":"Arrow","zOrder":"16","w":"119","h":"49","measuredW":"150","measuredH":"100","x":"1105","y":"767","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":119.2068375715935,"y":48.85431357272978},"p1":{"x":0.5272614687537527,"y":0.09288510762768885},"p2":{"x":0.10401807192488377,"y":-0.4882830771329054}}},{"ID":"14352","typeID":"Arrow","zOrder":"17","w":"124","h":"99","measuredW":"150","measuredH":"100","x":"1103","y":"712","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":124.60977527158389,"y":98.74990702274397},"p1":{"x":0.5272614687537526,"y":0.09288510762768905},"p2":{"x":0.40254922192957565,"y":0.06471372301859901}}},{"ID":"14353","typeID":"TextArea","zOrder":"98","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"578","y":"932","properties":{"color":"16776960"}},{"ID":"14354","typeID":"Label","zOrder":"99","measuredW":"97","measuredH":"26","x":"648","y":"943","properties":{"size":"18","text":"Spring Data"}},{"ID":"14355","typeID":"Arrow","zOrder":"14","w":"1","h":"131","measuredW":"150","measuredH":"100","x":"1324","y":"817","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":-0.2457271352116095,"y":131.1045059699236},"p1":{"x":0.4642857142857149,"y":-0.003992113361953185},"p2":{"x":-0.2457271352116095,"y":-0.11897394490631541}}},{"ID":"14356","typeID":"Arrow","zOrder":"13","w":"224","h":"1","measuredW":"150","measuredH":"100","x":"1001","y":"609","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":223.55584966255435,"y":0.8810260550936846},"p1":{"x":0.4642857142857149,"y":-0.003992113361953184},"p2":{"x":-0.2457271352116095,"y":0.8810260550936846}}},{"ID":"14357","typeID":"TextArea","zOrder":"100","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"577","y":"1023","properties":{"color":"16770457"}},{"ID":"14358","typeID":"Label","zOrder":"101","measuredW":"131","measuredH":"26","x":"630","y":"1034","properties":{"size":"18","text":"Spring Data JPA"}},{"ID":"14359","typeID":"TextArea","zOrder":"102","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"577","y":"1075","properties":{"color":"16770457"}},{"ID":"14360","typeID":"Label","zOrder":"103","measuredW":"183","measuredH":"26","x":"604","y":"1086","properties":{"size":"18","text":"Spring Data MongoDB"}},{"ID":"14361","typeID":"TextArea","zOrder":"104","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"577","y":"1127","properties":{"color":"16770457"}},{"ID":"14362","typeID":"Label","zOrder":"105","measuredW":"148","measuredH":"26","x":"622","y":"1138","properties":{"size":"18","text":"Spring Data JDBC"}},{"ID":"14363","typeID":"Arrow","zOrder":"12","w":"1","h":"98","measuredW":"150","measuredH":"100","x":"695","y":"957","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":97.58144672562196},"p1":{"x":0.46428571428571486,"y":-0.003992113361953183},"p2":{"x":0.48803395698428176,"y":0.0027856225734694817},"stroke":"dotted"}},{"ID":"14364","typeID":"TextArea","zOrder":"106","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"577","y":"838","properties":{"color":"16776960"}},{"ID":"14365","typeID":"Label","zOrder":"107","measuredW":"114","measuredH":"26","x":"647","y":"849","properties":{"size":"18","text":"Microservices"}},{"ID":"14366","typeID":"Arrow","zOrder":"11","w":"1","h":"94","measuredW":"150","measuredH":"100","x":"695","y":"865","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":94.58144672562196},"p1":{"x":0.46428571428571475,"y":-0.003992113361953182},"p2":{"x":0.48803395698428176,"y":0.4641401455688765}}},{"ID":"14369","typeID":"TextArea","zOrder":"108","w":"153","h":"323","measuredW":"200","measuredH":"140","x":"360","y":"757"},{"ID":"14370","typeID":"Label","zOrder":"109","measuredW":"105","measuredH":"26","x":"384","y":"771","properties":{"size":"18","text":"Spring Cloud"}},{"ID":"14372","typeID":"TextArea","zOrder":"110","w":"284","h":"47","measuredW":"200","measuredH":"140","x":"210","y":"806","properties":{"color":"16770457"}},{"ID":"14373","typeID":"Label","zOrder":"111","measuredW":"180","measuredH":"26","x":"262","y":"817","properties":{"size":"18","text":"Spring Cloud Gateway"}},{"ID":"14374","typeID":"TextArea","zOrder":"112","w":"284","h":"47","measuredW":"200","measuredH":"140","x":"210","y":"858","properties":{"color":"16770457"}},{"ID":"14375","typeID":"Label","zOrder":"113","measuredW":"105","measuredH":"26","x":"299","y":"869","properties":{"size":"18","text":"Cloud Config"}},{"ID":"14376","typeID":"TextArea","zOrder":"114","w":"284","h":"47","measuredW":"200","measuredH":"140","x":"210","y":"911","properties":{"color":"16770457"}},{"ID":"14377","typeID":"Label","zOrder":"115","measuredW":"232","measuredH":"26","x":"236","y":"922","properties":{"size":"18","text":"Spring Cloud Circuit Breaker"}},{"ID":"14378","typeID":"TextArea","zOrder":"116","w":"284","h":"47","measuredW":"200","measuredH":"140","x":"210","y":"963","properties":{"color":"16770457"}},{"ID":"14379","typeID":"Label","zOrder":"117","measuredW":"201","measuredH":"26","x":"251","y":"974","properties":{"size":"18","text":"Spring Cloud OpenFeign"}},{"ID":"14380","typeID":"TextArea","zOrder":"118","w":"91","h":"47","measuredW":"200","measuredH":"140","x":"210","y":"1017","properties":{"color":"16770457"}},{"ID":"14381","typeID":"Label","zOrder":"119","measuredW":"55","measuredH":"26","x":"230","y":"1028","properties":{"size":"18","text":"Hystrix"}},{"ID":"14382","typeID":"TextArea","zOrder":"120","w":"91","h":"47","measuredW":"200","measuredH":"140","x":"307","y":"1017","properties":{"color":"16770457"}},{"ID":"14383","typeID":"Label","zOrder":"121","measuredW":"51","measuredH":"26","x":"327","y":"1028","properties":{"size":"18","text":"Sleuth"}},{"ID":"14384","typeID":"TextArea","zOrder":"122","w":"91","h":"47","measuredW":"200","measuredH":"140","x":"403","y":"1017","properties":{"color":"16770457"}},{"ID":"14385","typeID":"Label","zOrder":"123","measuredW":"57","measuredH":"26","x":"420","y":"1028","properties":{"size":"18","text":"Eureka"}},{"ID":"14386","typeID":"Arrow","zOrder":"10","w":"148","h":"1","measuredW":"150","measuredH":"100","x":"502","y":"861","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":148.01679645265642,"y":1.0707373480713613},"p1":{"x":0.4642857142857146,"y":-0.003992113361953188},"p2":{"x":-0.10033385901039082,"y":0.6329018604571957}}},{"ID":"14387","typeID":"Arrow","zOrder":"9","w":"213","h":"1","measuredW":"150","measuredH":"100","x":"801","y":"964","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":212.98029127925827,"y":0.8810260550936846},"p1":{"x":0.46428571428571536,"y":-0.003992113361953186},"p2":{"x":-0.2750123853365949,"y":0.8810260550936846}}},{"ID":"14388","typeID":"Arrow","zOrder":"124","w":"1","h":"339","measuredW":"150","measuredH":"100","x":"1015","y":"965","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":338.4082071365567},"p1":{"x":0.46428571428571513,"y":-0.003992113361953183},"p2":{"x":0.48803395698428176,"y":-0.11897394490631541}}},{"ID":"14389","typeID":"TextArea","zOrder":"125","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"919","y":"1117","properties":{"color":"16776960"}},{"ID":"14390","typeID":"Label","zOrder":"126","measuredW":"97","measuredH":"26","x":"967","y":"1128","properties":{"size":"18","text":"Spring MVC"}},{"ID":"14391","typeID":"TextArea","zOrder":"127","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"1229","y":"1040","properties":{"color":"16770457"}},{"ID":"14392","typeID":"Label","zOrder":"128","measuredW":"57","measuredH":"26","x":"1297","y":"1051","properties":{"size":"18","text":"Servlet"}},{"ID":"14393","typeID":"TextArea","zOrder":"129","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"1229","y":"1092","properties":{"color":"16770457"}},{"ID":"14394","typeID":"Label","zOrder":"130","measuredW":"76","measuredH":"26","x":"1288","y":"1103","properties":{"size":"18","text":"JSP Files"}},{"ID":"14395","typeID":"TextArea","zOrder":"131","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"1229","y":"1144","properties":{"color":"16770457"}},{"ID":"14396","typeID":"Label","zOrder":"132","measuredW":"99","measuredH":"26","x":"1276","y":"1155","properties":{"size":"18","text":"Architecture"}},{"ID":"14397","typeID":"TextArea","zOrder":"133","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"1229","y":"1197","properties":{"color":"16770457"}},{"ID":"14398","typeID":"Label","zOrder":"134","measuredW":"104","measuredH":"26","x":"1274","y":"1208","properties":{"size":"18","text":"Components"}},{"ID":"14399","typeID":"Arrow","zOrder":"8","w":"158","h":"69","measuredW":"150","measuredH":"100","x":"1077","y":"1059","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":158.33326595602625,"y":0.3244612366651154},"p1":{"x":0.4049649217485163,"y":0.09325418240690724},"p2":{"x":0.39940241719568803,"y":69.30706829960263}}},{"ID":"14400","typeID":"Arrow","zOrder":"7","w":"152","h":"31","measuredW":"150","measuredH":"100","x":"1090","y":"1107","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":152.59459301528295,"y":-0.47691287816701333},"p1":{"x":0.4505529477035481,"y":0.05320032289534493},"p2":{"x":0.10672477089451604,"y":30.383727123673452}}},{"ID":"14401","typeID":"Arrow","zOrder":"6","w":"152","h":"24","measuredW":"150","measuredH":"100","x":"1090","y":"1151","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":152.59459301528295,"y":24.50569418477039},"p1":{"x":0.41508650519031215,"y":-0.06671280276816575},"p2":{"x":0.10672477089451604,"y":0.906381242186626}}},{"ID":"14402","typeID":"Arrow","zOrder":"5","w":"167","h":"65","measuredW":"150","measuredH":"100","x":"1074","y":"1159","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":166.7792612504686,"y":65.5196518347525},"p1":{"x":0.41475409836065563,"y":-0.08770491803278692},"p2":{"x":-0.23126111243277592,"y":0.16770830144309912}}},{"ID":"14403","typeID":"Arrow","zOrder":"135","w":"213","h":"1","measuredW":"150","measuredH":"100","x":"802","y":"1304","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":212.98029127925827,"y":0.8810260550936846},"p1":{"x":0.46428571428571536,"y":-0.003992113361953186},"p2":{"x":-0.2750123853365949,"y":0.8810260550936846}}},{"ID":"14404","typeID":"TextArea","zOrder":"136","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"622","y":"1281","properties":{"color":"16776960"}},{"ID":"14405","typeID":"Label","zOrder":"137","measuredW":"59","measuredH":"26","x":"689","y":"1292","properties":{"size":"18","text":"Testing"}},{"ID":"14406","typeID":"TextArea","zOrder":"138","w":"273","h":"47","measuredW":"200","measuredH":"140","x":"216","y":"1129","properties":{"color":"16770457"}},{"ID":"14407","typeID":"Label","zOrder":"139","measuredW":"70","measuredH":"26","x":"318","y":"1140","properties":{"size":"18","text":"JPA Test"}},{"ID":"14408","typeID":"TextArea","zOrder":"140","w":"273","h":"47","measuredW":"200","measuredH":"140","x":"216","y":"1181","properties":{"color":"16770457"}},{"ID":"14409","typeID":"Label","zOrder":"141","measuredW":"84","measuredH":"26","x":"311","y":"1192","properties":{"size":"18","text":"MockMVC"}},{"ID":"14410","typeID":"TextArea","zOrder":"142","w":"273","h":"47","measuredW":"200","measuredH":"140","x":"216","y":"1234","properties":{"color":"16770457"}},{"ID":"14411","typeID":"Label","zOrder":"143","measuredW":"234","measuredH":"26","x":"236","y":"1245","properties":{"size":"18","text":"@SpringBootTest Annotation"}},{"ID":"14412","typeID":"TextArea","zOrder":"144","w":"273","h":"47","measuredW":"200","measuredH":"140","x":"216","y":"1286","properties":{"color":"16770457"}},{"ID":"14413","typeID":"Label","zOrder":"145","measuredW":"194","measuredH":"26","x":"256","y":"1297","properties":{"size":"18","text":"@Mockbean Annotation"}},{"ID":"14414","typeID":"Arrow","zOrder":"4","w":"167","h":"1","measuredW":"150","measuredH":"100","x":"476","y":"1309","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":166.5351106266147,"y":0.6329018604571957},"p1":{"x":0.4642857142857147,"y":-0.003992113361953187},"p2":{"x":-0.10033385901039082,"y":0.6329018604571957}}},{"ID":"14415","typeID":"Arrow","zOrder":"3","w":"162","h":"42","measuredW":"150","measuredH":"100","x":"475","y":"1255","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":161.27378356735812,"y":42.054545959707184},"p1":{"x":0.5113609467455617,"y":0.06473372781065193},"p2":{"x":-0.2907435011008488,"y":0.3019153689817813}}},{"ID":"14416","typeID":"Arrow","zOrder":"2","w":"158","h":"87","measuredW":"150","measuredH":"100","x":"484","y":"1204","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":157.7197788618006,"y":87.60855066526483},"p1":{"x":0.5113609467455617,"y":0.06473372781065195},"p2":{"x":-0.2907435011008488,"y":0.3019153689817813}}},{"ID":"14417","typeID":"Arrow","zOrder":"1","w":"187","h":"138","measuredW":"150","measuredH":"100","x":"484","y":"1153","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":186.76508709882694,"y":138.60855066526483},"p1":{"x":0.531203407215966,"y":0.08221256395262982},"p2":{"x":-0.2907435011008488,"y":0.3019153689817813}}},{"ID":"14418","typeID":"Arrow","zOrder":"146","w":"1","h":"139","measuredW":"150","measuredH":"100","x":"711","y":"1555","properties":{"color":"2848996","curvature":"-1","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0,"y":0},"p1":{"x":0.4438624012549725,"y":-0.00008403832147459167},"p2":{"x":0,"y":139},"stroke":"dotted"}},{"ID":"14419","typeID":"TextArea","zOrder":"147","w":"443","h":"124","measuredW":"200","measuredH":"140","x":"483","y":"1486"},{"ID":"14420","typeID":"Label","zOrder":"148","measuredW":"303","measuredH":"25","x":"553","y":"1506","properties":{"size":"17","text":"Continue Learning with following Tracks"}},{"ID":"14421","typeID":"__group__","zOrder":"149","measuredW":"198","measuredH":"44","w":"198","h":"44","x":"707","y":"1541","properties":{"controlName":"ext_link:roadmap.sh/backend"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"198","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"147","measuredH":"25","x":"25","y":"9","properties":{"size":"17","text":"Backend Roadmap"}}]}}},{"ID":"14422","typeID":"__group__","zOrder":"150","measuredW":"185","measuredH":"44","w":"185","h":"44","x":"512","y":"1541","properties":{"controlName":"ext_link:roadmap.sh/java"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"185","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"116","measuredH":"25","x":"35","y":"9","properties":{"size":"17","text":"Java Roadmap"}}]}}},{"ID":"14423","typeID":"Arrow","zOrder":"0","w":"1","h":"203","measuredW":"150","measuredH":"100","x":"711","y":"1313","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":202.78634832628973},"p1":{"x":0.4642857142857151,"y":-0.003992113361953184},"p2":{"x":0.48803395698428176,"y":-0.11897394490631541}}},{"ID":"14424","typeID":"TextArea","zOrder":"57","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"209","y":"294","properties":{"color":"16770457"}},{"ID":"14425","typeID":"Label","zOrder":"58","measuredW":"109","measuredH":"26","x":"273","y":"305","properties":{"size":"18","text":"Configuration"}},{"ID":"14426","typeID":"TextArea","zOrder":"59","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"209","y":"345","properties":{"color":"16770457"}},{"ID":"14427","typeID":"Label","zOrder":"60","measuredW":"178","measuredH":"26","x":"239","y":"356","properties":{"size":"18","text":"Dependency Injection"}},{"ID":"14428","typeID":"TextArea","zOrder":"61","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"209","y":"397","properties":{"color":"16770457"}},{"ID":"14429","typeID":"Label","zOrder":"62","measuredW":"90","measuredH":"26","x":"283","y":"408","properties":{"size":"18","text":"Spring IOC"}},{"ID":"14430","typeID":"TextArea","zOrder":"63","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"209","y":"449","properties":{"color":"16770457"}},{"ID":"14431","typeID":"Label","zOrder":"64","measuredW":"93","measuredH":"26","x":"281","y":"460","properties":{"size":"18","text":"Spring AOP"}},{"ID":"14432","typeID":"TextArea","zOrder":"65","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"209","y":"501","properties":{"color":"16770457"}},{"ID":"14433","typeID":"Label","zOrder":"66","measuredW":"97","measuredH":"26","x":"279","y":"512","properties":{"size":"18","text":"Spring MVC"}},{"ID":"14434","typeID":"TextArea","zOrder":"67","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"209","y":"553","properties":{"color":"16770457"}},{"ID":"14435","typeID":"Label","zOrder":"68","measuredW":"96","measuredH":"26","x":"280","y":"564","properties":{"size":"18","text":"Annotations"}},{"ID":"14436","typeID":"TextArea","zOrder":"69","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"209","y":"605","properties":{"color":"16770457"}},{"ID":"14437","typeID":"Label","zOrder":"70","measuredW":"158","measuredH":"26","x":"249","y":"616","properties":{"size":"18","text":"Spring Bean Scope"}}]},"attributes":{"name":"New Wireframe 1 copy 4","order":1000019.1097559511,"parentID":null,"notes":""},"branchID":"Master","resourceID":"E1CB7BE6-6915-47A7-A0F5-139EC887D1A8","mockupH":"1664","mockupW":"1291","measuredW":"1500","measuredH":"1694","version":"1.0"},"groupOffset":{"x":0,"y":0},"dependencies":[],"projectID":"file:///Users/kamranahmed/Desktop/devops%20roadmap%5C.bmpr"} \ No newline at end of file +{"mockup":{"controls":{"control":[{"ID":"14109","typeID":"Arrow","zOrder":"34","w":"173","h":"268","measuredW":"150","measuredH":"100","x":"727","y":"158","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":172.6216144658764,"y":0.236415956616014},"p1":{"x":0.5789624059056846,"y":0.2176906025812808},"p2":{"x":0.14440715214993816,"y":268.6144146474609}}},{"ID":"14110","typeID":"Label","zOrder":"35","measuredW":"149","measuredH":"36","x":"823","y":"106","properties":{"size":"28","text":"Spring Boot"}},{"ID":"14162","typeID":"Canvas","zOrder":"36","w":"350","h":"141","measuredW":"100","measuredH":"70","x":"1150","y":"40"},{"ID":"14163","typeID":"Label","zOrder":"37","measuredW":"314","measuredH":"25","x":"1164","y":"57","properties":{"size":"17","text":"Find the detailed version of this roadmap"}},{"ID":"14164","typeID":"Label","zOrder":"38","measuredW":"319","measuredH":"25","x":"1164","y":"85","properties":{"size":"17","text":"along with resources and other roadmaps"}},{"ID":"14165","typeID":"__group__","zOrder":"39","measuredW":"320","measuredH":"45","w":"320","h":"45","x":"1165","y":"121","properties":{"controlName":"ext_link:roadmap.sh"},"children":{"controls":{"control":[{"ID":"0","typeID":"Canvas","zOrder":"0","w":"320","h":"45","measuredW":"100","measuredH":"70","x":"0","y":"0","properties":{"borderColor":"4273622","color":"4273622"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"105","measuredH":"28","x":"141","y":"8","properties":{"color":"16777215","size":"20","text":"roadmap.sh"}},{"ID":"2","typeID":"Label","zOrder":"2","measuredW":"45","measuredH":"28","x":"66","y":"8","properties":{"color":"16777215","size":"20","text":"https"}},{"ID":"3","typeID":"Label","zOrder":"3","measuredW":"5","measuredH":"28","x":"113","y":"8","properties":{"color":"16777215","size":"20","text":":"}},{"ID":"4","typeID":"Label","zOrder":"4","measuredW":"10","measuredH":"28","x":"120","y":"9","properties":{"color":"16777215","size":"20","text":"/"}},{"ID":"5","typeID":"Label","zOrder":"5","measuredW":"10","measuredH":"28","x":"128","y":"9","properties":{"color":"16777215","size":"20","text":"/"}}]}}},{"ID":"14232","typeID":"__group__","zOrder":"40","measuredW":"391","measuredH":"55","w":"391","h":"55","x":"690","y":"219","properties":{"controlName":"ext_link:roadmap.sh/java"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"391","h":"55","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"4273622","borderColor":"4273622"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"296","measuredH":"28","x":"48","y":"14","properties":{"size":"20","color":"16777215","text":"Learn Java / Visit Java Roadmap"}}]}}},{"ID":"14233","typeID":"Arrow","zOrder":"41","w":"1","h":"64","measuredW":"150","measuredH":"100","x":"897","y":"30","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":-0.3586399639038973,"y":0},"p1":{"x":0.32941176470588224,"y":0},"p2":{"x":-0.3586399639038973,"y":64},"stroke":"dotted"}},{"ID":"14237","typeID":"Canvas","zOrder":"42","w":"408","h":"202","measuredW":"100","measuredH":"70","x":"215","y":"40"},{"ID":"14238","typeID":"__group__","zOrder":"43","measuredW":"155","measuredH":"27","w":"155","h":"27","x":"250","y":"115","properties":{"controlName":"ext_link:roadmap.sh/java"},"children":{"controls":{"control":[{"ID":"0","typeID":"Label","zOrder":"0","measuredW":"122","measuredH":"26","x":"33","y":"0","properties":{"size":"18","text":"Java Roadmap"}},{"ID":"1","typeID":"__group__","zOrder":"1","measuredW":"24","measuredH":"24","w":"24","h":"24","x":"0","y":"3","children":{"controls":{"control":[{"ID":"0","typeID":"Icon","zOrder":"0","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"16777215","icon":{"ID":"circle","size":"small"}}},{"ID":"1","typeID":"Icon","zOrder":"1","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"10066329","icon":{"ID":"check-circle","size":"small"}}}]}}}]}}},{"ID":"14239","typeID":"__group__","zOrder":"44","measuredW":"189","measuredH":"27","w":"189","h":"27","x":"250","y":"151","properties":{"controlName":"ext_link:roadmap.sh/backend"},"children":{"controls":{"control":[{"ID":"0","typeID":"Label","zOrder":"0","measuredW":"156","measuredH":"26","x":"33","y":"0","properties":{"size":"18","text":"Backend Roadmap"}},{"ID":"1","typeID":"__group__","zOrder":"1","measuredW":"24","measuredH":"24","w":"24","h":"24","x":"0","y":"3","children":{"controls":{"control":[{"ID":"0","typeID":"Icon","zOrder":"0","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"16777215","icon":{"ID":"circle","size":"small"}}},{"ID":"1","typeID":"Icon","zOrder":"1","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"10066329","icon":{"ID":"check-circle","size":"small"}}}]}}}]}}},{"ID":"14240","typeID":"__group__","zOrder":"45","measuredW":"183","measuredH":"27","w":"183","h":"27","x":"250","y":"187","properties":{"controlName":"ext_link:roadmap.sh/devops"},"children":{"controls":{"control":[{"ID":"0","typeID":"Label","zOrder":"0","measuredW":"150","measuredH":"26","x":"33","y":"0","properties":{"size":"18","text":"DevOps Roadmap"}},{"ID":"1","typeID":"__group__","zOrder":"1","measuredW":"24","measuredH":"24","w":"24","h":"24","x":"0","y":"3","children":{"controls":{"control":[{"ID":"0","typeID":"Icon","zOrder":"0","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"16777215","icon":{"ID":"circle","size":"small"}}},{"ID":"1","typeID":"Icon","zOrder":"1","measuredW":"24","measuredH":"24","x":"0","y":"0","properties":{"color":"10066329","icon":{"ID":"check-circle","size":"small"}}}]}}}]}}},{"ID":"14243","typeID":"Label","zOrder":"46","measuredW":"209","measuredH":"32","x":"250","y":"67","properties":{"size":"24","text":"Related Roadmaps"}},{"ID":"14265","typeID":"Arrow","zOrder":"33","w":"146","h":"2","measuredW":"150","measuredH":"100","x":"411","y":"426","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":146.01679645265642,"y":2.0707373480713613},"p1":{"x":0.4642857142857146,"y":-0.003992113361953187},"p2":{"x":0.24143192912043787,"y":-0.11897394490631541}}},{"ID":"14280","typeID":"Arrow","zOrder":"32","w":"1","h":"112","measuredW":"150","measuredH":"100","x":"666","y":"431","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":0.24143192912038103,"y":111.61050470611792},"p1":{"x":0.46428571428571463,"y":-0.003992113361953184},"p2":{"x":0.24143192912043787,"y":-0.11897394490631541}}},{"ID":"14301","typeID":"Arrow","zOrder":"31","w":"177","h":"214","measuredW":"150","measuredH":"100","x":"440","y":"435","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":177.4682317265881,"y":0.25033397230828314},"p1":{"x":0.46461829054937476,"y":-0.1088245057213903},"p2":{"x":0.022661364670909734,"y":214.50946531263833}}},{"ID":"14302","typeID":"Arrow","zOrder":"30","w":"149","h":"109","measuredW":"150","measuredH":"100","x":"441","y":"314","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":148.8332898870765,"y":109.16004691752192},"p1":{"x":0.6360127761511841,"y":0.09156241682193235},"p2":{"x":0.2954774997014624,"y":0.347463424444868}}},{"ID":"14303","typeID":"Arrow","zOrder":"29","w":"116","h":"57","measuredW":"150","measuredH":"100","x":"434","y":"364","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":116.10806099277852,"y":57.43286305255248},"p1":{"x":0.5967446581465075,"y":0.06448697652928094},"p2":{"x":0.3867420398235595,"y":0.43579550855969273}}},{"ID":"14304","typeID":"Arrow","zOrder":"28","w":"119","h":"41","measuredW":"150","measuredH":"100","x":"434","y":"439","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":118.69883679023269,"y":-0.2952982977527654},"p1":{"x":0.4935153583617746,"y":-0.09488054607508538},"p2":{"x":-0.3404418251459447,"y":40.06584992139261}}},{"ID":"14305","typeID":"Arrow","zOrder":"27","w":"128","h":"93","measuredW":"150","measuredH":"100","x":"434","y":"439","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":127.33475611508015,"y":-0.2952982977527654},"p1":{"x":0.49351535836177457,"y":-0.09488054607508535},"p2":{"x":-0.476849892661221,"y":92.97263041059898}}},{"ID":"14306","typeID":"Arrow","zOrder":"26","w":"138","h":"145","measuredW":"150","measuredH":"100","x":"435","y":"442","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":138.4250431698665,"y":0.15906943218618608},"p1":{"x":0.49351535836177424,"y":-0.09488054607508524},"p2":{"x":0.25033397230828314,"y":145.24251408962232}}},{"ID":"14307","typeID":"Arrow","zOrder":"25","w":"281","h":"1","measuredW":"150","measuredH":"100","x":"739","y":"437","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":281.3020743683919,"y":0.8810260550936846},"p1":{"x":0.4642857142857147,"y":-0.003992113361953183},"p2":{"x":0.48803395698428176,"y":0.8810260550936846}}},{"ID":"14322","typeID":"Arrow","zOrder":"24","w":"148","h":"3","measuredW":"150","measuredH":"100","x":"1099","y":"434","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":148.01679645265642,"y":0.07073734807136134},"p1":{"x":0.46428571428571463,"y":-0.003992113361953189},"p2":{"x":-0.42272979529752774,"y":2.9775178372777873}}},{"ID":"14323","typeID":"Arrow","zOrder":"23","w":"138","h":"50","measuredW":"150","measuredH":"100","x":"1088","y":"375","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":138.38887621244385,"y":-0.201101301623396},"p1":{"x":0.4863185723727692,"y":0.052478519497686664},"p2":{"x":0.214167014885561,"y":49.88723078249143}}},{"ID":"14324","typeID":"Arrow","zOrder":"22","w":"161","measuredW":"150","measuredH":"100","x":"1061","y":"320","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":160.20732461753528,"y":-0.4709849806466764},"p1":{"x":0.5161401966326554,"y":0.0868716679471183},"p2":{"x":-0.42077482462605076,"y":99.70567918758297}}},{"ID":"14325","typeID":"Arrow","zOrder":"21","w":"164","h":"147","measuredW":"150","measuredH":"100","x":"1055","y":"271","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":164.48014075256583,"y":0.1678668002079462},"p1":{"x":0.5161401966326553,"y":0.08687166794711838},"p2":{"x":0.39767358046537993,"y":146.97849532261353}}},{"ID":"14327","typeID":"TextArea","zOrder":"20","w":"238","h":"55","measuredW":"200","measuredH":"140","x":"883","y":"503","properties":{"borderColor":"16777215"}},{"ID":"14328","typeID":"Label","zOrder":"64","measuredW":"107","measuredH":"28","x":"948","y":"517","properties":{"size":"20","text":"Spring Boot"}},{"ID":"14329","typeID":"Arrow","zOrder":"19","w":"1","h":"179","measuredW":"150","measuredH":"100","x":"1000","y":"431","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":178.58144672562196},"p1":{"x":0.4642857142857148,"y":-0.003992113361953182},"p2":{"x":0.48803395698428176,"y":-0.11897394490631541}}},{"ID":"14339","typeID":"Arrow","zOrder":"18","w":"537","h":"2","measuredW":"150","measuredH":"100","x":"786","y":"945","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":536.5558496625544,"y":1.8810260550936846},"p1":{"x":0.4642857142857152,"y":-0.0039921133619531856},"p2":{"x":-0.2750123853365949,"y":1.8810260550936846}}},{"ID":"14350","typeID":"Arrow","zOrder":"15","w":"146","h":"1","measuredW":"150","measuredH":"100","x":"1086","y":"828","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":146.7141818215698,"y":0.8543135727297795},"p1":{"x":0.46428571428571463,"y":-0.0039921133619531856},"p2":{"x":0.3878607219769492,"y":1.1528447227344714}}},{"ID":"14351","typeID":"Arrow","zOrder":"16","w":"119","h":"49","measuredW":"150","measuredH":"100","x":"1105","y":"767","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":119.2068375715935,"y":48.85431357272978},"p1":{"x":0.5272614687537527,"y":0.09288510762768885},"p2":{"x":0.10401807192488377,"y":-0.4882830771329054}}},{"ID":"14352","typeID":"Arrow","zOrder":"17","w":"124","h":"99","measuredW":"150","measuredH":"100","x":"1103","y":"712","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":124.60977527158389,"y":98.74990702274397},"p1":{"x":0.5272614687537526,"y":0.09288510762768905},"p2":{"x":0.40254922192957565,"y":0.06471372301859901}}},{"ID":"14355","typeID":"Arrow","zOrder":"14","w":"1","h":"131","measuredW":"150","measuredH":"100","x":"1324","y":"817","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":-0.2457271352116095,"y":131.1045059699236},"p1":{"x":0.4642857142857149,"y":-0.003992113361953185},"p2":{"x":-0.2457271352116095,"y":-0.11897394490631541}}},{"ID":"14356","typeID":"Arrow","zOrder":"13","w":"224","h":"1","measuredW":"150","measuredH":"100","x":"1001","y":"609","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":223.55584966255435,"y":0.8810260550936846},"p1":{"x":0.4642857142857149,"y":-0.003992113361953184},"p2":{"x":-0.2457271352116095,"y":0.8810260550936846}}},{"ID":"14363","typeID":"Arrow","zOrder":"12","w":"1","h":"98","measuredW":"150","measuredH":"100","x":"695","y":"957","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":97.58144672562196},"p1":{"x":0.46428571428571486,"y":-0.003992113361953183},"p2":{"x":0.48803395698428176,"y":0.0027856225734694817},"stroke":"dotted"}},{"ID":"14366","typeID":"Arrow","zOrder":"11","w":"1","h":"94","measuredW":"150","measuredH":"100","x":"695","y":"865","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":94.58144672562196},"p1":{"x":0.46428571428571475,"y":-0.003992113361953182},"p2":{"x":0.48803395698428176,"y":0.4641401455688765}}},{"ID":"14386","typeID":"Arrow","zOrder":"10","w":"148","h":"1","measuredW":"150","measuredH":"100","x":"502","y":"861","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":148.01679645265642,"y":1.0707373480713613},"p1":{"x":0.4642857142857146,"y":-0.003992113361953188},"p2":{"x":-0.10033385901039082,"y":0.6329018604571957}}},{"ID":"14387","typeID":"Arrow","zOrder":"9","w":"213","h":"1","measuredW":"150","measuredH":"100","x":"801","y":"964","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":212.98029127925827,"y":0.8810260550936846},"p1":{"x":0.46428571428571536,"y":-0.003992113361953186},"p2":{"x":-0.2750123853365949,"y":0.8810260550936846}}},{"ID":"14388","typeID":"Arrow","zOrder":"86","w":"1","h":"339","measuredW":"150","measuredH":"100","x":"1015","y":"965","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":338.4082071365567},"p1":{"x":0.46428571428571513,"y":-0.003992113361953183},"p2":{"x":0.48803395698428176,"y":-0.11897394490631541}}},{"ID":"14399","typeID":"Arrow","zOrder":"8","w":"158","h":"69","measuredW":"150","measuredH":"100","x":"1077","y":"1059","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":158.33326595602625,"y":0.3244612366651154},"p1":{"x":0.4049649217485163,"y":0.09325418240690724},"p2":{"x":0.39940241719568803,"y":69.30706829960263}}},{"ID":"14400","typeID":"Arrow","zOrder":"7","w":"152","h":"31","measuredW":"150","measuredH":"100","x":"1090","y":"1107","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":152.59459301528295,"y":-0.47691287816701333},"p1":{"x":0.4505529477035481,"y":0.05320032289534493},"p2":{"x":0.10672477089451604,"y":30.383727123673452}}},{"ID":"14401","typeID":"Arrow","zOrder":"6","w":"152","h":"24","measuredW":"150","measuredH":"100","x":"1090","y":"1151","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":152.59459301528295,"y":24.50569418477039},"p1":{"x":0.41508650519031215,"y":-0.06671280276816575},"p2":{"x":0.10672477089451604,"y":0.906381242186626}}},{"ID":"14402","typeID":"Arrow","zOrder":"5","w":"167","h":"65","measuredW":"150","measuredH":"100","x":"1074","y":"1159","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":166.7792612504686,"y":65.5196518347525},"p1":{"x":0.41475409836065563,"y":-0.08770491803278692},"p2":{"x":-0.23126111243277592,"y":0.16770830144309912}}},{"ID":"14403","typeID":"Arrow","zOrder":"92","w":"213","h":"1","measuredW":"150","measuredH":"100","x":"802","y":"1304","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":212.98029127925827,"y":0.8810260550936846},"p1":{"x":0.46428571428571536,"y":-0.003992113361953186},"p2":{"x":-0.2750123853365949,"y":0.8810260550936846}}},{"ID":"14414","typeID":"Arrow","zOrder":"4","w":"167","h":"1","measuredW":"150","measuredH":"100","x":"476","y":"1309","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":166.5351106266147,"y":0.6329018604571957},"p1":{"x":0.4642857142857147,"y":-0.003992113361953187},"p2":{"x":-0.10033385901039082,"y":0.6329018604571957}}},{"ID":"14415","typeID":"Arrow","zOrder":"3","w":"162","h":"42","measuredW":"150","measuredH":"100","x":"475","y":"1255","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":161.27378356735812,"y":42.054545959707184},"p1":{"x":0.5113609467455617,"y":0.06473372781065193},"p2":{"x":-0.2907435011008488,"y":0.3019153689817813}}},{"ID":"14416","typeID":"Arrow","zOrder":"2","w":"158","h":"87","measuredW":"150","measuredH":"100","x":"484","y":"1204","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":157.7197788618006,"y":87.60855066526483},"p1":{"x":0.5113609467455617,"y":0.06473372781065195},"p2":{"x":-0.2907435011008488,"y":0.3019153689817813}}},{"ID":"14417","typeID":"Arrow","zOrder":"1","w":"187","h":"138","measuredW":"150","measuredH":"100","x":"484","y":"1153","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","stroke":"dotted","p0":{"x":186.76508709882694,"y":138.60855066526483},"p1":{"x":0.531203407215966,"y":0.08221256395262982},"p2":{"x":-0.2907435011008488,"y":0.3019153689817813}}},{"ID":"14418","typeID":"Arrow","zOrder":"98","w":"1","h":"139","measuredW":"150","measuredH":"100","x":"711","y":"1555","properties":{"color":"2848996","curvature":"-1","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0,"y":0},"p1":{"x":0.4438624012549725,"y":-0.00008403832147459167},"p2":{"x":0,"y":139},"stroke":"dotted"}},{"ID":"14419","typeID":"TextArea","zOrder":"99","w":"443","h":"124","measuredW":"200","measuredH":"140","x":"483","y":"1486"},{"ID":"14420","typeID":"Label","zOrder":"100","measuredW":"303","measuredH":"25","x":"553","y":"1506","properties":{"size":"17","text":"Continue Learning with following Tracks"}},{"ID":"14421","typeID":"__group__","zOrder":"101","measuredW":"198","measuredH":"44","w":"198","h":"44","x":"707","y":"1541","properties":{"controlName":"ext_link:roadmap.sh/backend"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"198","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"147","measuredH":"25","x":"25","y":"9","properties":{"size":"17","text":"Backend Roadmap"}}]}}},{"ID":"14422","typeID":"__group__","zOrder":"102","measuredW":"185","measuredH":"44","w":"185","h":"44","x":"512","y":"1541","properties":{"controlName":"ext_link:roadmap.sh/java"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"185","h":"44","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"116","measuredH":"25","x":"35","y":"9","properties":{"size":"17","text":"Java Roadmap"}}]}}},{"ID":"14423","typeID":"Arrow","zOrder":"0","w":"1","h":"203","measuredW":"150","measuredH":"100","x":"711","y":"1313","properties":{"color":"2848996","direction":"bottom","leftArrow":"false","rightArrow":"false","p0":{"x":0.48803395698428176,"y":202.78634832628973},"p1":{"x":0.4642857142857151,"y":-0.003992113361953184},"p2":{"x":0.48803395698428176,"y":-0.11897394490631541}}},{"ID":"14438","typeID":"__group__","zOrder":"47","measuredW":"238","measuredH":"50","w":"238","h":"50","x":"518","y":"405","properties":{"controlName":"100-spring-core"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"98","measuredH":"26","x":"70","y":"12","properties":{"size":"18","text":"Spring Core"}}]}}},{"ID":"14439","typeID":"__group__","zOrder":"59","measuredW":"238","measuredH":"50","w":"238","h":"50","x":"882","y":"408","properties":{"controlName":"101-spring-security"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"50","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"123","measuredH":"26","x":"57","y":"12","properties":{"size":"18","text":"Spring Security"}}]}}},{"ID":"14440","typeID":"__group__","zOrder":"65","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"1212","y":"584","properties":{"controlName":"102-spring-boot-starters"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"165","measuredH":"26","x":"36","y":"11","properties":{"size":"18","text":"Spring Boot Starters"}}]}}},{"ID":"14441","typeID":"__group__","zOrder":"66","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"1212","y":"635","properties":{"controlName":"103-autconfiguration"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"142","measuredH":"26","x":"48","y":"11","properties":{"size":"18","text":"Autoconfiguration"}}]}}},{"ID":"14442","typeID":"__group__","zOrder":"67","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"1212","y":"686","properties":{"controlName":"104-spring-boot-actuators"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"77","measuredH":"26","x":"80","y":"11","properties":{"size":"18","text":"Actuators"}}]}}},{"ID":"14443","typeID":"__group__","zOrder":"68","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"1212","y":"738","properties":{"controlName":"105-embedded-server"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"148","measuredH":"26","x":"45","y":"11","properties":{"size":"18","text":"Embedded Server"}}]}}},{"ID":"14444","typeID":"__group__","zOrder":"69","measuredW":"240","measuredH":"47","w":"240","h":"47","x":"1212","y":"790","properties":{"controlName":"106-hibernate"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"240","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"82","measuredH":"26","x":"79","y":"11","properties":{"size":"18","text":"Hibernate"}}]}}},{"ID":"14445","typeID":"__group__","zOrder":"73","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"578","y":"932","properties":{"controlName":"107-spring-data"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"97","measuredH":"26","x":"70","y":"11","properties":{"size":"18","text":"Spring Data"}}]}}},{"ID":"14446","typeID":"__group__","zOrder":"77","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"577","y":"838","properties":{"controlName":"108-microservices"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"114","measuredH":"26","x":"70","y":"11","properties":{"size":"18","text":"Microservices"}}]}}},{"ID":"14447","typeID":"__group__","zOrder":"87","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"919","y":"1117","properties":{"controlName":"109-spring-mvc"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"97","measuredH":"26","x":"48","y":"11","properties":{"size":"18","text":"Spring MVC"}}]}}},{"ID":"14448","typeID":"__group__","zOrder":"93","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"622","y":"1281","properties":{"controlName":"110-testing"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16776960"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"59","measuredH":"26","x":"67","y":"11","properties":{"size":"18","text":"Testing"}}]}}},{"ID":"14449","typeID":"__group__","zOrder":"52","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"209","y":"294","properties":{"controlName":"101-spring-core:configuration"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"109","measuredH":"26","x":"64","y":"11","properties":{"size":"18","text":"Configuration"}}]}}},{"ID":"14450","typeID":"__group__","zOrder":"53","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"209","y":"345","properties":{"controlName":"102-spring-core:dependency-injection"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"178","measuredH":"26","x":"30","y":"11","properties":{"size":"18","text":"Dependency Injection"}}]}}},{"ID":"14451","typeID":"__group__","zOrder":"54","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"209","y":"397","properties":{"controlName":"103-spring-core:spring-ioc"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"90","measuredH":"26","x":"74","y":"11","properties":{"size":"18","text":"Spring IOC"}}]}}},{"ID":"14452","typeID":"__group__","zOrder":"55","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"209","y":"449","properties":{"controlName":"104-spring-core:spring-aop"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"93","measuredH":"26","x":"72","y":"11","properties":{"size":"18","text":"Spring AOP"}}]}}},{"ID":"14453","typeID":"__group__","zOrder":"56","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"209","y":"501","properties":{"controlName":"105-spring-core:spring-mvc"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"97","measuredH":"26","x":"70","y":"11","properties":{"size":"18","text":"Spring MVC"}}]}}},{"ID":"14454","typeID":"__group__","zOrder":"57","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"209","y":"553","properties":{"controlName":"106-spring-core:annotations"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"96","measuredH":"26","x":"71","y":"11","properties":{"size":"18","text":"Annotations"}}]}}},{"ID":"14455","typeID":"__group__","zOrder":"58","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"209","y":"605","properties":{"controlName":"107-spring-core:spring-bean-scope"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"158","measuredH":"26","x":"40","y":"11","properties":{"size":"18","text":"Spring Bean Scope"}}]}}},{"ID":"14456","typeID":"__group__","zOrder":"48","measuredW":"180","measuredH":"215","w":"180","h":"215","x":"577","y":"502","properties":{"controlName":"100-spring-core:introduction"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"180","h":"215","measuredW":"200","measuredH":"140","x":"0","y":"0"},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"98","measuredH":"26","x":"41","y":"15","properties":{"size":"18","text":"Introduction"}}]}}},{"ID":"14457","typeID":"__group__","zOrder":"49","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"548","y":"553","properties":{"controlName":"100-spring-core:introduction:terminology"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"99","measuredH":"26","x":"69","y":"11","properties":{"size":"18","text":"Terminology"}}]}}},{"ID":"14458","typeID":"__group__","zOrder":"50","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"548","y":"605","properties":{"controlName":"101-spring-core:introduction:architecture"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"99","measuredH":"26","x":"69","y":"11","properties":{"size":"18","text":"Architecture"}}]}}},{"ID":"14459","typeID":"__group__","zOrder":"51","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"548","y":"656","properties":{"controlName":"102-spring-core:introduction:why-spring"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"99","measuredH":"26","x":"69","y":"11","properties":{"size":"18","text":"Why Spring?"}}]}}},{"ID":"14460","typeID":"__group__","zOrder":"60","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"1212","y":"255","properties":{"controlName":"100-spring-security:authentication"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"117","measuredH":"26","x":"60","y":"11","properties":{"size":"18","text":"Authentication"}}]}}},{"ID":"14461","typeID":"__group__","zOrder":"61","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"1212","y":"306","properties":{"controlName":"101-spring-security:authorization"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"106","measuredH":"26","x":"66","y":"11","properties":{"size":"18","text":"Authorization"}}]}}},{"ID":"14462","typeID":"__group__","zOrder":"62","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"1212","y":"357","properties":{"controlName":"102-spring-security:oauth2"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"61","measuredH":"26","x":"88","y":"11","properties":{"size":"18","text":"OAuth2"}}]}}},{"ID":"14463","typeID":"__group__","zOrder":"63","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"1212","y":"409","properties":{"controlName":"103-spring-security:jwt-authentication"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"159","measuredH":"26","x":"39","y":"11","properties":{"size":"18","text":"JWT Authentication"}}]}}},{"ID":"14464","typeID":"__group__","zOrder":"70","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"919","y":"692","properties":{"controlName":"100-hibernate:transactions"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"105","measuredH":"26","x":"46","y":"11","properties":{"size":"18","text":"Transactions"}}]}}},{"ID":"14465","typeID":"__group__","zOrder":"71","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"919","y":"744","properties":{"controlName":"101-hibernate:relationships"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"111","measuredH":"26","x":"43","y":"11","properties":{"size":"18","text":"Relationships"}}]}}},{"ID":"14466","typeID":"__group__","zOrder":"72","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"919","y":"796","properties":{"controlName":"102-hibernate:entity-lifecycle"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"121","measuredH":"26","x":"38","y":"11","properties":{"size":"18","text":"Entity Lifecycle"}}]}}},{"ID":"14467","typeID":"__group__","zOrder":"74","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"577","y":"1023","properties":{"controlName":"100-spring-data:spring-data-jpa"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"131","measuredH":"26","x":"53","y":"11","properties":{"size":"18","text":"Spring Data JPA"}}]}}},{"ID":"14468","typeID":"__group__","zOrder":"75","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"577","y":"1075","properties":{"controlName":"101-spring-data:spring-data-mongodb"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"183","measuredH":"26","x":"27","y":"11","properties":{"size":"18","text":"Spring Data MongoDB"}}]}}},{"ID":"14469","typeID":"__group__","zOrder":"76","measuredW":"238","measuredH":"47","w":"238","h":"47","x":"577","y":"1127","properties":{"controlName":"102-spring-data:spring-data-jdbc"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"238","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"148","measuredH":"26","x":"45","y":"11","properties":{"size":"18","text":"Spring Data JDBC"}}]}}},{"ID":"14470","typeID":"__group__","zOrder":"78","measuredW":"153","measuredH":"323","w":"153","h":"323","x":"360","y":"757","properties":{"controlName":"100-microservices:spring-cloud"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"153","h":"323","measuredW":"200","measuredH":"140","x":"0","y":"0"},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"105","measuredH":"26","x":"24","y":"14","properties":{"size":"18","text":"Spring Cloud"}}]}}},{"ID":"14471","typeID":"__group__","zOrder":"79","measuredW":"284","measuredH":"47","w":"284","h":"47","x":"210","y":"806","properties":{"controlName":"100-microservices:spring-cloud:spring-cloud-gateway"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"284","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"180","measuredH":"26","x":"52","y":"11","properties":{"size":"18","text":"Spring Cloud Gateway"}}]}}},{"ID":"14472","typeID":"__group__","zOrder":"80","measuredW":"284","measuredH":"47","w":"284","h":"47","x":"210","y":"858","properties":{"controlName":"101-microservices:spring-cloud:cloud-config"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"284","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"105","measuredH":"26","x":"89","y":"11","properties":{"size":"18","text":"Cloud Config"}}]}}},{"ID":"14473","typeID":"__group__","zOrder":"81","measuredW":"284","measuredH":"47","w":"284","h":"47","x":"210","y":"911","properties":{"controlName":"102-microservices:spring-cloud:spring-cloud-circuit-breaker"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"284","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"232","measuredH":"26","x":"26","y":"11","properties":{"size":"18","text":"Spring Cloud Circuit Breaker"}}]}}},{"ID":"14474","typeID":"__group__","zOrder":"82","measuredW":"284","measuredH":"47","w":"284","h":"47","x":"210","y":"963","properties":{"controlName":"103-microservices:spring-cloud:spring-cloud-openfeign"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"284","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"201","measuredH":"26","x":"41","y":"11","properties":{"size":"18","text":"Spring Cloud OpenFeign"}}]}}},{"ID":"14475","typeID":"__group__","zOrder":"83","measuredW":"91","measuredH":"47","w":"91","h":"47","x":"210","y":"1017","properties":{"controlName":"104-microservices:spring-cloud:hystrix"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"91","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"55","measuredH":"26","x":"20","y":"11","properties":{"size":"18","text":"Hystrix"}}]}}},{"ID":"14476","typeID":"__group__","zOrder":"84","measuredW":"91","measuredH":"47","w":"91","h":"47","x":"307","y":"1017","properties":{"controlName":"105-microservices:spring-cloud:sleuth"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"91","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"51","measuredH":"26","x":"20","y":"11","properties":{"size":"18","text":"Sleuth"}}]}}},{"ID":"14477","typeID":"__group__","zOrder":"85","measuredW":"91","measuredH":"47","w":"91","h":"47","x":"403","y":"1017","properties":{"controlName":"106-microservices:spring-cloud:eureka"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"91","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"57","measuredH":"26","x":"17","y":"11","properties":{"size":"18","text":"Eureka"}}]}}},{"ID":"14478","typeID":"__group__","zOrder":"88","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"1229","y":"1040","properties":{"controlName":"100-spring-mvc:servlet"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"57","measuredH":"26","x":"68","y":"11","properties":{"size":"18","text":"Servlet"}}]}}},{"ID":"14479","typeID":"__group__","zOrder":"89","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"1229","y":"1092","properties":{"controlName":"101-spring-mvc:jsp-files"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"76","measuredH":"26","x":"59","y":"11","properties":{"size":"18","text":"JSP Files"}}]}}},{"ID":"14480","typeID":"__group__","zOrder":"90","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"1229","y":"1144","properties":{"controlName":"102-spring-mvc:architecture"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"99","measuredH":"26","x":"47","y":"11","properties":{"size":"18","text":"Architecture"}}]}}},{"ID":"14481","typeID":"__group__","zOrder":"91","measuredW":"193","measuredH":"47","w":"193","h":"47","x":"1229","y":"1197","properties":{"controlName":"103-spring-mvc:components"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"193","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"104","measuredH":"26","x":"45","y":"11","properties":{"size":"18","text":"Components"}}]}}},{"ID":"14482","typeID":"__group__","zOrder":"94","measuredW":"273","measuredH":"47","w":"273","h":"47","x":"216","y":"1129","properties":{"controlName":"100-testing:jpa-test"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"273","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"70","measuredH":"26","x":"102","y":"11","properties":{"size":"18","text":"JPA Test"}}]}}},{"ID":"14483","typeID":"__group__","zOrder":"95","measuredW":"273","measuredH":"47","w":"273","h":"47","x":"216","y":"1181","properties":{"controlName":"101-testing:mock-mvc"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"273","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"84","measuredH":"26","x":"95","y":"11","properties":{"size":"18","text":"MockMVC"}}]}}},{"ID":"14484","typeID":"__group__","zOrder":"96","measuredW":"273","measuredH":"47","w":"273","h":"47","x":"216","y":"1234","properties":{"controlName":"102-testing:spring-boot-test-annotation"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"273","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"234","measuredH":"26","x":"20","y":"11","properties":{"size":"18","text":"@SpringBootTest Annotation"}}]}}},{"ID":"14485","typeID":"__group__","zOrder":"97","measuredW":"273","measuredH":"47","w":"273","h":"47","x":"216","y":"1286","properties":{"controlName":"103-testing:mockbean-annotation"},"children":{"controls":{"control":[{"ID":"0","typeID":"TextArea","zOrder":"0","w":"273","h":"47","measuredW":"200","measuredH":"140","x":"0","y":"0","properties":{"color":"16770457"}},{"ID":"1","typeID":"Label","zOrder":"1","measuredW":"194","measuredH":"26","x":"40","y":"11","properties":{"size":"18","text":"@Mockbean Annotation"}}]}}}]},"attributes":{"name":"New Wireframe 1 copy 4","order":1000019.1097559511,"parentID":null,"notes":""},"branchID":"Master","resourceID":"E1CB7BE6-6915-47A7-A0F5-139EC887D1A8","mockupH":"1664","mockupW":"1291","measuredW":"1500","measuredH":"1694","version":"1.0"},"groupOffset":{"x":0,"y":0},"dependencies":[],"projectID":"file:///Users/kamranahmed/Desktop/devops%20roadmap%5C.bmpr"} \ No newline at end of file