Add sponsors

pull/3752/head
Kamran Ahmed 2 years ago
parent 9d38cf7650
commit d21c1f6d0d
  1. 98
      bin/update-sponsors.cjs
  2. 10
      src/data/best-practices/frontend-performance/frontend-performance.md
  3. 2
      src/data/roadmaps/android/android.md
  4. 10
      src/data/roadmaps/aspnet-core/aspnet-core.md
  5. 9
      src/data/roadmaps/frontend/frontend.md
  6. 10
      src/data/roadmaps/golang/golang.md
  7. 10
      src/data/roadmaps/java/java.md
  8. 1
      src/data/roadmaps/javascript/javascript.md
  9. 1
      src/data/roadmaps/kubernetes/kubernetes.md
  10. 9
      src/data/roadmaps/nodejs/nodejs.md
  11. 1
      src/data/roadmaps/postgresql-dba/postgresql-dba.md
  12. 9
      src/data/roadmaps/python/python.md
  13. 10
      src/data/roadmaps/qa/qa.md
  14. 1
      src/data/roadmaps/react/react.md
  15. 1
      src/data/roadmaps/software-design-architecture/software-design-architecture.md
  16. 10
      src/data/roadmaps/spring-boot/spring-boot.md

@ -13,7 +13,42 @@ if (!apiKey || !sheetId) {
const sheetRange = 'A3:I1001'; const sheetRange = 'A3:I1001';
const sheetUrl = `https://sheets.googleapis.com/v4/spreadsheets/${sheetId}/values/${sheetRange}?key=${apiKey}`; const sheetUrl = `https://sheets.googleapis.com/v4/spreadsheets/${sheetId}/values/${sheetRange}?key=${apiKey}`;
function populatePageAds({ function removeAllSponsors(baseContentDir) {
console.log('------------------------');
console.log('Removing sponsors from: ', baseContentDir);
console.log('------------------------');
const dataDirPath = path.join(__dirname, '../src/data');
const contentDirPath = path.join(dataDirPath, baseContentDir);
const contentDir = fs.readdirSync(contentDirPath);
contentDir.forEach((content) => {
console.log('Removing sponsor from: ', content);
const pageFilePath = path.join(contentDirPath, content, `${content}.md`);
const pageFileContent = fs.readFileSync(pageFilePath, 'utf8');
const frontMatterRegex = /---\n([\s\S]*?)\n---/;
const existingFrontmatter = pageFileContent.match(frontMatterRegex)[1];
const contentWithoutFrontmatter = pageFileContent
.replace(frontMatterRegex, ``)
.trim();
let frontmatterObj = yaml.load(existingFrontmatter);
delete frontmatterObj.sponsor;
const newFrontmatter = yaml.dump(frontmatterObj, {
lineWidth: 10000,
forceQuotes: true,
quotingType: "'",
});
const newContent = `---\n${newFrontmatter}---\n${contentWithoutFrontmatter}`;
fs.writeFileSync(pageFilePath, newContent, 'utf8');
});
}
function addPageSponsor({
pageUrl, pageUrl,
company, company,
redirectUrl, redirectUrl,
@ -24,13 +59,6 @@ function populatePageAds({
endDate, endDate,
isActive, isActive,
}) { }) {
const isConfiguredActive = isActive.toLowerCase() === 'yes';
const currentDate = new Date();
const isDateInRange =
currentDate >= new Date(startDate) && currentDate <= new Date(endDate);
const shouldShowAd = isConfiguredActive && isDateInRange;
const urlPart = pageUrl const urlPart = pageUrl
.replace('https://roadmap.sh/', '') .replace('https://roadmap.sh/', '')
.replace(/\?.+?$/, ''); .replace(/\?.+?$/, '');
@ -64,29 +92,27 @@ function populatePageAds({
let frontmatterObj = yaml.load(existingFrontmatter); let frontmatterObj = yaml.load(existingFrontmatter);
delete frontmatterObj.sponsor; delete frontmatterObj.sponsor;
if (shouldShowAd) { const frontmatterValues = Object.entries(frontmatterObj);
const frontmatterValues = Object.entries(frontmatterObj); const roadmapLabel = frontmatterObj.briefTitle;
const roadmapLabel = frontmatterObj.briefTitle;
// Insert sponsor data at 10 index i.e. after
// Insert sponsor data at 10 index i.e. after // roadmap dimensions in the frontmatter
// roadmap dimensions in the frontmatter frontmatterValues.splice(10, 0, [
frontmatterValues.splice(10, 0, [ 'sponsor',
'sponsor', {
{ url: redirectUrl,
url: redirectUrl, title: adTitle,
title: adTitle, imageUrl,
imageUrl, description: adDescription,
description: adDescription, event: {
event: { category: 'SponsorClick',
category: 'SponsorClick', action: `${company} Redirect`,
action: `${company} Redirect`, label: `${roadmapLabel} / ${company} Link`,
label: `${roadmapLabel} / ${company} Link`,
},
}, },
]); },
]);
frontmatterObj = Object.fromEntries(frontmatterValues); frontmatterObj = Object.fromEntries(frontmatterValues);
}
const newFrontmatter = yaml.dump(frontmatterObj, { const newFrontmatter = yaml.dump(frontmatterObj, {
lineWidth: 10000, lineWidth: 10000,
@ -98,6 +124,10 @@ function populatePageAds({
fs.writeFileSync(pageFilePath, newContent, 'utf8'); fs.writeFileSync(pageFilePath, newContent, 'utf8');
} }
// Remove sponsors from all roadmaps
removeAllSponsors('roadmaps');
removeAllSponsors('best-practices');
fetch(sheetUrl) fetch(sheetUrl)
.then((res) => res.json()) .then((res) => res.json())
.then((rawData) => { .then((rawData) => {
@ -117,7 +147,15 @@ fetch(sheetUrl)
isActive, isActive,
] = row; ] = row;
populatePageAds({ const isConfiguredActive = isActive?.toLowerCase() === 'yes';
const currentDate = new Date();
const isDateInRange = currentDate >= new Date(startDate) && currentDate <= new Date(endDate);
if (!isConfiguredActive || !isDateInRange) {
return;
}
addPageSponsor({
pageUrl, pageUrl,
company, company,
redirectUrl, redirectUrl,

@ -11,6 +11,15 @@ description: 'Detailed list of best practices to improve your frontend performan
dimensions: dimensions:
width: 968 width: 968
height: 1270.89 height: 1270.89
sponsor:
url: 'https://info.honeycomb.io/observability-engineering-oreilly-book-2022?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'Free eBook'
imageUrl: 'https://i.imgur.com/zS1FMNo.jpg'
description: 'Get this ebook to start your observability journey for quicker debugging & more time to innovate.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'Frontend Performance / Honeycomb Link'
schema: schema:
headline: 'Frontend Performance Best Practices' headline: 'Frontend Performance Best Practices'
description: 'Detailed list of best practices to improve the frontend performance of your website. Each best practice carries further details and how to implement that best practice.' description: 'Detailed list of best practices to improve the frontend performance of your website. Each best practice carries further details and how to implement that best practice.'
@ -27,3 +36,4 @@ seo:
- 'frontend checklist' - 'frontend checklist'
- 'make performant frontends' - 'make performant frontends'
--- ---

@ -1,5 +1,4 @@
--- ---
# jsonUrl: "/jsons/roadmaps/android.json"
pdfUrl: '/pdfs/roadmaps/android.pdf' pdfUrl: '/pdfs/roadmaps/android.pdf'
order: 4 order: 4
briefTitle: 'Android' briefTitle: 'Android'
@ -41,7 +40,6 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'role-roadmap' - 'role-roadmap'
--- ---
The intent of this guide is to give you an idea about the Android development landscape and to help guide your learning if you are confused. Before we start, please note that the roadmap is opinionated, and you might have different opinions than those of the author. Having said that, [we would love to hear your opinions](https://github.com/kamranahmedse/developer-roadmap/issues/new) and incorporate them in the roadmap if suitable. The intent of this guide is to give you an idea about the Android development landscape and to help guide your learning if you are confused. Before we start, please note that the roadmap is opinionated, and you might have different opinions than those of the author. Having said that, [we would love to hear your opinions](https://github.com/kamranahmedse/developer-roadmap/issues/new) and incorporate them in the roadmap if suitable.
There are multiple ways to develop applications for Android; you can go down the path of hybrid application development where [Flutter](https://flutter.dev/), [React-Native](https://reactnative.dev/), or [NativeScript](https://www.nativescript.org/) are the most common contenders. Flutter uses Dart, whereas React Native and Native Script rely on JavaScript. Answering the question of hybrid vs native is out of the scope of this roadmap. This roadmap is focused on native Android app development, but if you are interested in learning any hybrid framework, my personal preference is [React-Native](https://reactnative.dev) and I would recommend you check out the [Frontend Developer Roadmap](/frontend). There are multiple ways to develop applications for Android; you can go down the path of hybrid application development where [Flutter](https://flutter.dev/), [React-Native](https://reactnative.dev/), or [NativeScript](https://www.nativescript.org/) are the most common contenders. Flutter uses Dart, whereas React Native and Native Script rely on JavaScript. Answering the question of hybrid vs native is out of the scope of this roadmap. This roadmap is focused on native Android app development, but if you are interested in learning any hybrid framework, my personal preference is [React-Native](https://reactnative.dev) and I would recommend you check out the [Frontend Developer Roadmap](/frontend).

@ -11,6 +11,15 @@ hasTopics: true
dimensions: dimensions:
width: 968 width: 968
height: 2773.45 height: 2773.45
sponsor:
url: 'https://www.honeycomb.io/resources/intercom-accelerates-developer-productivity?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'Observability Boosts Dev'
imageUrl: 'https://i.imgur.com/cEt0VAH.jpg'
description: 'Learn how Intercom leveraged observability for developer productivity, delivering better outcomes.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'ASP.NET Core / Honeycomb Link'
schema: schema:
headline: 'ASP.NET Core Developer Roadmap' headline: 'ASP.NET Core Developer Roadmap'
description: 'Learn how to become a ASP.NET Core Developer with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' description: 'Learn how to become a ASP.NET Core Developer with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'
@ -59,3 +68,4 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'role-roadmap' - 'role-roadmap'
--- ---

@ -11,6 +11,15 @@ tnsBannerLink: 'https://thenewstack.io?utm_source=roadmap.sh&utm_medium=Referral
dimensions: dimensions:
width: 968 width: 968
height: 2822.1 height: 2822.1
sponsor:
url: 'https://info.honeycomb.io/observability-engineering-oreilly-book-2022?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'Free eBook'
imageUrl: 'https://i.imgur.com/zS1FMNo.jpg'
description: 'Get this ebook to start your observability journey for quicker debugging & more time to innovate.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'Frontend / Honeycomb Link'
schema: schema:
headline: 'Frontend Developer Roadmap' headline: 'Frontend Developer Roadmap'
description: 'Learn how to become a Frontend Developer with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' description: 'Learn how to become a Frontend Developer with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'

@ -16,6 +16,15 @@ schema:
imageUrl: 'https://roadmap.sh/roadmaps/golang.png' imageUrl: 'https://roadmap.sh/roadmaps/golang.png'
datePublished: '2023-01-05' datePublished: '2023-01-05'
dateModified: '2023-01-20' dateModified: '2023-01-20'
sponsor:
url: 'https://www.honeycomb.io/blog/how-we-define-sre-work-as-team?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'Day in the Life of an SRE'
imageUrl: 'https://i.imgur.com/xANWBZQ.jpg'
description: 'Dive into the world of SRE work to better understand an SRE’s role in driving incident response.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'Go / Honeycomb Link'
seo: seo:
title: 'Learn to become a Go developer' title: 'Learn to become a Go developer'
description: 'Community driven, articles, resources, guides, interview questions, quizzes for Go development. Learn to become a modern Go developer by following the steps, skills, resources and guides listed in this roadmap.' description: 'Community driven, articles, resources, guides, interview questions, quizzes for Go development. Learn to become a modern Go developer by following the steps, skills, resources and guides listed in this roadmap.'
@ -56,3 +65,4 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'skill-roadmap' - 'skill-roadmap'
--- ---

@ -16,6 +16,15 @@ schema:
imageUrl: 'https://roadmap.sh/roadmaps/java.png' imageUrl: 'https://roadmap.sh/roadmaps/java.png'
datePublished: '2023-01-05' datePublished: '2023-01-05'
dateModified: '2023-01-20' dateModified: '2023-01-20'
sponsor:
url: 'https://www.honeycomb.io/resources/platform-engineering-is-the-future-of-ops-thanks?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'DevOps vs. Platform Ops'
imageUrl: 'https://i.imgur.com/kI8YCAA.jpg'
description: 'Explore the role of DevOps as platform engineering rises in the software development field.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'Java / Honeycomb Link'
seo: seo:
title: 'Learn to become a modern Java developer' title: 'Learn to become a modern Java developer'
description: 'Community driven, articles, resources, guides, interview questions, quizzes for java development. Learn to become a modern Java developer by following the steps, skills, resources and guides listed in this roadmap.' description: 'Community driven, articles, resources, guides, interview questions, quizzes for java development. Learn to become a modern Java developer by following the steps, skills, resources and guides listed in this roadmap.'
@ -56,3 +65,4 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'skill-roadmap' - 'skill-roadmap'
--- ---

@ -53,4 +53,3 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'skill-roadmap' - 'skill-roadmap'
--- ---

@ -53,4 +53,3 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'skill-roadmap' - 'skill-roadmap'
--- ---

@ -11,6 +11,15 @@ hasTopics: true
dimensions: dimensions:
width: 968 width: 968
height: 2474.06 height: 2474.06
sponsor:
url: 'https://www.honeycomb.io/blog/building-platform-team?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'How to Lead a Platform Team'
imageUrl: 'https://i.imgur.com/XG7MEWs.jpg'
description: 'Master building & executing a top-performing platform engineering team with this guide.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'Node.js / Honeycomb Link'
schema: schema:
headline: 'Node.js Roadmap' headline: 'Node.js Roadmap'
description: 'Learn Node.js with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' description: 'Learn Node.js with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'

@ -39,7 +39,6 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'role-roadmap' - 'role-roadmap'
--- ---
The intent of this guide is to give you an idea about the DBA landscape and to help guide your learning if you are confused. The roadmap is highly opinionated — neither, knowing everything listed in the roadmap, nor the order of items given in the roadmap is required to be followed in order to be a DBA. The intent of this guide is to give you an idea about the DBA landscape and to help guide your learning if you are confused. The roadmap is highly opinionated — neither, knowing everything listed in the roadmap, nor the order of items given in the roadmap is required to be followed in order to be a DBA.
## Learn basic RDBMS terms and concepts ## Learn basic RDBMS terms and concepts

@ -16,6 +16,15 @@ schema:
imageUrl: 'https://roadmap.sh/roadmaps/python.png' imageUrl: 'https://roadmap.sh/roadmaps/python.png'
datePublished: '2023-01-05' datePublished: '2023-01-05'
dateModified: '2023-01-20' dateModified: '2023-01-20'
sponsor:
url: 'https://www.honeycomb.io/blog/how-we-define-sre-work-as-team?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'Day in the Life of an SRE'
imageUrl: 'https://i.imgur.com/xANWBZQ.jpg'
description: 'Dive into the world of SRE work to better understand an SRE’s role in driving incident response.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'Python / Honeycomb Link'
seo: seo:
title: 'Learn to become a modern Python developer' title: 'Learn to become a modern Python developer'
description: 'Community driven, articles, resources, guides, interview questions, quizzes for python development. Learn to become a modern Python developer by following the steps, skills, resources and guides listed in this roadmap.' description: 'Community driven, articles, resources, guides, interview questions, quizzes for python development. Learn to become a modern Python developer by following the steps, skills, resources and guides listed in this roadmap.'

@ -11,6 +11,15 @@ hasTopics: true
dimensions: dimensions:
width: 968 width: 968
height: 2107.75 height: 2107.75
sponsor:
url: 'https://info.honeycomb.io/observability-engineering-oreilly-book-2022?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'Free eBook'
imageUrl: 'https://i.imgur.com/zS1FMNo.jpg'
description: 'Get this ebook to start your observability journey for quicker debugging & more time to innovate.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'QA / Honeycomb Link'
schema: schema:
headline: 'QA Engineer Roadmap' headline: 'QA Engineer Roadmap'
description: 'Learn to become a QA Engineer with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' description: 'Learn to become a QA Engineer with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'
@ -47,3 +56,4 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'role-roadmap' - 'role-roadmap'
--- ---

@ -48,4 +48,3 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'skill-roadmap' - 'skill-roadmap'
--- ---

@ -50,4 +50,3 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'skill-roadmap' - 'skill-roadmap'
--- ---

@ -11,6 +11,15 @@ isNew: true
dimensions: dimensions:
width: 968 width: 968
height: 1245.52 height: 1245.52
sponsor:
url: 'https://www.honeycomb.io/blog/an-engineering-managers-bill-of-rights-and-responsibilities?utm_medium=paid-sponsorship&utm_source=insight-partners&utm_campaign=plg_insightpartners_paidsponsorship'
title: 'Lead High-Impact Teams'
imageUrl: 'https://i.imgur.com/EBscW4C.jpg'
description: 'Learn what it takes to be a manager of a high-performance engineering team.'
event:
category: 'SponsorClick'
action: 'Honeycomb Redirect'
label: 'Spring Boot / Honeycomb Link'
schema: schema:
headline: 'Spring Boot Roadmap' headline: 'Spring Boot Roadmap'
description: 'Learn Spring Boot with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' description: 'Learn Spring Boot with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'
@ -56,3 +65,4 @@ tags:
- 'main-sitemap' - 'main-sitemap'
- 'skill-roadmap' - 'skill-roadmap'
--- ---

Loading…
Cancel
Save