diff --git a/contributing.md b/contributing.md index 1bd29b362..e6f603081 100644 --- a/contributing.md +++ b/contributing.md @@ -73,7 +73,7 @@ For new roadmaps, you can either: For the existing roadmaps, please follow the details listed for the nature of contribution: -- **Fixing Typos** — Make your changes in the [roadmap JSON file](https://github.com/kamranahmedse/developer-roadmap/tree/master/src/data/roadmaps) and submit a [PR](https://github.com/kamranahmedse/developer-roadmap/pulls). +- **Fixing Typos** — Make your changes in the [roadmap Markdown file](https://github.com/kamranahmedse/developer-roadmap/tree/master/src/data/roadmaps) and submit a [PR](https://github.com/kamranahmedse/developer-roadmap/pulls). - **Adding or Removing Nodes** — Please open an [issue](https://github.com/kamranahmedse/developer-roadmap/issues) with your suggestion. **Note:** Please note that our goal is not to have the biggest list of items. Our goal is to list items or skills most relevant today. diff --git a/package.json b/package.json index dc09bf668..dc5ef9fb1 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,8 @@ "@napi-rs/image": "^1.9.2", "@resvg/resvg-js": "^2.6.2", "@types/react": "^18.3.11", - "@types/react-dom": "^18.3.0", - "astro": "^4.16.0", + "@types/react-dom": "^18.3.1", + "astro": "^4.16.1", "clsx": "^2.1.1", "dayjs": "^1.11.13", "dom-to-image": "^2.6.0", @@ -47,9 +47,9 @@ "gray-matter": "^4.0.3", "htm": "^3.1.1", "image-size": "^1.1.1", - "jose": "^5.9.3", + "jose": "^5.9.4", "js-cookie": "^3.0.5", - "lucide-react": "^0.451.0", + "lucide-react": "^0.452.0", "luxon": "^3.5.0", "nanoid": "^5.0.7", "nanostores": "^0.11.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ca5bba6f0..ac1af87ab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,16 +10,16 @@ importers: dependencies: '@astrojs/node': specifier: ^8.3.4 - version: 8.3.4(astro@4.16.0(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2)) + version: 8.3.4(astro@4.16.1(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2)) '@astrojs/react': specifier: ^3.6.2 - version: 3.6.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.8(@types/node@18.19.50)) + version: 3.6.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.8(@types/node@18.19.50)) '@astrojs/sitemap': specifier: ^3.2.0 version: 3.2.0 '@astrojs/tailwind': specifier: ^5.1.2 - version: 5.1.2(astro@4.16.0(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2))(tailwindcss@3.4.13) + version: 5.1.2(astro@4.16.1(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2))(tailwindcss@3.4.13) '@fingerprintjs/fingerprintjs': specifier: ^4.5.0 version: 4.5.0 @@ -36,11 +36,11 @@ importers: specifier: ^18.3.11 version: 18.3.11 '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.0 + specifier: ^18.3.1 + version: 18.3.1 astro: - specifier: ^4.16.0 - version: 4.16.0(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2) + specifier: ^4.16.1 + version: 4.16.1(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -63,14 +63,14 @@ importers: specifier: ^1.1.1 version: 1.1.1 jose: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^5.9.4 + version: 5.9.4 js-cookie: specifier: ^3.0.5 version: 3.0.5 lucide-react: - specifier: ^0.451.0 - version: 0.451.0(react@18.3.1) + specifier: ^0.452.0 + version: 0.452.0(react@18.3.1) luxon: specifier: ^3.5.0 version: 3.5.0 @@ -1360,8 +1360,8 @@ packages: '@types/react-calendar-heatmap@1.6.7': resolution: {integrity: sha512-xWBS9iOvw+aCidPk8QwCH69OCO7jnj6/9TjooqGQ9W+rA5m1aw36GjQMlSYKAg86otDeg9dzA+hSAIcvw/y9Rg==} - '@types/react-dom@18.3.0': - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + '@types/react-dom@18.3.1': + resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} '@types/react-slick@0.23.13': resolution: {integrity: sha512-bNZfDhe/L8t5OQzIyhrRhBr/61pfBcWaYJoq6UDqFtv5LMwfg4NsVDD2J8N01JqdAdxLjOt66OZEp6PX+dGs/A==} @@ -1450,8 +1450,8 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - astro@4.16.0: - resolution: {integrity: sha512-R5voBFy0yOg57uFnW24WV+RvqPerp9eOoDQoT0pQYqECuGuyV1PsZaSb9Nm0ec+KMLrfO9jvvESFw9LIN6XiUw==} + astro@4.16.1: + resolution: {integrity: sha512-ZeZd+L147HHgHmvoSkve7KM3EutV+hY0mOCa4PwARHEFAAh+omo4MUNoTWsFkfq7ozTgR0PCXQwslrZduoWHNg==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -2164,8 +2164,8 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true - jose@5.9.3: - resolution: {integrity: sha512-egLIoYSpcd+QUF+UHgobt5YzI2Pkw/H39ou9suW687MY6PmCwPmkNV/4TNjn1p2tX5xO3j0d0sq5hiYE24bSlg==} + jose@5.9.4: + resolution: {integrity: sha512-WBBl6au1qg6OHj67yCffCgFR3BADJBXN8MdRvCgJDuMv3driV2nHr7jdGvaKX9IolosAsn+M0XRArqLXUhyJHQ==} js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} @@ -2263,8 +2263,8 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@0.451.0: - resolution: {integrity: sha512-OwQ3uljZLp2cerj8sboy5rnhtGTCl9UCJIhT1J85/yOuGVlEH+xaUPR7tvNdddPvmV5M5VLdr7cQuWE3hzA4jw==} + lucide-react@0.452.0: + resolution: {integrity: sha512-kNefjOUOGm+Mu3KDiryONyPba9r+nhcrz5oJs3N6JDzGboQNEXw5GB3yB8rnV9/FA4bPyggNU6CRSihZm9MvSw==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc @@ -2845,9 +2845,6 @@ packages: rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - rehype-stringify@10.0.0: - resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} - rehype-stringify@10.0.1: resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} @@ -3385,9 +3382,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/node@8.3.4(astro@4.16.0(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2))': + '@astrojs/node@8.3.4(astro@4.16.1(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2))': dependencies: - astro: 4.16.0(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2) + astro: 4.16.1(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2) send: 0.19.0 server-destroy: 1.0.1 transitivePeerDependencies: @@ -3397,10 +3394,10 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/react@3.6.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.8(@types/node@18.19.50))': + '@astrojs/react@3.6.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.8(@types/node@18.19.50))': dependencies: '@types/react': 18.3.11 - '@types/react-dom': 18.3.0 + '@types/react-dom': 18.3.1 '@vitejs/plugin-react': 4.3.1(vite@5.4.8(@types/node@18.19.50)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -3415,9 +3412,9 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.23.8 - '@astrojs/tailwind@5.1.2(astro@4.16.0(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2))(tailwindcss@3.4.13)': + '@astrojs/tailwind@5.1.2(astro@4.16.1(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2))(tailwindcss@3.4.13)': dependencies: - astro: 4.16.0(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2) + astro: 4.16.1(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2) autoprefixer: 10.4.20(postcss@8.4.47) postcss: 8.4.47 postcss-load-config: 4.0.2(postcss@8.4.47) @@ -4475,7 +4472,7 @@ snapshots: dependencies: '@types/react': 18.3.11 - '@types/react-dom@18.3.0': + '@types/react-dom@18.3.1': dependencies: '@types/react': 18.3.11 @@ -4558,7 +4555,7 @@ snapshots: array-union@2.1.0: {} - astro@4.16.0(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2): + astro@4.16.1(@types/node@18.19.50)(rollup@4.22.4)(typescript@5.6.2): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.1 @@ -4590,7 +4587,6 @@ snapshots: esbuild: 0.21.5 estree-walker: 3.0.3 fast-glob: 3.3.2 - fastq: 1.17.1 flattie: 1.1.1 github-slugger: 2.0.0 gray-matter: 4.0.3 @@ -4611,7 +4607,6 @@ snapshots: rehype: 13.0.2 semver: 7.6.3 shiki: 1.22.0 - string-width: 7.2.0 tinyexec: 0.3.0 tsconfck: 3.1.3(typescript@5.6.2) unist-util-visit: 5.0.0 @@ -4645,7 +4640,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.0 caniuse-lite: 1.0.30001663 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -5355,7 +5350,7 @@ snapshots: jiti@1.21.6: {} - jose@5.9.3: {} + jose@5.9.4: {} js-cookie@3.0.5: {} @@ -5437,7 +5432,7 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.451.0(react@18.3.1): + lucide-react@0.452.0(react@18.3.1): dependencies: react: 18.3.1 @@ -5449,7 +5444,7 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.25.8 '@babel/types': 7.25.8 source-map-js: 1.2.1 @@ -6138,12 +6133,6 @@ snapshots: hast-util-raw: 9.0.4 vfile: 6.0.3 - rehype-stringify@10.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 - unified: 11.0.5 - rehype-stringify@10.0.1: dependencies: '@types/hast': 3.0.4 @@ -6154,7 +6143,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 rehype-parse: 9.0.0 - rehype-stringify: 10.0.0 + rehype-stringify: 10.0.1 unified: 11.0.5 remark-gfm@4.0.0: diff --git a/public/roadmap-content/ai-data-scientist.json b/public/roadmap-content/ai-data-scientist.json index 098223ecc..6cef610e4 100644 --- a/public/roadmap-content/ai-data-scientist.json +++ b/public/roadmap-content/ai-data-scientist.json @@ -326,8 +326,24 @@ }, "kBdt_t2SvVsY3blfubWIz": { "title": "Machine Learning", - "description": "Machine learning is a field of artificial intelligence that uses statistical techniques to give computer systems the ability to \"learn\" (e.g., progressively improve performance on a specific task) from data, without being explicitly programmed. The name machine learning was coined in 1959 by Arthur Samuel. Evolved from the study of pattern recognition and computational learning theory in artificial intelligence, machine learning explores the study and construction of algorithms that can learn from and make predictions on data – such algorithms overcome following strictly static program instructions by making data-driven predictions or decisions, through building a model from sample inputs. Machine learning is employed in a range of computing tasks where designing and programming explicit algorithms with good performance is difficult or infeasible; example applications include email filtering, detection of network intruders, and computer vision.", - "links": [] + "description": "Machine learning is a field of artificial intelligence that uses statistical techniques to give computer systems the ability to \"learn\" (e.g., progressively improve performance on a specific task) from data, without being explicitly programmed. The name machine learning was coined in 1959 by Arthur Samuel. Evolved from the study of pattern recognition and computational learning theory in artificial intelligence, machine learning explores the study and construction of algorithms that can learn from and make predictions on data – such algorithms overcome following strictly static program instructions by making data-driven predictions or decisions, through building a model from sample inputs. Machine learning is employed in a range of computing tasks where designing and programming explicit algorithms with good performance is difficult or infeasible; example applications include email filtering, detection of network intruders, and computer vision.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Advantages and Disadvantages of AI", + "url": "https://towardsdatascience.com/advantages-and-disadvantages-of-artificial-intelligence-182a5ef6588c", + "type": "article" + }, + { + "title": "Reinforcement Learning 101", + "url": "https://towardsdatascience.com/reinforcement-learning-101-e24b50e1d292", + "type": "article" + }, + { + "title": "Understanding AUC-ROC Curve", + "url": "https://towardsdatascience.com/understanding-auc-roc-curve-68b2303cc9c5", + "type": "article" + } + ] }, "FdBih8tlGPPy97YWq463y": { "title": "Classic ML (Sup., Unsup.), Advanced ML (Ensembles, NNs)", diff --git a/public/roadmap-content/ai-engineer.json b/public/roadmap-content/ai-engineer.json index cfc2eb20b..ed3e18b8d 100644 --- a/public/roadmap-content/ai-engineer.json +++ b/public/roadmap-content/ai-engineer.json @@ -6,18 +6,66 @@ }, "GN6SnI7RXIeW8JeD-qORW": { "title": "What is an AI Engineer?", - "description": "", - "links": [] + "description": "AI engineers are professionals who specialize in designing, developing, and implementing artificial intelligence (AI) systems. Their work is essential in various industries, as they create applications that enable machines to perform tasks that typically require human intelligence, such as problem-solving, learning, and decision-making.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "AI For Everyone", + "url": "https://www.coursera.org/learn/ai-for-everyone", + "type": "course" + }, + { + "title": "How to Become an AI Engineer: Duties, Skills, and Salary", + "url": "https://www.simplilearn.com/tutorials/artificial-intelligence-tutorial/how-to-become-an-ai-engineer", + "type": "article" + }, + { + "title": "AI engineers: What they do and how to become one", + "url": "https://www.techtarget.com/whatis/feature/How-to-become-an-artificial-intelligence-engineer", + "type": "article" + }, + { + "title": "AI Engineers- What Do They Do?", + "url": "https://www.youtube.com/watch?v=y8qRq9PMCh8&t=1s", + "type": "video" + } + ] }, "jSZ1LhPdhlkW-9QJhIvFs": { "title": "AI Engineer vs ML Engineer", - "description": "", - "links": [] + "description": "An AI Engineer develops broad AI solutions, such as chatbots, NLP, and intelligent automation, focusing on integrating AI technologies into large applications. In contrast, an ML Engineer is more focused on building and deploying machine learning models, handling data processing, model training, and optimization in production environments.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "AI Engineer vs. ML Engineer: Duties, Skills, and Qualifications", + "url": "https://www.upwork.com/resources/ai-engineer-vs-ml-engineer", + "type": "article" + }, + { + "title": "AI Developer vs ML Engineer: What’s the difference?", + "url": "https://www.youtube.com/watch?v=yU87V2-XisA&t=2s", + "type": "video" + } + ] }, "wf2BSyUekr1S1q6l8kyq6": { "title": "LLMs", - "description": "", - "links": [] + "description": "Large Language Models (LLMs) are advanced artificial intelligence programs designed to comprehend and generate human language text.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is a large language model (LLM)?", + "url": "https://www.cloudflare.com/learning/ai/what-is-large-language-model/", + "type": "article" + }, + { + "title": "Large language model", + "url": "https://en.wikipedia.org/wiki/Large_language_model", + "type": "article" + }, + { + "title": "How Large Language Models Work", + "url": "https://www.youtube.com/watch?v=5sLYAQS9sWQ&t=1s", + "type": "video" + } + ] }, "KWjD4xEPhOOYS51dvRLd2": { "title": "Inference", @@ -51,7 +99,7 @@ }, "9XCxilAQ7FRet7lHQr1gE": { "title": "AI Agents", - "description": "", + "description": "In AI engineering, \"agents\" refer to autonomous systems or components that can perceive their environment, make decisions, and take actions to achieve specific goals. Agents often interact with external systems, users, or other agents to carry out complex tasks. They can vary in complexity, from simple rule-based bots to sophisticated AI-powered agents that leverage machine learning models, natural language processing, and reinforcement learning.\n\nVisit the following resources to learn more:\n\n\\-[@article@Building an AI Agent Tutorial - LangChain](https://python.langchain.com/docs/tutorials/agents/) -[@article@Ai agents and their types](https://play.ht/blog/ai-agents-use-cases/) -[@video@The Complete Guide to Building AI Agents for Beginners](https://youtu.be/MOyl58VF2ak?si=-QjRD_5y3iViprJX)", "links": [] }, "5QdihE1lLpMc3DFrGy46M": { @@ -217,7 +265,7 @@ }, "4Q5x2VCXedAWISBXUIyin": { "title": "Adding end-user IDs in prompts", - "description": "", + "description": "Sending end-user IDs in your requests can be a useful tool to help OpenAI monitor and detect abuse. This allows OpenAI to provide your team with more actionable feedback in the event that we detect any policy violations in your application.\n\nVisit the following resources to learn more:\n\n\\-[@official@Sending end-user IDs - OpenAi](https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids)", "links": [] }, "qmx6OHqx4_0JXVIv8dASp": { @@ -237,58 +285,184 @@ }, "a_3SabylVqzzOyw3tZN5f": { "title": "OpenSource AI", - "description": "", - "links": [] + "description": "Open-source AI refers to the development and deployment of artificial intelligence technologies using open-source practices. This means that the source code is freely accessible, allowing developers to inspect, modify, and distribute AI systems without restrictions.\n\nLearn more from the following resources:", + "links": [ + { + "title": "The Open Source AI Definition", + "url": "https://opensource.org/deepdive/drafts/the-open-source-ai-definition-draft-v-0-0-3", + "type": "article" + }, + { + "title": "Defining Open Source AI", + "url": "https://www.technologyreview.com/2024/08/22/1097224/we-finally-have-a-definition-for-open-source-ai/", + "type": "article" + } + ] }, "RBwGsq9DngUsl8PrrCbqx": { "title": "Open vs Closed Source Models", - "description": "", - "links": [] + "description": "Open-source AI refers to models and software with publicly accessible source code, promoting collaboration, transparency, and cost-effectiveness, but it can face challenges like quality control and security risks. In contrast, closed-source AI involves proprietary models that are not publicly available, offering higher quality, performance, and security due to significant corporate investment, but lacking transparency and community collaboration. Some of them were `Llama` for Open Source Model and `Open AI` for Closed Source Model.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Open AI vs Closed AI", + "url": "https://formtek.com/blog/open-ai-vs-closed-ai-whats-the-difference-and-why-does-it-matter/", + "type": "article" + }, + { + "title": "Open vs Closed Source Model", + "url": "https://www.techtarget.com/searchEnterpriseAI/feature/Attributes-of-open-vs-closed-AI-explained", + "type": "article" + } + ] }, "97eu-XxYUH9pYbD_KjAtA": { "title": "Popular Open Source Models", - "description": "", - "links": [] + "description": "Notable open-source examples are `BERT`, developed by Google, which has become a foundational model for natural language processing tasks; `BLOOM`, a multilingual model with 176 billion parameters created through a collaborative project by Hugging Face; and `Falcon 180B`, known for its impressive performance in NLP tasks.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Top Open Source Models", + "url": "https://www.datacamp.com/blog/top-open-source-llms", + "type": "article" + }, + { + "title": "Mark on Open Source AI", + "url": "https://about.fb.com/news/2024/07/open-source-ai-is-the-path-forward/", + "type": "article" + } + ] }, "v99C5Bml2a6148LCJ9gy9": { "title": "Hugging Face", - "description": "", - "links": [] + "description": "Hugging Face is often called the GitHub of machine learning because it lets developers share and test their work openly. Hugging Face is known for its `Transformers Python library`, which simplifies the process of `downloading and training ML models`. It promotes collaboration within the AI community by enabling users to `share models` and `datasets`, thus advancing the democratization of artificial intelligence through open-source practices.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Hugging Face", + "url": "https://huggingface.co/", + "type": "article" + }, + { + "title": "Github", + "url": "https://github.com/huggingface", + "type": "article" + } + ] }, "YLOdOvLXa5Fa7_mmuvKEi": { "title": "Hugging Face Hub", - "description": "", - "links": [] + "description": "The Hugging Face Hub is a comprehensive platform that hosts over 900,000 machine learning models, 200,000 datasets, and 300,000 demo applications, facilitating collaboration and sharing within the AI community. It serves as a central repository where users can discover, upload, and experiment with various models and datasets across multiple domains, including natural language processing, computer vision, and audio tasks. It also supports version control.\n\nLearn more from the following resources:", + "links": [ + { + "title": "nlp-official", + "url": "https://huggingface.co/learn/nlp-course/en/chapter4/1", + "type": "course" + }, + { + "title": "Documentation", + "url": "https://huggingface.co/docs/hub/en/index", + "type": "article" + } + ] }, "YKIPOiSj_FNtg0h8uaSMq": { "title": "Hugging Face Tasks", - "description": "", - "links": [] + "description": "Hugging Face supports text classification, named entity recognition, question answering, summarization, and translation. It also extends to multimodal tasks that involve both text and images, such as visual question answering (VQA) and image-text matching. Each task is done by various pre-trained models that can be easily accessed and fine-tuned through the Hugging Face library.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Task and Model", + "url": "https://huggingface.co/learn/computer-vision-course/en/unit4/multimodal-models/tasks-models-part1", + "type": "article" + }, + { + "title": "Task Summary", + "url": "https://huggingface.co/docs/transformers/v4.14.1/en/task_summary", + "type": "article" + }, + { + "title": "Task Manager", + "url": "https://huggingface.co/docs/optimum/en/exporters/task_manager", + "type": "article" + } + ] }, "3kRTzlLNBnXdTsAEXVu_M": { "title": "Inference SDK", - "description": "", - "links": [] + "description": "The Hugging Face Inference SDK is a powerful tool that allows developers to easily integrate and run inference on large language models hosted on the Hugging Face Hub. By using the `InferenceClient`, users can make API calls to various models for tasks such as text generation, image creation, and more. The SDK supports both synchronous and asynchronous operations thus compatible with existing workflows.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Inference", + "url": "https://huggingface.co/docs/huggingface_hub/en/package_reference/inference_client", + "type": "article" + }, + { + "title": "Endpoint Setup", + "url": "https://www.npmjs.com/package/@huggingface/inference", + "type": "article" + } + ] }, "bGLrbpxKgENe2xS1eQtdh": { "title": "Transformers.js", - "description": "", - "links": [] + "description": "Hugging Face Transformers.js is a JavaScript library that enables developers to run transformer models directly in the browser without requiring a server. It offers a similar API to the original Python library, allowing tasks like sentiment analysis, text generation, and image processing using pre-trained models. By supporting the `pipeline API`, it simplifies the integration of models with preprocessing and postprocessing functionalities.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Transformers.js", + "url": "https://huggingface.co/docs/hub/en/transformers-js", + "type": "article" + } + ] }, "rTT2UnvqFO3GH6ThPLEjO": { "title": "Ollama", - "description": "", - "links": [] + "description": "Ollama is a powerful open-source tool designed to run large language models (LLMs) locally on users' machines, It exposes a `local API`, allowing developers to seamlessly integrate LLMs into their applications and workflows. This API facilitates efficient communication between your application and the LLM, enabling you to send prompts, receive responses, and leverage the full potential of these **powerful AI models**.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Ollama", + "url": "https://ollama.com/", + "type": "article" + }, + { + "title": "Ollama Explained", + "url": "https://www.geeksforgeeks.org/ollama-explained-transforming-ai-accessibility-and-language-processing/", + "type": "article" + } + ] }, "ro3vY_sp6xMQ-hfzO-rc1": { "title": "Ollama Models", - "description": "", - "links": [] + "description": "Ollama includes popular options like `Llama 2, Mistral, and Code Llama`. It simplifies the deployment process by bundling model weights, configurations, and datasets into a single package managed by a `Modelfile`, allowing users to easily manage and interact with these models. The platform's extensive library allows users to choose models tailored to their specific needs, and reduces reliance in cloud. Ollama Models could be of `text/base`, `chat/instruct` or `multi modal`.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Ollama Free Course", + "url": "https://youtu.be/f4tXwCNP1Ac?si=0RRKIfw2XAsWNNBo", + "type": "course" + }, + { + "title": "Ollama Model Library", + "url": "https://ollama.com/library", + "type": "article" + } + ] }, "TsG_I7FL-cOCSw8gvZH3r": { "title": "Ollama SDK", - "description": "", - "links": [] + "description": "The Ollama SDK is a community-driven tool that allows developers to integrate and run large language models (LLMs) locally through a simple API. Enabling users to easily import the Ollama provider and create customized instances for various models, such as Llama 2 and Mistral. The SDK supports functionalities like `text generation` and `embeddings`, making it versatile for applications ranging from `chatbots` to `content generation`. Also Ollama SDK enhances privacy and control over data while offering seamless integration with existing workflows.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SDK Provider", + "url": "https://sdk.vercel.ai/providers/community-providers/ollama", + "type": "article" + }, + { + "title": "Beginner's Guide", + "url": "https://dev.to/jayantaadhikary/using-the-ollama-api-to-run-llms-and-generate-responses-locally-18b7", + "type": "article" + }, + { + "title": "Setup", + "url": "https://klu.ai/glossary/ollama", + "type": "article" + } + ] }, "--ig0Ume_BnXb9K2U7HJN": { "title": "What are Embeddings", @@ -357,7 +531,7 @@ }, "dSd2C9lNl-ymmCRT9_ZC3": { "title": "Chroma", - "description": "", + "description": "Chroma is an open-source vector database and AI-native embedding database designed to handle and store large-scale embeddings and semantic vectors. It is used in applications that require fast, efficient similarity searches, such as natural language processing (NLP), machine learning (ML), and AI systems dealing with text, images, and other high-dimensional data.\n\nVisit the following resources to learn more:\n\n\\-[@official@Chroma](https://www.trychroma.com/) -[@article@Chroma Tutorials](https://lablab.ai/tech/chroma) -[@video@Chroma - Chroma - Vector Database for LLM Applications](https://youtu.be/Qs_y0lTJAp0?si=Z2-eSmhf6PKrEKCW)", "links": [] }, "_Cf7S1DCvX7p1_3-tP3C3": { @@ -477,7 +651,7 @@ }, "778HsQzTuJ_3c9OSn5DmH": { "title": "Agents Usecases", - "description": "", + "description": "AI Agents have a variety of usecases ranging from customer support, workflow automation, cybersecurity, finance, marketing and sales, and more.\n\nVisit the following resources to learn more:\n\n* [@article@Top 15 Use Cases Of AI Agents In Business](https://www.ampcome.com/post/15-use-cases-of-ai-agents-in-business) -[@article@A Brief Guide on AI Agents: Benefits and Use Cases](https://www.codica.com/blog/brief-guide-on-ai-agents/) -[@video@The Complete Guide to Building AI Agents for Beginners](https://youtu.be/MOyl58VF2ak?si=-QjRD_5y3iViprJX)", "links": [] }, "voDKcKvXtyLzeZdx2g3Qn": { @@ -577,8 +751,29 @@ }, "XcKeQfpTA5ITgdX51I4y-": { "title": "AI Code Editors", - "description": "", - "links": [] + "description": "AI code editors are development tools that leverage artificial intelligence to assist software developers in writing, debugging, and optimizing code. These editors go beyond traditional syntax highlighting and code completion by incorporating machine learning models, natural language processing, and data analysis to understand code context, generate suggestions, and even automate portions of the software development process.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Cursor - The AI Code Editor", + "url": "https://www.cursor.com/", + "type": "website" + }, + { + "title": "Bolt - Prompt, run, edit, and deploy full-stack web apps", + "url": "https://bolt.new", + "type": "website" + }, + { + "title": "Replit - Build Apps using AI", + "url": "https://replit.com/ai", + "type": "website" + }, + { + "title": "v0 - Build Apps with AI", + "url": "https://v0.dev", + "type": "website" + } + ] }, "TifVhqFm1zXNssA8QR3SM": { "title": "Code Completion Tools", diff --git a/public/roadmap-content/api-design.json b/public/roadmap-content/api-design.json index 1e2f61572..c426b8979 100644 --- a/public/roadmap-content/api-design.json +++ b/public/roadmap-content/api-design.json @@ -9,7 +9,17 @@ "description": "APIs, or Application Programming Interfaces, provide a manner in which software applications communicate with each other. They abstract the complexity of applications to allow developers to use only the essentials of the software they are working with. They define the methods and data formats an application should use in order to perform tasks, like sending, retrieving, or modifying data. Understanding APIs is integral to mastering modern software development, primarily because they allow applications to exchange data and functionality with ease, thus enabling integration and convergence of technological services. Therefore, a solid understanding of what APIs are forms the basic cornerstone of API design.\n\nVisit the following resources to learn more:", "links": [ { - "title": "What is an API?", + "title": "Getting Started with APIs - Postman", + "url": "https://www.postman.com/what-is-an-api/", + "type": "article" + }, + { + "title": "API - IBM", + "url": "https://www.ibm.com/topics/api", + "type": "article" + }, + { + "title": "What is an API? - AWS", "url": "https://aws.amazon.com/what-is/api/", "type": "article" }, @@ -61,7 +71,7 @@ "type": "article" }, { - "title": "HTTP: 1.0 vs. 1.1 vs 2.0 vs. 3.0", + "title": "HTTP: 1.0 vs 1.1 vs 2.0 vs 3.0", "url": "https://www.baeldung.com/cs/http-versions", "type": "article" } @@ -72,7 +82,7 @@ "description": "HTTP (Hypertext Transfer Protocol) Methods play a significant role in API design. They define the type of request a client can make to a server, providing the framework for interaction between client and server. Understanding HTTP methods is paramount to creating a robust and effective API. Some of the common HTTP methods used in API design include GET, POST, PUT, DELETE, and PATCH. Each of these methods signifies a different type of request, allowing for various interactions with your API endpoints. This in turn creates a more dynamic, functional, and user-friendly API.\n\nLearn more from the following resources:", "links": [ { - "title": "HTTP request methods", + "title": "HTTP Methods - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods", "type": "article" }, @@ -82,7 +92,7 @@ "type": "article" }, { - "title": "What are HTTP Methods?", + "title": "What are HTTP Methods? - Postman", "url": "https://blog.postman.com/what-are-http-methods/", "type": "article" } @@ -124,12 +134,12 @@ "type": "article" }, { - "title": "What are HTTP headers?", + "title": "What are HTTP Headers?", "url": "https://blog.postman.com/what-are-http-headers/", "type": "article" }, { - "title": "What are HTTP Headers & Understand different types of HTTP headers", + "title": "What are HTTP Headers & Types of HTTP headers", "url": "https://requestly.com/blog/what-are-http-headers-understand-different-types-of-http-headers/", "type": "article" } @@ -150,7 +160,7 @@ "type": "article" }, { - "title": "Path parameters", + "title": "Path Parameters", "url": "https://help.iot-x.com/api/how-to-use-the-api/parameters/path-parameters", "type": "article" } @@ -182,7 +192,7 @@ "type": "article" }, { - "title": "Content Negotiation in practice", + "title": "Content Negotiation in Practice", "url": "https://softwaremill.com/content-negotiation-in-practice/", "type": "article" } @@ -258,8 +268,19 @@ }, "o8i093VQv-T5Qf1yGqU0R": { "title": "Different API Styles", - "description": "Application Programming Interface (API) design isn't a one-size-fits-all endeavor. APIs can be structured in various styles, each with its own unique characteristics, advantages, and use cases. Early identification of the appropriate API style is crucial in ensuring a functional, efficient and seamless end-user experience. Commonly used API styles include REST, SOAP, GraphQL, and gRPC. Understanding these diverse API styles would help in making better design choices, fostering efficient overall system architecture, and promoting an intuitive and easy-to-use application.", - "links": [] + "description": "Application Programming Interface (API) design isn't a one-size-fits-all endeavor. APIs can be structured in various styles, each with its own unique characteristics, advantages, and use cases. Early identification of the appropriate API style is crucial in ensuring a functional, efficient and seamless end-user experience. Commonly used API styles include REST, SOAP, GraphQL, and gRPC. Understanding these diverse API styles would help in making better design choices, fostering efficient overall system architecture, and promoting an intuitive and easy-to-use application.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "API Styles", + "url": "https://www.redhat.com/architect/api-styles", + "type": "article" + }, + { + "title": "Top API Styles", + "url": "https://www.youtube.com/watch?v=4vLxWqE94l4", + "type": "video" + } + ] }, "BvwdASMvuNQ9DNgzdSZ4o": { "title": "RESTful APIs", @@ -287,45 +308,30 @@ "description": "Simple JSON (JavaScript Object Notation) APIs are a popular form of API or \"Application Programming Interface\" which utilise JSON to exchange data between servers and web applications. This method has gained prominence mainly for its simplicity, light weight, and easy readability. In the context of API design, a well-structured JSON API allows developers to efficiently interact with the backend and retrieve only the data they need in a consistent and comprehensible manner. From reducing redundant data to enabling quick parsing, Simple JSON APIs provide numerous benefits to improve the overall performance of applications. Designing a good JSON API requires careful planning, sound knowledge of HTTP methods, endpoints, error handling mechanisms, and most importantly, a clear understanding of the application's data requirements.\n\nLearn more from the following resources:", "links": [ { - "title": "A specification for building JSON APIs", + "title": "Specification for Building JSON APIs", "url": "https://github.com/json-api/json-api", "type": "opensource" }, { - "title": "JSON API: Explained in 4 minutes (+ EXAMPLES)", + "title": "JSON API: Explained in 4 Minutes", "url": "https://www.youtube.com/watch?v=N-4prIh7t38", "type": "video" } ] }, "Wwd-0PjrtViMFWxRGaQey": { - "title": "gRPC APIs", - "description": "gRPC is a platform agnostic serialization protocol that is used to communicate between services. Designed by Google in 2015, it is a modern alternative to REST APIs. It is a binary protocol that uses HTTP/2 as a transport layer. It is a high performance, open source, general-purpose RPC framework that puts mobile and HTTP/2 first.\n\nIt's main use case is for communication between two different languages within the same application. You can use Python to communicate with Go, or Java to communicate with C#.\n\ngRPC uses the protocol buffer language to define the structure of the data that is\n\nVisit the following resources to learn more:", + "title": "SOAP APIs", + "description": "SOAP (Simple Object Access Protocol) APIs are a standard communication protocol system that permits programs that run on different operating systems (like Linux and Windows) to communicate using Hypertext Transfer Protocol (HTTP) and its Extensible Markup Language (XML). In the context of API Design, SOAP APIs offer a robust and well-defined process for interaction between various software applications, mostly over a network. They are highly extensible, versatile and support a wide range of communications protocols. Despite being more complex compared to other API types like REST, SOAP APIs ensure high reliability and security, making them the choice for certain business-focused, high-transaction applications.\n\nLearn more from the following resources:", "links": [ { - "title": "gRPC Website", - "url": "https://grpc.io/", + "title": "What are SOAP APIs?", + "url": "https://www.indeed.com/career-advice/career-development/what-is-soap-api", "type": "article" }, { - "title": "gRPC Introduction", - "url": "https://grpc.io/docs/what-is-grpc/introduction/", + "title": "SOAP vs REST 101: Understand The Differences", + "url": "https://www.soapui.org/learn/api/soap-vs-rest-api/", "type": "article" - }, - { - "title": "gRPC Core Concepts", - "url": "https://grpc.io/docs/what-is-grpc/core-concepts/", - "type": "article" - }, - { - "title": "Explore top posts about gRPC", - "url": "https://app.daily.dev/tags/grpc?ref=roadmapsh", - "type": "article" - }, - { - "title": "Stephane Maarek - gRPC Introduction", - "url": "https://youtu.be/XRXTsQwyZSU", - "type": "video" } ] }, @@ -338,13 +344,18 @@ "url": "https://github.com/graphql-kit/graphql-apis", "type": "opensource" }, + { + "title": "Visit Dedicated GraphQL Roadmap", + "url": "https://roadmap.sh/graphql", + "type": "article" + }, { "title": "GraphQL Website", "url": "https://graphql.org/", "type": "article" }, { - "title": "GraphQL explained in 100 seconds", + "title": "GraphQL Explained in 100 Seconds", "url": "https://www.youtube.com/watch?v=eIQh02xuVw4", "type": "video" } @@ -355,12 +366,12 @@ "description": "Building JSON/RESTful APIs involves designing and implementing APIs that adhere to the architectural constraints of Representational State Transfer (REST). These APIs use JSON (JavaScript Object Notation) as a format for information interchange, due to its lightweight, easy-to-understand, and universally accepted nature. A well-designed RESTful API, utilizing JSON, is key in developing applications that are scalable, maintainable, and easily integrated with other systems. This design approach enables the resources on a server to be accessed and manipulated using standard HTTP protocols, facilitating communication between different services and systems. Furthermore, it enables client-server interactions to be stateless, meaning each request from a client must contain all the information needed by the server to understand and process the request.\n\nLearn more from the following resources:", "links": [ { - "title": "A specification for building APIs in JSON", + "title": "Specification for Building APIs in JSON", "url": "https://jsonapi.org/", "type": "article" }, { - "title": "How to make a REST API", + "title": "How to Make a RESTful API", "url": "https://www.integrate.io/blog/how-to-make-a-rest-api/", "type": "article" }, @@ -392,7 +403,7 @@ "description": "URI (Uniform Resource Identifier) is a string of characters used to identify a name or a resource on the Internet. Designing URIs carefully is a crucial part of creating a smooth API interface that is easy to understand, remember and use. Good URI design ensures that related resources are grouped together in a logical manner and can greatly impact the usability and maintainability of an API. It involves crafting standardised, intuitive HTTP paths that take advantage of the hierarchical nature of URLs to provide a better structure to the API. This hierarchy can then be used to expand the API over time without breaking existing clients' functionality.\n\nLearn more from the following resources:", "links": [ { - "title": "Guidelines for URI design", + "title": "Guidelines for URI Design", "url": "https://css-tricks.com/guidelines-for-uri-design/", "type": "article" }, @@ -408,12 +419,12 @@ "description": "API Versioning is a critical component of API Design and Management. As the APIs evolve over time to meet the new business requirements and functionality enhancements, it is crucial to manage the changes in a way that doesn't break the existing client applications. This calls for effective versioning strategies in API design. There are different versioning strategies like URI versioning, Request Header versioning, and Media Type versioning which are adopted based on the ease of implementation, client compatibility, and accessibility. Understanding each strategy and its pros and cons can lead to better API Design and maintainability.\n\nLearn more from the following resources:", "links": [ { - "title": "What is API versioning?", + "title": "What is API Versioning?", "url": "https://www.postman.com/api-platform/api-versioning/", "type": "article" }, { - "title": "4 API versioning best practices", + "title": "API Versioning Best Practices", "url": "https://kodekloud.com/blog/api-versioning-best-practices/", "type": "article" }, @@ -513,7 +524,7 @@ "description": "Error Handling is a crucial aspect of API design that ensures the stability, usability, and reliability of the API in production. APIs are designed to help systems communicate with each other. However, there can be instances where these systems might encounter exceptions or errors. The process of predicting, catching, and managing these error occurrences is what we refer to as 'Error Handling'. In the context of API Design, it involves defining and implementing specific strategies to detect, manage and inform consumers of any exception or error that occurs while executing requests. Configuring this appropriately provides a more robust and seamless communication experience, enabling developers to debug and rectify issues more efficiently.\n\nLearn more from the following resources:", "links": [ { - "title": "Best practices for API error handling", + "title": "Best Practices for API Error Handling", "url": "https://blog.postman.com/best-practices-for-api-error-handling/", "type": "article" }, @@ -563,13 +574,24 @@ }, "cQnQ9v3mH27MGNwetz3JW": { "title": "Authentication Methods", - "description": "Application Programming Interfaces (APIs) are critical components in software development that allow different software systems to communicate and share functionality. To ensure secure communication, it's essential to authenticate the parties involved in the API transactions. The authentication process confirms the identity of the API user. There are numerous authentication methods available when designing an API, each with its own pros and cons. This includes Basic Authentication, API Key Authentication, OAuth, and JWT among others. Understanding these different methods and their best use cases is fundamental to designing secure and effective APIs.", - "links": [] + "description": "Application Programming Interfaces (APIs) are critical components in software development that allow different software systems to communicate and share functionality. To ensure secure communication, it's essential to authenticate the parties involved in the API transactions. The authentication process confirms the identity of the API user. There are numerous authentication methods available when designing an API, each with its own pros and cons. This includes Basic Authentication, API Key Authentication, OAuth, and JWT among others. Understanding these different methods and their best use cases is fundamental to designing secure and effective APIs.\n\nLearn more from the following resources:", + "links": [ + { + "title": "API Authentication", + "url": "https://www.postman.com/api-platform/api-authentication/", + "type": "article" + } + ] }, "0FzHERK5AeYL5wv1FBJbH": { "title": "Basic Auth", "description": "Basic Auth, short for Basic Authentication, is a simple method often used in API design for handling user authentication. In this method, client credentials, consisting of a username and password pair, are passed to the API server in a field in the HTTP header. The server then verifies these credentials before granting access to protected resources. Although Basic Auth is straightforward to implement, it is less secure compared to more advanced methods since it involves transmitting credentials in an encoded, but not encrypted, format. It is often used in cases where simplicity is paramount, or High security levels are not required.\n\nLearn more from the following resources:", "links": [ + { + "title": "Basic Authentication", + "url": "https://roadmap.sh/guides/basic-authentication", + "type": "article" + }, { "title": "Basic Auth Generation Header", "url": "https://www.debugbear.com/basic-auth-header-generator", @@ -591,6 +613,11 @@ "title": "Token Based Auth", "description": "Token-based authentication is a crucial aspect of API design. It involves providing the user with a token that validates their identity after they have successfully logged in. Once the token is obtained, users can use it to access resources and services provided by the API. This token is usually passed in the headers of subsequent HTTP requests done by the client. One key advantage of token-based auth is that tokens can be created and checked by the server without storing them persistently, which can help to scale applications more easily. This authentication method enhances the security and scalability of web applications and it is mainly used in modern API strategies, including RESTful APIs.\n\nLearn more from the following resources:", "links": [ + { + "title": "Token Based Authentication", + "url": "https://roadmap.sh/guides/token-authentication", + "type": "article" + }, { "title": "What Is Token-Based Authentication?", "url": "https://www.okta.com/uk/identity-101/what-is-token-based-authentication/", @@ -600,11 +627,6 @@ "title": "Session vs Token Authentication in 100 Seconds", "url": "https://www.youtube.com/watch?v=UBUNrFtufWo", "type": "video" - }, - { - "title": "Token based auth", - "url": "https://www.youtube.com/watch?v=woNZJMSNbuo", - "type": "video" } ] }, @@ -612,6 +634,11 @@ "title": "JWT ", "description": "JSON Web Tokens, or JWT, are a popular and secure method of transferring information between two parties in the domain of API design. As a compact, URL-safe means of representing claims to be transferred between two parties, they play a vital role in security and authorization in modern APIs. By encoding these claims, the information can be verified and trusted with a digital signature - ensuring that the API end-points can handle requests in a secure and reliable way. JWT is a relatively lightweight and scalable method that brings improved authentication and information exchange processes in API design.\n\nLearn more from the following resources:", "links": [ + { + "title": "JWT Authentication", + "url": "https://roadmap.sh/guides/jwt-authentication", + "type": "article" + }, { "title": "Introduction to JSON Web Tokens", "url": "https://jwt.io/introduction", @@ -633,6 +660,11 @@ "title": "OAuth 2.0", "description": "OAuth 2.0 is an authorization framework that allows applications to obtain limited access to user accounts on an HTTP service, such as Facebook, GitHub, DigitalOcean, and others. It works by delegating user authentication to the service that hosts the user account and authorizing third-party applications to access the user account. OAuth 2.0 defines four roles: resource owner, client, resource server and authorization server. With regards to API design, OAuth 2.0 can be used to protect API endpoints by ensuring that the client applications having valid access tokens can only interact with the API. It provides detailed workflow processes and a set of protocols for the client application to get authorization to access resources.\n\nLearn more from the following resources:", "links": [ + { + "title": "OAuth", + "url": "https://roadmap.sh/guides/oauth", + "type": "article" + }, { "title": "OAuth Website", "url": "https://oauth.net/2/", @@ -655,7 +687,7 @@ "description": "Application Programming Interfaces (APIs) are critical for building software applications. Among several key considerations during API design, one is deciding how to implement authentication and security. Session Based Authentication is one popular way to apply security in API design.\n\nThis method revolves around the server creating a session for the user after they successfully log in, associating it with a session identifier. This Session ID is then stored client-side within a cookie. On subsequent requests, the server validates the Session ID before processing the API call. The server will destroy the session after the user logs out, thereby invalidating the Session ID.\n\nUnderstanding Session Based Authentication is crucial for secure API design, especially in scenarios where security is a top priority or in legacy systems where this method is prevalent.\n\nLearn more from the following resources:", "links": [ { - "title": "Session Based Authentication - Roadmap.sh", + "title": "Session Based Authentication", "url": "https://roadmap.sh/guides/session-based-authentication", "type": "article" }, @@ -673,8 +705,14 @@ }, "nHbn8_sMY7J8o6ckbD-ER": { "title": "Authorization Methods", - "description": "In API design, authorization methods play a crucial role in ensuring the security and integrity of data transactions. They are the mechanisms through which an API identifies and validates a user, system, or application before granting them access to specific resources. These methods include Basic Authentication, OAuth, Token-based authentication, JSON Web Tokens (JWT), and API Key based, among others. So, understanding these methods enhances the ability to design APIs that effectively protect resources while allowing necessary access. Each method has its own pros and cons, usage scenarios and security features that make them more suitable for certain situations rather than others.", - "links": [] + "description": "In API design, authorization methods play a crucial role in ensuring the security and integrity of data transactions. They are the mechanisms through which an API identifies and validates a user, system, or application before granting them access to specific resources. These methods include Basic Authentication, OAuth, Token-based authentication, JSON Web Tokens (JWT), and API Key based, among others. So, understanding these methods enhances the ability to design APIs that effectively protect resources while allowing necessary access. Each method has its own pros and cons, usage scenarios and security features that make them more suitable for certain situations rather than others.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "API Authorization Methods", + "url": "https://konghq.com/blog/engineering/common-api-authentication-methods", + "type": "article" + } + ] }, "wFsbmMi5Ey9UyDADdbdPW": { "title": "Role Based Access Control (RBAC)", @@ -686,12 +724,12 @@ "type": "article" }, { - "title": "What is role-based access control (RBAC)?", + "title": "What is Role-based Access Control (RBAC)?", "url": "https://www.redhat.com/en/topics/security/what-is-role-based-access-control", "type": "article" }, { - "title": "Role-based access control (RBAC) vs. Attribute-based access control (ABAC)", + "title": "Role-based Access Control (RBAC) vs. Attribute-based Access Control (ABAC)", "url": "https://www.youtube.com/watch?v=rvZ35YW4t5k", "type": "video" } @@ -718,12 +756,12 @@ "description": "API keys and management is an integral part of API design. An API key is a unique identifier used to authenticate a user, developer, or calling program to an API. This ensures security and control over API endpoints, as only those with a valid API key can make requests. API Management, on the other hand, refers to the practices and tools that enable an organization to govern and monitor its API usage. It involves all the aspects of managing APIs including design, deployment, documentation, security, versioning, and analytics. Both elements play crucial roles in securing and organizing API access for efficient and controlled data sharing and communication.\n\nLearn more from the following resources:", "links": [ { - "title": "What is API key management?", + "title": "What is API Key Management?", "url": "https://www.akeyless.io/secrets-management-glossary/api-key-management/", "type": "article" }, { - "title": "API Key Management | Definition and Best Practices", + "title": "API Key Management - Definition and Best Practices", "url": "https://infisical.com/blog/api-key-management", "type": "article" } @@ -760,13 +798,13 @@ "type": "article" }, { - "title": "What is Swagger?", - "url": "https://blog.hubspot.com/website/what-is-swagger", + "title": "OpenAPI Inititive", + "url": "https://www.openapis.org/", "type": "article" }, { - "title": "OpenAPI Inititive", - "url": "https://www.openapis.org/", + "title": "What is Swagger?", + "url": "https://blog.hubspot.com/website/what-is-swagger", "type": "article" } ] @@ -781,7 +819,12 @@ "type": "article" }, { - "title": "Postman Api Testing Tutorial for beginners", + "title": "Postman Docs", + "url": "https://www.postman.com/api-documentation-tool/", + "type": "article" + }, + { + "title": "Postman Tutorial for Beginners", "url": "https://www.youtube.com/watch?v=MFxk5BZulVU", "type": "video" } @@ -792,12 +835,12 @@ "description": "[Readme.com](http://Readme.com) is an invaluable tool in the realm of API Design, renowned for providing a collaborative platform for creating beautiful, dynamic and intuitive documentation. It's a tool which aids developers in outlining clear, comprehensive documentation for their API interfaces. The API documentation created with [Readme.com](http://Readme.com) is not just about the presentation of information, but enhances the reader's understanding by making it interactive. This interactive approach encourages practical learning and offers insights into how the API will behave under different circumstances. With [Readme.com](http://Readme.com), developers can create a user-focused documentation environment that streamlines the learning process and makes their APIs easier to consume and implement.\n\nLearn more from the following resources:", "links": [ { - "title": "readmeio", - "url": "https://github.com/readmeio", + "title": "ReadMe", + "url": "https://github.com/orgs/readmeio/repositories?type=source", "type": "opensource" }, { - "title": "readme.com", + "title": "ReadMe Website", "url": "https://readme.com", "type": "article" } @@ -856,12 +899,12 @@ "description": "API design has rapidly emerged as a vital component of software development. When designing an API, it is crucial to follow best practices to ensure optimization, scalability, and efficiency. The best practices in API design revolve around principles such as simplicity, consistency, security, and proper documentation among others. These practices not only smoothens the development process but also makes the API more user-friendly, stable, and easily maintainable. Thus, following the best practices in API design is not an option but rather a must for developers and organizations looking to create APIs that last longer and perform better.\n\nLearn more from the following resources:", "links": [ { - "title": "Best practices for REST API design", + "title": "Best Practices for REST API Design", "url": "https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/", "type": "article" }, { - "title": "Best practices in API design", + "title": "Best Practices in API Design", "url": "https://swagger.io/resources/articles/best-practices-in-api-design/", "type": "article" } @@ -893,7 +936,7 @@ "type": "article" }, { - "title": "How does API monitoring improve API performance?", + "title": "How does API Monitoring Improves API Performance?", "url": "https://tyk.io/blog/api-product-metrics-what-you-need-to-know/", "type": "article" } @@ -909,7 +952,7 @@ "type": "article" }, { - "title": "Using caching strategies to improve API performance", + "title": "Using Caching Strategies to Improve API Performance", "url": "https://www.lonti.com/blog/using-caching-strategies-to-improve-api-performance", "type": "article" }, @@ -925,17 +968,22 @@ "description": "Load Balancing plays a crucial role in the domain of API Design. It primarily revolves around evenly and efficiently distributing network traffic across a group of backend servers, also known as a server farm or server pool. When it comes to API design, implementing load balancing algorithms is of immense importance to ensure that no single server bears too much demand. This allows for high availability and reliability by rerouting the traffic in case of server failure, effectively enhancing application performance and contributing to a positive user experience. Therefore, it's a vital tactic in ensuring the scalability and robustness of system architectures which heavily rely on API interactions.\n\nLearn more from the following resources:", "links": [ { - "title": "What is load balancing?", + "title": "What is Load Balancing?", "url": "https://www.cloudflare.com/en-gb/learning/performance/what-is-load-balancing/", "type": "article" }, + { + "title": "Load Balancers in API", + "url": "https://learn.microsoft.com/en-us/rest/api/load-balancer/", + "type": "article" + }, { "title": "API Gateway vs Load Balancer: Which is Right for Your Application?", "url": "https://konghq.com/blog/engineering/api-gateway-vs-load-balancer", "type": "article" }, { - "title": "What is a load balancer?", + "title": "What is a Load Balancer?", "url": "https://www.youtube.com/watch?v=sCR3SAVdyCc", "type": "video" } @@ -967,7 +1015,7 @@ "description": "Profiling and monitoring are critical aspects of API design and implementation. Profiling, in this context, refers to the process of analyzing the behavior of your API in order to understand various performance metrics including response times, request rates, error rates, and the overall health and functionality of your API. On the other hand, monitoring is the ongoing process of checking the status of your API to ensure it's functioning as expected while also providing an early warning system for potential issues and improvements. Together, profiling and monitoring your API can lead to a more reliable, efficient, and high-performing service.\n\nLearn more from the following resources:", "links": [ { - "title": "Monitor health and performance of your APIs", + "title": "Monitor Health and Performance of your APIs", "url": "https://learning.postman.com/docs/monitoring-your-api/intro-monitors/", "type": "article" }, @@ -1004,7 +1052,7 @@ "type": "article" }, { - "title": "API Integration Patterns", + "title": "API Integration Patterns - Devoteam", "url": "https://uk.devoteam.com/expert-view/api-integration-patterns/", "type": "article" } @@ -1036,12 +1084,12 @@ "description": "Event-driven architecture (EDA) is a software design concept that revolves around the production, interpretation, and consumption of events. With regards to API design, EDA grants systems the flexibility to decentralize analytics, microservices, and operations, thus promoting real-time information sharing and reaction. Event-driven APIs prioritize asynchronous communication, allowing applications to stay responsive even when tackling heavy data loads. For an effective API, adhering to EDA provides data reliability, maturity with a scalable structure, and efficient real-time data processing capabilities.\n\nLearn more form the following resources:", "links": [ { - "title": "Event-driven architecture style", + "title": "Event Driven Architecture Style", "url": "https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/event-driven", "type": "article" }, { - "title": "Event-driven architecture", + "title": "Event-driven Architecture", "url": "https://aws.amazon.com/event-driven-architecture/", "type": "article" }, @@ -1083,7 +1131,7 @@ "type": "article" }, { - "title": "Microservices explained in 5 minutes", + "title": "Microservices Explained in 5 Minutes", "url": "https://www.youtube.com/watch?v=lL_j7ilk7rc", "type": "video" } @@ -1094,12 +1142,12 @@ "description": "Messaging Queues play a fundamental role in API design, particularly in creating robust, decoupled, and efficient systems. These queues act like a buffer, storing messages or data sent from a sender (producer), allowing a receiver (consumer) to retrieve and process them at its own pace. In the context of API design, this concept enables developers to handle high-volume data processing requirements, providing an asynchronous communication protocol between multiple services. The benefits of messaging queues in API design include better system scalability, fault tolerance, and increased overall system resiliency.\n\nLearn more from the following resources:", "links": [ { - "title": "What is a message queue?", + "title": "What is a Message Queue?", "url": "https://aws.amazon.com/message-queue/", "type": "article" }, { - "title": "REST API message queues explained", + "title": "REST API Message Queues Explained", "url": "https://www.youtube.com/watch?v=2idPgA6IN_Q", "type": "video" } @@ -1126,12 +1174,12 @@ "description": "Batch Processing refers to the method of handling bulk data requests in API design. Here, multiple API requests are packed and processed as a single group or 'batch'. Instead of making numerous individual API calls, a user can make one batch request with numerous operations. This approach can increase performance and efficiency by reducing the overhead of establishing and closing multiple connections. The concept of 'batch processing' in API design is particularly useful in data-intensive applications or systems where the need for processing high volumes of data is prevalent.\n\nLearn more from the following resources:", "links": [ { - "title": "API design guidance: bulk vs batch import", + "title": "API Design Guidance: Bulk vs Batch Import", "url": "https://tyk.io/blog/api-design-guidance-bulk-and-batch-import/", "type": "article" }, { - "title": "Stream vs Batch processing explained with examples", + "title": "Stream vs Batch Processing Explained with Examples", "url": "https://www.youtube.com/watch?v=1xgBQTF24mU", "type": "video" } @@ -1139,7 +1187,7 @@ }, "H22jAI2W5QLL-b1rq-c56": { "title": "Rabbit MQ", - "description": "RabbitMQ is an open-source message-broker software/system that plays a crucial role in API design, specifically in facilitating effective and efficient inter-process communication. It implements the Advanced Message Queuing Protocol (AMQP) to enable secure and reliable data transmission in various formats such as text, binary, or serialized objects.\n\nIn API design, RabbitMQ comes in handy in decoupling application processes for scalability and robustness, whilst ensuring that data delivery occurs safely and seamlessly. It introduces queuing as a way of handling multiple users or service calls at once hence enhancing responsiveness and performance of APIs. Its queue system elegantly digests API request loads, allowing services to evenly process data while preventing overloading.\n\nLearn more from the following resources:", + "description": "RabbitMQ is an open-source message-broker software/system that plays a crucial role in API design, specifically in facilitating effective and efficient inter-process communication. It implements the Advanced Message Queuing Protocol (AMQP) to enable secure and reliable data transmission in various formats such as text, binary, or serialized objects. RabbitMQ comes in handy in decoupling application processes for scalability and robustness, whilst ensuring that data delivery occurs safely and seamlessly. It introduces queuing as a way of handling multiple users or service calls at once hence enhancing responsiveness and performance of APIs. Its queue system elegantly digests API request loads, allowing services to evenly process data while preventing overloading.\n\nLearn more from the following resources:", "links": [ { "title": "RabbitMQ Website", @@ -1179,7 +1227,7 @@ "description": "API Testing refers to the process of checking the functionality, reliability, performance, and security of Application Programming Interfaces (APIs). It plays a crucial role in API design as it ensures that the APIs work correctly and as expected. This kind of testing does not require a user interface and mainly focuses on the business logic layer of the software architecture. API Testing is integral to guarantee that the data communication and responses between different software systems are error-free and streamlined.\n\nLearn more from the following resources:", "links": [ { - "title": "What is API testing?", + "title": "What is API Testing?", "url": "https://www.postman.com/api-platform/api-testing/", "type": "article" }, @@ -1224,7 +1272,7 @@ }, "6lm3wy9WTAERTqXCn6pFt": { "title": "Functional Testing", - "description": "Functional testing in the context of API design involves validating the endpoints and key-value pairs of an API. It ensures the server response works as expected and assesses the functionality of the API -- whether it is performing all the intended functions correctly. Various approaches like testing request-response pairs, error codes, and data accuracy are used. Functional testing can provide invaluable insights into how well an API meets the specified requirements and whether it is ready for integration into applications.\n\nLearn more from the following resources:", + "description": "Functional testing in the context of API design involves validating the endpoints and key-value pairs of an API. It ensures the server response works as expected and assesses the functionality of the API whether it is performing all the intended functions correctly. Various approaches like testing request-response pairs, error codes, and data accuracy are used. Functional testing can provide invaluable insights into how well an API meets the specified requirements and whether it is ready for integration into applications.\n\nLearn more from the following resources:", "links": [ { "title": "API Functional Testing – Why Is It Important And How to Test", @@ -1243,17 +1291,17 @@ "description": "Load testing is a crucial aspect of API design that ensures reliability, efficiency and performance under varying loads. It primarily focuses on identifying the maximum capacity of the API in terms of the volume of requests it can handle and its subsequent behavior when this threshold is reached or overloaded. By simulating varying degrees of user load, developers can identify and rectify bottlenecks or breakdown points in the system, hence enhancing overall API resilience.\n\nLearn more from the following resources:", "links": [ { - "title": "API load testing - a beginners guide", + "title": "API Load Testing - Beginners Guide", "url": "https://grafana.com/blog/2024/01/30/api-load-testing/", "type": "article" }, { - "title": "Test your API’s performance by simulating real-world traffic", + "title": "Test Your API’s Performance by Simulating Real-world Traffic", "url": "https://blog.postman.com/postman-api-performance-testing/", "type": "article" }, { - "title": "Load testing your API's", + "title": "Load Testing API's", "url": "https://www.youtube.com/watch?v=a5hWE4hMOoY", "type": "video" } @@ -1285,12 +1333,12 @@ "description": "Contract Testing is a critical aspect of maintaining a robust and reliable API infrastructure. In the realm of API design, Contract Testing refers to the method of ensuring that APIs work as anticipated and that changes to them do not break their intended functionality. This approach validates the interaction between two different systems, typically consumer and provider ( API), ensuring they comply with their agreed-upon contract. By defining clear and concise contracts for our APIs, developers can avoid common deployment issues and enhance system integration processes.\n\nLearn more from the following resources:", "links": [ { - "title": "A complete guide to Contract Testing", + "title": "Complete Guide to Contract Testing", "url": "https://testsigma.com/blog/api-contract-testing/", "type": "article" }, { - "title": "Get started with API Contract Testing", + "title": "Geting Started with API Contract Testing", "url": "https://saucelabs.com/resources/blog/getting-started-with-api-contract-testing", "type": "article" }, @@ -1303,7 +1351,7 @@ }, "XD1vDtrRQFbLyKJaD1AlA": { "title": "Error Handling / Retries", - "description": "When creating effective API designs, addressing Error Handling and Retries forms an essential facet. This is primarily due to the fact that APIs aren't always error-free and instances of network hiccups or input inaccuracies from users can occur. Without robust error handling, such occurrences can easily lead to catastrophic application failure or unsatisfactory user experiences.\n\nIn this context, error handling can refer to validating inputs, managing exceptions, and returning appropriate error message or status codes to the user. Meanwhile, the concept of retries comes into play to ensure maximum request success amidst transient failures. Through correctly implemented retries, an API can repeatedly attempt to execute a request until it is successful, thus ensuring seamless operation. The criteria and mechanisms of retries, including the count, delay, and conditions for retries, are crucial aspects to solidify during the API design.\n\nLearn more from the following resources:", + "description": "When creating effective API designs, addressing Error Handling and Retries forms an essential facet. This is primarily due to the fact that APIs aren't always error-free and instances of network hiccups or input inaccuracies from users can occur. Without robust error handling, such occurrences can easily lead to catastrophic application failure or unsatisfactory user experiences. Error handling can refer to validating inputs, managing exceptions, and returning appropriate error message or status codes to the user. Meanwhile, the concept of retries comes into play to ensure maximum request success amidst transient failures. Through correctly implemented retries, an API can repeatedly attempt to execute a request until it is successful, thus ensuring seamless operation.\n\nLearn more from the following resources:", "links": [ { "title": "How To Improve Your Backend By Adding Retries to Your API Calls", @@ -1311,7 +1359,7 @@ "type": "article" }, { - "title": "How to make resilient web applications with retries", + "title": "How to Make Resilient Web Applications with Retries", "url": "https://www.youtube.com/watch?v=Gly94hp3Eec", "type": "video" } @@ -1343,12 +1391,12 @@ "type": "article" }, { - "title": "What are websockets?", + "title": "What are Web Sockets?", "url": "https://www.pubnub.com/guides/websockets/", "type": "article" }, { - "title": "How web sockets work", + "title": "How Web Sockets Work", "url": "https://www.youtube.com/watch?v=pnj3Jbho5Ck", "type": "video" } @@ -1372,20 +1420,20 @@ }, "yvdfoly5WHHTq2Puss355": { "title": "Standards and Compliance", - "description": "When designing APIs, it's crucial to consider the concept of standards and compliance. Standards represent the set of rules and best practices that guide developers to create well-structured and easily maintainable APIs. They can range from the proper structure of the endpoints, the standardization of error responses, to naming conventions, and the usage of HTTP verbs.\n\nCompliance on the other hand, emphasizes on meeting protocol requirements or standards such as REST or SOAP. Furthermore, operating within regulated industries can also necessitate certain compliance measures like GDPR, HIPAA and others. Compliance in API Design ensures interoperability and safety of data transmission between systems.\n\nIn essence, Standards and Compliance in API Design contributes towards building more secure, robust, and efficient APIs that are user-friendly and universally understandable.\n\nLearn more from the following resources:", + "description": "When designing APIs, it's crucial to consider the concept of standards and compliance. Standards represent the set of rules and best practices that guide developers to create well-structured and easily maintainable APIs. They can range from the proper structure of the endpoints, the standardization of error responses, to naming conventions, and the usage of HTTP verbs. Compliance on the other hand, emphasizes on meeting protocol requirements or standards such as REST or SOAP. Furthermore, operating within regulated industries can also necessitate certain compliance measures like GDPR, HIPAA and others. Compliance in API Design ensures interoperability and safety of data transmission between systems.\n\nLearn more from the following resources:", "links": [ { - "title": "What is API compliance?", + "title": "What is API Compliance?", "url": "https://tyk.io/learning-center/api-compliance/", "type": "article" }, { - "title": "What is API compliance and why is it important?", + "title": "What is API Compliance and Why is it important?", "url": "https://www.traceable.ai/blog-post/achieve-api-compliance", "type": "article" }, { - "title": "REST API standards", + "title": "REST API Standards", "url": "https://www.integrate.io/blog/rest-api-standards/", "type": "article" } @@ -1412,17 +1460,17 @@ "description": "API Lifecycle Management is a crucial aspect in API design that oversees the process of creating, managing, and retiring APIs. This involves various stages from initial planning, designing, testing, deployment, to eventual retirement of the API. Proper lifecycle management ensures that an API meets the requirements, is reliable, and that it evolves with the needs of end users and developers. Moreover, it helps in maintaining the security, performance, and accessibility of the API throughout its lifetime. This comprehensive approach enables organizations to make the most of their APIs, mitigate issues, and facilitate successful digital transformation.\n\nLearn more from the following resources:", "links": [ { - "title": "What is the API lifecycle?", + "title": "What is the API Lifecycle?", "url": "https://www.postman.com/api-platform/api-lifecycle/", "type": "article" }, { - "title": "What is API lifescycle management?", + "title": "What is API Lifecycle Management?", "url": "https://swagger.io/blog/api-strategy/what-is-api-lifecycle-management/", "type": "article" }, { - "title": "Day in the lifecycle of an API", + "title": "Day in the Lifecycle of an API", "url": "https://www.youtube.com/watch?v=VxY_cz0VQXE", "type": "video" } @@ -1491,5 +1539,10 @@ "type": "article" } ] + }, + "grpc-apis@1DrqtOwxCuFtWQXQ6ZALp.md": { + "title": "gRPC APIs", + "description": "", + "links": [] } } \ No newline at end of file diff --git a/public/roadmap-content/cyber-security.json b/public/roadmap-content/cyber-security.json index 208364f42..a6d38d39b 100644 --- a/public/roadmap-content/cyber-security.json +++ b/public/roadmap-content/cyber-security.json @@ -78,7 +78,7 @@ "type": "article" }, { - "title": "Libra Office", + "title": "LibreOffice", "url": "https://www.libreoffice.org/", "type": "article" } @@ -1058,7 +1058,7 @@ }, "lwSFIbIX-xOZ0QK2sGFb1": { "title": "Router", - "description": "Amazon Simple Storage Service (S3) is a scalable, object-based cloud storage service provided by AWS. It allows users to store and retrieve large amounts of data, such as files, backups, or media content, with high durability and availability. S3 is designed for flexibility, enabling users to access data from anywhere via the internet while offering security features like encryption and access controls. It is widely used for data storage, content distribution, disaster recovery, and big data analytics, providing cost-effective, scalable storage for a variety of applications.\n\nLearn more from the following resources:", + "description": "A router is a networking device that directs data packets between different networks, ensuring they reach their destination. It operates at the network layer (Layer 3) of the OSI model and forwards data based on the IP addresses of the source and destination. Routers are essential for connecting devices to the internet or linking multiple networks together. They maintain a routing table to decide the best path for data and can dynamically update routes using protocols like RIP, OSPF, or BGP. Routers also handle Network Address Translation (NAT), allowing multiple devices to share a single public IP address. Many modern routers offer Wi-Fi for wireless connectivity and include basic firewall security to protect the network from threats.\n\nLearn more from the following resources:", "links": [ { "title": "What is a Router", @@ -1069,6 +1069,16 @@ "title": "What is a router and how does it work?", "url": "https://www.youtube.com/watch?v=UIJzHLpG9bM", "type": "video" + }, + { + "title": "Everything Routers do", + "url": "https://youtu.be/AzXys5kxpAM?si=nEsCH6jG2Lj6Ua8N", + "type": "video" + }, + { + "title": "How Routers forward Packets?", + "url": "https://youtu.be/Ep-x_6kggKA?si=II5xBPoXjYEjLvWX", + "type": "video" } ] }, diff --git a/public/roadmap-content/devops.json b/public/roadmap-content/devops.json index cd51f4fa8..84e4e2370 100644 --- a/public/roadmap-content/devops.json +++ b/public/roadmap-content/devops.json @@ -858,6 +858,11 @@ "url": "https://nginx.org/", "type": "article" }, + { + "title": "Basic NGINX Setup on Ubuntu: Guide to a Functional and Secure Website Serving", + "url": "https://swissmade.host/en/blog/basic-nginx-setup-ubuntu-guide-to-a-functional-and-secure-website-serving", + "type": "article" + }, { "title": "Explore top posts about Nginx", "url": "https://app.daily.dev/tags/nginx?ref=roadmapsh", @@ -1504,11 +1509,6 @@ "title": "White / Grey Listing", "description": "Whitelisting involves creating a list of trusted entities (such as IP addresses, email addresses, or applications) that are explicitly allowed to access a system or send messages. Anything not on the whitelist is denied by default. Whitelisting offers a high level of security by limiting access to only known and approved entities, but it can be inflexible and require frequent updates to accommodate legitimate changes. Greylisting is a more flexible approach used primarily in email filtering. When an email is received from an unknown sender, the server temporarily rejects it with a \"try again later\" response. Legitimate mail servers will retry sending the email after a short delay, while spammers, which often do not retry, are blocked. This method reduces spam by taking advantage of the fact that spammers usually do not follow retry mechanisms. Greylisting can be less intrusive than whitelisting, but it may introduce slight delays in email delivery for first-time senders.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "Basic Introduction to whitelisting", - "url": "https://www.cblohm.com/blog/education-marketing-trends/what-is-email-whitelisting/", - "type": "article" - }, { "title": "Detailed Introduction to greylisting", "url": "https://en.wikipedia.org/wiki/Greylisting_(email)", @@ -2114,6 +2114,11 @@ "title": "GitHub Actions", "description": "GitHub Actions is a continuous integration and continuous delivery (CI/CD) platform integrated directly into GitHub repositories. It allows developers to automate software workflows, including building, testing, and deploying applications. Actions are defined in YAML files and triggered by various GitHub events such as pushes, pull requests, or scheduled tasks. The platform provides a marketplace of pre-built actions and supports custom actions. GitHub Actions offers matrix builds, parallel job execution, and supports multiple operating systems and languages. It integrates seamlessly with GitHub's ecosystem, facilitating automated code review, issue tracking, and project management. This tool enables developers to implement DevOps practices efficiently within their GitHub workflow, enhancing productivity and code quality.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "GitHub Actions Certification – Full Course to PASS the Exam", + "url": "https://www.youtube.com/watch?v=Tz7FsunBbfQ", + "type": "course" + }, { "title": "Learn Git & GitHub", "url": "https://roadmap.sh/git-github", diff --git a/public/roadmap-content/full-stack.json b/public/roadmap-content/full-stack.json index a4f5fae12..3735fa9f2 100644 --- a/public/roadmap-content/full-stack.json +++ b/public/roadmap-content/full-stack.json @@ -874,4 +874,4 @@ "description": "If you remember, earlier in the roadmap, you manually logged into the AWS console and had to setup the services. Now that you know terraform, go ahead and automate the process of creating the infrastructure for your application using terraform and with that your deployments will be fully automated i.e., you should have:\n\n* Infrastructure setup using terraform\n* Provisioning using Ansible\n* CI/CD using GitHub Actions\n* Monitoring using Monit\n\nAnd that is it! You have successfully completed the roadmap and are now a full-stack developer. Congratulations! 🎉\n\nWhat's next?\n------------\n\nGo ahead and build something cool! Share your learnings with the community and help others learn as well. If you have any questions, feel free to join our [discord server](https://roadmap.sh/discord) and ask away!", "links": [] } -} +} \ No newline at end of file diff --git a/public/roadmap-content/ios.json b/public/roadmap-content/ios.json index 013b936fe..54cbe53b0 100644 --- a/public/roadmap-content/ios.json +++ b/public/roadmap-content/ios.json @@ -3,6 +3,16 @@ "title": "Swift (Recommended)", "description": "Swift is a powerful and intuitive programming language developed by Apple for building iOS, macOS, watchOS, and tvOS applications. It combines modern language features like type safety, concise syntax, and performance optimizations, making it easy to write and maintain.\n\nSwift is designed to be safe, fast, and interactive, offering a more productive coding experience compared to Objective-C.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Programiz - Swift Programming Tutorials", + "url": "https://www.programiz.com/swift-programming", + "type": "course" + }, + { + "title": "HackingWithSwift - 100 Days of Swift", + "url": "https://www.hackingwithswift.com/100", + "type": "course" + }, { "title": "Swift Documentation", "url": "https://www.swift.org/documentation/", diff --git a/public/roadmap-content/nodejs.json b/public/roadmap-content/nodejs.json index 0c590de47..37251bf6c 100644 --- a/public/roadmap-content/nodejs.json +++ b/public/roadmap-content/nodejs.json @@ -448,6 +448,11 @@ "url": "https://blog.bitsrc.io/types-of-native-errors-in-javascript-you-must-know-b8238d40e492", "type": "article" }, + { + "title": "JavaScript error reference - MDN", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors", + "type": "article" + }, { "title": "Explore top posts about JavaScript", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", @@ -463,6 +468,11 @@ "title": "Node.js Errors - Official Docs", "url": "https://nodejs.org/api/errors.html#errors_class_systemerror", "type": "article" + }, + { + "title": "@Article@16 Common Errors in Node.js and How to Fix Them", + "url": "https://betterstack.com/community/guides/scaling-nodejs/nodejs-errors/", + "type": "article" } ] }, diff --git a/public/roadmap-content/python.json b/public/roadmap-content/python.json index 969c1e9ee..9b6f4bfe2 100644 --- a/public/roadmap-content/python.json +++ b/public/roadmap-content/python.json @@ -1382,7 +1382,7 @@ }, "SSnzpijHLO5_l7DNEoMfx": { "title": "nose", - "description": "Nose is another opensource testing framework that extends `unittest` to provide a more flexible testing framework.\n\nVisit the following resources to learn more:", + "description": "Nose is another opensource testing framework that extends `unittest` to provide a more flexible testing framework. Note that Nose is no longer maintained and `pytest` is considered the replacement.\n\nVisit the following resources to learn more:", "links": [ { "title": "Introduction to Nose", diff --git a/public/roadmap-content/react.json b/public/roadmap-content/react.json index 693d449c2..a7f0e3bf7 100644 --- a/public/roadmap-content/react.json +++ b/public/roadmap-content/react.json @@ -244,7 +244,7 @@ "links": [ { "title": "Lifecycle of Reactive Effects", - "url": "https://react.dev/learn/lifecycle-of-reactive-effectsv", + "url": "https://react.dev/learn/lifecycle-of-reactive-effects", "type": "article" }, { @@ -479,112 +479,22 @@ }, "dgoDNDtW2_q9R9yhkXrcz": { "title": "useCallback", - "description": "React also has a lot of hooks that allow you to write more efficient React code.\n\nVisit the following resources to learn more:", + "description": "`useCallback` is a React hook that returns a memoized version of a callback function. It's used to optimize performance by preventing unnecessary re-renders. Specifically, it helps avoid recreating functions when their dependencies haven't changed, which can be useful when passing callbacks to child components that rely on referential equality to prevent re-rendering.\n\nVisit the following resources to learn more:", "links": [ { - "title": "useCallback", + "title": "React Documentation on useCallback", "url": "https://react.dev/reference/react/useCallback", "type": "article" }, { - "title": "useContext", - "url": "https://react.dev/reference/react/useContext", - "type": "article" - }, - { - "title": "useDebugValue", - "url": "https://react.dev/reference/react/useDebugValue", - "type": "article" - }, - { - "title": "useDeferredValue", - "url": "https://react.dev/reference/react/useDeferredValue", - "type": "article" - }, - { - "title": "useEffect", - "url": "https://react.dev/reference/react/useEffect", - "type": "article" - }, - { - "title": "useId", - "url": "https://react.dev/reference/react/useId", - "type": "article" - }, - { - "title": "useImperativeHandle", - "url": "https://react.dev/reference/react/useImperativeHandle", - "type": "article" - }, - { - "title": "useInsertionEffect", - "url": "https://react.dev/reference/react/useInsertionEffect", - "type": "article" - }, - { - "title": "useLayoutEffect", - "url": "https://react.dev/reference/react/useLayoutEffect", - "type": "article" - }, - { - "title": "useReducer", - "url": "https://react.dev/reference/react/useReducer", - "type": "article" - }, - { - "title": "useRef", - "url": "https://react.dev/reference/react/useRef", - "type": "article" - }, - { - "title": "useState", - "url": "https://react.dev/reference/react/useState", - "type": "article" - }, - { - "title": "useSyncExternalStore", - "url": "https://react.dev/reference/react/useSyncExternalStore", - "type": "article" - }, - { - "title": "useTransition", - "url": "https://react.dev/reference/react/useTransition", - "type": "article" - }, - { - "title": "useCallback Hook by Example", - "url": "https://www.robinwieruch.de/react-usecallback-hook/", - "type": "article" - }, - { - "title": "useMemo Hook by Example", - "url": "https://www.robinwieruch.de/react-usememo-hook/", - "type": "article" - }, - { - "title": "useContext Hook by Example", - "url": "https://www.robinwieruch.de/react-usecontext-hook/", - "type": "article" - }, - { - "title": "useReducer Hook by Example", - "url": "https://www.robinwieruch.de/react-usereducer-hook/", - "type": "article" - }, - { - "title": "useReducer vs useState Hook", - "url": "https://www.robinwieruch.de/react-usereducer-vs-usestate/", + "title": "useCallback Explained in Depth", + "url": "https://kentcdodds.com/blog/usememo-and-usecallback", "type": "article" }, { - "title": "Explore top posts about React Hooks", - "url": "https://app.daily.dev/tags/react-hooks?ref=roadmapsh", + "title": "useCallback Hook: An Introductory Guide", + "url": "https://dmitripavlutin.com/dont-overuse-react-usecallback/", "type": "article" - }, - { - "title": "useDefferedValue Hook video", - "url": "https://www.youtube.com/watch?v=jCGMedd6IWA", - "type": "video" } ] }, @@ -672,27 +582,6 @@ } ] }, - "2zrN65JZhCyNimi33g78f": { - "title": "useCallback", - "description": "`useCallback` is a React hook that returns a memoized version of a callback function. It's used to optimize performance by preventing unnecessary re-renders. Specifically, it helps avoid recreating functions when their dependencies haven't changed, which can be useful when passing callbacks to child components that rely on referential equality to prevent re-rendering.\n\nVisit the following resources to learn more:", - "links": [ - { - "title": "React Documentation on useCallback", - "url": "https://react.dev/reference/react/useCallback", - "type": "article" - }, - { - "title": "useCallback Explained in Depth", - "url": "https://kentcdodds.com/blog/usememo-and-usecallback", - "type": "article" - }, - { - "title": "useCallback Hook: An Introductory Guide", - "url": "https://dmitripavlutin.com/dont-overuse-react-usecallback/", - "type": "article" - } - ] - }, "FK59Zsm5ENA9g11XWCan_": { "title": "useState", "description": "`useState` hook is used to manage the state of a component in functional components. Calling `useState` returns an array with two elements: the current state value and a function to update the state.\n\nVisit the following resources to learn more:", @@ -1376,6 +1265,11 @@ "title": "Explore top posts about Jest", "url": "https://app.daily.dev/tags/jest?ref=roadmapsh", "type": "article" + }, + { + "title": "Testing JavaScript with Jest on Vultr", + "url": "https://developer.mozilla.org/en-US/blog/test-javascript-with-jest-on-vultr/", + "type": "article" } ] }, diff --git a/public/roadmap-content/redis.json b/public/roadmap-content/redis.json index 7dd7387b6..362b3460a 100644 --- a/public/roadmap-content/redis.json +++ b/public/roadmap-content/redis.json @@ -670,7 +670,7 @@ "description": "`SCARD` is a Redis command used to get the number of members in a set, it returns the cardinality of the specified set, which is the total count of unique elements it contains. If the set does not exist, `SCARD` returns `0`. This command is useful for quickly determining the size of a set, allowing applications to make decisions based on the number of unique items, such as checking user participation in a campaign or the count of unique tags in a system.\n\nLearn more from the following resources:", "links": [ { - "title": "", + "title": "SCARD Documentation", "url": "https://redis.io/docs/latest/commands/scard/", "type": "article" } @@ -829,7 +829,7 @@ }, "3pFChX6YIItrBz9lxu4XM": { "title": "ZRANGE", - "description": "The ZRANGE command can perform multiple range queries including by rank, by score or by lexiographical order. The order of elements returned are always from lowest to highest and any score ties are resolved using reverse lexiographical ordering.\n\nLearn more from the following resourceS:", + "description": "The ZRANGE command can perform multiple range queries including by rank, by score or by lexiographical order. The order of elements returned are always from lowest to highest and any score ties are resolved using reverse lexiographical ordering.\n\nLearn more from the following resources:", "links": [ { "title": "ZRANGE Documentation", @@ -1349,8 +1349,8 @@ "description": "The `EXEC` command in Redis is used to execute a transaction that has been initiated with the `MULTI` command. When a transaction is started with `MULTI`, subsequent commands are queued but not executed immediately. Calling `EXEC` will execute all the commands in the transaction atomically, ensuring that either all commands succeed or none are applied. If any command in the transaction fails, the entire transaction is aborted. This command is essential for maintaining data integrity when performing a series of operations that should be treated as a single unit of work.\n\nLearn more from the following resources:", "links": [ { - "title": "", - "url": "https://redis.io/docs/latest/commands/eval/", + "title": "EXEC Documentation", + "url": "https://redis.io/docs/latest/commands/exec/", "type": "article" }, { @@ -1514,12 +1514,12 @@ "description": "Persistence refers to the writing of data to durable storage, such as a solid-state disk (SSD). Redis provides a range of persistence options of which AOF (Append Only File) is one of the options. AOF persistence logs every write operation received by the server. These operations can then be replayed again at server startup, reconstructing the original dataset.The rewrite will create a small optimized version of the current Append Only File.\n\nLearn more from the following resources:", "links": [ { - "title": "Persistence in redis", + "title": "Persistence in Redis", "url": "https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/", "type": "article" }, { - "title": "Enabling redis persistence", + "title": "Enabling Redis persistence", "url": "https://youtu.be/qBKnUeR0p10?si=TPvcFtpFMcTZB-Be", "type": "video" } diff --git a/public/roadmap-content/software-architect.json b/public/roadmap-content/software-architect.json index 118a67485..bedfa4090 100644 --- a/public/roadmap-content/software-architect.json +++ b/public/roadmap-content/software-architect.json @@ -10,7 +10,7 @@ "links": [ { "title": "What is Software Architecture in Software Engineering?", - "url": "https://www.future-processing.com/blog/what-is-software-architecture-in-software-engineering/", + "url": "https://www.computer.org/resources/software-architecture", "type": "article" }, { diff --git a/readme.md b/readme.md index a63d9282f..b41c3e500 100644 --- a/readme.md +++ b/readme.md @@ -41,6 +41,7 @@ Here is the list of available roadmaps with more being actively worked upon. - [Computer Science Roadmap](https://roadmap.sh/computer-science) - [Data Structures and Algorithms Roadmap](https://roadmap.sh/datastructures-and-algorithms) - [AI and Data Scientist Roadmap](https://roadmap.sh/ai-data-scientist) +- [AI Engineer Roadmap](https://roadmap.sh/ai-engineer) - [AWS Roadmap](https://roadmap.sh/aws) - [Linux Roadmap](https://roadmap.sh/linux) - [Terraform Roadmap](https://roadmap.sh/terraform) diff --git a/src/components/AuthenticationFlow/GitHubButton.tsx b/src/components/AuthenticationFlow/GitHubButton.tsx index 3deb4c569..b0001699a 100644 --- a/src/components/AuthenticationFlow/GitHubButton.tsx +++ b/src/components/AuthenticationFlow/GitHubButton.tsx @@ -4,6 +4,7 @@ import Cookies from 'js-cookie'; import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt'; import { httpGet } from '../../lib/http'; import { Spinner } from '../ReactIcons/Spinner.tsx'; +import { triggerUtmRegistration } from '../../lib/browser.ts'; type GitHubButtonProps = { isDisabled?: boolean; @@ -46,6 +47,8 @@ export function GitHubButton(props: GitHubButtonProps) { return; } + triggerUtmRegistration(); + let redirectUrl = '/'; const gitHubRedirectAt = localStorage.getItem(GITHUB_REDIRECT_AT); const lastPageBeforeGithub = localStorage.getItem(GITHUB_LAST_PAGE); diff --git a/src/components/AuthenticationFlow/GoogleButton.tsx b/src/components/AuthenticationFlow/GoogleButton.tsx index 60b0dcf84..950c2237d 100644 --- a/src/components/AuthenticationFlow/GoogleButton.tsx +++ b/src/components/AuthenticationFlow/GoogleButton.tsx @@ -4,6 +4,10 @@ import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt'; import { httpGet } from '../../lib/http'; import { Spinner } from '../ReactIcons/Spinner.tsx'; import { GoogleIcon } from '../ReactIcons/GoogleIcon.tsx'; +import { + getStoredUtmParams, + triggerUtmRegistration, +} from '../../lib/browser.ts'; type GoogleButtonProps = { isDisabled?: boolean; @@ -37,6 +41,8 @@ export function GoogleButton(props: GoogleButtonProps) { }`, ) .then(({ response, error }) => { + const utmParams = getStoredUtmParams(); + if (!response?.token) { setError(error?.message || 'Something went wrong.'); setIsLoading(false); @@ -45,6 +51,8 @@ export function GoogleButton(props: GoogleButtonProps) { return; } + triggerUtmRegistration(); + let redirectUrl = '/'; const googleRedirectAt = localStorage.getItem(GOOGLE_REDIRECT_AT); const lastPageBeforeGoogle = localStorage.getItem(GOOGLE_LAST_PAGE); @@ -97,9 +105,12 @@ export function GoogleButton(props: GoogleButtonProps) { // For non authentication pages, we want to redirect back to the page // the user was on before they clicked the social login button if (!['/login', '/signup'].includes(window.location.pathname)) { - const pagePath = ['/respond-invite', '/befriend', '/r', '/ai'].includes( - window.location.pathname, - ) + const pagePath = [ + '/respond-invite', + '/befriend', + '/r', + '/ai', + ].includes(window.location.pathname) ? window.location.pathname + window.location.search : window.location.pathname; diff --git a/src/components/AuthenticationFlow/LinkedInButton.tsx b/src/components/AuthenticationFlow/LinkedInButton.tsx index 6f36c319b..81924a068 100644 --- a/src/components/AuthenticationFlow/LinkedInButton.tsx +++ b/src/components/AuthenticationFlow/LinkedInButton.tsx @@ -4,6 +4,7 @@ import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt'; import { httpGet } from '../../lib/http'; import { Spinner } from '../ReactIcons/Spinner.tsx'; import { LinkedInIcon } from '../ReactIcons/LinkedInIcon.tsx'; +import { triggerUtmRegistration } from '../../lib/browser.ts'; type LinkedInButtonProps = { isDisabled?: boolean; @@ -45,6 +46,8 @@ export function LinkedInButton(props: LinkedInButtonProps) { return; } + triggerUtmRegistration(); + let redirectUrl = '/'; const linkedInRedirectAt = localStorage.getItem(LINKEDIN_REDIRECT_AT); const lastPageBeforeLinkedIn = localStorage.getItem(LINKEDIN_LAST_PAGE); @@ -97,9 +100,12 @@ export function LinkedInButton(props: LinkedInButtonProps) { // For non authentication pages, we want to redirect back to the page // the user was on before they clicked the social login button if (!['/login', '/signup'].includes(window.location.pathname)) { - const pagePath = ['/respond-invite', '/befriend', '/r', '/ai'].includes( - window.location.pathname, - ) + const pagePath = [ + '/respond-invite', + '/befriend', + '/r', + '/ai', + ].includes(window.location.pathname) ? window.location.pathname + window.location.search : window.location.pathname; diff --git a/src/components/AuthenticationFlow/TriggerVerifyAccount.tsx b/src/components/AuthenticationFlow/TriggerVerifyAccount.tsx index c9442ab52..0978e38d1 100644 --- a/src/components/AuthenticationFlow/TriggerVerifyAccount.tsx +++ b/src/components/AuthenticationFlow/TriggerVerifyAccount.tsx @@ -4,6 +4,7 @@ import { httpPost } from '../../lib/http'; import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt'; import { Spinner } from '../ReactIcons/Spinner'; import { ErrorIcon2 } from '../ReactIcons/ErrorIcon2'; +import { triggerUtmRegistration } from '../../lib/browser.ts'; export function TriggerVerifyAccount() { const [isLoading, setIsLoading] = useState(true); @@ -26,6 +27,8 @@ export function TriggerVerifyAccount() { return; } + triggerUtmRegistration(); + setAuthToken(response.token); window.location.href = '/'; }) diff --git a/src/components/Dashboard/ProgressStack.tsx b/src/components/Dashboard/ProgressStack.tsx index ed53de4cf..ce975112f 100644 --- a/src/components/Dashboard/ProgressStack.tsx +++ b/src/components/Dashboard/ProgressStack.tsx @@ -201,7 +201,7 @@ export function ProgressStack(props: ProgressStackProps) { emptyLinkHref={'/roadmaps'} emptyLinkText={'Explore Roadmaps'} > -
+
{userProgressesToShow.length > 0 && ( <> {userProgressesToShow.map((progress) => { @@ -239,6 +239,14 @@ export function ProgressStack(props: ProgressStackProps) { /> )}
+ + + + View All Roadmaps +
diff --git a/src/components/PageSponsor.tsx b/src/components/PageSponsor.tsx index cdc21b5ec..28591579b 100644 --- a/src/components/PageSponsor.tsx +++ b/src/components/PageSponsor.tsx @@ -6,6 +6,7 @@ import { X } from 'lucide-react'; import { setViewSponsorCookie } from '../lib/jwt'; import { isMobile } from '../lib/is-mobile'; import Cookies from 'js-cookie'; +import { getUrlUtmParams } from '../lib/browser.ts'; export type PageSponsorType = { company: string; @@ -50,6 +51,16 @@ export function PageSponsor(props: PageSponsorProps) { const [sponsorId, setSponsorId] = useState(null); const [sponsor, setSponsor] = useState(); + useEffect(() => { + const foundUtmParams = getUrlUtmParams(); + + if (!foundUtmParams.utmSource) { + return; + } + + localStorage.setItem('utm_params', JSON.stringify(foundUtmParams)); + }, []); + const loadSponsor = async () => { const currentPath = window.location.pathname; if ( @@ -59,7 +70,7 @@ export function PageSponsor(props: PageSponsorProps) { currentPath.startsWith('/guides') || currentPath.startsWith('/videos') || currentPath.startsWith('/account') || - currentPath.startsWith('/team') + currentPath.startsWith('/team/') ) { return; } @@ -127,6 +138,8 @@ export function PageSponsor(props: PageSponsorProps) { const { url, title, imageUrl, description, company, gaLabel } = sponsor; + const isRoadmapAd = title.toLowerCase() === 'advertise with us!'; + return ( {title} {description} - Partner Content - - Partner Content - + {!isRoadmapAd && ( + <> + + Partner Content + + + Partner Content + + + )} ); diff --git a/src/data/best-practices/frontend-performance/content/compress-your-images.md b/src/data/best-practices/frontend-performance/content/compress-your-images.md index 74036d3bb..083298a63 100644 --- a/src/data/best-practices/frontend-performance/content/compress-your-images.md +++ b/src/data/best-practices/frontend-performance/content/compress-your-images.md @@ -16,3 +16,4 @@ Optimized images load faster in your browser and consume less data. - [Cloudinary - Image Analysis Tool](https://webspeedtest.cloudinary.com) - [ImageEngine - Image Webpage Loading Test](https://demo.imgeng.in) - [SVGOMG - Optimize SVG vector graphics files](https://jakearchibald.github.io/svgomg/) +- [Minipic - Convert Images Super Fast](https://minipic.app/) diff --git a/src/data/changelogs/devops-project-ideas.md b/src/data/changelogs/devops-project-ideas.md new file mode 100644 index 000000000..ba86011c7 --- /dev/null +++ b/src/data/changelogs/devops-project-ideas.md @@ -0,0 +1,22 @@ +--- +title: 'DevOps Project Ideas, Team Dashboard, Redis Content' +description: 'New Project Ideas for DevOps, Team Dashboard, Redis Content' +images: + "DevOps Project Ideas": "https://assets.roadmap.sh/guest/devops-project-ideas.png" + "Redis Resources": "https://assets.roadmap.sh/guest/redis-resources.png" + "Team Dashboard": "https://assets.roadmap.sh/guest/team-dashboard.png" +seo: + title: 'DevOps Project Ideas, Team Dashboard, Redis Content' + description: '' +date: 2024-10-16 +--- + +We have added 21 new project ideas to our DevOps roadmap, added content to Redis roadmap and introduced a new team dashboard for teams + +- Practice your skills with [21 newly added DevOps Project Ideas](https://roadmap.sh/devops) +- We have a new [Dashboard for teams](https://roadmap.sh/teams) to track their team activity. +- [Redis roadmap](https://roadmap.sh/redis) now comes with learning resources. +- Watch us [interview Bruno Simon](https://www.youtube.com/watch?v=IQK9T05BsOw) about his journey as a creative developer. +- Bug fixes and performance improvements + +ML Engineer roadmap and team dashboards are coming up next. Stay tuned! \ No newline at end of file diff --git a/src/data/guides/how-to-become-frontend-developer.md b/src/data/guides/how-to-become-frontend-developer.md index d289608de..e5dbe73d1 100644 --- a/src/data/guides/how-to-become-frontend-developer.md +++ b/src/data/guides/how-to-become-frontend-developer.md @@ -7,7 +7,7 @@ seo: title: 'How to become a Front-End Developer in 7 Steps' description: 'Learn how to become a front-end developer in 7 clear steps. Start your coding journey with practical tips and resources today!' ogImageUrl: 'https://assets.roadmap.sh/guest/how-to-become-frontend-developer-i23nx.jpg' -isNew: true +isNew: false type: 'textual' date: 2024-08-15 sitemap: diff --git a/src/data/projects/automated-backups.md b/src/data/projects/automated-backups.md index 645954b13..fefcebd71 100644 --- a/src/data/projects/automated-backups.md +++ b/src/data/projects/automated-backups.md @@ -19,7 +19,7 @@ roadmapIds: - 'devops' --- -The goal of this project is to setup a scheduled workflow to backup a Database every 12 hours and upload the backup to [Clouodflare R2](https://developers.cloudflare.com/r2/) which has a free tier for storage. +The goal of this project is to setup a scheduled workflow to backup a Database every 12 hours and upload the backup to [Cloudflare R2](https://developers.cloudflare.com/r2/) which has a free tier for storage. ## Requirements @@ -43,4 +43,4 @@ Write a script to download the latest backup from R2 and restore the database.
-Database backups are essential to ensure that you can restore your data in case of a disaster. This project will give you hands on experience on how to setup a scheduled workflow to backup a database and how to restore it from a backup. \ No newline at end of file +Database backups are essential to ensure that you can restore your data in case of a disaster. This project will give you hands on experience on how to setup a scheduled workflow to backup a database and how to restore it from a backup. diff --git a/src/data/projects/caching-server.md b/src/data/projects/caching-server.md index 536a91d88..f158ed783 100644 --- a/src/data/projects/caching-server.md +++ b/src/data/projects/caching-server.md @@ -22,6 +22,7 @@ roadmapIds: - 'java' - 'golang' - 'spring-boot' + - 'cpp' --- You are required to build a CLI tool that starts a caching proxy server, it will forward requests to the actual server and cache the responses. If the same request is made again, it will return the cached response instead of forwarding the request to the server. diff --git a/src/data/projects/database-backup-utility.md b/src/data/projects/database-backup-utility.md index febd4b964..ca419e5d3 100644 --- a/src/data/projects/database-backup-utility.md +++ b/src/data/projects/database-backup-utility.md @@ -22,6 +22,7 @@ roadmapIds: - 'java' - 'golang' - 'spring-boot' + - 'cpp' --- You are required to build a command-line interface (CLI) utility for backing up any type of database. The utility will support various database management systems (DBMS) such as MySQL, PostgreSQL, MongoDB, SQLite, and others. The tool will feature automatic backup scheduling, compression of backup files, storage options (local and cloud), and logging of backup activities. diff --git a/src/data/projects/expense-tracker.md b/src/data/projects/expense-tracker.md index d87016d22..ffe224728 100644 --- a/src/data/projects/expense-tracker.md +++ b/src/data/projects/expense-tracker.md @@ -23,6 +23,7 @@ roadmapIds: - 'java' - 'golang' - 'spring-boot' + - 'cpp' --- Build a simple expense tracker application to manage your finances. The application should allow users to add, delete, and view their expenses. The application should also provide a summary of the expenses. diff --git a/src/data/projects/github-user-activity.md b/src/data/projects/github-user-activity.md index 1849a9b82..f74bea900 100644 --- a/src/data/projects/github-user-activity.md +++ b/src/data/projects/github-user-activity.md @@ -22,6 +22,7 @@ roadmapIds: - 'java' - 'golang' - 'spring-boot' + - 'cpp' --- In this project, you will build a simple command line interface (CLI) to fetch the recent activity of a GitHub user and display it in the terminal. This project will help you practice your programming skills, including working with APIs, handling JSON data, and building a simple CLI application. diff --git a/src/data/projects/number-guessing-game.md b/src/data/projects/number-guessing-game.md index 752d6b2f9..229fe457e 100644 --- a/src/data/projects/number-guessing-game.md +++ b/src/data/projects/number-guessing-game.md @@ -22,6 +22,7 @@ roadmapIds: - 'java' - 'golang' - 'spring-boot' + - 'cpp' --- You are required to build a simple number guessing game where the computer randomly selects a number and the user has to guess it. The user will be given a limited number of chances to guess the number. If the user guesses the number correctly, the game will end, and the user will win. Otherwise, the game will continue until the user runs out of chances. diff --git a/src/data/projects/task-tracker.md b/src/data/projects/task-tracker.md index e624dedee..e2c52a8ed 100644 --- a/src/data/projects/task-tracker.md +++ b/src/data/projects/task-tracker.md @@ -22,6 +22,7 @@ roadmapIds: - 'java' - 'golang' - 'spring-boot' + - 'cpp' --- Task tracker is a project used to track and manage your tasks. In this task, you will build a simple command line interface (CLI) to track what you need to do, what you have done, and what you are currently working on. This project will help you practice your programming skills, including working with the filesystem, handling user inputs, and building a simple CLI application. diff --git a/src/data/roadmaps/ai-engineer/content/ai-engineer-vs-ml-engineer@jSZ1LhPdhlkW-9QJhIvFs.md b/src/data/roadmaps/ai-engineer/content/ai-engineer-vs-ml-engineer@jSZ1LhPdhlkW-9QJhIvFs.md index ca13ada77..a117c62da 100644 --- a/src/data/roadmaps/ai-engineer/content/ai-engineer-vs-ml-engineer@jSZ1LhPdhlkW-9QJhIvFs.md +++ b/src/data/roadmaps/ai-engineer/content/ai-engineer-vs-ml-engineer@jSZ1LhPdhlkW-9QJhIvFs.md @@ -6,4 +6,4 @@ Learn more from the following resources: - [@article@What does an AI Engineer do?](https://www.codecademy.com/resources/blog/what-does-an-ai-engineer-do/) - [@article@What is an ML Engineer?](https://www.coursera.org/articles/what-is-machine-learning-engineer) -- [@video@AI vs ML](https://www.youtube.com/watch?v=4RixMPF4xis) \ No newline at end of file +- [@video@AI vs ML](https://www.youtube.com/watch?v=4RixMPF4xis) diff --git a/src/data/roadmaps/ai-engineer/content/hugging-face-hub@YLOdOvLXa5Fa7_mmuvKEi.md b/src/data/roadmaps/ai-engineer/content/hugging-face-hub@YLOdOvLXa5Fa7_mmuvKEi.md index fbb85add1..210ec92fc 100644 --- a/src/data/roadmaps/ai-engineer/content/hugging-face-hub@YLOdOvLXa5Fa7_mmuvKEi.md +++ b/src/data/roadmaps/ai-engineer/content/hugging-face-hub@YLOdOvLXa5Fa7_mmuvKEi.md @@ -1,8 +1,8 @@ # Hugging Face Hub -The Hugging Face Hub is a platform with over 900k models, 200k datasets and over 300k demo apps that are all open source and available to the public. The Hugging Face Hub serves as a central place where anyone can explore, collaborate and experiment with Machine Learning. +The Hugging Face Hub is a comprehensive platform that hosts over 900,000 machine learning models, 200,000 datasets, and 300,000 demo applications, facilitating collaboration and sharing within the AI community. It serves as a central repository where users can discover, upload, and experiment with various models and datasets across multiple domains, including natural language processing, computer vision, and audio tasks. It also supports version control. Learn more from the following resources: -- [@official@Hugging Face Hub Documentation](https://huggingface.co/docs/hub/en/index) -- [@official@Hugging Face Quick Start](https://huggingface.co/docs/huggingface_hub/quick-start) \ No newline at end of file +- [@official@Documentation](https://huggingface.co/docs/hub/en/index) +- [@course@nlp-official](https://huggingface.co/learn/nlp-course/en/chapter4/1) diff --git a/src/data/roadmaps/ai-engineer/content/hugging-face-tasks@YKIPOiSj_FNtg0h8uaSMq.md b/src/data/roadmaps/ai-engineer/content/hugging-face-tasks@YKIPOiSj_FNtg0h8uaSMq.md index adec65881..28c3c6ab8 100644 --- a/src/data/roadmaps/ai-engineer/content/hugging-face-tasks@YKIPOiSj_FNtg0h8uaSMq.md +++ b/src/data/roadmaps/ai-engineer/content/hugging-face-tasks@YKIPOiSj_FNtg0h8uaSMq.md @@ -1,8 +1,9 @@ # Hugging Face Tasks -On Hugging Face, the models provided are split into "tasks" such as Image Recognition, Text to Video and Keypoint Detection. Hugging Face provides easy-to-integrate models for these tasks, enabling developers to build, fine-tune, and deploy solutions across different domains. +Hugging Face supports text classification, named entity recognition, question answering, summarization, and translation. It also extends to multimodal tasks that involve both text and images, such as visual question answering (VQA) and image-text matching. Each task is done by various pre-trained models that can be easily accessed and fine-tuned through the Hugging Face library. Learn more from the following resources: -- [@official@Hugging Face Tasks](https://huggingface.co/tasks) -- [@official@Hugging Face Tasks NPM Package](https://www.npmjs.com/package/@huggingface/tasks) \ No newline at end of file +- [@official@Task and Model](https://huggingface.co/learn/computer-vision-course/en/unit4/multimodal-models/tasks-models-part1) +- [@official@Task Summary](https://huggingface.co/docs/transformers/v4.14.1/en/task_summary) +- [@official@Task Manager](https://huggingface.co/docs/optimum/en/exporters/task_manager) diff --git a/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md b/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md index 330d04a10..2477aea69 100644 --- a/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md +++ b/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md @@ -6,4 +6,4 @@ Learn more from the following resources: - [@official@Hugging Face Website](https://huggingface.co) - [@video@What is Hugging Face? - Machine Learning Hub Explained](https://www.youtube.com/watch?v=1AUjKfpRZVo) -- [@course@Hugging Face Official Video Course](https://www.youtube.com/watch?v=00GKzGyWFEs&list=PLo2EIpI_JMQvWfQndUesu0nPBAtZ9gP1o) \ No newline at end of file +- [@course@Hugging Face Official Video Course](https://www.youtube.com/watch?v=00GKzGyWFEs&list=PLo2EIpI_JMQvWfQndUesu0nPBAtZ9gP1o) diff --git a/src/data/roadmaps/ai-engineer/content/inference-sdk@3kRTzlLNBnXdTsAEXVu_M.md b/src/data/roadmaps/ai-engineer/content/inference-sdk@3kRTzlLNBnXdTsAEXVu_M.md index 161f0c08d..a5f84e6ad 100644 --- a/src/data/roadmaps/ai-engineer/content/inference-sdk@3kRTzlLNBnXdTsAEXVu_M.md +++ b/src/data/roadmaps/ai-engineer/content/inference-sdk@3kRTzlLNBnXdTsAEXVu_M.md @@ -1,8 +1,8 @@ # Inference SDK -The Hugging Face Serverless Inference API offers a fast and free way to explore thousands of models for a variety of tasks. It supports quick integration of Hugging Face models into applications, enabling low-latency, scalable inference for tasks like text generation, sentiment analysis, and image classification. The SDK can be used locally or with cloud services, including Hugging Face's own Inference API and AWS SageMaker, simplifying the deployment process across various platforms. +The Hugging Face Inference SDK is a powerful tool that allows developers to easily integrate and run inference on large language models hosted on the Hugging Face Hub. By using the `InferenceClient`, users can make API calls to various models for tasks such as text generation, image creation, and more. The SDK supports both synchronous and asynchronous operations thus compatible with existing workflows. Learn more from the following resources: -- [@official@API Inference](https://huggingface.co/docs/api-inference/en/index) -- [@video@How to Use Hugging Face Inference API](https://www.youtube.com/watch?app=desktop&v=85FVwWPg63Q) \ No newline at end of file +- [@official@Inference](https://huggingface.co/docs/huggingface_hub/en/package_reference/inference_client) +- [@article@Endpoint Setup](https://www.npmjs.com/package/@huggingface/inference) diff --git a/src/data/roadmaps/ai-engineer/content/llms@wf2BSyUekr1S1q6l8kyq6.md b/src/data/roadmaps/ai-engineer/content/llms@wf2BSyUekr1S1q6l8kyq6.md index 2ab04f9b1..3be6ab28a 100644 --- a/src/data/roadmaps/ai-engineer/content/llms@wf2BSyUekr1S1q6l8kyq6.md +++ b/src/data/roadmaps/ai-engineer/content/llms@wf2BSyUekr1S1q6l8kyq6.md @@ -6,4 +6,4 @@ Learn more from the following resources: - [@article@What is a large language model (LLM)?](https://www.cloudflare.com/en-gb/learning/ai/what-is-large-language-model/) - [@video@How Large Langauge Models Work](https://www.youtube.com/watch?v=5sLYAQS9sWQ) -- [@video@Large Language Models (LLMs) - Everything You NEED To Know](https://www.youtube.com/watch?v=osKyvYJ3PRM) \ No newline at end of file +- [@video@Large Language Models (LLMs) - Everything You NEED To Know](https://www.youtube.com/watch?v=osKyvYJ3PRM) diff --git a/src/data/roadmaps/ai-engineer/content/ollama-models@ro3vY_sp6xMQ-hfzO-rc1.md b/src/data/roadmaps/ai-engineer/content/ollama-models@ro3vY_sp6xMQ-hfzO-rc1.md index 3b1c7cb29..3277ba81f 100644 --- a/src/data/roadmaps/ai-engineer/content/ollama-models@ro3vY_sp6xMQ-hfzO-rc1.md +++ b/src/data/roadmaps/ai-engineer/content/ollama-models@ro3vY_sp6xMQ-hfzO-rc1.md @@ -5,4 +5,4 @@ Ollama provides a collection of large language models (LLMs) designed to run loc Learn more from the following resources: - [@official@Ollama Model Library](https://ollama.com/library) -- [@video@What are the different types of models? Ollama Course](https://www.youtube.com/watch?v=f4tXwCNP1Ac) \ No newline at end of file +- [@video@What are the different types of models? Ollama Course](https://www.youtube.com/watch?v=f4tXwCNP1Ac) diff --git a/src/data/roadmaps/ai-engineer/content/ollama-sdk@TsG_I7FL-cOCSw8gvZH3r.md b/src/data/roadmaps/ai-engineer/content/ollama-sdk@TsG_I7FL-cOCSw8gvZH3r.md index 923fe5903..c615cdae6 100644 --- a/src/data/roadmaps/ai-engineer/content/ollama-sdk@TsG_I7FL-cOCSw8gvZH3r.md +++ b/src/data/roadmaps/ai-engineer/content/ollama-sdk@TsG_I7FL-cOCSw8gvZH3r.md @@ -1,8 +1,9 @@ # Ollama SDK -The Ollama SDK is a toolkit that enables developers to integrate and run large language models (LLMs) locally on personal devices or within applications. It provides APIs and utilities for deploying, managing, and interacting with models directly on laptops, desktops, or edge devices without needing cloud-based processing. The SDK simplifies the integration of AI capabilities, allowing developers to build applications for tasks like text generation, summarization, and question answering while maintaining data privacy and reducing latency. +The Ollama SDK is a community-driven tool that allows developers to integrate and run large language models (LLMs) locally through a simple API. Enabling users to easily import the Ollama provider and create customized instances for various models, such as Llama 2 and Mistral. The SDK supports functionalities like `text generation` and `embeddings`, making it versatile for applications ranging from `chatbots` to `content generation`. Also Ollama SDK enhances privacy and control over data while offering seamless integration with existing workflows. Learn more from the following resources: -- [@official@Ollama Python & JS Libraries](https://ollama.com/blog/python-javascript-libraries) -- [@video@Unlocking The Power Of AI: Creating Python Apps With Ollama!](https://www.youtube.com/watch?v=_4K20tOsXK8) \ No newline at end of file +- [@article@SDK Provider](https://sdk.vercel.ai/providers/community-providers/ollama) +- [@article@Beginner's Guide](https://dev.to/jayantaadhikary/using-the-ollama-api-to-run-llms-and-generate-responses-locally-18b7) +- [@article@Setup](https://klu.ai/glossary/ollama) diff --git a/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md b/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md index 65a5871b0..488f0d6d9 100644 --- a/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md +++ b/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md @@ -5,4 +5,4 @@ Ollama is a platform that offers large language models (LLMs) designed to run lo Learn more from the following resources: - [@official@Ollama Website](https://ollama.com/) -- [@article@Ollama: Easily run LLMs locally](https://klu.ai/glossary/ollama) \ No newline at end of file +- [@article@Ollama: Easily run LLMs locally](https://klu.ai/glossary/ollama) diff --git a/src/data/roadmaps/ai-engineer/content/open-vs-closed-source-models@RBwGsq9DngUsl8PrrCbqx.md b/src/data/roadmaps/ai-engineer/content/open-vs-closed-source-models@RBwGsq9DngUsl8PrrCbqx.md index 5bced8351..c282abc12 100644 --- a/src/data/roadmaps/ai-engineer/content/open-vs-closed-source-models@RBwGsq9DngUsl8PrrCbqx.md +++ b/src/data/roadmaps/ai-engineer/content/open-vs-closed-source-models@RBwGsq9DngUsl8PrrCbqx.md @@ -5,4 +5,4 @@ Open-source models are freely available for customization and collaboration, pro Learn more from the following resources: - [@article@OpenAI vs. open-source LLM](https://ubiops.com/openai-vs-open-source-llm/) -- [@video@AI360 | Open-Source vs Closed-Source LLMs](https://www.youtube.com/watch?v=710PDpuLwOc) \ No newline at end of file +- [@video@AI360 | Open-Source vs Closed-Source LLMs](https://www.youtube.com/watch?v=710PDpuLwOc) diff --git a/src/data/roadmaps/ai-engineer/content/opensource-ai@a_3SabylVqzzOyw3tZN5f.md b/src/data/roadmaps/ai-engineer/content/opensource-ai@a_3SabylVqzzOyw3tZN5f.md index 40dd4850d..5496544dc 100644 --- a/src/data/roadmaps/ai-engineer/content/opensource-ai@a_3SabylVqzzOyw3tZN5f.md +++ b/src/data/roadmaps/ai-engineer/content/opensource-ai@a_3SabylVqzzOyw3tZN5f.md @@ -5,4 +5,4 @@ Open-source AI refers to AI models, tools, and frameworks that are freely availa Learn more from the following resources: - [@article@Open Source AI Is the Path Forward](https://about.fb.com/news/2024/07/open-source-ai-is-the-path-forward/) -- [@video@Should You Use Open Source Large Language Models?](https://www.youtube.com/watch?v=y9k-U9AuDeM) \ No newline at end of file +- [@video@Should You Use Open Source Large Language Models?](https://www.youtube.com/watch?v=y9k-U9AuDeM) diff --git a/src/data/roadmaps/ai-engineer/content/popular-open-source-models@97eu-XxYUH9pYbD_KjAtA.md b/src/data/roadmaps/ai-engineer/content/popular-open-source-models@97eu-XxYUH9pYbD_KjAtA.md index 666dd8287..57f70ce3c 100644 --- a/src/data/roadmaps/ai-engineer/content/popular-open-source-models@97eu-XxYUH9pYbD_KjAtA.md +++ b/src/data/roadmaps/ai-engineer/content/popular-open-source-models@97eu-XxYUH9pYbD_KjAtA.md @@ -4,4 +4,4 @@ Popular open-source models include BERT for NLP tasks like text classification a - [@official@GPT-NEO](https://huggingface.co/docs/transformers/en/model_doc/gpt_neo) - [@opensource@OpenAI CLIP](https://github.com/openai/CLIP) -- [@opensource@OpenAI Whisper](https://github.com/openai/whisper) \ No newline at end of file +- [@opensource@OpenAI Whisper](https://github.com/openai/whisper) diff --git a/src/data/roadmaps/ai-engineer/content/transformersjs@bGLrbpxKgENe2xS1eQtdh.md b/src/data/roadmaps/ai-engineer/content/transformersjs@bGLrbpxKgENe2xS1eQtdh.md index 20900e2d7..da3555df4 100644 --- a/src/data/roadmaps/ai-engineer/content/transformersjs@bGLrbpxKgENe2xS1eQtdh.md +++ b/src/data/roadmaps/ai-engineer/content/transformersjs@bGLrbpxKgENe2xS1eQtdh.md @@ -5,4 +5,4 @@ Transformers.js is a JavaScript library that enables transformer models, like th Learn more from the following resources: - [@official@Transformers.js on Hugging Face](https://huggingface.co/docs/transformers.js/en/index) -- [@video@How Transformer.js Can Help You Create Smarter AI In Your Browser](https://www.youtube.com/watch?v=MNJHu9zjpqg) \ No newline at end of file +- [@video@How Transformer.js Can Help You Create Smarter AI In Your Browser](https://www.youtube.com/watch?v=MNJHu9zjpqg) diff --git a/src/data/roadmaps/ai-engineer/content/what-is-an-ai-engineer@GN6SnI7RXIeW8JeD-qORW.md b/src/data/roadmaps/ai-engineer/content/what-is-an-ai-engineer@GN6SnI7RXIeW8JeD-qORW.md index 3dfcdbeee..b5308272b 100644 --- a/src/data/roadmaps/ai-engineer/content/what-is-an-ai-engineer@GN6SnI7RXIeW8JeD-qORW.md +++ b/src/data/roadmaps/ai-engineer/content/what-is-an-ai-engineer@GN6SnI7RXIeW8JeD-qORW.md @@ -1,8 +1,10 @@ # What is an AI Engineer? -An AI Engineer is a professional who designs, builds, and deploys artificial intelligence systems to solve real-world problems. They work on developing machine learning models, creating data pipelines, and integrating AI solutions into software applications. AI Engineers handle tasks like data preprocessing, model training, and optimization to ensure the systems perform accurately and efficiently. They also collaborate with data scientists, software developers, and other stakeholders to align AI projects with business goals, making sure that the solutions are scalable, reliable, and ethical. Their work spans various fields, including natural language processing, computer vision, and robotics. +AI engineers are professionals who specialize in designing, developing, and implementing artificial intelligence (AI) systems. Their work is essential in various industries, as they create applications that enable machines to perform tasks that typically require human intelligence, such as problem-solving, learning, and decision-making. -Learn more from the following resources: +Visit the following resources to learn more: -- [@article@What Is an AI Engineer? (And How to Become One)](https://www.coursera.org/articles/ai-engineer) -- [@article@The AI Engineer Role Today](https://www.splunk.com/en_us/blog/learn/ai-engineer-role.html) \ No newline at end of file +- [@article@How to Become an AI Engineer: Duties, Skills, and Salary](https://www.simplilearn.com/tutorials/artificial-intelligence-tutorial/how-to-become-an-ai-engineer) +- [@article@AI engineers: What they do and how to become one](https://www.techtarget.com/whatis/feature/How-to-become-an-artificial-intelligence-engineer) +- [@course@AI For Everyone](https://www.coursera.org/learn/ai-for-everyone) +- [@video@AI Engineers- What Do They Do?](https://www.youtube.com/watch?v=y8qRq9PMCh8&t=1s) diff --git a/src/data/roadmaps/api-design/api-design.json b/src/data/roadmaps/api-design/api-design.json index 86b5d2cd9..6d8efc9a1 100644 --- a/src/data/roadmaps/api-design/api-design.json +++ b/src/data/roadmaps/api-design/api-design.json @@ -3550,7 +3550,7 @@ "selectable": true }, { - "id": "Wwd-0PjrtViMFWxRGaQey", + "id": "1DrqtOwxCuFtWQXQ6ZALp", "type": "subtopic", "position": { "x": -198.46804969796983, diff --git a/src/data/roadmaps/api-design/content/api-gateways@MJeUD4fOHaJu1oxk4uQ-x.md b/src/data/roadmaps/api-design/content/api-gateways@MJeUD4fOHaJu1oxk4uQ-x.md index 3696e79bd..6175cb24e 100644 --- a/src/data/roadmaps/api-design/content/api-gateways@MJeUD4fOHaJu1oxk4uQ-x.md +++ b/src/data/roadmaps/api-design/content/api-gateways@MJeUD4fOHaJu1oxk4uQ-x.md @@ -5,4 +5,4 @@ API Gateways act as the main point of entry in a microservices architecture, oft Learn more from the following resources: - [@article@What does an API Gateway do?](https://www.redhat.com/en/topics/api/what-does-an-api-gateway-do) -- [@article@What are API Gateways?](https://www.ibm.com/blog/api-gateway/) \ No newline at end of file +- [@article@What are API Gateways?](https://www.ibm.com/blog/api-gateway/) diff --git a/src/data/roadmaps/api-design/content/api-integration-patterns@R3aRhqCslwhegMfHtxg5z.md b/src/data/roadmaps/api-design/content/api-integration-patterns@R3aRhqCslwhegMfHtxg5z.md index ed6e3b801..cb501a67f 100644 --- a/src/data/roadmaps/api-design/content/api-integration-patterns@R3aRhqCslwhegMfHtxg5z.md +++ b/src/data/roadmaps/api-design/content/api-integration-patterns@R3aRhqCslwhegMfHtxg5z.md @@ -5,4 +5,4 @@ API Integration Patterns, in the context of API Design, refers to the common par Learn more from the following resources: - [@article@API Integration Patterns - Dzone](https://dzone.com/refcardz/api-integration-patterns) -- [@article@API Integration Patterns](https://uk.devoteam.com/expert-view/api-integration-patterns/) +- [@article@API Integration Patterns - Devoteam](https://uk.devoteam.com/expert-view/api-integration-patterns/) diff --git a/src/data/roadmaps/api-design/content/api-keys--management@tzUJwXu_scwQHnPPT0oY-.md b/src/data/roadmaps/api-design/content/api-keys--management@tzUJwXu_scwQHnPPT0oY-.md index 9a36ae15a..755696a54 100644 --- a/src/data/roadmaps/api-design/content/api-keys--management@tzUJwXu_scwQHnPPT0oY-.md +++ b/src/data/roadmaps/api-design/content/api-keys--management@tzUJwXu_scwQHnPPT0oY-.md @@ -4,5 +4,5 @@ API keys and management is an integral part of API design. An API key is a uniqu Learn more from the following resources: -- [@article@What is API key management?](https://www.akeyless.io/secrets-management-glossary/api-key-management/) -- [@article@API Key Management | Definition and Best Practices](https://infisical.com/blog/api-key-management) \ No newline at end of file +- [@article@What is API Key Management?](https://www.akeyless.io/secrets-management-glossary/api-key-management/) +- [@article@API Key Management - Definition and Best Practices](https://infisical.com/blog/api-key-management) diff --git a/src/data/roadmaps/api-design/content/api-lifecycle-management@At5exN7ZAx2IzY3cTCzHm.md b/src/data/roadmaps/api-design/content/api-lifecycle-management@At5exN7ZAx2IzY3cTCzHm.md index eb6470fe9..e6b33f41e 100644 --- a/src/data/roadmaps/api-design/content/api-lifecycle-management@At5exN7ZAx2IzY3cTCzHm.md +++ b/src/data/roadmaps/api-design/content/api-lifecycle-management@At5exN7ZAx2IzY3cTCzHm.md @@ -4,6 +4,6 @@ API Lifecycle Management is a crucial aspect in API design that oversees the pro Learn more from the following resources: -- [@article@What is the API lifecycle?](https://www.postman.com/api-platform/api-lifecycle/) -- [@article@What is API lifescycle management?](https://swagger.io/blog/api-strategy/what-is-api-lifecycle-management/) -- [@video@Day in the lifecycle of an API](https://www.youtube.com/watch?v=VxY_cz0VQXE) \ No newline at end of file +- [@article@What is the API Lifecycle?](https://www.postman.com/api-platform/api-lifecycle/) +- [@article@What is API Lifecycle Management?](https://swagger.io/blog/api-strategy/what-is-api-lifecycle-management/) +- [@video@Day in the Lifecycle of an API](https://www.youtube.com/watch?v=VxY_cz0VQXE) diff --git a/src/data/roadmaps/api-design/content/api-performance@d9ZXdU73jiCdeNHQv1_DH.md b/src/data/roadmaps/api-design/content/api-performance@d9ZXdU73jiCdeNHQv1_DH.md index 0113fc315..0aa76a698 100644 --- a/src/data/roadmaps/api-design/content/api-performance@d9ZXdU73jiCdeNHQv1_DH.md +++ b/src/data/roadmaps/api-design/content/api-performance@d9ZXdU73jiCdeNHQv1_DH.md @@ -4,5 +4,5 @@ When we talk about API design, one crucial aspect that demands our attention is Learn more from the following resources: -- [@video@Top 7 Ways to 10x Your API Performance](https://www.youtube.com/watch?v=zvWKqUiovAM) -- [@article@10 Tips for Improving API Performance](https://nordicapis.com/10-tips-for-improving-api-performance/) \ No newline at end of file +- [@article@10 Tips for Improving API Performance](https://nordicapis.com/10-tips-for-improving-api-performance/) +- [@video@Top 7 Ways to 10x Your API Performance](https://www.youtube.com/watch?v=zvWKqUiovAM) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/api-testing@Wpk4TvxcZOJgAoXjrOsZF.md b/src/data/roadmaps/api-design/content/api-testing@Wpk4TvxcZOJgAoXjrOsZF.md index 391c293d1..27bd01d88 100644 --- a/src/data/roadmaps/api-design/content/api-testing@Wpk4TvxcZOJgAoXjrOsZF.md +++ b/src/data/roadmaps/api-design/content/api-testing@Wpk4TvxcZOJgAoXjrOsZF.md @@ -4,5 +4,5 @@ API Testing refers to the process of checking the functionality, reliability, pe Learn more from the following resources: -- [@article@What is API testing?](https://www.postman.com/api-platform/api-testing/) -- [@article@API Testing : What It is, How to Test & Best Practices](https://testsigma.com/guides/api-testing/) \ No newline at end of file +- [@article@What is API Testing?](https://www.postman.com/api-platform/api-testing/) +- [@article@API Testing : What It is, How to Test & Best Practices](https://testsigma.com/guides/api-testing/) diff --git a/src/data/roadmaps/api-design/content/attribute-based-access-control-abac@dZTe_kxIUQsc9N3w920aR.md b/src/data/roadmaps/api-design/content/attribute-based-access-control-abac@dZTe_kxIUQsc9N3w920aR.md index b8aeba4c2..5093d4d24 100644 --- a/src/data/roadmaps/api-design/content/attribute-based-access-control-abac@dZTe_kxIUQsc9N3w920aR.md +++ b/src/data/roadmaps/api-design/content/attribute-based-access-control-abac@dZTe_kxIUQsc9N3w920aR.md @@ -5,4 +5,4 @@ Attribute Based Access Control (ABAC) is a flexible and powerful authorization m Learn more from the following resources: - [@article@What is Attribute Based Access Control?](https://www.okta.com/uk/blog/2020/09/attribute-based-access-control-abac/) -- [@article@Attribute Based Access Control](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) \ No newline at end of file +- [@article@Attribute Based Access Control](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) diff --git a/src/data/roadmaps/api-design/content/authentication-methods@cQnQ9v3mH27MGNwetz3JW.md b/src/data/roadmaps/api-design/content/authentication-methods@cQnQ9v3mH27MGNwetz3JW.md index 12379efe6..63df44938 100644 --- a/src/data/roadmaps/api-design/content/authentication-methods@cQnQ9v3mH27MGNwetz3JW.md +++ b/src/data/roadmaps/api-design/content/authentication-methods@cQnQ9v3mH27MGNwetz3JW.md @@ -1,3 +1,7 @@ # Authentication Methods in API Design -Application Programming Interfaces (APIs) are critical components in software development that allow different software systems to communicate and share functionality. To ensure secure communication, it's essential to authenticate the parties involved in the API transactions. The authentication process confirms the identity of the API user. There are numerous authentication methods available when designing an API, each with its own pros and cons. This includes Basic Authentication, API Key Authentication, OAuth, and JWT among others. Understanding these different methods and their best use cases is fundamental to designing secure and effective APIs. \ No newline at end of file +Application Programming Interfaces (APIs) are critical components in software development that allow different software systems to communicate and share functionality. To ensure secure communication, it's essential to authenticate the parties involved in the API transactions. The authentication process confirms the identity of the API user. There are numerous authentication methods available when designing an API, each with its own pros and cons. This includes Basic Authentication, API Key Authentication, OAuth, and JWT among others. Understanding these different methods and their best use cases is fundamental to designing secure and effective APIs. + +Learn more from the following resources: + +- [@article@API Authentication](https://www.postman.com/api-platform/api-authentication/) diff --git a/src/data/roadmaps/api-design/content/authorization-methods@nHbn8_sMY7J8o6ckbD-ER.md b/src/data/roadmaps/api-design/content/authorization-methods@nHbn8_sMY7J8o6ckbD-ER.md index 4ba6866d0..9ddf24856 100644 --- a/src/data/roadmaps/api-design/content/authorization-methods@nHbn8_sMY7J8o6ckbD-ER.md +++ b/src/data/roadmaps/api-design/content/authorization-methods@nHbn8_sMY7J8o6ckbD-ER.md @@ -1,3 +1,7 @@ # Authorization Methods in API Design -In API design, authorization methods play a crucial role in ensuring the security and integrity of data transactions. They are the mechanisms through which an API identifies and validates a user, system, or application before granting them access to specific resources. These methods include Basic Authentication, OAuth, Token-based authentication, JSON Web Tokens (JWT), and API Key based, among others. So, understanding these methods enhances the ability to design APIs that effectively protect resources while allowing necessary access. Each method has its own pros and cons, usage scenarios and security features that make them more suitable for certain situations rather than others. \ No newline at end of file +In API design, authorization methods play a crucial role in ensuring the security and integrity of data transactions. They are the mechanisms through which an API identifies and validates a user, system, or application before granting them access to specific resources. These methods include Basic Authentication, OAuth, Token-based authentication, JSON Web Tokens (JWT), and API Key based, among others. So, understanding these methods enhances the ability to design APIs that effectively protect resources while allowing necessary access. Each method has its own pros and cons, usage scenarios and security features that make them more suitable for certain situations rather than others. + +Visit the following resources to learn more: + +- [@article@API Authorization Methods](https://konghq.com/blog/engineering/common-api-authentication-methods) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/basic-auth@0FzHERK5AeYL5wv1FBJbH.md b/src/data/roadmaps/api-design/content/basic-auth@0FzHERK5AeYL5wv1FBJbH.md index 2e7d24010..a90fa23c1 100644 --- a/src/data/roadmaps/api-design/content/basic-auth@0FzHERK5AeYL5wv1FBJbH.md +++ b/src/data/roadmaps/api-design/content/basic-auth@0FzHERK5AeYL5wv1FBJbH.md @@ -4,6 +4,7 @@ Basic Auth, short for Basic Authentication, is a simple method often used in API Learn more from the following resources: +- [@roadmap@Basic Authentication](https://roadmap.sh/guides/basic-authentication) - [@article@Basic Auth Generation Header](https://www.debugbear.com/basic-auth-header-generator) - [@article@Basic Authentication - Swagger.io](https://swagger.io/docs/specification/authentication/basic-authentication/) - [@article@Basic Authentication - Twillio](https://www.twilio.com/docs/glossary/what-is-basic-authentication) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/batch-processing@X68HXAAV-nKo-V4Fu1o72.md b/src/data/roadmaps/api-design/content/batch-processing@X68HXAAV-nKo-V4Fu1o72.md index 9d72149f7..457079f3f 100644 --- a/src/data/roadmaps/api-design/content/batch-processing@X68HXAAV-nKo-V4Fu1o72.md +++ b/src/data/roadmaps/api-design/content/batch-processing@X68HXAAV-nKo-V4Fu1o72.md @@ -4,5 +4,5 @@ Batch Processing refers to the method of handling bulk data requests in API desi Learn more from the following resources: -- [@article@API design guidance: bulk vs batch import](https://tyk.io/blog/api-design-guidance-bulk-and-batch-import/) -- [@video@Stream vs Batch processing explained with examples](https://www.youtube.com/watch?v=1xgBQTF24mU) \ No newline at end of file +- [@article@API Design Guidance: Bulk vs Batch Import](https://tyk.io/blog/api-design-guidance-bulk-and-batch-import/) +- [@video@Stream vs Batch Processing Explained with Examples](https://www.youtube.com/watch?v=1xgBQTF24mU) diff --git a/src/data/roadmaps/api-design/content/best-practices@q1yaf-RbHIQsOqfzjn4k4.md b/src/data/roadmaps/api-design/content/best-practices@q1yaf-RbHIQsOqfzjn4k4.md index 8d11b1e7d..41763a764 100644 --- a/src/data/roadmaps/api-design/content/best-practices@q1yaf-RbHIQsOqfzjn4k4.md +++ b/src/data/roadmaps/api-design/content/best-practices@q1yaf-RbHIQsOqfzjn4k4.md @@ -4,5 +4,5 @@ API design has rapidly emerged as a vital component of software development. Whe Learn more from the following resources: -- [@article@Best practices for REST API design](https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/) -- [@article@Best practices in API design](https://swagger.io/resources/articles/best-practices-in-api-design/) \ No newline at end of file +- [@article@Best Practices for REST API Design](https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/) +- [@article@Best Practices in API Design](https://swagger.io/resources/articles/best-practices-in-api-design/) diff --git a/src/data/roadmaps/api-design/content/building-json--restful-apis@awdoiCHz7Yc3kYac_iy-a.md b/src/data/roadmaps/api-design/content/building-json--restful-apis@awdoiCHz7Yc3kYac_iy-a.md index d5d1a3fd4..10a6182f4 100644 --- a/src/data/roadmaps/api-design/content/building-json--restful-apis@awdoiCHz7Yc3kYac_iy-a.md +++ b/src/data/roadmaps/api-design/content/building-json--restful-apis@awdoiCHz7Yc3kYac_iy-a.md @@ -4,6 +4,6 @@ Building JSON/RESTful APIs involves designing and implementing APIs that adhere Learn more from the following resources: -- [@article@A specification for building APIs in JSON](https://jsonapi.org/) -- [@article@How to make a REST API](https://www.integrate.io/blog/how-to-make-a-rest-api/) -- [@video@What is a REST API?](https://www.youtube.com/watch?v=lsMQRaeKNDk&t=170s) \ No newline at end of file +- [@official@Specification for Building APIs in JSON](https://jsonapi.org/) +- [@article@How to Make a RESTful API](https://www.integrate.io/blog/how-to-make-a-rest-api/) +- [@video@What is a REST API?](https://www.youtube.com/watch?v=lsMQRaeKNDk&t=170s) diff --git a/src/data/roadmaps/api-design/content/caching-strategies@PrvRCR4HCdGar0vcUbG_a.md b/src/data/roadmaps/api-design/content/caching-strategies@PrvRCR4HCdGar0vcUbG_a.md index 3df901581..9c5b57cd2 100644 --- a/src/data/roadmaps/api-design/content/caching-strategies@PrvRCR4HCdGar0vcUbG_a.md +++ b/src/data/roadmaps/api-design/content/caching-strategies@PrvRCR4HCdGar0vcUbG_a.md @@ -5,5 +5,5 @@ Caching in API design serves as a technique that allows you to store copies of d Learn more from the following resources: - [@article@Caching Strategies for APIs](https://medium.com/@satyendra.jaiswal/caching-strategies-for-apis-improving-performance-and-reducing-load-1d4bd2df2b44) -- [@article@Using caching strategies to improve API performance](https://www.lonti.com/blog/using-caching-strategies-to-improve-api-performance) -- [@video@Cache Systems Every Developer Should Know](https://www.youtube.com/watch?v=dGAgxozNWFE) \ No newline at end of file +- [@article@Using Caching Strategies to Improve API Performance](https://www.lonti.com/blog/using-caching-strategies-to-improve-api-performance) +- [@video@Cache Systems Every Developer Should Know](https://www.youtube.com/watch?v=dGAgxozNWFE) diff --git a/src/data/roadmaps/api-design/content/ccpa@a-_iIE7UdoXzD00fD9MxN.md b/src/data/roadmaps/api-design/content/ccpa@a-_iIE7UdoXzD00fD9MxN.md index a64e23064..de22cdec4 100644 --- a/src/data/roadmaps/api-design/content/ccpa@a-_iIE7UdoXzD00fD9MxN.md +++ b/src/data/roadmaps/api-design/content/ccpa@a-_iIE7UdoXzD00fD9MxN.md @@ -1,4 +1,4 @@ -# CCPA under Standards and Compliance in API Design +# CCPA Under Standards and Compliance in API Design The California Consumer Privacy Act (CCPA) is a pivotal state statute meant to enhance privacy rights and consumer protection for individuals within California, United States. API Design greatly impacts compliance with CCPA, as improper management and exposure of user data can potentially violate this law. Crucially, designing APIs means considering data privacy, security, and user consent from the very foundation. Programmatically, CCPA compliance may involve structuring APIs to respond to user demands such as data access, data deletion, and opt-out requests. It imposes a significant responsibility on API developers to enforce user control over data and maintain rigorous standards of data protection. diff --git a/src/data/roadmaps/api-design/content/common-vulnerabilities@G70wvcOM1Isrx5ZBvS2xP.md b/src/data/roadmaps/api-design/content/common-vulnerabilities@G70wvcOM1Isrx5ZBvS2xP.md index 24a8b9209..588fcdf32 100644 --- a/src/data/roadmaps/api-design/content/common-vulnerabilities@G70wvcOM1Isrx5ZBvS2xP.md +++ b/src/data/roadmaps/api-design/content/common-vulnerabilities@G70wvcOM1Isrx5ZBvS2xP.md @@ -5,4 +5,4 @@ API design is a critical component of modern software development, enabling vari Learn more from the following resources: - [@article@API Vulnerability Overview](https://apimike.com/api-vulnerabilities) -- [@article@Top API Vulnerabilities and 6 Ways to Mitigate Them](https://brightsec.com/blog/top-api-vulnerabilities-and-6-ways-to-mitigate-them/) \ No newline at end of file +- [@article@Top API Vulnerabilities and 6 Ways to Mitigate Them](https://brightsec.com/blog/top-api-vulnerabilities-and-6-ways-to-mitigate-them/) diff --git a/src/data/roadmaps/api-design/content/content-negotiation@TX_hg7EobNJhmWKsMCaT1.md b/src/data/roadmaps/api-design/content/content-negotiation@TX_hg7EobNJhmWKsMCaT1.md index 5d0b8f1c3..5276c484c 100644 --- a/src/data/roadmaps/api-design/content/content-negotiation@TX_hg7EobNJhmWKsMCaT1.md +++ b/src/data/roadmaps/api-design/content/content-negotiation@TX_hg7EobNJhmWKsMCaT1.md @@ -5,4 +5,4 @@ In the context of API design, Content Negotiation refers to the process where th Learn more from the following resources: - [@article@Content Negotiation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation) -- [@article@Content Negotiation in practice](https://softwaremill.com/content-negotiation-in-practice/) \ No newline at end of file +- [@article@Content Negotiation in Practice](https://softwaremill.com/content-negotiation-in-practice/) diff --git a/src/data/roadmaps/api-design/content/contract-testing@NqeBglhzukVMMEF9p2CXc.md b/src/data/roadmaps/api-design/content/contract-testing@NqeBglhzukVMMEF9p2CXc.md index 9640c4c0c..d4e3826e0 100644 --- a/src/data/roadmaps/api-design/content/contract-testing@NqeBglhzukVMMEF9p2CXc.md +++ b/src/data/roadmaps/api-design/content/contract-testing@NqeBglhzukVMMEF9p2CXc.md @@ -4,6 +4,6 @@ Contract Testing is a critical aspect of maintaining a robust and reliable API i Learn more from the following resources: -- [@article@A complete guide to Contract Testing](https://testsigma.com/blog/api-contract-testing/) -- [@article@Get started with API Contract Testing](https://saucelabs.com/resources/blog/getting-started-with-api-contract-testing) -- [@article@Contract Testing](https://www.postman.com/templates/42247877-8529-429d-acba-4de20c3b5b3b/Contract-testing/) \ No newline at end of file +- [@article@Complete Guide to Contract Testing](https://testsigma.com/blog/api-contract-testing/) +- [@article@Geting Started with API Contract Testing](https://saucelabs.com/resources/blog/getting-started-with-api-contract-testing) +- [@article@Contract Testing](https://www.postman.com/templates/42247877-8529-429d-acba-4de20c3b5b3b/Contract-testing/) diff --git a/src/data/roadmaps/api-design/content/different-api-styles@o8i093VQv-T5Qf1yGqU0R.md b/src/data/roadmaps/api-design/content/different-api-styles@o8i093VQv-T5Qf1yGqU0R.md index cbcb86a72..35263c9a4 100644 --- a/src/data/roadmaps/api-design/content/different-api-styles@o8i093VQv-T5Qf1yGqU0R.md +++ b/src/data/roadmaps/api-design/content/different-api-styles@o8i093VQv-T5Qf1yGqU0R.md @@ -1,3 +1,9 @@ # Different API Styles -Application Programming Interface (API) design isn't a one-size-fits-all endeavor. APIs can be structured in various styles, each with its own unique characteristics, advantages, and use cases. Early identification of the appropriate API style is crucial in ensuring a functional, efficient and seamless end-user experience. Commonly used API styles include REST, SOAP, GraphQL, and gRPC. Understanding these diverse API styles would help in making better design choices, fostering efficient overall system architecture, and promoting an intuitive and easy-to-use application. \ No newline at end of file +Application Programming Interface (API) design isn't a one-size-fits-all endeavor. APIs can be structured in various styles, each with its own unique characteristics, advantages, and use cases. Early identification of the appropriate API style is crucial in ensuring a functional, efficient and seamless end-user experience. Commonly used API styles include REST, SOAP, GraphQL, and gRPC. Understanding these diverse API styles would help in making better design choices, fostering +efficient overall system architecture, and promoting an intuitive and easy-to-use application. + +Visit the following resources to learn more: + +- [@article@API Styles](https://www.redhat.com/architect/api-styles) +- [@video@Top API Styles](https://www.youtube.com/watch?v=4vLxWqE94l4) diff --git a/src/data/roadmaps/api-design/content/error-handling--retries@XD1vDtrRQFbLyKJaD1AlA.md b/src/data/roadmaps/api-design/content/error-handling--retries@XD1vDtrRQFbLyKJaD1AlA.md index 4e30567e8..f08819772 100644 --- a/src/data/roadmaps/api-design/content/error-handling--retries@XD1vDtrRQFbLyKJaD1AlA.md +++ b/src/data/roadmaps/api-design/content/error-handling--retries@XD1vDtrRQFbLyKJaD1AlA.md @@ -1,10 +1,8 @@ # Error Handling / Retries -When creating effective API designs, addressing Error Handling and Retries forms an essential facet. This is primarily due to the fact that APIs aren't always error-free and instances of network hiccups or input inaccuracies from users can occur. Without robust error handling, such occurrences can easily lead to catastrophic application failure or unsatisfactory user experiences. - -In this context, error handling can refer to validating inputs, managing exceptions, and returning appropriate error message or status codes to the user. Meanwhile, the concept of retries comes into play to ensure maximum request success amidst transient failures. Through correctly implemented retries, an API can repeatedly attempt to execute a request until it is successful, thus ensuring seamless operation. The criteria and mechanisms of retries, including the count, delay, and conditions for retries, are crucial aspects to solidify during the API design. +When creating effective API designs, addressing Error Handling and Retries forms an essential facet. This is primarily due to the fact that APIs aren't always error-free and instances of network hiccups or input inaccuracies from users can occur. Without robust error handling, such occurrences can easily lead to catastrophic application failure or unsatisfactory user experiences. Error handling can refer to validating inputs, managing exceptions, and returning appropriate error message or status codes to the user. Meanwhile, the concept of retries comes into play to ensure maximum request success amidst transient failures. Through correctly implemented retries, an API can repeatedly attempt to execute a request until it is successful, thus ensuring seamless operation. Learn more from the following resources: -- [@video@How to make resilient web applications with retries](https://www.youtube.com/watch?v=Gly94hp3Eec) -- [@article@How To Improve Your Backend By Adding Retries to Your API Calls](https://hackernoon.com/how-to-improve-your-backend-by-adding-retries-to-your-api-calls-83r3udx) \ No newline at end of file +- [@article@How To Improve Your Backend By Adding Retries to Your API Calls](https://hackernoon.com/how-to-improve-your-backend-by-adding-retries-to-your-api-calls-83r3udx) +- [@video@How to Make Resilient Web Applications with Retries](https://www.youtube.com/watch?v=Gly94hp3Eec) diff --git a/src/data/roadmaps/api-design/content/error-handling@8tELdagrOaGCf3nMVs8t3.md b/src/data/roadmaps/api-design/content/error-handling@8tELdagrOaGCf3nMVs8t3.md index ac2056a87..90b90217f 100644 --- a/src/data/roadmaps/api-design/content/error-handling@8tELdagrOaGCf3nMVs8t3.md +++ b/src/data/roadmaps/api-design/content/error-handling@8tELdagrOaGCf3nMVs8t3.md @@ -4,6 +4,6 @@ Error Handling is a crucial aspect of API design that ensures the stability, usa Learn more from the following resources: -- [@article@Best practices for API error handling](https://blog.postman.com/best-practices-for-api-error-handling/) +- [@article@Best Practices for API Error Handling](https://blog.postman.com/best-practices-for-api-error-handling/) - [@article@Best Practices for REST API Error Handling](https://www.baeldung.com/rest-api-error-handling-best-practices) -- [@video@Handling HTTP API Errors with Problem Details](https://www.youtube.com/watch?v=uvTT_0hqhyY) \ No newline at end of file +- [@video@Handling HTTP API Errors with Problem Details](https://www.youtube.com/watch?v=uvTT_0hqhyY) diff --git a/src/data/roadmaps/api-design/content/event-driven-architecture@oMfOBkVsgiLvFLicOUdx6.md b/src/data/roadmaps/api-design/content/event-driven-architecture@oMfOBkVsgiLvFLicOUdx6.md index 7ac338c60..2787dcc00 100644 --- a/src/data/roadmaps/api-design/content/event-driven-architecture@oMfOBkVsgiLvFLicOUdx6.md +++ b/src/data/roadmaps/api-design/content/event-driven-architecture@oMfOBkVsgiLvFLicOUdx6.md @@ -4,6 +4,6 @@ Event-driven architecture (EDA) is a software design concept that revolves aroun Learn more form the following resources: -- [@article@Event-driven architecture style](https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/event-driven) -- [@article@Event-driven architecture](https://aws.amazon.com/event-driven-architecture/) -- [@video@Event-Driven Architecture: Explained in 7 Minutes!](https://www.youtube.com/watch?v=gOuAqRaDdHA) \ No newline at end of file +- [@article@Event Driven Architecture Style](https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/event-driven) +- [@article@Event-driven Architecture](https://aws.amazon.com/event-driven-architecture/) +- [@video@Event-Driven Architecture: Explained in 7 Minutes!](https://www.youtube.com/watch?v=gOuAqRaDdHA) diff --git a/src/data/roadmaps/api-design/content/functional-testing@6lm3wy9WTAERTqXCn6pFt.md b/src/data/roadmaps/api-design/content/functional-testing@6lm3wy9WTAERTqXCn6pFt.md index a12d3c0ca..a11ca3034 100644 --- a/src/data/roadmaps/api-design/content/functional-testing@6lm3wy9WTAERTqXCn6pFt.md +++ b/src/data/roadmaps/api-design/content/functional-testing@6lm3wy9WTAERTqXCn6pFt.md @@ -1,8 +1,8 @@ # Functional Testing in API Design -Functional testing in the context of API design involves validating the endpoints and key-value pairs of an API. It ensures the server response works as expected and assesses the functionality of the API -- whether it is performing all the intended functions correctly. Various approaches like testing request-response pairs, error codes, and data accuracy are used. Functional testing can provide invaluable insights into how well an API meets the specified requirements and whether it is ready for integration into applications. +Functional testing in the context of API design involves validating the endpoints and key-value pairs of an API. It ensures the server response works as expected and assesses the functionality of the API whether it is performing all the intended functions correctly. Various approaches like testing request-response pairs, error codes, and data accuracy are used. Functional testing can provide invaluable insights into how well an API meets the specified requirements and whether it is ready for integration into applications. Learn more from the following resources: - [@article@API Functional Testing – Why Is It Important And How to Test](https://testsigma.com/blog/api-functional-testing/) -- [@video@What Is API Functional Testing?](https://www.youtube.com/watch?v=CvJHDKMWofk) \ No newline at end of file +- [@video@What Is API Functional Testing?](https://www.youtube.com/watch?v=CvJHDKMWofk) diff --git a/src/data/roadmaps/api-design/content/graphql-apis@MKVcPM2EzAr2_Ieyp9Fu3.md b/src/data/roadmaps/api-design/content/graphql-apis@MKVcPM2EzAr2_Ieyp9Fu3.md index 9562df496..8cf0360b6 100644 --- a/src/data/roadmaps/api-design/content/graphql-apis@MKVcPM2EzAr2_Ieyp9Fu3.md +++ b/src/data/roadmaps/api-design/content/graphql-apis@MKVcPM2EzAr2_Ieyp9Fu3.md @@ -4,6 +4,7 @@ GraphQL is an open-source data query and manipulation language for APIs, and a r Learn more from the following resources: +- [@roadmap@Visit Dedicated GraphQL Roadmap](https://roadmap.sh/graphql) - [@official@GraphQL Website](https://graphql.org/) - [@opensource@Public GraphQL APIs](https://github.com/graphql-kit/graphql-apis) -- [@video@GraphQL explained in 100 seconds](https://www.youtube.com/watch?v=eIQh02xuVw4) \ No newline at end of file +- [@video@GraphQL Explained in 100 Seconds](https://www.youtube.com/watch?v=eIQh02xuVw4) diff --git a/src/data/roadmaps/api-design/content/grpc-apis@Wwd-0PjrtViMFWxRGaQey.md b/src/data/roadmaps/api-design/content/grpc-apis@Wwd-0PjrtViMFWxRGaQey.md index 7c419d92e..47700299e 100644 --- a/src/data/roadmaps/api-design/content/grpc-apis@Wwd-0PjrtViMFWxRGaQey.md +++ b/src/data/roadmaps/api-design/content/grpc-apis@Wwd-0PjrtViMFWxRGaQey.md @@ -1,10 +1,6 @@ # gRPC -gRPC is a platform agnostic serialization protocol that is used to communicate between services. Designed by Google in 2015, it is a modern alternative to REST APIs. It is a binary protocol that uses HTTP/2 as a transport layer. It is a high performance, open source, general-purpose RPC framework that puts mobile and HTTP/2 first. - -It's main use case is for communication between two different languages within the same application. You can use Python to communicate with Go, or Java to communicate with C#. - -gRPC uses the protocol buffer language to define the structure of the data that is +gRPC is a platform agnostic serialization protocol that is used to communicate between services. Designed by Google in 2015, it is a modern alternative to REST APIs. It is a binary protocol that uses HTTP/2 as a transport layer. It is a high performance, open source, general-purpose RPC framework that puts mobile and HTTP/2 first. It's main use case is for communication between two different languages within the same application. You can use Python to communicate with Go, or Java to communicate with C#. Visit the following resources to learn more: diff --git a/src/data/roadmaps/api-design/content/http-headers@rE-0yibRH6B2UBKp351cf.md b/src/data/roadmaps/api-design/content/http-headers@rE-0yibRH6B2UBKp351cf.md index 8debd7200..91e9030fe 100644 --- a/src/data/roadmaps/api-design/content/http-headers@rE-0yibRH6B2UBKp351cf.md +++ b/src/data/roadmaps/api-design/content/http-headers@rE-0yibRH6B2UBKp351cf.md @@ -5,5 +5,5 @@ HTTP Headers play a crucial role in API Design as they provide essential informa Learn more from the following resources: - [@article@HTTP Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) -- [@article@What are HTTP headers?](https://blog.postman.com/what-are-http-headers/) -- [@article@What are HTTP Headers & Understand different types of HTTP headers](https://requestly.com/blog/what-are-http-headers-understand-different-types-of-http-headers/) \ No newline at end of file +- [@article@What are HTTP Headers?](https://blog.postman.com/what-are-http-headers/) +- [@article@What are HTTP Headers & Types of HTTP headers](https://requestly.com/blog/what-are-http-headers-understand-different-types-of-http-headers/) diff --git a/src/data/roadmaps/api-design/content/http-methods@rADHM-6NAxEjzmgiHefDX.md b/src/data/roadmaps/api-design/content/http-methods@rADHM-6NAxEjzmgiHefDX.md index cf24c29ba..d7320ed5b 100644 --- a/src/data/roadmaps/api-design/content/http-methods@rADHM-6NAxEjzmgiHefDX.md +++ b/src/data/roadmaps/api-design/content/http-methods@rADHM-6NAxEjzmgiHefDX.md @@ -4,6 +4,6 @@ HTTP (Hypertext Transfer Protocol) Methods play a significant role in API design Learn more from the following resources: -- [@article@HTTP request methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) +- [@article@HTTP Methods - MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) - [@article@HTTP Request Methods - W3Schools](https://www.w3schools.com/tags/ref_httpmethods.asp) -- [@article@What are HTTP Methods?](https://blog.postman.com/what-are-http-methods/) \ No newline at end of file +- [@article@What are HTTP Methods? - Postman](https://blog.postman.com/what-are-http-methods/) diff --git a/src/data/roadmaps/api-design/content/http-versions@ACALE93mL4gnX5ThRIdRp.md b/src/data/roadmaps/api-design/content/http-versions@ACALE93mL4gnX5ThRIdRp.md index 801de976f..1108f4daa 100644 --- a/src/data/roadmaps/api-design/content/http-versions@ACALE93mL4gnX5ThRIdRp.md +++ b/src/data/roadmaps/api-design/content/http-versions@ACALE93mL4gnX5ThRIdRp.md @@ -5,4 +5,4 @@ HTTP or Hypertext Transfer Protocol is pivotal in the world of API design. HTTP Visit the following resources to learn more: - [@article@Evolution of HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP) -- [@article@HTTP: 1.0 vs. 1.1 vs 2.0 vs. 3.0](https://www.baeldung.com/cs/http-versions) +- [@article@HTTP: 1.0 vs 1.1 vs 2.0 vs 3.0](https://www.baeldung.com/cs/http-versions) diff --git a/src/data/roadmaps/api-design/content/jwt@tWg68AHLIr1gIZA1za3jp.md b/src/data/roadmaps/api-design/content/jwt@tWg68AHLIr1gIZA1za3jp.md index 4ab74a169..bd6e75b25 100644 --- a/src/data/roadmaps/api-design/content/jwt@tWg68AHLIr1gIZA1za3jp.md +++ b/src/data/roadmaps/api-design/content/jwt@tWg68AHLIr1gIZA1za3jp.md @@ -4,6 +4,7 @@ JSON Web Tokens, or JWT, are a popular and secure method of transferring informa Learn more from the following resources: +- [@roadmap@JWT Authentication](https://roadmap.sh/guides/jwt-authentication) - [@official@Introduction to JSON Web Tokens](https://jwt.io/introduction) - [@article@JSON Web Tokens](https://auth0.com/docs/secure/tokens/json-web-tokens) - [@video@Why is JWT popular?](https://www.youtube.com/watch?v=P2CPd9ynFLg) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/load-balancing@p5wsniYnOS7cbHd92RxGk.md b/src/data/roadmaps/api-design/content/load-balancing@p5wsniYnOS7cbHd92RxGk.md index 9166c446a..ea7cdaf1a 100644 --- a/src/data/roadmaps/api-design/content/load-balancing@p5wsniYnOS7cbHd92RxGk.md +++ b/src/data/roadmaps/api-design/content/load-balancing@p5wsniYnOS7cbHd92RxGk.md @@ -4,6 +4,7 @@ Load Balancing plays a crucial role in the domain of API Design. It primarily re Learn more from the following resources: -- [@article@What is load balancing?](https://www.cloudflare.com/en-gb/learning/performance/what-is-load-balancing/) +- [@article@What is Load Balancing?](https://www.cloudflare.com/en-gb/learning/performance/what-is-load-balancing/) +- [@article@Load Balancers in API](https://learn.microsoft.com/en-us/rest/api/load-balancer/) - [@article@API Gateway vs Load Balancer: Which is Right for Your Application?](https://konghq.com/blog/engineering/api-gateway-vs-load-balancer) -- [@video@What is a load balancer?](https://www.youtube.com/watch?v=sCR3SAVdyCc) \ No newline at end of file +- [@video@What is a Load Balancer?](https://www.youtube.com/watch?v=sCR3SAVdyCc) diff --git a/src/data/roadmaps/api-design/content/load-testing@7JNEx_cbqnAx3esvwZMOd.md b/src/data/roadmaps/api-design/content/load-testing@7JNEx_cbqnAx3esvwZMOd.md index 509844a9f..eaa300319 100644 --- a/src/data/roadmaps/api-design/content/load-testing@7JNEx_cbqnAx3esvwZMOd.md +++ b/src/data/roadmaps/api-design/content/load-testing@7JNEx_cbqnAx3esvwZMOd.md @@ -4,6 +4,6 @@ Load testing is a crucial aspect of API design that ensures reliability, efficie Learn more from the following resources: -- [@article@API load testing - a beginners guide](https://grafana.com/blog/2024/01/30/api-load-testing/) -- [@article@Test your API’s performance by simulating real-world traffic](https://blog.postman.com/postman-api-performance-testing/) -- [@video@Load testing your API's](https://www.youtube.com/watch?v=a5hWE4hMOoY) \ No newline at end of file +- [@article@API Load Testing - Beginners Guide](https://grafana.com/blog/2024/01/30/api-load-testing/) +- [@article@Test Your API’s Performance by Simulating Real-world Traffic](https://blog.postman.com/postman-api-performance-testing/) +- [@video@Load Testing API's](https://www.youtube.com/watch?v=a5hWE4hMOoY) diff --git a/src/data/roadmaps/api-design/content/messaging-queues@IkPZel5zxXWIx90Qx7fZI.md b/src/data/roadmaps/api-design/content/messaging-queues@IkPZel5zxXWIx90Qx7fZI.md index 0c75b90fd..57340068c 100644 --- a/src/data/roadmaps/api-design/content/messaging-queues@IkPZel5zxXWIx90Qx7fZI.md +++ b/src/data/roadmaps/api-design/content/messaging-queues@IkPZel5zxXWIx90Qx7fZI.md @@ -4,5 +4,5 @@ Messaging Queues play a fundamental role in API design, particularly in creating Learn more from the following resources: -- [@article@What is a message queue?](https://aws.amazon.com/message-queue/) -- [@video@REST API message queues explained](https://www.youtube.com/watch?v=2idPgA6IN_Q) \ No newline at end of file +- [@article@What is a Message Queue?](https://aws.amazon.com/message-queue/) +- [@video@REST API Message Queues Explained](https://www.youtube.com/watch?v=2idPgA6IN_Q) diff --git a/src/data/roadmaps/api-design/content/microservices-architecture@PPeBbooE121zrgNwpVTiA.md b/src/data/roadmaps/api-design/content/microservices-architecture@PPeBbooE121zrgNwpVTiA.md index 72d06caeb..acd199d2e 100644 --- a/src/data/roadmaps/api-design/content/microservices-architecture@PPeBbooE121zrgNwpVTiA.md +++ b/src/data/roadmaps/api-design/content/microservices-architecture@PPeBbooE121zrgNwpVTiA.md @@ -4,6 +4,6 @@ When it comes to API Design, Microservices Architecture plays a crucial role. It Learn more from the following resources: -- [@video@Microservices explained in 5 minutes](https://www.youtube.com/watch?v=lL_j7ilk7rc) +- [@video@Microservices Explained in 5 Minutes](https://www.youtube.com/watch?v=lL_j7ilk7rc) - [@article@What is Microservices Architecture?](https://cloud.google.com/learn/what-is-microservices-architecture) -- [@article@Microservice Architecture Style](https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices) \ No newline at end of file +- [@article@Microservice Architecture Style](https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices) diff --git a/src/data/roadmaps/api-design/content/oauth-20@TLuNtQ6HKYQXmglyVk8-t.md b/src/data/roadmaps/api-design/content/oauth-20@TLuNtQ6HKYQXmglyVk8-t.md index 42592cce1..fcbe61de6 100644 --- a/src/data/roadmaps/api-design/content/oauth-20@TLuNtQ6HKYQXmglyVk8-t.md +++ b/src/data/roadmaps/api-design/content/oauth-20@TLuNtQ6HKYQXmglyVk8-t.md @@ -4,6 +4,7 @@ OAuth 2.0 is an authorization framework that allows applications to obtain limit Learn more from the following resources: +- [@roadmap@OAuth](https://roadmap.sh/guides/oauth) - [@official@OAuth Website](https://oauth.net/2/) -- [@article@What is OAuth 2.0?](https://auth0.com/intro-to-iam/what-is-oauth-2) -- [@video@OAuth 2 Explained In Simple Terms](https://www.youtube.com/watch?v=ZV5yTm4pT8g) \ No newline at end of file +- [@official@What is OAuth 2.0?](https://auth0.com/intro-to-iam/what-is-oauth-2) +- [@video@OAuth 2 Explained In Simple Terms](https://www.youtube.com/watch?v=ZV5yTm4pT8g) diff --git a/src/data/roadmaps/api-design/content/performance-metrics@nQpczZUcn-TvrfT80dv0Q.md b/src/data/roadmaps/api-design/content/performance-metrics@nQpczZUcn-TvrfT80dv0Q.md index 067951aeb..9f4516a2d 100644 --- a/src/data/roadmaps/api-design/content/performance-metrics@nQpczZUcn-TvrfT80dv0Q.md +++ b/src/data/roadmaps/api-design/content/performance-metrics@nQpczZUcn-TvrfT80dv0Q.md @@ -5,4 +5,4 @@ API Design performance metrics play a critical role in ensuring APIs are efficie Learn more from the following resources: - [@article@API Performance Monitoring](https://www.catchpoint.com/api-monitoring-tools/api-performance-monitoring) -- [@article@How does API monitoring improve API performance?](https://tyk.io/blog/api-product-metrics-what-you-need-to-know/) \ No newline at end of file +- [@article@How does API Monitoring Improves API Performance?](https://tyk.io/blog/api-product-metrics-what-you-need-to-know/) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/postman@KQAus72RGqx5f-3-YeJby.md b/src/data/roadmaps/api-design/content/postman@KQAus72RGqx5f-3-YeJby.md index 0bd3dfebe..911d45b31 100644 --- a/src/data/roadmaps/api-design/content/postman@KQAus72RGqx5f-3-YeJby.md +++ b/src/data/roadmaps/api-design/content/postman@KQAus72RGqx5f-3-YeJby.md @@ -5,4 +5,5 @@ Postman is a popular tool in web development for designing, testing, and managin Learn more from the following resources: - [@official@Postman Website](https://www.postman.com/) -- [@video@Postman Api Testing Tutorial for beginners](https://www.youtube.com/watch?v=MFxk5BZulVU) \ No newline at end of file +- [@official@Postman Docs](https://www.postman.com/api-documentation-tool/) +- [@video@Postman Tutorial for Beginners](https://www.youtube.com/watch?v=MFxk5BZulVU) diff --git a/src/data/roadmaps/api-design/content/profiling-and-monitoring@-qdwBg7HvwlbLy3IKCRij.md b/src/data/roadmaps/api-design/content/profiling-and-monitoring@-qdwBg7HvwlbLy3IKCRij.md index 659eed04c..610fe2c77 100644 --- a/src/data/roadmaps/api-design/content/profiling-and-monitoring@-qdwBg7HvwlbLy3IKCRij.md +++ b/src/data/roadmaps/api-design/content/profiling-and-monitoring@-qdwBg7HvwlbLy3IKCRij.md @@ -4,5 +4,5 @@ Profiling and monitoring are critical aspects of API design and implementation. Learn more from the following resources: -- [@article@Monitor health and performance of your APIs](https://learning.postman.com/docs/monitoring-your-api/intro-monitors/) -- [@article@API profiling at Pintrest](https://medium.com/pinterest-engineering/api-profiling-at-pinterest-6fa9333b4961) \ No newline at end of file +- [@article@Monitor Health and Performance of your APIs](https://learning.postman.com/docs/monitoring-your-api/intro-monitors/) +- [@article@API profiling at Pintrest](https://medium.com/pinterest-engineering/api-profiling-at-pinterest-6fa9333b4961) diff --git a/src/data/roadmaps/api-design/content/rabbit-mq@H22jAI2W5QLL-b1rq-c56.md b/src/data/roadmaps/api-design/content/rabbit-mq@H22jAI2W5QLL-b1rq-c56.md index d143b1bb7..3e5b28a54 100644 --- a/src/data/roadmaps/api-design/content/rabbit-mq@H22jAI2W5QLL-b1rq-c56.md +++ b/src/data/roadmaps/api-design/content/rabbit-mq@H22jAI2W5QLL-b1rq-c56.md @@ -1,8 +1,6 @@ # RabbitMQ in API Design -RabbitMQ is an open-source message-broker software/system that plays a crucial role in API design, specifically in facilitating effective and efficient inter-process communication. It implements the Advanced Message Queuing Protocol (AMQP) to enable secure and reliable data transmission in various formats such as text, binary, or serialized objects. - -In API design, RabbitMQ comes in handy in decoupling application processes for scalability and robustness, whilst ensuring that data delivery occurs safely and seamlessly. It introduces queuing as a way of handling multiple users or service calls at once hence enhancing responsiveness and performance of APIs. Its queue system elegantly digests API request loads, allowing services to evenly process data while preventing overloading. +RabbitMQ is an open-source message-broker software/system that plays a crucial role in API design, specifically in facilitating effective and efficient inter-process communication. It implements the Advanced Message Queuing Protocol (AMQP) to enable secure and reliable data transmission in various formats such as text, binary, or serialized objects. RabbitMQ comes in handy in decoupling application processes for scalability and robustness, whilst ensuring that data delivery occurs safely and seamlessly. It introduces queuing as a way of handling multiple users or service calls at once hence enhancing responsiveness and performance of APIs. Its queue system elegantly digests API request loads, allowing services to evenly process data while preventing overloading. Learn more from the following resources: diff --git a/src/data/roadmaps/api-design/content/readmecom@LxWHkhlikUaMT2G8YmVDQ.md b/src/data/roadmaps/api-design/content/readmecom@LxWHkhlikUaMT2G8YmVDQ.md index 9b2b62e19..6a05ee23d 100644 --- a/src/data/roadmaps/api-design/content/readmecom@LxWHkhlikUaMT2G8YmVDQ.md +++ b/src/data/roadmaps/api-design/content/readmecom@LxWHkhlikUaMT2G8YmVDQ.md @@ -4,5 +4,5 @@ Readme.com is an invaluable tool in the realm of API Design, renowned for provid Learn more from the following resources: -- [@official@readme.com](https://readme.com) -- [@opensource@readmeio](https://github.com/readmeio) \ No newline at end of file +- [@official@ReadMe Website](https://readme.com) +- [@opensource@ReadMe](https://github.com/orgs/readmeio/repositories?type=source) diff --git a/src/data/roadmaps/api-design/content/role-based-access-control-rbac@wFsbmMi5Ey9UyDADdbdPW.md b/src/data/roadmaps/api-design/content/role-based-access-control-rbac@wFsbmMi5Ey9UyDADdbdPW.md index edce876cb..8b7337aa9 100644 --- a/src/data/roadmaps/api-design/content/role-based-access-control-rbac@wFsbmMi5Ey9UyDADdbdPW.md +++ b/src/data/roadmaps/api-design/content/role-based-access-control-rbac@wFsbmMi5Ey9UyDADdbdPW.md @@ -5,5 +5,5 @@ Role-Based Access Control (RBAC) is a method of managing authorization in API de Learn more from the following resources: - [@article@Role-Based Access Control](https://auth0.com/docs/manage-users/access-control/rbac) -- [@article@What is role-based access control (RBAC)?](https://www.redhat.com/en/topics/security/what-is-role-based-access-control) -- [@video@Role-based access control (RBAC) vs. Attribute-based access control (ABAC)](https://www.youtube.com/watch?v=rvZ35YW4t5k) \ No newline at end of file +- [@article@What is Role-based Access Control (RBAC)?](https://www.redhat.com/en/topics/security/what-is-role-based-access-control) +- [@video@Role-based Access Control (RBAC) vs. Attribute-based Access Control (ABAC)](https://www.youtube.com/watch?v=rvZ35YW4t5k) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/session-based-auth@eQWoy4CpYP3TJL2bbhPB_.md b/src/data/roadmaps/api-design/content/session-based-auth@eQWoy4CpYP3TJL2bbhPB_.md index 6d4f99289..056d9f5e5 100644 --- a/src/data/roadmaps/api-design/content/session-based-auth@eQWoy4CpYP3TJL2bbhPB_.md +++ b/src/data/roadmaps/api-design/content/session-based-auth@eQWoy4CpYP3TJL2bbhPB_.md @@ -8,6 +8,6 @@ Understanding Session Based Authentication is crucial for secure API design, esp Learn more from the following resources: -- [@official@Session Based Authentication - Roadmap.sh](https://roadmap.sh/guides/session-based-authentication) +- [@roadmap@Session Based Authentication](https://roadmap.sh/guides/session-based-authentication) - [@video@Session Based Authentication - Roadmap.sh](https://www.youtube.com/watch?v=gKkBEOq_shs) - [@article@Session vs Token Authentication](https://www.authgear.com/post/session-vs-token-authentication) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/simple-json-apis@TVR-SkErlOHbDKLBGfxep.md b/src/data/roadmaps/api-design/content/simple-json-apis@TVR-SkErlOHbDKLBGfxep.md index 47646aff9..d3285fddc 100644 --- a/src/data/roadmaps/api-design/content/simple-json-apis@TVR-SkErlOHbDKLBGfxep.md +++ b/src/data/roadmaps/api-design/content/simple-json-apis@TVR-SkErlOHbDKLBGfxep.md @@ -4,5 +4,5 @@ Simple JSON (JavaScript Object Notation) APIs are a popular form of API or "Appl Learn more from the following resources: -- [@video@JSON API: Explained in 4 minutes (+ EXAMPLES)](https://www.youtube.com/watch?v=N-4prIh7t38) -- [@opensource@A specification for building JSON APIs](https://github.com/json-api/json-api) \ No newline at end of file +- [@video@JSON API: Explained in 4 Minutes](https://www.youtube.com/watch?v=N-4prIh7t38) +- [@opensource@Specification for Building JSON APIs](https://github.com/json-api/json-api) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/standards-and-compliance@yvdfoly5WHHTq2Puss355.md b/src/data/roadmaps/api-design/content/standards-and-compliance@yvdfoly5WHHTq2Puss355.md index e70fd4219..af8bf9d61 100644 --- a/src/data/roadmaps/api-design/content/standards-and-compliance@yvdfoly5WHHTq2Puss355.md +++ b/src/data/roadmaps/api-design/content/standards-and-compliance@yvdfoly5WHHTq2Puss355.md @@ -1,13 +1,9 @@ # Standards and Compliance in API Design -When designing APIs, it's crucial to consider the concept of standards and compliance. Standards represent the set of rules and best practices that guide developers to create well-structured and easily maintainable APIs. They can range from the proper structure of the endpoints, the standardization of error responses, to naming conventions, and the usage of HTTP verbs. - -Compliance on the other hand, emphasizes on meeting protocol requirements or standards such as REST or SOAP. Furthermore, operating within regulated industries can also necessitate certain compliance measures like GDPR, HIPAA and others. Compliance in API Design ensures interoperability and safety of data transmission between systems. - -In essence, Standards and Compliance in API Design contributes towards building more secure, robust, and efficient APIs that are user-friendly and universally understandable. +When designing APIs, it's crucial to consider the concept of standards and compliance. Standards represent the set of rules and best practices that guide developers to create well-structured and easily maintainable APIs. They can range from the proper structure of the endpoints, the standardization of error responses, to naming conventions, and the usage of HTTP verbs. Compliance on the other hand, emphasizes on meeting protocol requirements or standards such as REST or SOAP. Furthermore, operating within regulated industries can also necessitate certain compliance measures like GDPR, HIPAA and others. Compliance in API Design ensures interoperability and safety of data transmission between systems. Learn more from the following resources: -- [@article@What is API compliance?](https://tyk.io/learning-center/api-compliance/) -- [@article@What is API compliance and why is it important?](https://www.traceable.ai/blog-post/achieve-api-compliance) -- [@article@REST API standards](https://www.integrate.io/blog/rest-api-standards/) \ No newline at end of file +- [@article@What is API Compliance?](https://tyk.io/learning-center/api-compliance/) +- [@article@What is API Compliance and Why is it important?](https://www.traceable.ai/blog-post/achieve-api-compliance) +- [@article@REST API Standards](https://www.integrate.io/blog/rest-api-standards/) diff --git a/src/data/roadmaps/api-design/content/swagger--open-api@5RY7AlfRQydjxWK65Z4cv.md b/src/data/roadmaps/api-design/content/swagger--open-api@5RY7AlfRQydjxWK65Z4cv.md index 601e3d017..ad1e25121 100644 --- a/src/data/roadmaps/api-design/content/swagger--open-api@5RY7AlfRQydjxWK65Z4cv.md +++ b/src/data/roadmaps/api-design/content/swagger--open-api@5RY7AlfRQydjxWK65Z4cv.md @@ -5,5 +5,5 @@ Swagger, also known as OpenAPI (not to be confused with OpenAI), is a set of too Learn more from the following resources: - [@official@Swagger Website](https://swagger.io/) -- [@article@What is Swagger?](https://blog.hubspot.com/website/what-is-swagger) -- [@official@OpenAPI Inititive](https://www.openapis.org/) \ No newline at end of file +- [@official@OpenAPI Inititive](https://www.openapis.org/) +- [@article@What is Swagger?](https://blog.hubspot.com/website/what-is-swagger) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/token-based-auth@QTH7sy9uQZWl6ieBz7erY.md b/src/data/roadmaps/api-design/content/token-based-auth@QTH7sy9uQZWl6ieBz7erY.md index 438546435..63b891dfc 100644 --- a/src/data/roadmaps/api-design/content/token-based-auth@QTH7sy9uQZWl6ieBz7erY.md +++ b/src/data/roadmaps/api-design/content/token-based-auth@QTH7sy9uQZWl6ieBz7erY.md @@ -4,6 +4,6 @@ Token-based authentication is a crucial aspect of API design. It involves provid Learn more from the following resources: +- [@roadmap@Token Based Authentication](https://roadmap.sh/guides/token-authentication) - [@article@What Is Token-Based Authentication?](https://www.okta.com/uk/identity-101/what-is-token-based-authentication/) - [@video@Session vs Token Authentication in 100 Seconds](https://www.youtube.com/watch?v=UBUNrFtufWo) -- [@video@Token based auth](https://www.youtube.com/watch?v=woNZJMSNbuo) \ No newline at end of file diff --git a/src/data/roadmaps/api-design/content/uri-design@b3qRTLwCC_9uDoPGrd9Bu.md b/src/data/roadmaps/api-design/content/uri-design@b3qRTLwCC_9uDoPGrd9Bu.md index 2add6cab8..d57a95a25 100644 --- a/src/data/roadmaps/api-design/content/uri-design@b3qRTLwCC_9uDoPGrd9Bu.md +++ b/src/data/roadmaps/api-design/content/uri-design@b3qRTLwCC_9uDoPGrd9Bu.md @@ -4,5 +4,5 @@ URI (Uniform Resource Identifier) is a string of characters used to identify a n Learn more from the following resources: -- [@article@Guidelines for URI design](https://css-tricks.com/guidelines-for-uri-design/) -- [@article@Designing URIs](https://www.oreilly.com/library/view/restful-web-services/9780596809140/ch04.html) \ No newline at end of file +- [@article@Guidelines for URI Design](https://css-tricks.com/guidelines-for-uri-design/) +- [@article@Designing URIs](https://www.oreilly.com/library/view/restful-web-services/9780596809140/ch04.html) diff --git a/src/data/roadmaps/api-design/content/url-query--path-parameters@P-rGIk50Bg7nFmWieAW07.md b/src/data/roadmaps/api-design/content/url-query--path-parameters@P-rGIk50Bg7nFmWieAW07.md index fd7d80278..92de27fea 100644 --- a/src/data/roadmaps/api-design/content/url-query--path-parameters@P-rGIk50Bg7nFmWieAW07.md +++ b/src/data/roadmaps/api-design/content/url-query--path-parameters@P-rGIk50Bg7nFmWieAW07.md @@ -6,4 +6,4 @@ Learn more from the following resources: - [@article@Understanding Path Variables and Query Parameters in HTTP Requests](https://medium.com/@averydcs/understanding-path-variables-and-query-parameters-in-http-requests-232248b71a8) - [@article@Describing parameters](https://swagger.io/docs/specification/describing-parameters/) -- [@article@Path parameters](https://help.iot-x.com/api/how-to-use-the-api/parameters/path-parameters) \ No newline at end of file +- [@article@Path Parameters](https://help.iot-x.com/api/how-to-use-the-api/parameters/path-parameters) diff --git a/src/data/roadmaps/api-design/content/versioning-strategies@itILK2SXvLvAjk1Kul7EK.md b/src/data/roadmaps/api-design/content/versioning-strategies@itILK2SXvLvAjk1Kul7EK.md index a62bf03cc..2bc625675 100644 --- a/src/data/roadmaps/api-design/content/versioning-strategies@itILK2SXvLvAjk1Kul7EK.md +++ b/src/data/roadmaps/api-design/content/versioning-strategies@itILK2SXvLvAjk1Kul7EK.md @@ -4,6 +4,6 @@ API Versioning is a critical component of API Design and Management. As the APIs Learn more from the following resources: -- [@article@What is API versioning?](https://www.postman.com/api-platform/api-versioning/) -- [@article@4 API versioning best practices](https://kodekloud.com/blog/api-versioning-best-practices/) -- [@video@Versioning your APIs](https://www.youtube.com/watch?v=Np_Jr6AvCOc) \ No newline at end of file +- [@article@What is API Versioning?](https://www.postman.com/api-platform/api-versioning/) +- [@article@API Versioning Best Practices](https://kodekloud.com/blog/api-versioning-best-practices/) +- [@video@Versioning your APIs](https://www.youtube.com/watch?v=Np_Jr6AvCOc) diff --git a/src/data/roadmaps/api-design/content/web-sockets@UQ8N7gcVpRLAYXgUNHBt5.md b/src/data/roadmaps/api-design/content/web-sockets@UQ8N7gcVpRLAYXgUNHBt5.md index 382865697..ff54719ba 100644 --- a/src/data/roadmaps/api-design/content/web-sockets@UQ8N7gcVpRLAYXgUNHBt5.md +++ b/src/data/roadmaps/api-design/content/web-sockets@UQ8N7gcVpRLAYXgUNHBt5.md @@ -5,5 +5,5 @@ Web Sockets provide a long-lived connection between a client and a server over w Learn more from the following resources: - [@article@The WebSocket API (WebSockets)](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) -- [@article@What are websockets?](https://www.pubnub.com/guides/websockets/) -- [@video@How web sockets work](https://www.youtube.com/watch?v=pnj3Jbho5Ck) \ No newline at end of file +- [@article@What are Web Sockets?](https://www.pubnub.com/guides/websockets/) +- [@video@How Web Sockets Work](https://www.youtube.com/watch?v=pnj3Jbho5Ck) diff --git a/src/data/roadmaps/api-design/content/what-are-apis@r8M3quACGO2piu0u_R4hO.md b/src/data/roadmaps/api-design/content/what-are-apis@r8M3quACGO2piu0u_R4hO.md index 57981a8a9..132a0710c 100644 --- a/src/data/roadmaps/api-design/content/what-are-apis@r8M3quACGO2piu0u_R4hO.md +++ b/src/data/roadmaps/api-design/content/what-are-apis@r8M3quACGO2piu0u_R4hO.md @@ -4,5 +4,7 @@ APIs, or Application Programming Interfaces, provide a manner in which software Visit the following resources to learn more: -- [@article@What is an API?](https://aws.amazon.com/what-is/api/) +- [@article@Getting Started with APIs - Postman](https://www.postman.com/what-is-an-api/) +- [@article@API - IBM](https://www.ibm.com/topics/api) +- [@article@What is an API? - AWS](https://aws.amazon.com/what-is/api/) - [@video@What is an API?](https://www.youtube.com/watch?v=s7wmiS2mSXY) diff --git a/src/data/roadmaps/cyber-security/content/router@lwSFIbIX-xOZ0QK2sGFb1.md b/src/data/roadmaps/cyber-security/content/router@lwSFIbIX-xOZ0QK2sGFb1.md index 4f7fdd3a8..defd7202b 100644 --- a/src/data/roadmaps/cyber-security/content/router@lwSFIbIX-xOZ0QK2sGFb1.md +++ b/src/data/roadmaps/cyber-security/content/router@lwSFIbIX-xOZ0QK2sGFb1.md @@ -1,9 +1,10 @@ # Router -Amazon Simple Storage Service (S3) is a scalable, object-based cloud storage service provided by AWS. It allows users to store and retrieve large amounts of data, such as files, backups, or media content, with high durability and availability. S3 is designed for flexibility, enabling users to access data from anywhere via the internet while offering security features like encryption and access controls. It is widely used for data storage, content distribution, disaster recovery, and big data analytics, providing cost-effective, scalable storage for a variety of applications. +A router is a networking device that directs data packets between different networks, ensuring they reach their destination. It operates at the network layer (Layer 3) of the OSI model and forwards data based on the IP addresses of the source and destination. Routers are essential for connecting devices to the internet or linking multiple networks together. They maintain a routing table to decide the best path for data and can dynamically update routes using protocols like RIP, OSPF, or BGP. Routers also handle Network Address Translation (NAT), allowing multiple devices to share a single public IP address. Many modern routers offer Wi-Fi for wireless connectivity and include basic firewall security to protect the network from threats. Learn more from the following resources: - [@article@What is a Router](https://www.cloudflare.com/en-gb/learning/network-layer/what-is-a-router/) - [@video@What is a router and how does it work?](https://www.youtube.com/watch?v=UIJzHLpG9bM) - +- [@video@Everything Routers do](https://youtu.be/AzXys5kxpAM?si=nEsCH6jG2Lj6Ua8N) +- [@video@How Routers forward Packets?](https://youtu.be/Ep-x_6kggKA?si=II5xBPoXjYEjLvWX) diff --git a/src/data/roadmaps/cyber-security/content/understand-basics-of-popular-suites@_7RjH4Goi0x6Noy6za0rP.md b/src/data/roadmaps/cyber-security/content/understand-basics-of-popular-suites@_7RjH4Goi0x6Noy6za0rP.md index f940e22cb..99dc2bd14 100644 --- a/src/data/roadmaps/cyber-security/content/understand-basics-of-popular-suites@_7RjH4Goi0x6Noy6za0rP.md +++ b/src/data/roadmaps/cyber-security/content/understand-basics-of-popular-suites@_7RjH4Goi0x6Noy6za0rP.md @@ -16,4 +16,4 @@ Learn more from the following resources: - [@official@Microsoft Office](https://www.office.com/) - [@official@Google Workspace](https://workspace.google.com) -- [@official@Libra Office](https://www.libreoffice.org/) +- [@official@LibreOffice](https://www.libreoffice.org/) diff --git a/src/data/roadmaps/devops/content/white--grey-listing@E-lSLGzgOPrz-25ER2Hk7.md b/src/data/roadmaps/devops/content/white--grey-listing@E-lSLGzgOPrz-25ER2Hk7.md index 0ab4439de..0a98993ad 100644 --- a/src/data/roadmaps/devops/content/white--grey-listing@E-lSLGzgOPrz-25ER2Hk7.md +++ b/src/data/roadmaps/devops/content/white--grey-listing@E-lSLGzgOPrz-25ER2Hk7.md @@ -4,7 +4,6 @@ Whitelisting involves creating a list of trusted entities (such as IP addresses, Visit the following resources to learn more: -- [@article@Basic Introduction to whitelisting](https://www.cblohm.com/blog/education-marketing-trends/what-is-email-whitelisting/) - [@article@Detailed Introduction to greylisting](https://en.wikipedia.org/wiki/Greylisting_(email)) - [@video@Greylisting](https://www.youtube.com/watch?v=ljtU6I0sIiw) - [@video@How to Whitelist an Email Address?](https://www.youtube.com/watch?v=NqQIBtY7ySw) diff --git a/src/data/roadmaps/docker/content/100-introduction/100-what-are-containers.md b/src/data/roadmaps/docker/content/100-introduction/100-what-are-containers.md index 94a08abb8..6251ed2c1 100644 --- a/src/data/roadmaps/docker/content/100-introduction/100-what-are-containers.md +++ b/src/data/roadmaps/docker/content/100-introduction/100-what-are-containers.md @@ -2,12 +2,8 @@ Containers are lightweight, portable, and isolated software environments that allow developers to run and package applications with their dependencies, consistently across different platforms. They help to streamline application development, deployment, and management processes while ensuring that applications run consistently, regardless of the underlying infrastructure. -## Containers and Docker - -Docker is a platform that simplifies the process of creating, deploying, and managing containers. It provides developers and administrators with a set of tools and APIs to manage containerized applications. With Docker, you can build and package application code, libraries, and dependencies into a container image, which can be distributed and run consistently in any environment that supports Docker. - Visit the following resources to learn more: - [@official@What is a Container?](https://www.docker.com/resources/what-container/) -- [@article@Introduction to Containers - AWS Skill Builder](https://explore.skillbuilder.aws/learn/course/106/introduction-to-containers) +- [@course@Introduction to Containers - AWS Skill Builder](https://explore.skillbuilder.aws/learn/course/106/introduction-to-containers) - [@feed@Explore top posts about Containers](https://app.daily.dev/tags/containers?ref=roadmapsh) diff --git a/src/data/roadmaps/docker/content/100-introduction/101-need-for-containers.md b/src/data/roadmaps/docker/content/100-introduction/101-need-for-containers.md index b936adb11..c710535f1 100644 --- a/src/data/roadmaps/docker/content/100-introduction/101-need-for-containers.md +++ b/src/data/roadmaps/docker/content/100-introduction/101-need-for-containers.md @@ -1,12 +1,6 @@ # Need for Containers -In the world of software development and deployment, consistency and efficiency are crucial. Before containers came into the picture, developers often faced challenges when deploying applications across different environments including: - -- **Inconsistent environments:** Developers often work in different environments which might have different configurations and libraries compared to production servers. This leads to compatibility issues in deploying applications. - -- **Inefficient resource utilization:** Virtual Machines (VMs) were widely used to overcome environment inconsistency. However, VMs require an entire OS to be running for each application, making the resource utilization inefficient. - -- **Slow processes and scalability issues:** Traditional deployment methods have a slower time to market and scaling difficulties, which hinders fast delivery of software updates. +Containers solve the issue around inconsistent environments when working in large teams. Before containers or virtual environments, a lot of issues and time loss was caused by having to install and configure local environments to build projects shared by co-workers or freinds. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/100-introduction/102-bare-metal-vm-containers.md b/src/data/roadmaps/docker/content/100-introduction/102-bare-metal-vm-containers.md index 7a6421eef..267bfdb80 100644 --- a/src/data/roadmaps/docker/content/100-introduction/102-bare-metal-vm-containers.md +++ b/src/data/roadmaps/docker/content/100-introduction/102-bare-metal-vm-containers.md @@ -1,17 +1,9 @@ # Bare Metal vs VM vs Containers -## Bare Metal - -Bare metal is a term used to describe a computer that is running directly on the hardware without any virtualization. This is the most performant way to run an application, but it is also the least flexible. You can only run one application per server, and you cannot easily move the application to another server. - -## Virtual Machines - -Virtual machines (VMs) are a way to run multiple applications on a single server. Each VM runs on top of a hypervisor, which is a piece of software that emulates the hardware of a computer. The hypervisor allows you to run multiple operating systems on a single server, and it also provides isolation between applications running on different VMs. - -## Containers - -Containers are a way to run multiple applications on a single server without the overhead of a hypervisor. Each container runs on top of a container engine, which is a piece of software that emulates the operating system of a computer. +Bare metal is a term used to describe a computer that is running directly on the hardware without any virtualization. This is the most performant way to run an application, but it is also the least flexible. You can only run one application per server, and you cannot easily move the application to another server. Virtual machines (VMs) are a way to run multiple applications on a single server. Each VM runs on top of a hypervisor, which is a piece of software that emulates the hardware of a computer. The hypervisor allows you to run multiple operating systems on a single server, and it also provides isolation between applications running on different VMs. Containers are a way to run multiple applications on a single server without the overhead of a hypervisor. Each container runs on top of a container engine, which is a piece of software that emulates the operating system of a computer. You can learn more from the following resources: - [@article@History of Virtualization](https://courses.devopsdirective.com/docker-beginner-to-pro/lessons/01-history-and-motivation/03-history-of-virtualization) +- [@article@Bare Metal Machine](https://glossary.cncf.io/bare-metal-machine/) +- [@article@What is a Virtual Machine?](https://azure.microsoft.com/en-au/resources/cloud-computing-dictionary/what-is-a-virtual-machine) diff --git a/src/data/roadmaps/docker/content/100-introduction/103-docker-and-oci.md b/src/data/roadmaps/docker/content/100-introduction/103-docker-and-oci.md index dec138f56..2f41123e2 100644 --- a/src/data/roadmaps/docker/content/100-introduction/103-docker-and-oci.md +++ b/src/data/roadmaps/docker/content/100-introduction/103-docker-and-oci.md @@ -2,16 +2,6 @@ The Open Container Initiative (OCI) is a Linux Foundation project which aims at creating industry standards for container formats and runtimes. Its primary goal is to ensure the compatibility and interoperability of container environments through defined technical specifications. -## OCI Specifications - -OCI has three main specifications: - -- **Runtime Specification (runtime-spec):** It defines the specification for executing a container via an isolation technology, like a container engine. The container runtime built by Docker, called 'containerd', has guided the development of the OCI runtime-spec. - -- **Image Specification (image-spec):** It defines the container image format, which describes the contents of a container and can be run by a compliant runtime. Docker's initial image format has led to the creation of the OCI image-spec. - -- **Distribution Specification (distribution-spec):** It defines an API protocol to facilitate and standardize the distribution of content. Docker's existing registry API served as a starting point and heavily influenced the design of the OCI Distro Spec. - You can learn more from the following resources: - [@official@Open Container Initiative](https://opencontainers.org/) diff --git a/src/data/roadmaps/docker/content/101-underlying-technologies/100-namespaces.md b/src/data/roadmaps/docker/content/101-underlying-technologies/100-namespaces.md index d292700d0..fea5111d3 100644 --- a/src/data/roadmaps/docker/content/101-underlying-technologies/100-namespaces.md +++ b/src/data/roadmaps/docker/content/101-underlying-technologies/100-namespaces.md @@ -1,16 +1,8 @@ # What are Namespaces? -In the Linux kernel, namespaces are a feature that allows the isolation of various system resources, making it possible for a process and its children to have a view of a subset of the system that is separate from other processes. Namespaces help to create an abstraction layer to keep containerized processes separate from one another and from the host system. - -There are several types of namespaces in Linux, including: - -- **PID (Process IDs)**: Isolates the process ID number space, which means that processes within a container only see their own processes, not those on the host or in other containers. -- **Network (NET)**: Provides each container with a separate view of the network stack, including its own network interfaces, routing tables, and firewall rules. -- **Mount (MNT)**: Isolates the file system mount points in such a way that each container has its own root file system, and mounted resources appear only within that container. -- **UTS (UNIX Time Sharing System)**: Allows each container to have its own hostname and domain name, separate from other containers and the host system. -- **User (USER)**: Maps user and group identifiers between the container and the host, so different permissions can be set for resources within the container. -- **IPC (Inter-Process Communication)**: Allows or restricts the communication between processes in different containers. +Docker namespaces are a fundamental feature of Linux that Docker uses to create isolated environments for containers. They provide a layer of isolation by creating separate instances of global system resources, making each container believe it has its own unique set of resources. Docker utilizes several types of namespaces, including PID (Process ID), NET (Network), MNT (Mount), UTS (Unix Timesharing System), IPC (InterProcess Communication), and USER namespaces and by leveraging these namespaces, Docker can create lightweight, portable, and secure containers that run consistently across different environments. Visit the following resources to learn more: - [@official@Docker Namespaces](https://docs.docker.com/engine/security/userns-remap/) +- [@article@Linux Namespaces](https://man7.org/linux/man-pages/man7/namespaces.7.html) diff --git a/src/data/roadmaps/docker/content/101-underlying-technologies/101-cgroups.md b/src/data/roadmaps/docker/content/101-underlying-technologies/101-cgroups.md index 1b610c870..1ed8d9abd 100644 --- a/src/data/roadmaps/docker/content/101-underlying-technologies/101-cgroups.md +++ b/src/data/roadmaps/docker/content/101-underlying-technologies/101-cgroups.md @@ -1,10 +1,9 @@ # cgroups -**cgroups** or **control groups** is a Linux kernel feature that allows you to allocate and manage resources, such as CPU, memory, network bandwidth, and I/O, among groups of processes running on a system. It plays a crucial role in providing resource isolation and limiting the resources that a running container can use. - -Docker utilizes cgroups to enforce resource constraints on containers, allowing them to have a consistent and predictable behavior. Below are some of the key features and benefits of cgroups in the context of Docker containers: +cgroups or "control groups" are a Linux kernel feature that allows you to allocate and manage resources, such as CPU, memory, network bandwidth, and I/O, among groups of processes running on a system. It plays a crucial role in providing resource isolation and limiting the resources that a running container can use. Docker utilizes cgroups to enforce resource constraints on containers, allowing them to have a consistent and predictable behavior. Below are some of the key features and benefits of cgroups in the context of Docker containers: Visit the following resources to learn more: - [@official@Control Groups](https://www.docker.com/resources/what-container/#control-groups) - [@article@Control Groups - Medium](https://medium.com/@furkan.turkal/how-does-docker-actually-work-the-hard-way-a-technical-deep-diving-c5b8ea2f0422) +- [@video@An introduction to cgroups, runc & containerD](https://www.youtube.com/watch?v=u1LeMndEk70) \ No newline at end of file diff --git a/src/data/roadmaps/docker/content/102-installation-setup/100-docker-desktop.md b/src/data/roadmaps/docker/content/102-installation-setup/100-docker-desktop.md index 97e7801c5..a9b34c7a0 100644 --- a/src/data/roadmaps/docker/content/102-installation-setup/100-docker-desktop.md +++ b/src/data/roadmaps/docker/content/102-installation-setup/100-docker-desktop.md @@ -2,14 +2,6 @@ Docker Desktop is an easy-to-install application that enables developers to quickly set up a Docker environment on their desktop machines. It is available for both Windows and macOS operating systems. Docker Desktop is designed to simplify the process of managing and running Docker containers, providing a user-friendly interface and seamless integration with the host operating system. -## Installation - -To install Docker Desktop on your machine, follow these steps: - -- **Download the installer**: You can download the installer for your operating system from the Docker Desktop website. Make sure to choose the appropriate version (Windows or Mac). -- **Run the installer**: Double-click on the downloaded installer file and follow the setup wizard to complete the installation process. -- **Launch Docker Desktop**: Once the installation is complete, start Docker Desktop and sign in with your Docker Hub account. If you don't have an account, you can sign up for a free account on the Docker Hub website. - Learn more from the following resources: - [@official@Docker Desktop Documentation](https://docs.docker.com/desktop/) diff --git a/src/data/roadmaps/docker/content/102-installation-setup/101-docker-engine.md b/src/data/roadmaps/docker/content/102-installation-setup/101-docker-engine.md index 2958e855d..2a341cae9 100644 --- a/src/data/roadmaps/docker/content/102-installation-setup/101-docker-engine.md +++ b/src/data/roadmaps/docker/content/102-installation-setup/101-docker-engine.md @@ -2,12 +2,8 @@ There is often confusion between "Docker Desktop" and "Docker Engine". Docker Engine refers specifically to a subset of the Docker Desktop components which are free and open source and can be installed only on Linux. Docker Engine can build container images, run containers from them, and generally do most things that Docker Desktop can, but it is Linux only and doesn't provide all of the developer experience polish that Docker Desktop provides. -Docker Engine includes: - -- Docker Command Line Interface (CLI) -- Docker daemon (dockerd), exposing the Docker Application Programming Interface (API) - For more information about docker engine see: - [@official@Docker Engine - Docker Documentation](https://docs.docker.com/engine/) +- [@video@Docker Engine for Linux Servers Setup and Tips](https://www.youtube.com/watch?v=YeF7ObTnDwc) - [@feed@Explore top posts about Docker](https://app.daily.dev/tags/docker?ref=roadmapsh) diff --git a/src/data/roadmaps/docker/content/102-installation-setup/index.md b/src/data/roadmaps/docker/content/102-installation-setup/index.md index f7812eff6..6204793d9 100644 --- a/src/data/roadmaps/docker/content/102-installation-setup/index.md +++ b/src/data/roadmaps/docker/content/102-installation-setup/index.md @@ -1,6 +1,6 @@ # Installation Setup -Docker provides a desktop application called **Docker Desktop** that simplifies the installation and setup process. There is also another option to install using the **Docker Engine**. +Docker provides a desktop application called*Docker Desktop that simplifies the installation and setup process. There is also another option to install using the Docker Engine but be aware that installing just the Docker Engine will not provide you with any GUI capabilites. - [@official@Docker Desktop website](https://www.docker.com/products/docker-desktop) - [@official@Docker Engine](https://docs.docker.com/engine/install/) diff --git a/src/data/roadmaps/docker/content/104-data-persistence/100-ephemeral-container-fs.md b/src/data/roadmaps/docker/content/104-data-persistence/100-ephemeral-container-fs.md index 14fb917bb..cf90a4eea 100644 --- a/src/data/roadmaps/docker/content/104-data-persistence/100-ephemeral-container-fs.md +++ b/src/data/roadmaps/docker/content/104-data-persistence/100-ephemeral-container-fs.md @@ -1,19 +1,8 @@ # Ephemeral FS -By default, the storage within a Docker container is ephemeral, meaning that any data changes or modifications made inside a container will only persist as long as the container is running. Once the container is stopped and removed, all the associated data will be lost. This is because Docker containers are designed to be stateless by nature. - -This temporary or short-lived storage is called the "ephemeral container file system". It is an essential feature of Docker, as it enables fast and consistent deployment of applications across different environments without worrying about the state of a container. - -## Ephemeral FS and Data Persistence - -As any data stored within the container's ephemeral FS is lost when the container is stopped and removed, it poses a challenge to data persistence in applications. This is especially problematic for applications like databases, which require data to be persisted across multiple container life cycles. - -To overcome these challenges, Docker provides several methods for data persistence, such as: - -- **Volumes**: A Docker managed storage option, stored outside the container's FS, allowing data to be persisted across container restarts and removals. -- **Bind mounts**: Mapping a host machine's directory or file into a container, effectively sharing host's storage with the container. -- **tmpfs mounts**: In-memory storage, useful for cases where just the persistence of data within the life-cycle of the container is required. +By default, the storage within a Docker container is ephemeral, meaning that any data changes or modifications made inside a container will only persist as long as the container is running. Once the container is stopped and removed, all the associated data will be lost. This is because Docker containers are designed to be stateless by nature. This temporary or short-lived storage is called the "ephemeral container file system". It is an essential feature of Docker, as it enables fast and consistent deployment of applications across different environments without worrying about the state of a container. Visit the following resources to learn more: - [@official@Data Persistence - Docker Documentation](https://docs.docker.com/get-started/docker-concepts/running-containers/persisting-container-data/) +- [@video@Docker Concepts - Persisting container data](https://www.youtube.com/watch?v=10_2BjqB_Ls) diff --git a/src/data/roadmaps/docker/content/104-data-persistence/101-volume-mounts.md b/src/data/roadmaps/docker/content/104-data-persistence/101-volume-mounts.md index 186cd8244..688d98527 100644 --- a/src/data/roadmaps/docker/content/104-data-persistence/101-volume-mounts.md +++ b/src/data/roadmaps/docker/content/104-data-persistence/101-volume-mounts.md @@ -2,58 +2,8 @@ Volume mounts are a way to map a folder or file on the host system to a folder or file inside a container. This allows the data to persist outside the container even when the container is removed. Additionally, multiple containers can share the same volume, making data sharing between containers easy. -## Creating a Volume - -To create a volume in Docker, you need to run the following command: - -```bash -docker volume create my-volume -``` - -This command will create a volume named `my-volume`. You can inspect the details of the created volume using the command: - -```bash -docker volume inspect my-volume -``` - -## Mounting a Volume in a Container - -To mount a volume to a container, you need to use the `-v` or `--mount` flag while running the container. Here's an example: - -Using `-v` flag: - -```bash -docker run -d -v my-volume:/data your-image -``` - -Using `--mount` flag: - -```bash -docker run -d --mount source=my-volume,destination=/data your-image -``` - -In both examples above, `my-volume` is the name of the volume we created earlier, and `/data` is the path inside the container where the volume will be mounted. - -## Sharing Volumes Between Containers - -To share a volume between multiple containers, simply mount the same volume on multiple containers. Here's how to share `my-volume` between two containers running different images: - -```bash -docker run -d -v my-volume:/data1 image1 -docker run -d -v my-volume:/data2 image2 -``` - -In this example, `image1` and `image2` would have access to the same data stored in `my-volume`. - -## Removing a Volume - -To remove a volume, you can use the `docker volume rm` command followed by the volume name: - -```bash -docker volume rm my-volume -``` - Visit the following resources to learn more: - [@official@Docker Volumes](https://docs.docker.com/storage/volumes/). - [@official@Docker Volume Flags](https://docs.docker.com/storage/bind-mounts/#choose-the--v-or---mount-flag) +- [@video@Docker Volumes explained in 6 minutes](https://www.youtube.com/watch?v=p2PH_YPCsis) diff --git a/src/data/roadmaps/docker/content/104-data-persistence/102-bind-mounts.md b/src/data/roadmaps/docker/content/104-data-persistence/102-bind-mounts.md index eb81f5773..21eae9cef 100644 --- a/src/data/roadmaps/docker/content/104-data-persistence/102-bind-mounts.md +++ b/src/data/roadmaps/docker/content/104-data-persistence/102-bind-mounts.md @@ -5,3 +5,4 @@ Bind mounts have limited functionality compared to volumes. When you use a bind Visit the following resources to learn more: - [@official@Docker Bind Mounts](https://docs.docker.com/storage/bind-mounts/) +- [@article@How to Use Bind Mount in Docker?](https://www.geeksforgeeks.org/how-to-use-bind-mount-in-docker/) diff --git a/src/data/roadmaps/docker/content/105-using-third-party-images/100-databases.md b/src/data/roadmaps/docker/content/105-using-third-party-images/100-databases.md index e6c8fea05..69599eabe 100644 --- a/src/data/roadmaps/docker/content/105-using-third-party-images/100-databases.md +++ b/src/data/roadmaps/docker/content/105-using-third-party-images/100-databases.md @@ -2,26 +2,7 @@ Running your database in a Docker container can help streamline your development process and ease deployment. Docker Hub provides numerous pre-made images for popular databases such as MySQL, PostgreSQL, and MongoDB. -## Example: Using PostgreSQL Image - -For PostgreSQL, follow similar steps to those outlined above. First, search for the official image: - -```bash -docker search postgres -``` - -Pull the image: - -```bash -docker pull postgres -``` - -Run a PostgreSQL container, specifying environment variables such as `POSTGRES_PASSWORD`: - -```bash -docker run --name some-postgres -e POSTGRES_PASSWORD=my-secret-pw -p 5432:5432 -d postgres -``` - Visit the following resources to learn more: - [@official@Containerized Databases](https://docs.docker.com/guides/use-case/databases/) +- [@video@How to Setup MySQL Database with Docker](https://www.youtube.com/watch?v=igc2zsOKPJs) diff --git a/src/data/roadmaps/docker/content/105-using-third-party-images/101-interactive-test-environments.md b/src/data/roadmaps/docker/content/105-using-third-party-images/101-interactive-test-environments.md index ca60f9844..412fbcb23 100644 --- a/src/data/roadmaps/docker/content/105-using-third-party-images/101-interactive-test-environments.md +++ b/src/data/roadmaps/docker/content/105-using-third-party-images/101-interactive-test-environments.md @@ -2,26 +2,7 @@ Docker allows you to create isolated, disposable environments that can be deleted once you're done with testing. This makes it much easier to work with third party software, test different dependencies or versions, and quickly experiment without the risk of damaging your local setup. -## Creating an Interactive Test Environment with Docker - -To demonstrate how to setup an interactive test environment, let's use the Python programming language as an example. We will use a public Python image available on Docker Hub. - -- To start an interactive test environment using the Python image, simply run the following command: - -```bash -docker run -it --rm python -``` - -Here, `-it` flag ensures that you're running the container in interactive mode with a tty, and `--rm` flag will remove the container once it is stopped. - -- You should now be inside an interactive Python shell within the container. You can execute any Python command or install additional packages using `pip` as you normally would. - -```python -print("Hello, Docker!") -``` - -- Once you are done with your interactive session, you can simply type `exit()` or press `CTRL+D` to exit the container. The container will be automatically removed as specified by the `--rm` flag. - Visit the following resources to learn more: +- [@official@Launch a Dev Environment](https://docs.docker.com/desktop/dev-environments/create-dev-env/) - [@article@Test Environments - Medium](https://manishsaini74.medium.com/containerized-testing-orchestrating-test-environments-with-docker-5201bfadfdf2) diff --git a/src/data/roadmaps/docker/content/105-using-third-party-images/102-command-line-utilities.md b/src/data/roadmaps/docker/content/105-using-third-party-images/102-command-line-utilities.md index a3f904110..5f9514609 100644 --- a/src/data/roadmaps/docker/content/105-using-third-party-images/102-command-line-utilities.md +++ b/src/data/roadmaps/docker/content/105-using-third-party-images/102-command-line-utilities.md @@ -2,26 +2,6 @@ Docker images can include command line utilities or standalone applications that we can run inside containers. -## BusyBox - -BusyBox is a small (1-2 Mb) and simple command line application that provides a large number of the commonly used Unix utilities, such as `awk`, `grep`, `vi`, etc. To run BusyBox inside a Docker container, you simply need to pull the image and run it with Docker: - -```bash -docker pull busybox -docker run -it busybox /bin/sh -``` - -### cURL - -cURL is a well-known command line tool that can be used to transfer data using various network protocols. It is often used for testing APIs or downloading files from the internet. To use cURL inside a Docker container, you can use the official cURL image available on Docker Hub: - -```bash -docker pull curlimages/curl -docker run --rm curlimages/curl https://example.com -``` - -In this example, the `--rm` flag is used to remove the container after the command has finished running. - Visit the following resources to learn more: - [@official@Docker Images](https://docs.docker.com/engine/reference/commandline/images/) diff --git a/src/data/roadmaps/docker/content/105-using-third-party-images/index.md b/src/data/roadmaps/docker/content/105-using-third-party-images/index.md index 50fa8c0b5..72e475b4d 100644 --- a/src/data/roadmaps/docker/content/105-using-third-party-images/index.md +++ b/src/data/roadmaps/docker/content/105-using-third-party-images/index.md @@ -1,18 +1,7 @@ # Using Third Party Images -Third-party images are pre-built Docker container images that are available on [Docker Hub](https://hub.docker.com) or other container registries. These images are created and maintained by individuals or organizations and can be used as a starting point for your containerized applications. +Third-party images are pre-built Docker container images that are available on Docker Hub or other container registries. These images are created and maintained by individuals or organizations and can be used as a starting point for your containerized applications. -## Using an Image in Your Dockerfile - -For example: If you're looking for a `Node.js` image, you can search for "node" on Docker Hub and you'll find the official Node.js image along with many other community-maintained images. - -To use a third-party image in your Dockerfile, simply set the image name as the base image using the `FROM` directive. Here's an example using the official Node.js image: - -```dockerfile -FROM node:20 - -# The rest of your Dockerfile... -``` Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/106-building-container-images/100-dockerfiles.md b/src/data/roadmaps/docker/content/106-building-container-images/100-dockerfiles.md index 8416b2a56..87667b3a6 100644 --- a/src/data/roadmaps/docker/content/106-building-container-images/100-dockerfiles.md +++ b/src/data/roadmaps/docker/content/106-building-container-images/100-dockerfiles.md @@ -2,39 +2,6 @@ A Dockerfile is a text document that contains a list of instructions used by the Docker engine to build an image. Each instruction in the Dockerfile adds a new layer to the image. Docker will build the image based on these instructions, and then you can run containers from the image. -## Structure of a Dockerfile - -A Dockerfile is organized in a series of instructions, one per line. Each instruction has a specific format. - -```bash -INSTRUCTION arguments -``` - -The following is an example of a simple Dockerfile: - -```bash -# Use an official Python runtime as a parent image -FROM python:3.7-slim - -# Set the working directory to /app -WORKDIR /app - -# Copy the current directory contents into the container at /app -COPY . /app - -# Install any needed packages specified in requirements.txt -RUN pip install --trusted-host pypi.python.org -r requirements.txt - -# Make port 80 available to the world outside this container -EXPOSE 80 - -# Define environment variable -ENV NAME World - -# Run app.py when the container launches -CMD ["python", "app.py"] -``` - Visit the following resources to learn more: - [@official@Dockerfile Reference](https://docs.docker.com/engine/reference/builder/) diff --git a/src/data/roadmaps/docker/content/106-building-container-images/101-efficient-layer-caching.md b/src/data/roadmaps/docker/content/106-building-container-images/101-efficient-layer-caching.md index b9df658e5..ef933f343 100644 --- a/src/data/roadmaps/docker/content/106-building-container-images/101-efficient-layer-caching.md +++ b/src/data/roadmaps/docker/content/106-building-container-images/101-efficient-layer-caching.md @@ -1,27 +1,8 @@ # Efficient Layer Caching -When building container images, Docker caches the newly created layers. These layers can then be used later on when building other images, reducing the build time and minimizing bandwidth usage. However, to make the most of this caching mechanism, you should be aware of how to efficiently use layer caching. - -## How Docker Layer Caching Works - -Docker creates a new layer for each instruction (e.g., `RUN`, `COPY`, `ADD`, etc.) in the Dockerfile. If the instruction hasn't changed since the last build, Docker will reuse the existing layer. - -For example, consider the following Dockerfile: - -```dockerfile -FROM node:14 - -WORKDIR /app - -COPY package.json /app/ - -RUN npm install - -COPY . /app/ - -CMD ["npm", "start"] -``` +When building container images, Docker caches the newly created layers. These layers can then be used later on when building other images, reducing the build time and minimizing bandwidth usage. However, to make the most of this caching mechanism, you should be aware of how to efficiently use layer caching. Docker creates a new layer for each instruction (e.g., `RUN`, `COPY`, `ADD`, etc.) in the Dockerfile. If the instruction hasn't changed since the last build, Docker will reuse the existing layer. Visit the following resources to learn more: - [@official@Docker Layer Caching](https://docs.docker.com/build/cache/) +- [@video@Layer Caching](https://www.youtube.com/watch?v=_nMpndIyaBU) \ No newline at end of file diff --git a/src/data/roadmaps/docker/content/106-building-container-images/102-image-size-and-security.md b/src/data/roadmaps/docker/content/106-building-container-images/102-image-size-and-security.md index c005e313b..87b05f9b8 100644 --- a/src/data/roadmaps/docker/content/106-building-container-images/102-image-size-and-security.md +++ b/src/data/roadmaps/docker/content/106-building-container-images/102-image-size-and-security.md @@ -1,35 +1,6 @@ # Reducing Image Size -- **Use an appropriate base image:** Choose a smaller, more lightweight base image that includes only the necessary components for your application. For example, consider using the `alpine` variant of an official image, if available, as it's typically much smaller in size. - - ```dockerfile - FROM node:14-alpine - ``` - -- **Run multiple commands in a single `RUN` statement:** Each `RUN` statement creates a new layer in the image, which contributes to the image size. Combine multiple commands into a single `RUN` statement using `&&` to minimize the number of layers and reduce the final image size. - - ```dockerfile - RUN apt-get update && \ - apt-get install -y some-required-package - ``` - -- **Remove unnecessary files in the same layer:** When you install packages or add files during the image build process, remove temporary or unused files in the same layer to reduce the final image size. - - ```dockerfile - RUN apt-get update && \ - apt-get install -y some-required-package && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - ``` - -- **Use multi-stage builds:** Use multi-stage builds to create smaller images. Multi-stage builds allow you to use multiple `FROM` statements in your Dockerfile. Each `FROM` statement creates a new stage in the build process. You can copy files from one stage to another using the `COPY --from` statement. - -- **Use `.dockerignore` file:** Use a `.dockerignore` file to exclude unnecessary files from the build context that might cause cache invalidation and increase the final image size. - - ```dockerfile - node_modules - npm-debug.log - ``` +Reducing Docker image size is crucial for optimizing storage, transfer speeds, and deployment times. Key strategies include using minimal base images like Alpine Linux, leveraging multi-stage builds to exclude unnecessary build tools, removing unnecessary files and packages, and minimizing the number of layers by combining commands. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/106-building-container-images/index.md b/src/data/roadmaps/docker/content/106-building-container-images/index.md index 4aa50663d..551a7183b 100644 --- a/src/data/roadmaps/docker/content/106-building-container-images/index.md +++ b/src/data/roadmaps/docker/content/106-building-container-images/index.md @@ -1,33 +1,6 @@ # Building Container Images -Container images are executable packages that include everything required to run an application: code, runtime, system tools, libraries, and settings. By building custom images, you can deploy applications seamlessly with all their dependencies on any Docker-supported platform. - -## Dockerfile - -The key component in building a container image is the `Dockerfile`. It is essentially a script containing instructions on how to assemble a Docker image. Each instruction in the Dockerfile creates a new layer in the image, making it easier to track changes and minimize the image size. Here's a simple example of a Dockerfile: - -```dockerfile -# Use an official Python runtime as a parent image -FROM python:3.7-slim - -# Set the working directory to /app -WORKDIR /app - -# Copy the current directory contents into the container at /app -COPY . /app - -# Install any needed packages specified in requirements.txt -RUN pip install --trusted-host pypi.python.org -r requirements.txt - -# Make port 80 available to the world outside this container -EXPOSE 80 - -# Define environment variable -ENV NAME World - -# Run app.py when the container launches -CMD ["python", "app.py"] -``` +Container images are executable packages that include everything required to run an application: code, runtime, system tools, libraries, and settings. By building custom images, you can deploy applications seamlessly with all their dependencies on any Docker-supported platform. The key component in building a container image is the `Dockerfile`. It is essentially a script containing instructions on how to assemble a Docker image. Each instruction in the Dockerfile creates a new layer in the image, making it easier to track changes and minimize the image size. Here's a simple example of a Dockerfile: Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/107-container-registries/100-dockerhub.md b/src/data/roadmaps/docker/content/107-container-registries/100-dockerhub.md index eb0fce404..08c02ec7c 100644 --- a/src/data/roadmaps/docker/content/107-container-registries/100-dockerhub.md +++ b/src/data/roadmaps/docker/content/107-container-registries/100-dockerhub.md @@ -1,31 +1,6 @@ # DockerHub -DockerHub is a cloud-based registry service provided by Docker Inc. It is the default public container registry where you can store, manage, and distribute your Docker images. - -## Features of DockerHub - -- **Public and private repositories:** Store your images in public repositories that are accessible to everyone, or opt for private repositories with access limited to your team or organization. - -- **Automated Builds:** DockerHub integrates with popular code repositories such as GitHub and Bitbucket, allowing you to set up automated builds for your Docker images - -- **Webhooks:** DockerHub allows you to configure webhooks to notify other applications or services when an image has been built or updated. - -- **Organizations and Teams:** Make collaboration easy by creating organizations and teams to manage access to your images and repositories. - -- **Official Images:** DockerHub provides a curated set of official images for popular software like MongoDB, Node.js, Redis, etc. These images are maintained by Docker Inc. - -To push an image to DockerHub, you need to log in to the registry using your DockerHub credentials: - -```bash -docker tag your-image your-username/your-repository:your-tag -docker push your-username/your-repository:your-tag -``` - -To pull images from DockerHub, you can use the `docker pull` command: - -```bash -docker pull your-username/your-repository:your-tag -``` +Docker Hub is a cloud-based registry service that serves as the primary public repository for Docker container images. It allows users to store, share, and distribute Docker images, offering both free public repositories and paid private ones and integrates seamlessly with Docker CLI, enabling easy pushing and pulling of images. It features official images maintained by software vendors, automated builds linked to source code repositories, and webhooks for triggering actions based on repository events. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/107-container-registries/101-dockerhub-alt.md b/src/data/roadmaps/docker/content/107-container-registries/101-dockerhub-alt.md index 5ddd1b7c6..8dfd93ff4 100644 --- a/src/data/roadmaps/docker/content/107-container-registries/101-dockerhub-alt.md +++ b/src/data/roadmaps/docker/content/107-container-registries/101-dockerhub-alt.md @@ -1,22 +1,6 @@ # DockerHub Alternatives -These alternatives provide a different set of features and functionalities that may suit your container registry needs. - -## Artifact Registry - -Artifact Registry is a container registry service provided by Google Cloud Platform (GCP). It offers a fully managed, private Docker container registry that integrates with other GCP services like Cloud Build, Cloud Run, and Kubernetes Engine. - -### Amazon Elastic Container Registry (ECR) - -Amazon Elastic Container Registry (ECR) is a fully-managed Docker container registry by Amazon Web Services (AWS) that simplifies the process of storing, managing, and deploying Docker images. - -### Azure Container Registry (ACR) - -Azure Container Registry (ACR) is Microsoft Azure's container registry offering. It provides a wide range of functionalities, including geo-replication for high availability. - -### GitHub Container Registry (GHCR) - -GitHub Container Registry (GHCR) is the container registry service provided by GitHub. It enhances the support for Docker in GitHub Packages by providing a more streamlined experience for managing and deploying Docker images. +Container images can be stored in many different registries, not just Dockerhub. Most major cloud platforms now provide container registries such as "Artifact Registry" on Google Cloud Platform, Elastic Container Registry on AWS and Azure Container Registry on Microsoft Azure. GitHub also provides it's own resistry which is useful when container builds are included in your GitHub Actions workflow. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/107-container-registries/102-image-tagging-best-practices.md b/src/data/roadmaps/docker/content/107-container-registries/102-image-tagging-best-practices.md index 4b2d9f096..26c764d4d 100644 --- a/src/data/roadmaps/docker/content/107-container-registries/102-image-tagging-best-practices.md +++ b/src/data/roadmaps/docker/content/107-container-registries/102-image-tagging-best-practices.md @@ -1,22 +1,6 @@ # Image Tagging Best Practices -Properly tagging your Docker images is crucial for efficient container management and deployment. In this section, we will discuss some best practices for image tagging. - -## Use Semantic Versioning - -When tagging your image, it is recommended to follow Semantic Versioning guidelines. Semantic versioning is a widely recognized method that can help better maintain your application. Docker image tags should have the following structure `..`. Example: `3.2.1`. - -## Tag the Latest Version - -Docker allows you to tag an image as 'latest' in addition to a version number. It is a common practice to tag the most recent stable version of your image as 'latest' so that users can quickly access it without having to specify a version number. However, it is important to keep this tag updated as the new versions are released. - -```sh -docker build -t your-username/app-name:latest . -``` - -## Use Automated Build and Tagging Tools - -Consider using CI/CD tools (Jenkins, GitLab CI, Travis-CI) to automate image builds and tagging based on commits, branches, or other rules. This ensures consistency and reduces the likelihood of errors caused by manual intervention. +Docker image tagging best practices center on creating clear, consistent, and informative labels. Adopt semantic versioning for releases, avoid the ambiguous "latest" tag in production, and include relevant metadata like build dates or Git commit hashes. Implement a strategy distinguishing between environments, use descriptive tags for variants, and automate tagging in CI/CD pipelines. Regularly clean up old tags and document your conventions to maintain clarity and facilitate team-wide adoption. These practices ensure efficient image management and improve collaboration across your organization. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/107-container-registries/index.md b/src/data/roadmaps/docker/content/107-container-registries/index.md index c12e7c87b..c38f84c13 100644 --- a/src/data/roadmaps/docker/content/107-container-registries/index.md +++ b/src/data/roadmaps/docker/content/107-container-registries/index.md @@ -1,14 +1,6 @@ # Container Registries -A **Container Registry** is a centralized storage and distribution system for Docker container images. It allows developers to easily share and deploy applications in the form of these images. Container registries play a crucial role in the deployment of containerized applications, as they provide a fast, reliable, and secure way to distribute container images across various production environments. - -Below is a list of popular container registries available today: - -- **Docker Hub**: Docker Hub is the default registry for public Docker images and serves as a platform for sharing and distributing images among developers. - -- **Artifact Registry**: Artifact Registry is a managed container registry provided by Google Cloud Platform (GCP), offering private storage and distribution of container images. - -- **Amazon Elastic Container Registry (ECR)**: Amazon ECR is a fully-managed Docker container registry provided by Amazon Web Services, offering high scalability and performance for storing, managing, and deploying container images. +A Container Registry is a centralized storage and distribution system for Docker container images. It allows developers to easily share and deploy applications in the form of these images. Container registries play a crucial role in the deployment of containerized applications, as they provide a fast, reliable, and secure way to distribute container images across various production environments. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/108-running-containers/100-docker-run.md b/src/data/roadmaps/docker/content/108-running-containers/100-docker-run.md index 430c4217e..ba818fade 100644 --- a/src/data/roadmaps/docker/content/108-running-containers/100-docker-run.md +++ b/src/data/roadmaps/docker/content/108-running-containers/100-docker-run.md @@ -1,33 +1,6 @@ # Running Containers -The `docker run` command creates a new container from the specified image and starts it. - -The basic syntax for the `docker run` command is as follows: - -```bash -docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -``` - -- `OPTIONS`: These are command-line flags that can be used to adjust the container's settings, like memory constraints, ports, environment variables, etc. -- `IMAGE`: The Docker image that the container will run. This can be an image from Docker Hub or your own image that is stored locally. -- `COMMAND`: This is the command that will be executed inside the container when it starts. If not specified, the default entrypoint of the image will be used. -- `ARG...`: These are optional arguments that can be passed to the command being executed. - -## Examples - -Here are some sample commands to help you understand how to use `docker run`: - -- Run an interactive session of an Ubuntu container: - -```bash -docker run -it --name=my-ubuntu ubuntu -``` - -- Run an Nginx web server and publish the port 80 on the host: - -```bash -docker run -d --name=my-nginx -p 80:80 nginx -``` +The `docker run` command creates and starts a new container from a specified image. It combines `docker create` and `docker start` operations, offering a range of options to customize the container's runtime environment. Users can set environment variables, map ports and volumes, define network connections, and specify resource limits. The command supports detached mode for background execution, interactive mode for shell access, and the ability to override the default command defined in the image. Common flags include `-d` for detached mode, `-p` for port mapping, `-v` for volume mounting, and `--name` for assigning a custom container name. Understanding `docker run` is fundamental to effectively deploying and managing Docker containers. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/108-running-containers/101-docker-compose.md b/src/data/roadmaps/docker/content/108-running-containers/101-docker-compose.md index 067775b7e..89e6803e8 100644 --- a/src/data/roadmaps/docker/content/108-running-containers/101-docker-compose.md +++ b/src/data/roadmaps/docker/content/108-running-containers/101-docker-compose.md @@ -2,37 +2,7 @@ Docker Compose is a tool for defining and running multi-container Docker applications. It allows you to create, manage, and run your applications using a simple YAML file called `docker-compose.yml`. This file describes your application's services, networks, and volumes, allowing you to easily run and manage your containers using just a single command. -## Creating a Docker Compose File - -To create a `docker-compose.yml` file, start by specifying the version of Docker Compose you want to use, followed by the services you want to define. Here's an example of a basic `docker-compose.yml` file: - -```yaml -version: "3.9" -services: - web: - image: nginx:latest - ports: - - "80:80" - depends_on: - - db - db: - image: mysql:latest - environment: - MYSQL_ROOT_PASSWORD: mysecretpassword -``` - -The web server exposes its port 80 to the host machine and depends on the launch of the database (`db`). - -## Running Docker Compose - -To run your Docker Compose application, simply navigate to the directory containing your `docker-compose.yml` file and run the following command: - -```bash -docker-compose up -``` - -Docker Compose will read the file and start the defined services in the specified order. - Visit the following resources to learn more: -- [@official@Docker Compose documentation](https://docs.docker.com/compose/). +- [@official@Docker Compose documentation](https://docs.docker.com/compose/) +- [@video@Docker Compose Tutorial](https://www.youtube.com/watch?v=DM65_JyGxCo) diff --git a/src/data/roadmaps/docker/content/108-running-containers/102-runtime-config-options.md b/src/data/roadmaps/docker/content/108-running-containers/102-runtime-config-options.md index 35aca9e09..c53a1d94b 100644 --- a/src/data/roadmaps/docker/content/108-running-containers/102-runtime-config-options.md +++ b/src/data/roadmaps/docker/content/108-running-containers/102-runtime-config-options.md @@ -1,45 +1,8 @@ # Runtime Configuration Options -Runtime configuration options allow you to customize the behavior and resources of your Docker containers when you run them. These options can be helpful in managing container resources, security, and networking. - -Here's a brief summary of some commonly used runtime configuration options: - -- **CPU:** You can limit the CPU usage of a container with the `--cpus` and `--cpu-shares` options. `--cpus` limits the number of CPU cores a container can use, while `--cpu-shares` assigns relative share of CPU time for the container. - - ```bash - docker run --cpus=2 --cpu-shares=512 your-image - ``` - -- **Memory:** You can limit and reserve memory for a container using the `--memory` and `--memory-reservation` options. This can help prevent a container from consuming too many system resources. - - ```bash - docker run --memory=1G --memory-reservation=500M your-image - ``` - -- **User:** By default, containers run as the `root` user. To increase security, you can use the `--user` option to run a container as another user or UID. - - ```bash - docker run --user 1000 your-image - ``` - -- **Read-only root file system:** To prevent unwanted changes to the container file system, you can use the `--read-only` option to mount the root file system as read-only. - - ```bash - docker run --read-only your-image - ``` - -- **Publish Ports:** You can use the `--publish` (or `-p`) option to publish a container's ports to the host system. This allows external systems to access the containerized service. - - ```bash - docker run -p 80:80 your-image - ``` - -- **Hostname and DNS:** You can customize the hostname and DNS settings of a container using the `--hostname` and `--dns` options. - - ```bash - docker run --hostname=my-container --dns=8.8.8.8 your-image - ``` +Docker runtime configuration options give you powerful control over your containers' environments. By tweaking resource limits, network settings, security profiles, and logging drivers, you can optimize performance and enhance security. You'll also find options for setting environment variables, mounting volumes, and overriding default behaviors – all crucial for tailoring containers to your specific needs. For more advanced users, there are tools to adjust kernel capabilities and set restart policies. Whether you're using command-line flags or Docker Compose files, these options help ensure your containers run smoothly and consistently, no matter where they're deployed. Visit the following resources to learn more: - [@official@Docker Documentation](https://docs.docker.com/engine/reference/run/) +- [@article@Docker Runtime Arguments](https://galea.medium.com/docker-runtime-arguments-604593479f45) diff --git a/src/data/roadmaps/docker/content/108-running-containers/index.md b/src/data/roadmaps/docker/content/108-running-containers/index.md index aff40f292..98e83a233 100644 --- a/src/data/roadmaps/docker/content/108-running-containers/index.md +++ b/src/data/roadmaps/docker/content/108-running-containers/index.md @@ -1,38 +1,6 @@ # Running Containers -To start a new container, we use the `docker run` command followed by the image name. The basic syntax is as follows: - -```bash -docker run [options] IMAGE [COMMAND] [ARG...] -``` - -For example, to run the official Nginx image, we would use: - -```bash -docker run -d -p 8080:80 nginx -``` - -To list all running containers, use the `docker container ls` command. - -```bash -docker container ls -a -``` - -To access a running container's shell, use the `docker exec` command: - -```bash -docker exec -it CONTAINER_ID bash -``` - -To stop a running container, use the `docker stop` command followed by the container ID or name: - -```bash -docker container stop CONTAINER_ID -``` - -```bash -docker container rm CONTAINER_ID -``` +Running docker containers is typically done with a simple `docker run` command, which is a combination of the `docker create` and `docker start` commands. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/109-container-security/100-image-security.md b/src/data/roadmaps/docker/content/109-container-security/100-image-security.md index 67beb351f..56e4b3c72 100644 --- a/src/data/roadmaps/docker/content/109-container-security/100-image-security.md +++ b/src/data/roadmaps/docker/content/109-container-security/100-image-security.md @@ -1,18 +1,6 @@ # Image Security -Image security is a crucial aspect of deploying Docker containers in your environment. Ensuring the images you use are secure, up to date, and free of vulnerabilities is essential. In this section, we will review best practices and tools for securing and managing your Docker images. - -## Use Trusted Image Sources - -When pulling images from public repositories, always use trusted, official images as a starting point for your containerized applications. Official images are vetted by Docker and are regularly updated with security fixes. You can find these images on the Docker Hub or other trusted registries. - -## Scan Images for Vulnerabilities - -Regularly scan your images for known vulnerabilities using tools like Clair or Anchore. These tools can detect potential risks in your images and container configurations, allowing you to address them before pushing images to a registry or deploying them in production. - -## Sign and Verify Images - -To ensure the integrity and authenticity of your images, always sign them using Docker Content Trust (DCT). DCT uses digital signatures to guarantee that the images you pull or push are the ones you expect and haven't been tampered with in transit. +Image security is a crucial aspect of deploying Docker containers in your environment. Ensuring the images you use are secure, up to date, and free of vulnerabilities is essential. In this section, we will review best practices and tools for securing and managing your Docker images. When pulling images from public repositories, always use trusted, official images as a starting point for your containerized applications. Official images are vetted by Docker and are regularly updated with security fixes. You can find these images on the Docker Hub or other trusted registries. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/109-container-security/101-runtime-security.md b/src/data/roadmaps/docker/content/109-container-security/101-runtime-security.md index 701b26732..1db0fd3ae 100644 --- a/src/data/roadmaps/docker/content/109-container-security/101-runtime-security.md +++ b/src/data/roadmaps/docker/content/109-container-security/101-runtime-security.md @@ -1,21 +1,6 @@ # Runtime Security -Runtime security focuses on ensuring the security of Docker containers while they are running in production. This is a critical aspect of container security, as threats may arrive or be discovered after your containers have been deployed. - -- Ensure that your containers are regularly scanned for vulnerabilities, both in the images themselves and in the runtime environment. -- Isolate your containers' resources, such as CPU, memory, and network, to prevent a single compromised container from affecting other containers or the host system. -- Maintain audit logs of container activity to help with incident response, troubleshooting, and compliance. - -## Least Privilege Principle - -- Run your containers as a non-root user whenever possible. -- Avoid running privileged containers, which have access to all of the host's resources. -- Use Linux capabilities to strip away unnecessary permissions from your containers. - -## Read-only Filesystems - -- Use the `--read-only` flag when starting your containers to make their filesystems read-only. -- Implement volume mounts or `tmpfs` mounts for locations that require write access. +Runtime security in Docker focuses on ensuring the safety and integrity of containers during their execution, safeguarding against vulnerabilities and malicious activities that could arise while the containerized application is running. This involves monitoring container behavior for anomalies, implementing access controls to limit permissions, and employing tools to detect and respond to suspicious activity in real time. Effective runtime security also ensures that only verified images are deployed and continuously audits the system to maintain compliance, thereby providing a robust defense layer to prevent exploits and maintain the desired security posture throughout the container lifecycle. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/109-container-security/index.md b/src/data/roadmaps/docker/content/109-container-security/index.md index aa8ce1ee2..35f1a35ce 100644 --- a/src/data/roadmaps/docker/content/109-container-security/index.md +++ b/src/data/roadmaps/docker/content/109-container-security/index.md @@ -1,14 +1,6 @@ # Container Security -- Container security is a critical aspect of implementing and managing container technologies like Docker. It encompasses a set of practices, tools, and technologies designed to protect containerized applications and the infrastructure they run on. - -- Isolation is crucial for ensuring the robustness and security of containerized environments. Containers should be isolated from each other and the host system, to prevent unauthorized access and mitigate the potential damage in case an attacker manages to compromise one container. - -- Implementing best practices and specific security patterns during the development, deployment, and operation of containers is essential to maintaining a secure environment. - -- Access controls should be applied to both container management and container data, in order to protect sensitive information and maintain the overall security posture. - -- Containers can be vulnerable to attacks, as their images depend on a variety of packages and libraries. To mitigate these risks, vulnerability management should be included in the container lifecycle. +Container security encompasses a broad set of practices and tools aimed at protecting containerized applications from development through deployment and runtime. It involves securing the container image, ensuring that only trusted and non-vulnerable code is used, implementing strong access controls for container environments, and configuring containers to follow the principle of least privilege. Additionally, it includes monitoring for unexpected behavior, protecting communication between containers, and maintaining the host environment’s security. Effective container security integrates seamlessly into DevSecOps workflows to provide continuous visibility and protection across the container lifecycle without disrupting development speed or agility. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/110-docker-cli/100-images.md b/src/data/roadmaps/docker/content/110-docker-cli/100-images.md index 06df99d94..00047aceb 100644 --- a/src/data/roadmaps/docker/content/110-docker-cli/100-images.md +++ b/src/data/roadmaps/docker/content/110-docker-cli/100-images.md @@ -1,23 +1,8 @@ # Docker Images -Docker images are lightweight, standalone, and executable packages that include everything needed to run an application. These images contain all necessary dependencies, libraries, runtime, system tools, and code to enable the application to run consistently across different environments. +Docker images are lightweight, standalone, and executable software packages that include everything needed to run a piece of software, such as the application code, runtime, libraries, and system tools. They serve as the blueprint for creating containers and are built in layers, where each layer represents a file system change, allowing for efficient storage and distribution. Docker images can be stored in and pulled from container registries like Docker Hub, enabling developers to share, deploy, and version their applications consistently across different environments, ensuring reproducibility and simplifying the process of managing dependencies. -## Working with Docker Images +Learn more from the following resources: -Docker CLI provides several commands to manage and work with Docker images. Some essential commands include: - -- `docker image ls`: List all available images on your local system. -- `docker build`: Build an image from a Dockerfile. -- `docker image rm`: Remove one or more images. -- `docker pull`: Pull an image from a registry (e.g., Docker Hub) to your local system. -- `docker push`: Push an image to a repository. - -For example, to pull the official Ubuntu image from Docker Hub, you can run the following command: - -```bash -docker pull ubuntu:latest -``` - -## Sharing Images - -Docker images can be shared and distributed using container registries, such as Docker Hub, Google Container Registry, or Amazon Elastic Container Registry (ECR). Once your images are pushed to a registry, others can easily access and utilize them. +- [@article@What’s the Difference Between Docker Images and Containers?](https://aws.amazon.com/compare/the-difference-between-docker-images-and-containers/) +- [@video@What is an image?](https://www.youtube.com/watch?v=NyvT9REqLe4) \ No newline at end of file diff --git a/src/data/roadmaps/docker/content/110-docker-cli/101-containers.md b/src/data/roadmaps/docker/content/110-docker-cli/101-containers.md index e6c578faf..75f6787e7 100644 --- a/src/data/roadmaps/docker/content/110-docker-cli/101-containers.md +++ b/src/data/roadmaps/docker/content/110-docker-cli/101-containers.md @@ -1,22 +1,6 @@ # Containers -Containers can be thought of as lightweight, stand-alone, and executable software packages that include everything needed to run a piece of software, including the code, runtime, libraries, environment variables, and config files. Containers isolate software from its surroundings, ensuring that it works uniformly across different environments. - -## Working with Containers using Docker CLI - -Docker CLI offers several commands to help you create, manage, and interact with containers. Some common commands include: - -- `docker run`: Used to create and start a new container. - -- `docker container ls`: Lists running containers. - -- `docker container stop`: Stops a running container. - -- `docker container rm`: Removes a stopped container. - -- `docker exec`: Executes a command inside a running container. - -- `docker logs`: Fetches the logs of a container, useful for debugging issues. +Containers are isolated, lightweight environments that run applications using a shared operating system kernel, ensuring consistency and portability across different computing environments. They encapsulate everything needed to run an application, such as code, dependencies, and configurations, making it easy to move and run the containerized application anywhere. Using the Docker CLI, you can create, start, stop, and manage containers with commands like `docker run`, `docker ps` to list running containers, `docker stop` to halt them, and `docker exec` to interact with them in real time. The CLI provides a powerful interface for developers to build, control, and debug containers effortlessly, allowing for streamlined development and operational workflows. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/110-docker-cli/102-networks.md b/src/data/roadmaps/docker/content/110-docker-cli/102-networks.md index 4972eb3eb..b8d63fe1b 100644 --- a/src/data/roadmaps/docker/content/110-docker-cli/102-networks.md +++ b/src/data/roadmaps/docker/content/110-docker-cli/102-networks.md @@ -1,19 +1,9 @@ # Docker Networks -Docker networks provide an essential way of managing container communication. It allows containers to talk to each other and to the host machine using various network drivers. By understanding and utilizing different types of network drivers, you can design container networks to accommodate specific scenarios or application requirements. - -## Managing Docker Networks - -Docker CLI provides various commands to manage the networks. Here are a few useful commands: - -- List all networks: `docker network ls` -- Inspect a network: `docker network inspect ` -- Create a new network: `docker network create --driver ` -- Connect containers to a network: `docker network connect ` -- Disconnect containers from a network: `docker network disconnect ` -- Remove a network: `docker network rm ` +Docker networks enable containers to communicate with each other and with external systems, providing the necessary connectivity for microservices architectures. By default, Docker offers several network types such as bridge, host, and overlay, each suited for different use cases like isolated environments, high-performance scenarios, or multi-host communication. Using the Docker CLI, you can create, inspect, and manage networks with commands like `docker network create` to define custom networks, `docker network ls` to list existing networks, and `docker network connect` to attach a container to a network. This flexibility allows developers to control how containers interact, ensuring secure and efficient communication across distributed applications. Visit the following resources to learn more: - [@official@Docker Networks](https://docs.docker.com/network/) - [@official@Docker Network Commands](https://docs.docker.com/engine/reference/commandline/network/) +- [@video@Docker Networking](https://www.youtube.com/watch?v=bKFMS5C4CG0) diff --git a/src/data/roadmaps/docker/content/110-docker-cli/102-volumes.md b/src/data/roadmaps/docker/content/110-docker-cli/102-volumes.md index 4594ad7ee..dd6dfc2c8 100644 --- a/src/data/roadmaps/docker/content/110-docker-cli/102-volumes.md +++ b/src/data/roadmaps/docker/content/110-docker-cli/102-volumes.md @@ -1,30 +1,6 @@ # Docker Volumes -Docker volumes are a mechanism for persisting data generated by and used by Docker containers. They allow you to separate the data from the container itself, making it easy to backup, migrate, and manage your persistent data. - -## Types of Volumes - -There are three types of volumes in Docker: - -- **Host Volumes** -- **Anonymous Volumes** -- **Named Volumes** - -## Volume Management with Docker CLI - -Docker CLI provides various commands to manage volumes: - -- `docker volume create`: Creates a new volume with a given name. -- `docker volume ls`: Lists all volumes on the system. -- `docker volume inspect`: Provides detailed information about a specific volume. -- `docker volume rm`: Removes a volume. -- `docker volume prune`: Removes all unused volumes. - -To use a volume in a container, you can use the `-v` or `--volume` flag during the `docker run` command. For example: - -```bash -docker run -d --name my-container -v my-named-volume:/var/lib/data my-image -``` +Docker volumes are persistent storage solutions used to manage and store data outside the container’s filesystem, ensuring data remains intact even if the container is deleted or recreated. They are ideal for storing application data, logs, and configuration files that need to persist across container restarts and updates. With the Docker CLI, you can create and manage volumes using commands like `docker volume create` to define a new volume, `docker volume ls` to list all volumes, and `docker run -v` to mount a volume to a specific container. This approach helps maintain data integrity, simplifies backup processes, and supports data sharing between containers, making volumes a core part of stateful containerized applications. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/110-docker-cli/index.md b/src/data/roadmaps/docker/content/110-docker-cli/index.md index 5a191ba97..43fbbb67e 100644 --- a/src/data/roadmaps/docker/content/110-docker-cli/index.md +++ b/src/data/roadmaps/docker/content/110-docker-cli/index.md @@ -1,45 +1,6 @@ # Docker CLI -The Docker CLI (Command Line Interface) is a powerful tool that allows you to interact with and manage Docker containers, images, volumes, and networks. It provides a wide range of commands for users to create, run, and manage Docker containers and other Docker resources in their development and production workflows. - -In this topic, we'll dive into some key aspects of Docker CLI, covering the following: - -## 1. Installation - -To get started with Docker CLI, you need to have Docker installed on your machine. You can follow the official installation guide for your respective operating system from the [Docker documentation](https://docs.docker.com/get-docker/). - -## 2. Basic Commands - -Here are some essential Docker CLI commands to familiarize yourself with: - -- `docker run`: Create and start a container from a Docker image -- `docker container ls`: List running containers -- `docker image ls`: List all available images on your system -- `docker pull`: Pull an image from Docker Hub or another registry -- `docker push`: Push an image to Docker Hub or another registry -- `docker build`: Build an image from a Dockerfile -- `docker exec`: Run a command in a running container -- `docker logs`: Show logs of a container - -## 3. Docker Run Options - -`docker run` is one of the most important commands in the Docker CLI. You can customize the behavior of a container using various options, such as: - -- `-d, --detach`: Run the container in the background -- `-e, --env`: Set environment variables for the container -- `-v, --volume`: Bind-mount a volume -- `-p, --publish`: Publish the container's port to the host -- `--name`: Assign a name to the container -- `--restart`: Specify the container's restart policy -- `--rm`: Automatically remove the container when it exits - -## 4. Dockerfile - -A Dockerfile is a script containing instructions to build a Docker image. You can use the Docker CLI to build, update, and manage Docker images using a Dockerfile. - -## 5. Docker Compose - -Docker Compose is a CLI tool for defining and managing multi-container Docker applications using YAML files. It works together with the Docker CLI, offering a consistent way to manage multiple containers and their dependencies. +The Docker Command Line Interface (CLI) is a powerful tool used to interact with the Docker engine, enabling developers and operators to build, manage, and troubleshoot containers and related resources. With a wide range of commands, the Docker CLI provides control over all aspects of Docker, including creating and managing containers (`docker run`, `docker stop`), building images (`docker build`), managing networks (`docker network`), handling storage (`docker volume`), and inspecting system status (`docker ps`, `docker info`). Its intuitive syntax and flexibility allow users to automate complex workflows, streamline development processes, and maintain containerized applications with ease, making it a foundational utility for Docker management and orchestration. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/111-developer-experience/102-tests.md b/src/data/roadmaps/docker/content/111-developer-experience/102-tests.md index efcf2267e..5bc729eca 100644 --- a/src/data/roadmaps/docker/content/111-developer-experience/102-tests.md +++ b/src/data/roadmaps/docker/content/111-developer-experience/102-tests.md @@ -1,6 +1,6 @@ # Tests -We want to run tests in an environment as similar as possible to production, so it only makes sense to do so inside of our containers! +We want to run tests in an environment as similar as possible to production, so it only makes sense to do so inside of our containers! This can include unit tests, integration tests, and end-to-end tests, all run within Docker containers to simulate real-world scenarios while avoiding interference from external dependencies. Using Docker CLI and tools like Docker Compose, you can create isolated testing environments, run tests in parallel, and spin up and tear down the necessary infrastructure automatically. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/111-developer-experience/index.md b/src/data/roadmaps/docker/content/111-developer-experience/index.md index 5e26ad57c..01a527711 100644 --- a/src/data/roadmaps/docker/content/111-developer-experience/index.md +++ b/src/data/roadmaps/docker/content/111-developer-experience/index.md @@ -1,14 +1,6 @@ # Developer Experience -So far we have only discussed using docker for deploying applications. However, docker is also a great tool for developing applications. There are a few different recommendations that you can adopt to improve your development experience. - -- Use `docker-compose` in your application for ease of development. -- Use bind mounts to mount the code from your local into the container filesystem to avoid having to rebuild the container image with every single change. -- For auto-reloading, you can use tools like [vite](https://vitejs.dev/) for client side, [nodemon](https://nodemon.io/) for nodejs or [air](https://github.com/cosmtrek/air) for golang. -- You should also provide a way to debug your applications. For example, look into [delve](https://github.com/go-delve/delve) for Go, enable debugging in node.js using --inspect flag etc. It doesn't matter what you use, but the point is that you should have a way to debug your application running inside the container. -- You should have a way to run tests inside the container. For example, you could have a separate docker-compose file for running tests. -- You should have a CI pipeline for production images. -- Ephemeral environment for each pull request +Docker significantly enhances the developer experience by providing a consistent, isolated environment for building, testing, and running applications, eliminating the “it works on my machine” problem. With Docker, developers can package their applications and dependencies into portable containers, ensuring consistency across different environments, from local development to staging and production. The simplified setup and reproducibility of environments accelerate onboarding, minimize conflicts, and allow developers to focus on coding rather than troubleshooting configurations. Moreover, tools like Docker Compose enable quick orchestration of complex multi-container applications, making it easier to prototype, iterate, and collaborate, ultimately streamlining the entire development lifecycle. For more details and practical examples: diff --git a/src/data/roadmaps/docker/content/112-deploying-containers/100-paas-options.md b/src/data/roadmaps/docker/content/112-deploying-containers/100-paas-options.md index a275fcee2..ab6c8214e 100644 --- a/src/data/roadmaps/docker/content/112-deploying-containers/100-paas-options.md +++ b/src/data/roadmaps/docker/content/112-deploying-containers/100-paas-options.md @@ -1,22 +1,6 @@ # PaaS Options for Deploying Containers -Platform as a Service (PaaS) is a cloud computing model that simplifies the deployment and management of containers. It abstracts away the underlying infrastructure allowing developers to focus on creating and running their applications. Given below are some of the popular PaaS options for deploying containers: - -## Amazon Elastic Container Service - -is a fully managed container orchestration service offered by Amazon Web Services. It allows you to run containers without having to manage servers or clusters. - -## Google Cloud Run - -Google Cloud Run is a fully-managed compute platform by Google that allows you to run stateless containers. It is designed for running applications that can scale automatically, enabling you to pay only for the resources you actually use. - -## IBM Cloud Code Engine - -IBM Cloud Code Engine is a fully managed, serverless platform by IBM that runs your containerized applications and source code. It supports deploying, running, and auto-scaling applications on Kubernetes. - -## Microsoft Azure Container Instances - -Microsoft Azure Container Instances is a service offered by Microsoft Azure that simplifies the deployment of containers using a serverless model. You can run containers without managing the underlying hosting infrastructure or container orchestration. +Platform-as-a-Service (PaaS) options for deploying containers provide a simplified and managed environment where developers can build, deploy, and scale containerized applications without worrying about the underlying infrastructure. Popular PaaS offerings include Google Cloud Run, Azure App Service, AWS Elastic Beanstalk, and Heroku, which abstract away container orchestration complexities while offering automated scaling, easy integration with CI/CD pipelines, and monitoring capabilities. These platforms support rapid development and deployment by allowing teams to focus on application logic rather than server management, providing a seamless way to run containers in production with minimal operational overhead. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/112-deploying-containers/101-kubernetes.md b/src/data/roadmaps/docker/content/112-deploying-containers/101-kubernetes.md index 6685ac3c5..b76025f3c 100644 --- a/src/data/roadmaps/docker/content/112-deploying-containers/101-kubernetes.md +++ b/src/data/roadmaps/docker/content/112-deploying-containers/101-kubernetes.md @@ -1,22 +1,6 @@ # Kubernetes -Kubernetes (K8s) is an open-source orchestration platform used for automating the deployment, scaling, and management of containerized applications. While Docker provides the container runtime environment, Kubernetes extends that functionality with a powerful and flexible management framework. - -## Key Concepts - -- **Cluster**: A set of machines, called nodes, that run containerized applications in Kubernetes. A cluster can have multiple nodes for load balancing and fault tolerance. - -- **Node**: A worker machine (physical, virtual, or cloud-based) that runs containers as part of the Kubernetes cluster. Each node is managed by the Kubernetes master. - -- **Pod**: The smallest and simplest unit in the Kubernetes object model. A pod represents a single instance of a running process and typically wraps one or more containers (e.g., a Docker container). - -- **Service**: An abstraction that defines a logical set of pods and a policy for accessing them. Services provide load balancing, monitoring, and networking capabilities for the underlying pods. - -- **Deployment**: A high-level object that describes the desired state of a containerized application. Deployments manage the process of creating, updating, and scaling pods based on a specified container image. - -## Kubernetes vs. Docker Swarm - -While both Kubernetes and Docker Swarm are orchestration platforms, they differ in terms of complexity, scalability, and ease of use. Kubernetes provides more advanced features, better scalability, and higher fault tolerance, but has a steeper learning curve. Docker Swarm, on the other hand, is simpler and more straightforward but lacks some advanced functionality. +Kubernetes is an open-source container orchestration platform designed to automate the deployment, scaling, and management of containerized applications. It provides a robust framework for handling complex container workloads by organizing containers into logical units called pods, managing service discovery, load balancing, and scaling through declarative configurations. Kubernetes enables teams to deploy containers across clusters of machines, ensuring high availability and fault tolerance through self-healing capabilities like automatic restarts, replacements, and rollback mechanisms. With its extensive ecosystem and flexibility, Kubernetes has become the de facto standard for running large-scale, distributed applications, simplifying operations and improving the reliability of containerized workloads. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/112-deploying-containers/102-docker-swarm.md b/src/data/roadmaps/docker/content/112-deploying-containers/102-docker-swarm.md index 1299ed140..09959514c 100644 --- a/src/data/roadmaps/docker/content/112-deploying-containers/102-docker-swarm.md +++ b/src/data/roadmaps/docker/content/112-deploying-containers/102-docker-swarm.md @@ -1,16 +1,6 @@ # Docker Swarm -Docker Swarm is a container orchestration tool that enables users to manage multiple Docker nodes and deploy services across them. It is a native clustering and orchestration feature built into the Docker Engine, which allows you to create and manage a swarm of Docker nodes, referred to as a _Swarm_. - -## Advantages - -- **Scalability**: Docker Swarm allows you to scale services horizontally by easily increasing or decreasing the number of replicas. - -- **Load balancing**: Swarm ensures that the nodes within the swarm evenly handle container workloads by providing internal load balancing. - -- **Service discovery**: Docker Swarm allows you to automatically discover other services in the swarm by assigning a unique DNS entry to each service. - -- **Rolling updates**: Swarm enables you to perform rolling updates with near-zero downtime, easing the process of deploying new versions of your applications. +Docker Swarm is Docker’s native container orchestration tool that allows users to deploy, manage, and scale containers across a cluster of Docker hosts. By transforming a group of Docker nodes into a single, unified cluster, Swarm provides high availability, load balancing, and automated container scheduling using simple declarative commands. With features like service discovery, rolling updates, and integrated security through TLS encryption, Docker Swarm offers an approachable alternative to more complex orchestrators like Kubernetes. Its tight integration with the Docker CLI and ease of setup make it a suitable choice for small to medium-sized deployments where simplicity and straightforward management are priorities. Visit the following resources to learn more: diff --git a/src/data/roadmaps/docker/content/112-deploying-containers/index.md b/src/data/roadmaps/docker/content/112-deploying-containers/index.md index e224cc372..46294240e 100644 --- a/src/data/roadmaps/docker/content/112-deploying-containers/index.md +++ b/src/data/roadmaps/docker/content/112-deploying-containers/index.md @@ -2,22 +2,6 @@ Deploying containers is a crucial step in using Docker and containerization to manage applications more efficiently, easily scale, and ensure consistent performance across environments. This topic will give you an overview of how to deploy Docker containers to create and run your applications. -## Benefits of Container Deployment - -- **Consistency**: Containers ensure your application runs the same way across different environments, solving the "it works on my machine" issue. -- **Isolation**: Each container operates independently, avoiding conflicts and allowing better service management. -- **Scalability**: Easily scale applications by running multiple instances and distributing the workload. -- **Version Control**: Manage different versions and roll back to previous versions if needed. - -## Steps to Deploy Containers - -- **Create a Dockerfile**: Script that defines the image with base image, code, dependencies, and configurations. -- **Build the Docker Image**: Use `docker build` to create an image from the Dockerfile. -- **Push the Docker Image**: Push the image to a registry using `docker push`. -- **Deploy the Container**: Use `docker run` to start a container from the image. -- **Manage the Container**: Use commands like `docker ps`, `docker stop`, and `docker rm` for container management. -- **Monitor and Log**: Use `docker logs` for log viewing and `docker stats` for performance monitoring. - Visit the following resources to learn more: - [@official@Docker Deployment](https://docs.docker.com/get-started/deployment/) diff --git a/src/data/roadmaps/nodejs/content/javascript-errors@Wg7KSpAPxjeFMxC6PBnHO.md b/src/data/roadmaps/nodejs/content/javascript-errors@Wg7KSpAPxjeFMxC6PBnHO.md index 85dfc3454..5f1d72d26 100644 --- a/src/data/roadmaps/nodejs/content/javascript-errors@Wg7KSpAPxjeFMxC6PBnHO.md +++ b/src/data/roadmaps/nodejs/content/javascript-errors@Wg7KSpAPxjeFMxC6PBnHO.md @@ -14,4 +14,5 @@ JavaScript has six types of errors that may occur during the execution of the sc Visit the following resources to learn more: - [@article@Error Types in JavaScript](https://blog.bitsrc.io/types-of-native-errors-in-javascript-you-must-know-b8238d40e492) +- [@article@JavaScript error reference - MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors) - [@feed@Explore top posts about JavaScript](https://app.daily.dev/tags/javascript?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/system-errors@05YY-AhLKzn4Ypr4eow5E.md b/src/data/roadmaps/nodejs/content/system-errors@05YY-AhLKzn4Ypr4eow5E.md index 4de161606..2811994b6 100644 --- a/src/data/roadmaps/nodejs/content/system-errors@05YY-AhLKzn4Ypr4eow5E.md +++ b/src/data/roadmaps/nodejs/content/system-errors@05YY-AhLKzn4Ypr4eow5E.md @@ -22,3 +22,4 @@ Below are the system errors commonly encountered when writing a Node.js program Visit the following resources to learn more: - [@official@Node.js Errors - Official Docs](https://nodejs.org/api/errors.html#errors_class_systemerror) +- [@Article@16 Common Errors in Node.js and How to Fix Them](https://betterstack.com/community/guides/scaling-nodejs/nodejs-errors/) diff --git a/src/data/roadmaps/python/content/nose@SSnzpijHLO5_l7DNEoMfx.md b/src/data/roadmaps/python/content/nose@SSnzpijHLO5_l7DNEoMfx.md index a43fed201..dba7331ce 100644 --- a/src/data/roadmaps/python/content/nose@SSnzpijHLO5_l7DNEoMfx.md +++ b/src/data/roadmaps/python/content/nose@SSnzpijHLO5_l7DNEoMfx.md @@ -1,6 +1,6 @@ # Nose -Nose is another opensource testing framework that extends `unittest` to provide a more flexible testing framework. +Nose is another opensource testing framework that extends `unittest` to provide a more flexible testing framework. Note that Nose is no longer maintained and `pytest` is considered the replacement. Visit the following resources to learn more: diff --git a/src/data/roadmaps/react/content/component-lifecycle@8OBlgDRUg-CTgDXY-QHyO.md b/src/data/roadmaps/react/content/component-lifecycle@8OBlgDRUg-CTgDXY-QHyO.md index 6306bcb99..8461d9f23 100644 --- a/src/data/roadmaps/react/content/component-lifecycle@8OBlgDRUg-CTgDXY-QHyO.md +++ b/src/data/roadmaps/react/content/component-lifecycle@8OBlgDRUg-CTgDXY-QHyO.md @@ -6,9 +6,9 @@ It is not recommended to use lifecycle methods manually. Instead, use the useEff Visit the following resources to learn more: -- [@official@Lifecycle of Reactive Effects](https://react.dev/learn/lifecycle-of-reactive-effectsv) +- [@official@Lifecycle of Reactive Effects](https://react.dev/learn/lifecycle-of-reactive-effects) - [@official@Class Component](https://react.dev/reference/react/Component) - [@article@React component lifecycle: React lifecycle methods & hooks](https://tsh.io/blog/react-component-lifecycle-methods-vs-hooks/) - [@article@The React lifecycle: methods and hooks explained](https://retool.com/blog/the-react-lifecycle-methods-and-hooks-explained#react-hooks-and-the-component-lifecycle) - [@article@React Lifecycle: Methods & Hooks In Detail](https://www.bairesdev.com/blog/react-lifecycle-methods-hooks/) -- [@article@lifecycle diagram](https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/) \ No newline at end of file +- [@article@lifecycle diagram](https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/) diff --git a/src/data/roadmaps/react/content/jest@opa61u9gYgSpoPtxp58wu.md b/src/data/roadmaps/react/content/jest@opa61u9gYgSpoPtxp58wu.md index 08c4219bc..a8ea9f241 100644 --- a/src/data/roadmaps/react/content/jest@opa61u9gYgSpoPtxp58wu.md +++ b/src/data/roadmaps/react/content/jest@opa61u9gYgSpoPtxp58wu.md @@ -6,3 +6,4 @@ Visit the following resources to learn more: - [@official@Jest Website](https://jestjs.io/) - [@feed@Explore top posts about Jest](https://app.daily.dev/tags/jest?ref=roadmapsh) +- [@article@Testing JavaScript with Jest on Vultr](https://developer.mozilla.org/en-US/blog/test-javascript-with-jest-on-vultr/) diff --git a/src/helper/number.ts b/src/helper/number.ts index fc67f117a..f62d25dd3 100644 --- a/src/helper/number.ts +++ b/src/helper/number.ts @@ -1,9 +1,12 @@ export function getPercentage(portion: number, total: number): string { - if (total <= 0 || portion <= 0) { - return '0'; - } else if (portion > total) { - return '100'; + if (portion <= 0 || total <= 0) { + return '0.00'; + } + + if (portion >= total) { + return '100.00'; } - return ((portion / total) * 100).toFixed(2); + const percentage = (portion / total) * 100; + return percentage.toFixed(2); } diff --git a/src/lib/browser.ts b/src/lib/browser.ts index 425e27cc9..ffb39031c 100644 --- a/src/lib/browser.ts +++ b/src/lib/browser.ts @@ -1,3 +1,65 @@ +type UtmParams = Partial<{ + utmSource: string; + utmMedium: string; + utmCampaign: string; + utmContent: string; + utmTerm: string; +}>; + +export function getUrlUtmParams(): UtmParams { + if (typeof window === 'undefined') { + return {}; + } + + const utmParams = new URLSearchParams(window.location.search); + const utmSource = utmParams.get('utm_source') ?? undefined; + const utmMedium = utmParams.get('utm_medium') ?? undefined; + const utmCampaign = utmParams.get('utm_campaign') ?? undefined; + const utmContent = utmParams.get('utm_content') ?? undefined; + const utmTerm = utmParams.get('utm_term') ?? undefined; + + if (!utmSource || !utmCampaign) { + return {}; + } + + return { + utmSource: utmCampaign ? utmSource.toLowerCase() : undefined, + utmMedium: utmMedium ? utmMedium.toLowerCase() : undefined, + utmCampaign: utmCampaign ? utmCampaign.toLowerCase() : undefined, + utmContent: utmContent ? utmContent.toLowerCase() : undefined, + utmTerm: utmTerm ? utmTerm.toLowerCase() : undefined, + }; +} + +export function triggerUtmRegistration() { + const utmParams = getStoredUtmParams(); + console.log(utmParams); + if (!utmParams.utmSource) { + return; + } + + localStorage.removeItem('utm_params'); + + window.fireEvent({ + category: 'UserRegistration', + action: `Registration: ${utmParams.utmSource || 'unknown'}-${utmParams.utmCampaign || 'unknown'}`, + label: `Registration: ${utmParams.utmSource || 'unknown'}-${utmParams.utmCampaign || 'unknown'}`, + }); +} + +export function getStoredUtmParams(): UtmParams { + if (typeof window === 'undefined') { + return {}; + } + + const utmParams = localStorage.getItem('utm_params'); + if (!utmParams) { + return {}; + } + + return JSON.parse(utmParams); +} + export function getUrlParams() { if (typeof window === 'undefined') { return {};