diff --git a/.astro/settings.json b/.astro/settings.json index d6953d35d..617fbcf26 100644 --- a/.astro/settings.json +++ b/.astro/settings.json @@ -3,6 +3,6 @@ "enabled": false }, "_variables": { - "lastUpdateCheck": 1741697790683 + "lastUpdateCheck": 1742812122664 } } \ No newline at end of file diff --git a/astro.config.mjs b/astro.config.mjs index 89e8133ef..a6ac970c5 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -11,6 +11,17 @@ import react from '@astrojs/react'; // https://astro.build/config export default defineConfig({ site: 'https://roadmap.sh/', + redirects: { + '/devops/devops-engineer': { + status: 301, + destination: '/devops', + }, + }, + vite: { + server: { + allowedHosts: ['roadmap.sh', 'port3k.kamranahmed.info'], + }, + }, markdown: { shikiConfig: { theme: 'dracula', diff --git a/public/pdfs/roadmaps/cpp.pdf b/public/pdfs/roadmaps/cpp.pdf index 75f7361d1..842a8952a 100644 Binary files a/public/pdfs/roadmaps/cpp.pdf and b/public/pdfs/roadmaps/cpp.pdf differ diff --git a/public/roadmap-content/ai-engineer.json b/public/roadmap-content/ai-engineer.json index 72880ac2e..fa510f1e7 100644 --- a/public/roadmap-content/ai-engineer.json +++ b/public/roadmap-content/ai-engineer.json @@ -30,7 +30,7 @@ "type": "article" }, { - "title": "AI engineers: What they do and how to become one", + "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" } @@ -162,17 +162,17 @@ "description": "Retrieval-Augmented Generation (RAG) is an AI approach that combines information retrieval with language generation to create more accurate, contextually relevant outputs. It works by first retrieving relevant data from a knowledge base or external source, then using a language model to generate a response based on that information. This method enhances the accuracy of generative models by grounding their outputs in real-world data, making RAG ideal for tasks like question answering, summarization, and chatbots that require reliable, up-to-date information.\n\nLearn more from the following resources:", "links": [ { - "title": "What is Retrieval Augmented Generation (RAG)?", + "title": "What is Retrieval Augmented Generation (RAG)? - Datacamp", "url": "https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag", "type": "article" }, { - "title": "What is Retrieval-Augmented Generation? Google", + "title": "What is Retrieval-Augmented Generation? - Google", "url": "https://cloud.google.com/use-cases/retrieval-augmented-generation", "type": "article" }, { - "title": "What is Retrieval-Augmented Generation? IBM", + "title": "What is Retrieval-Augmented Generation? - IBM", "url": "https://www.youtube.com/watch?v=T-D1OfcDW1M", "type": "video" } @@ -183,7 +183,7 @@ "description": "Prompt engineering is the process of crafting effective inputs (prompts) to guide AI models, like GPT, to generate desired outputs. It involves strategically designing prompts to optimize the model’s performance by providing clear instructions, context, and examples. Effective prompt engineering can improve the quality, relevance, and accuracy of responses, making it essential for applications like chatbots, content generation, and automated support. By refining prompts, developers can better control the model’s behavior, reduce ambiguity, and achieve more consistent results, enhancing the overall effectiveness of AI-driven systems.\n\nLearn more from the following resources:", "links": [ { - "title": "Visit DedicatedPrompt Engineering Roadmap", + "title": "Visit Dedicated Prompt Engineering Roadmap", "url": "https://roadmap.sh/prompt-engineering", "type": "article" }, @@ -204,7 +204,7 @@ "type": "article" }, { - "title": "Ai agents and their types", + "title": "AI Agents and Their Types", "url": "https://play.ht/blog/ai-agents-use-cases/", "type": "article" }, @@ -359,7 +359,7 @@ "description": "Anthropic's Claude is an AI language model designed to facilitate safe and scalable AI systems. Named after Claude Shannon, the father of information theory, Claude focuses on responsible AI use, emphasizing safety, alignment with human intentions, and minimizing harmful outputs. Built as a competitor to models like OpenAI's GPT, Claude is designed to handle natural language tasks such as generating text, answering questions, and supporting conversations, with a strong focus on aligning AI behavior with user goals while maintaining transparency and avoiding harmful biases.\n\nLearn more from the following resources:", "links": [ { - "title": "Claude Website", + "title": "Claude", "url": "https://claude.ai", "type": "article" }, @@ -439,7 +439,7 @@ "description": "Mistral AI is a company focused on developing open-weight, large language models (LLMs) to provide high-performance AI solutions. Mistral aims to create models that are both efficient and versatile, making them suitable for a wide range of natural language processing tasks, including text generation, translation, and summarization. By releasing open-weight models, Mistral promotes transparency and accessibility, allowing developers to customize and deploy AI solutions more flexibly compared to proprietary models.\n\nLearn more from the resources:", "links": [ { - "title": "Minstral AI Website", + "title": "Mistral AI", "url": "https://mistral.ai/", "type": "article" }, @@ -455,7 +455,7 @@ "description": "Cohere is an AI platform that specializes in natural language processing (NLP) by providing large language models designed to help developers build and deploy text-based applications. Cohere’s models are used for tasks such as text classification, language generation, semantic search, and sentiment analysis. Unlike some other providers, Cohere emphasizes simplicity and scalability, offering an easy-to-use API that allows developers to fine-tune models on custom data for specific use cases. Additionally, Cohere provides robust multilingual support and focuses on ensuring that its NLP solutions are both accessible and enterprise-ready, catering to a wide range of industries.\n\nLearn more from the following resources:", "links": [ { - "title": "Cohere Website", + "title": "Cohere", "url": "https://cohere.com/", "type": "article" }, @@ -482,7 +482,7 @@ "description": "The OpenAI API provides access to powerful AI models like GPT, Codex, DALL-E, and Whisper, enabling developers to integrate capabilities such as text generation, code assistance, image creation, and speech recognition into their applications via a simple, scalable interface.\n\nLearn more from the following resources:", "links": [ { - "title": "Open AI API", + "title": "OpenAI API", "url": "https://openai.com/api/", "type": "article" } @@ -514,7 +514,7 @@ "type": "article" }, { - "title": "How to write AI prompts", + "title": "How to Write AI prompts", "url": "https://www.descript.com/blog/article/how-to-write-ai-prompts", "type": "article" }, @@ -626,7 +626,7 @@ "type": "article" }, { - "title": "What is a prompt injection attack?", + "title": "What is a Prompt Injection Attack?", "url": "https://www.wiz.io/academy/prompt-injection-attack", "type": "article" } @@ -706,7 +706,7 @@ "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:", "links": [ { - "title": "Sending end-user IDs - OpenAi", + "title": "Sending End-user IDs - OpenAI", "url": "https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids", "type": "article" } @@ -792,7 +792,7 @@ "description": "Open-source large language models (LLMs) are models whose source code and architecture are publicly available for use, modification, and distribution. They are built using machine learning algorithms that process and generate human-like text, and being open-source, they promote transparency, innovation, and community collaboration in their development and application.\n\nLearn more from the following resources:", "links": [ { - "title": "The best large language models (LLMs) in 2024", + "title": "The Best Large Language Models (LLMs) in 2024", "url": "https://zapier.com/blog/best-llm/", "type": "article" }, @@ -813,7 +813,7 @@ "type": "course" }, { - "title": "Hugging Face Website", + "title": "Hugging Face", "url": "https://huggingface.co", "type": "article" }, @@ -898,7 +898,7 @@ "description": "Ollama is a platform that offers large language models (LLMs) designed to run locally on personal devices, enabling AI functionality without relying on cloud services. It focuses on privacy, performance, and ease of use by allowing users to deploy models directly on laptops, desktops, or edge devices, providing fast, offline AI capabilities. With tools like the Ollama SDK, developers can integrate these models into their applications for tasks such as text generation, summarization, and more, benefiting from reduced latency, greater data control, and seamless local processing.\n\nLearn more from the following resources:", "links": [ { - "title": "Ollama Website", + "title": "Ollama", "url": "https://ollama.com/", "type": "article" }, @@ -983,12 +983,12 @@ "description": "In the context of embeddings, recommendation systems use vector representations to capture similarities between items, such as products or content. By converting items and user preferences into embeddings, these systems can measure how closely related different items are based on vector proximity, allowing them to recommend similar products or content based on a user's past interactions. This approach improves recommendation accuracy and efficiency by enabling meaningful, scalable comparisons of complex data.\n\nLearn more from the following resources:", "links": [ { - "title": "What role does AI play in recommendation systems and engines?", + "title": "What Role does AI Play in Recommendation Systems and Engines?", "url": "https://www.algolia.com/blog/ai/what-role-does-ai-play-in-recommendation-systems-and-engines/", "type": "article" }, { - "title": "What is a recommendation engine?", + "title": "What is a Recommendation Engine?", "url": "https://www.ibm.com/think/topics/recommendation-engine", "type": "article" } @@ -1009,6 +1009,11 @@ "title": "Data Classification", "description": "Once data is embedded, a classification algorithm, such as a neural network or a logistic regression model, can be trained on these embeddings to classify the data into different categories. The advantage of using embeddings is that they capture underlying relationships and similarities between data points, even if the raw data is complex or high-dimensional, improving classification accuracy in tasks like text classification, image categorization, and recommendation systems.\n\nLearn more from the following resources:", "links": [ + { + "title": "What Is Data Classification?", + "url": "https://www.paloaltonetworks.com/cyberpedia/data-classification", + "type": "article" + }, { "title": "Text Embeddings, Classification, and Semantic Search (w/ Python Code)", "url": "https://www.youtube.com/watch?v=sNa_uiqSlJo", @@ -1050,10 +1055,10 @@ }, "4GArjDYipit4SLqKZAWDf": { "title": "Pricing Considerations", - "description": "The pricing for the OpenAI Embedding API is based on the number of tokens processed and the specific embedding model used. Costs are determined by the total tokens needed to generate embeddings, so longer texts will result in higher charges. To manage costs, developers can optimize by shortening inputs or batching requests. Additionally, selecting the right embedding model for your performance and budget requirements, along with monitoring token usage, can help control expenses.", + "description": "The pricing for the OpenAI Embedding API is based on the number of tokens processed and the specific embedding model used. Costs are determined by the total tokens needed to generate embeddings, so longer texts will result in higher charges. To manage costs, developers can optimize by shortening inputs or batching requests. Additionally, selecting the right embedding model for your performance and budget requirements, along with monitoring token usage, can help control expenses.\n\nVisit the following resources to learn more:", "links": [ { - "title": "OpenAI API Pricing", + "title": "OpenAI Pricing", "url": "https://openai.com/api/pricing/", "type": "article" } @@ -1061,8 +1066,19 @@ }, "apVYIV4EyejPft25oAvdI": { "title": "Open-Source Embeddings", - "description": "Open-source embeddings are pre-trained vector representations of data, usually text, that are freely available for use and modification. These embeddings capture semantic meanings, making them useful for tasks like semantic search, text classification, and clustering. Examples include Word2Vec, GloVe, and FastText, which represent words as vectors based on their context in large corpora, and more advanced models like Sentence-BERT and CLIP that provide embeddings for sentences and images. Open-source embeddings allow developers to leverage pre-trained models without starting from scratch, enabling faster development and experimentation in natural language processing and other AI applications.", - "links": [] + "description": "Open-source embeddings are pre-trained vector representations of data, usually text, that are freely available for use and modification. These embeddings capture semantic meanings, making them useful for tasks like semantic search, text classification, and clustering. Examples include Word2Vec, GloVe, and FastText, which represent words as vectors based on their context in large corpora, and more advanced models like Sentence-BERT and CLIP that provide embeddings for sentences and images. Open-source embeddings allow developers to leverage pre-trained models without starting from scratch, enabling faster development and experimentation in natural language processing and other AI applications.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Embeddings", + "url": "https://platform.openai.com/docs/guides/embeddings", + "type": "article" + }, + { + "title": "A Guide to Open-Source Embedding Models", + "url": "https://www.bentoml.com/blog/a-guide-to-open-source-embedding-models", + "type": "article" + } + ] }, "ZV_V6sqOnRodgaw4mzokC": { "title": "Sentence Transformers", @@ -1288,8 +1304,14 @@ }, "ZcbRPtgaptqKqWBgRrEBU": { "title": "Performing Similarity Search", - "description": "In a similarity search, the process begins by converting the user’s query (such as a piece of text or an image) into an embedding—a vector representation that captures the query’s semantic meaning. This embedding is generated using a pre-trained model, such as BERT for text or a neural network for images. Once the query is converted into a vector, it is compared to the embeddings stored in the vector database.", - "links": [] + "description": "In a similarity search, the process begins by converting the user’s query (such as a piece of text or an image) into an embedding—a vector representation that captures the query’s semantic meaning. This embedding is generated using a pre-trained model, such as BERT for text or a neural network for images. Once the query is converted into a vector, it is compared to the embeddings stored in the vector database.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is Similarity Search & How Does it work?", + "url": "https://www.truefoundry.com/blog/similarity-search", + "type": "article" + } + ] }, "lVhWhZGR558O-ljHobxIi": { "title": "RAG & Implementation", @@ -1396,7 +1418,7 @@ "type": "article" }, { - "title": "Retrieval Augmented Generation (RAG) with vector databases: Expanding AI Capabilities", + "title": "Retrieval Augmented Generation (RAG) with Vector Databases: Expanding AI Capabilities", "url": "https://objectbox.io/retrieval-augmented-generation-rag-with-vector-databases-expanding-ai-capabilities/", "type": "article" } @@ -1508,7 +1530,7 @@ "description": "Replicate is a platform that allows developers to run machine learning models in the cloud without needing to manage infrastructure. It provides a simple API for deploying and scaling models, making it easy to integrate AI capabilities like image generation, text processing, and more into applications. Users can select from a library of pre-trained models or deploy their own, with the platform handling tasks like scaling, monitoring, and versioning.\n\nLearn more from the following resources:", "links": [ { - "title": "Replicate Website", + "title": "Replicate", "url": "https://replicate.com/", "type": "article" }, @@ -1529,7 +1551,7 @@ "type": "article" }, { - "title": "Ai agents and their types", + "title": "AI agents and their types", "url": "https://play.ht/blog/ai-agents-use-cases/", "type": "article" }, @@ -1662,7 +1684,7 @@ "description": "Multimodal AI enhances image understanding by integrating visual data with other types of information, such as text or audio. By combining these inputs, AI models can interpret images more comprehensively, recognizing objects, scenes, and actions, while also understanding context and related concepts. For example, an AI system could analyze an image and generate descriptive captions, or provide explanations based on both visual content and accompanying text.\n\nLearn more from the following resources:", "links": [ { - "title": "Low or high fidelity image understanding - OpenAI", + "title": "Low or High Fidelity Image Understanding - OpenAI", "url": "https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding", "type": "article" } @@ -1673,7 +1695,7 @@ "description": "Image generation is a process in artificial intelligence where models create new images based on input prompts or existing data. It involves using generative models like GANs (Generative Adversarial Networks), VAEs (Variational Autoencoders), or more recently, transformer-based models like DALL-E and Stable Diffusion.\n\nLearn more from the following resources:", "links": [ { - "title": "DALL-E Website", + "title": "DALL-E", "url": "https://openai.com/index/dall-e-2/", "type": "article" }, @@ -1827,7 +1849,7 @@ "description": "LangChain is a framework designed to build applications that integrate multiple AI models, especially those focusing on language understanding, generation, and multimodal capabilities. For multimodal apps, LangChain facilitates seamless interaction between text, image, and even audio models, enabling developers to create complex workflows that can process and analyze different types of data.\n\nLearn more from the following resources:", "links": [ { - "title": "LangChain Website", + "title": "LangChain", "url": "https://www.langchain.com/", "type": "article" }, @@ -1865,7 +1887,7 @@ }, { "title": "Aider - AI Pair Programming in Terminal", - "url": "https://github.com/Aider-AI/aider", + "url": "https://aider.chat/", "type": "article" }, { diff --git a/public/roadmap-content/angular.json b/public/roadmap-content/angular.json index ff59eb58a..8b1801c7b 100644 --- a/public/roadmap-content/angular.json +++ b/public/roadmap-content/angular.json @@ -379,8 +379,13 @@ "type": "article" }, { - "title": "Explore top posts about React Hooks", - "url": "https://app.daily.dev/tags/react-hooks?ref=roadmapsh", + "title": "Angular Lifecycle Hooks — Everything you need to know", + "url": "https://medium.com/@sinanozturk/angular-component-lifecycle-hooks-2f600c48dff3", + "type": "article" + }, + { + "title": "Explore top posts about Angular LifeCycle Hooks", + "url": "https://dev.to/search?utf8=%E2%9C%93&q=angular+hook", "type": "article" } ] @@ -1155,20 +1160,10 @@ "url": "https://angular.dev/guide/di/creating-injectable-service", "type": "article" }, - { - "title": "What is an Angular Service", - "url": "https://www.javatpoint.com/what-is-an-angular-service", - "type": "article" - }, { "title": "Service for API Calls", "url": "https://www.knowledgehut.com/blog/web-development/make-api-calls-angular", "type": "article" - }, - { - "title": "Service Tutorial with Example", - "url": "https://www.positronx.io/angular-service-tutorial-with-example/", - "type": "article" } ] }, @@ -1223,11 +1218,6 @@ "url": "https://angular.dev/guide/forms/reactive-forms", "type": "article" }, - { - "title": "Angular Reactive Forms", - "url": "https://www.javatpoint.com/angular-reactive-forms", - "type": "article" - }, { "title": "How To Use Reactive Forms in Angular", "url": "https://www.digitalocean.com/community/tutorials/angular-reactive-forms-introduction", @@ -1250,8 +1240,8 @@ "description": "Since Angular 14, reactive forms are strictly typed by default. You don't have to define extra custom types or add a ton of type annotations to your form declarations to benefit from this extra type safety, as Angular will infer types from the default value of a form control. Non-typed forms are still supported. To use them, you must import the `Untyped` symbols from `@angular/forms`.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Angular Official Docs - @let", - "url": "https://angular.dev/api/core/@let", + "title": "Angular Official Docs - Typed Forms", + "url": "https://angular.dev/guide/forms/typed-forms", "type": "article" }, { diff --git a/public/roadmap-content/api-design.json b/public/roadmap-content/api-design.json index d5a237da5..f4965fb60 100644 --- a/public/roadmap-content/api-design.json +++ b/public/roadmap-content/api-design.json @@ -176,8 +176,8 @@ "type": "article" }, { - "title": "Cookies - Mozilla", - "url": "https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies", + "title": "Using HTTP cookies - Mozilla", + "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies", "type": "article" } ] diff --git a/public/roadmap-content/aspnet-core.json b/public/roadmap-content/aspnet-core.json index 1ba6f8ac6..96afc4f61 100644 --- a/public/roadmap-content/aspnet-core.json +++ b/public/roadmap-content/aspnet-core.json @@ -231,11 +231,6 @@ "title": "Data Structures and Algorithms", "description": "As the name indicates, a **Data Structure** is a way of organizing the data in the **memory** so it can be used efficiently. Some common data structures are array, linked list, stack, hashtable, queue, tree, heap, and graph.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "Data Structures and Algorithms", - "url": "https://www.javatpoint.com/data-structure-tutorial", - "type": "article" - }, { "title": "C# resources", "url": "https://dev.to/adavidoaiei/fundamental-data-structures-and-algorithms-in-c-4ocf", @@ -483,7 +478,7 @@ ] }, "qpVxwuyA2oE06MZLtEdP1": { - "title": "Razon Pages", + "title": "Razor Pages", "description": "Razor Pages is a feature of the [ASP.NET](http://ASP.NET) Core framework that allows developers to build web applications using a combination of Razor markup (a markup syntax for defining dynamic HTML) and C# code. Razor Pages is built on top of the [ASP.NET](http://ASP.NET) Core MVC (Model-View-Controller) framework, and provides a simpler, more intuitive way to build web pages and handle user input.\n\nRazor Pages are useful for building simple, self-contained web pages that do not require a complex navigation or layout structure, and are often used for building small to medium-size web applications.\n\nFor more information, visit the following links:", "links": [ { @@ -573,8 +568,29 @@ }, "R7Qk5hsEIl9dspQXdaJAJ": { "title": "StyleCop Rules", - "description": "", - "links": [] + "description": "StyleCop is a tool used for developers to standardize their code and ensure they all follow the same syntax principles. With StyleCop, one standard can be defined in a `stylecop.json` file and shared across your team so that each member has the same guidelines when formatting your code. Beyond a single project, StyleCop can also be added as an extension, so all of the projects on your IDE follow the same formatting rules, this is especially useful if your organization follows the same rule standards for all projects.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "StyleCop GitHub official page", + "url": "https://github.com/StyleCop/StyleCop", + "type": "opensource" + }, + { + "title": "StyeleCop Analyzers, a more modern version of StyleCop", + "url": "https://github.com/DotNetAnalyzers/StyleCopAnalyzers", + "type": "opensource" + }, + { + "title": "StyleCop: A Detailed Guide to Starting and Using It", + "url": "https://blog.submain.com/stylecop-detailed-guide/", + "type": "article" + }, + { + "title": "The StyleCop setup and Advantages", + "url": "https://www.youtube.com/watch?v=dmpOKmz3lPw", + "type": "video" + } + ] }, "ipABerBcM9zCte9pYaIse": { "title": "Minimal APIs", @@ -1825,8 +1841,14 @@ }, "oMMBzRrHkUymxAR4oqr75": { "title": "Manual Mapping", - "description": "", - "links": [] + "description": "Manual object mapping in [ASP.NET](http://ASP.NET) Core means explicitly assigning values from one object to another without using third-party libraries like AutoMapper. This approach gives you full control over how properties are mapped and allows for custom transformations if needed.\n\nFor instance, if an **Employee** entity has properties such as Id, Name, Email, and Department, and we need to convert it into an **EmployeeDTO** without exposing sensitive data like Id, a manual mapping method can selectively map only the necessary fields. However, it comes with trade-offs, such as increased boilerplate code and the need for manual updates whenever the data model changes. In a real-world [ASP.NET](http://ASP.NET) Core application, manual mapping can be implemented using static helper methods or extension methods that take an entity as input and return a DTO, ensuring that the mapping logic remains centralized and reusable across different parts of the application.\n\nTo learn more, visit the following resources:", + "links": [ + { + "title": "Manual vs Automapping in ASP.NET?", + "url": "https://medium.com/@anderson.buenogod/manual-vs-automated-mapping-in-c-which-approach-is-best-for-your-project-50de1fd73bfa", + "type": "article" + } + ] }, "s57tKy1rajlJbKFDVXLqs": { "title": "Task Scheduling", @@ -2311,10 +2333,31 @@ } ] }, - "azuer-service-bus@gBuaVZfqJ0-g21sKohQtx.md": { - "title": "Azuer Service Bus", - "description": "", - "links": [] + "gBuaVZfqJ0-g21sKohQtx": { + "title": "Azure Service Bus", + "description": "Azure Service Bus is a scalable and reliable messaging platform that can handle a high volume of messages, it's also easy to use, has a lot of features like subscription, Topics, Dead Letter, and easy to integrate with other Azure services, and it's a managed service which means Microsoft takes care of the infrastructure and scaling. However, it's worth noting that Azure Service Bus is a paid service and the cost will depend on the number of messages and the size of the data that you are sending and receiving.\n\nTo learn more, visit the following links:", + "links": [ + { + "title": "Getting Started With Azure Service Bus and ASP.NET Core", + "url": "https://www.c-sharpcorner.com/article/get-started-with-azure-service-bus-queues-asp-net-core-part-1/", + "type": "article" + }, + { + "title": "How to Send & receive messages from Azure Service Bus queue (.NET)?", + "url": "https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues?tabs=passwordless", + "type": "article" + }, + { + "title": "What is Azure Service Bus?", + "url": "https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview", + "type": "article" + }, + { + "title": "Explore top posts about Azure", + "url": "https://app.daily.dev/tags/azure?ref=roadmapsh", + "type": "article" + } + ] }, "SQKIUa_UsJ4cls-Vs9yHU": { "title": "Mass Transit", diff --git a/public/roadmap-content/backend.json b/public/roadmap-content/backend.json index 345e5c1ea..a19b79d2d 100644 --- a/public/roadmap-content/backend.json +++ b/public/roadmap-content/backend.json @@ -389,6 +389,11 @@ "title": "Git & GitHub Crash Course For Beginners", "url": "https://www.youtube.com/watch?v=SWYqp7iY_Tc", "type": "video" + }, + { + "title": "Learn Git - Full Course", + "url": "https://www.youtube.com/watch?v=rH3zE7VlIMs", + "type": "video" } ] }, diff --git a/public/roadmap-content/computer-science.json b/public/roadmap-content/computer-science.json index 9ba88efa3..8ddc4b31f 100644 --- a/public/roadmap-content/computer-science.json +++ b/public/roadmap-content/computer-science.json @@ -336,11 +336,6 @@ "url": "https://roadmap.sh/datastructures-and-algorithms", "type": "article" }, - { - "title": "Data Structures and Algorithms", - "url": "https://www.javatpoint.com/data-structure-tutorial", - "type": "article" - }, { "title": "Explore top posts about Data Structures", "url": "https://app.daily.dev/tags/data-structures?ref=roadmapsh", @@ -1033,7 +1028,7 @@ }, "m0umGQNdvg95UiNpQZsQN": { "title": "Factorial", - "description": "Factorial complexity algorithms have a runtime of `O(n!)`. This is the worst case scenario for an algorithm. Factorial complexity algorithms are very inefficient and should be avoided.\n\n def generate_permutations(s):\n # Base case: If the string length is 1, return a list containing the string\n if len(s) == 1:\n return [s]\n \n # Initialize the result list\n permutations = []\n \n # Recursively generate all permutations\n for i in range(len(s)):\n # Current character\n current_char = s[i]\n # Remaining characters\n remaining_chars = s[:i] + s[i+1:]\n # Generate all permutations of the remaining characters\n for perm in generate_permutations(remaining_chars):\n # Add the current character to the front of each generated permutation\n permutations.append(current_char + perm)\n \n return permutations", + "description": "Factorial complexity algorithms have a runtime of `O(n!)`. This is the worst case scenario for an algorithm. Factorial complexity algorithms are very inefficient and should be avoided.\n\n def generate_permutations(s):\n # Base case: If the string length is 1, return a list containing the string\n if len(s) == 1:\n return [s]\n \n # Initialize the result list\n permutations = []\n \n # Recursively generate all permutations\n for i in range(len(s)):\n # Current character\n current_char = s[i]\n # Remaining characters\n remaining_chars = s[:i] + s[i + 1 :]\n # Generate all permutations of the remaining characters\n for perm in generate_permutations(remaining_chars):\n # Add the current character to the front of each generated permutation\n permutations.append(current_char + perm)\n \n return permutations", "links": [] }, "7a6-AnBI-3tAU1dkOvPkx": { @@ -1042,7 +1037,7 @@ "links": [ { "title": "Top Algorithms and Data Structures", - "url": "https://towardsdatascience.com/top-algorithms-and-data-structures-you-really-need-to-know-ab9a2a91c7b5", + "url": "https://medium.com/data-science/top-algorithms-and-data-structures-you-really-need-to-know-ab9a2a91c7b5", "type": "article" } ] @@ -1798,11 +1793,6 @@ "url": "https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt", "type": "course" }, - { - "title": "The Knuth-Morris-Pratt (KMP)Algorithm", - "url": "https://www.javatpoint.com/daa-knuth-morris-pratt-algorithm", - "type": "article" - }, { "title": "9.1 Knuth-Morris-Pratt KMP String Matching Algorithm", "url": "https://www.youtube.com/watch?v=V5-7GzOfADQ", @@ -1818,11 +1808,6 @@ "title": "Boyer Moore Algorithm", "url": "https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore", "type": "course" - }, - { - "title": "The Boyer-Moore Algorithm", - "url": "https://www.javatpoint.com/daa-boyer-moore-algorithm", - "type": "article" } ] }, diff --git a/public/roadmap-content/cpp.json b/public/roadmap-content/cpp.json new file mode 100644 index 000000000..b2da28a9e --- /dev/null +++ b/public/roadmap-content/cpp.json @@ -0,0 +1,742 @@ +{ + "ofwdZm05AUqCIWmfgGHk8": { + "title": "Diamond Inheritance", + "description": "Diamond inheritance is a specific scenario in multiple inheritance where a class is derived from two or more classes, which in turn, are derived from a common base class. It creates an ambiguity that arises from duplicating the common base class, which leads to an ambiguous behavior while calling the duplicate members.\n\nTo resolve this ambiguity, you can use virtual inheritance. A virtual base class is a class that is shared by multiple classes using `virtual` keyword in C++. This ensures that only one copy of the base class is inherited in the final derived class, and thus, resolves the diamond inheritance problem.\n\n_Example:_\n\n #include \n \n class Base {\n public:\n void print() {\n std::cout << \"Base class\\n\";\n }\n };\n \n class Derived1 : virtual public Base {\n public:\n void derived1Print() {\n std::cout << \"Derived1 class\\n\";\n }\n };\n \n class Derived2 : virtual public Base {\n public:\n void derived2Print() {\n std::cout << \"Derived2 class\\n\";\n }\n };\n \n class Derived3 : public Derived1, public Derived2 {\n public:\n void derived3Print() {\n std::cout << \"Derived3 class\\n\";\n }\n };\n \n int main() {\n Derived3 d3;\n d3.print(); // Now, there is no ambiguity in calling the base class function\n d3.derived1Print();\n d3.derived2Print();\n d3.derived3Print();\n \n return 0;\n }\n \n\nIn the code above, `Derived1` and `Derived2` are derived from the `Base` class using virtual inheritance. So, when we create an object of `Derived3` and call the `print()` function from the `Base` class, there is no ambiguity, and the code executes without any issues.", + "links": [] + }, + "ZHjU60uzJTezADRhDTESG": { + "title": "Forward Declaration", + "description": "Forward declaration is a way of declaring a symbol (class, function, or variable) before defining it in the code. It helps the compiler understand the type, size, and existence of the symbol. This declaration is particularly useful when we have cyclic dependencies or to reduce compilation time by avoiding unnecessary header inclusions in the source file.\n\nClass Forward Declaration\n-------------------------\n\nTo use a class type before it is defined, you can declare the class without defining its members, like this:\n\n class ClassA; // forward declaration\n \n\nYou can then use pointers or references to the class in your code before defining the class itself:\n\n void do_something (ClassA& obj);\n \n class ClassB {\n public:\n void another_function(ClassA& obj);\n };\n \n\nHowever, if you try to make an object of `ClassA` or call its member functions without defining the class, you will get a compilation error.\n\nFunction Forward Declaration\n----------------------------\n\nFunctions must be declared before using them, and a forward declaration can be used to declare a function without defining it:\n\n int add(int a, int b); // forward declaration\n \n int main() {\n int result = add(2, 3);\n return 0;\n }\n \n int add(int a, int b) {\n return a + b;\n }\n \n\nEnum and Typedef Forward Declaration\n------------------------------------\n\nFor `enum` and `typedef`, it is not possible to forward declare because they don't have separate declaration and definition stages.\n\nKeep in mind that forward declarations should be used cautiously, as they can make the code more difficult to understand.", + "links": [] + }, + "NvODRFR0DLINB0RlPSsvt": { + "title": "Introduction to Language", + "description": "C++ is a general-purpose, high-performance programming language. It was developed by Bjarne Stroustrup at Bell Labs starting in 1979. C++ is an extension of the C programming language, adding features such as classes, objects, and exceptions.\n\nBasics of C++ Programming\n-------------------------\n\nHere are some basic components and concepts in C++ programming:\n\nIncluding Libraries\n-------------------\n\nIn C++, we use the `#include` directive to include libraries or header files into our program. For example, to include the standard input/output library, we write:\n\n #include \n \n\nMain Function\n-------------\n\nThe entry point of a C++ program is the `main` function. Every C++ program must have a `main` function:\n\n int main() {\n // Your code goes here\n return 0;\n }\n \n\nInput/Output\n------------\n\nTo perform input and output operations in C++, we can use the built-in objects `std::cin` for input and `std::cout` for output, available in the `iostream` library. Here's an example of reading an integer and printing its value:\n\n #include \n \n int main() {\n int number;\n std::cout << \"Enter an integer: \";\n std::cin >> number;\n std::cout << \"You entered: \" << number << '\\n';\n return 0;\n }\n \n\nVariables and Data Types\n------------------------\n\nC++ has several basic data types for representing integer, floating-point, and character values:\n\n* `int`: integer values\n* `float`: single-precision floating-point values\n* `double`: double-precision floating-point values\n* `char`: single characters\n* `bool`: boolean values\n\nVariables must be declared with a data type before they can be used:\n\n int x;\n float y;\n double z;\n char c;\n bool b;\n \n\nControl Structures\n------------------\n\nC++ provides control structures for conditional execution and iteration, such as `if`, `else`, `while`, `for`, and `switch` statements.\n\n### If-Else Statement\n\n if (condition) {\n // Code to execute if the condition is true\n } else {\n // Code to execute if the condition is false\n }\n \n\n### While Loop\n\n while (condition) {\n // Code to execute while the condition is true\n }\n \n\n### For Loop\n\n for (initialization; condition; update) {\n // Code to execute while the condition is true\n }\n \n\n### Switch Statement\n\n switch (variable) {\n case value1:\n // Code to execute if variable == value1\n break;\n case value2:\n // Code to execute if variable == value2\n break;\n // More cases...\n default:\n // Code to execute if variable does not match any case value\n }\n \n\nFunctions\n---------\n\nFunctions are reusable blocks of code that can be called with arguments to perform a specific task. Functions are defined with a return type, a name, a parameter list, and a body.\n\n ReturnType functionName(ParameterType1 parameter1, ParameterType2 parameter2) {\n // Function body\n // ...\n return returnValue;\n }\n \n\nFor example, here's a function that adds two integers and returns the result:\n\n int add(int a, int b) {\n return a + b;\n }\n \n int main() {\n int result = add(3, 4);\n std::cout << \"3 + 4 = \" << result << '\\n';\n return 0;\n }\n \n\nThis basic introduction to C++ should provide you with a good foundation for further learning. Explore more topics such as classes, objects, inheritance, polymorphism, templates, and the Standard Template Library (STL) to deepen your understanding of C++ and start writing more advanced programs.\n\nLearn more from the following resources:", + "links": [ + { + "title": "LearnC++", + "url": "https://www.learncpp.com/", + "type": "article" + }, + { + "title": "C++ Full Course by freeCodeCamp", + "url": "https://youtu.be/vLnPwxZdW4Y", + "type": "video" + } + ] + }, + "x_28LiDVshqWns_aIBsdx": { + "title": "What is C++?", + "description": "C++ is a general-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language. It was first introduced in 1985 and provides object-oriented features like classes and inheritance. C++ is widely used in various applications like game development, system programming, embedded systems, and high-performance computing.\n\nC++ is a statically-typed language, meaning that the type of a variable is determined during compilation, and has an extensive library called the C++ Standard Library, which provides a rich set of functions, algorithms, and data structures for various tasks.\n\nC++ builds upon the features of C, and thus, most C programs can be compiled and run with a C++ compiler.\n\nCode Example\n------------\n\nHere's a simple example of a C++ program that demonstrates some essential features of the language:\n\n #include \n \n // A simple function to add two numbers\n int add(int a, int b) {\n return a + b;\n }\n \n class Calculator {\n public:\n // A member function to multiply two numbers\n int multiply(int a, int b) {\n return a * b;\n }\n };\n \n int main() {\n int x = 5;\n int y = 3;\n \n // Using the standalone function 'add'\n int sum = add(x, y);\n std::cout << \"Sum: \" << sum << '\\n';\n \n // Using a class and member function\n Calculator calc;\n int product = calc.multiply(x, y);\n std::cout << \"Product: \" << product << '\\n';\n \n return 0;\n }\n \n\nIn the above program, we define a simple function `add` and a class `Calculator` with a member function `multiply`. The `main` function demonstrates how to use these to perform basic arithmetic.\n\nLearn more from the following resources:", + "links": [ + { + "title": "w3schools C++ tutorial", + "url": "https://www.w3schools.com/cpp/", + "type": "article" + }, + { + "title": "Learn C++", + "url": "https://www.learncpp.com/", + "type": "article" + }, + { + "title": "Explore top posts about C++", + "url": "https://app.daily.dev/tags/c++?ref=roadmapsh", + "type": "article" + }, + { + "title": "C++ Tutorial for Beginners - Full Course", + "url": "https://youtu.be/vLnPwxZdW4Y", + "type": "video" + } + ] + }, + "tl6VCQ5IEGDVyFcgj7jDm": { + "title": "Why use C++", + "description": "C++ is a popular and widely used programming language for various reasons. Here are some of the reasons why you might choose to utilize C++:\n\nPerformance\n-----------\n\nC++ is designed to provide high performance and efficiency. It offers fine-grained control over system resources, making it easier to optimize your software.\n\nPortability\n-----------\n\nC++ is supported on different computer architectures and operating systems, allowing you to write portable code that runs on various platforms without making major modifications.\n\nObject-Oriented Programming\n---------------------------\n\nC++ supports object-oriented programming (OOP) - a paradigm that allows you to design programs using classes and objects, leading to better code organization and reusability.\n\n class MyClass {\n public:\n void myFunction() {\n // Code here\n }\n };\n \n int main() {\n MyClass obj;\n obj.myFunction();\n }\n \n\nSupport for low-level and high-level programming\n------------------------------------------------\n\nC++ allows you to write both low-level code, like memory manipulation, as well as high-level abstractions, like creating classes and using the Standard Template Library (STL).\n\n #include \n #include \n \n int main() {\n // Low-level programming\n int number = 42;\n int* ptr_number = &number;\n \n // High-level programming\n std::vector myVector = {1, 2, 3};\n for (const auto &i: myVector) {\n std::cout << i << '\\n';\n }\n }\n \n\nExtensive Libraries\n-------------------\n\nC++ offers a vast range of libraries and tools, such as the Standard Template Library (STL), Boost, and Qt, among others, that can aid in the development of your projects and make it more efficient.\n\nCombination with C language\n---------------------------\n\nC++ can be combined with C, offering the capabilities of both languages and allowing you to reuse your existing C code. By incorporating C++ features, you can enhance your code and improve its functionality.\n\nActive Community\n----------------\n\nC++ has been around for a long time and has a large, active community of users who contribute to the growth of the language, express new ideas, and engage in discussions that help develop the language further. This makes finding solutions to any problems you experience much easier.\n\nIn summary, C++ offers a great balance of performance, portability, and feature set, making it a versatile and powerful programming language suitable for many applications. With its extensive libraries, active community, and continuous development, C++ is an excellent choice for any software development project.", + "links": [] + }, + "2Ag0t3LPryTF8khHLRfy-": { + "title": "C vs C++", + "description": "C and C++ are two popular programming languages with some similarities, but they also have key differences. C++ is an extension of the C programming language, with added features such as object-oriented programming, classes, and exception handling. Although both languages are used for similar tasks, they have their own syntax and semantics, which makes them distinct from each other.\n\nSyntax and Semantics\n--------------------\n\n### C\n\n* C is a procedural programming language.\n* Focuses on functions and structured programming.\n* Does not support objects or classes.\n* Memory management is manual, using functions like `malloc` and `free`.\n\n #include \n \n void printHello() {\n printf(\"Hello, World!\\n\");\n }\n \n int main() {\n printHello();\n return 0;\n }\n \n\n### C++\n\n* C++ is both procedural and object-oriented.\n* Supports both functions and classes.\n* Incorporates different programming paradigms.\n* Memory management can be manual (like C) or rely on constructors/destructors and smart pointers.\n\n #include \n \n class HelloWorld {\n public:\n void printHello() {\n std::cout << \"Hello, World!\\n\";\n }\n };\n \n int main() {\n HelloWorld obj;\n obj.printHello();\n return 0;\n }\n \n\nCode Reusability and Modularity\n-------------------------------\n\n### C\n\n* Code reusability is achieved through functions and modular programming.\n* High cohesion and low coupling are achieved via structured design.\n* Function libraries can be created and included through headers.\n\n### C++\n\n* Offers better code reusability with classes, inheritance, and polymorphism.\n* Code modularity is enhanced through namespaces and well-designed object-oriented hierarchy.\n\nError Handling\n--------------\n\n### C\n\n* Error handling in C is done primarily through return codes.\n* Lacks support for exceptions or any built-in error handling mechanism.\n\n### C++\n\n* Offers exception handling, which can be used to handle errors that may occur during program execution.\n* Enables catching and handling exceptions with `try`, `catch`, and `throw` keywords, providing more control over error handling.\n\nConclusion\n----------\n\nBoth C and C++ are powerful languages with unique features and capabilities. While C is simpler and focuses on procedural programming, C++ offers the versatility of using different programming paradigms and improved code organization. Understanding the differences between these two languages can help you decide which one is more suitable for your specific needs and programming style.", + "links": [] + }, + "Zc_TTzmM36yWsu3GvOy9x": { + "title": "Setting up your Environment", + "description": "Setting up C++ requires a few steps, including installing a compiler, configuring an Integrated Development Environment (IDE), and creating a new C++ project.\n\n1\\. Installing a Compiler\n-------------------------\n\nA compiler is required to convert C++ code into machine language. Some popular C++ compilers include:\n\n* GCC (GNU Compiler Collection) for Linux and macOS, but can also be used on Windows through MinGW\n* MSVC (Microsoft Visual C++) for Windows\n\nTo install a compiler, simply follow the instructions provided by the respective websites.\n\n2\\. Configuring an IDE\n----------------------\n\nAn IDE is a software application that provides facilities for programming, such as code editing, debugging, and building. Some popular C++ IDEs include:\n\n* [@article@Visual Studio](https://visualstudio.microsoft.com/vs/features/cplusplus/) (Windows, macOS)\n* [@article@Eclipse](https://eclipse.org) (Windows, macOS, Linux)\n* [@article@Code::Blocks](http://www.codeblocks.org) (Windows, macOS, Linux)\n\nAfter downloading and installing an IDE, you might need to configure it to use the installed compiler. Check the documentation of the respective IDE for instructions on how to do this.\n\n3\\. Creating a New C++ Project\n------------------------------\n\nOnce you have your IDE and compiler set up, you can create a new C++ project and start writing code. In general, follow these steps to create a new C++ project:\n\n* Open the IDE and create a new project.\n* Select the project type (C++ Application or Console Application).\n* Specify the project name and location.\n* Let the IDE generate the main.cpp and build files (such as Makefile or CMakeLists.txt) for you.\n\nExample: Hello World in C++\n---------------------------\n\nCreate a new file called `main.cpp` within your project and include this code:\n\n #include \n \n int main() {\n std::cout << \"Hello, World!\\n\";\n return 0;\n }\n \n\nThen, follow the IDE's instructions to build and run your program. You should see \"Hello, World!\" displayed in the console.\n\nSummary\n-------\n\nSetting up C++ involves:\n\n* Installing a compiler (e.g. GCC, MinGW, or MSVC)\n* Configuring an IDE (e.g. Visual Studio, Eclipse, or Code::Blocks)\n* Creating a new C++ project and writing code\n\nBy following these steps, you'll be ready to start developing C++ applications!", + "links": [] + }, + "0J_ltQEJh2g28OE2ZEYJj": { + "title": "Installing C++", + "description": "Before you can start programming in C++, you will need to have a compiler installed on your system. A compiler is a program that converts the C++ code you write into an executable file that your computer can run. There are several popular C++ compilers to choose from, depending on your operating system and preference.\n\n### Windows\n\nFor Windows, one popular option is to install the [Microsoft Visual Studio IDE](https://visualstudio.microsoft.com/vs/), which includes the Microsoft Visual C++ compiler (MSVC).\n\nAlternatively, you can also install the [MinGW-w64](https://mingw-w64.org/) compiler system, which is a Windows port of the GNU Compiler Collection (GCC). To install MinGW-w64, follow these steps:\n\n* Download the installer from [here](https://sourceforge.net/projects/mingw-w64/files/).\n* Run the installer and select your desired architecture, version, and install location.\n* Add the `bin` folder inside the installation directory to your system's `PATH` environment variable.\n\n### macOS\n\nFor macOS, you can install the Apple LLVM `clang` compiler which is part of the Xcode Command Line Tools. To do this, open a terminal and enter:\n\n xcode-select --install\n \n\nThis will prompt a dialog to install the Command Line Tools, which includes the `clang` compiler.\n\n### Linux\n\nOn Linux, you can install the GNU Compiler Collection (GCC) through your distribution's package manager. Here are some examples for popular Linux distributions:\n\n* Ubuntu, Debian, and derivatives:\n\n sudo apt-get install g++ build-essential\n \n\n* Fedora, CentOS, RHEL, and derivatives:\n\n sudo dnf install gcc-c++ make\n \n\n* Arch Linux and derivatives:\n\n sudo pacman -S gcc make\n \n\n### Checking the Installation\n\nTo confirm that the compiler is installed and available on your system, open a terminal/command prompt, and enter the following command:\n\n g++ --version\n \n\nYou should see output displaying the version of your installed C++ compiler.\n\nNow you're ready to start writing and compiling your C++ code!", + "links": [] + }, + "ew0AfyadpXPRO0ZY3Z19k": { + "title": "Code Editors / IDEs", + "description": "Code editors and IDEs are programs specifically designed for editing, managing and writing source code. They offer a wide range of features that make the development process easier and faster. Here's a brief introduction to some of the most popular code editors and IDEs for C++:\n\n* **Visual Studio**: Visual Studio is an Integrated Development Environment (IDE) for Windows, developed by Microsoft. It includes its own integrated compiler known as Microsoft Visual C++ (MSVC).\n \n* **Visual Studio Code (VSCode)**: Visual Studio Code is a popular, free, open-source, and lightweight code editor developed by Microsoft. It offers an extensive library of extensions that enhance functionality for C++ development.\n \n* **Sublime Text**: Sublime Text is a cross-platform text editor that is quite popular among developers due to its speed and minimalist design. It supports C++ with the help of plugins and has a variety of themes and packages available for customization.\n \n* **CLion**: CLion is an Integrated Development Environment (IDE) developed by JetBrains specifically for C and C++ developers. It provides advanced features like code completion, refactoring support, debugging, and more. It's worth noting that CLion is a commercial IDE, and there is no community version available; users are required to purchase a license for usage.\n \n\nThese are just a few examples, and there are many other code editors available, including Atom, Notepad++, and Geany. They all have their features and may suit different developers' needs. Finding the right code editor is often a matter of personal preference and workflow.\n\nTo work with C++ in your chosen code editor, you often need to install some additional tools and add-ons, such as compilers, linters, and debugger support. Make sure to follow the instructions provided in the editor's documentation to set up C++ correctly.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Using C++ on Linux in VSCode", + "url": "https://code.visualstudio.com/docs/cpp/config-linux", + "type": "article" + }, + { + "title": "Explore top posts about General Programming", + "url": "https://app.daily.dev/tags/general-programming?ref=roadmapsh", + "type": "article" + } + ] + }, + "SEq0D2Zg5WTsIDtd1hW9f": { + "title": "Running your First Program", + "description": "In this section, we'll discuss the basic structure of a C++ program, walk you through your first program (the \"Hello, World!\" example), and provide additional explanations of its syntax.\n\nHello, World!\n-------------\n\nThe first program that most people learn to write in any programming language is often a simple one that displays the message \"Hello, World!\" on the screen. Here's the classic \"Hello, World!\" program in C++:\n\n #include \n \n int main() {\n std::cout << \"Hello, World!\\n\";\n return 0;\n }\n \n\nLet's break down the different components of this program:\n\nHeader Files & Preprocessor Directives\n--------------------------------------\n\nThe first line of the program `#include ` is a [preprocessor directive](https://en.cppreference.com/w/cpp/preprocessor) that tells the compiler to include the header file `iostream`. Header files provide function and class declarations that we can use in our C++ programs.\n\n #include \n \n\n`main()` Function\n-----------------\n\nIn C++, the `main()` function serves as the entry point of your program. The operating system runs your program by calling this `main()` function. It should be defined only once in your program and must return an integer. The keyword `int` is the return type of this function which is an integer. Unlike C in C++ it is mandatory to have `int` as the return type for the `main` function.\n\n int main() {\n // Your code goes here.\n }\n \n\nOutput to the Console\n---------------------\n\nTo output text to the console, we use the `std::cout` object and the insertion operator `<<`. In the \"Hello, World!\" example, we used the following line to print \"Hello, World!\" to the console:\n\n std::cout << \"Hello, World!\\n\";\n \n\n* `std`: This is the namespace where C++ standard library entities (classes and functions) reside. It stands for \"standard\"\n* `std::cout`: The standard \"character output\" stream that writes to the console\n* `\"Hello, World!\"`: The string literal to print\n* `'\\n'`: The \"end line\" manipulator that inserts a newline character and flushes the output buffer\n\nReturn Statement\n----------------\n\nLastly, the `return 0;` statement informs the operating system that the program executed successfully. Returning any other integer value indicates that an error occurred:\n\n return 0;\n \n\nNow that you understand the basic components of a C++ program, you can write your first program, compile it, and run it to see the \"Hello, World!\" message displayed on the screen.", + "links": [] + }, + "kl2JI_Wl47c5r8SYzxvCq": { + "title": "Basic Operations", + "description": "Basic operations in C++ refer to the fundamental arithmetic, relational, and logical operations that can be performed using C++ programming language, which are essential for any kind of program or calculation in a real-world scenario.\n\nHere's a summary of the basic operations in C++\n\nArithmetic Operations\n---------------------\n\nThese operations are used for performing calculations in C++ and include the following:\n\n* **Addition (+)**: Adds two numbers.\n\n int a = 5;\n int b = 6;\n int sum = a + b; // sum is 11\n \n\n* **Subtraction (-)**: Subtracts one number from the other.\n\n int a = 10;\n int b = 6;\n int diff = a - b; // diff is 4\n \n\n* **Multiplication (\\*)**: Multiplies two numbers.\n\n int a = 3;\n int b = 4;\n int product = a * b; // product is 12\n \n\n* **Division (/)**: Divides one number by another, yields quotient.\n\n int a = 12;\n int b = 4;\n int quotient = a / b; // quotient is 3\n \n\n* **Modulus (%)**: Divides one number by another, yields remainder.\n\n int a = 15;\n int b = 4;\n int remainder = a % b; // remainder is 3\n \n\nRelational Operators\n--------------------\n\nThese operations compare two values and return a boolean value (true/false) depending on the comparison. The relational operations are:\n\n* **Equal to (==)**: Returns true if both operands are equal.\n\n 5 == 5 // true\n 3 == 4 // false\n \n\n* **Not equal to (!=)**: Returns true if operands are not equal.\n\n 5 != 2 // true\n 1 != 1 // false\n \n\n* **Greater than (>)**: Returns true if the first operand is greater than the second.\n\n 5 > 3 // true\n 2 > 3 // false\n \n\n* **Less than (<)**: Returns true if the first operand is less than the second.\n\n 3 < 5 // true\n 6 < 5 // false\n \n\n* **Greater than or equal to (>=)**: Returns true if the first operand is greater than or equal to the second.\n\n 5 >= 5 // true\n 6 >= 2 // true\n 3 >= 4 // false\n \n\n* **Less than or equal to (<=)**: Returns true if the first operand is less than or equal to the second.\n\n 4 <= 4 // true\n 2 <= 3 // true\n 5 <= 4 // false\n \n\nLogical Operators\n-----------------\n\nLogical operators are used for combining multiple conditions or boolean values.\n\n* **AND (&&)**: Returns true if both operands are true.\n\n true && true // true\n true && false // false\n \n\n* **OR (||)**: Returns true if any one of the operands is true.\n\n true || false // true\n false || false // false\n \n\n* **NOT (!)**: Returns true if the operand is false and vice versa.\n\n !true // false\n !false // true", + "links": [] + }, + "8aOSpZLWwZv_BEYiurhyR": { + "title": "Arithmetic Operators", + "description": "Arithmetic operators are used to perform mathematical operations with basic variables such as integers and floating-point numbers. Here is a brief summary of the different arithmetic operators in C++:\n\n1\\. Addition Operator (`+`)\n---------------------------\n\nIt adds two numbers together.\n\n int sum = a + b;\n \n\n2\\. Subtraction Operator (`-`)\n------------------------------\n\nIt subtracts one number from another.\n\n int difference = a - b;\n \n\n3\\. Multiplication Operator (`*`)\n---------------------------------\n\nIt multiplies two numbers together.\n\n int product = a * b;\n \n\n4\\. Division Operator (`/`)\n---------------------------\n\nIt divides one number by another. Note that if both operands are integers, it will perform integer division and the result will be an integer.\n\n int quotient = a / b; // integer division\n float quotient = float(a) / float(b); // floating-point division\n \n\n5\\. Modulus Operator (`%`)\n--------------------------\n\nIt calculates the remainder of an integer division.\n\n int remainder = a % b;\n \n\n6\\. Increment Operator (`++`)\n-----------------------------\n\nIt increments the value of a variable by 1. There are two ways to use this operator: prefix (`++x`) and postfix (`x++`). Prefix increments the value before returning it, whereas postfix returns the value first and then increments it.\n\n int x = 5;\n int y = ++x; // x = 6, y = 6\n int z = x++; // x = 7, z = 6\n \n\n7\\. Decrement Operator (`--`)\n-----------------------------\n\nIt decrements the value of a variable by 1. It can also be used in prefix (`--x`) and postfix (`x--`) forms.\n\n int x = 5;\n int y = --x; // x = 4, y = 4\n int z = x--; // x = 3, z = 4\n \n\nThese are the basic arithmetic operators in C++ that allow you to perform mathematical operations on your variables. Use them in combination with other control structures, such as loops and conditionals, to build more complex programs.", + "links": [] + }, + "Y9gq8WkDA_XGe68JkY2UZ": { + "title": "Logical Operators", + "description": "Logical operators are used to perform logical operations on the given expressions, mostly to test the relationship between different variables or values. They return a boolean value i.e., either true (1) or false (0) based on the result of the evaluation.\n\nC++ provides the following logical operators:\n\n* **AND Operator (&&)** The AND operator checks if both the operands/conditions are true, then the expression is true. If any one of the conditions is false, the whole expression will be false.\n \n (expression1 && expression2)\n \n \n Example:\n \n int a = 5, b = 10;\n if (a > 0 && b > 0) {\n std::cout << \"Both values are positive.\\n\";\n }\n \n \n* **OR Operator (||)** The OR operator checks if either of the operands/conditions are true, then the expression is true. If both the conditions are false, it will be false.\n \n (expression1 || expression2)\n \n \n Example:\n \n int a = 5, b = -10;\n if (a > 0 || b > 0) {\n std::cout << \"At least one value is positive.\\n\";\n }\n \n \n* **NOT Operator (!)** The NOT operator reverses the result of the condition/expression it is applied on. If the condition is true, the NOT operator will make it false and vice versa.\n \n !(expression)\n \n \n Example:\n \n int a = 5;\n if (!(a < 0)) {\n std::cout << \"The value is not negative.\\n\";\n }\n \n \n\nUsing these operators, you can create more complex logical expressions, for example:\n\n int a = 5, b = -10, c = 15;\n \n if (a > 0 && (b > 0 || c > 0)) {\n std::cout << \"At least two values are positive.\\n\";\n }\n \n\nThis covers the essential information about logical operators in C++.", + "links": [] + }, + "zE4iPSq2KsrDSByQ0sGK_": { + "title": "Bitwise Operators", + "description": "Bitwise operations are operations that directly manipulate the bits of a number. Bitwise operations are useful for various purposes, such as optimizing algorithms, performing certain calculations, and manipulating memory in lower-level programming languages like C and C++.\n\nHere is a quick summary of common bitwise operations in C++:\n\nBitwise AND (`&`)\n-----------------\n\nThe bitwise AND operation (`&`) is a binary operation that takes two numbers, compares them bit by bit, and returns a new number where each bit is set (1) if the corresponding bits in both input numbers are set (1); otherwise, the bit is unset (0).\n\nExample:\n\n int result = 5 & 3; // result will be 1 (0000 0101 & 0000 0011 = 0000 0001)\n \n\nBitwise OR (`|`)\n----------------\n\nThe bitwise OR operation (`|`) is a binary operation that takes two numbers, compares them bit by bit, and returns a new number where each bit is set (1) if at least one of the corresponding bits in either input number is set (1); otherwise, the bit is unset (0).\n\nExample:\n\n int result = 5 | 3; // result will be 7 (0000 0101 | 0000 0011 = 0000 0111)\n \n\nBitwise XOR (`^`)\n-----------------\n\nThe bitwise XOR (exclusive OR) operation (`^`) is a binary operation that takes two numbers, compares them bit by bit, and returns a new number where each bit is set (1) if the corresponding bits in the input numbers are different; otherwise, the bit is unset (0).\n\nExample:\n\n int result = 5 ^ 3; // result will be 6 (0000 0101 ^ 0000 0011 = 0000 0110)\n \n\nBitwise NOT (`~`)\n-----------------\n\nThe bitwise NOT operation (`~`) is a unary operation that takes a single number, and returns a new number where each bit is inverted (1 becomes 0, and 0 becomes 1).\n\nExample:\n\n int result = ~5; // result will be -6 (1111 1010)\n \n\nBitwise Left Shift (`<<`)\n-------------------------\n\nThe bitwise left shift operation (`<<`) is a binary operation that takes two numbers, a value and a shift amount, and returns a new number by shifting the bits of the value to the left by the specified shift amount. The vacated bits are filled with zeros.\n\nExample:\n\n int result = 5 << 1; // result will be 10 (0000 0101 << 1 = 0000 1010)\n \n\nBitwise Right Shift (`>>`)\n--------------------------\n\nThe bitwise right shift operation (`>>`) is a binary operation that takes two numbers, a value and a shift amount, and returns a new number by shifting the bits of the value to the right by the specified shift amount. The vacated bits are filled with zeros or sign bit depending on the input value being signed or unsigned.\n\nExample:\n\n int result = 5 >> 1; // result will be 2 (0000 0101 >> 1 = 0000 0010)\n \n\nThese were the most common bitwise operations in C++. Remember to use them carefully and understand their behavior when applied to specific data types and scenarios.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Intro to Binary and Bitwise Operators in C++", + "url": "https://youtu.be/KXwRt7og0gI", + "type": "video" + }, + { + "title": "Bitwise AND (&), OR (|), XOR (^) and NOT (~) in C++", + "url": "https://youtu.be/HoQhw6_1NAA", + "type": "video" + } + ] + }, + "s5Gs4yF9TPh-psYmtPzks": { + "title": "Control Flow & Statements", + "description": "", + "links": [] + }, + "_IP_e1K9LhNHilYTDh7L5": { + "title": "for / while / do while loops", + "description": "Loops are an essential concept in programming that allow you to execute a block of code repeatedly until a specific condition is met. In C++, there are three main types of loops: `for`, `while`, and `do-while`.\n\nFor Loop\n--------\n\nA `for` loop is used when you know the number of times you want to traverse through a block of code. It consists of an initialization statement, a condition, and an increment/decrement operation.\n\nHere's the syntax for a `for` loop:\n\n for (initialization; condition; increment/decrement) {\n // block of code to execute\n }\n \n\nFor example:\n\n #include \n \n int main() {\n for (int i = 0; i < 5; i++) {\n std::cout << \"Iteration: \" << i << '\\n';\n }\n return 0;\n }\n \n\nWhile Loop\n----------\n\nA `while` loop runs as long as a specified condition is `true`. The loop checks for the condition before entering the body of the loop.\n\nHere's the syntax for a `while` loop:\n\n while (condition) {\n // block of code to execute\n }\n \n\nFor example:\n\n #include \n \n int main() {\n int i = 0;\n while (i < 5) {\n std::cout << \"Iteration: \" << i << '\\n';\n i++;\n }\n return 0;\n }\n \n\nDo-While Loop\n-------------\n\nA `do-while` loop is similar to a `while` loop, with the key difference being that the loop body is executed at least once, even when the condition is `false`.\n\nHere's the syntax for a `do-while` loop:\n\n do {\n // block of code to execute\n } while (condition);\n \n\nFor example:\n\n #include \n \n int main() {\n int i = 0;\n do {\n std::cout << \"Iteration: \" << i << '\\n';\n i++;\n } while (i < 5);\n return 0;\n }\n \n\nIn summary, loops are an integral part of C++ programming that allow you to execute a block of code multiple times. The three types of loops in C++ are `for`, `while`, and `do-while`. Each type has its own specific use case and can be chosen depending on the desired behavior.\n\nLearn more from the following resources:", + "links": [ + { + "title": "C++ For Loop", + "url": "https://www.w3schools.com/cpp/cpp_for_loop.asp", + "type": "article" + } + ] + }, + "bjpFWxiCKGz28E-ukhZBp": { + "title": "if else / switch / goto", + "description": "", + "links": [] + }, + "oYi3YOc1GC2Nfp71VOkJt": { + "title": "Functions", + "description": "A **function** is a group of statements that perform a specific task, organized as a separate unit in a program. Functions help in breaking the code into smaller, manageable, and reusable blocks.\n\nThere are mainly two types of functions in C++:\n\n* **Standard library functions**: Pre-defined functions available in the C++ standard library, such as `sort()`, `strlen()`, `sqrt()`, and many more. These functions are part of the standard library, so you need to include the appropriate header file to use them.\n \n* **User-defined functions**: Functions created by the programmer to perform a specific task. To create a user-defined function, you need to define the function and call it in your code.\n \n\nDefining a Function\n-------------------\n\nThe general format for defining a function in C++ is:\n\n return_type function_name(parameter list) {\n // function body\n }\n \n\n* `return_type`: Data type of the output produced by the function. It can be `void`, indicating that the function doesn't return any value.\n* `function_name`: Name given to the function, following C++ naming conventions.\n* `parameter list`: List of input parameters/arguments that are needed to perform the task. It is optional, you can leave it blank when no parameters are needed.\n\nExample\n-------\n\n #include \n \n // Function to add two numbers\n int addNumbers(int a, int b) {\n int sum = a + b;\n return sum;\n }\n \n int main() {\n int num1 = 5, num2 = 10;\n int result = addNumbers(num1, num2); // Calling the function\n std::cout << \"The sum is: \" << result << '\\n';\n return 0;\n }\n \n\nIn this example, the function `addNumbers` takes two integer parameters, `a` and `b`, and returns the sum of the numbers. We then call this function from the `main()` function and display the result.\n\nFunction Prototypes\n-------------------\n\nIn some cases, you might want to use a function before actually defining it. To do this, you need to declare a **function prototype** at the beginning of your code.\n\nA function prototype is a declaration of the function without its body, and it informs the compiler about the function's name, return type, and parameters.\n\n #include \n \n // Function prototype\n int multiplyNumbers(int x, int y);\n \n int main() {\n int num1 = 3, num2 = 7;\n int result = multiplyNumbers(num1, num2); // Calling the function\n std::cout << \"The product is: \" << result << '\\n';\n return 0;\n }\n \n // Function definition\n int multiplyNumbers(int x, int y) {\n int product = x * y;\n return product;\n }\n \n\nIn this example, we use a function prototype for `multiplyNumbers()` before defining it. This way, we can call the function from the `main()` function even though it hasn't been defined yet in the code.\n\nLearn more from the following resources:", + "links": [ + { + "title": "introduction to functions in c++", + "url": "https://www.learncpp.com/cpp-tutorial/introduction-to-functions/", + "type": "article" + } + ] + }, + "obZIxRp0eMWdG7gplNIBc": { + "title": "Static Polymorphism", + "description": "Static polymorphism, also known as compile-time polymorphism, is a type of polymorphism that resolves the types and method calls at compile time rather than at runtime. This is commonly achieved through the use of function overloading and templates in C++.\n\nFunction Overloading\n--------------------\n\nFunction overloading is a way to create multiple functions with the same name but different parameter lists. The compiler determines the correct function to call based on the types and number of arguments used when the function is called.\n\nExample:\n\n #include \n \n void print(int i) {\n std::cout << \"Printing int: \" << i << '\\n';\n }\n \n void print(double d) {\n std::cout << \"Printing double: \" << d << '\\n';\n }\n \n void print(const char* s) {\n std::cout << \"Printing string: \" << s << '\\n';\n }\n \n int main() {\n print(5); // Calls print(int i)\n print(3.14); // Calls print(double d)\n print(\"Hello\"); // Calls print(const char* s)\n \n return 0;\n }\n \n\nTemplates\n---------\n\nTemplates are a powerful feature in C++ that allows you to create generic functions or classes. The actual code for specific types is generated at compile time, which avoids the overhead of runtime polymorphism. The use of templates is the main technique to achieve static polymorphism in C++.\n\nExample:\n\n #include \n \n // Template function to print any type\n template\n void print(const T& value) {\n std::cout << \"Printing value: \" << value << '\\n';\n }\n \n int main() {\n print(42); // int\n print(3.14159); // double\n print(\"Hello\"); // const char*\n \n return 0;\n }\n \n\nIn conclusion, static polymorphism achieves polymorphic behavior during compile time using function overloading and templates, instead of relying on runtime information like dynamic polymorphism does. This can result in more efficient code since method calls are resolved at compile time.", + "links": [] + }, + "sgfqb22sdN4VRJYkhAVaf": { + "title": "Function Overloading", + "description": "", + "links": [] + }, + "llCBeut_uc9IAe2oi4KZ9": { + "title": "Operator Overloading", + "description": "Operators in C++ are symbols that perform various operations on data, such as arithmetic, comparison, and logical operations. They are used to manipulate and evaluate expressions and variables.\n\nHere is a list of the commonly used operator types in C++:\n\n* **Arithmetic Operators**: These are used for performing arithmetic operations like addition, subtraction, multiplication, and division.\n \n * `+`: addition\n \n int sum = 5 + 3; // sum will be 8\n \n \n * `-`: subtraction\n \n int difference = 5 - 3; // difference will be 2\n \n \n * `*`: multiplication\n \n int product = 5 * 3; // product will be 15\n \n \n * `/`: division\n \n int quotient = 15 / 3; // quotient will be 5\n \n \n * `%`: modulo (remainder)\n \n int remainder = 7 % 3; // remainder will be 1\n \n \n* **Comparison (Relational) Operators**: These are used to compare two values and return true or false based on the comparison.\n \n * `==`: equal to\n \n bool isEqual = (5 == 3); // isEqual will be false\n \n \n * `!=`: not equal to\n \n bool isNotEqual = (5 != 3); // isNotEqual will be true\n \n \n * `<`: less than\n \n bool isLess = (5 < 3); // isLess will be false\n \n \n * `>`: greater than\n \n bool isGreater = (5 > 3); // isGreater will be true\n \n \n * `<=`: less than or equal to\n \n bool isLessOrEqual = (5 <= 3); // isLessOrEqual will be false\n \n \n * `>=`: greater than or equal to\n \n bool isGreaterOrEqual = (5 >= 3); // isGreaterOrEqual will be true\n \n \n* **Logical Operators**: These operators are used to perform logical operations such as AND (&&), OR (||), and NOT (!) on boolean values.\n \n * `&&`: logical AND\n \n bool result = (true && false); // result will be false\n \n \n * `||`: logical OR\n \n bool result = (true || false); // result will be true\n \n \n * `!`: logical NOT\n \n bool result = !false; // result will be true\n \n \n* **Assignment Operators**: These are used to assign values to variables.\n \n * `=`: simple assignment\n \n int x = 5; // x gets the value 5\n \n \n * `+=`: addition assignment\n \n int x = 5;\n x += 3; // x gets the value 8 (5 + 3)\n \n \n * `-=`: subtraction assignment\n \n int x = 5;\n x -= 3; // x gets the value 2 (5 - 3)\n \n \n * `*=`: multiplication assignment\n \n int x = 5;\n x *= 3; // x gets the value 15 (5 * 3)\n \n \n * `/=`: division assignment\n \n int x = 15;\n x /= 3; // x gets the value 5 (15 / 3)\n \n \n * `%=`: modulo assignment\n \n int x = 7;\n x %= 3; // x gets the value 1 (7 % 3)\n \n \n\nThese are some of the main operator categories in C++. Each operator allows you to perform specific operations, making your code more efficient and concise.", + "links": [] + }, + "xjiFBVe-VGqCqWfkPVGKf": { + "title": "Lambdas", + "description": "A lambda function, or simply \"lambda\", is an anonymous (unnamed) function that is defined in place, within your source code, and with a concise syntax. Lambda functions were introduced in C++11 and have since become a widely used feature, especially in combination with the Standard Library algorithms.\n\nSyntax\n------\n\nHere is a basic syntax of a lambda function in C++:\n\n [capture-list](parameters) -> return_type {\n // function body\n };\n \n\n* **capture-list**: A list of variables from the surrounding scope that the lambda function can access.\n* **parameters**: The list of input parameters, just like in a regular function. Optional.\n* **return\\_type**: The type of the value that the lambda function will return. This part is optional, and the compiler can deduce it in many cases.\n* **function body**: The code that defines the operation of the lambda function.\n\nUsage Examples\n--------------\n\nHere are a few examples to demonstrate the use of lambda functions in C++:\n\n* Lambda function with no capture, parameters, or return type.\n\n auto printHello = []() {\n std::cout << \"Hello, World!\\n\";\n };\n printHello(); // Output: Hello, World!\n \n\n* Lambda function with parameters.\n\n auto add = [](int a, int b) {\n return a + b;\n };\n int result = add(3, 4); // result = 7\n \n\n* Lambda function with capture-by-value.\n\n int multiplier = 3;\n auto times = [multiplier](int a) {\n return a * multiplier;\n };\n int result = times(5); // result = 15\n \n\n* Lambda function with capture-by-reference.\n\n int expiresInDays = 45;\n auto updateDays = [&expiresInDays](int newDays) {\n expiresInDays = newDays;\n };\n updateDays(30); // expiresInDays = 30\n \n\nNote that, when using the capture by reference, any change made to the captured variable _inside_ the lambda function will affect its value in the surrounding scope.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Lambda Expressions", + "url": "https://en.cppreference.com/w/cpp/language/lambda", + "type": "article" + }, + { + "title": "Explore top posts about AWS Lambda", + "url": "https://app.daily.dev/tags/aws-lambda?ref=roadmapsh", + "type": "article" + }, + { + "title": "Lambdas in C++", + "url": "https://youtu.be/MH8mLFqj-n8", + "type": "video" + } + ] + }, + "MwznA4qfpNlv6sqSNjPZi": { + "title": "Data Types", + "description": "In C++, data types are used to categorize different types of data that a program can process. They are essential for determining the type of value a variable can hold and how much memory space it will occupy. Some basic data types in C++ include integers, floating-point numbers, characters, and booleans.\n\nFundamental Data Types\n----------------------\n\nInteger (int)\n-------------\n\nIntegers are whole numbers that can store both positive and negative values. The size of `int` depends on the system architecture (usually 4 bytes).\n\nExample:\n\n int num = 42;\n \n\nThere are variants of `int` that can hold different ranges of numbers:\n\n* short (`short int`): Smaller range than `int`.\n* long (`long int`): Larger range than `int`.\n* long long (`long long int`): Even larger range than `long int`.\n\nFloating-Point (float, double)\n------------------------------\n\nFloating-point types represent real numbers, i.e., numbers with a decimal point. There are two main floating-point types:\n\n* **float**: Provides single-precision floating-point numbers. It typically occupies 4 bytes of memory.\n\nExample:\n\n float pi = 3.14f;\n \n\n* **double**: Provides double-precision floating-point numbers. It consumes more memory (usually 8 bytes) but has a higher precision than `float`.\n\nExample:\n\n double pi_high_precision = 3.1415926535;\n \n\nCharacter (char)\n----------------\n\nCharacters represent a single character, such as a letter, digit, or symbol. They are stored using the ASCII value of the symbol and typically occupy 1 byte of memory.\n\nExample:\n\n char letter = 'A';\n \n\nBoolean (bool)\n--------------\n\nBooleans represent logical values: `true` or `false`. They usually occupy 1 byte of memory.\n\nExample:\n\n bool is_cpp_great = true;\n \n\nDerived Data Types\n------------------\n\nDerived data types are types that are derived from fundamental data types. Some examples include:\n\nArrays\n------\n\nArrays are used to store multiple values of the same data type in consecutive memory locations.\n\nExample:\n\n int numbers[5] = {1, 2, 3, 4, 5};\n \n\nPointers\n--------\n\nPointers are used to store the memory address of a variable.\n\nExample:\n\n int num = 42;\n int* pNum = #\n \n\nReferences\n----------\n\nReferences are an alternative way to share memory locations between variables, allowing you to create an alias for another variable.\n\nExample:\n\n int num = 42;\n int& numRef = num;\n \n\nUser-Defined Data Types\n-----------------------\n\nUser-defined data types are types that are defined by the programmer, such as structures, classes, and unions.\n\nStructures (struct)\n-------------------\n\nStructures are used to store different data types under a single variable and accessibility of member variables and methods are public.\n\nExample:\n\n struct Person {\n std::string name;\n int age;\n float height;\n };\n \n Person p1 = {\"John Doe\", 30, 5.9};\n \n\nClasses (class)\n---------------\n\nClasses are similar to structures, but the accessibility of the member data and function are governed by access specifiers. By default access to members of a class is private.\n\nExample:\n\n class Person {\n public:\n std::string name;\n int age;\n \n void printInfo() {\n std::cout << \"Name: \" << name << \", Age: \" << age << '\\n';\n };\n };\n \n Person p1;\n p1.name = \"John Doe\";\n p1.age = 30;\n \n\nUnions (union)\n--------------\n\nUnions are used to store different data types in the same memory location.\n\nExample:\n\n union Data {\n int num;\n char letter;\n float decimal;\n };\n \n Data myData;\n myData.num = 42;", + "links": [] + }, + "f1djN0GxoeVPr_0cl6vMq": { + "title": "Static Typing", + "description": "In C++, static typing means that the data type of a variable is determined at compile time, before the program is executed. This means that a variable can only be used with data of a specific type, and the compiler ensures that the operations performed with the variable are compatible with its type. If there is a mismatch , the compiler will adjust the data type of variable to match another provided it's feasible . This process is known as `Type Conversion`. If compiler not able to achieve type conversion , `Invalid Type Conversion` error will be raised during compilation of the code .\n\nC++ is a statically typed language, which means that it uses static typing to determine data types and perform type checking during compile time. This helps with ensuring type safety and can prevent certain types of errors from occurring during the execution of the program.\n\nHere's a simple code example to demonstrate static typing in C++:\n\n #include \n \n int main() {\n int num = 65; // 'num' is statically typed as an integer\n double pi = 3.14159; // 'pi' is statically typed as a double\n char c = 'c'; // 'c' is statically typed as a char\n \n c = num; // This asssigment would convert num's value to ASCII equivalent character\n num = pi; // This assignment would convert pi's value from double type to int type\n \n std::cout << \"The value of num is: \" << num << '\\n';\n std::cout << \"The value of pi is: \" << pi << '\\n';\n std::cout << \"The value of c is: \"<< c << '\\n';\n return 0;\n }\n \n\nIn the code above, the variable `num` is statically typed as an `int`, `pi` is statically typed as a `double`, and `c` is statically typed as a `char`. If you attempt to assign the value of `pi` to `num`, the value `3.14159` will be converted to the integer `3` and assigned to `num`. Similarly, when the value of `num` is assigned to `c`, the compiler will convert the value `65` to its corresponding [ASCII](https://www.ascii-code.com) code, which is `A`.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Type-Coversion", + "url": "https://www.programiz.com/cpp-programming/type-conversion", + "type": "article" + }, + { + "title": "Static Vs Dynamic", + "url": "https://www.techtarget.com/searchapparchitecture/tip/Static-vs-dynamic-typing-The-details-and-differences", + "type": "article" + } + ] + }, + "i0EAFEUB-F0wBJWOtrl1A": { + "title": "Dynamic Typing", + "description": "C++ is known as a statically-typed language, which means the data types of its variables are determined at compile time. However, C++ also provides concepts to have certain level of _dynamic typing_, which means determining the data types of variables at runtime.\n\nHere is a brief overview of two ways to achieve dynamic typing in C++:\n\n`void*` Pointers\n----------------\n\nA `void*` pointer is a generic pointer that can point to objects of any data type. They can be used to store a reference to any type of object without knowing the specific type of the object.\n\nExample:\n\n #include \n \n int main() {\n int x = 42;\n float y = 3.14f;\n std::string z = \"Hello, world!\";\n \n void* void_ptr;\n \n void_ptr = &x;\n std::cout << \"int value: \" << *(static_cast(void_ptr)) << '\\n';\n \n void_ptr = &y;\n std::cout << \"float value: \" << *(static_cast(void_ptr)) << '\\n';\n \n void_ptr = &z;\n std::cout << \"string value: \" << *(static_cast(void_ptr)) << '\\n';\n \n return 0;\n }\n \n\n`std::any` (C++17)\n------------------\n\nC++17 introduced the `std::any` class which represents a generalized type-safe container for single values of any type.\n\nExample:\n\n #include \n #include \n \n int main() {\n std::any any_value;\n \n any_value = 42;\n std::cout << \"int value: \" << std::any_cast(any_value) << '\\n';\n \n any_value = 3.14;\n std::cout << \"double value: \" << std::any_cast(any_value) << '\\n';\n \n any_value = std::string(\"Hello, world!\");\n std::cout << \"string value: \" << std::any_cast(any_value) << '\\n';\n \n return 0;\n }\n \n\nKeep in mind that both `void*` pointers and `std::any` have performance implications due to the additional type checking and casting that take place during runtime. They should be used carefully and only when absolutely necessary.", + "links": [] + }, + "r0yD1gfn03wTpEBi6zNsu": { + "title": "RTTI", + "description": "Run-Time Type Identification (RTTI) is a feature in C++ that allows you to obtain the type information of an object during program execution. This can be useful when using dynamic typing, where the type of an object can change at runtime.\n\nThere are two main mechanisms for RTTI in C++:\n\n* `typeid` operator\n* `dynamic_cast` operator\n\ntypeid operator\n---------------\n\n`typeid` is an operator that returns a reference to an object of type `std::type_info`, which contains information about the type of the object. The header file `` should be included to use `typeid`.\n\nHere is an example:\n\n #include \n #include \n \n class Base { virtual void dummy() {} };\n class Derived : public Base { /* ... */ };\n \n int main() {\n Base* base_ptr = new Derived;\n \n // Using typeid to get the type of the object\n std::cout << \"Type: \" << typeid(*base_ptr).name() << '\\n';\n \n delete base_ptr;\n return 0;\n }\n \n\ndynamic\\_cast operator\n----------------------\n\n`dynamic_cast` is a type-casting operator that performs a runtime type check and safely downcasts a base pointer or reference to a derived pointer or reference. It returns null or throws a bad\\_cast exception (if casting references) when the casting fails.\n\nHere is an example:\n\n #include \n \n class Base { virtual void dummy() {} };\n class Derived1 : public Base { /* ... */ };\n class Derived2 : public Base { /* ... */ };\n \n int main() {\n Base* base_ptr = new Derived1;\n \n // Using dynamic_cast to safely downcast the pointer\n Derived1* derived1_ptr = dynamic_cast(base_ptr);\n if (derived1_ptr) {\n std::cout << \"Downcast to Derived1 successful\\n\";\n }\n else {\n std::cout << \"Downcast to Derived1 failed\\n\";\n }\n \n Derived2* derived2_ptr = dynamic_cast(base_ptr);\n if (derived2_ptr) {\n std::cout << \"Downcast to Derived2 successful\\n\";\n }\n else {\n std::cout << \"Downcast to Derived2 failed\\n\";\n }\n \n delete base_ptr;\n return 0;\n }\n \n\nPlease note that the use of RTTI can have some performance overhead, as it requires additional compiler-generated information to be stored and processed during runtime.", + "links": [] + }, + "DWw8NxkLpIpiOSUaZZ1oA": { + "title": "Pointers and References", + "description": "A pointer is a variable that stores the memory address of another variable (or function). It points to the location of the variable in memory, and it allows you to access or modify the value indirectly. Here's a general format to declare a pointer:\n\n dataType *pointerName;\n \n\n**Initializing a pointer:**\n\n int num = 10;\n int *ptr = # // Pointer 'ptr' now points to the memory address of 'num'\n \n\n**Accessing value using a pointer:**\n\n int value = *ptr; // Value now contains the value of the variable that 'ptr' points to (i.e., 10)\n \n\n**Function pointer:**\n\n int add(int a, int b)\n {\n return a + b;\n }\n \n int main()\n {\n int (*funcptr) (int, int) = add; // Pointer 'funcptr' now points to the functions 'add'\n funcptr(4, 5); // Return 9\n }\n \n\nReferences\n----------\n\nA reference is an alias for an existing variable, meaning it's a different name for the same memory location. Unlike pointers, references cannot be null, and they must be initialized when they are declared. Once a reference is initialized, it cannot be changed to refer to another variable.\n\nHere's a general format to declare a reference:\n\n dataType &referenceName = existingVariable;\n \n\n**Example:**\n\n int num = 10;\n int &ref = num; // Reference 'ref' is now an alias of 'num'\n \n\nModifying the value of `ref` will also modify the value of `num` because they share the same memory location.\n\n**Note:** References are generally used when you want to pass a variable by reference in function arguments or when you want to create an alias for a variable without the need for pointer syntax.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Function Pointer in C++", + "url": "https://www.scaler.com/topics/cpp/function-pointer-cpp/", + "type": "article" + } + ] + }, + "uUzRKa9wGzdUwwmAg3FWr": { + "title": "References", + "description": "A reference can be considered as a constant pointer (not to be confused with a pointer to a constant value) which always points to (references) the same object. They are declared using the `&` (ampersand) symbol.\n\nDeclaration and Initialization\n------------------------------\n\nTo declare a reference, use the `&` symbol followed by the variable type and the reference's name. Note that you must initialize a reference when you declare it.\n\n int var = 10; // Declare an integer variable\n int& ref = var; // Declare a reference that \"points to\" var\n \n\nUsage\n-----\n\nYou can use the reference just like you'd use the original variable. When you change the value of the reference, the value of the original variable also changes, because they both share the same memory location.\n\n var = 20; // Sets the value of var to 20\n std::cout << ref << '\\n'; // Outputs 20\n \n ref = 30; // Sets the value of ref to 30\n std::cout << var << '\\n'; // Outputs 30\n \n\nFunction Parameters\n-------------------\n\nYou can use references as function parameters to create an alias for an argument. This is commonly done when you need to modify the original variable or when passing an object of considerable size to avoid the cost of copying.\n\n void swap(int& a, int& b) {\n int temp = a;\n a = b;\n b = temp;\n }\n \n int main() {\n int x = 5, y = 10;\n std::cout << \"Before Swap: x = \" << x << \" y = \" << y << '\\n'; // Outputs 5 10\n \n swap(x, y);\n std::cout << \"After Swap: x = \" << x << \" y = \" << y << '\\n'; // Outputs 10 5\n }", + "links": [] + }, + "mSFwsTYvmg-GwG4_DEIEf": { + "title": "Memory Model", + "description": "The memory model in C++ defines how the program stores and accesses data in computer memory. It consists of different segments, such as the Stack, Heap, Data and Code segments. Each of these segments is used to store different types of data and has specific characteristics.\n\nStack Memory\n------------\n\nStack memory is used for automatic storage duration variables, such as local variables and function call data. Stack memory is managed by the compiler, and it's allocation and deallocation are done automatically. The stack memory is also a LIFO (Last In First Out) data structure, meaning that the most recent data allocated is the first to be deallocated.\n\n void functionExample() {\n int x = 10; // x is stored in the stack memory\n }\n \n\nHeap Memory\n-----------\n\nHeap memory is used for dynamic storage duration variables, such as objects created using the `new` keyword. The programmer has control over the allocation and deallocation of heap memory using `new` and `delete` operators. Heap memory is a larger pool of memory than the stack, but has a slower access time.\n\n void functionExample() {\n int* p = new int; // dynamically allocated int in heap memory\n *p = 10;\n // more code\n delete p; // deallocate memory\n }\n \n\nData Segment\n------------\n\nThe Data segment is composed of two parts: the initialized data segment and the uninitialized data segment. The initialized data segment stores global, static, and constant variables with initial values, whereas the uninitialized segment stores uninitialized global and static variables.\n\n // Initialized data segment\n int globalVar = 10; // global variables\n static int staticVar = 10; // static local variables\n const int constVar = 10; // constant variables with value\n \n // Uninitialized data segment\n int globalVar; // uninitialized global variables\n \n\nCode Segment\n------------\n\nThe Code segment (also known as the Text segment) stores the executable code (machine code) of the program. It's usually located in a read-only area of memory to prevent accidental modification.\n\n void functionExample() {\n // The machine code for this function is stored in the code segment.\n }\n \n\nIn summary, understanding the memory model in C++ helps to optimize the usage of memory resources and improves overall program performance.", + "links": [] + }, + "9aA_-IfQ9WmbPgwic0mFN": { + "title": "Lifetime of Objects", + "description": "Object lifetime refers to the time during which an object exists, from the moment it is created until it is destroyed. In C++, an object's lifetime can be classified into four categories:\n\n* **Static Storage Duration**: Objects with static storage duration exist for the entire run of the program. These objects are allocated at the beginning of the program's run and deallocated when the program terminates. Global variables, static data members, and static local variables fall into this category.\n \n int global_var; // Static storage duration\n class MyClass {\n static int static_var; // Static storage duration\n };\n void myFunction() {\n static int local_var; // Static storage duration\n }\n \n \n* **Thread Storage Duration**: Objects with thread storage duration exist for the lifetime of the thread they belong to. They are created when a thread starts and destroyed when the thread exits. Thread storage duration can be specified using the `thread_local` keyword.\n \n thread_local int my_var; // Thread storage duration\n \n \n* **Automatic Storage Duration**: Objects with automatic storage duration are created at the point of definition and destroyed when the scope in which they are declared is exited. These objects are also known as \"local\" or \"stack\" objects. Function parameters and local non-static variables fall into this category.\n \n void myFunction() {\n int local_var; // Automatic storage duration\n }\n \n \n* **Dynamic Storage Duration**: Objects with dynamic storage duration are created at runtime, using memory allocation functions such as `new` or `malloc`. The lifetime of these objects must be managed manually, as they are not automatically deallocated when the scope is exited. Instead, it is the programmer's responsibility to destroy the objects using the `delete` or `free` functions when they are no longer needed, to avoid memory leaks.\n \n int* ptr = new int; // Dynamic storage duration\n delete ptr;\n \n \n\nUnderstanding object lifetimes is essential for managing memory efficiently in C++ programs and avoiding common issues like memory leaks and undefined behavior.\n\nKeep in mind that a proper understanding of constructors and destructors for classes is also essential when working with objects of varying lifetimes, as they allow you to control the behavior of object creation and destruction.", + "links": [] + }, + "ulvwm4rRPgkpgaqGgyH5a": { + "title": "Smart Pointers", + "description": "", + "links": [] + }, + "vUwSS-uX36OWZouO0wOcy": { + "title": "weak_ptr", + "description": "", + "links": [] + }, + "b5jZIZD_U_CPg-_bdndjz": { + "title": "shared_ptr", + "description": "", + "links": [] + }, + "k9c5seRkhgm_yHPpiz2X0": { + "title": "unique_ptr", + "description": "", + "links": [] + }, + "uEGEmbxegATIrvGfobJb9": { + "title": "Raw Pointers", + "description": "", + "links": [] + }, + "Gld0nRs0sM8kRe8XmYolu": { + "title": "New/Delete Operators", + "description": "", + "links": [] + }, + "6w0WExQ4lGIGgok6Thq0s": { + "title": "Memory Leakage", + "description": "", + "links": [] + }, + "Zw2AOTK5uc9BoKEpY7W1C": { + "title": "Structuring Codebase", + "description": "Structuring codebase is an essential part of software development that deals with organizing and modularizing your code to make it more maintainable, efficient, and easier to understand. A well-structured codebase enhances collaboration, simplifies adding new features, and makes debugging faster. In C++, there are various techniques to help you structure your codebase effectively.\n\nNamespaces\n----------\n\nNamespaces are one of the tools in C++ to organize your code by providing a named scope for different identifiers you create, like functions, classes, and variables. They help avoid name clashes and make your code more modular.\n\n namespace MyNamespace {\n int aFunction() {\n // function implementation\n }\n }\n // to use the function\n MyNamespace::aFunction();\n \n\nInclude Guards\n--------------\n\nInclude guards are a tool for preventing multiple inclusions of a header file in your project. They consist of preprocessor directives that conditionally include the header file only once, even if it's included in multiple places.\n\n #ifndef MY_HEADER_FILE_H\n #define MY_HEADER_FILE_H\n \n // Your code here\n \n #endif // MY_HEADER_FILE_H\n \n\nHeader and Source Files\n-----------------------\n\nSeparating your implementation and declarations into header (_.h) and source (_.cpp) files is a key aspect of structuring your codebase in C++. Header files usually contain class and function declarations, while source files contain their definitions.\n\n// MyClass.h\n\n #ifndef MY_CLASS_H\n #define MY_CLASS_H\n \n class MyClass\n {\n public:\n MyClass();\n int myMethod();\n };\n \n #endif // MY_CLASS_H\n \n\n// MyClass.cpp\n\n #include \"MyClass.h\"\n \n MyClass::MyClass() {\n // constructor implementation\n }\n \n int MyClass::myMethod() {\n // method implementation\n }\n \n\nCode Formatting\n---------------\n\nConsistent code formatting and indentation play a crucial role in structuring your codebase, making it easier to read and understand for both you and other developers. A style guide such as the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) can help you maintain consistent formatting throughout your project.", + "links": [] + }, + "dKCYmxDNZubCVcR5rf8b-": { + "title": "Scope", + "description": "**Scope** refers to the visibility and accessibility of variables, functions, classes, and other identifiers in a C++ program. It determines the lifetime and extent of these identifiers. In C++, there are four types of scope:\n\n* **Global scope:** Identifiers declared outside any function or class have a global scope. They can be accessed from any part of the program (unless hidden by a local identifier with the same name). The lifetime of a global identifier is the entire duration of the program.\n\n #include \n \n int globalVar; // This is a global variable\n \n int main() {\n std::cout << \"Global variable: \" << globalVar << '\\n';\n }\n \n\n* **Local scope:** Identifiers declared within a function or a block have a local scope. They can be accessed only within the function or the block they were declared in. Their lifetime is limited to the duration of the function/block execution.\n\n #include \n \n void localExample() {\n int localVar; // This is a local variable\n localVar = 5;\n std::cout << \"Local variable: \" << localVar << '\\n';\n }\n \n int main() {\n localExample();\n // std::cout << localVar << '\\n'; //error: ‘localVar’ was not declared in this scope\n }\n \n\n* **Namespace scope:** A namespace is a named scope that groups related identifiers together. Identifiers declared within a namespace have the namespace scope. They can be accessed using the namespace name and the scope resolution operator `::`.\n\n #include \n \n namespace MyNamespace {\n int namespaceVar = 42;\n }\n \n int main() {\n std::cout << \"Namespace variable: \" << MyNamespace::namespaceVar << '\\n';\n }\n \n\n* **Class scope:** Identifiers declared within a class have a class scope. They can be accessed using the class name and the scope resolution operator `::` or, for non-static members, an object of the class and the dot `.` or arrow `->` operator.\n\n #include \n \n class MyClass {\n public:\n static int staticMember;\n int nonStaticMember;\n \n MyClass(int value) : nonStaticMember(value) {}\n };\n \n int MyClass::staticMember = 7;\n \n int main() {\n MyClass obj(10);\n std::cout << \"Static member: \" << MyClass::staticMember << '\\n';\n std::cout << \"Non-static member: \" << obj.nonStaticMember << '\\n';\n }\n \n\nUnderstanding various types of scope in C++ is essential for effective code structuring and management of resources in a codebase.", + "links": [] + }, + "iIdC7V8sojwyEqK1xMuHn": { + "title": "Namespaces", + "description": "In C++, a namespace is a named scope or container that is used to organize and enclose a collection of code elements, such as variables, functions, classes, and other namespaces. They are mainly used to divide and manage the code base, giving developers control over name collisions and the specialization of code.\n\nSyntax\n------\n\nHere's the syntax for declaring a namespace:\n\n namespace identifier {\n // code elements\n }\n \n\nUsing Namespaces\n----------------\n\nTo access elements within a namespace, you can use the scope resolution operator `::`. Here are some examples:\n\n### Declaring and accessing a namespace\n\n #include \n \n namespace animals {\n std::string dog = \"Bobby\";\n std::string cat = \"Lilly\";\n }\n \n int main() {\n std::cout << \"Dog's name: \" << animals::dog << '\\n';\n std::cout << \"Cat's name: \" << animals::cat << '\\n';\n \n return 0;\n }\n \n\n### Nesting namespaces\n\nNamespaces can be nested within other namespaces:\n\n #include \n \n namespace outer {\n int x = 10;\n \n namespace inner {\n int y = 20;\n }\n }\n \n int main() {\n std::cout << \"Outer x: \" << outer::x << '\\n';\n std::cout << \"Inner y: \" << outer::inner::y << '\\n';\n \n return 0;\n }\n \n\n`using` Keyword\n---------------\n\nYou can use the `using` keyword to import namespaced elements into the current scope. However, this might lead to name conflicts if multiple namespaces have elements with the same name.\n\n### Using a single element from a namespace\n\n #include \n \n namespace animals {\n std::string dog = \"Bobby\";\n std::string cat = \"Lilly\";\n }\n \n int main() {\n using animals::dog;\n \n std::cout << \"Dog's name: \" << dog << '\\n';\n \n return 0;\n }\n \n\n### Using the entire namespace\n\n #include \n \n namespace animals {\n std::string dog = \"Bobby\";\n std::string cat = \"Lilly\";\n }\n \n int main() {\n using namespace animals;\n \n std::cout << \"Dog's name: \" << dog << '\\n';\n std::cout << \"Cat's name: \" << cat << '\\n';\n \n return 0;\n }\n \n\nIn conclusion, namespaces are a useful mechanism in C++ to organize code, avoid naming conflicts, and manage the visibility of code elements.", + "links": [] + }, + "CK7yf8Bo7kfbV6x2tZTrh": { + "title": "Headers / CPP Files", + "description": "Code splitting refers to the process of breaking down a large code base into smaller, more manageable files or modules. This helps improve the organization, maintainability, and readability of the code. In C++, code splitting is generally achieved through the use of separate compilation, header files, and source files.\n\n### Header Files (.h or .hpp)\n\nHeader files, usually with the `.h` or `.hpp` extension, are responsible for declaring classes, functions, and variables that are needed by multiple source files. They act as an interface between different parts of the code, making it easier to manage dependencies and reduce the chances of duplicated code.\n\nExample of a header file:\n\n // example.h\n #ifndef EXAMPLE_H\n #define EXAMPLE_H\n \n class Example {\n public:\n void printMessage();\n };\n \n #endif\n \n\n### Source Files (.cpp)\n\nSource files, with the `.cpp` extension, are responsible for implementing the actual functionality defined in the corresponding header files. They include the header files as needed and provide the function and class method definitions.\n\nExample of a source file:\n\n // example.cpp\n #include \"example.h\"\n #include \n \n void Example::printMessage() {\n std::cout << \"Hello, code splitting!\\n\";\n }\n \n\n### Separate Compilation\n\nC++ allows for separate compilation, which means that each source file can be compiled independently into an object file. These object files can then be linked together to form the final executable. This provides faster build times when making changes to a single source file since only that file needs to be recompiled, and the other object files can be reused.\n\nExample of separate compilation and linking:\n\n # Compile each source file into an object file\n g++ -c main.cpp -o main.o\n g++ -c example.cpp -o example.o\n \n # Link object files together to create the executable\n g++ main.o example.o -o my_program\n \n\nBy following the code splitting technique, you can better organize your C++ codebase, making it more manageable and maintainable.", + "links": [] + }, + "CMlWNQwpywNhO9B6Yj6Me": { + "title": "Structures and Classes", + "description": "Structures and classes are user-defined data types in C++ that allow for the grouping of variables of different data types under a single name. They make it easier to manage and organize complex data by creating objects that have particular attributes and behaviors. The main difference between a structure and a class is their default access specifier: members of a structure are public by default, while members of a class are private.\n\nStructures\n----------\n\nA structure is defined using the `struct` keyword, followed by the structure's name and a set of curly braces `{}` enclosing the members (variables and/or functions) of the structure. The members can be of different data types. To create an object of the structure's type, use the structure name followed by the object name.\n\nHere's an example of defining a structure and creating an object:\n\n struct Employee {\n int id;\n std::string name;\n float salary;\n };\n \n Employee e1; // create an object of the 'Employee' structure\n \n\nYou can access the members of a structure using the dot operator `.`:\n\n e1.id = 1;\n e1.name = \"John Doe\";\n e1.salary = 40000;\n \n\nClasses\n-------\n\nA class is defined using the `class` keyword, followed by the class's name and a set of curly braces `{}` enclosing the members (variables and/or functions) of the class. Like structures, class members can be of different data types. You can create objects of a class using the class name followed by the object name.\n\nHere's an example of a class definition and object creation:\n\n class Student {\n int roll_no;\n std::string name;\n float marks;\n \n public:\n void set_data(int r, std::string n, float m) {\n roll_no = r;\n name = n;\n marks = m;\n }\n \n void display() {\n std::cout << \"Roll no: \" << roll_no\n << \"\\nName: \" << name\n << \"\\nMarks: \" << marks << '\\n';\n }\n };\n \n Student s1; // create an object of the 'Student' class\n \n\nSince the data members of a class are private by default, we cannot access them directly using the dot operator from outside the class. Instead, we use public member functions to set or get their values:\n\n s1.set_data(1, \"Alice\", 95.0);\n s1.display();\n \n\nThat's a brief summary of structures and classes in C++. Remember that while they may seem similar, classes provide more control over data encapsulation and can be used to implement more advanced features like inheritance and polymorphism.", + "links": [] + }, + "7sdEzZCIoarzznwO4XcCv": { + "title": "Rule of Zero, Five, Three", + "description": "**Rule of Zero, Three, and Five in C++**\n\nThe Rule of Zero, Three, and Five is a set of guidelines for managing object resources in modern C++, related to structures and classes. These rules deal with the default behavior of constructors, destructors, and other special member functions that are necessary for proper resource management.\n\n**Rule of Zero**\n\nThe Rule of Zero states that if a class or structure does not explicitly manage resources, it should not define any of the special member functions, i.e., destructor, copy constructor, copy assignment operator, move constructor, and move assignment operator. The compiler will automatically generate these functions, and the behavior will be correct for managing resources like memory and file handles.\n\n_Example:_\n\n struct MyResource {\n std::string name;\n int value;\n };\n \n\nIn this example, MyResource is a simple structure that does not manage any resources, so it does not define any special member functions. The compiler will generate them automatically, and the behavior will be correct.\n\n**Rule of Three**\n\nThe Rule of Three states that a class or structure that manages resources should define the following three special member functions:\n\n* Destructor\n* Copy constructor\n* Copy assignment operator\n\nThese functions are necessary for proper resource management, such as releasing memory or correctly handling deep copies.\n\n_Example:_\n\n class MyResource {\n public:\n // Constructor and destructor\n MyResource() : data(new int[100]) {} \n ~MyResource() { delete[] data; } \n \n // Copy constructor\n MyResource(const MyResource& other) : data(new int[100]) {\n std::copy(other.data, other.data + 100, data);\n }\n \n // Copy assignment operator\n MyResource& operator=(const MyResource& other) {\n if (&other == this) { return *this; }\n std::copy(other.data, other.data + 100, data);\n return *this;\n }\n \n private:\n int* data;\n };\n \n\nIn this example, MyResource is a class that manages a resource (an array of integers), so it defines the destructor, copy constructor, and copy assignment operator.\n\n**Rule of Five**\n\nThe Rule of Five extends the Rule of Three to include two additional special member functions:\n\n* Move constructor\n* Move assignment operator\n\nModern C++ introduces move semantics, which allows for more efficient handling of resources by transferring ownership without necessarily copying all the data.\n\n_Example:_\n\n class MyResource {\n public:\n // Constructors and destructor\n MyResource() : data(new int[100]) {}\n ~MyResource() { delete[] data; }\n \n // Copy constructor\n MyResource(const MyResource& other) : data(new int[100]) {\n std::copy(other.data, other.data + 100, data);\n }\n \n // Copy assignment operator\n MyResource& operator=(const MyResource& other) {\n if (&other == this) { return *this; }\n std::copy(other.data, other.data + 100, data);\n return *this;\n }\n \n // Move constructor\n MyResource(MyResource&& other) noexcept : data(other.data) {\n other.data = nullptr;\n }\n \n // Move assignment operator\n MyResource& operator=(MyResource&& other) noexcept {\n if (&other == this) { return *this; }\n delete[] data;\n data = other.data;\n other.data = nullptr;\n return *this;\n }\n \n private:\n int* data;\n };\n \n\nIn this example, MyResource is a class that manages a resource (an array of integers), so it defines all five special member functions for proper resource management and move semantics.", + "links": [] + }, + "WjHpueZDK-d3oDNMVZi9w": { + "title": "Multiple Inheritance", + "description": "Multiple inheritance is a feature in C++ where a class can inherit characteristics (data members and member functions) from more than one parent class. The concept is similar to single inheritance (where a class inherits from a single base class), but in multiple inheritance, a class can have multiple base classes.\n\nWhen a class inherits multiple base classes, it becomes a mixture of their properties and behaviors, and can override or extend them as needed.\n\nSyntax\n------\n\nHere is the syntax to declare a class with multiple inheritance:\n\n class DerivedClass : access-specifier BaseClass1, access-specifier BaseClass2, ...\n {\n // class body\n };\n \n\nThe `DerivedClass` will inherit members from both `BaseClass1` and `BaseClass2`. The `access-specifier` (like `public`, `protected`, or `private`) determines the accessibility of the inherited members.\n\nExample\n-------\n\nHere is an example of multiple inheritance in action:\n\n #include \n \n // Base class 1\n class Animal\n {\n public:\n void eat()\n {\n std::cout << \"I can eat!\\n\";\n }\n };\n \n // Base class 2\n class Mammal\n {\n public:\n void breath()\n {\n std::cout << \"I can breathe!\\n\";\n }\n };\n \n // Derived class inheriting from both Animal and Mammal\n class Dog : public Animal, public Mammal\n {\n public:\n void bark()\n {\n std::cout << \"I can bark! Woof woof!\\n\";\n }\n };\n \n int main()\n {\n Dog myDog;\n \n // Calling members from both base classes\n myDog.eat();\n myDog.breath();\n \n // Calling a member from the derived class\n myDog.bark();\n \n return 0;\n }\n \n\nNote\n----\n\nIn some cases, multiple inheritance can lead to complications such as ambiguity and the \"diamond problem\". Ensure that you use multiple inheritance judiciously and maintain well-structured and modular classes to prevent issues.\n\nFor more information on C++ multiple inheritance and related topics, refer to C++ documentation or a comprehensive C++ programming guide.", + "links": [] + }, + "b3-QYKNcW3LYCNOza3Olf": { + "title": "Object Oriented Programming", + "description": "Object-oriented programming (OOP) is a programming paradigm that uses objects, which are instances of classes, to perform operations and interact with each other. In C++, you can achieve OOP through the use of classes and objects.\n\nClasses\n-------\n\nA class is a blueprint for creating objects. It defines the structure (data members) and behavior (member functions) for a type of object. Here's an example of a simple class:\n\n class Dog {\n public:\n std::string name;\n int age;\n \n void bark() {\n std::cout << name << \" barks!\\n\";\n }\n };\n \n\nThis `Dog` class has two data members: `name` and `age`, and one member function `bark`. You can create an object of this class and access its members like this:\n\n Dog myDog;\n myDog.name = \"Fido\";\n myDog.age = 3;\n myDog.bark(); // Output: Fido barks!\n \n\nEncapsulation\n-------------\n\nEncapsulation is the concept of bundling data and functions that operate on that data within a single unit, such as a class. It helps to hide the internal implementation details of a class and expose only the necessary information and functionalities. In C++, you can use access specifiers like `public`, `private`, and `protected` to control the visibility and accessibility of class members. For example:\n\n class Dog {\n private:\n std::string name;\n int age;\n \n public:\n void setName(std::string n) {\n name = n;\n }\n \n void setAge(int a) {\n age = a;\n }\n \n void bark() {\n std::cout << name << \" barks!\\n\";\n }\n };\n \n\nIn this example, we've made the `name` and `age` data members `private` and added public member functions `setName` and `setAge` to modify them. This way, the internal data of the `Dog` class is protected and only accessible through the provided functions.\n\nInheritance\n-----------\n\nInheritance is the concept of deriving new classes from existing ones, which enables code reusability and organization. In C++, inheritance is achieved by using a colon `:` followed by the base class' access specifier and the base class name. For example:\n\n class Animal {\n public:\n void breathe() {\n std::cout << \"I can breathe\\n\";\n }\n };\n \n class Dog : public Animal {\n public:\n void bark() {\n std::cout << \"Dog barks!\\n\";\n }\n };\n \n\nIn this example, the `Dog` class inherits from the `Animal` class, so the `Dog` class can access the `breathe` function from the `Animal` class. When you create a `Dog` object, you can use both `breathe` and `bark` functions.\n\n Dog myDog;\n myDog.breathe(); // Output: I can breathe\n myDog.bark(); // Output: Dog barks!\n \n\nPolymorphism\n------------\n\nPolymorphism allows you to use a single interface to represent different types. In C++, it's mainly achieved using function overloading, virtual functions, and overriding. For example:\n\n class Animal {\n public:\n virtual void makeSound() {\n std::cout << \"The Animal makes a sound\\n\";\n }\n };\n \n class Dog : public Animal {\n public:\n void makeSound() override {\n std::cout << \"Dog barks!\\n\";\n }\n };\n \n class Cat : public Animal {\n public:\n void makeSound() override {\n std::cout << \"Cat meows!\\n\";\n }\n };\n \n\nIn this example, we have an `Animal` base class with a virtual `makeSound` function. We then derive two classes, `Dog` and `Cat`, which override the `makeSound` function. This enables polymorphic behavior, where an `Animal` pointer or reference can be used to access the correct `makeSound` function depending on the derived class type.\n\n Animal *animals[2] = {new Dog, new Cat};\n animals[0]->makeSound(); // Output: Dog barks!\n animals[1]->makeSound(); // Output: Cat meows!\n \n\nThat's a brief overview of object-oriented programming concepts in C++.", + "links": [] + }, + "hNBErGNiegLsUJn_vgcOR": { + "title": "Virtual Methods", + "description": "", + "links": [] + }, + "s99ImazcwCgAESxZd8ksa": { + "title": "Virtual Tables", + "description": "", + "links": [] + }, + "7h1VivjCPDwriL7FirtFv": { + "title": "Dynamic Polymorphism", + "description": "Dynamic polymorphism is a programming concept in object-oriented languages like C++ where a derived class can override or redefine methods of its base class. This means that a single method call can have different implementations based on the type of object it is called on.\n\nDynamic polymorphism is achieved through **virtual functions**, which are member functions of a base class marked with the `virtual` keyword. When you specify a virtual function in a base class, it can be overridden in any derived class to provide a different implementation.\n\nExample\n-------\n\nHere's an example in C++ demonstrating dynamic polymorphism.\n\n #include \n \n // Base class\n class Shape {\n public:\n virtual void draw() {\n std::cout << \"Drawing a shape\\n\"; \n }\n };\n \n // Derived class 1\n class Circle : public Shape {\n public:\n void draw() override {\n std::cout << \"Drawing a circle\\n\"; \n }\n };\n \n // Derived class 2\n class Rectangle : public Shape {\n public:\n void draw() override {\n std::cout << \"Drawing a rectangle\\n\";\n }\n };\n \n int main() {\n Shape* shape;\n Circle circle;\n Rectangle rectangle;\n \n // Storing the address of circle\n shape = &circle;\n \n // Call circle draw function\n shape->draw();\n \n // Storing the address of rectangle\n shape = &rectangle;\n \n // Call rectangle draw function\n shape->draw();\n \n return 0;\n }\n \n\nThis code defines a base class `Shape` with a virtual function `draw`. Two derived classes `Circle` and `Rectangle` both override the `draw` function to provide their own implementations. Then in the `main` function, a pointer of type `Shape` is used to call the respective `draw` functions of `Circle` and `Rectangle` objects. The output of this program will be:\n\n Drawing a circle\n Drawing a rectangle\n \n\nAs you can see, using dynamic polymorphism, we can determine at runtime which `draw` method should be called based on the type of object being used.", + "links": [] + }, + "B2SGBENzUMl0SAjG4j91V": { + "title": "Exception Handling", + "description": "Exception handling in C++ is a mechanism to handle errors, anomalies, or unexpected events that can occur during the runtime execution of a program. This allows the program to continue running or exit gracefully when encountering errors instead of crashing abruptly.\n\nC++ provides a set of keywords and constructs for implementing exception handling:\n\n* `try`: Defines a block of code that should be monitored for exceptions.\n* `catch`: Specifies the type of exception to be caught and the block of code that shall be executed when that exception occurs.\n* `throw`: Throws an exception that will be caught and handled by the appropriate catch block.\n* `noexcept`: Specifies a function that doesn't throw exceptions or terminates the program if an exception is thrown within its scope.\n\nExample\n-------\n\nHere's an example demonstrating the basic usage of exception handling:\n\n #include \n \n int divide(int a, int b) {\n if (b == 0) {\n throw \"Division by zero!\";\n }\n return a / b;\n }\n \n int main() {\n int num1, num2;\n \n std::cout << \"Enter two numbers for division: \";\n std::cin >> num1 >> num2;\n \n try {\n int result = divide(num1, num2);\n std::cout << \"The result is: \" << result << '\\n';\n } catch (const char* msg) {\n std::cerr << \"Error: \" << msg << '\\n';\n }\n \n return 0;\n }\n \n\nIn this example, we define a function `divide` that throws an exception if `b` is zero. In the `main` function, we use a `try` block to call `divide` and output the result. If an exception is thrown, it is caught inside the `catch` block, which outputs an error message. This way, we can handle the error gracefully rather than letting the program crash when attempting to divide by zero.\n\nStandard Exceptions\n-------------------\n\nC++ provides a standard set of exception classes under the `` library which can be used as the exception type for more specific error handling. Some of these classes include:\n\n* `std::exception`: Base class for all standard exceptions.\n* `std::logic_error`: Represents errors which can be detected statically by the program.\n* `std::runtime_error`: Represents errors occurring during the execution of a program.\n\nHere's an example showing how to use standard exceptions:\n\n #include \n #include \n \n int divide(int a, int b) {\n if (b == 0) {\n throw std::runtime_error(\"Division by zero!\");\n }\n return a / b;\n }\n \n int main() {\n int num1, num2;\n \n std::cout << \"Enter two numbers for division: \";\n std::cin >> num1 >> num2;\n \n try {\n int result = divide(num1, num2);\n std::cout << \"The result is: \" << result << '\\n';\n } catch (const std::exception& e) {\n std::cerr << \"Error: \" << e.what() << '\\n';\n }\n \n return 0;\n }\n \n\nIn this example, we modified the `divide` function to throw a `std::runtime_error` instead of a simple string. The catch block now catches exceptions derived from `std::exception` and uses the member function `what()` to display the error message.", + "links": [] + }, + "oWygnpwHq2poXQMTTSCpl": { + "title": "Exit Codes", + "description": "Exit codes, also known as \"return codes\" or \"status codes\", are numeric values that a program returns to the calling environment (usually the operating system) when it finishes execution. These codes are used to indicate the success or failure of a program's execution.\n\n0 is the standard exit code for a successful execution, while non-zero exit codes typically indicate errors or other exceptional situations. The actual meanings of non-zero exit codes can vary between different applications or systems.\n\nIn C++, you can return an exit code from the `main` function by using the `return` statement, or you can use the `exit()` function, which is part of the C++ Standard Library.\n\nExample: Using return in `main`\n-------------------------------\n\n #include \n \n int main() {\n // Some code here...\n \n if (/*some error condition*/) {\n std::cout << \"An error occurred.\\n\";\n return 1;\n }\n \n // More code here...\n \n if (/*another error condition*/) {\n std::cout << \"Another error occurred.\\n\";\n return 2;\n }\n \n return 0; // Successful execution\n }\n \n\nExample: Using the `exit()` function\n------------------------------------\n\n #include \n #include \n \n void some_function() {\n // Some code here...\n \n if (/*some error condition*/) {\n std::cout << \"An error occurred.\\n\";\n std::exit(1);\n }\n \n // More code here...\n }\n \n int main() {\n some_function();\n \n // Some other code here...\n \n return 0; // Successful execution\n }\n \n\nIn both examples above, the program returns exit codes depending on different error conditions encountered during execution. The codes 1 and 2 are used to distinguish between the two error conditions.", + "links": [] + }, + "NJud5SXBAUZ6Sr78kZ7jx": { + "title": "Exceptions", + "description": "Exception handling is a method used to tackle runtime errors so that normal flow of the program can be maintained. In C++, this is accomplished using three keywords: `try`, `catch`, and `throw`.\n\ntry { ... }\n-----------\n\nIn the `try` block, you write the code that can possibly generate an exception. If an exception is encountered, the control is passed to the relevant `catch` block to handle the issue.\n\nExample:\n\n try {\n // code that might throw an exception\n }\n \n\ncatch (...) { ... }\n-------------------\n\nThe `catch` block follows the `try` block and is responsible for handling the exceptions thrown by the `try` block. There can be multiple `catch` blocks to handle different types of exceptions.\n\nExample:\n\n catch (int e) {\n // handle exception of type int\n }\n catch (char e) {\n // handle exception of type char\n }\n catch (...) {\n // handle any other exception\n }\n \n\nthrow ... ;\n-----------\n\nIn case an error occurs within the `try` block, you can use the `throw` keyword to generate an exception of the specific type. This will then be caught and handled by the corresponding `catch` block.\n\nExample:\n\n try {\n int num1 = 10, num2 = 0;\n if (num2 == 0) {\n throw \"Division by zero not allowed!\";\n } else {\n int result = num1 / num2;\n std::cout << \"Result: \" << result << '\\n';\n }\n }\n catch (const char* e) {\n std::cout << \"Error: \" << e << '\\n';\n }\n \n\nIn summary, exception handling in C++ is a technique to handle runtime errors while maintaining the normal flow of the program. The `try`, `catch`, and `throw` keywords are used together to create the structure to deal with exceptions as they occur.", + "links": [] + }, + "y4-P4UNC--rE1vni8HdTn": { + "title": "Access Violations", + "description": "An access violation is a specific type of error that occurs when a program attempts to access an illegal memory location. In C++, access violations are most commonly caused by:\n\n* **Dereferencing a null or invalid pointer.**\n* **Accessing an array out of bounds.**\n* **Reading or writing to memory freed by the user or the operating system.**\n\nIt is crucial to identify access violations because they can lead to unpredictable behavior, application crashes, or corruption of data.\n\nSome examples of access violations are:\n\nDereferencing null or invalid pointer\n-------------------------------------\n\n int *p = nullptr;\n int x = *p; // Access violation: trying to access null pointer's content\n \n\nAccessing an array out of bounds\n--------------------------------\n\n int arr[5] = {1, 2, 3, 4, 5};\n int y = arr[5]; // Access violation: index out of bounds (valid indices are 0-4)\n \n\nReading or writing to freed memory\n----------------------------------\n\n int* p2 = new int[10];\n delete[] p2;\n p2[3] = 42; // Access violation: writing to memory that has been freed\n \n\n### Debugging Access Violations\n\nTools like _debuggers_, _static analyzers_, and _profilers_ can help identify access violations in your code. For example:\n\n* **Microsoft Visual Studio**: Use the built-in debugger to identify the line of code responsible for the access violation error.\n \n* **Valgrind**: A popular Linux tool that detects memory leaks and access violations in your C++ programs.\n \n* **AddressSanitizer**: A runtime memory error detector for C++ that can detect out-of-bounds accesses, memory leaks, and use-after-free errors.", + "links": [] + }, + "-6fwJQOfsorgHkoQGp4T3": { + "title": "Language Concepts", + "description": "C++ is a powerful, high-level, object-oriented programming language that offers several key language concepts. These concepts provide the foundation upon which you can build efficient, reliable, and maintainable programs. Here's a brief summary of some important language concepts in C++.\n\nVariables and Data Types\n------------------------\n\nC++ provides various fundamental data types such as `int`, `float`, `double`, `char`, and `bool` to declare and manipulate variables in a program.\n\nExample:\n\n int age = 25;\n float height = 1.7f;\n double salary = 50000.0;\n char grade = 'A';\n bool isEmployed = true;\n \n\nControl Structures\n------------------\n\nControl structures enable you to control the flow of execution of a program. Key control structures in C++ include:\n\n* Conditional statement: `if`, `else`, and `else if`\n* Loop constructs: `for`, `while`, and `do-while`\n* Switch-case construct\n\nExample:\n\n // If-else statement\n if (age > 18) {\n std::cout << \"You are eligible to vote.\";\n } else {\n std::cout << \"You are not eligible to vote.\";\n }\n \n // For loop\n for (int i = 0; i < 5; i++) {\n std::cout << \"Hello World!\";\n }\n \n\nFunctions\n---------\n\nFunctions in C++ allow you to break down a large program into small, manageable, and reusable pieces of code.\n\nExample:\n\n int add(int a, int b) {\n return a + b;\n }\n \n int main() {\n int sum = add(10, 20);\n std::cout << \"The sum is: \" << sum;\n return 0;\n }\n \n\nArrays and Vectors\n------------------\n\nArrays and Vectors are commonly used data structures to store and manipulate a collection of elements of the same datatype.\n\nExample:\n\n // Array\n int marks[] = {90, 80, 95, 85};\n \n // Vector\n std::vector scores = {10, 20, 30, 40};\n \n\nPointers\n--------\n\nPointers are variables that store memory addresses of other variables. They enable more efficient handling of memory, and are useful for working with dynamic data structures.\n\nExample:\n\n int num = 10;\n int* p = # // p stores the address of num\n \n\nStructures and Classes\n----------------------\n\nStructures and Classes are user-defined data types that allow grouping of variables and functions under a single name.\n\nExample:\n\n // Structure\n struct Student {\n std::string name;\n int age;\n };\n \n // Class\n class Employee {\n public:\n std::string name;\n int age;\n void displayInfo() {\n std::cout << \"Name: \" << name << \"\\nAge: \" << age;\n }\n };\n \n\nInheritance and Polymorphism\n----------------------------\n\nInheritance is a mechanism that allows a class to inherit properties and methods from a base class. Polymorphism enables you to use a base class type to represent derived class objects.\n\nExample:\n\n class Base {\n public:\n void display() {\n std::cout << \"This is the base class.\";\n }\n };\n \n class Derived : public Base {\n public:\n void display() {\n std::cout << \"This is the derived class.\";\n }\n };\n \n\nException Handling\n------------------\n\nC++ provides a mechanism to handle exceptions(runtime errors) gracefully using `try`, `catch`, and `throw` constructs.\n\nExample:\n\n try {\n // Code that might throw an exception\n int result = a / b;\n } catch (const exception &e) {\n std::cout << \"Caught an exception: \" << e.what();\n }\n \n\nThese are some of the key language concepts in C++, which will help you to understand the language better and develop efficient and maintainable applications.", + "links": [] + }, + "CG01PTVgHtjfKvsJkJLGl": { + "title": "auto (Automatic Type Deduction)", + "description": "**Auto**\n\n`auto` is a keyword in C++ language introduced in C++11, which is used for automatic type deduction. It automatically deduces the type of a variable from the type of its initializer expression at compile time.\n\nThe `auto` keyword is useful when you are dealing with complex types or when the type of a variable is hard to predict. It can help in writing cleaner and less error-prone code.\n\nHere's a simple example of using `auto` for type deduction:\n\n #include \n #include \n \n int main() {\n // Traditional way of declaring a variable:\n int myInt = 5;\n \n // Using auto for type deduction:\n auto myAutoInt = 5; // Automatically deduces the type as 'int'\n \n // Example with more complex types:\n std::vector myVector = {1, 2, 3, 4, 5};\n \n // Without auto, iterating the vector would look like this:\n for (std::vector::iterator it = myVector.begin(); it != myVector.end(); ++it) {\n std::cout << *it << '\\n';\n }\n \n // With auto, the iterator declaration becomes simpler:\n for (auto it = myVector.begin(); it != myVector.end(); ++it) {\n std::cout << *it << '\\n';\n }\n }\n \n\nKeep in mind that `auto` deduces the type based on the initializer expression, so if you don't provide an initial value, you will get a compile-time error:\n\n auto myVar; // Error: Cannot deduce the type without initializer\n \n\nIn C++14, you can also use `auto` with function return types to let the compiler automatically deduce the return type based on the returned expression:\n\n auto add(int x, int y) {\n return x + y; // The compiler deduces the return type as 'int'\n }", + "links": [] + }, + "PiMhw1oP9-NZEa6I9u4lX": { + "title": "Type Casting", + "description": "Type casting is the process of converting a value from one data type to another. In C++, there are four different methods of type casting:\n\n* **C-style casting**: It is the syntax inherited from C, and it is done by simply putting the target data type in parentheses before the value to cast. Example:\n \n int a = 10;\n float b = (float)a; // C-style cast from int to float\n \n \n* **`static_cast`**: This is the most commonly used method for type casting in C++. It is performed at compile time, and you should use it when you have an explicit conversion between data types. Example:\n \n int a = 10;\n float b = static_cast(a); // static_cast from int to float\n \n \n* **`dynamic_cast`**: This method is specifically used for safely converting pointers and references between base and derived classes in a class hierarchy. Example:\n \n class Base {};\n class Derived : public Base {};\n \n Base* base_ptr = new Derived();\n Derived* derived_ptr = dynamic_cast(base_ptr); // dynamic_cast from Base* to Derived*\n \n \n* **`reinterpret_cast`**: This cast changes the type of a pointer, reference, or an integer value. It is also called a bitwise cast because it changes how the compiler interprets the underlying bits. Use `reinterpret_cast` only when you have a deep understanding of what you're doing, as it does not guarantee that the resulting value will be meaningful. Example:\n \n int* a = new int(42);\n long b = reinterpret_cast(a); // reinterpret_cast from int* to long\n \n \n* **`const_cast`**: This casting method is used to remove the `const` qualifier from a variable. It is generally not recommended, but can be useful in certain situations where you have no control over the constness of a variable. Example:\n \n const int a = 10;\n int* ptr = const_cast(&a); // const_cast from const int* to int*\n *ptr = 20; // Not recommended, use with caution\n \n \n\nRemember to use the right type of casting based on the specific situation and follow good programming practices in order to ensure a safe and efficient code.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Casting in C++", + "url": "https://youtu.be/pWZS1MtxI-A", + "type": "video" + } + ] + }, + "_XB2Imyf23-6AOeoNLhYQ": { + "title": "static_cast", + "description": "`static_cast` is one of the casting operators in C++ that allows you to convert between different data types, such as integer and float, or between pointer types. This type of cast performs a compile-time check and gives an error if there is no valid conversion possible between given types. `static_cast` is generally safer than C-style casts since it does not perform an unsafe reinterpretation of data and allows for better type checking.\n\nSyntax\n------\n\nThe syntax for `static_cast` is as follows:\n\n static_cast(expression)\n \n\nExamples\n--------\n\n* Converting between basic data types:\n\n int i = 42;\n float f = static_cast(i); // Converts integer i to float f\n \n\n* Casting pointers of different object types in an inheritance hierarchy:\n\n class Base { /* ... */ };\n class Derived : public Base { /* ... */ };\n \n Base *bPtr = new Derived;\n Derived *dPtr = static_cast(bPtr); // Converts Base pointer bPtr to Derived pointer dPtr\n \n\n* Converting an integer to an enumeration:\n\n enum Color { RED, GREEN, BLUE };\n int value = 1;\n Color color = static_cast(value); // Converts integer value to corresponding Color enumeration\n \n\nKeep in mind that `static_cast` should be used with caution when casting pointers between different object types. If the original type of the pointer does not match the target type, the result of the cast can be incorrect or cause unexpected behavior.", + "links": [] + }, + "5g22glc97siQOcTkHbwan": { + "title": "const_cast", + "description": "`const_cast` is a type of casting in C++ that allows you to remove or add constness to a variable. In other words, it enables you to modify a `const` or `volatile` object, or change a pointer or reference to a `const` or `volatile` type. This is useful in certain scenarios when you need to pass a `const` variable as an argument or when a function parameter requires a non-const type, but you want to make sure the variable remains constant throughout the code.\n\nKeep in mind that using `const_cast` to modify a truly `const` variable can lead to undefined behavior, so it is best to use this feature only when absolutely necessary.\n\nExample\n-------\n\nHere's a code example showing how to use `const_cast`:\n\n #include \n #include \n \n void modifyVariable(int* ptr) {\n *ptr = 42;\n }\n \n int main() {\n const int original_value = 10;\n int* non_const_value_ptr = const_cast(&original_value);\n std::cout << \"Original value: \" << original_value << '\\n';\n \n modifyVariable(non_const_value_ptr);\n std::cout << \"Modified value: \" << *non_const_value_ptr << \", original_value: \" << original_value << '\\n';\n \n assert(non_const_value_ptr == &original_value);\n \n return 0;\n }\n \n \n\nIn this example, we first create a `const` variable, `original_value`. Then we use `const_cast` to remove the constness of the variable and assign it to a non-const pointer, `non_const_value_ptr`. The `modifyVariable` function takes an `int*` as an argument and modifies the value pointed to by the pointer, which would not have been possible if we passed the original `const int` directly. Finally, we print the `original_value` and the `*non_const_value_ptr`, which shows that the value has been modified using `const_cast`.\n\nPlease note that this example comes with some risks, as it touches undefined behavior. \\*/", + "links": [] + }, + "4BdFcuQ5KNW94cu2jz-vE": { + "title": "dynamic_cast", + "description": "`dynamic_cast` is a type of casting operator in C++ that is used specifically for polymorphism. It safely converts pointers and references of a base class to its derived class and checks the validity of the conversion during runtime. If the conversion is not valid (i.e., the object is not of the target type), it returns a null pointer instead of producing undefined behavior. Therefore, `dynamic_cast` can prevent potential crashes and errors when using polymorphism.\n\nHere is a basic example of how `dynamic_cast` can be used:\n\n #include \n \n class BaseClass {\n public:\n virtual void display() {\n std::cout << \"BaseClass\\n\";\n }\n };\n \n class DerivedClass : public BaseClass {\n public:\n void display() {\n std::cout << \"DerivedClass\\n\";\n }\n };\n \n int main() {\n BaseClass *basePtr = new DerivedClass(); // Upcasting\n DerivedClass *derivedPtr;\n \n derivedPtr = dynamic_cast(basePtr); // Downcasting\n if (derivedPtr) {\n derivedPtr->display(); // Output: DerivedClass\n } else {\n std::cout << \"Invalid type conversion.\";\n }\n \n delete basePtr;\n return 0;\n }\n \n\nIn this example, a pointer to a `DerivedClass` object is assigned to a `BaseClass` pointer (`basePtr`). Then, we attempt to downcast it back to a `DerivedClass` pointer using `dynamic_cast`. If the casting is successful, we can access the `DerivedClass` functionality through the new pointer (`derivedPtr`).", + "links": [] + }, + "ZMyFDJrpCauGrY5NZkOwg": { + "title": "reinterpret_cast", + "description": "`reinterpret_cast` is a type of casting in C++ that allows you to change the type of a pointer or an integer without altering the representation of the data. It is generally used when the conversion required is too low-level or not supported by other casting methods, such as `static_cast`.\n\nUsing `reinterpret_cast` should be handled with care, as it can lead to undefined behavior and severe problems if used incorrectly.\n\nHere's an example of usage:\n\n #include \n \n int main() {\n int num = 42;\n int *num_ptr = #\n \n // Disguise the integer pointer as a char pointer\n char *char_ptr = reinterpret_cast(num_ptr);\n \n for (size_t i = 0; i < sizeof(int); ++i) {\n // Print the individual bytes of the integer as characters\n std::cout << \"Byte \" << i << \": \" << char_ptr[i] << '\\n';\n }\n \n return 0;\n }\n \n\nIn this example, we're using `reinterpret_cast` to change the type of a pointer from `int *` to `char *`, effectively treating the integer as an array of characters and printing each byte.\n\nRemember that when using `reinterpret_cast`, you should be cautious about dereferencing the converted pointers. The behavior can be unpredictable, and it can lead to issues, such as accessing memory regions that are not intended to be accessed. `reinterpret_cast` should be used sparingly and only when a low-level conversion is necessary.", + "links": [] + }, + "IDOlquv6jlfecwQoBwkGZ": { + "title": "Undefined Behavior (UB)", + "description": "**Undefined Behavior**\n----------------------\n\nUndefined behavior in C++ refers to a situation where a program's behavior cannot be predicted due to any violation of the language rules. It is a result of various factors like uninitialized variables, using pointers to deallocated memory, out-of-bounds memory access, etc. The C++ standard does not define the behavior in such cases, which means the compiler or the runtime system is free to handle these situations in any way it wants.\n\nSome common examples of Undefined Behavior are:\n\n* **Uninitialized Variables**: Accessing the value of an uninitialized variable can lead to undefined behavior. The value of an uninitialized variable is arbitrary and depends on what was in the memory location before the variable was declared.\n \n int x;\n int y = x + 5; // Undefined behavior since x is uninitialized\n \n \n* **Out-of-bounds Memory Access**: Accessing memory outside the boundaries of an array or buffer may result in undefined behavior.\n \n int arr[5];\n int val = arr[5]; // Undefined behavior since the valid indices are 0 to 4\n \n \n* **Null Pointer Dereference**: Dereferencing a null pointer may lead to undefined behavior.\n \n int *ptr = nullptr;\n int val = *ptr; // Undefined behavior since ptr is a null pointer\n \n \n* **Division by Zero**: Performing a division operation by zero is undefined behavior in C++.\n \n int x = 5;\n int y = 0;\n int z = x / y; // Undefined behavior since division by zero is not allowed\n \n \n\nIt is crucial to detect and fix the root cause of undefined behavior in your programs since it can lead to unpredictable results, data corruption, and security vulnerabilities. To mitigate undefined behavior, you can utilize tools like static code analyzers, dynamic analysis tools, and compiler options that help detect potential issues.", + "links": [] + }, + "YSWN7nS8vA9nMldSUrZRT": { + "title": "Argument Dependent Lookup (ADL)", + "description": "Argument Dependent Lookup (ADL) or Koenig Lookup is a mechanism in C++ that allows the compiler to search for the appropriate function to call based on the types of arguments provided. It is particularly helpful when using overloaded functions or operators in a namespace.\n\nADL allows the compiler to find functions in the same namespace as the arguments, even if the function is not declared at the point of use or within the namespace provided. This is especially useful when working with templates or generic programming.\n\nExample\n-------\n\nConsider the following example using a namespace and overloaded `operator<<()`:\n\n namespace MyNamespace {\n class MyClass {\n public:\n int value;\n };\n \n std::ostream& operator<<(std::ostream& os, const MyClass& obj) {\n os << \"MyClass: \" << obj.value;\n return os;\n }\n }\n \n int main() {\n MyNamespace::MyClass obj;\n obj.value = 42;\n using std::cout; // Required to use 'cout' without fully qualifying it.\n cout << obj << '\\n'; // ADL is used to find the correct overloaded 'operator<<'.\n }\n \n\nIn this example, when you call `cout << obj;` in `main()`, ADL is used to find the correct `operator<<()` in the `MyNamespace` namespace because the argument `obj` is of type `MyNamespace::MyClass`.", + "links": [] + }, + "Lt7ss59KZw9Jwqj234jm2": { + "title": "Name Mangling", + "description": "Name mangling, also known as name decoration, is a technique used by compilers to encode additional information about the scope, type, linkage, or other identifying information of an identifier (function names, variable names, etc.) within its name. The primary purpose of name mangling is to support function overloading, which allows multiple functions with the same name but different parameter lists to coexist in a single program.\n\nIn C++, the compiler generates a mangled name for each function and variable based on their scopes and types. The mangled name is usually formed by concatenating the original name, parameter types, and other information, often using a prefix or suffix.\n\nFor example, suppose you have the following function:\n\n int add(int a, int b)\n {\n return a + b;\n }\n \n\nThe compiler might generate a mangled name such as `_Z3addii`, which encodes the function name `add` and its two `int` parameters.\n\nThe exact rules for name mangling are implementation and platform dependent. Different compilers may mangle names differently, which can lead to incompatibilities when attempting to link together object files or libraries compiled with different compilers.\n\nSome tools, such as c++filt (included in GCC and Clang), can be used to demangle a mangled name back to the original identifier, which can be useful when debugging or working with symbol tables.\n\n $ echo \"_Z3addii\" | c++filt\n add(int, int)\n \n\nIn general, it is not necessary for you to understand the details of name mangling when writing code in C++, as the compiler handles it automatically. However, it can affect program behavior in some cases, such as when using external libraries or linking object files from different compilers.", + "links": [] + }, + "zKdlfZTRHwjtmRUGW9z9-": { + "title": "Macros", + "description": "Macros are preprocessing directives in C++ used by the preprocessor to perform text substitution. They are defined using the `#define` directive, followed by the macro name and the value to be substituted.\n\nMacros can be used to define constants, create function-like macros, or perform conditional compilation.\n\nConstant Macros\n---------------\n\nConstant macros are used to define symbolic constants for use in code. They do not use any memory and are replaced by the preprocessor before the compilation process.\n\nExample:\n\n #define PI 3.14159\n \n\nThis macro defines a symbolic constant `PI`. You can use it in your code as if it were a regular variable.\n\n double circumference = 2 * PI * radius;\n \n\nFunction-like Macros\n--------------------\n\nFunction-like macros are similar to regular functions. They take a list of arguments and perform text substitution.\n\nExample:\n\n #define SQUARE(x) ((x) * (x))\n \n\nThis macro defines a function-like macro `SQUARE` that calculates the square of a number.\n\n int square_of_five = SQUARE(5); // expands to ((5) * (5))\n \n\nConditional Compilation\n-----------------------\n\nMacros can be used for conditional compilation using the `#ifdef`, `#ifndef`, `#if`, `#else`, `#elif`, and `#endif` directives.\n\nExample:\n\n #define DEBUG_MODE\n \n #ifdef DEBUG_MODE\n // Code to be compiled only in debug mode\n #else\n // Code to be compiled only if DEBUG_MODE is not defined\n #endif\n \n\nThis example demonstrates how you can use macros to control the parts of code that are being compiled, depending on the presence or absence of a macro definition.", + "links": [] + }, + "DHdNBP7_ixjr6h-dIQ7g6": { + "title": "Standard Library + STL", + "description": "The C++ Standard Template Library (STL) is a collection of header files that provide several data structures, algorithms, and functions to simplify your C++ coding experience. The primary purpose of the STL is to save time and increase efficiency by providing a ready-to-use set of useful tools. The most commonly used features of the STL can be divided into three main categories: containers, algorithms, and iterators.\n\nContainers\n----------\n\nContainers are the data structures used for data storage and manipulation in C++. They are classified into four types: sequence containers, associative containers, unordered associative containers, and container adaptors.\n\n* **Sequence Containers**: These are linear data structures that store elements in a sequential manner. Examples include:\n \n * `std::vector`: A dynamic array that grows and shrinks at runtime.\n \n std::vector my_vector;\n \n \n * `std::list`: A doubly linked list.\n \n std::list my_list;\n \n \n * `std::deque`: A double-ended queue allowing insertion and deletion at both ends.\n \n std::deque my_deque;\n \n \n* **Associative Containers**: These containers store data in a sorted manner with unique keys. Examples include:\n \n * `std::set`: A collection of unique elements sorted by keys.\n \n std::set my_set;\n \n \n * `std::map`: A collection of key-value pairs sorted by keys.\n \n std::map my_map;\n \n \n* **Unordered Associative Containers**: These containers store data in an unordered manner using hash tables. Examples include:\n \n * `std::unordered_set`: A collection of unique elements in no specific order.\n \n std::unordered_set my_unordered_set;\n \n \n * `std::unordered_map`: A collection of key-value pairs in no specific order.\n \n std::unordered_map my_unordered_map;\n \n \n* **Container Adaptors**: These are containers based on other existing containers. Examples include:\n \n * `std::stack`: A LIFO data structure based on deque or list.\n \n std::stack my_stack;\n \n \n * `std::queue`: A FIFO data structure based on deque or list.\n \n std::queue my_queue;\n \n \n * `std::priority_queue`: A sorted queue based on vector or deque.\n \n std::priority_queue my_priority_queue;\n \n \n\nAlgorithms\n----------\n\nThe STL provides several generic algorithms that can be used to perform various operations on the data stored in containers. They are divided into five categories: non-modifying sequence algorithms, modifying sequence algorithms, sorting algorithms, sorted range algorithms, and numeric algorithms.\n\nSome examples include `std::find`, `std::replace`, `std::sort`, and `std::binary_search`.\n\nFor example, to sort a vector, you can use the following code:\n\n std::vector my_vec = {4, 2, 5, 1, 3};\n std::sort(my_vec.begin(), my_vec.end());\n \n\nIterators\n---------\n\nIterators are a fundamental concept in the STL, as they provide a unified way to access elements in containers. Iterators can be thought of as an advanced form of pointers.\n\nEach container has its own iterator type, which can be used to traverse elements and modify values. The most common iterator operations are `begin()` and `end()` for getting iterators pointing to the first and one past the last element of a container, respectively.\n\nFor example, to iterate through a vector and print its elements, you can use the following code:\n\n std::vector my_vec = {1, 2, 3, 4, 5};\n for (auto it = my_vec.begin(); it != my_vec.end(); ++it) {\n std::cout << *it << \" \";\n }\n \n\nThis is just a brief overview of the C++ Standard Template Library. There are many other features and functions available in the STL, and familiarizing yourself with them is crucial for efficient C++ programming.", + "links": [] + }, + "Ebu8gzbyyXEeJryeE0SpG": { + "title": "Iterators", + "description": "Iterators are objects in the C++ Standard Library (`STL`) that help us traverse containers like arrays, lists, and vectors. Essentially, they act as a bridge between container classes and algorithms. Iterators behave similar to pointers but provide a more generalized and abstract way of accessing elements in a container.\n\nThere are different types of iterators which you would encounter depending on their use cases:\n\n* **Input Iterator**: Used to read elements in a container only once, in a forward direction. They cannot modify elements.\n\nExample:\n\n std::vector nums = {1, 2, 3, 4};\n std::istream_iterator input(std::cin);\n std::copy(input, std::istream_iterator(), std::back_inserter(nums));\n \n\n* **Output Iterator**: Used to write elements in a container only once, in a forward direction. They cannot re-write elements.\n\nExample:\n\n std::vector nums = {1, 2, 3, 4};\n std::ostream_iterator output(std::cout, \", \");\n std::copy(nums.begin(), nums.end(), output);\n \n\n* **Forward Iterator**: Similar to input iterators but can be used for multiple passes over the elements in a container. They cannot move backward.\n\nExample:\n\n std::forward_list nums = {1, 2, 3, 4};\n std::forward_list::iterator itr = nums.begin();\n while (itr != nums.end()) {\n std::cout << *itr << \" \";\n ++itr;\n }\n \n\n**Reverse Iterator**: Similar to input iterators but can be used for multiple passes over the elements in a container. They cannot move forward.\n\nExample:\n\n std::list nums = {1, 2, 3, 4};\n std::list::reverse_iterator itr = nums.rbegin();\n while (itr != nums.rend()) {\n std::cout << *itr << \" \";\n ++itr;\n }\n \n\n* **Bidirectional Iterator**: These iterators offer the ability to move both forward and backward in a container. List and set containers have bi-directional iterators.\n\nExample:\n\n std::list nums = {1, 2, 3, 4};\n std::list::iterator itr;\n for (itr = nums.begin(); itr != nums.end(); ++itr) {\n std::cout << *itr << \" \";\n }\n for (--itr; itr != nums.begin(); --itr) {\n std::cout << *itr << \" \";\n }\n \n\n* **Random Access Iterator**: These iterators provide the most flexible ways to access elements in a container. They can move forwards, backwards, jump directly to other elements, and access elements at a given index.\n\nExample:\n\n std::vector nums = {1, 2, 3, 4};\n std::vector::iterator itr;\n for (itr = nums.begin(); itr != nums.end(); ++itr) {\n std::cout << *itr << \" \";\n }\n for (itr -= 1; itr != nums.begin() - 1; --itr) {\n std::cout << *itr << \" \";\n }\n \n\nFor most cases, you would want to start with the `auto` keyword and the appropriate container methods (like `begin()` and `end()`) to work with iterators.\n\nExample:\n\n std::vector nums = {1, 2, 3, 4};\n for (auto itr = nums.begin(); itr != nums.end(); ++itr) {\n std::cout << *itr << \" \";\n }\n \n\nWhen working with algorithms, remember that the C++ Standard Library provides various algorithms that already utilize iterators for tasks like searching, sorting, and manipulating elements.", + "links": [] + }, + "VeVxZ230xkesQsIDig8zQ": { + "title": "iostream", + "description": "`iostream` is a header in the C++ Standard Library that provides functionality for basic input and output (I/O) operations. The I/O streams facilitate communication between your program and various sources, such as the console, files, or other programs.\n\n`iostream` includes the following classes:\n\n* `istream`: for input operations from an input source.\n* `ostream`: for output operations to an output target.\n* `iostream`: a combination of `istream` and `ostream` for both input and output operations.\n\nThese classes inherit from base classes `ios` and `ios_base`.\n\nAdditionally, `iostream` defines several objects that are instances of these classes and represent the standard input and output streams:\n\n* `cin`: an `istream` object to read from the standard input, typically corresponding to the keyboard.\n* `cout`: an `ostream` object to write to the standard output, typically the console.\n* `cerr`: an `ostream` object to write to the standard error output, typically used for displaying error messages.\n* `clog`: an `ostream` object, similar to `cerr`, but its output can be buffered.\n\nHere are some code examples on using `iostream` for input and output operations:\n\n #include \n \n int main() {\n int a;\n std::cout << \"Enter a number: \";\n std::cin >> a;\n std::cout << \"You entered: \" << a << '\\n';\n return 0;\n }\n \n\n #include \n \n int main() {\n std::cerr << \"An error occurred.\\n\";\n std::clog << \"Logging information.\\n\";\n return 0;\n }\n \n\nRemember to include the `iostream` header when using these features:\n\n #include ", + "links": [] + }, + "whyj6Z4RXFsVQYRfYYn7B": { + "title": "Algorithms", + "description": "The Standard Template Library (STL) in C++ provides a collection of generic algorithms that are designed to work with various container classes. These algorithms are implemented as functions and can be applied to different data structures, such as arrays, vectors, lists, and others. The primary header file for algorithms is ``.\n\nKey Concepts\n------------\n\nSorting\n-------\n\nSorting refers to arranging a sequence of elements in a specific order. The STL provides several sorting algorithms, such as `std::sort`, `std::stable_sort`, and `std::partial_sort`.\n\n### std::sort\n\n`std::sort` is used to sort a range of elements \\[first, last) in non-descending order (by default). You can also use custom comparison functions or lambda expressions to change the sorting order.\n\nExample:\n\n #include \n #include \n #include \n \n int main() {\n std::vector nums = {10, 9, 8, 7, 6, 5};\n std::sort(nums.begin(), nums.end());\n \n for (int num : nums) {\n std::cout << num << ' ';\n }\n // Output: 5 6 7 8 9 10\n }\n \n\nSearching\n---------\n\nSearching refers to finding if a particular element is present within a given range of elements. STL provides various searching algorithms, such as `std::find`, `std::binary_search`, and `std::find_if`.\n\n### std::find\n\n`std::find` is used to find the iterator of the first occurrence of a given value within the range \\[first, last).\n\nExample:\n\n #include \n #include \n #include \n \n int main() {\n std::vector nums = {5, 6, 7, 8, 9, 10};\n auto it = std::find(nums.begin(), nums.end(), 9);\n \n if (it != nums.end()) {\n std::cout << \"Found 9 at position: \" << (it - nums.begin());\n } else {\n std::cout << \"9 not found\";\n }\n // Output: Found 9 at position: 4\n }\n \n\nModifying Sequences\n-------------------\n\nThe STL also provides algorithms for modifying sequences, such as `std::remove`, `std::replace`, and `std::unique`.\n\n### std::remove\n\n`std::remove` is used to remove all instances of a value from a container within the given range \\[first, last). Note that the function does not resize the container after removing elements.\n\nExample:\n\n #include \n #include \n #include \n \n int main() {\n std::vector nums = {5, 6, 7, 6, 8, 6, 9, 6, 10};\n nums.erase(std::remove(nums.begin(), nums.end(), 6), nums.end());\n \n for (int num : nums) {\n std::cout << num << ' ';\n }\n // Output: 5 7 8 9 10\n }\n \n\nSummary\n-------\n\nSTL algorithms in C++ provide a set of useful functions for key operations such as sorting, searching, and modifying sequences. The algorithms can be used with a variety of container classes, making them highly versatile and an essential part of C++ programming.", + "links": [] + }, + "yGvE6eHKlPMBB6rde0llR": { + "title": "Date / Time", + "description": "In C++, you can work with dates and times using the `chrono` library, which is part of the Standard Library (STL). The `chrono` library provides various data types and functions to represent and manipulate time durations, time points, and clocks.\n\nDuration\n--------\n\nA `duration` represents a span of time, which can be expressed in various units such as seconds, minutes, hours, etc. To create a duration, use the `std::chrono::duration` template class. Common predefined duration types are:\n\n* `std::chrono::seconds`\n* `std::chrono::minutes`\n* `std::chrono::hours`\n\n**Example:**\n\n #include \n #include \n \n int main() {\n std::chrono::seconds sec(5);\n std::chrono::minutes min(2);\n std::chrono::hours hr(1);\n return 0;\n }\n \n\nTime Point\n----------\n\nA `time_point` represents a specific point in time. It is usually created using a combination of duration and a clock. In C++, there are three clock types provided by the `chrono` library:\n\n* `std::chrono::system_clock`: Represents the system-wide real time wall clock.\n* `std::chrono::steady_clock`: Represents a monotonic clock that is guaranteed to never be adjusted.\n* `std::chrono::high_resolution_clock`: Represents the clock with the shortest tick period.\n\n**Example:**\n\n #include \n #include \n \n int main() {\n std::chrono::system_clock::time_point tp = std::chrono::system_clock::now();\n return 0;\n }\n \n\nClock\n-----\n\nA clock provides access to the current time. It consists of the following elements:\n\n* `time_point`: A specific point in time.\n* `duration`: The time duration between two time points.\n* `now()`: A static function that returns the current time point.\n\n**Example:**\n\n #include \n #include \n \n int main() {\n // Get the current time_point using system_clock\n std::chrono::system_clock::time_point now = std::chrono::system_clock::now();\n \n // Get the time_point 1 hour from now\n std::chrono::system_clock::time_point one_hour_from_now = now + std::chrono::hours(1);\n return 0;\n }\n \n\nConverting Time Points to Calendar Time\n---------------------------------------\n\nTo convert a time point to calendar representation, you can use the `std::chrono::system_clock::to_time_t` function.\n\n**Example:**\n\n #include \n #include \n #include \n \n int main() {\n std::chrono::system_clock::time_point now = std::chrono::system_clock::now();\n std::time_t now_c = std::chrono::system_clock::to_time_t(now);\n std::cout << \"Current time: \" << std::ctime(&now_c) << '\\n';\n return 0;\n }\n \n\nThis summarizes the basic functionality of working with date and time in C++ using the `chrono` library. You can find more advanced features, such as casting durations and time arithmetic, in the [C++ reference](https://en.cppreference.com/w/cpp/chrono).", + "links": [] + }, + "OXQUPqxzs1-giAACwl3X1": { + "title": "Multithreading", + "description": "Multithreading is the concurrent execution of multiple threads within a single process or program. It improves the performance and efficiency of an application by allowing multiple tasks to be executed in parallel.\n\nIn C++, multithreading support is available through the `thread` library introduced in the C++11 standard.\n\nBasic Thread Creation\n---------------------\n\nTo create a new thread, include the `` header file and create an instance of `std::thread` that takes a function as an argument. The function will be executed in a new thread.\n\n #include \n #include \n \n void my_function() {\n std::cout << \"This function is executing in a separate thread\\n\";\n }\n \n int main() {\n std::thread t(my_function);\n t.join(); // waits for the thread to complete\n return 0;\n }\n \n\nThread with Arguments\n---------------------\n\nYou can pass arguments to the thread function by providing them as additional arguments to the `std::thread` constructor.\n\n #include \n #include \n \n void print_sum(int a, int b) {\n std::cout << \"The sum is: \" << a + b << '\\n';\n }\n \n int main() {\n std::thread t(print_sum, 3, 5);\n t.join();\n return 0;\n }\n \n\nMutex and Locks\n---------------\n\nWhen multiple threads access shared resources, there is a possibility of a data race. To avoid this, use mutex and locks to synchronize shared resource access.\n\n #include \n #include \n #include \n \n std::mutex mtx;\n \n void print_block(int n, char c) {\n {\n std::unique_lock locker(mtx);\n for (int i = 0; i < n; ++i) {\n std::cout << c;\n }\n std::cout << '\\n';\n }\n }\n \n int main() {\n std::thread t1(print_block, 50, '*');\n std::thread t2(print_block, 50, '$');\n \n t1.join();\n t2.join();\n \n return 0;\n }\n \n\nThis short introduction should help you get started with basic multithreading techniques in C++. There is a lot more to learn, such as thread pools, condition variables, and atomic operations for advanced synchronization and performance tuning.", + "links": [] + }, + "1pydf-SR0QUfVNuBEyvzc": { + "title": "Containers", + "description": "C++ Containers are a part of the Standard Template Library (STL) that provide data structures to store and organize data. There are several types of containers, each with its own characteristics and use cases. Here, we discuss some of the commonly used containers:\n\n1\\. Vector\n----------\n\nVectors are dynamic arrays that can resize themselves as needed. They store elements in a contiguous memory location, allowing fast random access using indices.\n\nExample\n-------\n\n #include \n #include \n \n int main() {\n std::vector vec = {1, 2, 3, 4, 5};\n \n vec.push_back(6); // Add an element to the end\n \n std::cout << \"Vector contains:\";\n for (int x : vec) {\n std::cout << ' ' << x;\n }\n std::cout << '\\n';\n }\n \n\n2\\. List\n--------\n\nA list is a doubly-linked list that allows elements to be inserted or removed from any position in constant time. It does not support random access. Lists are better than vectors for scenarios where you need to insert or remove elements in the middle frequently.\n\nExample\n-------\n\n #include \n #include \n \n int main() {\n std::list lst = {1, 2, 3, 4, 5};\n \n lst.push_back(6); // Add an element to the end\n \n std::cout << \"List contains:\";\n for (int x : lst) {\n std::cout << ' ' << x;\n }\n std::cout << '\\n';\n }\n \n\n3\\. Map\n-------\n\nA map is an associative container that stores key-value pairs. It supports the retrieval of values based on their keys. The keys are sorted in ascending order by default.\n\nExample\n-------\n\n #include \n #include \n \n int main() {\n std::map m;\n \n m[\"one\"] = 1;\n m[\"two\"] = 2;\n \n std::cout << \"Map contains:\\n\";\n for (const auto &pair : m) {\n std::cout << pair.first << \": \" << pair.second << '\\n';\n }\n }\n \n\n4\\. Unordered\\_map\n------------------\n\nSimilar to a map, an unordered map stores key-value pairs, but it is implemented using a hash table. This means unordered\\_map has faster average-case performance compared to map, since it does not maintain sorted order. However, worst-case performance can be worse than map.\n\nExample\n-------\n\n #include \n #include \n \n int main() {\n std::unordered_map um;\n \n um[\"one\"] = 1;\n um[\"two\"] = 2;\n \n std::cout << \"Unordered map contains:\\n\";\n for (const auto &pair : um) {\n std::cout << pair.first << \": \" << pair.second << '\\n';\n }\n }\n \n\nThese are just a few examples of C++ containers. There are other container types, such as `set`, `multiset`, `deque`, `stack`, `queue`, and `priority_queue`. Each container has its own use cases and unique characteristics. Learning about these containers and when to use them can greatly improve your efficiency and effectiveness in using C++.", + "links": [] + }, + "-6AOrbuOE7DJCmxlcgCay": { + "title": "Templates", + "description": "Templates in C++ are a powerful feature that allows you to write generic code, meaning that you can write a single function or class that can work with different data types. This means you do not need to write separate functions or classes for each data type you want to work with.\n\nTemplate Functions\n------------------\n\nTo create a template function, you use the `template` keyword followed by the type parameters or placeholders enclosed in angle brackets (`< >`). Then, you define your function as you normally would, using the type parameters to specify the generic types.\n\nHere's an example of a simple template function that takes two arguments and returns the larger of the two:\n\n template \n T max(T a, T b) {\n return (a > b) ? a : b;\n }\n \n\nTo use this function, you can either explicitly specify the type parameter:\n\n int result = max(10, 20);\n \n\nOr, you can let the compiler deduce the type for you:\n\n int result = max(10, 20);\n \n\nTemplate Classes\n----------------\n\nSimilarly, you can create template classes using the `template` keyword. Here's an example of a simple template class that represents a pair of values:\n\n template \n class Pair {\n public:\n T1 first;\n T2 second;\n \n Pair(T1 first, T2 second) : first(first), second(second) {}\n };\n \n\nTo use this class, you need to specify the type parameters when creating an object:\n\n Pair pair(1, \"Hello\");\n \n\nTemplate Specialization\n-----------------------\n\nSometimes, you may need special behavior for a specific data type. In this case, you can use template specialization. For example, you can specialize the `Pair` class for a specific type, like `char`:\n\n template <>\n class Pair {\n public:\n char first;\n char second;\n \n Pair(char first, char second) : first(first), second(second) {\n // Special behavior for characters (e.g., convert to uppercase)\n this->first = std::toupper(this->first);\n this->second = std::toupper(this->second);\n }\n };\n \n\nNow, when you create a `Pair` object with `char` template arguments, the specialized behavior will be used:\n\n Pair charPair('a', 'b');\n \n\nIn summary, templates in C++ allow you to write generic functions and classes that can work with different data types, reducing code duplication and making your code more flexible and reusable.", + "links": [] + }, + "w4EIf58KP-Pq-yc0HlGxc": { + "title": "Variadic Templates", + "description": "Variadic templates are a feature in C++11 that allows you to define a template with a variable number of arguments. This is especially useful when you need to write a function or class that can accept different numbers and types of arguments.\n\nSyntax\n------\n\nThe syntax for variadic templates is very simple. To define a variadic template, use the `...` (ellipsis) notation:\n\n template \n \n\nThis notation represents a parameter pack, which can contain zero or more arguments. You can use this parameter pack as a variable list of template parameters in your template definition.\n\nExamples\n--------\n\n### Summing Multiple Arguments Using Variadic Templates\n\n #include \n \n // Base case for recursion\n template \n T sum(T t) {\n return t;\n }\n \n // Variadic template\n template \n T sum(T t, Args... args) {\n return t + sum(args...);\n }\n \n int main() {\n int result = sum(1, 2, 3, 4, 5); // expands to 1 + 2 + 3 + 4 + 5\n std::cout << \"The sum is: \" << result << '\\n';\n \n return 0;\n }\n \n\n### Tuple Class Using Variadic Templates\n\n template \n class Tuple;\n \n // Base case: empty tuple\n template <>\n class Tuple<> {};\n \n // Recursive case: Tuple with one or more elements\n template \n class Tuple : public Tuple {\n public:\n Tuple(Head head, Tail... tail) : Tuple(tail...), head_(head) {}\n \n Head head() const { return head_; }\n \n private:\n Head head_;\n };\n \n int main() {\n Tuple tuple(1, 2.0f, 3.0);\n std::cout << \"First element: \" << tuple.head() << '\\n';\n return 0;\n }\n \n\nPlease note that the examples shown are for educational purposes and might not be the most efficient or production-ready implementations. With C++17 and onward, there are even more concise ways to handle variadic templates, like using fold expressions.", + "links": [] + }, + "sObOuccY0PDeGG-9GrFDF": { + "title": "Template Specialization", + "description": "Template specialization is a way to customize or modify the behavior of a template for a specific type or a set of types. This can be useful when you want to optimize the behavior or provide specific implementation for a certain type, without affecting the overall behavior of the template for other types.\n\nThere are two main ways you can specialize a template:\n\n* **Full specialization:** This occurs when you provide a specific implementation for a specific type or set of types.\n \n* **Partial specialization:** This occurs when you provide a more general implementation for a subset of types that match a certain pattern or condition.\n \n\nFull Template Specialization\n----------------------------\n\nFull specialization is used when you want to create a separate implementation of a template for a specific type. To do this, you need to use keyword `template<>` followed by the function template with the desired specialized type.\n\nHere is an example:\n\n #include \n \n template \n void printData(const T& data) {\n std::cout << \"General template: \" << data << '\\n';\n }\n \n template <>\n void printData(const char* const & data) {\n std::cout << \"Specialized template for const char*: \" << data << '\\n';\n }\n \n int main() {\n int a = 5;\n const char* str = \"Hello, world!\";\n printData(a); // General template: 5\n printData(str); // Specialized template for const char*: Hello, world!\n }\n \n\nPartial Template Specialization\n-------------------------------\n\nPartial specialization is used when you want to create a separate implementation of a template for a subset of types that match a certain pattern or condition.\n\nHere is an example of how you can partially specialize a template class:\n\n #include \n \n template \n class MyPair {\n public:\n MyPair(K k, V v) : key(k), value(v) {}\n \n void print() const {\n std::cout << \"General template: key = \" << key << \", value = \" << value << '\\n';\n }\n \n private:\n K key;\n V value;\n };\n \n template \n class MyPair {\n public:\n MyPair(T k, int v) : key(k), value(v) {}\n \n void print() const {\n std::cout << \"Partial specialization for int values: key = \" << key\n << \", value = \" << value << '\\n';\n }\n \n private:\n T key;\n int value;\n };\n \n int main() {\n MyPair p1(3.2, \"example\");\n MyPair p2('A', 65);\n p1.print(); // General template: key = 3.2, value = example\n p2.print(); // Partial specialization for int values: key = A, value = 65\n }\n \n\nIn this example, the `MyPair` template class is partially specialized to provide a different behavior when the second template parameter is of type `int`.", + "links": [] + }, + "WptReUOwVth3C9-AVmMHF": { + "title": "Type Traits", + "description": "Type Traits are a set of template classes in C++ that help in getting the information about the type's properties, behavior, or characteristics. They can be found in the `` header file. By using Type Traits, you can adapt your code depending on the properties of a given type, or even enforce specific properties for your type parameters in template code.\n\nSome common type traits are:\n\n* `std::is_pointer`: Checks if a given type is a pointer type.\n* `std::is_arithmetic`: Checks if the given type is an arithmetic type.\n* `std::is_function`: Checks if the given type is a function type.\n* `std::decay`: Applies decltype rules to the input type ( strips references, cv-qualifiers, etc. ).\n\nUsage\n-----\n\nYou can use type traits like this:\n\n #include \n #include \n \n int main() {\n int a;\n int* a_ptr = &a;\n \n std::cout << \"Is 'a' a pointer? \" << std::boolalpha << std::is_pointer::value << '\\n';\n std::cout << \"Is 'a_ptr' a pointer? \" << std::boolalpha << std::is_pointer::value << '\\n';\n \n return 0;\n }\n \n\nComposing Type Traits\n---------------------\n\nSome type traits help you compose other traits or modify them, such as:\n\n* `std::conditional`: If a given boolean value is true, use type A; otherwise, use type B.\n* `std::enable_if`: If a given boolean value is true, use type A; otherwise, there is no nested type.\n\n #include \n #include \n \n template \n typename std::enable_if::value, T>::type find_max(T a, T b) {\n return a > b ? a : b;\n }\n \n int main() {\n int max = find_max(10, 20);\n std::cout << \"Max: \" << max << '\\n';\n \n return 0;\n }\n \n\nIn this example, the `find_max` template function is only defined when T is an arithmetic type (e.g., int, float, double). This prevents unintended usage of the `find_max` function with non-arithmetic types.\n\nOverall, type traits are a powerful tool to create more generic, extensible, and efficient C++ code, providing a way to query and adapt your code based on type characteristics.", + "links": [] + }, + "3C5UfejDX-1Z8ZF6C53xD": { + "title": "SFINAE", + "description": "SFINAE is a principle in C++ template metaprogramming that allows the compiler to select the appropriate function or class when a specific template specialization fails during substitution. The term \"substitution failure\" refers to the process where the compiler tries to substitute template arguments into a function template or class template. If the substitution causes an error, the compiler won't consider that specific specialization as a candidate and will continue searching for a valid one.\n\nThe key idea behind SFINAE is that if a substitution error occurs, it is silently ignored, and the compiler continues to explore other template specializations or overloads. This allows you to write more flexible and generic code, as it enables you to have multiple specializations for different scenarios.\n\nCode Example\n------------\n\nHere's an example that demonstrates SFINAE in action:\n\n #include \n #include \n \n template \n struct foo_impl {\n void operator()(T t) {\n std::cout << \"Called when T is not arithmetic\\n\";\n }\n };\n \n template \n struct foo_impl::value>> {\n void operator()(T t) {\n std::cout << \"Called when T is arithmetic\\n\";\n }\n };\n \n template \n void foo(T t) {\n foo_impl()(t);\n }\n \n int main() {\n int a = 5;\n foo(a); // output: Called when T is arithmetic\n \n std::string s = \"example\";\n foo(s); // output: Called when T is not arithmetic\n }\n \n\nIn this example, we define two `foo_impl` functions are specialized based on the boolean value of `std::is_arithmetic`. The first one is enabled when `T` is an arithmetic type, while the second one is enabled when `T` is not an arithmetic type. The `foo` function then calls the appropriate `foo_impl` specialization based on the result of the type trait.\n\nWhen calling `foo(a)` with an integer, the first specialization is selected, and when calling `foo(s)` with a string, the second specialization is selected. If there is no valid specialization, the code would fail to compile.", + "links": [] + }, + "6hTcmJwNnQstbWWzNCfTe": { + "title": "Full Template Specialization", + "description": "Full template specialization allows you to provide a specific implementation, or behavior, for a template when used with a certain set of type parameters. It is useful when you want to handle special cases or optimize your code for specific types.\n\nSyntax\n------\n\nTo create a full specialization of a template, you need to define the specific type for which the specialization should happen. The syntax looks as follows:\n\n template <> //Indicates that this is a specialization\n className //The specialized class for the specific type\n \n\nExample\n-------\n\nConsider the following example to demonstrate full template specialization:\n\n // Generic template\n template \n class MyContainer {\n public:\n void print() {\n std::cout << \"Generic container.\\n\";\n }\n };\n \n // Full template specialization for int\n template <>\n class MyContainer {\n public:\n void print() {\n std::cout << \"Container for integers.\\n\";\n }\n };\n \n int main() {\n MyContainer d;\n MyContainer i;\n \n d.print(); // Output: Generic container.\n i.print(); // Output: Container for integers.\n \n return 0;\n }\n \n\nIn this example, we defined a generic `MyContainer` template class along with a full specialization for `int` type. When we use the container with the `int` type, the specialized implementation's `print` method is called. For other types, the generic template implementation will be used.", + "links": [] + }, + "1NYJtbdcdOB4-vIrnq4yX": { + "title": "Partial Template Specialization", + "description": "Partial template specialization is a concept in C++ templates, which allows you to specialize a template for a subset of its possible type arguments. It is particularly useful when you want to provide a customized implementation for a particular group of types without having to define separate specializations for all types in that group.\n\nPartial template specialization is achieved by providing a specialization of a template with a new set of template parameters. This new template will be chosen when the compiler deduces the types that match the partial specialization.\n\nHere is a code example that demonstrates partial template specialization:\n\n // Primary template\n template \n struct MyTemplate {\n static const char* name() {\n return \"General case\";\n }\n };\n \n // Partial specialization for pointers\n template \n struct MyTemplate {\n static const char* name() {\n return \"Partial specialization for pointers\";\n }\n };\n \n // Full specialization for int\n template <>\n struct MyTemplate {\n static const char* name() {\n return \"Full specialization for int\";\n }\n };\n \n int main() {\n MyTemplate t1; // General case\n MyTemplate t2; // Partial specialization for pointers\n MyTemplate t3; // Full specialization for int\n \n std::cout << t1.name() << '\\n';\n std::cout << t2.name() << '\\n';\n std::cout << t3.name() << '\\n';\n \n return 0;\n }\n \n\nIn the example above, we have defined a primary template `MyTemplate` with a single type parameter `T`. We then provide a partial template specialization for pointer types by specifying `MyTemplate`. This means that the partial specialization will be chosen when the type argument is a pointer type.\n\nLastly, we provide a full specialization for the `int` type by specifying `MyTemplate`. This will be chosen when the type argument is `int`.\n\nWhen running this example, the output will be:\n\n General case\n Partial specialization for pointers\n Full specialization for int\n \n\nThis demonstrates that the partial specialization works as expected, and is chosen for pointer types, while the full specialization is chosen for the `int` type.", + "links": [] + }, + "fb3bnfKXjSIjPAk4b95lg": { + "title": "Idioms", + "description": "C++ idioms are well-established patterns or techniques that are commonly used in C++ programming to achieve a specific outcome. They help make code efficient, maintainable, and less error-prone. Here are some of the common C++ idioms:\n\n1\\. Resource Acquisition is Initialization (RAII)\n-------------------------------------------------\n\nThis idiom ensures that resources are always properly acquired and released by tying their lifetime to the lifetime of an object. When the object gets created, it acquires the resources and when it gets destroyed, it releases them.\n\n class Resource {\n public:\n Resource() { /* Acquire resource */ }\n ~Resource() { /* Release resource */ }\n };\n \n void function() {\n Resource r; // Resource is acquired\n // ...\n } // Resource is released when r goes out of scope\n \n\n2\\. Rule of Three\n-----------------\n\nIf a class defines any one of the following, it should define all three: copy constructor, copy assignment operator, and destructor.\n\n class MyClass {\n public:\n MyClass();\n MyClass(const MyClass& other); // Copy constructor\n MyClass& operator=(const MyClass& other); // Copy assignment operator\n ~MyClass(); // Destructor\n };\n \n\n3\\. Rule of Five\n----------------\n\nWith C++11, the rule of three was extended to five, covering move constructor and move assignment operator.\n\n class MyClass {\n public:\n MyClass();\n MyClass(const MyClass& other); // Copy constructor\n MyClass(MyClass&& other); // Move constructor\n MyClass& operator=(const MyClass& other); // Copy assignment operator\n MyClass& operator=(MyClass&& other); // Move assignment operator\n ~MyClass(); // Destructor\n };\n \n\n4\\. PImpl (Pointer to Implementation) Idiom\n-------------------------------------------\n\nThis idiom is used to separate the implementation details of a class from its interface, resulting in faster compile times and the ability to change implementation without affecting clients.\n\n // header file\n class MyClass {\n public:\n MyClass();\n ~MyClass();\n void someMethod();\n \n private:\n class Impl;\n Impl* pImpl;\n };\n \n // implementation file\n class MyClass::Impl {\n public:\n void someMethod() { /* Implementation */ }\n };\n \n MyClass::MyClass() : pImpl(new Impl()) {}\n MyClass::~MyClass() { delete pImpl; }\n void MyClass::someMethod() { pImpl->someMethod(); }\n \n\n5\\. Non-Virtual Interface (NVI)\n-------------------------------\n\nThis enforces a fixed public interface and allows subclasses to only override specific private or protected virtual methods.\n\n class Base {\n public:\n void publicMethod() {\n // Common behavior\n privateMethod(); // Calls overridden implementation\n }\n \n protected:\n virtual void privateMethod() = 0; // Pure virtual method\n };\n \n class Derived : public Base {\n protected:\n virtual void privateMethod() override {\n // Derived implementation\n }\n };\n \n\nThese are just a few examples of the many idioms in C++ programming. They can provide guidance when designing and implementing your code, but it's essential to understand the underlying concepts to adapt them to different situations.", + "links": [] + }, + "xjUaIp8gGxkN-cp8emJ2M": { + "title": "Non-Copyable / Non-Moveable", + "description": "The non-copyable idiom is a C++ design pattern that prevents objects from being copied or assigned. It's usually applied to classes that manage resources, like file handles or network sockets, where copying the object could cause issues like resource leaks or double deletions.\n\nTo make a class non-copyable, you need to delete the copy constructor and the copy assignment operator. This can be done explicitly in the class declaration, making it clear to other programmers that copying is not allowed.\n\nHere's an example of how to apply the non-copyable idiom to a class:\n\n class NonCopyable {\n public:\n NonCopyable() = default;\n ~NonCopyable() = default;\n \n // Delete the copy constructor\n NonCopyable(const NonCopyable&) = delete;\n \n // Delete the copy assignment operator\n NonCopyable& operator=(const NonCopyable&) = delete;\n };\n \n\nTo use the idiom, simply inherit from the `NonCopyable` class:\n\n class MyClass : private NonCopyable {\n // MyClass is now non-copyable\n };\n \n\nThis ensures that any attempt to copy or assign objects of `MyClass` will result in a compilation error, thus preventing unwanted behavior.", + "links": [] + }, + "YvmjrZSAOmjhVPo05MJqN": { + "title": "Erase-Remove", + "description": "The erase-remove idiom is a common C++ technique to efficiently remove elements from a container, particularly from standard sequence containers like `std::vector`, `std::list`, and `std::deque`. It leverages the standard library algorithms `std::remove` (or `std::remove_if`) and the member function `erase()`.\n\nThe idiom consists of two steps:\n\n* `std::remove` (or `std::remove_if`) moves the elements to be removed towards the end of the container and returns an iterator pointing to the first element to remove.\n* `container.erase()` removes the elements from the container using the iterator obtained in the previous step.\n\nHere's an example:\n\n #include \n #include \n #include \n \n int main() {\n std::vector numbers = {1, 3, 2, 4, 3, 5, 3};\n \n // Remove all occurrences of 3 from the vector.\n numbers.erase(std::remove(numbers.begin(), numbers.end(), 3), numbers.end());\n \n for (int number : numbers) {\n std::cout << number << \" \";\n }\n \n return 0;\n }\n \n\nOutput:\n\n 1 2 4 5\n \n\nIn this example, we used the `std::remove` algorithm to remove all occurrences of the number 3 from the `std::vector numbers`. After the removal, the vector contains only 1, 2, 4, and 5, as the output shows.", + "links": [] + }, + "lxAzI42jQdaofzQ5MXebG": { + "title": "Copy and Swap", + "description": "Copy-swap is a C++ idiom that leverages the copy constructor and swap function to create an assignment operator. It follows a simple, yet powerful paradigm: create a temporary copy of the right-hand side object, and swap its contents with the left-hand side object.\n\nHere's a brief summary:\n\n* **Copy**: Create a local copy of the right-hand side object. This step leverages the copy constructor, providing exception safety and code reuse.\n* **Swap**: Swap the contents of the left-hand side object with the temporary copy. This step typically involves swapping internal pointers or resources, without needing to copy the full contents again.\n* **Destruction**: Destroy the temporary copy. This happens upon the exit of the assignment operator.\n\nHere's a code example for a simple `String` class:\n\n class String {\n // ... rest of the class ...\n \n String(const String& other);\n \n friend void swap(String& first, String& second) {\n using std::swap; // for arguments-dependent lookup (ADL)\n swap(first.size_, second.size_);\n swap(first.buffer_, second.buffer_);\n }\n \n String& operator=(String other) {\n swap(*this, other);\n return *this;\n }\n };\n \n\nUsing the copy-swap idiom:\n\n* The right-hand side object is copied when passed by value to the assignment operator.\n* The left-hand side object's contents are swapped with the temporary copy.\n* The temporary copy is destroyed, releasing any resources that were previously held by the left-hand side object.\n\nThis approach simplifies the implementation and provides strong exception safety, while reusing the copy constructor and destructor code.", + "links": [] + }, + "O2Du5gHHxFxAI2u5uO8wu": { + "title": "Copy on Write", + "description": "The Copy-Write idiom, sometimes called the Copy-on-Write (CoW) or \"lazy copying\" idiom, is a technique used in programming to minimize the overhead of copying large objects. It helps in reducing the number of actual copy operations by using shared references to objects and only copying the data when it's required for modification.\n\nLet's understand this with a simple example:\n\n #include \n #include \n \n class MyString {\n public:\n MyString(const std::string &str) : data(std::make_shared(str)) {}\n \n // Use the same shared data for copying.\n MyString(const MyString &other) : data(other.data) { \n std::cout << \"Copied using the Copy-Write idiom.\\n\";\n }\n \n // Make a copy only if we want to modify the data.\n void write(const std::string &str) {\n // Check if there's more than one reference.\n if (data.use_count() > 1) {\n data = std::make_shared(*data);\n std::cout << \"Copy is actually made for writing.\\n\";\n }\n *data = str;\n }\n \n private:\n std::shared_ptr data;\n };\n \n int main() {\n MyString str1(\"Hello\");\n MyString str2 = str1; // No copy operation, just shared references.\n \n str1.write(\"Hello, World!\"); // This is where the actual duplication happens.\n return 0;\n }\n \n\nIn this example, we have a class `MyString` that simulates the Copy-Write idiom. When a `MyString` object is created, it constructs a `shared_ptr` pointing to a string. When a `MyString` object is copied, it does not perform any actual copy operation, but simply increases the reference count of the shared object. Finally, when the `write` function is called, it checks if there's more than one reference to the data and if so, it actually creates a new copy and updates the reference. This way, unnecessary copies can be avoided until they are actually needed for modification.", + "links": [] + }, + "OmHDlLxCnH8RDdu5vx9fl": { + "title": "RAII", + "description": "RAII is a popular idiom in C++ that focuses on using the object's life cycle to manage resources. It encourages binding the resource lifetime to the scope of a corresponding object so that it's automatically acquired when an object is created and released when the object is destroyed. This helps in simplifying the code, avoiding leaks and managing resources efficiently.\n\nCode Examples\n-------------\n\nHere's an example of using RAII to manage resources, specifically a dynamically allocated array:\n\n class ManagedArray {\n public:\n ManagedArray(size_t size) : size_(size), data_(new int[size]) {\n }\n \n ~ManagedArray() {\n delete[] data_;\n }\n \n // Access function\n int& operator [](size_t i) {\n return data_[i];\n }\n \n private:\n size_t size_;\n int* data_;\n };\n \n\nUsages:\n\n {\n ManagedArray arr(10);\n arr[0] = 42;\n \n // No need to explicitly free memory, it will be automatically released when arr goes out of scope.\n }\n \n\nAnother common use case is managing a mutex lock:\n\n class Lock {\n public:\n Lock(std::mutex& mtx) : mutex_(mtx) {\n mutex_.lock();\n }\n \n ~Lock() {\n mutex_.unlock();\n }\n \n private:\n std::mutex& mutex_;\n };\n \n\nUsages:\n\n std::mutex some_mutex;\n \n void protected_function() {\n Lock lock(some_mutex);\n \n // Do some work that must be synchronized\n \n // No need to explicitly unlock the mutex, it will be automatically unlocked when lock goes out of scope.\n }\n \n\nIn both examples, the constructor acquires the resource (memory for the array and the lock for the mutex), and the destructor takes care of releasing them. This way, the resource management is tied to the object's lifetime, and the resource is correctly released even in case of an exception being thrown.", + "links": [] + }, + "MEoWt8NKjPLVTeGgYf3cR": { + "title": "Pimpl", + "description": "Pimpl (Pointer-to-Implementation) idiom, also known as a private class data, compiler firewall, or handle classes, is a technique used in C++ to hide the implementation details of a class by using a forward declaration to a private structure or class, keeping the public interface of the class clean, and reducing compile-time dependencies.\n\nImplementation\n--------------\n\nHere is a simple example illustrating the Pimpl idiom:\n\n**my\\_class.h**\n\n class MyClass_Impl; // forward declaration\n \n class MyClass\n {\n public:\n MyClass();\n ~MyClass();\n void some_method();\n \n private:\n MyClass_Impl *pimpl; // pointer to the implementation\n };\n \n\n**my\\_class.cpp**\n\n #include \"my_class.h\"\n #include \n \n class MyClass_Impl // the actual implementation\n {\n public:\n void some_method()\n {\n std::cout << \"Implementation method called!\\n\";\n }\n };\n \n MyClass::MyClass() : pimpl(new MyClass_Impl()) {} // constructor\n \n MyClass::~MyClass() { delete pimpl; } // destructor\n \n void MyClass::some_method()\n {\n pimpl->some_method(); // delegation to the implementation\n }\n \n\nNow, all the public methods of `MyClass` will delegate the calls to the corresponding methods of `MyClass_Impl`. By doing this, you can hide the details of class implementation, reduce the compile-time dependencies, and ease the maintenance of your code.", + "links": [] + }, + "ttt-yeIi4BPWrgvW324W7": { + "title": "CRTP", + "description": "**Curiously Recurring Template Pattern (CRTP)**\n\nThe Curiously Recurring Template Pattern (CRTP) is a C++ idiom that involves a class template being derived from its own specialization. This pattern allows for the creation of static polymorphism, which differs from regular runtime polymorphism that relies on virtual functions and inheritance.\n\nCRTP is usually employed when you want to customize certain behavior in the base class without adding the overhead of a virtual function call. In short, CRTP can be used for achieving compile-time polymorphism without the runtime performance cost.\n\nHere's an example demonstrating CRTP:\n\n template \n class Base {\n public:\n void interface() {\n static_cast(this)->implementation();\n }\n \n void implementation() {\n std::cout << \"Default implementation in Base\\n\";\n }\n };\n \n class Derived1 : public Base {\n public:\n void implementation() {\n std::cout << \"Custom implementation in Derived1\\n\";\n }\n };\n \n class Derived2 : public Base {\n // No custom implementation, so Base::implementation will be used.\n };\n \n int main() {\n Derived1 d1;\n d1.interface(); // Output: \"Custom implementation in Derived1\"\n \n Derived2 d2;\n d2.interface(); // Output: \"Default implementation in Base\"\n \n return 0;\n }\n \n\nIn this example, the `Base` class is a template that takes a single type parameter. `Derived1` and `Derived2` are derived from their respective specialization of `Base`. CRTP is employed to allow custom implementations of the `implementation()` function in derived classes while providing a default behavior in the `Base` class. The `interface()` function in the `Base` class is a template for the derived class's behavior and calls the corresponding `implementation()` function based on the static type.\n\nThis pattern enables you to override certain behavior in derived classes with additional functionality, all while avoiding the overhead of virtual function calls and, in turn, achieving a higher degree of efficiency at runtime.", + "links": [] + }, + "vvE1aUsWbF1OFcmMUHbJa": { + "title": "Standardds", + "description": "C++ standards are a set of rules and guidelines that define the language's features, syntax, and semantics. The International Organization for Standardization (ISO) is responsible for maintaining and updating the C++ standards. The main purpose of the standards is to ensure consistency, efficiency, and maintainability across multiple platforms and compilers.\n\nHere's a brief summary of the different C++ standards released to date:\n\n* **C++98/C++03**: The first standardized version of C++, which introduced many features like templates, exceptions, and the Standard Template Library (STL). C++03 is a minor update to C++98 with some bug fixes and performance improvements.\n \n* **C++11**: A major upgrade to the language, which introduced features such as:\n \n * Lambda expressions:\n \n auto sum = [](int a, int b) -> int { return a + b; };\n \n \n * Range-based for loops:\n \n std::vector numbers = {1, 2, 3, 4};\n for (int num : numbers) {\n std::cout << num << '\\n';\n }\n \n \n * Smart pointers like `std::shared_ptr` and `std::unique_ptr`.\n* **C++14**: A minor update to C++11, which added features such as:\n \n * Generic lambda expressions:\n \n auto generic_sum = [](auto a, auto b) { return a + b; };\n \n \n * Binary literals:\n \n int binary_number = 0b1010;\n \n \n* **C++17**: Another major update that introduced features such as:\n \n * `if` and `switch` with initializers:\n \n if (auto it = my_map.find(key); it != my_map.end()) {\n // use 'it' here\n }\n \n \n * Structured bindings:\n \n std::map my_map = {{\"A\", 1}, {\"B\", 2}};\n for (const auto& [key, value] : my_map) {\n // use 'key' and 'value' here\n }\n \n \n* **C++20**: The latest major update to the language, with features such as:\n \n * Concepts:\n \n template\n concept Addable = requires(T a, T b) {\n { a + b } -> std::same_as;\n };\n \n \n * Ranges:\n \n std::vector numbers = {1, 2, 3, 4};\n auto doubled = numbers | std::views::transform([](int n) { return n * 2; });\n \n \n * Coroutines and more.\n\nRemember that to use these language features, you might need to configure your compiler to use the specific C++ standard version. For example, with GCC or Clang, you can use the `-std=c++11`, `-std=c++14`, `-std=c++17`, or `-std=c++20` flags.", + "links": [] + }, + "T6rCTv9Dxkm-tEA-l9XEv": { + "title": "C++ 11 / 14", + "description": "**C++11** The C++11 standard, also known as C++0x, was officially released in September 2011. It introduced several new language features and improvements, including:\n\n* **Auto**: Allows compiler to infer the variable type based on its initializing expression.\n \n auto integer = 42; // integer is of int type\n auto floating = 3.14; // floating is of double type\n \n \n* **Range-Based for Loop**: Provides foreach-like semantics for iterating through a container or array.\n \n std::vector numbers {1, 2, 3, 4};\n for (int number : numbers) {\n std::cout << number << '\\n';\n }\n \n \n* **Lambda Functions**: Anonymous functions that allow the creation of function objects more easily.\n \n auto add = [](int a, int b) -> int { return a + b; };\n int sum = add(42, 13); // sum is equal to 55\n \n \n* **nullptr**: A new keyword to represent null pointers, more type-safe than using a literal '0' or \"NULL\".\n \n int *ptr = nullptr;\n \n \n* **Thread Support Library**: Provides a standard way to work with threads and synchronize data access across threads.\n \n std::thread t([]() { std::cout << \"Hello from another thread\\n\"; });\n t.join();\n \n \n\n**C++14** The C++14 standard was officially released in December 2014 as a small extension over C++11, focusing more on fine-tuning language features and fixing issues. Some of the new features introduced:\n\n* **Generic Lambdas**: Allows lambda function parameters to be declared with 'auto' type placeholders.\n \n auto add = [](auto a, auto b) { return a + b; };\n auto sum_i = add(42, 13); // Still works with integers\n auto sum_f = add(3.14, 2.72); // Now works with doubles too\n \n \n* **Binary Literals**: Allow you to input integers as binary literals for better readability.\n \n int b = 0b110101; // Decimal value is 53\n \n \n* **decltype(auto)**: Deduces the type of variable to match that of the expression it is initialized with.\n \n auto func = [](auto a, auto b) { return a * b; };\n decltype(auto) result = func(5, 3.14); // decltype(auto) deduces to \"double\"\n \n \n* **Variable Templates**: Allows you to define variables with template parameters.\n \n template \n constexpr T pi = T(3.1415926535897932385);\n float r = pi; // Instantiated as a float\n double d = pi; // Instantiated as a double", + "links": [] + }, + "R2-qWGUxsTOeSHRuUzhd2": { + "title": "C++ 17", + "description": "C++17, also known as C++1z, is the version of the C++ programming language published in December 2017. It builds upon the previous standard, C++14, and adds various new features and enhancements to improve the language's expressiveness, performance, and usability.\n\nKey Features:\n-------------\n\n* If-init-statement: Introduces a new syntax for writing conditions with scope inside if and switch statements.\n\n if (auto it = map.find(key); it != map.end())\n {\n // Use it\n }\n \n\n* Structured Binding Declarations: Simplify the process of unpacking a tuple, pair, or other aggregate types.\n\n map data;\n auto [iter, success] = data.emplace(\"example\", 42);\n \n\n* Inline variables: Enables `inline` keyword for variables and allows single definition of global and class static variables in header files.\n\n inline int globalVar = 0;\n \n\n* Folds expressions: Introduce fold expressions for variadic templates.\n\n template \n auto sum(Ts... ts)\n {\n return (ts + ...);\n }\n \n\n* constexpr if statement: Allows conditional compilation during compile time.\n\n template \n auto get_value(T t)\n {\n if constexpr (std::is_pointer_v)\n {\n return *t;\n }\n else\n {\n return t;\n }\n }\n \n\n* Improved lambda expression: Allows lambda to capture a single object without changing its type or constness.\n\n auto func = [x = std::move(obj)] { /* use x */ };\n \n\n* Standard file system library: `std::filesystem` as a standardized way to manipulate paths, directories, and files.\n \n* New Standard Library additions: `` (non-owning string reference), `` (type-safe discrimination union), `` (optional value wrapper), `` (type-safe sum type), and `` (library for polymorphic allocators).\n \n* Parallel Algorithms: Adds support for parallel execution of Standard Library algorithms.\n \n\nThis is a brief summary of the key features of C++17; it includes more features and library updates. For a complete list, you can refer to the [full list of C++17 features and changes](https://en.cppreference.com/w/cpp/17).", + "links": [] + }, + "o3no4a5_iMFzEAGs56-BJ": { + "title": "C++ 20", + "description": "C++20 is the latest standard of the C++ programming language, which brings significant improvements and new features to the language. This version is aimed at facilitating better software development practices and enabling developers to write more efficient, readable, and maintainable code.\n\nHere are some of the key features introduced in C++20:\n\nConcepts\n--------\n\nConcepts are a way to enforce specific requirements on template parameters, allowing you to write more expressive and understandable code. They improve the error messages when using templates and ensure that the template parameters fulfill specific criteria.\n\n template \n concept Addable = requires (T a, T b) {\n { a + b } -> std::same_as;\n };\n \n template \n T add(T a, T b) {\n return a + b;\n }\n \n\nRanges\n------\n\nRanges provide a new way to work with sequences of values, enhancing the power and expressiveness of the Standard Library algorithms. The range-based algorithms make it easier and more convenient to work with sequences.\n\n #include \n #include \n #include \n #include \n \n int main() {\n std::vector numbers = { 1, 2, 3, 4, 5 };\n \n auto even_numbers = numbers | std::views::filter([](int n) { return n % 2 == 0; });\n \n for (int n : even_numbers) {\n std::cout << n << ' ';\n }\n }\n \n\nCoroutines\n----------\n\nCoroutines are a new way to write asynchronous and concurrent code with improved readability. They allow functions to be suspended and resumed, enabling you to write more efficient, non-blocking code.\n\n #include \n #include \n #include \n \n std::future async_value(int value) {\n co_await std::chrono::seconds(1);\n co_return value * 2;\n }\n \n int main() {\n auto result = async_value(42);\n std::cout << \"Result: \" << result.get() << '\\n';\n }\n \n\nThe `constexpr` and `consteval` Keywords\n----------------------------------------\n\nBoth `constexpr` and `consteval` are related to compile-time evaluation. Functions marked with `constexpr` can be executed at compile-time or runtime, while functions marked with `consteval` can only be executed at compile-time.\n\n constexpr int add(int a, int b) {\n return a + b;\n }\n \n consteval int square(int x) {\n return x * x;\n }\n \n int main() {\n constexpr int result1 = add(3, 4); // evaluated at compile-time\n int result2 = add(5, 6); // evaluated at runtime\n constexpr int result3 = square(7); // evaluated at compile-time\n }\n \n\nThese are just some of the highlights of the C++20 standard. It also includes many other features and improvements, like structured bindings, improved lambdas, and new standard library components. Overall, C++20 makes it easier for developers to write clean, efficient, and expressive code.", + "links": [] + }, + "sxbbKtg7kMNbkx7fXhjR9": { + "title": "Newest", + "description": "C++20 is the newest standard of the C++ programming language, which was officially published in December 2020. It introduces many new features, enhancements, and improvements over the previous standards. Here is a brief summary of some key features in C++20.\n\n* **Concepts**: Concepts provide a way to specify constraints on template parameters, ensuring that they meet a specific set of requirements. This allows for better compile-time error messages and code readability.\n \n Example:\n \n template\n concept Printable = requires(T x) {\n {std::cout << x};\n };\n \n template\n void print(const T& x) {\n std::cout << x << '\\n';\n }\n \n \n* **Ranges**: Ranges build on the iterator concept and provide a more usable and composable framework for dealing with sequences of values. They simplify the way algorithms can be applied to collections of data.\n \n Example:\n \n #include \n #include \n #include \n \n int main() {\n std::vector numbers{1, 2, 3, 4, 5};\n auto even_view = numbers | std::views::filter([](int n) { return n % 2 == 0; });\n \n for (int n : even_view) {\n std::cout << n << ' ';\n }\n }\n \n \n* **Coroutines**: Coroutines offer a way to split complex, long-running functions into smaller, more manageable chunks, allowing them to be suspended and resumed at specific points.\n \n Example:\n \n #include \n #include \n \n std::generator generator() {\n for (int i = 0; i < 5; ++i)\n co_yield i;\n }\n \n int main() {\n for (int value : generator())\n std::cout << value << ' ';\n }\n \n \n* **Lambdas with template parameters**: C++20 enables using `auto` as a lambda parameter, allowing for generic lambdas with templated parameters.\n \n Example:\n \n auto sum = [](auto a, auto b) {\n return a + b;\n };\n \n int res1 = sum(1, 2); // int\n double res2 = sum(1.0, 2.0); // double\n \n \n* **Constexpr enhancements**: `constexpr` support is extended with additional features, such as `constexpr` dynamic allocations, `constexpr` try-catch blocks, and `constexpr` lambdas.\n \n Example:\n \n struct Point {\n constexpr Point(int x, int y): x_{x}, y_{y} {}\n int x_, y_;\n };\n \n constexpr auto create_points() {\n Point points[3]{};\n \n for (int i = 0; i < 3; ++i) {\n points[i] = Point{i, i * i};\n }\n \n return points;\n }\n \n constexpr auto points = create_points();\n \n \n\nThere are many other features in C++20, such as new standard library improvements, `std::format`, improvements to compile-time programming, and more. These are just a few highlights that showcase the versatility and power of the newest standard of C++.", + "links": [] + }, + "PPg0V5EzGBeJsysg1215V": { + "title": "C++ 0x", + "description": "`cpp0x` refers to the working name for [C++11](https://en.cppreference.com/w/cpp/11), which was previously known as C++0x before its final release. C++11 is a major revision of the C++ language standard, published in 2011, and brought several new features and improvements to the language.\n\nSome of the notable features in C++11 include:\n\n* **Auto** keyword for automatic type inference.\n \n auto i = 42; // i is an int\n auto s = \"hello\"; // s is a const char*\n \n \n* **Range-based for loop** for easier iteration over containers.\n \n std::vector vec = {1, 2, 3};\n for (int i : vec) {\n std::cout << i << '\\n';\n }\n \n \n* **Lambda functions** for creating anonymous functions.\n \n auto add = [](int a, int b) { return a + b; };\n int result = add(3, 4); // result is 7\n \n \n* **nullptr** for representing null pointer values, instead of using `NULL`.\n \n int* p = nullptr;\n \n \n* **Rvalue references and move semantics** to optimize the handling of temporary objects.\n \n std::string str1 = \"hello\";\n std::string str2 = std::move(str1); // move the content of str1 to str2\n \n \n* **Variadic templates** for creating templates that take a variable number of arguments.\n \n template \n void printArgs(Args... args) {\n // function body\n }\n \n \n* **Static assertions** for compile-time assertions.\n \n static_assert(sizeof(int) == 4, \"This code requires int to be 4 bytes.\");\n \n \n* **Thread support** for multithreading programming.\n \n #include \n \n void my_function() {\n // thread function body\n }\n \n int main() {\n std::thread t(my_function);\n t.join();\n return 0;\n }\n \n \n\nThese are just a few examples of the many new features introduced in C++11. For a comprehensive list, you can refer to the [C++11 documentation](https://en.cppreference.com/w/cpp/11).", + "links": [] + }, + "qmHs6_BzND_xpMmls5YUH": { + "title": "Debuggers", + "description": "Debuggers are essential tools for any C++ programmer, as they help in detecting, diagnosing, and fixing bugs in the code. They serve as an invaluable resource in identifying and understanding potential errors in the program.\n\nTypes of Debuggers\n------------------\n\nThere are several debuggers available for use with C++:\n\n* **GDB (GNU Debugger):** This is the most widely used C++ debugger in the Linux environment. It can debug many languages, including C and C++.\n \n Example usage:\n \n g++ -g main.cpp -o main # compile the code with debug info\n gdb ./main # start gdb session\n b main # set a breakpoint at the start of the main function\n run # run the program\n next # step to the next line\n \n \n* **LLDB:** This is the debugger developed by LLVM. It supports multiple languages and is popular among macOS and iOS developers.\n \n Example usage:\n \n clang++ -g main.cpp -o main # compile the code with debug info\n lldb ./main # start lldb session\n breakpoint set --name main # set a breakpoint at the start of the main function\n run # run the program\n next # step to the next line\n \n \n* **Microsoft Visual Studio Debugger:** This debugger is built into Visual Studio and is typically used in a graphical interface on Windows systems.\n \n Example usage:\n \n Open your Visual Studio project and go to Debug > Start Debugging. Then use the step over (F10), step into (F11), or continue (F5) commands to navigate through the code.\n \n \n* **Intel Debugger (IDB):** This debugger is part of Intel's parallel development suite and is popular for high-performance applications.\n \n* **TotalView Debugger:** Developed by Rogue Wave Software, TotalView Debugger is a commercial debugger designed for parallel, high-performance, and enterprise applications.\n \n\nEach debugger has its advantages and unique features, so it's essential to choose the one that best suits your needs and works well with your development environment.", + "links": [] + }, + "VtPb8-AJKzhTB0QbMtoU4": { + "title": "Understanding Debugger Messages", + "description": "Debugger messages are notifications or alerts provided by a debugger to help you identify problems or errors in your C++ code. These messages can be warnings or error messages and can provide helpful information about the state of your program and specific issues encountered during the debugging process.\n\nTypes of Debugger Messages\n--------------------------\n\n* **Error Messages:** Notify you about issues in the code that prevent the program from running or compiling correctly. These messages typically include information about the file and the line number where the error is detected, followed by a description of the issue.\n \n Example:\n \n test.cpp: In function 'int main()':\n test.cpp:6:5: error: 'cout' was not declared in this scope\n cout << \"Hello World!\";\n ^~~~\n \n \n* **Warning Messages:** Inform you about potential issues or risky programming practices that may not necessarily cause errors but could lead to problems later on. Like error messages, warning messages usually include information about the file and line number where the issue is found, along with a description of the problem.\n \n Example:\n \n test.cpp: In function 'int main()':\n test.cpp:6:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]\n if (a < size)\n ^\n \n \n* **Informational Messages:** Provide general information about the execution of the program, such as breakpoints, watchpoints, and variable values. These messages can also reveal the current state of the program, including the call stack and the list of active threads.\n \n Example (_assuming you are using GDB as debugger_):\n \n (gdb) break main\n Breakpoint 1 at 0x40055f: file test.cpp, line 5.\n (gdb) run\n Starting program: /path/to/test\n Breakpoint 1, main () at test.cpp:5\n 5 int a = 5;\n \n \n\nCode Examples\n-------------\n\nTo make use of debugger messages, you need to employ a debugger, such as GDB or Visual Studio Debugger, and include specific flags during the compilation process.\n\nExample using GDB:\n\n // test.cpp\n \n #include \n \n int main() {\n int num1 = 10;\n int num2 = 0;\n int result = num1 / num2;\n \n std::cout << \"Result: \" << result << '\\n';\n \n return 0;\n }\n \n\n $ g++ -g -o test test.cpp // Compile with -g flag to include debugging information\n $ gdb ./test // Run the GDB debugger\n (gdb) run // Execute the program inside GDB\n \n\nAt this point, the debugger will show an error message triggered by the division by zero:\n\n Program received signal SIGFPE, Arithmetic exception.\n 0x00005555555546fb in main () at test.cpp:7\n 7 int result = num1 / num2;\n \n\nNow you can make appropriate changes to fix the issue in your C++ code.", + "links": [] + }, + "sR_FxGZHoMCV9Iv7z2_SX": { + "title": "Debugging Symbols", + "description": "Debugger symbols are additional information embedded within the compiled program's binary code, that help debuggers in understanding the structure, source code, and variable representations at a particular point in the execution process.\n\nThere are generally two types of debugging symbols:\n\n* **Internal Debugging Symbols**: These symbols reside within the compiled binary code itself. When using internal debugging symbols, it is essential to note that the size of the binary increases, which may not be desirable for production environments.\n \n* **External Debugging Symbols**: The debugging symbols are kept in separate files apart from the binary code, usually with file extensions such as `.pdb` (Program Database) in Windows or `.dSYM` (DWARF Symbol Information) in macOS.\n \n\nGenerating Debugger Symbols\n---------------------------\n\nTo generate debugger symbols in C++, you need to specify specific options during the compilation process. We will use `g++` compiler as an example.\n\n**Internal Debugging Symbols (g++)**\n\nTo create a debug build with internal debugging symbols, use the `-g` flag:\n\n g++ -g -o my_program my_program.cpp\n \n\nThis command compiles `my_program.cpp` into an executable named `my_program` with internal debugging symbols.\n\n**External Debugging Symbols (g++)**\n\nIn case you want to generate a separate file containing debugging symbols, you can use the `-gsplit-dwarf` flag:\n\n g++ -g -gsplit-dwarf -o my_program my_program.cpp\n \n\nThis command compiles `my_program.cpp` into an executable named `my_program` and generates a separate file named `my_program.dwo` containing the debugging symbols.\n\nWhen sharing your compiled binary to end-users, you can remove the debugging symbols using the `strip` command:\n\n strip --strip-debug my_program\n \n\nThis command removes internal debug symbols, resulting in a smaller binary size while keeping the `.dwo` file for debugging purposes when needed.\n\nRemember that the availability and syntax of these options may vary between different compilers and platforms. Be sure to consult your compiler's documentation to ensure proper usage of the debugging options.", + "links": [] + }, + "y8VCbGDUco9bzGRfIBD8R": { + "title": "WinDBg", + "description": "WinDbg is a powerful debugger for Windows applications, which is included in the Microsoft Windows SDK. It provides an extensive set of features to help you analyze and debug complex programs, kernel mode, and user-mode code. With a user-friendly graphical interface, WinDbg can help in analyzing crash dumps, setting breakpoints, and stepping through code execution.\n\nGetting Started\n---------------\n\nTo begin using WinDbg, you first need to install it. You can download the [Windows SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/) and install it to get the WinDbg.\n\nLoading Symbols\n---------------\n\nWinDbg relies on symbol files (\\*.pdb) to provide more useful information about a program's internal structures, functions, and variables. To load symbols properly, you may need to configure the symbol path:\n\n !sym noisy\n .sympath SRV*C:\\symbols*http://msdl.microsoft.com/download/symbols\n .reload /f\n \n\nOpening Executables and Crash Dumps\n-----------------------------------\n\nTo debug an executable using WinDbg, go to `File > Open Executable...`, then locate and open the target program. To analyze a crash dump, use `File > Open Crash Dump...` instead.\n\nBasic Commands\n--------------\n\nSome common commands you might use in WinDbg:\n\n* `g`: Execute the program until the next breakpoint or exception\n* `bp
`: Set a breakpoint at a given address\n* `bl`: List all breakpoints\n* `bd `: Disable a breakpoint\n* `be `: Enable a breakpoint\n* `bc `: Clear a breakpoint\n* `t`: Single-step through instructions (trace)\n* `p`: Step over instructions (proceed)\n* `k`: Display call stack\n* `dd`: Display memory contents in 4-byte units (double words)\n* `da`: Display memory contents as ASCII strings\n* `!analyze -v`: Analyze the program state and provide detailed information\n\nExample Usage\n-------------\n\nDebugging a simple program:\n\n* Open the executable in WinDbg\n* Set a breakpoint using `bp
`\n* Run the program using `g`\n* Once the breakpoint is hit, use `t` or `p` to step through the code\n* Try `k` to view the call stack, or `dd`, `da` to inspect memory\n* Remove the breakpoint and continue debugging with other commands as needed\n\nRemember that WinDbg has a wealth of commands and functionality, so it's essential to get comfortable with the [documentation](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools) and explore the wealth of available resources specific to your debugging tasks.", + "links": [] + }, + "BmWsoL9c_Aag5nVlMsKm2": { + "title": "GDB", + "description": "GDB, or the GNU Project Debugger, is a powerful command-line debugger used primarily for C, C++, and other languages. It can help you find runtime errors, examine the program's execution state, and manipulate the flow to detect and fix bugs easily.\n\nGetting started with GDB\n------------------------\n\nTo start using GDB, you first need to compile your code with the `-g` flag, which includes debugging information in the executable:\n\n g++ -g myfile.cpp -o myfile\n \n\nNow, you can load your compiled program into GDB:\n\n gdb myfile\n \n\nBasic GDB Commands\n------------------\n\nHere are some common GDB commands you'll find useful when debugging:\n\n* `run`: Start your program.\n* `break [function/line number]`: Set a breakpoint at the specified function or line.\n* `continue`: Continue the program execution after stopping on a breakpoint.\n* `next`: Execute the next line of code, stepping over function calls.\n* `step`: Execute the next line of code, entering function calls.\n* `print [expression]`: Evaluate an expression in the current context and display its value.\n* `backtrace`: Show the current call stack.\n* `frame [frame-number]`: Switch to a different stack frame.\n* `quit`: Exit GDB.\n\nExample Usage\n-------------\n\nSuppose you have a simple `cpp` file called `example.cpp`:\n\n #include \n \n void my_function(int i) {\n std::cout << \"In my_function with i = \" << i << '\\n';\n }\n \n int main() {\n for (int i = 0; i < 5; ++i) {\n my_function(i);\n }\n return 0;\n }\n \n\nFirst, compile the code with debugging symbols:\n\n g++ -g example.cpp -o example\n \n\nStart GDB and load the `example` program:\n\n gdb example\n \n\nSet a breakpoint in the `my_function` function and run the program:\n\n (gdb) break my_function\n (gdb) run\n \n\nOnce stopped at the breakpoint, use `next`, `print`, and `continue` to examine the program's state:\n\n (gdb) next\n (gdb) print i\n (gdb) continue\n \n\nFinally, exit GDB with the `quit` command.\n\nThis was just a brief summary of GDB; you can find more details in the [official GDB manual](https://sourceware.org/gdb/current/onlinedocs/gdb/).", + "links": [] + }, + "FTMHsUiE8isD_OVZr62Xc": { + "title": "Compilers", + "description": "A compiler is a computer program that translates source code written in one programming language into a different language, usually machine code or assembly code, that can be executed directly by a computer's processor. In the context of C++, compilers take your written C++ source code and convert it into an executable program.\n\nPopular C++ Compilers\n---------------------\n\nThere are several popular C++ compilers available, here's a short list of some common ones:\n\n* **GNU Compiler Collection (GCC)**: Developed by the GNU Project, GCC is an open-source compiler that supports multiple programming languages, including C++.\n \n* **Clang**: As part of the LLVM project, Clang is another open-source compiler that supports C++ and is known for its fast compilation times and extensive diagnostics.\n \n* **Microsoft Visual C++ (MSVC)**: MSVC is a commercial compiler provided by Microsoft as part of Visual Studio, and it's widely used on Windows platforms.\n \n* **Intel C++ Compiler (ICC)**: ICC is a commercial compiler provided by Intel and is known for its ability to optimize code for the latest Intel processors.\n \n\nExample of a Simple C++ Compilation\n-----------------------------------\n\nLet's say you have a simple C++ program saved in a file called `hello.cpp`:\n\n #include \n \n int main() {\n std::cout << \"Hello, World!\\n\";\n return 0;\n }\n \n\nYou can compile this program using the GCC compiler by executing the following command in a command-line/terminal:\n\n g++ hello.cpp -o hello\n \n\nThis will generate an executable file called `hello` (or `hello.exe` on Windows) which you can run to see the output \"Hello, World!\".\n\nNote\n----\n\nWhen learning about compilers, it's essential to know that they work closely with the linker and the standard library. The linker takes care of combining compiled object files and libraries into a single executable, while the standard library provides implementations for common functionalities used in your code.", + "links": [] + }, + "DVckzBUMgk_lWThVkLyAT": { + "title": "Compiler Stages", + "description": "The process of compilation in C++ can be divided into four primary stages: Preprocessing, Compilation, Assembly, and Linking. Each stage performs a specific task, ultimately converting the source code into an executable program.\n\nPreprocessing\n-------------\n\nThe first stage is the preprocessing of the source code. Preprocessors modify the source code before the actual compilation process. They handle directives that start with a `#` (hash) symbol, like `#include`, `#define`, and `#if`. In this stage, included header files are expanded, macros are replaced, and conditional compilation statements are processed.\n\n**Code Example:**\n\n #include \n #define PI 3.14\n \n int main() {\n std::cout << \"The value of PI is: \" << PI << '\\n';\n return 0;\n }\n \n\nCompilation\n-----------\n\nThe second stage is the actual compilation of the preprocessed source code. The compiler translates the modified source code into an intermediate representation, usually specific to the target processor architecture. This step also involves performing syntax checking, semantic analysis, and producing error messages for any issues encountered in the source code.\n\n**Code Example:**\n\n int main() {\n int a = 10;\n int b = 20;\n int sum = a + b;\n return 0;\n }\n \n\nAssembly\n--------\n\nThe third stage is converting the compiler's intermediate representation into assembly language. This stage generates assembly code using mnemonics and syntax that is specific to the target processor architecture. Assemblers then convert this assembly code into object code (machine code).\n\n**Code Example (x86 Assembly):**\n\n mov eax, 10\n mov ebx, 20\n add eax, ebx\n \n\nLinking\n-------\n\nThe final stage is the linking of the object code with the necessary libraries and other object files. In this stage, the linker merges multiple object files and libraries, resolves external references from other modules or libraries, allocates memory addresses for functions and variables, and generates an executable file that can be run on the target platform.\n\n**Code Example (linking objects and libraries):**\n\n $ g++ main.o -o main -lm\n \n\nIn summary, the compilation process in C++ involves four primary stages: preprocessing, compilation, assembly, and linking. Each stage plays a crucial role in transforming the source code into an executable program.", + "links": [] + }, + "hSG6Aux39X0cXi6ADy2al": { + "title": "Compilers and Features", + "description": "Different C++ compilers have different features. Some of the most common features of C++ compilers are:\n\n* **Optimization:** Compilers can optimize the code to improve the performance of the program. For example, they can remove redundant code, inline functions, and perform loop unrolling.\n* **Debugging:** Compilers can generate debugging information that can be used to debug the program.\n* **Warnings:** Compilers can generate warnings for suspicious code that may cause errors.\n\nSome of the most popular C++ compilers are:\n\n* **GNU Compiler Collection (GCC):** GCC is a free and open-source compiler that supports many programming languages, including C++.\n* **Clang:** Clang is a C++ compiler that is part of the LLVM project. It is designed to be compatible with GCC.\n* **Microsoft Visual C++:** Microsoft Visual C++ is a C++ compiler that is part of the Microsoft Visual Studio IDE.\n* **Intel C++ Compiler:** Intel C++ Compiler is a C++ compiler that is part of the Intel Parallel Studio XE suite.\n\nYou should go through the documentation of your compiler to learn more about its features.", + "links": [] + }, + "jVXFCo6puMxJ_ifn_uwim": { + "title": "Build Systems", + "description": "A build system is a collection of tools and utilities that automate the process of compiling, linking, and executing source code files in a project. The primary goal of build systems is to manage the complexity of the compilation process and produce a build (executable or binary files) in the end. In C++ (cpp), some common build systems are:\n\n* **GNU Make**: It is a popular build system that uses `Makefile` to define the build process. It checks the dependencies and timestamps of source files to determine which files need to be compiled and linked.\n \n Code example:\n \n # Makefile\n CXX = g++\n CPPFLAGS = -Wall -std=c++11\n TARGET = HelloWorld\n \n all: $(TARGET)\n \n $(TARGET): main.cpp\n $(CXX) $(CPPFLAGS)main.cpp -o $(TARGET)\n \n clean:\n rm $(TARGET)\n \n \n* **CMake**: It is a cross-platform build system that focuses on defining project dependencies and managing build environments. CMake generates build files (like Makefiles) for different platforms and allows developers to write source code once and then compile it for different target platforms.\n \n Code example:\n \n # CMakeLists.txt\n cmake_minimum_required(VERSION 3.10)\n project(HelloWorld)\n \n set(CMAKE_CXX_STANDARD 11)\n \n add_executable(HelloWorld main.cpp)\n \n \n* **Autotools**: Also known as GNU Build System, consists of the GNU Autoconf, Automake, and Libtool tools that enable developers to create portable software across different Unix-based systems. For a C++ project, you will need to create `configure.ac`, `Makefile.am` files with specific rules, and then run the following commands in the terminal to build the project:\n \n autoreconf --install\n ./configure\n make\n make install\n \n \n* **SCons**: This build system uses Python for build scripts, making it more expressive than GNU Make. It can also build for multiple platforms and configurations simultaneously.\n \n Code example:\n \n # SConstruct\n env = Environment()\n env.Program(target=\"HelloWorld\", source=[\"main.cpp\"])\n \n \n* **Ninja**: A small and focused build system that takes a list of build targets specified in a human-readable text file and builds them as fast as possible.\n \n Code example:\n \n # build.ninja\n rule cc\n command = g++ -c $in -o $out\n \n rule link\n command = g++ $in -o $out\n \n build main.o: cc main.cpp\n build HelloWorld: link main.o\n default HelloWorld\n \n \n\nThese are some of the popular build systems in C++, each with their own syntax and capabilities. While Make is widely used, CMake is a cross-platform build system that generates build files for other build systems like Make or Ninja. Autotools is suitable for creating portable software, SCons leverages Python for its build scripts, and Ninja focuses on fast build times.", + "links": [] + }, + "ysnXvSHGBMMozBJyXpHl5": { + "title": "CMAKE", + "description": "CMake is a powerful cross-platform build system that generates build files, Makefiles, or workspaces for various platforms and compilers. Unlike the others build systems, CMake does not actually build the project, it only generates the files needed by build tools. CMake is widely used, particularly in C++ projects, for its ease of use and flexibility.\n\nCMakeLists.txt\n--------------\n\nCMake uses a file called `CMakeLists.txt` to define settings, source files, libraries, and other configurations. A typical `CMakeLists.txt` for a simple project would look like:\n\n cmake_minimum_required(VERSION 3.0)\n \n project(MyProject)\n \n set(SRC_DIR \"${CMAKE_CURRENT_LIST_DIR}/src\")\n set(SOURCES \"${SRC_DIR}/main.cpp\" \"${SRC_DIR}/file1.cpp\" \"${SRC_DIR}/file2.cpp\")\n \n add_executable(${PROJECT_NAME} ${SOURCES})\n \n target_include_directories(${PROJECT_NAME} PRIVATE \"${CMAKE_CURRENT_LIST_DIR}/include\")\n \n set_target_properties(${PROJECT_NAME} PROPERTIES\n CXX_STANDARD 14\n CXX_STANDARD_REQUIRED ON\n CXX_EXTENSIONS OFF\n )\n \n\nBuilding with CMake\n-------------------\n\nHere is an example of a simple build process using CMake:\n\n* Create a new directory for the build.\n\n mkdir build\n cd build\n \n\n* Generate build files using CMake.\n\n cmake ..\n \n\nIn this example, `..` indicates the parent directory where `CMakeLists.txt` is located. The build files will be generated in the `build` directory.\n\n* Build the project using the generated build files.\n\n make\n \n\nOr, on Windows with Visual Studio, you may use:\n\n msbuild MyProject.sln\n \n\nCMake makes it easy to manage large projects, define custom build configurations, and work with many different compilers and operating systems. Making it a widely chosen tool for managing build systems in C++ projects.", + "links": [] + }, + "t6rZLH7l8JQm99ax_fEJ9": { + "title": "Makefile", + "description": "A Makefile is a configuration file used by the `make` utility to automate the process of compiling and linking code in a C++ project. It consists of a set of rules and dependencies that help in building the target executable or library from source code files.\n\nMakefiles help developers save time, reduce errors, and ensure consistency in the build process. They achieve this by specifying the dependencies between different source files, and providing commands that generate output files (such as object files and executables) from input files (such as source code and headers).\n\nStructure of a Makefile\n-----------------------\n\nA typical Makefile has the following structure:\n\n* **Variables**: Define variables to store commonly used values, such as compiler flags, directories, or target names.\n* **Rules**: Define how to generate output files from input files using a set of commands. Each rule has a _target_, a set of _prerequisites_, and a _recipe_.\n* **Phony targets**: Targets that do not represent actual files in the project but serve as a way to group related rules and invoke them using a single command.\n\nExample\n-------\n\nConsider a basic C++ project with the following directory structure:\n\n project/\n |-- include/\n | |-- header.h\n |-- src/\n | |-- main.cpp\n |-- Makefile\n \n\nA simple Makefile for this project could be as follows:\n\n # Variables\n CXX = g++\n CXXFLAGS = -Wall -Iinclude\n SRC = src/main.cpp\n OBJ = main.o\n EXE = my_program\n \n # Rules\n $(EXE): $(OBJ)\n \t$(CXX) $(CXXFLAGS) -o $(EXE) $(OBJ)\n \n $(OBJ): $(SRC)\n \t$(CXX) $(CXXFLAGS) -c $(SRC)\n \n # Phony targets\n .PHONY: clean\n clean:\n \trm -f $(OBJ) $(EXE)\n \n\nWith this Makefile, you can simply run `make` in the terminal to build the project, and `make clean` to remove the output files. The Makefile specifies the dependencies between the source code, object files, and the final executable, as well as the commands to compile and link them.\n\nSummary\n-------\n\nMakefiles provide a powerful way to automate building C++ projects using the `make` utility. They describe the dependencies and commands required to generate output files from source code, saving time and ensuring consistency in the build process.", + "links": [] + }, + "HkUCD5A_M9bJxJRElkK0x": { + "title": "Ninja", + "description": "Ninja is a small build system with a focus on speed. It is designed to handle large projects by generating build files that implement the minimal amount of work necessary to build the code. This results in faster build times, especially for large codebases. Ninja is often used in conjunction with other build systems like CMake, which can generate Ninja build files for you.\n\nNinja build files are typically named `build.ninja` and contain rules, build statements, and variable declarations. Here's a simple example of a Ninja build file for a C++ project:\n\n # Variable declarations\n cxx = g++\n cflags = -Wall -Wextra -std=c++17\n \n # Rule for compiling the C++ files\n rule cxx_compile\n command = $cxx $cflags -c $in -o $out\n \n # Build statements for the source files\n build main.o: cxx_compile main.cpp\n build foo.o: cxx_compile foo.cpp\n \n # Rule for linking the object files\n rule link\n command = $cxx $in -o $out\n \n # Build statement for the final executable\n build my_program: link main.o foo.o\n \n\nTo build the project using this `build.ninja` file, simply run `ninja` in the terminal:\n\n $ ninja\n \n\nThis will build the `my_program` executable by first compiling the `main.cpp` and `foo.cpp` files into object files, and then linking them together.", + "links": [] + }, + "h29eJG1hWHa7vMhSqtfV2": { + "title": "Package Managers", + "description": "Package managers are tools that automate the process of installing, upgrading, and managing software (libraries, frameworks, and other dependencies) for a programming language, such as C++.\n\nSome popular package managers used in the C++ ecosystem include:\n\n* **Conan**\n* **vcpkg**\n* **C++ Archive Network (cppan)**\n\nConan\n-----\n\n[Conan](https://conan.io/) is an open-source, decentralized, cross-platform package manager for C and C++ developers. It simplifies managing dependencies and reusing code, which benefits multi-platform development projects.\n\nFor example, installing a library using Conan:\n\n conan install poco/1.9.4@\n \n\nvcpkg\n-----\n\n[vcpkg](https://github.com/microsoft/vcpkg) is a cross-platform package manager created by Microsoft. It is an open-source library management system for C++ developers to build and manage their projects.\n\nFor example, installing a package using vcpkg:\n\n ./vcpkg install boost:x64-windows\n \n\nC++ Archive Network (cppan)\n---------------------------\n\n[cppan](https://cppan.org/) is a package manager and software repository for C++ developers, simplifying the process of managing and distributing C++ libraries and tools. It's now part of [build2](https://build2.org/), a build toolchain that provides a package manager.\n\nAn example of a `cppan.yml` file:\n\n #\n # cppan.yml\n #\n \n project:\n api_version: 1\n \n depend:\n - pvt.cppan.demo.sqlite3\n - pvt.cppan.demo.xz_utils.lzma\n \n\nWith these package managers, you can streamline your development process and easily manage dependencies in your C++ projects. In addition, you can easily reuse the code in your projects to improve code quality and accelerate development.", + "links": [] + }, + "PKG5pACLfRS2ogfzBX47_": { + "title": "vcpkg", + "description": "`vcpkg` is a cross-platform, open-source package manager for C and C++ libraries. Developed by Microsoft, it simplifies the process of acquiring and building open-source libraries for your projects. `vcpkg` supports various platforms including Windows, Linux, and macOS, enabling you to easily manage and integrate external libraries into your projects.\n\nInstallation\n------------\n\nTo install `vcpkg`, follow these steps:\n\n* Clone the repository:\n \n git clone https://github.com/Microsoft/vcpkg.git\n \n \n* Change to the `vcpkg` directory and run the bootstrap script:\n \n * On Windows:\n \n .\\bootstrap-vcpkg.bat\n \n \n * On Linux/macOS:\n \n ./bootstrap-vcpkg.sh\n \n \n* (Optional) Add the `vcpkg` executable to your `PATH` environment variable for easy access.\n \n\nBasic usage\n-----------\n\nHere are some basic examples of using `vcpkg`:\n\n* Search for a package:\n \n vcpkg search \n \n \n* Install a package:\n \n vcpkg install \n \n \n* Remove a package:\n \n vcpkg remove \n \n \n* List installed packages:\n \n vcpkg list\n \n \n* Integrate `vcpkg` with Visual Studio (Windows only):\n \n vcpkg integrate install\n \n \n\nFor additional documentation and advanced usage, you can refer to the [official GitHub repository](https://github.com/microsoft/vcpkg).", + "links": [] + }, + "g0s0F4mLV16eNvMBflN2e": { + "title": "NuGet", + "description": "[NuGet](https://www.nuget.org/) is a Microsoft-supported package manager for the .NET framework, mainly used in C# and other .NET languages, but also supports C++ projects with `PackageReference`. It allows you to easily add, update, and manage dependencies in your projects.\n\n### Installation\n\nYou can use NuGet either as a command-line tool or integrated in your preferred IDE like Visual Studio or Visual Studio Code. If you're using Visual Studio, it comes pre-installed. For other editors, you may need to download the command-line tool `nuget.exe`.\n\n### Usage\n\nYou can use NuGet to manage your C++ dependencies using the PackageReference format in vcxproj files:\n\n* Tools > NuGet Package Manager > Manage NuGet Packages for Solution…\n* Package source should be set to \"[nuget.org](http://nuget.org)\"\n* Select the Projects tab\n* Use the search box to find packages\n\nFor example, to install a package called \"PackageName\" for all configurations:\n\n \n \n \n \n ...\n \n \n\n### NuGet Command-Line\n\nYou can also use the command-line tool `nuget.exe` for more advanced scenarios or for specific needs.\n\nHere's an example of installing a package using the command line:\n\n nuget install PackageName\n \n\nAnd updating a package:\n\n nuget update PackageName\n \n\nFor more information and detailed examples on using NuGet in your projects, please refer to the [official documentation](https://docs.microsoft.com/en-us/nuget/guides/native-packages).", + "links": [] + }, + "ky_UqizToTZHC_b77qFi2": { + "title": "Conan", + "description": "[Conan](https://conan.io/) is a popular package manager for C and C++ languages and is designed to be cross-platform, extensible, and easy to use. It allows developers to declare, manage, and fetch dependencies while automating the build process. Conan supports various build systems, such as CMake, Visual Studio, MSBuild, and more.\n\nInstallation\n------------\n\nTo install Conan, you can use pip, the Python package manager:\n\n pip install conan\n \n\nBasic Usage\n-----------\n\n* Create a `conanfile.txt` file in your project root directory, specifying dependencies you need for your project:\n\n [requires]\n boost/1.75.0\n \n [generators]\n cmake\n \n\n* Run the `conan install` command to fetch and build required dependencies:\n\n mkdir build && cd build\n conan install ..\n \n\n* Now build your project using your build system, for example CMake:\n\n cmake .. -DCMAKE_BUILD_TYPE=Release\n cmake --build .\n \n\nCreating Packages\n-----------------\n\nTo create a package in Conan, you need to write a `conanfile.py` file with package information and build instructions.\n\nHere's an example:\n\n from conans import ConanFile, CMake\n \n \n class MyLibraryConan(ConanFile):\n name = \"MyLibrary\"\n version = \"0.1\"\n license = \"MIT\"\n url = \"https://github.com/username/mylibrary\"\n description = \"A simple example library\"\n settings = \"os\", \"compiler\", \"build_type\", \"arch\"\n generators = \"cmake\"\n \n def build(self):\n cmake = CMake(self)\n cmake.configure(source_folder=\"src\")\n cmake.build()\n \n def package(self):\n self.copy(\"*.hpp\", dst=\"include\", src=\"src/include\")\n self.copy(\"*.lib\", dst=\"lib\", keep_path=False)\n self.copy(\"*.dll\", dst=\"bin\", keep_path=False)\n self.copy(\"*.so\", dst=\"lib\", keep_path=False)\n self.copy(\"*.a\", dst=\"lib\", keep_path=False)\n \n def package_info(self):\n self.cpp_info.libs = [\"MyLibrary\"]\n \n\nWith that setup, you can create a package by running:\n\n conan create . username/channel\n \n\nThis will compile the package and store it in your Conan cache. You can now use this package as a dependency in other projects.", + "links": [] + }, + "3ehBc2sKVlPj7dn4RVZCH": { + "title": "Spack", + "description": "[Spack](https://spack.io/) is a flexible package manager designed to support multiple versions, configurations, platforms, and compilers. It is particularly useful in High Performance Computing (HPC) environments and for those who require fine control over their software stack. Spack is a popular choice in scientific computing due to its support for various platforms such as Linux, macOS, and many supercomputers. It is designed to automatically search for and install dependencies, making it easy to build complex software.\n\nKey Features\n------------\n\n* **Multi-Version Support**: Spack allows for the installation of multiple versions of packages, enabling users to work with different configurations depending on their needs.\n* **Compiler Support**: Spack supports multiple compilers, including GCC, Clang, Intel, PGI, and others, allowing users to choose the best toolchain for their application.\n* **Platform Support**: Spack can run on Linux, macOS, and various supercomputers, and it can even target multiple architectures within a single package.\n* **Dependencies**: Spack takes care of dependencies, providing automatic installation and management of required packages.\n\nBasic Usage\n-----------\n\n* To install Spack, clone its Git repository and set up your environment:\n \n git clone https://github.com/spack/spack.git\n cd spack\n . share/spack/setup-env.sh\n \n \n* Install a package using Spack:\n \n spack install \n \n \n For example, to install `hdf5`:\n \n spack install hdf5\n \n \n* Load a package in your environment:\n \n spack load \n \n \n For example, to load `hdf5`:\n \n spack load hdf5\n \n \n* List installed packages:\n \n spack find\n \n \n* Uninstall a package:\n \n spack uninstall \n \n \n\nFor more advanced usage, like installing specific versions or using different compilers, consult the [Spack documentation](https://spack.readthedocs.io/).", + "links": [] + }, + "4kkX5g_-plX9zVqr0ZoiR": { + "title": "Working with Libraries", + "description": "When working with C++, you may need to use external libraries to assist in various tasks. Libraries are precompiled pieces of code that can be reused in your program to perform a specific task or provide a certain functionality. In C++, libraries can be either static libraries (.lib) or dynamic libraries (.dll in Windows, .so in Unix/Linux).\n\n**1\\. Static Libraries**\n\nStatic libraries are incorporated into your program during compile time. They are linked with your code, creating a larger executable file, but it does not require any external files during runtime.\n\nTo create a static library, you'll need to compile your source files into object files, then bundle them into an archive. You can use the following commands:\n\n g++ -c sourcefile.cpp -o objectfile.o\n ar rcs libmystaticlibrary.a objectfile.o\n \n\nTo use a static library, you need to include the header files in your source code and then link the library during the compilation process:\n\n g++ main.cpp -o myprogram -L/path/to/your/library/ -lmystaticlibrary\n \n\nReplace `/path/to/your/library/` with the path where your `libmystaticlibrary.a` file is located.\n\n**2\\. Dynamic Libraries**\n\nDynamic libraries are loaded during runtime, which means that your executable file only contains references to these libraries. The libraries need to be available on the system where your program is running.\n\nTo create a dynamic library, you'll need to compile your source files into object files, then create a shared library:\n\n g++ -c -fPIC sourcefile.cpp -o objectfile.o\n g++ -shared -o libmydynamiclibrary.so objectfile.o\n \n\nTo use a dynamic library, include the library's header files in your source code and then link the library during the compilation process:\n\n g++ main.cpp -o myprogram -L/path/to/your/library/ -lmydynamiclibrary\n \n\nReplace `/path/to/your/library/` with the path where your `libmydynamiclibrary.so` file is located.\n\n**NOTE:** When using dynamic libraries, make sure the library is in the system's search path for shared libraries. You may need to update the `LD_LIBRARY_PATH` environment variable on Unix/Linux systems or the `PATH` variable on Windows.\n\nIn conclusion, using libraries in C++ involves creating or obtaining a library (static or dynamic), including the library's header files in your source code, and linking the library during the compilation process. Be aware of the differences between static and dynamic libraries, and choose the right approach to suit your needs.", + "links": [] + }, + "5mNqH_AEiLxUmgurNW1Fq": { + "title": "Library Inclusion", + "description": "In C++ programming, inclusion refers to incorporating external libraries, header files, or other code files into your program. This process allows developers to access pre-built functions, classes, and variable declarations that can be used in their own code. There are two types of inclusion in C++:\n\n* Header Inclusion\n* Source Inclusion\n\n### Header Inclusion\n\nHeader inclusion involves including header files using the preprocessor directive `#include`. Header files are typically used to provide function prototypes, class declarations, and constant definitions that can be shared across multiple source files. There are two ways to include header files in your program:\n\n* Angle brackets `<>`: Used for including standard library headers, like `iostream`, `vector`, or `algorithm`.\n\nExample:\n\n #include \n #include \n \n\n* Double quotes `\"\"`: Used for including user-defined headers or headers provided by third-party libraries.\n\nExample:\n\n #include \"myHeader.h\"\n #include \"thirdPartyLibrary.h\"\n \n\n### Source Inclusion\n\nSource inclusion refers to including the content of a source file directly in another source file. This approach is generally not recommended as it can lead to multiple definitions and increased compile times but it can occasionally be useful for certain tasks (e.g., templates or simple small programs). To include a source file, you can use the `#include` directive with double quotes, just like with header files:\n\nExample:\n\n #include \"mySourceFile.cpp\"\n \n\nRemember, using source inclusion for large projects or in situations where it's not necessary can lead to unexpected issues and should be avoided.", + "links": [] + }, + "sLVs95EOeHZldoKY0L_dH": { + "title": "Licensing", + "description": "Licensing is a crucial aspect of working with libraries in C++ because it determines the rights and limitations on how you can use, modify, and distribute a given library. There are various types of licenses applied to open-source libraries. Below is a brief overview of three common licenses:\n\nMIT License\n-----------\n\nThe MIT License is a permissive license that allows users to do whatever they want with the software code. They only need to include the original copyright, license notice, and a disclaimer of warranty in their copies.\n\nExample: Including the MIT License into your project can be done by simply adding the license file and a notice at the top of your source code files like:\n\n /* Copyright (C) [year] [author]\n * SPDX-License-Identifier: MIT\n */\n \n\nGNU General Public License (GPL)\n--------------------------------\n\nThe GPL is a copyleft license that grants users the rights to use, study, share, and modify the software code. However, any changes made to the code or any software that uses GPL licensed code must also be distributed under the GPL license.\n\nExample: To include a GPL license in your project, include a `COPYING` file with the full text of the license and place a notice in your source code files like:\n\n /* Copyright (C) [year] [author]\n * SPDX-License-Identifier: GPL-3.0-or-later\n */\n \n\nApache License 2.0\n------------------\n\nThe Apache License is a permissive license similar to the MIT license and allows users to do virtually anything with the software code. The primary difference is that it requires that any changes to the code are documented, and it provides specific terms for patent protection.\n\nExample: To include the Apache License in your project, add a `LICENSE` file with the full text of the license. Add a notice to your source code files like:\n\n /* Copyright (C) [year] [author]\n * SPDX-License-Identifier: Apache-2.0\n */\n \n\nPlease note that these are brief summaries of the licenses, and there are many other licenses available for use in software projects. When using third-party libraries, it is crucial to understand and adhere to the terms of their respective licenses to avoid legal complications.", + "links": [] + }, + "1d7h5P1Q0RVHryKPVogQy": { + "title": "Boost", + "description": "", + "links": [] + }, + "Eq3TKSFJ2F2mrTHAaU2J4": { + "title": "OpenCV", + "description": "", + "links": [] + }, + "nOkniNXfXwPPlOEJHJoGl": { + "title": "POCO", + "description": "", + "links": [] + }, + "jpMCIWQko7p3ndezYHL4D": { + "title": "protobuf", + "description": "", + "links": [] + }, + "621J9W4xCofumNZGo4TZT": { + "title": "gRPC", + "description": "", + "links": [] + }, + "j_eNHhs0J08Dt7HVbo4Q2": { + "title": "Tensorflow", + "description": "", + "links": [] + }, + "tEkvlJPAkD5fji-MMODL7": { + "title": "pybind11", + "description": "", + "links": [] + }, + "q64qFxoCrR38RPsN2lC8x": { + "title": "spdlog", + "description": "", + "links": [] + }, + "GGZJaYpRENaqloJzt0VtY": { + "title": "opencl", + "description": "", + "links": [] + }, + "1CqQgmHDeo1HlPdpUJS7H": { + "title": "fmt", + "description": "", + "links": [] + }, + "et-dXKPYuyVW6eV2K3CM8": { + "title": "ranges_v3", + "description": "", + "links": [] + }, + "MrAM-viRaF8DSxB6sVdD9": { + "title": "gtest / gmock", + "description": "", + "links": [] + }, + "gAZ9Dqgj1_UkaLzVgzx1t": { + "title": "Qt", + "description": "", + "links": [] + }, + "s13jQuaC6gw0Lab3Cbyy6": { + "title": "Catch2", + "description": "", + "links": [] + }, + "O0lVEMTAV1pq9sYCKQvh_": { + "title": "Orbit Profiler", + "description": "", + "links": [] + }, + "88pr5aN7cctZfDVVo-2ns": { + "title": "PyTorch C++", + "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 a4f20fe88..88a8b5017 100644 --- a/public/roadmap-content/cyber-security.json +++ b/public/roadmap-content/cyber-security.json @@ -3993,7 +3993,7 @@ "type": "article" }, { - "title": "What is password praying?", + "title": "What is password spraying?", "url": "https://www.techtarget.com/whatis/definition/password-spraying", "type": "article" }, diff --git a/public/roadmap-content/devops.json b/public/roadmap-content/devops.json index 9fbc98d9c..9ba787c26 100644 --- a/public/roadmap-content/devops.json +++ b/public/roadmap-content/devops.json @@ -204,11 +204,6 @@ "url": "https://en.wikipedia.org/wiki/Operating_system", "type": "article" }, - { - "title": "All you need to know about OS.", - "url": "https://www.javatpoint.com/operating-system", - "type": "article" - }, { "title": "Learn Operating Systems", "url": "https://www.tutorialspoint.com/operating_system/os_overview.htm", @@ -532,11 +527,6 @@ "url": "https://www.learnshell.org/en/Welcome", "type": "article" }, - { - "title": "Bash Scripting Tutorial", - "url": "https://www.javatpoint.com/bash", - "type": "article" - }, { "title": "Explore top posts about Bash", "url": "https://app.daily.dev/tags/bash?ref=roadmapsh", diff --git a/public/roadmap-content/engineering-manager.json b/public/roadmap-content/engineering-manager.json index f60ab2be4..16bb44f71 100644 --- a/public/roadmap-content/engineering-manager.json +++ b/public/roadmap-content/engineering-manager.json @@ -7,6 +7,11 @@ "title": "Engineering Management Resources", "url": "https://github.com/engineering-management/awesome-engineering-management", "type": "article" + }, + { + "title": "Software Engineering at Google: The Engineering Manager", + "url": "https://abseil.io/resources/swe-book/html/ch05.html#the_engineering_manager", + "type": "article" } ] }, @@ -223,8 +228,14 @@ }, "n9gvPHn4c1U-l6v-W9v6r": { "title": "Agile methodologies", - "description": "An Engineering Manager ensures smooth implementation of Agile methodologies within the team. The manager oversees sprint planning, backlog refinement, and retrospectives for consistent development flow. They have the key role in facilitating communication, fostering a high-performing environment, and encouraging adaptive planning.\n\nThe Engineering Manager faces the challenge of maintaining an Agile mindset even when facing pressures to deliver. They have to ensure team members are motivated, engaged, and productive. This can be handled by adopting feedback-friendly culture and regular knowledge-sharing sessions.\n\nSkills required for an Engineering Manager in handling Agile methodologies include strong leadership, excellent communication, and proficiency in risk management. The manager has to balance the opposing needs of flexibility and stability, always keeping customer satisfaction in perspective.", - "links": [] + "description": "An Engineering Manager ensures smooth implementation of Agile methodologies within the team. The manager oversees sprint planning, backlog refinement, and retrospectives for consistent development flow. They have the key role in facilitating communication, fostering a high-performing environment, and encouraging adaptive planning.\n\nThe Engineering Manager faces the challenge of maintaining an Agile mindset even when facing pressures to deliver. They have to ensure team members are motivated, engaged, and productive. This can be handled by adopting feedback-friendly culture and regular knowledge-sharing sessions.\n\nSkills required for an Engineering Manager in handling Agile methodologies include strong leadership, excellent communication, and proficiency in risk management. The manager has to balance the opposing needs of flexibility and stability, always keeping customer satisfaction in perspective.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Scrum Guide", + "url": "https://scrumguides.org/", + "type": "article" + } + ] }, "SuT6q5lMMSyVkadlQp7iU": { "title": "Project Tracking", diff --git a/public/roadmap-content/full-stack.json b/public/roadmap-content/full-stack.json index c4bc35723..bdef38e30 100644 --- a/public/roadmap-content/full-stack.json +++ b/public/roadmap-content/full-stack.json @@ -504,7 +504,7 @@ }, "cUOfvOlQ_0Uu1VX3i67kJ": { "title": "Basic AWS Services", - "description": "AWS has several services but you don't need to know all of them. Some common ones that you can start with are EC2, VPN, S3, Route 53, and SES.\n\nHere are some of the resources to get you started:", + "description": "AWS has several services but you don't need to know all of them. Some common ones that you can start with are EC2, VPC, S3, Route 53, and SES.\n\nHere are some of the resources to get you started:", "links": [ { "title": "Up and Running with AWS VPC", diff --git a/public/roadmap-content/game-developer.json b/public/roadmap-content/game-developer.json index 8cdd68588..ef33ac517 100644 --- a/public/roadmap-content/game-developer.json +++ b/public/roadmap-content/game-developer.json @@ -1407,8 +1407,19 @@ }, "sC3omOmL2DOyTSvET5cDa": { "title": "Infinite", - "description": "", - "links": [] + "description": "Infinite refers to concept that deals with rendering scenes or objects that extend beyond the visible boundaries of the screen. This is crucial for creating immersive environments, as it allows developers to simulate vast landscapes or endless spaces without the need to render every detail at once. Techniques such as level of detail (LOD), culling, and procedural generation are often employed to manage performance while maintaining the illusion of infinity.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Unlocking Infinite Worlds In Gaming", + "url": "https://sdlccorp.com/post/procedural-generation-unlocking-infinite-worlds-in-gaming/", + "type": "article" + }, + { + "title": "Creating Infinite Game Worlds", + "url": "https://medium.com/@lemapp09/beginning-game-development-creating-infinite-game-worlds-56f8a2ad5ae5", + "type": "article" + } + ] }, "OcxesFnB5wO6VXrHYnhz-": { "title": "Visibility and Occlusion", diff --git a/public/roadmap-content/java.json b/public/roadmap-content/java.json index 9f7469de7..a211d69e2 100644 --- a/public/roadmap-content/java.json +++ b/public/roadmap-content/java.json @@ -89,11 +89,6 @@ "title": "What are Data Types & Variables?", "url": "https://jenkov.com/tutorials/java/data-types.html", "type": "article" - }, - { - "title": "Java Variables", - "url": "https://www.javatpoint.com/java-variables", - "type": "article" } ] }, @@ -106,11 +101,6 @@ "url": "https://www.educative.io/answers/what-are-conditional-statements-in-programming", "type": "article" }, - { - "title": "Conditionals in Java", - "url": "https://www.javatpoint.com/java-if-else", - "type": "article" - }, { "title": "Conditionals and Loops in Java", "url": "https://youtu.be/ldYLYRNaucM", @@ -143,11 +133,6 @@ "title": "Loops", "description": "In Java and other programming languages, loops are used to iterate a part of the program several times. There are four types of loops in Java, `for`, `forEach`, `while`, and `do...while`.\n\n* Syntax of `for` loop is `for(initialization;condition;increment/decrement){}`\n* Syntax of `forEach` loop is `for(data_type variable:array_name){}`\n\nVisit the following resources to learn more:", "links": [ - { - "title": "What are loops in Java?", - "url": "https://www.javatpoint.com/java-for-loop", - "type": "article" - }, { "title": "Loops in Java.", "url": "https://www.programiz.com/java-programming/for-loop", @@ -495,11 +480,6 @@ "title": "Packages in Java", "url": "https://docs.oracle.com/javase/8/docs/api/java/lang/Package.html", "type": "article" - }, - { - "title": "Java Package", - "url": "https://www.javatpoint.com/package", - "type": "article" } ] }, @@ -704,11 +684,6 @@ "url": "https://www.tutorialspoint.com/java/java_generics.htm", "type": "article" }, - { - "title": "Generics in Java", - "url": "https://www.javatpoint.com/generics-in-java", - "type": "article" - }, { "title": "Generics in Java", "url": "https://www.youtube.com/watch?v=XMvznsY02Mk", @@ -738,7 +713,7 @@ "links": [ { "title": "Exception Handling in Java", - "url": "https://www.javatpoint.com/exception-handling-in-java", + "url": "https://www.tpointtech.com/exception-handling-in-java", "type": "article" }, { @@ -876,11 +851,6 @@ "url": "https://gradle.org/", "type": "article" }, - { - "title": "Gradle", - "url": "https://www.javatpoint.com/gradle", - "type": "article" - }, { "title": "Building Spring Boot Projects with Gradle", "url": "https://www.baeldung.com/spring-boot-gradle-plugin", @@ -960,11 +930,6 @@ "url": "https://www.marcobehler.com/guides/java-files", "type": "article" }, - { - "title": "Java File Class", - "url": "https://www.javatpoint.com/java-file-class", - "type": "article" - }, { "title": "(old) Java HttpURLConnection Example - Java HTTP Request GET, POST", "url": "https://www.digitalocean.com/community/tutorials/java-httpurlconnection-example-java-http-request-get-post", @@ -1151,11 +1116,6 @@ "title": "Stream API", "description": "Java provides a new additional package in Java 8 called java.util.stream. This package consists of classes, interfaces and enum to allows functional-style operations on the elements. You can use stream by importing java.util.stream package.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "Java 8 Stream", - "url": "https://www.javatpoint.com/java-8-stream", - "type": "article" - }, { "title": "The Java 8 Stream API Tutorial", "url": "https://www.baeldung.com/java-8-streams", @@ -1245,11 +1205,6 @@ "url": "https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa", "type": "article" }, - { - "title": "Spring Data JPA Tutorial", - "url": "https://www.javatpoint.com/spring-and-jpa-integration", - "type": "article" - }, { "title": "Explore top posts about Spring Framework", "url": "https://app.daily.dev/tags/spring?ref=roadmapsh", @@ -1276,11 +1231,6 @@ "url": "https://hibernate.org/", "type": "article" }, - { - "title": "Hibernate Tutorial", - "url": "https://www.javatpoint.com/hibernate-tutorial", - "type": "article" - }, { "title": "Second-level caching explained", "url": "https://hazelcast.com/glossary/hibernate-second-level-cache/", @@ -1318,11 +1268,6 @@ "url": "https://www.baeldung.com/java-logging-intro", "type": "article" }, - { - "title": "Java Logger", - "url": "https://www.javatpoint.com/java-logger", - "type": "article" - }, { "title": "Java Logging Frameworks", "url": "https://en.wikipedia.org/wiki/Java_logging_framework", diff --git a/public/roadmap-content/javascript.json b/public/roadmap-content/javascript.json index b7a64c96d..945640acf 100644 --- a/public/roadmap-content/javascript.json +++ b/public/roadmap-content/javascript.json @@ -1568,7 +1568,7 @@ }, "s8wUJivWmetysJ8bt9FBC": { "title": "Built-in Functions", - "description": "* A JavaScript **method** is a property containing a **function definition** . In other words, when the data stored on an object is a function we call that a method.\n* To differentiate between properties and methods, we can think of it this way: **A property is what an object has, while a method is what an object does.**\n* Since JavaScript methods are actions that can be performed on objects, we first need to have objects to start with. There are several objects built into JavaScript which we can use.\n\nVisit the following resources to learn more:", + "description": "JavaScript offers a variety of built-in functions that simplify common tasks, available globally or within specific objects without requiring explicit definition. Functions like parseInt(), setTimeout(), and Math.random() can be used directly, while objects like Array, String, and Date include built-in methods for efficient data manipulation. Understanding these functions enhances development by leveraging JavaScript’s core features without reinventing the wheel.\n\nVisit the following resources to learn more:", "links": [ { "title": "JavaScript Built-in Functions", diff --git a/public/roadmap-content/mlops.json b/public/roadmap-content/mlops.json index 58a0f0035..bd6edcd49 100644 --- a/public/roadmap-content/mlops.json +++ b/public/roadmap-content/mlops.json @@ -9,12 +9,12 @@ "description": "Python is an interpreted high-level general-purpose programming language. Its design philosophy emphasizes code readability with its significant use of indentation. Its language constructs as well as its object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects. Python is dynamically-typed and garbage-collected. It supports multiple programming paradigms, including structured (particularly, procedural), object-oriented and functional programming. Python is often described as a \"batteries included\" language due to its comprehensive standard library.\n\nLearn more from the following resources:", "links": [ { - "title": "Python Roadmap", + "title": "Visit Dedicated Python Roadmap", "url": "https://roadmap.sh/python", "type": "article" }, { - "title": "Python.org", + "title": "Python", "url": "https://www.python.org/", "type": "article" }, @@ -37,7 +37,7 @@ }, "vdVq3RQvQF3mF8PQc6DMg": { "title": "Go", - "description": "Go, also known as Golang, is an open-source programming language developed by Google that emphasizes simplicity, efficiency, and strong concurrency support. Designed for modern software development, Go features a clean syntax, garbage collection, and built-in support for concurrent programming through goroutines and channels, making it well-suited for building scalable, high-performance applications, especially in cloud computing and microservices architectures. Go's robust standard library and tooling ecosystem, including a powerful package manager and testing framework, further streamline development processes, promoting rapid application development and deployment. Visit the following resources to learn more:", + "description": "Go, also known as Golang, is an open-source programming language developed by Google that emphasizes simplicity, efficiency, and strong concurrency support. Designed for modern software development, Go features a clean syntax, garbage collection, and built-in support for concurrent programming through goroutines and channels, making it well-suited for building scalable, high-performance applications, especially in cloud computing and microservices architectures. Go's robust standard library and tooling ecosystem, including a powerful package manager and testing framework, further streamline development processes, promoting rapid application development and deployment.\n\nVisit the following resources to learn more:", "links": [ { "title": "Visit Dedicated Go Roadmap", @@ -85,6 +85,11 @@ "url": "https://github.com/Idnan/bash-guide", "type": "opensource" }, + { + "title": "Bash Reference Manual", + "url": "https://www.gnu.org/software/bash/manual/bashref.html", + "type": "article" + }, { "title": "Bash Scripting Course", "url": "https://www.youtube.com/watch?v=tK9Oc6AEnR4", @@ -105,6 +110,11 @@ "title": "What is Version Control?", "url": "https://www.atlassian.com/git/tutorials/what-is-version-control", "type": "article" + }, + { + "title": "Explore top posts about Version Control", + "url": "https://app.daily.dev/tags/version-control?ref=roadmapsh", + "type": "article" } ] }, @@ -113,7 +123,7 @@ "description": "Git is a distributed version control system used to track changes in source code during software development. It enables multiple developers to collaborate on a project by managing versions of code, allowing for branching, merging, and tracking of revisions. Git ensures that changes are recorded with a complete history, enabling rollback to previous versions if necessary. It supports distributed workflows, meaning each developer has a complete local copy of the project’s history, facilitating seamless collaboration, conflict resolution, and efficient management of code across different teams or environments.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Learn Git & GitHub", + "title": "Visit Dedicated Git & GitHub Roadmap", "url": "https://roadmap.sh/git-github", "type": "article" }, @@ -144,12 +154,12 @@ "description": "GitHub is a web-based platform built on top of Git that provides version control, collaboration tools, and project management features for software development. It enables developers to host Git repositories, collaborate on code through pull requests, and review and track changes. GitHub also offers additional features like issue tracking, continuous integration, automated workflows, and documentation hosting. With its social coding environment, GitHub fosters open-source contributions and team collaboration, making it a central hub for many software development projects.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Learn Git & GitHub", + "title": "Visit Dedicated Git & GitHub Roadmap", "url": "https://roadmap.sh/git-github", "type": "article" }, { - "title": "GitHub Website", + "title": "GitHub", "url": "https://github.com", "type": "article" }, @@ -175,12 +185,17 @@ "description": "**Cloud Computing** refers to the delivery of computing services over the internet rather than using local servers or personal devices. These services include servers, storage, databases, networking, software, analytics, and intelligence. Cloud Computing enables faster innovation, flexible resources, and economies of scale. There are various types of cloud computing such as public clouds, private clouds, and hybrids clouds. Furthermore, it's divided into different services like Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS). These services differ mainly in the level of control an organization has over their data and infrastructures.\n\nLearn more from the following resources:", "links": [ { - "title": "What is cloud computing?", + "title": "Cloud Computing - IBM", + "url": "https://www.ibm.com/think/topics/cloud-computing", + "type": "article" + }, + { + "title": "What is Cloud Computing? - Azure", "url": "https://azure.microsoft.com/en-gb/resources/cloud-computing-dictionary/what-is-cloud-computing", "type": "article" }, { - "title": "What is Cloud Computing? | Amazon Web Services", + "title": "What is Cloud Computing? - Amazon Web Services", "url": "https://www.youtube.com/watch?v=mxT233EdY5c", "type": "video" } @@ -188,18 +203,23 @@ }, "u3E7FGW4Iwdsu61KYFxCX": { "title": "AWS / Azure / GCP", - "description": "AWS (Amazon Web Services) Azure and GCP (Google Cloud Platform) are three leading providers of cloud computing services. AWS by Amazon is the oldest and the most established among the three, providing a breadth and depth of solutions ranging from infrastructure services like compute, storage, and databases to the machine and deep learning. Azure, by Microsoft, has integrated tools for DevOps, supports a large number of programming languages, and offers seamless integration with on-prem servers and Microsoft’s software. Google's GCP has strength in cost-effectiveness, live migration of virtual machines, and flexible computing options. All three have introduced various MLOps tools and services to boost capabilities for machine learning development and operations.\n\nVisit the following resources to learn more about AWS, Azure, and GCP:", + "description": "AWS (Amazon Web Services), Azure and GCP (Google Cloud Platform) are three leading providers of cloud computing services. AWS by Amazon is the oldest and the most established among the three, providing a breadth and depth of solutions ranging from infrastructure services like compute, storage, and databases to the machine and deep learning. Azure, by Microsoft, has integrated tools for DevOps, supports a large number of programming languages, and offers seamless integration with on-prem servers and Microsoft’s software. Google's GCP has strength in cost-effectiveness, live migration of virtual machines, and flexible computing options. All three have introduced various MLOps tools and services to boost capabilities for machine learning development and operations.\n\nVisit the following resources to learn more about AWS, Azure, and GCP:", "links": [ { - "title": "AWS Roadmap", + "title": "Visit Dedicated AWS Roadmap", "url": "https://roadmap.sh/aws", "type": "article" }, { - "title": "Azure Tutorials", + "title": "Microsoft Azure", "url": "https://docs.microsoft.com/en-us/learn/azure/", "type": "article" }, + { + "title": "Google Cloud Platform", + "url": "https://cloud.google.com/", + "type": "article" + }, { "title": "GCP Learning Resources", "url": "https://cloud.google.com/training", @@ -238,12 +258,12 @@ "description": "Containers are a construct in which cgroups, namespaces, and chroot are used to fully encapsulate and isolate a process. This encapsulated process, called a container image, shares the kernel of the host with other containers, allowing containers to be significantly smaller and faster than virtual machines.\n\nThese images are designed for portability, allowing for full local testing of a static image, and easy deployment to a container management platform.\n\nVisit the following resources to learn more:", "links": [ { - "title": "What are Containers?", + "title": "What are Containers? - Google Cloud", "url": "https://cloud.google.com/learn/what-are-containers", "type": "article" }, { - "title": "What is a Container?", + "title": "What is a Container? - Docker", "url": "https://www.docker.com/resources/what-container/", "type": "article" }, @@ -268,6 +288,11 @@ "title": "Docker", "description": "Docker is a platform for working with containerized applications. Among its features are a daemon and client for managing and interacting with containers, registries for storing images, and a desktop application to package all these features together.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Visit Dedicated Docker Roadmap", + "url": "https://roadmap.sh/docker", + "type": "article" + }, { "title": "Docker Documentation", "url": "https://docs.docker.com/", @@ -284,7 +309,7 @@ "type": "video" }, { - "title": "Docker simplified in 55 seconds", + "title": "Docker Simplified in 55 Seconds", "url": "https://youtu.be/vP_4DlOH1G4", "type": "video" } @@ -295,12 +320,12 @@ "description": "Kubernetes is an open source container management platform, and the dominant product in this space. Using Kubernetes, teams can deploy images across multiple underlying hosts, defining their desired availability, deployment logic, and scaling logic in YAML. Kubernetes evolved from Borg, an internal Google platform used to provision and allocate compute resources (similar to the Autopilot and Aquaman systems of Microsoft Azure). The popularity of Kubernetes has made it an increasingly important skill for the DevOps Engineer and has triggered the creation of Platform teams across the industry. These Platform engineering teams often exist with the sole purpose of making Kubernetes approachable and usable for their product development colleagues.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Kubernetes Roadmap", + "title": "Visit Dedicated Kubernetes Roadmap", "url": "https://roadmap.sh/kubernetes", "type": "article" }, { - "title": "Kubernetes Website", + "title": "Kubernetes", "url": "https://kubernetes.io/", "type": "article" }, @@ -328,7 +353,7 @@ }, "ulka7VEVjz6ls5SnI6a6z": { "title": "Machine Learning Fundamentals", - "description": "Machine learning fundamentals encompass the key concepts and techniques that enable systems to learn from data and make predictions or decisions without being explicitly programmed. At its core, machine learning involves algorithms that can identify patterns in data and improve over time with experience. Key areas include supervised learning (where models are trained on labeled data), unsupervised learning (where models identify patterns in unlabeled data), and reinforcement learning (where agents learn to make decisions based on feedback from their actions). Essential components also include data preprocessing, feature selection, model training, evaluation metrics, and the importance of avoiding overfitting. Understanding these fundamentals is crucial for developing effective machine learning applications across various domains. Learn more from the following resources:", + "description": "Machine learning fundamentals encompass the key concepts and techniques that enable systems to learn from data and make predictions or decisions without being explicitly programmed. At its core, machine learning involves algorithms that can identify patterns in data and improve over time with experience. Key areas include supervised learning (where models are trained on labeled data), unsupervised learning (where models identify patterns in unlabeled data), and reinforcement learning (where agents learn to make decisions based on feedback from their actions). Essential components also include data preprocessing, feature selection, model training, evaluation metrics, and the importance of avoiding overfitting. Understanding these fundamentals is crucial for developing effective machine learning applications across various domains.\n\nLearn more from the following resources:", "links": [ { "title": "Fundamentals of Machine Learning - Microsoft", @@ -368,12 +393,12 @@ "description": "Data pipelines are a series of automated processes that transport and transform data from various sources to a destination for analysis or storage. They typically involve steps like data extraction, cleaning, transformation, and loading (ETL) into databases, data lakes, or warehouses. Pipelines can handle batch or real-time data, ensuring that large-scale datasets are processed efficiently and consistently. They play a crucial role in ensuring data integrity and enabling businesses to derive insights from raw data for reporting, analytics, or machine learning.\n\nLearn more from the following resources:", "links": [ { - "title": "What is a data pipeline?", + "title": "What is a Data Pipeline? - IBM", "url": "https://www.ibm.com/topics/data-pipeline", "type": "article" }, { - "title": "What are data pipelines?", + "title": "What are Data Pipelines?", "url": "https://www.youtube.com/watch?v=oKixNpz6jNo", "type": "video" } @@ -381,20 +406,20 @@ }, "wOogVDV4FIDLXVPwFqJ8C": { "title": "Data Lakes & Warehouses", - "description": "\"**Data Lakes** are large-scale data repository systems that store raw, untransformed data, in various formats, from multiple sources. They're often used for big data and real-time analytics requirements. Data lakes preserve the original data format and schema which can be modified as necessary. On the other hand, **Data Warehouses** are data storage systems which are designed for analyzing, reporting and integrating with transactional systems. The data in a warehouse is clean, consistent, and often transformed to meet wide-range of business requirements. Hence, data warehouses provide structured data but require more processing and management compared to data lakes.\"\n\nLearn more from the following resources:", + "description": "**Data Lakes** are large-scale data repository systems that store raw, untransformed data, in various formats, from multiple sources. They're often used for big data and real-time analytics requirements. Data lakes preserve the original data format and schema which can be modified as necessary. On the other hand, **Data Warehouses** are data storage systems which are designed for analyzing, reporting and integrating with transactional systems. The data in a warehouse is clean, consistent, and often transformed to meet wide-range of business requirements. Hence, data warehouses provide structured data but require more processing and management compared to data lakes.\n\nLearn more from the following resources:", "links": [ { - "title": "Data lake definition", + "title": "Data Lake Definition", "url": "https://azure.microsoft.com/en-gb/resources/cloud-computing-dictionary/what-is-a-data-lake", "type": "article" }, { - "title": "What is a data lake?", + "title": "What is a Data Lake?", "url": "https://www.youtube.com/watch?v=LxcH6z8TFpI", "type": "video" }, { - "title": "@hat is a data warehouse?", + "title": "@hat is a Data Warehouse?", "url": "https://www.youtube.com/watch?v=k4tK2ttdSDg", "type": "video" } @@ -421,10 +446,15 @@ "description": "Airflow is a platform to programmatically author, schedule and monitor workflows. Use airflow to author workflows as directed acyclic graphs (DAGs) of tasks. The airflow scheduler executes your tasks on an array of workers while following the specified dependencies. Rich command line utilities make performing complex surgeries on DAGs a snap. The rich user interface makes it easy to visualize pipelines running in production, monitor progress, and troubleshoot issues when needed. When workflows are defined as code, they become more maintainable, versionable, testable, and collaborative.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Airflow website", + "title": "Airflow", "url": "https://airflow.apache.org/", "type": "article" }, + { + "title": "Airflow Documentation", + "url": "https://airflow.apache.org/docs", + "type": "article" + }, { "title": "Explore top posts about Apache Airflow", "url": "https://app.daily.dev/tags/apache-airflow?ref=roadmapsh", @@ -458,7 +488,7 @@ "description": "Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Apache Kafka quickstart", + "title": "Apache Kafka Quickstart", "url": "https://kafka.apache.org/quickstart", "type": "article" }, @@ -484,26 +514,43 @@ "type": "article" }, { - "title": "Explore top posts about Apache Flink", - "url": "https://app.daily.dev/tags/apache-flink?ref=roadmapsh", + "title": "Apache Flink", + "url": "https://www.tutorialspoint.com/apache_flink/apache_flink_introduction.htm", "type": "article" }, { - "title": "Apache Flink Tutorialpoint", - "url": "https://www.tutorialspoint.com/apache_flink/apache_flink_introduction.htm", + "title": "Explore top posts about Apache Flink", + "url": "https://app.daily.dev/tags/apache-flink?ref=roadmapsh", "type": "article" } ] }, "iTsEHVCo6KGq7H2HMgy5S": { "title": "MLOps Principles", - "description": "MLOps (Machine Learning Operations) principles focus on streamlining the deployment, monitoring, and management of machine learning models in production environments. Key principles include:\n\n1. **Collaboration**: Foster collaboration between data scientists, developers, and operations teams to ensure alignment on model goals, performance, and lifecycle management.\n \n2. **Automation**: Automate workflows for model training, testing, deployment, and monitoring to enhance efficiency, reduce errors, and speed up the development lifecycle.\n \n3. **Version Control**: Implement version control for both code and data to track changes, reproduce experiments, and maintain model lineage.\n \n4. **Continuous Integration and Deployment (CI/CD)**: Establish CI/CD pipelines tailored for machine learning to facilitate rapid model iteration and deployment.\n \n5. **Monitoring and Governance**: Continuously monitor model performance and data drift in production to ensure models remain effective and compliant with regulatory requirements.\n \n6. **Scalability**: Design systems that can scale to handle varying workloads and accommodate changes in data volume and complexity.\n \n7. **Reproducibility**: Ensure that experiments can be reliably reproduced by standardizing environments and workflows, making it easier to validate and iterate on models.\n \n\nThese principles help organizations efficiently manage the lifecycle of machine learning models, from development to deployment and beyond.", - "links": [] + "description": "MLOps (Machine Learning Operations) principles focus on streamlining the deployment, monitoring, and management of machine learning models in production environments. Key principles include:\n\n1. **Collaboration**: Foster collaboration between data scientists, developers, and operations teams to ensure alignment on model goals, performance, and lifecycle management.\n \n2. **Automation**: Automate workflows for model training, testing, deployment, and monitoring to enhance efficiency, reduce errors, and speed up the development lifecycle.\n \n3. **Version Control**: Implement version control for both code and data to track changes, reproduce experiments, and maintain model lineage.\n \n4. **Continuous Integration and Deployment (CI/CD)**: Establish CI/CD pipelines tailored for machine learning to facilitate rapid model iteration and deployment.\n \n5. **Monitoring and Governance**: Continuously monitor model performance and data drift in production to ensure models remain effective and compliant with regulatory requirements.\n \n6. **Scalability**: Design systems that can scale to handle varying workloads and accommodate changes in data volume and complexity.\n \n7. **Reproducibility**: Ensure that experiments can be reliably reproduced by standardizing environments and workflows, making it easier to validate and iterate on models.\n \n\nThese principles help organizations efficiently manage the lifecycle of machine learning models, from development to deployment and beyond.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "MLOps Principles", + "url": "https://ml-ops.org/content/mlops-principles", + "type": "article" + } + ] }, "l1xasxQy2vAY34NWaqKEe": { "title": "MLOps Components", - "description": "MLOps components can be broadly classified into three major categories: Development, Operations and Governance. The **Development** components include everything involved in the creation of machine learning models, such as data extraction, data analysis, feature engineering, and machine learning model training. The **Operations** category includes components involved in deploying, monitoring, and maintaining machine learning models in production. This may include release management, model serving, and performance monitoring. Lastly, the **Governance** category encompasses the policies and regulations related to machine learning models. This includes model audit and tracking, model explainability, and security & compliance regulations.", - "links": [] + "description": "MLOps components can be broadly classified into three major categories: Development, Operations and Governance. The **Development** components include everything involved in the creation of machine learning models, such as data extraction, data analysis, feature engineering, and machine learning model training. The **Operations** category includes components involved in deploying, monitoring, and maintaining machine learning models in production. This may include release management, model serving, and performance monitoring. Lastly, the **Governance** category encompasses the policies and regulations related to machine learning models. This includes model audit and tracking, model explainability, and security & compliance regulations.\n\nLearn more from the following resources:", + "links": [ + { + "title": "MLOps Workflow, Components, and Key Practices", + "url": "https://mlops.tv/p/understanding-ml-pipelines-through", + "type": "article" + }, + { + "title": "MLOps Lifecycle", + "url": "https://www.moontechnolabs.com/blog/mlops-lifecycle/", + "type": "article" + } + ] }, "kHDSwlSq8WkLey4EJIQSR": { "title": "Version Control", @@ -514,6 +561,11 @@ "url": "https://git-scm.com/", "type": "article" }, + { + "title": "Git Documentation", + "url": "https://git-scm.com/docs", + "type": "article" + }, { "title": "What is Version Control?", "url": "https://www.atlassian.com/git/tutorials/what-is-version-control", @@ -531,7 +583,12 @@ "description": "CI/CD (Continuous Integration and Continuous Deployment/Delivery) is a software development practice that automates the process of integrating code changes, running tests, and deploying updates. Continuous Integration focuses on regularly merging code changes into a shared repository, followed by automated testing to ensure code quality. Continuous Deployment extends this by automatically releasing every validated change to production, while Continuous Delivery ensures code is always in a deployable state, but requires manual approval for production releases. CI/CD pipelines improve code reliability, reduce integration risks, and speed up the development lifecycle.\n\nLearn more from the following resources:", "links": [ { - "title": "What is CI/CD?", + "title": "What is CI/CD? - Gitlab", + "url": "https://about.gitlab.com/topics/ci-cd/", + "type": "article" + }, + { + "title": "What is CI/CD? - Redhat", "url": "https://www.redhat.com/en/topics/devops/what-is-ci-cd", "type": "article" }, @@ -579,7 +636,7 @@ "type": "article" }, { - "title": "What is a feature store", + "title": "What is a Feature Store", "url": "https://www.snowflake.com/guides/what-feature-store-machine-learning/", "type": "article" } @@ -587,8 +644,29 @@ }, "zsW1NRb0dMgS-KzWsI0QU": { "title": "Model Training & Serving", - "description": "\"Model Training\" refers to the phase in the Machine Learning (ML) pipeline where we teach a machine learning model how to make predictions by providing it with data. This process begins with feeding the model a training dataset, which it uses to learn and understand patterns or perform computations. The model's performance is then evaluated by comparing its prediction outputs with the actual results. Various algorithms can be used in the model training process. The choice of algorithm usually depends on the task, the data available, and the requirements of the project. It is worth noting that the model training stage can be computationally expensive particularly when dealing with large datasets or complex models.\n\nDecisions depend on the organization's infrastructure.\n\n* **Repository Suggestion:** [ML Deployment k8s Fast API](https://github.com/sayakpaul/ml-deployment-k8s-fastapi/tree/main)\n* **Tutorial Suggestions:** [ML deployment with k8s FastAPI, Building an ML app with FastAPI](https://dev.to/bravinsimiyu/beginner-guide-on-how-to-build-a-machine-learning-app-with-fastapi-part-ii-deploying-the-fastapi-application-to-kubernetes-4j6g), [Basic Kubeflow pipeline](https://towardsdatascience.com/tutorial-basic-kubeflow-pipeline-from-scratch-5f0350dc1905), [Building and deploying ML pipelines](https://www.datacamp.com/tutorial/kubeflow-tutorial-building-and-deploying-machine-learning-pipelines?utm_source=google&utm_medium=paid_search&utm_campaignid=19589720818&utm_adgroupid=157156373991&utm_device=c&utm_keyword=&utm_matchtype=&utm_network=g&utm_adpostion=&utm_creative=683184494153&utm_targetid=dsa-2218886984380&utm_loc_interest_ms=&utm_loc_physical_ms=9064564&utm_content=&utm_campaign=230119_1-sea~dsa~tofu_2-b2c_3-eu_4-prc_5-na_6-na_7-le_8-pdsh-go_9-na_10-na_11-na-dec23&gad_source=1&gclid=Cj0KCQiA4Y-sBhC6ARIsAGXF1g7iSih9h2RGL27LwWY6dlPLhEss-e5Af8pnaBvdDynRh7IHIKi8sGgaApD-EALw_wcB), [KServe tutorial](https://towardsdatascience.com/kserve-highly-scalable-machine-learning-deployment-with-kubernetes-aa7af0b71202)", - "links": [] + "description": "Model Training refers to the phase in the Machine Learning (ML) pipeline where we teach a machine learning model how to make predictions by providing it with data. This process begins with feeding the model a training dataset, which it uses to learn and understand patterns or perform computations. The model's performance is then evaluated by comparing its prediction outputs with the actual results. Various algorithms can be used in the model training process. The choice of algorithm usually depends on the task, the data available, and the requirements of the project. It is worth noting that the model training stage can be computationally expensive particularly when dealing with large datasets or complex models.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "ML Deployment k8s Fast API", + "url": "https://github.com/sayakpaul/ml-deployment-k8s-fastapi/", + "type": "opensource" + }, + { + "title": "MLOps Principles", + "url": "https://ml-ops.org/content/mlops-principles", + "type": "article" + }, + { + "title": "ML deployment with k8s FastAPI, Building an ML app with FastAPI", + "url": "https://dev.to/bravinsimiyu/beginner-guide-on-how-to-build-a-machine-learning-app-with-fastapi-part-ii-deploying-the-fastapi-application-to-kubernetes-4j6g", + "type": "article" + }, + { + "title": "KServe Tutorial", + "url": "https://towardsdatascience.com/kserve-highly-scalable-machine-learning-deployment-with-kubernetes-aa7af0b71202", + "type": "article" + } + ] }, "r4fbUwD83uYumEO1X8f09": { "title": "Monitoring & Observability", @@ -608,20 +686,25 @@ }, "sf67bSL7HAx6iN7S6MYKs": { "title": "Infrastructure as Code", - "description": "Infrastructure as Code (IaC) is a modern approach to managing and provisioning IT infrastructure through machine-readable configuration files, rather than manual processes. It enables developers and operations teams to define and manage infrastructure resources—such as servers, networks, and databases—using code, which can be versioned, tested, and deployed like application code. IaC tools, like Terraform and AWS CloudFormation, allow for automated, repeatable deployments, reducing human error and increasing consistency across environments. This practice facilitates agile development, enhances collaboration between teams, and supports scalable and efficient infrastructure management.", + "description": "Infrastructure as Code (IaC) is a modern approach to managing and provisioning IT infrastructure through machine-readable configuration files, rather than manual processes. It enables developers and operations teams to define and manage infrastructure resources—such as servers, networks, and databases—using code, which can be versioned, tested, and deployed like application code. IaC tools, like Terraform and AWS CloudFormation, allow for automated, repeatable deployments, reducing human error and increasing consistency across environments. This practice facilitates agile development, enhances collaboration between teams, and supports scalable and efficient infrastructure management.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Visit Dedicated Terraform Roadmap", + "url": "https://roadmap.sh/terraform", + "type": "article" + }, { "title": "What is Infrastructure as Code?", "url": "https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac", "type": "article" }, { - "title": "Terraform course for beginners", + "title": "Terraform Course for Beginners", "url": "https://www.youtube.com/watch?v=SLB_c_ayRMo", "type": "video" }, { - "title": "8 Terraform best practices", + "title": "8 Terraform Best Practices", "url": "https://www.youtube.com/watch?v=gxPykhPxRW0", "type": "video" } diff --git a/public/roadmap-content/nodejs.json b/public/roadmap-content/nodejs.json index cf11d76d7..565e6ba30 100644 --- a/public/roadmap-content/nodejs.json +++ b/public/roadmap-content/nodejs.json @@ -4,12 +4,12 @@ "description": "Node.js is an open source, cross-platform runtime environment and library that is used for running web applications outside the client’s browser.\n\nIt is used for server-side programming, and primarily deployed for non-blocking, event-driven servers, such as traditional web sites and back-end API services, but was originally designed with real-time, push-based architectures in mind. Every browser has its own version of a JS engine, and node.js is built on Google Chrome’s V8 JavaScript engine.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Node.js", "url": "https://nodejs.org/en/", "type": "article" }, { - "title": "Official Documentation", + "title": "Node.js Documentation", "url": "https://nodejs.org/en/docs/", "type": "article" }, @@ -25,7 +25,7 @@ "description": "Node.js is an open-source and cross-platform JavaScript runtime environment. It is a popular tool for almost any kind of project! Node.js runs the V8 JavaScript engine, Google Chrome's core, outside the browser. This allows Node.js to be very performant. A Node.js app runs in a single process, without creating a new thread for every request.\n\nNode.js provides a set of asynchronous I/O primitives in its standard library that prevent JavaScript code from blocking and generally, libraries in Node.js are written using non-blocking paradigms, making blocking behavior the exception rather than the norm.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Node.js", "url": "https://nodejs.org/en/about/", "type": "article" }, @@ -102,7 +102,7 @@ "type": "article" }, { - "title": "Node.js: The Documentary | An origin story", + "title": "Node.js: The Documentary | An Origin Story", "url": "https://youtu.be/LB8KwiiUGy0", "type": "video" } @@ -150,7 +150,7 @@ "type": "article" }, { - "title": "CommonJS vs. ES modules in Node.js", + "title": "CommonJS vs. ES Modules in Node.js", "url": "https://blog.logrocket.com/commonjs-vs-es-modules-node-js/", "type": "article" }, @@ -207,7 +207,7 @@ "description": "ESM (ECMAScript Modules) is a standardized module system in JavaScript that allows for the organized, maintainable, and reusable structuring of code. It uses import and export statements for including and sharing functions, objects, or primitives between files. ESM supports static analysis, enabling better optimization and tooling, and is always in strict mode to reduce common JavaScript issues. Node.js fully supports ESM, which can be used with .mjs file extensions or configured in the package.json for .js files, making it easier to write modular and efficient JavaScript applications.\n\nVisit the following resources to learn more:", "links": [ { - "title": "esm documentation on nodejs org", + "title": "ESM Documentation", "url": "https://nodejs.org/api/esm.html", "type": "article" } @@ -265,23 +265,18 @@ "description": "npm is the standard package manager for Node.js.\n\nIt is two things: first and foremost, it is an online repository for the publishing of open-source Node.js projects; second, it is a command-line utility for interacting with said repository that aids in package installation, version management, and dependency management. A plethora of Node.js libraries and applications are published on npm, and many more are added every day\n\nVisit the following resources to learn more:", "links": [ { - "title": "What is npm?", - "url": "https://nodejs.org/en/learn/getting-started/an-introduction-to-the-npm-package-manager", + "title": "NPM Documentation", + "url": "https://docs.npmjs.com/", "type": "article" }, { - "title": "An introduction to the npm package manager", + "title": "What is npm?", "url": "https://nodejs.org/en/learn/getting-started/an-introduction-to-the-npm-package-manager", "type": "article" }, { - "title": "Official Website", - "url": "https://www.npmjs.com/", - "type": "article" - }, - { - "title": "Official Documentation", - "url": "https://docs.npmjs.com/", + "title": "An introduction to the npm package manager", + "url": "https://nodejs.org/en/learn/getting-started/an-introduction-to-the-npm-package-manager", "type": "article" }, { @@ -342,6 +337,11 @@ "url": "https://docs.npmjs.com/updating-packages-downloaded-from-the-registry", "type": "article" }, + { + "title": "How to Update Npm Packages Safely With Npm Check Updates", + "url": "https://chrispennington.blog/blog/how-to-update-npm-packages-safely-with-npm-check-updates/", + "type": "article" + }, { "title": "How to Update All NPM Dependencies At Once", "url": "https://www.youtube.com/watch?v=Ghdfdq17JAY", @@ -375,7 +375,7 @@ "type": "article" }, { - "title": "Getting Started with Npm Workspaces ", + "title": "Getting Started with Npm Workspaces", "url": "https://ruanmartinelli.com/posts/npm-7-workspaces-1", "type": "article" }, @@ -462,10 +462,10 @@ }, "05YY-AhLKzn4Ypr4eow5E": { "title": "System Errors", - "description": "Node.js generates system errors when exceptions occur within its runtime environment. These usually occur when an application violates an operating system constraint. For example, a system error will occur if an application attempts to read a file that does not exist.\n\nBelow are the system errors commonly encountered when writing a Node.js program\n\n1. EACCES - Permission denied\n2. EADDRINUSE - Address already in use\n3. ECONNRESET - Connection reset by peer\n4. EEXIST - File exists\n5. EISDIR - Is a directory\n6. EMFILE - Too many open files in system\n7. ENOENT - No such file or directory\n8. ENOTDIR - Not a directory\n9. ENOTEMPTY - Directory not empty\n10. ENOTFOUND - DNS lookup failed\n11. EPERM - Operation not permitted\n12. EPIPE - Broken Pipe\n13. ETIMEDOUT - Operation timed out\n\nVisit the following resources to learn more:", + "description": "Node.js generates system errors when exceptions occur within its runtime environment. These usually occur when an application violates an operating system constraint. For example, a system error will occur if an application attempts to read a file that does not exist.\n\nBelow are the system errors commonly encountered when writing a Node.js program:\n\n1. EACCES - Permission denied\n2. EADDRINUSE - Address already in use\n3. ECONNRESET - Connection reset by peer\n4. EEXIST - File exists\n5. EISDIR - Is a directory\n6. EMFILE - Too many open files in system\n7. ENOENT - No such file or directory\n8. ENOTDIR - Not a directory\n9. ENOTEMPTY - Directory not empty\n10. ENOTFOUND - DNS lookup failed\n11. EPERM - Operation not permitted\n12. EPIPE - Broken Pipe\n13. ETIMEDOUT - Operation timed out\n\nVisit the following resources to learn more:", "links": [ { - "title": "Node.js Errors - Official Docs", + "title": "Node.js Errors", "url": "https://nodejs.org/api/errors.html#errors_class_systemerror", "type": "article" }, @@ -556,10 +556,15 @@ "description": "Node.js includes a command-line debugging utility. The Node.js debugger client is not a full-featured debugger, but simple stepping and inspection are possible. To use it, start Node.js with the inspect argument followed by the path to the script to debug.\n\nExample - `$ node inspect myscript.js`\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Docs", + "title": "Debugger", "url": "https://nodejs.org/api/debugger.html", "type": "article" }, + { + "title": "Inspect Docs", + "url": "https://nodejs.org/en/learn/getting-started/debugging", + "type": "article" + }, { "title": "Freecodecamp.org - Debugging", "url": "https://www.freecodecamp.org/news/how-to-debug-node-js-applications/", @@ -572,13 +577,13 @@ "description": "npx is a very powerful command that's been available in npm starting version 5.2, released in July 2017. If you don't want to install npm, you can install npx as a standalone package. npx lets you run code built with Node.js and published through the npm registry, without needing to install the package itself. This is particularly useful for trying out new tools, running one-time commands, or using packages in shared environments where global installations are undesirable. npx takes care of downloading the package on-the-fly, running the desired command, and then cleaning up the temporary installation. This keeps your project's dependencies lean and avoids version conflicts.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Introduction to the npx Node.js Package Runner", - "url": "https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b", + "title": "npx", + "url": "https://docs.npmjs.com/cli/commands/npx/", "type": "article" }, { - "title": "Official Documentation", - "url": "https://docs.npmjs.com/cli/commands/npx/", + "title": "Introduction to the npx Node.js Package Runner", + "url": "https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b", "type": "article" } ] @@ -606,7 +611,7 @@ }, "QcOqhuKWOUUUBSiu5Oelv": { "title": "Promises", - "description": "A promise is commonly defined as a proxy for a value that will eventually become available. Asynchronous functions use promise behind the scenes, so understanding how promises work is fundamental to understanding how \"async\" and \"await\" works. Once a promise has been called, it will start in a pending state. This means that the calling function continues executing, while the promise is pending until it resolves, giving the calling function whatever data was being requested.\n\nCreating a Promise: The Promise API exposes a Promise constructor, which you initialize using new Promise().\n\nUsing resolve() and reject(), we can communicate back to the caller what the resulting Promise state was, and what to do with it.\n\nVisit the following resources to learn more:", + "description": "A promise is commonly defined as a proxy for a value that will eventually become available.\n\nAsynchronous functions use promise behind the scenes, so understanding how promises work is fundamental to understanding how \"async\" and \"await\" works.\n\nOnce a promise has been called, it will start in a pending state. This means that the calling function continues executing, while the promise is pending until it resolves, giving the calling function whatever data was being requested.\n\nCreating a Promise:\n\nThe Promise API exposes a Promise constructor, which you initialize using new Promise().\n\nUsing resolve() and reject(), we can communicate back to the caller what the resulting Promise state was, and what to do with it.\n\nVisit the following resources to learn more:", "links": [ { "title": "Promise Methods", @@ -656,13 +661,13 @@ "description": "Node.js, being an asynchronous platform, doesn't wait around for things like file I/O to finish - Node.js uses callbacks. A callback is a function called at the completion of a given task; this prevents any blocking, and allows other code to be run in the meantime.\n\nVisit the following resources to learn more:", "links": [ { - "title": "What are callbacks?", - "url": "https://developer.mozilla.org/en-US/docs/Glossary/Callback_function", + "title": "Asynchronicity in Programming Languages", + "url": "https://nodejs.org/en/learn/asynchronous-work/javascript-asynchronous-programming-and-callbacks", "type": "article" }, { - "title": "Asynchronicity in Programming Languages", - "url": "https://nodejs.org/en/learn/asynchronous-work/javascript-asynchronous-programming-and-callbacks", + "title": "What are Callbacks?", + "url": "https://developer.mozilla.org/en-US/docs/Glossary/Callback_function", "type": "article" } ] @@ -710,12 +715,12 @@ "links": [ { "title": "Understanding setImmediate", - "url": "https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate", + "url": "https://nodejs.org/en/learn/asynchronous-work/understanding-setimmediate", "type": "article" }, { "title": "Understanding setImmediate", - "url": "https://nodejs.org/en/learn/asynchronous-work/understanding-setimmediate", + "url": "https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate", "type": "article" } ] @@ -802,6 +807,11 @@ "url": "https://www.digitalocean.com/community/tutorials/how-to-work-with-files-using-the-fs-module-in-node-js", "type": "article" }, + { + "title": "File system", + "url": "https://nodejs.org/docs/latest/api/fs.html", + "type": "article" + }, { "title": "Explore top posts about Node.js", "url": "https://app.daily.dev/tags/nodejs?ref=roadmapsh", @@ -814,7 +824,7 @@ "description": "The `process.cwd()` method returns the current working directory of the Node.js process.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "process.cwd()", "url": "https://nodejs.org/api/process.html#processcwd", "type": "article" }, @@ -830,7 +840,7 @@ "description": "The `path` module provides utilities for working with file and directory paths. It's built-in to Node.js core and can simply be used by requiring it.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Path Documentations", + "title": "Path Documentation", "url": "https://nodejs.org/api/path.html", "type": "article" }, @@ -851,7 +861,7 @@ "description": "File System or `fs` module is a built in module in Node that enables interacting with the file system using JavaScript. All file system operations have synchronous, callback, and promise-based forms, and are accessible using both CommonJS syntax and ES6 Modules.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation", + "title": "fs", "url": "https://nodejs.org/api/fs.html", "type": "article" }, @@ -872,7 +882,7 @@ "description": "The `__dirname` in a node script returns the path of the folder where the current JavaScript file resides. `__filename` and `__dirname` are used to get the filename and directory name of the currently executing file.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "__dirname", "url": "https://nodejs.org/docs/latest/api/modules.html#__dirname", "type": "article" }, @@ -888,7 +898,7 @@ "description": "The `__filename` in Node.js returns the filename of the executed code. It gives the absolute path of the code file. The following approach covers implementing `__filename` in the Node.js project.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Docs", + "title": "__filename", "url": "https://nodejs.org/docs/latest/api/modules.html#__filename", "type": "article" } @@ -926,7 +936,7 @@ "description": "fs-extra adds file system methods that aren't included in the native fs module and adds promise support to the fs methods. It also uses graceful-fs to prevent EMFILE errors. It should be a drop in replacement for fs.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "fs-extra package", "url": "https://www.npmjs.com/package/fs-extra", "type": "article" }, @@ -942,7 +952,7 @@ "description": "Chokidar is a fast open-source file watcher for node. js. You give it a bunch of files, it watches them for changes and notifies you every time an old file is edited; or a new file is created.\n\nVisit the following resources to learn more:", "links": [ { - "title": "NPM Docs", + "title": "chokidar package", "url": "https://www.npmjs.com/package/chokidar", "type": "article" } @@ -1010,7 +1020,7 @@ "description": "In Node. js, process. env is a global variable that is injected during runtime. It is a view of the state of the system environment variables. When we set an environment variable, it is loaded into process.env during runtime and can later be accessed.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Node.js Learn environment variables", + "title": "Node.js Learn Environment Variables", "url": "https://nodejs.org/en/learn/command-line/how-to-read-environment-variables-from-nodejs", "type": "article" }, @@ -1042,7 +1052,7 @@ "description": "The `process.stdin` is a standard Readable stream which listens for user input and is accessible via the process module. It uses `on()` function to listen for input events.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation", + "title": "process.stdin", "url": "https://nodejs.org/api/process.html#processstdin", "type": "article" }, @@ -1058,7 +1068,7 @@ "description": "Prompts is a higher level and user friendly interface built on top of Node.js's inbuilt `Readline` module. It supports different type of prompts such as text, password, autocomplete, date, etc. It is an interactive module and comes with inbuilt validation support.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation", + "title": "Prompts", "url": "https://www.npmjs.com/package/prompts", "type": "article" } @@ -1069,7 +1079,7 @@ "description": "Inquirer.js is a collection of common interactive command line interfaces for taking inputs from user. It is promise based and supports chaining series of prompt questions together, receiving text input, checkboxes, lists of choices and much more.\n\nYou can use it to empower your terminal applications that need user input or to build your own CLI.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Docs", + "title": "Inquirer", "url": "https://github.com/SBoudrias/Inquirer.js#readme", "type": "opensource" }, @@ -1122,7 +1132,7 @@ "description": "This package aims to fully implement the FIGfont spec in JavaScript, which represents the graphical arrangement of characters representing larger characters. It works in the browser and with Node.js.\n\nVisit the following resources to learn more:", "links": [ { - "title": "GitHub Repository", + "title": "figlet", "url": "https://github.com/patorjk/figlet.js", "type": "opensource" } @@ -1165,7 +1175,7 @@ "description": "Commander is a light-weight, expressive, and powerful command-line framework for node.js. with Commander.js you can create your own command-line interface (CLI).\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation", + "title": "commander package", "url": "https://www.npmjs.com/package/commander", "type": "article" }, @@ -1202,12 +1212,12 @@ "description": "Express is a node js web application framework that provides broad features for building web and mobile applications. It is used to build a single page, multi-page, and hybrid web application.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Express.js Official Website", + "title": "Express.js", "url": "https://expressjs.com/", "type": "article" }, { - "title": "Official Getting Started Guide", + "title": "Getting Started Guide", "url": "https://expressjs.com/en/starter/installing.html", "type": "article" }, @@ -1233,12 +1243,12 @@ "description": "Fastify is a web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture, inspired by Hapi and Express.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Fastify Website", + "title": "Fastify", "url": "https://www.fastify.io/", "type": "article" }, { - "title": "Fastify Official Documentations", + "title": "Fastify Documentations", "url": "https://www.fastify.io/docs/latest/", "type": "article" }, @@ -1259,12 +1269,12 @@ "description": "NestJS is a progressive Node.js framework for creating efficient and scalable server-side applications.\n\nVisit the following resources to learn more:", "links": [ { - "title": "NestJS Website", + "title": "NestJS", "url": "https://nestjs.com", "type": "article" }, { - "title": "NestJS Official Documentations", + "title": "NestJS Documentations", "url": "https://docs.nestjs.com", "type": "article" }, @@ -1285,7 +1295,7 @@ "description": "Hono is a lightweight, simple, and fast web framework for Cloudflare Workers, Deno, Bun, and other applications. It is a modern web application that is both fast and flexible. It offers inbuilt support for TypeScript, and easy development in a local environment. Using Hono, It is easy to create publishable web applications with Deno, Bun, and Cloudflare Workers.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Hono Official Documentations", + "title": "Hono Documentation", "url": "https://hono.dev/docs/", "type": "article" }, @@ -1306,7 +1316,7 @@ "type": "article" }, { - "title": "Node http.request() documentation", + "title": "Node.js http.request() documentation", "url": "https://nodejs.org/docs/latest-v16.x/api/http.html#httprequesturl-options-callback", "type": "article" }, @@ -1322,7 +1332,7 @@ "description": "Axios is a promise-based HTTP Client for node.js and the browser. Used for making requests to web servers. On the server-side it uses the native node.js http module, while on the client (browser) it uses XMLHttpRequests.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Axios Official Documentation", + "title": "Axios Documentation", "url": "https://axios-http.com/docs/intro", "type": "article" }, @@ -1343,7 +1353,7 @@ "description": "Ky is a tiny and elegant HTTP client based on the browser Fetch API. Ky targets modern browsers and Deno.For older browsers, you will need to transpile and use a fetch polyfill.For Node.js, check out Got.. 1 KB (minified & gzipped), one file, and no dependencies.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Ky Official Docs", + "title": "Ky Docs", "url": "https://github.com/sindresorhus/ky", "type": "opensource" }, @@ -1385,7 +1395,7 @@ "description": "Got is a lighter, human-friendly, and powerful HTTP request library explicitly designed to work with Node.js. It supports pagination, RFC compliant caching, makes an API request again if it fails, supports cookies out of the box, etc.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Documentation", + "title": "Got Documentation", "url": "https://www.npmjs.com/package/got", "type": "article" }, @@ -1401,7 +1411,7 @@ "description": "JWT, or JSON-Web-Token, is an open standard for sharing security information between two parties — a client and a server. Each JWT contains encoded JSON objects, including a set of claims. JWTs are signed using a cryptographic algorithm to ensure that the claims cannot be altered after the token is issued.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Package Documentation", + "title": "JSON Package Documentation", "url": "https://www.npmjs.com/package/jsonwebtoken", "type": "article" }, @@ -1422,12 +1432,12 @@ "description": "Passport.js is authentication middleware for Node.js. It makes implementing authentication in express apps really easy and fast. It is extremely flexible and modular. It uses \"strategies\" to support authentication using a username and password, Facebook, Twitter, and a lot of other sites.\n\nVisit the following resources to learn more:", "links": [ { - "title": "PassportJS Website", + "title": "PassportJS", "url": "https://www.passportjs.org/", "type": "article" }, { - "title": "PassportJS Official Documentation", + "title": "PassportJS Documentation", "url": "https://www.passportjs.org/docs/", "type": "article" }, @@ -1445,20 +1455,20 @@ }, "swp4wBgA7z-sd64VDkMrw": { "title": "Monitor Changes (Dev)", - "description": "In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using `nodemon` to restart the process automatically.\n\nSince Node.js 18.11.0, you can run Node with the `--watch` flag to reload your app everytime a file is changed. So you don't need to use `nodemon` anymore. [Node.js 18.11.0 Changelog](https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V18.md#18.11.0).", + "description": "In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using `nodemon` to restart the process automatically.\n\nSince Node.js 18.11.0, you can run Node with the `--watch` flag to reload your app every time a file is changed. So you don't need to use `nodemon` anymore.\n\nVisit the following resources to learn more:", "links": [] }, "812bVEzxwTsYzLG_PmLqN": { "title": "--watch", - "description": "The `--watch` flag in Node.js is a powerful feature introduced in Node.js version 19 that enables automatic reloading of your Node.js application whenever changes are detected in the specified files.\n\nHow it works\n------------\n\n* You run your Node.js script with the `--watch` flag: `$ node --watch your_script.js`\n* Node.js starts watching the specified file (or directory) for changes.\n* Whenever a change is detected, Node.js automatically restarts the script\n\nVisit the following resources to learn more:", + "description": "The `--watch` flag in Node.js is a powerful feature introduced in Node.js version 19 that enables automatic reloading of your Node.js application whenever changes are detected in the specified files.\n\nHere's How it works:\n\n* You run your Node.js script with the `--watch` flag: `$ node --watch your_script.js`\n* Node.js starts watching the specified file (or directory) for changes.\n* Whenever a change is detected, Node.js automatically restarts the script\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Docs", + "title": "Node.js CLI", "url": "https://nodejs.org/api/cli.html", "type": "article" }, { - "title": "Node.js API Docs", + "title": "Node.js --watch Docs", "url": "https://nodejs.org/api/cli.html#--watch", "type": "article" }, @@ -1471,8 +1481,18 @@ }, "2Ym2jMvov0lZ79aJFaw29": { "title": "nodemon", - "description": "In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using [nodemon](https://nodemon.io/) or [PM2](https://pm2.keymetrics.io/docs/usage/quick-start/) to restart the process automatically.\n\n`nodemon` is a command-line interface (CLI) utility developed by [@rem](https://twitter.com/rem) that wraps your Node app, watches the file system, and automatically restarts the process.\n\nVisit the following resources to learn more:", + "description": "In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using nodemon or PM2 to restart the process automatically.\n\n`nodemon` is a command-line interface (CLI) utility developed by rem that wraps your Node app, watches the file system, and automatically restarts the process.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Nodemon", + "url": "https://nodemon.io/", + "type": "article" + }, + { + "title": "PM2", + "url": "https://pm2.keymetrics.io/docs/usage/quick-start/", + "type": "article" + }, { "title": "How To Restart Your Node.js Apps Automatically with nodemon", "url": "https://www.digitalocean.com/community/tutorials/workflow-nodemon", @@ -1487,25 +1507,41 @@ }, "J0ErCAZT5B97ZMogU2JHd": { "title": "Template Engines", - "description": "Template engine helps us to create an HTML template with minimal code. Also, it can inject data into HTML template at client side and produce the final HTML.\n\nSome examples of template engines in Node.js are:\n\n* Nunjucks\n* Jade\n* Vash\n* EJS\n* Handlebars\n* HAML", - "links": [] + "description": "Template engine helps us to create an HTML template with minimal code. Also, it can inject data into HTML template at client side and produce the final HTML.\n\nSome examples of template engines in Node.js are:\n\n* Nunjucks\n* Jade\n* Vash\n* EJS\n* Handlebars\n* HAML\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Getting Started with Pug", + "url": "https://pugjs.org/api/getting-started.html", + "type": "article" + }, + { + "title": "Handlebars Package", + "url": "https://www.npmjs.com/package/handlebars", + "type": "article" + }, + { + "title": "EJS Package", + "url": "https://www.npmjs.com/package/ejs", + "type": "article" + } + ] }, "L-_N7OxxuHCXsdWYBgZGu": { "title": "ejs", "description": "EJS is a template language or engine that allows you to generate HTML markup with pure JavaScript. And this is what makes it perfect for Nodejs applications. In simple words, the EJS template engine helps to easily embed JavaScript into your HTML template.\n\nVisit the following resources to learn more:", "links": [ { - "title": "EJS Website", + "title": "EJS", "url": "https://ejs.co/", "type": "article" }, { - "title": "EJS Official Documentation", + "title": "EJS Documentation", "url": "https://ejs.co/#docs", "type": "article" }, { - "title": "EJS Official Package", + "title": "EJS Package", "url": "https://www.npmjs.com/package/ejs", "type": "article" }, @@ -1568,7 +1604,7 @@ "description": "A database is an organized collection of structured information, or data, typically stored electronically in a computer system. A database is usually controlled by a database management system (DBMS).\n\nVisit the following resources to learn more:", "links": [ { - "title": "Wikipedia - What is Database?", + "title": "What is Database?", "url": "https://en.wikipedia.org/wiki/Database", "type": "article" } @@ -1579,7 +1615,7 @@ "description": "Mongoose is an Object Data Modeling (ODM) library for MongoDB and Node.js. Mongoose provides a straight-forward, schema-based solution to model your application data. It includes built-in type casting, validation, query building, business logic hooks and more, out of the box.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Mongoose Website", + "title": "Mongoose", "url": "https://mongoosejs.com", "type": "article" }, @@ -1600,7 +1636,7 @@ "description": "Prisma provides an open source next-generation ORM in the TypeScript ecosystem. It offers a dedicated API for relation filters. It provides an abstraction layer that makes you more productive compared to writing SQL. Prisma currently supports `PostgreSQL`, `MySQL`, `SQL Server`, `SQLite`, `MongoDB` and `CockroachDB`.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Prisma Website", + "title": "Prisma", "url": "https://www.prisma.io/", "type": "article" }, @@ -1618,7 +1654,7 @@ }, "5WqLm53CHDT5uBoMH-iPl": { "title": "Native Drivers", - "description": "Another way to connect to different databases in Node.js is to use the official native drivers provided by the database. For example, here is the [list of drivers by MongoDB](https://www.mongodb.com/docs/drivers/)", + "description": "Another way to connect to different databases in Node.js is to use the official native drivers provided by the database.\n\nVisit the following resources to learn more:\n\n[@official@MongoDB Drivers](https://www.mongodb.com/docs/drivers/)", "links": [] }, "HDDnt79_PCB5JU-KnHKUh": { @@ -1626,7 +1662,7 @@ "description": "Knex.js is a \"batteries included\" SQL query builder for PostgreSQL, CockroachDB, MSSQL, MySQL, MariaDB, SQLite3, Better-SQLite3, Oracle, and Amazon Redshift designed to be flexible, portable, and fun to use.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Knex.js Docs", + "title": "Knex.js", "url": "https://knexjs.org", "type": "article" }, @@ -1647,7 +1683,7 @@ "type": "opensource" }, { - "title": "Drizzle Website", + "title": "Drizzle", "url": "https://orm.drizzle.team/", "type": "article" }, @@ -1665,7 +1701,7 @@ }, "rk5FtAPDi1TpvWd0yBbtl": { "title": "TypeORM", - "description": "TypeORM is an ORM that can run in NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms and can be used with TypeScript and JavaScript (ES5, ES6, ES7, ES8). Its goal is to always support the latest JavaScript features and provide additional features that help you to develop any kind of application that uses databases - from small applications with a few tables to large scale enterprise applications with multiple databases.\n\nTypeORM supports both [Active Record](https://typeorm.io/active-record-data-mapper#what-is-the-active-record-pattern) and [Data Mapper](https://typeorm.io/active-record-data-mapper#what-is-the-data-mapper-pattern) patterns, unlike all other JavaScript ORMs currently in existence, which means you can write high quality, loosely coupled, scalable, maintainable applications the most productive way.\n\nVisit the following resources to learn more:", + "description": "TypeORM is an ORM that can run in NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms and can be used with TypeScript and JavaScript (ES5, ES6, ES7, ES8). Its goal is to always support the latest JavaScript features and provide additional features that help you to develop any kind of application that uses databases - from small applications with a few tables to large scale enterprise applications with multiple databases.\n\nVisit the following resources to learn more:", "links": [ { "title": "TypeORM Docs", @@ -1681,10 +1717,10 @@ }, "fOm-ktIaLqrmA0zln0Bga": { "title": "Sequelize", - "description": "Sequelize is an easy-to-use and promise-based Node.js ORM tool for Postgres, MySQL, MariaDB, SQLite, DB2, Microsoft SQL Server, and Snowflake. It features solid transaction support, relations, eager and lazy loading, read replication and more.\n\nWhat is an ORM ?\n----------------\n\nAn ORM is known as Object Relational Mapper. This is a tool or a level of abstraction which maps(converts) data in a relational database into programmatic objects that can be manipulated by a programmer using a programming language(usually an OOP language). ORMs solely exist to map the details between two data sources which due to a mismatch cannot coexist together.\n\nVisit the following resources to learn more:", + "description": "Sequelize is an easy-to-use and promise-based Node.js ORM tool for Postgres, MySQL, MariaDB, SQLite, DB2, Microsoft SQL Server, and Snowflake. It features solid transaction support, relations, eager and lazy loading, read replication and more.\n\nWhat is an ORM ?\n\nAn ORM is known as Object Relational Mapper. This is a tool or a level of abstraction which maps(converts) data in a relational database into programmatic objects that can be manipulated by a programmer using a programming language (usually an OOP language). ORMs solely exist to map the details between two data sources which due to a mismatch cannot coexist together.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Sequelize Website", + "title": "Sequelize", "url": "https://sequelize.org/", "type": "article" }, @@ -1694,7 +1730,7 @@ "type": "article" }, { - "title": "Official Sequelize Docs", + "title": "Sequelize Docs", "url": "https://sequelize.org/docs/v6/getting-started/", "type": "article" }, @@ -1715,12 +1751,12 @@ "description": "Prisma is an ORM that helps app developers build faster and make fewer errors. Combined with its Data Platform developers gain reliability and visibility when working with databases.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Prisma Website", + "title": "Prisma", "url": "https://www.prisma.io/", "type": "article" }, { - "title": "Prisma Official Documentations", + "title": "Prisma Documentation", "url": "https://www.prisma.io/docs/", "type": "article" }, @@ -1733,21 +1769,15 @@ }, "KpC-QYKalUp7VUvnMKBoW": { "title": "Native Drivers", - "description": "NativeDriver is an implementation of the WebDriver API which drives the UI of a native application rather than a web application. It extends the WebDriver API in a few key places, and re-interprets the existing API for native applications.\n\n* MySQL:\n * [mysql](https://www.npmjs.com/package/mysql)\n * [mysql2](https://www.npmjs.com/package/mysql2)\n* MariaDB:\n * [mariadb](https://www.npmjs.com/package/mariadb)\n* PostgreSQL:\n * [pg](https://www.npmjs.com/package/pg)\n* Microsoft SQL Server:\n * [tedious](https://www.npmjs.com/package/tedious)\n * [mssql](https://www.npmjs.com/package/mssql)\n* Oracle:", - "links": [ - { - "title": "oracledb", - "url": "https://www.npmjs.com/package/oracledb", - "type": "article" - } - ] + "description": "NativeDriver is an implementation of the WebDriver API which drives the UI of a native application rather than a web application. It extends the WebDriver API in a few key places, and re-interprets the existing API for native applications.", + "links": [] }, "90NIFfbWjTbyKZKwyJlfI": { "title": "Testing", "description": "Software testing is the process of verifying that what we create is doing exactly what we expect it to do. The tests are created to prevent bugs and improve code quality.\n\nThe two most common testing approaches are unit testing and end-to-end testing. In the first, we examine small snippets of code, in the second, we test an entire user flow.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Wikipedia - Software Testing", + "title": "Software Testing", "url": "https://en.wikipedia.org/wiki/Software_testing", "type": "article" }, @@ -1768,7 +1798,7 @@ "description": "Vitest is a Vite-native unit testing framework that's Jest-compatible. Vitest is a powerful testing library built on top of Vite that is growing in popularity. You can use Vitest for a range of testing needs, such as unit, integration, end-to-end (E2E), snapshot, and performance testing of functions and components. ESM, TypeScript, JSX. Out-of-box ESM, TypeScript and JSX support powered by esbuild. Vitest is free and open source.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Vitest", "url": "https://vitest.dev/", "type": "article" }, @@ -1781,7 +1811,7 @@ }, "oSLpy31XEcA2nRq9ks_LJ": { "title": "node:test", - "description": "`node:test` is a built-in module in Node.js that provides a simple, asynchronous test runner. It's designed to make writing tests as straightforward as writing any other code.\n\nKey Features\n------------\n\n* Simplicity: Easy to use and understand.\n* Asynchronous Support: Handles asynchronous code gracefully.\n* Subtests: Allows for organizing tests into hierarchical structures.\n* Hooks: Provides beforeEach and afterEach hooks for setup and teardown.\n\nVisit the following resources to learn more:", + "description": "`node:test` is a built-in module in Node.js that provides a simple, asynchronous test runner. It's designed to make writing tests as straightforward as writing any other code.\n\nKey Features\n\n* Simplicity: Easy to use and understand.\n* Asynchronous Support: Handles asynchronous code gracefully.\n* Subtests: Allows for organizing tests into hierarchical structures.\n* Hooks: Provides beforeEach and afterEach hooks for setup and teardown.\n\nVisit the following resources to learn more:", "links": [ { "title": "Test Runner API Docs", @@ -1800,7 +1830,7 @@ "description": "Jest is a delightful JavaScript Testing Framework with a focus on simplicity. It works with projects using: Babel, TypeScript, Node, React, Angular, Vue and more!\n\nVisit the following resources to learn more:", "links": [ { - "title": "Jest Website", + "title": "Jest", "url": "https://jestjs.io", "type": "article" }, @@ -1821,7 +1851,7 @@ "description": "Playwright is an open-source automation library developed by Microsoft for testing and automating web applications. 1 It offers a unified API to control Chromium, Firefox, and WebKit browsers, making it a versatile choice for cross-browser testing.\n\nPlaywright provides a high-level API to interact with web pages. You can write scripts to simulate user actions, such as clicking buttons, filling forms, and navigating through different pages. Playwright handles the underlying browser interactions, making it easy to write and maintain tests.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Playwright Website", + "title": "Playwright", "url": "https://playwright.dev/", "type": "article" }, @@ -1842,7 +1872,7 @@ "description": "Cypress is a new front end testing tool built for the modern web. It enables you to write faster, easier and more reliable tests.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Cypress Website", + "title": "Cypress", "url": "https://www.cypress.io/", "type": "article" }, @@ -1889,8 +1919,8 @@ "description": "winston is designed to be a simple and universal logging library with support for multiple transports. A transport is essentially a storage device for your logs. Each winston logger can have multiple transports configured at different levels. For example, one may want error logs to be stored in a persistent remote location (like a database), but all logs output to the console or a local file.\n\nVisit the following resources to learn more:", "links": [ { - "title": "winston Website", - "url": "https://github.com/winstonjs/winston", + "title": "winston", + "url": "https://github.com/winstonjs/winston?tab=readme-ov-file#readme", "type": "opensource" }, { @@ -1905,12 +1935,12 @@ "description": "Morgan is a NodeJS and express.js middleware to log the HTTP request and error, simplifying the debugging process. It provides flexibility in defining the format of log messages and helps override the output destination for your logs.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "morgan package", "url": "https://www.npmjs.com/package/morgan", "type": "article" }, { - "title": "How to use Morgan|DigitalOcean", + "title": "How to Use Morgan | DigitalOcean", "url": "https://www.digitalocean.com/community/tutorials/nodejs-getting-started-morgan", "type": "article" } @@ -1921,7 +1951,7 @@ "description": "PM2 lets you run your nodejs scripts forever. In the event that your application crashes, PM2 will also restart it for you.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Keep a node application constantly running", + "title": "Keep a Node Application Constantly Running", "url": "https://devtut.github.io/nodejs/keep-a-node-application-constantly-running.html#use-pm2-as-a-process-manager", "type": "article" }, @@ -1937,12 +1967,12 @@ "description": "PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Pm2 Website", + "title": "Pm2", "url": "https://pm2.keymetrics.io/", "type": "article" }, { - "title": "Pm2 Official Documentations", + "title": "Pm2 Documentations", "url": "https://pm2.keymetrics.io/docs/usage/quick-start/", "type": "article" } @@ -1996,7 +2026,7 @@ "description": "Worker thread is a continuous parallel thread that runs and accepts messages until it is explicitly closed or terminated. With worker threads, we can achieve a much efficient application without creating a deadlock situation. Workers, unlike children's processes, can exchange memory.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Worker Threads Docs", + "title": "Worker Threads", "url": "https://nodejs.org/api/worker_threads.html#worker-threads", "type": "article" } @@ -2007,7 +2037,7 @@ "description": "Streams are a type of data handling methods and are used to read, write or transform chunks of data piece by piece without keeping it in memory all at once. There are four types of streams in Node.js.\n\n* **Readable**: streams from which data can be read.\n* **Writable**: streams to which we can write data.\n* **Duplex**: streams that are both Readable and Writable.\n* **Transform**: streams that can modify or transform the data as it is written and read.\n\nMultiple streams can be chained together using `pipe()` method.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Stream API Official Documentation", + "title": "Stream API Documentation", "url": "https://nodejs.org/api/stream.html", "type": "article" }, @@ -2030,7 +2060,7 @@ }, "ZLNUuDKhJ03Kw7xMVc7IR": { "title": "Debugging", - "description": "Debugging is a concept to identify and remove errors from software applications. Here, we will learn about the technique to debug a Node.js application.\n\nWhy not to use console.log() for debugging?\n-------------------------------------------\n\nUsing `console.log` to debug the code generally dives into an infinite loop of “stopping the app and adding a console.log, and start the app again” operations. Besides slowing down the development of the app, it also makes the writing dirty and creates unnecessary code. Finally, trying to log out variables alongside with the noise of other potential logging operations, may make the process of debugging difficult when attempting to find the values you are debugging.\n\nVisit the following resources to learn more:", + "description": "Debugging is a concept to identify and remove errors from software applications. Here, we will learn about the technique to debug a Node.js application.\n\nWhy not to use `console.log()` for debugging?\n\nUsing `console.log` to debug the code generally dives into an infinite loop of “stopping the app and adding a console.log, and start the app again” operations. Besides slowing down the development of the app, it also makes the writing dirty and creates unnecessary code. Finally, trying to log out variables alongside with the noise of other potential logging operations, may make the process of debugging difficult when attempting to find the values you are debugging.\n\nVisit the following resources to learn more:", "links": [ { "title": "Wikipedia - What is Debugging?", @@ -2049,17 +2079,17 @@ "description": "Memory leaks are caused when your Node.js app’s CPU and memory usage increases over time for no apparent reason. In simple terms, a Node.js memory leak is an orphan block of memory on the Heap that is no longer used by your app because it has not been released by the garbage collector. It’s a useless block of memory. These blocks can grow over time and lead to your app crashing because it runs out of memory.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Memory leaks in Node.js", + "title": "Memory Leaks in Node.js", "url": "https://sematext.com/blog/nodejs-memory-leaks/", "type": "article" }, { - "title": "Memory leaks causes", + "title": "Memory Leaks Causes", "url": "https://sematext.com/blog/nodejs-memory-leaks/#what-causes-them-common-node-js-memory-leaks", "type": "article" }, { - "title": "Memory leaks detectors", + "title": "Memory Leaks Detectors", "url": "https://sematext.com/blog/nodejs-memory-leaks/#node-js-memory-leak-detectors", "type": "article" }, @@ -2118,52 +2148,52 @@ "description": "These are the core modules that come with `Node.js` out of the box. This module provides tools or APIs for performing out certain standard `Node.js` operations. like interacting with the file system, url parsing, or logging information to the console.\n\nLearn more from the following resources:", "links": [ { - "title": "Nodejs fs module", + "title": "fs module", "url": "https://nodejs.org/api/fs.html", "type": "article" }, { - "title": "Nodejs url module", + "title": "url module", "url": "https://nodejs.org/api/url.html", "type": "article" }, { - "title": "Nodejs console module", + "title": "console module", "url": "https://nodejs.org/api/console.html", "type": "article" }, { - "title": "Nodejs util module", + "title": "util module", "url": "https://nodejs.org/api/util.html", "type": "article" }, { - "title": "Nodejs events module", + "title": "events module", "url": "https://nodejs.org/api/events.html", "type": "article" }, { - "title": "Nodejs os module", + "title": "os module", "url": "https://nodejs.org/api/os.html", "type": "article" }, { - "title": "Nodejs worker threads module", + "title": "worker threads module", "url": "https://nodejs.org/api/worker_threads.html", "type": "article" }, { - "title": "Nodejs child process module", + "title": "child process module", "url": "https://nodejs.org/api/child_process.html", "type": "article" }, { - "title": "Nodejs process object", + "title": "process object", "url": "https://nodejs.org/api/process.html", "type": "article" }, { - "title": "Nodejs crypto module", + "title": "crypto module", "url": "https://nodejs.org/api/crypto.html", "type": "article" } diff --git a/public/roadmap-content/php.json b/public/roadmap-content/php.json index 583c18466..e55828536 100644 --- a/public/roadmap-content/php.json +++ b/public/roadmap-content/php.json @@ -780,8 +780,8 @@ "description": "Object-Relational Mapping (ORM) is a popular technique used with PHP to convert data between incompatible type systems using an object-oriented programming language. Essentially, it saves PHP developers time by enabling them to work with databases using OOP standards and avoid writing long SQL queries. One commonly used ORM in PHP is Doctrine. For instance, to save data into a products table, you don't use SQL but OOP-style code:\n\n $product = new Product();\n $product->setName('New Product');\n $entityManager->persist($product);\n $entityManager->flush();\n \n\nVisit the following resources to learn more:", "links": [ { - "title": "Object Relational Mapping (ORM)", - "url": "https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/tutorials/getting-started.html", + "title": "What is an Object Relational Mapping (ORM)", + "url": "https://stackoverflow.com/questions/1279613/what-is-an-orm-how-does-it-work-and-how-should-i-use-one#answer-1279678", "type": "article" } ] diff --git a/public/roadmap-content/postgresql-dba.json b/public/roadmap-content/postgresql-dba.json index f2ec3337a..9babb7e3e 100644 --- a/public/roadmap-content/postgresql-dba.json +++ b/public/roadmap-content/postgresql-dba.json @@ -2626,7 +2626,7 @@ ] }, "xEu5n6U9-WKVxjlT5YUgx": { - "title": "Tenser", + "title": "Tensor", "description": "Tensor Query Language (TQL) is a specialized SQL-like language designed for querying and managing datasets stored as tensors, primarily used within the Deep Lake platform. TQL extends traditional SQL capabilities to support multidimensional array operations, making it particularly useful for data science and machine learning workflows. Key features include array arithmetic, user-defined functions, and integration with deep learning frameworks like PyTorch and TensorFlow, allowing for efficient data manipulation and analysis directly within these environments.\n\nTQL enables users to perform complex queries on datasets, including operations like embedding search, array slicing, and custom numeric computations. This flexibility supports a wide range of applications, from simple data retrieval to sophisticated data preprocessing steps needed for training machine learning models. The language also integrates with version control, allowing users to manage and query different versions of their datasets seamlessly.\n\nLearn more from the following resources:", "links": [ { diff --git a/public/roadmap-content/python.json b/public/roadmap-content/python.json index 34f2f3a28..ee312110c 100644 --- a/public/roadmap-content/python.json +++ b/public/roadmap-content/python.json @@ -126,7 +126,7 @@ }, "-DJgS6l2qngfwurExlmmT": { "title": "Functions, Builtin Functions", - "description": "In programming, a function is a reusable block of code that executes a certain functionality when it is called. Functions are integral parts of every programming language because they help make your code more modular and reusable. In Python, we define a function with the `def` keyword, then write the function identifier (name) followed by parentheses and a colon.\n\nExample\n-------\n\n def greet(name):\n print(f\"Hello, {name}!\")\n \n greet(\"Roadmap.sh\") \n \n\nVisit the following resources to learn more:", + "description": "In programming, a function is a reusable block of code that executes a certain functionality when it is called. Functions are integral parts of every programming language because they help make your code more modular and reusable. In Python, we define a function with the `def` keyword, then write the function identifier (name) followed by parentheses and a colon.\n\nExample\n-------\n\n def greet(name):\n print(f\"Hello, {name}!\")\n \n \n greet(\"Roadmap.sh\")\n \n\nVisit the following resources to learn more:", "links": [ { "title": "Built-in Functions in Python", @@ -700,11 +700,6 @@ "title": "Python Inheritance", "url": "https://www.w3schools.com/python/python_inheritance.asp", "type": "article" - }, - { - "title": "Inheritance in Python", - "url": "https://www.javatpoint.com/inheritance-in-python", - "type": "article" } ] }, diff --git a/public/roadmap-content/qa.json b/public/roadmap-content/qa.json index 5e4f84a56..dc341ace3 100644 --- a/public/roadmap-content/qa.json +++ b/public/roadmap-content/qa.json @@ -97,11 +97,6 @@ "title": "TestLink", "url": "https://testlink.org/", "type": "article" - }, - { - "title": "TestLink Tutorial: A Complete Guide", - "url": "https://www.guru99.com/testlink-tutorial-complete-guide.html", - "type": "article" } ] }, @@ -554,7 +549,7 @@ "links": [ { "title": "Regression Testing", - "url": "https://www.javatpoint.com/regression-testing", + "url": "https://www.tpointtech.com/regression-testing", "type": "article" }, { @@ -674,11 +669,6 @@ "url": "https://www.guru99.com/agile-scrum-extreme-testing.html", "type": "article" }, - { - "title": "Agile Model", - "url": "https://www.javatpoint.com/software-engineering-agile-model", - "type": "article" - }, { "title": "Manifesto for Agile Software Development", "url": "https://agilemanifesto.org/", @@ -759,11 +749,6 @@ "url": "https://www.guru99.com/manual-testing.html", "type": "article" }, - { - "title": "Manual Testing", - "url": "https://www.javatpoint.com/manual-testing", - "type": "article" - }, { "title": "Explore top posts about QA", "url": "https://app.daily.dev/tags/qa?ref=roadmapsh", @@ -1562,11 +1547,6 @@ "title": "Accessibility Tests", "description": "In software QA, accessibility testing is the practice of confirming that an application is usable for as many people as possible, including people with disabilities such as vision impairment, hearing problems and cognitive conditions.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "Accessibility Testing - Javatpoint", - "url": "https://www.javatpoint.com/accessibility-testing", - "type": "article" - }, { "title": "Explore top posts about Accessibility", "url": "https://app.daily.dev/tags/accessibility?ref=roadmapsh", diff --git a/public/roadmap-content/sql.json b/public/roadmap-content/sql.json index a1dcda36d..7066c117b 100644 --- a/public/roadmap-content/sql.json +++ b/public/roadmap-content/sql.json @@ -21,12 +21,7 @@ "links": [ { "title": "Advantages and Disadvantages of DBMS", - "url": "https://www.javatpoint.com/advantages-and-disadvantages-of-dbms", - "type": "article" - }, - { - "title": "ACID Transactions in Databases", - "url": "https://www.databricks.com/glossary/acid-transactions", + "url": "https://cloud.google.com/learn/what-is-a-relational-database", "type": "article" } ] @@ -947,11 +942,6 @@ "title": "CEILING", "description": "The `CEILING()` function in SQL returns the smallest integer greater than or equal to a given numeric value. It's useful when you need to round up a number to the nearest whole number, regardless of whether the number is already an integer or a decimal. For example, `CEILING(4.2)` would return `5`, and `CEILING(-4.7)` would return `-4`. This function is commonly used in scenarios where rounding up is necessary, such as calculating the number of pages needed to display a certain number of items when each page has a fixed capacity.\n\nLearn more from the following resources:", "links": [ - { - "title": "CEILING Function in SQL", - "url": "https://www.javatpoint.com/ceiling-function-in-sql", - "type": "article" - }, { "title": "SQL CEILING", "url": "https://www.w3schools.com/sql/func_sqlserver_ceiling.asp", diff --git a/public/roadmap-content/system-design.json b/public/roadmap-content/system-design.json index 029903e5c..66fe613a5 100644 --- a/public/roadmap-content/system-design.json +++ b/public/roadmap-content/system-design.json @@ -670,7 +670,7 @@ }, "RNITLR1FUQWkRbSBXTD_z": { "title": "Write-through", - "description": "The application uses the cache as the main data store, reading and writing data to it, while the cache is responsible for reading and writing to the database:\n\n* Application adds/updates entry in cache\n* Cache synchronously writes entry to data store\n* Return\n\nApplication code:\n\n set_user(12345, {\"foo\":\"bar\"})\n \n\nCache code:\n\n def set_user(user_id, values):\n user = db.query(\"UPDATE Users WHERE id = {0}\", user_id, values)\n cache.set(user_id, user)\n \n\nWrite-through is a slow overall operation due to the write operation, but subsequent reads of just written data are fast. Users are generally more tolerant of latency when updating data than reading data. Data in the cache is not stale.\n\nDisadvantages\n-------------\n\n* When a new node is created due to failure or scaling, the new node will not cache entries until the entry is updated in the database. Cache-aside in conjunction with write through can mitigate this issue.\n* Most data written might never be read, which can be minimized with a TTL.\n\n![Write through](https://i.imgur.com/Ujf0awN.png)\n\nHave a look at the following resources to learn more:", + "description": "The application uses the cache as the main data store, reading and writing data to it, while the cache is responsible for reading and writing to the database:\n\n* Application adds/updates entry in cache\n* Cache synchronously writes entry to data store\n* Return\n\nApplication code:\n\n set_user(12345, {\"foo\": \"bar\"})\n \n\nCache code:\n\n def set_user(user_id, values):\n user = db.query(\"UPDATE Users WHERE id = {0}\", user_id, values)\n cache.set(user_id, user)\n \n\nWrite-through is a slow overall operation due to the write operation, but subsequent reads of just written data are fast. Users are generally more tolerant of latency when updating data than reading data. Data in the cache is not stale.\n\nDisadvantages\n-------------\n\n* When a new node is created due to failure or scaling, the new node will not cache entries until the entry is updated in the database. Cache-aside in conjunction with write through can mitigate this issue.\n* Most data written might never be read, which can be minimized with a TTL.\n\n![Write through](https://i.imgur.com/Ujf0awN.png)\n\nHave a look at the following resources to learn more:", "links": [ { "title": "Scalability, availability, stability, patterns", @@ -1839,11 +1839,6 @@ "title": "Geode pattern", "url": "https://learn.microsoft.com/en-us/azure/architecture/patterns/geodes", "type": "article" - }, - { - "title": "Geode Formation, Types & Appearance | What is a Geode?", - "url": "https://study.com/academy/lesson/geode-formation-types-appearance.html", - "type": "article" } ] }, diff --git a/public/roadmap-content/typescript.json b/public/roadmap-content/typescript.json index e5b922a67..df7930561 100644 --- a/public/roadmap-content/typescript.json +++ b/public/roadmap-content/typescript.json @@ -1027,11 +1027,6 @@ "title": "External Modules", "description": "In TypeScript, external modules allow you to organize and share code across multiple files. External modules in TypeScript follow the CommonJS or ES modules standards.\n\nHere's an example of how you can use external modules in TypeScript:\n\n // myModule.ts\n export function doSomething() {\n console.log('Doing something...');\n }\n \n // main.ts\n import { doSomething } from './myModule';\n doSomething(); // Output: \"Doing something...\"\n \n\nIn this example, we use the \"export\" keyword in the \"myModule.ts\" file to export the \"doSomething\" function, making it available for other files to use.\n\nLearn more from the following links:", "links": [ - { - "title": "External Module", - "url": "https://www.javatpoint.com/typescript-module", - "type": "article" - }, { "title": "TypeScript - External Module", "url": "https://learncodeweb.com/typescript/modules-in-typescript-explain-with-an-example/", diff --git a/public/roadmaps/cpp.png b/public/roadmaps/cpp.png index fdfd14db5..af9c04bdf 100644 Binary files a/public/roadmaps/cpp.png and b/public/roadmaps/cpp.png differ diff --git a/src/components/Analytics/GoogleAd.astro b/src/components/Analytics/GoogleAd.astro new file mode 100644 index 000000000..34efd7927 --- /dev/null +++ b/src/components/Analytics/GoogleAd.astro @@ -0,0 +1,109 @@ + + diff --git a/src/components/Analytics/GoogleAdSlot.astro b/src/components/Analytics/GoogleAdSlot.astro new file mode 100644 index 000000000..4556c571d --- /dev/null +++ b/src/components/Analytics/GoogleAdSlot.astro @@ -0,0 +1,59 @@ +
+ +
+ + diff --git a/src/components/Analytics/RedditPixel.astro b/src/components/Analytics/RedditPixel.astro new file mode 100644 index 000000000..a07ad33ca --- /dev/null +++ b/src/components/Analytics/RedditPixel.astro @@ -0,0 +1,19 @@ + diff --git a/src/components/AstroIcon.astro b/src/components/AstroIcon.astro index eca2b065b..fbf06880b 100644 --- a/src/components/AstroIcon.astro +++ b/src/components/AstroIcon.astro @@ -18,7 +18,7 @@ async function getSVG(name: string) { throw new Error(`${filepath} not found`); } - const root = parse(files[filepath].default as string); + const root = parse((files[filepath] as any).default as string); const svg = root.querySelector('svg'); diff --git a/src/components/GenerateCourse/AICourseActions.tsx b/src/components/GenerateCourse/AICourseActions.tsx new file mode 100644 index 000000000..a33b219fc --- /dev/null +++ b/src/components/GenerateCourse/AICourseActions.tsx @@ -0,0 +1,116 @@ +import { MoreVertical, Play, Trash2 } from 'lucide-react'; +import { useRef, useState } from 'react'; +import { useOutsideClick } from '../../hooks/use-outside-click'; +import { useKeydown } from '../../hooks/use-keydown'; +import { useToast } from '../../hooks/use-toast'; +import { useMutation } from '@tanstack/react-query'; +import { queryClient } from '../../stores/query-client'; +import { httpDelete } from '../../lib/query-http'; + +type AICourseActionsType = { + courseSlug: string; + onDeleted?: () => void; +}; + +export function AICourseActions(props: AICourseActionsType) { + const { courseSlug, onDeleted } = props; + + const toast = useToast(); + const dropdownRef = useRef(null); + + const [isOpen, setIsOpen] = useState(false); + const [isConfirming, setIsConfirming] = useState(false); + + const { mutate: deleteCourse, isPending: isDeleting } = useMutation( + { + mutationFn: async () => { + return httpDelete(`/v1-delete-ai-course/${courseSlug}`); + }, + onSuccess: () => { + toast.success('Course deleted'); + queryClient.invalidateQueries({ + predicate: (query) => query.queryKey?.[0] === 'user-ai-courses', + }); + onDeleted?.(); + }, + onError: (error) => { + toast.error(error?.message || 'Failed to delete course'); + }, + }, + queryClient, + ); + + useOutsideClick(dropdownRef, () => { + setIsOpen(false); + }); + + useKeydown('Escape', () => { + setIsOpen(false); + }); + + return ( +
+ + + {isOpen && ( +
+ + + Start Course + + {!isConfirming && ( + + )} + + {isConfirming && ( + + Are you sure? +
+ + +
+
+ )} +
+ )} +
+ ); +} diff --git a/src/components/GenerateCourse/AICourseCard.tsx b/src/components/GenerateCourse/AICourseCard.tsx index 329969ade..5528232c9 100644 --- a/src/components/GenerateCourse/AICourseCard.tsx +++ b/src/components/GenerateCourse/AICourseCard.tsx @@ -1,6 +1,7 @@ import type { AICourseWithLessonCount } from '../../queries/ai-course'; import type { DifficultyLevel } from './AICourse'; import { BookOpen } from 'lucide-react'; +import { AICourseActions } from './AICourseActions'; type AICourseCardProps = { course: AICourseWithLessonCount; @@ -32,42 +33,50 @@ export function AICourseCard(props: AICourseCardProps) { totalTopics > 0 ? Math.round((completedTopics / totalTopics) * 100) : 0; return ( - -
- - {course.difficulty} - -
+
+ +
+ + {course.difficulty} + +
-

- {course.title} -

+

+ {course.title} +

-
-
- - {totalTopics} lessons -
+
+
+ + {totalTopics} lessons +
- {totalTopics > 0 && ( -
); } diff --git a/src/components/GenerateCourse/AICourseContent.tsx b/src/components/GenerateCourse/AICourseContent.tsx index 9e0c4564c..565391ec0 100644 --- a/src/components/GenerateCourse/AICourseContent.tsx +++ b/src/components/GenerateCourse/AICourseContent.tsx @@ -2,6 +2,7 @@ import { BookOpenCheck, ChevronLeft, CircleAlert, + CircleOff, Loader2, Menu, Play, @@ -140,42 +141,64 @@ export function AICourseContent(props: AICourseContentProps) { if (error && !isLoading) { const isLimitReached = error.includes('limit'); + const isNotFound = error.includes('not exist'); + + let icon = ; + let title = 'Error occurred'; + let message = error; + + if (isLimitReached) { + icon = ; + title = 'Limit Reached'; + message = + 'You have reached the daily AI usage limit. Please upgrade your account to continue.'; + } else if (isNotFound) { + icon = ; + title = 'Course Not Found'; + message = + 'The course you are looking for does not exist. Why not create your own course?'; + } + + const showUpgradeButton = isLimitReached && !isPaidUser; - const icon = isLimitReached ? ( - - ) : ( - - ); - const title = isLimitReached ? 'Limit Reached' : 'Error Generating Course'; - const message = isLimitReached - ? 'You have reached the daily AI usage limit. Please upgrade your account to continue.' - : error; return ( <> {modals}
{icon} -

{title}

-

{message}

- - {isLimitReached && ( -
- {!isPaidUser && ( - - )} +

{title}

+

{message}

+ + {showUpgradeButton && ( +
+ -

- +

+ Back to AI Tutor

)} + + {(isNotFound || !showUpgradeButton) && ( + + )}
); @@ -492,6 +515,10 @@ export function AICourseContent(props: AICourseContentProps) { )}
)} + +
+ AI can make mistakes, check important info. +
diff --git a/src/components/HeroSection/HeroItemsGroup.tsx b/src/components/HeroSection/HeroItemsGroup.tsx index f4e9b46f5..40fe39b49 100644 --- a/src/components/HeroSection/HeroItemsGroup.tsx +++ b/src/components/HeroSection/HeroItemsGroup.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState, type ReactNode } from 'react'; +import { useEffect, useState, type ReactNode } from 'react'; import { cn } from '../../lib/classname'; import { HeroTitle } from './HeroTitle'; @@ -47,8 +47,6 @@ export function HeroItemsGroup(props: HeroItemsGroupProps) { { 'py-4': !isLoadingOrCollapsedOrEmpty, 'py-4 ': isLoadingOrCollapsedOrEmpty, - 'opacity-50 transition-opacity hover:opacity-100': - isCollapsed && !isLoading, }, className, )} diff --git a/src/components/HeroSection/HeroTitle.tsx b/src/components/HeroSection/HeroTitle.tsx index 7b2173f27..7488e14fa 100644 --- a/src/components/HeroSection/HeroTitle.tsx +++ b/src/components/HeroSection/HeroTitle.tsx @@ -1,6 +1,6 @@ import type { ReactNode } from 'react'; import { Spinner } from '../ReactIcons/Spinner.tsx'; -import { ChevronDown, ChevronsDownUp, ChevronsUpDown } from 'lucide-react'; +import { ChevronsDownUp, ChevronsUpDown } from 'lucide-react'; import { cn } from '../../lib/classname.ts'; type HeroTitleProps = { @@ -29,7 +29,10 @@ export function HeroTitle(props: HeroTitleProps) { return (
-

+

{!isLoading && icon} {isLoading && ( diff --git a/src/components/TopicDetail/TopicDetail.tsx b/src/components/TopicDetail/TopicDetail.tsx index c34fa7073..2b543b573 100644 --- a/src/components/TopicDetail/TopicDetail.tsx +++ b/src/components/TopicDetail/TopicDetail.tsx @@ -323,8 +323,8 @@ export function TopicDetail(props: TopicDetailProps) { const resourceTitleForSearch = resourceTitle ?.toLowerCase() ?.replace(/\s+?roadmap/gi, ''); - const googleSearchUrl = `https://www.google.com/search?q=${topicHtmlTitle?.toLowerCase()} guide for ${resourceTitleForSearch}`; - const youtubeSearchUrl = `https://www.youtube.com/results?search_query=${topicHtmlTitle?.toLowerCase()} for ${resourceTitleForSearch}`; + const googleSearchUrl = `https://www.google.com/search?q=${encodeURIComponent(topicHtmlTitle?.toLowerCase())} guide for ${encodeURIComponent(resourceTitleForSearch || '')}`; + const youtubeSearchUrl = `https://www.youtube.com/results?search_query=${encodeURIComponent(topicHtmlTitle?.toLowerCase())} for ${encodeURIComponent(resourceTitleForSearch || '')}`; const tnsLink = 'https://thenewstack.io/devops/?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Topic'; diff --git a/src/data/guides/ai-data-scientist-career-path.md b/src/data/guides/ai-data-scientist-career-path.md index 350de73d0..74a244d21 100644 --- a/src/data/guides/ai-data-scientist-career-path.md +++ b/src/data/guides/ai-data-scientist-career-path.md @@ -7,7 +7,7 @@ seo: title: 'Is Data Science a Good Career? Advice From a Pro' description: 'Is data science a good career choice? Learn from a professional about the benefits, growth potential, and how to thrive in this exciting field.' ogImageUrl: 'https://assets.roadmap.sh/guest/is-data-science-a-good-career-10j3j.jpg' -isNew: true +isNew: false type: 'textual' date: 2025-01-28 sitemap: diff --git a/src/data/guides/ai-data-scientist-skills.md b/src/data/guides/ai-data-scientist-skills.md index 08a31dea5..fd25ce060 100644 --- a/src/data/guides/ai-data-scientist-skills.md +++ b/src/data/guides/ai-data-scientist-skills.md @@ -1,13 +1,13 @@ --- -title: 'Top 11 Data Sience Skills to Master in @currentYear@' +title: 'Top 11 Data Science Skills to Master in @currentYear@' description: 'Looking to excel in data science? Learn the must-have skills for @currentYear@ with our expert guide and advance your data science career.' authorId: fernando excludedBySlug: '/ai-data-scientist/skills' seo: - title: 'Top 11 Data Sience Skills to Master in @currentYear@' + title: 'Top 11 Data Science Skills to Master in @currentYear@' description: 'Looking to excel in data science? Learn the must-have skills for @currentYear@ with our expert guide and advance your data science career.' ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-skills-to-master-q36qn.jpg' -isNew: true +isNew: false type: 'textual' date: 2025-01-28 sitemap: diff --git a/src/data/guides/ai-data-scientist-tools.md b/src/data/guides/ai-data-scientist-tools.md index 1e3759ab3..5c803b2e4 100644 --- a/src/data/guides/ai-data-scientist-tools.md +++ b/src/data/guides/ai-data-scientist-tools.md @@ -7,7 +7,7 @@ seo: title: 'Data Science Tools: Our Top 11 Recommendations for @currentYear@' description: 'Master your data science projects with our top 11 tools for 2025! Discover the best platforms for data analysis, visualization, and machine learning.' ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-tools-1a9w1.jpg' -isNew: true +isNew: false type: 'textual' date: 2025-01-28 sitemap: diff --git a/src/data/guides/ai-data-scientist-vs-ai.md b/src/data/guides/ai-data-scientist-vs-ai.md new file mode 100644 index 000000000..2248d014e --- /dev/null +++ b/src/data/guides/ai-data-scientist-vs-ai.md @@ -0,0 +1,174 @@ +--- +title: "Data Science vs. AI: How I Would Choose My Path" +description: "If you love working with data, should you become a data scientist or an AI engineer? Here's how I made my choice." +authorId: william +excludedBySlug: '/ai-data-scientist/vs-ai' +seo: + title: "Data Science vs. AI: How I Would Choose My Path" + description: "If you love working with data, should you become a data scientist or an AI engineer? Here's how I made my choice." + ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-vs-artificial-intelligence-w7gl5.jpg' +isNew: true +type: 'textual' +date: 2025-03-24 +sitemap: + priority: 0.7 + changefreq: 'weekly' +tags: + - 'guide' + - 'textual-guide' + - 'guide-sitemap' +--- + +![Data Science vs AI: What are the differences?](https://assets.roadmap.sh/guest/data-science-vs-artificial-intelligence-w7gl5.jpg) + +Choosing between specializing in data science and AI comes down to what you like and the problems you want to solve. If you enjoy analyzing data, uncovering insights, and making data-driven decisions, data science might be for you. But artificial intelligence is the way to go if you're into creating systems that can learn, adapt, and make decisions on their own. + +When I first got into tech, I wasn't sure which path to take. I spent late nights researching, feeling both excited and overwhelmed. Data science and AI seemed so similar that telling them apart felt impossible, especially since many jobs required skills in both. But as I dug deeper, I realized they have distinct focuses despite their overlap. + +Data science focuses on extracting meaningful insights from data. As a data scientist, you'll be responsible for designing datasets, building models to analyze data, identifying patterns, and solving complex problems to help businesses make better decisions. You'll do this using statistical analysis and several machine learning techniques like supervised and unsupervised learning. + +In contrast, artificial intelligence is about developing intelligent systems that can perform tasks that typically require human intelligence. These tasks include pattern recognition, predictive analysis, and language translation. You'll design algorithms to learn and solve problems without constant human intervention. + +If you don't know much about data science and AI, don't worry about it. Check out our beginner's guide on [data science](https://roadmap.sh/ai-data-scientist) and [AI](https://roadmap.sh/ai-engineer) to get a good overview of both fields. In this guide, I'll show you what each field is about, the skills you need, and the opportunities they offer. By the end, you'll know which career path suits you best based on your interests, skills, and goals. + +## Data science vs. AI: What are the key differences? + +When discussing data science and AI, many people often mix them up. While they share similarities, their purposes, tools, and techniques differ. The table below summarizes the key differences between data science and AI: + +| Characteristics | Data science | Artificial intelligence | +| ---------------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| Primary focus | Extracting insights from data | Building intelligent systems that mimic human intelligence to perform tasks | +| Responsibilities | Data collection, data cleaning, data analysis, data modeling, data visualization, and building predictive models | Building and training machine learning models, machine learning algorithms, and artificial intelligence applications | +| Tools | Python, R, SQL, Pandas, Hadoop, TensorFlow, Tableau | Java, Python, PyTorch, OpenCV, spaCy, GPUs, AWS and Keras | +| Educational path | Bachelor's in computer science, statistics, or mathematics; master's in data science | Bachelor's in computer science, mathematics, or engineering; master's in AI or related field | +| Career paths | Data analyst, data scientist, business analyst, machine learning engineer | AI engineer, machine learning engineer, AI product manager, NLP enginner, AI research scientist | +| Applications | Predictive analytics, fraud detection, customer segmentation, healthcare analytics and more | Self-driving cars, chatbots, robotics, predictive maintenance, medical imaging analysis and more | + +## Primary focus + +One big difference between data science and AI is what they focus on the most. Data science focuses on uncovering insights and solving problems through data analytics. It uses structured data like customer databases to identify patterns and solve complex problems. You'll use advanced tools and machine learning techniques like computer vision to work with unstructured data like videos and images. + +If you choose data science, you'll work on extracting valuable insights from data. For example, a data scientist working in finance will use anomaly detection to analyze transactional data. This helps with fraud detection and risk assessment, e.g., unusual login attempts. + +![Data science vs. artificial intelligence: Primary focus](https://assets.roadmap.sh/guest/primary-focus-between-data-science-and-ai-l4fv0.png) + +In contrast, if you choose artificial intelligence, you'll focus on building systems that mimic human intelligence, like learning, reasoning, and solving problems. It uses structured and unstructured data to enable machines to perform tasks like pattern recognition in images and speech and natural language processing. For example, AI virtual assistants like Siri can listen and reply to what you're saying. They use natural language processing models to recognize and understand your voice (human language). It makes it easy for you to ask and get answers to questions just by talking. + +## Daily responsibilities + +Data scientists and AI engineers have different responsibilities that show their focus areas. As a data scientist, your daily duties will include: + +- **Data collection**: This is often the first thing you do when extracting insights from data. Your job will be to collect large volumes of data from several sources, such as databases. For example, a healthcare data scientist will collect and analyze patient data to create models to help in diagnosing diseases. It'll make it easier to predict patient outcomes and make treatment plans better. +- **Data cleaning**: After you collect all the data, the next step is to clean the data. Doing this means removing errors from the raw data to prepare it for data analysis. +- **Data analysis**: After cleaning, you'll analyze data to identify patterns and trends. You'll do this using statistical analysis and machine learning techniques like clustering. +- **Building models**: You'll create predictive models to make future predictions based on historical data. A company like Netflix, for example, uses predictive models to suggest TV shows and movies to you. The data scientist will analyze your past data to see what shows you've watched, how you rated them, and more. Then, they will use this data to build a model that suggests similar shows you'll like. +- **Data visualization**: Visualizing data is about presenting complex data in a visual format. As a data scientist, you'll use data visualization tools like Tableau and Power BI to present data in a way that every team member will understand. + +![Data science vs. artificial intelligence: Job responsibilities](https://assets.roadmap.sh/guest/responsibilities-of-a-data-scientist-and-ai-engineer-wzlzh.png) + +On the flip side, AI involves various responsibilities like designing, training, and testing AI models. As an AI engineer, your daily responsibilities will include: + +- **Data preparation**: You'll collect, clean, analyze, and work with large amounts of data to train and test AI models (i.e., machine learning models). Yes, as an AI engineer, you'll also analyze data, although it is the primary duty of the data scientists. Doing this lets you check if the data is good for the AI model and spot any problems that could mess up the training. +- **Model training**: You'll be responsible for developing algorithms that enable machines to learn from data using machine learning techniques like computer vision and neural networks. For example, automotive industries use artificial intelligence to create self-driving cars. They use AI algorithms to analyze sensor data from cameras, radar, and lasers to see what's around them. +- **Review models**: You'll test and make sure that the models provide reliable results. Imagine you've developed a model to identify diseases from analyzing medical images. You'll use images the model hasn't seen before to test its accuracy at spotting diseases. If it misses something, that's your cue to tweak it until it gets better. +- **Implementation**: Once you create a model, you need to make sure it works well with other systems. It's like having a chatbot on a website to handle customer inquiries, using a fraud detection system in a bank to analyze transactions, or incorporating GPS functionality in self-driving cars for navigation. Additionally, you'll monitor and maintain its performance and update it when needed. + +## The tools you'll use + +One important thing to consider when choosing between data science and AI is the tools you'll use. In data science, you'll work with programming languages like [Python](https://roadmap.sh/python), R, and [SQL](https://roadmap.sh/sql) to extract insights and analyze data. You'll use Python libraries like Pandas to manipulate data and NumPy to make math calculations. + +As a data scientist, you'll also use big data technologies like Hadoop to work with large volumes of data. Machine learning libraries like TensorFlow will help you develop advanced machine learning models. Also, you'll use data visualization tools like Tableau and Power BI when sharing your results. + +![Data science vs. artificial intelligence: tools](https://assets.roadmap.sh/guest/tools-for-data-science-and-artificial-intelligence-q6i4v.png) + +On the flip side, artificial intelligence needs more advanced tools to work its magic. You'll use programming languages like [Java](https://roadmap.sh/java) and [Python](https://roadmap.sh/python), like in data science, but you'll focus on AI frameworks like PyTorch to train deep learning models, especially neural networks. These frameworks can do various machine learning tasks, such as supervised learning (e.g., image classification), unsupervised learning (e.g., anomaly detection), and reinforcement learning (e.g., game playing) when needed. + +Tools like OpenCV will help with computer vision tasks, and libraries like NLTK and spaCy will help with natural language processing. As an AI engineer, you'll also work with specialized hardware like graphics processing units (GPUs) and tensor processing units (TPUs). These tools provide the computational power to train large neural networks well. Finally, you'll work with cloud platforms like [AWS](https://roadmap.sh/aws) and Google Cloud AI Platform to deploy and manage your AI models. + +## How do the skills you need differ? + +Now that you know the differences between data science and artificial intelligence, let's look at the skills you need. As a data scientist, it's important to build a solid understanding in the following areas: + +- Proficient in programming skills like [Python](https://roadmap.sh/python) and [SQL](https://roadmap.sh/sql) for data analysis and manipulation. +- Strong understanding of statistics and mathematics to analyze and interpret data. +- Good in data wrangling for cleaning and organizing datasets before analysis. +- Proficient in data mining to extract useful patterns and insights from large datasets. +- Strong data visualization techniques to present valuable insights through tools such as Matplotlib or Tableau. +- Basic understanding of machine learning principles and algorithms to apply predictive analytics and solve business problems. +- Good critical thinking skills to analyze data and provide solutions to business problems using data. + +![Skills for data science and artificial intelligence](https://assets.roadmap.sh/guest/important-skills-for-data-science-and-ai-sj2nh.png) + +In contrast, as an AI engineer, you'll create complex AI systems using the following skills: + +- In-depth knowledge of advanced machine learning concepts, including neural networks, to create models for tasks like image recognition or natural language processing. +- Proficiency in programming skills ([Python](https://roadmap.sh/python), [C++](https://roadmap.sh/c-plus-plus), [Java](https://roadmap.sh/java)) for creating complex algorithms. +- Understanding mathematics, e.g., linear algebra and calculus for algorithm development. +- Experience with frameworks like TensorFlow and PyTorch for building and deploying AI models. +- Knowledge of computer vision and natural language processing to create intelligent systems that understand and interact with data. + +## The educational pathway to data science and artificial intelligence career + +A very good educational foundation is necessary to start a career as a data scientist. The first step is getting your bachelor's degree in computer science, data science, or artificial intelligence. These fields cover topics like algorithms, machine learning, and software development. + +![Data science vs. artificial intelligence: Educational path](https://assets.roadmap.sh/guest/educational-pathway-to-data-science-and-ai-careers-clcgu.png) + +On the other hand, artificial intelligence often requires higher educational qualifications, such as a bachelor's, master's, or Ph.D., due to its technically complex and research-oriented nature. You'll first need a bachelor's degree in computer science, data science, or artificial intelligence to start a career in this field. This will give you a good understanding of machine learning, mathematics, and statistics. You'll go into detail on topics like algebra and calculus and learn languages like [Python](https://roadmap.sh/python) and [Java](https://roadmap.sh/java). Some AI engineers may pursue a master's degree if they aim for senior or research positions, but it's not always necessary. + +Also, you don't always have to attend a university to learn. Some people who want to become data scientists and AI engineers go to boot camps, take online courses, or get certifications instead. Platforms like [roadmap.sh](https://roadmap.sh) offer detailed [data science](https://roadmap.sh/ai-data-scientist) and [AI courses](https://roadmap.sh/ai-engineer) to help you learn. The platforms are more flexible and focus on practical projects, so you can create a portfolio to showcase your skills. + +## Which field offers better career prospects? + +Data science and artificial intelligence both look promising in terms of job opportunities. Both fields are in high demand, so there are plenty of job opportunities out there for you. However, artificial intelligence jobs usually pay better because they need more advanced skills and technical knowledge in machine learning and algorithm development. + +![Data science vs. artificial intelligence: career path](https://assets.roadmap.sh/guest/career-paths-and-industries-for-data-science-and-ai-i333u.png) + +Data science is a recognized field with many uses in industries like finance, healthcare, and marketing. If you're interested in data science, you could work as a [data analyst](https://roadmap.sh/data-analyst), business analyst, or data scientist. According to [Indeed](https://www.indeed.com/career/data-scientist/salaries?from=top_sb), the average salary for a data scientist in the United States (USA) across all industries is $125,495. + +![Average salary of a data scientist in USA](https://assets.roadmap.sh/guest/average-salary-of-a-data-scientist-in-usa-vevcq.png) + +On the other hand, artificial intelligence is in high demand in industries like robotics, automotive, and tech startups. If you're interested in artificial intelligence, you can work as a machine learning or AI engineer. [According to Indeed](https://www.indeed.com/career/machine-learning-engineer/salaries?from=top_sb), engineers working in machine learning in the USA make an average of $162,735 annually. + +![Average salary of an engineer in machine learning](https://assets.roadmap.sh/guest/average-salary-of-an-engineer-in-machine-learning-ncqpb.png) + +While salary is important when choosing between data science and artificial intelligence, it shouldn't be your only factor. For me, it's less about which field pays more and more about what excites you daily. You'll enjoy success and work satisfaction when you choose a job that matches your interests. + +## Do data science and artificial intelligence overlap? + +Yes, data science and artificial intelligence overlap. Data science is like the backbone of AI. It supplies the data and insights needed to train and improve artificial intelligence models. + +Many skills overlap between data science and artificial intelligence. For instance, being good at coding in [Python](https://roadmap.sh/python), R, and [SQL](https://roadmap.sh/sql) is important in both fields. Both fields also need machine learning, statistics, and data visualization knowledge. Switching from data science to AI or vice versa is straightforward because they share many similarities in skills and tools. + +## Will AI replace data science? + +Will AI replace data science? This is a common concern among many data scientists since there's been a lot of buzz about AI. The simple answer is no: AI is not replacing data science. + +Artificial intelligence tools can make it easier for data scientists to analyze data and predict trends faster. But we humans make sense of all that data, put it into context, and use it to make decisions for the company. Instead of seeing AI as a rival, think of it as a helpful tool that can help you get better at data science. + +## Next steps to find your fit + +If you're still trying to figure out which path to take, here are a few steps to help you find what feels right for you: + +### Know your strengths + +To find out which path is right for you, consider what you're good at and what excites you. Data science might be a good fit if you love analyzing data and finding out hidden stories behind numbers. + +On the other hand, artificial intelligence might be better if you're into technology, algorithms, and creating systems that imitate human intelligence. + +### Connect with others + +Talk to some data science and artificial intelligence professionals and get their advice. Start by attending conferences or joining [online communities](https://roadmap.sh/discord) to connect with others. + +You can ask questions, share your thoughts, and learn from others as a community member. When you chat with other professionals, ask them what they enjoy about their work, what their challenges are, and if they have any tips for newcomers. Listening to their stories can give you a better idea of what each job is really like. + +### Don't be afraid to try + +Don't be afraid to try new things and step out of your comfort zone. You might think you're into data science, but after taking some classes or working on projects, you could realize that artificial intelligence is where your true passion lies. It is completely normal and is part of the learning journey. + +## What next? + +Artificial intelligence and data science have changed how businesses work and make decisions. Both fields have great job opportunities, but the skills needed for each are different. Understanding the basics of these fields will help you pick the right path for you. + +It's not about figuring out which field is better than the other—it's about choosing the one that fits your goals, interests, and skills. So relax and take some time to figure out what you're really into before making any big decisions. + +For continuous learning, visit the roadmap.sh [data science](https://roadmap.sh/ai-data-scientist) and [artificial intelligence](https://roadmap.sh/ai-engineer) guides. Both guides have all the resources you need to start your journey as a data scientist or AI engineer. diff --git a/src/data/guides/ai-data-scientist-vs-business-analytics.md b/src/data/guides/ai-data-scientist-vs-business-analytics.md new file mode 100644 index 000000000..e863bfa16 --- /dev/null +++ b/src/data/guides/ai-data-scientist-vs-business-analytics.md @@ -0,0 +1,189 @@ +--- +title: "Data Science vs Business Analytics: How I'd Choose My Path" +description: "I once struggled to choose between data science and business analytics. If you're in the same boat, I'll guide you to find the right fit." +authorId: ekene +excludedBySlug: '/ai-data-scientist/vs-business-analytics' +seo: + title: "Data Science vs Business Analytics: How I'd Choose My Path" + description: "I once struggled to choose between data science and business analytics. If you're in the same boat, I'll guide you to find the right fit." + ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-and-business-analytics-zxubk.jpg' +isNew: true +type: 'textual' +date: 2025-03-24 +sitemap: + priority: 0.7 + changefreq: 'weekly' +tags: + - 'guide' + - 'textual-guide' + - 'guide-sitemap' +--- + +![Data science vs business analytics comparison](https://assets.roadmap.sh/guest/data-science-and-business-analytics-zxubk.jpg) + +If you enjoy coding, working with algorithms, and solving mathematical problems, you'll likely thrive in [data science](https://roadmap.sh/ai-data-scientist). However, if you prefer analyzing trends, making strategic decisions, and communicating insights, business analytics is a better fit. + +When I was deciding between the two, I kept getting lost in job descriptions and salary comparisons. But what really mattered was how I wanted to work with data. Did I want to build models and predict future trends? Or did I want to interpret existing data to solve business problems? + +If you're facing the same dilemma, the best way to decide is by understanding what each role actually does and how it fits your strengths. In this guide, I'll walk you through the key differences, career paths, and real-world examples, so by the end, you'll have clarity on the right choice for you. + +Before diving in, here's a quick comparison: + +| | Data Science | Business Analytics | +| ------------ | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Key role | Building data models and using math and programming to analyze complex data and extract insights. | Analyzing data and digging for insights to solve specific business problems and presenting them to inform strategy. | +| Skills | Machine learning, advanced mathematics, programming, business intelligence, data analytics, and data visualization. | Data analysis using Excel or Sheets, SQL, visualization, basic statistical modeling, business intelligence, communication, presentation, and problem-solving. | +| Tools | Python, R, SQL, Tableau, PyTorch, Power BI, Tensorflow. | SQL, Excel, business acumen, data visualization tools, and communication. | +| Career paths | Data scientist, AI researcher, data engineer, machine learning engineer. | Business analyst, data scientist, operation analyst, data analyst, product analyst, marketing analyst. | + +Now, let’s get into the meat. If I were in your shoes, the first step I'd take is to understand the differences and similarities between business analytics and data science. + +## Data science vs. business analytics: What sets them apart? + +The difference between data science and business analytics comes down to how you want to work with data. + +When I was making this decision, I had to ask myself: Do I enjoy coding, working with algorithms, and solving mathematical problems? If so, data science was the better fit. Or do I prefer analyzing trends, making strategic decisions, and communicating insights? In that case, business analytics made more sense. + +If you go the data science route, you'll take a highly technical approach that blends [computer science](https://roadmap.sh/computer-science), mathematics, and business knowledge. You'll work with business analysts to understand key challenges, then clean, explore, and mine unstructured and structured data to improve its quality. + +Once the data is ready, you'll build and test predictive models using machine learning algorithms to uncover hidden patterns. These models help businesses make data-driven predictions, optimize processes, and automate decision-making. + +When I looked at these responsibilities, I realized data science was all about solving complex problems, discovering trends, and forecasting what's next. If that excites you, it might be the right path. + +![Data science vs business analytics: what sets them apart?](https://assets.roadmap.sh/guest/data-science-vs-business-analytics-what-sets-them-apart-ineqp.png) + +Business analytics might be a better fit if you don't fancy data science. You'll sit at the intersection of business, data, and operations. You are responsible for evaluating the business's overall health, identifying gaps, and recommending solutions to improve business operations. + +You'll also perform basic data cleaning and transformation using tools like [SQL](https://roadmap.sh/sql) and Excel. However, your primary focus is analyzing data to uncover insights, create reports, and present findings to stakeholders. + +Beyond analysis, I realized that business analysts also take action. You'll recommend strategic next steps based on data insights and collaborate with decision-makers to execute them. This means being involved in change strategy and ensuring that insights lead to tangible business improvements. + +For example, imagine you work for an energy company and notice a drop in residential electricity usage due to increased solar panel adoption. A data scientist will build predictive models to forecast energy demand, optimize distribution, and detect anomalies. A business analyst, meanwhile, will interpret these insights, develop strategies like solar buyback programs, and lead their implementation to drive impact. + +## What Are Their Similarities? + +Although data science and business analytics have differences, after working in both fields, I realized that they share the same goal. Both disciplines focus on transforming raw data into valuable insights that drive business decisions. + +![Data science vs business analytics: what connects them?](https://assets.roadmap.sh/guest/data-science-vs-business-analytics-what-connects-them-z10j8.png) + +Think of them as two sides of the same coin. Both fields involve data mining, statistical analysis, data visualization, [SQL](https://roadmap.sh/sql) usage, problem-solving, and stakeholder collaboration. They work together to help businesses make sense of their data, but their approach and execution set them apart. + +The next step to take is to understand what daily tasks may look like and which one you’d prefer. + +## What Would Your Day-to-Day Look Like? + +Your day-to-day life as a data scientist or business analyst depends on the size of your company and team, industry, and project focus. I’ll break down the primary responsibilities of both fields to give you a clearer picture. + +What are the key responsibilities of a data scientist? +A data scientist analyzes complex data to extract insights, build predictive models, and support data-driven decision-making. + +**Primary tasks:** + +- **Business understanding**: Understand the why behind what you're building. You'll often work with stakeholders to define project and business requirements that guide data usage and model development. +- **Data ingestion**: Gather raw data from systems. This data is obtained from databases, APIs, IoT sensors, Excel sheets, etc. A data scientist collects all the relevant data needed to solve the current business problem. +- **Data processing, migration, and storage**: You'll spend most of your time cleaning, transforming, and migrating structured and unstructured raw data. The goal is to convert data into suitable formats and structures for analysis and accessibility. +- **Data analysis**: Data scientists identify patterns in data behavior using visualization tools and statistical techniques such as Bayesian Inference, A/B testing, and K-means clustering. +- **Building machine learning models**: You'll define the appropriate modeling approach based on business objectives, data characteristics, and analytical requirements. Then, you'll build, train, validate, and fine-tune the model using historical data to predict future trends or automate workflows. Depending on the use case, you may also leverage pre-trained models or transfer learning for faster deployment. +- **Deploying and testing predictive models**: You'll test your model against business requirements and deploy it to production. +- **Reporting**: You also need to present model results to stakeholders using visualizations and clear, concise explanations. + +Data scientists collaborate closely with data engineers to build data extraction and transformation pipelines. You'll also work with business analysts and other stakeholders to set business requirements and align the model with them. + +You'd perform these responsibilities using tools like TensorFlow, Pandas, Jupyter Notebooks, Scikit-learn, Apache Spark, Hadoop, [Docker](https://roadmap.sh/docker), [GitHub/Git](https://roadmap.sh/git-github), SQL, Tableau, and cloud platforms ([AWS],(https://roadmap.sh/aws) Google Cloud, Azure) + +### What Are the Key Responsibilities of a Business Analyst? + +As a business analyst, you'll bridge the gap between business needs and technical solutions by analyzing data and processes and using these insights to drive strategic decisions. Your primary tasks involve: + +- **Data manipulation and analysis**: While business analysts don't need to be expert programmers, you need SQL and Excel for querying databases and lightly analyzing unstructured and structured data. Some business analysts also pick up Python for deeper analysis. +- **Business acumen**: You'd need to know how to perform holistic business analysis. This involves asking the right questions: How can I solve business problems with data? What processes benefit from data-driven insights? Do I have the right data? How can I start collecting this data? Understanding how different departments (marketing, sales, finance) operate is necessary to align data insights with business goals. +- **Data visualization and reporting**: You'll create interactive dashboards and reports using visualization tools like Tableau, Power BI, and Google Data Studio. +- **Communication and stakeholder management**: You'll be involved in clearly communicating complex data insights and providing simple and actionable business recommendations. You'll often present findings to executives who may have little or no technical skills. + +As a business analyst, you'll perform these responsibilities using Tableau, Power BI, Salesforce, Excel, Google Analytics, [SQL](https://roadmap.sh/sql), Microsoft Power BI, Google Sheets, and Looker. + +![Tools for data science and business analytics](https://assets.roadmap.sh/guest/tools-for-data-science-and-business-anaytics-s7iwy.png) + +## Career Prospects: What Paths Are Available to You? + +When choosing a path, I found it helpful to learn about the diverse and promising career options in each field. + +![Career paths for data science and business analytics](https://assets.roadmap.sh/guest/career-paths-for-data-science-and-business-analytics-n0auj.png) + +### Data Science Career Paths + +If data science is your focus, you have several options, but I'll focus on the three leading fields: data science, machine learning engineering, and artificial intelligence. + +#### Data Scientist + +This role involves developing machine learning algorithms, analyzing large datasets, and extracting actionable insights to support business decision-making. You'll work with structured and unstructured data, applying statistical methods and algorithms to uncover patterns, predict trends, and solve complex problems. + +According to [Indeed](https://www.indeed.com/career/data-scientist/salaries), the average annual salary for a data scientist in the U.S. is $125,639, with a range between $79,587 and $198,339. + +![Data scientist salary in United States](https://assets.roadmap.sh/guest/data-scientist-salary-in-united-states-1ks00.png) + +#### Machine Learning Engineer + +Machine learning engineers design, optimize, and deploy machine learning algorithms in production environments. Unlike data scientists, you'll specialize in software engineering, ensuring models are scalable, efficient, and seamlessly integrated into real-world applications. + +According to [Indeed](https://www.indeed.com/career/machine-learning-engineer/salaries?), Machine Learning Engineers earn an average salary of $163,390 per year in the U.S. + +![Machine learning engineer salary in United States](https://assets.roadmap.sh/guest/machine-learning-engineer-salary-in-united-state-8s0tv.png) + +#### AI Specialist + +AI specialists develop AI-driven solutions, lead artificial intelligence research, and manage business initiatives. + +According to [Glassdoor](https://www.glassdoor.co.uk/Salaries/ai-specialist-salary-SRCH_KO0%2C13.htm?countryRedirect=true), the average salary for an AI Specialist in the U.S. is $134,500 per year. + +![AI specialist salary](https://assets.roadmap.sh/guest/ai-specialist-salary-7y3wh.png) + +A computer science or mathematics or data science/AI master's degree or PhD is often desired for data science career paths. + +### Business Analytics Career Paths + +If you choose business analytics instead, several career paths are available, but I'll discuss three leading ones: business analyst, business intelligence analyst, and operations analyst. + +#### Business Analysts + +In this role, you'll get to interpret data, identify business trends, and recommend strategies to optimize performance. You'll also work closely with stakeholders to assess business challenges and use data to drive process improvements and cost-saving measures. + +According to [Indeed](https://www.indeed.com/career/business-analyst/salaries?), the average salary for a business analyst in the U.S. is $85,000 per year, with potential earnings exceeding $100,000 for senior-level professionals. + +![Business analyst salary in United States](https://assets.roadmap.sh/guest/business-analyst-salary-in-united-state-qxei8.png) + +#### Business Intelligence Analysts + +This role focuses on data visualization, reporting, and trend analysis. Working in this role involves developing dashboards, creating reports, and helping organizations monitor performance metrics in real-time. + +According to [Indeed](https://www.indeed.com/career/business-intelligence-analyst/salaries?), Business intelligence analysts in the U.S. earn an average salary of $97,872 per year, with top earners making over $130,000. + +![Business intelligence analyst salary in United States](https://assets.roadmap.sh/guest/business-inntelligence-analyst-salary-in-united-states-nwx5v.png) + +#### Operations Analysts + +Operations analysts focus on optimizing business workflows, improving efficiency, and reducing operational costs through data-driven analysis. This role is common in industries like logistics, finance, and retail, ensuring processes run smoothly and profitably. + +According to [Indeed](https://www.indeed.com/career/operations-analyst/salaries?), the average salary for an operations analyst in the U.S. is $74,648 per year, with potential earnings exceeding $100,000 in industries like finance and technology. + +![Operations analyst salary in United States](https://assets.roadmap.sh/guest/operations-analyst-salary-in-united-states-neddf.png) + +Business analytics admission requirements for those interested in this field often include a bachelor's degree in business, economics, mathematics, or a related field, along with proficiency in statistics, data interpretation, and business intelligence tools. + +## Why Choose One Over the Other? + +I chose data science because I have loved mathematics since my early school years, and anything AI gives me life. + +As I mentioned earlier, if you enjoy coding, solving technical and mathematical problems, and developing data-driven solutions, data science might be the right path for you—especially if AI, machine learning, and big data interest you. This field focuses on building models, algorithms, and predictive systems to extract meaningful insights from data. + +On the other hand, if you prefer interpreting data, identifying trends, and using insights to drive strategic business decisions, business analytics is a better fit. This path is ideal for those who enjoy working closely with stakeholders to solve real-world business problems through data-driven strategies. + +If you're still unsure, experimenting with small projects in both fields can help you determine which excites you more. Sometimes, hands-on experience is the best way to find the right path. Also, some business analytics programs focus on ML, allowing you to explore both fields simultaneously. + +## Next Steps? + +Once you've chosen between data science and business analytics, the best thing you can do is stop second-guessing and start learning. Follow our [Data Scientist Roadmap](https://roadmap.sh/ai-data-scientist) as your step-by-step guide from beginner to expert, tracking your progress along the way. + +You can also start with [Python](https://roadmap.sh/python), explore data analysis, and learn machine learning basics. But, if your preference is business analytics, master Excel, learn visualization tools like Tableau or Looker, and practice creating dashboards. + +The roadmap also helps you schedule learning time and block study time on your calendar to stay consistent. For a detailed overview of any specific role, join the [Discord community](https://roadmap.sh/discord) and stay informed! diff --git a/src/data/guides/ai-data-scientist-vs-data-engineering.md b/src/data/guides/ai-data-scientist-vs-data-engineering.md new file mode 100644 index 000000000..5ac540e0a --- /dev/null +++ b/src/data/guides/ai-data-scientist-vs-data-engineering.md @@ -0,0 +1,193 @@ +--- +title: 'Data Science vs. Data Engineering: Lessons from My Journey' +description: 'I’ve worked on both data science and data engineering projects - here’s what I’ve learned and how you can choose the best path for your career.' +authorId: ekene +excludedBySlug: '/ai-data-scientist/vs-data-engineering' +seo: + title: 'Data Science vs. Data Engineering: Lessons from My Journey' + description: 'I’ve worked on both data science and data engineering projects - here’s what I’ve learned and how you can choose the best path for your career.' + ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-vs-data-engineering-bychp.jpg' +isNew: true +type: 'textual' +date: 2025-03-24 +sitemap: + priority: 0.7 + changefreq: 'weekly' +tags: + - 'guide' + - 'textual-guide' + - 'guide-sitemap' +--- + +![Data science vs data engineering explained](https://assets.roadmap.sh/guest/data-science-vs-data-engineering-bychp.jpg) + +Many aspiring professionals wonder about the difference between data science and data engineering. Although both fields involve working with data, they focus on different aspects of the data lifecycle. + +When I started my tech career, I was torn between data science and data engineering. I spent weeks researching and experimenting with projects to find where my strengths fit best. Both fields are closely related but yet distinct. + +If you love working with data, solving complex problems, and using data to guide decisions, you should consider [data science](https://roadmap.sh/ai-data-scientist), but if you enjoy building and maintaining data infrastructure and systems, I suggest you consider data engineering. + +In this guide, I will share the key lessons I learned, the challenges I faced, and how you can decide which career is right for you. + +The table below summarizes the differences between data science and data engineering. + +## Differences between data science and data engineering + +| | Data science | Data engineering | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| Focus | Analyzing and interpreting data using statistical models, machine learning, and analytics to obtain value and make predictions. | Designing, building, and maintaining data pipelines and infrastructure for data storage and accessibility. | +| Skills | Machine learning, statistics, data visualization, and predictive models. | Knowledge of data infrastructure, database management, and cloud tools. | +| Tools | Python, R, SQL, Tableau, PyTorch, Power BI, Tensorflow. | Python, Scala, R, Java, Apache Spark, Kafka, Snowflake, Databricks. | +| Educational background | Computer science, statistics, and mathematics. | Computer science, computer engineering, and software engineering. | +| Career paths | Data scientist, [Data analyst](https://roadmap.sh/data-analyst), Machine learning engineer. | Data engineer, Big data engineer, Data architect. | + +## What is data science and data engineering? + +When I worked on my first data-driven project, I realized how much I enjoyed working with raw data. But I also saw how much effort went into setting up pipelines and structuring data before I could analyze it. That’s when I understood the fundamental difference: Data engineers build the highways, while data scientists drive on them to find insights. + +Data science is a field that combines mathematics, statistics, analytics, artificial intelligence, and machine learning to analyze large amounts of data to detect hidden patterns, generate actionable insights, and predict trends. As a data scientist, you’ll analyze and interpret complex data to help organizations and businesses make informed decisions. + +On the other hand, data engineering involves designing and building systems for aggregating, storing, and analyzing data. As a data engineer, you’ll build data warehouses to empower data-driven decisions. You will focus on developing pipelines to collect, clean, and transform data, ensuring it is accessible for analysis by the data science team. + +## Key responsibilities of a data scientist + +Your responsibilities as a data scientist will vary depending on the industry, company size, and project focus. To provide more context, I will explain the responsibilities of a data scientist using a project I worked on during my career. The project involved customer churn analysis for a client in the hospitality industry. + + +![Data Scientist Responsibilities](https://assets.roadmap.sh/guest/data-scientist-skills-and-tools-wi5tz.png) + + +1. **Business understanding:** As a data scientist, you’ll work closely with stakeholders to understand the context and gain business insights. + In the customer churn analysis project, I worked closely with the client to understand the business context and gain insights. This provided an in-depth understanding of the hospitality sector and the different terms used. Without this, solving the business problem would have been almost impossible. + +2. **Data ingestion:** Your work as a data scientist involves gathering raw data from different sources. It is your responsibility as a data scientist to collect all the relevant data to solve the current business problem. + + When I worked on the customer churn analysis project, I had to pull data from multiple sources (customer transaction logs, website analytics, and CRM tools). But before I could even begin the analysis, the data engineers had to build ETL pipelines to collect and clean this data. + +3. **Data processing and data storage:** This is one of your core responsibilities as a data scientist. It involves cleaning and transforming the ingested data into suitable formats for analysis and saving data storage systems. + + In the customer churn analysis project, the data ingested were unusable and had to be cleaned so they could be used for analysis. I used tools like Python and NumPy to process the data and saved the processed data in a database. + +4. **Data analysis:** As a data scientist, you’ll analyze processed data using statistical analysis and data visualization tools like Matplotlib, Seaborn, and Pandas. You’ll explore the data to understand relationships, hidden patterns, characteristics, and anomalies. You will use charts and graphs to make the data more understandable and easier to comprehend. + + In the customer churning analysis project, I analyzed the data by identifying the number of returning customers, the customers who came only once, the day of the week with the most customers, and so on. With this analysis, I could identify a trend in the data, which helped in predictive model building. + +5. **Model building:** As a data scientist, you’ll build predictive models and machine learning algorithms to forecast future trends. The machine learning algorithms you build can be categorized into two types: + - Supervised learning: Examples include linear regression, decision trees, and k-nearest neighbors. + - Unsupervised learning: Examples include clustering and dimensionality reduction. + + 6. **Reporting:** As a data scientist, it is your responsibility to interpret and communicate the results of data analysis and predictions. It is not enough to analyze and explore the data; you have to communicate them clearly so that the key stakeholders easily understand them, influence decision-making, and achieve business goals. + +## Skills and tools needed to succeed as a data scientist + +To succeed as a data scientist, you need to have a balance of technical and analytical skills. Some of these skills and tools I recommend include: + +![Data Scientist Skills and Tools](https://assets.roadmap.sh/guest/data-scientist-skills-and-tools-7fjnk.png) + + +1. **Programming languages:** As a data scientist, you should know some programming. The two most common programming languages data scientists use are [Python](https://roadmap.sh/python) and R. + +2. **Mathematics and statistics:** To succeed as a data scientist, you must know mathematics and statistics. They help you understand your data and know which statistical model to apply. Knowledge of mathematical concepts like calculus, probability theory, and linear algebra are fundamental to your success as a data scientist. + +3. **Data visualization:** This involves using graphs, charts, and maps to present data in an understandable and accessible format. It is important to know how to visualize data. Some of the tools used to create visualizations include Matplotlib, Seaborn, ggplot2, and Pandas. + +4. **Database management systems:** Database management systems are applications that interact with users, other applications, and the database to fetch and analyze data. As a data scientist, you will interact a lot with databases, and you should know how to write queries to communicate with them. + + [SQL](https://roadmap.sh/sql) is a programming language used to manage and communicate with relational databases. Examples of relational databases are MySQL, [PostgreSQL](https://roadmap.sh/postgresql-dba), and Microsoft Server SQL. There are also NoSQL databases that store unstructured data. Examples include [MongoDB](https://roadmap.sh/mongodb), Neo4j, and Cassandra. + +5. **Machine learning and artificial intelligence:** As a data scientist, you should have an understanding of machine learning. Machine learning can be divided into supervised, unsupervised, deep, and reinforced learning. Some key tools used by data scientists include Scikit-learn, TensorFlow, and PyTorch. + +## Key responsibilities of a data engineer + +To explain the key responsibilities of a data engineer, I will use an IoT project I worked on to provide more context. The project involved developing an IoT data pipeline to transmit data from a customer’s IoT devices in the field to a storage system. Your key responsibilities as a data engineer include: + +![Data Engineer Responsibilities](https://assets.roadmap.sh/guest/data-engineer-job-description-i0k7i.png) + +1. **Data pipeline development:** A data pipeline is a method of ingesting data from different data sources, transforming the data, and then transferring it to storage and processing systems. You are responsible for building and maintaining data pipelines as a data engineer. The different types of data pipelines include: + - Batch processing pipelines + - Data streaming pipelines + - Data integration pipelines + - Cloud-native data pipelines + In the IoT project, the data engineers designed the data pipeline used to transmit data from the IoT devices to the data storage system. The pipeline was a messaging system into which the IoT devices published data, which was ingested and stored in a database. + +2. **Data architecture design:** As a data engineer, you will build, design, and manage data lakes and warehouses for data storage and retrieval. You will work with cloud platforms ([AWS](https://roadmap.sh/aws), GCP, Azure) to develop scalable and reliable storage solutions. + +3. **Database management:** As a data engineer, you’ll manage and optimize storage solutions, which include relational databases, document databases, and data lakes. These data storage solutions store big data for analysis and prediction for data integrity, performance, and accessibility. + +4. **ETL processes development:** Extract, Transform, Load (ETL) is a process that cleans and organizes data from multiple data sources into a single and consistent data set for storage and further processing. As a data engineer, you are responsible for developing and maintaining the ETL process for proper data integration and onward passage of the data to be used by data scientists. + + The data from the IoT devices was in different formats, so the data engineers had to build an ETL process to transform the data for onward processing and storage. + +5. **Real-time data streaming:** Data engineers process real-time data from different data sources, which can be triggered via events or observers. As a data engineer, you design systems that respond to real-time data, and use tools like Google Publish and Subscribe and Azure Publish and Subscribe to transmit and process it. + + The data sent from the IoT devices was real-time data, and the data engineers built the messaging system that streamed the data. + +6. **Data governance and security:** Data engineers are responsible for compliance with data privacy laws. They implement data validation and integrity checks, which results in clean data and data reliability. They also make sure that sensitive user data is protected and not exposed without sufficient clearance. + +## Skills and tools needed to succeed as a data engineer + +To succeed as a data engineer, you need a combination of programming, data management, data pipelines, and cloud computing skills. I will explain the skills below. + + +1. **Programming languages:** You should know programming and scripting. Python is one of the most common programming languages you will use as a data engineer. Python is used for data processing, creating ETL pipelines, and automation. Other programming languages used are [Java](https://roadmap.sh/java), [SQL](https://roadmap.sh/sql), and Scala. Bash scripting is also a necessary skill you should have for workflow automation. + +2. **Databases:** As a data engineer, you are expected to know how to design and maintain database management systems. You will use relational databases and NoSQL databases to store and retrieve data. Examples of relational databases include PostgreSQL, MySQL, and Microsoft SQL Server. Examples of NoSQL databases include [MongoDB](https://roadmap.sh/mongodb), [Redis](https://roadmap.sh/redis), and DynamoDB. NoSQL databases are used to store unstructured data. + +3. **Data warehouses:** A data warehouse is a system that gathers data from different sources and stores them in a central location. It help prepare data for data analytics, machine learning, and artificial intelligence. + + As a data engineer, you should know how to work with data warehouses and also design and maintain them. There are cloud-based data warehouses and on-premise data warehouses. Cloud-based data warehouses are provided by cloud platforms and they include Amazon Redshift, Google BigQuery, and Azure Synapse Analytics. Examples of on-premise data warehouses include SAP BW/4HANA and IBM Db2 Warehouse. + +4. **Data lakes:** Data engineers use data lakes to store structured and unstructured data in their original formats. They store various types of data in different formats and provide a central repository for data analysis workloads. Examples of data lakes include AWS S3, Azure Data Lake, and Google Cloud Storage. + +5. **ETL processes:** Data engineers use ETL processes to automate the storage and retrieval of data in a database. The data is extracted from its source, transformed into the required format using automated scripts and programs, and then loaded to its destination. As a data engineer, you should know how to design ETL processes and build data pipelines. + +![Data Engineer Skills and Tools](https://assets.roadmap.sh/guest/data-engineer-skills-and-tools-rqgpa.png) + +## Data scientist vs. Data engineer: What career opportunities are available to you? + +Both professionals are in high demand in several industries, including health care, tech, finance, and retail. + +The typical career path in data science includes: + +- Junior data scientist +- Data scientist +- Senior data scientist +- Machine learning engineer + +The career path of a data engineer is similar to that of a data scientist. A typical data engineering career path includes: + +- Junior data engineer +- Data engineer +- Senior data engineer +- Data architect +- Senior data architect + +## Salaries and job market trends + +One thing that surprised me was how salaries vary depending on industry and specialization. In my experience, companies in finance and healthcare tend to pay data scientists more, while big tech firms offer strong compensation for data engineers working on large-scale infrastructure. + +According to Indeed, the average annual [data scientist salary](https://www.indeed.com/career/data-scientist/salaries) in the US is $125,156 with a range between $79,612 and $196,755. + +![Data Scientist Salary in the United States](https://assets.roadmap.sh/guest/data-scientist-salary-in-the-united-states-of-america-97xy4.png) + +The average [data engineer salary](https://www.indeed.com/career/data-engineer/salaries) in the US is $125,758, with a range between $82,340 and $192,069. + +![Data Engineer Salary in the United States](https://assets.roadmap.sh/guest/data-engineer-salary-in-the-united-states-of-america-1f12t.png) + +Both data scientist and data engineer roles are in high demand with the rise in AI. Companies are constantly hiring data scientists and data engineers. On Indeed, there are more than 10,000 openings for data scientists and more than 5,000 in the US alone. + +Data scientists and data engineers will also be very instrumental and in high demand in the future. According to the [US Bureau of Labour Statistics](https://www.bls.gov/ooh/math/data-scientists.htm), there will be 20,800 new openings for data scientists each year for the next decade. + +## Data science vs. Data engineering: Which path fits you better? + +Deciding whether to pursue data science or data engineering depends on your interests, strengths, and career goals. + +If you enjoy solving analytical problems, working with algorithms, and guiding business decision processes, then you should consider data science. Do you enjoy building large-scale systems and data infrastructure and ensuring data pipelines run smoothly? Then, you should consider data engineering. + +Do you understand statistics, mathematics, data analysis, and visualization well? Data science is well-suited for you. Data engineering is the right fit if you have strong programming skills and are knowledgeable in system design and architecture. + +## Next steps + +If I had to start over, I’d begin with small projects. My first real learning moment came when I built a basic recommendation system for movie ratings using [Python](https://roadmap.sh/python) and Pandas. If you're considering data engineering, setting up an ETL pipeline with Apache Airflow is a great starting point. Don't just read—build. + +You should also follow a structured learning path. roadmap.sh provides you a structured [data science](https://roadmap.sh/ai-data-scientist) roadmap where you can track your progress and share it on your profile. You could also customize your roadmap based on your learning needs. diff --git a/src/data/guides/ai-data-scientist-vs-statistics.md b/src/data/guides/ai-data-scientist-vs-statistics.md new file mode 100644 index 000000000..12b3b1021 --- /dev/null +++ b/src/data/guides/ai-data-scientist-vs-statistics.md @@ -0,0 +1,197 @@ +--- +title: "Data Science vs Statistics: How do they compare?" +description: "Not sure whether to pursue data science or statistics? This guide breaks down the key differences, career paths, and skills you need to make an informed choice." +authorId: ekene +excludedBySlug: '/ai-data-scientist/vs-statistics' +seo: + title: "Data Science vs Statistics: How do they compare?" + description: "Not sure whether to pursue data science or statistics? This guide breaks down the key differences, career paths, and skills you need to make an informed choice." + ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-vs-statistics-e3rtw.jpg' +isNew: true +type: 'textual' +date: 2025-03-24 +sitemap: + priority: 0.7 + changefreq: 'weekly' +tags: + - 'guide' + - 'textual-guide' + - 'guide-sitemap' +--- + +![Data science vs statistics compared](https://assets.roadmap.sh/guest/data-science-vs-statistics-e3rtw.jpg) + +Data science and statistics are promising career paths that offer great opportunities to work with data to solve problems and guide decision-making in various industries. But how do you determine which one is a good career for you? If you're new to these fields, learning about their core concepts and career opportunities can help you get started. If you are a student or professional exploring data-driven careers, this guide will help clear up confusion and determine the path that aligns with your goals. + +When choosing between the two, think about the types of problems you like to solve. If you're interested in understanding why and how an issue occurred, uncovering insights from raw data, and building models to predict future outcomes, data science may be the right fit for you. On the other hand, if you prefer analyzing and interpreting quantitative data, identifying patterns, and making statistical predictions, statistics could be the better path. + +At first, data science and statistics might seem interchangeable. But as we dig deeper, you'll see how they differ. Statistics provides the foundation by defining methods, probabilities, and models. Data science builds on that foundation to extract insights from complex data and solve real-world problems. + +In this guide, I'll explain where [data science](https://roadmap.sh/ai-data-scientist) and statistics connect and differ. You'll learn more about the skills and tools necessary for each role and gain more clarity into the career prospects and opportunities they offer. By the time you finish, you'll have a clear vision of your ideal role and the confidence to start shaping your future. + +The following table provides a comparison of data science and statistics. + +| | Data Science | Statistics | +| --------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| Key role | Uses statistics, computer science, and domain expertise to interpret complex datasets. | Uses statistical methods to analyze and make predictions for small, structured datasets. | +| Data processing | Handles large and complex datasets (big data). | Works with smaller datasets, emphasizes sampling techniques. | +| Tools | Python, R, SQL, Hadoop, and TensorFlow. | Statistical software like SAS, R, SPSS, and mathematical models. | +| Skills | Machine learning knowledge, programming skills, data mining, data visualization, business intelligence, and predictive analytics. | Proficient in probability, mathematical theory, statistical modeling, data analysis, and survey design. | +| Career paths | Data scientist, machine learning engineer, data analysts. | Statistician, biostatistician, research analyst. | +| Salary range | For data science career options, salary ranges from $81,273 to $161,715 per year. | For statistics career trajectories, salary ranges from $75,789 to $101,789 per year. | + +Data science vs. statistics: What sets them apart? + +Data science and statistics are two different areas of analytics, each with its role and methodology. Both use statistical methods, but the key difference lies in their application and purpose. + + +![Data science vs. statistics](https://assets.roadmap.sh/guest/data-science-vs-statistics-uxnkp.png) + + +Data science is a blend of statistics, computer science, and domain expertise. It focuses on analyzing large, complex datasets to uncover trends, predict outcomes, and drive business decisions. As a data scientist, you'll use machine learning, programming, and big data tools to solve real-world problems. + +Statistics, on the other hand, is rooted in mathematical theory and inference. As a statistician, you'll design experiments, develop models, and test hypotheses to draw conclusions from structured datasets. You'll work in industries like finance, healthcare, government, and research. + +The key difference is application. Statistics is theoretical and inference-driven, while data science applies statistical techniques in a computational, business-focused way. + +To get a clearer picture of both roles, let's look at the day-to-day tasks involved in each field. + +## Job roles and responsibilities + +Both data science and statistics rely on statistical methods and tools, but your day-to-day activities in each field will differ significantly. As a statistician, you focus on collecting, analyzing, and interpreting data to uncover patterns. As a data scientist, you go beyond that by leveraging machine learning, big data technologies, and programming to extract actionable insights. + +Now, let's take a closer look at their specific roles and responsibilities through a shared case study. + +### Key responsibilities of data scientists + +As a data scientist, you'll extract actionable insights from raw data to solve complex business problems. For example, imagine a pharmaceutical company is developing a new drug. As a data scientist, you might be analyzing clinical trial data to predict treatment efficacy for different patient groups. By applying machine learning models, you can find hidden patterns in patient responses, segment populations, and optimize treatment recommendations. + +The following are some of your day-to-day responsibilities as a data scientist: + +* Discovery: Understanding patient demographics, health conditions, and genetic factors to segment target groups. +* Data collection: Gathering patient records, clinical trial results, and external medical research data for analysis. +* Generate insights: Finding trends in treatment responses using advanced analytics and predictive modeling. +* Model large data sets: Using machine learning to forecast drug effectiveness across different conditions. +* Design algorithms: Building AI-driven models to personalize medication plans and optimize trial outcomes. + +### Key responsibilities of a statistician + +As a statistician, your focus is on designing experiments, analyzing data and applying statistical methods to evaluate results. + +Using the same pharmaceutical company case, as a statistician, you might be responsible for ensuring the clinical trial design is statistically sound and the results are statistically valid before regulatory approval. You would be conducting hypothesis testing, confidence interval analysis, and regression models to confirm that the drug is effective and safe. + +Your day-to-day responsibilities might include: + +* Designing surveys and experiments: Design a clinical trial or questionnaires for the new drug to verify it is statistically sound +* Testing hypotheses: Choosing the right statistical test based on the data type. +* Analyzing structured datasets: Summarizing data, analyzing, and modeling relationships between variables to predict outcomes. +* Data reporting: Using charts, graphs, and other visual aids to report complex information effectively. +* Business recommendations: Provide valuable insight and production strategies based on trial results. + +Let's dig into a few tools and skills you must be proficient in for your selected job role. + +## Essential skills and tools + +Whether you are planning to choose data science or statistics as your career, it is important to know the right tools and essential skills for future challenges. + +![Data science vs statistics: Skills](https://assets.roadmap.sh/guest/data-science-vs-statistics-skills-tbnm7.png) + +Both data science and statistics require a strong foundation in mathematics and analytical thinking skills. Professionals in these fields often pursue advanced degrees, such as a Master's or Ph.D., to enhance their expertise. Let's examine a few key skills and tools essential for each job profile. + +### Skills and tools of a data scientist + +Handling complex datasets, including both unstructured and structured data, requires a data scientist to possess strong technical and problem-solving skills. You should have the following skills for a data scientist job profile: + +* **Programming Skills:** To perform data science tasks smoothly, you must be proficient in [Python](https://roadmap.sh/python), [SQL](https://roadmap.sh/sql), [Java](https://roadmap.sh/java), and R programming languages. Additionally, you must be good at statistical analysis and mathematics. +* **Machine learning knowledge:** You should be able to choose and implement appropriate algorithms, such as linear regression, logistic regression, decision trees, random forests, and neural networks, based on the specific problem and dataset. +* **Data mining:** Knowledge of techniques like data cleaning, preprocessing, feature engineering, and pattern recognition are essential to extracting meaningful insights from big data. +* **Data visualization:** Tools like Tableau and Power BI can help create compelling charts and graphs for your big data. You must know how to use these tools effectively to communicate data insights. +* **Business intelligence:** Understanding business contexts and translating data insights into actionable business decisions is key. You must have strong communication skills and domain knowledge. + +Hadoop, Docker, TensorFlow, GitHub/Git, SQL, and Tableau are important for a data science job profile. Interviewers often prioritize candidates with educational qualifications in computer science, programming, and practical applications of data analysis techniques. + +### Skills and tools of a statistician + +A statistician's main responsibility is to analyze data to predict future events or trends. To achieve this goal, you must excel in the following skills and tools: + +* Mathematical theory: A strong understanding of mathematical concepts like linear algebra, calculus, etc., is essential to measure quantitative data. +* Probability: Proficiency in probability theory is essential for understanding and modeling uncertainty in data. +* Statistical modeling: Experience with various statistical models, such as time series analysis and linear regression, is also valuable. +* Survey design: Knowledge of designing questionnaires or sampling techniques is necessary to collect information from a group of people. + +R, SAS, SPSS, and Excel are a few popular tools you should master to perform statistical analysis and generate graphics. Also, candidates with qualifications in advanced statistical modeling, mathematical and statistical theory, and research methodologies have a better chance of getting selected. + +Let's move forward to different career options available under data science and statistics. Learning about their salary ranges will provide valuable insight into earning potential, helping you make an informed career decision. By comparing salaries, you can assess financial stability, ensuring that your chosen path aligns with your long-term financial goals. + +## Career prospects for both fields + +Data science is experiencing explosive growth across numerous industries, whereas the demand for statisticians remains strong and consistent. Let's explore the various job roles available in both fields and their salary ranges. + +### Data science career paths and salary insights +You can choose from the following careers if you are planning to proceed with data science: + +* Data scientist +* Machine learning engineer +* Data analyst + +**Data scientist:** A career in data science offers opportunities in various industries, including finance, healthcare, and technology. As a data scientist, you'll tackle unique problems, using statistical modeling and machine learning to drive business decisions and outcomes. You need to have a deep understanding of data manipulation and how data relates to the real world. + +Many data scientists use machine learning algorithms to build predictive models, identify trends, and make data-driven decisions. Strong communication skills and expertise in statistical modeling are essential for success in this field. You may start as a junior data scientist and improve your knowledge to lead as Head of Data Science over time. + +In the United States, the [average salary](https://www.datacamp.com/blog/data-science-salaries) of a data scientist is $123,069 per year. + +**Machine learning engineer:** A career as a machine learning engineer involves designing, building, and optimizing machine learning models used in various applications, from recommendation systems to fraud detection. Professionals in this field work on improving machine learning frameworks, monitoring model performance, and solving complex computational problems. To succeed, you need expertise in advanced machine learning, cloud computing, and the software development lifecycle (SDLC). + +Machine learning engineers are in high demand across finance, healthcare, e-commerce, and technology industries. You can start by working on implementing basic machine learning models; as you improve your skills and gain more knowledge, you can work towards a role overseeing ML infrastructure, defining best practices, and leading technical teams. + +In the United States, the [average salary](https://www.indeed.com/career/machine-learning-engineer/salaries) for a machine learning engineer is $161,715 per year. + +**Data analyst:** [Data analysts](https://roadmap.sh/ai-data-scientist/vs-data-analytics) play a crucial role in helping businesses make informed decisions by collecting, filtering, and analyzing data to answer specific business questions. You can use data visualization tools to present insights clearly to stakeholders. + +A career as a data analyst offers opportunities across various industries, including marketing, finance, and healthcare, making it a versatile and in-demand profession. The data analyst job profile includes various positions and levels, from basic reporting and performing deeper data analysis to making data-driven decisions for an organization. + +According to [Indeed](https://www.indeed.com/career/data-analyst/salaries), the average salary for a data analyst job profile in the United States is $81,273 annually. + +### Statistics career paths and salary insights + +If you're interested in statistics, here are a few job positions you can choose from: + +* Statistician +* Biostatistician +* Research Analyst + +**Statistician:** As a statistician, you will design and conduct statistical analysis, interpret data, and communicate findings to researchers and other stakeholders. Many statisticians work on research projects, clinical trials, and large-scale surveys, helping organizations make data-driven decisions. + +There are different levels in the statistician job profile, from applying statistical techniques for data interpretation to leading statistical research and influencing policy decisions. Strong analytical skills and a solid understanding of statistical methods are essential for this career path. + +According to [Indeed](https://www.indeed.com/career/statistician/salaries), the average salary of a statistician in the United States is $89,126 per year. + +**Biostatistician:** Biostatisticians apply statistical methods to biological and medical research, making significant contributions to the healthcare and pharmaceutical industries. If you are planning to pursue a career in this field, you will design and analyze clinical trials, ensuring the accuracy and reliability of biomedical research. This career path offers opportunities in hospitals, government agencies, research institutions, and pharmaceutical companies. + +The [average salary](https://www.indeed.com/career/biostatistician/salaries) for a biostatistician is $101,789 per year in the United States. + +**Research analyst:** In this role, you will use statistical and analytical methods to collect and interpret information to support business decisions. You will also identify trends, generate insights, and present detailed reports summarizing your research for stakeholders. + +According to [Indeed](https://www.indeed.com/career/research-analyst/salaries), the average salary for a research analyst in the United States is $75,789 per year. + +## Are data science and statistics interconnected? + +A statistician uses statistical tools and mathematical models to analyze customer data and distinct customer segments with similar characteristics. This analysis will help stakeholders understand the factors responsible for customer churn rates. Data scientists, meanwhile, will collect big data and use machine learning models to perform predictive analysis. + +Statistics answer questions like "Why did customer churn get high in the first quarter?" or "What is the reason behind the sudden downfall"? Data science, on the other hand, answers "How can this issue be fixed?". + +So yes, data science and statistics are deeply interconnected. + +Statistics provides the foundation for analyzing data, such as finding patterns and trends. Data science professionals, on the other hand, create sophisticated models and present insights through data visualization. Data science is an extended version of statistics that uses statistical methods, scientific methods, machine learning, and artificial intelligence to manage unstructured or semi-structured data. + +Data science further leverages predictive modeling and other advanced techniques to understand past events, predict future trends, identify potential risks, solve real-world problems, and develop improvement strategies. + +Additionally, statistics doesn't require computational skills but an understanding of basic mathematical models to analyze and predict results. + +## Next Step? + +Choosing between data science and statistics can be a tough call. Hopefully, this guide has helped clarify which career path is the best for you. Once you've made a decision, the next step is to get started. + +To help you with your journey, I encourage you to explore the [comprehensive resources](https://roadmap.sh/ai-data-scientist) that delve deeper into the specifics of each path. Whether you are interested in programming and solving complex datasets or theoretical analysis and working with structured data, we have great resources for each career option. + +You can apply for internships or join online courses to gain more experience or sharpen your knowledge. If you still have queries or doubts about these fields, join the [Discord community](https://roadmap.sh/discord) to stay up-to-date! \ No newline at end of file diff --git a/src/data/guides/devops-job-description.md b/src/data/guides/devops-job-description.md index c74143029..13c322896 100644 --- a/src/data/guides/devops-job-description.md +++ b/src/data/guides/devops-job-description.md @@ -9,7 +9,7 @@ seo: ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-job-description-0xjml.jpg' relatedTitle: 'Other Guides' relatedGuidesId: 'devops' -isNew: true +isNew: false type: 'textual' date: '2025-01-17' sitemap: diff --git a/src/data/guides/devops-test-automation.md b/src/data/guides/devops-test-automation.md index 7ecc1084c..f048defae 100644 --- a/src/data/guides/devops-test-automation.md +++ b/src/data/guides/devops-test-automation.md @@ -9,7 +9,7 @@ seo: ogImageUrl: 'https://assets.roadmap.sh/guest/devops-test-automation-nvpbi.jpg' relatedGuidesTitle: 'Other Guides' relatedGuidesId: devops -isNew: true +isNew: false type: 'textual' date: 2025-01-16 sitemap: diff --git a/src/data/guides/devops-vs-agile.md b/src/data/guides/devops-vs-agile.md index e11c95898..6c67ba164 100644 --- a/src/data/guides/devops-vs-agile.md +++ b/src/data/guides/devops-vs-agile.md @@ -9,7 +9,7 @@ seo: ogImageUrl: 'https://assets.roadmap.sh/guest/devops-vs-agile-methodology-tlxj8.jpg' relatedTitle: 'Other Guides' relatedGuidesId: 'devops' -isNew: true +isNew: false type: 'textual' date: '2025-01-17' sitemap: diff --git a/src/data/guides/devops-vs-devsecops.md b/src/data/guides/devops-vs-devsecops.md index 6627eb76e..9a750cd53 100644 --- a/src/data/guides/devops-vs-devsecops.md +++ b/src/data/guides/devops-vs-devsecops.md @@ -9,7 +9,7 @@ seo: ogImageUrl: 'https://assets.roadmap.sh/guest/devops-vs-devsecops-3drth.jpg' relatedTitle: 'Other Guides' relatedGuidesId: 'devops' -isNew: true +isNew: false type: 'textual' date: '2025-01-17' sitemap: diff --git a/src/data/guides/golang-rest-api.md b/src/data/guides/golang-rest-api.md index f2caef2e6..94949921c 100644 --- a/src/data/guides/golang-rest-api.md +++ b/src/data/guides/golang-rest-api.md @@ -8,7 +8,7 @@ seo: description: 'Want to build a REST API in Golang? Follow our detailed tutorial to set up, code, and deploy your API with best practices and clear examples.' ogImageUrl: 'https://assets.roadmap.sh/guest/build-a-rest-api-in-golang-k3zuq.jpg' relatedGuidesTitle: 'Other Guides' -isNew: true +isNew: false type: 'textual' date: 2025-01-17 sitemap: diff --git a/src/data/guides/java-vs-python.md b/src/data/guides/java-vs-python.md index 037ab086f..e097e06c9 100644 --- a/src/data/guides/java-vs-python.md +++ b/src/data/guides/java-vs-python.md @@ -8,7 +8,7 @@ seo: description: 'Wondering which language is right for you? Explore our comprehensive Java vs Python guide to find the best option for your career.' ogImageUrl: 'https://assets.roadmap.sh/guest/java-vs-python-xuk2b.jpg' relatedTitle: 'Other Guides' -isNew: true +isNew: false type: 'textual' date: 2025-01-17 sitemap: @@ -198,6 +198,7 @@ def divide(a, b): finally: print("Execution completed.") + print(divide(10, 2)) # Result: 5.0 print(divide(10, 0)) # Error: Division by zero is not allowed. ``` diff --git a/src/data/roadmaps/ai-data-scientist/faqs.astro b/src/data/roadmaps/ai-data-scientist/faqs.astro index aeb3b180a..1a2267f39 100644 --- a/src/data/roadmaps/ai-data-scientist/faqs.astro +++ b/src/data/roadmaps/ai-data-scientist/faqs.astro @@ -89,6 +89,7 @@ export const faqs: FAQType[] = [ "Data scientists are different from [AI Engineers](https://roadmap.sh/ai-engineer), however, they're often confused due to overlapping skills.", 'For **data scientists**, the focus is to analyze data and uncover insights, while in the case of **AI Engineers**, their focus is on building, deploying, and maintaining AI systems. **Data scientists** tend to be great at data manipulation (Python, R, SQL) and statistical analysis, while **AI Engineers** are quite skilled in software engineering, programming, and machine learning frameworks.', 'In the end, **data scientists** will provide insights, reports, and predictive models. While **AI Engineers** will deliver AI-powered applications, APIs, and scalable systems.', + 'More on this topic here: [Data Science vs AI](https://roadmap.sh/ai-data-scientist/vs-ai).', ], }, { @@ -101,7 +102,7 @@ export const faqs: FAQType[] = [ question: 'What is the difference between Data Science and Data Engineering?', answer: [ - 'The main difference between data science and data engineering is their focus.', + 'The main [difference between data science and data engineering](https://roadmap.sh/ai-data-scientist/vs-data-engineering) is their focus.', 'Data Science focuses on analyzing and modeling data to extract insights and make predictions. It emphasizes statistics, machine learning, and visualization. Data engineering involves building and maintaining the infrastructure and pipelines needed to collect, store, and process data efficiently from multiple data sources. Data engineers ensure that data scientists have clean, accessible, and reliable data for their analyses.', ], }, diff --git a/src/data/roadmaps/ai-engineer/content/adding-end-user-ids-in-prompts@4Q5x2VCXedAWISBXUIyin.md b/src/data/roadmaps/ai-engineer/content/adding-end-user-ids-in-prompts@4Q5x2VCXedAWISBXUIyin.md index 2e29d0eaf..7a996e89b 100644 --- a/src/data/roadmaps/ai-engineer/content/adding-end-user-ids-in-prompts@4Q5x2VCXedAWISBXUIyin.md +++ b/src/data/roadmaps/ai-engineer/content/adding-end-user-ids-in-prompts@4Q5x2VCXedAWISBXUIyin.md @@ -4,4 +4,4 @@ Sending end-user IDs in your requests can be a useful tool to help OpenAI monito Visit the following resources to learn more: -- [@official@Sending end-user IDs - OpenAi](https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids) +- [@official@Sending End-user IDs - OpenAI](https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids) diff --git a/src/data/roadmaps/ai-engineer/content/ai-agents@9XCxilAQ7FRet7lHQr1gE.md b/src/data/roadmaps/ai-engineer/content/ai-agents@9XCxilAQ7FRet7lHQr1gE.md index 71af152ae..3ef296d67 100644 --- a/src/data/roadmaps/ai-engineer/content/ai-agents@9XCxilAQ7FRet7lHQr1gE.md +++ b/src/data/roadmaps/ai-engineer/content/ai-agents@9XCxilAQ7FRet7lHQr1gE.md @@ -5,5 +5,5 @@ In AI engineering, "agents" refer to autonomous systems or components that can p Visit the following resources to learn more: - [@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/) +- [@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) diff --git a/src/data/roadmaps/ai-engineer/content/ai-agents@AeHkNU-uJ_gBdo5-xdpEu.md b/src/data/roadmaps/ai-engineer/content/ai-agents@AeHkNU-uJ_gBdo5-xdpEu.md index 5081d018e..833e71262 100644 --- a/src/data/roadmaps/ai-engineer/content/ai-agents@AeHkNU-uJ_gBdo5-xdpEu.md +++ b/src/data/roadmaps/ai-engineer/content/ai-agents@AeHkNU-uJ_gBdo5-xdpEu.md @@ -5,5 +5,5 @@ In AI engineering, "agents" refer to autonomous systems or components that can p Visit the following resources to learn more: - [@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/) +- [@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) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/anthropics-claude@hy6EyKiNxk1x84J63dhez.md b/src/data/roadmaps/ai-engineer/content/anthropics-claude@hy6EyKiNxk1x84J63dhez.md index 342e95411..0accafe1c 100644 --- a/src/data/roadmaps/ai-engineer/content/anthropics-claude@hy6EyKiNxk1x84J63dhez.md +++ b/src/data/roadmaps/ai-engineer/content/anthropics-claude@hy6EyKiNxk1x84J63dhez.md @@ -4,5 +4,5 @@ Anthropic's Claude is an AI language model designed to facilitate safe and scala Learn more from the following resources: -- [@official@Claude Website](https://claude.ai) -- [@video@How To Use Claude Pro For Beginners](https://www.youtube.com/watch?v=J3X_JWQkvo8) \ No newline at end of file +- [@official@Claude](https://claude.ai) +- [@video@How To Use Claude Pro For Beginners](https://www.youtube.com/watch?v=J3X_JWQkvo8) diff --git a/src/data/roadmaps/ai-engineer/content/cohere@a7qsvoauFe5u953I699ps.md b/src/data/roadmaps/ai-engineer/content/cohere@a7qsvoauFe5u953I699ps.md index 44f97a68f..7be6c2613 100644 --- a/src/data/roadmaps/ai-engineer/content/cohere@a7qsvoauFe5u953I699ps.md +++ b/src/data/roadmaps/ai-engineer/content/cohere@a7qsvoauFe5u953I699ps.md @@ -4,5 +4,5 @@ Cohere is an AI platform that specializes in natural language processing (NLP) b Learn more from the following resources: -- [@official@Cohere Website](https://cohere.com/) +- [@official@Cohere](https://cohere.com/) - [@article@What Does Cohere Do?](https://medium.com/geekculture/what-does-cohere-do-cdadf6d70435) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/data-classification@06Xta-OqSci05nV2QMFdF.md b/src/data/roadmaps/ai-engineer/content/data-classification@06Xta-OqSci05nV2QMFdF.md index 718dd6c34..11c899b0f 100644 --- a/src/data/roadmaps/ai-engineer/content/data-classification@06Xta-OqSci05nV2QMFdF.md +++ b/src/data/roadmaps/ai-engineer/content/data-classification@06Xta-OqSci05nV2QMFdF.md @@ -4,4 +4,5 @@ Once data is embedded, a classification algorithm, such as a neural network or a Learn more from the following resources: +- [@article@What Is Data Classification?](https://www.paloaltonetworks.com/cyberpedia/data-classification) - [@video@Text Embeddings, Classification, and Semantic Search (w/ Python Code)](https://www.youtube.com/watch?v=sNa_uiqSlJo) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/development-tools@NYge7PNtfI-y6QWefXJ4d.md b/src/data/roadmaps/ai-engineer/content/development-tools@NYge7PNtfI-y6QWefXJ4d.md index 9bb555b6b..86d04bfbc 100644 --- a/src/data/roadmaps/ai-engineer/content/development-tools@NYge7PNtfI-y6QWefXJ4d.md +++ b/src/data/roadmaps/ai-engineer/content/development-tools@NYge7PNtfI-y6QWefXJ4d.md @@ -5,6 +5,6 @@ AI has given rise to a collection of AI powered development tools of various dif Learn more from the following resources: - [@official@v0 Website](https://v0.dev) -- [@official@Aider - AI Pair Programming in Terminal](https://github.com/Aider-AI/aider) +- [@official@Aider - AI Pair Programming in Terminal](https://aider.chat/) - [@official@Replit AI](https://replit.com/ai) - [@official@Pieces](https://pieces.app) 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 2477aea69..38828d2fc 100644 --- a/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md +++ b/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md @@ -4,6 +4,6 @@ Hugging Face is a leading AI company and open-source platform that provides tool Learn more from the following resources: -- [@official@Hugging Face Website](https://huggingface.co) +- [@official@Hugging Face](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) diff --git a/src/data/roadmaps/ai-engineer/content/image-generation@49BWxYVFpIgZCCqsikH7l.md b/src/data/roadmaps/ai-engineer/content/image-generation@49BWxYVFpIgZCCqsikH7l.md index 8a04a69c3..aab24f8f7 100644 --- a/src/data/roadmaps/ai-engineer/content/image-generation@49BWxYVFpIgZCCqsikH7l.md +++ b/src/data/roadmaps/ai-engineer/content/image-generation@49BWxYVFpIgZCCqsikH7l.md @@ -4,6 +4,6 @@ Image generation is a process in artificial intelligence where models create new Learn more from the following resources: -- [@official@DALL-E Website](https://openai.com/index/dall-e-2/) +- [@official@DALL-E](https://openai.com/index/dall-e-2/) - [@article@How DALL-E 2 Actually Works](https://www.assemblyai.com/blog/how-dall-e-2-actually-works/) - [@video@How AI Image Generators Work (Stable Diffusion / Dall-E)](https://www.youtube.com/watch?v=1CIpzeNxIhU) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/image-understanding@fzVq4hGoa2gdbIzoyY1Zp.md b/src/data/roadmaps/ai-engineer/content/image-understanding@fzVq4hGoa2gdbIzoyY1Zp.md index b66821f06..ea06a7206 100644 --- a/src/data/roadmaps/ai-engineer/content/image-understanding@fzVq4hGoa2gdbIzoyY1Zp.md +++ b/src/data/roadmaps/ai-engineer/content/image-understanding@fzVq4hGoa2gdbIzoyY1Zp.md @@ -4,4 +4,4 @@ Multimodal AI enhances image understanding by integrating visual data with other Learn more from the following resources: -- [@article@Low or high fidelity image understanding - OpenAI](https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding) \ No newline at end of file +- [@article@Low or High Fidelity Image Understanding - OpenAI](https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/langchain-for-multimodal-apps@j9zD3pHysB1CBhLfLjhpD.md b/src/data/roadmaps/ai-engineer/content/langchain-for-multimodal-apps@j9zD3pHysB1CBhLfLjhpD.md index dfadc05c9..79a9b085d 100644 --- a/src/data/roadmaps/ai-engineer/content/langchain-for-multimodal-apps@j9zD3pHysB1CBhLfLjhpD.md +++ b/src/data/roadmaps/ai-engineer/content/langchain-for-multimodal-apps@j9zD3pHysB1CBhLfLjhpD.md @@ -4,5 +4,5 @@ LangChain is a framework designed to build applications that integrate multiple Learn more from the following resources: -- [@official@LangChain Website](https://www.langchain.com/) +- [@official@LangChain](https://www.langchain.com/) - [@video@Build a Multimodal GenAI App with LangChain and Gemini LLMs](https://www.youtube.com/watch?v=bToMzuiOMhg) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/mistral-ai@n-Ud2dXkqIzK37jlKItN4.md b/src/data/roadmaps/ai-engineer/content/mistral-ai@n-Ud2dXkqIzK37jlKItN4.md index 1f44bc6b6..c417d9496 100644 --- a/src/data/roadmaps/ai-engineer/content/mistral-ai@n-Ud2dXkqIzK37jlKItN4.md +++ b/src/data/roadmaps/ai-engineer/content/mistral-ai@n-Ud2dXkqIzK37jlKItN4.md @@ -4,5 +4,5 @@ Mistral AI is a company focused on developing open-weight, large language models Learn more from the resources: -- [@official@Minstral AI Website](https://mistral.ai/) +- [@official@Mistral AI](https://mistral.ai/) - [@video@Mistral AI: The Gen AI Start-up you did not know existed](https://www.youtube.com/watch?v=vzrRGd18tAg) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md b/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md index 488f0d6d9..826d4eb98 100644 --- a/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md +++ b/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md @@ -4,5 +4,5 @@ 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/) +- [@official@Ollama](https://ollama.com/) - [@article@Ollama: Easily run LLMs locally](https://klu.ai/glossary/ollama) diff --git a/src/data/roadmaps/ai-engineer/content/open-source-embeddings@apVYIV4EyejPft25oAvdI.md b/src/data/roadmaps/ai-engineer/content/open-source-embeddings@apVYIV4EyejPft25oAvdI.md index f8debd838..6a755f030 100644 --- a/src/data/roadmaps/ai-engineer/content/open-source-embeddings@apVYIV4EyejPft25oAvdI.md +++ b/src/data/roadmaps/ai-engineer/content/open-source-embeddings@apVYIV4EyejPft25oAvdI.md @@ -1,3 +1,8 @@ # Open-Source Embeddings -Open-source embeddings are pre-trained vector representations of data, usually text, that are freely available for use and modification. These embeddings capture semantic meanings, making them useful for tasks like semantic search, text classification, and clustering. Examples include Word2Vec, GloVe, and FastText, which represent words as vectors based on their context in large corpora, and more advanced models like Sentence-BERT and CLIP that provide embeddings for sentences and images. Open-source embeddings allow developers to leverage pre-trained models without starting from scratch, enabling faster development and experimentation in natural language processing and other AI applications. \ No newline at end of file +Open-source embeddings are pre-trained vector representations of data, usually text, that are freely available for use and modification. These embeddings capture semantic meanings, making them useful for tasks like semantic search, text classification, and clustering. Examples include Word2Vec, GloVe, and FastText, which represent words as vectors based on their context in large corpora, and more advanced models like Sentence-BERT and CLIP that provide embeddings for sentences and images. Open-source embeddings allow developers to leverage pre-trained models without starting from scratch, enabling faster development and experimentation in natural language processing and other AI applications. + +Learn more from the following resources: + +- [@official@Embeddings](https://platform.openai.com/docs/guides/embeddings) +- [@article@A Guide to Open-Source Embedding Models](https://www.bentoml.com/blog/a-guide-to-open-source-embedding-models) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/openai-api@zdeuA4GbdBl2DwKgiOA4G.md b/src/data/roadmaps/ai-engineer/content/openai-api@zdeuA4GbdBl2DwKgiOA4G.md index 912c5feff..d3ece72be 100644 --- a/src/data/roadmaps/ai-engineer/content/openai-api@zdeuA4GbdBl2DwKgiOA4G.md +++ b/src/data/roadmaps/ai-engineer/content/openai-api@zdeuA4GbdBl2DwKgiOA4G.md @@ -4,4 +4,4 @@ The OpenAI API provides access to powerful AI models like GPT, Codex, DALL-E, an Learn more from the following resources: -- [@official@Open AI API](https://openai.com/api/) +- [@official@OpenAI API](https://openai.com/api/) diff --git a/src/data/roadmaps/ai-engineer/content/performing-similarity-search@ZcbRPtgaptqKqWBgRrEBU.md b/src/data/roadmaps/ai-engineer/content/performing-similarity-search@ZcbRPtgaptqKqWBgRrEBU.md index a70242e99..cb570dab3 100644 --- a/src/data/roadmaps/ai-engineer/content/performing-similarity-search@ZcbRPtgaptqKqWBgRrEBU.md +++ b/src/data/roadmaps/ai-engineer/content/performing-similarity-search@ZcbRPtgaptqKqWBgRrEBU.md @@ -1,3 +1,7 @@ # Performing Similarity Search -In a similarity search, the process begins by converting the user’s query (such as a piece of text or an image) into an embedding—a vector representation that captures the query’s semantic meaning. This embedding is generated using a pre-trained model, such as BERT for text or a neural network for images. Once the query is converted into a vector, it is compared to the embeddings stored in the vector database. \ No newline at end of file +In a similarity search, the process begins by converting the user’s query (such as a piece of text or an image) into an embedding—a vector representation that captures the query’s semantic meaning. This embedding is generated using a pre-trained model, such as BERT for text or a neural network for images. Once the query is converted into a vector, it is compared to the embeddings stored in the vector database. + +Visit the following resources to learn more: + +- [@article@What is Similarity Search & How Does it work?](https://www.truefoundry.com/blog/similarity-search) \ No newline at end of file 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 c5e18ac5d..70dfcf5c8 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,5 +4,5 @@ Open-source large language models (LLMs) are models whose source code and archit Learn more from the following resources: -- [@article@The best large language models (LLMs) in 2024](https://zapier.com/blog/best-llm/) +- [@article@The Best Large Language Models (LLMs) in 2024](https://zapier.com/blog/best-llm/) - [@article@8 Top Open-Source LLMs for 2024 and Their Uses](https://www.datacamp.com/blog/top-open-source-llms) diff --git a/src/data/roadmaps/ai-engineer/content/pricing-considerations@4GArjDYipit4SLqKZAWDf.md b/src/data/roadmaps/ai-engineer/content/pricing-considerations@4GArjDYipit4SLqKZAWDf.md index 8684a39f3..bf381af7a 100644 --- a/src/data/roadmaps/ai-engineer/content/pricing-considerations@4GArjDYipit4SLqKZAWDf.md +++ b/src/data/roadmaps/ai-engineer/content/pricing-considerations@4GArjDYipit4SLqKZAWDf.md @@ -2,4 +2,6 @@ The pricing for the OpenAI Embedding API is based on the number of tokens processed and the specific embedding model used. Costs are determined by the total tokens needed to generate embeddings, so longer texts will result in higher charges. To manage costs, developers can optimize by shortening inputs or batching requests. Additionally, selecting the right embedding model for your performance and budget requirements, along with monitoring token usage, can help control expenses. -- [@official@OpenAI API Pricing](https://openai.com/api/pricing/) \ No newline at end of file +Visit the following resources to learn more: + +- [@official@OpenAI Pricing](https://openai.com/api/pricing/) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/prompt-engineering@Dc15ayFlzqMF24RqIF_-X.md b/src/data/roadmaps/ai-engineer/content/prompt-engineering@Dc15ayFlzqMF24RqIF_-X.md index e90c713f3..c4355a8e4 100644 --- a/src/data/roadmaps/ai-engineer/content/prompt-engineering@Dc15ayFlzqMF24RqIF_-X.md +++ b/src/data/roadmaps/ai-engineer/content/prompt-engineering@Dc15ayFlzqMF24RqIF_-X.md @@ -4,5 +4,5 @@ Prompt engineering is the process of crafting effective inputs (prompts) to guid Learn more from the following resources: -- [@roadmap@Visit DedicatedPrompt Engineering Roadmap](https://roadmap.sh/prompt-engineering) +- [@roadmap@Visit Dedicated Prompt Engineering Roadmap](https://roadmap.sh/prompt-engineering) - [@video@What is Prompt Engineering?](https://www.youtube.com/watch?v=nf1e-55KKbg) diff --git a/src/data/roadmaps/ai-engineer/content/prompt-injection-attacks@cUyLT6ctYQ1pgmodCKREq.md b/src/data/roadmaps/ai-engineer/content/prompt-injection-attacks@cUyLT6ctYQ1pgmodCKREq.md index 617e45e3a..1edf96666 100644 --- a/src/data/roadmaps/ai-engineer/content/prompt-injection-attacks@cUyLT6ctYQ1pgmodCKREq.md +++ b/src/data/roadmaps/ai-engineer/content/prompt-injection-attacks@cUyLT6ctYQ1pgmodCKREq.md @@ -5,4 +5,4 @@ Prompt injection attacks are a type of security vulnerability where malicious in Learn more from the following resources: - [@article@Prompt Injection in LLMs](https://www.promptingguide.ai/prompts/adversarial-prompting/prompt-injection) -- [@article@What is a prompt injection attack?](https://www.wiz.io/academy/prompt-injection-attack) \ No newline at end of file +- [@article@What is a Prompt Injection Attack?](https://www.wiz.io/academy/prompt-injection-attack) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/rag@9JwWIK0Z2MK8-6EQQJsCO.md b/src/data/roadmaps/ai-engineer/content/rag@9JwWIK0Z2MK8-6EQQJsCO.md index 4a47a8d01..b84c38c05 100644 --- a/src/data/roadmaps/ai-engineer/content/rag@9JwWIK0Z2MK8-6EQQJsCO.md +++ b/src/data/roadmaps/ai-engineer/content/rag@9JwWIK0Z2MK8-6EQQJsCO.md @@ -4,6 +4,6 @@ Retrieval-Augmented Generation (RAG) is an AI approach that combines information Learn more from the following resources: -- [@article@What is Retrieval Augmented Generation (RAG)?](https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag) -- [@article@What is Retrieval-Augmented Generation? Google](https://cloud.google.com/use-cases/retrieval-augmented-generation) -- [@video@What is Retrieval-Augmented Generation? IBM](https://www.youtube.com/watch?v=T-D1OfcDW1M) \ No newline at end of file +- [@article@What is Retrieval Augmented Generation (RAG)? - Datacamp](https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag) +- [@article@What is Retrieval-Augmented Generation? - Google](https://cloud.google.com/use-cases/retrieval-augmented-generation) +- [@video@What is Retrieval-Augmented Generation? - IBM](https://www.youtube.com/watch?v=T-D1OfcDW1M) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/recommendation-systems@HQe9GKy3p0kTUPxojIfSF.md b/src/data/roadmaps/ai-engineer/content/recommendation-systems@HQe9GKy3p0kTUPxojIfSF.md index 23ac1e5ff..6a9bc1ec6 100644 --- a/src/data/roadmaps/ai-engineer/content/recommendation-systems@HQe9GKy3p0kTUPxojIfSF.md +++ b/src/data/roadmaps/ai-engineer/content/recommendation-systems@HQe9GKy3p0kTUPxojIfSF.md @@ -4,5 +4,5 @@ In the context of embeddings, recommendation systems use vector representations Learn more from the following resources: -- [@article@What role does AI play in recommendation systems and engines?](https://www.algolia.com/blog/ai/what-role-does-ai-play-in-recommendation-systems-and-engines/) -- [@article@What is a recommendation engine?](https://www.ibm.com/think/topics/recommendation-engine) \ No newline at end of file +- [@article@What Role does AI Play in Recommendation Systems and Engines?](https://www.algolia.com/blog/ai/what-role-does-ai-play-in-recommendation-systems-and-engines/) +- [@article@What is a Recommendation Engine?](https://www.ibm.com/think/topics/recommendation-engine) diff --git a/src/data/roadmaps/ai-engineer/content/replicate@c0RPhpD00VIUgF4HJgN2T.md b/src/data/roadmaps/ai-engineer/content/replicate@c0RPhpD00VIUgF4HJgN2T.md index 5ba5f0df6..5f95c999f 100644 --- a/src/data/roadmaps/ai-engineer/content/replicate@c0RPhpD00VIUgF4HJgN2T.md +++ b/src/data/roadmaps/ai-engineer/content/replicate@c0RPhpD00VIUgF4HJgN2T.md @@ -4,5 +4,5 @@ Replicate is a platform that allows developers to run machine learning models in Learn more from the following resources: -- [@official@Replicate Website](https://replicate.com/) +- [@official@Replicate](https://replicate.com/) - [@video@Replicate.com Beginners Tutorial](https://www.youtube.com/watch?v=y0_GE5ErqY8) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/vector-database@zZA1FBhf1y4kCoUZ-hM4H.md b/src/data/roadmaps/ai-engineer/content/vector-database@zZA1FBhf1y4kCoUZ-hM4H.md index f9d915e5f..d241eea65 100644 --- a/src/data/roadmaps/ai-engineer/content/vector-database@zZA1FBhf1y4kCoUZ-hM4H.md +++ b/src/data/roadmaps/ai-engineer/content/vector-database@zZA1FBhf1y4kCoUZ-hM4H.md @@ -5,4 +5,4 @@ When implementing Retrieval-Augmented Generation (RAG), a vector database is use Learn more from the following resources: - [@article@How to Implement Graph RAG Using Knowledge Graphs and Vector Databases](https://towardsdatascience.com/how-to-implement-graph-rag-using-knowledge-graphs-and-vector-databases-60bb69a22759) -- [@article@Retrieval Augmented Generation (RAG) with vector databases: Expanding AI Capabilities](https://objectbox.io/retrieval-augmented-generation-rag-with-vector-databases-expanding-ai-capabilities/) +- [@article@Retrieval Augmented Generation (RAG) with Vector Databases: Expanding AI Capabilities](https://objectbox.io/retrieval-augmented-generation-rag-with-vector-databases-expanding-ai-capabilities/) 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 90a60536b..90a559afa 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 @@ -5,5 +5,5 @@ AI engineers are professionals who specialize in designing, developing, and impl Visit the following resources to learn more: - [@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) +- [@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) diff --git a/src/data/roadmaps/ai-engineer/content/writing-prompts@9-5DYeOnKJq9XvEMWP45A.md b/src/data/roadmaps/ai-engineer/content/writing-prompts@9-5DYeOnKJq9XvEMWP45A.md index 637429aeb..0a1691183 100644 --- a/src/data/roadmaps/ai-engineer/content/writing-prompts@9-5DYeOnKJq9XvEMWP45A.md +++ b/src/data/roadmaps/ai-engineer/content/writing-prompts@9-5DYeOnKJq9XvEMWP45A.md @@ -5,5 +5,5 @@ Prompts for the OpenAI API are carefully crafted inputs designed to guide the la Learn more from the following resources: - [@roadmap@Visit Dedicated Prompt Engineering Roadmap](https://roadmap.sh/prompt-engineering) -- [@article@How to write AI prompts](https://www.descript.com/blog/article/how-to-write-ai-prompts) +- [@article@How to Write AI prompts](https://www.descript.com/blog/article/how-to-write-ai-prompts) - [@article@Prompt Engineering Guide](https://www.promptingguide.ai/) diff --git a/src/data/roadmaps/angular/content/component-lifecycle@nCpfj_35ZvW-NTygg06XZ.md b/src/data/roadmaps/angular/content/component-lifecycle@nCpfj_35ZvW-NTygg06XZ.md index cb563f8d6..99e31ff21 100644 --- a/src/data/roadmaps/angular/content/component-lifecycle@nCpfj_35ZvW-NTygg06XZ.md +++ b/src/data/roadmaps/angular/content/component-lifecycle@nCpfj_35ZvW-NTygg06XZ.md @@ -12,4 +12,5 @@ Visit the following resources to learn more: - [@official@Component Lifecycle](https://angular.dev/guide/components/lifecycle) - [@article@The life cycle hooks of angular - Blog ](https://blog.logrocket.com/angular-lifecycle-hooks/) -- [@feed@Explore top posts about React Hooks](https://app.daily.dev/tags/react-hooks?ref=roadmapsh) +- [@article@Angular Lifecycle Hooks — Everything you need to know](https://medium.com/@sinanozturk/angular-component-lifecycle-hooks-2f600c48dff3) +- [@feed@Explore top posts about Angular LifeCycle Hooks](https://dev.to/search?utf8=%E2%9C%93&q=angular+hook) \ No newline at end of file diff --git a/src/data/roadmaps/angular/content/reactive-forms@1d3Y4HVnqom8UOok-7EEf.md b/src/data/roadmaps/angular/content/reactive-forms@1d3Y4HVnqom8UOok-7EEf.md index f5a000b79..1ffeb5244 100644 --- a/src/data/roadmaps/angular/content/reactive-forms@1d3Y4HVnqom8UOok-7EEf.md +++ b/src/data/roadmaps/angular/content/reactive-forms@1d3Y4HVnqom8UOok-7EEf.md @@ -5,7 +5,6 @@ Reactive Forms in angular are those which used to handle the inputs coming from Visit the following resources to learn more: - [@official@Reactive forms - Angular](https://angular.dev/guide/forms/reactive-forms) -- [@article@Angular Reactive Forms](https://www.javatpoint.com/angular-reactive-forms) - [@article@How To Use Reactive Forms in Angular](https://www.digitalocean.com/community/tutorials/angular-reactive-forms-introduction) - [@video@Reactive Form in Angular](https://www.youtube.com/watch?v=8k4ctDmVn7w) - [@feed@Explore top posts about General Programming](https://app.daily.dev/tags/general-programming?ref=roadmapsh) diff --git a/src/data/roadmaps/angular/content/services---remote-data@CpsoIVoCKaZnM_-BbXbCh.md b/src/data/roadmaps/angular/content/services---remote-data@CpsoIVoCKaZnM_-BbXbCh.md index 37d93cae7..b84e0883d 100644 --- a/src/data/roadmaps/angular/content/services---remote-data@CpsoIVoCKaZnM_-BbXbCh.md +++ b/src/data/roadmaps/angular/content/services---remote-data@CpsoIVoCKaZnM_-BbXbCh.md @@ -5,6 +5,4 @@ Services let you define code or functionalities that are then accessible and reu Visit the following resources to learn more: - [@official@Creating an injectable service](https://angular.dev/guide/di/creating-injectable-service) -- [@article@What is an Angular Service](https://www.javatpoint.com/what-is-an-angular-service) - [@article@Service for API Calls](https://www.knowledgehut.com/blog/web-development/make-api-calls-angular) -- [@article@Service Tutorial with Example](https://www.positronx.io/angular-service-tutorial-with-example/) diff --git a/src/data/roadmaps/angular/content/typed-forms@XC_K1Wahl2ySqOXoym4YU.md b/src/data/roadmaps/angular/content/typed-forms@XC_K1Wahl2ySqOXoym4YU.md index bf70ddbc9..b33d6f098 100644 --- a/src/data/roadmaps/angular/content/typed-forms@XC_K1Wahl2ySqOXoym4YU.md +++ b/src/data/roadmaps/angular/content/typed-forms@XC_K1Wahl2ySqOXoym4YU.md @@ -4,7 +4,7 @@ Since Angular 14, reactive forms are strictly typed by default. You don't have t Visit the following resources to learn more: -- [@official@Angular Official Docs - @let](https://angular.dev/api/core/@let) +- [@official@Angular Official Docs - Typed Forms](https://angular.dev/guide/forms/typed-forms) - [@article@Angular Strictly Typed Forms (Complete Guide)](https://blog.angular-university.io/angular-typed-forms/) - [@video@Getting started with typed reactive forms in Angular](https://www.youtube.com/watch?v=mT3UR0TdDnU) - [@video@Angular TYPED Forms: Are You Using Them Correctly?](https://www.youtube.com/watch?v=it2BZoIvBPc) diff --git a/src/data/roadmaps/api-design/content/cookies@UFuX8wcxZQ7dvaQF_2Yp8.md b/src/data/roadmaps/api-design/content/cookies@UFuX8wcxZQ7dvaQF_2Yp8.md index 284909b9f..ec8665ac3 100644 --- a/src/data/roadmaps/api-design/content/cookies@UFuX8wcxZQ7dvaQF_2Yp8.md +++ b/src/data/roadmaps/api-design/content/cookies@UFuX8wcxZQ7dvaQF_2Yp8.md @@ -5,4 +5,4 @@ Cookies play an instrumental role in the field of API (Application Programming I Learn more from the following resources: - [@article@What Are API Cookies? How to Send it?](https://apidog.com/articles/what-are-api-cookies/) -- [@article@Cookies - Mozilla](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies) +- [@article@Using HTTP cookies - Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) diff --git a/src/data/roadmaps/aspnet-core/aspnet-core.json b/src/data/roadmaps/aspnet-core/aspnet-core.json index 3f1bc7112..370337a7a 100644 --- a/src/data/roadmaps/aspnet-core/aspnet-core.json +++ b/src/data/roadmaps/aspnet-core/aspnet-core.json @@ -1 +1 @@ -{"nodes":[{"id":"yWM-Hgse9GqGipTO1pXVK","type":"section","position":{"x":31.571876400857263,"y":2792.4846359444336},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff"}},"zIndex":-999,"width":231,"height":344,"style":{"width":231,"height":344},"positionAbsolute":{"x":31.571876400857263,"y":2792.4846359444336},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ocJ-ND5jn9s-ACTAPZKZb","type":"vertical","position":{"x":433.5766878818748,"y":2747.005494878551},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75},"oldId":"wyzDVcQ87PRh0y2LIfvSU"},"zIndex":999,"width":20,"height":107,"style":{"width":20,"height":107},"positionAbsolute":{"x":433.5766878818748,"y":2747.005494878551},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"wvA5Bi-SaA61FAso8NPj8","type":"vertical","position":{"x":151.8791275129173,"y":2405.055709851968},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75,"strokeDasharray":"0.8 8","strokeLinecap":"round"}},"zIndex":999,"width":20,"height":90,"style":{"width":20,"height":90},"positionAbsolute":{"x":151.8791275129173,"y":2405.055709851968},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"fSm0vh6u_Lk7esx8BSte8","type":"horizontal","position":{"x":-42.04576166270948,"y":2081.176280366376},"selected":true,"data":{"label":"horizontal node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":82,"height":20,"style":{"width":82,"height":20},"positionAbsolute":{"x":-42.04576166270948,"y":2081.176280366376},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"yasP_jzx1hhGoZZnR0mXU","type":"section","position":{"x":-277.67187829620605,"y":2040.5330508465236},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":238,"height":899,"style":{"width":238,"height":899},"resizing":false,"positionAbsolute":{"x":-277.67187829620605,"y":2040.5330508465236},"dragging":false,"selectable":true,"focusable":true},{"id":"_y6A_pwr-8jDIOoLx9QHC","type":"vertical","position":{"x":164.89029212267985,"y":492.75823396078783},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":70,"style":{"width":20,"height":70},"positionAbsolute":{"x":164.89029212267985,"y":492.75823396078783},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"c8c-AWby5x5_eEF4QLEgX","type":"horizontal","position":{"x":156.59496979792925,"y":1986.960323803236},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.5,"strokeDasharray":"0.8 8","strokeLinecap":"round"}},"zIndex":999,"width":152,"height":20,"style":{"width":152,"height":20},"positionAbsolute":{"x":156.59496979792925,"y":1986.960323803236},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"BM8AtRoLAVTmjucTfCoVG","type":"section","position":{"x":313.1557525665048,"y":1799.1664942178645},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":462,"height":609,"style":{"width":462,"height":609},"resizing":false,"positionAbsolute":{"x":313.1557525665048,"y":1799.1664942178645},"selectable":true,"focusable":true,"dragging":false},{"id":"UwJdUMdYf1qAlMHOdcLPK","type":"vertical","position":{"x":25.04192151113341,"y":1773.460323803236},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.75,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":132,"style":{"width":20,"height":132},"positionAbsolute":{"x":25.04192151113341,"y":1773.460323803236},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"WYon24IKmo8fX_nAQh7YS","type":"horizontal","position":{"x":178.92830313126262,"y":1560.9442094125654},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.5}},"zIndex":999,"width":317,"height":20,"style":{"width":317,"height":20},"resizing":false,"dragging":false,"positionAbsolute":{"x":178.92830313126262,"y":1560.9442094125654},"selectable":true,"focusable":true},{"id":"yMcSPPCMSvCYoh8i3x3d1","type":"vertical","position":{"x":714.6445601795068,"y":1475.0968472714264},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":180,"style":{"width":20,"height":180},"positionAbsolute":{"x":714.6445601795068,"y":1475.0968472714264},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"Aic1j37JF27iDpCwYWeA6","type":"vertical","position":{"x":571.9641965658323,"y":1475.9442094125654},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"},"oldId":"yMcSPPCMSvCYoh8i3x3d1"},"zIndex":999,"width":20,"height":78,"style":{"width":20,"height":78},"positionAbsolute":{"x":571.9641965658323,"y":1475.9442094125654},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"bm3XEtLCUU23rU2HhHnSY","type":"horizontal","position":{"x":267.9283031312626,"y":1540.9442094125654},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.5},"oldId":"WYon24IKmo8fX_nAQh7YS"},"zIndex":999,"width":228,"height":20,"style":{"width":228,"height":20},"resizing":false,"dragging":false,"positionAbsolute":{"x":267.9283031312626,"y":1540.9442094125654},"selectable":true,"focusable":true},{"id":"LK_owhdD3K5uAYG5fD92w","type":"vertical","position":{"x":257.39029212267985,"y":1376.0968472714264},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.5}},"zIndex":999,"width":20,"height":177,"style":{"width":20,"height":177},"positionAbsolute":{"x":257.39029212267985,"y":1376.0968472714264},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"UK9l45WqokS_YM1P8-v3A","type":"vertical","position":{"x":323.6803864110923,"y":1281.065016026603},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":80,"style":{"width":20,"height":80},"positionAbsolute":{"x":323.6803864110923,"y":1281.065016026603},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"XSavYIlcsJ3APyYQypnBc","type":"horizontal","position":{"x":79.81132975781338,"y":1080.6168625008675},"selected":true,"data":{"label":"horizontal node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":141,"height":20,"style":{"width":141,"height":20},"positionAbsolute":{"x":79.81132975781338,"y":1080.6168625008675},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ZTsi2oL00lox_bz27-hDO","type":"section","position":{"x":-288.1886702421866,"y":1021.4442094125654},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":371,"height":461,"style":{"width":371,"height":461},"resizing":false,"positionAbsolute":{"x":-288.1886702421866,"y":1021.4442094125654},"dragging":false,"selectable":true,"focusable":true},{"id":"h2z_qviXhvmdnwk5eiA05","type":"section","position":{"x":27.95423833729052,"y":672.4543464224016},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":189,"height":156,"style":{"width":189,"height":156},"positionAbsolute":{"x":27.95423833729052,"y":672.4543464224016},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"qGXjjY3jOUKsBdXqFJVnv","type":"horizontal","position":{"x":103.11914288676098,"y":951.6516938508362},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":272,"height":20,"style":{"width":272,"height":20},"positionAbsolute":{"x":103.11914288676098,"y":951.6516938508362},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ieJjbRAxSGYLPkmaWFJus","type":"vertical","position":{"x":256.89029212267985,"y":485.18247733449107},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":20,"height":582,"style":{"width":20,"height":582},"positionAbsolute":{"x":256.89029212267985,"y":485.18247733449107},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"_JbWIWlgwaMHYYi8W48oO","type":"section","position":{"x":640.5854863036282,"y":756.9078325432466},"width":149,"height":196,"style":{"width":149,"height":196},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":640.5854863036282,"y":756.9078325432466},"dragging":false,"selectable":true,"focusable":true},{"id":"_-k1suoaD64ZOMLrS2OeH","type":"vertical","position":{"x":536.3768792343918,"y":884.1516938508362},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":185,"style":{"width":20,"height":185},"positionAbsolute":{"x":536.3768792343918,"y":884.1516938508362},"dragging":false,"resizing":true,"selectable":true,"focusable":true},{"id":"uT9PXHnbTWga5vLIfBr50","type":"section","position":{"x":494.9283031312626,"y":1048.1168625008675},"width":287,"height":152,"style":{"width":287,"height":152},"selected":true,"data":{},"positionAbsolute":{"x":494.9283031312626,"y":1048.1168625008675},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"fUyJsuZx-zLIz_nQ8HZRl","type":"vertical","position":{"x":363.3768792343918,"y":486.18247733449107},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"},"oldId":"_y6A_pwr-8jDIOoLx9QHC"},"zIndex":999,"width":20,"height":75,"style":{"width":20,"height":75},"positionAbsolute":{"x":363.3768792343918,"y":486.18247733449107},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"coNWBnrx1oAfS9UgILkSJ","type":"section","position":{"x":328.96419656583225,"y":556.1824773344911},"width":293,"height":279,"style":{"width":293,"height":279},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":328.96419656583225,"y":556.1824773344911},"dragging":false,"focusable":true,"selectable":true,"resizing":false},{"id":"DVPKdE0w11vA197x__RXo","type":"vertical","position":{"x":-114.84081712321631,"y":375.8564029892008},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.5,"strokeDasharray":"0.8 8","strokeLinecap":"round"}},"zIndex":999,"width":14,"height":108,"style":{"width":14.339111328125,"height":107.5435791015625},"positionAbsolute":{"x":-114.84081712321631,"y":375.8564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"qw0r959sbdXLP0-GYBf5w","type":"vertical","position":{"x":-237.8408171232163,"y":375.8564029892008},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.5,"strokeDasharray":"0.8 8","strokeLinecap":"round"},"oldId":"DVPKdE0w11vA197x__RXo"},"zIndex":999,"width":14,"height":108,"style":{"width":14.339111328125,"height":107.5435791015625},"positionAbsolute":{"x":-237.8408171232163,"y":375.8564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"c58fcsthBlVfzfr-MHdpF","type":"vertical","position":{"x":256.89029212267985,"y":-109.59925177765109},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":66,"positionAbsolute":{"x":256.89029212267985,"y":-109.59925177765109},"dragging":false,"style":{"width":20,"height":66},"resizing":false,"selectable":true,"focusable":true},{"id":"Ji35JsKgUQXN4DJGEgTAC","type":"title","position":{"x":156.89029212267985,"y":-43.59925177765109},"selected":true,"data":{"label":"ASP.NET Core","style":{"fontSize":28,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":220,"height":68,"positionAbsolute":{"x":156.89029212267985,"y":-43.59925177765109},"dragging":false,"selectable":true,"focusable":true,"style":{}},{"id":"kpF15oUmlUmk1qVGEBB7Y","type":"paragraph","position":{"x":421.119142886761,"y":-115.9573697023546},"selected":true,"data":{"label":"Find the detailed version of this roadmap along with other similar roadmaps","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"left","borderColor":"#000000","backgroundColor":"#FFFFFf"},"oldId":"yHmHXymPNWwu8p1vvqD3o"},"zIndex":999,"width":354,"height":143,"positionAbsolute":{"x":421.119142886761,"y":-115.9573697023546},"dragging":false,"selectable":true,"focusable":true,"style":{"width":354,"height":143},"resizing":false},{"id":"if9eTna5NRTMStVwpSwDP","type":"button","position":{"x":433.619142886761,"y":-34.09925177765109},"selected":true,"data":{"label":"roadmap.sh","href":"https://roadmap.sh","color":"#ffffff","backgroundColor":"#4136D6","style":{"fontSize":17},"oldId":"2zqZkyVgigifcRS1H7F_b"},"zIndex":999,"width":329,"height":49,"dragging":false,"style":{"width":329,"height":49},"resizing":false,"positionAbsolute":{"x":433.619142886761,"y":-34.09925177765109},"selectable":true,"focusable":true},{"id":"g4hjyQF8-SpjPi8mYtIsk","type":"vertical","position":{"x":256.89029212267985,"y":15.028193715390685},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.5}},"zIndex":999,"width":20,"height":99,"style":{"width":20,"height":99},"positionAbsolute":{"x":256.89029212267985,"y":15.028193715390685},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"width":411,"height":121,"id":"0vLaVNJaJSHZ_bHli6Qzs","type":"paragraph","position":{"x":329.993752405053,"y":3007.488386939488},"selected":true,"data":{"label":"Visit Backend path and see what you missed","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","borderColor":"#000000","backgroundColor":"WHITe"},"oldId":"m9eO0jLGuR_9w2JJbe_g2"},"zIndex":999,"positionAbsolute":{"x":329.993752405053,"y":3007.488386939488},"dragging":false,"style":{"width":411,"height":121},"resizing":false,"focusable":true,"selectable":true},{"width":20,"height":85,"id":"xi0QAi4kXm3-IFKgopnOP","type":"vertical","position":{"x":433.5766878818748,"y":3128.488386939488},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"},"oldId":"RLtk1C3gofHnLJ17x3o5b"},"zIndex":999,"positionAbsolute":{"x":433.5766878818748,"y":3128.488386939488},"dragging":false,"focusable":true,"style":{"width":20,"height":85},"resizing":false,"selectable":true},{"width":377,"height":49,"id":"-sFboM4eFUMVq1tlPl-fV","type":"button","position":{"x":352.68684756812684,"y":3064.2129376580287},"selected":true,"data":{"label":"Backend Roadmap","href":"https://roadmap.sh/backend","color":"#FFFFFf","backgroundColor":"#4136D6","style":{"fontSize":17},"borderColor":"#4136D6","oldId":"qXKNK_IsGS8-JgLK-Q9oU"},"zIndex":999,"dragging":false,"positionAbsolute":{"x":352.68684756812684,"y":3064.2129376580287},"style":{"width":377,"height":49},"focusable":true,"resizing":false,"selectable":true},{"id":"NEnna_8DstfYH4T9qrP3-","type":"topic","position":{"x":128.89029212267985,"y":216.72101054939196},"selected":true,"data":{"label":"General Development Skills","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":276,"height":49,"style":{"width":276,"height":49},"dragging":false,"positionAbsolute":{"x":128.89029212267985,"y":216.72101054939196},"focusable":true,"selectable":true},{"id":"fxANnSiTb2VzA9u-YeBL1","type":"subtopic","position":{"x":535.7391698372666,"y":51.94269326868894},"selected":true,"data":{"label":"C#","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":235,"height":49,"style":{"width":235,"height":49},"positionAbsolute":{"x":535.7391698372666,"y":51.94269326868894},"dragging":false,"focusable":true,"resizing":false,"selectable":true},{"id":"3GGvuxdfuDwLpNX_gtjCK","type":"subtopic","position":{"x":535.7391698372666,"y":104.94269326868894},"selected":true,"data":{"label":".NET","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":112,"height":49,"style":{"width":112,"height":49},"positionAbsolute":{"x":535.7391698372666,"y":104.94269326868894},"dragging":false,"focusable":true,"resizing":false,"selectable":true},{"id":"6HJQ1Evgah0Pki04Z2hQt","type":"subtopic","position":{"x":652.3038707552415,"y":104.94269326868894},"selected":true,"data":{"label":".NET CLI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":118,"height":49,"style":{"width":118,"height":49},"resizing":false,"positionAbsolute":{"x":652.3038707552415,"y":104.94269326868894},"dragging":false,"focusable":true,"selectable":true},{"id":"NvODRFR0DLINB0RlPSsvt","type":"topic","position":{"x":128.89029212267985,"y":107.76582156925141},"selected":true,"data":{"label":"Learn the Basics of C#","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":276,"height":49,"style":{"width":276,"height":49},"positionAbsolute":{"x":128.89029212267985,"y":107.76582156925141},"dragging":false,"resizing":false,"focusable":true,"selectable":true},{"id":"OtdCmkj0SvrGwCUSfm96C","type":"subtopic","position":{"x":-279.57383949457864,"y":143.02155144086436},"selected":true,"data":{"label":"Git - Version Control","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":296,"height":43,"style":{"width":296,"height":43},"positionAbsolute":{"x":-279.57383949457864,"y":143.02155144086436},"dragging":false,"focusable":true,"selectable":true},{"id":"KAZF-mIg-FlfMonfdOLhb","type":"subtopic","position":{"x":-279.57383949457864,"y":193.02155144086436},"selected":true,"data":{"label":"GitHub, GitLab, BitBucket","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":296,"height":49,"style":{"width":296,"height":49},"positionAbsolute":{"x":-279.57383949457864,"y":193.02155144086436},"dragging":false,"focusable":true,"selectable":true},{"id":"YI3cAezupWNntFw4B6elY","type":"subtopic","position":{"x":-279.57383949457864,"y":246.02155144086436},"selected":true,"data":{"label":"HTTP / HTTPs Protocol","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":296,"height":49,"style":{"width":296,"height":49},"positionAbsolute":{"x":-279.57383949457864,"y":246.02155144086436},"dragging":false,"focusable":true,"selectable":true},{"id":"RAX2xN37taw9cqA3pnORh","type":"subtopic","position":{"x":-279.57383949457864,"y":299.02155144086436},"selected":true,"data":{"label":"Data Structures and Algorithms","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":296,"height":49,"style":{"width":296,"height":49},"resizing":false,"positionAbsolute":{"x":-279.57383949457864,"y":299.02155144086436},"dragging":false,"focusable":true,"selectable":true},{"id":"tnKUdsgp6bnFtQTexEmfy","type":"topic","position":{"x":128.89029212267985,"y":372.3564029892008},"selected":true,"data":{"label":"Database Fundamentals","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":276,"height":49,"style":{"width":276,"height":49},"resizing":false,"positionAbsolute":{"x":128.89029212267985,"y":372.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"aOJMVrTcA_I2y_QHzj7aM","type":"subtopic","position":{"x":533.3038707552415,"y":266.3564029892008},"selected":true,"data":{"label":"SQL Basics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":266.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"zlAcgLKxGF_TyrcJIk4X7","type":"subtopic","position":{"x":533.3038707552415,"y":319.3564029892008},"selected":true,"data":{"label":"Database Design Basics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":319.3564029892008},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ZiK-c9zNbi5RZkKUi44wP","type":"subtopic","position":{"x":533.3038707552415,"y":372.3564029892008},"selected":true,"data":{"label":"Stored Procedures","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":372.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"1-XdtrGPbUoxpu9ZcQlBA","type":"subtopic","position":{"x":533.3038707552415,"y":425.3564029892008},"selected":true,"data":{"label":"Constraints","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":425.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"2f_CJMnXwPxjMEwm5P_QJ","type":"subtopic","position":{"x":533.3038707552415,"y":478.3564029892008},"selected":true,"data":{"label":"Triggers","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":478.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"v2ZTCQQFQPoJNhOVGMG2g","type":"topic","position":{"x":-281.8408171232163,"y":372.3564029892008},"selected":true,"data":{"label":"ASP.NET Core Basics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"resizing":false,"positionAbsolute":{"x":-281.8408171232163,"y":372.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"D3aQw0-pk3ycO-n10HBaA","type":"subtopic","position":{"x":-281.8408171232163,"y":460.75823396078783},"selected":true,"data":{"label":"MVC","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":102,"height":49,"style":{"width":102,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":460.75823396078783},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"dZ9fYWMBa1OemTmLOI8_q","type":"subtopic","position":{"x":-171.8408171232163,"y":460.75823396078783},"selected":true,"data":{"label":"REST","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":128,"height":49,"style":{"width":128,"height":49},"dragging":false,"positionAbsolute":{"x":-171.8408171232163,"y":460.75823396078783},"resizing":false,"selectable":true,"focusable":true},{"id":"qpVxwuyA2oE06MZLtEdP1","type":"subtopic","position":{"x":-281.8408171232163,"y":566.7582339607878},"selected":true,"data":{"label":"Razon Pages","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"ipABerBcM9zCte9pYaIse","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":566.7582339607878},"dragging":false,"selectable":true,"focusable":true},{"id":"vePinRjDfSGULKw0LE9K-","type":"subtopic","position":{"x":-281.8408171232163,"y":619.7582339607878},"selected":true,"data":{"label":"Razor Components","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"dragging":false,"positionAbsolute":{"x":-281.8408171232163,"y":619.7582339607878},"selectable":true,"focusable":true},{"id":"dG--AAcZZdltYCeg6zCz2","type":"subtopic","position":{"x":-281.8408171232163,"y":673.5},"selected":true,"data":{"label":"Middlewares","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":673.5},"dragging":false,"selectable":true,"focusable":true},{"id":"U3HXmNq6x2YA3BwZsOTbe","type":"subtopic","position":{"x":-281.8408171232163,"y":725.758233960788},"selected":true,"data":{"label":"Filters and Attributes","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":725.758233960788},"dragging":false,"selectable":true,"focusable":true},{"id":"EJxliq-HPVp00CVsFc6kf","type":"subtopic","position":{"x":-281.8408171232163,"y":778.758233960788},"selected":true,"data":{"label":"App Settings and Configs","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"fius143Op9lRLjSZwjwVX","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":778.758233960788},"dragging":false,"selectable":true,"focusable":true},{"id":"R7Qk5hsEIl9dspQXdaJAJ","type":"subtopic","position":{"x":535.7391698372666,"y":160.72101054939196},"selected":true,"data":{"label":"StyleCop Rules","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":235,"height":49,"style":{"width":235,"height":49},"positionAbsolute":{"x":535.7391698372666,"y":160.72101054939196},"dragging":false,"focusable":true,"selectable":true},{"id":"ipABerBcM9zCte9pYaIse","type":"subtopic","position":{"x":-281.8408171232163,"y":513.7582339607878},"selected":true,"data":{"label":"Minimal APIs","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":513.7582339607878},"dragging":false,"selectable":true,"focusable":true},{"id":"POQPoN98eqOH2873ZI6Hm","type":"topic","position":{"x":123.39029212267985,"y":458.3564029892008},"selected":true,"data":{"label":"Object Relational Mapping","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":287,"height":49,"style":{"width":287,"height":49},"positionAbsolute":{"x":123.39029212267985,"y":458.3564029892008},"dragging":false,"focusable":true,"selectable":true},{"id":"ET74_7ieahNaGdPT11_NI","type":"subtopic","position":{"x":328.96419656583225,"y":556.1824773344911},"selected":true,"data":{"label":"Entity Framework Core","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"h"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":293,"height":49,"style":{"width":293,"height":49},"positionAbsolute":{"x":328.96419656583225,"y":556.1824773344911},"dragging":false,"resizing":false,"focusable":true,"selectable":true},{"id":"eGVaAz3VhGu3cXBNxTAWd","type":"subtopic","position":{"x":336.96419656583225,"y":617.1824773344911},"selected":true,"data":{"label":"Framework Basics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":271,"height":49,"style":{"width":271,"height":49},"positionAbsolute":{"x":336.96419656583225,"y":617.1824773344911},"dragging":false,"focusable":true,"selectable":true},{"id":"ZPeebwJ3OBuywEgLLgQTG","type":"subtopic","position":{"x":336.96419656583225,"y":670.1824773344911},"selected":true,"data":{"label":"Code First + Migrations","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":271,"height":49,"style":{"width":271,"height":49},"positionAbsolute":{"x":336.96419656583225,"y":670.1824773344911},"dragging":false,"focusable":true,"selectable":true},{"id":"9AMotSwdEbB8uOg80SykE","type":"subtopic","position":{"x":336.96419656583225,"y":776.1824773344911},"selected":true,"data":{"label":"Lazy, Eager, Explicit Loading","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":271,"height":49,"style":{"width":271,"height":49},"resizing":false,"positionAbsolute":{"x":336.96419656583225,"y":776.1824773344911},"dragging":false,"focusable":true,"selectable":true},{"id":"wfEOvAkGXkTZGdGX341D4","type":"subtopic","position":{"x":336.96419656583225,"y":723.1824773344911},"selected":true,"data":{"label":"Change Tracker API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":271,"height":49,"style":{"width":271,"height":49},"positionAbsolute":{"x":336.96419656583225,"y":723.1824773344911},"dragging":false,"focusable":true,"selectable":true},{"id":"UkWc41r0bZ1lptjse3As6","type":"subtopic","position":{"x":123.39029212267985,"y":543.5872226672002},"selected":true,"data":{"label":"Dapper","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":103,"height":49,"style":{"width":103,"height":49},"dragging":false,"positionAbsolute":{"x":123.39029212267985,"y":543.5872226672002},"focusable":true,"selectable":true,"resizing":false},{"id":"tYDVcnG0oUF3R8DwASvAh","type":"subtopic","position":{"x":14.95423833729052,"y":543.5872226672002},"selected":true,"data":{"label":"RepoDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":103,"height":49,"style":{"width":103,"height":49},"dragging":false,"positionAbsolute":{"x":14.95423833729052,"y":543.5872226672002},"focusable":true,"selectable":true,"resizing":false},{"id":"z24IJndpQYTl1PhiUI2mx","type":"subtopic","position":{"x":15.04192151113341,"y":597.5872226672002},"selected":true,"data":{"label":"NHibernate","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":210,"height":51,"style":{"width":210,"height":51},"dragging":false,"positionAbsolute":{"x":15.04192151113341,"y":597.5872226672002},"focusable":true,"selectable":true,"resizing":true},{"id":"IejHMMVKwA0sIInla4FjX","type":"topic","position":{"x":328.96419656583225,"y":934.4078325432465},"selected":true,"data":{"label":"Dependency Injection","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"7Nth4LOrM_KirhvjDGkgS"},"zIndex":999,"width":263,"height":49,"style":{"width":263,"height":49},"positionAbsolute":{"x":328.96419656583225,"y":934.4078325432465},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"f212ztDU_kb7gO71Nn76L","type":"subtopic","position":{"x":489.3768792343918,"y":859.6516938508362},"selected":true,"data":{"label":"Scrutor","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":114,"height":49,"style":{"width":114,"height":49},"positionAbsolute":{"x":489.3768792343918,"y":859.6516938508362},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"Tjaczp2E-cCn0qSv89xgo","type":"topic","position":{"x":640.5854863036282,"y":934.4078325432465},"selected":true,"data":{"label":"Life Cycles","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"g"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":149,"height":49,"style":{"width":149,"height":49},"positionAbsolute":{"x":640.5854863036282,"y":934.4078325432465},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"iM760f8Ys66-VSkMiZfIX","type":"topic","position":{"x":494.9283031312626,"y":1022.223402610819},"selected":true,"data":{"label":"DI Containers","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"h"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":287,"height":49,"style":{"width":287,"height":49},"positionAbsolute":{"x":494.9283031312626,"y":1022.223402610819},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"J9XdYLo7qJiBoL8p3c68P","type":"subtopic","position":{"x":506.9283031312626,"y":1080.6168625008675},"selected":true,"data":{"label":"Microsoft.Extensions","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":506.9283031312626,"y":1080.6168625008675},"resizing":false,"selectable":true,"focusable":true},{"id":"gbpSbjF12dBE1Tb3PX8Bz","type":"subtopic","position":{"x":507.59496979792925,"y":1133.6168625008675},"selected":true,"data":{"label":"AutoFac","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"positionAbsolute":{"x":507.59496979792925,"y":1133.6168625008675},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"M3BW_63MFQyD8NE68dazD","type":"subtopic","position":{"x":648.5854863036282,"y":769.4078325432466},"selected":true,"data":{"label":"Scoped","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":128,"height":49,"style":{"width":128,"height":49},"positionAbsolute":{"x":648.5854863036282,"y":769.4078325432466},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"-N0XM0-VtCZ6QMo2YyMD-","type":"subtopic","position":{"x":648.5854863036282,"y":822.4078325432465},"selected":true,"data":{"label":"Transient","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":128,"height":49,"style":{"width":128,"height":49},"positionAbsolute":{"x":648.5854863036282,"y":822.4078325432465},"dragging":false,"selectable":true,"focusable":true},{"id":"y9bDrCjkDbxSIrEEtu_Mi","type":"subtopic","position":{"x":648.5854863036282,"y":875.4078325432465},"selected":true,"data":{"label":"Singleton","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":128,"height":49,"style":{"width":128,"height":49},"positionAbsolute":{"x":648.5854863036282,"y":875.4078325432465},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"7Nth4LOrM_KirhvjDGkgS","type":"topic","position":{"x":65.95423833729052,"y":934.4078325432465},"selected":true,"data":{"label":"Caching","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":110,"height":49,"style":{"width":110,"height":49},"positionAbsolute":{"x":65.95423833729052,"y":934.4078325432465},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"8CRsr7UZszjc_fZ-4ZmIx","type":"subtopic","position":{"x":28.45423833729052,"y":856.2469833250727},"selected":true,"data":{"label":"Memory Cache","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":185,"height":49,"style":{"width":185,"height":49},"positionAbsolute":{"x":28.45423833729052,"y":856.2469833250727},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"FV4GsPjUyAc99DnIwkkCC","type":"subtopic","position":{"x":-290.9580784888666,"y":932.4078325432465},"selected":true,"data":{"label":"Entity Framework 2nd Level Cache","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":316,"height":53,"style":{"width":316,"height":53},"positionAbsolute":{"x":-290.9580784888666,"y":932.4078325432465},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"SiG0FWWznjDg-2mIWlchy","type":"subtopic","position":{"x":28.95423833729052,"y":799.9057185226321},"selected":true,"data":{"label":"Distributed Cache","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"d"},"oldId":"8CRsr7UZszjc_fZ-4ZmIx","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":189,"height":49,"style":{"width":189,"height":49},"positionAbsolute":{"x":28.95423833729052,"y":799.9057185226321},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"u2pc3ZkL0EumAsbM12D5y","type":"subtopic","position":{"x":42.45423833729052,"y":742.5144404015044},"selected":true,"data":{"label":"Memcached","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":164,"height":50,"style":{"width":164,"height":50},"dragging":false,"positionAbsolute":{"x":42.45423833729052,"y":742.5144404015044},"resizing":false,"selectable":true,"focusable":true},{"id":"Ts0gJ4DdwFp48LGr4YSvM","type":"subtopic","position":{"x":42.45423833729052,"y":685.6280498683051},"selected":true,"data":{"label":"Redis","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":42.45423833729052,"y":685.6280498683051},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"Ujzn_dILCA7xoupnz398l","type":"topic","position":{"x":171.8791275129173,"y":1067.182477334491},"selected":true,"data":{"label":"Databases","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"fQ3w8REYWzQfeJ0nPyq6W"},"zIndex":999,"width":194,"height":49,"style":{"width":194,"height":49},"positionAbsolute":{"x":171.8791275129173,"y":1067.182477334491},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"6p5atMYw3b3bXkQuXZsDV","type":"topic","position":{"x":-271.48977149716166,"y":1035.361537941145},"selected":true,"data":{"label":"Search Engines","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"resizing":false,"positionAbsolute":{"x":-271.48977149716166,"y":1035.361537941145},"dragging":false,"selectable":true,"focusable":true},{"id":"mK9OAwjReZoQZr1WSLRKJ","type":"subtopic","position":{"x":-271.48977149716166,"y":1088.361537941145},"selected":true,"data":{"label":"Elastic Search","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.48977149716166,"y":1088.361537941145},"dragging":false,"selectable":true,"focusable":true},{"id":"2sY_p_8cOOBmZtDHO2Cmy","type":"subtopic","position":{"x":-271.48977149716166,"y":1142.2274230053604},"selected":true,"data":{"label":"Solr","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":90,"height":49,"style":{"width":90,"height":49},"positionAbsolute":{"x":-271.48977149716166,"y":1142.2274230053604},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"Ye9WHfwZa-Fc2YDaTCmU1","type":"subtopic","position":{"x":-178.48977149716166,"y":1142.2274230053604},"selected":true,"data":{"label":"Sphinx","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":-178.48977149716166,"y":1142.2274230053604},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"LrjmJs6_rXUkc2A7fEq24","type":"topic","position":{"x":-69.7527967008875,"y":1035.361537941145},"selected":true,"data":{"label":"Cloud","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"resizing":false,"positionAbsolute":{"x":-69.7527967008875,"y":1035.361537941145},"dragging":false,"selectable":true,"focusable":true},{"id":"KrkV1w9b_Nwm6pe9diDRS","type":"subtopic","position":{"x":-69.7527967008875,"y":1088.361537941145},"selected":true,"data":{"label":"Cosmos DB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1088.361537941145},"dragging":false,"selectable":true,"focusable":true},{"id":"1Om9aQDZmnj_DN10ogwDL","type":"subtopic","position":{"x":-69.7527967008875,"y":1142.2274230053604},"selected":true,"data":{"label":"Dynamo DB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"dragging":false,"positionAbsolute":{"x":-69.7527967008875,"y":1142.2274230053604},"selectable":true,"focusable":true},{"id":"FnRxRY3uDZdTve1w-nBfc","type":"topic","position":{"x":-271.4385474503373,"y":1206.7412636056727},"selected":true,"data":{"label":"Relational","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1206.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"HQHSzsqBGSVYNLQ9o5EI-","type":"subtopic","position":{"x":-271.4385474503373,"y":1259.7412636056727},"selected":true,"data":{"label":"SQL Server","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1259.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"An9TLvo-I6NtC8wFU3bh4","type":"subtopic","position":{"x":-271.4385474503373,"y":1312.7412636056727},"selected":true,"data":{"label":"PostgreSQL","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1312.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"Gs8XcsTo11MeCsiSGpjkU","type":"subtopic","position":{"x":-271.4385474503373,"y":1365.7412636056727},"selected":true,"data":{"label":"MariaDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1365.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"WsGwg4qdlu_vBsFEpmBvU","type":"subtopic","position":{"x":-271.4385474503373,"y":1418.7412636056727},"selected":true,"data":{"label":"MySQL","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1418.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"WUis4K9vduriYdVkKvM9r","type":"topic","position":{"x":-69.7527967008875,"y":1206.7412636056727},"selected":true,"data":{"label":"NoSQL","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"dragging":false,"positionAbsolute":{"x":-69.7527967008875,"y":1206.7412636056727},"selectable":true,"focusable":true},{"id":"-wYRa8qSuKVKo_yOTKV67","type":"subtopic","position":{"x":-69.7527967008875,"y":1259.7412636056727},"selected":true,"data":{"label":"MongoDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1259.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"U_-Gt5csu_hihl7ybFY-B","type":"subtopic","position":{"x":-69.7527967008875,"y":1312.7412636056727},"selected":true,"data":{"label":"Cassandra","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1312.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"3gcXaOnHL4v5OoStrTWNV","type":"subtopic","position":{"x":-69.7527967008875,"y":1365.7412636056727},"selected":true,"data":{"label":"LiteDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1365.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"vHcwt6ARi5YR3v-eDDjfl","type":"subtopic","position":{"x":-69.7527967008875,"y":1418.7412636056727},"selected":true,"data":{"label":"CouchDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1418.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"fQ3w8REYWzQfeJ0nPyq6W","type":"topic","position":{"x":171.8791275129173,"y":1337.0968472714264},"selected":true,"data":{"label":"Log Frameworks","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"7Nth4LOrM_KirhvjDGkgS"},"zIndex":999,"width":194,"height":49,"style":{"width":194,"height":49},"positionAbsolute":{"x":171.8791275129173,"y":1337.0968472714264},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"xL0s4-HfRxNy2ru0jiIWR","type":"subtopic","position":{"x":301.5766878818748,"y":1196.3470319033936},"selected":true,"data":{"label":"Serilog","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":149,"height":49,"style":{"width":149,"height":49},"positionAbsolute":{"x":301.5766878818748,"y":1196.3470319033936},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ykF2bB_68AhCOzeQ_QSW1","type":"subtopic","position":{"x":301.5766878818748,"y":1249.9839242654448},"selected":true,"data":{"label":"NLog","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":149,"height":49,"style":{"width":149,"height":49},"resizing":false,"dragging":false,"positionAbsolute":{"x":301.5766878818748,"y":1249.9839242654448},"selectable":true,"focusable":true},{"id":"GLkDH0X0uy8_1DIdCzbUD","type":"topic","position":{"x":485.3038707552415,"y":1536.4442094125654},"selected":true,"data":{"label":"API Clients and Communication","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"9Vv3OxafB6BlHhi1ZkeVO"},"zIndex":999,"width":287,"height":49,"style":{},"positionAbsolute":{"x":485.3038707552415,"y":1536.4442094125654},"dragging":false,"selectable":true,"focusable":true},{"id":"KJCtxH3mYsZq3hfBZ6cJF","type":"topic","position":{"x":675.6445601795068,"y":1450.7161593360722},"selected":true,"data":{"label":"REST","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"g"},"oldId":"BdTQ5ZMNDNZvkAUoCfL5H","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":98,"height":49,"style":{"width":98,"height":49},"positionAbsolute":{"x":675.6445601795068,"y":1450.7161593360722},"dragging":false,"selectable":true,"focusable":true},{"id":"w5RnrhsP4p-AdSOLYVAY9","type":"subtopic","position":{"x":675.6445601795068,"y":1338.7161593360722},"selected":true,"data":{"label":"Gridlify","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":98,"height":49,"style":{"width":98,"height":49},"positionAbsolute":{"x":675.6445601795068,"y":1338.7161593360722},"selectable":true,"focusable":true,"dragging":false},{"id":"YojZ5fpzw-5WgoqqkO6wl","type":"subtopic","position":{"x":675.6445601795068,"y":1391.7161593360722},"selected":true,"data":{"label":"Odata","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":98,"height":49,"style":{"width":98,"height":49},"dragging":false,"positionAbsolute":{"x":675.6445601795068,"y":1391.7161593360722},"selectable":true,"focusable":true},{"id":"BdTQ5ZMNDNZvkAUoCfL5H","type":"topic","position":{"x":493.92617572789345,"y":1450.7161593360722},"selected":true,"data":{"label":"GraphQL","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"g"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":170,"height":49,"style":{"width":170,"height":49},"positionAbsolute":{"x":493.92617572789345,"y":1450.7161593360722},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"Efxu9gDodODMTKJbWcXzB","type":"subtopic","position":{"x":493.92617572789345,"y":1338.7161593360722},"selected":true,"data":{"label":"GraphQL .NET","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":170,"height":49,"style":{"width":170,"height":49},"positionAbsolute":{"x":493.92617572789345,"y":1338.7161593360722},"selectable":true,"focusable":true,"dragging":false},{"id":"XMrQx9JH0eSQJpMzhvy0F","type":"subtopic","position":{"x":493.92617572789345,"y":1391.7161593360722},"selected":true,"data":{"label":"HotChocolate","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":170,"height":49,"style":{"width":170,"height":49},"positionAbsolute":{"x":493.92617572789345,"y":1391.7161593360722},"dragging":false,"selectable":true,"focusable":true},{"id":"x3SJlLc19DNJ-PyDOOj_G","type":"subtopic","position":{"x":675.6445601795068,"y":1636.7686788951287},"selected":true,"data":{"label":"gRPC","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":98,"height":49,"style":{"width":98,"height":49},"positionAbsolute":{"x":675.6445601795068,"y":1636.7686788951287},"dragging":false,"selectable":true,"focusable":true},{"id":"9Vv3OxafB6BlHhi1ZkeVO","type":"topic","position":{"x":-23.04576166270948,"y":1546.4442094125654},"selected":true,"data":{"label":"Real-Time Communication","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":248,"height":49,"style":{"width":248,"height":49},"positionAbsolute":{"x":-23.04576166270948,"y":1546.4442094125654},"dragging":false,"selectable":true,"focusable":true},{"id":"tBl8neu3tJd5GPwGfJbjZ","type":"subtopic","position":{"x":-279.20291471146976,"y":1522.4234770816188},"selected":true,"data":{"label":"Web Sockets","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":154,"height":49,"style":{"width":154,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":-279.20291471146976,"y":1522.4234770816188},"selectable":true,"focusable":true},{"id":"8dvd4M0TKNyQR8dEolGNT","type":"subtopic","position":{"x":-279.20291471146976,"y":1575.4234770816188},"selected":true,"data":{"label":"SignalR Core","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":154,"height":49,"style":{"width":154,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":-279.20291471146976,"y":1575.4234770816188},"selectable":true,"focusable":true},{"id":"9ECykIIvXlDblbFbRVcJS","type":"topic","position":{"x":-23.04576166270948,"y":1667.8598256215682},"selected":true,"data":{"label":"Object Mapping","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"s57tKy1rajlJbKFDVXLqs"},"zIndex":999,"width":248,"height":49,"style":{"width":248,"height":49},"positionAbsolute":{"x":-23.04576166270948,"y":1667.8598256215682},"dragging":false,"selectable":true,"focusable":true},{"id":"GPmlueMnuLCUW_t4jvGhc","type":"subtopic","position":{"x":323.18684756812684,"y":1614.8598256215682},"selected":true,"data":{"label":"AutoMapper","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"oMMBzRrHkUymxAR4oqr75","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":185,"height":49,"style":{"width":185,"height":49},"positionAbsolute":{"x":323.18684756812684,"y":1614.8598256215682},"selectable":true,"focusable":true,"resizing":false,"dragging":false},{"id":"x0OopRTwIvoWgT8qi0CE9","type":"subtopic","position":{"x":323.18684756812684,"y":1667.8598256215682},"selected":true,"data":{"label":"Mapperly","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"oMMBzRrHkUymxAR4oqr75","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":185,"height":49,"style":{"width":185,"height":49},"positionAbsolute":{"x":323.18684756812684,"y":1667.8598256215682},"selectable":true,"focusable":true,"resizing":false,"dragging":false},{"id":"oMMBzRrHkUymxAR4oqr75","type":"subtopic","position":{"x":323.18684756812684,"y":1720.8598256215682},"selected":true,"data":{"label":"Manual Mapping","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":185,"height":49,"style":{"width":185,"height":49},"positionAbsolute":{"x":323.18684756812684,"y":1720.8598256215682},"selectable":true,"focusable":true,"resizing":false,"dragging":false},{"id":"s57tKy1rajlJbKFDVXLqs","type":"topic","position":{"x":12.95423833729052,"y":1877.1363901779303},"selected":true,"data":{"label":"Task Scheduling","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":176,"height":49,"style":{"width":176,"height":49},"positionAbsolute":{"x":12.95423833729052,"y":1877.1363901779303},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"uP1nqbmFmZL_wA2DoqP8C","type":"subtopic","position":{"x":-174.71351420311524,"y":1750.8690373019726},"selected":true,"data":{"label":"Native Background Service","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":253,"height":49,"style":{},"positionAbsolute":{"x":-174.71351420311524,"y":1750.8690373019726},"dragging":false,"selectable":true,"focusable":true},{"id":"QiQsx1udyKcPJ-lZjRQVy","type":"subtopic","position":{"x":-227.96902609725535,"y":1825.145103688996},"selected":true,"data":{"label":"Hangfire","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":111,"height":49,"style":{"width":111,"height":49},"positionAbsolute":{"x":-227.96902609725535,"y":1825.145103688996},"dragging":false,"selectable":true,"focusable":true},{"id":"zOWlPXIl4XPs_0pA8-yi5","type":"subtopic","position":{"x":-227.96902609725535,"y":1878.145103688996},"selected":true,"data":{"label":"Quartz","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":111,"height":49,"style":{"width":111,"height":49},"positionAbsolute":{"x":-227.96902609725535,"y":1878.145103688996},"dragging":false,"selectable":true,"focusable":true},{"id":"p3bZnKIyRgLmB764Kkhju","type":"subtopic","position":{"x":-227.96902609725535,"y":1931.145103688996},"selected":true,"data":{"label":"Coravel","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":111,"height":49,"style":{"width":111,"height":49},"positionAbsolute":{"x":-227.96902609725535,"y":1931.145103688996},"dragging":false,"selectable":true,"focusable":true},{"id":"XofWWhlU_vWCG5oXVMZze","type":"topic","position":{"x":13.95423833729052,"y":1974.0673712978817},"selected":true,"data":{"label":"Testing","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"KIFmahcNiSo2NGoLtAyRR"},"zIndex":999,"width":174,"height":49,"style":{"width":174,"height":49},"positionAbsolute":{"x":13.95423833729052,"y":1974.0673712978817},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"AtyL0ij8FeJCBmqG2YvTO","type":"subtopic","position":{"x":327.50948132668987,"y":1868.0673712978817},"selected":true,"data":{"label":"Playwright","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"dragging":false,"positionAbsolute":{"x":327.50948132668987,"y":1868.0673712978817},"selectable":true,"focusable":true},{"id":"UCpoLiQJ4LeniI9x3uGcY","type":"subtopic","position":{"x":327.50948132668987,"y":1921.0673712978817},"selected":true,"data":{"label":"Puppeteer","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":1921.0673712978817},"selectable":true,"focusable":true,"dragging":false},{"id":"f2UP2jDnDr7XEFIdAtBhH","type":"subtopic","position":{"x":327.50948132668987,"y":1974.0673712978817},"selected":true,"data":{"label":"Cypress","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":1974.0673712978817},"selectable":true,"focusable":true,"dragging":false},{"id":"Xx5G09n4WWnnydCgxnL0A","type":"subtopic","position":{"x":515.2293649548315,"y":1867.0701218212512},"selected":true,"data":{"label":"WebApplicationFactory","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":246,"height":49,"style":{"width":246,"height":49},"dragging":false,"positionAbsolute":{"x":515.2293649548315,"y":1867.0701218212512},"selectable":true,"focusable":true},{"id":"8eW5BaOjJbnQ7uk4zMOiU","type":"subtopic","position":{"x":515.2293649548315,"y":1921.0673712978817},"selected":true,"data":{"label":"Test Containers","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":246,"height":49,"style":{"width":246,"height":49},"positionAbsolute":{"x":515.2293649548315,"y":1921.0673712978817},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"Ohc0xzI6qX4hOFVNfRj1F","type":"subtopic","position":{"x":515.2293649548315,"y":1973.0701218212512},"selected":true,"data":{"label":".NET Aspire","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"TCswZHviRiu6SIOwUisu8","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":140,"height":49,"style":{"width":140,"height":49},"positionAbsolute":{"x":515.2293649548315,"y":1973.0701218212512},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"TCswZHviRiu6SIOwUisu8","type":"subtopic","position":{"x":661.9711685016747,"y":1974.0673712978817},"selected":true,"data":{"label":"Respawn","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":661.9711685016747,"y":1974.0673712978817},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"9WZmjiFowydYrkHQ2xeNm","type":"subtopic","position":{"x":327.50948132668987,"y":2096.750904410703},"selected":true,"data":{"label":"Specflow","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"aWRv5sU9dksgcpE9RGJb1","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":2096.750904410703},"dragging":false,"selectable":true,"focusable":true},{"id":"aWRv5sU9dksgcpE9RGJb1","type":"subtopic","position":{"x":327.50948132668987,"y":2150.750904410703},"selected":true,"data":{"label":"Light BDD","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":2150.750904410703},"dragging":false,"selectable":true,"focusable":true},{"id":"rcr1V3vhuilYbvgaQm7IE","type":"label","position":{"x":541.8494981027027,"y":2050.250904410703},"selected":true,"data":{"label":"Unit Testing Frameworks","href":"","color":"#000000","style":{"fontSize":17},"oldId":"FjpBEi77yGh9oSsHdh7mf"},"zIndex":999,"width":205,"height":36,"style":{},"positionAbsolute":{"x":541.8494981027027,"y":2050.250904410703},"dragging":false,"selectable":true,"focusable":true},{"id":"R8C6s53RYjkRVma0nCJpy","type":"subtopic","position":{"x":606.1986160843118,"y":2095.5613753534185},"selected":true,"data":{"label":"XUnit","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"236VJJjMvqHfSj-MHSDPV","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":75,"height":49,"style":{"width":75,"height":49},"positionAbsolute":{"x":606.1986160843118,"y":2095.5613753534185},"dragging":false,"selectable":true,"focusable":true},{"id":"qHYBlBCvCGUZGh6gyEI63","type":"subtopic","position":{"x":689.8451259605433,"y":2095.5613753534185},"selected":true,"data":{"label":"NUnit","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":70,"height":49,"style":{"width":70,"height":49},"positionAbsolute":{"x":689.8451259605433,"y":2095.5613753534185},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"TAKxVS6DfIhmSJ6oOQxOM","type":"label","position":{"x":574.7823116265199,"y":2153.223734582062},"selected":true,"data":{"label":"Assertions","href":"","color":"#000000","style":{"fontSize":17},"oldId":"nYOf8Q0lWnzBdGRHbdwwq"},"zIndex":999,"width":99,"height":26,"style":{"width":99.0003662109375,"height":26.3497314453125},"positionAbsolute":{"x":574.7823116265199,"y":2153.223734582062},"dragging":false,"selectable":true,"focusable":true},{"id":"zhn-VLGPfV6FZT2OMl6zf","type":"subtopic","position":{"x":513.8451259605433,"y":2188.41097832855},"selected":true,"data":{"label":"Shouldly","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"diRJ_F6kx42Ucs0fxidtZ","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":246,"height":49,"style":{"width":246,"height":49},"dragging":false,"positionAbsolute":{"x":513.8451259605433,"y":2188.41097832855},"selectable":true,"focusable":true},{"id":"nYOf8Q0lWnzBdGRHbdwwq","type":"label","position":{"x":576.1665506208079,"y":2246.563695311414},"selected":true,"data":{"label":"Mocking","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":99,"height":26,"style":{"width":99.0003662109375,"height":26.3497314453125},"positionAbsolute":{"x":576.1665506208079,"y":2246.563695311414},"dragging":false,"selectable":true,"focusable":true},{"id":"iZCxinqlVefBk5-ICqt4v","type":"subtopic","position":{"x":515.2293649548313,"y":2286.8339739890553},"selected":true,"data":{"label":"NSubstitute","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"diRJ_F6kx42Ucs0fxidtZ","legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":246,"height":49,"style":{"width":246,"height":49},"dragging":false,"positionAbsolute":{"x":515.2293649548313,"y":2286.8339739890553},"selectable":true,"focusable":true},{"id":"eyOXWb1kL80Wqiwc2WHd_","type":"subtopic","position":{"x":515.2293649548313,"y":2340.8339739890553},"selected":true,"data":{"label":"Moq","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"diRJ_F6kx42Ucs0fxidtZ","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"dragging":false,"positionAbsolute":{"x":515.2293649548313,"y":2340.8339739890553},"resizing":false,"selectable":true,"focusable":true},{"id":"diRJ_F6kx42Ucs0fxidtZ","type":"subtopic","position":{"x":629.1665506208079,"y":2340.8339739890553},"selected":true,"data":{"label":"FakeItEasy","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":133,"height":49,"style":{"width":133,"height":49},"dragging":false,"positionAbsolute":{"x":629.1665506208079,"y":2340.8339739890553},"resizing":false,"selectable":true,"focusable":true},{"id":"K49M_7gSpfJuZaE6WaHxQ","type":"subtopic","position":{"x":327.50948132668987,"y":2287.0368559257836},"selected":true,"data":{"label":"AutoFixture","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"dragging":false,"positionAbsolute":{"x":327.50948132668987,"y":2287.0368559257836},"selectable":true,"focusable":true},{"id":"QERTjawqCCCkHfR44Ca0s","type":"subtopic","position":{"x":327.50948132668987,"y":2340.8339739890553},"selected":true,"data":{"label":"Bogus","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":2340.8339739890553},"dragging":false,"selectable":true,"focusable":true},{"id":"37c2eCvRdebztkbc5AjYp","type":"topic","position":{"x":17.45423833729052,"y":2063.676280366376},"selected":true,"data":{"label":"Microservices","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"KIFmahcNiSo2NGoLtAyRR"},"zIndex":999,"width":167,"height":49,"style":{"width":167,"height":49},"positionAbsolute":{"x":17.45423833729052,"y":2063.676280366376},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"_cHDH4bo1Q_Ru9iuKaPQa","type":"label","position":{"x":362.0094813266899,"y":1817.460323803236},"selected":true,"data":{"label":"E2E Testing","href":"","color":"#000000","style":{"fontSize":17},"oldId":"GbK3uwt1x7Bp_rSXCHYwL"},"zIndex":999,"width":108,"height":36,"style":{},"positionAbsolute":{"x":362.0094813266899,"y":1817.460323803236},"dragging":false,"selectable":true,"focusable":true},{"id":"FjpBEi77yGh9oSsHdh7mf","type":"label","position":{"x":558.7293649548313,"y":1817.460323803236},"selected":true,"data":{"label":"Integration Testing","href":"","color":"#000000","style":{"fontSize":17},"oldId":"nYOf8Q0lWnzBdGRHbdwwq"},"zIndex":999,"width":159,"height":36,"style":{},"positionAbsolute":{"x":558.7293649548313,"y":1817.460323803236},"dragging":false,"selectable":true,"focusable":true},{"id":"8sr7NcSsrn67x75-vYLNQ","type":"label","position":{"x":344.00948132668987,"y":2050.250904410703},"selected":true,"data":{"label":"Behavior Testing","href":"","color":"#000000","style":{"fontSize":17},"oldId":"GbK3uwt1x7Bp_rSXCHYwL"},"zIndex":999,"width":144,"height":36,"style":{},"positionAbsolute":{"x":344.00948132668987,"y":2050.250904410703},"dragging":false,"selectable":true,"focusable":true},{"id":"GbK3uwt1x7Bp_rSXCHYwL","type":"label","position":{"x":323.50948132668987,"y":2236.563695311414},"selected":true,"data":{"label":"Fake Data Generation","href":"","color":"#000000","style":{"fontSize":17},"oldId":"FjpBEi77yGh9oSsHdh7mf"},"zIndex":999,"width":185,"height":36,"style":{},"positionAbsolute":{"x":323.50948132668987,"y":2236.563695311414},"dragging":false,"selectable":true,"focusable":true},{"id":"eMolc0UKdEgLDFJ2FximV","type":"label","position":{"x":-232.74239716008708,"y":2052.181173440632},"selected":true,"data":{"label":"Message Brokers","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":151,"height":36,"style":{},"positionAbsolute":{"x":-232.74239716008708,"y":2052.181173440632},"dragging":false,"selectable":true,"focusable":true},{"id":"sNYYEBMHV_NO_NToP51VY","type":"subtopic","position":{"x":-265.73144955169835,"y":2099.622670740455},"selected":true,"data":{"label":"ActiveMQ","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":109,"height":49,"style":{"width":109,"height":49},"positionAbsolute":{"x":-265.73144955169835,"y":2099.622670740455},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"L8RkeMYm0WGNeLLcHKF1R","type":"subtopic","position":{"x":-152.38897900509676,"y":2098.622670740455},"selected":true,"data":{"label":"Kafka","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":100,"height":50,"style":{"width":100,"height":50},"positionAbsolute":{"x":-152.38897900509676,"y":2098.622670740455},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"KqvBn2_wvYhFdv0dBZMC9","type":"subtopic","position":{"x":-265.73144955169835,"y":2153.622670740455},"selected":true,"data":{"label":"RabbitMQ","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":109,"height":49,"style":{"width":109,"height":49},"positionAbsolute":{"x":-265.73144955169835,"y":2153.622670740455},"dragging":false,"resizing":true,"selectable":true,"focusable":true},{"id":"8d4f7_3VO03vy7YDWwPI9","type":"subtopic","position":{"x":-152.73144955169835,"y":2153.622670740455},"selected":true,"data":{"label":"NetMQ","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":-152.73144955169835,"y":2153.622670740455},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"gBuaVZfqJ0-g21sKohQtx","type":"subtopic","position":{"x":-265.73144955169835,"y":2205.56858838567},"selected":true,"data":{"label":"Azuer Service Bus","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"positionAbsolute":{"x":-265.73144955169835,"y":2205.56858838567},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"X0hmqW8LAkhBGprxP8iBo","type":"label","position":{"x":-222.74239716008708,"y":2268.838867063311},"selected":true,"data":{"label":"Message Bus","href":"","color":"#000000","style":{"fontSize":17},"oldId":"Kq2TQn9DN1bIy9fWSSCkP"},"zIndex":999,"width":121,"height":36,"style":{},"positionAbsolute":{"x":-222.74239716008708,"y":2268.838867063311},"dragging":false,"selectable":true,"focusable":true},{"id":"SQKIUa_UsJ4cls-Vs9yHU","type":"subtopic","position":{"x":-263.84712995368886,"y":2357.838867063311},"selected":true,"data":{"label":"Mass Transit","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"dragging":false,"positionAbsolute":{"x":-263.84712995368886,"y":2357.838867063311},"selectable":true,"focusable":true},{"id":"vf8W1FLhcb3awx4JBaY5r","type":"subtopic","position":{"x":-263.84712995368886,"y":2304.838867063311},"selected":true,"data":{"label":"NServiceBus","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"dragging":false,"positionAbsolute":{"x":-263.84712995368886,"y":2304.838867063311},"selectable":true,"focusable":true},{"id":"X6iSHoHnFFMaGb6YPQFhl","type":"subtopic","position":{"x":-263.84712995368886,"y":2410.838867063311},"selected":true,"data":{"label":"EasyNetQ","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"02rtFStTeIm8prNskxaUN","legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"positionAbsolute":{"x":-263.84712995368886,"y":2410.838867063311},"dragging":false,"selectable":true,"focusable":true},{"id":"TY3iovpKLvTqPQmbQFTRW","type":"label","position":{"x":-220.21191851316905,"y":2470.937760229362},"selected":true,"data":{"label":"API Gateway","href":"","color":"#000000","style":{"fontSize":17},"oldId":"Kq2TQn9DN1bIy9fWSSCkP"},"zIndex":999,"width":113,"height":36,"style":{},"positionAbsolute":{"x":-220.21191851316905,"y":2470.937760229362},"dragging":false,"selectable":true,"focusable":true},{"id":"2k-rGuhYTTAR9XN3aDAnW","type":"subtopic","position":{"x":-264.38897900509687,"y":2510.049532546853},"selected":true,"data":{"label":"Ocelot","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":108,"height":49,"style":{"width":108,"height":49},"positionAbsolute":{"x":-264.38897900509687,"y":2510.049532546853},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"2axfolu26P8XwxMxgMaS3","type":"subtopic","position":{"x":-153.38897900509676,"y":2510.049532546853},"selected":true,"data":{"label":"YARP","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":102,"height":49,"style":{"width":102,"height":49},"positionAbsolute":{"x":-153.38897900509676,"y":2510.049532546853},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"4ObSoVqiiYzV_Ph0UdSr-","type":"label","position":{"x":-233.24239716008708,"y":2568.739205506869},"selected":true,"data":{"label":"Containerization","href":"","color":"#000000","style":{"fontSize":17},"oldId":"Kq2TQn9DN1bIy9fWSSCkP"},"zIndex":999,"width":142,"height":36,"style":{},"positionAbsolute":{"x":-233.24239716008708,"y":2568.739205506869},"dragging":false,"selectable":true,"focusable":true},{"id":"rmRESzLiZNWdBFXLrwQFJ","type":"subtopic","position":{"x":-263.7423971600871,"y":2604.739205506869},"selected":true,"data":{"label":"Docker","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"02rtFStTeIm8prNskxaUN","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"positionAbsolute":{"x":-263.7423971600871,"y":2604.739205506869},"dragging":false,"selectable":true,"focusable":true},{"id":"02rtFStTeIm8prNskxaUN","type":"subtopic","position":{"x":-263.7423971600871,"y":2658.739205506869},"selected":true,"data":{"label":"Kubernetes","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"positionAbsolute":{"x":-263.7423971600871,"y":2658.739205506869},"dragging":false,"selectable":true,"focusable":true},{"id":"Kq2TQn9DN1bIy9fWSSCkP","type":"label","position":{"x":-192.8408171232163,"y":2721.005494878551},"selected":true,"data":{"label":"Other","href":"","color":"#000000","style":{"fontSize":17},"oldId":"eMolc0UKdEgLDFJ2FximV"},"zIndex":999,"width":60,"height":36,"style":{},"positionAbsolute":{"x":-192.8408171232163,"y":2721.005494878551},"dragging":false,"selectable":true,"focusable":true},{"id":"HqhqqiA5X00Xl1RnZgrNJ","type":"subtopic","position":{"x":-263.7423971600871,"y":2767.6564093838533},"selected":true,"data":{"label":".NET Aspire","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"IHY9uL3dzYmf2D2wWgIh-","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":-263.7423971600871,"y":2767.6564093838533},"selectable":true,"focusable":true},{"id":"XKsLqDDco5OXKURCcWAmv","type":"subtopic","position":{"x":-263.7423971600871,"y":2821.6564093838533},"selected":true,"data":{"label":"Orleans","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"s8evqe2MireS1UhxoXrd1","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"resizing":true,"positionAbsolute":{"x":-263.7423971600871,"y":2821.6564093838533},"dragging":false,"selectable":true,"focusable":true},{"id":"s8evqe2MireS1UhxoXrd1","type":"subtopic","position":{"x":-158.74239716008708,"y":2821.6564093838533},"selected":true,"data":{"label":"SteelToe","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":106,"height":49,"style":{"width":106,"height":49},"resizing":false,"positionAbsolute":{"x":-158.74239716008708,"y":2821.6564093838533},"dragging":false,"selectable":true,"focusable":true},{"id":"IHY9uL3dzYmf2D2wWgIh-","type":"subtopic","position":{"x":-263.7423971600871,"y":2877.548245909759},"selected":true,"data":{"label":"Dapr","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":-263.7423971600871,"y":2877.548245909759},"selectable":true,"focusable":true},{"id":"KIFmahcNiSo2NGoLtAyRR","type":"topic","position":{"x":7.454238337290576,"y":2473.154603018019},"selected":true,"data":{"label":"CI / CD","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":187,"height":49,"style":{"width":187,"height":49},"positionAbsolute":{"x":7.454238337290576,"y":2473.154603018019},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"0-PLMXGlRyRzTk-EjXMs2","type":"subtopic","position":{"x":129.19572608840792,"y":2215.258261345686},"selected":true,"data":{"label":"GitHub Actions","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"8Y73Ae32eo6_ye7dw5QRQ","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":129.19572608840792,"y":2215.258261345686},"dragging":false,"selectable":true,"focusable":true},{"id":"_-GQNpsb7KZw76hNNOq3h","type":"subtopic","position":{"x":129.19572608840792,"y":2268.258261345686},"selected":true,"data":{"label":"Azure Pipelines","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"8Y73Ae32eo6_ye7dw5QRQ","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":129.19572608840792,"y":2268.258261345686},"dragging":false,"selectable":true,"focusable":true},{"id":"8Y73Ae32eo6_ye7dw5QRQ","type":"subtopic","position":{"x":129.19572608840792,"y":2321.258261345686},"selected":true,"data":{"label":"GitLab CI/CD","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":129.19572608840792,"y":2321.258261345686},"dragging":false,"selectable":true,"focusable":true},{"id":"KyGjXgG6JFo42qOV0wqfB","type":"subtopic","position":{"x":129.19572608840792,"y":2374.258261345686},"selected":true,"data":{"label":"Circle CI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":129.19572608840792,"y":2374.258261345686},"dragging":false,"selectable":true,"focusable":true},{"id":"RX_6yD1QGLEGwV4j6z_g-","type":"button","position":{"x":301.96419656583225,"y":2473.154603018019},"selected":true,"data":{"label":"Software Design and Architecture","href":"https://roadmap.sh/software-design-architecture","color":"#ffffff","backgroundColor":"#2a79e4","style":{"fontSize":17}},"zIndex":999,"width":302,"height":49,"style":{"width":302,"height":49},"positionAbsolute":{"x":301.96419656583225,"y":2473.154603018019},"dragging":false,"selectable":true,"focusable":true},{"id":"C85aJvrzj6rP2Hmfj9uPB","type":"topic","position":{"x":356.96419656583225,"y":2654.6289816349786},"selected":true,"data":{"label":"Template Engines","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"1YL7aXluINOO15W3waaiD"},"zIndex":999,"width":192,"height":49,"style":{"width":192,"height":49},"positionAbsolute":{"x":356.96419656583225,"y":2654.6289816349786},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"nUE2-egUMNFQoPVrVRFPl","type":"subtopic","position":{"x":76.43680101835645,"y":2604.2447426406907},"selected":true,"data":{"label":"Razor","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":76.43680101835645,"y":2604.2447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"dWB5OCvWVYkD30Op_dMwy","type":"subtopic","position":{"x":76.43680101835645,"y":2657.2447426406907},"selected":true,"data":{"label":"Scriban","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":76.43680101835645,"y":2657.2447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"ZaOhWWDgVxrn0hbesJ7xT","type":"subtopic","position":{"x":76.43680101835645,"y":2710.2447426406907},"selected":true,"data":{"label":"Fluid","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"resizing":false,"positionAbsolute":{"x":76.43680101835645,"y":2710.2447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"1YL7aXluINOO15W3waaiD","type":"topic","position":{"x":356.96419656583225,"y":2710.2447426406907},"selected":true,"data":{"label":"Frameworks","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":192,"height":49,"style":{"width":192,"height":49},"positionAbsolute":{"x":356.96419656583225,"y":2710.2447426406907},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"o2oks1bG_-8InCKVol_s3","type":"label","position":{"x":369.96419656583225,"y":2605.7447426406907},"selected":true,"data":{"label":"Client-Side .NET","href":"","color":"#000000","style":{"fontSize":20},"oldId":"nw-pE4itvz1D7BWtyx5cm"},"zIndex":999,"width":166,"height":36,"style":{},"positionAbsolute":{"x":369.96419656583225,"y":2605.7447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"4iD_hDtgJ15IlJGxiO-E8","type":"subtopic","position":{"x":625.7530528135321,"y":2657.2447426406907},"selected":true,"data":{"label":"Blazor","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":138,"height":49,"style":{"width":138,"height":49},"positionAbsolute":{"x":625.7530528135321,"y":2657.2447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"olqSPUU3RoxhQ6exfMzeN","type":"subtopic","position":{"x":625.7530528135321,"y":2710.2447426406907},"selected":true,"data":{"label":".NET MAUI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":138,"height":49,"style":{"width":138,"height":49},"positionAbsolute":{"x":625.7530528135321,"y":2710.2447426406907},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ao7YnoJ31qQxcItMY8XJU","type":"vertical","position":{"x":430.5766878818748,"y":2504.6289816349786},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":20,"height":85,"style":{"width":20,"height":85},"positionAbsolute":{"x":430.5766878818748,"y":2504.6289816349786},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"nw-pE4itvz1D7BWtyx5cm","type":"label","position":{"x":340.96419656583225,"y":2866.0426302976452},"selected":true,"data":{"label":"Good-to-Know Libraries","href":"","color":"#000000","style":{"fontSize":20}},"zIndex":999,"width":231,"height":36,"style":{},"positionAbsolute":{"x":340.96419656583225,"y":2866.0426302976452},"dragging":false,"selectable":true,"focusable":true},{"id":"Zb4Gugxf7d6MoeEcfngrV","type":"subtopic","position":{"x":44.10695532015461,"y":2803.2129376580287},"selected":true,"data":{"label":"Scalar","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"resizing":false,"positionAbsolute":{"x":44.10695532015461,"y":2803.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"cc0UNQwbDlySue-CvpChR","type":"subtopic","position":{"x":151.82344177403695,"y":2803.2129376580287},"selected":true,"data":{"label":"MediatR","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":151.82344177403695,"y":2803.2129376580287},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"sa0zXd8lpNs_SFQ2y-PY4","type":"subtopic","position":{"x":44.10695532015461,"y":2856.2129376580287},"selected":true,"data":{"label":"FluentValidation","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":207,"height":49,"style":{"width":207,"height":49},"positionAbsolute":{"x":44.10695532015461,"y":2856.2129376580287},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"gQhiEpvx__70N1WbEHGYJ","type":"subtopic","position":{"x":44.10695532015461,"y":2909.2129376580287},"selected":true,"data":{"label":"Polly","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"EsC1JwFOMOlQVelpmxISh","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":44.10695532015461,"y":2909.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"ipb6proIZKG-_vCOMAiBu","type":"subtopic","position":{"x":151.82344177403695,"y":2910.2477050182865},"selected":true,"data":{"label":"Marten","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":151.82344177403695,"y":2910.2477050182865},"dragging":false,"selectable":true,"focusable":true},{"id":"EsC1JwFOMOlQVelpmxISh","type":"subtopic","position":{"x":43.6576825168454,"y":2962.2129376580287},"selected":true,"data":{"label":"Nuke","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"ipb6proIZKG-_vCOMAiBu","legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":207,"height":49,"style":{"width":207,"height":49},"positionAbsolute":{"x":43.6576825168454,"y":2962.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"9LEVN-uVEwxJooEiB9ApK","type":"subtopic","position":{"x":44.10695532015461,"y":3015.2129376580287},"selected":true,"data":{"label":"Benchmark.NET","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"T2FsSndxzSuKTFdjoyPi-","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":207,"height":49,"style":{"width":207,"height":49},"positionAbsolute":{"x":44.10695532015461,"y":3015.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"T2FsSndxzSuKTFdjoyPi-","type":"subtopic","position":{"x":44.10695532015461,"y":3069.2129376580287},"selected":true,"data":{"label":"Distributed Lock","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"EsC1JwFOMOlQVelpmxISh","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":207,"height":49,"style":{"width":207,"height":49},"positionAbsolute":{"x":44.10695532015461,"y":3069.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"Gc82P2ClaRuPMM1N6k2bN","type":"horizontal","position":{"x":262.57187640085726,"y":2873.7129376580287},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":62,"height":20,"style":{"width":62,"height":20},"positionAbsolute":{"x":262.57187640085726,"y":2873.7129376580287},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"wyzDVcQ87PRh0y2LIfvSU","type":"vertical","position":{"x":433.5766878818748,"y":2926.548245909759},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":20,"height":80,"style":{"width":20,"height":80},"positionAbsolute":{"x":433.5766878818748,"y":2926.548245909759},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"q2z_1wnPUnWM7MYIIUyBg","type":"legend","position":{"x":-279.20291471146976,"y":-129.55580566097228},"selected":true,"data":{"label":"","legends":[{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion"},{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500"},{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999"}]},"zIndex":999,"width":351,"height":130,"positionAbsolute":{"x":-279.20291471146976,"y":-129.55580566097228},"dragging":false,"style":{"width":351,"height":130},"resizing":false,"selectable":true,"focusable":true},{"id":"2zqZkyVgigifcRS1H7F_b","type":"button","position":{"x":-278.429978402122,"y":55.94269326868894},"selected":true,"data":{"label":"Moien Tajik","href":"https://github.com/MoienTajik","color":"#000000","backgroundColor":"#d1d1d1","style":{"fontSize":17},"borderColor":"#D1D1D1"},"zIndex":999,"width":351,"height":49,"dragging":false,"style":{"width":351,"height":49},"resizing":false,"positionAbsolute":{"x":-278.429978402122,"y":55.94269326868894},"selectable":true,"focusable":true},{"id":"azsxJoFI1qHGwcNGw8c28","type":"label","position":{"x":-280.929978402122,"y":14.90074822234891},"selected":true,"data":{"label":"Special thanks for the roadmap contribution","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":351,"height":36,"positionAbsolute":{"x":-280.929978402122,"y":14.90074822234891},"dragging":false,"selectable":true,"focusable":true},{"id":"236VJJjMvqHfSj-MHSDPV","type":"subtopic","position":{"x":516.9641965658323,"y":2095.5613753534185},"selected":true,"data":{"label":"MSTest","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"qHYBlBCvCGUZGh6gyEI63","legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":80,"height":49,"style":{"width":80,"height":49},"positionAbsolute":{"x":516.9641965658323,"y":2095.5613753534185},"dragging":false,"selectable":true,"focusable":true,"resizing":false}],"edges":[{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"iogwMmOvub2ZF4zgg6WyF","sourceHandle":"x2","target":"_hYN0gEi9BL24nptEtXWU","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"XX0I26JoVMVXIe_7bVMix","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"idLHBxhvcIqZTqmh_E8Az","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"dFn6kGOoJ-0BzJJEb9DSG","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"os3Pa6W9SSNEzgmlBbglQ","targetHandle":"y2","data":{"edgeStyle":"dashed"},"id":"arkF7QJJRbCBYWp0crqa2","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"3oInpqvTSSC5_K6i7j8N7","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"HNVw8OboycWKLEtEbG2bn","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"YKhuRbcUFzo0hTvuTq-Yl","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"auB7Png72XjmhcLr3IJA7","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"jZ67HhVRelJaxjsCckSSI","sourceHandle":"x2","target":"hWA7RtuqltMTmHdcCnmES","targetHandle":"y1","data":{"edgeStyle":"solid"},"id":"2aoDIr80lXSJLW1hIGUkb","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"sourceHandle":"z2","target":"NMznG9mo2wzNFnjhg990f","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"m-_y7nLeYFkUKGiacxWA0","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"sourceHandle":"z2","target":"gc_7cuIO2_joKlQRAPDfX","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"G7pXuJfkyt2nWAOHU8yV0","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"rrrvATyhXqRgJGWI3z0WF","sourceHandle":"x2","target":"AvbMQ5vY3ip1oX_6Yq4ie","targetHandle":"w2","data":{"edgeStyle":"dashed"},"id":"2_6Yz3-Agx9_rEN5xW86c","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"hWA7RtuqltMTmHdcCnmES","sourceHandle":"w2","target":"1AJv95mTLpR7L8KBoGym8","targetHandle":"x1","data":{"edgeStyle":"dashed"},"id":"kgMI98fg2-mKMgUs0wnjD","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"hWA7RtuqltMTmHdcCnmES","sourceHandle":"y2","target":"0etAs56EeBfh_0IlAaSra","targetHandle":"w1","data":{"edgeStyle":"solid"},"selected":true,"id":"ts38Q2ceHs60TJscUBZVE","focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"jZ67HhVRelJaxjsCckSSI","sourceHandle":"y2","target":"h6ceO0kiBIxNRkPzN3hBY","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"ZiMV7umyPdhy3JJDcopR-","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"jZ67HhVRelJaxjsCckSSI","sourceHandle":"y2","target":"_JlT9oKQ6Yu4UX6l19G8P","targetHandle":"z2","data":{"edgeStyle":"dashed"},"id":"WI-MhbxrehFcVwyGJ5CQJ","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"x2","target":"jZ67HhVRelJaxjsCckSSI","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"qUrLBzvXvJOg53HBfjrOI","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"Ji35JsKgUQXN4DJGEgTAC","sourceHandle":"x2","target":"t3Op8UcgDKVeMLNMDePrW","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-Ji35JsKgUQXN4DJGEgTACx2-t3Op8UcgDKVeMLNMDePrWw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"Ji35JsKgUQXN4DJGEgTAC","sourceHandle":"x2","target":"c2YZ7PPCX1jF_RU7C0AqN","targetHandle":"w2","data":{"edgeStyle":"solid"},"id":"reactflow__edge-Ji35JsKgUQXN4DJGEgTACx2-c2YZ7PPCX1jF_RU7C0AqNw2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"KMA7NkxFbPoUDtFnGBFnj","sourceHandle":"x2","target":"0vLaVNJaJSHZ_bHli6Qzs","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-KMA7NkxFbPoUDtFnGBFnjx2-0vLaVNJaJSHZ_bHli6Qzsw1","selected":true,"type":"simplebezier","focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"DYkdM_L7T2GcTPAoZNnUR","sourceHandle":"x2","target":"0vLaVNJaJSHZ_bHli6Qzs","targetHandle":"z1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-DYkdM_L7T2GcTPAoZNnURx2-0vLaVNJaJSHZ_bHli6Qzsz1","selected":true,"type":"smoothstep","selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NvODRFR0DLINB0RlPSsvt","sourceHandle":"z2","target":"fxANnSiTb2VzA9u-YeBL1","targetHandle":"y2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-fxANnSiTb2VzA9u-YeBL1y2","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NvODRFR0DLINB0RlPSsvt","sourceHandle":"z2","target":"3GGvuxdfuDwLpNX_gtjCK","targetHandle":"y2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-3GGvuxdfuDwLpNX_gtjCKy2","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"y2","target":"OtdCmkj0SvrGwCUSfm96C","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-y2-OtdCmkj0SvrGwCUSfm96Cz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"y2","target":"KAZF-mIg-FlfMonfdOLhb","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-y2-KAZF-mIg-FlfMonfdOLhbz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"y2","target":"YI3cAezupWNntFw4B6elY","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-y2-YI3cAezupWNntFw4B6elYz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"y2","target":"RAX2xN37taw9cqA3pnORh","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-y2-RAX2xN37taw9cqA3pnORhz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"x2","target":"tnKUdsgp6bnFtQTexEmfy","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-x2-tnKUdsgp6bnFtQTexEmfyw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"aOJMVrTcA_I2y_QHzj7aM","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-aOJMVrTcA_I2y_QHzj7aMy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"zlAcgLKxGF_TyrcJIk4X7","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-zlAcgLKxGF_TyrcJIk4X7y1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"ZiK-c9zNbi5RZkKUi44wP","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-ZiK-c9zNbi5RZkKUi44wPy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"1-XdtrGPbUoxpu9ZcQlBA","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-1-XdtrGPbUoxpu9ZcQlBAy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"2f_CJMnXwPxjMEwm5P_QJ","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-2f_CJMnXwPxjMEwm5P_QJy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"y2","target":"v2ZTCQQFQPoJNhOVGMG2g","targetHandle":"z1","data":{"edgeStyle":"solid"},"selected":true,"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyy2-v2ZTCQQFQPoJNhOVGMG2gz1","selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NvODRFR0DLINB0RlPSsvt","sourceHandle":"z2","target":"R7Qk5hsEIl9dspQXdaJAJ","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-R7Qk5hsEIl9dspQXdaJAJy1","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"v2ZTCQQFQPoJNhOVGMG2g","sourceHandle":"z2","target":"POQPoN98eqOH2873ZI6Hm","targetHandle":"y1","data":{"edgeStyle":"solid"},"selected":true,"focusable":true,"id":"reactflow__edge-v2ZTCQQFQPoJNhOVGMG2gz2-POQPoN98eqOH2873ZI6Hmy1","selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"IejHMMVKwA0sIInla4FjX","sourceHandle":"z2","target":"Tjaczp2E-cCn0qSv89xgo","targetHandle":"y1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-7Nth4LOrM_KirhvjDGkgSz2-Tjaczp2E-cCn0qSv89xgoy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"7Nth4LOrM_KirhvjDGkgS","sourceHandle":"y2","target":"FV4GsPjUyAc99DnIwkkCC","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-7Nth4LOrM_KirhvjDGkgSy2-FV4GsPjUyAc99DnIwkkCCz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"7Nth4LOrM_KirhvjDGkgS","sourceHandle":"w2","target":"8CRsr7UZszjc_fZ-4ZmIx","targetHandle":"x1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-7Nth4LOrM_KirhvjDGkgSw2-8CRsr7UZszjc_fZ-4ZmIxx1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"Ujzn_dILCA7xoupnz398l","sourceHandle":"x2","target":"fQ3w8REYWzQfeJ0nPyq6W","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-Ujzn_dILCA7xoupnz398lx2-fQ3w8REYWzQfeJ0nPyq6Ww1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9Vv3OxafB6BlHhi1ZkeVO","sourceHandle":"y2","target":"tBl8neu3tJd5GPwGfJbjZ","targetHandle":"z2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-9Vv3OxafB6BlHhi1ZkeVOy2-tBl8neu3tJd5GPwGfJbjZz2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9Vv3OxafB6BlHhi1ZkeVO","sourceHandle":"y2","target":"8dvd4M0TKNyQR8dEolGNT","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-9Vv3OxafB6BlHhi1ZkeVOy2-8dvd4M0TKNyQR8dEolGNTz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9Vv3OxafB6BlHhi1ZkeVO","sourceHandle":"x2","target":"9ECykIIvXlDblbFbRVcJS","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-9Vv3OxafB6BlHhi1ZkeVOx2-s57tKy1rajlJbKFDVXLqsw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9ECykIIvXlDblbFbRVcJS","sourceHandle":"z2","target":"GPmlueMnuLCUW_t4jvGhc","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsz2-GPmlueMnuLCUW_t4jvGhcy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9ECykIIvXlDblbFbRVcJS","sourceHandle":"z2","target":"x0OopRTwIvoWgT8qi0CE9","targetHandle":"y2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsz2-x0OopRTwIvoWgT8qi0CE9y2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9ECykIIvXlDblbFbRVcJS","sourceHandle":"z2","target":"oMMBzRrHkUymxAR4oqr75","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsz2-oMMBzRrHkUymxAR4oqr75y1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9ECykIIvXlDblbFbRVcJS","sourceHandle":"x2","target":"s57tKy1rajlJbKFDVXLqs","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-9ECykIIvXlDblbFbRVcJSx2-s57tKy1rajlJbKFDVXLqsw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"s57tKy1rajlJbKFDVXLqs","sourceHandle":"y2","target":"QiQsx1udyKcPJ-lZjRQVy","targetHandle":"z2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsy2-QiQsx1udyKcPJ-lZjRQVyz2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"s57tKy1rajlJbKFDVXLqs","sourceHandle":"y2","target":"p3bZnKIyRgLmB764Kkhju","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsy2-p3bZnKIyRgLmB764Kkhjuz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"s57tKy1rajlJbKFDVXLqs","sourceHandle":"y2","target":"zOWlPXIl4XPs_0pA8-yi5","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsy2-zOWlPXIl4XPs_0pA8-yi5z1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"s57tKy1rajlJbKFDVXLqs","sourceHandle":"x2","target":"XofWWhlU_vWCG5oXVMZze","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsx2-KIFmahcNiSo2NGoLtAyRRw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"XofWWhlU_vWCG5oXVMZze","sourceHandle":"x2","target":"37c2eCvRdebztkbc5AjYp","targetHandle":"w2","data":{"edgeStyle":"solid"},"id":"reactflow__edge-XofWWhlU_vWCG5oXVMZzex2-KIFmahcNiSo2NGoLtAyRRw2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"Z-zHIbLBy7cqcDu_QEJIn","sourceHandle":"y2","target":"WSrbHa0mKIQs33vEJHp15","targetHandle":"x2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-Z-zHIbLBy7cqcDu_QEJIny2-WSrbHa0mKIQs33vEJHp15x2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"37c2eCvRdebztkbc5AjYp","sourceHandle":"x2","target":"KIFmahcNiSo2NGoLtAyRR","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-37c2eCvRdebztkbc5AjYpx2-KIFmahcNiSo2NGoLtAyRRw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"KIFmahcNiSo2NGoLtAyRR","sourceHandle":"z2","target":"RX_6yD1QGLEGwV4j6z_g-","targetHandle":"y2","data":{"edgeStyle":"solid"},"id":"reactflow__edge-KIFmahcNiSo2NGoLtAyRRz2-RX_6yD1QGLEGwV4j6z_g-y2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"C85aJvrzj6rP2Hmfj9uPB","sourceHandle":"y2","target":"nUE2-egUMNFQoPVrVRFPl","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDy2-nUE2-egUMNFQoPVrVRFPlz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"C85aJvrzj6rP2Hmfj9uPB","sourceHandle":"y2","target":"dWB5OCvWVYkD30Op_dMwy","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDy2-dWB5OCvWVYkD30Op_dMwyz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"C85aJvrzj6rP2Hmfj9uPB","sourceHandle":"y2","target":"ZaOhWWDgVxrn0hbesJ7xT","targetHandle":"z2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDy2-ZaOhWWDgVxrn0hbesJ7xTz2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"RX_6yD1QGLEGwV4j6z_g-","sourceHandle":"x2","target":"ia7YtgDjVoLxFKtQZPqJD","targetHandle":"w1","data":{"edgeStyle":"solid"},"selected":true,"id":"reactflow__edge-RX_6yD1QGLEGwV4j6z_g-x2-ia7YtgDjVoLxFKtQZPqJDw1","selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"1YL7aXluINOO15W3waaiD","sourceHandle":"z2","target":"4iD_hDtgJ15IlJGxiO-E8","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDz2-4iD_hDtgJ15IlJGxiO-E8y1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"1YL7aXluINOO15W3waaiD","sourceHandle":"z2","target":"olqSPUU3RoxhQ6exfMzeN","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDz2-olqSPUU3RoxhQ6exfMzeNy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NvODRFR0DLINB0RlPSsvt","sourceHandle":"x2","target":"NEnna_8DstfYH4T9qrP3-","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-NvODRFR0DLINB0RlPSsvtx2-NEnna_8DstfYH4T9qrP3-w1","selected":true,"selectable":true,"focusable":true}]} \ No newline at end of file +{"nodes":[{"id":"yWM-Hgse9GqGipTO1pXVK","type":"section","position":{"x":31.571876400857263,"y":2792.4846359444336},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff"}},"zIndex":-999,"width":231,"height":344,"style":{"width":231,"height":344},"positionAbsolute":{"x":31.571876400857263,"y":2792.4846359444336},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ocJ-ND5jn9s-ACTAPZKZb","type":"vertical","position":{"x":433.5766878818748,"y":2747.005494878551},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75},"oldId":"wyzDVcQ87PRh0y2LIfvSU"},"zIndex":999,"width":20,"height":107,"style":{"width":20,"height":107},"positionAbsolute":{"x":433.5766878818748,"y":2747.005494878551},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"wvA5Bi-SaA61FAso8NPj8","type":"vertical","position":{"x":151.8791275129173,"y":2405.055709851968},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75,"strokeDasharray":"0.8 8","strokeLinecap":"round"}},"zIndex":999,"width":20,"height":90,"style":{"width":20,"height":90},"positionAbsolute":{"x":151.8791275129173,"y":2405.055709851968},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"fSm0vh6u_Lk7esx8BSte8","type":"horizontal","position":{"x":-42.04576166270948,"y":2081.176280366376},"selected":true,"data":{"label":"horizontal node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":82,"height":20,"style":{"width":82,"height":20},"positionAbsolute":{"x":-42.04576166270948,"y":2081.176280366376},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"yasP_jzx1hhGoZZnR0mXU","type":"section","position":{"x":-277.67187829620605,"y":2040.5330508465236},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":238,"height":899,"style":{"width":238,"height":899},"resizing":false,"positionAbsolute":{"x":-277.67187829620605,"y":2040.5330508465236},"dragging":false,"selectable":true,"focusable":true},{"id":"_y6A_pwr-8jDIOoLx9QHC","type":"vertical","position":{"x":164.89029212267985,"y":492.75823396078783},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":70,"style":{"width":20,"height":70},"positionAbsolute":{"x":164.89029212267985,"y":492.75823396078783},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"c8c-AWby5x5_eEF4QLEgX","type":"horizontal","position":{"x":156.59496979792925,"y":1986.960323803236},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.5,"strokeDasharray":"0.8 8","strokeLinecap":"round"}},"zIndex":999,"width":152,"height":20,"style":{"width":152,"height":20},"positionAbsolute":{"x":156.59496979792925,"y":1986.960323803236},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"BM8AtRoLAVTmjucTfCoVG","type":"section","position":{"x":313.1557525665048,"y":1799.1664942178645},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":462,"height":609,"style":{"width":462,"height":609},"resizing":false,"positionAbsolute":{"x":313.1557525665048,"y":1799.1664942178645},"selectable":true,"focusable":true,"dragging":false},{"id":"UwJdUMdYf1qAlMHOdcLPK","type":"vertical","position":{"x":25.04192151113341,"y":1773.460323803236},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.75,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":132,"style":{"width":20,"height":132},"positionAbsolute":{"x":25.04192151113341,"y":1773.460323803236},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"WYon24IKmo8fX_nAQh7YS","type":"horizontal","position":{"x":178.92830313126262,"y":1560.9442094125654},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.5}},"zIndex":999,"width":317,"height":20,"style":{"width":317,"height":20},"resizing":false,"dragging":false,"positionAbsolute":{"x":178.92830313126262,"y":1560.9442094125654},"selectable":true,"focusable":true},{"id":"yMcSPPCMSvCYoh8i3x3d1","type":"vertical","position":{"x":714.6445601795068,"y":1475.0968472714264},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":180,"style":{"width":20,"height":180},"positionAbsolute":{"x":714.6445601795068,"y":1475.0968472714264},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"Aic1j37JF27iDpCwYWeA6","type":"vertical","position":{"x":571.9641965658323,"y":1475.9442094125654},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"},"oldId":"yMcSPPCMSvCYoh8i3x3d1"},"zIndex":999,"width":20,"height":78,"style":{"width":20,"height":78},"positionAbsolute":{"x":571.9641965658323,"y":1475.9442094125654},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"bm3XEtLCUU23rU2HhHnSY","type":"horizontal","position":{"x":267.9283031312626,"y":1540.9442094125654},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.5},"oldId":"WYon24IKmo8fX_nAQh7YS"},"zIndex":999,"width":228,"height":20,"style":{"width":228,"height":20},"resizing":false,"dragging":false,"positionAbsolute":{"x":267.9283031312626,"y":1540.9442094125654},"selectable":true,"focusable":true},{"id":"LK_owhdD3K5uAYG5fD92w","type":"vertical","position":{"x":257.39029212267985,"y":1376.0968472714264},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.5}},"zIndex":999,"width":20,"height":177,"style":{"width":20,"height":177},"positionAbsolute":{"x":257.39029212267985,"y":1376.0968472714264},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"UK9l45WqokS_YM1P8-v3A","type":"vertical","position":{"x":323.6803864110923,"y":1281.065016026603},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":80,"style":{"width":20,"height":80},"positionAbsolute":{"x":323.6803864110923,"y":1281.065016026603},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"XSavYIlcsJ3APyYQypnBc","type":"horizontal","position":{"x":79.81132975781338,"y":1080.6168625008675},"selected":true,"data":{"label":"horizontal node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":141,"height":20,"style":{"width":141,"height":20},"positionAbsolute":{"x":79.81132975781338,"y":1080.6168625008675},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ZTsi2oL00lox_bz27-hDO","type":"section","position":{"x":-288.1886702421866,"y":1021.4442094125654},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":371,"height":461,"style":{"width":371,"height":461},"resizing":false,"positionAbsolute":{"x":-288.1886702421866,"y":1021.4442094125654},"dragging":false,"selectable":true,"focusable":true},{"id":"h2z_qviXhvmdnwk5eiA05","type":"section","position":{"x":27.95423833729052,"y":672.4543464224016},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":189,"height":156,"style":{"width":189,"height":156},"positionAbsolute":{"x":27.95423833729052,"y":672.4543464224016},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"qGXjjY3jOUKsBdXqFJVnv","type":"horizontal","position":{"x":103.11914288676098,"y":951.6516938508362},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":272,"height":20,"style":{"width":272,"height":20},"positionAbsolute":{"x":103.11914288676098,"y":951.6516938508362},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ieJjbRAxSGYLPkmaWFJus","type":"vertical","position":{"x":256.89029212267985,"y":485.18247733449107},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":20,"height":582,"style":{"width":20,"height":582},"positionAbsolute":{"x":256.89029212267985,"y":485.18247733449107},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"_JbWIWlgwaMHYYi8W48oO","type":"section","position":{"x":640.5854863036282,"y":756.9078325432466},"width":149,"height":196,"style":{"width":149,"height":196},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":640.5854863036282,"y":756.9078325432466},"dragging":false,"selectable":true,"focusable":true},{"id":"_-k1suoaD64ZOMLrS2OeH","type":"vertical","position":{"x":536.3768792343918,"y":884.1516938508362},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":185,"style":{"width":20,"height":185},"positionAbsolute":{"x":536.3768792343918,"y":884.1516938508362},"dragging":false,"resizing":true,"selectable":true,"focusable":true},{"id":"uT9PXHnbTWga5vLIfBr50","type":"section","position":{"x":494.9283031312626,"y":1048.1168625008675},"width":287,"height":152,"style":{"width":287,"height":152},"selected":true,"data":{},"positionAbsolute":{"x":494.9283031312626,"y":1048.1168625008675},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"fUyJsuZx-zLIz_nQ8HZRl","type":"vertical","position":{"x":363.3768792343918,"y":486.18247733449107},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"},"oldId":"_y6A_pwr-8jDIOoLx9QHC"},"zIndex":999,"width":20,"height":75,"style":{"width":20,"height":75},"positionAbsolute":{"x":363.3768792343918,"y":486.18247733449107},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"coNWBnrx1oAfS9UgILkSJ","type":"section","position":{"x":328.96419656583225,"y":556.1824773344911},"width":293,"height":279,"style":{"width":293,"height":279},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":328.96419656583225,"y":556.1824773344911},"dragging":false,"focusable":true,"selectable":true,"resizing":false},{"id":"DVPKdE0w11vA197x__RXo","type":"vertical","position":{"x":-114.84081712321631,"y":375.8564029892008},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.5,"strokeDasharray":"0.8 8","strokeLinecap":"round"}},"zIndex":999,"width":14,"height":108,"style":{"width":14.339111328125,"height":107.5435791015625},"positionAbsolute":{"x":-114.84081712321631,"y":375.8564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"qw0r959sbdXLP0-GYBf5w","type":"vertical","position":{"x":-237.8408171232163,"y":375.8564029892008},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.5,"strokeDasharray":"0.8 8","strokeLinecap":"round"},"oldId":"DVPKdE0w11vA197x__RXo"},"zIndex":999,"width":14,"height":108,"style":{"width":14.339111328125,"height":107.5435791015625},"positionAbsolute":{"x":-237.8408171232163,"y":375.8564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"c58fcsthBlVfzfr-MHdpF","type":"vertical","position":{"x":256.89029212267985,"y":-109.59925177765109},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":66,"positionAbsolute":{"x":256.89029212267985,"y":-109.59925177765109},"dragging":false,"style":{"width":20,"height":66},"resizing":false,"selectable":true,"focusable":true},{"id":"Ji35JsKgUQXN4DJGEgTAC","type":"title","position":{"x":156.89029212267985,"y":-43.59925177765109},"selected":true,"data":{"label":"ASP.NET Core","style":{"fontSize":28,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":220,"height":68,"positionAbsolute":{"x":156.89029212267985,"y":-43.59925177765109},"dragging":false,"selectable":true,"focusable":true,"style":{}},{"id":"kpF15oUmlUmk1qVGEBB7Y","type":"paragraph","position":{"x":421.119142886761,"y":-115.9573697023546},"selected":true,"data":{"label":"Find the detailed version of this roadmap along with other similar roadmaps","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"left","borderColor":"#000000","backgroundColor":"#FFFFFf"},"oldId":"yHmHXymPNWwu8p1vvqD3o"},"zIndex":999,"width":354,"height":143,"positionAbsolute":{"x":421.119142886761,"y":-115.9573697023546},"dragging":false,"selectable":true,"focusable":true,"style":{"width":354,"height":143},"resizing":false},{"id":"if9eTna5NRTMStVwpSwDP","type":"button","position":{"x":433.619142886761,"y":-34.09925177765109},"selected":true,"data":{"label":"roadmap.sh","href":"https://roadmap.sh","color":"#ffffff","backgroundColor":"#4136D6","style":{"fontSize":17},"oldId":"2zqZkyVgigifcRS1H7F_b"},"zIndex":999,"width":329,"height":49,"dragging":false,"style":{"width":329,"height":49},"resizing":false,"positionAbsolute":{"x":433.619142886761,"y":-34.09925177765109},"selectable":true,"focusable":true},{"id":"g4hjyQF8-SpjPi8mYtIsk","type":"vertical","position":{"x":256.89029212267985,"y":15.028193715390685},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.5}},"zIndex":999,"width":20,"height":99,"style":{"width":20,"height":99},"positionAbsolute":{"x":256.89029212267985,"y":15.028193715390685},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"width":411,"height":121,"id":"0vLaVNJaJSHZ_bHli6Qzs","type":"paragraph","position":{"x":329.993752405053,"y":3007.488386939488},"selected":true,"data":{"label":"Visit Backend path and see what you missed","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","borderColor":"#000000","backgroundColor":"WHITe"},"oldId":"m9eO0jLGuR_9w2JJbe_g2"},"zIndex":999,"positionAbsolute":{"x":329.993752405053,"y":3007.488386939488},"dragging":false,"style":{"width":411,"height":121},"resizing":false,"focusable":true,"selectable":true},{"width":20,"height":85,"id":"xi0QAi4kXm3-IFKgopnOP","type":"vertical","position":{"x":433.5766878818748,"y":3128.488386939488},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"},"oldId":"RLtk1C3gofHnLJ17x3o5b"},"zIndex":999,"positionAbsolute":{"x":433.5766878818748,"y":3128.488386939488},"dragging":false,"focusable":true,"style":{"width":20,"height":85},"resizing":false,"selectable":true},{"width":377,"height":49,"id":"-sFboM4eFUMVq1tlPl-fV","type":"button","position":{"x":352.68684756812684,"y":3064.2129376580287},"selected":true,"data":{"label":"Backend Roadmap","href":"https://roadmap.sh/backend","color":"#FFFFFf","backgroundColor":"#4136D6","style":{"fontSize":17},"borderColor":"#4136D6","oldId":"qXKNK_IsGS8-JgLK-Q9oU"},"zIndex":999,"dragging":false,"positionAbsolute":{"x":352.68684756812684,"y":3064.2129376580287},"style":{"width":377,"height":49},"focusable":true,"resizing":false,"selectable":true},{"id":"NEnna_8DstfYH4T9qrP3-","type":"topic","position":{"x":128.89029212267985,"y":216.72101054939196},"selected":true,"data":{"label":"General Development Skills","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":276,"height":49,"style":{"width":276,"height":49},"dragging":false,"positionAbsolute":{"x":128.89029212267985,"y":216.72101054939196},"focusable":true,"selectable":true},{"id":"fxANnSiTb2VzA9u-YeBL1","type":"subtopic","position":{"x":535.7391698372666,"y":51.94269326868894},"selected":true,"data":{"label":"C#","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":235,"height":49,"style":{"width":235,"height":49},"positionAbsolute":{"x":535.7391698372666,"y":51.94269326868894},"dragging":false,"focusable":true,"resizing":false,"selectable":true},{"id":"3GGvuxdfuDwLpNX_gtjCK","type":"subtopic","position":{"x":535.7391698372666,"y":104.94269326868894},"selected":true,"data":{"label":".NET","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":112,"height":49,"style":{"width":112,"height":49},"positionAbsolute":{"x":535.7391698372666,"y":104.94269326868894},"dragging":false,"focusable":true,"resizing":false,"selectable":true},{"id":"6HJQ1Evgah0Pki04Z2hQt","type":"subtopic","position":{"x":652.3038707552415,"y":104.94269326868894},"selected":true,"data":{"label":".NET CLI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":118,"height":49,"style":{"width":118,"height":49},"resizing":false,"positionAbsolute":{"x":652.3038707552415,"y":104.94269326868894},"dragging":false,"focusable":true,"selectable":true},{"id":"NvODRFR0DLINB0RlPSsvt","type":"topic","position":{"x":128.89029212267985,"y":107.76582156925141},"selected":true,"data":{"label":"Learn the Basics of C#","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":276,"height":49,"style":{"width":276,"height":49},"positionAbsolute":{"x":128.89029212267985,"y":107.76582156925141},"dragging":false,"resizing":false,"focusable":true,"selectable":true},{"id":"OtdCmkj0SvrGwCUSfm96C","type":"subtopic","position":{"x":-279.57383949457864,"y":143.02155144086436},"selected":true,"data":{"label":"Git - Version Control","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":296,"height":43,"style":{"width":296,"height":43},"positionAbsolute":{"x":-279.57383949457864,"y":143.02155144086436},"dragging":false,"focusable":true,"selectable":true},{"id":"KAZF-mIg-FlfMonfdOLhb","type":"subtopic","position":{"x":-279.57383949457864,"y":193.02155144086436},"selected":true,"data":{"label":"GitHub, GitLab, BitBucket","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":296,"height":49,"style":{"width":296,"height":49},"positionAbsolute":{"x":-279.57383949457864,"y":193.02155144086436},"dragging":false,"focusable":true,"selectable":true},{"id":"YI3cAezupWNntFw4B6elY","type":"subtopic","position":{"x":-279.57383949457864,"y":246.02155144086436},"selected":true,"data":{"label":"HTTP / HTTPs Protocol","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":296,"height":49,"style":{"width":296,"height":49},"positionAbsolute":{"x":-279.57383949457864,"y":246.02155144086436},"dragging":false,"focusable":true,"selectable":true},{"id":"RAX2xN37taw9cqA3pnORh","type":"subtopic","position":{"x":-279.57383949457864,"y":299.02155144086436},"selected":true,"data":{"label":"Data Structures and Algorithms","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":296,"height":49,"style":{"width":296,"height":49},"resizing":false,"positionAbsolute":{"x":-279.57383949457864,"y":299.02155144086436},"dragging":false,"focusable":true,"selectable":true},{"id":"tnKUdsgp6bnFtQTexEmfy","type":"topic","position":{"x":128.89029212267985,"y":372.3564029892008},"selected":true,"data":{"label":"Database Fundamentals","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":276,"height":49,"style":{"width":276,"height":49},"resizing":false,"positionAbsolute":{"x":128.89029212267985,"y":372.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"aOJMVrTcA_I2y_QHzj7aM","type":"subtopic","position":{"x":533.3038707552415,"y":266.3564029892008},"selected":true,"data":{"label":"SQL Basics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":266.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"zlAcgLKxGF_TyrcJIk4X7","type":"subtopic","position":{"x":533.3038707552415,"y":319.3564029892008},"selected":true,"data":{"label":"Database Design Basics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":319.3564029892008},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ZiK-c9zNbi5RZkKUi44wP","type":"subtopic","position":{"x":533.3038707552415,"y":372.3564029892008},"selected":true,"data":{"label":"Stored Procedures","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":372.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"1-XdtrGPbUoxpu9ZcQlBA","type":"subtopic","position":{"x":533.3038707552415,"y":425.3564029892008},"selected":true,"data":{"label":"Constraints","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":425.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"2f_CJMnXwPxjMEwm5P_QJ","type":"subtopic","position":{"x":533.3038707552415,"y":478.3564029892008},"selected":true,"data":{"label":"Triggers","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":533.3038707552415,"y":478.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"v2ZTCQQFQPoJNhOVGMG2g","type":"topic","position":{"x":-281.8408171232163,"y":372.3564029892008},"selected":true,"data":{"label":"ASP.NET Core Basics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"resizing":false,"positionAbsolute":{"x":-281.8408171232163,"y":372.3564029892008},"dragging":false,"selectable":true,"focusable":true},{"id":"D3aQw0-pk3ycO-n10HBaA","type":"subtopic","position":{"x":-281.8408171232163,"y":460.75823396078783},"selected":true,"data":{"label":"MVC","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":102,"height":49,"style":{"width":102,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":460.75823396078783},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"dZ9fYWMBa1OemTmLOI8_q","type":"subtopic","position":{"x":-171.8408171232163,"y":460.75823396078783},"selected":true,"data":{"label":"REST","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":128,"height":49,"style":{"width":128,"height":49},"dragging":false,"positionAbsolute":{"x":-171.8408171232163,"y":460.75823396078783},"resizing":false,"selectable":true,"focusable":true},{"id":"qpVxwuyA2oE06MZLtEdP1","type":"subtopic","position":{"x":-281.8408171232163,"y":566.7582339607878},"selected":true,"data":{"label":"Razor Pages","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"ipABerBcM9zCte9pYaIse","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":566.7582339607878},"dragging":false,"selectable":true,"focusable":true},{"id":"vePinRjDfSGULKw0LE9K-","type":"subtopic","position":{"x":-281.8408171232163,"y":619.7582339607878},"selected":true,"data":{"label":"Razor Components","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"dragging":false,"positionAbsolute":{"x":-281.8408171232163,"y":619.7582339607878},"selectable":true,"focusable":true},{"id":"dG--AAcZZdltYCeg6zCz2","type":"subtopic","position":{"x":-281.8408171232163,"y":673.5},"selected":true,"data":{"label":"Middlewares","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":673.5},"dragging":false,"selectable":true,"focusable":true},{"id":"U3HXmNq6x2YA3BwZsOTbe","type":"subtopic","position":{"x":-281.8408171232163,"y":725.758233960788},"selected":true,"data":{"label":"Filters and Attributes","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":725.758233960788},"dragging":false,"selectable":true,"focusable":true},{"id":"EJxliq-HPVp00CVsFc6kf","type":"subtopic","position":{"x":-281.8408171232163,"y":778.758233960788},"selected":true,"data":{"label":"App Settings and Configs","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"fius143Op9lRLjSZwjwVX","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":778.758233960788},"dragging":false,"selectable":true,"focusable":true},{"id":"R7Qk5hsEIl9dspQXdaJAJ","type":"subtopic","position":{"x":535.7391698372666,"y":160.72101054939196},"selected":true,"data":{"label":"StyleCop Rules","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":235,"height":49,"style":{"width":235,"height":49},"positionAbsolute":{"x":535.7391698372666,"y":160.72101054939196},"dragging":false,"focusable":true,"selectable":true},{"id":"ipABerBcM9zCte9pYaIse","type":"subtopic","position":{"x":-281.8408171232163,"y":513.7582339607878},"selected":true,"data":{"label":"Minimal APIs","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":238,"height":49,"style":{"width":238,"height":49},"positionAbsolute":{"x":-281.8408171232163,"y":513.7582339607878},"dragging":false,"selectable":true,"focusable":true},{"id":"POQPoN98eqOH2873ZI6Hm","type":"topic","position":{"x":123.39029212267985,"y":458.3564029892008},"selected":true,"data":{"label":"Object Relational Mapping","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":287,"height":49,"style":{"width":287,"height":49},"positionAbsolute":{"x":123.39029212267985,"y":458.3564029892008},"dragging":false,"focusable":true,"selectable":true},{"id":"ET74_7ieahNaGdPT11_NI","type":"subtopic","position":{"x":328.96419656583225,"y":556.1824773344911},"selected":true,"data":{"label":"Entity Framework Core","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"h"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":293,"height":49,"style":{"width":293,"height":49},"positionAbsolute":{"x":328.96419656583225,"y":556.1824773344911},"dragging":false,"resizing":false,"focusable":true,"selectable":true},{"id":"eGVaAz3VhGu3cXBNxTAWd","type":"subtopic","position":{"x":336.96419656583225,"y":617.1824773344911},"selected":true,"data":{"label":"Framework Basics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":271,"height":49,"style":{"width":271,"height":49},"positionAbsolute":{"x":336.96419656583225,"y":617.1824773344911},"dragging":false,"focusable":true,"selectable":true},{"id":"ZPeebwJ3OBuywEgLLgQTG","type":"subtopic","position":{"x":336.96419656583225,"y":670.1824773344911},"selected":true,"data":{"label":"Code First + Migrations","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":271,"height":49,"style":{"width":271,"height":49},"positionAbsolute":{"x":336.96419656583225,"y":670.1824773344911},"dragging":false,"focusable":true,"selectable":true},{"id":"9AMotSwdEbB8uOg80SykE","type":"subtopic","position":{"x":336.96419656583225,"y":776.1824773344911},"selected":true,"data":{"label":"Lazy, Eager, Explicit Loading","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":271,"height":49,"style":{"width":271,"height":49},"resizing":false,"positionAbsolute":{"x":336.96419656583225,"y":776.1824773344911},"dragging":false,"focusable":true,"selectable":true},{"id":"wfEOvAkGXkTZGdGX341D4","type":"subtopic","position":{"x":336.96419656583225,"y":723.1824773344911},"selected":true,"data":{"label":"Change Tracker API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":271,"height":49,"style":{"width":271,"height":49},"positionAbsolute":{"x":336.96419656583225,"y":723.1824773344911},"dragging":false,"focusable":true,"selectable":true},{"id":"UkWc41r0bZ1lptjse3As6","type":"subtopic","position":{"x":123.39029212267985,"y":543.5872226672002},"selected":true,"data":{"label":"Dapper","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":103,"height":49,"style":{"width":103,"height":49},"dragging":false,"positionAbsolute":{"x":123.39029212267985,"y":543.5872226672002},"focusable":true,"selectable":true,"resizing":false},{"id":"tYDVcnG0oUF3R8DwASvAh","type":"subtopic","position":{"x":14.95423833729052,"y":543.5872226672002},"selected":true,"data":{"label":"RepoDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":103,"height":49,"style":{"width":103,"height":49},"dragging":false,"positionAbsolute":{"x":14.95423833729052,"y":543.5872226672002},"focusable":true,"selectable":true,"resizing":false},{"id":"z24IJndpQYTl1PhiUI2mx","type":"subtopic","position":{"x":15.04192151113341,"y":597.5872226672002},"selected":true,"data":{"label":"NHibernate","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":210,"height":51,"style":{"width":210,"height":51},"dragging":false,"positionAbsolute":{"x":15.04192151113341,"y":597.5872226672002},"focusable":true,"selectable":true,"resizing":true},{"id":"IejHMMVKwA0sIInla4FjX","type":"topic","position":{"x":328.96419656583225,"y":934.4078325432465},"selected":true,"data":{"label":"Dependency Injection","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"7Nth4LOrM_KirhvjDGkgS"},"zIndex":999,"width":263,"height":49,"style":{"width":263,"height":49},"positionAbsolute":{"x":328.96419656583225,"y":934.4078325432465},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"f212ztDU_kb7gO71Nn76L","type":"subtopic","position":{"x":489.3768792343918,"y":859.6516938508362},"selected":true,"data":{"label":"Scrutor","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":114,"height":49,"style":{"width":114,"height":49},"positionAbsolute":{"x":489.3768792343918,"y":859.6516938508362},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"Tjaczp2E-cCn0qSv89xgo","type":"topic","position":{"x":640.5854863036282,"y":934.4078325432465},"selected":true,"data":{"label":"Life Cycles","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"g"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":149,"height":49,"style":{"width":149,"height":49},"positionAbsolute":{"x":640.5854863036282,"y":934.4078325432465},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"iM760f8Ys66-VSkMiZfIX","type":"topic","position":{"x":494.9283031312626,"y":1022.223402610819},"selected":true,"data":{"label":"DI Containers","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"h"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":287,"height":49,"style":{"width":287,"height":49},"positionAbsolute":{"x":494.9283031312626,"y":1022.223402610819},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"J9XdYLo7qJiBoL8p3c68P","type":"subtopic","position":{"x":506.9283031312626,"y":1080.6168625008675},"selected":true,"data":{"label":"Microsoft.Extensions","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":506.9283031312626,"y":1080.6168625008675},"resizing":false,"selectable":true,"focusable":true},{"id":"gbpSbjF12dBE1Tb3PX8Bz","type":"subtopic","position":{"x":507.59496979792925,"y":1133.6168625008675},"selected":true,"data":{"label":"AutoFac","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"positionAbsolute":{"x":507.59496979792925,"y":1133.6168625008675},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"M3BW_63MFQyD8NE68dazD","type":"subtopic","position":{"x":648.5854863036282,"y":769.4078325432466},"selected":true,"data":{"label":"Scoped","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":128,"height":49,"style":{"width":128,"height":49},"positionAbsolute":{"x":648.5854863036282,"y":769.4078325432466},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"-N0XM0-VtCZ6QMo2YyMD-","type":"subtopic","position":{"x":648.5854863036282,"y":822.4078325432465},"selected":true,"data":{"label":"Transient","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":128,"height":49,"style":{"width":128,"height":49},"positionAbsolute":{"x":648.5854863036282,"y":822.4078325432465},"dragging":false,"selectable":true,"focusable":true},{"id":"y9bDrCjkDbxSIrEEtu_Mi","type":"subtopic","position":{"x":648.5854863036282,"y":875.4078325432465},"selected":true,"data":{"label":"Singleton","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":128,"height":49,"style":{"width":128,"height":49},"positionAbsolute":{"x":648.5854863036282,"y":875.4078325432465},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"7Nth4LOrM_KirhvjDGkgS","type":"topic","position":{"x":65.95423833729052,"y":934.4078325432465},"selected":true,"data":{"label":"Caching","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":110,"height":49,"style":{"width":110,"height":49},"positionAbsolute":{"x":65.95423833729052,"y":934.4078325432465},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"8CRsr7UZszjc_fZ-4ZmIx","type":"subtopic","position":{"x":28.45423833729052,"y":856.2469833250727},"selected":true,"data":{"label":"Memory Cache","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":185,"height":49,"style":{"width":185,"height":49},"positionAbsolute":{"x":28.45423833729052,"y":856.2469833250727},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"FV4GsPjUyAc99DnIwkkCC","type":"subtopic","position":{"x":-290.9580784888666,"y":932.4078325432465},"selected":true,"data":{"label":"Entity Framework 2nd Level Cache","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":316,"height":53,"style":{"width":316,"height":53},"positionAbsolute":{"x":-290.9580784888666,"y":932.4078325432465},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"SiG0FWWznjDg-2mIWlchy","type":"subtopic","position":{"x":28.95423833729052,"y":799.9057185226321},"selected":true,"data":{"label":"Distributed Cache","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"d"},"oldId":"8CRsr7UZszjc_fZ-4ZmIx","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":189,"height":49,"style":{"width":189,"height":49},"positionAbsolute":{"x":28.95423833729052,"y":799.9057185226321},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"u2pc3ZkL0EumAsbM12D5y","type":"subtopic","position":{"x":42.45423833729052,"y":742.5144404015044},"selected":true,"data":{"label":"Memcached","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":164,"height":50,"style":{"width":164,"height":50},"dragging":false,"positionAbsolute":{"x":42.45423833729052,"y":742.5144404015044},"resizing":false,"selectable":true,"focusable":true},{"id":"Ts0gJ4DdwFp48LGr4YSvM","type":"subtopic","position":{"x":42.45423833729052,"y":685.6280498683051},"selected":true,"data":{"label":"Redis","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":42.45423833729052,"y":685.6280498683051},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"Ujzn_dILCA7xoupnz398l","type":"topic","position":{"x":171.8791275129173,"y":1067.182477334491},"selected":true,"data":{"label":"Databases","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"fQ3w8REYWzQfeJ0nPyq6W"},"zIndex":999,"width":194,"height":49,"style":{"width":194,"height":49},"positionAbsolute":{"x":171.8791275129173,"y":1067.182477334491},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"6p5atMYw3b3bXkQuXZsDV","type":"topic","position":{"x":-271.48977149716166,"y":1035.361537941145},"selected":true,"data":{"label":"Search Engines","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"resizing":false,"positionAbsolute":{"x":-271.48977149716166,"y":1035.361537941145},"dragging":false,"selectable":true,"focusable":true},{"id":"mK9OAwjReZoQZr1WSLRKJ","type":"subtopic","position":{"x":-271.48977149716166,"y":1088.361537941145},"selected":true,"data":{"label":"Elastic Search","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.48977149716166,"y":1088.361537941145},"dragging":false,"selectable":true,"focusable":true},{"id":"2sY_p_8cOOBmZtDHO2Cmy","type":"subtopic","position":{"x":-271.48977149716166,"y":1142.2274230053604},"selected":true,"data":{"label":"Solr","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":90,"height":49,"style":{"width":90,"height":49},"positionAbsolute":{"x":-271.48977149716166,"y":1142.2274230053604},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"Ye9WHfwZa-Fc2YDaTCmU1","type":"subtopic","position":{"x":-178.48977149716166,"y":1142.2274230053604},"selected":true,"data":{"label":"Sphinx","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":-178.48977149716166,"y":1142.2274230053604},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"LrjmJs6_rXUkc2A7fEq24","type":"topic","position":{"x":-69.7527967008875,"y":1035.361537941145},"selected":true,"data":{"label":"Cloud","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"resizing":false,"positionAbsolute":{"x":-69.7527967008875,"y":1035.361537941145},"dragging":false,"selectable":true,"focusable":true},{"id":"KrkV1w9b_Nwm6pe9diDRS","type":"subtopic","position":{"x":-69.7527967008875,"y":1088.361537941145},"selected":true,"data":{"label":"Cosmos DB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1088.361537941145},"dragging":false,"selectable":true,"focusable":true},{"id":"1Om9aQDZmnj_DN10ogwDL","type":"subtopic","position":{"x":-69.7527967008875,"y":1142.2274230053604},"selected":true,"data":{"label":"Dynamo DB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"dragging":false,"positionAbsolute":{"x":-69.7527967008875,"y":1142.2274230053604},"selectable":true,"focusable":true},{"id":"FnRxRY3uDZdTve1w-nBfc","type":"topic","position":{"x":-271.4385474503373,"y":1206.7412636056727},"selected":true,"data":{"label":"Relational","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1206.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"HQHSzsqBGSVYNLQ9o5EI-","type":"subtopic","position":{"x":-271.4385474503373,"y":1259.7412636056727},"selected":true,"data":{"label":"SQL Server","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1259.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"An9TLvo-I6NtC8wFU3bh4","type":"subtopic","position":{"x":-271.4385474503373,"y":1312.7412636056727},"selected":true,"data":{"label":"PostgreSQL","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1312.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"Gs8XcsTo11MeCsiSGpjkU","type":"subtopic","position":{"x":-271.4385474503373,"y":1365.7412636056727},"selected":true,"data":{"label":"MariaDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1365.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"WsGwg4qdlu_vBsFEpmBvU","type":"subtopic","position":{"x":-271.4385474503373,"y":1418.7412636056727},"selected":true,"data":{"label":"MySQL","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":193,"height":49,"style":{"width":193,"height":49},"positionAbsolute":{"x":-271.4385474503373,"y":1418.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"WUis4K9vduriYdVkKvM9r","type":"topic","position":{"x":-69.7527967008875,"y":1206.7412636056727},"selected":true,"data":{"label":"NoSQL","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"dragging":false,"positionAbsolute":{"x":-69.7527967008875,"y":1206.7412636056727},"selectable":true,"focusable":true},{"id":"-wYRa8qSuKVKo_yOTKV67","type":"subtopic","position":{"x":-69.7527967008875,"y":1259.7412636056727},"selected":true,"data":{"label":"MongoDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1259.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"U_-Gt5csu_hihl7ybFY-B","type":"subtopic","position":{"x":-69.7527967008875,"y":1312.7412636056727},"selected":true,"data":{"label":"Cassandra","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1312.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"3gcXaOnHL4v5OoStrTWNV","type":"subtopic","position":{"x":-69.7527967008875,"y":1365.7412636056727},"selected":true,"data":{"label":"LiteDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1365.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"vHcwt6ARi5YR3v-eDDjfl","type":"subtopic","position":{"x":-69.7527967008875,"y":1418.7412636056727},"selected":true,"data":{"label":"CouchDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":137,"height":49,"style":{"width":137,"height":49},"positionAbsolute":{"x":-69.7527967008875,"y":1418.7412636056727},"dragging":false,"selectable":true,"focusable":true},{"id":"fQ3w8REYWzQfeJ0nPyq6W","type":"topic","position":{"x":171.8791275129173,"y":1337.0968472714264},"selected":true,"data":{"label":"Log Frameworks","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"7Nth4LOrM_KirhvjDGkgS"},"zIndex":999,"width":194,"height":49,"style":{"width":194,"height":49},"positionAbsolute":{"x":171.8791275129173,"y":1337.0968472714264},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"xL0s4-HfRxNy2ru0jiIWR","type":"subtopic","position":{"x":301.5766878818748,"y":1196.3470319033936},"selected":true,"data":{"label":"Serilog","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":149,"height":49,"style":{"width":149,"height":49},"positionAbsolute":{"x":301.5766878818748,"y":1196.3470319033936},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ykF2bB_68AhCOzeQ_QSW1","type":"subtopic","position":{"x":301.5766878818748,"y":1249.9839242654448},"selected":true,"data":{"label":"NLog","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":149,"height":49,"style":{"width":149,"height":49},"resizing":false,"dragging":false,"positionAbsolute":{"x":301.5766878818748,"y":1249.9839242654448},"selectable":true,"focusable":true},{"id":"GLkDH0X0uy8_1DIdCzbUD","type":"topic","position":{"x":485.3038707552415,"y":1536.4442094125654},"selected":true,"data":{"label":"API Clients and Communication","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"9Vv3OxafB6BlHhi1ZkeVO"},"zIndex":999,"width":287,"height":49,"style":{},"positionAbsolute":{"x":485.3038707552415,"y":1536.4442094125654},"dragging":false,"selectable":true,"focusable":true},{"id":"KJCtxH3mYsZq3hfBZ6cJF","type":"topic","position":{"x":675.6445601795068,"y":1450.7161593360722},"selected":true,"data":{"label":"REST","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"g"},"oldId":"BdTQ5ZMNDNZvkAUoCfL5H","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":98,"height":49,"style":{"width":98,"height":49},"positionAbsolute":{"x":675.6445601795068,"y":1450.7161593360722},"dragging":false,"selectable":true,"focusable":true},{"id":"w5RnrhsP4p-AdSOLYVAY9","type":"subtopic","position":{"x":675.6445601795068,"y":1338.7161593360722},"selected":true,"data":{"label":"Gridlify","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":98,"height":49,"style":{"width":98,"height":49},"positionAbsolute":{"x":675.6445601795068,"y":1338.7161593360722},"selectable":true,"focusable":true,"dragging":false},{"id":"YojZ5fpzw-5WgoqqkO6wl","type":"subtopic","position":{"x":675.6445601795068,"y":1391.7161593360722},"selected":true,"data":{"label":"Odata","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":98,"height":49,"style":{"width":98,"height":49},"dragging":false,"positionAbsolute":{"x":675.6445601795068,"y":1391.7161593360722},"selectable":true,"focusable":true},{"id":"BdTQ5ZMNDNZvkAUoCfL5H","type":"topic","position":{"x":493.92617572789345,"y":1450.7161593360722},"selected":true,"data":{"label":"GraphQL","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"g"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":170,"height":49,"style":{"width":170,"height":49},"positionAbsolute":{"x":493.92617572789345,"y":1450.7161593360722},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"Efxu9gDodODMTKJbWcXzB","type":"subtopic","position":{"x":493.92617572789345,"y":1338.7161593360722},"selected":true,"data":{"label":"GraphQL .NET","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":170,"height":49,"style":{"width":170,"height":49},"positionAbsolute":{"x":493.92617572789345,"y":1338.7161593360722},"selectable":true,"focusable":true,"dragging":false},{"id":"XMrQx9JH0eSQJpMzhvy0F","type":"subtopic","position":{"x":493.92617572789345,"y":1391.7161593360722},"selected":true,"data":{"label":"HotChocolate","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":170,"height":49,"style":{"width":170,"height":49},"positionAbsolute":{"x":493.92617572789345,"y":1391.7161593360722},"dragging":false,"selectable":true,"focusable":true},{"id":"x3SJlLc19DNJ-PyDOOj_G","type":"subtopic","position":{"x":675.6445601795068,"y":1636.7686788951287},"selected":true,"data":{"label":"gRPC","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":98,"height":49,"style":{"width":98,"height":49},"positionAbsolute":{"x":675.6445601795068,"y":1636.7686788951287},"dragging":false,"selectable":true,"focusable":true},{"id":"9Vv3OxafB6BlHhi1ZkeVO","type":"topic","position":{"x":-23.04576166270948,"y":1546.4442094125654},"selected":true,"data":{"label":"Real-Time Communication","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":248,"height":49,"style":{"width":248,"height":49},"positionAbsolute":{"x":-23.04576166270948,"y":1546.4442094125654},"dragging":false,"selectable":true,"focusable":true},{"id":"tBl8neu3tJd5GPwGfJbjZ","type":"subtopic","position":{"x":-279.20291471146976,"y":1522.4234770816188},"selected":true,"data":{"label":"Web Sockets","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":154,"height":49,"style":{"width":154,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":-279.20291471146976,"y":1522.4234770816188},"selectable":true,"focusable":true},{"id":"8dvd4M0TKNyQR8dEolGNT","type":"subtopic","position":{"x":-279.20291471146976,"y":1575.4234770816188},"selected":true,"data":{"label":"SignalR Core","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":154,"height":49,"style":{"width":154,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":-279.20291471146976,"y":1575.4234770816188},"selectable":true,"focusable":true},{"id":"9ECykIIvXlDblbFbRVcJS","type":"topic","position":{"x":-23.04576166270948,"y":1667.8598256215682},"selected":true,"data":{"label":"Object Mapping","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"s57tKy1rajlJbKFDVXLqs"},"zIndex":999,"width":248,"height":49,"style":{"width":248,"height":49},"positionAbsolute":{"x":-23.04576166270948,"y":1667.8598256215682},"dragging":false,"selectable":true,"focusable":true},{"id":"GPmlueMnuLCUW_t4jvGhc","type":"subtopic","position":{"x":323.18684756812684,"y":1614.8598256215682},"selected":true,"data":{"label":"AutoMapper","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"oMMBzRrHkUymxAR4oqr75","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":185,"height":49,"style":{"width":185,"height":49},"positionAbsolute":{"x":323.18684756812684,"y":1614.8598256215682},"selectable":true,"focusable":true,"resizing":false,"dragging":false},{"id":"x0OopRTwIvoWgT8qi0CE9","type":"subtopic","position":{"x":323.18684756812684,"y":1667.8598256215682},"selected":true,"data":{"label":"Mapperly","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"oMMBzRrHkUymxAR4oqr75","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":185,"height":49,"style":{"width":185,"height":49},"positionAbsolute":{"x":323.18684756812684,"y":1667.8598256215682},"selectable":true,"focusable":true,"resizing":false,"dragging":false},{"id":"oMMBzRrHkUymxAR4oqr75","type":"subtopic","position":{"x":323.18684756812684,"y":1720.8598256215682},"selected":true,"data":{"label":"Manual Mapping","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":185,"height":49,"style":{"width":185,"height":49},"positionAbsolute":{"x":323.18684756812684,"y":1720.8598256215682},"selectable":true,"focusable":true,"resizing":false,"dragging":false},{"id":"s57tKy1rajlJbKFDVXLqs","type":"topic","position":{"x":12.95423833729052,"y":1877.1363901779303},"selected":true,"data":{"label":"Task Scheduling","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":176,"height":49,"style":{"width":176,"height":49},"positionAbsolute":{"x":12.95423833729052,"y":1877.1363901779303},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"uP1nqbmFmZL_wA2DoqP8C","type":"subtopic","position":{"x":-174.71351420311524,"y":1750.8690373019726},"selected":true,"data":{"label":"Native Background Service","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":253,"height":49,"style":{},"positionAbsolute":{"x":-174.71351420311524,"y":1750.8690373019726},"dragging":false,"selectable":true,"focusable":true},{"id":"QiQsx1udyKcPJ-lZjRQVy","type":"subtopic","position":{"x":-227.96902609725535,"y":1825.145103688996},"selected":true,"data":{"label":"Hangfire","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":111,"height":49,"style":{"width":111,"height":49},"positionAbsolute":{"x":-227.96902609725535,"y":1825.145103688996},"dragging":false,"selectable":true,"focusable":true},{"id":"zOWlPXIl4XPs_0pA8-yi5","type":"subtopic","position":{"x":-227.96902609725535,"y":1878.145103688996},"selected":true,"data":{"label":"Quartz","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":111,"height":49,"style":{"width":111,"height":49},"positionAbsolute":{"x":-227.96902609725535,"y":1878.145103688996},"dragging":false,"selectable":true,"focusable":true},{"id":"p3bZnKIyRgLmB764Kkhju","type":"subtopic","position":{"x":-227.96902609725535,"y":1931.145103688996},"selected":true,"data":{"label":"Coravel","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":111,"height":49,"style":{"width":111,"height":49},"positionAbsolute":{"x":-227.96902609725535,"y":1931.145103688996},"dragging":false,"selectable":true,"focusable":true},{"id":"XofWWhlU_vWCG5oXVMZze","type":"topic","position":{"x":13.95423833729052,"y":1974.0673712978817},"selected":true,"data":{"label":"Testing","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"KIFmahcNiSo2NGoLtAyRR"},"zIndex":999,"width":174,"height":49,"style":{"width":174,"height":49},"positionAbsolute":{"x":13.95423833729052,"y":1974.0673712978817},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"AtyL0ij8FeJCBmqG2YvTO","type":"subtopic","position":{"x":327.50948132668987,"y":1868.0673712978817},"selected":true,"data":{"label":"Playwright","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"dragging":false,"positionAbsolute":{"x":327.50948132668987,"y":1868.0673712978817},"selectable":true,"focusable":true},{"id":"UCpoLiQJ4LeniI9x3uGcY","type":"subtopic","position":{"x":327.50948132668987,"y":1921.0673712978817},"selected":true,"data":{"label":"Puppeteer","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":1921.0673712978817},"selectable":true,"focusable":true,"dragging":false},{"id":"f2UP2jDnDr7XEFIdAtBhH","type":"subtopic","position":{"x":327.50948132668987,"y":1974.0673712978817},"selected":true,"data":{"label":"Cypress","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":1974.0673712978817},"selectable":true,"focusable":true,"dragging":false},{"id":"Xx5G09n4WWnnydCgxnL0A","type":"subtopic","position":{"x":515.2293649548315,"y":1867.0701218212512},"selected":true,"data":{"label":"WebApplicationFactory","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":246,"height":49,"style":{"width":246,"height":49},"dragging":false,"positionAbsolute":{"x":515.2293649548315,"y":1867.0701218212512},"selectable":true,"focusable":true},{"id":"8eW5BaOjJbnQ7uk4zMOiU","type":"subtopic","position":{"x":515.2293649548315,"y":1921.0673712978817},"selected":true,"data":{"label":"Test Containers","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":246,"height":49,"style":{"width":246,"height":49},"positionAbsolute":{"x":515.2293649548315,"y":1921.0673712978817},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"Ohc0xzI6qX4hOFVNfRj1F","type":"subtopic","position":{"x":515.2293649548315,"y":1973.0701218212512},"selected":true,"data":{"label":".NET Aspire","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"TCswZHviRiu6SIOwUisu8","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":140,"height":49,"style":{"width":140,"height":49},"positionAbsolute":{"x":515.2293649548315,"y":1973.0701218212512},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"TCswZHviRiu6SIOwUisu8","type":"subtopic","position":{"x":661.9711685016747,"y":1974.0673712978817},"selected":true,"data":{"label":"Respawn","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":661.9711685016747,"y":1974.0673712978817},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"9WZmjiFowydYrkHQ2xeNm","type":"subtopic","position":{"x":327.50948132668987,"y":2096.750904410703},"selected":true,"data":{"label":"Specflow","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"aWRv5sU9dksgcpE9RGJb1","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":2096.750904410703},"dragging":false,"selectable":true,"focusable":true},{"id":"aWRv5sU9dksgcpE9RGJb1","type":"subtopic","position":{"x":327.50948132668987,"y":2150.750904410703},"selected":true,"data":{"label":"Light BDD","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":2150.750904410703},"dragging":false,"selectable":true,"focusable":true},{"id":"rcr1V3vhuilYbvgaQm7IE","type":"label","position":{"x":541.8494981027027,"y":2050.250904410703},"selected":true,"data":{"label":"Unit Testing Frameworks","href":"","color":"#000000","style":{"fontSize":17},"oldId":"FjpBEi77yGh9oSsHdh7mf"},"zIndex":999,"width":205,"height":36,"style":{},"positionAbsolute":{"x":541.8494981027027,"y":2050.250904410703},"dragging":false,"selectable":true,"focusable":true},{"id":"R8C6s53RYjkRVma0nCJpy","type":"subtopic","position":{"x":606.1986160843118,"y":2095.5613753534185},"selected":true,"data":{"label":"XUnit","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"236VJJjMvqHfSj-MHSDPV","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":75,"height":49,"style":{"width":75,"height":49},"positionAbsolute":{"x":606.1986160843118,"y":2095.5613753534185},"dragging":false,"selectable":true,"focusable":true},{"id":"qHYBlBCvCGUZGh6gyEI63","type":"subtopic","position":{"x":689.8451259605433,"y":2095.5613753534185},"selected":true,"data":{"label":"NUnit","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":70,"height":49,"style":{"width":70,"height":49},"positionAbsolute":{"x":689.8451259605433,"y":2095.5613753534185},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"TAKxVS6DfIhmSJ6oOQxOM","type":"label","position":{"x":574.7823116265199,"y":2153.223734582062},"selected":true,"data":{"label":"Assertions","href":"","color":"#000000","style":{"fontSize":17},"oldId":"nYOf8Q0lWnzBdGRHbdwwq"},"zIndex":999,"width":99,"height":26,"style":{"width":99.0003662109375,"height":26.3497314453125},"positionAbsolute":{"x":574.7823116265199,"y":2153.223734582062},"dragging":false,"selectable":true,"focusable":true},{"id":"zhn-VLGPfV6FZT2OMl6zf","type":"subtopic","position":{"x":513.8451259605433,"y":2188.41097832855},"selected":true,"data":{"label":"Shouldly","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"diRJ_F6kx42Ucs0fxidtZ","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":246,"height":49,"style":{"width":246,"height":49},"dragging":false,"positionAbsolute":{"x":513.8451259605433,"y":2188.41097832855},"selectable":true,"focusable":true},{"id":"nYOf8Q0lWnzBdGRHbdwwq","type":"label","position":{"x":576.1665506208079,"y":2246.563695311414},"selected":true,"data":{"label":"Mocking","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":99,"height":26,"style":{"width":99.0003662109375,"height":26.3497314453125},"positionAbsolute":{"x":576.1665506208079,"y":2246.563695311414},"dragging":false,"selectable":true,"focusable":true},{"id":"iZCxinqlVefBk5-ICqt4v","type":"subtopic","position":{"x":515.2293649548313,"y":2286.8339739890553},"selected":true,"data":{"label":"NSubstitute","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"diRJ_F6kx42Ucs0fxidtZ","legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":246,"height":49,"style":{"width":246,"height":49},"dragging":false,"positionAbsolute":{"x":515.2293649548313,"y":2286.8339739890553},"selectable":true,"focusable":true},{"id":"eyOXWb1kL80Wqiwc2WHd_","type":"subtopic","position":{"x":515.2293649548313,"y":2340.8339739890553},"selected":true,"data":{"label":"Moq","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"diRJ_F6kx42Ucs0fxidtZ","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"dragging":false,"positionAbsolute":{"x":515.2293649548313,"y":2340.8339739890553},"resizing":false,"selectable":true,"focusable":true},{"id":"diRJ_F6kx42Ucs0fxidtZ","type":"subtopic","position":{"x":629.1665506208079,"y":2340.8339739890553},"selected":true,"data":{"label":"FakeItEasy","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":133,"height":49,"style":{"width":133,"height":49},"dragging":false,"positionAbsolute":{"x":629.1665506208079,"y":2340.8339739890553},"resizing":false,"selectable":true,"focusable":true},{"id":"K49M_7gSpfJuZaE6WaHxQ","type":"subtopic","position":{"x":327.50948132668987,"y":2287.0368559257836},"selected":true,"data":{"label":"AutoFixture","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"dragging":false,"positionAbsolute":{"x":327.50948132668987,"y":2287.0368559257836},"selectable":true,"focusable":true},{"id":"QERTjawqCCCkHfR44Ca0s","type":"subtopic","position":{"x":327.50948132668987,"y":2340.8339739890553},"selected":true,"data":{"label":"Bogus","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":327.50948132668987,"y":2340.8339739890553},"dragging":false,"selectable":true,"focusable":true},{"id":"37c2eCvRdebztkbc5AjYp","type":"topic","position":{"x":17.45423833729052,"y":2063.676280366376},"selected":true,"data":{"label":"Microservices","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"KIFmahcNiSo2NGoLtAyRR"},"zIndex":999,"width":167,"height":49,"style":{"width":167,"height":49},"positionAbsolute":{"x":17.45423833729052,"y":2063.676280366376},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"_cHDH4bo1Q_Ru9iuKaPQa","type":"label","position":{"x":362.0094813266899,"y":1817.460323803236},"selected":true,"data":{"label":"E2E Testing","href":"","color":"#000000","style":{"fontSize":17},"oldId":"GbK3uwt1x7Bp_rSXCHYwL"},"zIndex":999,"width":108,"height":36,"style":{},"positionAbsolute":{"x":362.0094813266899,"y":1817.460323803236},"dragging":false,"selectable":true,"focusable":true},{"id":"FjpBEi77yGh9oSsHdh7mf","type":"label","position":{"x":558.7293649548313,"y":1817.460323803236},"selected":true,"data":{"label":"Integration Testing","href":"","color":"#000000","style":{"fontSize":17},"oldId":"nYOf8Q0lWnzBdGRHbdwwq"},"zIndex":999,"width":159,"height":36,"style":{},"positionAbsolute":{"x":558.7293649548313,"y":1817.460323803236},"dragging":false,"selectable":true,"focusable":true},{"id":"8sr7NcSsrn67x75-vYLNQ","type":"label","position":{"x":344.00948132668987,"y":2050.250904410703},"selected":true,"data":{"label":"Behavior Testing","href":"","color":"#000000","style":{"fontSize":17},"oldId":"GbK3uwt1x7Bp_rSXCHYwL"},"zIndex":999,"width":144,"height":36,"style":{},"positionAbsolute":{"x":344.00948132668987,"y":2050.250904410703},"dragging":false,"selectable":true,"focusable":true},{"id":"GbK3uwt1x7Bp_rSXCHYwL","type":"label","position":{"x":323.50948132668987,"y":2236.563695311414},"selected":true,"data":{"label":"Fake Data Generation","href":"","color":"#000000","style":{"fontSize":17},"oldId":"FjpBEi77yGh9oSsHdh7mf"},"zIndex":999,"width":185,"height":36,"style":{},"positionAbsolute":{"x":323.50948132668987,"y":2236.563695311414},"dragging":false,"selectable":true,"focusable":true},{"id":"eMolc0UKdEgLDFJ2FximV","type":"label","position":{"x":-232.74239716008708,"y":2052.181173440632},"selected":true,"data":{"label":"Message Brokers","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":151,"height":36,"style":{},"positionAbsolute":{"x":-232.74239716008708,"y":2052.181173440632},"dragging":false,"selectable":true,"focusable":true},{"id":"sNYYEBMHV_NO_NToP51VY","type":"subtopic","position":{"x":-265.73144955169835,"y":2099.622670740455},"selected":true,"data":{"label":"ActiveMQ","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":109,"height":49,"style":{"width":109,"height":49},"positionAbsolute":{"x":-265.73144955169835,"y":2099.622670740455},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"L8RkeMYm0WGNeLLcHKF1R","type":"subtopic","position":{"x":-152.38897900509676,"y":2098.622670740455},"selected":true,"data":{"label":"Kafka","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":100,"height":50,"style":{"width":100,"height":50},"positionAbsolute":{"x":-152.38897900509676,"y":2098.622670740455},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"KqvBn2_wvYhFdv0dBZMC9","type":"subtopic","position":{"x":-265.73144955169835,"y":2153.622670740455},"selected":true,"data":{"label":"RabbitMQ","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":109,"height":49,"style":{"width":109,"height":49},"positionAbsolute":{"x":-265.73144955169835,"y":2153.622670740455},"dragging":false,"resizing":true,"selectable":true,"focusable":true},{"id":"8d4f7_3VO03vy7YDWwPI9","type":"subtopic","position":{"x":-152.73144955169835,"y":2153.622670740455},"selected":true,"data":{"label":"NetMQ","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":-152.73144955169835,"y":2153.622670740455},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"gBuaVZfqJ0-g21sKohQtx","type":"subtopic","position":{"x":-265.73144955169835,"y":2205.56858838567},"selected":true,"data":{"label":"Azure Service Bus","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"positionAbsolute":{"x":-265.73144955169835,"y":2205.56858838567},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"X0hmqW8LAkhBGprxP8iBo","type":"label","position":{"x":-222.74239716008708,"y":2268.838867063311},"selected":true,"data":{"label":"Message Bus","href":"","color":"#000000","style":{"fontSize":17},"oldId":"Kq2TQn9DN1bIy9fWSSCkP"},"zIndex":999,"width":121,"height":36,"style":{},"positionAbsolute":{"x":-222.74239716008708,"y":2268.838867063311},"dragging":false,"selectable":true,"focusable":true},{"id":"SQKIUa_UsJ4cls-Vs9yHU","type":"subtopic","position":{"x":-263.84712995368886,"y":2357.838867063311},"selected":true,"data":{"label":"Mass Transit","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"dragging":false,"positionAbsolute":{"x":-263.84712995368886,"y":2357.838867063311},"selectable":true,"focusable":true},{"id":"vf8W1FLhcb3awx4JBaY5r","type":"subtopic","position":{"x":-263.84712995368886,"y":2304.838867063311},"selected":true,"data":{"label":"NServiceBus","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"dragging":false,"positionAbsolute":{"x":-263.84712995368886,"y":2304.838867063311},"selectable":true,"focusable":true},{"id":"X6iSHoHnFFMaGb6YPQFhl","type":"subtopic","position":{"x":-263.84712995368886,"y":2410.838867063311},"selected":true,"data":{"label":"EasyNetQ","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"02rtFStTeIm8prNskxaUN","legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"positionAbsolute":{"x":-263.84712995368886,"y":2410.838867063311},"dragging":false,"selectable":true,"focusable":true},{"id":"TY3iovpKLvTqPQmbQFTRW","type":"label","position":{"x":-220.21191851316905,"y":2470.937760229362},"selected":true,"data":{"label":"API Gateway","href":"","color":"#000000","style":{"fontSize":17},"oldId":"Kq2TQn9DN1bIy9fWSSCkP"},"zIndex":999,"width":113,"height":36,"style":{},"positionAbsolute":{"x":-220.21191851316905,"y":2470.937760229362},"dragging":false,"selectable":true,"focusable":true},{"id":"2k-rGuhYTTAR9XN3aDAnW","type":"subtopic","position":{"x":-264.38897900509687,"y":2510.049532546853},"selected":true,"data":{"label":"Ocelot","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":108,"height":49,"style":{"width":108,"height":49},"positionAbsolute":{"x":-264.38897900509687,"y":2510.049532546853},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"2axfolu26P8XwxMxgMaS3","type":"subtopic","position":{"x":-153.38897900509676,"y":2510.049532546853},"selected":true,"data":{"label":"YARP","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":102,"height":49,"style":{"width":102,"height":49},"positionAbsolute":{"x":-153.38897900509676,"y":2510.049532546853},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"4ObSoVqiiYzV_Ph0UdSr-","type":"label","position":{"x":-233.24239716008708,"y":2568.739205506869},"selected":true,"data":{"label":"Containerization","href":"","color":"#000000","style":{"fontSize":17},"oldId":"Kq2TQn9DN1bIy9fWSSCkP"},"zIndex":999,"width":142,"height":36,"style":{},"positionAbsolute":{"x":-233.24239716008708,"y":2568.739205506869},"dragging":false,"selectable":true,"focusable":true},{"id":"rmRESzLiZNWdBFXLrwQFJ","type":"subtopic","position":{"x":-263.7423971600871,"y":2604.739205506869},"selected":true,"data":{"label":"Docker","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"02rtFStTeIm8prNskxaUN","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"positionAbsolute":{"x":-263.7423971600871,"y":2604.739205506869},"dragging":false,"selectable":true,"focusable":true},{"id":"02rtFStTeIm8prNskxaUN","type":"subtopic","position":{"x":-263.7423971600871,"y":2658.739205506869},"selected":true,"data":{"label":"Kubernetes","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"positionAbsolute":{"x":-263.7423971600871,"y":2658.739205506869},"dragging":false,"selectable":true,"focusable":true},{"id":"Kq2TQn9DN1bIy9fWSSCkP","type":"label","position":{"x":-192.8408171232163,"y":2721.005494878551},"selected":true,"data":{"label":"Other","href":"","color":"#000000","style":{"fontSize":17},"oldId":"eMolc0UKdEgLDFJ2FximV"},"zIndex":999,"width":60,"height":36,"style":{},"positionAbsolute":{"x":-192.8408171232163,"y":2721.005494878551},"dragging":false,"selectable":true,"focusable":true},{"id":"HqhqqiA5X00Xl1RnZgrNJ","type":"subtopic","position":{"x":-263.7423971600871,"y":2767.6564093838533},"selected":true,"data":{"label":".NET Aspire","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"IHY9uL3dzYmf2D2wWgIh-","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":-263.7423971600871,"y":2767.6564093838533},"selectable":true,"focusable":true},{"id":"XKsLqDDco5OXKURCcWAmv","type":"subtopic","position":{"x":-263.7423971600871,"y":2821.6564093838533},"selected":true,"data":{"label":"Orleans","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"s8evqe2MireS1UhxoXrd1","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"resizing":true,"positionAbsolute":{"x":-263.7423971600871,"y":2821.6564093838533},"dragging":false,"selectable":true,"focusable":true},{"id":"s8evqe2MireS1UhxoXrd1","type":"subtopic","position":{"x":-158.74239716008708,"y":2821.6564093838533},"selected":true,"data":{"label":"SteelToe","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":106,"height":49,"style":{"width":106,"height":49},"resizing":false,"positionAbsolute":{"x":-158.74239716008708,"y":2821.6564093838533},"dragging":false,"selectable":true,"focusable":true},{"id":"IHY9uL3dzYmf2D2wWgIh-","type":"subtopic","position":{"x":-263.7423971600871,"y":2877.548245909759},"selected":true,"data":{"label":"Dapr","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":213,"height":49,"style":{"width":213,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":-263.7423971600871,"y":2877.548245909759},"selectable":true,"focusable":true},{"id":"KIFmahcNiSo2NGoLtAyRR","type":"topic","position":{"x":7.454238337290576,"y":2473.154603018019},"selected":true,"data":{"label":"CI / CD","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":187,"height":49,"style":{"width":187,"height":49},"positionAbsolute":{"x":7.454238337290576,"y":2473.154603018019},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"0-PLMXGlRyRzTk-EjXMs2","type":"subtopic","position":{"x":129.19572608840792,"y":2215.258261345686},"selected":true,"data":{"label":"GitHub Actions","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"8Y73Ae32eo6_ye7dw5QRQ","legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":129.19572608840792,"y":2215.258261345686},"dragging":false,"selectable":true,"focusable":true},{"id":"_-GQNpsb7KZw76hNNOq3h","type":"subtopic","position":{"x":129.19572608840792,"y":2268.258261345686},"selected":true,"data":{"label":"Azure Pipelines","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"8Y73Ae32eo6_ye7dw5QRQ","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":129.19572608840792,"y":2268.258261345686},"dragging":false,"selectable":true,"focusable":true},{"id":"8Y73Ae32eo6_ye7dw5QRQ","type":"subtopic","position":{"x":129.19572608840792,"y":2321.258261345686},"selected":true,"data":{"label":"GitLab CI/CD","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":129.19572608840792,"y":2321.258261345686},"dragging":false,"selectable":true,"focusable":true},{"id":"KyGjXgG6JFo42qOV0wqfB","type":"subtopic","position":{"x":129.19572608840792,"y":2374.258261345686},"selected":true,"data":{"label":"Circle CI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":164,"height":49,"style":{"width":164,"height":49},"positionAbsolute":{"x":129.19572608840792,"y":2374.258261345686},"dragging":false,"selectable":true,"focusable":true},{"id":"RX_6yD1QGLEGwV4j6z_g-","type":"button","position":{"x":301.96419656583225,"y":2473.154603018019},"selected":true,"data":{"label":"Software Design and Architecture","href":"https://roadmap.sh/software-design-architecture","color":"#ffffff","backgroundColor":"#2a79e4","style":{"fontSize":17}},"zIndex":999,"width":302,"height":49,"style":{"width":302,"height":49},"positionAbsolute":{"x":301.96419656583225,"y":2473.154603018019},"dragging":false,"selectable":true,"focusable":true},{"id":"C85aJvrzj6rP2Hmfj9uPB","type":"topic","position":{"x":356.96419656583225,"y":2654.6289816349786},"selected":true,"data":{"label":"Template Engines","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"1YL7aXluINOO15W3waaiD"},"zIndex":999,"width":192,"height":49,"style":{"width":192,"height":49},"positionAbsolute":{"x":356.96419656583225,"y":2654.6289816349786},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"nUE2-egUMNFQoPVrVRFPl","type":"subtopic","position":{"x":76.43680101835645,"y":2604.2447426406907},"selected":true,"data":{"label":"Razor","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":76.43680101835645,"y":2604.2447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"dWB5OCvWVYkD30Op_dMwy","type":"subtopic","position":{"x":76.43680101835645,"y":2657.2447426406907},"selected":true,"data":{"label":"Scriban","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"positionAbsolute":{"x":76.43680101835645,"y":2657.2447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"ZaOhWWDgVxrn0hbesJ7xT","type":"subtopic","position":{"x":76.43680101835645,"y":2710.2447426406907},"selected":true,"data":{"label":"Fluid","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":177,"height":49,"style":{"width":177,"height":49},"resizing":false,"positionAbsolute":{"x":76.43680101835645,"y":2710.2447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"1YL7aXluINOO15W3waaiD","type":"topic","position":{"x":356.96419656583225,"y":2710.2447426406907},"selected":true,"data":{"label":"Frameworks","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":192,"height":49,"style":{"width":192,"height":49},"positionAbsolute":{"x":356.96419656583225,"y":2710.2447426406907},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"o2oks1bG_-8InCKVol_s3","type":"label","position":{"x":369.96419656583225,"y":2605.7447426406907},"selected":true,"data":{"label":"Client-Side .NET","href":"","color":"#000000","style":{"fontSize":20},"oldId":"nw-pE4itvz1D7BWtyx5cm"},"zIndex":999,"width":166,"height":36,"style":{},"positionAbsolute":{"x":369.96419656583225,"y":2605.7447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"4iD_hDtgJ15IlJGxiO-E8","type":"subtopic","position":{"x":625.7530528135321,"y":2657.2447426406907},"selected":true,"data":{"label":"Blazor","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":138,"height":49,"style":{"width":138,"height":49},"positionAbsolute":{"x":625.7530528135321,"y":2657.2447426406907},"dragging":false,"selectable":true,"focusable":true},{"id":"olqSPUU3RoxhQ6exfMzeN","type":"subtopic","position":{"x":625.7530528135321,"y":2710.2447426406907},"selected":true,"data":{"label":".NET MAUI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"right-center"}},"zIndex":999,"width":138,"height":49,"style":{"width":138,"height":49},"positionAbsolute":{"x":625.7530528135321,"y":2710.2447426406907},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"ao7YnoJ31qQxcItMY8XJU","type":"vertical","position":{"x":430.5766878818748,"y":2504.6289816349786},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":20,"height":85,"style":{"width":20,"height":85},"positionAbsolute":{"x":430.5766878818748,"y":2504.6289816349786},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"nw-pE4itvz1D7BWtyx5cm","type":"label","position":{"x":340.96419656583225,"y":2866.0426302976452},"selected":true,"data":{"label":"Good-to-Know Libraries","href":"","color":"#000000","style":{"fontSize":20}},"zIndex":999,"width":231,"height":36,"style":{},"positionAbsolute":{"x":340.96419656583225,"y":2866.0426302976452},"dragging":false,"selectable":true,"focusable":true},{"id":"Zb4Gugxf7d6MoeEcfngrV","type":"subtopic","position":{"x":44.10695532015461,"y":2803.2129376580287},"selected":true,"data":{"label":"Scalar","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"resizing":false,"positionAbsolute":{"x":44.10695532015461,"y":2803.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"cc0UNQwbDlySue-CvpChR","type":"subtopic","position":{"x":151.82344177403695,"y":2803.2129376580287},"selected":true,"data":{"label":"MediatR","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":151.82344177403695,"y":2803.2129376580287},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"sa0zXd8lpNs_SFQ2y-PY4","type":"subtopic","position":{"x":44.10695532015461,"y":2856.2129376580287},"selected":true,"data":{"label":"FluentValidation","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion","position":"left-center"}},"zIndex":999,"width":207,"height":49,"style":{"width":207,"height":49},"positionAbsolute":{"x":44.10695532015461,"y":2856.2129376580287},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"gQhiEpvx__70N1WbEHGYJ","type":"subtopic","position":{"x":44.10695532015461,"y":2909.2129376580287},"selected":true,"data":{"label":"Polly","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"EsC1JwFOMOlQVelpmxISh","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":44.10695532015461,"y":2909.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"ipb6proIZKG-_vCOMAiBu","type":"subtopic","position":{"x":151.82344177403695,"y":2910.2477050182865},"selected":true,"data":{"label":"Marten","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":100,"height":49,"style":{"width":100,"height":49},"positionAbsolute":{"x":151.82344177403695,"y":2910.2477050182865},"dragging":false,"selectable":true,"focusable":true},{"id":"EsC1JwFOMOlQVelpmxISh","type":"subtopic","position":{"x":43.6576825168454,"y":2962.2129376580287},"selected":true,"data":{"label":"Nuke","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"ipb6proIZKG-_vCOMAiBu","legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"left-center"}},"zIndex":999,"width":207,"height":49,"style":{"width":207,"height":49},"positionAbsolute":{"x":43.6576825168454,"y":2962.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"9LEVN-uVEwxJooEiB9ApK","type":"subtopic","position":{"x":44.10695532015461,"y":3015.2129376580287},"selected":true,"data":{"label":"Benchmark.NET","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"T2FsSndxzSuKTFdjoyPi-","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":207,"height":49,"style":{"width":207,"height":49},"positionAbsolute":{"x":44.10695532015461,"y":3015.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"T2FsSndxzSuKTFdjoyPi-","type":"subtopic","position":{"x":44.10695532015461,"y":3069.2129376580287},"selected":true,"data":{"label":"Distributed Lock","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"EsC1JwFOMOlQVelpmxISh","legend":{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500","position":"left-center"}},"zIndex":999,"width":207,"height":49,"style":{"width":207,"height":49},"positionAbsolute":{"x":44.10695532015461,"y":3069.2129376580287},"dragging":false,"selectable":true,"focusable":true},{"id":"Gc82P2ClaRuPMM1N6k2bN","type":"horizontal","position":{"x":262.57187640085726,"y":2873.7129376580287},"selected":true,"data":{"label":"horizontal node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":62,"height":20,"style":{"width":62,"height":20},"positionAbsolute":{"x":262.57187640085726,"y":2873.7129376580287},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"wyzDVcQ87PRh0y2LIfvSU","type":"vertical","position":{"x":433.5766878818748,"y":2926.548245909759},"selected":true,"data":{"label":"vertical node","style":{"stroke":"#2B78E4","strokeWidth":3.75}},"zIndex":999,"width":20,"height":80,"style":{"width":20,"height":80},"positionAbsolute":{"x":433.5766878818748,"y":2926.548245909759},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"q2z_1wnPUnWM7MYIIUyBg","type":"legend","position":{"x":-279.20291471146976,"y":-129.55580566097228},"selected":true,"data":{"label":"","legends":[{"id":"FURC-X3vopFKhZ0F5BdYH","color":"#2b78e4","label":"Personal Recommendation / Opinion"},{"id":"sRAiZODQQ8xrMiVpCdnI7","label":"Alternative Options","color":"#6d7500"},{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999"}]},"zIndex":999,"width":351,"height":130,"positionAbsolute":{"x":-279.20291471146976,"y":-129.55580566097228},"dragging":false,"style":{"width":351,"height":130},"resizing":false,"selectable":true,"focusable":true},{"id":"2zqZkyVgigifcRS1H7F_b","type":"button","position":{"x":-278.429978402122,"y":55.94269326868894},"selected":true,"data":{"label":"Moien Tajik","href":"https://github.com/MoienTajik","color":"#000000","backgroundColor":"#d1d1d1","style":{"fontSize":17},"borderColor":"#D1D1D1"},"zIndex":999,"width":351,"height":49,"dragging":false,"style":{"width":351,"height":49},"resizing":false,"positionAbsolute":{"x":-278.429978402122,"y":55.94269326868894},"selectable":true,"focusable":true},{"id":"azsxJoFI1qHGwcNGw8c28","type":"label","position":{"x":-280.929978402122,"y":14.90074822234891},"selected":true,"data":{"label":"Special thanks for the roadmap contribution","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":351,"height":36,"positionAbsolute":{"x":-280.929978402122,"y":14.90074822234891},"dragging":false,"selectable":true,"focusable":true},{"id":"236VJJjMvqHfSj-MHSDPV","type":"subtopic","position":{"x":516.9641965658323,"y":2095.5613753534185},"selected":true,"data":{"label":"MSTest","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"qHYBlBCvCGUZGh6gyEI63","legend":{"id":"zgW3oGPdbclWTlKJdidiB","label":"Optional / Learn anytime","color":"#999999","position":"right-center"}},"zIndex":999,"width":80,"height":49,"style":{"width":80,"height":49},"positionAbsolute":{"x":516.9641965658323,"y":2095.5613753534185},"dragging":false,"selectable":true,"focusable":true,"resizing":false}],"edges":[{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"iogwMmOvub2ZF4zgg6WyF","sourceHandle":"x2","target":"_hYN0gEi9BL24nptEtXWU","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"XX0I26JoVMVXIe_7bVMix","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"idLHBxhvcIqZTqmh_E8Az","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"dFn6kGOoJ-0BzJJEb9DSG","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"os3Pa6W9SSNEzgmlBbglQ","targetHandle":"y2","data":{"edgeStyle":"dashed"},"id":"arkF7QJJRbCBYWp0crqa2","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"3oInpqvTSSC5_K6i7j8N7","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"HNVw8OboycWKLEtEbG2bn","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"YKhuRbcUFzo0hTvuTq-Yl","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"auB7Png72XjmhcLr3IJA7","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"jZ67HhVRelJaxjsCckSSI","sourceHandle":"x2","target":"hWA7RtuqltMTmHdcCnmES","targetHandle":"y1","data":{"edgeStyle":"solid"},"id":"2aoDIr80lXSJLW1hIGUkb","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"sourceHandle":"z2","target":"NMznG9mo2wzNFnjhg990f","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"m-_y7nLeYFkUKGiacxWA0","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"sourceHandle":"z2","target":"gc_7cuIO2_joKlQRAPDfX","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"G7pXuJfkyt2nWAOHU8yV0","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"rrrvATyhXqRgJGWI3z0WF","sourceHandle":"x2","target":"AvbMQ5vY3ip1oX_6Yq4ie","targetHandle":"w2","data":{"edgeStyle":"dashed"},"id":"2_6Yz3-Agx9_rEN5xW86c","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"hWA7RtuqltMTmHdcCnmES","sourceHandle":"w2","target":"1AJv95mTLpR7L8KBoGym8","targetHandle":"x1","data":{"edgeStyle":"dashed"},"id":"kgMI98fg2-mKMgUs0wnjD","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"hWA7RtuqltMTmHdcCnmES","sourceHandle":"y2","target":"0etAs56EeBfh_0IlAaSra","targetHandle":"w1","data":{"edgeStyle":"solid"},"selected":true,"id":"ts38Q2ceHs60TJscUBZVE","focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"jZ67HhVRelJaxjsCckSSI","sourceHandle":"y2","target":"h6ceO0kiBIxNRkPzN3hBY","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"ZiMV7umyPdhy3JJDcopR-","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"jZ67HhVRelJaxjsCckSSI","sourceHandle":"y2","target":"_JlT9oKQ6Yu4UX6l19G8P","targetHandle":"z2","data":{"edgeStyle":"dashed"},"id":"WI-MhbxrehFcVwyGJ5CQJ","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"x2","target":"jZ67HhVRelJaxjsCckSSI","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"qUrLBzvXvJOg53HBfjrOI","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"Ji35JsKgUQXN4DJGEgTAC","sourceHandle":"x2","target":"t3Op8UcgDKVeMLNMDePrW","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-Ji35JsKgUQXN4DJGEgTACx2-t3Op8UcgDKVeMLNMDePrWw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"Ji35JsKgUQXN4DJGEgTAC","sourceHandle":"x2","target":"c2YZ7PPCX1jF_RU7C0AqN","targetHandle":"w2","data":{"edgeStyle":"solid"},"id":"reactflow__edge-Ji35JsKgUQXN4DJGEgTACx2-c2YZ7PPCX1jF_RU7C0AqNw2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"KMA7NkxFbPoUDtFnGBFnj","sourceHandle":"x2","target":"0vLaVNJaJSHZ_bHli6Qzs","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-KMA7NkxFbPoUDtFnGBFnjx2-0vLaVNJaJSHZ_bHli6Qzsw1","selected":true,"type":"simplebezier","focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"DYkdM_L7T2GcTPAoZNnUR","sourceHandle":"x2","target":"0vLaVNJaJSHZ_bHli6Qzs","targetHandle":"z1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-DYkdM_L7T2GcTPAoZNnURx2-0vLaVNJaJSHZ_bHli6Qzsz1","selected":true,"type":"smoothstep","selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NvODRFR0DLINB0RlPSsvt","sourceHandle":"z2","target":"fxANnSiTb2VzA9u-YeBL1","targetHandle":"y2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-fxANnSiTb2VzA9u-YeBL1y2","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NvODRFR0DLINB0RlPSsvt","sourceHandle":"z2","target":"3GGvuxdfuDwLpNX_gtjCK","targetHandle":"y2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-3GGvuxdfuDwLpNX_gtjCKy2","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"y2","target":"OtdCmkj0SvrGwCUSfm96C","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-y2-OtdCmkj0SvrGwCUSfm96Cz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"y2","target":"KAZF-mIg-FlfMonfdOLhb","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-y2-KAZF-mIg-FlfMonfdOLhbz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"y2","target":"YI3cAezupWNntFw4B6elY","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-y2-YI3cAezupWNntFw4B6elYz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"y2","target":"RAX2xN37taw9cqA3pnORh","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-y2-RAX2xN37taw9cqA3pnORhz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NEnna_8DstfYH4T9qrP3-","sourceHandle":"x2","target":"tnKUdsgp6bnFtQTexEmfy","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-NEnna_8DstfYH4T9qrP3-x2-tnKUdsgp6bnFtQTexEmfyw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"aOJMVrTcA_I2y_QHzj7aM","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-aOJMVrTcA_I2y_QHzj7aMy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"zlAcgLKxGF_TyrcJIk4X7","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-zlAcgLKxGF_TyrcJIk4X7y1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"ZiK-c9zNbi5RZkKUi44wP","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-ZiK-c9zNbi5RZkKUi44wPy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"1-XdtrGPbUoxpu9ZcQlBA","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-1-XdtrGPbUoxpu9ZcQlBAy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"z2","target":"2f_CJMnXwPxjMEwm5P_QJ","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyz2-2f_CJMnXwPxjMEwm5P_QJy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tnKUdsgp6bnFtQTexEmfy","sourceHandle":"y2","target":"v2ZTCQQFQPoJNhOVGMG2g","targetHandle":"z1","data":{"edgeStyle":"solid"},"selected":true,"id":"reactflow__edge-tnKUdsgp6bnFtQTexEmfyy2-v2ZTCQQFQPoJNhOVGMG2gz1","selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NvODRFR0DLINB0RlPSsvt","sourceHandle":"z2","target":"R7Qk5hsEIl9dspQXdaJAJ","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-R7Qk5hsEIl9dspQXdaJAJy1","selected":true,"focusable":true,"selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"v2ZTCQQFQPoJNhOVGMG2g","sourceHandle":"z2","target":"POQPoN98eqOH2873ZI6Hm","targetHandle":"y1","data":{"edgeStyle":"solid"},"selected":true,"focusable":true,"id":"reactflow__edge-v2ZTCQQFQPoJNhOVGMG2gz2-POQPoN98eqOH2873ZI6Hmy1","selectable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"IejHMMVKwA0sIInla4FjX","sourceHandle":"z2","target":"Tjaczp2E-cCn0qSv89xgo","targetHandle":"y1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-7Nth4LOrM_KirhvjDGkgSz2-Tjaczp2E-cCn0qSv89xgoy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"7Nth4LOrM_KirhvjDGkgS","sourceHandle":"y2","target":"FV4GsPjUyAc99DnIwkkCC","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-7Nth4LOrM_KirhvjDGkgSy2-FV4GsPjUyAc99DnIwkkCCz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"7Nth4LOrM_KirhvjDGkgS","sourceHandle":"w2","target":"8CRsr7UZszjc_fZ-4ZmIx","targetHandle":"x1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-7Nth4LOrM_KirhvjDGkgSw2-8CRsr7UZszjc_fZ-4ZmIxx1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"Ujzn_dILCA7xoupnz398l","sourceHandle":"x2","target":"fQ3w8REYWzQfeJ0nPyq6W","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-Ujzn_dILCA7xoupnz398lx2-fQ3w8REYWzQfeJ0nPyq6Ww1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9Vv3OxafB6BlHhi1ZkeVO","sourceHandle":"y2","target":"tBl8neu3tJd5GPwGfJbjZ","targetHandle":"z2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-9Vv3OxafB6BlHhi1ZkeVOy2-tBl8neu3tJd5GPwGfJbjZz2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9Vv3OxafB6BlHhi1ZkeVO","sourceHandle":"y2","target":"8dvd4M0TKNyQR8dEolGNT","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-9Vv3OxafB6BlHhi1ZkeVOy2-8dvd4M0TKNyQR8dEolGNTz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9Vv3OxafB6BlHhi1ZkeVO","sourceHandle":"x2","target":"9ECykIIvXlDblbFbRVcJS","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-9Vv3OxafB6BlHhi1ZkeVOx2-s57tKy1rajlJbKFDVXLqsw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9ECykIIvXlDblbFbRVcJS","sourceHandle":"z2","target":"GPmlueMnuLCUW_t4jvGhc","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsz2-GPmlueMnuLCUW_t4jvGhcy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9ECykIIvXlDblbFbRVcJS","sourceHandle":"z2","target":"x0OopRTwIvoWgT8qi0CE9","targetHandle":"y2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsz2-x0OopRTwIvoWgT8qi0CE9y2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9ECykIIvXlDblbFbRVcJS","sourceHandle":"z2","target":"oMMBzRrHkUymxAR4oqr75","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsz2-oMMBzRrHkUymxAR4oqr75y1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"9ECykIIvXlDblbFbRVcJS","sourceHandle":"x2","target":"s57tKy1rajlJbKFDVXLqs","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-9ECykIIvXlDblbFbRVcJSx2-s57tKy1rajlJbKFDVXLqsw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"s57tKy1rajlJbKFDVXLqs","sourceHandle":"y2","target":"QiQsx1udyKcPJ-lZjRQVy","targetHandle":"z2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsy2-QiQsx1udyKcPJ-lZjRQVyz2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"s57tKy1rajlJbKFDVXLqs","sourceHandle":"y2","target":"p3bZnKIyRgLmB764Kkhju","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsy2-p3bZnKIyRgLmB764Kkhjuz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"s57tKy1rajlJbKFDVXLqs","sourceHandle":"y2","target":"zOWlPXIl4XPs_0pA8-yi5","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsy2-zOWlPXIl4XPs_0pA8-yi5z1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"s57tKy1rajlJbKFDVXLqs","sourceHandle":"x2","target":"XofWWhlU_vWCG5oXVMZze","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-s57tKy1rajlJbKFDVXLqsx2-KIFmahcNiSo2NGoLtAyRRw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"XofWWhlU_vWCG5oXVMZze","sourceHandle":"x2","target":"37c2eCvRdebztkbc5AjYp","targetHandle":"w2","data":{"edgeStyle":"solid"},"id":"reactflow__edge-XofWWhlU_vWCG5oXVMZzex2-KIFmahcNiSo2NGoLtAyRRw2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"Z-zHIbLBy7cqcDu_QEJIn","sourceHandle":"y2","target":"WSrbHa0mKIQs33vEJHp15","targetHandle":"x2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-Z-zHIbLBy7cqcDu_QEJIny2-WSrbHa0mKIQs33vEJHp15x2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"37c2eCvRdebztkbc5AjYp","sourceHandle":"x2","target":"KIFmahcNiSo2NGoLtAyRR","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-37c2eCvRdebztkbc5AjYpx2-KIFmahcNiSo2NGoLtAyRRw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"KIFmahcNiSo2NGoLtAyRR","sourceHandle":"z2","target":"RX_6yD1QGLEGwV4j6z_g-","targetHandle":"y2","data":{"edgeStyle":"solid"},"id":"reactflow__edge-KIFmahcNiSo2NGoLtAyRRz2-RX_6yD1QGLEGwV4j6z_g-y2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"C85aJvrzj6rP2Hmfj9uPB","sourceHandle":"y2","target":"nUE2-egUMNFQoPVrVRFPl","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDy2-nUE2-egUMNFQoPVrVRFPlz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"C85aJvrzj6rP2Hmfj9uPB","sourceHandle":"y2","target":"dWB5OCvWVYkD30Op_dMwy","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDy2-dWB5OCvWVYkD30Op_dMwyz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"C85aJvrzj6rP2Hmfj9uPB","sourceHandle":"y2","target":"ZaOhWWDgVxrn0hbesJ7xT","targetHandle":"z2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDy2-ZaOhWWDgVxrn0hbesJ7xTz2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"RX_6yD1QGLEGwV4j6z_g-","sourceHandle":"x2","target":"ia7YtgDjVoLxFKtQZPqJD","targetHandle":"w1","data":{"edgeStyle":"solid"},"selected":true,"id":"reactflow__edge-RX_6yD1QGLEGwV4j6z_g-x2-ia7YtgDjVoLxFKtQZPqJDw1","selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"1YL7aXluINOO15W3waaiD","sourceHandle":"z2","target":"4iD_hDtgJ15IlJGxiO-E8","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDz2-4iD_hDtgJ15IlJGxiO-E8y1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"1YL7aXluINOO15W3waaiD","sourceHandle":"z2","target":"olqSPUU3RoxhQ6exfMzeN","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-1YL7aXluINOO15W3waaiDz2-olqSPUU3RoxhQ6exfMzeNy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"NvODRFR0DLINB0RlPSsvt","sourceHandle":"x2","target":"NEnna_8DstfYH4T9qrP3-","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-NvODRFR0DLINB0RlPSsvtx2-NEnna_8DstfYH4T9qrP3-w1","selected":true,"selectable":true,"focusable":true}]} \ No newline at end of file diff --git a/src/data/roadmaps/aspnet-core/content/data-structures-and-algorithms@RAX2xN37taw9cqA3pnORh.md b/src/data/roadmaps/aspnet-core/content/data-structures-and-algorithms@RAX2xN37taw9cqA3pnORh.md index df79c8dd5..394e94577 100644 --- a/src/data/roadmaps/aspnet-core/content/data-structures-and-algorithms@RAX2xN37taw9cqA3pnORh.md +++ b/src/data/roadmaps/aspnet-core/content/data-structures-and-algorithms@RAX2xN37taw9cqA3pnORh.md @@ -4,7 +4,6 @@ As the name indicates, a **Data Structure** is a way of organizing the data in t Visit the following resources to learn more: -- [@article@Data Structures and Algorithms](https://www.javatpoint.com/data-structure-tutorial) - [@video@Data Structures Illustrated](https://www.youtube.com/watch?v=9rhT3P1MDHk\&list=PLkZYeFmDuaN2-KUIv-mvbjfKszIGJ4FaY) - [@article@C# resources](https://dev.to/adavidoaiei/fundamental-data-structures-and-algorithms-in-c-4ocf) - [@article@Interview Questions about Data Structures](https://www.csharpstar.com/csharp-algorithms/) diff --git a/src/data/roadmaps/aspnet-core/content/gridlify@w5RnrhsP4p-AdSOLYVAY9.md b/src/data/roadmaps/aspnet-core/content/gridlify@w5RnrhsP4p-AdSOLYVAY9.md index 206de4a7f..5a6a9ac2d 100644 --- a/src/data/roadmaps/aspnet-core/content/gridlify@w5RnrhsP4p-AdSOLYVAY9.md +++ b/src/data/roadmaps/aspnet-core/content/gridlify@w5RnrhsP4p-AdSOLYVAY9.md @@ -1 +1,10 @@ -# Gridlify \ No newline at end of file +# Gridify + +Gridify offers a powerful string-based dynamic LINQ query language that is both simple and easy to use. +Gridify is a dynamic LINQ library that simplifies the process of converting strings to LINQ queries. Gridify makes it effortless to apply filtering, sorting, and pagination using text-based data. +It also has a Javascript/Typescript client to integrate the Gridify with the frontend tables. + +For more information, visit the following links: + +- [@opensource@Gridify Library](https://github.com/alirezanet/Gridify) +- [@article@Working with Dynamic Filters Using Gridify in .NET](https://levelup.gitconnected.com/working-with-dynamic-filters-using-gridify-in-net-6bba618dd9f8) diff --git a/src/data/roadmaps/aspnet-core/content/manual-mapping@oMMBzRrHkUymxAR4oqr75.md b/src/data/roadmaps/aspnet-core/content/manual-mapping@oMMBzRrHkUymxAR4oqr75.md index 5c17b9306..6f29b8b54 100644 --- a/src/data/roadmaps/aspnet-core/content/manual-mapping@oMMBzRrHkUymxAR4oqr75.md +++ b/src/data/roadmaps/aspnet-core/content/manual-mapping@oMMBzRrHkUymxAR4oqr75.md @@ -1 +1,9 @@ -# Manual Mapping \ No newline at end of file +# Manual Mapping + +Manual object mapping in ASP.NET Core means explicitly assigning values from one object to another without using third-party libraries like AutoMapper. This approach gives you full control over how properties are mapped and allows for custom transformations if needed. + +For instance, if an **Employee** entity has properties such as Id, Name, Email, and Department, and we need to convert it into an **EmployeeDTO** without exposing sensitive data like Id, a manual mapping method can selectively map only the necessary fields. However, it comes with trade-offs, such as increased boilerplate code and the need for manual updates whenever the data model changes. In a real-world ASP.NET Core application, manual mapping can be implemented using static helper methods or extension methods that take an entity as input and return a DTO, ensuring that the mapping logic remains centralized and reusable across different parts of the application. + +To learn more, visit the following resources: + +- [@article@Manual vs Automapping in ASP.NET?](https://medium.com/@anderson.buenogod/manual-vs-automated-mapping-in-c-which-approach-is-best-for-your-project-50de1fd73bfa) diff --git a/src/data/roadmaps/aspnet-core/content/razon-pages@qpVxwuyA2oE06MZLtEdP1.md b/src/data/roadmaps/aspnet-core/content/razor-pages@qpVxwuyA2oE06MZLtEdP1.md similarity index 100% rename from src/data/roadmaps/aspnet-core/content/razon-pages@qpVxwuyA2oE06MZLtEdP1.md rename to src/data/roadmaps/aspnet-core/content/razor-pages@qpVxwuyA2oE06MZLtEdP1.md diff --git a/src/data/roadmaps/backend/content/git@_I1E__wCIVrhjMk6IMieE.md b/src/data/roadmaps/backend/content/git@_I1E__wCIVrhjMk6IMieE.md index ebc3c1713..a24075784 100644 --- a/src/data/roadmaps/backend/content/git@_I1E__wCIVrhjMk6IMieE.md +++ b/src/data/roadmaps/backend/content/git@_I1E__wCIVrhjMk6IMieE.md @@ -7,6 +7,7 @@ Visit the following resources to learn more: - [@roadmap@Visit Dedicated Git & GitHub Roadmap](https://roadmap.sh/git-github) - [@official@Git Documentation](https://git-scm.com/doc) - [@video@Git & GitHub Crash Course For Beginners](https://www.youtube.com/watch?v=SWYqp7iY_Tc) +- [@video@Learn Git - Full Course](https://www.youtube.com/watch?v=rH3zE7VlIMs) - [@article@Git Cheat Sheet](https://cs.fyi/guide/git-cheatsheet) - [@article@Learn Git Branching](https://learngitbranching.js.org/) - [@feed@Explore top posts about Git](https://app.daily.dev/tags/git?ref=roadmapsh) diff --git a/src/data/roadmaps/computer-science/content/boyer-moore@p6qub32jcaGloHXUDUrlG.md b/src/data/roadmaps/computer-science/content/boyer-moore@p6qub32jcaGloHXUDUrlG.md index 1e20f1c37..d1f4d3b65 100644 --- a/src/data/roadmaps/computer-science/content/boyer-moore@p6qub32jcaGloHXUDUrlG.md +++ b/src/data/roadmaps/computer-science/content/boyer-moore@p6qub32jcaGloHXUDUrlG.md @@ -4,5 +4,4 @@ Boyer Moore algorithm is a string searching algorithm that is used to find the i Visit the following resources to learn more: -- [@article@The Boyer-Moore Algorithm](https://www.javatpoint.com/daa-boyer-moore-algorithm) - [@course@Boyer Moore Algorithm](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) diff --git a/src/data/roadmaps/computer-science/content/common-algorithms@7a6-AnBI-3tAU1dkOvPkx.md b/src/data/roadmaps/computer-science/content/common-algorithms@7a6-AnBI-3tAU1dkOvPkx.md index 47a6315cf..aa5332da2 100644 --- a/src/data/roadmaps/computer-science/content/common-algorithms@7a6-AnBI-3tAU1dkOvPkx.md +++ b/src/data/roadmaps/computer-science/content/common-algorithms@7a6-AnBI-3tAU1dkOvPkx.md @@ -16,4 +16,4 @@ Here are some common algorithms that you should know. You can find more informat Visit the following resources to learn more: -- [@article@Top Algorithms and Data Structures](https://towardsdatascience.com/top-algorithms-and-data-structures-you-really-need-to-know-ab9a2a91c7b5) +- [@article@Top Algorithms and Data Structures](https://medium.com/data-science/top-algorithms-and-data-structures-you-really-need-to-know-ab9a2a91c7b5) diff --git a/src/data/roadmaps/computer-science/content/data-structures@NM7q5REW1sJgMhxJhPpLT.md b/src/data/roadmaps/computer-science/content/data-structures@NM7q5REW1sJgMhxJhPpLT.md index d7228e83d..76b608db4 100644 --- a/src/data/roadmaps/computer-science/content/data-structures@NM7q5REW1sJgMhxJhPpLT.md +++ b/src/data/roadmaps/computer-science/content/data-structures@NM7q5REW1sJgMhxJhPpLT.md @@ -5,7 +5,6 @@ As the name indicates itself, a **Data Structure** is a way of organizing the da Visit the following resources to learn more: - [@roadmap@Visit Dedicated DSA Roadmap](https://roadmap.sh/datastructures-and-algorithms) -- [@article@Data Structures and Algorithms](https://www.javatpoint.com/data-structure-tutorial) - [@course@Data Structures and Algorithms By Google](https://techdevguide.withgoogle.com/paths/data-structures-and-algorithms/) - [@video@Data Structures Illustrated](https://www.youtube.com/watch?v=9rhT3P1MDHk\&list=PLkZYeFmDuaN2-KUIv-mvbjfKszIGJ4FaY) - [@video@Data Structures playlist](https://youtube.com/playlist?list=PLDV1Zeh2NRsB6SWUrDFW2RmDotAfPbeHu&si=_EEf7x58G6lUcMGG) diff --git a/src/data/roadmaps/computer-science/content/factorial@m0umGQNdvg95UiNpQZsQN.md b/src/data/roadmaps/computer-science/content/factorial@m0umGQNdvg95UiNpQZsQN.md index 6fd689d37..afd691f80 100644 --- a/src/data/roadmaps/computer-science/content/factorial@m0umGQNdvg95UiNpQZsQN.md +++ b/src/data/roadmaps/computer-science/content/factorial@m0umGQNdvg95UiNpQZsQN.md @@ -16,7 +16,7 @@ def generate_permutations(s): # Current character current_char = s[i] # Remaining characters - remaining_chars = s[:i] + s[i+1:] + remaining_chars = s[:i] + s[i + 1 :] # Generate all permutations of the remaining characters for perm in generate_permutations(remaining_chars): # Add the current character to the front of each generated permutation diff --git a/src/data/roadmaps/computer-science/content/knuth-morris-pratt@8abFKMfaV9H8F38I0DcMT.md b/src/data/roadmaps/computer-science/content/knuth-morris-pratt@8abFKMfaV9H8F38I0DcMT.md index 6fdb8f0ae..dd4df5f11 100644 --- a/src/data/roadmaps/computer-science/content/knuth-morris-pratt@8abFKMfaV9H8F38I0DcMT.md +++ b/src/data/roadmaps/computer-science/content/knuth-morris-pratt@8abFKMfaV9H8F38I0DcMT.md @@ -9,6 +9,5 @@ Knuth morris pratt is a string searching algorithm that uses a precomputed array Visit the following resources to learn more: -- [@article@The Knuth-Morris-Pratt (KMP)Algorithm](https://www.javatpoint.com/daa-knuth-morris-pratt-algorithm) - [@video@9.1 Knuth-Morris-Pratt KMP String Matching Algorithm](https://www.youtube.com/watch?v=V5-7GzOfADQ) - [@course@Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/100-new-delete-operators.md b/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/100-new-delete-operators.md deleted file mode 100644 index d810f0f0c..000000000 --- a/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/100-new-delete-operators.md +++ /dev/null @@ -1,47 +0,0 @@ -# Raw Pointers and `new` and `delete` operators - -Raw pointers in C++ are low-level constructs that directly hold a memory address. They can be used for manually allocating memory, creating dynamic arrays, and passing values efficiently, among other things. - -## `new` Operator - -The `new` operator is used to allocate memory on the heap. The memory allocated using `new` remains available until you explicitly deallocate it using the corresponding `delete` operator. - -Here's an example of using the `new` operator: - -```cpp -int* ptr = new int; // Dynamically allocates an int on the heap -*ptr = 42; // Assigns the value 42 to the allocated int -``` - -## `delete` Operator - -The `delete` operator is used to deallocate memory that has been allocated using `new`. After memory is deallocated, it's available to be reallocated for other purposes. Failing to properly deallocate memory can lead to memory leaks. - -Here's an example of using the `delete` operator: - -```cpp -int* ptr = new int; // Dynamically allocates an int on the heap -*ptr = 42; // Assigns the value 42 to the allocated int - -delete ptr; // Deallocates the memory assigned to ptr -``` - -## `new[]` and `delete[]` Operators - -The `new[]` and `delete[]` operators are used for allocating and deallocating memory for an array of objects. The syntax for `new[]` and `delete[]` is very similar to that of `new` and `delete`. - -Here's an example of using the `new[]` and `delete[]` operators: - -```cpp -int n = 10; -int* arr = new int[n]; // Dynamically allocates an array of 10 integers on the heap - -// Set some values in the array -for (int i = 0; i < n; i++) { - arr[i] = i; -} - -delete[] arr; // Deallocates the memory assigned to the array -``` - -In summary, raw pointers, and `new` and `delete` operators allow manual memory management in C++, providing control over allocation and deallocation. Make sure to always deallocate memory allocated with `new` or `new[]`, to avoid memory leaks in your programs. diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/101-memory-leakage.md b/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/101-memory-leakage.md deleted file mode 100644 index c14976913..000000000 --- a/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/101-memory-leakage.md +++ /dev/null @@ -1,28 +0,0 @@ -# Memory Leakage - -Memory leakage occurs when a program allocates memory in the heap but does not release the memory back to the operating system when it is no longer needed. Over time, this leads to exhaustion of available memory, resulting in low system performance or crashes. - -In C++, when you use raw pointers, you need to manage the memory allocation and deallocation manually. In many cases, you will use the `new` keyword to allocate memory for an object in the heap and use `delete` keyword to deallocate that memory when it's no longer needed. Forgetting to do this can cause memory leaks. - -Here's an example: - -```cpp -void create_memory_leak() { - int* ptr = new int[100]; // Allocating memory in the heap for an array of integers - // Some code... - // Code to deallocate the memory is missing: delete[] ptr; -} // ptr goes out of scope, memory block allocated is not deallocated, causing a memory leak. -``` - -To avoid memory leaks, you should always ensure that memory is deallocated before a pointer goes out of scope or is reassigned. Some ways to achieve this include using the C++ smart pointers (`std::unique_ptr`, `std::shared_ptr`), RAII (Resource Acquisition Is Initialization) techniques, and containers from the C++ standard library that manage memory allocation internally (e.g., `std::vector`, `std::string`). - -For example, this code will not have a memory leak: - -```cpp -#include - -void no_memory_leak() { - std::shared_ptr ptr = std::make_shared(100); // Allocating memory in the heap for an array of integers using shared_ptr - // Some code... -} // shared_ptr goes out of scope and it will automatically deallocate the memory block assigned to it. -``` diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/index.md b/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/index.md deleted file mode 100644 index b51d70e7f..000000000 --- a/src/data/roadmaps/cpp/content/105-pointers-and-references/raw-pointers/index.md +++ /dev/null @@ -1 +0,0 @@ -# Raw pointers \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/100-weak-ptr.md b/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/100-weak-ptr.md deleted file mode 100644 index 2581f6698..000000000 --- a/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/100-weak-ptr.md +++ /dev/null @@ -1,52 +0,0 @@ -# Weak Pointer - -A `weak_ptr` is a type of smart pointer in C++ that adds a level of indirection and safety to a raw pointer. It is mainly used to break reference cycles in cases where two objects have shared pointers to each other, or when you need a non-owning reference to an object that is managed by a `shared_ptr`. - -A `weak_ptr` does not increase the *ownership* reference count of the object it points to, which is a key difference between `weak_ptr` and `shared_ptr`. The control block associated with the object maintains two counts: one for the number of `shared_ptr`s (ownership count) and another for the number of `weak_ptr`s (weak count). The existence of `weak_ptr`s does not prevent the object from being deleted; the object is destroyed once the last `shared_ptr` that owns it is destroyed or reset, even if `weak_ptr`s are still referencing the object. However, the control block itself is not deallocated until both the ownership count reaches zero and the weak count also reaches zero, allowing `weak_ptr`s to safely detect whether the object has already been deleted. - -To use a `weak_ptr`, you must convert it to a `shared_ptr` using the `lock()` function, which tries to create a new `shared_ptr` that shares ownership of the object. If successful, the object's reference count is increased and you can use the returned `shared_ptr` to safely access the object. - -Here's an example of using `weak_ptr`: - -```cpp -#include -#include - -class MyClass { -public: - void DoSomething() { - std::cout << "Doing something...\n"; - } -}; - -int main() { - std::weak_ptr weak; - - { - std::shared_ptr shared = std::make_shared(); - weak = shared; - - if (auto sharedFromWeak = weak.lock()) { - sharedFromWeak->DoSomething(); // Safely use the object - std::cout << "Shared uses count: " << sharedFromWeak.use_count() << '\n'; // 2 - } - } - - // shared goes out of scope and the MyClass object is destroyed - - if (auto sharedFromWeak = weak.lock()) { - // This block will not be executed because the object is destroyed - } - else { - std::cout << "Object has been destroyed\n"; - } - - return 0; -} -``` - -In this example, we create a `shared_ptr` named `shared` that manages a `MyClass` object. By assigning it to a `weak_ptr` named `weak`, we store a non-owning reference to the object. Inside the inner scope, we create a new `shared_ptr` named `sharedFromWeak` using `weak.lock()` to safely use the object. After the inner scope, the `MyClass` object is destroyed since `shared` goes out of scope, and any further attempt to create a `shared_ptr` from `weak` will fail as the object is already destroyed. - -Learn more from the following resources: - -- [@article@CPP Reference](https://en.cppreference.com/w/cpp/memory/weak_ptr) diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/101-shared-ptr.md b/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/101-shared-ptr.md deleted file mode 100644 index 7f9962a83..000000000 --- a/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/101-shared-ptr.md +++ /dev/null @@ -1,50 +0,0 @@ -# Shared Pointer - -A `shared_ptr` is a type of smart pointer in C++ that allows multiple pointers to share ownership of a dynamically allocated object. The object will be automatically deallocated only when the last `shared_ptr` that points to it is destroyed. - -When using a `shared_ptr`, the reference counter is automatically incremented every time a new pointer is created, and decremented when each pointer goes out of scope. Once the reference counter reaches zero, the system will clean up the memory. - -## Code Example - -Here's an example of how to use `shared_ptr`: - -```cpp -#include -#include - -class MyClass { -public: - MyClass() { std::cout << "Constructor is called." << std::endl; } - ~MyClass() { std::cout << "Destructor is called." << std::endl; } -}; - -int main() { - // create a shared pointer to manage the MyClass object - std::shared_ptr ptr1(new MyClass()); - - { - // create another shared pointer and initialize it with the previously created pointer - std::shared_ptr ptr2 = ptr1; - - std::cout << "Inside the inner scope." << std::endl; - // both pointers share the same object, and the reference counter has been increased to 2 - } - - std::cout << "Outside the inner scope." << std::endl; - // leaving the inner scope will destroy ptr2, and the reference counter is decremented to 1 - - // the main function returns, ptr1 goes out of scope, and the reference counter becomes 0 - // this causes the MyClass object to be deleted and the destructor is called -} -``` - -Output: - -``` -Constructor is called. -Inside the inner scope. -Outside the inner scope. -Destructor is called. -``` - -In this example, `ptr1` and `ptr2` share ownership of the same object. The object is only destroyed when both pointers go out of scope and the reference counter becomes zero. \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/102-uniqe-ptr.md b/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/102-uniqe-ptr.md deleted file mode 100644 index 709f19c26..000000000 --- a/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/102-uniqe-ptr.md +++ /dev/null @@ -1,66 +0,0 @@ -# Unique Pointer (`unique_ptr`) - -`std::unique_ptr` is a smart pointer provided by the C++ Standard Library. It is a template class that is used for managing single objects or arrays. - -`unique_ptr` works on the concept of *exclusive ownership* - meaning only one `unique_ptr` is allowed to own an object at a time. This ownership can be transferred or moved, but it cannot be shared or copied. - -This concept helps to prevent issues like dangling pointers, reduce memory leaks, and eliminates the need for manual memory management. When the `unique_ptr` goes out of scope, it automatically deletes the object it owns. - -Let's take a look at some basic examples of using `unique_ptr`: - -## Creating a unique_ptr - -```cpp -#include -#include - -int main() { - std::unique_ptr p1(new int(5)); // Initialize with pointer to a new integer - std::unique_ptr p2 = std::make_unique(10); // Preferred method (C++14 onwards) - - std::cout << *p1 << ", " << *p2 << std::endl; - return 0; -} -``` - -## Transferring Ownership - -```cpp -#include -#include - -int main() { - std::unique_ptr p1(new int(5)); - - std::unique_ptr p2 = std::move(p1); // Ownership is transferred from p1 to p2 - - if (p1) { - std::cout << "p1 owns the object" << std::endl; - } else if (p2) { - std::cout << "p2 owns the object" << std::endl; - } - - return 0; -} -``` - -## Using unique_ptr with Custom Deleters - -```cpp -#include -#include - -struct MyDeleter { - void operator()(int* ptr) { - std::cout << "Custom Deleter: Deleting pointer" << std::endl; - delete ptr; - } -}; - -int main() { - std::unique_ptr p1(new int(5), MyDeleter()); - return 0; // Custom Deleter will be called when p1 goes out of scope -} -``` - -Remember that since unique_ptr has exclusive ownership, you cannot use it when you need shared access to an object. For such cases, you can use `std::shared_ptr`. \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/index.md b/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/index.md deleted file mode 100644 index 13048aff1..000000000 --- a/src/data/roadmaps/cpp/content/105-pointers-and-references/smart-pointers/index.md +++ /dev/null @@ -1 +0,0 @@ -# Smart pointers \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/100-static-polymorphism/overloading-functions.md b/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/100-static-polymorphism/overloading-functions.md deleted file mode 100644 index 8fdbf507a..000000000 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/100-static-polymorphism/overloading-functions.md +++ /dev/null @@ -1,45 +0,0 @@ -# Function Overloading - -Function overloading is a type of static polymorphism in C++ where multiple functions with the same name but different sets of parameters are defined in the same scope. This allows you to use the same function name for multiple tasks by providing different arguments while calling the function. The appropriate function to call is determined during compile-time based on the number and types of the arguments passed. - -To overload a function, simply define another function with the same name but a different set of parameters. The compiler will automatically choose the correct function to call based on the provided arguments. - -## Examples - -Here's an example illustrating function overloading: - -```cpp -#include - -void print(int num) { - std::cout << "Printing int: " << num << std::endl; -} - -void print(double num) { - std::cout << "Printing double: " << num << std::endl; -} - -void print(char const *str) { - std::cout << "Printing string: " << str << std::endl; -} - -int main() { - print(5); - print(3.14); - print("Hello, world!"); - - return 0; -} -``` - -In this example, three overloaded functions named `print` are defined. They each take a different type of argument: `int`, `double`, and `char const *`. When calling `print()` with different arguments like `5`, `3.14`, or `"Hello, world!"`, the appropriate function is chosen based on the type of the provided argument. - -The output of this program would be: - -``` -Printing int: 5 -Printing double: 3.14 -Printing string: Hello, world! -``` - -Keep in mind that the number of parameters and their types should be different for two functions to be overloaded. diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/virtual-methods.md b/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/virtual-methods.md deleted file mode 100644 index 372952d81..000000000 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/virtual-methods.md +++ /dev/null @@ -1,65 +0,0 @@ -# Virtual Methods - -Virtual methods are a key aspect of dynamic polymorphism in C++. They allow subclass methods to override the methods of their base class, so the appropriate method is called depending on the actual type of an object at runtime. - -To declare a method as virtual, simply use the `virtual` keyword in the method's declaration in the base class. This tells the compiler that the method should be treated as a virtual method, allowing it to be overridden by derived classes. - -## Code Example - -Here's an example demonstrating virtual methods: - -```cpp -#include - -// Base class -class Shape { -public: - virtual double area() const { - return 0; - } -}; - -// Derived class -class Circle : public Shape { -public: - Circle(double r) : radius(r) {} - - // Override the base class method - double area() const override { - return 3.14 * radius * radius; - } - -private: - double radius; -}; - -// Derived class -class Rectangle : public Shape { -public: - Rectangle(double w, double h) : width(w), height(h) {} - - // Override the base class method - double area() const override { - return width * height; - } - -private: - double width; - double height; -}; - -int main() { - Circle c(5); - Rectangle r(4, 6); - - Shape* shape = &c; - std::cout << "Circle's area: " << shape->area() << std::endl; - - shape = &r; - std::cout << "Rectangle's area: " << shape->area() << std::endl; - - return 0; -} -``` - -In this example, we define a base class `Shape` that has a virtual method `area`. This method is then overridden by the derived classes `Circle` and `Rectangle`. By using a virtual method and a base class pointer to the derived objects, we can invoke the appropriate `area` method based on the actual object type at runtime. \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/virtual-tables.md b/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/virtual-tables.md deleted file mode 100644 index b89591e63..000000000 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/virtual-tables.md +++ /dev/null @@ -1,51 +0,0 @@ -# Virtual Tables - -Virtual Tables (or Vtable) are a mechanism used by C++ compilers to support dynamic polymorphism. In dynamic polymorphism, the appropriate function is called at runtime, depending on the actual object type. - -When a class contains a virtual function, the compiler creates a virtual table for that class. This table contains function pointers to the virtual functions defined in the class. Each object of that class has a pointer to its virtual table (_vptr_, virtual pointer), which is automatically initialized by the compiler during object construction. - -## Example - -Let's consider the following example: - -```cpp -class Base { -public: - virtual void function1() { - std::cout << "Base::function1" << std::endl; - } - - virtual void function2() { - std::cout << "Base::function2" << std::endl; - } -}; - -class Derived : public Base { -public: - void function1() override { - std::cout << "Derived::function1" << std::endl; - } - - void function3() { - std::cout << "Derived::function3" << std::endl; - } -}; - -int main() { - Base* obj = new Derived(); // create a Derived object and assign a pointer of type Base* - obj->function1(); // calls Derived::function1, due to dynamic polymorphism - obj->function2(); // calls Base::function2 - - delete obj; - return 0; -} -``` - -In this example, when a `Derived` object is created, the compiler generates a Vtable for `Derived` class, containing pointers to its virtual functions: - -- `Derived::function1` (overridden from `Base`) -- `Base::function2` (inherits from Base) - -The `_vptr_` pointer in the `Derived` object points to this Vtable. When the `function1` is called on the `Base` pointer pointing to the `Derived` object, the function pointer in the Vtable is used to call the correct function (in this case, `Derived::function1`). Similarly, the call to `function2` calls `Base::function2`, since it's the function pointer stored in the Vtable for `Derived` class. - -Note that `function3` is not part of the Vtable, as it is not a virtual function. \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/108-exception-handling/100-exceptions/100-access-violations.md b/src/data/roadmaps/cpp/content/access-violations@y4-P4UNC--rE1vni8HdTn.md similarity index 100% rename from src/data/roadmaps/cpp/content/108-exception-handling/100-exceptions/100-access-violations.md rename to src/data/roadmaps/cpp/content/access-violations@y4-P4UNC--rE1vni8HdTn.md diff --git a/src/data/roadmaps/cpp/content/110-stl/102-algorithms.md b/src/data/roadmaps/cpp/content/algorithms@whyj6Z4RXFsVQYRfYYn7B.md similarity index 100% rename from src/data/roadmaps/cpp/content/110-stl/102-algorithms.md rename to src/data/roadmaps/cpp/content/algorithms@whyj6Z4RXFsVQYRfYYn7B.md diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/103-adl.md b/src/data/roadmaps/cpp/content/argument-dependent-lookup-adl@YSWN7nS8vA9nMldSUrZRT.md similarity index 92% rename from src/data/roadmaps/cpp/content/109-language-concepts/103-adl.md rename to src/data/roadmaps/cpp/content/argument-dependent-lookup-adl@YSWN7nS8vA9nMldSUrZRT.md index 5508a9aa0..29d178c5d 100644 --- a/src/data/roadmaps/cpp/content/109-language-concepts/103-adl.md +++ b/src/data/roadmaps/cpp/content/argument-dependent-lookup-adl@YSWN7nS8vA9nMldSUrZRT.md @@ -25,7 +25,7 @@ int main() { MyNamespace::MyClass obj; obj.value = 42; using std::cout; // Required to use 'cout' without fully qualifying it. - cout << obj << std::endl; // ADL is used to find the correct overloaded 'operator<<'. + cout << obj << '\n'; // ADL is used to find the correct overloaded 'operator<<'. } ``` diff --git a/src/data/roadmaps/cpp/content/102-basic-operations/100-arithmetic-operators.md b/src/data/roadmaps/cpp/content/arithmetic-operators@8aOSpZLWwZv_BEYiurhyR.md similarity index 100% rename from src/data/roadmaps/cpp/content/102-basic-operations/100-arithmetic-operators.md rename to src/data/roadmaps/cpp/content/arithmetic-operators@8aOSpZLWwZv_BEYiurhyR.md diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/100-auto.md b/src/data/roadmaps/cpp/content/auto-automatic-type-deduction@CG01PTVgHtjfKvsJkJLGl.md similarity index 95% rename from src/data/roadmaps/cpp/content/109-language-concepts/100-auto.md rename to src/data/roadmaps/cpp/content/auto-automatic-type-deduction@CG01PTVgHtjfKvsJkJLGl.md index 6759a5f1f..2fea82738 100644 --- a/src/data/roadmaps/cpp/content/109-language-concepts/100-auto.md +++ b/src/data/roadmaps/cpp/content/auto-automatic-type-deduction@CG01PTVgHtjfKvsJkJLGl.md @@ -24,12 +24,12 @@ int main() { // Without auto, iterating the vector would look like this: for (std::vector::iterator it = myVector.begin(); it != myVector.end(); ++it) { - std::cout << *it << std::endl; + std::cout << *it << '\n'; } // With auto, the iterator declaration becomes simpler: for (auto it = myVector.begin(); it != myVector.end(); ++it) { - std::cout << *it << std::endl; + std::cout << *it << '\n'; } } ``` diff --git a/src/data/roadmaps/cpp/content/102-basic-operations/index.md b/src/data/roadmaps/cpp/content/basic-operations@kl2JI_Wl47c5r8SYzxvCq.md similarity index 100% rename from src/data/roadmaps/cpp/content/102-basic-operations/index.md rename to src/data/roadmaps/cpp/content/basic-operations@kl2JI_Wl47c5r8SYzxvCq.md diff --git a/src/data/roadmaps/cpp/content/102-basic-operations/103-bitwise.md b/src/data/roadmaps/cpp/content/bitwise-operators@zE4iPSq2KsrDSByQ0sGK_.md similarity index 100% rename from src/data/roadmaps/cpp/content/102-basic-operations/103-bitwise.md rename to src/data/roadmaps/cpp/content/bitwise-operators@zE4iPSq2KsrDSByQ0sGK_.md diff --git a/src/data/roadmaps/cpp/content/boost@1d7h5P1Q0RVHryKPVogQy.md b/src/data/roadmaps/cpp/content/boost@1d7h5P1Q0RVHryKPVogQy.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/116-build-systems/index.md b/src/data/roadmaps/cpp/content/build-systems@jVXFCo6puMxJ_ifn_uwim.md similarity index 100% rename from src/data/roadmaps/cpp/content/116-build-systems/index.md rename to src/data/roadmaps/cpp/content/build-systems@jVXFCo6puMxJ_ifn_uwim.md diff --git a/src/data/roadmaps/cpp/content/113-standards/104-cpp0x.md b/src/data/roadmaps/cpp/content/c-0x@PPg0V5EzGBeJsysg1215V.md similarity index 95% rename from src/data/roadmaps/cpp/content/113-standards/104-cpp0x.md rename to src/data/roadmaps/cpp/content/c-0x@PPg0V5EzGBeJsysg1215V.md index 2cf9e93f1..9366e4c03 100644 --- a/src/data/roadmaps/cpp/content/113-standards/104-cpp0x.md +++ b/src/data/roadmaps/cpp/content/c-0x@PPg0V5EzGBeJsysg1215V.md @@ -16,7 +16,7 @@ Some of the notable features in C++11 include: ```cpp std::vector vec = {1, 2, 3}; for (int i : vec) { - std::cout << i << std::endl; + std::cout << i << '\n'; } ``` diff --git a/src/data/roadmaps/cpp/content/113-standards/100-cpp11-14.md b/src/data/roadmaps/cpp/content/c-11--14@T6rCTv9Dxkm-tEA-l9XEv.md similarity index 98% rename from src/data/roadmaps/cpp/content/113-standards/100-cpp11-14.md rename to src/data/roadmaps/cpp/content/c-11--14@T6rCTv9Dxkm-tEA-l9XEv.md index 0215c7708..5ad367dff 100644 --- a/src/data/roadmaps/cpp/content/113-standards/100-cpp11-14.md +++ b/src/data/roadmaps/cpp/content/c-11--14@T6rCTv9Dxkm-tEA-l9XEv.md @@ -13,7 +13,7 @@ The C++11 standard, also known as C++0x, was officially released in September 20 ```cpp std::vector numbers {1, 2, 3, 4}; for (int number : numbers) { - std::cout << number << std::endl; + std::cout << number << '\n'; } ``` diff --git a/src/data/roadmaps/cpp/content/113-standards/101-cpp17.md b/src/data/roadmaps/cpp/content/c-17@R2-qWGUxsTOeSHRuUzhd2.md similarity index 100% rename from src/data/roadmaps/cpp/content/113-standards/101-cpp17.md rename to src/data/roadmaps/cpp/content/c-17@R2-qWGUxsTOeSHRuUzhd2.md diff --git a/src/data/roadmaps/cpp/content/113-standards/102-cpp20.md b/src/data/roadmaps/cpp/content/c-20@o3no4a5_iMFzEAGs56-BJ.md similarity index 96% rename from src/data/roadmaps/cpp/content/113-standards/102-cpp20.md rename to src/data/roadmaps/cpp/content/c-20@o3no4a5_iMFzEAGs56-BJ.md index 06063c654..ff554af15 100644 --- a/src/data/roadmaps/cpp/content/113-standards/102-cpp20.md +++ b/src/data/roadmaps/cpp/content/c-20@o3no4a5_iMFzEAGs56-BJ.md @@ -57,7 +57,7 @@ std::future async_value(int value) { int main() { auto result = async_value(42); - std::cout << "Result: " << result.get() << std::endl; + std::cout << "Result: " << result.get() << '\n'; } ``` diff --git a/src/data/roadmaps/cpp/content/100-introduction/102-c-vs-cpp.md b/src/data/roadmaps/cpp/content/c-vs-c@2Ag0t3LPryTF8khHLRfy-.md similarity index 97% rename from src/data/roadmaps/cpp/content/100-introduction/102-c-vs-cpp.md rename to src/data/roadmaps/cpp/content/c-vs-c@2Ag0t3LPryTF8khHLRfy-.md index 9134d8010..737776649 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/102-c-vs-cpp.md +++ b/src/data/roadmaps/cpp/content/c-vs-c@2Ag0t3LPryTF8khHLRfy-.md @@ -34,7 +34,7 @@ int main() { class HelloWorld { public: void printHello() { - std::cout << "Hello, World!" << std::endl; + std::cout << "Hello, World!\n"; } }; diff --git a/src/data/roadmaps/cpp/content/catch2@s13jQuaC6gw0Lab3Cbyy6.md b/src/data/roadmaps/cpp/content/catch2@s13jQuaC6gw0Lab3Cbyy6.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/116-build-systems/100-cmake.md b/src/data/roadmaps/cpp/content/cmake@ysnXvSHGBMMozBJyXpHl5.md similarity index 100% rename from src/data/roadmaps/cpp/content/116-build-systems/100-cmake.md rename to src/data/roadmaps/cpp/content/cmake@ysnXvSHGBMMozBJyXpHl5.md diff --git a/src/data/roadmaps/cpp/content/101-setting-up/101-code-editors.md b/src/data/roadmaps/cpp/content/code-editors--ides@ew0AfyadpXPRO0ZY3Z19k.md similarity index 100% rename from src/data/roadmaps/cpp/content/101-setting-up/101-code-editors.md rename to src/data/roadmaps/cpp/content/code-editors--ides@ew0AfyadpXPRO0ZY3Z19k.md diff --git a/src/data/roadmaps/cpp/content/115-compilers/100-stages.md b/src/data/roadmaps/cpp/content/compiler-stages@DVckzBUMgk_lWThVkLyAT.md similarity index 97% rename from src/data/roadmaps/cpp/content/115-compilers/100-stages.md rename to src/data/roadmaps/cpp/content/compiler-stages@DVckzBUMgk_lWThVkLyAT.md index cbe299a67..5d6c54132 100644 --- a/src/data/roadmaps/cpp/content/115-compilers/100-stages.md +++ b/src/data/roadmaps/cpp/content/compiler-stages@DVckzBUMgk_lWThVkLyAT.md @@ -13,7 +13,7 @@ The first stage is the preprocessing of the source code. Preprocessors modify th #define PI 3.14 int main() { - std::cout << "The value of PI is: " << PI << std::endl; + std::cout << "The value of PI is: " << PI << '\n'; return 0; } ``` diff --git a/src/data/roadmaps/cpp/content/115-compilers/101-features.md b/src/data/roadmaps/cpp/content/compilers-and-features@hSG6Aux39X0cXi6ADy2al.md similarity index 100% rename from src/data/roadmaps/cpp/content/115-compilers/101-features.md rename to src/data/roadmaps/cpp/content/compilers-and-features@hSG6Aux39X0cXi6ADy2al.md diff --git a/src/data/roadmaps/cpp/content/115-compilers/index.md b/src/data/roadmaps/cpp/content/compilers@FTMHsUiE8isD_OVZr62Xc.md similarity index 94% rename from src/data/roadmaps/cpp/content/115-compilers/index.md rename to src/data/roadmaps/cpp/content/compilers@FTMHsUiE8isD_OVZr62Xc.md index fa6e5b4c9..8a9245980 100644 --- a/src/data/roadmaps/cpp/content/115-compilers/index.md +++ b/src/data/roadmaps/cpp/content/compilers@FTMHsUiE8isD_OVZr62Xc.md @@ -22,7 +22,7 @@ Let's say you have a simple C++ program saved in a file called `hello.cpp`: #include int main() { - std::cout << "Hello, World!" << std::endl; + std::cout << "Hello, World!\n"; return 0; } ``` diff --git a/src/data/roadmaps/cpp/content/117-package-managers/102-conan.md b/src/data/roadmaps/cpp/content/conan@ky_UqizToTZHC_b77qFi2.md similarity index 96% rename from src/data/roadmaps/cpp/content/117-package-managers/102-conan.md rename to src/data/roadmaps/cpp/content/conan@ky_UqizToTZHC_b77qFi2.md index 19d9d82c9..f6d3392ce 100644 --- a/src/data/roadmaps/cpp/content/117-package-managers/102-conan.md +++ b/src/data/roadmaps/cpp/content/conan@ky_UqizToTZHC_b77qFi2.md @@ -45,6 +45,7 @@ Here's an example: ```python from conans import ConanFile, CMake + class MyLibraryConan(ConanFile): name = "MyLibrary" version = "0.1" diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/101-const-cast.md b/src/data/roadmaps/cpp/content/const_cast@5g22glc97siQOcTkHbwan.md similarity index 93% rename from src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/101-const-cast.md rename to src/data/roadmaps/cpp/content/const_cast@5g22glc97siQOcTkHbwan.md index 8a1e24599..5a99d01df 100644 --- a/src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/101-const-cast.md +++ b/src/data/roadmaps/cpp/content/const_cast@5g22glc97siQOcTkHbwan.md @@ -19,10 +19,10 @@ void modifyVariable(int* ptr) { int main() { const int original_value = 10; int* non_const_value_ptr = const_cast(&original_value); - std::cout << "Original value: " << original_value << std::endl; + std::cout << "Original value: " << original_value << '\n'; modifyVariable(non_const_value_ptr); - std::cout << "Modified value: " << *non_const_value_ptr << ", original_value: " << original_value << std::endl; + std::cout << "Modified value: " << *non_const_value_ptr << ", original_value: " << original_value << '\n'; assert(non_const_value_ptr == &original_value); diff --git a/src/data/roadmaps/cpp/content/110-stl/105-ccontainers.md b/src/data/roadmaps/cpp/content/containers@1pydf-SR0QUfVNuBEyvzc.md similarity index 88% rename from src/data/roadmaps/cpp/content/110-stl/105-ccontainers.md rename to src/data/roadmaps/cpp/content/containers@1pydf-SR0QUfVNuBEyvzc.md index 07276bf00..8d238670f 100644 --- a/src/data/roadmaps/cpp/content/110-stl/105-ccontainers.md +++ b/src/data/roadmaps/cpp/content/containers@1pydf-SR0QUfVNuBEyvzc.md @@ -21,7 +21,7 @@ int main() { for (int x : vec) { std::cout << ' ' << x; } - std::cout << std::endl; + std::cout << '\n'; } ``` @@ -44,7 +44,7 @@ int main() { for (int x : lst) { std::cout << ' ' << x; } - std::cout << std::endl; + std::cout << '\n'; } ``` @@ -64,9 +64,9 @@ int main() { m["one"] = 1; m["two"] = 2; - std::cout << "Map contains:" << std::endl; + std::cout << "Map contains:\n"; for (const auto &pair : m) { - std::cout << pair.first << ": " << pair.second << std::endl; + std::cout << pair.first << ": " << pair.second << '\n'; } } ``` @@ -87,9 +87,9 @@ int main() { um["one"] = 1; um["two"] = 2; - std::cout << "Unordered map contains:" << std::endl; + std::cout << "Unordered map contains:\n"; for (const auto &pair : um) { - std::cout << pair.first << ": " << pair.second << std::endl; + std::cout << pair.first << ": " << pair.second << '\n'; } } ``` diff --git a/src/data/roadmaps/cpp/content/control-flow--statements@s5Gs4yF9TPh-psYmtPzks.md b/src/data/roadmaps/cpp/content/control-flow--statements@s5Gs4yF9TPh-psYmtPzks.md new file mode 100644 index 000000000..8b772289d --- /dev/null +++ b/src/data/roadmaps/cpp/content/control-flow--statements@s5Gs4yF9TPh-psYmtPzks.md @@ -0,0 +1 @@ +# Control Flow & Statements \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/112-idioms/105-copy-swap.md b/src/data/roadmaps/cpp/content/copy-and-swap@lxAzI42jQdaofzQ5MXebG.md similarity index 100% rename from src/data/roadmaps/cpp/content/112-idioms/105-copy-swap.md rename to src/data/roadmaps/cpp/content/copy-and-swap@lxAzI42jQdaofzQ5MXebG.md diff --git a/src/data/roadmaps/cpp/content/112-idioms/106-copy-write.md b/src/data/roadmaps/cpp/content/copy-on-write@O2Du5gHHxFxAI2u5uO8wu.md similarity index 92% rename from src/data/roadmaps/cpp/content/112-idioms/106-copy-write.md rename to src/data/roadmaps/cpp/content/copy-on-write@O2Du5gHHxFxAI2u5uO8wu.md index df24f912c..4c509ca77 100644 --- a/src/data/roadmaps/cpp/content/112-idioms/106-copy-write.md +++ b/src/data/roadmaps/cpp/content/copy-on-write@O2Du5gHHxFxAI2u5uO8wu.md @@ -14,7 +14,7 @@ public: // Use the same shared data for copying. MyString(const MyString &other) : data(other.data) { - std::cout << "Copied using the Copy-Write idiom." << std::endl; + std::cout << "Copied using the Copy-Write idiom.\n"; } // Make a copy only if we want to modify the data. @@ -22,7 +22,7 @@ public: // Check if there's more than one reference. if (data.use_count() > 1) { data = std::make_shared(*data); - std::cout << "Copy is actually made for writing." << std::endl; + std::cout << "Copy is actually made for writing.\n"; } *data = str; } diff --git a/src/data/roadmaps/cpp/content/112-idioms/102-crtp.md b/src/data/roadmaps/cpp/content/crtp@ttt-yeIi4BPWrgvW324W7.md similarity index 91% rename from src/data/roadmaps/cpp/content/112-idioms/102-crtp.md rename to src/data/roadmaps/cpp/content/crtp@ttt-yeIi4BPWrgvW324W7.md index e09f1ed22..a573e565d 100644 --- a/src/data/roadmaps/cpp/content/112-idioms/102-crtp.md +++ b/src/data/roadmaps/cpp/content/crtp@ttt-yeIi4BPWrgvW324W7.md @@ -17,14 +17,14 @@ public: } void implementation() { - std::cout << "Default implementation in Base" << std::endl; + std::cout << "Default implementation in Base\n"; } }; class Derived1 : public Base { public: void implementation() { - std::cout << "Custom implementation in Derived1" << std::endl; + std::cout << "Custom implementation in Derived1\n"; } }; diff --git a/src/data/roadmaps/cpp/content/104-data-types/index.md b/src/data/roadmaps/cpp/content/data-types@MwznA4qfpNlv6sqSNjPZi.md similarity index 97% rename from src/data/roadmaps/cpp/content/104-data-types/index.md rename to src/data/roadmaps/cpp/content/data-types@MwznA4qfpNlv6sqSNjPZi.md index 84136bad0..d3776df0b 100644 --- a/src/data/roadmaps/cpp/content/104-data-types/index.md +++ b/src/data/roadmaps/cpp/content/data-types@MwznA4qfpNlv6sqSNjPZi.md @@ -109,7 +109,7 @@ public: int age; void printInfo() { - std::cout << "Name: " << name << ", Age: " << age << std::endl; + std::cout << "Name: " << name << ", Age: " << age << '\n'; }; }; diff --git a/src/data/roadmaps/cpp/content/110-stl/103-date-time.md b/src/data/roadmaps/cpp/content/date--time@yGvE6eHKlPMBB6rde0llR.md similarity index 97% rename from src/data/roadmaps/cpp/content/110-stl/103-date-time.md rename to src/data/roadmaps/cpp/content/date--time@yGvE6eHKlPMBB6rde0llR.md index 7538f69d8..047afd9e8 100644 --- a/src/data/roadmaps/cpp/content/110-stl/103-date-time.md +++ b/src/data/roadmaps/cpp/content/date--time@yGvE6eHKlPMBB6rde0llR.md @@ -82,7 +82,7 @@ To convert a time point to calendar representation, you can use the `std::chrono int main() { std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); std::time_t now_c = std::chrono::system_clock::to_time_t(now); - std::cout << "Current time: " << std::ctime(&now_c) << std::endl; + std::cout << "Current time: " << std::ctime(&now_c) << '\n'; return 0; } ``` diff --git a/src/data/roadmaps/cpp/content/114-debuggers/index.md b/src/data/roadmaps/cpp/content/debuggers@qmHs6_BzND_xpMmls5YUH.md similarity index 100% rename from src/data/roadmaps/cpp/content/114-debuggers/index.md rename to src/data/roadmaps/cpp/content/debuggers@qmHs6_BzND_xpMmls5YUH.md diff --git a/src/data/roadmaps/cpp/content/114-debuggers/101-debugger-symbols.md b/src/data/roadmaps/cpp/content/debugging-symbols@sR_FxGZHoMCV9Iv7z2_SX.md similarity index 100% rename from src/data/roadmaps/cpp/content/114-debuggers/101-debugger-symbols.md rename to src/data/roadmaps/cpp/content/debugging-symbols@sR_FxGZHoMCV9Iv7z2_SX.md diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/102-multiple-inheritance/100-diamond-inheritance.md b/src/data/roadmaps/cpp/content/diamond-inheritance@ofwdZm05AUqCIWmfgGHk8.md similarity index 87% rename from src/data/roadmaps/cpp/content/107-structures-and-classes/102-multiple-inheritance/100-diamond-inheritance.md rename to src/data/roadmaps/cpp/content/diamond-inheritance@ofwdZm05AUqCIWmfgGHk8.md index 136b45012..5ed4139f8 100644 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/102-multiple-inheritance/100-diamond-inheritance.md +++ b/src/data/roadmaps/cpp/content/diamond-inheritance@ofwdZm05AUqCIWmfgGHk8.md @@ -12,28 +12,28 @@ To resolve this ambiguity, you can use virtual inheritance. A virtual base class class Base { public: void print() { - std::cout << "Base class" << std::endl; + std::cout << "Base class\n"; } }; class Derived1 : virtual public Base { public: void derived1Print() { - std::cout << "Derived1 class" << std::endl; + std::cout << "Derived1 class\n"; } }; class Derived2 : virtual public Base { public: void derived2Print() { - std::cout << "Derived2 class" << std::endl; + std::cout << "Derived2 class\n"; } }; class Derived3 : public Derived1, public Derived2 { public: void derived3Print() { - std::cout << "Derived3 class" << std::endl; + std::cout << "Derived3 class\n"; } }; diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/index.md b/src/data/roadmaps/cpp/content/dynamic-polymorphism@7h1VivjCPDwriL7FirtFv.md similarity index 90% rename from src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/index.md rename to src/data/roadmaps/cpp/content/dynamic-polymorphism@7h1VivjCPDwriL7FirtFv.md index a76f419e3..aa185be47 100644 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/101-dynamic-polymorphism/index.md +++ b/src/data/roadmaps/cpp/content/dynamic-polymorphism@7h1VivjCPDwriL7FirtFv.md @@ -15,7 +15,7 @@ Here's an example in C++ demonstrating dynamic polymorphism. class Shape { public: virtual void draw() { - std::cout << "Drawing a shape" << std::endl; + std::cout << "Drawing a shape\n"; } }; @@ -23,7 +23,7 @@ public: class Circle : public Shape { public: void draw() override { - std::cout << "Drawing a circle" << std::endl; + std::cout << "Drawing a circle\n"; } }; @@ -31,7 +31,7 @@ public: class Rectangle : public Shape { public: void draw() override { - std::cout << "Drawing a rectangle" << std::endl; + std::cout << "Drawing a rectangle\n"; } }; diff --git a/src/data/roadmaps/cpp/content/104-data-types/101-dynamic-typing/index.md b/src/data/roadmaps/cpp/content/dynamic-typing@i0EAFEUB-F0wBJWOtrl1A.md similarity index 91% rename from src/data/roadmaps/cpp/content/104-data-types/101-dynamic-typing/index.md rename to src/data/roadmaps/cpp/content/dynamic-typing@i0EAFEUB-F0wBJWOtrl1A.md index 473e30fb0..63772d398 100644 --- a/src/data/roadmaps/cpp/content/104-data-types/101-dynamic-typing/index.md +++ b/src/data/roadmaps/cpp/content/dynamic-typing@i0EAFEUB-F0wBJWOtrl1A.md @@ -20,13 +20,13 @@ int main() { void* void_ptr; void_ptr = &x; - std::cout << "int value: " << *(static_cast(void_ptr)) << std::endl; + std::cout << "int value: " << *(static_cast(void_ptr)) << '\n'; void_ptr = &y; - std::cout << "float value: " << *(static_cast(void_ptr)) << std::endl; + std::cout << "float value: " << *(static_cast(void_ptr)) << '\n'; void_ptr = &z; - std::cout << "string value: " << *(static_cast(void_ptr)) << std::endl; + std::cout << "string value: " << *(static_cast(void_ptr)) << '\n'; return 0; } @@ -45,13 +45,13 @@ int main() { std::any any_value; any_value = 42; - std::cout << "int value: " << std::any_cast(any_value) << std::endl; + std::cout << "int value: " << std::any_cast(any_value) << '\n'; any_value = 3.14; - std::cout << "double value: " << std::any_cast(any_value) << std::endl; + std::cout << "double value: " << std::any_cast(any_value) << '\n'; any_value = std::string("Hello, world!"); - std::cout << "string value: " << std::any_cast(any_value) << std::endl; + std::cout << "string value: " << std::any_cast(any_value) << '\n'; return 0; } diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/102-dynamic-cast.md b/src/data/roadmaps/cpp/content/dynamic_cast@4BdFcuQ5KNW94cu2jz-vE.md similarity index 90% rename from src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/102-dynamic-cast.md rename to src/data/roadmaps/cpp/content/dynamic_cast@4BdFcuQ5KNW94cu2jz-vE.md index 622f17f5d..9475d53e9 100644 --- a/src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/102-dynamic-cast.md +++ b/src/data/roadmaps/cpp/content/dynamic_cast@4BdFcuQ5KNW94cu2jz-vE.md @@ -10,14 +10,14 @@ Here is a basic example of how `dynamic_cast` can be used: class BaseClass { public: virtual void display() { - std::cout << "BaseClass" << std::endl; + std::cout << "BaseClass\n"; } }; class DerivedClass : public BaseClass { public: void display() { - std::cout << "DerivedClass" << std::endl; + std::cout << "DerivedClass\n"; } }; diff --git a/src/data/roadmaps/cpp/content/112-idioms/104-erase-remove.md b/src/data/roadmaps/cpp/content/erase-remove@YvmjrZSAOmjhVPo05MJqN.md similarity index 100% rename from src/data/roadmaps/cpp/content/112-idioms/104-erase-remove.md rename to src/data/roadmaps/cpp/content/erase-remove@YvmjrZSAOmjhVPo05MJqN.md diff --git a/src/data/roadmaps/cpp/content/108-exception-handling/index.md b/src/data/roadmaps/cpp/content/exception-handling@B2SGBENzUMl0SAjG4j91V.md similarity index 90% rename from src/data/roadmaps/cpp/content/108-exception-handling/index.md rename to src/data/roadmaps/cpp/content/exception-handling@B2SGBENzUMl0SAjG4j91V.md index d5b6fb09c..7dac56b42 100644 --- a/src/data/roadmaps/cpp/content/108-exception-handling/index.md +++ b/src/data/roadmaps/cpp/content/exception-handling@B2SGBENzUMl0SAjG4j91V.md @@ -31,9 +31,9 @@ int main() { try { int result = divide(num1, num2); - std::cout << "The result is: " << result << std::endl; + std::cout << "The result is: " << result << '\n'; } catch (const char* msg) { - std::cerr << "Error: " << msg << std::endl; + std::cerr << "Error: " << msg << '\n'; } return 0; @@ -71,9 +71,9 @@ int main() { try { int result = divide(num1, num2); - std::cout << "The result is: " << result << std::endl; + std::cout << "The result is: " << result << '\n'; } catch (const std::exception& e) { - std::cerr << "Error: " << e.what() << std::endl; + std::cerr << "Error: " << e.what() << '\n'; } return 0; diff --git a/src/data/roadmaps/cpp/content/108-exception-handling/100-exceptions/index.md b/src/data/roadmaps/cpp/content/exceptions@NJud5SXBAUZ6Sr78kZ7jx.md similarity index 94% rename from src/data/roadmaps/cpp/content/108-exception-handling/100-exceptions/index.md rename to src/data/roadmaps/cpp/content/exceptions@NJud5SXBAUZ6Sr78kZ7jx.md index 36f0506af..47dfa28a5 100644 --- a/src/data/roadmaps/cpp/content/108-exception-handling/100-exceptions/index.md +++ b/src/data/roadmaps/cpp/content/exceptions@NJud5SXBAUZ6Sr78kZ7jx.md @@ -39,11 +39,11 @@ try { throw "Division by zero not allowed!"; } else { int result = num1 / num2; - std::cout << "Result: " << result << std::endl; + std::cout << "Result: " << result << '\n'; } } catch (const char* e) { - std::cout << "Error: " << e << std::endl; + std::cout << "Error: " << e << '\n'; } ``` diff --git a/src/data/roadmaps/cpp/content/108-exception-handling/101-exit-codes.md b/src/data/roadmaps/cpp/content/exit-codes@oWygnpwHq2poXQMTTSCpl.md similarity index 89% rename from src/data/roadmaps/cpp/content/108-exception-handling/101-exit-codes.md rename to src/data/roadmaps/cpp/content/exit-codes@oWygnpwHq2poXQMTTSCpl.md index cb3e919a2..147225040 100644 --- a/src/data/roadmaps/cpp/content/108-exception-handling/101-exit-codes.md +++ b/src/data/roadmaps/cpp/content/exit-codes@oWygnpwHq2poXQMTTSCpl.md @@ -15,14 +15,14 @@ int main() { // Some code here... if (/*some error condition*/) { - std::cout << "An error occurred." << std::endl; + std::cout << "An error occurred.\n"; return 1; } // More code here... if (/*another error condition*/) { - std::cout << "Another error occurred." << std::endl; + std::cout << "Another error occurred.\n"; return 2; } @@ -40,7 +40,7 @@ void some_function() { // Some code here... if (/*some error condition*/) { - std::cout << "An error occurred." << std::endl; + std::cout << "An error occurred.\n"; std::exit(1); } diff --git a/src/data/roadmaps/cpp/content/fmt@1CqQgmHDeo1HlPdpUJS7H.md b/src/data/roadmaps/cpp/content/fmt@1CqQgmHDeo1HlPdpUJS7H.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/102-basic-operations/102-loops.md b/src/data/roadmaps/cpp/content/for--while--do-while-loops@_IP_e1K9LhNHilYTDh7L5.md similarity index 91% rename from src/data/roadmaps/cpp/content/102-basic-operations/102-loops.md rename to src/data/roadmaps/cpp/content/for--while--do-while-loops@_IP_e1K9LhNHilYTDh7L5.md index 7fe661985..5792de0c7 100644 --- a/src/data/roadmaps/cpp/content/102-basic-operations/102-loops.md +++ b/src/data/roadmaps/cpp/content/for--while--do-while-loops@_IP_e1K9LhNHilYTDh7L5.md @@ -21,7 +21,7 @@ For example: int main() { for (int i = 0; i < 5; i++) { - std::cout << "Iteration: " << i << std::endl; + std::cout << "Iteration: " << i << '\n'; } return 0; } @@ -47,7 +47,7 @@ For example: int main() { int i = 0; while (i < 5) { - std::cout << "Iteration: " << i << std::endl; + std::cout << "Iteration: " << i << '\n'; i++; } return 0; @@ -74,7 +74,7 @@ For example: int main() { int i = 0; do { - std::cout << "Iteration: " << i << std::endl; + std::cout << "Iteration: " << i << '\n'; i++; } while (i < 5); return 0; diff --git a/src/data/roadmaps/cpp/content/106-structuring-codebase/101-code-splitting/100-forward-declaration.md b/src/data/roadmaps/cpp/content/forward-declaration@ZHjU60uzJTezADRhDTESG.md similarity index 100% rename from src/data/roadmaps/cpp/content/106-structuring-codebase/101-code-splitting/100-forward-declaration.md rename to src/data/roadmaps/cpp/content/forward-declaration@ZHjU60uzJTezADRhDTESG.md diff --git a/src/data/roadmaps/cpp/content/frameworks/100-gtest.md b/src/data/roadmaps/cpp/content/frameworks/100-gtest.md deleted file mode 100644 index ceb766e8f..000000000 --- a/src/data/roadmaps/cpp/content/frameworks/100-gtest.md +++ /dev/null @@ -1,75 +0,0 @@ -# Google Test (gtest) - -Google Test, also known as gtest or googletest, is a C++ testing framework developed by Google. It provides a user-friendly API for writing test cases and is designed for use in a range of applications, from simple unit tests to complex system-level tests. - -## Getting Started with Google Test - -To use Google Test in your project, follow these steps: - -- Download the source code from the [GoogleTest GitHub repository](https://github.com/google/googletest). -- Build and install Google Test on your system. Instructions for various platforms can be found in the [README](https://github.com/google/googletest/blob/main/googletest/README.md) file. -- Include the necessary headers and link against the Google Test library in your project. - -## Writing a Test with Google Test - -Here's an example of how to write a simple test using Google Test: - -- **Include the necessary headers** - ```cpp - #include "gtest/gtest.h" - ``` - -- **Write the functions you want to test** - - Suppose we have a simple function to test: - ```cpp - int add(int a, int b) { - return a + b; - } - ``` - -- **Write the test cases** - - To create a test case, use the `TEST()` macro, which takes two arguments: the test suite name and the test case name. - - ```cpp - // Test the 'add' function. - TEST(AdditionTest, PositiveNumbers) { - EXPECT_EQ(3, add(1, 2)); - EXPECT_EQ(5, add(2, 3)); - } - - TEST(AdditionTest, NegativeNumbers) { - EXPECT_EQ(-3, add(-1, -2)); - EXPECT_EQ(-5, add(-2, -3)); - } - ``` - -- **Write a `main()` function** - - In order to run the tests, include a `main()` function that initializes Google Test and runs the tests. - - ```cpp - int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); - } - ``` - -- **Compile and run the tests** - - Compile your test program with the Google Test library and run the test executable. - -## More Features - -Google Test offers a wide range of features to make testing easier, such as: - -- **Test Fixtures**: Test fixtures allow you to reuse the same set of objects for multiple tests. You can define a test fixture by creating a class that inherits from `::testing::Test` and writing setup and teardown methods. - -- **Assertions**: Google Test provides a variety of assertion macros to help you verify your code's behavior. Some common ones include `EXPECT_EQ`, `EXPECT_TRUE`, `EXPECT_FALSE`, `ASSERT_EQ`, `ASSERT_TRUE`, and `ASSERT_FALSE`. - -- **Parameterized Tests**: Google Test supports parameterized tests, allowing you to run the same test with different inputs easily. - -- **Death Tests**: Google Test allows you to write tests that verify if your code terminates correctly or with the expected error message. - -For more information about Google Test and its features, refer to the [official documentation](https://github.com/google/googletest/blob/main/docs/primer.md). diff --git a/src/data/roadmaps/cpp/content/frameworks/101-qt.md b/src/data/roadmaps/cpp/content/frameworks/101-qt.md deleted file mode 100644 index bdf74781e..000000000 --- a/src/data/roadmaps/cpp/content/frameworks/101-qt.md +++ /dev/null @@ -1,37 +0,0 @@ -# Qt Framework - -Qt is an open-source, cross-platform framework for creating high-performance applications with interactive user interfaces. It is mainly used for developing GUI applications but can also be used for creating non-GUI applications like console tools and servers. - -Qt provides a wide range of C++ libraries and seamless integration with popular IDEs, making it easier for developers to create feature-rich applications. It offers a comprehensive development environment, including tools for designing, coding, debugging, and profiling applications. - -## Key Features - -- **Cross-platform**: Qt can create applications that run on different platforms (e.g., Windows, macOS, Linux, Android, iOS) without any platform-specific code. -- **Modular Libraries**: Qt consists of several modular libraries, including QtCore (core non-GUI functionality), QtGui (GUI-related classes), QtWidgets (GUI widgets), and QtNetwork (networking support). -- **Signals and Slots**: Qt provides a unique mechanism to handle events called "signals and slots", which allows safe and flexible inter-object communication. -- **OpenGL Integration**: Qt supports rendering 2D and 3D graphics using OpenGL, making it suitable for game development and other graphical applications. - -## Code Example - -Here's a simple example of a "Hello, World!" application using Qt: - -```cpp -#include -#include - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - - QLabel label("Hello, World!"); - label.show(); - - return app.exec(); -} -``` - -In this example, we include the necessary header files, create QApplication and QLabel objects, display the label with a "Hello, World!" message, and execute the application. - -To compile and run this example, you need to install the Qt library and configure your development environment to use it. - -For more information and tutorials about Qt, you can refer to the [official Qt documentation](https://doc.qt.io/qt-5/index.html). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/frameworks/102-catch2.md b/src/data/roadmaps/cpp/content/frameworks/102-catch2.md deleted file mode 100644 index f94d5f1f6..000000000 --- a/src/data/roadmaps/cpp/content/frameworks/102-catch2.md +++ /dev/null @@ -1,96 +0,0 @@ -# Catch2 - -Catch2 is a modern, C++-native, test framework for unit tests, TDD, and BDD. It is a single-header library, meaning you only need to include one header file (`catch.hpp`) to start using it. Catch2 is fast, easy to use, and supports various test styles. - -## Features - -- **Single-header:** Just `#include "catch.hpp"` and start writing tests. -- **Test cases:** Declare test cases using the `TEST_CASE` macro. -- **Sections:** Divide test cases into sections using `SECTION` macro. -- **BDD:** Behavior-Driven Development style supported with `SCENARIO`, `GIVEN`, `WHEN`, `THEN`. -- **Matchers:** Use rich built-in matchers for more expressive assertions. -- **Test discovery:** Catch2 automatically discovers your test cases and sections. - -## Code examples - -## Basic test case - -```cpp -#define CATCH_CONFIG_MAIN // Tells Catch to provide a main() function -#include "catch.hpp" - -int add(int a, int b) { - return a + b; -} - -TEST_CASE("Addition") { - REQUIRE(add(2, 3) == 5); -} -``` - -## Sections - -```cpp -TEST_CASE("Sections example") { - int a = 1; - - SECTION("incrementing a") { - a++; - REQUIRE(a == 2); - } - - SECTION("decrementing a") { - a--; - REQUIRE(a == 0); - } -} -``` - -## BDD style - -```cpp -SCENARIO("vector can be sized and resized", "[vector]") { - std::vector v; - - GIVEN("A vector with some items") { - v.push_back(1); - v.push_back(2); - v.push_back(3); - - REQUIRE(v.size() == 3); - - WHEN("the size is increased") { - v.resize(5); - - THEN("the size and contents change") { - REQUIRE(v.size() == 5); - REQUIRE(v[3] == 0); - REQUIRE(v[4] == 0); - } - } - WHEN("the size is reduced") { - v.resize(2); - - THEN("the size changes but not the contents") { - REQUIRE(v.size() == 2); - REQUIRE(v[0] == 1); - REQUIRE(v[1] == 2); - } - } - } -} -``` - -## Matchers - -```cpp -TEST_CASE("Matchers example") { - std::string str = "Hello, world!"; - - CHECK_THAT(str, Catch::Matchers::StartsWith("Hello")); - CHECK_THAT(str, Catch::Matchers::EndsWith("world!")); - CHECK_THAT(str, Catch::Matchers::Contains("lo, wo")); -} -``` - -For more information, visit the [Catch2 GitHub repository](https://github.com/catchorg/Catch2). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/frameworks/103-orbit-profiler.md b/src/data/roadmaps/cpp/content/frameworks/103-orbit-profiler.md deleted file mode 100644 index d498b54f0..000000000 --- a/src/data/roadmaps/cpp/content/frameworks/103-orbit-profiler.md +++ /dev/null @@ -1,69 +0,0 @@ -# Orbit Profiler - -Orbit Profiler is a performance profiler for C++ applications. It is designed to provide developers with real-time feedback on their application's performance and help them identify performance bottlenecks. It supports both Windows and Linux platforms, profiling both local and remote processes. - -**Major features of Orbit Profiler:** - -- Sampling-based profiling -- Instrumentation-based profiling -- Callstacks collection -- Frame-based measurements using scopes macros - -## Usage - -- **Include OrbitProfiler.h**: First, you need to include the `OrbitProfiler.h` header file in your project: - - ```cpp - #include "OrbitProfiler.h" - ``` - -- **Starting and Stopping the profiler**: Use `ORBET_START` and `ORBIT_STOP` to start and stop the profiler. - - ```cpp - ORBIT_START(); - // Your application code here - ORBIT_STOP(); - ``` - -- **Instrumenting scopes**: Use the `ORBET_SCOPE` macro to annotate the scope of the function you want to measure: - - ```cpp - void ExampleFunction() { - ORBIT_SCOPE("Example Function"); - // Function content here - } - ``` - -- **Visualizing the captured data**: Orbit Profiler provides a **Session View** that displays the captured data and allows you to navigate through the timeline, analyze data, and identify performance bottlenecks. - -## Example - -For demonstration purposes, consider the following example of a simple C++ application: - -```cpp -#include "OrbitProfiler.h" - -void FunctionA() { - ORBIT_SCOPE("Function A"); - // Function A code here -} - -void FunctionB() { - ORBIT_SCOPE("Function B"); - // Function B code here -} - -int main() { - ORBIT_START(); - - FunctionA(); - FunctionB(); - - ORBIT_STOP(); - return 0; -} -``` - -By using Orbit Profiler, we are able to pinpoint performance issues in FunctionA and FunctionB and optimize our application accordingly. - -For more information, refer to the [official Orbit Profiler GitHub repository](https://github.com/google/orbit). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/frameworks/104-pytorch-cpp.md b/src/data/roadmaps/cpp/content/frameworks/104-pytorch-cpp.md deleted file mode 100644 index 88a71f34d..000000000 --- a/src/data/roadmaps/cpp/content/frameworks/104-pytorch-cpp.md +++ /dev/null @@ -1,71 +0,0 @@ -# PyTorch C++ - -PyTorch C++ is the C++ API (Application Programming Interface) for PyTorch. It is also known as LibTorch, which is a library that provides almost all the functionality of PyTorch accessible through C++ language. The main goal of providing a C++ API is to enable high-performance integration with other deep learning platforms and enable seamless operation in enterprise and production-level systems. - -## Installation - -To use the PyTorch C++ API, you need to install the LibTorch distribution. Follow the instructions on the [official PyTorch C++ API page](https://pytorch.org/cppdocs/installing.html) to install the library based on your platform and requirements. - -## Example: Tensors - -```cpp -#include -#include - -int main() { - // Create a 3x3 matrix with zeros. - torch::Tensor a = torch::zeros({3, 3}); - std::cout << a << std::endl; - - // Create a 2x2 matrix with ones and convert to float. - torch::Tensor b = torch::ones({2, 2}).to(torch::kFloat); - std::cout << b << std::endl; - - // Create a random tensor size 2x2 and specify its type. - torch::Tensor c = torch::randint(0, 10, {2, 2}, torch::kInt); - std::cout << c << std::endl; - - // Perform element-wise addition. - auto sum = b + c.to(torch::kFloat); - std::cout << sum << std::endl; -} -``` - -## Example: Creating a Custom Module - -```cpp -#include -#include - -// Define a custom module. -struct Net : torch::nn::Module { - Net() { - fc1 = register_module("fc1", torch::nn::Linear(784, 64)); - fc2 = register_module("fc2", torch::nn::Linear(64, 10)); - } - - torch::Tensor forward(torch::Tensor x) { - x = x.view({-1, 784}); - x = torch::relu(fc1->forward(x)); - x = torch::log_softmax(fc2->forward(x), 1); - return x; - } - - torch::nn::Linear fc1{nullptr}; - torch::nn::Linear fc2{nullptr}; -}; - -int main() { - // Create an instance of the custom module. - Net net; - - // Use the custom module. - torch::Tensor input = torch::randn({2, 1, 28, 28}); - torch::Tensor output = net.forward(input); - std::cout << output << std::endl; - - return 0; -} -``` - -In these examples, we demonstrated how to use various tensor operations and how to create a custom neural network module with PyTorch C++. For more detailed information and tutorials, visit the [official PyTorch C++ documentation](https://pytorch.org/cppdocs/). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/frameworks/index.md b/src/data/roadmaps/cpp/content/frameworks/index.md deleted file mode 100644 index c3e3997cf..000000000 --- a/src/data/roadmaps/cpp/content/frameworks/index.md +++ /dev/null @@ -1 +0,0 @@ -# Frameworks \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/111-templates/101-template-specialization/100-full.md b/src/data/roadmaps/cpp/content/full-template-specialization@6hTcmJwNnQstbWWzNCfTe.md similarity index 89% rename from src/data/roadmaps/cpp/content/111-templates/101-template-specialization/100-full.md rename to src/data/roadmaps/cpp/content/full-template-specialization@6hTcmJwNnQstbWWzNCfTe.md index 98f2c13ea..11a15791d 100644 --- a/src/data/roadmaps/cpp/content/111-templates/101-template-specialization/100-full.md +++ b/src/data/roadmaps/cpp/content/full-template-specialization@6hTcmJwNnQstbWWzNCfTe.md @@ -19,7 +19,7 @@ template class MyContainer { public: void print() { - std::cout << "Generic container." << std::endl; + std::cout << "Generic container.\n"; } }; @@ -28,7 +28,7 @@ template <> class MyContainer { public: void print() { - std::cout << "Container for integers." << std::endl; + std::cout << "Container for integers.\n"; } }; diff --git a/src/data/roadmaps/cpp/content/function-overloading@sgfqb22sdN4VRJYkhAVaf.md b/src/data/roadmaps/cpp/content/function-overloading@sgfqb22sdN4VRJYkhAVaf.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/103-functions/index.md b/src/data/roadmaps/cpp/content/functions@oYi3YOc1GC2Nfp71VOkJt.md similarity index 95% rename from src/data/roadmaps/cpp/content/103-functions/index.md rename to src/data/roadmaps/cpp/content/functions@oYi3YOc1GC2Nfp71VOkJt.md index d4db1f6c8..0422126cd 100644 --- a/src/data/roadmaps/cpp/content/103-functions/index.md +++ b/src/data/roadmaps/cpp/content/functions@oYi3YOc1GC2Nfp71VOkJt.md @@ -36,7 +36,7 @@ int addNumbers(int a, int b) { int main() { int num1 = 5, num2 = 10; int result = addNumbers(num1, num2); // Calling the function - std::cout << "The sum is: " << result << std::endl; + std::cout << "The sum is: " << result << '\n'; return 0; } ``` @@ -58,7 +58,7 @@ int multiplyNumbers(int x, int y); int main() { int num1 = 3, num2 = 7; int result = multiplyNumbers(num1, num2); // Calling the function - std::cout << "The product is: " << result << std::endl; + std::cout << "The product is: " << result << '\n'; return 0; } diff --git a/src/data/roadmaps/cpp/content/114-debuggers/103-gdb.md b/src/data/roadmaps/cpp/content/gdb@BmWsoL9c_Aag5nVlMsKm2.md similarity index 96% rename from src/data/roadmaps/cpp/content/114-debuggers/103-gdb.md rename to src/data/roadmaps/cpp/content/gdb@BmWsoL9c_Aag5nVlMsKm2.md index 78f255ac7..68f6b9868 100644 --- a/src/data/roadmaps/cpp/content/114-debuggers/103-gdb.md +++ b/src/data/roadmaps/cpp/content/gdb@BmWsoL9c_Aag5nVlMsKm2.md @@ -38,7 +38,7 @@ Suppose you have a simple `cpp` file called `example.cpp`: #include void my_function(int i) { - std::cout << "In my_function with i = " << i << std::endl; + std::cout << "In my_function with i = " << i << '\n'; } int main() { diff --git a/src/data/roadmaps/cpp/content/grpc@621J9W4xCofumNZGo4TZT.md b/src/data/roadmaps/cpp/content/grpc@621J9W4xCofumNZGo4TZT.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/gtest--gmock@MrAM-viRaF8DSxB6sVdD9.md b/src/data/roadmaps/cpp/content/gtest--gmock@MrAM-viRaF8DSxB6sVdD9.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/106-structuring-codebase/101-code-splitting/index.md b/src/data/roadmaps/cpp/content/headers--cpp-files@CK7yf8Bo7kfbV6x2tZTrh.md similarity index 97% rename from src/data/roadmaps/cpp/content/106-structuring-codebase/101-code-splitting/index.md rename to src/data/roadmaps/cpp/content/headers--cpp-files@CK7yf8Bo7kfbV6x2tZTrh.md index 4a9323506..a5270117c 100644 --- a/src/data/roadmaps/cpp/content/106-structuring-codebase/101-code-splitting/index.md +++ b/src/data/roadmaps/cpp/content/headers--cpp-files@CK7yf8Bo7kfbV6x2tZTrh.md @@ -33,7 +33,7 @@ Example of a source file: #include void Example::printMessage() { - std::cout << "Hello, code splitting!" << std::endl; + std::cout << "Hello, code splitting!\n"; } ``` diff --git a/src/data/roadmaps/cpp/content/112-idioms/index.md b/src/data/roadmaps/cpp/content/idioms@fb3bnfKXjSIjPAk4b95lg.md similarity index 100% rename from src/data/roadmaps/cpp/content/112-idioms/index.md rename to src/data/roadmaps/cpp/content/idioms@fb3bnfKXjSIjPAk4b95lg.md diff --git a/src/data/roadmaps/cpp/content/if-else--switch--goto@bjpFWxiCKGz28E-ukhZBp.md b/src/data/roadmaps/cpp/content/if-else--switch--goto@bjpFWxiCKGz28E-ukhZBp.md new file mode 100644 index 000000000..508114a8b --- /dev/null +++ b/src/data/roadmaps/cpp/content/if-else--switch--goto@bjpFWxiCKGz28E-ukhZBp.md @@ -0,0 +1 @@ +# if else / switch / goto \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/index.md b/src/data/roadmaps/cpp/content/index.md deleted file mode 100644 index 4e768b56d..000000000 --- a/src/data/roadmaps/cpp/content/index.md +++ /dev/null @@ -1 +0,0 @@ -# \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/101-setting-up/100-installing.md b/src/data/roadmaps/cpp/content/installing-c@0J_ltQEJh2g28OE2ZEYJj.md similarity index 100% rename from src/data/roadmaps/cpp/content/101-setting-up/100-installing.md rename to src/data/roadmaps/cpp/content/installing-c@0J_ltQEJh2g28OE2ZEYJj.md diff --git a/src/data/roadmaps/cpp/content/100-introduction/index.md b/src/data/roadmaps/cpp/content/introduction-to-language@NvODRFR0DLINB0RlPSsvt.md similarity index 96% rename from src/data/roadmaps/cpp/content/100-introduction/index.md rename to src/data/roadmaps/cpp/content/introduction-to-language@NvODRFR0DLINB0RlPSsvt.md index 0231d2e86..886099ba1 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/index.md +++ b/src/data/roadmaps/cpp/content/introduction-to-language@NvODRFR0DLINB0RlPSsvt.md @@ -36,7 +36,7 @@ int main() { int number; std::cout << "Enter an integer: "; std::cin >> number; - std::cout << "You entered: " << number << std::endl; + std::cout << "You entered: " << number << '\n'; return 0; } ``` @@ -124,7 +124,7 @@ int add(int a, int b) { int main() { int result = add(3, 4); - std::cout << "3 + 4 = " << result << std::endl; + std::cout << "3 + 4 = " << result << '\n'; return 0; } ``` diff --git a/src/data/roadmaps/cpp/content/110-stl/101-iostream.md b/src/data/roadmaps/cpp/content/iostream@VeVxZ230xkesQsIDig8zQ.md similarity index 90% rename from src/data/roadmaps/cpp/content/110-stl/101-iostream.md rename to src/data/roadmaps/cpp/content/iostream@VeVxZ230xkesQsIDig8zQ.md index 0d6f4c7aa..bb3c07e15 100644 --- a/src/data/roadmaps/cpp/content/110-stl/101-iostream.md +++ b/src/data/roadmaps/cpp/content/iostream@VeVxZ230xkesQsIDig8zQ.md @@ -26,7 +26,7 @@ int main() { int a; std::cout << "Enter a number: "; std::cin >> a; - std::cout << "You entered: " << a << std::endl; + std::cout << "You entered: " << a << '\n'; return 0; } ``` @@ -35,8 +35,8 @@ int main() { #include int main() { - std::cerr << "An error occurred." << std::endl; - std::clog << "Logging information." << std::endl; + std::cerr << "An error occurred.\n"; + std::clog << "Logging information.\n"; return 0; } ``` diff --git a/src/data/roadmaps/cpp/content/110-stl/100-iterators.md b/src/data/roadmaps/cpp/content/iterators@Ebu8gzbyyXEeJryeE0SpG.md similarity index 100% rename from src/data/roadmaps/cpp/content/110-stl/100-iterators.md rename to src/data/roadmaps/cpp/content/iterators@Ebu8gzbyyXEeJryeE0SpG.md diff --git a/src/data/roadmaps/cpp/content/103-functions/100-lambda.md b/src/data/roadmaps/cpp/content/lambdas@xjiFBVe-VGqCqWfkPVGKf.md similarity index 97% rename from src/data/roadmaps/cpp/content/103-functions/100-lambda.md rename to src/data/roadmaps/cpp/content/lambdas@xjiFBVe-VGqCqWfkPVGKf.md index 69a03f86a..ca5dd805b 100644 --- a/src/data/roadmaps/cpp/content/103-functions/100-lambda.md +++ b/src/data/roadmaps/cpp/content/lambdas@xjiFBVe-VGqCqWfkPVGKf.md @@ -25,7 +25,7 @@ Here are a few examples to demonstrate the use of lambda functions in C++: ```cpp auto printHello = []() { - std::cout << "Hello, World!" << std::endl; + std::cout << "Hello, World!\n"; }; printHello(); // Output: Hello, World! ``` diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/index.md b/src/data/roadmaps/cpp/content/language-concepts@-6fwJQOfsorgHkoQGp4T3.md similarity index 100% rename from src/data/roadmaps/cpp/content/109-language-concepts/index.md rename to src/data/roadmaps/cpp/content/language-concepts@-6fwJQOfsorgHkoQGp4T3.md diff --git a/src/data/roadmaps/cpp/content/libraries/100-boost.md b/src/data/roadmaps/cpp/content/libraries/100-boost.md deleted file mode 100644 index bd0d66fa4..000000000 --- a/src/data/roadmaps/cpp/content/libraries/100-boost.md +++ /dev/null @@ -1,45 +0,0 @@ -# Boost C++ Libraries - -Boost is a collection of high-quality and widely-used C++ libraries that are designed to help developers write efficient and portable code. They are modular and can be included in your projects as needed. Boost libraries provide various functionalities, including support for parallelism, multithreading, memory management, string manipulation, and advanced data structures. - -## Notable Components - -Here's a list of some popular Boost libraries: - -- **Boost.Asio**: Provides network and low-level I/O services. -- **Boost.Bimap**: A bidirectional map data structure. -- **Boost.Filesystem**: Offers portable file system operations. -- **Boost.Graph**: Implements various graph algorithms and data structures. -- **Boost.Multithreading**: Offers multithreading, synchronization, and thread management tools. - -## Usage - -- First, download and install the Boost libraries according to the [documentation](https://www.boost.org/doc/libs/1_76_0/more/getting_started/index.html). -- After installation, include necessary headers in your C++ code and start using Boost facilities. - -Here's an example using `boost::filesystem` (*NOTE: Boost.Filesystem is now part of the C++17 standard library*): - -```cpp -#include -#include - -int main() { - boost::filesystem::path path("directory_path"); - - if (boost::filesystem::exists(path)) { - std::cout << "Path: " << path << " exists!" << std::endl; - - if (boost::filesystem::is_directory(path)) { - std::cout << "Path: " << path << " is a directory." << std::endl; - } else if (boost::filesystem::is_regular_file(path)) { - std::cout << "Path: " << path << " is a regular file." << std::endl; - } - } else { - std::cout << "Path: " << path << " does not exist!" << std::endl; - } - - return 0; -} -``` - -For a more detailed guide, refer to the [official Boost documentation](https://www.boost.org/doc/libs/). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/101-open-cv.md b/src/data/roadmaps/cpp/content/libraries/101-open-cv.md deleted file mode 100644 index e31bfa268..000000000 --- a/src/data/roadmaps/cpp/content/libraries/101-open-cv.md +++ /dev/null @@ -1,57 +0,0 @@ -# OpenCV - -**OpenCV (Open Source Computer Vision Library)** is an open-source computer vision and machine learning software library. It was built to provide a common infrastructure for computer vision applications and to accelerate the use of machine perception in commercial products. OpenCV contains over 2,500 optimized algorithms for real-time computer vision and is actively used by a large community of programmers, researchers, and industries worldwide. - -The library has interfaces for C++, Python, Java, and MATLAB/Octave, and is widely used in various computer vision fields, such as: - -- 2D and 3D image processing -- Facial recognition and face detection -- Object detection and recognition -- Machine learning - -Here's a simple example using OpenCV in C++ to read and display an image: - -**Prerequisite**: Install OpenCV for C++ on your system (e.g., by following the [official installation guide](https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html)). - -```cpp -#include -#include -#include - -int main(int argc, char** argv) { - if (argc != 2) { - std::cout << "Usage: display_image ImageToLoadAndDisplay" << std::endl; - return -1; - } - - cv::Mat image; - image = cv::imread(argv[1], cv::IMREAD_COLOR); - - if (!image.data) { - std::cout << "Could not open or find the image" << std::endl; - return -1; - } - - cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE); - cv::imshow("Display window", image); - cv::waitKey(0); - - return 0; -} -``` - -This example reads an image from the given input path (`argv[1]`) and displays it in a window. The `cv::imread()` function is used to read the image, and the `cv::imshow()` function displays it in the created window. - -Remember to compile the code, linking the necessary libraries: - -``` -g++ -o display_image display_image.cpp `pkg-config --cflags --libs opencv4` -``` - -And run the executable with an image path as an argument: - -``` -./display_image path/to/image.jpg -``` - -For more advanced examples and detailed documentation on how to use OpenCV, please visit the [official OpenCV documentation](https://docs.opencv.org/master/). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/102-poco.md b/src/data/roadmaps/cpp/content/libraries/102-poco.md deleted file mode 100644 index 2edfc1657..000000000 --- a/src/data/roadmaps/cpp/content/libraries/102-poco.md +++ /dev/null @@ -1,76 +0,0 @@ -# Poco - -Poco (also known as POCO C++ Libraries) is a collection of open-source class libraries, which simplifies the creation of network-centric, portable, and maintainable software in C++. - -## Overview - -Poco library provides functionality for various areas, such as: - -- Networking: HTTP, FTP, SMTP, POP3, and other internet protocols -- File handling: FileSystem, Path, File, and Directory classes -- XML processing: XML parsing and DOM manipulation -- Logging: Loggers, levels, channels, patterns, etc. -- Data manipulation: Stream, ByteBuffer, Buffer, etc. -- Multithreading and synchronization: Threads, Mutex, Event, and Condition - -## Code Example - -Here's an example demonstrating an HTTP client using the Poco library: - -```cpp -#include -#include -#include -#include -#include -#include -#include - -using namespace Poco::Net; -using namespace Poco; - -int main() -{ - try - { - // Prepare the request - URI uri("http://example.com"); - HTTPClientSession session(uri.getHost(), uri.getPort()); - - HTTPRequest request(HTTPRequest::HTTP_GET, uri.getPath(), HTTPMessage::HTTP_1_1); - request.setContentType("application/json"); - - session.sendRequest(request); - - // Process the response - HTTPResponse response; - std::istream& responseStream = session.receiveResponse(response); - if (response.getStatus() == HTTPResponse::HTTP_OK) - { - // Successful - std::string responseBody; - StreamCopier::copyToString(responseStream, responseBody); - - std::cout << "Response: " << responseBody << std::endl; - } - else - { - // Error - std::cout << "Error: " << response.getStatus() << " " << response.getReason() << std::endl; - } - } - catch(const Exception& e) - { - std::cerr << "Error: " << e.displayText() << std::endl; - return -1; - } - - return 0; -} -``` - -In the above example, Poco is used to send an HTTP GET request and process the response. It manages tasks like connecting to the server, handling exceptions, and managing HTTP headers. - -Learn more from the following resources: - -- [@article@Official Docs for Poco Library](https://docs.pocoproject.org/) \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/103-protobuf.md b/src/data/roadmaps/cpp/content/libraries/103-protobuf.md deleted file mode 100644 index db0027be9..000000000 --- a/src/data/roadmaps/cpp/content/libraries/103-protobuf.md +++ /dev/null @@ -1,79 +0,0 @@ -# Protocol Buffers (protobuf) - -Protocol Buffers, or protobuf, is a language and platform-neutral data serialization format developed by Google. It is used to efficiently serialize structured data for use in communications protocols, data storage, and more. It is extensible, as it allows you to define your own custom data structures called "messages" with various scalar and complex field types. - -Here is a brief summary of protobuf and how to use it in C++: - -- **Define your `.proto` file:** Create a `.proto` file that defines the structure of your messages. - - *Example:* - - ``` - syntax = "proto3"; - - message Person { - string name = 1; - int32 age = 2; - string email = 3; - } - ``` - -- **Compile the `.proto` file:** You need to compile your `.proto` file to generate C++ classes for serialization and deserialization. - - *Example:* - - ```sh - protoc --cpp_out=. person.proto - ``` - - This will generate two files: `person.pb.cc` and `person.pb.h` that contains the C++ class definitions. - -- **Include protobuf library and generated files into your C++ code:** You'll need to include the protobuf library and the generated files in your main C++ code. - - *Example:* - - ```cpp - #include - #include - #include "person.pb.h" - - int main () { - GOOGLE_PROTOBUF_VERIFY_VERSION; // Verify that protobuf library headers match library version - - // Serialize a Person message - Person person; - person.set_name("Sam"); - person.set_age(35); - person.set_email("sam@example.com"); - - // Save the data to a file - std::ofstream output("person.bin", ios::binary); - person.SerializeToOstream(&output); - output.close(); - - // Deserialize the message from the file - Person input_person; - std::ifstream input("person.bin", ios::binary); - input_person.ParseFromIstream(&input); - input.close(); - - // Print the deserialized message - std::cout << "Name: " << input_person.name() << std::endl; - std::cout << "Age: " << input_person.age() << std::endl; - std::cout << "Email: " << input_person.email() << std::endl; - - google::protobuf::ShutdownProtobufLibrary(); - - return 0; - } - ``` - -- **Compile and link your C++ code:** Finally, compile your C++ code and link it to the protobuf library. - - *Example:* - - ```sh - g++ -std=c++11 -o main main.cpp person.pb.cc -lprotobuf - ``` - -For more information and examples, you can refer to the [official protobuf C++ tutorial](https://developers.google.com/protocol-buffers/docs/cpptutorial). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/104-grpc.md b/src/data/roadmaps/cpp/content/libraries/104-grpc.md deleted file mode 100644 index f31b5239c..000000000 --- a/src/data/roadmaps/cpp/content/libraries/104-grpc.md +++ /dev/null @@ -1,129 +0,0 @@ -# gRPC - -gRPC (gRPC Remote Procedure Calls) is an open-source Remote Procedure Call (RPC) framework that runs on various programming languages, including C++. gRPC is designed to be high-performance, efficient, and scalable, making it ideal for microservice architectures and other applications with high performance requirements. - -gRPC uses the Protocol Buffers (Protobuf) serialization format for message exchange and method definition. Protocol Buffers enable more efficient and smaller serialization compared to other formats like JSON or XML. - -## Protocol Buffers - -In gRPC, you start by defining service definitions and message structures in `.proto` files. You can define data structures and service interfaces using a compact, language-neutral, platform-neutral binary format. - -Here's an example of how that might look: - -```proto -syntax = "proto3"; - -package example; - -// The gRPC service definition -service Greeter { - rpc SayHello (HelloRequest) returns (HelloReply) {} -} - -// The Request message definition -message HelloRequest { - string name = 1; -} - -// The Reply message definition -message HelloReply { - string message = 1; -} -``` - -After defining the `.proto` file, you use the `protoc` compiler to generate the corresponding C++ code for your application. - -## gRPC C++ Server - -To create a gRPC server in C++, you first need to implement the service interface generated by the `protoc` compiler. Here's an example implementation for the `Greeter` service: - -```cpp -#include -#include "example.grpc.pb.h" - -using grpc::Server; -using grpc::ServerBuilder; -using grpc::ServerContext; -using grpc::Status; -using example::HelloRequest; -using example::HelloReply; -using example::Greeter; - -class GreeterServiceImpl final : public Greeter::Service { - Status SayHello(ServerContext* context, const HelloRequest* request, HelloReply* reply) override { - std::string prefix("Hello "); - reply->set_message(prefix + request->name()); - return Status::OK; - } -}; - -void RunServer() { - std::string server_address("0.0.0.0:50051"); - GreeterServiceImpl service; - - ServerBuilder builder; - builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); - builder.RegisterService(&service); - - std::unique_ptr server(builder.BuildAndStart()); - std::cout << "Server listening on " << server_address << std::endl; - server->Wait(); -} - -int main(int argc, char** argv) { - RunServer(); - return 0; -} -``` - -## gRPC C++ Client - -Similarly, to create a gRPC C++ client, you use the generated code from `protoc` compiler and connect to a server: - -```cpp -#include -#include "example.grpc.pb.h" - -using grpc::Channel; -using grpc::ClientContext; -using grpc::Status; -using example::HelloRequest; -using example::HelloReply; -using example::Greeter; - -class GreeterClient { - public: - GreeterClient(std::shared_ptr channel) : stub_(Greeter::NewStub(channel)) {} - - std::string SayHello(const std::string& user) { - HelloRequest request; - request.set_name(user); - - HelloReply reply; - ClientContext context; - - Status status = stub_->SayHello(&context, request, &reply); - - if (status.ok()) { - return reply.message(); - } else { - std::cout << "RPC failed" << std::endl; - return "RPC failed"; - } - } - - private: - std::unique_ptr stub_; -}; - -int main(int argc, char** argv) { - GreeterClient greeter(grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials())); - std::string user("world"); - std::string reply = greeter.SayHello(user); - std::cout << "Greeter received: " << reply << std::endl; - - return 0; -} -``` - -This is a basic example demonstrating the client-server communication using gRPC in C++. More advanced features like bi-directional streaming, error handling, and authentication can also be used in gRPC. For more information, you can refer to the [gRPC C++ documentation](https://grpc.io/docs/languages/cpp/). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/105-tensorflow.md b/src/data/roadmaps/cpp/content/libraries/105-tensorflow.md deleted file mode 100644 index de769e31c..000000000 --- a/src/data/roadmaps/cpp/content/libraries/105-tensorflow.md +++ /dev/null @@ -1,5 +0,0 @@ -# TensorFlow - -TensorFlow is an open-source machine learning library developed by researchers and engineers from the Google Brain team. It is designed for building, training, and deploying deep learning models. TensorFlow provides a set of tools for ML, deep learning, and numerical computation using data flow graphs. TensorFlow can process computations on GPUs and TPUs, which speed up training time and ensures efficient model deployment. - -You can visit TensorFlow's official website (https://www.tensorflow.org/) and their GitHub repository (https://github.com/tensorflow/tensorflow) for more information, tutorials, and resources. diff --git a/src/data/roadmaps/cpp/content/libraries/106-pybind11.md b/src/data/roadmaps/cpp/content/libraries/106-pybind11.md deleted file mode 100644 index 5ed1d0be6..000000000 --- a/src/data/roadmaps/cpp/content/libraries/106-pybind11.md +++ /dev/null @@ -1,70 +0,0 @@ -# Pybind11 - -Pybind11 is a lightweight header-only library that seamlessly integrates C++ code with Python, allowing users to easily expose C++11 code to the Python ecosystem. This is achieved by providing `Python` bindings that can interact with functions and classes written in `C++`. It offers an API similar to the Boost.Python library but requires less code, thus leading to better performance. - -Pybind11 helps in creating library extensions, bringing high-performance C++ code into Python programs, and using Python's flexibility for rapid development while still benefiting from the efficiency of C++. - -### Code Examples - -Here are a few examples of Pybind11 for understanding the concept better: - -- Exposing a C++ function to Python: - -```cpp -#include - -int add(int a, int b) { - return a + b; -} - -PYBIND11_MODULE(example, m) { - m.def("add", &add, "A function that adds two numbers"); -} -``` - -Running the above example will create a Python module named `example`, containing a single function `add`. You can use this new function in Python as follows: - -```python -import example - -result = example.add(1, 2) -print(result) # Output: 3 -``` - -- Exposing a C++ class to Python: - -```cpp -#include - -namespace py = pybind11; - -class MyTestClass { -public: - MyTestClass(const std::string &name) : name_(name) { } - - const std::string &name() const { return name_; } - void setName(const std::string &name) { name_ = name; } - -private: - std::string name_; -}; - -PYBIND11_MODULE(example, m) { - py::class_(m, "MyTestClass") - .def(py::init()) - .def("name", &MyTestClass::name) - .def("setName", &MyTestClass::setName); -} -``` - -After compiling the code and importing it into Python, you can create `MyTestClass` instances and call their `name()` and `setName(string)` methods: - -```python -import example - -obj = example.MyTestClass("some_name") -print(obj.name()) # Output: some_name - -obj.setName("new_name") -print(obj.name()) # Output: new_name -``` \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/107-spdlog.md b/src/data/roadmaps/cpp/content/libraries/107-spdlog.md deleted file mode 100644 index c700ce21e..000000000 --- a/src/data/roadmaps/cpp/content/libraries/107-spdlog.md +++ /dev/null @@ -1,59 +0,0 @@ -# Spdlog - -`spdlog` is a fast, header-only, C++ logging library. It provides a simple and efficient way to add diagnostic logging to your C++ application. - -## Features: -- Header-only, no need to build or link a library -- Highly configurable, including support for custom log sinks (e.g. writing to a file or a database) -- Asynchronous and synchronous logging modes -- Preprocessor-based format string checks to catch bugs at compile-time -- Easy to extend with custom formatters, sinks, and levels - -## Usage example: - -Include the `spdlog` header, create a logger object, and use it to log messages: - -```cpp -#include "spdlog/spdlog.h" - -int main() { - // Create a logger with the name "example_logger" - auto logger = spdlog::stdout_color_mt("example_logger"); - - // Log messages with various severity levels - logger->info("Welcome to spdlog!"); - logger->warn("Warning message"); - logger->error("Error message"); - - return 0; -} -``` - -## Custom sink example: - -Here's an example of creating a logger with a custom sink that writes to a text file: - -```cpp -#include "spdlog/spdlog.h" -#include "spdlog/sinks/basic_file_sink.h" - -int main() { - // Create a file sink to write logs to "logs.txt" - auto file_sink = std::make_shared("logs.txt"); - - // Create a logger with the file sink and the name "example_logger" - auto logger = std::make_shared("example_logger", file_sink); - - // Register the logger - spdlog::register_logger(logger); - - // Log messages - logger->info("Welcome to spdlog!"); - logger->warn("Warning message"); - logger->error("Error message"); - - return 0; -} -``` - -For more examples and detailed documentation, visit the [spdlog GitHub repository](https://github.com/gabime/spdlog). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/108-opencl.md b/src/data/roadmaps/cpp/content/libraries/108-opencl.md deleted file mode 100644 index 210b308ba..000000000 --- a/src/data/roadmaps/cpp/content/libraries/108-opencl.md +++ /dev/null @@ -1,59 +0,0 @@ -# OpenCL - -OpenCL (Open Computing Language) is a framework for writing programs that enables you to execute code on heterogeneous platforms consisting of CPUs, GPUs, and other processors. It is primarily used for parallel programming, and it can be employed to improve the performance of various applications, including gaming, image and video rendering, and scientific computing. - -## Overview - -OpenCL provides a standardized programming interface, allowing you to target different devices such as graphics cards from different vendors. You can program in C with OpenCL C or C++ with OpenCL C++ kernel language, which are based on the ISO C99 and C++14 respectively, with specific extensions, built-ins, and features to exploit device parallelism. - -## Key Concepts - -- Platform: A collection of devices and software features provided by a vendor. -- Device: A processing unit that can execute OpenCL code, e.g., a CPU or a GPU. -- Command queue: A sequence of instructions to be executed on a device. -- Kernel: A parallelized function that is executed on OpenCL devices. -- Buffer: A memory object that stores a specific amount of data (e.g., an array of integers or floats) that is accessible by both the host and devices. - -## Sample Code - -Here is a simple OpenCL code example that illustrates how to implement vector addition: - -```cpp -#include -#include -#include - -const char *kernelSource = "__kernel void vector_add(__global int *A, __global int *B, __global int *C, const int N) {" - " int i = get_global_id(0);" - " if (i < N) {" - " C[i] = A[i] + B[i];" - " }" - "}"; - -int main() { - // Initialize data vectors - std::vector A = {1, 2, 3}; - std::vector B = {4, 5, 6}; - std::vector C(A.size()); - - // Set up OpenCL environment, devices, and context - // ... omitted for brevity ... - - // Create memory buffers for A, B, and C - // ... omitted for brevity ... - - // Create kernel from source and set kernel arguments - // ... omitted for brevity ... - - // Execute kernel using command queue and read output buffer - // ... omitted for brevity ... - - // Output results - for (size_t i = 0; i < A.size(); ++i) { - std::cout << A[i] << " + " << B[i] << " = " << C[i] << std::endl; - } - return 0; -} -``` - -This code snippet demonstrates the basic structure of an OpenCL program in C++. There are additional details required in order to set up the environment, devices, and context, as well as creating the memory buffers, kernel, and command queue. You can find complete examples and more information in the [official OpenCL Programming Guide](https://www.khronos.org/files/opencl22-reference-guide.pdf). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/109-fmt.md b/src/data/roadmaps/cpp/content/libraries/109-fmt.md deleted file mode 100644 index 2fab03e1f..000000000 --- a/src/data/roadmaps/cpp/content/libraries/109-fmt.md +++ /dev/null @@ -1,69 +0,0 @@ -# fmt - -`fmt` is a modern C++ formatting library that provides an easy and efficient way to format text and print it to various outputs. The library offers a high level of compatibility with C++ standards, making it suitable for various applications and platforms. `fmt` emphasizes simplicity, extensibility, and type safety. - -## Features - -- Supports positional and named arguments for better readability in complex formatting tasks -- Supports format string syntax similar to Python's `str.format()` -- Provides compile-time format string checks for type safety -- Extensive documentation and user-friendly API - -## Example Usage - -Here are some examples of how to use the `fmt` library: - -## Basic Usage - -```cpp -#include - -int main() { - fmt::print("Hello, world!\n"); - return 0; -} -``` - -## Formatting with Positional Arguments - -```cpp -#include - -int main() { - fmt::print("The answer is {}.\n", 42); - fmt::print("{1}, {0}!\n", "world", "Hello"); - return 0; -} -``` - -## Formatting with Named Arguments - -```cpp -#include - -int main() { - fmt::print("Hello, {name}!\n", fmt::arg("name", "world")); - return 0; -} -``` - -## Using Format String Syntax - -```cpp -#include - -int main() { - fmt::print("{:<30}", "left-aligned"); - fmt::print("{:>30}", "right-aligned"); - fmt::print("{:^30}", "center-aligned"); - fmt::print("{:*^30}", "center-aligned"); - - fmt::print("int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}", 42); - fmt::print("{:.2f}", 3.1415926); - fmt::print("{:010.2f}", 3.1415926); - - return 0; -} -``` - -For more information, you can refer to the official [fmt documentation](https://fmt.dev/latest/index.html). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/110-ranges-v3.md b/src/data/roadmaps/cpp/content/libraries/110-ranges-v3.md deleted file mode 100644 index 817156c55..000000000 --- a/src/data/roadmaps/cpp/content/libraries/110-ranges-v3.md +++ /dev/null @@ -1,84 +0,0 @@ -# Ranges v3 - -Ranges v3 is a C++ library designed to work with ranges of values, rather than individual values. It provides a set of utilities and algorithms to manipulate and transform ranges of values in an efficient and expressive way. The library is inspired by the Range concept proposed for inclusion in the C++ standard library for C++20. - ---- - -## Overview - -Ranges v3 includes three main components: - -- **Range adaptors:** These are composable algorithms that transform a range into a new range. They help to create lazy views over the data without actually modifying it. - -- **Action adaptors:** These are algorithms that modify a range in-place. For example, sorting or filtering elements in a container directly. - -- **Trait concepts and utility functions:** Provide tools for working with range types, like determining if a type is a range, getting the iterator type for a range, etc. - ---- - -## Code examples - -Here are some code examples of using the Ranges v3 library: - -## Including the library - -First, you need to include the appropriate header files from the library. To use the entire Ranges v3 library, you can simply include the `range/v3/all.hpp` header file: - -```cpp -#include -``` - -## Using range adaptors - -You can use range adaptors to manipulate and transform ranges. For example, you can use the `view::filter` and `view::transform` adaptors to create a new range containing only even numbers and then square them: - -```cpp -#include -#include - -using namespace ranges; - -int main() { - std::vector numbers = {1, 2, 3, 4, 5, 6}; - - // Create a new range containing only even numbers, and then square them. - auto even_squares = numbers | view::filter([](int n) { return n % 2 == 0; }) - | view::transform([](int n) { return n * n; }); - - // Print the even_squares range. - for (auto n : even_squares) { - std::cout << n << ' '; - } - // Output: 4 16 36 - - return 0; -} -``` - -## Using action adaptors - -Action adaptors are used to modify ranges in-place. For example, you can use the `action::sort` and `action::unique` adaptors to sort and remove duplicate elements from a container: - -```cpp -#include -#include - -using namespace ranges; - -int main() { - std::vector numbers = {5, 3, 1, 4, 4, 2, 2}; - - // Sort the numbers and remove duplicates. - numbers |= action::sort | action::unique; - - // Print the modified numbers vector. - for (auto n : numbers) { - std::cout << n << ' '; - } - // Output: 1 2 3 4 5 - - return 0; -} -``` - -Ranges v3 provides a wide range of adaptors and actions to work with ranges in a more expressive and efficient way. You can explore more in the [official documentation](https://github.com/ericniebler/range-v3/blob/master/doc/index.md). \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/libraries/index.md b/src/data/roadmaps/cpp/content/libraries/index.md deleted file mode 100644 index eb26dd23a..000000000 --- a/src/data/roadmaps/cpp/content/libraries/index.md +++ /dev/null @@ -1 +0,0 @@ -# Libraries \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/118-working-with-libs/100-inclusion.md b/src/data/roadmaps/cpp/content/library-inclusion@5mNqH_AEiLxUmgurNW1Fq.md similarity index 100% rename from src/data/roadmaps/cpp/content/118-working-with-libs/100-inclusion.md rename to src/data/roadmaps/cpp/content/library-inclusion@5mNqH_AEiLxUmgurNW1Fq.md diff --git a/src/data/roadmaps/cpp/content/118-working-with-libs/101-licensing.md b/src/data/roadmaps/cpp/content/licensing@sLVs95EOeHZldoKY0L_dH.md similarity index 100% rename from src/data/roadmaps/cpp/content/118-working-with-libs/101-licensing.md rename to src/data/roadmaps/cpp/content/licensing@sLVs95EOeHZldoKY0L_dH.md diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/101-memory-model/100-object-lifetime.md b/src/data/roadmaps/cpp/content/lifetime-of-objects@9aA_-IfQ9WmbPgwic0mFN.md similarity index 100% rename from src/data/roadmaps/cpp/content/105-pointers-and-references/101-memory-model/100-object-lifetime.md rename to src/data/roadmaps/cpp/content/lifetime-of-objects@9aA_-IfQ9WmbPgwic0mFN.md diff --git a/src/data/roadmaps/cpp/content/102-basic-operations/101-logical-operators.md b/src/data/roadmaps/cpp/content/logical-operators@Y9gq8WkDA_XGe68JkY2UZ.md similarity index 85% rename from src/data/roadmaps/cpp/content/102-basic-operations/101-logical-operators.md rename to src/data/roadmaps/cpp/content/logical-operators@Y9gq8WkDA_XGe68JkY2UZ.md index 35dbc5c2f..850a04f60 100644 --- a/src/data/roadmaps/cpp/content/102-basic-operations/101-logical-operators.md +++ b/src/data/roadmaps/cpp/content/logical-operators@Y9gq8WkDA_XGe68JkY2UZ.md @@ -13,7 +13,7 @@ C++ provides the following logical operators: ```cpp int a = 5, b = 10; if (a > 0 && b > 0) { - std::cout << "Both values are positive." << std::endl; + std::cout << "Both values are positive.\n"; } ``` - **OR Operator (||)** @@ -25,7 +25,7 @@ C++ provides the following logical operators: ```cpp int a = 5, b = -10; if (a > 0 || b > 0) { - std::cout << "At least one value is positive." << std::endl; + std::cout << "At least one value is positive.\n"; } ``` @@ -38,7 +38,7 @@ C++ provides the following logical operators: ```cpp int a = 5; if (!(a < 0)) { - std::cout << "The value is not negative." << std::endl; + std::cout << "The value is not negative.\n"; } ``` @@ -48,7 +48,7 @@ Using these operators, you can create more complex logical expressions, for exam int a = 5, b = -10, c = 15; if (a > 0 && (b > 0 || c > 0)) { - std::cout << "At least two values are positive." << std::endl; + std::cout << "At least two values are positive.\n"; } ``` diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/105-macros.md b/src/data/roadmaps/cpp/content/macros@zKdlfZTRHwjtmRUGW9z9-.md similarity index 100% rename from src/data/roadmaps/cpp/content/109-language-concepts/105-macros.md rename to src/data/roadmaps/cpp/content/macros@zKdlfZTRHwjtmRUGW9z9-.md diff --git a/src/data/roadmaps/cpp/content/116-build-systems/101-makefile.md b/src/data/roadmaps/cpp/content/makefile@t6rZLH7l8JQm99ax_fEJ9.md similarity index 100% rename from src/data/roadmaps/cpp/content/116-build-systems/101-makefile.md rename to src/data/roadmaps/cpp/content/makefile@t6rZLH7l8JQm99ax_fEJ9.md diff --git a/src/data/roadmaps/cpp/content/memory-leakage@6w0WExQ4lGIGgok6Thq0s.md b/src/data/roadmaps/cpp/content/memory-leakage@6w0WExQ4lGIGgok6Thq0s.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/101-memory-model/index.md b/src/data/roadmaps/cpp/content/memory-model@mSFwsTYvmg-GwG4_DEIEf.md similarity index 100% rename from src/data/roadmaps/cpp/content/105-pointers-and-references/101-memory-model/index.md rename to src/data/roadmaps/cpp/content/memory-model@mSFwsTYvmg-GwG4_DEIEf.md diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/102-multiple-inheritance/index.md b/src/data/roadmaps/cpp/content/multiple-inheritance@WjHpueZDK-d3oDNMVZi9w.md similarity index 91% rename from src/data/roadmaps/cpp/content/107-structures-and-classes/102-multiple-inheritance/index.md rename to src/data/roadmaps/cpp/content/multiple-inheritance@WjHpueZDK-d3oDNMVZi9w.md index 03ab96510..5871224b4 100644 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/102-multiple-inheritance/index.md +++ b/src/data/roadmaps/cpp/content/multiple-inheritance@WjHpueZDK-d3oDNMVZi9w.md @@ -30,7 +30,7 @@ class Animal public: void eat() { - std::cout << "I can eat!" << std::endl; + std::cout << "I can eat!\n"; } }; @@ -40,7 +40,7 @@ class Mammal public: void breath() { - std::cout << "I can breathe!" << std::endl; + std::cout << "I can breathe!\n"; } }; @@ -50,7 +50,7 @@ class Dog : public Animal, public Mammal public: void bark() { - std::cout << "I can bark! Woof woof!" << std::endl; + std::cout << "I can bark! Woof woof!\n"; } }; diff --git a/src/data/roadmaps/cpp/content/110-stl/104-multithreading.md b/src/data/roadmaps/cpp/content/multithreading@OXQUPqxzs1-giAACwl3X1.md similarity index 92% rename from src/data/roadmaps/cpp/content/110-stl/104-multithreading.md rename to src/data/roadmaps/cpp/content/multithreading@OXQUPqxzs1-giAACwl3X1.md index ef03c0e78..aab6538cf 100644 --- a/src/data/roadmaps/cpp/content/110-stl/104-multithreading.md +++ b/src/data/roadmaps/cpp/content/multithreading@OXQUPqxzs1-giAACwl3X1.md @@ -13,7 +13,7 @@ To create a new thread, include the `` header file and create an instanc #include void my_function() { - std::cout << "This function is executing in a separate thread" << std::endl; + std::cout << "This function is executing in a separate thread\n"; } int main() { @@ -32,7 +32,7 @@ You can pass arguments to the thread function by providing them as additional ar #include void print_sum(int a, int b) { - std::cout << "The sum is: " << a + b << std::endl; + std::cout << "The sum is: " << a + b << '\n'; } int main() { @@ -59,7 +59,7 @@ void print_block(int n, char c) { for (int i = 0; i < n; ++i) { std::cout << c; } - std::cout << std::endl; + std::cout << '\n'; } } diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/104-name-mangling.md b/src/data/roadmaps/cpp/content/name-mangling@Lt7ss59KZw9Jwqj234jm2.md similarity index 100% rename from src/data/roadmaps/cpp/content/109-language-concepts/104-name-mangling.md rename to src/data/roadmaps/cpp/content/name-mangling@Lt7ss59KZw9Jwqj234jm2.md diff --git a/src/data/roadmaps/cpp/content/106-structuring-codebase/100-scope/100-namespaces.md b/src/data/roadmaps/cpp/content/namespaces@iIdC7V8sojwyEqK1xMuHn.md similarity index 81% rename from src/data/roadmaps/cpp/content/106-structuring-codebase/100-scope/100-namespaces.md rename to src/data/roadmaps/cpp/content/namespaces@iIdC7V8sojwyEqK1xMuHn.md index 41de1c235..d530de394 100644 --- a/src/data/roadmaps/cpp/content/106-structuring-codebase/100-scope/100-namespaces.md +++ b/src/data/roadmaps/cpp/content/namespaces@iIdC7V8sojwyEqK1xMuHn.md @@ -27,8 +27,8 @@ namespace animals { } int main() { - std::cout << "Dog's name: " << animals::dog << std::endl; - std::cout << "Cat's name: " << animals::cat << std::endl; + std::cout << "Dog's name: " << animals::dog << '\n'; + std::cout << "Cat's name: " << animals::cat << '\n'; return 0; } @@ -50,8 +50,8 @@ namespace outer { } int main() { - std::cout << "Outer x: " << outer::x << std::endl; - std::cout << "Inner y: " << outer::inner::y << std::endl; + std::cout << "Outer x: " << outer::x << '\n'; + std::cout << "Inner y: " << outer::inner::y << '\n'; return 0; } @@ -74,7 +74,7 @@ namespace animals { int main() { using animals::dog; - std::cout << "Dog's name: " << dog << std::endl; + std::cout << "Dog's name: " << dog << '\n'; return 0; } @@ -93,8 +93,8 @@ namespace animals { int main() { using namespace animals; - std::cout << "Dog's name: " << dog << std::endl; - std::cout << "Cat's name: " << cat << std::endl; + std::cout << "Dog's name: " << dog << '\n'; + std::cout << "Cat's name: " << cat << '\n'; return 0; } diff --git a/src/data/roadmaps/cpp/content/newdelete-operators@Gld0nRs0sM8kRe8XmYolu.md b/src/data/roadmaps/cpp/content/newdelete-operators@Gld0nRs0sM8kRe8XmYolu.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/113-standards/103-newest.md b/src/data/roadmaps/cpp/content/newest@sxbbKtg7kMNbkx7fXhjR9.md similarity index 100% rename from src/data/roadmaps/cpp/content/113-standards/103-newest.md rename to src/data/roadmaps/cpp/content/newest@sxbbKtg7kMNbkx7fXhjR9.md diff --git a/src/data/roadmaps/cpp/content/116-build-systems/102-ninja.md b/src/data/roadmaps/cpp/content/ninja@HkUCD5A_M9bJxJRElkK0x.md similarity index 100% rename from src/data/roadmaps/cpp/content/116-build-systems/102-ninja.md rename to src/data/roadmaps/cpp/content/ninja@HkUCD5A_M9bJxJRElkK0x.md diff --git a/src/data/roadmaps/cpp/content/112-idioms/103-non-copyable.md b/src/data/roadmaps/cpp/content/non-copyable--non-moveable@xjUaIp8gGxkN-cp8emJ2M.md similarity index 100% rename from src/data/roadmaps/cpp/content/112-idioms/103-non-copyable.md rename to src/data/roadmaps/cpp/content/non-copyable--non-moveable@xjUaIp8gGxkN-cp8emJ2M.md diff --git a/src/data/roadmaps/cpp/content/117-package-managers/103-nuget.md b/src/data/roadmaps/cpp/content/nuget@g0s0F4mLV16eNvMBflN2e.md similarity index 100% rename from src/data/roadmaps/cpp/content/117-package-managers/103-nuget.md rename to src/data/roadmaps/cpp/content/nuget@g0s0F4mLV16eNvMBflN2e.md diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/index.md b/src/data/roadmaps/cpp/content/object-oriented-programming@b3-QYKNcW3LYCNOza3Olf.md similarity index 90% rename from src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/index.md rename to src/data/roadmaps/cpp/content/object-oriented-programming@b3-QYKNcW3LYCNOza3Olf.md index ef4cc7863..e6720cdb4 100644 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/index.md +++ b/src/data/roadmaps/cpp/content/object-oriented-programming@b3-QYKNcW3LYCNOza3Olf.md @@ -13,7 +13,7 @@ public: int age; void bark() { - std::cout << name << " barks!" << std::endl; + std::cout << name << " barks!\n"; } }; ``` @@ -47,7 +47,7 @@ public: } void bark() { - std::cout << name << " barks!" << std::endl; + std::cout << name << " barks!\n"; } }; ``` @@ -62,14 +62,14 @@ Inheritance is the concept of deriving new classes from existing ones, which ena class Animal { public: void breathe() { - std::cout << "I can breathe" << std::endl; + std::cout << "I can breathe\n"; } }; class Dog : public Animal { public: void bark() { - std::cout << "Dog barks!" << std::endl; + std::cout << "Dog barks!\n"; } }; ``` @@ -90,21 +90,21 @@ Polymorphism allows you to use a single interface to represent different types. class Animal { public: virtual void makeSound() { - std::cout << "The Animal makes a sound" << std::endl; + std::cout << "The Animal makes a sound\n"; } }; class Dog : public Animal { public: void makeSound() override { - std::cout << "Dog barks!" << std::endl; + std::cout << "Dog barks!\n"; } }; class Cat : public Animal { public: void makeSound() override { - std::cout << "Cat meows!" << std::endl; + std::cout << "Cat meows!\n"; } }; ``` diff --git a/src/data/roadmaps/cpp/content/opencl@GGZJaYpRENaqloJzt0VtY.md b/src/data/roadmaps/cpp/content/opencl@GGZJaYpRENaqloJzt0VtY.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/opencv@Eq3TKSFJ2F2mrTHAaU2J4.md b/src/data/roadmaps/cpp/content/opencv@Eq3TKSFJ2F2mrTHAaU2J4.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/103-functions/101-operators.md b/src/data/roadmaps/cpp/content/operator-overloading@llCBeut_uc9IAe2oi4KZ9.md similarity index 100% rename from src/data/roadmaps/cpp/content/103-functions/101-operators.md rename to src/data/roadmaps/cpp/content/operator-overloading@llCBeut_uc9IAe2oi4KZ9.md diff --git a/src/data/roadmaps/cpp/content/orbit-profiler@O0lVEMTAV1pq9sYCKQvh_.md b/src/data/roadmaps/cpp/content/orbit-profiler@O0lVEMTAV1pq9sYCKQvh_.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/117-package-managers/index.md b/src/data/roadmaps/cpp/content/package-managers@h29eJG1hWHa7vMhSqtfV2.md similarity index 100% rename from src/data/roadmaps/cpp/content/117-package-managers/index.md rename to src/data/roadmaps/cpp/content/package-managers@h29eJG1hWHa7vMhSqtfV2.md diff --git a/src/data/roadmaps/cpp/content/111-templates/101-template-specialization/101-partial.md b/src/data/roadmaps/cpp/content/partial-template-specialization@1NYJtbdcdOB4-vIrnq4yX.md similarity index 93% rename from src/data/roadmaps/cpp/content/111-templates/101-template-specialization/101-partial.md rename to src/data/roadmaps/cpp/content/partial-template-specialization@1NYJtbdcdOB4-vIrnq4yX.md index cc9e0ad9c..1b1ae5a34 100644 --- a/src/data/roadmaps/cpp/content/111-templates/101-template-specialization/101-partial.md +++ b/src/data/roadmaps/cpp/content/partial-template-specialization@1NYJtbdcdOB4-vIrnq4yX.md @@ -36,9 +36,9 @@ int main() { MyTemplate t2; // Partial specialization for pointers MyTemplate t3; // Full specialization for int - std::cout << t1.name() << std::endl; - std::cout << t2.name() << std::endl; - std::cout << t3.name() << std::endl; + std::cout << t1.name() << '\n'; + std::cout << t2.name() << '\n'; + std::cout << t3.name() << '\n'; return 0; } diff --git a/src/data/roadmaps/cpp/content/112-idioms/101-pimpl.md b/src/data/roadmaps/cpp/content/pimpl@MEoWt8NKjPLVTeGgYf3cR.md similarity index 90% rename from src/data/roadmaps/cpp/content/112-idioms/101-pimpl.md rename to src/data/roadmaps/cpp/content/pimpl@MEoWt8NKjPLVTeGgYf3cR.md index 2229e8cd9..846ab73a9 100644 --- a/src/data/roadmaps/cpp/content/112-idioms/101-pimpl.md +++ b/src/data/roadmaps/cpp/content/pimpl@MEoWt8NKjPLVTeGgYf3cR.md @@ -32,7 +32,7 @@ class MyClass_Impl // the actual implementation public: void some_method() { - std::cout << "Implementation method called!" << std::endl; + std::cout << "Implementation method called!\n"; } }; diff --git a/src/data/roadmaps/cpp/content/poco@nOkniNXfXwPPlOEJHJoGl.md b/src/data/roadmaps/cpp/content/poco@nOkniNXfXwPPlOEJHJoGl.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/index.md b/src/data/roadmaps/cpp/content/pointers-and-references@DWw8NxkLpIpiOSUaZZ1oA.md similarity index 100% rename from src/data/roadmaps/cpp/content/105-pointers-and-references/index.md rename to src/data/roadmaps/cpp/content/pointers-and-references@DWw8NxkLpIpiOSUaZZ1oA.md diff --git a/src/data/roadmaps/cpp/content/protobuf@jpMCIWQko7p3ndezYHL4D.md b/src/data/roadmaps/cpp/content/protobuf@jpMCIWQko7p3ndezYHL4D.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/pybind11@tEkvlJPAkD5fji-MMODL7.md b/src/data/roadmaps/cpp/content/pybind11@tEkvlJPAkD5fji-MMODL7.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/pytorch-c@88pr5aN7cctZfDVVo-2ns.md b/src/data/roadmaps/cpp/content/pytorch-c@88pr5aN7cctZfDVVo-2ns.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/qt@gAZ9Dqgj1_UkaLzVgzx1t.md b/src/data/roadmaps/cpp/content/qt@gAZ9Dqgj1_UkaLzVgzx1t.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/112-idioms/100-raii.md b/src/data/roadmaps/cpp/content/raii@OmHDlLxCnH8RDdu5vx9fl.md similarity index 100% rename from src/data/roadmaps/cpp/content/112-idioms/100-raii.md rename to src/data/roadmaps/cpp/content/raii@OmHDlLxCnH8RDdu5vx9fl.md diff --git a/src/data/roadmaps/cpp/content/ranges_v3@et-dXKPYuyVW6eV2K3CM8.md b/src/data/roadmaps/cpp/content/ranges_v3@et-dXKPYuyVW6eV2K3CM8.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/raw-pointers@uEGEmbxegATIrvGfobJb9.md b/src/data/roadmaps/cpp/content/raw-pointers@uEGEmbxegATIrvGfobJb9.md new file mode 100644 index 000000000..d339da434 --- /dev/null +++ b/src/data/roadmaps/cpp/content/raw-pointers@uEGEmbxegATIrvGfobJb9.md @@ -0,0 +1 @@ +# Raw Pointers \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/105-pointers-and-references/100-references.md b/src/data/roadmaps/cpp/content/references@uUzRKa9wGzdUwwmAg3FWr.md similarity index 82% rename from src/data/roadmaps/cpp/content/105-pointers-and-references/100-references.md rename to src/data/roadmaps/cpp/content/references@uUzRKa9wGzdUwwmAg3FWr.md index af0de8dc1..a3cf4dc80 100644 --- a/src/data/roadmaps/cpp/content/105-pointers-and-references/100-references.md +++ b/src/data/roadmaps/cpp/content/references@uUzRKa9wGzdUwwmAg3FWr.md @@ -14,10 +14,10 @@ You can use the reference just like you'd use the original variable. When you ch ```cpp var = 20; // Sets the value of var to 20 -std::cout << ref << std::endl; // Outputs 20 +std::cout << ref << '\n'; // Outputs 20 ref = 30; // Sets the value of ref to 30 -std::cout << var << std::endl; // Outputs 30 +std::cout << var << '\n'; // Outputs 30 ``` ## Function Parameters @@ -31,9 +31,9 @@ void swap(int& a, int& b) { int main() { int x = 5, y = 10; - std::cout << "Before Swap: x = " << x << " y = " << y << std::endl; // Outputs 5 10 + std::cout << "Before Swap: x = " << x << " y = " << y << '\n'; // Outputs 5 10 swap(x, y); - std::cout << "After Swap: x = " << x << " y = " << y << std::endl; // Outputs 10 5 + std::cout << "After Swap: x = " << x << " y = " << y << '\n'; // Outputs 10 5 } ``` diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/103-reinterpret-cast.md b/src/data/roadmaps/cpp/content/reinterpret_cast@ZMyFDJrpCauGrY5NZkOwg.md similarity index 93% rename from src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/103-reinterpret-cast.md rename to src/data/roadmaps/cpp/content/reinterpret_cast@ZMyFDJrpCauGrY5NZkOwg.md index f917ca5a2..319a4a3c5 100644 --- a/src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/103-reinterpret-cast.md +++ b/src/data/roadmaps/cpp/content/reinterpret_cast@ZMyFDJrpCauGrY5NZkOwg.md @@ -18,7 +18,7 @@ int main() { for (size_t i = 0; i < sizeof(int); ++i) { // Print the individual bytes of the integer as characters - std::cout << "Byte " << i << ": " << char_ptr[i] << std::endl; + std::cout << "Byte " << i << ": " << char_ptr[i] << '\n'; } return 0; diff --git a/src/data/roadmaps/cpp/content/104-data-types/101-dynamic-typing/100-rtti.md b/src/data/roadmaps/cpp/content/rtti@r0yD1gfn03wTpEBi6zNsu.md similarity index 100% rename from src/data/roadmaps/cpp/content/104-data-types/101-dynamic-typing/100-rtti.md rename to src/data/roadmaps/cpp/content/rtti@r0yD1gfn03wTpEBi6zNsu.md diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/100-rule-of-zero-five-three.md b/src/data/roadmaps/cpp/content/rule-of-zero-five-three@7sdEzZCIoarzznwO4XcCv.md similarity index 100% rename from src/data/roadmaps/cpp/content/107-structures-and-classes/100-rule-of-zero-five-three.md rename to src/data/roadmaps/cpp/content/rule-of-zero-five-three@7sdEzZCIoarzznwO4XcCv.md diff --git a/src/data/roadmaps/cpp/content/101-setting-up/102-first-program.md b/src/data/roadmaps/cpp/content/running-your-first-program@SEq0D2Zg5WTsIDtd1hW9f.md similarity index 87% rename from src/data/roadmaps/cpp/content/101-setting-up/102-first-program.md rename to src/data/roadmaps/cpp/content/running-your-first-program@SEq0D2Zg5WTsIDtd1hW9f.md index 8d6633b01..3f6df1781 100644 --- a/src/data/roadmaps/cpp/content/101-setting-up/102-first-program.md +++ b/src/data/roadmaps/cpp/content/running-your-first-program@SEq0D2Zg5WTsIDtd1hW9f.md @@ -10,7 +10,7 @@ The first program that most people learn to write in any programming language is #include int main() { - std::cout << "Hello, World!" << std::endl; + std::cout << "Hello, World!\n"; return 0; } ``` @@ -40,12 +40,12 @@ int main() { To output text to the console, we use the `std::cout` object and the insertion operator `<<`. In the "Hello, World!" example, we used the following line to print "Hello, World!" to the console: ```cpp -std::cout << "Hello, World!" << std::endl; +std::cout << "Hello, World!\n"; ``` -- `std`: This is the namespace where C++ standard library entities (classes and functions) reside. It stands for "standard" and is an abbreviation for the Standard Template Library (STL). +- `std`: This is the namespace where C++ standard library entities (classes and functions) reside. It stands for "standard" - `std::cout`: The standard "character output" stream that writes to the console - `"Hello, World!"`: The string literal to print -- `std::endl`: The "end line" manipulator that inserts a newline character and flushes the output buffer +- `'\n'`: The "end line" manipulator that inserts a newline character and flushes the output buffer ## Return Statement diff --git a/src/data/roadmaps/cpp/content/106-structuring-codebase/100-scope/index.md b/src/data/roadmaps/cpp/content/scope@dKCYmxDNZubCVcR5rf8b-.md similarity index 86% rename from src/data/roadmaps/cpp/content/106-structuring-codebase/100-scope/index.md rename to src/data/roadmaps/cpp/content/scope@dKCYmxDNZubCVcR5rf8b-.md index 7445b5083..1a711c726 100644 --- a/src/data/roadmaps/cpp/content/106-structuring-codebase/100-scope/index.md +++ b/src/data/roadmaps/cpp/content/scope@dKCYmxDNZubCVcR5rf8b-.md @@ -10,7 +10,7 @@ int globalVar; // This is a global variable int main() { - std::cout << "Global variable: " << globalVar << std::endl; + std::cout << "Global variable: " << globalVar << '\n'; } ``` @@ -22,12 +22,12 @@ int main() { void localExample() { int localVar; // This is a local variable localVar = 5; - std::cout << "Local variable: " << localVar << std::endl; + std::cout << "Local variable: " << localVar << '\n'; } int main() { localExample(); - // std::cout << localVar << std::endl; //error: ‘localVar’ was not declared in this scope + // std::cout << localVar << '\n'; //error: ‘localVar’ was not declared in this scope } ``` @@ -41,7 +41,7 @@ namespace MyNamespace { } int main() { - std::cout << "Namespace variable: " << MyNamespace::namespaceVar << std::endl; + std::cout << "Namespace variable: " << MyNamespace::namespaceVar << '\n'; } ``` @@ -62,8 +62,8 @@ int MyClass::staticMember = 7; int main() { MyClass obj(10); - std::cout << "Static member: " << MyClass::staticMember << std::endl; - std::cout << "Non-static member: " << obj.nonStaticMember << std::endl; + std::cout << "Static member: " << MyClass::staticMember << '\n'; + std::cout << "Non-static member: " << obj.nonStaticMember << '\n'; } ``` diff --git a/src/data/roadmaps/cpp/content/101-setting-up/index.md b/src/data/roadmaps/cpp/content/setting-up-your-environment@Zc_TTzmM36yWsu3GvOy9x.md similarity index 97% rename from src/data/roadmaps/cpp/content/101-setting-up/index.md rename to src/data/roadmaps/cpp/content/setting-up-your-environment@Zc_TTzmM36yWsu3GvOy9x.md index d66ffab97..12bbfad33 100644 --- a/src/data/roadmaps/cpp/content/101-setting-up/index.md +++ b/src/data/roadmaps/cpp/content/setting-up-your-environment@Zc_TTzmM36yWsu3GvOy9x.md @@ -38,7 +38,7 @@ Create a new file called `main.cpp` within your project and include this code: #include int main() { - std::cout << "Hello, World!" << std::endl; + std::cout << "Hello, World!\n"; return 0; } ``` diff --git a/src/data/roadmaps/cpp/content/111-templates/103-finae.md b/src/data/roadmaps/cpp/content/sfinae@3C5UfejDX-1Z8ZF6C53xD.md similarity index 93% rename from src/data/roadmaps/cpp/content/111-templates/103-finae.md rename to src/data/roadmaps/cpp/content/sfinae@3C5UfejDX-1Z8ZF6C53xD.md index 6d23f9647..b097235ee 100644 --- a/src/data/roadmaps/cpp/content/111-templates/103-finae.md +++ b/src/data/roadmaps/cpp/content/sfinae@3C5UfejDX-1Z8ZF6C53xD.md @@ -15,14 +15,14 @@ Here's an example that demonstrates SFINAE in action: template struct foo_impl { void operator()(T t) { - std::cout << "Called when T is not arithmetic" << std::endl; + std::cout << "Called when T is not arithmetic\n"; } }; template struct foo_impl::value>> { void operator()(T t) { - std::cout << "Called when T is arithmetic" << std::endl; + std::cout << "Called when T is arithmetic\n"; } }; diff --git a/src/data/roadmaps/cpp/content/shared_ptr@b5jZIZD_U_CPg-_bdndjz.md b/src/data/roadmaps/cpp/content/shared_ptr@b5jZIZD_U_CPg-_bdndjz.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/smart-pointers@ulvwm4rRPgkpgaqGgyH5a.md b/src/data/roadmaps/cpp/content/smart-pointers@ulvwm4rRPgkpgaqGgyH5a.md new file mode 100644 index 000000000..e7e5f80d0 --- /dev/null +++ b/src/data/roadmaps/cpp/content/smart-pointers@ulvwm4rRPgkpgaqGgyH5a.md @@ -0,0 +1 @@ +# Smart Pointers \ No newline at end of file diff --git a/src/data/roadmaps/cpp/content/117-package-managers/101-spack.md b/src/data/roadmaps/cpp/content/spack@3ehBc2sKVlPj7dn4RVZCH.md similarity index 100% rename from src/data/roadmaps/cpp/content/117-package-managers/101-spack.md rename to src/data/roadmaps/cpp/content/spack@3ehBc2sKVlPj7dn4RVZCH.md diff --git a/src/data/roadmaps/cpp/content/spdlog@q64qFxoCrR38RPsN2lC8x.md b/src/data/roadmaps/cpp/content/spdlog@q64qFxoCrR38RPsN2lC8x.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/110-stl/index.md b/src/data/roadmaps/cpp/content/standard-library--stl@DHdNBP7_ixjr6h-dIQ7g6.md similarity index 100% rename from src/data/roadmaps/cpp/content/110-stl/index.md rename to src/data/roadmaps/cpp/content/standard-library--stl@DHdNBP7_ixjr6h-dIQ7g6.md diff --git a/src/data/roadmaps/cpp/content/113-standards/index.md b/src/data/roadmaps/cpp/content/standardds@vvE1aUsWbF1OFcmMUHbJa.md similarity index 96% rename from src/data/roadmaps/cpp/content/113-standards/index.md rename to src/data/roadmaps/cpp/content/standardds@vvE1aUsWbF1OFcmMUHbJa.md index d8af0b35b..5940deba6 100644 --- a/src/data/roadmaps/cpp/content/113-standards/index.md +++ b/src/data/roadmaps/cpp/content/standardds@vvE1aUsWbF1OFcmMUHbJa.md @@ -15,7 +15,7 @@ Here's a brief summary of the different C++ standards released to date: ```cpp std::vector numbers = {1, 2, 3, 4}; for (int num : numbers) { - std::cout << num << std::endl; + std::cout << num << '\n'; } ``` - Smart pointers like `std::shared_ptr` and `std::unique_ptr`. diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/100-static-polymorphism/index.md b/src/data/roadmaps/cpp/content/static-polymorphism@obZIxRp0eMWdG7gplNIBc.md similarity index 86% rename from src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/100-static-polymorphism/index.md rename to src/data/roadmaps/cpp/content/static-polymorphism@obZIxRp0eMWdG7gplNIBc.md index 0ed72c8d9..15bbf723b 100644 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/101-oop/100-static-polymorphism/index.md +++ b/src/data/roadmaps/cpp/content/static-polymorphism@obZIxRp0eMWdG7gplNIBc.md @@ -12,15 +12,15 @@ Example: #include void print(int i) { - std::cout << "Printing int: " << i << std::endl; + std::cout << "Printing int: " << i << '\n'; } void print(double d) { - std::cout << "Printing double: " << d << std::endl; + std::cout << "Printing double: " << d << '\n'; } void print(const char* s) { - std::cout << "Printing string: " << s << std::endl; + std::cout << "Printing string: " << s << '\n'; } int main() { @@ -44,7 +44,7 @@ Example: // Template function to print any type template void print(const T& value) { - std::cout << "Printing value: " << value << std::endl; + std::cout << "Printing value: " << value << '\n'; } int main() { diff --git a/src/data/roadmaps/cpp/content/104-data-types/100-static-typing.md b/src/data/roadmaps/cpp/content/static-typing@f1djN0GxoeVPr_0cl6vMq.md similarity index 92% rename from src/data/roadmaps/cpp/content/104-data-types/100-static-typing.md rename to src/data/roadmaps/cpp/content/static-typing@f1djN0GxoeVPr_0cl6vMq.md index 5df695ab0..cad4e721f 100644 --- a/src/data/roadmaps/cpp/content/104-data-types/100-static-typing.md +++ b/src/data/roadmaps/cpp/content/static-typing@f1djN0GxoeVPr_0cl6vMq.md @@ -17,9 +17,9 @@ int main() { c = num; // This asssigment would convert num's value to ASCII equivalent character num = pi; // This assignment would convert pi's value from double type to int type - std::cout << "The value of num is: " << num << std::endl; - std::cout << "The value of pi is: " << pi << std::endl; - std::cout << "The value of c is: "<< c << std::endl; + std::cout << "The value of num is: " << num << '\n'; + std::cout << "The value of pi is: " << pi << '\n'; + std::cout << "The value of c is: "<< c << '\n'; return 0; } ``` diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/100-static-cast.md b/src/data/roadmaps/cpp/content/static_cast@_XB2Imyf23-6AOeoNLhYQ.md similarity index 100% rename from src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/100-static-cast.md rename to src/data/roadmaps/cpp/content/static_cast@_XB2Imyf23-6AOeoNLhYQ.md diff --git a/src/data/roadmaps/cpp/content/107-structures-and-classes/index.md b/src/data/roadmaps/cpp/content/structures-and-classes@CMlWNQwpywNhO9B6Yj6Me.md similarity index 95% rename from src/data/roadmaps/cpp/content/107-structures-and-classes/index.md rename to src/data/roadmaps/cpp/content/structures-and-classes@CMlWNQwpywNhO9B6Yj6Me.md index c7a34ab06..e0e492dab 100644 --- a/src/data/roadmaps/cpp/content/107-structures-and-classes/index.md +++ b/src/data/roadmaps/cpp/content/structures-and-classes@CMlWNQwpywNhO9B6Yj6Me.md @@ -48,7 +48,7 @@ public: void display() { std::cout << "Roll no: " << roll_no << "\nName: " << name - << "\nMarks: " << marks << std::endl; + << "\nMarks: " << marks << '\n'; } }; diff --git a/src/data/roadmaps/cpp/content/106-structuring-codebase/index.md b/src/data/roadmaps/cpp/content/structuring-codebase@Zw2AOTK5uc9BoKEpY7W1C.md similarity index 100% rename from src/data/roadmaps/cpp/content/106-structuring-codebase/index.md rename to src/data/roadmaps/cpp/content/structuring-codebase@Zw2AOTK5uc9BoKEpY7W1C.md diff --git a/src/data/roadmaps/cpp/content/111-templates/101-template-specialization/index.md b/src/data/roadmaps/cpp/content/template-specialization@sObOuccY0PDeGG-9GrFDF.md similarity index 93% rename from src/data/roadmaps/cpp/content/111-templates/101-template-specialization/index.md rename to src/data/roadmaps/cpp/content/template-specialization@sObOuccY0PDeGG-9GrFDF.md index 041ab1827..e0fa2461f 100644 --- a/src/data/roadmaps/cpp/content/111-templates/101-template-specialization/index.md +++ b/src/data/roadmaps/cpp/content/template-specialization@sObOuccY0PDeGG-9GrFDF.md @@ -19,12 +19,12 @@ Here is an example: template void printData(const T& data) { - std::cout << "General template: " << data << std::endl; + std::cout << "General template: " << data << '\n'; } template <> void printData(const char* const & data) { - std::cout << "Specialized template for const char*: " << data << std::endl; + std::cout << "Specialized template for const char*: " << data << '\n'; } int main() { @@ -50,7 +50,7 @@ public: MyPair(K k, V v) : key(k), value(v) {} void print() const { - std::cout << "General template: key = " << key << ", value = " << value << std::endl; + std::cout << "General template: key = " << key << ", value = " << value << '\n'; } private: @@ -65,7 +65,7 @@ public: void print() const { std::cout << "Partial specialization for int values: key = " << key - << ", value = " << value << std::endl; + << ", value = " << value << '\n'; } private: diff --git a/src/data/roadmaps/cpp/content/111-templates/index.md b/src/data/roadmaps/cpp/content/templates@-6AOrbuOE7DJCmxlcgCay.md similarity index 100% rename from src/data/roadmaps/cpp/content/111-templates/index.md rename to src/data/roadmaps/cpp/content/templates@-6AOrbuOE7DJCmxlcgCay.md diff --git a/src/data/roadmaps/cpp/content/tensorflow@j_eNHhs0J08Dt7HVbo4Q2.md b/src/data/roadmaps/cpp/content/tensorflow@j_eNHhs0J08Dt7HVbo4Q2.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/index.md b/src/data/roadmaps/cpp/content/type-casting@PiMhw1oP9-NZEa6I9u4lX.md similarity index 100% rename from src/data/roadmaps/cpp/content/109-language-concepts/101-type-casting/index.md rename to src/data/roadmaps/cpp/content/type-casting@PiMhw1oP9-NZEa6I9u4lX.md diff --git a/src/data/roadmaps/cpp/content/111-templates/102-type-traits.md b/src/data/roadmaps/cpp/content/type-traits@WptReUOwVth3C9-AVmMHF.md similarity index 90% rename from src/data/roadmaps/cpp/content/111-templates/102-type-traits.md rename to src/data/roadmaps/cpp/content/type-traits@WptReUOwVth3C9-AVmMHF.md index 0c53b48c7..964f6aeaa 100644 --- a/src/data/roadmaps/cpp/content/111-templates/102-type-traits.md +++ b/src/data/roadmaps/cpp/content/type-traits@WptReUOwVth3C9-AVmMHF.md @@ -21,8 +21,8 @@ int main() { int a; int* a_ptr = &a; - std::cout << "Is 'a' a pointer? " << std::boolalpha << std::is_pointer::value << std::endl; - std::cout << "Is 'a_ptr' a pointer? " << std::boolalpha << std::is_pointer::value << std::endl; + std::cout << "Is 'a' a pointer? " << std::boolalpha << std::is_pointer::value << '\n'; + std::cout << "Is 'a_ptr' a pointer? " << std::boolalpha << std::is_pointer::value << '\n'; return 0; } @@ -46,7 +46,7 @@ typename std::enable_if::value, T>::type find_max(T a, T b int main() { int max = find_max(10, 20); - std::cout << "Max: " << max << std::endl; + std::cout << "Max: " << max << '\n'; return 0; } diff --git a/src/data/roadmaps/cpp/content/109-language-concepts/102-undefined-behavior.md b/src/data/roadmaps/cpp/content/undefined-behavior-ub@IDOlquv6jlfecwQoBwkGZ.md similarity index 100% rename from src/data/roadmaps/cpp/content/109-language-concepts/102-undefined-behavior.md rename to src/data/roadmaps/cpp/content/undefined-behavior-ub@IDOlquv6jlfecwQoBwkGZ.md diff --git a/src/data/roadmaps/cpp/content/114-debuggers/100-debugger-messages.md b/src/data/roadmaps/cpp/content/understanding-debugger-messages@VtPb8-AJKzhTB0QbMtoU4.md similarity index 98% rename from src/data/roadmaps/cpp/content/114-debuggers/100-debugger-messages.md rename to src/data/roadmaps/cpp/content/understanding-debugger-messages@VtPb8-AJKzhTB0QbMtoU4.md index 356e6ba26..8daa43940 100644 --- a/src/data/roadmaps/cpp/content/114-debuggers/100-debugger-messages.md +++ b/src/data/roadmaps/cpp/content/understanding-debugger-messages@VtPb8-AJKzhTB0QbMtoU4.md @@ -51,7 +51,7 @@ int main() { int num2 = 0; int result = num1 / num2; - std::cout << "Result: " << result << std::endl; + std::cout << "Result: " << result << '\n'; return 0; } diff --git a/src/data/roadmaps/cpp/content/unique_ptr@k9c5seRkhgm_yHPpiz2X0.md b/src/data/roadmaps/cpp/content/unique_ptr@k9c5seRkhgm_yHPpiz2X0.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/111-templates/100-variadic-templates.md b/src/data/roadmaps/cpp/content/variadic-templates@w4EIf58KP-Pq-yc0HlGxc.md similarity index 90% rename from src/data/roadmaps/cpp/content/111-templates/100-variadic-templates.md rename to src/data/roadmaps/cpp/content/variadic-templates@w4EIf58KP-Pq-yc0HlGxc.md index 0c13275fa..2b69bab3b 100644 --- a/src/data/roadmaps/cpp/content/111-templates/100-variadic-templates.md +++ b/src/data/roadmaps/cpp/content/variadic-templates@w4EIf58KP-Pq-yc0HlGxc.md @@ -33,7 +33,7 @@ T sum(T t, Args... args) { int main() { int result = sum(1, 2, 3, 4, 5); // expands to 1 + 2 + 3 + 4 + 5 - std::cout << "The sum is: " << result << std::endl; + std::cout << "The sum is: " << result << '\n'; return 0; } @@ -63,7 +63,7 @@ class Tuple : public Tuple { int main() { Tuple tuple(1, 2.0f, 3.0); - std::cout << "First element: " << tuple.head() << std::endl; + std::cout << "First element: " << tuple.head() << '\n'; return 0; } ``` diff --git a/src/data/roadmaps/cpp/content/117-package-managers/100-vcpkg.md b/src/data/roadmaps/cpp/content/vcpkg@PKG5pACLfRS2ogfzBX47_.md similarity index 100% rename from src/data/roadmaps/cpp/content/117-package-managers/100-vcpkg.md rename to src/data/roadmaps/cpp/content/vcpkg@PKG5pACLfRS2ogfzBX47_.md diff --git a/src/data/roadmaps/cpp/content/virtual-methods@hNBErGNiegLsUJn_vgcOR.md b/src/data/roadmaps/cpp/content/virtual-methods@hNBErGNiegLsUJn_vgcOR.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/virtual-tables@s99ImazcwCgAESxZd8ksa.md b/src/data/roadmaps/cpp/content/virtual-tables@s99ImazcwCgAESxZd8ksa.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/weak_ptr@vUwSS-uX36OWZouO0wOcy.md b/src/data/roadmaps/cpp/content/weak_ptr@vUwSS-uX36OWZouO0wOcy.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md b/src/data/roadmaps/cpp/content/what-is-c@x_28LiDVshqWns_aIBsdx.md similarity index 94% rename from src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md rename to src/data/roadmaps/cpp/content/what-is-c@x_28LiDVshqWns_aIBsdx.md index 94798136e..e4b6bbfd0 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md +++ b/src/data/roadmaps/cpp/content/what-is-c@x_28LiDVshqWns_aIBsdx.md @@ -32,12 +32,12 @@ int main() { // Using the standalone function 'add' int sum = add(x, y); - std::cout << "Sum: " << sum << std::endl; + std::cout << "Sum: " << sum << '\n'; // Using a class and member function Calculator calc; int product = calc.multiply(x, y); - std::cout << "Product: " << product << std::endl; + std::cout << "Product: " << product << '\n'; return 0; } diff --git a/src/data/roadmaps/cpp/content/100-introduction/101-why-cpp.md b/src/data/roadmaps/cpp/content/why-use-c@tl6VCQ5IEGDVyFcgj7jDm.md similarity index 96% rename from src/data/roadmaps/cpp/content/100-introduction/101-why-cpp.md rename to src/data/roadmaps/cpp/content/why-use-c@tl6VCQ5IEGDVyFcgj7jDm.md index 97490e21c..fb4fc6cb5 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/101-why-cpp.md +++ b/src/data/roadmaps/cpp/content/why-use-c@tl6VCQ5IEGDVyFcgj7jDm.md @@ -43,7 +43,7 @@ int main() { // High-level programming std::vector myVector = {1, 2, 3}; for (const auto &i: myVector) { - std::cout << i << std::endl; + std::cout << i << '\n'; } } ``` diff --git a/src/data/roadmaps/cpp/content/114-debuggers/102-win-dbg.md b/src/data/roadmaps/cpp/content/windbg@y8VCbGDUco9bzGRfIBD8R.md similarity index 100% rename from src/data/roadmaps/cpp/content/114-debuggers/102-win-dbg.md rename to src/data/roadmaps/cpp/content/windbg@y8VCbGDUco9bzGRfIBD8R.md diff --git a/src/data/roadmaps/cpp/content/118-working-with-libs/index.md b/src/data/roadmaps/cpp/content/working-with-libraries@4kkX5g_-plX9zVqr0ZoiR.md similarity index 100% rename from src/data/roadmaps/cpp/content/118-working-with-libs/index.md rename to src/data/roadmaps/cpp/content/working-with-libraries@4kkX5g_-plX9zVqr0ZoiR.md diff --git a/src/data/roadmaps/cpp/cpp.json b/src/data/roadmaps/cpp/cpp.json index 3bb030b43..404e1ad89 100644 --- a/src/data/roadmaps/cpp/cpp.json +++ b/src/data/roadmaps/cpp/cpp.json @@ -1,16070 +1,5505 @@ { - "mockup": { - "controls": { - "control": [ - { - "ID": "4511", - "typeID": "Arrow", - "zOrder": "0", - "w": "1", - "h": "147", - "measuredW": "150", - "measuredH": "100", - "x": "1100", - "y": "3336", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4784172661870499, - "y": -0.0014388489208635442 - }, - "p2": { - "x": 0, - "y": 146.67245707612938 - } - } - }, - { - "ID": "4512", - "typeID": "Arrow", - "zOrder": "1", - "w": "1053", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "475", - "y": "2981", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.14599859981393593, - "y": 1 - }, - "p1": { - "x": 0.5094183863981452, - "y": 0.00090101782394456 - }, - "p2": { - "x": 1052.4781385743524, - "y": 1 - } - } - }, - { - "ID": "4513", - "typeID": "Arrow", - "zOrder": "2", - "w": "1", - "h": "68", - "measuredW": "150", - "measuredH": "100", - "x": "1522", - "y": "2983", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.3738002047268765, - "y": 0.389598287314584 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445603 - }, - "p2": { - "x": -0.3738002047268765, - "y": 68.41890188219668 - } - } - }, - { - "ID": "4514", - "typeID": "Arrow", - "zOrder": "3", - "w": "1", - "h": "147", - "measuredW": "150", - "measuredH": "100", - "x": "1522", - "y": "2836", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4784172661870499, - "y": -0.0014388489208635442 - }, - "p2": { - "x": 0, - "y": 146.67245707612938 - } - } - }, - { - "ID": "4515", - "typeID": "Arrow", - "zOrder": "4", - "w": "1", - "h": "101", - "measuredW": "150", - "measuredH": "100", - "x": "1558", - "y": "2729", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.3738002047268765, - "y": 0.389598287314584 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445605 - }, - "p2": { - "x": -0.3738002047268765, - "y": 101.56508807523778 - } - } - }, - { - "ID": "4516", - "typeID": "Arrow", - "zOrder": "5", - "w": "1", - "h": "101", - "measuredW": "150", - "measuredH": "100", - "x": "1459", - "y": "2729", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.3738002047268765, - "y": 0.389598287314584 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445605 - }, - "p2": { - "x": -0.3738002047268765, - "y": 101.56508807523778 - } - } - }, - { - "ID": "4517", - "typeID": "Arrow", - "zOrder": "6", - "w": "1", - "h": "116", - "measuredW": "150", - "measuredH": "100", - "x": "1159", - "y": "2729", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.3738002047268765, - "y": 0.389598287314584 - }, - "p1": { - "x": 0.5094183863981456, - "y": 0.0009010178239445603 - }, - "p2": { - "x": -0.3738002047268765, - "y": 116.6863074097705 - }, - "stroke": "dotted" - } - }, - { - "ID": "4518", - "typeID": "TextArea", - "zOrder": "7", - "w": "151", - "h": "209", - "measuredW": "200", - "measuredH": "140", - "x": "669", - "y": "2560", - "properties": { - "size": "12" - } - }, - { - "ID": "4519", - "typeID": "Arrow", - "zOrder": "8", - "w": "1", - "h": "190", - "measuredW": "150", - "measuredH": "100", - "x": "819", - "y": "2396", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.3738002047268765, - "y": 0 - }, - "p1": { - "x": 0.5094183863981455, - "y": 0.0009010178239445601 - }, - "p2": { - "x": -0.3738002047268765, - "y": 189.73287212529976 - }, - "stroke": "dotted" - } - }, - { - "ID": "4520", - "typeID": "Arrow", - "zOrder": "9", - "w": "653", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "477", - "y": "2497", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.29177514116184966, - "y": 1 - }, - "p1": { - "x": 0.5094183863981455, - "y": 0.0009010178239445598 - }, - "p2": { - "x": 652.9300411642978, - "y": 1 - } - } - }, - { - "ID": "4521", - "typeID": "Arrow", - "zOrder": "10", - "w": "135", - "h": "97", - "measuredW": "150", - "measuredH": "100", - "x": "1212", - "y": "2513", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.31135115406141267, - "y": 0.46279090838925185 - }, - "p1": { - "x": 0.4839784419402247, - "y": 0.14091131798138176 - }, - "p2": { - "x": 134.9965025128497, - "y": 97.37039981288308 - } - } - }, - { - "ID": "4522", - "typeID": "Arrow", - "zOrder": "11", - "w": "103", - "h": "46", - "measuredW": "150", - "measuredH": "100", - "x": "1240", - "y": "2512", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.23388253332245768, - "y": -0.17971093744972677 - }, - "p1": { - "x": 0.5905743740795274, - "y": 0.13549337260677535 - }, - "p2": { - "x": 103.71149882117197, - "y": 45.810340746038946 - } - } - }, - { - "ID": "4523", - "typeID": "Arrow", - "zOrder": "12", - "w": "118", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "1230", - "y": "2497", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.3788714582890407, - "y": 0.3952706041613965 - }, - "p1": { - "x": 0.5093283582089555, - "y": 0.0008582089552239446 - }, - "p2": { - "x": 118.63900435868845, - "y": 3.6802742958393537 - } - } - }, - { - "ID": "4524", - "typeID": "Arrow", - "zOrder": "13", - "w": "1", - "h": "177", - "measuredW": "150", - "measuredH": "100", - "x": "1159", - "y": "2313", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.0699588357022094, - "y": 177.46776506664492 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445597 - }, - "p2": { - "x": -0.0699588357022094, - "y": 0 - } - } - }, - { - "ID": "4525", - "typeID": "Arrow", - "zOrder": "14", - "w": "251", - "h": "204", - "measuredW": "150", - "measuredH": "100", - "x": "1166", - "y": "2107", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.49995145234674965, - "y": 203.613812947287 - }, - "p1": { - "x": 0.48407889648059815, - "y": -0.07206394224571401 - }, - "p2": { - "x": 250.8028309610022, - "y": -0.056415936734083516 - } - } - }, - { - "ID": "4526", - "typeID": "Arrow", - "zOrder": "15", - "w": "218", - "h": "138", - "measuredW": "150", - "measuredH": "100", - "x": "1200", - "y": "2163", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.007412689730244892, - "y": 137.75880187225403 - }, - "p1": { - "x": 0.468185744252046, - "y": -0.07469255130999888 - }, - "p2": { - "x": 218.44533280684095, - "y": -0.2113531782119935 - } - } - }, - { - "ID": "4527", - "typeID": "Arrow", - "zOrder": "16", - "w": "209", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1210", - "y": "2214", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.15240161469705527, - "y": 88.40130371809255 - }, - "p1": { - "x": 0.50082595424561, - "y": -0.06635119086251119 - }, - "p2": { - "x": 208.44533280684095, - "y": -0.2937959572068394 - } - } - }, - { - "ID": "4528", - "typeID": "Arrow", - "zOrder": "17", - "w": "191", - "h": "43", - "measuredW": "150", - "measuredH": "100", - "x": "1226", - "y": "2263", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.2726168436918215, - "y": 42.68630740977051 - }, - "p1": { - "x": 0.5486967074016806, - "y": -0.05138415466209874 - }, - "p2": { - "x": 190.8028309610022, - "y": -0.01874058204020912 - } - } - }, - { - "ID": "4529", - "typeID": "Arrow", - "zOrder": "18", - "w": "181", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "1244", - "y": "2317", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.34013714791967686, - "y": 3.4688240223204048 - }, - "p1": { - "x": 0.5093283582089555, - "y": 0.000858208955223941 - }, - "p2": { - "x": 181.01534019019664, - "y": 0.18382033064290226 - } - } - }, - { - "ID": "4530", - "typeID": "Arrow", - "zOrder": "19", - "w": "332", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "827", - "y": "2177", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.28965722981035924, - "y": 0 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445598 - }, - "p2": { - "x": 331.9300411642978, - "y": 0 - } - } - }, - { - "ID": "4531", - "typeID": "Arrow", - "zOrder": "20", - "w": "105", - "h": "98", - "measuredW": "150", - "measuredH": "100", - "x": "647", - "y": "2057", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.09556796253320954, - "y": -0.35634210317903126 - }, - "p1": { - "x": 0.5082179448571936, - "y": -0.1619513449521908 - }, - "p2": { - "x": 104.58958339625508, - "y": 97.57613759259357 - } - } - }, - { - "ID": "4532", - "typeID": "Arrow", - "zOrder": "21", - "w": "123", - "h": "42", - "measuredW": "150", - "measuredH": "100", - "x": "637", - "y": "2117", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.09556796253320954, - "y": -0.35634210317903126 - }, - "p1": { - "x": 0.4632734799449753, - "y": -0.11318366133437698 - }, - "p2": { - "x": 122.80209262544952, - "y": 40.86114128427107 - } - } - }, - { - "ID": "4533", - "typeID": "Arrow", - "zOrder": "22", - "w": "99", - "h": "99", - "measuredW": "150", - "measuredH": "100", - "x": "648", - "y": "2179", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.11196710840556534, - "y": 98.76377603050969 - }, - "p1": { - "x": 0.4535196131112306, - "y": 0.16469639978506187 - }, - "p2": { - "x": 98.66207785873837, - "y": 0.2136652801764285 - } - } - }, - { - "ID": "4534", - "typeID": "Arrow", - "zOrder": "23", - "w": "90", - "h": "46", - "measuredW": "150", - "measuredH": "100", - "x": "643", - "y": "2179", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.18446157088885684, - "y": 46.203716963665556 - }, - "p1": { - "x": 0.4015719251962475, - "y": 0.16354484698292773 - }, - "p2": { - "x": 90.52206309202734, - "y": 0.2136652801764285 - } - } - }, - { - "ID": "4535", - "typeID": "Arrow", - "zOrder": "24", - "w": "133", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "617", - "y": "2170", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.09556796253320954, - "y": 2.6436578968209687 - }, - "p1": { - "x": 0.5093283582089554, - "y": 0.0008582089552239398 - }, - "p2": { - "x": 132.81818181818176, - "y": 0 - } - } - }, - { - "ID": "4536", - "typeID": "Arrow", - "zOrder": "25", - "w": "1", - "h": "108", - "measuredW": "150", - "measuredH": "100", - "x": "1161", - "y": "2050", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.3738002047268765, - "y": 0 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445601 - }, - "p2": { - "x": -0.3738002047268765, - "y": 107.89490143638523 - } - } - }, - { - "ID": "4537", - "typeID": "Arrow", - "zOrder": "26", - "w": "88", - "h": "47", - "measuredW": "150", - "measuredH": "100", - "x": "645", - "y": "1895", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.377247085476597, - "y": 0.2453785840434648 - }, - "p1": { - "x": 0.39353169469599014, - "y": -0.14954721862871956 - }, - "p2": { - "x": 88.75678897330613, - "y": 47.4067401960549 - } - } - }, - { - "ID": "4538", - "typeID": "Arrow", - "zOrder": "27", - "w": "132", - "h": "4", - "measuredW": "150", - "measuredH": "100", - "x": "613", - "y": "1951", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.20182257713042873, - "y": 0.4421559398138015 - }, - "p1": { - "x": 0.5093283582089555, - "y": 0.0008582089552239413 - }, - "p2": { - "x": 131.81818181818176, - "y": 4 - } - } - }, - { - "ID": "4539", - "typeID": "Arrow", - "zOrder": "28", - "w": "176", - "h": "140", - "measuredW": "150", - "measuredH": "100", - "x": "916", - "y": "1889", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.4065014011649737, - "y": 0.31208948961398164 - }, - "p1": { - "x": 0.5646685303960005, - "y": -0.1042652665453224 - }, - "p2": { - "x": 175.27003031855452, - "y": 140.4203934280083 - } - } - }, - { - "ID": "4540", - "typeID": "Arrow", - "zOrder": "29", - "w": "156", - "h": "96", - "measuredW": "150", - "measuredH": "100", - "x": "909", - "y": "1942", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.023491215479452876, - "y": -0.12785144354165823 - }, - "p1": { - "x": 0.46550407345571637, - "y": -0.07990517527983494 - }, - "p2": { - "x": 156.1158220740574, - "y": 95.67961708416533 - } - } - }, - { - "ID": "4541", - "typeID": "Arrow", - "zOrder": "30", - "w": "160", - "h": "48", - "measuredW": "150", - "measuredH": "100", - "x": "902", - "y": "1998", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.4982118911346556, - "y": -0.04637376912783025 - }, - "p2": { - "x": 160.36274752200507, - "y": 47.93884074032235 - } - } - }, - { - "ID": "4542", - "typeID": "Arrow", - "zOrder": "31", - "w": "159", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "902", - "y": "2057", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.5093283582089556, - "y": 0.0008582089552239403 - }, - "p2": { - "x": 158.98621024597878, - "y": 0.4449898444270275 - } - } - }, - { - "ID": "4543", - "typeID": "Arrow", - "zOrder": "32", - "w": "96", - "h": "41", - "measuredW": "150", - "measuredH": "100", - "x": "1345", - "y": "1905", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.33333333333325754, - "y": 41 - }, - "p1": { - "x": 0.43118692069457804, - "y": 0.1239510438908394 - }, - "p2": { - "x": 95.66666666666674, - "y": -0.33333333333325754 - } - } - }, - { - "ID": "4544", - "typeID": "Arrow", - "zOrder": "33", - "w": "107", - "h": "39", - "measuredW": "150", - "measuredH": "100", - "x": "1339", - "y": "1841", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.33333333333325754, - "y": 0.33333333333325754 - }, - "p1": { - "x": 0.5200174349604124, - "y": -0.10336215208054722 - }, - "p2": { - "x": 107, - "y": 39 - } - } - }, - { - "ID": "4545", - "typeID": "Arrow", - "zOrder": "34", - "w": "142", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1294", - "y": "1892", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.5093283582089555, - "y": 0.0008582089552239402 - }, - "p2": { - "x": 142.81818181818176, - "y": 0 - }, - "stroke": "dotted" - } - }, - { - "ID": "4546", - "typeID": "Arrow", - "zOrder": "35", - "w": "343", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1276", - "y": "1746", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.36363636363637397, - "y": 0 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445597 - }, - "p2": { - "x": 343.05666933709745, - "y": 0 - } - } - }, - { - "ID": "4547", - "typeID": "Arrow", - "zOrder": "36", - "w": "182", - "h": "200", - "measuredW": "150", - "measuredH": "100", - "x": "902", - "y": "1524", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.5676904598651433, - "y": -0.07934213880133886 - }, - "p2": { - "x": 182.66666666666674, - "y": 200 - } - } - }, - { - "ID": "4548", - "typeID": "Arrow", - "zOrder": "37", - "w": "169", - "h": "147", - "measuredW": "150", - "measuredH": "100", - "x": "902", - "y": "1581", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.5295305168083262, - "y": -0.08532055409150152 - }, - "p2": { - "x": 169.33333333333326, - "y": 147 - } - } - }, - { - "ID": "4549", - "typeID": "Arrow", - "zOrder": "38", - "w": "145", - "h": "39", - "measuredW": "150", - "measuredH": "100", - "x": "893", - "y": "1688", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.5016338931758112, - "y": -0.07799721657724405 - }, - "p2": { - "x": 145, - "y": 38.66666666666674 - } - } - }, - { - "ID": "4550", - "typeID": "Arrow", - "zOrder": "39", - "w": "145", - "h": "85", - "measuredW": "150", - "measuredH": "100", - "x": "902", - "y": "1635", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.33333333333325754 - }, - "p1": { - "x": 0.5593457052347596, - "y": -0.09606994031820805 - }, - "p2": { - "x": 145.33333333333326, - "y": 85 - } - } - }, - { - "ID": "4551", - "typeID": "Arrow", - "zOrder": "40", - "w": "142", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "895", - "y": "1739", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.5093283582089555, - "y": 0.0008582089552239402 - }, - "p2": { - "x": 142.81818181818176, - "y": 0 - }, - "stroke": "dotted" - } - }, - { - "ID": "4552", - "typeID": "Arrow", - "zOrder": "41", - "w": "67", - "h": "45", - "measuredW": "150", - "measuredH": "100", - "x": "1395", - "y": "1522", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.33333333333325754, - "y": 0 - }, - "p1": { - "x": 0.48318584070796416, - "y": -0.14778761061947046 - }, - "p2": { - "x": 67, - "y": 44.66666666666674 - } - } - }, - { - "ID": "4553", - "typeID": "Arrow", - "zOrder": "42", - "w": "332", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1286", - "y": "1725", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.5094183863981456, - "y": 0.0009010178239445595 - }, - "p2": { - "x": 332, - "y": 0 - } - } - }, - { - "ID": "4554", - "typeID": "Arrow", - "zOrder": "43", - "w": "108", - "h": "74", - "measuredW": "150", - "measuredH": "100", - "x": "534", - "y": "1592", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.3636363636362603, - "y": 74.24242424242425 - }, - "p1": { - "x": 0.48447653429602944, - "y": 0.13140794223826668 - }, - "p2": { - "x": 107.93939393939377, - "y": 0 - } - } - }, - { - "ID": "4555", - "typeID": "Arrow", - "zOrder": "44", - "w": "103", - "h": "30", - "measuredW": "150", - "measuredH": "100", - "x": "536", - "y": "1587", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.12121212121223834, - "y": 30.75757575757575 - }, - "p1": { - "x": 0.3988125298095009, - "y": 0.09582877423336884 - }, - "p2": { - "x": 102.90909090909076, - "y": 0.4545454545452685 - } - } - }, - { - "ID": "4556", - "typeID": "Arrow", - "zOrder": "45", - "w": "91", - "h": "21", - "measuredW": "150", - "measuredH": "100", - "x": "536", - "y": "1554", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.12121212121223834, - "y": 0.12121212121201097 - }, - "p1": { - "x": 0.479452054794521, - "y": -0.054794520547945855 - }, - "p2": { - "x": 90.78787878787875, - "y": 21.333333333333258 - } - } - }, - { - "ID": "4557", - "typeID": "Arrow", - "zOrder": "46", - "w": "106", - "h": "58", - "measuredW": "150", - "measuredH": "100", - "x": "536", - "y": "1509", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.12121212121223834, - "y": -0.3333333333334849 - }, - "p1": { - "x": 0.5537436216802392, - "y": -0.10931033790023838 - }, - "p2": { - "x": 105.93939393939377, - "y": 57.24242424242425 - } - } - }, - { - "ID": "4558", - "typeID": "Arrow", - "zOrder": "47", - "w": "1", - "h": "71", - "measuredW": "150", - "measuredH": "100", - "x": "1311", - "y": "1449", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.09090909090900823, - "y": 0 - }, - "p1": { - "x": 0.5093283582089554, - "y": 0.0008582089552239402 - }, - "p2": { - "x": 0.09090909090900823, - "y": 70.74029870271806 - } - } - }, - { - "ID": "4559", - "typeID": "Arrow", - "zOrder": "48", - "w": "144", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1371", - "y": "1576", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.09090909090900823, - "y": 0 - }, - "p1": { - "x": 0.5093283582089554, - "y": 0.0008582089552239402 - }, - "p2": { - "x": 144.36363636363626, - "y": 0 - } - } - }, - { - "ID": "4560", - "typeID": "Arrow", - "zOrder": "49", - "w": "317", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1301", - "y": "1329", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.5094183863981456, - "y": 0.0009010178239445595 - }, - "p2": { - "x": 317, - "y": 0 - } - } - }, - { - "ID": "4561", - "typeID": "Arrow", - "zOrder": "50", - "w": "1", - "h": "79", - "measuredW": "150", - "measuredH": "100", - "x": "1072", - "y": "1404", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.36165903546771005 - }, - "p1": { - "x": 0.4583333333333334, - "y": -0.0053333333333334815 - }, - "p2": { - "x": 0, - "y": 78.939393939394 - } - } - }, - { - "ID": "4562", - "typeID": "Arrow", - "zOrder": "51", - "w": "1", - "h": "182", - "measuredW": "150", - "measuredH": "100", - "x": "1138", - "y": "1225", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 1, - "y": 0.12121212121212466 - }, - "p1": { - "x": 0.45833333333333337, - "y": -0.005333333333333482 - }, - "p2": { - "x": 1, - "y": 181.939393939394 - } - } - }, - { - "ID": "4563", - "typeID": "Arrow", - "zOrder": "52", - "w": "142", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1012", - "y": "1320", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.5093283582089555, - "y": 0.0008582089552239402 - }, - "p2": { - "x": 142.81818181818176, - "y": 0 - }, - "stroke": "dotted" - } - }, - { - "ID": "4564", - "typeID": "Arrow", - "zOrder": "53", - "w": "81", - "h": "29", - "measuredW": "150", - "measuredH": "100", - "x": "694", - "y": "1284", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.0833624645489408, - "y": -0.15886623034634795 - }, - "p1": { - "x": 0.48412676520757086, - "y": -0.1636924252691052 - }, - "p2": { - "x": 81, - "y": 26 - } - } - }, - { - "ID": "4565", - "typeID": "Arrow", - "zOrder": "54", - "w": "90", - "h": "32", - "measuredW": "150", - "measuredH": "100", - "x": "691", - "y": "1325", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.22138807875808197, - "y": 31.54564572240747 - }, - "p1": { - "x": 0.4836642440208913, - "y": 0.09966211979014447 - }, - "p2": { - "x": 90, - "y": 0 - } - } - }, - { - "ID": "4566", - "typeID": "Arrow", - "zOrder": "55", - "w": "317", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1299", - "y": "1122", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.5094183863981456, - "y": 0.0009010178239445595 - }, - "p2": { - "x": 317, - "y": 0 - } - } - }, - { - "ID": "4567", - "typeID": "Arrow", - "zOrder": "56", - "w": "1", - "h": "191", - "measuredW": "150", - "measuredH": "100", - "x": "1617", - "y": "1121", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 1, - "y": -0.0471924829330419 - }, - "p1": { - "x": 0.47172764625317937, - "y": -0.006652318528664226 - }, - "p2": { - "x": 1, - "y": 190.66666666666674 - } - } - }, - { - "ID": "4568", - "typeID": "Arrow", - "zOrder": "57", - "w": "812", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "690", - "y": "759", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.060606060606005485, - "y": 1 - }, - "p1": { - "x": 0.5093283582089554, - "y": 0.0008582089552239402 - }, - "p2": { - "x": 812.181818181818, - "y": 1 - } - } - }, - { - "ID": "4569", - "typeID": "Arrow", - "zOrder": "58", - "w": "144", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1372", - "y": "1046", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.09090909090900823, - "y": 0 - }, - "p1": { - "x": 0.5093283582089554, - "y": 0.0008582089552239402 - }, - "p2": { - "x": 144.36363636363626, - "y": 0 - } - } - }, - { - "ID": "4570", - "typeID": "Arrow", - "zOrder": "59", - "w": "1", - "h": "92", - "measuredW": "150", - "measuredH": "100", - "x": "1344", - "y": "1029", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0.24242424242424931 - }, - "p1": { - "x": 0.4583333333333333, - "y": -0.005333333333333485 - }, - "p2": { - "x": 0, - "y": 92.66666666666652 - } - } - }, - { - "ID": "4571", - "typeID": "Arrow", - "zOrder": "60", - "w": "1", - "h": "195", - "measuredW": "150", - "measuredH": "100", - "x": "898", - "y": "928", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 1, - "y": 0.48484848484849863 - }, - "p1": { - "x": 0.47172764625317914, - "y": -0.006652318528664224 - }, - "p2": { - "x": 1, - "y": 195.18181818181824 - } - } - }, - { - "ID": "4572", - "typeID": "Arrow", - "zOrder": "61", - "w": "259", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "899", - "y": "1123", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.15721761739848716, - "y": 0 - }, - "p1": { - "x": 0.5093283582089556, - "y": 0.0008582089552239404 - }, - "p2": { - "x": 258.72727272727275, - "y": 0 - } - } - }, - { - "ID": "4573", - "typeID": "Arrow", - "zOrder": "62", - "w": "127", - "h": "38", - "measuredW": "150", - "measuredH": "100", - "x": "554", - "y": "883", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.01671894307094135, - "y": -0.33883642656917345 - }, - "p1": { - "x": 0.44088976580194206, - "y": -0.11520512326000698 - }, - "p2": { - "x": 127.21212121212113, - "y": 36.90909090909088 - } - } - }, - { - "ID": "4574", - "typeID": "Arrow", - "zOrder": "63", - "w": "1", - "h": "87", - "measuredW": "150", - "measuredH": "100", - "x": "476", - "y": "812", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.09090909090912191, - "y": -0.42424242424249314 - }, - "p1": { - "x": 0.5087719298245618, - "y": 0.00318979266347666 - }, - "p2": { - "x": -0.09090909090912191, - "y": 86.42424242424238 - } - } - }, - { - "ID": "4575", - "typeID": "Arrow", - "zOrder": "64", - "w": "141", - "h": "42", - "measuredW": "150", - "measuredH": "100", - "x": "547", - "y": "935", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.36614780684760717, - "y": 42.09927370780258 - }, - "p1": { - "x": 0.4579017707985299, - "y": 0.07066488473103895 - }, - "p2": { - "x": 141.78787878787875, - "y": 0.060606060606005485 - }, - "stroke": "dotted" - } - }, - { - "ID": "4576", - "typeID": "Arrow", - "zOrder": "65", - "w": "1", - "h": "80", - "measuredW": "150", - "measuredH": "100", - "x": "760", - "y": "849", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.09090909090900823, - "y": 0.27272727272725206 - }, - "p1": { - "x": 0.5087719298245617, - "y": 0.003189792663476659 - }, - "p2": { - "x": -0.09090909090912191, - "y": 80.42424242424238 - } - } - }, - { - "ID": "4577", - "typeID": "Arrow", - "zOrder": "66", - "w": "621", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "909", - "y": "928", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.15721761739848716, - "y": 1 - }, - "p1": { - "x": 0.5093283582089556, - "y": 0.00085820895522394 - }, - "p2": { - "x": 621.181818181818, - "y": 1 - } - } - }, - { - "ID": "4578", - "typeID": "Arrow", - "zOrder": "67", - "w": "1", - "h": "98", - "measuredW": "150", - "measuredH": "100", - "x": "476", - "y": "954", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.09090909090912191, - "y": -0.42424242424249314 - }, - "p1": { - "x": 0.5087719298245618, - "y": 0.00318979266347666 - }, - "p2": { - "x": -0.09090909090912191, - "y": 97.42424242424238 - } - } - }, - { - "ID": "4579", - "typeID": "Arrow", - "zOrder": "68", - "w": "1", - "h": "80", - "measuredW": "150", - "measuredH": "100", - "x": "1530", - "y": "530", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.5454545454545041, - "y": 80.24242424242425 - }, - "p1": { - "x": 0.49760487146592863, - "y": 0.003674908633655258 - }, - "p2": { - "x": 0.5454545454545041, - "y": -0.21212121212124657 - }, - "stroke": "dotted" - } - }, - { - "ID": "4580", - "typeID": "Arrow", - "zOrder": "69", - "w": "1", - "h": "93", - "measuredW": "150", - "measuredH": "100", - "x": "1530", - "y": "673", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.4545454545454959, - "y": 92.36363636363637 - }, - "p1": { - "x": 0.49821572147706117, - "y": -0.0021313722235241192 - }, - "p2": { - "x": -0.4545454545454959, - "y": -0.21212121212124657 - }, - "stroke": "dotted" - } - }, - { - "ID": "4581", - "typeID": "Arrow", - "zOrder": "70", - "w": "1", - "h": "155", - "measuredW": "150", - "measuredH": "100", - "x": "1530", - "y": "772", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.4717276462531793, - "y": -0.006652318528664224 - }, - "p2": { - "x": 1, - "y": 154.96969696969688 - } - } - }, - { - "ID": "4582", - "typeID": "Arrow", - "zOrder": "71", - "w": "142", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1324", - "y": "994", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.393939393939263, - "y": 0 - }, - "p1": { - "x": 0.5093283582089555, - "y": 0.0008582089552239402 - }, - "p2": { - "x": 142.81818181818176, - "y": 0 - }, - "stroke": "dotted" - } - }, - { - "ID": "4583", - "typeID": "Arrow", - "zOrder": "72", - "w": "1", - "h": "122", - "measuredW": "150", - "measuredH": "100", - "x": "1259", - "y": "642", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.47299999999999986, - "y": -0.011000000000000005 - }, - "p2": { - "x": 1, - "y": 122.42424242424238 - } - } - }, - { - "ID": "4584", - "typeID": "Arrow", - "zOrder": "73", - "w": "1", - "h": "122", - "measuredW": "150", - "measuredH": "100", - "x": "963", - "y": "639", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.47299999999999986, - "y": -0.011000000000000005 - }, - "p2": { - "x": 1, - "y": 122.42424242424238 - } - } - }, - { - "ID": "4585", - "typeID": "Arrow", - "zOrder": "74", - "w": "1", - "h": "122", - "measuredW": "150", - "measuredH": "100", - "x": "485", - "y": "455", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.47299999999999986, - "y": -0.011000000000000005 - }, - "p2": { - "x": 1, - "y": 122.42424242424238 - } - } - }, - { - "ID": "4586", - "typeID": "Arrow", - "zOrder": "75", - "w": "1", - "h": "137", - "measuredW": "150", - "measuredH": "100", - "x": "760", - "y": "933", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.09090909090912191, - "y": -0.21212121212124657 - }, - "p1": { - "x": 0.5087719298245617, - "y": 0.003189792663476659 - }, - "p2": { - "x": -0.09090909090912191, - "y": 136.42424242424238 - } - } - }, - { - "ID": "4587", - "typeID": "Arrow", - "zOrder": "76", - "w": "1", - "h": "174", - "measuredW": "150", - "measuredH": "100", - "x": "689", - "y": "586", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.4796409522570575, - "y": -0.006374398334851107 - }, - "p2": { - "x": 1, - "y": 173.5454545454545 - } - } - }, - { - "ID": "4588", - "typeID": "Arrow", - "zOrder": "77", - "w": "217", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "691", - "y": "380", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.060606060606005485, - "y": 1 - }, - "p1": { - "x": 0.5087719298245612, - "y": 0.003189792663476693 - }, - "p2": { - "x": 217, - "y": 1 - } - } - }, - { - "ID": "4589", - "typeID": "Arrow", - "zOrder": "78", - "w": "131", - "h": "53", - "measuredW": "150", - "measuredH": "100", - "x": "1168", - "y": "392", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 131, - "y": 53 - }, - "p1": { - "x": 0.46820230345518277, - "y": -0.10065097646469705 - }, - "p2": { - "x": 0, - "y": 0 - } - } - }, - { - "ID": "4590", - "typeID": "Arrow", - "zOrder": "79", - "w": "122", - "h": "47", - "measuredW": "150", - "measuredH": "100", - "x": "1178", - "y": "324", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 122, - "y": 0 - }, - "p1": { - "x": 0.42135134205487473, - "y": 0.09461458201956036 - }, - "p2": { - "x": 0, - "y": 47 - } - } - }, - { - "ID": "4591", - "typeID": "Arrow", - "zOrder": "80", - "w": "129", - "h": "2", - "measuredW": "150", - "measuredH": "100", - "x": "1183", - "y": "382", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 129, - "y": -0.5 - }, - "p1": { - "x": 0.4487910725356478, - "y": 0.0035337879727238685 - }, - "p2": { - "x": 0, - "y": 1 - } - } - }, - { - "ID": "4592", - "typeID": "Label", - "zOrder": "81", - "measuredW": "66", - "measuredH": "40", - "x": "1002", - "y": "188", - "properties": { - "size": "32", - "text": "C++" - } - }, - { - "ID": "4593", - "typeID": "Arrow", - "zOrder": "82", - "w": "1", - "h": "113", - "measuredW": "150", - "measuredH": "100", - "x": "1035", - "y": "257", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.4729999999999999, - "y": -0.011000000000000003 - }, - "p2": { - "x": 1, - "y": 113 - } - } - }, - { - "ID": "4594", - "typeID": "__group__", - "zOrder": "83", - "measuredW": "312", - "measuredH": "50", - "w": "312", - "h": "50", - "x": "884", - "y": "356", - "properties": { - "controlName": "100-introduction" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "302", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "223", - "measuredH": "25", - "x": "49", - "y": "12", - "properties": { - "size": "17", - "text": "Introduction to the Language" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4606", - "typeID": "__group__", - "zOrder": "86", - "measuredW": "220", - "measuredH": "47", - "w": "220", - "h": "47", - "x": "1292", - "y": "306", - "properties": { - "controlName": "100-introduction:what-is-cpp" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "210", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "105", - "measuredH": "25", - "x": "52", - "y": "11", - "properties": { - "size": "17", - "text": "What is C++?" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "196", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4607", - "typeID": "__group__", - "zOrder": "87", - "measuredW": "220", - "measuredH": "47", - "w": "220", - "h": "47", - "x": "1292", - "y": "359", - "properties": { - "controlName": "101-introduction:why-cpp" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "210", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "112", - "measuredH": "25", - "x": "49", - "y": "11", - "properties": { - "size": "17", - "text": "Why use C++?" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "196", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4608", - "typeID": "__group__", - "zOrder": "88", - "measuredW": "220", - "measuredH": "47", - "w": "220", - "h": "47", - "x": "1292", - "y": "413", - "properties": { - "controlName": "102-introduction:c-vs-cpp" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "210", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "73", - "measuredH": "25", - "x": "68", - "y": "11", - "properties": { - "size": "17", - "text": "C vs C++" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "196", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4609", - "typeID": "Arrow", - "zOrder": "89", - "w": "1", - "h": "102", - "measuredW": "150", - "measuredH": "100", - "x": "1034", - "y": "68", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 1, - "y": 0.21592451307655836 - }, - "p1": { - "x": 0.47299999999999986, - "y": -0.01100000000000001 - }, - "p2": { - "x": 1, - "y": 102 - } - } - }, - { - "ID": "4610", - "typeID": "Arrow", - "zOrder": "90", - "w": "1", - "h": "194", - "measuredW": "150", - "measuredH": "100", - "x": "689", - "y": "381", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.4637713110681927, - "y": -0.004076038643122147 - }, - "p2": { - "x": 1, - "y": 193.69696969696963 - } - } - }, - { - "ID": "4611", - "typeID": "__group__", - "zOrder": "91", - "measuredW": "376", - "measuredH": "50", - "w": "376", - "h": "50", - "x": "342", - "y": "554", - "properties": { - "controlName": "101-setting-up" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "368", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "217", - "measuredH": "25", - "x": "87", - "y": "12", - "properties": { - "size": "17", - "text": "Setting up your Environment" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4612", - "typeID": "__group__", - "zOrder": "92", - "measuredW": "280", - "measuredH": "47", - "w": "280", - "h": "47", - "x": "343", - "y": "353", - "properties": { - "controlName": "100-setting-up:installing" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "272", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "109", - "measuredH": "25", - "x": "89", - "y": "11", - "properties": { - "size": "17", - "text": "Installing C++" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4613", - "typeID": "__group__", - "zOrder": "93", - "measuredW": "280", - "measuredH": "47", - "w": "280", - "h": "47", - "x": "343", - "y": "404", - "properties": { - "controlName": "101-setting-up:code-editors" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "272", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "155", - "measuredH": "25", - "x": "66", - "y": "11", - "properties": { - "size": "17", - "text": "Code Editors / IDEs" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4614", - "typeID": "__group__", - "zOrder": "94", - "measuredW": "280", - "measuredH": "47", - "w": "280", - "h": "47", - "x": "343", - "y": "455", - "properties": { - "controlName": "102-setting-up:first-program" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "272", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "210", - "measuredH": "25", - "x": "39", - "y": "11", - "properties": { - "size": "17", - "text": "Running your First Program" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4615", - "typeID": "__group__", - "zOrder": "95", - "measuredW": "240", - "measuredH": "47", - "w": "240", - "h": "47", - "x": "839", - "y": "467", - "properties": { - "controlName": "100-basic-operations:arithmetic-operators" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "230", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "160", - "measuredH": "25", - "x": "45", - "y": "11", - "properties": { - "size": "17", - "text": "Arithmetic Operators" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4616", - "typeID": "__group__", - "zOrder": "96", - "measuredW": "239", - "measuredH": "47", - "w": "239", - "h": "47", - "x": "840", - "y": "519", - "properties": { - "controlName": "101-basic-operations:logical-operators" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "230", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "138", - "measuredH": "25", - "x": "55", - "y": "11", - "properties": { - "size": "17", - "text": "Logical Operators" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4617", - "typeID": "__group__", - "zOrder": "97", - "measuredW": "239", - "measuredH": "47", - "w": "239", - "h": "47", - "x": "840", - "y": "570", - "properties": { - "controlName": "102-basic-operations:loops" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "230", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "122", - "measuredH": "25", - "x": "63", - "y": "11", - "properties": { - "size": "17", - "text": "Loops: for/while" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4618", - "typeID": "__group__", - "zOrder": "98", - "measuredW": "239", - "measuredH": "47", - "w": "239", - "h": "47", - "x": "840", - "y": "621", - "properties": { - "controlName": "103-basic-operations:bitwise" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "230", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "137", - "measuredH": "25", - "x": "55", - "y": "11", - "properties": { - "size": "17", - "text": "Bitwise Operators" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4619", - "typeID": "__group__", - "zOrder": "99", - "measuredW": "180", - "measuredH": "50", - "w": "180", - "h": "50", - "x": "1165", - "y": "734", - "properties": { - "controlName": "103-functions" + "nodes": [ + { + "id": "b5EyLVAnEsPBiwy2dMr6F", + "type": "horizontal", + "position": { "x": 132.993752405053, "y": 2903.0129376580285 }, + "selected": true, + "data": { + "label": "horizontal node", + "style": { "stroke": "#2B78E4", "strokeWidth": 3.5 } + }, + "zIndex": 999, + "width": 127, + "height": 20, + "style": { "width": 127, "height": 20 }, + "positionAbsolute": { "x": 132.993752405053, "y": 2903.0129376580285 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "I1aDakZmYpe7pKczou0qC", + "type": "section", + "position": { "x": 258.0179751445827, "y": 2688.244194339027 }, + "selected": true, + "data": { + "label": "", + "style": { + "width": 150, + "height": 100, + "fontSize": 17, + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "zIndex": -999, + "width": 195, + "height": 278, + "style": { "width": 195, "height": 278 }, + "resizing": false, + "positionAbsolute": { "x": 258.0179751445827, "y": 2688.244194339027 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "goX6oPqweGg7J9yXJjDsR", + "type": "horizontal", + "position": { "x": 441.5179751445827, "y": 2530.0128020469147 }, + "selected": true, + "data": { + "label": "horizontal node", + "style": { "stroke": "#2B78E4", "strokeWidth": 3.5 } + }, + "zIndex": 999, + "width": 91, + "height": 20, + "style": { "width": 91, "height": 20 }, + "positionAbsolute": { "x": 441.5179751445827, "y": 2530.0128020469147 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "iisl6B61awdQDJVGaBqtI", + "type": "section", + "position": { "x": 532.5179751445827, "y": 2381.244194339027 }, + "selected": true, + "data": { + "label": "", + "style": { + "width": 150, + "height": 100, + "fontSize": 17, + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "zIndex": -999, + "width": 239, + "height": 385, + "style": { "width": 239, "height": 385 }, + "positionAbsolute": { "x": 532.5179751445827, "y": 2381.244194339027 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "SNEm8ibYyywxb0prHdlMA", + "type": "vertical", + "position": { "x": 118.26444711909286, "y": 2545.23808936492 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "REVHzbbcSWfylibdGZG5A" + }, + "zIndex": 999, + "width": 20, + "height": 86, + "style": { "width": 20, "height": 86 }, + "positionAbsolute": { "x": 118.26444711909286, "y": 2545.23808936492 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "REVHzbbcSWfylibdGZG5A", + "type": "vertical", + "position": { "x": 12.144083619869434, "y": 2545.23808936492 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 86, + "style": { "width": 20, "height": 86 }, + "positionAbsolute": { "x": 12.144083619869434, "y": 2545.23808936492 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "Tm2kjpCnwZhAw0vwqn_PK", + "type": "section", + "position": { "x": -31.733089516576577, "y": 2235.2284032315606 }, + "selected": true, + "data": { + "label": "", + "style": { + "width": 150, + "height": 100, + "fontSize": 17, + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "zIndex": -999, + "width": 185, + "height": 212, + "style": { "width": 185, "height": 212 }, + "positionAbsolute": { "x": -31.733089516576577, "y": 2235.2284032315606 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "_sUz-qKSggnUjAO281ROC", + "type": "vertical", + "position": { "x": -233.429978402122, "y": 1962.677896706502 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 97, + "style": { "width": 20, "height": 97 }, + "positionAbsolute": { "x": -233.429978402122, "y": 1962.677896706502 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "wGg3UBe3OqaXWxPxYiBQz", + "type": "vertical", + "position": { "x": 594.833180361922, "y": 1673.789165472234 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 103, + "style": { "width": 20, "height": 103 }, + "positionAbsolute": { "x": 594.833180361922, "y": 1673.789165472234 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "3SsQBuq6ie73yAMvRcqtR", + "type": "section", + "position": { "x": 466.39833855329164, "y": 1470.7730008603658 }, + "selected": true, + "data": { + "label": "", + "style": { + "width": 150, + "height": 100, + "fontSize": 17, + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "zIndex": -999, + "width": 302, + "height": 174, + "style": { "width": 302, "height": 174 }, + "positionAbsolute": { "x": 466.39833855329164, "y": 1470.7730008603658 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "ra0ZEvbILayGotRDlRwjF", + "type": "vertical", + "position": { "x": 309.993752405053, "y": 1671.789165472234 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 107, + "style": { "width": 20, "height": 107 }, + "positionAbsolute": { "x": 309.993752405053, "y": 1671.789165472234 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "XUHjmFhEsTjGRLlmDgl_w", + "type": "vertical", + "position": { "x": 159.993752405053, "y": 1671.789165472234 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "ra0ZEvbILayGotRDlRwjF" + }, + "zIndex": 999, + "width": 20, + "height": 107, + "style": { "width": 20, "height": 107 }, + "positionAbsolute": { "x": 159.993752405053, "y": 1671.789165472234 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "mnUWOqBFgcuNsXUr18fJI", + "type": "section", + "position": { "x": -286.929978402122, "y": 1484.789165472234 }, + "selected": true, + "data": { + "label": "", + "style": { + "width": 150, + "height": 100, + "fontSize": 17, + "backgroundColor": "#ffffff" + } + }, + "zIndex": -999, + "width": 321, + "height": 128, + "style": { "width": 321, "height": 128 }, + "resizing": false, + "positionAbsolute": { "x": -286.929978402122, "y": 1484.789165472234 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "l5xm8tzFqMKwGdK3MYaXm", + "type": "vertical", + "position": { "x": 500.31370390738084, "y": 1150.9555450086277 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 199, + "style": { "width": 20, "height": 199 }, + "positionAbsolute": { "x": 500.31370390738084, "y": 1150.9555450086277 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "fG1lGRwUDPc-aiETFyEE7", + "type": "vertical", + "position": { "x": 588.119142886761, "y": 1045.9498696738276 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 196, + "style": { "width": 20, "height": 196 }, + "positionAbsolute": { "x": 588.119142886761, "y": 1045.9498696738276 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "ofwdZm05AUqCIWmfgGHk8", + "type": "subtopic", + "position": { "x": 539.0885117402935, "y": 1257.538589268166 }, + "selected": true, + "data": { + "label": "Diamond Inheritance", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 231, + "height": 49, + "style": { "width": 231, "height": 49 }, + "positionAbsolute": { "x": 539.0885117402935, "y": 1257.538589268166 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "ZHjU60uzJTezADRhDTESG", + "type": "subtopic", + "position": { "x": 66.99375240505299, "y": 877.9725710130274 }, + "selected": true, + "data": { + "label": "Forward Declaration", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 223, + "height": 49, + "style": { "width": 223, "height": 49 }, + "positionAbsolute": { "x": 66.99375240505299, "y": 877.9725710130274 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "J7Jwh6hrrEyni5eGmuCqc", + "type": "horizontal", + "position": { "x": -44.467176049532384, "y": 1130.9555450086277 }, + "selected": true, + "data": { + "label": "horizontal node", + "style": { "stroke": "#2B78E4", "strokeWidth": 3.75 } + }, + "zIndex": 999, + "width": 223, + "height": 20, + "style": { "width": 223, "height": 20 }, + "positionAbsolute": { "x": -44.467176049532384, "y": 1130.9555450086277 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "Qk3hqX1Wj68FD8jXHS5NU", + "type": "section", + "position": { "x": -284.4671760495324, "y": 822.073069776383 }, + "width": 241, + "height": 234, + "style": { "width": 241, "height": 234 }, + "selected": true, + "data": { + "style": { "backgroundColor": "#ffffff", "borderColor": "#000000" } + }, + "positionAbsolute": { "x": -284.4671760495324, "y": 822.073069776383 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "zybofouGIVxcKvr47F3Yy", + "type": "section", + "position": { "x": -284.4671760495324, "y": 1051.9498696738276 }, + "width": 241, + "height": 175, + "style": { "width": 241, "height": 175 }, + "selected": true, + "data": { + "style": { "backgroundColor": "#ffffff", "borderColor": "#000000" } + }, + "dragging": false, + "positionAbsolute": { "x": -284.4671760495324, "y": 1051.9498696738276 }, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "c58fcsthBlVfzfr-MHdpF", + "type": "vertical", + "position": { "x": 256.89029212267985, "y": -124.59925177765109 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 66, + "positionAbsolute": { "x": 256.89029212267985, "y": -124.59925177765109 }, + "dragging": false, + "style": { "width": 20, "height": 66 }, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "Ji35JsKgUQXN4DJGEgTAC", + "type": "title", + "position": { "x": 218.39029212267985, "y": -59.09925177765109 }, + "selected": true, + "data": { + "label": "C++", + "style": { + "fontSize": 28, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 97, + "height": 68, + "positionAbsolute": { "x": 218.39029212267985, "y": -59.09925177765109 }, + "dragging": false, + "selectable": true, + "focusable": true, + "style": {} + }, + { + "id": "kpF15oUmlUmk1qVGEBB7Y", + "type": "paragraph", + "position": { "x": 421.119142886761, "y": -125.95736970235458 }, + "selected": true, + "data": { + "label": "Find the detailed version of this roadmap along with other similar roadmaps", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "left", + "borderColor": "#000000", + "backgroundColor": "#FFFFFf" + }, + "oldId": "yHmHXymPNWwu8p1vvqD3o" + }, + "zIndex": 999, + "width": 354, + "height": 143, + "positionAbsolute": { "x": 421.119142886761, "y": -125.95736970235458 }, + "dragging": false, + "selectable": true, + "focusable": true, + "style": { "width": 354, "height": 143 }, + "resizing": false + }, + { + "id": "if9eTna5NRTMStVwpSwDP", + "type": "button", + "position": { "x": 433.619142886761, "y": -44.09925177765109 }, + "selected": true, + "data": { + "label": "roadmap.sh", + "href": "https://roadmap.sh", + "color": "#ffffff", + "backgroundColor": "#4136D6", + "style": { "fontSize": 17 }, + "oldId": "2zqZkyVgigifcRS1H7F_b" + }, + "zIndex": 999, + "width": 329, + "height": 49, + "dragging": false, + "style": { "width": 329, "height": 49 }, + "resizing": false, + "positionAbsolute": { "x": 433.619142886761, "y": -44.09925177765109 }, + "selectable": true, + "focusable": true + }, + { + "id": "g4hjyQF8-SpjPi8mYtIsk", + "type": "vertical", + "position": { "x": 256.89029212267985, "y": 15.028193715390685 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { "stroke": "#2B78E4", "strokeWidth": 3.5 } + }, + "zIndex": 999, + "width": 20, + "height": 139, + "style": { "width": 20, "height": 139 }, + "positionAbsolute": { "x": 256.89029212267985, "y": 15.028193715390685 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "width": 411, + "height": 121, + "id": "0vLaVNJaJSHZ_bHli6Qzs", + "type": "paragraph", + "position": { "x": -278.006247594947, "y": 2846.2883869394877 }, + "selected": true, + "data": { + "label": "Keep learning with following relevant tracks", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "borderColor": "#000000", + "backgroundColor": "WHITe" + }, + "oldId": "m9eO0jLGuR_9w2JJbe_g2" + }, + "zIndex": 999, + "positionAbsolute": { "x": -278.006247594947, "y": 2846.2883869394877 }, + "dragging": false, + "style": { "width": 411, "height": 121 }, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "width": 20, + "height": 85, + "id": "xi0QAi4kXm3-IFKgopnOP", + "type": "vertical", + "position": { "x": -82.50624759494701, "y": 2967.2883869394877 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "RLtk1C3gofHnLJ17x3o5b" + }, + "zIndex": 999, + "positionAbsolute": { "x": -82.50624759494701, "y": 2967.2883869394877 }, + "dragging": false, + "focusable": true, + "style": { "width": 20, "height": 85 }, + "resizing": false, + "selectable": true + }, + { + "width": 377, + "height": 49, + "id": "-sFboM4eFUMVq1tlPl-fV", + "type": "button", + "position": { "x": -261.006247594947, "y": 2903.0129376580285 }, + "selected": true, + "data": { + "label": "Backend Roadmap", + "href": "https://roadmap.sh/backend", + "color": "#FFFFFf", + "backgroundColor": "#4136D6", + "style": { "fontSize": 17 }, + "borderColor": "#4136D6", + "oldId": "qXKNK_IsGS8-JgLK-Q9oU" + }, + "zIndex": 999, + "dragging": false, + "positionAbsolute": { "x": -261.006247594947, "y": 2903.0129376580285 }, + "style": { "width": 377, "height": 49 }, + "focusable": true, + "resizing": false, + "selectable": true + }, + { + "id": "NvODRFR0DLINB0RlPSsvt", + "type": "topic", + "position": { "x": 128.89029212267985, "y": 150.76582156925141 }, + "selected": true, + "data": { + "label": "Introduction to Language", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 276, + "height": 49, + "style": { "width": 276, "height": 49 }, + "positionAbsolute": { "x": 128.89029212267985, "y": 150.76582156925141 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "q2z_1wnPUnWM7MYIIUyBg", + "type": "legend", + "position": { "x": -285.20291471146976, "y": -130.55580566097228 }, + "selected": true, + "data": { + "label": "", + "legends": [ + { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here" }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "170", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "75", - "measuredH": "25", - "x": "57", - "y": "12", - "properties": { - "size": "17", - "text": "Functions" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "13", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4620", - "typeID": "__group__", - "zOrder": "100", - "measuredW": "180", - "measuredH": "47", - "w": "180", - "h": "47", - "x": "1165", - "y": "570", - "properties": { - "controlName": "101-functions:operators" + { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4" }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "170", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "78", - "measuredH": "25", - "x": "56", - "y": "11", - "properties": { - "size": "17", - "text": "Operators" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4621", - "typeID": "__group__", - "zOrder": "101", - "measuredW": "180", - "measuredH": "47", - "w": "180", - "h": "47", - "x": "1165", - "y": "621", - "properties": { - "controlName": "100-functions:lambda" + { + "id": "zgW3oGPdbclWTlKJdidiB", + "label": "Advanced Topics / Pick Later", + "color": "#000000" }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "170", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "63", - "measuredH": "25", - "x": "63", - "y": "11", - "properties": { - "size": "17", - "text": "Lambda" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4622", - "typeID": "__group__", - "zOrder": "102", - "measuredW": "223", - "measuredH": "50", - "w": "223", - "h": "50", - "x": "1424", - "y": "734", - "properties": { - "controlName": "104-data-types" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "213", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "86", - "measuredH": "25", - "x": "64", - "y": "12", - "properties": { - "size": "17", - "text": "Data Types" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "199", - "y": "14", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4623", - "typeID": "__group__", - "zOrder": "103", - "measuredW": "178", - "measuredH": "47", - "w": "178", - "h": "47", - "x": "1438", - "y": "657", - "properties": { - "controlName": "100-data-types:static-typing" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "170", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "98", - "measuredH": "25", - "x": "44", - "y": "11", - "properties": { - "size": "17", - "text": "Static Typing" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4624", - "typeID": "__group__", - "zOrder": "104", - "measuredW": "179", - "measuredH": "47", - "w": "179", - "h": "47", - "x": "1437", - "y": "606", - "properties": { - "controlName": "101-data-types:dynamic-typing" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "170", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "121", - "measuredH": "25", - "x": "33", - "y": "11", - "properties": { - "size": "17", - "text": "Dynamic Typing" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4625", - "typeID": "__group__", - "zOrder": "105", - "measuredW": "114", - "measuredH": "47", - "w": "114", - "h": "47", - "x": "1468", - "y": "519", - "properties": { - "controlName": "100-data-types:dynamic-typing:rtti" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "103", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "38", - "measuredH": "25", - "x": "44", - "y": "11", - "properties": { - "size": "17", - "text": "RTTI" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4626", - "typeID": "__group__", - "zOrder": "106", - "measuredW": "274", - "measuredH": "50", - "w": "274", - "h": "50", - "x": "668", - "y": "903", - "properties": { - "controlName": "105-pointers-and-references" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "263", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "191", - "measuredH": "25", - "x": "36", - "y": "12", - "properties": { - "size": "17", - "text": "Pointers and References" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "250", - "y": "13", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4627", - "typeID": "__group__", - "zOrder": "107", - "measuredW": "193", - "measuredH": "47", - "w": "193", - "h": "47", - "x": "659", - "y": "830", - "properties": { - "controlName": "100-pointers-and-references:references" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "183", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "90", - "measuredH": "25", - "x": "57", - "y": "11", - "properties": { - "size": "17", - "text": "References" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "10", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4628", - "typeID": "TextArea", - "zOrder": "108", - "w": "176", - "h": "216", - "measuredW": "200", - "measuredH": "140", - "x": "389", - "y": "699" - }, - { - "ID": "4629", - "typeID": "Label", - "zOrder": "109", - "measuredW": "114", - "measuredH": "25", - "x": "420", - "y": "876", - "properties": { - "size": "17", - "text": "Smart Pointers" - } - }, - { - "ID": "4630", - "typeID": "__group__", - "zOrder": "110", - "measuredW": "195", - "measuredH": "47", - "w": "195", - "h": "47", - "x": "657", - "y": "985", - "properties": { - "controlName": "101-pointers-and-references:memory-model" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "183", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "12", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "115", - "measuredH": "25", - "x": "46", - "y": "11", - "properties": { - "size": "17", - "text": "Memory Model" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4631", - "typeID": "TextArea", - "zOrder": "111", - "w": "173", - "h": "168", - "measuredW": "200", - "measuredH": "140", - "x": "391", - "y": "937" - }, - { - "ID": "4632", - "typeID": "Label", - "zOrder": "112", - "measuredW": "101", - "measuredH": "25", - "x": "426", - "y": "949", - "properties": { - "size": "17", - "text": "Raw Pointers" - } - }, - { - "ID": "4633", - "typeID": "__group__", - "zOrder": "113", - "measuredW": "232", - "measuredH": "47", - "w": "232", - "h": "47", - "x": "356", - "y": "819", - "properties": { - "controlName": "102-pointers-and-references:smart-pointers:uniqe-ptr" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "222", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "78", - "y": "11", - "properties": { - "size": "17", - "text": "unique_ptr" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4634", - "typeID": "__group__", - "zOrder": "114", - "measuredW": "231", - "measuredH": "47", - "w": "231", - "h": "47", - "x": "357", - "y": "767", - "properties": { - "controlName": "101-pointers-and-references:smart-pointers:shared-ptr" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "222", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "77", - "y": "11", - "properties": { - "size": "17", - "text": "shared_ptr" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4635", - "typeID": "__group__", - "zOrder": "115", - "measuredW": "231", - "measuredH": "47", - "w": "231", - "h": "47", - "x": "357", - "y": "716", - "properties": { - "controlName": "100-pointers-and-references:smart-pointers:weak-ptr" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "222", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "71", - "measuredH": "25", - "x": "84", - "y": "11", - "properties": { - "size": "17", - "text": "weak_ptr" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4636", - "typeID": "__group__", - "zOrder": "116", - "measuredW": "194", - "measuredH": "47", - "w": "194", - "h": "47", - "x": "658", - "y": "1066", - "properties": { - "controlName": "100-pointers-and-references:memory-model:object-lifetime" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "183", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "145", - "measuredH": "25", - "x": "31", - "y": "11", - "properties": { - "size": "17", - "text": "Lifetime of Objects" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4637", - "typeID": "__group__", - "zOrder": "117", - "measuredW": "231", - "measuredH": "47", - "w": "231", - "h": "47", - "x": "356", - "y": "989", - "properties": { - "controlName": "100-pointers-and-references:raw-pointers:new-delete-operators" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "220", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "172", - "measuredH": "25", - "x": "35", - "y": "11", - "properties": { - "size": "17", - "text": "New/delete Operators" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4638", - "typeID": "__group__", - "zOrder": "118", - "measuredW": "231", - "measuredH": "47", - "w": "231", - "h": "47", - "x": "356", - "y": "1040", - "properties": { - "controlName": "101-pointers-and-references:raw-pointers:memory-leakage" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "220", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "133", - "measuredH": "25", - "x": "54", - "y": "11", - "properties": { - "size": "17", - "text": "Memory Leakage" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4639", - "typeID": "__group__", - "zOrder": "119", - "measuredW": "242", - "measuredH": "50", - "w": "242", - "h": "50", - "x": "838", - "y": "734", - "properties": { - "controlName": "102-basic-operations" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "233", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "133", - "measuredH": "25", - "x": "59", - "y": "12", - "properties": { - "size": "17", - "text": "Basic Operations" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "14", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4640", - "typeID": "__group__", - "zOrder": "120", - "measuredW": "250", - "measuredH": "50", - "w": "250", - "h": "50", - "x": "1125", - "y": "1097", - "properties": { - "controlName": "106-structuring-codebase" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "240", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "168", - "measuredH": "25", - "x": "36", - "y": "12", - "properties": { - "size": "17", - "text": "Structuring Codebase" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "226", - "y": "13", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4641", - "typeID": "__group__", - "zOrder": "121", - "measuredW": "336", - "measuredH": "47", - "w": "336", - "h": "47", - "x": "1070", - "y": "970", - "properties": { - "controlName": "101-structuring-codebase:code-splitting" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "327", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "274", - "measuredH": "25", - "x": "27", - "y": "11", - "properties": { - "size": "17", - "text": "Code Splitting: Headers / CPP Files" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "312", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4642", - "typeID": "__group__", - "zOrder": "122", - "measuredW": "118", - "measuredH": "47", - "w": "118", - "h": "47", - "x": "1288", - "y": "1023", - "properties": { - "controlName": "100-structuring-codebase:scope" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "112", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "49", - "measuredH": "25", - "x": "31", - "y": "11", - "properties": { - "size": "17", - "text": "Scope" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "94", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4643", - "typeID": "__group__", - "zOrder": "123", - "measuredW": "226", - "measuredH": "47", - "w": "226", - "h": "47", - "x": "1433", - "y": "1023", - "properties": { - "controlName": "100-structuring-codebase:scope:namespaces" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "102", - "measuredH": "25", - "x": "58", - "y": "11", - "properties": { - "size": "17", - "text": "Namespaces" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "202", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4644", - "typeID": "__group__", - "zOrder": "124", - "measuredW": "227", - "measuredH": "47", - "w": "227", - "h": "47", - "x": "1433", - "y": "970", - "properties": { - "controlName": "100-structuring-codebase:code-splitting:forward-declaration" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "155", - "measuredH": "25", - "x": "21", - "y": "11", - "properties": { - "size": "17", - "text": "Forward Declaration" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "203", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4645", - "typeID": "Arrow", - "zOrder": "125", - "w": "317", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1301", - "y": "1311", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.5094183863981456, - "y": 0.0009010178239445595 - }, - "p2": { - "x": 317, - "y": 0 - } - } - }, - { - "ID": "4646", - "typeID": "__group__", - "zOrder": "126", - "measuredW": "261", - "measuredH": "50", - "w": "261", - "h": "50", - "x": "1104", - "y": "1295", - "properties": { - "controlName": "107-structures-and-classes" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "251", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "178", - "measuredH": "25", - "x": "47", - "y": "12", - "properties": { - "size": "17", - "text": "Structures and Classes" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "13", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4647", - "typeID": "__group__", - "zOrder": "127", - "measuredW": "308", - "measuredH": "47", - "w": "308", - "h": "47", - "x": "763", - "y": "1296", - "properties": { - "controlName": "101-structures-and-classes:oop" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "299", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "231", - "measuredH": "25", - "x": "36", - "y": "11", - "properties": { - "size": "17", - "text": "Object Oriented Programming" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "284", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4648", - "typeID": "__group__", - "zOrder": "128", - "measuredW": "238", - "measuredH": "77", - "w": "238", - "h": "77", - "x": "477", - "y": "1239", - "properties": { - "controlName": "100-structures-and-classes:oop:static-polymorphism" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "229", - "h": "77", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "155", - "measuredH": "25", - "x": "37", - "y": "37", - "properties": { - "size": "17", - "text": "Static Polymorphism" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "214", - "y": "46", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4649", - "typeID": "__group__", - "zOrder": "129", - "measuredW": "239", - "measuredH": "72", - "w": "239", - "h": "72", - "x": "477", - "y": "1329", - "properties": { - "controlName": "101-structures-and-classes:oop:dynamic-polymorphism" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "229", - "h": "72", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "178", - "measuredW": "178", - "measuredH": "25", - "x": "26", - "y": "11", - "properties": { - "size": "17", - "text": "Dynamic Polymorphism" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "215", - "y": "7", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4650", - "typeID": "__group__", - "zOrder": "130", - "measuredW": "326", - "measuredH": "47", - "w": "326", - "h": "47", - "x": "428", - "y": "1222", - "properties": { - "controlName": "100-structures-and-classes:oop:static-polymorphism:overloading-functions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "316", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "193", - "measuredH": "25", - "x": "71", - "y": "11", - "properties": { - "size": "17", - "text": "Overloading of Functions" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "9", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4651", - "typeID": "__group__", - "zOrder": "131", - "measuredW": "174", - "measuredH": "47", - "w": "174", - "h": "47", - "x": "428", - "y": "1371", - "properties": { - "controlName": "100-structures-and-classes:oop:dynamic-polymorphism:virtual-methods" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "164", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "121", - "measuredW": "121", - "measuredH": "25", - "x": "34", - "y": "11", - "properties": { - "size": "17", - "text": "Virtual Methods" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4652", - "typeID": "__group__", - "zOrder": "132", - "measuredW": "149", - "measuredH": "47", - "w": "149", - "h": "47", - "x": "614", - "y": "1371", - "properties": { - "controlName": "100-structures-and-classes:oop:dynamic-polymorphism:virtual-tables" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "140", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "103", - "measuredH": "25", - "x": "15", - "y": "11", - "properties": { - "size": "17", - "text": "Virtual Tables" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "125", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4653", - "typeID": "__group__", - "zOrder": "133", - "measuredW": "269", - "measuredH": "47", - "w": "269", - "h": "47", - "x": "915", - "y": "1212", - "properties": { - "controlName": "100-structures-and-classes:rule-of-zero-five-three" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "259", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "186", - "measuredH": "25", - "x": "37", - "y": "11", - "properties": { - "size": "17", - "text": "Rule of Zero, Five, Three" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "245", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4654", - "typeID": "__group__", - "zOrder": "134", - "measuredW": "213", - "measuredH": "47", - "w": "213", - "h": "47", - "x": "972", - "y": "1382", - "properties": { - "controlName": "102-structures-and-classes:multiple-inheritance" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "202", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "154", - "measuredH": "25", - "x": "17", - "y": "11", - "properties": { - "size": "17", - "text": "Multiple Inheritance" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "189", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4655", - "typeID": "__group__", - "zOrder": "135", - "measuredW": "213", - "measuredH": "47", - "w": "213", - "h": "47", - "x": "972", - "y": "1455", - "properties": { - "controlName": "100-structures-and-classes:multiple-inheritance:diamond-inheritance" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "202", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "162", - "measuredH": "25", - "x": "20", - "y": "11", - "properties": { - "size": "17", - "text": "Diamond Inheritance" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "189", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4656", - "typeID": "Arrow", - "zOrder": "136", - "w": "1", - "h": "392", - "measuredW": "150", - "measuredH": "100", - "x": "1617", - "y": "1331", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.47841726618705027, - "y": -0.001438848920863544 - }, - "p2": { - "x": 1, - "y": 392.3688638189676 - } - } - }, - { - "ID": "4657", - "typeID": "__group__", - "zOrder": "137", - "measuredW": "219", - "measuredH": "50", - "w": "219", - "h": "50", - "x": "1448", - "y": "1551", - "properties": { - "controlName": "108-exception-handling" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "208", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "149", - "measuredH": "25", - "x": "29", - "y": "12", - "properties": { - "size": "17", - "text": "Exception Handling" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "195", - "y": "14", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4658", - "typeID": "__group__", - "zOrder": "138", - "measuredW": "191", - "measuredH": "47", - "w": "191", - "h": "47", - "x": "1219", - "y": "1500", - "properties": { - "controlName": "100-exception-handling:exceptions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "180", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "47", - "y": "11", - "properties": { - "size": "17", - "text": "Exceptions" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "167", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4659", - "typeID": "__group__", - "zOrder": "139", - "measuredW": "191", - "measuredH": "47", - "w": "191", - "h": "47", - "x": "1219", - "y": "1438", - "properties": { - "controlName": "100-exception-handling:exceptions:access-violations" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "180", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "134", - "measuredH": "25", - "x": "23", - "y": "11", - "properties": { - "size": "17", - "text": "Access Violations" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "167", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4660", - "typeID": "__group__", - "zOrder": "140", - "measuredW": "191", - "measuredH": "47", - "w": "191", - "h": "47", - "x": "1219", - "y": "1553", - "properties": { - "controlName": "101-exception-handling:exit-codes" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "182", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "83", - "measuredH": "25", - "x": "49", - "y": "11", - "properties": { - "size": "17", - "text": "Exit Codes" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "167", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4661", - "typeID": "__group__", - "zOrder": "141", - "measuredW": "282", - "measuredH": "60", - "w": "282", - "h": "60", - "x": "1012", - "y": "1702", - "properties": { - "controlName": "109-language-concepts" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "282", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "10", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "156", - "measuredH": "25", - "x": "63", - "y": "22", - "properties": { - "size": "17", - "text": "Language Concepts" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "252", - "y": "0", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4662", - "typeID": "__group__", - "zOrder": "142", - "measuredW": "314", - "measuredH": "47", - "w": "314", - "h": "47", - "x": "612", - "y": "1500", - "properties": { - "controlName": "100-language-concepts:auto" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "303", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "252", - "measuredH": "25", - "x": "16", - "y": "11", - "properties": { - "size": "17", - "text": "auto (Automatic Type Deduction)" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "290", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4663", - "typeID": "__group__", - "zOrder": "143", - "measuredW": "315", - "measuredH": "47", - "w": "315", - "h": "47", - "x": "612", - "y": "1554", - "properties": { - "controlName": "101-language-concepts:type-casting" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "303", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "100", - "measuredH": "25", - "x": "102", - "y": "11", - "properties": { - "size": "17", - "text": "Type Casting" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "291", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4664", - "typeID": "__group__", - "zOrder": "144", - "measuredW": "164", - "measuredH": "47", - "w": "164", - "h": "47", - "x": "380", - "y": "1535", - "properties": { - "controlName": "101-language-concepts:type-casting:const-cast" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "153", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "45", - "y": "11", - "properties": { - "size": "17", - "text": "const_cast" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4665", - "typeID": "__group__", - "zOrder": "145", - "measuredW": "164", - "measuredH": "47", - "w": "164", - "h": "47", - "x": "380", - "y": "1485", - "properties": { - "controlName": "100-language-concepts:type-casting:static-cast" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "153", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "45", - "y": "11", - "properties": { - "size": "17", - "text": "static_cast" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4666", - "typeID": "__group__", - "zOrder": "146", - "measuredW": "164", - "measuredH": "47", - "w": "164", - "h": "47", - "x": "380", - "y": "1586", - "properties": { - "controlName": "102-language-concepts:type-casting:dynamic-cast" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "153", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "107", - "measuredH": "25", - "x": "34", - "y": "11", - "properties": { - "size": "17", - "text": "dynamic_cast" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4667", - "typeID": "__group__", - "zOrder": "147", - "measuredW": "164", - "measuredH": "47", - "w": "164", - "h": "47", - "x": "380", - "y": "1637", - "properties": { - "controlName": "103-language-concepts:type-casting:reinterpret-cast" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "153", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "125", - "measuredH": "25", - "x": "25", - "y": "11", - "properties": { - "size": "17", - "text": "reinterpret_cast" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4668", - "typeID": "__group__", - "zOrder": "148", - "measuredW": "315", - "measuredH": "47", - "w": "315", - "h": "47", - "x": "612", - "y": "1608", - "properties": { - "controlName": "102-language-concepts:undefined-behavior" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "303", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "194", - "measuredH": "25", - "x": "55", - "y": "11", - "properties": { - "size": "17", - "text": "Undefined Behavior (UB)" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "291", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4669", - "typeID": "__group__", - "zOrder": "149", - "measuredW": "314", - "measuredH": "47", - "w": "314", - "h": "47", - "x": "613", - "y": "1662", - "properties": { - "controlName": "103-language-concepts:adl" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "303", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "276", - "measuredH": "25", - "x": "12", - "y": "11", - "properties": { - "size": "17", - "text": "Argument Dependent Lookup (ADL)" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "290", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4670", - "typeID": "__group__", - "zOrder": "150", - "measuredW": "117", - "measuredH": "47", - "w": "117", - "h": "47", - "x": "810", - "y": "1716", - "properties": { - "controlName": "105-language-concepts:macros" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "105", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "58", - "measuredH": "25", - "x": "23", - "y": "12", - "properties": { - "size": "17", - "text": "Macros" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "93", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4671", - "typeID": "__group__", - "zOrder": "151", - "measuredW": "200", - "measuredH": "47", - "w": "200", - "h": "47", - "x": "602", - "y": "1716", - "properties": { - "controlName": "104-language-concepts:name-mangling" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "189", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "122", - "measuredH": "25", - "x": "45", - "y": "11", - "properties": { - "size": "17", - "text": "Name Mangling" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4672", - "typeID": "Arrow", - "zOrder": "152", - "w": "1", - "h": "299", - "measuredW": "150", - "measuredH": "100", - "x": "1618", - "y": "1748", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.47841726618704994, - "y": -0.001438848920863544 - }, - "p2": { - "x": 0, - "y": 299.33333333333326 - } - } - }, - { - "ID": "4673", - "typeID": "__group__", - "zOrder": "153", - "measuredW": "254", - "measuredH": "50", - "w": "254", - "h": "50", - "x": "1411", - "y": "1867", - "properties": { - "controlName": "110-stl" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "242", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "177", - "measuredH": "25", - "x": "33", - "y": "12", - "properties": { - "size": "17", - "text": "Standard Library + STL" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "230", - "y": "13", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4674", - "typeID": "__group__", - "zOrder": "154", - "measuredW": "156", - "measuredH": "47", - "w": "156", - "h": "47", - "x": "1195", - "y": "1819", - "properties": { - "controlName": "101-stl:iostream" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "150", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "6", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "67", - "measuredH": "25", - "x": "47", - "y": "11", - "properties": { - "size": "17", - "text": "iostream" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4675", - "typeID": "__group__", - "zOrder": "155", - "measuredW": "156", - "measuredH": "47", - "w": "156", - "h": "47", - "x": "1195", - "y": "1869", - "properties": { - "controlName": "103-stl:date-time" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "150", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "6", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "91", - "measuredH": "25", - "x": "35", - "y": "11", - "properties": { - "size": "17", - "text": "Date / Time" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4676", - "typeID": "__group__", - "zOrder": "156", - "measuredW": "157", - "measuredH": "47", - "w": "157", - "h": "47", - "x": "1194", - "y": "1920", - "properties": { - "controlName": "105-stl:ccontainers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "150", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "7", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "39", - "y": "11", - "properties": { - "size": "17", - "text": "Containers" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4677", - "typeID": "__group__", - "zOrder": "157", - "measuredW": "163", - "measuredH": "47", - "w": "163", - "h": "47", - "x": "1032", - "y": "1819", - "properties": { - "controlName": "100-stl:iterators" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "152", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "66", - "measuredW": "66", - "measuredH": "25", - "x": "54", - "y": "11", - "properties": { - "size": "17", - "text": "Iterators" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4678", - "typeID": "__group__", - "zOrder": "158", - "measuredW": "162", - "measuredH": "47", - "w": "162", - "h": "47", - "x": "1033", - "y": "1869", - "properties": { - "controlName": "102-stl:algorithms" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "152", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "81", - "measuredH": "25", - "x": "45", - "y": "11", - "properties": { - "size": "17", - "text": "Algorithms" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4679", - "typeID": "__group__", - "zOrder": "159", - "measuredW": "162", - "measuredH": "47", - "w": "162", - "h": "47", - "x": "1033", - "y": "1919", - "properties": { - "controlName": "104-stl:multithreading" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "152", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "111", - "measuredH": "25", - "x": "30", - "y": "11", - "properties": { - "size": "17", - "text": "Multithreading" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4680", - "typeID": "Arrow", - "zOrder": "160", - "w": "537", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1078", - "y": "2047", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.3738002047268765, - "y": 0 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445598 - }, - "p2": { - "x": 537.0566693370974, - "y": 0 - } - } - }, - { - "ID": "4681", - "typeID": "__group__", - "zOrder": "161", - "measuredW": "230", - "measuredH": "50", - "w": "230", - "h": "50", - "x": "1051", - "y": "2022", - "properties": { - "controlName": "111-templates" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "219", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "80", - "measuredH": "25", - "x": "58", - "y": "12", - "properties": { - "size": "17", - "text": "Templates" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "206", - "y": "13", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4682", - "typeID": "__group__", - "zOrder": "162", - "measuredW": "226", - "measuredH": "47", - "w": "226", - "h": "47", - "x": "700", - "y": "1869", - "properties": { - "controlName": "100-templates:variadic-templates" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "145", - "measuredH": "25", - "x": "45", - "y": "11", - "properties": { - "size": "17", - "text": "Variadic Templates" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4683", - "typeID": "__group__", - "zOrder": "163", - "measuredW": "226", - "measuredH": "47", - "w": "226", - "h": "47", - "x": "700", - "y": "1922", - "properties": { - "controlName": "101-templates:template-specialization" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "182", - "measuredH": "25", - "x": "27", - "y": "11", - "properties": { - "size": "17", - "text": "Template Specialization" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "10", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4684", - "typeID": "__group__", - "zOrder": "164", - "measuredW": "226", - "measuredH": "47", - "w": "226", - "h": "47", - "x": "700", - "y": "1975", - "properties": { - "controlName": "102-templates:type-traits" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "83", - "measuredH": "25", - "x": "76", - "y": "11", - "properties": { - "size": "17", - "text": "Type Traits" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4685", - "typeID": "__group__", - "zOrder": "165", - "measuredW": "226", - "measuredH": "47", - "w": "226", - "h": "47", - "x": "700", - "y": "2028", - "properties": { - "controlName": "103-templates:finae" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "61", - "measuredH": "25", - "x": "87", - "y": "11", - "properties": { - "size": "17", - "text": "SFINAE" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4686", - "typeID": "__group__", - "zOrder": "166", - "measuredW": "282", - "measuredH": "47", - "w": "282", - "h": "47", - "x": "368", - "y": "1875", - "properties": { - "controlName": "100-templates:template-specialization:full" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "273", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "213", - "measuredH": "25", - "x": "45", - "y": "11", - "properties": { - "size": "17", - "text": "Full Template Specialization" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "9", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4687", - "typeID": "__group__", - "zOrder": "167", - "measuredW": "282", - "measuredH": "47", - "w": "282", - "h": "47", - "x": "368", - "y": "1926", - "properties": { - "controlName": "101-templates:template-specialization:partial" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "273", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "235", - "measuredH": "25", - "x": "34", - "y": "11", - "properties": { - "size": "17", - "text": "Partial Template Specialization" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4688", - "typeID": "Arrow", - "zOrder": "168", - "w": "343", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "817", - "y": "2158", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.28965722981035924, - "y": 0 - }, - "p1": { - "x": 0.5094183863981457, - "y": 0.0009010178239445598 - }, - "p2": { - "x": 343.05666933709745, - "y": 0 - } - } - }, - { - "ID": "4689", - "typeID": "__group__", - "zOrder": "169", - "measuredW": "217", - "measuredH": "59", - "w": "217", - "h": "59", - "x": "709", - "y": "2134", - "properties": { - "controlName": "112-idioms" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "9", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "52", - "measuredH": "25", - "x": "83", - "y": "21", - "properties": { - "size": "17", - "text": "Idioms" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "184", - "y": "0", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4690", - "typeID": "__group__", - "zOrder": "170", - "measuredW": "83", - "measuredH": "47", - "w": "83", - "h": "47", - "x": "380", - "y": "2040", - "properties": { - "controlName": "100-idioms:raii" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "74", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "34", - "measuredH": "25", - "x": "28", - "y": "11", - "properties": { - "size": "17", - "text": "RAII" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "10", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4691", - "typeID": "__group__", - "zOrder": "171", - "measuredW": "90", - "measuredH": "47", - "w": "90", - "h": "47", - "x": "464", - "y": "2040", - "properties": { - "controlName": "101-idioms:pimpl" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "85", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "5", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "43", - "measuredH": "25", - "x": "32", - "y": "11", - "properties": { - "size": "17", - "text": "Pimpl" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "10", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4692", - "typeID": "__group__", - "zOrder": "172", - "measuredW": "274", - "measuredH": "47", - "w": "274", - "h": "47", - "x": "380", - "y": "2093", - "properties": { - "controlName": "103-idioms:non-copyable" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "266", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "232", - "measuredH": "25", - "x": "28", - "y": "11", - "properties": { - "size": "17", - "text": "Non-Copyable/Non-Moveable" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4693", - "typeID": "__group__", - "zOrder": "173", - "measuredW": "274", - "measuredH": "47", - "w": "274", - "h": "47", - "x": "380", - "y": "2144", - "properties": { - "controlName": "104-idioms:erase-remove" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "266", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "116", - "measuredH": "25", - "x": "83", - "y": "11", - "properties": { - "size": "17", - "text": "Erase-Remove" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4694", - "typeID": "__group__", - "zOrder": "174", - "measuredW": "274", - "measuredH": "47", - "w": "274", - "h": "47", - "x": "380", - "y": "2196", - "properties": { - "controlName": "105-idioms:copy-swap" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "266", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "117", - "measuredH": "25", - "x": "82", - "y": "11", - "properties": { - "size": "17", - "text": "Copy and Swap" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4695", - "typeID": "__group__", - "zOrder": "175", - "measuredW": "274", - "measuredH": "47", - "w": "274", - "h": "47", - "x": "380", - "y": "2247", - "properties": { - "controlName": "106-idioms:copy-write" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "266", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "107", - "measuredH": "25", - "x": "87", - "y": "11", - "properties": { - "size": "17", - "text": "Copy on Write" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4696", - "typeID": "__group__", - "zOrder": "176", - "measuredW": "100", - "measuredH": "47", - "w": "100", - "h": "47", - "x": "554", - "y": "2040", - "properties": { - "controlName": "102-idioms:crtp" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "94", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "6", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "46", - "measuredH": "25", - "x": "34", - "y": "11", - "properties": { - "size": "17", - "text": "CRTP" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4697", - "typeID": "Arrow", - "zOrder": "177", - "w": "1", - "h": "127", - "measuredW": "150", - "measuredH": "100", - "x": "1159", - "y": "2179", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.3738002047268765, - "y": 0 - }, - "p1": { - "x": 0.5094183863981456, - "y": 0.0009010178239445602 - }, - "p2": { - "x": -0.3738002047268765, - "y": 126.6863074097705 - } - } - }, - { - "ID": "4698", - "typeID": "__group__", - "zOrder": "178", - "measuredW": "228", - "measuredH": "50", - "w": "228", - "h": "50", - "x": "1042", - "y": "2290", - "properties": { - "controlName": "113-standards" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "219", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "78", - "measuredH": "25", - "x": "68", - "y": "12", - "properties": { - "size": "17", - "text": "Standards" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4699", - "typeID": "__group__", - "zOrder": "179", - "measuredW": "158", - "measuredH": "47", - "w": "158", - "h": "47", - "x": "1405", - "y": "2087", - "properties": { - "controlName": "100-standards:cpp11-14" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "150", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "73", - "measuredH": "25", - "x": "38", - "y": "11", - "properties": { - "size": "17", - "text": "C++11/14" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "134", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4700", - "typeID": "__group__", - "zOrder": "180", - "measuredW": "158", - "measuredH": "47", - "w": "158", - "h": "47", - "x": "1405", - "y": "2138", - "properties": { - "controlName": "101-standards:cpp17" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "150", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "50", - "measuredH": "25", - "x": "50", - "y": "11", - "properties": { - "size": "17", - "text": "C++17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "134", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4701", - "typeID": "__group__", - "zOrder": "181", - "measuredW": "158", - "measuredH": "47", - "w": "158", - "h": "47", - "x": "1405", - "y": "2190", - "properties": { - "controlName": "102-standards:cpp20" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "150", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "55", - "measuredH": "25", - "x": "47", - "y": "11", - "properties": { - "size": "17", - "text": "C++20" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "134", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4702", - "typeID": "__group__", - "zOrder": "182", - "measuredW": "158", - "measuredH": "47", - "w": "158", - "h": "47", - "x": "1405", - "y": "2241", - "properties": { - "controlName": "103-standards:newest" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "150", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "58", - "measuredH": "25", - "x": "46", - "y": "11", - "properties": { - "size": "17", - "text": "Newest" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "134", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4703", - "typeID": "__group__", - "zOrder": "183", - "measuredW": "158", - "measuredH": "47", - "w": "158", - "h": "47", - "x": "1405", - "y": "2293", - "properties": { - "controlName": "104-standards:cpp0x" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "150", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "53", - "measuredH": "25", - "x": "46", - "y": "11", - "properties": { - "size": "17", - "text": "C++0x" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "134", - "y": "10", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4704", - "typeID": "TextArea", - "zOrder": "184", - "w": "242", - "h": "46", - "measuredW": "200", - "measuredH": "140", - "x": "1029", - "y": "2380", - "properties": { - "borderColor": "16777215" - } - }, - { - "ID": "4705", - "typeID": "Label", - "zOrder": "185", - "measuredW": "143", - "measuredH": "28", - "x": "1078", - "y": "2389", - "properties": { - "size": "20", - "text": "Language Tools" - } - }, - { - "ID": "4706", - "typeID": "__group__", - "zOrder": "186", - "measuredW": "217", - "measuredH": "59", - "w": "217", - "h": "59", - "x": "1051", - "y": "2465", - "properties": { - "controlName": "114-debuggers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "9", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "86", - "measuredH": "25", - "x": "66", - "y": "21", - "properties": { - "size": "17", - "text": "Debuggers" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "185", - "y": "0", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4707", - "typeID": "__group__", - "zOrder": "187", - "measuredW": "314", - "measuredH": "55", - "w": "314", - "h": "55", - "x": "1333", - "y": "2469", - "properties": { - "controlName": "100-debuggers:debugger-messages" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "310", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "8", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "280", - "measuredW": "280", - "measuredH": "25", - "x": "15", - "y": "19", - "properties": { - "size": "17", - "text": "Understanding Debugger Messages" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "290", - "y": "0", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4708", - "typeID": "__group__", - "zOrder": "188", - "measuredW": "316", - "measuredH": "49", - "w": "316", - "h": "49", - "x": "1333", - "y": "2528", - "properties": { - "controlName": "101-debuggers:debugger-symbols" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "310", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "2", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "153", - "measuredH": "25", - "x": "78", - "y": "13", - "properties": { - "size": "17", - "text": "Debugging Symbols" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "292", - "y": "0", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4709", - "typeID": "__group__", - "zOrder": "189", - "measuredW": "155", - "measuredH": "47", - "w": "155", - "h": "47", - "x": "1322", - "y": "2582", - "properties": { - "controlName": "102-debuggers:win-dbg" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "63", - "measuredH": "25", - "x": "51", - "y": "11", - "properties": { - "size": "17", - "text": "WinDBg" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4710", - "typeID": "__group__", - "zOrder": "190", - "measuredW": "168", - "measuredH": "47", - "w": "168", - "h": "47", - "x": "1482", - "y": "2582", - "properties": { - "controlName": "103-debuggers:gdb" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "161", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "37", - "measuredH": "25", - "x": "62", - "y": "11", - "properties": { - "size": "17", - "text": "GDB" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "144", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4711", - "typeID": "__group__", - "zOrder": "191", - "measuredW": "228", - "measuredH": "50", - "w": "228", - "h": "50", - "x": "700", - "y": "2473", - "properties": { - "controlName": "115-compilers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "78", - "measuredH": "25", - "x": "81", - "y": "12", - "properties": { - "size": "17", - "text": "Compilers" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4712", - "typeID": "__group__", - "zOrder": "192", - "measuredW": "338", - "measuredH": "47", - "w": "338", - "h": "47", - "x": "645", - "y": "2386", - "properties": { - "controlName": "100-compilers:stages" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "327", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "223", - "measuredH": "25", - "x": "63", - "y": "11", - "properties": { - "size": "17", - "text": "Understand Compiler Stages" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "8", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4713", - "typeID": "__group__", - "zOrder": "193", - "measuredW": "359", - "measuredH": "47", - "w": "359", - "h": "47", - "x": "634", - "y": "2549", - "properties": { - "controlName": "101-compilers:features" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "348", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "294", - "measuredH": "25", - "x": "38", - "y": "11", - "properties": { - "size": "17", - "text": "Different Compilers and their Features" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4714", - "typeID": "Label", - "zOrder": "194", - "measuredW": "119", - "measuredH": "25", - "x": "684", - "y": "2608", - "properties": { - "size": "17", - "text": "Clang++/LLVM" - } - }, - { - "ID": "4715", - "typeID": "Label", - "zOrder": "195", - "measuredW": "74", - "measuredH": "25", - "x": "684", - "y": "2637", - "properties": { - "size": "17", - "text": "Intel C++" - } - }, - { - "ID": "4716", - "typeID": "Label", - "zOrder": "196", - "measuredW": "86", - "measuredH": "25", - "x": "684", - "y": "2666", - "properties": { - "size": "17", - "text": "MSVS C++" - } - }, - { - "ID": "4717", - "typeID": "Label", - "zOrder": "197", - "measuredW": "37", - "measuredH": "25", - "x": "684", - "y": "2695", - "properties": { - "size": "17", - "text": "GCC" - } - }, - { - "ID": "4718", - "typeID": "Label", - "zOrder": "198", - "measuredW": "57", - "measuredH": "25", - "x": "684", - "y": "2724", - "properties": { - "size": "17", - "text": "MinGW" - } - }, - { - "ID": "4719", - "typeID": "Arrow", - "zOrder": "199", - "w": "1", - "h": "331", - "measuredW": "150", - "measuredH": "100", - "x": "476", - "y": "2498", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.3738002047268765, - "y": 0 - }, - "p1": { - "x": 0.5094183863981455, - "y": 0.0009010178239445601 - }, - "p2": { - "x": -0.3738002047268765, - "y": 330.8231453094545 - } - } - }, - { - "ID": "4720", - "typeID": "Arrow", - "zOrder": "200", - "w": "1025", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "476", - "y": "2829", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.29177514116184966, - "y": 1 - }, - "p1": { - "x": 0.5094183863981455, - "y": 0.0009010178239445597 - }, - "p2": { - "x": 1025.4781385743524, - "y": 1 - } - } - }, - { - "ID": "4721", - "typeID": "__group__", - "zOrder": "201", - "measuredW": "227", - "measuredH": "50", - "w": "227", - "h": "50", - "x": "1051", - "y": "2805", - "properties": { - "controlName": "116-build-systems" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "107", - "measuredH": "25", - "x": "55", - "y": "12", - "properties": { - "size": "17", - "text": "Build Systems" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "203", - "y": "13", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4722", - "typeID": "__group__", - "zOrder": "202", - "measuredW": "171", - "measuredH": "47", - "w": "171", - "h": "47", - "x": "1079", - "y": "2616", - "properties": { - "controlName": "100-build-systems:cmake" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "161", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "60", - "measuredH": "25", - "x": "51", - "y": "11", - "properties": { - "size": "17", - "text": "CMAKE" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "147", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4723", - "typeID": "__group__", - "zOrder": "203", - "measuredW": "171", - "measuredH": "47", - "w": "171", - "h": "47", - "x": "1079", - "y": "2667", - "properties": { - "controlName": "101-build-systems:makefile" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "161", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "65", - "measuredH": "25", - "x": "48", - "y": "11", - "properties": { - "size": "17", - "text": "Makefile" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "147", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4724", - "typeID": "__group__", - "zOrder": "204", - "measuredW": "171", - "measuredH": "47", - "w": "171", - "h": "47", - "x": "1079", - "y": "2719", - "properties": { - "controlName": "102-build-systems:ninja" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "161", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "41", - "measuredH": "25", - "x": "60", - "y": "11", - "properties": { - "size": "17", - "text": "Ninja" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "147", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4725", - "typeID": "__group__", - "zOrder": "205", - "measuredW": "229", - "measuredH": "50", - "w": "229", - "h": "50", - "x": "1399", - "y": "2805", - "properties": { - "controlName": "117-package-managers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "149", - "measuredH": "25", - "x": "34", - "y": "12", - "properties": { - "size": "17", - "text": "Package Managers" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "205", - "y": "13", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4726", - "typeID": "__group__", - "zOrder": "206", - "measuredW": "108", - "measuredH": "47", - "w": "108", - "h": "47", - "x": "1395", - "y": "2713", - "properties": { - "controlName": "102-package-managers:conan" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "96", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "12", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "51", - "measuredH": "25", - "x": "36", - "y": "11", - "properties": { - "size": "17", - "text": "Conan" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4727", - "typeID": "__group__", - "zOrder": "207", - "measuredW": "107", - "measuredH": "47", - "w": "107", - "h": "47", - "x": "1509", - "y": "2713", - "properties": { - "controlName": "103-package-managers:nuget" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "96", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "51", - "measuredH": "25", - "x": "20", - "y": "11", - "properties": { - "size": "17", - "text": "NuGet" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "83", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4728", - "typeID": "__group__", - "zOrder": "208", - "measuredW": "108", - "measuredH": "47", - "w": "108", - "h": "47", - "x": "1395", - "y": "2662", - "properties": { - "controlName": "100-package-managers:vcpkg" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "96", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "12", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "45", - "measuredH": "25", - "x": "36", - "y": "11", - "properties": { - "size": "17", - "text": "vcpkg" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4729", - "typeID": "__group__", - "zOrder": "209", - "measuredW": "106", - "measuredH": "47", - "w": "106", - "h": "47", - "x": "1509", - "y": "2662", - "properties": { - "controlName": "101-package-managers:spack" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "96", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "48", - "measuredH": "25", - "x": "21", - "y": "11", - "properties": { - "size": "17", - "text": "Spack" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "82", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4730", - "typeID": "__group__", - "zOrder": "210", - "measuredW": "229", - "measuredH": "50", - "w": "229", - "h": "50", - "x": "1399", - "y": "2957", - "properties": { - "controlName": "118-working-with-libs" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "169", - "measuredH": "25", - "x": "24", - "y": "12", - "properties": { - "size": "17", - "text": "Working with Libraries" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "205", - "y": "14", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4731", - "typeID": "__group__", - "zOrder": "211", - "measuredW": "228", - "measuredH": "47", - "w": "228", - "h": "47", - "x": "1399", - "y": "3041", - "properties": { - "controlName": "100-working-with-libs:inclusion" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "126", - "measuredH": "25", - "x": "46", - "y": "11", - "properties": { - "size": "17", - "text": "Library Inclusion" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "204", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4732", - "typeID": "__group__", - "zOrder": "212", - "measuredW": "228", - "measuredH": "47", - "w": "228", - "h": "47", - "x": "1399", - "y": "3092", - "properties": { - "controlName": "101-working-with-libs:licensing" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "217", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "75", - "measuredH": "25", - "x": "71", - "y": "11", - "properties": { - "size": "17", - "text": "Licensing" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "204", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4733", - "typeID": "TextArea", - "zOrder": "213", - "w": "217", - "h": "363", - "measuredW": "200", - "measuredH": "140", - "x": "1051", - "y": "2910" - }, - { - "ID": "4734", - "typeID": "Label", - "zOrder": "214", - "measuredW": "72", - "measuredH": "26", - "x": "1066", - "y": "2924", - "properties": { - "size": "18", - "text": "Libraries" - } - }, - { - "ID": "4735", - "typeID": "__group__", - "zOrder": "215", - "measuredW": "99", - "measuredH": "47", - "w": "99", - "h": "47", - "x": "1054", - "y": "2960", - "properties": { - "controlName": "100-libraries:boost" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "88", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "45", - "measuredH": "25", - "x": "32", - "y": "11", - "properties": { - "size": "17", - "text": "Boost" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4736", - "typeID": "__group__", - "zOrder": "216", - "measuredW": "105", - "measuredH": "47", - "w": "105", - "h": "47", - "x": "1158", - "y": "2960", - "properties": { - "controlName": "101-libraries:open-cv" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "94", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "66", - "measuredH": "25", - "x": "12", - "y": "11", - "properties": { - "size": "17", - "text": "OpenCV" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "81", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4737", - "typeID": "__group__", - "zOrder": "217", - "measuredW": "99", - "measuredH": "47", - "w": "99", - "h": "47", - "x": "1054", - "y": "3011", - "properties": { - "controlName": "102-libraries:poco" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "88", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "49", - "measuredH": "25", - "x": "30", - "y": "11", - "properties": { - "size": "17", - "text": "POCO" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4738", - "typeID": "__group__", - "zOrder": "218", - "measuredW": "105", - "measuredH": "47", - "w": "105", - "h": "47", - "x": "1158", - "y": "3012", - "properties": { - "controlName": "103-libraries:protobuf" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "94", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "65", - "measuredH": "25", - "x": "12", - "y": "11", - "properties": { - "size": "17", - "text": "protobuf" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "81", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4739", - "typeID": "__group__", - "zOrder": "219", - "measuredW": "87", - "measuredH": "47", - "w": "87", - "h": "47", - "x": "1054", - "y": "3062", - "properties": { - "controlName": "104-libraries:grpc" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "76", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "45", - "measuredH": "25", - "x": "26", - "y": "11", - "properties": { - "size": "17", - "text": "gRPC" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4740", - "typeID": "__group__", - "zOrder": "220", - "measuredW": "103", - "measuredH": "47", - "w": "103", - "h": "47", - "x": "1160", - "y": "3164", - "properties": { - "controlName": "109-libraries:fmt" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "92", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "25", - "measuredH": "25", - "x": "40", - "y": "11", - "properties": { - "size": "17", - "text": "fmt" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "79", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4741", - "typeID": "__group__", - "zOrder": "221", - "measuredW": "110", - "measuredH": "47", - "w": "110", - "h": "47", - "x": "1054", - "y": "3113", - "properties": { - "controlName": "106-libraries:pybind11" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "99", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "64", - "measuredH": "25", - "x": "33", - "y": "11", - "properties": { - "size": "17", - "text": "pybind11" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4742", - "typeID": "__group__", - "zOrder": "222", - "measuredW": "94", - "measuredH": "47", - "w": "94", - "h": "47", - "x": "1169", - "y": "3113", - "properties": { - "controlName": "107-libraries:spdlog" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "83", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "52", - "measuredH": "25", - "x": "13", - "y": "11", - "properties": { - "size": "17", - "text": "spdlog" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "70", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4743", - "typeID": "__group__", - "zOrder": "223", - "measuredW": "198", - "measuredH": "47", - "w": "198", - "h": "47", - "x": "1054", - "y": "3216", - "properties": { - "controlName": "110-libraries:ranges-v3" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "187", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "83", - "measuredH": "25", - "x": "63", - "y": "11", - "properties": { - "size": "17", - "text": "ranges_v3" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4744", - "typeID": "__group__", - "zOrder": "224", - "measuredW": "118", - "measuredH": "47", - "w": "118", - "h": "47", - "x": "1145", - "y": "3062", - "properties": { - "controlName": "105-libraries:tensorflow" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "107", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "78", - "measuredH": "25", - "x": "12", - "y": "11", - "properties": { - "size": "17", - "text": "tensorflow" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "94", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4745", - "typeID": "__group__", - "zOrder": "225", - "measuredW": "102", - "measuredH": "47", - "w": "102", - "h": "47", - "x": "1054", - "y": "3164", - "properties": { - "controlName": "108-libraries:opencl" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "91", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "53", - "measuredH": "25", - "x": "31", - "y": "11", - "properties": { - "size": "17", - "text": "opencl" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4746", - "typeID": "TextArea", - "zOrder": "226", - "w": "217", - "h": "324", - "measuredW": "200", - "measuredH": "140", - "x": "710", - "y": "2910" - }, - { - "ID": "4747", - "typeID": "Label", - "zOrder": "227", - "measuredW": "100", - "measuredH": "26", - "x": "725", - "y": "2924", - "properties": { - "size": "18", - "text": "Frameworks" - } - }, - { - "ID": "4748", - "typeID": "__group__", - "zOrder": "228", - "measuredW": "196", - "measuredH": "47", - "w": "196", - "h": "47", - "x": "715", - "y": "2961", - "properties": { - "controlName": "100-frameworks:gtest" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "187", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "97", - "measuredH": "25", - "x": "54", - "y": "11", - "properties": { - "size": "17", - "text": "gtest/gmock" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4749", - "typeID": "__group__", - "zOrder": "229", - "measuredW": "196", - "measuredH": "47", - "w": "196", - "h": "47", - "x": "715", - "y": "3013", - "properties": { - "controlName": "101-frameworks:qt" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "187", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "19", - "measuredH": "25", - "x": "93", - "y": "11", - "properties": { - "size": "17", - "text": "Qt" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "10", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4750", - "typeID": "__group__", - "zOrder": "230", - "measuredW": "196", - "measuredH": "47", - "w": "196", - "h": "47", - "x": "715", - "y": "3065", - "properties": { - "controlName": "102-frameworks:catch2" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "187", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "56", - "measuredH": "25", - "x": "75", - "y": "11", - "properties": { - "size": "17", - "text": "Catch2" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "10", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4751", - "typeID": "__group__", - "zOrder": "231", - "measuredW": "196", - "measuredH": "47", - "w": "196", - "h": "47", - "x": "715", - "y": "3117", - "properties": { - "controlName": "103-frameworks:orbit-profiler" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "187", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "97", - "measuredH": "25", - "x": "54", - "y": "11", - "properties": { - "size": "17", - "text": "Orbit Profiler" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4752", - "typeID": "__group__", - "zOrder": "232", - "measuredW": "196", - "measuredH": "47", - "w": "196", - "h": "47", - "x": "715", - "y": "3169", - "properties": { - "controlName": "104-frameworks:pytorch-cpp" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "187", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "101", - "measuredH": "25", - "x": "52", - "y": "11", - "properties": { - "size": "17", - "text": "PyTorch C++" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4753", - "typeID": "Arrow", - "zOrder": "233", - "w": "1", - "h": "354", - "measuredW": "150", - "measuredH": "100", - "x": "475", - "y": "2982", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.3738002047268765, - "y": 0 - }, - "p1": { - "x": 0.5094183863981455, - "y": 0.0009010178239445601 - }, - "p2": { - "x": -0.3738002047268765, - "y": 353.8988374933642 - } - } - }, - { - "ID": "4754", - "typeID": "Arrow", - "zOrder": "234", - "w": "624", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "475", - "y": "3336", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.29177514116184966, - "y": 1 - }, - "p1": { - "x": 0.5094183863981455, - "y": 0.0009010178239445597 - }, - "p2": { - "x": 624.2630351748503, - "y": 1 - } - } - }, - { - "ID": "4755", - "typeID": "Arrow", - "zOrder": "235", - "w": "1", - "h": "81", - "measuredW": "150", - "measuredH": "100", - "x": "1099", - "y": "3533", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.49999999999999994, - "y": 0 - }, - "p2": { - "x": 0, - "y": 81.09090909090901 - } - } - }, - { - "ID": "4756", - "typeID": "TextArea", - "zOrder": "236", - "w": "420", - "h": "118", - "measuredW": "200", - "measuredH": "140", - "x": "890", - "y": "3447" - }, - { - "ID": "4757", - "typeID": "Label", - "zOrder": "237", - "measuredW": "366", - "measuredH": "25", - "x": "917", - "y": "3466", - "properties": { - "size": "17", - "text": "Continue Learning with following relevant tracks" - } - }, - { - "ID": "4758", - "typeID": "__group__", - "zOrder": "238", - "measuredW": "366", - "measuredH": "44", - "w": "366", - "h": "44", - "x": "917", - "y": "3499", - "properties": { - "controlName": "ext_link:roadmap.sh/backend" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "366", - "h": "44", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "147", - "measuredH": "25", - "x": "109", - "y": "9", - "properties": { - "size": "17", - "text": "Backend Roadmap" - } - } - ] - } - } - }, - { - "ID": "4764", - "typeID": "__group__", - "zOrder": "239", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1239", - "y": "2900", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - }, - { - "ID": "4765", - "typeID": "__group__", - "zOrder": "240", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "893", - "y": "2900", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - }, - { - "ID": "4766", - "typeID": "Arrow", - "zOrder": "241", - "w": "194", - "h": "2", - "measuredW": "150", - "measuredH": "100", - "x": "1003", - "y": "3666", - "properties": { - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "16777215", - "p0": { - "x": 0, - "y": 0.21592451307655836 - }, - "p1": { - "x": 0.473, - "y": -0.01100000000000001 - }, - "p2": { - "x": 193.57438070328567, - "y": 0.21592451307651572 - } - } - }, - { - "ID": "4767", - "typeID": "__group__", - "zOrder": "85", - "measuredW": "420", - "measuredH": "272", - "w": "420", - "h": "272", - "x": "343", - "y": "38", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "420", - "h": "168", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "23", - "y": "23", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "245", - "measuredH": "24", - "x": "59", - "y": "23", - "properties": { - "size": "16", - "text": "Beginner Topics / Start with these" - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "286", - "measuredH": "24", - "x": "60", - "y": "88", - "properties": { - "size": "16", - "text": "Advanced Topics / Pick them in the end" - } - }, - { - "ID": "4", - "typeID": "__group__", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "23", - "y": "88", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "5", - "typeID": "Label", - "zOrder": "5", - "measuredW": "266", - "measuredH": "24", - "x": "59", - "y": "56", - "properties": { - "size": "16", - "text": "Intermediate Topics / Pick them next" - } - }, - { - "ID": "6", - "typeID": "__group__", - "zOrder": "6", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "23", - "y": "55", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - }, - { - "ID": "7", - "typeID": "Canvas", - "zOrder": "7", - "w": "420", - "h": "112", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "160" - }, - { - "ID": "8", - "typeID": "Label", - "zOrder": "8", - "measuredW": "318", - "measuredH": "28", - "x": "27", - "y": "182", - "properties": { - "size": "20", - "text": "References / Additional Resources" - } - }, - { - "ID": "9", - "typeID": "__group__", - "zOrder": "9", - "measuredW": "229", - "measuredH": "27", - "w": "229", - "h": "27", - "x": "29", - "y": "220", - "properties": { - "controlName": "ext_link:salmer.github.io/CppDeveloperRoadmap/" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "196", - "measuredH": "26", - "x": "33", - "y": "0", - "properties": { - "size": "18", - "text": "Salmer’s C++ Roadmap" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "10", - "typeID": "Label", - "zOrder": "10", - "measuredW": "199", - "measuredH": "24", - "x": "60", - "y": "120", - "properties": { - "size": "16", - "text": "Optional / Learn if you want" - } - }, - { - "ID": "11", - "typeID": "__group__", - "zOrder": "11", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "23", - "y": "120", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10066329" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "4768", - "typeID": "__group__", - "zOrder": "84", - "measuredW": "350", - "measuredH": "141", - "w": "350", - "h": "141", - "x": "1297", - "y": "91", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "350", - "h": "141", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "314", - "measuredH": "25", - "x": "14", - "y": "17", - "properties": { - "size": "17", - "text": "Find the detailed version of this roadmap" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "319", - "measuredH": "25", - "x": "14", - "y": "45", - "properties": { - "size": "17", - "text": "along with resources and other roadmaps" - } - }, - { - "ID": "3", - "typeID": "__group__", - "zOrder": "3", - "measuredW": "320", - "measuredH": "45", - "w": "320", - "h": "45", - "x": "15", - "y": "81", - "properties": { - "controlName": "ext_link:roadmap.sh" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "320", - "h": "45", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "borderColor": "4273622", - "color": "4273622" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "181", - "measuredH": "29", - "w": "181", - "h": "29", - "x": "65", - "y": "8", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "105", - "measuredH": "28", - "x": "76", - "y": "0", - "properties": { - "color": "16777215", - "size": "20", - "text": "roadmap.sh" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "45", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "size": "20", - "text": "https" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "5", - "measuredH": "28", - "x": "48", - "y": "0", - "properties": { - "bold": "true", - "color": "16777215", - "size": "20", - "text": ":" - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "10", - "measuredH": "28", - "x": "55", - "y": "1", - "properties": { - "color": "16777215", - "size": "20", - "text": "/" - } - }, - { - "ID": "4", - "typeID": "Label", - "zOrder": "4", - "measuredW": "10", - "measuredH": "28", - "x": "63", - "y": "1", - "properties": { - "color": "16777215", - "size": "20", - "text": "/" - } - } - ] - } - } - } - ] - } - } - } - ] - } - } + { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999" + } + ] + }, + "zIndex": 999, + "width": 351, + "height": 156, + "positionAbsolute": { + "x": -285.20291471146976, + "y": -130.55580566097228 + }, + "dragging": false, + "style": { "width": 351 }, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "x_28LiDVshqWns_aIBsdx", + "type": "subtopic", + "position": { "x": 519.3983385532916, "y": 95.44419433902749 }, + "selected": true, + "data": { + "label": "What is C++?", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 251, + "height": 49, + "style": { "width": 251, "height": 49 }, + "positionAbsolute": { "x": 519.3983385532916, "y": 95.44419433902749 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "tl6VCQ5IEGDVyFcgj7jDm", + "type": "subtopic", + "position": { "x": 520.3137039073808, "y": 149.4441943390275 }, + "selected": true, + "data": { + "label": "Why use C++", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 251, + "height": 49, + "style": { "width": 251, "height": 49 }, + "positionAbsolute": { "x": 520.3137039073808, "y": 149.4441943390275 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "2Ag0t3LPryTF8khHLRfy-", + "type": "subtopic", + "position": { "x": 520.3137039073808, "y": 202.4441943390275 }, + "selected": true, + "data": { + "label": "C vs C++", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 251, + "height": 49, + "style": { "width": 251, "height": 49 }, + "positionAbsolute": { "x": 520.3137039073808, "y": 202.4441943390275 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "Zc_TTzmM36yWsu3GvOy9x", + "type": "topic", + "position": { "x": -281.68629609261916, "y": 282.9441943390275 }, + "selected": true, + "data": { + "label": "Setting up your Environment", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 282, + "height": 49, + "style": { "width": 282, "height": 49 }, + "positionAbsolute": { "x": -281.68629609261916, "y": 282.9441943390275 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "0J_ltQEJh2g28OE2ZEYJj", + "type": "subtopic", + "position": { "x": -281.68629609261916, "y": 364.4441943390275 }, + "selected": true, + "data": { + "label": "Installing C++", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 282, + "height": 49, + "style": { "width": 282, "height": 49 }, + "positionAbsolute": { "x": -281.68629609261916, "y": 364.4441943390275 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "ew0AfyadpXPRO0ZY3Z19k", + "type": "subtopic", + "position": { "x": -281.68629609261916, "y": 417.4441943390275 }, + "selected": true, + "data": { + "label": "Code Editors / IDEs", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 282, + "height": 49, + "style": { "width": 282, "height": 49 }, + "positionAbsolute": { "x": -281.68629609261916, "y": 417.4441943390275 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "SEq0D2Zg5WTsIDtd1hW9f", + "type": "subtopic", + "position": { "x": -281.68629609261916, "y": 470.4441943390275 }, + "selected": true, + "data": { + "label": "Running your First Program", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 282, + "height": 49, + "style": { "width": 282, "height": 49 }, + "positionAbsolute": { "x": -281.68629609261916, "y": 470.4441943390275 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "kl2JI_Wl47c5r8SYzxvCq", + "type": "topic", + "position": { "x": 127.76444711909286, "y": 282.9441943390275 }, + "selected": true, + "data": { + "label": "Basic Operations", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "MwznA4qfpNlv6sqSNjPZi", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { "width": 205, "height": 49 }, + "positionAbsolute": { "x": 127.76444711909286, "y": 282.9441943390275 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "8aOSpZLWwZv_BEYiurhyR", + "type": "subtopic", + "position": { "x": 127.76444711909286, "y": 367.4441943390275 }, + "selected": true, + "data": { + "label": "Arithmetic Operators", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { "width": 205, "height": 49 }, + "positionAbsolute": { "x": 127.76444711909286, "y": 367.4441943390275 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "Y9gq8WkDA_XGe68JkY2UZ", + "type": "subtopic", + "position": { "x": 127.76444711909286, "y": 420.4441943390275 }, + "selected": true, + "data": { + "label": "Logical Operators", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { "width": 205, "height": 49 }, + "positionAbsolute": { "x": 127.76444711909286, "y": 420.4441943390275 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "zE4iPSq2KsrDSByQ0sGK_", + "type": "subtopic", + "position": { "x": 127.76444711909286, "y": 473.4441943390275 }, + "selected": true, + "data": { + "label": "Bitwise Operators", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 205, + "height": 49, + "style": { "width": 205, "height": 49 }, + "positionAbsolute": { "x": 127.76444711909286, "y": 473.4441943390275 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "s5Gs4yF9TPh-psYmtPzks", + "type": "topic", + "position": { "x": 518.9836543599333, "y": 461.1708336969881 }, + "selected": true, + "data": { + "label": "Control Flow & Statements", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "MwznA4qfpNlv6sqSNjPZi", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 251, + "height": 49, + "style": { "width": 251, "height": 49 }, + "positionAbsolute": { "x": 518.9836543599333, "y": 461.1708336969881 }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "_IP_e1K9LhNHilYTDh7L5", + "type": "subtopic", + "position": { "x": 518.9836543599333, "y": 347.2028070104984 }, + "selected": true, + "data": { + "label": "for / while / do while loops", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "bjpFWxiCKGz28E-ukhZBp", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 251, + "height": 49, + "style": { "width": 251, "height": 49 }, + "positionAbsolute": { "x": 518.9836543599333, "y": 347.2028070104984 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "bjpFWxiCKGz28E-ukhZBp", + "type": "subtopic", + "position": { "x": 518.9836543599333, "y": 294.7028070104984 }, + "selected": true, + "data": { + "label": "if else / switch / goto", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 251, + "height": 49, + "style": { "width": 251, "height": 49 }, + "positionAbsolute": { "x": 518.9836543599333, "y": 294.7028070104984 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "oYi3YOc1GC2Nfp71VOkJt", + "type": "topic", + "position": { "x": 517.4836543599333, "y": 569.015602149086 }, + "selected": true, + "data": { + "label": "Functions", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "MwznA4qfpNlv6sqSNjPZi", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 254, + "height": 49, + "style": { "width": 254, "height": 49 }, + "positionAbsolute": { "x": 517.4836543599333, "y": 569.015602149086 }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "obZIxRp0eMWdG7gplNIBc", + "type": "subtopic", + "position": { "x": 518.4590437918661, "y": 765.6954620911321 }, + "selected": true, + "data": { + "label": "Static Polymorphism", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + }, + "oldId": "xjiFBVe-VGqCqWfkPVGKf", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 254, + "height": 49, + "style": { "width": 254, "height": 49 }, + "positionAbsolute": { "x": 518.4590437918661, "y": 765.6954620911321 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "sgfqb22sdN4VRJYkhAVaf", + "type": "subtopic", + "position": { "x": 518.4590437918661, "y": 809.6954620911321 }, + "selected": true, + "data": { + "label": "Function Overloading", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "c" + }, + "oldId": "xjiFBVe-VGqCqWfkPVGKf", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 254, + "height": 49, + "style": { "width": 254, "height": 49 }, + "positionAbsolute": { "x": 518.4590437918661, "y": 809.6954620911321 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "llCBeut_uc9IAe2oi4KZ9", + "type": "subtopic", + "position": { "x": 518.4590437918661, "y": 658.0698136821208 }, + "selected": true, + "data": { + "label": "Operator Overloading", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "c" + }, + "oldId": "xjiFBVe-VGqCqWfkPVGKf", + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 254, + "height": 49, + "style": { "width": 254, "height": 49 }, + "positionAbsolute": { "x": 518.4590437918661, "y": 658.0698136821208 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "xjiFBVe-VGqCqWfkPVGKf", + "type": "subtopic", + "position": { "x": 518.4590437918661, "y": 711.0698136821208 }, + "selected": true, + "data": { + "label": "Lambdas", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "c" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 254, + "height": 49, + "style": { "width": 254, "height": 49 }, + "positionAbsolute": { "x": 518.4590437918661, "y": 711.0698136821208 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "MwznA4qfpNlv6sqSNjPZi", + "type": "topic", + "position": { "x": 128.06739090002304, "y": 569.015602149086 }, + "selected": true, + "data": { + "label": "Data Types", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 213, + "height": 49, + "style": { "width": 213, "height": 49 }, + "positionAbsolute": { "x": 128.06739090002304, "y": 569.015602149086 }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "f1djN0GxoeVPr_0cl6vMq", + "type": "subtopic", + "position": { "x": 128.06739090002304, "y": 656.9515973902295 }, + "selected": true, + "data": { + "label": "Static Typing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 213, + "height": 49, + "style": { "width": 213, "height": 49 }, + "positionAbsolute": { "x": 128.06739090002304, "y": 656.9515973902295 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "i0EAFEUB-F0wBJWOtrl1A", + "type": "subtopic", + "position": { "x": 128.06739090002304, "y": 709.9515973902295 }, + "selected": true, + "data": { + "label": "Dynamic Typing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 213, + "height": 49, + "style": { "width": 213, "height": 49 }, + "positionAbsolute": { "x": 128.06739090002304, "y": 709.9515973902295 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "r0yD1gfn03wTpEBi6zNsu", + "type": "subtopic", + "position": { "x": 128.06739090002304, "y": 783.5772457992408 }, + "selected": true, + "data": { + "label": "RTTI", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 213, + "height": 49, + "style": { "width": 213, "height": 49 }, + "positionAbsolute": { "x": 128.06739090002304, "y": 783.5772457992408 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "DWw8NxkLpIpiOSUaZZ1oA", + "type": "topic", + "position": { "x": -281.9671760495324, "y": 569.015602149086 }, + "selected": true, + "data": { + "label": "Pointers and References", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 236, + "height": 49, + "style": {}, + "positionAbsolute": { "x": -281.9671760495324, "y": 569.015602149086 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "uUzRKa9wGzdUwwmAg3FWr", + "type": "subtopic", + "position": { "x": -284.4671760495324, "y": 661.0205568938326 }, + "selected": true, + "data": { + "label": "References", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 241, + "height": 49, + "style": { "width": 241, "height": 49 }, + "positionAbsolute": { "x": -284.4671760495324, "y": 661.0205568938326 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "mSFwsTYvmg-GwG4_DEIEf", + "type": "subtopic", + "position": { "x": -284.4671760495324, "y": 714.0205568938326 }, + "selected": true, + "data": { + "label": "Memory Model", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 241, + "height": 49, + "style": { "width": 241, "height": 49 }, + "positionAbsolute": { "x": -284.4671760495324, "y": 714.0205568938326 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "9aA_-IfQ9WmbPgwic0mFN", + "type": "subtopic", + "position": { "x": -284.4671760495324, "y": 767.0205568938326 }, + "selected": true, + "data": { + "label": "Lifetime of Objects", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 241, + "height": 50, + "style": { "width": 241, "height": 50 }, + "positionAbsolute": { "x": -284.4671760495324, "y": 767.0205568938326 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "ulvwm4rRPgkpgaqGgyH5a", + "type": "subtopic", + "position": { "x": -275.9671760495324, "y": 834.0632184187253 }, + "selected": true, + "data": { + "label": "Smart Pointers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + } + }, + "zIndex": 999, + "width": 224, + "height": 49, + "style": { "width": 224, "height": 49 }, + "positionAbsolute": { "x": -275.9671760495324, "y": 834.0632184187253 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "vUwSS-uX36OWZouO0wOcy", + "type": "subtopic", + "position": { "x": -275.9671760495324, "y": 887.0632184187253 }, + "selected": true, + "data": { + "label": "weak_ptr", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 224, + "height": 49, + "style": { "width": 224, "height": 49 }, + "positionAbsolute": { "x": -275.9671760495324, "y": 887.0632184187253 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "b5jZIZD_U_CPg-_bdndjz", + "type": "subtopic", + "position": { "x": -275.9671760495324, "y": 940.0632184187253 }, + "selected": true, + "data": { + "label": "shared_ptr", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" } - ] - }, - "attributes": { - "name": "New Wireframe 1 copy", - "order": 1000010.2336643032, - "parentID": null, - "notes": "" - }, - "branchID": "Master", - "resourceID": "D5E1AC09-3023-4145-A52A-4D904363A065", - "mockupH": "3630", - "mockupW": "1325", - "measuredW": "1667", - "measuredH": "3668", - "version": "1.0" - }, - "groupOffset": { - "x": 0, - "y": 0 - }, - "dependencies": [], - "projectID": "file:///Users/kamrify/Desktop/New%20Roadmaps/New%20Project%201.bmpr" -} \ No newline at end of file + }, + "zIndex": 999, + "width": 224, + "height": 49, + "style": { "width": 224, "height": 49 }, + "positionAbsolute": { "x": -275.9671760495324, "y": 940.0632184187253 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "k9c5seRkhgm_yHPpiz2X0", + "type": "subtopic", + "position": { "x": -275.9671760495324, "y": 993.0632184187253 }, + "selected": true, + "data": { + "label": "unique_ptr", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 224, + "height": 49, + "style": { "width": 224, "height": 49 }, + "positionAbsolute": { "x": -275.9671760495324, "y": 993.0632184187253 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "uEGEmbxegATIrvGfobJb9", + "type": "subtopic", + "position": { "x": -275.9671760495324, "y": 1060.9498696738276 }, + "selected": true, + "data": { + "label": "Raw Pointers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + } + }, + "zIndex": 999, + "width": 224, + "height": 49, + "style": { "width": 224, "height": 49 }, + "positionAbsolute": { "x": -275.9671760495324, "y": 1060.9498696738276 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "Gld0nRs0sM8kRe8XmYolu", + "type": "subtopic", + "position": { "x": -275.9671760495324, "y": 1113.9498696738276 }, + "selected": true, + "data": { + "label": "New/Delete Operators", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 224, + "height": 49, + "style": { "width": 224, "height": 49 }, + "positionAbsolute": { "x": -275.9671760495324, "y": 1113.9498696738276 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "6w0WExQ4lGIGgok6Thq0s", + "type": "subtopic", + "position": { "x": -275.9671760495324, "y": 1166.9498696738276 }, + "selected": true, + "data": { + "label": "Memory Leakage", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 224, + "height": 49, + "style": { "width": 224, "height": 49 }, + "positionAbsolute": { "x": -275.9671760495324, "y": 1166.9498696738276 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "Zw2AOTK5uc9BoKEpY7W1C", + "type": "topic", + "position": { "x": 66.99375240505299, "y": 1116.4555450086277 }, + "selected": true, + "data": { + "label": "Structuring Codebase", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 223, + "height": 49, + "style": { "width": 223, "height": 49 }, + "positionAbsolute": { "x": 66.99375240505299, "y": 1116.4555450086277 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "dKCYmxDNZubCVcR5rf8b-", + "type": "subtopic", + "position": { "x": 66.99375240505299, "y": 1025.0759762139076 }, + "selected": true, + "data": { + "label": "Scope", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 223, + "height": 49, + "style": { "width": 223, "height": 49 }, + "positionAbsolute": { "x": 66.99375240505299, "y": 1025.0759762139076 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "iIdC7V8sojwyEqK1xMuHn", + "type": "subtopic", + "position": { "x": 66.99375240505299, "y": 980.0759762139076 }, + "selected": true, + "data": { + "label": "Namespaces", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 223, + "height": 49, + "style": { "width": 223, "height": 49 }, + "positionAbsolute": { "x": 66.99375240505299, "y": 980.0759762139076 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "CK7yf8Bo7kfbV6x2tZTrh", + "type": "subtopic", + "position": { "x": 66.99375240505299, "y": 921.9725710130274 }, + "selected": true, + "data": { + "label": "Headers / CPP Files", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 223, + "height": 49, + "style": { "width": 223, "height": 49 }, + "positionAbsolute": { "x": 66.99375240505299, "y": 921.9725710130274 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "CMlWNQwpywNhO9B6Yj6Me", + "type": "topic", + "position": { "x": 418.86058049826306, "y": 1116.4555450086277 }, + "selected": true, + "data": { + "label": "Structures and Classes", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 236, + "height": 49, + "style": { "width": 236, "height": 49 }, + "positionAbsolute": { "x": 418.86058049826306, "y": 1116.4555450086277 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "7sdEzZCIoarzznwO4XcCv", + "type": "subtopic", + "position": { "x": 486.0885117402935, "y": 1335.826261482708 }, + "selected": true, + "data": { + "label": "Rule of Zero, Five, Three", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WjHpueZDK-d3oDNMVZi9w", + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 284, + "height": 49, + "style": { "width": 284, "height": 49 }, + "positionAbsolute": { "x": 486.0885117402935, "y": 1335.826261482708 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "WjHpueZDK-d3oDNMVZi9w", + "type": "subtopic", + "position": { "x": 539.0885117402935, "y": 1213.538589268166 }, + "selected": true, + "data": { + "label": "Multiple Inheritance", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 231, + "height": 49, + "style": { "width": 231, "height": 49 }, + "positionAbsolute": { "x": 539.0885117402935, "y": 1213.538589268166 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "b3-QYKNcW3LYCNOza3Olf", + "type": "subtopic", + "position": { "x": 468.86058049826306, "y": 1022.9612203434276 }, + "selected": true, + "data": { + "label": "Object Oriented Programming", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 306, + "height": 49, + "style": { "width": 306, "height": 49 }, + "positionAbsolute": { "x": 468.86058049826306, "y": 1022.9612203434276 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "hNBErGNiegLsUJn_vgcOR", + "type": "subtopic", + "position": { "x": 468.86058049826306, "y": 921.9725710130272 }, + "selected": true, + "data": { + "label": "Virtual Methods", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 166, + "height": 49, + "style": { "width": 166, "height": 49 }, + "positionAbsolute": { "x": 468.86058049826306, "y": 921.9725710130272 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "s99ImazcwCgAESxZd8ksa", + "type": "subtopic", + "position": { "x": 626.8605804982631, "y": 921.9725710130272 }, + "selected": true, + "data": { + "label": "Virtual Tables", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 148, + "height": 49, + "style": {}, + "positionAbsolute": { "x": 626.8605804982631, "y": 921.9725710130272 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "7h1VivjCPDwriL7FirtFv", + "type": "subtopic", + "position": { "x": 468.86058049826306, "y": 968.6623554103876 }, + "selected": true, + "data": { + "label": "Dynamic Polymorphism", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 306, + "height": 49, + "style": { "width": 306, "height": 49 }, + "dragging": false, + "positionAbsolute": { "x": 468.86058049826306, "y": 968.6623554103876 }, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "B2SGBENzUMl0SAjG4j91V", + "type": "topic", + "position": { "x": 178.53282395046762, "y": 1286.826261482708 }, + "selected": true, + "data": { + "label": "Exception Handling", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "-6fwJQOfsorgHkoQGp4T3", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 198, + "height": 49, + "style": { "width": 198, "height": 49 }, + "positionAbsolute": { "x": 178.53282395046762, "y": 1286.826261482708 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "oWygnpwHq2poXQMTTSCpl", + "type": "subtopic", + "position": { "x": 178.53282395046762, "y": 1384.826261482708 }, + "selected": true, + "data": { + "label": "Exit Codes", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "NJud5SXBAUZ6Sr78kZ7jx", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 198, + "height": 49, + "style": { "width": 198, "height": 49 }, + "positionAbsolute": { "x": 178.53282395046762, "y": 1384.826261482708 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "NJud5SXBAUZ6Sr78kZ7jx", + "type": "subtopic", + "position": { "x": 180.4684674563091, "y": 1438.7934586483889 }, + "selected": true, + "data": { + "label": "Exceptions", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 198, + "height": 49, + "style": { "width": 198, "height": 49 }, + "positionAbsolute": { "x": 180.4684674563091, "y": 1438.7934586483889 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "y4-P4UNC--rE1vni8HdTn", + "type": "subtopic", + "position": { "x": 180.4684674563091, "y": 1492.7934586483889 }, + "selected": true, + "data": { + "label": "Access Violations", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 198, + "height": 49, + "style": { "width": 198, "height": 49 }, + "positionAbsolute": { "x": 180.4684674563091, "y": 1492.7934586483889 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "-6fwJQOfsorgHkoQGp4T3", + "type": "topic", + "position": { "x": -286.929978402122, "y": 1286.826261482708 }, + "selected": true, + "data": { + "label": "Language Concepts", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 321, + "height": 49, + "style": { "width": 321, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 1286.826261482708 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "CG01PTVgHtjfKvsJkJLGl", + "type": "subtopic", + "position": { "x": -286.929978402122, "y": 1389.7934586483889 }, + "selected": true, + "data": { + "label": "auto (Automatic Type Deduction)", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 321, + "height": 49, + "style": { "width": 321, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 1389.7934586483889 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "PiMhw1oP9-NZEa6I9u4lX", + "type": "subtopic", + "position": { "x": -286.929978402122, "y": 1444.7147615325937 }, + "selected": true, + "data": { + "label": "Type Casting", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 321, + "height": 49, + "style": { "width": 321, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 1444.7147615325937 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "_XB2Imyf23-6AOeoNLhYQ", + "type": "subtopic", + "position": { "x": -278.29496924274974, "y": 1500.2090861977936 }, + "selected": true, + "data": { + "label": "static_cast", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 140, + "height": 49, + "style": { "width": 140, "height": 49 }, + "positionAbsolute": { "x": -278.29496924274974, "y": 1500.2090861977936 }, + "dragging": false, + "resizing": true, + "focusable": true, + "selectable": true + }, + { + "id": "5g22glc97siQOcTkHbwan", + "type": "subtopic", + "position": { "x": -130.52203293340202, "y": 1500.2090861977936 }, + "selected": true, + "data": { + "label": "const_cast", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 155, + "height": 49, + "style": { "width": 155, "height": 49 }, + "positionAbsolute": { "x": -130.52203293340202, "y": 1500.2090861977936 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "4BdFcuQ5KNW94cu2jz-vE", + "type": "subtopic", + "position": { "x": -278.29496924274974, "y": 1553.301140729074 }, + "selected": true, + "data": { + "label": "dynamic_cast", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 140, + "height": 49, + "style": { "width": 140, "height": 49 }, + "positionAbsolute": { "x": -278.29496924274974, "y": 1553.301140729074 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "ZMyFDJrpCauGrY5NZkOwg", + "type": "subtopic", + "position": { "x": -130.52203293340202, "y": 1553.301140729074 }, + "selected": true, + "data": { + "label": "reinterpret_cast", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 155, + "height": 49, + "style": { "width": 155, "height": 49 }, + "positionAbsolute": { "x": -130.52203293340202, "y": 1553.301140729074 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "IDOlquv6jlfecwQoBwkGZ", + "type": "subtopic", + "position": { "x": -286.929978402122, "y": 1618.893819847594 }, + "selected": true, + "data": { + "label": "Undefined Behavior (UB)", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 321, + "height": 49, + "style": { "width": 321, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 1618.893819847594 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "YSWN7nS8vA9nMldSUrZRT", + "type": "subtopic", + "position": { "x": -286.929978402122, "y": 1672.893819847594 }, + "selected": true, + "data": { + "label": "Argument Dependent Lookup (ADL)", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 321, + "height": 49, + "style": { "width": 321, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 1672.893819847594 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "Lt7ss59KZw9Jwqj234jm2", + "type": "subtopic", + "position": { "x": -286.929978402122, "y": 1726.893819847594 }, + "selected": true, + "data": { + "label": "Name Mangling", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 185, + "height": 49, + "style": { "width": 185, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 1726.893819847594 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "zKdlfZTRHwjtmRUGW9z9-", + "type": "subtopic", + "position": { "x": -97.929978402122, "y": 1726.893819847594 }, + "selected": true, + "data": { + "label": "Macros", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "zgW3oGPdbclWTlKJdidiB", + "label": "Advanced Topics / Pick Later", + "color": "#000000", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 132, + "height": 49, + "style": { "width": 132, "height": 49 }, + "positionAbsolute": { "x": -97.929978402122, "y": 1726.893819847594 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "V2SeVMoQJXI2btIHr8e-u", + "type": "vertical", + "position": { "x": 122.76444711909286, "y": 1310.789165472234 }, + "selected": true, + "data": { + "label": "vertical node", + "style": { "stroke": "#2B78E4", "strokeWidth": 3.75 } + }, + "zIndex": 999, + "width": 20, + "height": 365, + "style": { "width": 20, "height": 365 }, + "positionAbsolute": { "x": 122.76444711909286, "y": 1310.789165472234 }, + "dragging": false, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "DHdNBP7_ixjr6h-dIQ7g6", + "type": "topic", + "position": { "x": 93.99375240505299, "y": 1658.893819847594 }, + "selected": true, + "data": { + "label": "Standard Library + STL", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 296, + "height": 49, + "style": { "width": 296, "height": 49 }, + "positionAbsolute": { "x": 93.99375240505299, "y": 1658.893819847594 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "Ebu8gzbyyXEeJryeE0SpG", + "type": "subtopic", + "position": { "x": 93.99375240505299, "y": 1745.4441943390277 }, + "selected": true, + "data": { + "label": "Iterators", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 152, + "height": 49, + "style": { "width": 152, "height": 49 }, + "positionAbsolute": { "x": 93.99375240505299, "y": 1745.4441943390277 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "VeVxZ230xkesQsIDig8zQ", + "type": "subtopic", + "position": { "x": 250.993752405053, "y": 1746.4441943390277 }, + "selected": true, + "data": { + "label": "iostream", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 139, + "height": 49, + "style": { "width": 139, "height": 49 }, + "positionAbsolute": { "x": 250.993752405053, "y": 1746.4441943390277 }, + "dragging": false, + "resizing": true, + "selectable": true, + "focusable": true + }, + { + "id": "whyj6Z4RXFsVQYRfYYn7B", + "type": "subtopic", + "position": { "x": 93.99375240505299, "y": 1798.4441943390277 }, + "selected": true, + "data": { + "label": "Algorithms", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 152, + "height": 49, + "style": { "width": 152, "height": 49 }, + "positionAbsolute": { "x": 93.99375240505299, "y": 1798.4441943390277 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "yGvE6eHKlPMBB6rde0llR", + "type": "subtopic", + "position": { "x": 250.993752405053, "y": 1799.4441943390277 }, + "selected": true, + "data": { + "label": "Date / Time", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 139, + "height": 49, + "style": { "width": 139, "height": 49 }, + "positionAbsolute": { "x": 250.993752405053, "y": 1799.4441943390277 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "OXQUPqxzs1-giAACwl3X1", + "type": "subtopic", + "position": { "x": 93.99375240505299, "y": 1851.4441943390277 }, + "selected": true, + "data": { + "label": "Multithreading", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 152, + "height": 49, + "style": { "width": 152, "height": 49 }, + "positionAbsolute": { "x": 93.99375240505299, "y": 1851.4441943390277 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "1pydf-SR0QUfVNuBEyvzc", + "type": "subtopic", + "position": { "x": 250.993752405053, "y": 1852.4441943390277 }, + "selected": true, + "data": { + "label": "Containers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 139, + "height": 49, + "style": { "width": 139, "height": 49 }, + "positionAbsolute": { "x": 250.993752405053, "y": 1852.4441943390277 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "-6AOrbuOE7DJCmxlcgCay", + "type": "topic", + "position": { "x": 526.0040411704451, "y": 1751.4441943390277 }, + "selected": true, + "data": { + "label": "Templates", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 160, + "height": 49, + "style": { "width": 160, "height": 49 }, + "positionAbsolute": { "x": 526.0040411704451, "y": 1751.4441943390277 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "w4EIf58KP-Pq-yc0HlGxc", + "type": "subtopic", + "position": { "x": 466.39833855329164, "y": 1639.7730008603658 }, + "selected": true, + "data": { + "label": "Variadic Templates", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 302, + "height": 49, + "style": { "width": 302, "height": 49 }, + "positionAbsolute": { "x": 466.39833855329164, "y": 1639.7730008603658 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "sObOuccY0PDeGG-9GrFDF", + "type": "subtopic", + "position": { "x": 466.39833855329164, "y": 1470.7730008603658 }, + "selected": true, + "data": { + "label": "Template Specialization", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "colorType": "h" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 302, + "height": 49, + "style": { "width": 302, "height": 49 }, + "positionAbsolute": { "x": 466.39833855329164, "y": 1470.7730008603658 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "WptReUOwVth3C9-AVmMHF", + "type": "subtopic", + "position": { "x": 466.39833855329164, "y": 1417.117522069225 }, + "selected": true, + "data": { + "label": "Type Traits", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "zgW3oGPdbclWTlKJdidiB", + "label": "Advanced Topics / Pick Later", + "color": "#000000", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 171, + "height": 49, + "style": { "width": 171, "height": 49 }, + "positionAbsolute": { "x": 466.39833855329164, "y": 1417.117522069225 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "3C5UfejDX-1Z8ZF6C53xD", + "type": "subtopic", + "position": { "x": 642.3983385532916, "y": 1417.117522069225 }, + "selected": true, + "data": { + "label": "SFINAE", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "zgW3oGPdbclWTlKJdidiB", + "label": "Advanced Topics / Pick Later", + "color": "#000000", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 128, + "height": 49, + "style": { "width": 128, "height": 49 }, + "positionAbsolute": { "x": 642.3983385532916, "y": 1417.117522069225 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "6hTcmJwNnQstbWWzNCfTe", + "type": "subtopic", + "position": { "x": 478.39833855329164, "y": 1529.9677661061605 }, + "selected": true, + "data": { + "label": "Full Template Specialization", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "1NYJtbdcdOB4-vIrnq4yX", + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 278, + "height": 49, + "style": { "width": 278, "height": 49 }, + "positionAbsolute": { "x": 478.39833855329164, "y": 1529.9677661061605 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "1NYJtbdcdOB4-vIrnq4yX", + "type": "subtopic", + "position": { "x": 477.39833855329164, "y": 1582.9677661061605 }, + "selected": true, + "data": { + "label": "Partial Template Specialization", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 280, + "height": 49, + "style": { "width": 280, "height": 49 }, + "positionAbsolute": { "x": 477.39833855329164, "y": 1582.9677661061605 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "fb3bnfKXjSIjPAk4b95lg", + "type": "topic", + "position": { "x": 526.0040411704451, "y": 2041.110352538959 }, + "selected": true, + "data": { + "label": "Idioms", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "qmHs6_BzND_xpMmls5YUH", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 160, + "height": 49, + "style": { "width": 160, "height": 49 }, + "positionAbsolute": { "x": 526.0040411704451, "y": 2041.110352538959 }, + "dragging": false, + "focusable": true, + "resizing": false, + "selectable": true + }, + { + "id": "xjUaIp8gGxkN-cp8emJ2M", + "type": "subtopic", + "position": { "x": 446.00404117044513, "y": 2138.738988313017 }, + "selected": true, + "data": { + "label": "Non-Copyable / Non-Moveable", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 320, + "height": 49, + "style": { "width": 320, "height": 49 }, + "positionAbsolute": { "x": 446.00404117044513, "y": 2138.738988313017 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "YvmjrZSAOmjhVPo05MJqN", + "type": "subtopic", + "position": { "x": 446.00404117044513, "y": 2191.738988313017 }, + "selected": true, + "data": { + "label": "Erase-Remove", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 320, + "height": 49, + "style": { "width": 320, "height": 49 }, + "resizing": false, + "positionAbsolute": { "x": 446.00404117044513, "y": 2191.738988313017 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "lxAzI42jQdaofzQ5MXebG", + "type": "subtopic", + "position": { "x": 446.00404117044513, "y": 2244.738988313017 }, + "selected": true, + "data": { + "label": "Copy and Swap", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 162, + "height": 49, + "style": { "width": 162, "height": 49 }, + "resizing": false, + "positionAbsolute": { "x": 446.00404117044513, "y": 2244.738988313017 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "O2Du5gHHxFxAI2u5uO8wu", + "type": "subtopic", + "position": { "x": 612.0040411704451, "y": 2244.738988313017 }, + "selected": true, + "data": { + "label": "Copy on Write", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 153, + "height": 49, + "style": { "width": 153, "height": 49 }, + "resizing": false, + "positionAbsolute": { "x": 612.0040411704451, "y": 2244.738988313017 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "OmHDlLxCnH8RDdu5vx9fl", + "type": "subtopic", + "position": { "x": 446.833180361922, "y": 2298.6609277564776 }, + "selected": true, + "data": { + "label": "RAII", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { "width": 100, "height": 49 }, + "positionAbsolute": { "x": 446.833180361922, "y": 2298.6609277564776 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "MEoWt8NKjPLVTeGgYf3cR", + "type": "subtopic", + "position": { "x": 550.333180361922, "y": 2298.6609277564776 }, + "selected": true, + "data": { + "label": "Pimpl", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 109, + "height": 49, + "style": { "width": 109, "height": 49 }, + "positionAbsolute": { "x": 550.333180361922, "y": 2298.6609277564776 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "ttt-yeIi4BPWrgvW324W7", + "type": "subtopic", + "position": { "x": 665.0040411704451, "y": 2298.6609277564776 }, + "selected": true, + "data": { + "label": "CRTP", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": { "width": 100, "height": 49 }, + "positionAbsolute": { "x": 665.0040411704451, "y": 2298.6609277564776 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "vvE1aUsWbF1OFcmMUHbJa", + "type": "topic", + "position": { "x": 227.76444711909286, "y": 2041.110352538959 }, + "selected": true, + "data": { + "label": "Standardds", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "qmHs6_BzND_xpMmls5YUH", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 155, + "height": 49, + "style": { "width": 155, "height": 49 }, + "positionAbsolute": { "x": 227.76444711909286, "y": 2041.110352538959 }, + "dragging": false, + "focusable": true, + "resizing": false, + "selectable": true + }, + { + "id": "T6rCTv9Dxkm-tEA-l9XEv", + "type": "subtopic", + "position": { "x": 227.76444711909286, "y": 1939.0246296702257 }, + "selected": true, + "data": { + "label": "C++ 11 / 14", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 155, + "height": 49, + "style": { "width": 155, "height": 49 }, + "positionAbsolute": { "x": 227.76444711909286, "y": 1939.0246296702257 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "R2-qWGUxsTOeSHRuUzhd2", + "type": "subtopic", + "position": { "x": 227.76444711909286, "y": 2136.9142315942822 }, + "selected": true, + "data": { + "label": "C++ 17", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 155, + "height": 49, + "style": { "width": 155, "height": 49 }, + "positionAbsolute": { "x": 227.76444711909286, "y": 2136.9142315942822 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "o3no4a5_iMFzEAGs56-BJ", + "type": "subtopic", + "position": { "x": 227.76444711909286, "y": 2189.9142315942822 }, + "selected": true, + "data": { + "label": "C++ 20", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 155, + "height": 49, + "style": { "width": 155, "height": 49 }, + "positionAbsolute": { "x": 227.76444711909286, "y": 2189.9142315942822 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "sxbbKtg7kMNbkx7fXhjR9", + "type": "subtopic", + "position": { "x": 227.76444711909286, "y": 2242.9142315942822 }, + "selected": true, + "data": { + "label": "Newest", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "zgW3oGPdbclWTlKJdidiB", + "label": "Advanced Topics / Pick Later", + "color": "#000000", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 155, + "height": 49, + "style": { "width": 155, "height": 49 }, + "positionAbsolute": { "x": 227.76444711909286, "y": 2242.9142315942822 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "PPg0V5EzGBeJsysg1215V", + "type": "subtopic", + "position": { "x": 227.76444711909286, "y": 2295.9142315942822 }, + "selected": true, + "data": { + "label": "C++ 0x", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 155, + "height": 49, + "style": { "width": 155, "height": 49 }, + "positionAbsolute": { "x": 227.76444711909286, "y": 2295.9142315942822 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "qmHs6_BzND_xpMmls5YUH", + "type": "topic", + "position": { "x": -286.929978402122, "y": 2041.110352538959 }, + "selected": true, + "data": { + "label": "Debuggers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 153, + "height": 49, + "style": { "width": 153, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 2041.110352538959 }, + "dragging": false, + "focusable": true, + "resizing": false, + "selectable": true + }, + { + "id": "Kb2Pbz0Sq7YlO1vCwYxnX", + "type": "paragraph", + "position": { "x": -39.10970787732015, "y": 2041.110352538959 }, + "selected": true, + "data": { + "label": "Language Tools", + "style": { + "fontSize": 17, + "borderColor": "#000000", + "backgroundColor": "#ffffff", + "color": "#000000", + "textAlign": "center", + "justifyContent": "center", + "padding": 16 + } + }, + "zIndex": 999, + "width": 168, + "height": 49, + "style": { "width": 168, "height": 49 }, + "resizing": false, + "dragging": false, + "positionAbsolute": { "x": -39.10970787732015, "y": 2041.110352538959 }, + "selectable": true, + "focusable": true + }, + { + "id": "VtPb8-AJKzhTB0QbMtoU4", + "type": "subtopic", + "position": { "x": -288.0831925975956, "y": 1934.0246296702257 }, + "selected": true, + "data": { + "label": "Understanding Debugger Messages", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 328, + "height": 49, + "style": { "width": 328, "height": 49 }, + "positionAbsolute": { "x": -288.0831925975956, "y": 1934.0246296702257 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "sR_FxGZHoMCV9Iv7z2_SX", + "type": "subtopic", + "position": { "x": -288.0831925975956, "y": 1880.9389202464117 }, + "selected": true, + "data": { + "label": "Debugging Symbols", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 328, + "height": 49, + "style": { "width": 328, "height": 49 }, + "positionAbsolute": { "x": -288.0831925975956, "y": 1880.9389202464117 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "y8VCbGDUco9bzGRfIBD8R", + "type": "subtopic", + "position": { "x": -288.0831925975956, "y": 1826.1637109984486 }, + "selected": true, + "data": { + "label": "WinDBg", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 176, + "height": 49, + "style": { "width": 176, "height": 49 }, + "positionAbsolute": { "x": -288.0831925975956, "y": 1826.1637109984486 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "BmWsoL9c_Aag5nVlMsKm2", + "type": "subtopic", + "position": { "x": -106.91368596678642, "y": 1825.2532448559004 }, + "selected": true, + "data": { + "label": "GDB", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 146, + "height": 49, + "style": { "width": 146, "height": 49 }, + "positionAbsolute": { "x": -106.91368596678642, "y": 1825.2532448559004 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "FTMHsUiE8isD_OVZr62Xc", + "type": "topic", + "position": { "x": -286.929978402122, "y": 2165.7752999047043 }, + "selected": true, + "data": { + "label": "Compilers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "h29eJG1hWHa7vMhSqtfV2", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 153, + "height": 49, + "style": { "width": 153, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 2165.7752999047043 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "DVckzBUMgk_lWThVkLyAT", + "type": "subtopic", + "position": { "x": -38.85702534893973, "y": 2138.927677033192 }, + "selected": true, + "data": { + "label": "Compiler Stages", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 235, + "height": 49, + "style": { "width": 235, "height": 49 }, + "positionAbsolute": { "x": -38.85702534893973, "y": 2138.927677033192 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "hSG6Aux39X0cXi6ADy2al", + "type": "subtopic", + "position": { "x": -38.85702534893973, "y": 2191.927677033192 }, + "selected": true, + "data": { + "label": "Compilers and Features", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 235, + "height": 49, + "style": { "width": 235, "height": 49 }, + "positionAbsolute": { "x": -38.85702534893973, "y": 2191.927677033192 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "hurj4ktZD6sDbMg7lz3Dn", + "type": "label", + "position": { "x": -15.825412667929704, "y": 2248.415195613617 }, + "selected": true, + "data": { + "label": "C/lang++ / LLVM", + "href": "", + "color": "#000000", + "style": { "fontSize": 17 } + }, + "zIndex": 999, + "width": 151, + "height": 36, + "style": {}, + "positionAbsolute": { "x": -15.825412667929704, "y": 2248.415195613617 }, + "dragging": false, + "focusable": true, + "selectable": true + }, + { + "id": "hVi9vzLaVfcXhhd7m8-ei", + "type": "label", + "position": { "x": -15.825412667929704, "y": 2285.415195613617 }, + "selected": true, + "data": { + "label": "Intel C++", + "href": "", + "color": "#000000", + "style": { "fontSize": 17 } + }, + "zIndex": 999, + "width": 89, + "height": 36, + "style": {}, + "dragging": false, + "positionAbsolute": { "x": -15.825412667929704, "y": 2285.415195613617 }, + "focusable": true, + "selectable": true + }, + { + "id": "7byy5GiTl4SPpVN39UFbC", + "type": "label", + "position": { "x": -15.825412667929704, "y": 2322.415195613617 }, + "selected": true, + "data": { + "label": "MSVS C++", + "href": "", + "color": "#000000", + "style": { "fontSize": 17 } + }, + "zIndex": 999, + "width": 101, + "height": 36, + "style": {}, + "dragging": false, + "positionAbsolute": { "x": -15.825412667929704, "y": 2322.415195613617 }, + "focusable": true, + "selectable": true + }, + { + "id": "2oTFuzQ6j0AmdAc9U_UwQ", + "type": "label", + "position": { "x": -15.825412667929704, "y": 2359.415195613617 }, + "selected": true, + "data": { + "label": "GCC", + "href": "", + "color": "#000000", + "style": { "fontSize": 17 } + }, + "zIndex": 999, + "width": 53, + "height": 36, + "style": {}, + "dragging": false, + "positionAbsolute": { "x": -15.825412667929704, "y": 2359.415195613617 }, + "focusable": true, + "selectable": true + }, + { + "id": "9DDS861RQhuFgpaR2_KeO", + "type": "label", + "position": { "x": -15.825412667929704, "y": 2396.415195613617 }, + "selected": true, + "data": { + "label": "MinGW", + "href": "", + "color": "#000000", + "style": { "fontSize": 17 } + }, + "zIndex": 999, + "width": 72, + "height": 36, + "style": {}, + "dragging": false, + "positionAbsolute": { "x": -15.825412667929704, "y": 2396.415195613617 }, + "focusable": true, + "selectable": true + }, + { + "id": "jVXFCo6puMxJ_ifn_uwim", + "type": "topic", + "position": { "x": -286.929978402122, "y": 2515.5128020469147 }, + "selected": true, + "data": { + "label": "Build Systems", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "h29eJG1hWHa7vMhSqtfV2", + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 153, + "height": 49, + "style": { "width": 153, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 2515.5128020469147 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "ysnXvSHGBMMozBJyXpHl5", + "type": "subtopic", + "position": { "x": -286.929978402122, "y": 2614.6661606275225 }, + "selected": true, + "data": { + "label": "CMAKE", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 153, + "height": 49, + "style": { "width": 153, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 2614.6661606275225 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "t6rZLH7l8JQm99ax_fEJ9", + "type": "subtopic", + "position": { "x": -286.929978402122, "y": 2667.6661606275225 }, + "selected": true, + "data": { + "label": "Makefile", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 153, + "height": 49, + "style": { "width": 153, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 2667.6661606275225 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "HkUCD5A_M9bJxJRElkK0x", + "type": "subtopic", + "position": { "x": -286.929978402122, "y": 2720.6661606275225 }, + "selected": true, + "data": { + "label": "Ninja", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 153, + "height": 49, + "style": { "width": 153, "height": 49 }, + "positionAbsolute": { "x": -286.929978402122, "y": 2720.6661606275225 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "h29eJG1hWHa7vMhSqtfV2", + "type": "topic", + "position": { "x": -30.235552880907136, "y": 2515.5128020469147 }, + "selected": true, + "data": { + "label": "Package Managers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 210, + "height": 49, + "style": { "width": 210, "height": 49 }, + "positionAbsolute": { "x": -30.235552880907136, "y": 2515.5128020469147 }, + "dragging": false, + "resizing": false, + "focusable": true, + "selectable": true + }, + { + "id": "PKG5pACLfRS2ogfzBX47_", + "type": "subtopic", + "position": { "x": -25.855916380130566, "y": 2608.8378646515134 }, + "selected": true, + "data": { + "label": "vcpkg", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "g0s0F4mLV16eNvMBflN2e", + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 96, + "height": 49, + "style": { "width": 96, "height": 49 }, + "positionAbsolute": { "x": -25.855916380130566, "y": 2608.8378646515134 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "g0s0F4mLV16eNvMBflN2e", + "type": "subtopic", + "position": { "x": 76.76444711909286, "y": 2660.9355066535127 }, + "selected": true, + "data": { + "label": "NuGet", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 103, + "height": 49, + "style": { "width": 103, "height": 49 }, + "positionAbsolute": { "x": 76.76444711909286, "y": 2660.9355066535127 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "ky_UqizToTZHC_b77qFi2", + "type": "subtopic", + "position": { "x": -25.855916380130566, "y": 2661.8378646515134 }, + "selected": true, + "data": { + "label": "Conan", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "PKG5pACLfRS2ogfzBX47_", + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 96, + "height": 49, + "style": { "width": 96, "height": 49 }, + "positionAbsolute": { "x": -25.855916380130566, "y": 2661.8378646515134 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "3ehBc2sKVlPj7dn4RVZCH", + "type": "subtopic", + "position": { "x": 76.76444711909286, "y": 2607.9355066535127 }, + "selected": true, + "data": { + "label": "Spack", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "g0s0F4mLV16eNvMBflN2e", + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 103, + "height": 49, + "style": { "width": 103, "height": 49 }, + "positionAbsolute": { "x": 76.76444711909286, "y": 2607.9355066535127 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "4kkX5g_-plX9zVqr0ZoiR", + "type": "topic", + "position": { "x": 245.31805846187558, "y": 2515.5128020469147 }, + "selected": true, + "data": { + "label": "Working with Libraries", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 221, + "height": 49, + "style": { "width": 221, "height": 49 }, + "positionAbsolute": { "x": 245.31805846187558, "y": 2515.5128020469147 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "5mNqH_AEiLxUmgurNW1Fq", + "type": "subtopic", + "position": { "x": 245.31805846187558, "y": 2432.907835806348 }, + "selected": true, + "data": { + "label": "Library Inclusion", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 221, + "height": 49, + "style": { "width": 221, "height": 49 }, + "positionAbsolute": { "x": 245.31805846187558, "y": 2432.907835806348 }, + "dragging": false, + "resizing": false, + "selectable": true, + "focusable": true + }, + { + "id": "sLVs95EOeHZldoKY0L_dH", + "type": "subtopic", + "position": { "x": 245.31805846187558, "y": 2379.907835806348 }, + "selected": true, + "data": { + "label": "Licensing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "FURC-X3vopFKhZ0F5BdYH", + "color": "#6d7500", + "label": "Beginner Topics / Start here", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 221, + "height": 49, + "style": { "width": 221, "height": 49 }, + "resizing": false, + "positionAbsolute": { "x": 245.31805846187558, "y": 2379.907835806348 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "1d7h5P1Q0RVHryKPVogQy", + "type": "subtopic", + "position": { "x": 543.5766878818748, "y": 2436.6661606275225 }, + "selected": true, + "data": { + "label": "Boost", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 102, + "height": 49, + "style": { "width": 102, "height": 49 }, + "dragging": false, + "positionAbsolute": { "x": 543.5766878818748, "y": 2436.6661606275225 }, + "selectable": true, + "focusable": true, + "resizing": false + }, + { + "id": "Eq3TKSFJ2F2mrTHAaU2J4", + "type": "subtopic", + "position": { "x": 649.5179751445827, "y": 2437.6661606275225 }, + "selected": true, + "data": { + "label": "OpenCV", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 110, + "height": 49, + "style": { "width": 110, "height": 49 }, + "positionAbsolute": { "x": 649.5179751445827, "y": 2437.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "nOkniNXfXwPPlOEJHJoGl", + "type": "subtopic", + "position": { "x": 543.5766878818748, "y": 2489.6661606275225 }, + "selected": true, + "data": { + "label": "POCO", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 102, + "height": 49, + "style": { "width": 102, "height": 49 }, + "positionAbsolute": { "x": 543.5766878818748, "y": 2489.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "jpMCIWQko7p3ndezYHL4D", + "type": "subtopic", + "position": { "x": 543.5766878818748, "y": 2542.6661606275225 }, + "selected": true, + "data": { + "label": "protobuf", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 102, + "height": 49, + "style": { "width": 102, "height": 49 }, + "positionAbsolute": { "x": 543.5766878818748, "y": 2542.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "621J9W4xCofumNZGo4TZT", + "type": "subtopic", + "position": { "x": 543.5766878818748, "y": 2595.6661606275225 }, + "selected": true, + "data": { + "label": "gRPC", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 102, + "height": 49, + "style": { "width": 102, "height": 49 }, + "positionAbsolute": { "x": 543.5766878818748, "y": 2595.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "j_eNHhs0J08Dt7HVbo4Q2", + "type": "subtopic", + "position": { "x": 649.5179751445827, "y": 2490.6661606275225 }, + "selected": true, + "data": { + "label": "Tensorflow", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 110, + "height": 49, + "style": { "width": 110, "height": 49 }, + "positionAbsolute": { "x": 649.5179751445827, "y": 2490.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "tEkvlJPAkD5fji-MMODL7", + "type": "subtopic", + "position": { "x": 649.5179751445827, "y": 2596.6661606275225 }, + "selected": true, + "data": { + "label": "pybind11", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 110, + "height": 49, + "style": { "width": 110, "height": 49 }, + "positionAbsolute": { "x": 649.5179751445827, "y": 2596.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "q64qFxoCrR38RPsN2lC8x", + "type": "subtopic", + "position": { "x": 649.5179751445827, "y": 2543.6661606275225 }, + "selected": true, + "data": { + "label": "spdlog", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 110, + "height": 49, + "style": { "width": 110, "height": 49 }, + "positionAbsolute": { "x": 649.5179751445827, "y": 2543.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "GGZJaYpRENaqloJzt0VtY", + "type": "subtopic", + "position": { "x": 649.5179751445827, "y": 2649.6661606275225 }, + "selected": true, + "data": { + "label": "opencl", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 110, + "height": 49, + "style": { "width": 110, "height": 49 }, + "positionAbsolute": { "x": 649.5179751445827, "y": 2649.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "1CqQgmHDeo1HlPdpUJS7H", + "type": "subtopic", + "position": { "x": 543.5766878818748, "y": 2648.6661606275225 }, + "selected": true, + "data": { + "label": "fmt", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 102, + "height": 49, + "style": { "width": 102, "height": 49 }, + "positionAbsolute": { "x": 543.5766878818748, "y": 2648.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "et-dXKPYuyVW6eV2K3CM8", + "type": "subtopic", + "position": { "x": 543.5766878818748, "y": 2703.6661606275225 }, + "selected": true, + "data": { + "label": "ranges_v3", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 215, + "height": 49, + "style": { "width": 215, "height": 49 }, + "positionAbsolute": { "x": 543.5766878818748, "y": 2703.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "YkaqIkt2bGBsrRwOFQpV4", + "type": "label", + "position": { "x": 609.5766878818748, "y": 2392.9355066535127 }, + "selected": true, + "data": { + "label": "Libraries", + "href": "", + "color": "#000000", + "style": { "fontSize": 17 } + }, + "zIndex": 999, + "width": 83, + "height": 36, + "style": {}, + "positionAbsolute": { "x": 609.5766878818748, "y": 2392.9355066535127 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "MrAM-viRaF8DSxB6sVdD9", + "type": "subtopic", + "position": { "x": 273.5766878818748, "y": 2700.6661606275225 }, + "selected": true, + "data": { + "label": "gtest / gmock", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "88pr5aN7cctZfDVVo-2ns", + "legend": { + "id": "sRAiZODQQ8xrMiVpCdnI7", + "label": "Intermediate Topics / Pick Next", + "color": "#2b78e4", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 169, + "height": 49, + "style": { "width": 169, "height": 49 }, + "positionAbsolute": { "x": 273.5766878818748, "y": 2700.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "gAZ9Dqgj1_UkaLzVgzx1t", + "type": "subtopic", + "position": { "x": 273.5766878818748, "y": 2753.6661606275225 }, + "selected": true, + "data": { + "label": "Qt", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 63, + "height": 49, + "style": {}, + "positionAbsolute": { "x": 273.5766878818748, "y": 2753.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false + }, + { + "id": "s13jQuaC6gw0Lab3Cbyy6", + "type": "subtopic", + "position": { "x": 342.86058049826306, "y": 2753.6661606275225 }, + "selected": true, + "data": { + "label": "Catch2", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 100, + "height": 49, + "style": {}, + "positionAbsolute": { "x": 342.86058049826306, "y": 2753.6661606275225 }, + "selectable": true, + "focusable": true, + "resizing": false, + "dragging": false + }, + { + "id": "O0lVEMTAV1pq9sYCKQvh_", + "type": "subtopic", + "position": { "x": 273.5766878818748, "y": 2806.6661606275225 }, + "selected": true, + "data": { + "label": "Orbit Profiler", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "88pr5aN7cctZfDVVo-2ns", + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 169, + "height": 49, + "style": { "width": 169, "height": 49 }, + "positionAbsolute": { "x": 273.5766878818748, "y": 2806.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "88pr5aN7cctZfDVVo-2ns", + "type": "subtopic", + "position": { "x": 273.5766878818748, "y": 2859.6661606275225 }, + "selected": true, + "data": { + "label": "PyTorch C++", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "WbquXSrbKyKZuwVeLZfnw", + "label": "Optional / Learn if you want", + "color": "#999999", + "position": "left-center" + } + }, + "zIndex": 999, + "width": 169, + "height": 49, + "style": { "width": 169, "height": 49 }, + "positionAbsolute": { "x": 273.5766878818748, "y": 2859.6661606275225 }, + "selectable": true, + "focusable": true, + "dragging": false, + "resizing": false + }, + { + "id": "1Bm9i2IdUeDkWg4ZGEylB", + "type": "label", + "position": { "x": 300.5179751445827, "y": 2919.244194339027 }, + "selected": true, + "data": { + "label": "Frameworks", + "href": "", + "color": "#000000", + "style": { "fontSize": 17 } + }, + "zIndex": 999, + "width": 110, + "height": 36, + "style": {}, + "positionAbsolute": { "x": 300.5179751445827, "y": 2919.244194339027 }, + "dragging": false, + "selectable": true, + "focusable": true + }, + { + "id": "Wm2VPi1Tn_Y7dqPowny69", + "type": "linksgroup", + "position": { "x": -285.20291471146976, "y": 20.444194339027717 }, + "selected": true, + "data": { + "label": "References", + "links": [ + { + "id": "29I4Uf1Z74ihhM4cpfaP7", + "label": "Salmer's C++ Roadmap", + "href": "", + "url": "https://salmer.github.io/CppDeveloperRoadmap/" + } + ] + }, + "zIndex": 999, + "width": 351, + "height": 96, + "positionAbsolute": { "x": -285.20291471146976, "y": 20.444194339027717 }, + "dragging": false, + "selectable": true, + "focusable": true, + "style": { "width": 351, "height": 96 } + } + ], + "edges": [ + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "iogwMmOvub2ZF4zgg6WyF", + "sourceHandle": "x2", + "target": "_hYN0gEi9BL24nptEtXWU", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "id": "XX0I26JoVMVXIe_7bVMix", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "_hYN0gEi9BL24nptEtXWU", + "sourceHandle": "z2", + "target": "idLHBxhvcIqZTqmh_E8Az", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "dFn6kGOoJ-0BzJJEb9DSG", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "_hYN0gEi9BL24nptEtXWU", + "sourceHandle": "z2", + "target": "os3Pa6W9SSNEzgmlBbglQ", + "targetHandle": "y2", + "data": { "edgeStyle": "dashed" }, + "id": "arkF7QJJRbCBYWp0crqa2", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "_hYN0gEi9BL24nptEtXWU", + "sourceHandle": "z2", + "target": "3oInpqvTSSC5_K6i7j8N7", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "HNVw8OboycWKLEtEbG2bn", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "_hYN0gEi9BL24nptEtXWU", + "sourceHandle": "z2", + "target": "YKhuRbcUFzo0hTvuTq-Yl", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "auB7Png72XjmhcLr3IJA7", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "jZ67HhVRelJaxjsCckSSI", + "sourceHandle": "x2", + "target": "hWA7RtuqltMTmHdcCnmES", + "targetHandle": "y1", + "data": { "edgeStyle": "solid" }, + "id": "2aoDIr80lXSJLW1hIGUkb", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "sourceHandle": "z2", + "target": "NMznG9mo2wzNFnjhg990f", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "m-_y7nLeYFkUKGiacxWA0", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "sourceHandle": "z2", + "target": "gc_7cuIO2_joKlQRAPDfX", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "G7pXuJfkyt2nWAOHU8yV0", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "rrrvATyhXqRgJGWI3z0WF", + "sourceHandle": "x2", + "target": "AvbMQ5vY3ip1oX_6Yq4ie", + "targetHandle": "w2", + "data": { "edgeStyle": "dashed" }, + "id": "2_6Yz3-Agx9_rEN5xW86c", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "hWA7RtuqltMTmHdcCnmES", + "sourceHandle": "w2", + "target": "1AJv95mTLpR7L8KBoGym8", + "targetHandle": "x1", + "data": { "edgeStyle": "dashed" }, + "id": "kgMI98fg2-mKMgUs0wnjD", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "hWA7RtuqltMTmHdcCnmES", + "sourceHandle": "y2", + "target": "0etAs56EeBfh_0IlAaSra", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "selected": true, + "id": "ts38Q2ceHs60TJscUBZVE", + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "jZ67HhVRelJaxjsCckSSI", + "sourceHandle": "y2", + "target": "h6ceO0kiBIxNRkPzN3hBY", + "targetHandle": "z1", + "data": { "edgeStyle": "dashed" }, + "id": "ZiMV7umyPdhy3JJDcopR-", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "jZ67HhVRelJaxjsCckSSI", + "sourceHandle": "y2", + "target": "_JlT9oKQ6Yu4UX6l19G8P", + "targetHandle": "z2", + "data": { "edgeStyle": "dashed" }, + "id": "WI-MhbxrehFcVwyGJ5CQJ", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "_hYN0gEi9BL24nptEtXWU", + "sourceHandle": "x2", + "target": "jZ67HhVRelJaxjsCckSSI", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "id": "qUrLBzvXvJOg53HBfjrOI", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Ji35JsKgUQXN4DJGEgTAC", + "sourceHandle": "x2", + "target": "t3Op8UcgDKVeMLNMDePrW", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-Ji35JsKgUQXN4DJGEgTACx2-t3Op8UcgDKVeMLNMDePrWw1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Ji35JsKgUQXN4DJGEgTAC", + "sourceHandle": "x2", + "target": "c2YZ7PPCX1jF_RU7C0AqN", + "targetHandle": "w2", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-Ji35JsKgUQXN4DJGEgTACx2-c2YZ7PPCX1jF_RU7C0AqNw2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "KMA7NkxFbPoUDtFnGBFnj", + "sourceHandle": "x2", + "target": "0vLaVNJaJSHZ_bHli6Qzs", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-KMA7NkxFbPoUDtFnGBFnjx2-0vLaVNJaJSHZ_bHli6Qzsw1", + "selected": true, + "type": "simplebezier", + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "DYkdM_L7T2GcTPAoZNnUR", + "sourceHandle": "x2", + "target": "0vLaVNJaJSHZ_bHli6Qzs", + "targetHandle": "z1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-DYkdM_L7T2GcTPAoZNnURx2-0vLaVNJaJSHZ_bHli6Qzsz1", + "selected": true, + "type": "smoothstep", + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Z-zHIbLBy7cqcDu_QEJIn", + "sourceHandle": "y2", + "target": "WSrbHa0mKIQs33vEJHp15", + "targetHandle": "x2", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-Z-zHIbLBy7cqcDu_QEJIny2-WSrbHa0mKIQs33vEJHp15x2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "NvODRFR0DLINB0RlPSsvt", + "sourceHandle": "z2", + "target": "x_28LiDVshqWns_aIBsdx", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-x_28LiDVshqWns_aIBsdxy1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "NvODRFR0DLINB0RlPSsvt", + "sourceHandle": "z2", + "target": "tl6VCQ5IEGDVyFcgj7jDm", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-tl6VCQ5IEGDVyFcgj7jDmy1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "NvODRFR0DLINB0RlPSsvt", + "sourceHandle": "z2", + "target": "2Ag0t3LPryTF8khHLRfy-", + "targetHandle": "y2", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-NvODRFR0DLINB0RlPSsvtz2-2Ag0t3LPryTF8khHLRfy-y2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "NvODRFR0DLINB0RlPSsvt", + "sourceHandle": "y2", + "target": "Zc_TTzmM36yWsu3GvOy9x", + "targetHandle": "w2", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-NvODRFR0DLINB0RlPSsvty2-Zc_TTzmM36yWsu3GvOy9xw2", + "selected": true, + "type": "smoothstep", + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Zc_TTzmM36yWsu3GvOy9x", + "sourceHandle": "x2", + "target": "0J_ltQEJh2g28OE2ZEYJj", + "targetHandle": "w2", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-Zc_TTzmM36yWsu3GvOy9xx2-0J_ltQEJh2g28OE2ZEYJjw2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Zc_TTzmM36yWsu3GvOy9x", + "sourceHandle": "z2", + "target": "kl2JI_Wl47c5r8SYzxvCq", + "targetHandle": "y1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-Zc_TTzmM36yWsu3GvOy9xz2-MwznA4qfpNlv6sqSNjPZiy1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "kl2JI_Wl47c5r8SYzxvCq", + "sourceHandle": "x2", + "target": "8aOSpZLWwZv_BEYiurhyR", + "targetHandle": "w2", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-MwznA4qfpNlv6sqSNjPZix2-8aOSpZLWwZv_BEYiurhyRw2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "kl2JI_Wl47c5r8SYzxvCq", + "sourceHandle": "z2", + "target": "s5Gs4yF9TPh-psYmtPzks", + "targetHandle": "y1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-kl2JI_Wl47c5r8SYzxvCqz2-MwznA4qfpNlv6sqSNjPZiy1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "s5Gs4yF9TPh-psYmtPzks", + "sourceHandle": "w2", + "target": "_IP_e1K9LhNHilYTDh7L5", + "targetHandle": "x1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-MwznA4qfpNlv6sqSNjPZiw2-_IP_e1K9LhNHilYTDh7L5x1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "s5Gs4yF9TPh-psYmtPzks", + "sourceHandle": "x2", + "target": "oYi3YOc1GC2Nfp71VOkJt", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-s5Gs4yF9TPh-psYmtPzksx2-MwznA4qfpNlv6sqSNjPZiw1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "oYi3YOc1GC2Nfp71VOkJt", + "sourceHandle": "x2", + "target": "llCBeut_uc9IAe2oi4KZ9", + "targetHandle": "w2", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-MwznA4qfpNlv6sqSNjPZix2-llCBeut_uc9IAe2oi4KZ9w2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "oYi3YOc1GC2Nfp71VOkJt", + "sourceHandle": "y2", + "target": "MwznA4qfpNlv6sqSNjPZi", + "targetHandle": "z1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-oYi3YOc1GC2Nfp71VOkJty2-MwznA4qfpNlv6sqSNjPZiz1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "i0EAFEUB-F0wBJWOtrl1A", + "sourceHandle": "x2", + "target": "r0yD1gfn03wTpEBi6zNsu", + "targetHandle": "w2", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-i0EAFEUB-F0wBJWOtrl1Ax2-r0yD1gfn03wTpEBi6zNsuw2", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "MwznA4qfpNlv6sqSNjPZi", + "sourceHandle": "y2", + "target": "DWw8NxkLpIpiOSUaZZ1oA", + "targetHandle": "z1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-MwznA4qfpNlv6sqSNjPZiy2-DWw8NxkLpIpiOSUaZZ1oAz1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "MwznA4qfpNlv6sqSNjPZi", + "sourceHandle": "x2", + "target": "f1djN0GxoeVPr_0cl6vMq", + "targetHandle": "w1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-MwznA4qfpNlv6sqSNjPZix2-f1djN0GxoeVPr_0cl6vMqw1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "DWw8NxkLpIpiOSUaZZ1oA", + "sourceHandle": "x2", + "target": "uUzRKa9wGzdUwwmAg3FWr", + "targetHandle": "w1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-DWw8NxkLpIpiOSUaZZ1oAx2-uUzRKa9wGzdUwwmAg3FWrw1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Zw2AOTK5uc9BoKEpY7W1C", + "sourceHandle": "w2", + "target": "dKCYmxDNZubCVcR5rf8b-", + "targetHandle": "x1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-Zw2AOTK5uc9BoKEpY7W1Cw2-dKCYmxDNZubCVcR5rf8b-x1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Zw2AOTK5uc9BoKEpY7W1C", + "sourceHandle": "z2", + "target": "CMlWNQwpywNhO9B6Yj6Me", + "targetHandle": "y2", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-Zw2AOTK5uc9BoKEpY7W1Cz2-CMlWNQwpywNhO9B6Yj6Mey2", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "CMlWNQwpywNhO9B6Yj6Me", + "sourceHandle": "y2", + "target": "B2SGBENzUMl0SAjG4j91V", + "targetHandle": "w2", + "data": { "edgeStyle": "solid" }, + "selected": true, + "id": "reactflow__edge-CMlWNQwpywNhO9B6Yj6Mey2--6fwJQOfsorgHkoQGp4T3w2", + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "B2SGBENzUMl0SAjG4j91V", + "sourceHandle": "x2", + "target": "oWygnpwHq2poXQMTTSCpl", + "targetHandle": "w1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge--6fwJQOfsorgHkoQGp4T3x2-oWygnpwHq2poXQMTTSCplw1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "B2SGBENzUMl0SAjG4j91V", + "sourceHandle": "y2", + "target": "-6fwJQOfsorgHkoQGp4T3", + "targetHandle": "z1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-B2SGBENzUMl0SAjG4j91Vy2--6fwJQOfsorgHkoQGp4T3z1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "-6fwJQOfsorgHkoQGp4T3", + "sourceHandle": "x2", + "target": "CG01PTVgHtjfKvsJkJLGl", + "targetHandle": "w1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge--6fwJQOfsorgHkoQGp4T3x2-CG01PTVgHtjfKvsJkJLGlw1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "DHdNBP7_ixjr6h-dIQ7g6", + "sourceHandle": "z2", + "target": "-6AOrbuOE7DJCmxlcgCay", + "targetHandle": "y2", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-DHdNBP7_ixjr6h-dIQ7g6z2--6AOrbuOE7DJCmxlcgCayy2", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "-6AOrbuOE7DJCmxlcgCay", + "sourceHandle": "x2", + "target": "fb3bnfKXjSIjPAk4b95lg", + "targetHandle": "w2", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge--6AOrbuOE7DJCmxlcgCayx2-qmHs6_BzND_xpMmls5YUHw2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "fb3bnfKXjSIjPAk4b95lg", + "sourceHandle": "x2", + "target": "xjUaIp8gGxkN-cp8emJ2M", + "targetHandle": "w1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-qmHs6_BzND_xpMmls5YUHx2-xjUaIp8gGxkN-cp8emJ2Mw1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "fb3bnfKXjSIjPAk4b95lg", + "sourceHandle": "y2", + "target": "vvE1aUsWbF1OFcmMUHbJa", + "targetHandle": "z1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-fb3bnfKXjSIjPAk4b95lgy2-qmHs6_BzND_xpMmls5YUHz1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "vvE1aUsWbF1OFcmMUHbJa", + "sourceHandle": "y2", + "target": "Kb2Pbz0Sq7YlO1vCwYxnX", + "targetHandle": "z2", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-vvE1aUsWbF1OFcmMUHbJay2-Kb2Pbz0Sq7YlO1vCwYxnXz2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Kb2Pbz0Sq7YlO1vCwYxnX", + "sourceHandle": "y2", + "target": "qmHs6_BzND_xpMmls5YUH", + "targetHandle": "z2", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-Kb2Pbz0Sq7YlO1vCwYxnXy2-qmHs6_BzND_xpMmls5YUHz2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "vvE1aUsWbF1OFcmMUHbJa", + "sourceHandle": "w2", + "target": "T6rCTv9Dxkm-tEA-l9XEv", + "targetHandle": "x1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-vvE1aUsWbF1OFcmMUHbJaw2-T6rCTv9Dxkm-tEA-l9XEvx1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "vvE1aUsWbF1OFcmMUHbJa", + "sourceHandle": "x2", + "target": "R2-qWGUxsTOeSHRuUzhd2", + "targetHandle": "w1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-vvE1aUsWbF1OFcmMUHbJax2-R2-qWGUxsTOeSHRuUzhd2w1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "qmHs6_BzND_xpMmls5YUH", + "sourceHandle": "x2", + "target": "FTMHsUiE8isD_OVZr62Xc", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-qmHs6_BzND_xpMmls5YUHx2-h29eJG1hWHa7vMhSqtfV2w1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "FTMHsUiE8isD_OVZr62Xc", + "sourceHandle": "z2", + "target": "DVckzBUMgk_lWThVkLyAT", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-h29eJG1hWHa7vMhSqtfV2z2-DVckzBUMgk_lWThVkLyATy1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "FTMHsUiE8isD_OVZr62Xc", + "sourceHandle": "z2", + "target": "hSG6Aux39X0cXi6ADy2al", + "targetHandle": "y1", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-h29eJG1hWHa7vMhSqtfV2z2-hSG6Aux39X0cXi6ADy2aly1", + "selected": true, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "FTMHsUiE8isD_OVZr62Xc", + "sourceHandle": "x2", + "target": "jVXFCo6puMxJ_ifn_uwim", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-FTMHsUiE8isD_OVZr62Xcx2-h29eJG1hWHa7vMhSqtfV2w1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "jVXFCo6puMxJ_ifn_uwim", + "sourceHandle": "x2", + "target": "ysnXvSHGBMMozBJyXpHl5", + "targetHandle": "w2", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-h29eJG1hWHa7vMhSqtfV2x2-ysnXvSHGBMMozBJyXpHl5w2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "jVXFCo6puMxJ_ifn_uwim", + "sourceHandle": "z2", + "target": "h29eJG1hWHa7vMhSqtfV2", + "targetHandle": "y1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-jVXFCo6puMxJ_ifn_uwimz2-h29eJG1hWHa7vMhSqtfV2y1", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "h29eJG1hWHa7vMhSqtfV2", + "sourceHandle": "z2", + "target": "4kkX5g_-plX9zVqr0ZoiR", + "targetHandle": "y2", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-h29eJG1hWHa7vMhSqtfV2z2-4kkX5g_-plX9zVqr0ZoiRy2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "4kkX5g_-plX9zVqr0ZoiR", + "sourceHandle": "w2", + "target": "5mNqH_AEiLxUmgurNW1Fq", + "targetHandle": "x2", + "data": { "edgeStyle": "dashed" }, + "id": "reactflow__edge-4kkX5g_-plX9zVqr0ZoiRw2-5mNqH_AEiLxUmgurNW1Fqx2", + "selected": true, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "4kkX5g_-plX9zVqr0ZoiR", + "sourceHandle": "x2", + "target": "I1aDakZmYpe7pKczou0qC", + "targetHandle": "w1", + "data": { "edgeStyle": "solid" }, + "id": "reactflow__edge-4kkX5g_-plX9zVqr0ZoiRx2-I1aDakZmYpe7pKczou0qCw1", + "selected": true, + "selectable": true, + "focusable": true + } + ] +} diff --git a/src/data/roadmaps/cpp/cpp.md b/src/data/roadmaps/cpp/cpp.md index 4620776fd..69b3f06a9 100644 --- a/src/data/roadmaps/cpp/cpp.md +++ b/src/data/roadmaps/cpp/cpp.md @@ -7,10 +7,11 @@ briefDescription: 'Step by step guide to becoming a C++ Developer in 2025' title: 'C++ Developer Roadmap' description: 'Step by step guide to becoming a C++ developer in 2025' isNew: false +renderer: editor hasTopics: true dimensions: width: 1000 - height: 2639.34 + height: 2975 schema: headline: 'C++ Developer Roadmap' description: 'Learn how to become a C++ Developer with this interactive step by step guide in 2025. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' diff --git a/src/data/roadmaps/cpp/migration-mapping.json b/src/data/roadmaps/cpp/migration-mapping.json new file mode 100644 index 000000000..72584f07b --- /dev/null +++ b/src/data/roadmaps/cpp/migration-mapping.json @@ -0,0 +1,125 @@ +{ + "introduction": "NvODRFR0DLINB0RlPSsvt", + "introduction:what-is-cpp": "x_28LiDVshqWns_aIBsdx", + "introduction:why-cpp": "tl6VCQ5IEGDVyFcgj7jDm", + "introduction:c-vs-cpp": "2Ag0t3LPryTF8khHLRfy-", + "setting-up": "Zc_TTzmM36yWsu3GvOy9x", + "setting-up:installing": "0J_ltQEJh2g28OE2ZEYJj", + "setting-up:code-editors": "ew0AfyadpXPRO0ZY3Z19k", + "setting-up:first-program": "SEq0D2Zg5WTsIDtd1hW9f", + "basic-operations": "kl2JI_Wl47c5r8SYzxvCq", + "basic-operations:arithmetic-operators": "8aOSpZLWwZv_BEYiurhyR", + "basic-operations:logical-operators": "Y9gq8WkDA_XGe68JkY2UZ", + "basic-operations:bitwise": "zE4iPSq2KsrDSByQ0sGK_", + "functions": "oYi3YOc1GC2Nfp71VOkJt", + "functions:lambda": "xjiFBVe-VGqCqWfkPVGKf", + "functions:operators": "llCBeut_uc9IAe2oi4KZ9", + "data-types": "MwznA4qfpNlv6sqSNjPZi", + "data-types:static-typing": "f1djN0GxoeVPr_0cl6vMq", + "data-types:dynamic-typing": "i0EAFEUB-F0wBJWOtrl1A", + "data-types:dynamic-typing:rtti": "r0yD1gfn03wTpEBi6zNsu", + "basic-operations:loops": "_IP_e1K9LhNHilYTDh7L5", + "pointers-and-references": "DWw8NxkLpIpiOSUaZZ1oA", + "pointers-and-references:references": "uUzRKa9wGzdUwwmAg3FWr", + "pointers-and-references:smart-pointers:weak-ptr": "vUwSS-uX36OWZouO0wOcy", + "pointers-and-references:smart-pointers:shared-ptr": "b5jZIZD_U_CPg-_bdndjz", + "pointers-and-references:smart-pointers:uniqe-ptr": "k9c5seRkhgm_yHPpiz2X0", + "pointers-and-references:raw-pointers:memory-leakage": "6w0WExQ4lGIGgok6Thq0s", + "pointers-and-references:raw-pointers:new-delete-operators": "Gld0nRs0sM8kRe8XmYolu", + "pointers-and-references:memory-model": "mSFwsTYvmg-GwG4_DEIEf", + "pointers-and-references:memory-model:object-lifetime": "9aA_-IfQ9WmbPgwic0mFN", + "structuring-codebase": "Zw2AOTK5uc9BoKEpY7W1C", + "structuring-codebase:code-splitting": "CK7yf8Bo7kfbV6x2tZTrh", + "structuring-codebase:code-splitting:forward-declaration": "ZHjU60uzJTezADRhDTESG", + "structuring-codebase:scope": "dKCYmxDNZubCVcR5rf8b-", + "structuring-codebase:scope:namespaces": "iIdC7V8sojwyEqK1xMuHn", + "structures-and-classes": "CMlWNQwpywNhO9B6Yj6Me", + "structures-and-classes:rule-of-zero-five-three": "7sdEzZCIoarzznwO4XcCv", + "structures-and-classes:oop": "b3-QYKNcW3LYCNOza3Olf", + "structures-and-classes:oop:static-polymorphism:overloading-functions": "sgfqb22sdN4VRJYkhAVaf", + "structures-and-classes:oop:static-polymorphism": "obZIxRp0eMWdG7gplNIBc", + "structures-and-classes:oop:dynamic-polymorphism:virtual-methods": "hNBErGNiegLsUJn_vgcOR", + "structures-and-classes:oop:dynamic-polymorphism:virtual-tables": "s99ImazcwCgAESxZd8ksa", + "structures-and-classes:oop:dynamic-polymorphism": "7h1VivjCPDwriL7FirtFv", + "structures-and-classes:multiple-inheritance": "WjHpueZDK-d3oDNMVZi9w", + "structures-and-classes:multiple-inheritance:diamond-inheritance": "ofwdZm05AUqCIWmfgGHk8", + "exception-handling": "B2SGBENzUMl0SAjG4j91V", + "exception-handling:exit-codes": "oWygnpwHq2poXQMTTSCpl", + "exception-handling:exceptions": "NJud5SXBAUZ6Sr78kZ7jx", + "exception-handling:exceptions:access-violations": "y4-P4UNC--rE1vni8HdTn", + "language-concepts": "-6fwJQOfsorgHkoQGp4T3", + "language-concepts:auto": "CG01PTVgHtjfKvsJkJLGl", + "language-concepts:type-casting": "PiMhw1oP9-NZEa6I9u4lX", + "language-concepts:type-casting:static-cast": "_XB2Imyf23-6AOeoNLhYQ", + "language-concepts:type-casting:const-cast": "5g22glc97siQOcTkHbwan", + "language-concepts:type-casting:dynamic-cast": "4BdFcuQ5KNW94cu2jz-vE", + "language-concepts:type-casting:reinterpret-cast": "ZMyFDJrpCauGrY5NZkOwg", + "language-concepts:undefined-behavior": "IDOlquv6jlfecwQoBwkGZ", + "language-concepts:adl": "YSWN7nS8vA9nMldSUrZRT", + "language-concepts:name-mangling": "Lt7ss59KZw9Jwqj234jm2", + "language-concepts:macros": "zKdlfZTRHwjtmRUGW9z9-", + "stl": "DHdNBP7_ixjr6h-dIQ7g6", + "stl:iterators": "Ebu8gzbyyXEeJryeE0SpG", + "stl:iostream": "VeVxZ230xkesQsIDig8zQ", + "stl:algorithms": "whyj6Z4RXFsVQYRfYYn7B", + "stl:date-time": "yGvE6eHKlPMBB6rde0llR", + "stl:multithreading": "OXQUPqxzs1-giAACwl3X1", + "stl:ccontainers": "1pydf-SR0QUfVNuBEyvzc", + "templates": "-6AOrbuOE7DJCmxlcgCay", + "templates:variadic-templates": "w4EIf58KP-Pq-yc0HlGxc", + "templates:template-specialization": "sObOuccY0PDeGG-9GrFDF", + "templates:template-specialization:full": "6hTcmJwNnQstbWWzNCfTe", + "templates:template-specialization:partial": "1NYJtbdcdOB4-vIrnq4yX", + "templates:type-traits": "WptReUOwVth3C9-AVmMHF", + "templates:finae": "3C5UfejDX-1Z8ZF6C53xD", + "idioms": "fb3bnfKXjSIjPAk4b95lg", + "idioms:raii": "OmHDlLxCnH8RDdu5vx9fl", + "idioms:pimpl": "MEoWt8NKjPLVTeGgYf3cR", + "idioms:crtp": "ttt-yeIi4BPWrgvW324W7", + "idioms:non-copyable": "xjUaIp8gGxkN-cp8emJ2M", + "idioms:erase-remove": "YvmjrZSAOmjhVPo05MJqN", + "idioms:copy-swap": "lxAzI42jQdaofzQ5MXebG", + "idioms:copy-write": "O2Du5gHHxFxAI2u5uO8wu", + "standards": "vvE1aUsWbF1OFcmMUHbJa", + "standards:cpp11-14": "T6rCTv9Dxkm-tEA-l9XEv", + "standards:cpp17": "R2-qWGUxsTOeSHRuUzhd2", + "standards:cpp20": "o3no4a5_iMFzEAGs56-BJ", + "standards:newest": "sxbbKtg7kMNbkx7fXhjR9", + "standards:cpp0x": "PPg0V5EzGBeJsysg1215V", + "debuggers": "qmHs6_BzND_xpMmls5YUH", + "debuggers:debugger-messages": "VtPb8-AJKzhTB0QbMtoU4", + "debuggers:debugger-symbols": "sR_FxGZHoMCV9Iv7z2_SX", + "debuggers:win-dbg": "y8VCbGDUco9bzGRfIBD8R", + "debuggers:gdb": "BmWsoL9c_Aag5nVlMsKm2", + "compilers": "FTMHsUiE8isD_OVZr62Xc", + "compilers:stages": "DVckzBUMgk_lWThVkLyAT", + "compilers:features": "hSG6Aux39X0cXi6ADy2al", + "build-systems": "jVXFCo6puMxJ_ifn_uwim", + "build-systems:cmake": "ysnXvSHGBMMozBJyXpHl5", + "build-systems:makefile": "t6rZLH7l8JQm99ax_fEJ9", + "build-systems:ninja": "HkUCD5A_M9bJxJRElkK0x", + "package-managers": "h29eJG1hWHa7vMhSqtfV2", + "package-managers:vcpkg": "PKG5pACLfRS2ogfzBX47_", + "package-managers:spack": "3ehBc2sKVlPj7dn4RVZCH", + "package-managers:conan": "ky_UqizToTZHC_b77qFi2", + "package-managers:nuget": "g0s0F4mLV16eNvMBflN2e", + "working-with-libs": "4kkX5g_-plX9zVqr0ZoiR", + "working-with-libs:inclusion": "5mNqH_AEiLxUmgurNW1Fq", + "working-with-libs:licensing": "sLVs95EOeHZldoKY0L_dH", + "libraries:boost": "1d7h5P1Q0RVHryKPVogQy", + "libraries:open-cv": "Eq3TKSFJ2F2mrTHAaU2J4", + "libraries:poco": "nOkniNXfXwPPlOEJHJoGl", + "libraries:protobuf": "jpMCIWQko7p3ndezYHL4D", + "libraries:grpc": "621J9W4xCofumNZGo4TZT", + "libraries:tensorflow": "j_eNHhs0J08Dt7HVbo4Q2", + "libraries:pybind11": "tEkvlJPAkD5fji-MMODL7", + "libraries:spdlog": "q64qFxoCrR38RPsN2lC8x", + "libraries:fmt": "1CqQgmHDeo1HlPdpUJS7H", + "libraries:opencl": "GGZJaYpRENaqloJzt0VtY", + "libraries:ranges-v3": "et-dXKPYuyVW6eV2K3CM8", + "frameworks:gtest": "MrAM-viRaF8DSxB6sVdD9", + "frameworks:qt": "gAZ9Dqgj1_UkaLzVgzx1t", + "frameworks:catch2": "s13jQuaC6gw0Lab3Cbyy6", + "frameworks:orbit-profiler": "O0lVEMTAV1pq9sYCKQvh_", + "frameworks:pytorch-cpp": "88pr5aN7cctZfDVVo-2ns" +} \ No newline at end of file diff --git a/src/data/roadmaps/cyber-security/content/brute-force-vs-password-spray@Q0i-plPQkb_NIvOQBVaDd.md b/src/data/roadmaps/cyber-security/content/brute-force-vs-password-spray@Q0i-plPQkb_NIvOQBVaDd.md index 77b42166c..effcb605e 100644 --- a/src/data/roadmaps/cyber-security/content/brute-force-vs-password-spray@Q0i-plPQkb_NIvOQBVaDd.md +++ b/src/data/roadmaps/cyber-security/content/brute-force-vs-password-spray@Q0i-plPQkb_NIvOQBVaDd.md @@ -11,5 +11,5 @@ Password Spray is a more targeted and stealthy method of password cracking where Visit the following resources to learn more: - [@article@Brute force vs. Password Spray attack](https://www.inspark.nl/brute-force-vs-password-spray-attack-in-azure-sentinel/) -- [@article@What is password praying?](https://www.techtarget.com/whatis/definition/password-spraying) +- [@article@What is password spraying?](https://www.techtarget.com/whatis/definition/password-spraying) - [@article@What is a brute force attack?](https://www.fortinet.com/resources/cyberglossary/brute-force-attack) diff --git a/src/data/roadmaps/devops/content/bash@syBIAL1mHbJLnTBoSxXI7.md b/src/data/roadmaps/devops/content/bash@syBIAL1mHbJLnTBoSxXI7.md index 2f08b19c4..9d7403f7e 100644 --- a/src/data/roadmaps/devops/content/bash@syBIAL1mHbJLnTBoSxXI7.md +++ b/src/data/roadmaps/devops/content/bash@syBIAL1mHbJLnTBoSxXI7.md @@ -5,7 +5,6 @@ Bash (Bourne Again Shell) is a powerful Unix shell and command language interpre Visit the following resources to learn more: - [@article@Interactive Shell Scripting Tutorial](https://www.learnshell.org/en/Welcome) -- [@article@Bash Scripting Tutorial](https://www.javatpoint.com/bash) - [@video@Bash in 100 Seconds](https://www.youtube.com/watch?v=I4EWvMFj37g) - [@course@Bash Scripting Tutorial for Beginners](https://www.youtube.com/watch?v=tK9Oc6AEnR4) - [@feed@Explore top posts about Bash](https://app.daily.dev/tags/bash?ref=roadmapsh) diff --git a/src/data/roadmaps/devops/content/operating-system@qe84v529VbCyydl0BKFk2.md b/src/data/roadmaps/devops/content/operating-system@qe84v529VbCyydl0BKFk2.md index 52d44ec6f..1caad0df3 100644 --- a/src/data/roadmaps/devops/content/operating-system@qe84v529VbCyydl0BKFk2.md +++ b/src/data/roadmaps/devops/content/operating-system@qe84v529VbCyydl0BKFk2.md @@ -5,7 +5,6 @@ Operating systems (OS) are fundamental software that manage computer hardware an Visit the following resources to learn more: - [@article@Operating Systems - Wiki](https://en.wikipedia.org/wiki/Operating_system) -- [@article@All you need to know about OS.](https://www.javatpoint.com/operating-system) - [@article@Learn Operating Systems](https://www.tutorialspoint.com/operating_system/os_overview.htm) - [@video@What are Operating Systems?](https://www.youtube.com/watch?v=pVzRTmdd9j0) - [@video@Operating Systems](https://www.youtube.com/watch?v=vBURTt97EkA&list=PLBlnK6fEyqRiVhbXDGLXDk_OQAeuVcp2O) diff --git a/src/data/roadmaps/devops/devops-beginner.json b/src/data/roadmaps/devops/devops-beginner.json index 77a3afd4b..0fad5d11f 100644 --- a/src/data/roadmaps/devops/devops-beginner.json +++ b/src/data/roadmaps/devops/devops-beginner.json @@ -445,7 +445,7 @@ }, "selected": true, "data": { - "label": "DevOps is all about bringing developers and operations teams together to improve software delivery. They key focus areas are automation, infrastructure and monitoring.", + "label": "DevOps is all about bringing developers and operations teams together to improve software delivery. The key focus areas are automation, infrastructure and monitoring.", "style": { "fontSize": 17, "borderColor": "transparent", @@ -2131,4 +2131,4 @@ "focusable": true } ] -} \ No newline at end of file +} diff --git a/src/data/roadmaps/engineering-manager/content/agile-methodologies@n9gvPHn4c1U-l6v-W9v6r.md b/src/data/roadmaps/engineering-manager/content/agile-methodologies@n9gvPHn4c1U-l6v-W9v6r.md index 6bb5e8571..8f3d2c977 100644 --- a/src/data/roadmaps/engineering-manager/content/agile-methodologies@n9gvPHn4c1U-l6v-W9v6r.md +++ b/src/data/roadmaps/engineering-manager/content/agile-methodologies@n9gvPHn4c1U-l6v-W9v6r.md @@ -4,4 +4,8 @@ An Engineering Manager ensures smooth implementation of Agile methodologies with The Engineering Manager faces the challenge of maintaining an Agile mindset even when facing pressures to deliver. They have to ensure team members are motivated, engaged, and productive. This can be handled by adopting feedback-friendly culture and regular knowledge-sharing sessions. -Skills required for an Engineering Manager in handling Agile methodologies include strong leadership, excellent communication, and proficiency in risk management. The manager has to balance the opposing needs of flexibility and stability, always keeping customer satisfaction in perspective. \ No newline at end of file +Skills required for an Engineering Manager in handling Agile methodologies include strong leadership, excellent communication, and proficiency in risk management. The manager has to balance the opposing needs of flexibility and stability, always keeping customer satisfaction in perspective. + +Visit the following resources to learn more: + +- [@official@Scrum Guide](https://scrumguides.org/) diff --git a/src/data/roadmaps/engineering-manager/content/what-is-engineering-management@_hYN0gEi9BL24nptEtXWU.md b/src/data/roadmaps/engineering-manager/content/what-is-engineering-management@_hYN0gEi9BL24nptEtXWU.md index ffa4549f3..712b0b7c6 100644 --- a/src/data/roadmaps/engineering-manager/content/what-is-engineering-management@_hYN0gEi9BL24nptEtXWU.md +++ b/src/data/roadmaps/engineering-manager/content/what-is-engineering-management@_hYN0gEi9BL24nptEtXWU.md @@ -4,4 +4,5 @@ Engineering management is the integration of engineering principles with busines Learn more from the following resources: -- [@article@Engineering Management Resources](https://github.com/engineering-management/awesome-engineering-management) \ No newline at end of file +- [@article@Engineering Management Resources](https://github.com/engineering-management/awesome-engineering-management) +- [@article@Software Engineering at Google: The Engineering Manager](https://abseil.io/resources/swe-book/html/ch05.html#the_engineering_manager) diff --git a/src/data/roadmaps/flutter/content/100-dart-basics/index.md b/src/data/roadmaps/flutter/content/100-dart-basics/index.md index 3dc00eb50..c802d56be 100644 --- a/src/data/roadmaps/flutter/content/100-dart-basics/index.md +++ b/src/data/roadmaps/flutter/content/100-dart-basics/index.md @@ -5,7 +5,6 @@ Dart is an open-source, general-purpose, object-oriented programming language wi Visit the following resources to learn more: - [@official@Dart Overview](https://dart.dev/overview) -- [@article@What is Dart Programming?](https://www.javatpoint.com/flutter-dart-programming) - [@video@What is Dart?](https://www.youtube.com/watch?v=sOSd6G1qXoY) - [@video@Dart in 100 Seconds](https://www.youtube.com/watch?v=NrO0CJCbYLA) - [@feed@Explore top posts about Dart](https://app.daily.dev/tags/dart?ref=roadmapsh) diff --git a/src/data/roadmaps/full-stack/content/basic-aws-services@cUOfvOlQ_0Uu1VX3i67kJ.md b/src/data/roadmaps/full-stack/content/basic-aws-services@cUOfvOlQ_0Uu1VX3i67kJ.md index 1ee88fca0..439294a57 100644 --- a/src/data/roadmaps/full-stack/content/basic-aws-services@cUOfvOlQ_0Uu1VX3i67kJ.md +++ b/src/data/roadmaps/full-stack/content/basic-aws-services@cUOfvOlQ_0Uu1VX3i67kJ.md @@ -1,6 +1,6 @@ # Basic AWS Services -AWS has several services but you don't need to know all of them. Some common ones that you can start with are EC2, VPN, S3, Route 53, and SES. +AWS has several services but you don't need to know all of them. Some common ones that you can start with are EC2, VPC, S3, Route 53, and SES. Here are some of the resources to get you started: diff --git a/src/data/roadmaps/game-developer/content/infinite@sC3omOmL2DOyTSvET5cDa.md b/src/data/roadmaps/game-developer/content/infinite@sC3omOmL2DOyTSvET5cDa.md index e69de29bb..5bb59e34b 100644 --- a/src/data/roadmaps/game-developer/content/infinite@sC3omOmL2DOyTSvET5cDa.md +++ b/src/data/roadmaps/game-developer/content/infinite@sC3omOmL2DOyTSvET5cDa.md @@ -0,0 +1,9 @@ +# Infinite + +Infinite refers to concept that deals with rendering scenes or objects that extend beyond the visible boundaries of the screen. This is crucial for creating immersive environments, as it allows developers to simulate vast landscapes or endless spaces without the need to render every detail at once. Techniques such as level of detail (LOD), culling, and procedural generation are often employed to manage performance while maintaining the illusion of infinity. + +Visit the following resources to learn more: + +- [@article@Unlocking Infinite Worlds In Gaming](https://sdlccorp.com/post/procedural-generation-unlocking-infinite-worlds-in-gaming/) +- [@article@Creating Infinite Game Worlds](https://medium.com/@lemapp09/beginning-game-development-creating-infinite-game-worlds-56f8a2ad5ae5) + diff --git a/src/data/roadmaps/golang/faqs.astro b/src/data/roadmaps/golang/faqs.astro index e69de29bb..8fa77cfaa 100644 --- a/src/data/roadmaps/golang/faqs.astro +++ b/src/data/roadmaps/golang/faqs.astro @@ -0,0 +1,111 @@ +--- +import type { FAQType } from '../../components/FAQs/FAQs.astro'; + +export const faqs: FAQType[] = [ + { + question: 'Do Go and Golang refer to the same language?', + answer: [ + 'Go and Golang refer to the same programming language, yes. Although the official name is Go, the term Golang has become a popular nickname since the language was created back in 2009.', + 'That said, both terms are used interchangeably in the industry, and developers around the world recognize them as representing the same open-source programming language that emphasizes efficiency, scalability, and simplicity.', + 'Also, it doesn\'t hurt to have a longer, less common word when it comes to trying to find information online about the language (as you can probably guess, searching for "go" would not return the most relevant results immediately).', + ], + }, + { + question: 'Is Go difficult to learn?', + answer: [ + 'Go is not difficult to learn, in fact, by design it was built with simplicity in mind, featuring a minimalistic and clear syntax that reduces the learning curve.', + 'Its mature and extensive standard library and built-in garbage collector contribute to making the language accessible to developers regardless of their skill levels. Although every new programming language requires some adjustment, many find that Go is less challenging to learn compared to more complex alternatives.', + 'Of course, all of that changes if you\'re coming into the language without any prior programming knowledge, in that case, you have to learn Go, and other core programming concepts like memory access, data structures, etc. In this scenario, the difficulty would increase considerably.', + ], + }, + { + question: 'Is Golang good for beginners?', + answer: [ + 'Golang is good for beginners, in fact, it\'s considered to be an excellent starting point for those who are entering the world of software development.', + 'Its straightforward syntax and robust standard library provide a clear framework that allows new programmers to focus on understanding essential coding concepts without being overwhelmed by unnecessary complexity.', + 'The language is designed to help developers quickly understand how to use it, and this makes Golang an attractive option for those new to programming, as it balances ease of learning with the potential for working on advanced projects.', + 'Finally, the existing resources, including tutorials, documentation, and community forums, provide support for beginners in their journey toward becoming skilled Go developers.', + ], + }, + { + question: 'Is it still worth learning Go?', + answer: [ + 'Learning Go is still very much worth your time, especially if you\'re interested in building efficient and scalable services.', + 'The language\'s growing adoption (going from barely 10% of professional usage in 2021 according to StackOverflow\'s survey, to almost 15% in 2024), especially around building scalable backend services, microservices, and performance systems proves that Go is not only still relevant but that its relevance in the industry is in continuous growth.', + ], + }, + { + question: 'Is Golang backend or frontend?', + answer: [ + 'Golang is a backend language designed for building server-side applications and services. Its strengths lie in efficiently handling concurrent operations and high-throughput workloads, making it an excellent choice for developing APIs, microservices, and scalable systems.', + 'While Golang is not typically used for frontend development, its role in creating reliable and performance backend services is crucial for supporting full-stack projects. And while not considered a "core" technology for web development, there are Golang frameworks such as Iris or Beego that allow developers to create fullstack apps.', + 'That said, to increase the gap and prove that Go is a backend language, its design focuses on resource management and robust support for network operations, which are essential for ensuring that backend services perform well under heavy loads.', + ], + }, + { + question: 'Is Golang developer a high-paying role?', + answer: [ + 'Golang developer is a very high-paying role when compared to others, such as JavaScript devs for example.', + 'The role of a Golang developer is often associated with competitive salaries due to its efficiency and scalability, which are highly valued in large enterprise projects.', + 'As businesses continue to invest in backend services and platform development, the need for skilled Golang developers grows. This demand is reflected in the career prospects and remuneration offered in this field, making it a lucrative option for software engineers who specialize in the Go language and its modern development practices.', + 'According to Glassdor, an entry-level Go developer role in the United States pays on average 90,000 USD, and it can go up to 200,000 USD for developers with more than 10 years of experience.', + ], + }, + { + question: 'Is Golang used in AI?', + answer: [ + 'Golang is not used in AI as much as other languages such as Python. While it is not the primary language used in artificial intelligence, it does have applications within the AI ecosystem.', + 'Python remains the dominant language in AI and machine learning due to its extensive libraries and frameworks that are specifically designed for data science. However, Golang is sometimes employed to build performance backends that support AI applications.', + 'Its efficient execution, concurrency model, and built-in garbage collection make it suitable for developing projects that require rapid processing and robust performance.', + 'In this way, while Golang is not part of the main AI stack, it can still serve as a critical component in a larger AI architecture, handling tasks that demand scalability and efficient resource management.', + ], + }, + { + question: 'Is Golang better than Python?', + answer: [ + 'Golang is not intrinsically better than Python, just like any other language is not better than any available alternative. This is because when we\'re comparing programming languages, we need to add context to that comparison to understand how those languages are going to be used, what systems are they going to be running in, and many other questions that you need to ask before emitting judgment.', + 'That said, if we\'re trying to compare apples to apples, then we gotta think that comparing Golang and Python involves evaluating the specific strengths and applications of each language.', + 'Golang is designed for efficiency, concurrency, and robust system-level programming, making it ideal for building scalable backend services and high-efficiency tools. Its straightforward syntax and built-in features enable developers to create optimized applications. Python, on the other hand, excels in rapid prototyping, data science, and machine learning, thanks to its extensive libraries and ease of use for complex analytical tasks.', + 'The decision on whether Golang is better than Python depends on the project requirements (that "context" we mentioned before): Go may be preferable for building concurrent, performant services, while Python is often chosen for its flexibility in scientific computing and AI development.', + ], + }, + { + question: 'Is Go better than JavaScript?', + answer: [ + 'Go outperforms JavaScript in terms of execution efficiency, but the two languages generally serve distinct purposes, making a direct comparison difficult.', + 'Go is tailored for backend work, where its focus on performance, concurrency, and scalability addresses the needs of complex server-side applications.', + 'JavaScript, on the other hand, is the cornerstone of frontend development and one of the leaders of the backend, enabling the creation of interactive websites and dynamic user interfaces.', + 'The strengths of each language lie in their respective domains, so the choice between Go and JavaScript depends largely on the specific needs of the project, the previous expertise of the team.', + ], + }, + { + question: 'Is Golang as fast as C++?', + answer: [ + 'Golang is not as fast as C++. While Golang is, indeed, engineered for efficiency and performance, offering an amazing speed for many applications, it can\'t match the raw speed achieved by a lower-level language such as C++.', + 'Generally speaking, C++ excels in raw speed and low-level control over system resources, making it the preferred choice for scenarios requiring maximum efficiency. However, this comes at the cost of complexity, as lower-level languages offer fewer abstraction layers compared to higher-level ones like Go. In the end, it\'s all about trade-offs.', + 'Despite this, Golang strikes an excellent balance between efficiency and ease of development, which is a notable achievement for a high-level language.', + 'Its built-in garbage collection, clear syntax, and comprehensive standard library make it a practical alternative for developers who seek a more accessible yet high-performing programming language.', + 'This balance allows Golang to provide competitive performance for most modern software development needs while avoiding the steep learning curve and complexity associated with C++.', + ], + }, + { + question: 'Is Go better than Rust?', + answer: [ + 'Go is not better than Rust, nor is Rust intrinsically better than Go. If you think about it, neither Go nor Rust is universally better. Each has its own set of strengths, coming into their own under different circumstances.', + 'For instance, Go, with its crisp, simple syntax and a suite of built-in tools, is great for fast problem solving. Its design, simple and avoiding complexity at all costs, allows teams to adopt it for service deployment and efficient code resolution.', + 'On the other side you have Rust, which merits its own place in the podium for its focus on memory safety and detailed control over system resources. Its lower abstraction level (Rust is closer to the machine) explains its steeper learning curve, however, that also makes it a more challenging technology to pick up.', + 'In the end, the choice between Go and Rust reflects the specific needs of a project and the unique expertise of a team. For those seeking rapid, straightforward development, Go might be the path forward; and for applications where granular control and increased efficiency are paramount, Rust could very well be the preferred tool.', + ], + }, + { + question: 'Does Golang work on Windows?', + answer: [ + 'Golang works on Windows without any issues. The language is designed to extend across multiple operating systems, including the main three: Windows, Linux, and macOS.', + 'Its robust built-in functions allow developers to compile and run applications on Windows without needing to change much of the underlying code.', + 'This cross-platform capability means that whether you\'re working on a small job or a large-scale project, you can use Golang to solve pretty much any challenges.', + 'Developers can easily manage file operations and use logging features to tag errors or important events, ensuring that the application behaves consistently across different environments. It is a very versatile language.', + 'In the end, Golang\'s support on Windows makes it a practical choice for those looking to build performant and reliable software.', + ], + }, +]; +--- diff --git a/src/data/roadmaps/golang/golang.md b/src/data/roadmaps/golang/golang.md index 1c2a9f642..06100106c 100644 --- a/src/data/roadmaps/golang/golang.md +++ b/src/data/roadmaps/golang/golang.md @@ -10,6 +10,40 @@ hasTopics: true dimensions: width: 968 height: 1495.21 +question: + title: Is Golang as fast as C++? + description: | + Golang is an open-source programming language developed at Google by developers like Rob Pike. As an interesting trivia fact, Golang is often referred to as "the go language". + + The design philosophy behind Golang revolves around the concepts of simplicity, efficiency, and performance, making it a great tool for software development. In fact, Go code is compiled, meaning that it needs to be translated into machine code before execution making it run much faster than scripting/interpreted code. + + As far as programming languages go, Golang comes out of the box with a mature standard library (meaning it's capable of doing pretty much anything you want without needing extra modules) and a clean syntax that focuses on clarity. Golang is designed to provide an efficient programming environment with built-in garbage collection and strong support for concurrent programming, which is essential if you're building complex systems and scalable services. + + ## What is Golang used for? + + Golang is used for backend development and platform programming, especially in scenarios that demand efficiency and scalability. + Given its design principles, this language is perfect for creating microservices, APIs, and other server-side applications that demand stable operations and proper resource management. The language has a very powerful concurrency model, making it intuitive and well-suited for developing software that can handle large-scale data processing and network operations. + + Companies, especially those based in tech hubs like San Francisco and New York (such as Uber, Dropbox, Trivago and others), use Golang to build scalable and very performant services that integrate well with other technologies and provide the high-performing backend they need. Enabling a smooth process from start to finish. + + ## What does a Go developer do? + + A Go developer creates powerful and scalable backend services using the Go language. + + Their role involves writing, testing, and maintaining code for integration systems (taking information from one system and sending it into another one), building RESTful microservices, and other types of backend (or server-side) solutions. + + They do this by leveraging Golang's unique constructs and features to structure programs effectively. Beyond this, one of the major tasks for Go developers is to focus on optimizing code efficiency, developing K8 operators, and building small dev tools. In other words, short of frontend development, Go devs can build pretty much anything. + + ## What skills does a Go developer need? + + A Go developer needs a deep understanding of both fundamental programming concepts and the unique features of Golang. + They should, obviously, be well-versed in the language itself, managing pointers, as well as understanding how to use its mature standard library. + + An expert Go developer in this field must understand garbage collection and how to optimize code for high performance and scalability given how these are major design pillars for Go. + + On top of that, familiarity with testing frameworks and debugging tools is also essential to ensure that applications are both reliable and efficient. Many companies assess these skills during interviews by asking a variety of Golang interview questions that explore topics like concurrency, data structures, and the integration of Golang with other languages and technologies. + + The role requires a strong foundation in software development practices (i.e. version control, code smells, unit testing, etc) as well as a willingness to continuously learn and adapt to new tools and techniques to survive in the constantly evolving tech environment. schema: headline: 'Go Developer Roadmap' description: 'Learn how to become a Go Developer with this interactive step by step guide in 2025. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' diff --git a/src/data/roadmaps/java/content/conditionals@sG_3ZQIE1-FQXQkk-OduQ.md b/src/data/roadmaps/java/content/conditionals@sG_3ZQIE1-FQXQkk-OduQ.md index 1a5ecfde1..9b6156b39 100644 --- a/src/data/roadmaps/java/content/conditionals@sG_3ZQIE1-FQXQkk-OduQ.md +++ b/src/data/roadmaps/java/content/conditionals@sG_3ZQIE1-FQXQkk-OduQ.md @@ -11,6 +11,5 @@ Java has the following conditional statements: Visit the following resources to learn more: - [@article@What are Conditional statements?](https://www.educative.io/answers/what-are-conditional-statements-in-programming) -- [@article@Conditionals in Java](https://www.javatpoint.com/java-if-else) - [@video@Conditionals and Loops in Java](https://youtu.be/ldYLYRNaucM) - [@video@Switch Statements + Nested Case in Java](https://youtu.be/mA23x39DjbI) diff --git a/src/data/roadmaps/java/content/data-types@5g9mmi01WeZ4aDqNzwx_V.md b/src/data/roadmaps/java/content/data-types@5g9mmi01WeZ4aDqNzwx_V.md index 027bfad4b..0fc447e5f 100644 --- a/src/data/roadmaps/java/content/data-types@5g9mmi01WeZ4aDqNzwx_V.md +++ b/src/data/roadmaps/java/content/data-types@5g9mmi01WeZ4aDqNzwx_V.md @@ -11,4 +11,4 @@ Visit the following resources to learn more: - [@article@Java Data Types](https://jenkov.com/tutorials/java/variables.html) - [@article@What are Data Types & Variables?](https://jenkov.com/tutorials/java/data-types.html) -- [@article@Java Variables](https://www.tpointtech.com/java-variables) +- [@article@Java Variables](https://www.tpointtech.com/java-variables) \ No newline at end of file diff --git a/src/data/roadmaps/java/content/exception-handling@g9P3548F38tYGjevBc42w.md b/src/data/roadmaps/java/content/exception-handling@g9P3548F38tYGjevBc42w.md index 8d563b47d..6e23baf64 100644 --- a/src/data/roadmaps/java/content/exception-handling@g9P3548F38tYGjevBc42w.md +++ b/src/data/roadmaps/java/content/exception-handling@g9P3548F38tYGjevBc42w.md @@ -11,4 +11,4 @@ There are three types of exceptions - Visit the following resources to learn more: - [@video@Understanding Java Exceptions](https://www.youtube.com/watch?v=W-N2ltgU-X4) -- [@article@Exception Handling in Java](https://www.javatpoint.com/exception-handling-in-java) +- [@article@Exception Handling in Java](https://www.tpointtech.com/exception-handling-in-java) diff --git a/src/data/roadmaps/java/content/file-operations@NowpzyPVFcX082j5YS5i8.md b/src/data/roadmaps/java/content/file-operations@NowpzyPVFcX082j5YS5i8.md index 489b76b68..127dbe721 100644 --- a/src/data/roadmaps/java/content/file-operations@NowpzyPVFcX082j5YS5i8.md +++ b/src/data/roadmaps/java/content/file-operations@NowpzyPVFcX082j5YS5i8.md @@ -10,7 +10,6 @@ Learn how to work with files i.e., reading, writing and deleting, files and fold Visit the following resources to learn more: - [@article@How To Work With Files In Java](https://www.marcobehler.com/guides/java-files) -- [@article@Java File Class](https://www.javatpoint.com/java-file-class) - [@article@(old) Java HttpURLConnection Example - Java HTTP Request GET, POST](https://www.digitalocean.com/community/tutorials/java-httpurlconnection-example-java-http-request-get-post) - [@article@New Java HttpClient](https://www.baeldung.com/java-9-http-client) - [@article@5 ways to make HTTP requests in Java](https://www.twilio.com/blog/5-ways-to-make-http-requests-in-java) diff --git a/src/data/roadmaps/java/content/generic-collections@eL4pc6SaNiKP48PzN7mNe.md b/src/data/roadmaps/java/content/generic-collections@eL4pc6SaNiKP48PzN7mNe.md index 6532f77bb..0b5552324 100644 --- a/src/data/roadmaps/java/content/generic-collections@eL4pc6SaNiKP48PzN7mNe.md +++ b/src/data/roadmaps/java/content/generic-collections@eL4pc6SaNiKP48PzN7mNe.md @@ -5,5 +5,4 @@ Java Generic methods and generic classes enable programmers to specify, with a s Visit the following resources to learn more: - [@article@Java - Generics](https://www.tutorialspoint.com/java/java_generics.htm) -- [@article@Generics in Java](https://www.javatpoint.com/generics-in-java) - [@video@Generics in Java](https://www.youtube.com/watch?v=XMvznsY02Mk) \ No newline at end of file diff --git a/src/data/roadmaps/java/content/gradle@rmDIm5dqtdlNfPhvpqS7-.md b/src/data/roadmaps/java/content/gradle@rmDIm5dqtdlNfPhvpqS7-.md index ffe8de1c7..be359a1cb 100644 --- a/src/data/roadmaps/java/content/gradle@rmDIm5dqtdlNfPhvpqS7-.md +++ b/src/data/roadmaps/java/content/gradle@rmDIm5dqtdlNfPhvpqS7-.md @@ -7,6 +7,5 @@ Visit the following resources to learn more: - [@official@Gradle](https://gradle.org/) - [@video@Gradle Tutorial](https://youtu.be/kONQCIAcWeI) - [@video@Working with Gradle](https://youtu.be/6V6G3RyxEMk) -- [@article@Gradle](https://www.javatpoint.com/gradle) - [@article@Building Spring Boot Projects with Gradle](https://www.baeldung.com/spring-boot-gradle-plugin) - [@feed@Explore top posts about Gradle](https://app.daily.dev/tags/gradle?ref=roadmapsh) diff --git a/src/data/roadmaps/java/content/hibernate@UEiDzzodyEu5O1xFAFDly.md b/src/data/roadmaps/java/content/hibernate@UEiDzzodyEu5O1xFAFDly.md index ed7d9bf76..f220b6798 100644 --- a/src/data/roadmaps/java/content/hibernate@UEiDzzodyEu5O1xFAFDly.md +++ b/src/data/roadmaps/java/content/hibernate@UEiDzzodyEu5O1xFAFDly.md @@ -5,5 +5,4 @@ Hibernate is an open source object-relational mapping tool that provides a frame Visit the following resources to learn more: - [@official@Hibernate](https://hibernate.org/) -- [@article@Hibernate Tutorial](https://www.javatpoint.com/hibernate-tutorial) - [@article@Second-level caching explained](https://hazelcast.com/glossary/hibernate-second-level-cache/) diff --git a/src/data/roadmaps/java/content/logging-frameworks@d9F5Wt8onY125DLuzNULg.md b/src/data/roadmaps/java/content/logging-frameworks@d9F5Wt8onY125DLuzNULg.md index 5552123f6..45df76533 100644 --- a/src/data/roadmaps/java/content/logging-frameworks@d9F5Wt8onY125DLuzNULg.md +++ b/src/data/roadmaps/java/content/logging-frameworks@d9F5Wt8onY125DLuzNULg.md @@ -5,7 +5,6 @@ Logging is an important feature that helps developers to trace out the errors. I Visit the following resources to learn more: - [@article@Introduction to Java Logging](https://www.baeldung.com/java-logging-intro) -- [@article@Java Logger](https://www.javatpoint.com/java-logger) - [@article@Java Logging Frameworks](https://en.wikipedia.org/wiki/Java_logging_framework) - [@article@How to Do Logging In Java](https://www.marcobehler.com/guides/java-logging) - [@feed@Explore top posts about Java](https://app.daily.dev/tags/java?ref=roadmapsh) diff --git a/src/data/roadmaps/java/content/loops@JHUhVEjWFXTn6-wKcKevg.md b/src/data/roadmaps/java/content/loops@JHUhVEjWFXTn6-wKcKevg.md index c25284536..e4bbdec10 100644 --- a/src/data/roadmaps/java/content/loops@JHUhVEjWFXTn6-wKcKevg.md +++ b/src/data/roadmaps/java/content/loops@JHUhVEjWFXTn6-wKcKevg.md @@ -7,5 +7,4 @@ In Java and other programming languages, loops are used to iterate a part of the Visit the following resources to learn more: -- [@article@What are loops in Java?](https://www.javatpoint.com/java-for-loop) - [@article@Loops in Java.](https://www.programiz.com/java-programming/for-loop) diff --git a/src/data/roadmaps/java/content/packages@60POZOjwHSdKYL6rfkyEy.md b/src/data/roadmaps/java/content/packages@60POZOjwHSdKYL6rfkyEy.md index 66d514777..243a0e6fa 100644 --- a/src/data/roadmaps/java/content/packages@60POZOjwHSdKYL6rfkyEy.md +++ b/src/data/roadmaps/java/content/packages@60POZOjwHSdKYL6rfkyEy.md @@ -7,4 +7,3 @@ To create package use this command -> javac -d directory javafilename Visit the following resources to learn more: - [@article@Packages in Java](https://docs.oracle.com/javase/8/docs/api/java/lang/Package.html) -- [@article@Java Package](https://www.javatpoint.com/package) diff --git a/src/data/roadmaps/java/content/spring-data-jpa@WzWOxBUKKg6LeuBmVesc2.md b/src/data/roadmaps/java/content/spring-data-jpa@WzWOxBUKKg6LeuBmVesc2.md index d93486780..0a496d52e 100644 --- a/src/data/roadmaps/java/content/spring-data-jpa@WzWOxBUKKg6LeuBmVesc2.md +++ b/src/data/roadmaps/java/content/spring-data-jpa@WzWOxBUKKg6LeuBmVesc2.md @@ -6,7 +6,6 @@ Visit the following resources to learn more: - [@official@Spring Data JPA](https://spring.io/projects/spring-data-jpa) - [@article@Introduction to Spring Data JPA](https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa) -- [@article@Spring Data JPA Tutorial](https://www.javatpoint.com/spring-and-jpa-integration) - [@video@Spring Data JPA Tutorial](https://youtu.be/XszpXoII9Sg) - [@video@Spring Boot Tutorial - Spring Data JPA](https://youtu.be/8SGI_XS5OPw) - [@feed@Explore top posts about Spring Framework](https://app.daily.dev/tags/spring?ref=roadmapsh) diff --git a/src/data/roadmaps/java/content/stream-api@WHxAwfdKHQSOg0TLX05EG.md b/src/data/roadmaps/java/content/stream-api@WHxAwfdKHQSOg0TLX05EG.md index 5b62ad71d..ca9149459 100644 --- a/src/data/roadmaps/java/content/stream-api@WHxAwfdKHQSOg0TLX05EG.md +++ b/src/data/roadmaps/java/content/stream-api@WHxAwfdKHQSOg0TLX05EG.md @@ -4,7 +4,6 @@ Java provides a new additional package in Java 8 called java.util.stream. This p Visit the following resources to learn more: -- [@article@Java 8 Stream](https://www.javatpoint.com/java-8-stream) - [@video@Streams API Tutorial in Java 8+](https://www.youtube.com/watch?v=VNovNwHr9jY) - [@video@Java 8 Streams Tutorial](https://www.youtube.com/watch?v=t1-YZ6bF-g0) - [@article@The Java 8 Stream API Tutorial](https://www.baeldung.com/java-8-streams) \ No newline at end of file diff --git a/src/data/roadmaps/javascript/content/built-in-functions@s8wUJivWmetysJ8bt9FBC.md b/src/data/roadmaps/javascript/content/built-in-functions@s8wUJivWmetysJ8bt9FBC.md index 97189bb27..89d706ab9 100644 --- a/src/data/roadmaps/javascript/content/built-in-functions@s8wUJivWmetysJ8bt9FBC.md +++ b/src/data/roadmaps/javascript/content/built-in-functions@s8wUJivWmetysJ8bt9FBC.md @@ -1,8 +1,6 @@ # Built in functions -- A JavaScript **method** is a property containing a **function definition** . In other words, when the data stored on an object is a function we call that a method. -- To differentiate between properties and methods, we can think of it this way: **A property is what an object has, while a method is what an object does.** -- Since JavaScript methods are actions that can be performed on objects, we first need to have objects to start with. There are several objects built into JavaScript which we can use. +JavaScript offers a variety of built-in functions that simplify common tasks, available globally or within specific objects without requiring explicit definition. Functions like parseInt(), setTimeout(), and Math.random() can be used directly, while objects like Array, String, and Date include built-in methods for efficient data manipulation. Understanding these functions enhances development by leveraging JavaScript’s core features without reinventing the wheel. Visit the following resources to learn more: diff --git a/src/data/roadmaps/linux/content/101-editing-files/index.md b/src/data/roadmaps/linux/content/101-editing-files/index.md index 08b16919f..0090f2394 100644 --- a/src/data/roadmaps/linux/content/101-editing-files/index.md +++ b/src/data/roadmaps/linux/content/101-editing-files/index.md @@ -19,5 +19,4 @@ gedit [filename] ``` Visit the following resources to learn more: -- [@article@How to edit a file](https://www.scaler.com/topics/how-to-edit-a-file-in-linux/) -- [@article@Linux edit file](https://www.javatpoint.com/linux-edit-file) \ No newline at end of file +- [@article@How to edit a file](https://www.scaler.com/topics/how-to-edit-a-file-in-linux/) \ No newline at end of file diff --git a/src/data/roadmaps/linux/content/106-process-management/101-listing-finding-proc.md b/src/data/roadmaps/linux/content/106-process-management/101-listing-finding-proc.md index 32f44d0b4..31f1a5dad 100644 --- a/src/data/roadmaps/linux/content/106-process-management/101-listing-finding-proc.md +++ b/src/data/roadmaps/linux/content/106-process-management/101-listing-finding-proc.md @@ -22,4 +22,8 @@ Exploring the proc directory (`/proc`), we dive even deeper, enabling us to view # view specifics of a particular PID cat /proc/{PID}/status ``` -In short, 'Finding and Listing Processes (proc)' in Linux is not just a core aspect of process management, but also a necessary skill for enhancing system performance and resolution of issues. \ No newline at end of file +In short, 'Finding and Listing Processes (proc)' in Linux is not just a core aspect of process management, but also a necessary skill for enhancing system performance and resolution of issues. + +Visit the following resources to learn more: + +- [@article@The /proc File System](https://www.kernel.org/doc/html/latest/filesystems/proc.html) diff --git a/src/data/roadmaps/mlops/content/airflow@pVSlVHXIap0unFxLGM-lQ.md b/src/data/roadmaps/mlops/content/airflow@pVSlVHXIap0unFxLGM-lQ.md index 7bdc01869..4d7dd2584 100644 --- a/src/data/roadmaps/mlops/content/airflow@pVSlVHXIap0unFxLGM-lQ.md +++ b/src/data/roadmaps/mlops/content/airflow@pVSlVHXIap0unFxLGM-lQ.md @@ -4,5 +4,6 @@ Airflow is a platform to programmatically author, schedule and monitor workflows Visit the following resources to learn more: -- [@article@Airflow website](https://airflow.apache.org/) +- [@official@Airflow](https://airflow.apache.org/) +- [@official@Airflow Documentation](https://airflow.apache.org/docs) - [@feed@Explore top posts about Apache Airflow](https://app.daily.dev/tags/apache-airflow?ref=roadmapsh) diff --git a/src/data/roadmaps/mlops/content/aws--azure--gcp@u3E7FGW4Iwdsu61KYFxCX.md b/src/data/roadmaps/mlops/content/aws--azure--gcp@u3E7FGW4Iwdsu61KYFxCX.md index 5a957686e..1f12c5931 100644 --- a/src/data/roadmaps/mlops/content/aws--azure--gcp@u3E7FGW4Iwdsu61KYFxCX.md +++ b/src/data/roadmaps/mlops/content/aws--azure--gcp@u3E7FGW4Iwdsu61KYFxCX.md @@ -1,10 +1,11 @@ # AWS / Azure / GCP -AWS (Amazon Web Services) Azure and GCP (Google Cloud Platform) are three leading providers of cloud computing services. AWS by Amazon is the oldest and the most established among the three, providing a breadth and depth of solutions ranging from infrastructure services like compute, storage, and databases to the machine and deep learning. Azure, by Microsoft, has integrated tools for DevOps, supports a large number of programming languages, and offers seamless integration with on-prem servers and Microsoft’s software. Google's GCP has strength in cost-effectiveness, live migration of virtual machines, and flexible computing options. All three have introduced various MLOps tools and services to boost capabilities for machine learning development and operations. +AWS (Amazon Web Services), Azure and GCP (Google Cloud Platform) are three leading providers of cloud computing services. AWS by Amazon is the oldest and the most established among the three, providing a breadth and depth of solutions ranging from infrastructure services like compute, storage, and databases to the machine and deep learning. Azure, by Microsoft, has integrated tools for DevOps, supports a large number of programming languages, and offers seamless integration with on-prem servers and Microsoft’s software. Google's GCP has strength in cost-effectiveness, live migration of virtual machines, and flexible computing options. All three have introduced various MLOps tools and services to boost capabilities for machine learning development and operations. Visit the following resources to learn more about AWS, Azure, and GCP: -- [@roadmap.sh@AWS Roadmap](https://roadmap.sh/aws) -- [@article@Azure Tutorials](https://docs.microsoft.com/en-us/learn/azure/) -- [@article@GCP Learning Resources](https://cloud.google.com/training) +- [@roadmap.sh@Visit Dedicated AWS Roadmap](https://roadmap.sh/aws) +- [@official@Microsoft Azure](https://docs.microsoft.com/en-us/learn/azure/) +- [@official@Google Cloud Platform](https://cloud.google.com/) +- [@official@GCP Learning Resources](https://cloud.google.com/training) - [@feed@Explore top posts about AWS](https://app.daily.dev/tags/aws?ref=roadmapsh) diff --git a/src/data/roadmaps/mlops/content/bash@mMzqJF2KQ49TDEk5F3VAI.md b/src/data/roadmaps/mlops/content/bash@mMzqJF2KQ49TDEk5F3VAI.md index 4e4159e08..e47aab95e 100644 --- a/src/data/roadmaps/mlops/content/bash@mMzqJF2KQ49TDEk5F3VAI.md +++ b/src/data/roadmaps/mlops/content/bash@mMzqJF2KQ49TDEk5F3VAI.md @@ -4,5 +4,6 @@ Bash (Bourne Again Shell) is a Unix shell and command language used for interact Learn more from the following resources: +- [@article@Bash Reference Manual](https://www.gnu.org/software/bash/manual/bashref.html) - [@opensource@bash-guide](https://github.com/Idnan/bash-guide) - [@video@Bash Scripting Course](https://www.youtube.com/watch?v=tK9Oc6AEnR4) \ No newline at end of file diff --git a/src/data/roadmaps/mlops/content/cicd@a6vawajw7BpL6plH_nuAz.md b/src/data/roadmaps/mlops/content/cicd@a6vawajw7BpL6plH_nuAz.md index 2ea726df6..86d056f25 100644 --- a/src/data/roadmaps/mlops/content/cicd@a6vawajw7BpL6plH_nuAz.md +++ b/src/data/roadmaps/mlops/content/cicd@a6vawajw7BpL6plH_nuAz.md @@ -4,5 +4,6 @@ CI/CD (Continuous Integration and Continuous Deployment/Delivery) is a software Learn more from the following resources: -- [@article@What is CI/CD?](https://www.redhat.com/en/topics/devops/what-is-ci-cd) +- [@article@What is CI/CD? - Gitlab](https://about.gitlab.com/topics/ci-cd/) +- [@article@What is CI/CD? - Redhat](https://www.redhat.com/en/topics/devops/what-is-ci-cd) - [@video@CI/CD In 5 Minutes](https://www.youtube.com/watch?v=42UP1fxi2SY) \ No newline at end of file diff --git a/src/data/roadmaps/mlops/content/cloud-computing@00GZcwe25QYi7rDzaOoMt.md b/src/data/roadmaps/mlops/content/cloud-computing@00GZcwe25QYi7rDzaOoMt.md index d4f49ddf7..8e9874cb2 100644 --- a/src/data/roadmaps/mlops/content/cloud-computing@00GZcwe25QYi7rDzaOoMt.md +++ b/src/data/roadmaps/mlops/content/cloud-computing@00GZcwe25QYi7rDzaOoMt.md @@ -4,5 +4,6 @@ Learn more from the following resources: -- [@article@What is cloud computing?](https://azure.microsoft.com/en-gb/resources/cloud-computing-dictionary/what-is-cloud-computing) -- [@video@What is Cloud Computing? | Amazon Web Services](https://www.youtube.com/watch?v=mxT233EdY5c) +- [@article@Cloud Computing - IBM](https://www.ibm.com/think/topics/cloud-computing) +- [@article@What is Cloud Computing? - Azure](https://azure.microsoft.com/en-gb/resources/cloud-computing-dictionary/what-is-cloud-computing) +- [@video@What is Cloud Computing? - Amazon Web Services](https://www.youtube.com/watch?v=mxT233EdY5c) diff --git a/src/data/roadmaps/mlops/content/containerization@tKeejLv8Q7QX40UtOjpav.md b/src/data/roadmaps/mlops/content/containerization@tKeejLv8Q7QX40UtOjpav.md index 644e76a36..4d8de695e 100644 --- a/src/data/roadmaps/mlops/content/containerization@tKeejLv8Q7QX40UtOjpav.md +++ b/src/data/roadmaps/mlops/content/containerization@tKeejLv8Q7QX40UtOjpav.md @@ -6,8 +6,8 @@ These images are designed for portability, allowing for full local testing of a Visit the following resources to learn more: -- [@article@What are Containers?](https://cloud.google.com/learn/what-are-containers) -- [@article@What is a Container?](https://www.docker.com/resources/what-container/) +- [@article@What are Containers? - Google Cloud](https://cloud.google.com/learn/what-are-containers) +- [@article@What is a Container? - Docker](https://www.docker.com/resources/what-container/) - [@video@What are Containers?](https://www.youtube.com/playlist?list=PLawsLZMfND4nz-WDBZIj8-nbzGFD4S9oz) - [@article@Articles about Containers - The New Stack](https://thenewstack.io/category/containers/) - [@feed@Explore top posts about Containers](https://app.daily.dev/tags/containers?ref=roadmapsh) diff --git a/src/data/roadmaps/mlops/content/data-ingestion-architecture@Berd78HvnulNEGOsHCf8n.md b/src/data/roadmaps/mlops/content/data-ingestion-architecture@Berd78HvnulNEGOsHCf8n.md index 4d47d1271..9e8012d03 100644 --- a/src/data/roadmaps/mlops/content/data-ingestion-architecture@Berd78HvnulNEGOsHCf8n.md +++ b/src/data/roadmaps/mlops/content/data-ingestion-architecture@Berd78HvnulNEGOsHCf8n.md @@ -1,6 +1,6 @@ # Data Ingestion Architectures -Data ingestion is the process of collecting, transferring, and loading data from various sources to a destination where it can be stored and analyzed. There are several data ingestion architectures that can be used to collect data from different sources and load it into a data warehouse, data lake, or other storage systems. These architectures can be broadly classified into two categories: batch processing and real-time processing. How you choose to ingest data will depend on the volume, velocity, and variety of data you are working with, as well as the latency requirements of your use case. +Data ingestion is the process of collecting, transferring, and loading data from various sources to a destination where it can be stored and analyzed. There are several data ingestion architectures that can be used to collect data from different sources and load it into a data warehouse, data lake, or other storage systems. These architectures can be broadly classified into two categories: batch processing and real-time processing. How you choose to ingest data will depend on the volume, velocity, and variety of data you are working with, as well as the latency requirements of your use case. Lambda and Kappa architectures are two popular data ingestion architectures that combine batch and real-time processing to handle large volumes of data efficiently. diff --git a/src/data/roadmaps/mlops/content/data-lakes--warehouses@wOogVDV4FIDLXVPwFqJ8C.md b/src/data/roadmaps/mlops/content/data-lakes--warehouses@wOogVDV4FIDLXVPwFqJ8C.md index a82b5b99f..bfa9d82ac 100644 --- a/src/data/roadmaps/mlops/content/data-lakes--warehouses@wOogVDV4FIDLXVPwFqJ8C.md +++ b/src/data/roadmaps/mlops/content/data-lakes--warehouses@wOogVDV4FIDLXVPwFqJ8C.md @@ -1,9 +1,9 @@ # Data lakes & Warehouses -"**Data Lakes** are large-scale data repository systems that store raw, untransformed data, in various formats, from multiple sources. They're often used for big data and real-time analytics requirements. Data lakes preserve the original data format and schema which can be modified as necessary. On the other hand, **Data Warehouses** are data storage systems which are designed for analyzing, reporting and integrating with transactional systems. The data in a warehouse is clean, consistent, and often transformed to meet wide-range of business requirements. Hence, data warehouses provide structured data but require more processing and management compared to data lakes." +**Data Lakes** are large-scale data repository systems that store raw, untransformed data, in various formats, from multiple sources. They're often used for big data and real-time analytics requirements. Data lakes preserve the original data format and schema which can be modified as necessary. On the other hand, **Data Warehouses** are data storage systems which are designed for analyzing, reporting and integrating with transactional systems. The data in a warehouse is clean, consistent, and often transformed to meet wide-range of business requirements. Hence, data warehouses provide structured data but require more processing and management compared to data lakes. Learn more from the following resources: -- [@article@Data lake definition](https://azure.microsoft.com/en-gb/resources/cloud-computing-dictionary/what-is-a-data-lake) -- [@video@What is a data lake?](https://www.youtube.com/watch?v=LxcH6z8TFpI) -- [@video@@hat is a data warehouse?](https://www.youtube.com/watch?v=k4tK2ttdSDg) \ No newline at end of file +- [@article@Data Lake Definition](https://azure.microsoft.com/en-gb/resources/cloud-computing-dictionary/what-is-a-data-lake) +- [@video@What is a Data Lake?](https://www.youtube.com/watch?v=LxcH6z8TFpI) +- [@video@@hat is a Data Warehouse?](https://www.youtube.com/watch?v=k4tK2ttdSDg) \ No newline at end of file diff --git a/src/data/roadmaps/mlops/content/data-lineage--feature-stores@6XgP_2NLuiw654zvTyueT.md b/src/data/roadmaps/mlops/content/data-lineage--feature-stores@6XgP_2NLuiw654zvTyueT.md index ae00f4881..1797c870b 100644 --- a/src/data/roadmaps/mlops/content/data-lineage--feature-stores@6XgP_2NLuiw654zvTyueT.md +++ b/src/data/roadmaps/mlops/content/data-lineage--feature-stores@6XgP_2NLuiw654zvTyueT.md @@ -5,4 +5,4 @@ Learn more from the following resources: - [@article@What is Data Lineage?](https://www.ibm.com/topics/data-lineage) -- [@article@What is a feature store](https://www.snowflake.com/guides/what-feature-store-machine-learning/) +- [@article@What is a Feature Store](https://www.snowflake.com/guides/what-feature-store-machine-learning/) diff --git a/src/data/roadmaps/mlops/content/data-pipelines@cOg3ejZRYE-u-M0c89IjM.md b/src/data/roadmaps/mlops/content/data-pipelines@cOg3ejZRYE-u-M0c89IjM.md index 472f8b4db..c0c34bed5 100644 --- a/src/data/roadmaps/mlops/content/data-pipelines@cOg3ejZRYE-u-M0c89IjM.md +++ b/src/data/roadmaps/mlops/content/data-pipelines@cOg3ejZRYE-u-M0c89IjM.md @@ -4,5 +4,5 @@ Data pipelines are a series of automated processes that transport and transform Learn more from the following resources: -- [@article@What is a data pipeline?](https://www.ibm.com/topics/data-pipeline) -- [@video@What are data pipelines?](https://www.youtube.com/watch?v=oKixNpz6jNo) \ No newline at end of file +- [@article@What is a Data Pipeline? - IBM](https://www.ibm.com/topics/data-pipeline) +- [@video@What are Data Pipelines?](https://www.youtube.com/watch?v=oKixNpz6jNo) \ No newline at end of file diff --git a/src/data/roadmaps/mlops/content/docker@XIdCvT-4HyyglHJLRrHlz.md b/src/data/roadmaps/mlops/content/docker@XIdCvT-4HyyglHJLRrHlz.md index 0cd659954..50b251e27 100644 --- a/src/data/roadmaps/mlops/content/docker@XIdCvT-4HyyglHJLRrHlz.md +++ b/src/data/roadmaps/mlops/content/docker@XIdCvT-4HyyglHJLRrHlz.md @@ -4,7 +4,8 @@ Docker is a platform for working with containerized applications. Among its feat Visit the following resources to learn more: -- [@article@Docker Documentation](https://docs.docker.com/) +- [@roadmap@Visit Dedicated Docker Roadmap](https://roadmap.sh/docker) +- [@official@Docker Documentation](https://docs.docker.com/) - [@video@Docker Tutorial](https://www.youtube.com/watch?v=RqTEHSBrYFw) -- [@video@Docker simplified in 55 seconds](https://youtu.be/vP_4DlOH1G4) +- [@video@Docker Simplified in 55 Seconds](https://youtu.be/vP_4DlOH1G4) - [@feed@Explore top posts about Docker](https://app.daily.dev/tags/docker?ref=roadmapsh) diff --git a/src/data/roadmaps/mlops/content/flink@o6GQ3-8DgDtHzdX6yeg1w.md b/src/data/roadmaps/mlops/content/flink@o6GQ3-8DgDtHzdX6yeg1w.md index 03a06864b..da55f4f1c 100644 --- a/src/data/roadmaps/mlops/content/flink@o6GQ3-8DgDtHzdX6yeg1w.md +++ b/src/data/roadmaps/mlops/content/flink@o6GQ3-8DgDtHzdX6yeg1w.md @@ -4,6 +4,6 @@ Apache Flink is an open-source stream processing framework designed for real-tim Visit the following resources to learn more: -- [@article@Apache Flink Documentation](https://flink.apache.org/) +- [@official@Apache Flink Documentation](https://flink.apache.org/) +- [@article@Apache Flink](https://www.tutorialspoint.com/apache_flink/apache_flink_introduction.htm) - [@feed@Explore top posts about Apache Flink](https://app.daily.dev/tags/apache-flink?ref=roadmapsh) --[@reference@Apache Flink Tutorialpoint](https://www.tutorialspoint.com/apache_flink/apache_flink_introduction.htm) diff --git a/src/data/roadmaps/mlops/content/git@06T5CbZAGJU6fJhCmqCC8.md b/src/data/roadmaps/mlops/content/git@06T5CbZAGJU6fJhCmqCC8.md index 6d5f13ecb..29ab87115 100644 --- a/src/data/roadmaps/mlops/content/git@06T5CbZAGJU6fJhCmqCC8.md +++ b/src/data/roadmaps/mlops/content/git@06T5CbZAGJU6fJhCmqCC8.md @@ -4,7 +4,7 @@ Git is a distributed version control system used to track changes in source code Visit the following resources to learn more: -- [@roadmap@Learn Git & GitHub](https://roadmap.sh/git-github) +- [@roadmap@Visit Dedicated Git & GitHub Roadmap](https://roadmap.sh/git-github) - [@video@Git & GitHub Crash Course For Beginners](https://www.youtube.com/watch?v=SWYqp7iY_Tc) - [@article@Learn Git with Tutorials, News and Tips - Atlassian](https://www.atlassian.com/git) - [@article@Git Cheat Sheet](https://cs.fyi/guide/git-cheatsheet) diff --git a/src/data/roadmaps/mlops/content/github@7t7jSb3YgyWlhgCe8Se1I.md b/src/data/roadmaps/mlops/content/github@7t7jSb3YgyWlhgCe8Se1I.md index 99af980c8..319953f3a 100644 --- a/src/data/roadmaps/mlops/content/github@7t7jSb3YgyWlhgCe8Se1I.md +++ b/src/data/roadmaps/mlops/content/github@7t7jSb3YgyWlhgCe8Se1I.md @@ -4,8 +4,8 @@ GitHub is a web-based platform built on top of Git that provides version control Visit the following resources to learn more: -- [@roadmap@Learn Git & GitHub](https://roadmap.sh/git-github) -- [@official@GitHub Website](https://github.com) -- [@article@GitHub Documentation](https://docs.github.com/en/get-started/quickstart) +- [@roadmap@Visit Dedicated Git & GitHub Roadmap](https://roadmap.sh/git-github) +- [@official@GitHub](https://github.com) +- [@official@GitHub Documentation](https://docs.github.com/en/get-started/quickstart) - [@video@What is GitHub?](https://www.youtube.com/watch?v=w3jLJU7DT5E) - [@feed@Explore top posts about GitHub](https://app.daily.dev/tags/github?ref=roadmapsh) diff --git a/src/data/roadmaps/mlops/content/go@vdVq3RQvQF3mF8PQc6DMg.md b/src/data/roadmaps/mlops/content/go@vdVq3RQvQF3mF8PQc6DMg.md index da897c3d4..4ff272573 100644 --- a/src/data/roadmaps/mlops/content/go@vdVq3RQvQF3mF8PQc6DMg.md +++ b/src/data/roadmaps/mlops/content/go@vdVq3RQvQF3mF8PQc6DMg.md @@ -1,6 +1,7 @@ # Go Go, also known as Golang, is an open-source programming language developed by Google that emphasizes simplicity, efficiency, and strong concurrency support. Designed for modern software development, Go features a clean syntax, garbage collection, and built-in support for concurrent programming through goroutines and channels, making it well-suited for building scalable, high-performance applications, especially in cloud computing and microservices architectures. Go's robust standard library and tooling ecosystem, including a powerful package manager and testing framework, further streamline development processes, promoting rapid application development and deployment. + Visit the following resources to learn more: - [@roadmap@Visit Dedicated Go Roadmap](https://roadmap.sh/golang) diff --git a/src/data/roadmaps/mlops/content/infrastructure-as-code@sf67bSL7HAx6iN7S6MYKs.md b/src/data/roadmaps/mlops/content/infrastructure-as-code@sf67bSL7HAx6iN7S6MYKs.md index ebb9d4822..797792885 100644 --- a/src/data/roadmaps/mlops/content/infrastructure-as-code@sf67bSL7HAx6iN7S6MYKs.md +++ b/src/data/roadmaps/mlops/content/infrastructure-as-code@sf67bSL7HAx6iN7S6MYKs.md @@ -2,6 +2,9 @@ Infrastructure as Code (IaC) is a modern approach to managing and provisioning IT infrastructure through machine-readable configuration files, rather than manual processes. It enables developers and operations teams to define and manage infrastructure resources—such as servers, networks, and databases—using code, which can be versioned, tested, and deployed like application code. IaC tools, like Terraform and AWS CloudFormation, allow for automated, repeatable deployments, reducing human error and increasing consistency across environments. This practice facilitates agile development, enhances collaboration between teams, and supports scalable and efficient infrastructure management. +Visit the following resources to learn more: + +- [@roadmap@Visit Dedicated Terraform Roadmap](https://roadmap.sh/terraform) - [@article@What is Infrastructure as Code?](https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac) -- [@video@Terraform course for beginners](https://www.youtube.com/watch?v=SLB_c_ayRMo) -- [@video@8 Terraform best practices](https://www.youtube.com/watch?v=gxPykhPxRW0) +- [@video@Terraform Course for Beginners](https://www.youtube.com/watch?v=SLB_c_ayRMo) +- [@video@8 Terraform Best Practices](https://www.youtube.com/watch?v=gxPykhPxRW0) diff --git a/src/data/roadmaps/mlops/content/kafka@fMNwzhgLgHlAZJ9NvKikR.md b/src/data/roadmaps/mlops/content/kafka@fMNwzhgLgHlAZJ9NvKikR.md index 751294515..2c47585e9 100644 --- a/src/data/roadmaps/mlops/content/kafka@fMNwzhgLgHlAZJ9NvKikR.md +++ b/src/data/roadmaps/mlops/content/kafka@fMNwzhgLgHlAZJ9NvKikR.md @@ -4,6 +4,6 @@ Apache Kafka is an open-source distributed event streaming platform used by thou Visit the following resources to learn more: -- [@article@Apache Kafka quickstart](https://kafka.apache.org/quickstart) +- [@official@Apache Kafka Quickstart](https://kafka.apache.org/quickstart) - [@video@Apache Kafka Fundamentals](https://www.youtube.com/watch?v=B5j3uNBH8X4) - [@feed@Explore top posts about Kafka](https://app.daily.dev/tags/kafka?ref=roadmapsh) diff --git a/src/data/roadmaps/mlops/content/kubernetes@XQoK9l-xtN2J8ZV8dw53X.md b/src/data/roadmaps/mlops/content/kubernetes@XQoK9l-xtN2J8ZV8dw53X.md index cc32b3ad5..f60062184 100644 --- a/src/data/roadmaps/mlops/content/kubernetes@XQoK9l-xtN2J8ZV8dw53X.md +++ b/src/data/roadmaps/mlops/content/kubernetes@XQoK9l-xtN2J8ZV8dw53X.md @@ -4,8 +4,8 @@ Kubernetes is an open source container management platform, and the dominant pro Visit the following resources to learn more: -- [@roadmap@Kubernetes Roadmap](https://roadmap.sh/kubernetes) -- [@official@Kubernetes Website](https://kubernetes.io/) +- [@roadmap@Visit Dedicated Kubernetes Roadmap](https://roadmap.sh/kubernetes) +- [@official@Kubernetes](https://kubernetes.io/) - [@official@Kubernetes Documentation](https://kubernetes.io/docs/home/) - [@video@Kubernetes Crash Course for Absolute Beginners](https://www.youtube.com/watch?v=s_o8dwzRlu4) - [@article@Kubernetes: An Overview](https://thenewstack.io/kubernetes-an-overview/) diff --git a/src/data/roadmaps/mlops/content/machine-learning-fundamentals@ulka7VEVjz6ls5SnI6a6z.md b/src/data/roadmaps/mlops/content/machine-learning-fundamentals@ulka7VEVjz6ls5SnI6a6z.md index e815e7c88..6ce881bf5 100644 --- a/src/data/roadmaps/mlops/content/machine-learning-fundamentals@ulka7VEVjz6ls5SnI6a6z.md +++ b/src/data/roadmaps/mlops/content/machine-learning-fundamentals@ulka7VEVjz6ls5SnI6a6z.md @@ -1,6 +1,7 @@ # Machine Learning Fundamentals Machine learning fundamentals encompass the key concepts and techniques that enable systems to learn from data and make predictions or decisions without being explicitly programmed. At its core, machine learning involves algorithms that can identify patterns in data and improve over time with experience. Key areas include supervised learning (where models are trained on labeled data), unsupervised learning (where models identify patterns in unlabeled data), and reinforcement learning (where agents learn to make decisions based on feedback from their actions). Essential components also include data preprocessing, feature selection, model training, evaluation metrics, and the importance of avoiding overfitting. Understanding these fundamentals is crucial for developing effective machine learning applications across various domains. + Learn more from the following resources: - [@course@Fundamentals of Machine Learning - Microsoft](https://learn.microsoft.com/en-us/training/modules/fundamentals-machine-learning/) diff --git a/src/data/roadmaps/mlops/content/mlops-components@l1xasxQy2vAY34NWaqKEe.md b/src/data/roadmaps/mlops/content/mlops-components@l1xasxQy2vAY34NWaqKEe.md index 828c4db9f..5dda41b14 100644 --- a/src/data/roadmaps/mlops/content/mlops-components@l1xasxQy2vAY34NWaqKEe.md +++ b/src/data/roadmaps/mlops/content/mlops-components@l1xasxQy2vAY34NWaqKEe.md @@ -1,3 +1,8 @@ # MLOps Components MLOps components can be broadly classified into three major categories: Development, Operations and Governance. The **Development** components include everything involved in the creation of machine learning models, such as data extraction, data analysis, feature engineering, and machine learning model training. The **Operations** category includes components involved in deploying, monitoring, and maintaining machine learning models in production. This may include release management, model serving, and performance monitoring. Lastly, the **Governance** category encompasses the policies and regulations related to machine learning models. This includes model audit and tracking, model explainability, and security & compliance regulations. + +Learn more from the following resources: + +- [@article@MLOps Workflow, Components, and Key Practices](https://mlops.tv/p/understanding-ml-pipelines-through) +- [@article@MLOps Lifecycle](https://www.moontechnolabs.com/blog/mlops-lifecycle/) \ No newline at end of file diff --git a/src/data/roadmaps/mlops/content/mlops-principles@iTsEHVCo6KGq7H2HMgy5S.md b/src/data/roadmaps/mlops/content/mlops-principles@iTsEHVCo6KGq7H2HMgy5S.md index d5acc9ad1..87ae43dae 100644 --- a/src/data/roadmaps/mlops/content/mlops-principles@iTsEHVCo6KGq7H2HMgy5S.md +++ b/src/data/roadmaps/mlops/content/mlops-principles@iTsEHVCo6KGq7H2HMgy5S.md @@ -16,4 +16,8 @@ MLOps (Machine Learning Operations) principles focus on streamlining the deploym 7. **Reproducibility**: Ensure that experiments can be reliably reproduced by standardizing environments and workflows, making it easier to validate and iterate on models. -These principles help organizations efficiently manage the lifecycle of machine learning models, from development to deployment and beyond. \ No newline at end of file +These principles help organizations efficiently manage the lifecycle of machine learning models, from development to deployment and beyond. + +Visit the following resources to learn more: + +- [@article@MLOps Principles](https://ml-ops.org/content/mlops-principles) \ No newline at end of file diff --git a/src/data/roadmaps/mlops/content/model-training--serving@zsW1NRb0dMgS-KzWsI0QU.md b/src/data/roadmaps/mlops/content/model-training--serving@zsW1NRb0dMgS-KzWsI0QU.md index ec6c889aa..e16e3627e 100644 --- a/src/data/roadmaps/mlops/content/model-training--serving@zsW1NRb0dMgS-KzWsI0QU.md +++ b/src/data/roadmaps/mlops/content/model-training--serving@zsW1NRb0dMgS-KzWsI0QU.md @@ -1,8 +1,10 @@ # Model Training and Serving -"Model Training" refers to the phase in the Machine Learning (ML) pipeline where we teach a machine learning model how to make predictions by providing it with data. This process begins with feeding the model a training dataset, which it uses to learn and understand patterns or perform computations. The model's performance is then evaluated by comparing its prediction outputs with the actual results. Various algorithms can be used in the model training process. The choice of algorithm usually depends on the task, the data available, and the requirements of the project. It is worth noting that the model training stage can be computationally expensive particularly when dealing with large datasets or complex models. +Model Training refers to the phase in the Machine Learning (ML) pipeline where we teach a machine learning model how to make predictions by providing it with data. This process begins with feeding the model a training dataset, which it uses to learn and understand patterns or perform computations. The model's performance is then evaluated by comparing its prediction outputs with the actual results. Various algorithms can be used in the model training process. The choice of algorithm usually depends on the task, the data available, and the requirements of the project. It is worth noting that the model training stage can be computationally expensive particularly when dealing with large datasets or complex models. -Decisions depend on the organization's infrastructure. +Visit the following resources to learn more: -- **Repository Suggestion:** [ML Deployment k8s Fast API](https://github.com/sayakpaul/ml-deployment-k8s-fastapi/tree/main) -- **Tutorial Suggestions:** [ML deployment with k8s FastAPI, Building an ML app with FastAPI](https://dev.to/bravinsimiyu/beginner-guide-on-how-to-build-a-machine-learning-app-with-fastapi-part-ii-deploying-the-fastapi-application-to-kubernetes-4j6g), [Basic Kubeflow pipeline](https://towardsdatascience.com/tutorial-basic-kubeflow-pipeline-from-scratch-5f0350dc1905), [Building and deploying ML pipelines](https://www.datacamp.com/tutorial/kubeflow-tutorial-building-and-deploying-machine-learning-pipelines?utm_source=google&utm_medium=paid_search&utm_campaignid=19589720818&utm_adgroupid=157156373991&utm_device=c&utm_keyword=&utm_matchtype=&utm_network=g&utm_adpostion=&utm_creative=683184494153&utm_targetid=dsa-2218886984380&utm_loc_interest_ms=&utm_loc_physical_ms=9064564&utm_content=&utm_campaign=230119_1-sea~dsa~tofu_2-b2c_3-eu_4-prc_5-na_6-na_7-le_8-pdsh-go_9-na_10-na_11-na-dec23&gad_source=1&gclid=Cj0KCQiA4Y-sBhC6ARIsAGXF1g7iSih9h2RGL27LwWY6dlPLhEss-e5Af8pnaBvdDynRh7IHIKi8sGgaApD-EALw_wcB), [KServe tutorial](https://towardsdatascience.com/kserve-highly-scalable-machine-learning-deployment-with-kubernetes-aa7af0b71202) +- [@article@MLOps Principles](https://ml-ops.org/content/mlops-principles) +- [@opensource@ML Deployment k8s Fast API](https://github.com/sayakpaul/ml-deployment-k8s-fastapi/) +- [@article@ML deployment with k8s FastAPI, Building an ML app with FastAPI](https://dev.to/bravinsimiyu/beginner-guide-on-how-to-build-a-machine-learning-app-with-fastapi-part-ii-deploying-the-fastapi-application-to-kubernetes-4j6g) +- [@article@KServe Tutorial](https://towardsdatascience.com/kserve-highly-scalable-machine-learning-deployment-with-kubernetes-aa7af0b71202) \ No newline at end of file diff --git a/src/data/roadmaps/mlops/content/python@Vh81GnOUOZvDOlOyI5PwT.md b/src/data/roadmaps/mlops/content/python@Vh81GnOUOZvDOlOyI5PwT.md index d4c1b055b..5214b4ff8 100644 --- a/src/data/roadmaps/mlops/content/python@Vh81GnOUOZvDOlOyI5PwT.md +++ b/src/data/roadmaps/mlops/content/python@Vh81GnOUOZvDOlOyI5PwT.md @@ -4,8 +4,8 @@ Python is an interpreted high-level general-purpose programming language. Its de Learn more from the following resources: -- [@roadmap@Python Roadmap](https://roadmap.sh/python) -- [@official@Python.org](https://www.python.org/) +- [@roadmap@Visit Dedicated Python Roadmap](https://roadmap.sh/python) +- [@official@Python](https://www.python.org/) - [@article@Real Python](https://realpython.com/) - [@article@Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) - [@feed@Explore top posts about Python](https://app.daily.dev/tags/python?ref=roadmapsh) diff --git a/src/data/roadmaps/mlops/content/version-control-systems@oUhlUoWQQ1txx_sepD5ev.md b/src/data/roadmaps/mlops/content/version-control-systems@oUhlUoWQQ1txx_sepD5ev.md index 7a02915c4..709e3890f 100644 --- a/src/data/roadmaps/mlops/content/version-control-systems@oUhlUoWQQ1txx_sepD5ev.md +++ b/src/data/roadmaps/mlops/content/version-control-systems@oUhlUoWQQ1txx_sepD5ev.md @@ -4,5 +4,6 @@ Version control/source control systems allow developers to track and control cha Visit the following resources to learn more: -- [@article@Git](https://git-scm.com/) +- [@official@Git](https://git-scm.com/) - [@article@What is Version Control?](https://www.atlassian.com/git/tutorials/what-is-version-control) +- [@feed@Explore top posts about Version Control](https://app.daily.dev/tags/version-control?ref=roadmapsh) diff --git a/src/data/roadmaps/mlops/content/version-control@kHDSwlSq8WkLey4EJIQSR.md b/src/data/roadmaps/mlops/content/version-control@kHDSwlSq8WkLey4EJIQSR.md index 276a0d7e5..99378cbdb 100644 --- a/src/data/roadmaps/mlops/content/version-control@kHDSwlSq8WkLey4EJIQSR.md +++ b/src/data/roadmaps/mlops/content/version-control@kHDSwlSq8WkLey4EJIQSR.md @@ -4,6 +4,7 @@ Version control/source control systems allow developers to track and control cha Visit the following resources to learn more: -- [@article@Git](https://git-scm.com/) +- [@official@Git](https://git-scm.com/) +- [@official@Git Documentation](https://git-scm.com/docs) - [@article@What is Version Control?](https://www.atlassian.com/git/tutorials/what-is-version-control) - [@feed@Explore top posts about Version Control](https://app.daily.dev/tags/version-control?ref=roadmapsh) diff --git a/src/data/roadmaps/mongodb/content/108-developer-tools/100-language-drivers.md b/src/data/roadmaps/mongodb/content/108-developer-tools/100-language-drivers.md index 559c56372..441983e10 100644 --- a/src/data/roadmaps/mongodb/content/108-developer-tools/100-language-drivers.md +++ b/src/data/roadmaps/mongodb/content/108-developer-tools/100-language-drivers.md @@ -4,6 +4,24 @@ Language drivers are essential tools for developers to interface with MongoDB. T MongoDB supports a wide range of languages, and some of the most popular drivers are: +- MongoDB Node.js Driver (`mongodb` for Node.js) +- PyMongo (Python) +- MongoDB Java Driver (`mongodb-driver-sync` for Java) +- MongoDB C#/.NET Driver +- MongoDB Go Driver (`mongo-go-driver`) +- MongoDB Ruby Driver +- MongoDB PHP Library +- MongoDB Swift Driver + +With a suitable driver installed, you can interact with MongoDB using the idiomatic style of your programming language. The driver simplifies your code and boosts productivity, as it handles the communication between your application and the MongoDB server. + +To get started with the language driver of your choice, visit the respective documentation linked above. The documentation will help you set up the driver, establish a connection, and perform various database operations in your preferred programming language. + +Remember to always use the latest version of language drivers to ensure compatibility with new MongoDB features and improve overall performance. + +Visit the following resources to learn more: + +- [@official@MongoDB Supported Languages](https://www.mongodb.com/resources/languages) - [@article@C Driver](http://mongoc.org/) - [@opensource@C++ Driver](https://github.com/mongodb/mongo-cxx-driver) - [@article@C# and .NET Driver](https://docs.mongodb.com/drivers/csharp/) @@ -14,9 +32,3 @@ MongoDB supports a wide range of languages, and some of the most popular drivers - [@article@Python Driver (PyMongo)](https://docs.mongodb.com/drivers/pymongo/) - [@article@Ruby Driver](https://docs.mongodb.com/drivers/ruby/) - [@article@Rust Driver](https://docs.rs/mongodb/1.2.0/mongodb/) - -With a suitable driver installed, you can interact with MongoDB using the idiomatic style of your programming language. The driver simplifies your code and boosts productivity, as it handles the communication between your application and the MongoDB server. - -To get started with the language driver of your choice, visit the respective documentation linked above. The documentation will help you set up the driver, establish a connection, and perform various database operations in your preferred programming language. - -Remember to always use the latest version of language drivers to ensure compatibility with new MongoDB features and improve overall performance. diff --git a/src/data/roadmaps/nodejs/content/--watch@812bVEzxwTsYzLG_PmLqN.md b/src/data/roadmaps/nodejs/content/--watch@812bVEzxwTsYzLG_PmLqN.md index 478e4cbe9..cec1eab7e 100644 --- a/src/data/roadmaps/nodejs/content/--watch@812bVEzxwTsYzLG_PmLqN.md +++ b/src/data/roadmaps/nodejs/content/--watch@812bVEzxwTsYzLG_PmLqN.md @@ -2,7 +2,7 @@ The `--watch` flag in Node.js is a powerful feature introduced in Node.js version 19 that enables automatic reloading of your Node.js application whenever changes are detected in the specified files. -## How it works +Here's How it works: - You run your Node.js script with the `--watch` flag: `$ node --watch your_script.js` - Node.js starts watching the specified file (or directory) for changes. @@ -10,6 +10,6 @@ The `--watch` flag in Node.js is a powerful feature introduced in Node.js versio Visit the following resources to learn more: -- [@official@Official Docs](https://nodejs.org/api/cli.html) -- [@official@Node.js API Docs](https://nodejs.org/api/cli.html#--watch) +- [@official@Node.js CLI](https://nodejs.org/api/cli.html) +- [@official@Node.js --watch Docs](https://nodejs.org/api/cli.html#--watch) - [@article@Medium - Watch Mode](https://medium.com/@khaled.smq/built-in-nodejs-watch-mode-52ffadaec8a8) diff --git a/src/data/roadmaps/nodejs/content/__dirname@1AaGG660rvZlNYMOA35qO.md b/src/data/roadmaps/nodejs/content/__dirname@1AaGG660rvZlNYMOA35qO.md index 2bc57c13d..aedc7c9d5 100644 --- a/src/data/roadmaps/nodejs/content/__dirname@1AaGG660rvZlNYMOA35qO.md +++ b/src/data/roadmaps/nodejs/content/__dirname@1AaGG660rvZlNYMOA35qO.md @@ -4,5 +4,5 @@ The `__dirname` in a node script returns the path of the folder where the curren Visit the following resources to learn more: -- [@official@Official Website](https://nodejs.org/docs/latest/api/modules.html#__dirname) +- [@official@\_\_dirname](https://nodejs.org/docs/latest/api/modules.html#__dirname) - [@article@How to use \_\_dirname](https://www.digitalocean.com/community/tutorials/nodejs-how-to-use__dirname) diff --git a/src/data/roadmaps/nodejs/content/__filename@P2gdwx1qCxvg1Ppfw0aqQ.md b/src/data/roadmaps/nodejs/content/__filename@P2gdwx1qCxvg1Ppfw0aqQ.md index c66b7d9fb..b685da588 100644 --- a/src/data/roadmaps/nodejs/content/__filename@P2gdwx1qCxvg1Ppfw0aqQ.md +++ b/src/data/roadmaps/nodejs/content/__filename@P2gdwx1qCxvg1Ppfw0aqQ.md @@ -4,4 +4,4 @@ The `__filename` in Node.js returns the filename of the executed code. It gives Visit the following resources to learn more: -- [@official@Official Docs](https://nodejs.org/docs/latest/api/modules.html#__filename) +- [@official@\_\_filename](https://nodejs.org/docs/latest/api/modules.html#__filename) diff --git a/src/data/roadmaps/nodejs/content/async-programming@uE7fvHSTSdebMf5RsNyaY.md b/src/data/roadmaps/nodejs/content/async-programming@uE7fvHSTSdebMf5RsNyaY.md index 720ca0267..75f3411f4 100644 --- a/src/data/roadmaps/nodejs/content/async-programming@uE7fvHSTSdebMf5RsNyaY.md +++ b/src/data/roadmaps/nodejs/content/async-programming@uE7fvHSTSdebMf5RsNyaY.md @@ -1,4 +1,4 @@ -# Nodejs async programming +# Async Programming Asynchronous code means that things can happen independently of the main program flow, async functions in JavaScript are processed in the background without blocking other requests. It ensures non-blocking code execution. Asynchronous code executes without having any dependency and no order. This improves the system efficiency and throughput. Making web apps requires knowledge of asynchronous concepts since we will be dealing with actions that require some time to get processed. diff --git a/src/data/roadmaps/nodejs/content/axios@BOLiZg8YDKADMwP01U5ph.md b/src/data/roadmaps/nodejs/content/axios@BOLiZg8YDKADMwP01U5ph.md index 69d4a3904..8a72844dc 100644 --- a/src/data/roadmaps/nodejs/content/axios@BOLiZg8YDKADMwP01U5ph.md +++ b/src/data/roadmaps/nodejs/content/axios@BOLiZg8YDKADMwP01U5ph.md @@ -4,6 +4,6 @@ Axios is a promise-based HTTP Client for node.js and the browser. Used for makin Visit the following resources to learn more: -- [@article@Axios Official Documentation](https://axios-http.com/docs/intro) +- [@official@Axios Documentation](https://axios-http.com/docs/intro) - [@video@Axios Tutorial](https://www.youtube.com/watch?v=6LyagkoRWYA) - [@feed@Explore top posts about Axios](https://app.daily.dev/tags/axios?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/callbacks@GwInWcbQn18PnzKGXzmln.md b/src/data/roadmaps/nodejs/content/callbacks@GwInWcbQn18PnzKGXzmln.md index c3a2cfd8d..277a226a4 100644 --- a/src/data/roadmaps/nodejs/content/callbacks@GwInWcbQn18PnzKGXzmln.md +++ b/src/data/roadmaps/nodejs/content/callbacks@GwInWcbQn18PnzKGXzmln.md @@ -4,5 +4,5 @@ Node.js, being an asynchronous platform, doesn't wait around for things like fil Visit the following resources to learn more: -- [@article@What are callbacks?](https://developer.mozilla.org/en-US/docs/Glossary/Callback_function) - [@official@Asynchronicity in Programming Languages](https://nodejs.org/en/learn/asynchronous-work/javascript-asynchronous-programming-and-callbacks) +- [@article@What are Callbacks?](https://developer.mozilla.org/en-US/docs/Glossary/Callback_function) diff --git a/src/data/roadmaps/nodejs/content/chokidar@een1zhvgN_33Cu6OiWtyX.md b/src/data/roadmaps/nodejs/content/chokidar@een1zhvgN_33Cu6OiWtyX.md index 504621b53..aea8be651 100644 --- a/src/data/roadmaps/nodejs/content/chokidar@een1zhvgN_33Cu6OiWtyX.md +++ b/src/data/roadmaps/nodejs/content/chokidar@een1zhvgN_33Cu6OiWtyX.md @@ -4,4 +4,4 @@ Chokidar is a fast open-source file watcher for node. js. You give it a bunch of Visit the following resources to learn more: -- [@official@NPM Docs](https://www.npmjs.com/package/chokidar) +- [@official@chokidar package](https://www.npmjs.com/package/chokidar) diff --git a/src/data/roadmaps/nodejs/content/commander@BxxLQUI7JcQgF6TK3L5uU.md b/src/data/roadmaps/nodejs/content/commander@BxxLQUI7JcQgF6TK3L5uU.md index a0ba1ce5b..b3594b6b7 100644 --- a/src/data/roadmaps/nodejs/content/commander@BxxLQUI7JcQgF6TK3L5uU.md +++ b/src/data/roadmaps/nodejs/content/commander@BxxLQUI7JcQgF6TK3L5uU.md @@ -4,5 +4,5 @@ Commander is a light-weight, expressive, and powerful command-line framework for Visit the following resources to learn more: -- [@official@Official Documentation](https://www.npmjs.com/package/commander) +- [@official@commander package](https://www.npmjs.com/package/commander) - [@feed@Explore top posts about JavaScript](https://app.daily.dev/tags/javascript?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/common-built-in-modules@M62lAWBOrTe99TfpFOQ-Y.md b/src/data/roadmaps/nodejs/content/common-built-in-modules@M62lAWBOrTe99TfpFOQ-Y.md index 73f8d2c0f..a5317fb7d 100644 --- a/src/data/roadmaps/nodejs/content/common-built-in-modules@M62lAWBOrTe99TfpFOQ-Y.md +++ b/src/data/roadmaps/nodejs/content/common-built-in-modules@M62lAWBOrTe99TfpFOQ-Y.md @@ -4,13 +4,13 @@ These are the core modules that come with `Node.js` out of the box. This module Learn more from the following resources: -- [@official@Nodejs fs module](https://nodejs.org/api/fs.html) -- [@official@Nodejs url module](https://nodejs.org/api/url.html) -- [@official@Nodejs console module](https://nodejs.org/api/console.html) -- [@official@Nodejs util module](https://nodejs.org/api/util.html) -- [@official@Nodejs events module](https://nodejs.org/api/events.html) -- [@official@Nodejs os module](https://nodejs.org/api/os.html) -- [@official@Nodejs worker threads module](https://nodejs.org/api/worker_threads.html) -- [@official@Nodejs child process module](https://nodejs.org/api/child_process.html) -- [@official@Nodejs process object](https://nodejs.org/api/process.html) -- [@official@Nodejs crypto module](https://nodejs.org/api/crypto.html) \ No newline at end of file +- [@official@fs module](https://nodejs.org/api/fs.html) +- [@official@url module](https://nodejs.org/api/url.html) +- [@official@console module](https://nodejs.org/api/console.html) +- [@official@util module](https://nodejs.org/api/util.html) +- [@official@events module](https://nodejs.org/api/events.html) +- [@official@os module](https://nodejs.org/api/os.html) +- [@official@worker threads module](https://nodejs.org/api/worker_threads.html) +- [@official@child process module](https://nodejs.org/api/child_process.html) +- [@official@process object](https://nodejs.org/api/process.html) +- [@official@crypto module](https://nodejs.org/api/crypto.html) \ No newline at end of file diff --git a/src/data/roadmaps/nodejs/content/cypress@3Fh3-V1kCZtlUTvEoloIO.md b/src/data/roadmaps/nodejs/content/cypress@3Fh3-V1kCZtlUTvEoloIO.md index 50cebc952..24fbfa76e 100644 --- a/src/data/roadmaps/nodejs/content/cypress@3Fh3-V1kCZtlUTvEoloIO.md +++ b/src/data/roadmaps/nodejs/content/cypress@3Fh3-V1kCZtlUTvEoloIO.md @@ -4,6 +4,6 @@ Cypress is a new front end testing tool built for the modern web. It enables you Visit the following resources to learn more: -- [@official@Cypress Website](https://www.cypress.io/) +- [@official@Cypress](https://www.cypress.io/) - [@article@Cypress Documentation](https://docs.cypress.io/) - [@feed@Explore top posts about Cypress](https://app.daily.dev/tags/cypress?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/debugging@ZLNUuDKhJ03Kw7xMVc7IR.md b/src/data/roadmaps/nodejs/content/debugging@ZLNUuDKhJ03Kw7xMVc7IR.md index 5ea20965b..97d9f9b81 100644 --- a/src/data/roadmaps/nodejs/content/debugging@ZLNUuDKhJ03Kw7xMVc7IR.md +++ b/src/data/roadmaps/nodejs/content/debugging@ZLNUuDKhJ03Kw7xMVc7IR.md @@ -2,7 +2,7 @@ Debugging is a concept to identify and remove errors from software applications. Here, we will learn about the technique to debug a Node.js application. -## Why not to use console.log() for debugging? +Why not to use `console.log()` for debugging? Using `console.log` to debug the code generally dives into an infinite loop of “stopping the app and adding a console.log, and start the app again” operations. Besides slowing down the development of the app, it also makes the writing dirty and creates unnecessary code. Finally, trying to log out variables alongside with the noise of other potential logging operations, may make the process of debugging difficult when attempting to find the values you are debugging. diff --git a/src/data/roadmaps/nodejs/content/drizzle@JXQF9H4_N0rM7ZDKcCZNn.md b/src/data/roadmaps/nodejs/content/drizzle@JXQF9H4_N0rM7ZDKcCZNn.md index 8f66be028..4c438a471 100644 --- a/src/data/roadmaps/nodejs/content/drizzle@JXQF9H4_N0rM7ZDKcCZNn.md +++ b/src/data/roadmaps/nodejs/content/drizzle@JXQF9H4_N0rM7ZDKcCZNn.md @@ -4,7 +4,7 @@ Drizzle lets you build your project the way you want, without interfering with y Visit the following resources to learn more: -- [@official@Drizzle Website](https://orm.drizzle.team/) +- [@official@Drizzle](https://orm.drizzle.team/) - [@official@Drizzle Documentation](https://orm.drizzle.team/docs/overview) - [@opensource@Drizzle Github](https://github.com/drizzle-team/drizzle-orm) - [@article@Getting Started with Drizzle](https://dev.to/franciscomendes10866/getting-started-with-drizzle-orm-a-beginners-tutorial-4782) diff --git a/src/data/roadmaps/nodejs/content/ejs@L-_N7OxxuHCXsdWYBgZGu.md b/src/data/roadmaps/nodejs/content/ejs@L-_N7OxxuHCXsdWYBgZGu.md index 8c41b881c..c438418b4 100644 --- a/src/data/roadmaps/nodejs/content/ejs@L-_N7OxxuHCXsdWYBgZGu.md +++ b/src/data/roadmaps/nodejs/content/ejs@L-_N7OxxuHCXsdWYBgZGu.md @@ -5,9 +5,9 @@ In simple words, the EJS template engine helps to easily embed JavaScript into y Visit the following resources to learn more: -- [@official@EJS Website](https://ejs.co/) -- [@official@EJS Official Documentation](https://ejs.co/#docs) -- [@official@EJS Official Package](https://www.npmjs.com/package/ejs) +- [@official@EJS](https://ejs.co/) +- [@official@EJS Documentation](https://ejs.co/#docs) +- [@official@EJS Package](https://www.npmjs.com/package/ejs) - [@article@Try EJS Online](https://ionicabizau.github.io/ejs-playground/) - [@article@How to use EJS](https://www.digitalocean.com/community/tutorials/how-to-use-ejs-to-template-your-node-application) - [@article@Step-by-Step EJS Guide](https://codeforgeek.com/ejs-template-engine-in-nodejs/) diff --git a/src/data/roadmaps/nodejs/content/esm@mKccfWOhC1Aj4VnaOqryA.md b/src/data/roadmaps/nodejs/content/esm@mKccfWOhC1Aj4VnaOqryA.md index 52db24b45..eb09309bc 100644 --- a/src/data/roadmaps/nodejs/content/esm@mKccfWOhC1Aj4VnaOqryA.md +++ b/src/data/roadmaps/nodejs/content/esm@mKccfWOhC1Aj4VnaOqryA.md @@ -4,4 +4,4 @@ ESM (ECMAScript Modules) is a standardized module system in JavaScript that allo Visit the following resources to learn more: -- [@article@esm documentation on nodejs org](https://nodejs.org/api/esm.html) +- [@official@ESM Documentation](https://nodejs.org/api/esm.html) diff --git a/src/data/roadmaps/nodejs/content/expressjs@1vq_KcYR_pkfp1MtXaL75.md b/src/data/roadmaps/nodejs/content/expressjs@1vq_KcYR_pkfp1MtXaL75.md index 91754c849..2f5c5cddd 100644 --- a/src/data/roadmaps/nodejs/content/expressjs@1vq_KcYR_pkfp1MtXaL75.md +++ b/src/data/roadmaps/nodejs/content/expressjs@1vq_KcYR_pkfp1MtXaL75.md @@ -4,8 +4,8 @@ Express is a node js web application framework that provides broad features for Visit the following resources to learn more: -- [@official@Express.js Official Website](https://expressjs.com/) -- [@official@Official Getting Started Guide](https://expressjs.com/en/starter/installing.html) +- [@official@Express.js](https://expressjs.com/) +- [@official@Getting Started Guide](https://expressjs.com/en/starter/installing.html) - [@article@Express Full Guide](https://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm) - [@article@Sample Project](https://auth0.com/blog/create-a-simple-and-stylish-node-express-app/) - [@feed@Explore top posts about Express.js](https://app.daily.dev/tags/express?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/fastify@WkU_rI4i-UmNSxb5F9TI-.md b/src/data/roadmaps/nodejs/content/fastify@WkU_rI4i-UmNSxb5F9TI-.md index b3b2f2f89..b4c90e7ca 100644 --- a/src/data/roadmaps/nodejs/content/fastify@WkU_rI4i-UmNSxb5F9TI-.md +++ b/src/data/roadmaps/nodejs/content/fastify@WkU_rI4i-UmNSxb5F9TI-.md @@ -4,7 +4,7 @@ Fastify is a web framework highly focused on providing the best developer experi Visit the following resources to learn more: -- [@official@Fastify Website](https://www.fastify.io/) -- [@official@Fastify Official Documentations](https://www.fastify.io/docs/latest/) +- [@official@Fastify](https://www.fastify.io/) +- [@official@Fastify Documentations](https://www.fastify.io/docs/latest/) - [@video@Beginner Fastify Tutorial](https://www.youtube.com/watch?v=Lk-uVEVGxOA) - [@feed@Explore top posts about Fastify](https://app.daily.dev/tags/fastify?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/figlet-package@PHLdJylzNZDJBGi8FFsfO.md b/src/data/roadmaps/nodejs/content/figlet-package@PHLdJylzNZDJBGi8FFsfO.md index 330915569..d02fb1c0d 100644 --- a/src/data/roadmaps/nodejs/content/figlet-package@PHLdJylzNZDJBGi8FFsfO.md +++ b/src/data/roadmaps/nodejs/content/figlet-package@PHLdJylzNZDJBGi8FFsfO.md @@ -4,4 +4,4 @@ This package aims to fully implement the FIGfont spec in JavaScript, which repre Visit the following resources to learn more: -- [@opensource@GitHub Repository](https://github.com/patorjk/figlet.js) +- [@opensource@figlet](https://github.com/patorjk/figlet.js) diff --git a/src/data/roadmaps/nodejs/content/fs-extra@zDmWGRrgwq3Gjfkyk6crK.md b/src/data/roadmaps/nodejs/content/fs-extra@zDmWGRrgwq3Gjfkyk6crK.md index d94383967..cacb65b39 100644 --- a/src/data/roadmaps/nodejs/content/fs-extra@zDmWGRrgwq3Gjfkyk6crK.md +++ b/src/data/roadmaps/nodejs/content/fs-extra@zDmWGRrgwq3Gjfkyk6crK.md @@ -4,5 +4,5 @@ fs-extra adds file system methods that aren't included in the native fs module a Visit the following resources to learn more: -- [@official@Official Website](https://www.npmjs.com/package/fs-extra) +- [@official@fs-extra package](https://www.npmjs.com/package/fs-extra) - [@article@fs-extra vs fs](https://ar.al/2021/03/07/fs-extra-to-fs/) diff --git a/src/data/roadmaps/nodejs/content/fs-module@b1r1X3XCoPSayQjDBcy54.md b/src/data/roadmaps/nodejs/content/fs-module@b1r1X3XCoPSayQjDBcy54.md index 338939259..21ec2fc24 100644 --- a/src/data/roadmaps/nodejs/content/fs-module@b1r1X3XCoPSayQjDBcy54.md +++ b/src/data/roadmaps/nodejs/content/fs-module@b1r1X3XCoPSayQjDBcy54.md @@ -4,6 +4,6 @@ File System or `fs` module is a built in module in Node that enables interacting Visit the following resources to learn more: -- [@official@Official Documentation](https://nodejs.org/api/fs.html) +- [@official@fs](https://nodejs.org/api/fs.html) - [@article@More about fs module](https://www.w3schools.com/nodejs/nodejs_filesystem.asp) - [@video@Using fs](https://www.youtube.com/watch?v=ZySsdm576wE) diff --git a/src/data/roadmaps/nodejs/content/got-package@6stiDKubT6XVAOGiJ6wsx.md b/src/data/roadmaps/nodejs/content/got-package@6stiDKubT6XVAOGiJ6wsx.md index 42e9e2148..ae34d48a2 100644 --- a/src/data/roadmaps/nodejs/content/got-package@6stiDKubT6XVAOGiJ6wsx.md +++ b/src/data/roadmaps/nodejs/content/got-package@6stiDKubT6XVAOGiJ6wsx.md @@ -4,5 +4,5 @@ Got is a lighter, human-friendly, and powerful HTTP request library explicitly d Visit the following resources to learn more: -- [@official@Official Documentation](https://www.npmjs.com/package/got) +- [@official@Got Documentation](https://www.npmjs.com/package/got) - [@article@How to consume APIs using GOT in Node.js?](https://rapidapi.com/guides/call-apis-got) diff --git a/src/data/roadmaps/nodejs/content/history-of-nodejs@Vrcv5px-3fqmyJnQv3WBK.md b/src/data/roadmaps/nodejs/content/history-of-nodejs@Vrcv5px-3fqmyJnQv3WBK.md index 2fccaa9a0..1f8049a25 100644 --- a/src/data/roadmaps/nodejs/content/history-of-nodejs@Vrcv5px-3fqmyJnQv3WBK.md +++ b/src/data/roadmaps/nodejs/content/history-of-nodejs@Vrcv5px-3fqmyJnQv3WBK.md @@ -6,5 +6,5 @@ Visit the following resources to learn more: - [@article@Rising Stack - History of Node.js on a Timeline](https://blog.risingstack.com/history-of-node-js/) - [@article@SAP Press - How Did Node.js Come About?](https://blog.sap-press.com/how-did-node.js-come-about) -- [@video@Node.js: The Documentary | An origin story](https://youtu.be/LB8KwiiUGy0) +- [@video@Node.js: The Documentary | An Origin Story](https://youtu.be/LB8KwiiUGy0) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/hono@Xa-lA1wbZ9JZ_XpXfhhw5.md b/src/data/roadmaps/nodejs/content/hono@Xa-lA1wbZ9JZ_XpXfhhw5.md index dcb3b84f8..7da06aaf2 100644 --- a/src/data/roadmaps/nodejs/content/hono@Xa-lA1wbZ9JZ_XpXfhhw5.md +++ b/src/data/roadmaps/nodejs/content/hono@Xa-lA1wbZ9JZ_XpXfhhw5.md @@ -4,5 +4,5 @@ Hono is a lightweight, simple, and fast web framework for Cloudflare Workers, De Visit the following resources to learn more: -- [@article@Hono Official Documentations](https://hono.dev/docs/) +- [@official@Hono Documentation](https://hono.dev/docs/) - [@article@Build a web application with Hono](https://blog.logrocket.com/build-web-application-hono/) diff --git a/src/data/roadmaps/nodejs/content/http-module@Sjc1YDtbzXyLQH711_3nj.md b/src/data/roadmaps/nodejs/content/http-module@Sjc1YDtbzXyLQH711_3nj.md index 050ac1c9e..fc40c9c62 100644 --- a/src/data/roadmaps/nodejs/content/http-module@Sjc1YDtbzXyLQH711_3nj.md +++ b/src/data/roadmaps/nodejs/content/http-module@Sjc1YDtbzXyLQH711_3nj.md @@ -8,5 +8,5 @@ You can make API calls using the `http` module in Node.js as well. Here are the Visit the following resources to learn more: - [@official@Node.js `http.get()` documentation](https://nodejs.org/docs/latest-v16.x/api/http.html#httpgeturl-options-callback) -- [@official@Node `http.request()` documentation](https://nodejs.org/docs/latest-v16.x/api/http.html#httprequesturl-options-callback) +- [@official@Node.js `http.request()` documentation](https://nodejs.org/docs/latest-v16.x/api/http.html#httprequesturl-options-callback) - [@article@How To Create an HTTP Client with Core HTTP in Node.js](https://www.digitalocean.com/community/tutorials/how-to-create-an-http-client-with-core-http-in-node-js) diff --git a/src/data/roadmaps/nodejs/content/inquirer-package@WFJJtIqVoBIhK10XY-d7l.md b/src/data/roadmaps/nodejs/content/inquirer-package@WFJJtIqVoBIhK10XY-d7l.md index 9ae2118fd..392c094ec 100644 --- a/src/data/roadmaps/nodejs/content/inquirer-package@WFJJtIqVoBIhK10XY-d7l.md +++ b/src/data/roadmaps/nodejs/content/inquirer-package@WFJJtIqVoBIhK10XY-d7l.md @@ -7,6 +7,6 @@ You can use it to empower your terminal applications that need user input or to Visit the following resources to learn more: -- [@opensource@Official Docs](https://github.com/SBoudrias/Inquirer.js#readme) +- [@opensource@Inquirer](https://github.com/SBoudrias/Inquirer.js#readme) - [@article@How To Create Interactive Command-line Prompts with Inquirer.js](https://www.digitalocean.com/community/tutorials/nodejs-interactive-command-line-prompts) - [@video@How to make a CLI in Node.js with Inquirer](https://www.youtube.com/watch?v=0xjfkl9nODQ) diff --git a/src/data/roadmaps/nodejs/content/introduction-to-nodejs@KDd40JOAvZ8O1mfhTYB3K.md b/src/data/roadmaps/nodejs/content/introduction-to-nodejs@KDd40JOAvZ8O1mfhTYB3K.md index ae9eaf9e4..102e93c45 100644 --- a/src/data/roadmaps/nodejs/content/introduction-to-nodejs@KDd40JOAvZ8O1mfhTYB3K.md +++ b/src/data/roadmaps/nodejs/content/introduction-to-nodejs@KDd40JOAvZ8O1mfhTYB3K.md @@ -6,6 +6,6 @@ It is used for server-side programming, and primarily deployed for non-blocking, Visit the following resources to learn more: -- [@official@Official Website](https://nodejs.org/en/) -- [@official@Official Documentation](https://nodejs.org/en/docs/) +- [@official@Node.js](https://nodejs.org/en/) +- [@official@Node.js Documentation](https://nodejs.org/en/docs/) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/jest@5xrbKv2stKPJRv7Vzf9nM.md b/src/data/roadmaps/nodejs/content/jest@5xrbKv2stKPJRv7Vzf9nM.md index 49b9f3cc8..a55b08e55 100644 --- a/src/data/roadmaps/nodejs/content/jest@5xrbKv2stKPJRv7Vzf9nM.md +++ b/src/data/roadmaps/nodejs/content/jest@5xrbKv2stKPJRv7Vzf9nM.md @@ -4,6 +4,6 @@ Jest is a delightful JavaScript Testing Framework with a focus on simplicity. It Visit the following resources to learn more: -- [@official@Jest Website](https://jestjs.io) -- [@article@Jest Documentation](https://jestjs.io/docs/getting-started) +- [@official@Jest](https://jestjs.io) +- [@official@Jest Documentation](https://jestjs.io/docs/getting-started) - [@feed@Explore top posts about Jest](https://app.daily.dev/tags/jest?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/jsonwebtoken@7u2WMxjLx3mMtn0cha4M7.md b/src/data/roadmaps/nodejs/content/jsonwebtoken@7u2WMxjLx3mMtn0cha4M7.md index 6c00ddcca..ed36f1fc7 100644 --- a/src/data/roadmaps/nodejs/content/jsonwebtoken@7u2WMxjLx3mMtn0cha4M7.md +++ b/src/data/roadmaps/nodejs/content/jsonwebtoken@7u2WMxjLx3mMtn0cha4M7.md @@ -4,6 +4,6 @@ JWT, or JSON-Web-Token, is an open standard for sharing security information bet Visit the following resources to learn more: -- [@official@Package Documentation](https://www.npmjs.com/package/jsonwebtoken) +- [@official@JSON Package Documentation](https://www.npmjs.com/package/jsonwebtoken) - [@article@What is JWT](https://www.akana.com/blog/what-is-jwt) - [@video@JWT Implementation](https://www.youtube.com/watch?v=mbsmsi7l3r4) diff --git a/src/data/roadmaps/nodejs/content/keep-app-running@af7n-J7VvbdpZh9lwA773.md b/src/data/roadmaps/nodejs/content/keep-app-running@af7n-J7VvbdpZh9lwA773.md index 68e64f41a..2623010cc 100644 --- a/src/data/roadmaps/nodejs/content/keep-app-running@af7n-J7VvbdpZh9lwA773.md +++ b/src/data/roadmaps/nodejs/content/keep-app-running@af7n-J7VvbdpZh9lwA773.md @@ -4,5 +4,5 @@ PM2 lets you run your nodejs scripts forever. In the event that your application Visit the following resources to learn more: -- [@article@Keep a node application constantly running](https://devtut.github.io/nodejs/keep-a-node-application-constantly-running.html#use-pm2-as-a-process-manager) +- [@article@Keep a Node Application Constantly Running](https://devtut.github.io/nodejs/keep-a-node-application-constantly-running.html#use-pm2-as-a-process-manager) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/knex@HDDnt79_PCB5JU-KnHKUh.md b/src/data/roadmaps/nodejs/content/knex@HDDnt79_PCB5JU-KnHKUh.md index 9c33b2396..e5bf26bb3 100644 --- a/src/data/roadmaps/nodejs/content/knex@HDDnt79_PCB5JU-KnHKUh.md +++ b/src/data/roadmaps/nodejs/content/knex@HDDnt79_PCB5JU-KnHKUh.md @@ -4,5 +4,5 @@ Knex.js is a "batteries included" SQL query builder for PostgreSQL, CockroachDB, Visit the following resources to learn more: -- [@official@Knex.js Docs](https://knexjs.org) +- [@official@Knex.js](https://knexjs.org) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/ky@-_2letLUta5Ymc5eEOKhn.md b/src/data/roadmaps/nodejs/content/ky@-_2letLUta5Ymc5eEOKhn.md index f9aee52d8..dd34f7684 100644 --- a/src/data/roadmaps/nodejs/content/ky@-_2letLUta5Ymc5eEOKhn.md +++ b/src/data/roadmaps/nodejs/content/ky@-_2letLUta5Ymc5eEOKhn.md @@ -4,5 +4,5 @@ Ky is a tiny and elegant HTTP client based on the browser Fetch API. Ky targets Visit the following resources to learn more: -- [@opensource@Ky Official Docs](https://github.com/sindresorhus/ky) +- [@opensource@Ky Docs](https://github.com/sindresorhus/ky) - [@official@npmjs.org](https://www.npmjs.com/package/ky/v/0.9.0) diff --git a/src/data/roadmaps/nodejs/content/marko@f2DyjBIglAZ6NoHaRnlzt.md b/src/data/roadmaps/nodejs/content/marko@f2DyjBIglAZ6NoHaRnlzt.md index 957744f15..ee8a104fe 100644 --- a/src/data/roadmaps/nodejs/content/marko@f2DyjBIglAZ6NoHaRnlzt.md +++ b/src/data/roadmaps/nodejs/content/marko@f2DyjBIglAZ6NoHaRnlzt.md @@ -4,4 +4,4 @@ Marko is a fast and lightweight HTML-based templating engine that compiles templ Visit the following resources to learn more: -- [@article@Marko Documentation](https://markojs.com/docs/guides-overview/) +- [@official@Marko Documentation](https://markojs.com/docs/guides-overview/) diff --git a/src/data/roadmaps/nodejs/content/memory-leaks@oU9I7KBZoTSXXFmYscEIq.md b/src/data/roadmaps/nodejs/content/memory-leaks@oU9I7KBZoTSXXFmYscEIq.md index 8dee11075..04d75efb2 100644 --- a/src/data/roadmaps/nodejs/content/memory-leaks@oU9I7KBZoTSXXFmYscEIq.md +++ b/src/data/roadmaps/nodejs/content/memory-leaks@oU9I7KBZoTSXXFmYscEIq.md @@ -4,7 +4,7 @@ Memory leaks are caused when your Node.js app’s CPU and memory usage increases Visit the following resources to learn more: -- [@article@Memory leaks in Node.js](https://sematext.com/blog/nodejs-memory-leaks/) -- [@article@Memory leaks causes](https://sematext.com/blog/nodejs-memory-leaks/#what-causes-them-common-node-js-memory-leaks) -- [@article@Memory leaks detectors](https://sematext.com/blog/nodejs-memory-leaks/#node-js-memory-leak-detectors) +- [@article@Memory Leaks in Node.js](https://sematext.com/blog/nodejs-memory-leaks/) +- [@article@Memory Leaks Causes](https://sematext.com/blog/nodejs-memory-leaks/#what-causes-them-common-node-js-memory-leaks) +- [@article@Memory Leaks Detectors](https://sematext.com/blog/nodejs-memory-leaks/#node-js-memory-leak-detectors) - [@feed@Explore top posts about General Programming](https://app.daily.dev/tags/general-programming?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/modules@mbGFT6S7mL3bHHEZv0_s2.md b/src/data/roadmaps/nodejs/content/modules@mbGFT6S7mL3bHHEZv0_s2.md index ea46f1397..e3f41988b 100644 --- a/src/data/roadmaps/nodejs/content/modules@mbGFT6S7mL3bHHEZv0_s2.md +++ b/src/data/roadmaps/nodejs/content/modules@mbGFT6S7mL3bHHEZv0_s2.md @@ -5,6 +5,6 @@ We split our code into different files to maintain, organize and reuse code when Visit the following resources to learn more: - [@official@Modules: CommonJS modules](https://nodejs.org/api/modules.html#modules-commonjs-modules) -- [@article@CommonJS vs. ES modules in Node.js](https://blog.logrocket.com/commonjs-vs-es-modules-node-js/) +- [@article@CommonJS vs. ES Modules in Node.js](https://blog.logrocket.com/commonjs-vs-es-modules-node-js/) - [@video@Modules in Node.js](https://www.youtube.com/watch?v=9Amxzvq5LY8&) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/mongoose@NDf-o-WECK02mVnZ8IFxy.md b/src/data/roadmaps/nodejs/content/mongoose@NDf-o-WECK02mVnZ8IFxy.md index a597db69a..93e370f64 100644 --- a/src/data/roadmaps/nodejs/content/mongoose@NDf-o-WECK02mVnZ8IFxy.md +++ b/src/data/roadmaps/nodejs/content/mongoose@NDf-o-WECK02mVnZ8IFxy.md @@ -4,6 +4,6 @@ Mongoose is an Object Data Modeling (ODM) library for MongoDB and Node.js. Mongo Visit the following resources to learn more: -- [@official@Mongoose Website](https://mongoosejs.com) +- [@official@Mongoose](https://mongoosejs.com) - [@article@Getting Started with MongoDB and Mongoose](https://www.mongodb.com/developer/languages/javascript/getting-started-with-mongodb-and-mongoose/) - [@feed@Explore top posts about Mongoose](https://app.daily.dev/tags/mongoose?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/monitor-changes-dev@swp4wBgA7z-sd64VDkMrw.md b/src/data/roadmaps/nodejs/content/monitor-changes-dev@swp4wBgA7z-sd64VDkMrw.md index b1f97fa51..6164cf1d5 100644 --- a/src/data/roadmaps/nodejs/content/monitor-changes-dev@swp4wBgA7z-sd64VDkMrw.md +++ b/src/data/roadmaps/nodejs/content/monitor-changes-dev@swp4wBgA7z-sd64VDkMrw.md @@ -2,5 +2,6 @@ In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using `nodemon` to restart the process automatically. -Since Node.js 18.11.0, you can run Node with the `--watch` flag to reload your app everytime a file is changed. So you don't need to use `nodemon` anymore. -[Node.js 18.11.0 Changelog](https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V18.md#18.11.0). +Since Node.js 18.11.0, you can run Node with the `--watch` flag to reload your app every time a file is changed. So you don't need to use `nodemon` anymore. + +Visit the following resources to learn more: diff --git a/src/data/roadmaps/nodejs/content/morgan@CTHFGgtXFpke4aPhh5vRY.md b/src/data/roadmaps/nodejs/content/morgan@CTHFGgtXFpke4aPhh5vRY.md index bd5270022..8e31730e2 100644 --- a/src/data/roadmaps/nodejs/content/morgan@CTHFGgtXFpke4aPhh5vRY.md +++ b/src/data/roadmaps/nodejs/content/morgan@CTHFGgtXFpke4aPhh5vRY.md @@ -4,5 +4,5 @@ Morgan is a NodeJS and express.js middleware to log the HTTP request and error, Visit the following resources to learn more: -- [@official@Official Website](https://www.npmjs.com/package/morgan) -- [@article@How to use Morgan|DigitalOcean](https://www.digitalocean.com/community/tutorials/nodejs-getting-started-morgan) +- [@official@morgan package](https://www.npmjs.com/package/morgan) +- [@article@How to Use Morgan | DigitalOcean](https://www.digitalocean.com/community/tutorials/nodejs-getting-started-morgan) diff --git a/src/data/roadmaps/nodejs/content/native-drivers@5WqLm53CHDT5uBoMH-iPl.md b/src/data/roadmaps/nodejs/content/native-drivers@5WqLm53CHDT5uBoMH-iPl.md index 53d4bfccf..28bc5b544 100644 --- a/src/data/roadmaps/nodejs/content/native-drivers@5WqLm53CHDT5uBoMH-iPl.md +++ b/src/data/roadmaps/nodejs/content/native-drivers@5WqLm53CHDT5uBoMH-iPl.md @@ -1,3 +1,7 @@ # Native Drivers -Another way to connect to different databases in Node.js is to use the official native drivers provided by the database. For example, here is the [list of drivers by MongoDB](https://www.mongodb.com/docs/drivers/) +Another way to connect to different databases in Node.js is to use the official native drivers provided by the database. + +Visit the following resources to learn more: + +[@official@MongoDB Drivers](https://www.mongodb.com/docs/drivers/) diff --git a/src/data/roadmaps/nodejs/content/native-drivers@KpC-QYKalUp7VUvnMKBoW.md b/src/data/roadmaps/nodejs/content/native-drivers@KpC-QYKalUp7VUvnMKBoW.md index c51a65caa..9877e20f6 100644 --- a/src/data/roadmaps/nodejs/content/native-drivers@KpC-QYKalUp7VUvnMKBoW.md +++ b/src/data/roadmaps/nodejs/content/native-drivers@KpC-QYKalUp7VUvnMKBoW.md @@ -1,16 +1,3 @@ # Native drivers NativeDriver is an implementation of the WebDriver API which drives the UI of a native application rather than a web application. It extends the WebDriver API in a few key places, and re-interprets the existing API for native applications. - -- MySQL: - - [mysql](https://www.npmjs.com/package/mysql) - - [mysql2](https://www.npmjs.com/package/mysql2) -- MariaDB: - - [mariadb](https://www.npmjs.com/package/mariadb) -- PostgreSQL: - - [pg](https://www.npmjs.com/package/pg) -- Microsoft SQL Server: - - [tedious](https://www.npmjs.com/package/tedious) - - [mssql](https://www.npmjs.com/package/mssql) -- Oracle: - - [oracledb](https://www.npmjs.com/package/oracledb) diff --git a/src/data/roadmaps/nodejs/content/nestjs@tGD8XLHnfspfv8CbguGwV.md b/src/data/roadmaps/nodejs/content/nestjs@tGD8XLHnfspfv8CbguGwV.md index a4c8b9923..d1a37b6bb 100644 --- a/src/data/roadmaps/nodejs/content/nestjs@tGD8XLHnfspfv8CbguGwV.md +++ b/src/data/roadmaps/nodejs/content/nestjs@tGD8XLHnfspfv8CbguGwV.md @@ -4,7 +4,7 @@ NestJS is a progressive Node.js framework for creating efficient and scalable se Visit the following resources to learn more: -- [@official@NestJS Website](https://nestjs.com) -- [@article@NestJS Official Documentations](https://docs.nestjs.com) +- [@official@NestJS](https://nestjs.com) +- [@official@NestJS Documentations](https://docs.nestjs.com) - [@video@Beginner NestJS Tutorial](https://www.youtube.com/watch?v=GHTA143_b-s) - [@feed@Explore top posts about NestJS](https://app.daily.dev/tags/nestjs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/nodemon@2Ym2jMvov0lZ79aJFaw29.md b/src/data/roadmaps/nodejs/content/nodemon@2Ym2jMvov0lZ79aJFaw29.md index 8315021cc..4b4a2e6e5 100644 --- a/src/data/roadmaps/nodejs/content/nodemon@2Ym2jMvov0lZ79aJFaw29.md +++ b/src/data/roadmaps/nodejs/content/nodemon@2Ym2jMvov0lZ79aJFaw29.md @@ -1,10 +1,12 @@ # Nodemon -In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using [nodemon](https://nodemon.io/) or [PM2](https://pm2.keymetrics.io/docs/usage/quick-start/) to restart the process automatically. +In Node.js, you need to restart the process to make changes take effect. This adds an extra step to your workflow. You can eliminate this extra step by using nodemon or PM2 to restart the process automatically. -`nodemon` is a command-line interface (CLI) utility developed by [@rem](https://twitter.com/rem) that wraps your Node app, watches the file system, and automatically restarts the process. +`nodemon` is a command-line interface (CLI) utility developed by rem that wraps your Node app, watches the file system, and automatically restarts the process. Visit the following resources to learn more: +- [@official@Nodemon](https://nodemon.io/) +- [@article@PM2](https://pm2.keymetrics.io/docs/usage/quick-start/) - [@article@How To Restart Your Node.js Apps Automatically with nodemon](https://www.digitalocean.com/community/tutorials/workflow-nodemon) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/nodetest@oSLpy31XEcA2nRq9ks_LJ.md b/src/data/roadmaps/nodejs/content/nodetest@oSLpy31XEcA2nRq9ks_LJ.md index 5073cd257..c81745e35 100644 --- a/src/data/roadmaps/nodejs/content/nodetest@oSLpy31XEcA2nRq9ks_LJ.md +++ b/src/data/roadmaps/nodejs/content/nodetest@oSLpy31XEcA2nRq9ks_LJ.md @@ -2,7 +2,7 @@ `node:test` is a built-in module in Node.js that provides a simple, asynchronous test runner. It's designed to make writing tests as straightforward as writing any other code. -## Key Features +Key Features - Simplicity: Easy to use and understand. - Asynchronous Support: Handles asynchronous code gracefully. diff --git a/src/data/roadmaps/nodejs/content/npm-workspaces@WvxCGVKLvTUVEHeOcUQPg.md b/src/data/roadmaps/nodejs/content/npm-workspaces@WvxCGVKLvTUVEHeOcUQPg.md index 64faf23da..7260f2c03 100644 --- a/src/data/roadmaps/nodejs/content/npm-workspaces@WvxCGVKLvTUVEHeOcUQPg.md +++ b/src/data/roadmaps/nodejs/content/npm-workspaces@WvxCGVKLvTUVEHeOcUQPg.md @@ -5,5 +5,5 @@ Workspace is a generic term that refers to the set of npm CLI features that supp Visit the following resources to learn more: - [@official@npm workspaces](https://docs.npmjs.com/cli/using-npm/workspaces) -- [@article@Getting Started with Npm Workspaces ](https://ruanmartinelli.com/posts/npm-7-workspaces-1) +- [@article@Getting Started with Npm Workspaces](https://ruanmartinelli.com/posts/npm-7-workspaces-1) - [@feed@Explore top posts about NPM](https://app.daily.dev/tags/npm?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/npm@jQJ9aOKtg-O-GhWk5OgCK.md b/src/data/roadmaps/nodejs/content/npm@jQJ9aOKtg-O-GhWk5OgCK.md index 370e6aa82..bf0e16b63 100644 --- a/src/data/roadmaps/nodejs/content/npm@jQJ9aOKtg-O-GhWk5OgCK.md +++ b/src/data/roadmaps/nodejs/content/npm@jQJ9aOKtg-O-GhWk5OgCK.md @@ -6,9 +6,8 @@ It is two things: first and foremost, it is an online repository for the publish Visit the following resources to learn more: +- [@official@NPM Documentation](https://docs.npmjs.com/) - [@official@What is npm?](https://nodejs.org/en/learn/getting-started/an-introduction-to-the-npm-package-manager) - [@official@An introduction to the npm package manager](https://nodejs.org/en/learn/getting-started/an-introduction-to-the-npm-package-manager) -- [@official@Official Website](https://www.npmjs.com/) -- [@official@Official Documentation](https://docs.npmjs.com/) - [@video@NPM Crash Course](https://www.youtube.com/watch?v=jHDhaSSKmB0) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/npx@YdpJ-DUo8Q5ATRmF4s4YS.md b/src/data/roadmaps/nodejs/content/npx@YdpJ-DUo8Q5ATRmF4s4YS.md index c3e86affd..3fe3bff2b 100644 --- a/src/data/roadmaps/nodejs/content/npx@YdpJ-DUo8Q5ATRmF4s4YS.md +++ b/src/data/roadmaps/nodejs/content/npx@YdpJ-DUo8Q5ATRmF4s4YS.md @@ -4,5 +4,5 @@ npx is a very powerful command that's been available in npm starting version 5.2 Visit the following resources to learn more: +- [@official@npx](https://docs.npmjs.com/cli/commands/npx/) - [@article@Introduction to the npx Node.js Package Runner](https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b) -- [@official@Official Documentation](https://docs.npmjs.com/cli/commands/npx/) diff --git a/src/data/roadmaps/nodejs/content/passportjs@mIyv6S9a5dCHkk-JhhjKV.md b/src/data/roadmaps/nodejs/content/passportjs@mIyv6S9a5dCHkk-JhhjKV.md index dfdc5bf31..8e47bd465 100644 --- a/src/data/roadmaps/nodejs/content/passportjs@mIyv6S9a5dCHkk-JhhjKV.md +++ b/src/data/roadmaps/nodejs/content/passportjs@mIyv6S9a5dCHkk-JhhjKV.md @@ -4,7 +4,7 @@ Passport.js is authentication middleware for Node.js. It makes implementing auth Visit the following resources to learn more: -- [@official@PassportJS Website](https://www.passportjs.org/) -- [@official@PassportJS Official Documentation](https://www.passportjs.org/docs/) +- [@official@PassportJS](https://www.passportjs.org/) +- [@official@PassportJS Documentation](https://www.passportjs.org/docs/) - [@video@Implementation of OAuth using passportjs](https://www.youtube.com/watch?v=sakQbeRjgwg\&list=PL4cUxeGkcC9jdm7QX143aMLAqyM-jTZ2x) - [@feed@Explore top posts about JavaScript](https://app.daily.dev/tags/javascript?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/path-module@Blzb-fdQZMu6Xq5JDJW0_.md b/src/data/roadmaps/nodejs/content/path-module@Blzb-fdQZMu6Xq5JDJW0_.md index d59f058cb..598ff509e 100644 --- a/src/data/roadmaps/nodejs/content/path-module@Blzb-fdQZMu6Xq5JDJW0_.md +++ b/src/data/roadmaps/nodejs/content/path-module@Blzb-fdQZMu6Xq5JDJW0_.md @@ -4,6 +4,6 @@ The `path` module provides utilities for working with file and directory paths. Visit the following resources to learn more: -- [@official@Path Documentations](https://nodejs.org/api/path.html) +- [@official@Path Documentation](https://nodejs.org/api/path.html) - [@official@Learn Node.js File Paths](https://nodejs.org/en/learn/manipulating-files/nodejs-file-paths) - [@video@Path Module in Node.js](https://youtu.be/j95Lwxvi9JY) diff --git a/src/data/roadmaps/nodejs/content/playwright@Ix-g9pgJjEI04bSfROvlq.md b/src/data/roadmaps/nodejs/content/playwright@Ix-g9pgJjEI04bSfROvlq.md index cacbda3dc..b7b134a89 100644 --- a/src/data/roadmaps/nodejs/content/playwright@Ix-g9pgJjEI04bSfROvlq.md +++ b/src/data/roadmaps/nodejs/content/playwright@Ix-g9pgJjEI04bSfROvlq.md @@ -6,6 +6,6 @@ Playwright provides a high-level API to interact with web pages. You can write s Visit the following resources to learn more: -- [@official@Playwright Website](https://playwright.dev/) +- [@official@Playwright](https://playwright.dev/) - [@official@Playwright Docs](https://playwright.dev/docs/getting-started-vscode) - [@article@Getting Started with Playwright](https://learn.microsoft.com/en-us/shows/getting-started-with-end-to-end-testing-with-playwright/) diff --git a/src/data/roadmaps/nodejs/content/pm2@7WAuMMyelUbgwEHtnMmJv.md b/src/data/roadmaps/nodejs/content/pm2@7WAuMMyelUbgwEHtnMmJv.md index ed05a70f2..dab0ce991 100644 --- a/src/data/roadmaps/nodejs/content/pm2@7WAuMMyelUbgwEHtnMmJv.md +++ b/src/data/roadmaps/nodejs/content/pm2@7WAuMMyelUbgwEHtnMmJv.md @@ -4,5 +4,5 @@ PM2 is a production process manager for Node.js applications with a built-in loa Visit the following resources to learn more: -- [@article@Pm2 Website](https://pm2.keymetrics.io/) -- [@article@Pm2 Official Documentations](https://pm2.keymetrics.io/docs/usage/quick-start/) +- [@official@Pm2](https://pm2.keymetrics.io/) +- [@official@Pm2 Documentations](https://pm2.keymetrics.io/docs/usage/quick-start/) diff --git a/src/data/roadmaps/nodejs/content/prisma@3Qxtf8n6gJYdnRsuqa52Q.md b/src/data/roadmaps/nodejs/content/prisma@3Qxtf8n6gJYdnRsuqa52Q.md index 80b75d23f..909984c4e 100644 --- a/src/data/roadmaps/nodejs/content/prisma@3Qxtf8n6gJYdnRsuqa52Q.md +++ b/src/data/roadmaps/nodejs/content/prisma@3Qxtf8n6gJYdnRsuqa52Q.md @@ -4,6 +4,6 @@ Prisma provides an open source next-generation ORM in the TypeScript ecosystem. Visit the following resources to learn more: -- [@official@Prisma Website](https://www.prisma.io/) +- [@official@Prisma](https://www.prisma.io/) - [@video@Prisma & MongoDB Youtube Tutorial](https://www.youtube.com/watch?v=-7r4whMKt1s) - [@feed@Explore top posts about Prisma](https://app.daily.dev/tags/prisma?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/prisma@O7Cy2g_GPxKU6vPfEmNyi.md b/src/data/roadmaps/nodejs/content/prisma@O7Cy2g_GPxKU6vPfEmNyi.md index f0ba4e3e6..3961a0cbc 100644 --- a/src/data/roadmaps/nodejs/content/prisma@O7Cy2g_GPxKU6vPfEmNyi.md +++ b/src/data/roadmaps/nodejs/content/prisma@O7Cy2g_GPxKU6vPfEmNyi.md @@ -4,6 +4,6 @@ Prisma is an ORM that helps app developers build faster and make fewer errors. C Visit the following resources to learn more: -- [@official@Prisma Website](https://www.prisma.io/) -- [@official@Prisma Official Documentations](https://www.prisma.io/docs/) +- [@official@Prisma](https://www.prisma.io/) +- [@official@Prisma Documentation](https://www.prisma.io/docs/) - [@feed@Explore top posts about Prisma](https://app.daily.dev/tags/prisma?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/processcwd@QT2QE2FLkyUDpwMKYkFQL.md b/src/data/roadmaps/nodejs/content/processcwd@QT2QE2FLkyUDpwMKYkFQL.md index 3cb4866fc..b904ab429 100644 --- a/src/data/roadmaps/nodejs/content/processcwd@QT2QE2FLkyUDpwMKYkFQL.md +++ b/src/data/roadmaps/nodejs/content/processcwd@QT2QE2FLkyUDpwMKYkFQL.md @@ -4,5 +4,5 @@ The `process.cwd()` method returns the current working directory of the Node.js Visit the following resources to learn more: -- [@official@Official Website](https://nodejs.org/api/process.html#processcwd) +- [@official@process.cwd()](https://nodejs.org/api/process.html#processcwd) - [@article@Whats the difference between process.cwd() vs \_\_dirname?](https://stackoverflow.com/questions/9874382/whats-the-difference-between-process-cwd-vs-dirname) diff --git a/src/data/roadmaps/nodejs/content/processenv@wthXp2YGg3eTMbxsek77C.md b/src/data/roadmaps/nodejs/content/processenv@wthXp2YGg3eTMbxsek77C.md index c17b2b2e5..6be0f7404 100644 --- a/src/data/roadmaps/nodejs/content/processenv@wthXp2YGg3eTMbxsek77C.md +++ b/src/data/roadmaps/nodejs/content/processenv@wthXp2YGg3eTMbxsek77C.md @@ -4,5 +4,5 @@ In Node. js, process. env is a global variable that is injected during runtime. Visit the following resources to learn more: -- [@official@Node.js Learn environment variables](https://nodejs.org/en/learn/command-line/how-to-read-environment-variables-from-nodejs) +- [@official@Node.js Learn Environment Variables](https://nodejs.org/en/learn/command-line/how-to-read-environment-variables-from-nodejs) - [@article@Process.env Node](https://www.knowledgehut.com/blog/web-development/node-environment-variables) \ No newline at end of file diff --git a/src/data/roadmaps/nodejs/content/processstdin@betuntelnEMSHdatO6VPl.md b/src/data/roadmaps/nodejs/content/processstdin@betuntelnEMSHdatO6VPl.md index a174fbe93..d92da0864 100644 --- a/src/data/roadmaps/nodejs/content/processstdin@betuntelnEMSHdatO6VPl.md +++ b/src/data/roadmaps/nodejs/content/processstdin@betuntelnEMSHdatO6VPl.md @@ -4,5 +4,5 @@ The `process.stdin` is a standard Readable stream which listens for user input a Visit the following resources to learn more: -- [@official@Official Documentation](https://nodejs.org/api/process.html#processstdin) +- [@official@process.stdin](https://nodejs.org/api/process.html#processstdin) - [@article@Node.js Process stdin & stdout](https://nodecli.com/node-stdin-stdout) diff --git a/src/data/roadmaps/nodejs/content/promises@QcOqhuKWOUUUBSiu5Oelv.md b/src/data/roadmaps/nodejs/content/promises@QcOqhuKWOUUUBSiu5Oelv.md index 7c6a24ce1..921a55260 100644 --- a/src/data/roadmaps/nodejs/content/promises@QcOqhuKWOUUUBSiu5Oelv.md +++ b/src/data/roadmaps/nodejs/content/promises@QcOqhuKWOUUUBSiu5Oelv.md @@ -1,10 +1,13 @@ # Promises A promise is commonly defined as a proxy for a value that will eventually become available. + Asynchronous functions use promise behind the scenes, so understanding how promises work is fundamental to understanding how "async" and "await" works. + Once a promise has been called, it will start in a pending state. This means that the calling function continues executing, while the promise is pending until it resolves, giving the calling function whatever data was being requested. Creating a Promise: + The Promise API exposes a Promise constructor, which you initialize using new Promise(). Using resolve() and reject(), we can communicate back to the caller what the resulting Promise state was, and what to do with it. diff --git a/src/data/roadmaps/nodejs/content/prompts-package@xgsKrUdfB0g0DMQCLK3aY.md b/src/data/roadmaps/nodejs/content/prompts-package@xgsKrUdfB0g0DMQCLK3aY.md index 4edc7889b..e5bc3dfde 100644 --- a/src/data/roadmaps/nodejs/content/prompts-package@xgsKrUdfB0g0DMQCLK3aY.md +++ b/src/data/roadmaps/nodejs/content/prompts-package@xgsKrUdfB0g0DMQCLK3aY.md @@ -4,4 +4,4 @@ Prompts is a higher level and user friendly interface built on top of Node.js's Visit the following resources to learn more: -- [@official@Official Documentation](https://www.npmjs.com/package/prompts) +- [@official@Prompts](https://www.npmjs.com/package/prompts) diff --git a/src/data/roadmaps/nodejs/content/pug@O67e2qyhxP5joR5LGyZ2N.md b/src/data/roadmaps/nodejs/content/pug@O67e2qyhxP5joR5LGyZ2N.md index 3f99edbc4..914f01e02 100644 --- a/src/data/roadmaps/nodejs/content/pug@O67e2qyhxP5joR5LGyZ2N.md +++ b/src/data/roadmaps/nodejs/content/pug@O67e2qyhxP5joR5LGyZ2N.md @@ -6,7 +6,7 @@ Pug is a high-performance template engine heavily influenced by Haml and impleme Visit the following resources to learn more: -- [@article@Getting started with PugJs](https://pugjs.org/api/getting-started.html) +- [@official@Getting started with PugJs](https://pugjs.org/api/getting-started.html) - [@article@How to Build a Node Application Using a Pug Template](https://blog.bitsrc.io/how-to-build-a-node-application-using-a-pug-template-7319ab1bba69?gi=40b338891148) - [@video@Node.js + Express - Tutorial - PugJS Templating Engine](https://www.youtube.com/watch?v=DSp9ExFw3Ig) - [@article@Pug.js tutorial](https://zetcode.com/javascript/pugjs/) diff --git a/src/data/roadmaps/nodejs/content/sequelize@fOm-ktIaLqrmA0zln0Bga.md b/src/data/roadmaps/nodejs/content/sequelize@fOm-ktIaLqrmA0zln0Bga.md index 1c91c7f2a..ab5f9f43b 100644 --- a/src/data/roadmaps/nodejs/content/sequelize@fOm-ktIaLqrmA0zln0Bga.md +++ b/src/data/roadmaps/nodejs/content/sequelize@fOm-ktIaLqrmA0zln0Bga.md @@ -2,14 +2,14 @@ Sequelize is an easy-to-use and promise-based Node.js ORM tool for Postgres, MySQL, MariaDB, SQLite, DB2, Microsoft SQL Server, and Snowflake. It features solid transaction support, relations, eager and lazy loading, read replication and more. -## What is an ORM ? +What is an ORM ? -An ORM is known as Object Relational Mapper. This is a tool or a level of abstraction which maps(converts) data in a relational database into programmatic objects that can be manipulated by a programmer using a programming language(usually an OOP language). ORMs solely exist to map the details between two data sources which due to a mismatch cannot coexist together. +An ORM is known as Object Relational Mapper. This is a tool or a level of abstraction which maps(converts) data in a relational database into programmatic objects that can be manipulated by a programmer using a programming language (usually an OOP language). ORMs solely exist to map the details between two data sources which due to a mismatch cannot coexist together. Visit the following resources to learn more: -- [@official@Sequelize Website](https://sequelize.org/) +- [@official@Sequelize](https://sequelize.org/) - [@official@Sequelize - NPM Package](https://www.npmjs.com/package/sequelize) -- [@official@Official Sequelize Docs](https://sequelize.org/docs/v6/getting-started/) +- [@official@Sequelize Docs](https://sequelize.org/docs/v6/getting-started/) - [@article@Getting started with Sequelize](https://levelup.gitconnected.com/the-ultimate-guide-to-get-started-with-sequelize-orm-238588d3516e) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/nodejs/content/setimmediate@YvTPpoIiSqjDYi0Q10kWh.md b/src/data/roadmaps/nodejs/content/setimmediate@YvTPpoIiSqjDYi0Q10kWh.md index b689ad4aa..9ddbc6ebc 100644 --- a/src/data/roadmaps/nodejs/content/setimmediate@YvTPpoIiSqjDYi0Q10kWh.md +++ b/src/data/roadmaps/nodejs/content/setimmediate@YvTPpoIiSqjDYi0Q10kWh.md @@ -4,5 +4,5 @@ The `setImmediate` function delays the execution of a function to be called afte Visit the following resources to learn more: -- [@article@Understanding setImmediate](https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate) - [@official@Understanding setImmediate](https://nodejs.org/en/learn/asynchronous-work/understanding-setimmediate) +- [@article@Understanding setImmediate](https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate) diff --git a/src/data/roadmaps/nodejs/content/streams@WrnjjUDXQwwMXQjmgK72U.md b/src/data/roadmaps/nodejs/content/streams@WrnjjUDXQwwMXQjmgK72U.md index 80e4cece6..727bf800d 100644 --- a/src/data/roadmaps/nodejs/content/streams@WrnjjUDXQwwMXQjmgK72U.md +++ b/src/data/roadmaps/nodejs/content/streams@WrnjjUDXQwwMXQjmgK72U.md @@ -11,7 +11,7 @@ Multiple streams can be chained together using `pipe()` method. Visit the following resources to learn more: -- [@official@Stream API Official Documentation](https://nodejs.org/api/stream.html) +- [@official@Stream API Documentation](https://nodejs.org/api/stream.html) - [@video@Node.js Streams tutorial](https://www.youtube.com/watch?v=GlybFFMXXmQ) - [@article@Understanding Streams in Node.js](https://nodesource.com/blog/understanding-streams-in-nodejs) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?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 2811994b6..4eebbe1b4 100644 --- a/src/data/roadmaps/nodejs/content/system-errors@05YY-AhLKzn4Ypr4eow5E.md +++ b/src/data/roadmaps/nodejs/content/system-errors@05YY-AhLKzn4Ypr4eow5E.md @@ -3,7 +3,7 @@ Node.js generates system errors when exceptions occur within its runtime environment. These usually occur when an application violates an operating system constraint. For example, a system error will occur if an application attempts to read a file that does not exist. -Below are the system errors commonly encountered when writing a Node.js program +Below are the system errors commonly encountered when writing a Node.js program: 1. EACCES - Permission denied 2. EADDRINUSE - Address already in use @@ -21,5 +21,5 @@ 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) +- [@official@Node.js Errors](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/nodejs/content/template-engines@J0ErCAZT5B97ZMogU2JHd.md b/src/data/roadmaps/nodejs/content/template-engines@J0ErCAZT5B97ZMogU2JHd.md index 3897584b9..0dc96830f 100644 --- a/src/data/roadmaps/nodejs/content/template-engines@J0ErCAZT5B97ZMogU2JHd.md +++ b/src/data/roadmaps/nodejs/content/template-engines@J0ErCAZT5B97ZMogU2JHd.md @@ -10,3 +10,9 @@ Some examples of template engines in Node.js are: - EJS - Handlebars - HAML + +Visit the following resources to learn more: + +- [@official@Getting Started with Pug](https://pugjs.org/api/getting-started.html) +- [@official@Handlebars Package](https://www.npmjs.com/package/handlebars) +- [@official@EJS Package](https://www.npmjs.com/package/ejs) diff --git a/src/data/roadmaps/nodejs/content/testing@90NIFfbWjTbyKZKwyJlfI.md b/src/data/roadmaps/nodejs/content/testing@90NIFfbWjTbyKZKwyJlfI.md index 6e8185d09..59379feed 100644 --- a/src/data/roadmaps/nodejs/content/testing@90NIFfbWjTbyKZKwyJlfI.md +++ b/src/data/roadmaps/nodejs/content/testing@90NIFfbWjTbyKZKwyJlfI.md @@ -6,6 +6,6 @@ The two most common testing approaches are unit testing and end-to-end testing. Visit the following resources to learn more: -- [@article@Wikipedia - Software Testing](https://en.wikipedia.org/wiki/Software_testing) +- [@article@Software Testing](https://en.wikipedia.org/wiki/Software_testing) - [@official@Vitest](https://vitest.dev/) - [@official@Jest](https://jest.io) diff --git a/src/data/roadmaps/nodejs/content/threads@KzUmXkwrmU_ssVBjSHAiY.md b/src/data/roadmaps/nodejs/content/threads@KzUmXkwrmU_ssVBjSHAiY.md index 28233bde1..0e3884362 100644 --- a/src/data/roadmaps/nodejs/content/threads@KzUmXkwrmU_ssVBjSHAiY.md +++ b/src/data/roadmaps/nodejs/content/threads@KzUmXkwrmU_ssVBjSHAiY.md @@ -1,7 +1,6 @@ # Nodejs Threads -Node.js is a single-threaded language and gives us ways to work parallelly to our main process. -Taking note of nowadays multicore system single threading is very memory efficient. +Node.js is a single-threaded language and gives us ways to work parallelly to our main process. Taking note of nowadays multicore system single threading is very memory efficient. Visit the following resources to learn more: diff --git a/src/data/roadmaps/nodejs/content/typeorm@rk5FtAPDi1TpvWd0yBbtl.md b/src/data/roadmaps/nodejs/content/typeorm@rk5FtAPDi1TpvWd0yBbtl.md index 7a2e71d0a..4dd773b8d 100644 --- a/src/data/roadmaps/nodejs/content/typeorm@rk5FtAPDi1TpvWd0yBbtl.md +++ b/src/data/roadmaps/nodejs/content/typeorm@rk5FtAPDi1TpvWd0yBbtl.md @@ -2,8 +2,6 @@ TypeORM is an ORM that can run in NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms and can be used with TypeScript and JavaScript (ES5, ES6, ES7, ES8). Its goal is to always support the latest JavaScript features and provide additional features that help you to develop any kind of application that uses databases - from small applications with a few tables to large scale enterprise applications with multiple databases. -TypeORM supports both [Active Record](https://typeorm.io/active-record-data-mapper#what-is-the-active-record-pattern) and [Data Mapper](https://typeorm.io/active-record-data-mapper#what-is-the-data-mapper-pattern) patterns, unlike all other JavaScript ORMs currently in existence, which means you can write high quality, loosely coupled, scalable, maintainable applications the most productive way. - Visit the following resources to learn more: - [@official@TypeORM Docs](https://typeorm.io) diff --git a/src/data/roadmaps/nodejs/content/updating-packages@bYBz12FUiJ1qLgdQSGyGK.md b/src/data/roadmaps/nodejs/content/updating-packages@bYBz12FUiJ1qLgdQSGyGK.md index 3f140119d..b4cfc05e0 100644 --- a/src/data/roadmaps/nodejs/content/updating-packages@bYBz12FUiJ1qLgdQSGyGK.md +++ b/src/data/roadmaps/nodejs/content/updating-packages@bYBz12FUiJ1qLgdQSGyGK.md @@ -6,3 +6,4 @@ Visit the following resources to learn more: - [@video@How to Update All NPM Dependencies At Once](https://www.youtube.com/watch?v=Ghdfdq17JAY) - [@official@Updating packages downloaded from the registry](https://docs.npmjs.com/updating-packages-downloaded-from-the-registry) +- [@article@How to Update Npm Packages Safely With Npm Check Updates](https://chrispennington.blog/blog/how-to-update-npm-packages-safely-with-npm-check-updates/) diff --git a/src/data/roadmaps/nodejs/content/using-debugger@XEGTeGWw05xWYOfUo3POE.md b/src/data/roadmaps/nodejs/content/using-debugger@XEGTeGWw05xWYOfUo3POE.md index 26d087958..3c73792bb 100644 --- a/src/data/roadmaps/nodejs/content/using-debugger@XEGTeGWw05xWYOfUo3POE.md +++ b/src/data/roadmaps/nodejs/content/using-debugger@XEGTeGWw05xWYOfUo3POE.md @@ -6,5 +6,6 @@ Example - `$ node inspect myscript.js` Visit the following resources to learn more: -- [@official@Official Docs](https://nodejs.org/api/debugger.html) +- [@official@Debugger](https://nodejs.org/api/debugger.html) +- [@official@Inspect Docs](https://nodejs.org/en/learn/getting-started/debugging) - [@article@Freecodecamp.org - Debugging](https://www.freecodecamp.org/news/how-to-debug-node-js-applications/) diff --git a/src/data/roadmaps/nodejs/content/vitest@qjToBaMenW3SDtEfoCbQ6.md b/src/data/roadmaps/nodejs/content/vitest@qjToBaMenW3SDtEfoCbQ6.md index 314ecac77..201d0d163 100644 --- a/src/data/roadmaps/nodejs/content/vitest@qjToBaMenW3SDtEfoCbQ6.md +++ b/src/data/roadmaps/nodejs/content/vitest@qjToBaMenW3SDtEfoCbQ6.md @@ -4,5 +4,5 @@ Vitest is a Vite-native unit testing framework that's Jest-compatible. Vitest is Visit the following resources to learn more: -- [@official@Official Website](https://vitest.dev/) -- [@article@Vitest Documentation](https://vitest.dev/guide/) +- [@official@Vitest](https://vitest.dev/) +- [@official@Vitest Documentation](https://vitest.dev/guide/) diff --git a/src/data/roadmaps/nodejs/content/what-is-nodejs@Mp056kNnwsRWeEXuhGPy-.md b/src/data/roadmaps/nodejs/content/what-is-nodejs@Mp056kNnwsRWeEXuhGPy-.md index 0d236e6cf..c8a9c9598 100644 --- a/src/data/roadmaps/nodejs/content/what-is-nodejs@Mp056kNnwsRWeEXuhGPy-.md +++ b/src/data/roadmaps/nodejs/content/what-is-nodejs@Mp056kNnwsRWeEXuhGPy-.md @@ -6,7 +6,7 @@ Node.js provides a set of asynchronous I/O primitives in its standard library th Visit the following resources to learn more: -- [@official@Official Website](https://nodejs.org/en/about/) +- [@official@Node.js](https://nodejs.org/en/about/) - [@official@Node.js - Getting Started](https://nodejs.org/en/learn/getting-started/introduction-to-nodejs) - [@article@Node.js - Introduction](https://www.w3schools.com/nodejs/nodejs_intro.asp) - [@video@What is Node.js?](https://www.youtube.com/watch?v=uVwtVBpw7RQ) diff --git a/src/data/roadmaps/nodejs/content/winston@Oe9cQCz2lwSaot7miZOta.md b/src/data/roadmaps/nodejs/content/winston@Oe9cQCz2lwSaot7miZOta.md index eccfd65e2..cc9f8f93a 100644 --- a/src/data/roadmaps/nodejs/content/winston@Oe9cQCz2lwSaot7miZOta.md +++ b/src/data/roadmaps/nodejs/content/winston@Oe9cQCz2lwSaot7miZOta.md @@ -4,5 +4,5 @@ winston is designed to be a simple and universal logging library with support fo Visit the following resources to learn more: -- [@opensource@winston Website](https://github.com/winstonjs/winston) +- [@opensource@winston](https://github.com/winstonjs/winston?tab=readme-ov-file#readme) - -[@article@A Complete Guide to Winston Logging in Node.js](https://betterstack.com/community/guides/logging/how-to-install-setup-and-use-winston-and-morgan-to-log-node-js-applications/) diff --git a/src/data/roadmaps/nodejs/content/worker-threads@bH2Iv3BX0ZiWD3lOmC_m_.md b/src/data/roadmaps/nodejs/content/worker-threads@bH2Iv3BX0ZiWD3lOmC_m_.md index 2b656ab13..6a4c05410 100644 --- a/src/data/roadmaps/nodejs/content/worker-threads@bH2Iv3BX0ZiWD3lOmC_m_.md +++ b/src/data/roadmaps/nodejs/content/worker-threads@bH2Iv3BX0ZiWD3lOmC_m_.md @@ -5,4 +5,4 @@ With worker threads, we can achieve a much efficient application without creatin Visit the following resources to learn more: -- [@official@Worker Threads Docs](https://nodejs.org/api/worker_threads.html#worker-threads) +- [@official@Worker Threads](https://nodejs.org/api/worker_threads.html#worker-threads) diff --git a/src/data/roadmaps/nodejs/content/working-with-databases@5l-lZ8gwVLqqAF_n99vIO.md b/src/data/roadmaps/nodejs/content/working-with-databases@5l-lZ8gwVLqqAF_n99vIO.md index eac1d24bc..ef6776311 100644 --- a/src/data/roadmaps/nodejs/content/working-with-databases@5l-lZ8gwVLqqAF_n99vIO.md +++ b/src/data/roadmaps/nodejs/content/working-with-databases@5l-lZ8gwVLqqAF_n99vIO.md @@ -4,4 +4,4 @@ A database is an organized collection of structured information, or data, typica Visit the following resources to learn more: -- [@article@Wikipedia - What is Database?](https://en.wikipedia.org/wiki/Database) +- [@article@What is Database?](https://en.wikipedia.org/wiki/Database) diff --git a/src/data/roadmaps/nodejs/content/working-with-files@wEK77A6MPQBCBUSJKMiaY.md b/src/data/roadmaps/nodejs/content/working-with-files@wEK77A6MPQBCBUSJKMiaY.md index 21c722c13..e37d630ef 100644 --- a/src/data/roadmaps/nodejs/content/working-with-files@wEK77A6MPQBCBUSJKMiaY.md +++ b/src/data/roadmaps/nodejs/content/working-with-files@wEK77A6MPQBCBUSJKMiaY.md @@ -5,4 +5,5 @@ You can programmatically manipulate files in Node.js with the built-in `fs` modu Visit the following resources to learn more: - [@article@How To Work with Files using the fs Module in Node.js](https://www.digitalocean.com/community/tutorials/how-to-work-with-files-using-the-fs-module-in-node-js) +- [@official@File system](https://nodejs.org/docs/latest/api/fs.html) - [@feed@Explore top posts about Node.js](https://app.daily.dev/tags/nodejs?ref=roadmapsh) diff --git a/src/data/roadmaps/php/content/object-relational-mapping-orm@SeqGIfcLuveZ2z5ZSXcOd.md b/src/data/roadmaps/php/content/object-relational-mapping-orm@SeqGIfcLuveZ2z5ZSXcOd.md index 86e855c56..f95add18e 100644 --- a/src/data/roadmaps/php/content/object-relational-mapping-orm@SeqGIfcLuveZ2z5ZSXcOd.md +++ b/src/data/roadmaps/php/content/object-relational-mapping-orm@SeqGIfcLuveZ2z5ZSXcOd.md @@ -11,4 +11,4 @@ $entityManager->flush(); Visit the following resources to learn more: -- [@article@Object Relational Mapping (ORM)](https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/tutorials/getting-started.html) \ No newline at end of file +- [@article@What is an Object Relational Mapping (ORM)](https://stackoverflow.com/questions/1279613/what-is-an-orm-how-does-it-work-and-how-should-i-use-one#answer-1279678) diff --git a/src/data/roadmaps/postgresql-dba/content/tenser@xEu5n6U9-WKVxjlT5YUgx.md b/src/data/roadmaps/postgresql-dba/content/tensor@xEu5n6U9-WKVxjlT5YUgx.md similarity index 100% rename from src/data/roadmaps/postgresql-dba/content/tenser@xEu5n6U9-WKVxjlT5YUgx.md rename to src/data/roadmaps/postgresql-dba/content/tensor@xEu5n6U9-WKVxjlT5YUgx.md diff --git a/src/data/roadmaps/postgresql-dba/migration-mapping.json b/src/data/roadmaps/postgresql-dba/migration-mapping.json index 33169c50b..54d03d19d 100644 --- a/src/data/roadmaps/postgresql-dba/migration-mapping.json +++ b/src/data/roadmaps/postgresql-dba/migration-mapping.json @@ -150,7 +150,7 @@ "troubleshooting-techniques:query-analysis:explain": "n2OjwxzIHnATraRWi5Ddl", "troubleshooting-techniques:query-analysis:depesz": "rVlncpLO20WK6mjyqLerL", "troubleshooting-techniques:query-analysis:pev2": "9RyMU36KEP__-RzTTz_eo", - "troubleshooting-techniques:query-analysis:tenser": "xEu5n6U9-WKVxjlT5YUgx", + "troubleshooting-techniques:query-analysis:tensor": "xEu5n6U9-WKVxjlT5YUgx", "troubleshooting-techniques:query-analysis:explain-dalibo-com": "UZ1vRFRjiQAVu6BygqwEL", "troubleshooting-techniques:troubleshooting-methods:use": "QWi84EjdHw5ChYsuwUhPC", "troubleshooting-techniques:troubleshooting-methods:red": "qBkpTmfbyCv2L-OJW9pPI", diff --git a/src/data/roadmaps/postgresql-dba/postgresql-dba.json b/src/data/roadmaps/postgresql-dba/postgresql-dba.json index 86736f406..d2312cd4c 100644 --- a/src/data/roadmaps/postgresql-dba/postgresql-dba.json +++ b/src/data/roadmaps/postgresql-dba/postgresql-dba.json @@ -6518,7 +6518,7 @@ }, "selected": false, "data": { - "label": "Tenser", + "label": "Tensor", "style": { "fontSize": 17, "justifyContent": "flex-start", diff --git a/src/data/roadmaps/prompt-engineering/content/103-real-world/103-coding-assistance.md b/src/data/roadmaps/prompt-engineering/content/103-real-world/103-coding-assistance.md index 24a82c910..d9f789930 100644 --- a/src/data/roadmaps/prompt-engineering/content/103-real-world/103-coding-assistance.md +++ b/src/data/roadmaps/prompt-engineering/content/103-real-world/103-coding-assistance.md @@ -15,9 +15,9 @@ The output will be something like: ```python import random -prepositions = ['at', 'in', 'on', 'with', 'under', 'over'] -verbs = ['run', 'jump', 'dance', 'sing', 'laugh', 'cry'] -nouns = ['cat', 'dog', 'tree', 'flower', 'book', 'computer'] +prepositions = ["at", "in", "on", "with", "under", "over"] +verbs = ["run", "jump", "dance", "sing", "laugh", "cry"] +nouns = ["cat", "dog", "tree", "flower", "book", "computer"] preposition = random.choice(prepositions) verb = random.choice(verbs) @@ -26,7 +26,6 @@ noun = random.choice(nouns) madlib = f"I {verb} {preposition} the {noun}." print(madlib) - ``` ## Commenting and Reformatting Code @@ -60,10 +59,9 @@ num_points = 50 for i in range(num_points): # Calculate the y value of the wave using the sine function from the math module y = int(round(amplitude * math.sin(2 * math.pi * frequency * i / num_points))) - - # Print a space for padding, followed by an asterisk at the appropriate position on the wave - print(' ' * (amplitude + y) + '*') + # Print a space for padding, followed by an asterisk at the appropriate position on the wave + print(" " * (amplitude + y) + "*") ``` ## Debugging @@ -113,7 +111,6 @@ for i in numbers: if j in numbers: numbers.remove(j) print(numbers) - ``` Note that we asked the bot to "act like a senior developer" to optimize the script. You can also dictate that it have a certain area of expertise (e.g., sorting algorithms) or number of years of experience. Alternatively, if you have a script that seems overly complicated, you can ask ChatGPT to write that script "as a very junior developer." @@ -151,7 +148,6 @@ salary = float(input("Enter employee's salary: ")) ss_tax = salary * 0.062 print("Social Security tax is: $", round(ss_tax, 2)) - ``` Learn more from the following resources: diff --git a/src/data/roadmaps/python/content/functions-builtin-functions@-DJgS6l2qngfwurExlmmT.md b/src/data/roadmaps/python/content/functions-builtin-functions@-DJgS6l2qngfwurExlmmT.md index bea7892b6..6f5fe11c1 100644 --- a/src/data/roadmaps/python/content/functions-builtin-functions@-DJgS6l2qngfwurExlmmT.md +++ b/src/data/roadmaps/python/content/functions-builtin-functions@-DJgS6l2qngfwurExlmmT.md @@ -8,7 +8,8 @@ In programming, a function is a reusable block of code that executes a certain f def greet(name): print(f"Hello, {name}!") -greet("Roadmap.sh") + +greet("Roadmap.sh") ``` Visit the following resources to learn more: diff --git a/src/data/roadmaps/python/content/inheritance@S0FLE70szSVUPI0CDEQK7.md b/src/data/roadmaps/python/content/inheritance@S0FLE70szSVUPI0CDEQK7.md index 64eea2c46..c60860f21 100644 --- a/src/data/roadmaps/python/content/inheritance@S0FLE70szSVUPI0CDEQK7.md +++ b/src/data/roadmaps/python/content/inheritance@S0FLE70szSVUPI0CDEQK7.md @@ -5,4 +5,3 @@ Inheritance is a fundamental concept in object-oriented programming (OOP) that a Visit the following resources to learn more: - [@article@Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) -- [@article@Inheritance in Python](https://www.javatpoint.com/inheritance-in-python) diff --git a/src/data/roadmaps/qa/content/accessibility-tests@mmDIqSD6MU3ZhWREGI5E2.md b/src/data/roadmaps/qa/content/accessibility-tests@mmDIqSD6MU3ZhWREGI5E2.md index 208222997..effaea3cc 100644 --- a/src/data/roadmaps/qa/content/accessibility-tests@mmDIqSD6MU3ZhWREGI5E2.md +++ b/src/data/roadmaps/qa/content/accessibility-tests@mmDIqSD6MU3ZhWREGI5E2.md @@ -4,5 +4,4 @@ In software QA, accessibility testing is the practice of confirming that an appl Visit the following resources to learn more: -- [@article@Accessibility Testing - Javatpoint](https://www.javatpoint.com/accessibility-testing) - [@feed@Explore top posts about Accessibility](https://app.daily.dev/tags/accessibility?ref=roadmapsh) diff --git a/src/data/roadmaps/qa/content/agile-model@47NXgbc1OTGE06qXxlQoh.md b/src/data/roadmaps/qa/content/agile-model@47NXgbc1OTGE06qXxlQoh.md index 9df3b8cfb..7a6432d20 100644 --- a/src/data/roadmaps/qa/content/agile-model@47NXgbc1OTGE06qXxlQoh.md +++ b/src/data/roadmaps/qa/content/agile-model@47NXgbc1OTGE06qXxlQoh.md @@ -7,6 +7,5 @@ The Agile software development methodology is one of the simplest and most effec Visit the following resources to learn more: - [@article@Agile Methodology: What is Agile Model in Software Testing?](https://www.guru99.com/agile-scrum-extreme-testing.html) -- [@article@Agile Model](https://www.javatpoint.com/software-engineering-agile-model) - [@article@Manifesto for Agile Software Development](https://agilemanifesto.org/) - [@feed@Explore top posts about Agile](https://app.daily.dev/tags/agile?ref=roadmapsh) diff --git a/src/data/roadmaps/qa/content/manual-testing@daUEq4xlh4PIltSdiD4F2.md b/src/data/roadmaps/qa/content/manual-testing@daUEq4xlh4PIltSdiD4F2.md index 0f6881cfd..d9869f7c1 100644 --- a/src/data/roadmaps/qa/content/manual-testing@daUEq4xlh4PIltSdiD4F2.md +++ b/src/data/roadmaps/qa/content/manual-testing@daUEq4xlh4PIltSdiD4F2.md @@ -5,5 +5,4 @@ Manual Testing is a type of software testing in which test cases are executed ma Visit the following resources to learn more: - [@article@Manual Testing Tutorial: What is, Types, Concepts](https://www.guru99.com/manual-testing.html) -- [@article@Manual Testing](https://www.javatpoint.com/manual-testing) - [@feed@Explore top posts about QA](https://app.daily.dev/tags/qa?ref=roadmapsh) diff --git a/src/data/roadmaps/qa/content/testlink@leiCCxLJgXCpk1a--mE83.md b/src/data/roadmaps/qa/content/testlink@leiCCxLJgXCpk1a--mE83.md index fcf073d7a..1fc449c6a 100644 --- a/src/data/roadmaps/qa/content/testlink@leiCCxLJgXCpk1a--mE83.md +++ b/src/data/roadmaps/qa/content/testlink@leiCCxLJgXCpk1a--mE83.md @@ -5,4 +5,3 @@ TestLink is most widely used web based open source test management tool. It sync Visit the following resources to learn more: - [@official@TestLink](https://testlink.org/) -- [@article@TestLink Tutorial: A Complete Guide](https://www.guru99.com/testlink-tutorial-complete-guide.html) diff --git a/src/data/roadmaps/spring-boot/content/100-spring-core/100-introduction/101-architecture.md b/src/data/roadmaps/spring-boot/content/100-spring-core/100-introduction/101-architecture.md index f349c4708..91d8959ea 100644 --- a/src/data/roadmaps/spring-boot/content/100-spring-core/100-introduction/101-architecture.md +++ b/src/data/roadmaps/spring-boot/content/100-spring-core/100-introduction/101-architecture.md @@ -9,6 +9,5 @@ Spring Boot follows a layered architecture in which each layer communicates with For more information, visit the following links: -- [@article@Spring Boot Architecture](https://www.javatpoint.com/spring-boot-architecture) - [@article@Spring Boot Architecture – Detailed Explanation](https://www.interviewbit.com/blog/spring-boot-architecture) - [@feed@Explore top posts about Architecture](https://app.daily.dev/tags/architecture?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/100-spring-core/102-dependency-injection.md b/src/data/roadmaps/spring-boot/content/100-spring-core/102-dependency-injection.md index 4552de635..17dab77da 100644 --- a/src/data/roadmaps/spring-boot/content/100-spring-core/102-dependency-injection.md +++ b/src/data/roadmaps/spring-boot/content/100-spring-core/102-dependency-injection.md @@ -6,5 +6,4 @@ Visit the following links for more resources: - [@article@Spring Dependency Injection](https://www.baeldung.com/spring-dependency-injection) - [@article@Dependency Injection Using Spring Boot](https://medium.com/edureka/what-is-dependency-injection-5006b53af782) -- [@article@Dependency Injection in Spring](https://www.javatpoint.com/dependency-injection-in-spring) - [@feed@Explore top posts about Dependency Injection](https://app.daily.dev/tags/dependency-injection?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/100-spring-core/103-spring-ioc.md b/src/data/roadmaps/spring-boot/content/100-spring-core/103-spring-ioc.md index 9b0172284..2a0119c41 100644 --- a/src/data/roadmaps/spring-boot/content/100-spring-core/103-spring-ioc.md +++ b/src/data/roadmaps/spring-boot/content/100-spring-core/103-spring-ioc.md @@ -23,5 +23,4 @@ More more resources, check out the following links: - [@article@Spring IoC, Spring Bean Example Tutorial](https://www.digitalocean.com/community/tutorials/spring-ioc-bean-example-tutorial) - [@article@Intro to Inversion of Control with Spring](https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring) -- [@article@IoC Container](https://www.javatpoint.com/ioc-container) - [@feed@Explore top posts about Spring Framework](https://app.daily.dev/tags/spring?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/100-spring-core/105-spring-mvc.md b/src/data/roadmaps/spring-boot/content/100-spring-core/105-spring-mvc.md index 49ea07ddc..cebfe5e2f 100644 --- a/src/data/roadmaps/spring-boot/content/100-spring-core/105-spring-mvc.md +++ b/src/data/roadmaps/spring-boot/content/100-spring-core/105-spring-mvc.md @@ -6,7 +6,6 @@ Spring MVC provides a powerful and flexible way to build web applications, and i For more resources, visit the following links: -- [@article@Spring MVC Tutorial](https://www.javatpoint.com/spring-mvc-tutorial) - [@article@Spring - MVC Framework](https://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm) - [@article@Web MVC framework](https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html) - [@feed@Explore top posts about Spring Framework](https://app.daily.dev/tags/spring?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/100-spring-core/106-annotations.md b/src/data/roadmaps/spring-boot/content/100-spring-core/106-annotations.md index 95d01d574..c79f2ec91 100644 --- a/src/data/roadmaps/spring-boot/content/100-spring-core/106-annotations.md +++ b/src/data/roadmaps/spring-boot/content/100-spring-core/106-annotations.md @@ -17,5 +17,4 @@ These are just a few examples of the many annotations that are available in Spri Visit the following link for more details on annotations in spring boot: - [@article@Spring Annotations](https://www.digitalocean.com/community/tutorials/spring-annotations) -- [@article@Spring Boot Annotations](https://www.javatpoint.com/spring-boot-annotations) - [@article@Annotations in Spring](https://www.techferry.com/articles/spring-annotations.html) diff --git a/src/data/roadmaps/spring-boot/content/101-spring-security/index.md b/src/data/roadmaps/spring-boot/content/101-spring-security/index.md index 9835bc0cc..cd29819c6 100644 --- a/src/data/roadmaps/spring-boot/content/101-spring-security/index.md +++ b/src/data/roadmaps/spring-boot/content/101-spring-security/index.md @@ -5,7 +5,6 @@ Spring Security is a framework for securing Java-based applications. It is a pow Visit the following links for more resources: - [@official@Spring Security](https://spring.io/projects/spring-security) -- [@article@Spring Security Introduction](https://www.javatpoint.com/spring-security-introduction) - [@article@What is Spring security](https://www.javadevjournal.com/spring/what-is-spring-security/) - [@article@Spring Security: Authentication and Authorization In-Depth](https://www.marcobehler.com/guides/spring-security) - [@feed@Explore top posts about Security](https://app.daily.dev/tags/security?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/102-spring-boot-starters.md b/src/data/roadmaps/spring-boot/content/102-spring-boot-starters.md index e16232706..938c2849c 100644 --- a/src/data/roadmaps/spring-boot/content/102-spring-boot-starters.md +++ b/src/data/roadmaps/spring-boot/content/102-spring-boot-starters.md @@ -5,5 +5,4 @@ Spring Boot starters are a set of convenient dependency descriptors that you can For more information, visit the following links: - [@article@Intro to Spring Boot Starters](https://www.baeldung.com/spring-boot-starters) -- [@article@Spring Boot Starters](https://www.javatpoint.com/spring-boot-starters) - [@feed@Explore top posts about Spring Framework](https://app.daily.dev/tags/spring?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/103-autconfiguration.md b/src/data/roadmaps/spring-boot/content/103-autconfiguration.md index ec8438f17..477733a62 100644 --- a/src/data/roadmaps/spring-boot/content/103-autconfiguration.md +++ b/src/data/roadmaps/spring-boot/content/103-autconfiguration.md @@ -5,4 +5,3 @@ Spring Boot's Autoconfiguration is a powerful and convenient feature that makes For more information, visit the following links: - [@article@Auto-configuration using Spring Boot](https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/using-boot-auto-configuration.html) -- [@article@Spring Boot Auto-configuration](https://www.javatpoint.com/spring-boot-auto-configuration) diff --git a/src/data/roadmaps/spring-boot/content/104-spring-boot-actuators.md b/src/data/roadmaps/spring-boot/content/104-spring-boot-actuators.md index 2a50fdb8f..c608fe884 100644 --- a/src/data/roadmaps/spring-boot/content/104-spring-boot-actuators.md +++ b/src/data/roadmaps/spring-boot/content/104-spring-boot-actuators.md @@ -15,6 +15,5 @@ Spring Boot Actuators are typically used in production environments to monitor t For more information, visit the following links: - [@official@Building a RESTful Web Service with Spring Boot Actuator](https://spring.io/guides/gs/actuator-service/) -- [@article@Spring Boot Starter Actuator](https://www.javatpoint.com/spring-boot-actuator) - [@article@What is Spring Boot Actuator](https://www.baeldung.com/spring-boot-actuators) - [@feed@Explore top posts about Spring Framework](https://app.daily.dev/tags/spring?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/106-hibernate/100-transactions.md b/src/data/roadmaps/spring-boot/content/106-hibernate/100-transactions.md index e7f64c782..d9457d420 100644 --- a/src/data/roadmaps/spring-boot/content/106-hibernate/100-transactions.md +++ b/src/data/roadmaps/spring-boot/content/106-hibernate/100-transactions.md @@ -6,6 +6,5 @@ In hibernate framework, we have Transaction interface that defines the unit of w For more information, visit the following links: -- [@article@Hibernate Transaction Management Example](https://www.javatpoint.com/hibernate-transaction-management-example) - [@article@Hibernate Transaction Management](https://www.javaguides.net/2018/12/hibernate-transaction-management-tutorial.html) - [@article@Hibernate Transaction](https://www.w3schools.blog/hibernate-transaction-management) diff --git a/src/data/roadmaps/spring-boot/content/106-hibernate/102-entity-lifecycle.md b/src/data/roadmaps/spring-boot/content/106-hibernate/102-entity-lifecycle.md index 5ce8f4967..aef81425a 100644 --- a/src/data/roadmaps/spring-boot/content/106-hibernate/102-entity-lifecycle.md +++ b/src/data/roadmaps/spring-boot/content/106-hibernate/102-entity-lifecycle.md @@ -11,5 +11,4 @@ There are mainly four states of the Hibernate Lifecycle : For more resources, visit the following links: -- [@article@Entity Lifecycle in Hibernate](https://www.javatpoint.com/hibernate-lifecycle) - [@article@Hibernate Entity Lifecycle & and its state](https://www.baeldung.com/hibernate-entity-lifecycle) diff --git a/src/data/roadmaps/spring-boot/content/107-spring-data/100-spring-data-jpa.md b/src/data/roadmaps/spring-boot/content/107-spring-data/100-spring-data-jpa.md index 86cee71da..03d92e972 100644 --- a/src/data/roadmaps/spring-boot/content/107-spring-data/100-spring-data-jpa.md +++ b/src/data/roadmaps/spring-boot/content/107-spring-data/100-spring-data-jpa.md @@ -6,5 +6,4 @@ For more resources, visit the following links: - [@official@Spring Data JPA](https://spring.io/projects/spring-data-jpa) - [@article@Introduction to Spring Data JPA](https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa) -- [@article@Spring Data JPA Tutorial](https://www.javatpoint.com/spring-and-jpa-integration) - [@feed@Explore top posts about Spring Framework](https://app.daily.dev/tags/spring?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/108-microservices/100-spring-cloud/index.md b/src/data/roadmaps/spring-boot/content/108-microservices/100-spring-cloud/index.md index f420b6ba0..773707440 100644 --- a/src/data/roadmaps/spring-boot/content/108-microservices/100-spring-cloud/index.md +++ b/src/data/roadmaps/spring-boot/content/108-microservices/100-spring-cloud/index.md @@ -19,6 +19,5 @@ By using Spring Cloud, developers can take advantage of the features and capabil For more resources, visit the following links: - [@official@Spring Cloud](https://spring.io/projects/spring-cloud) -- [@article@Spring Cloud Tutorial](https://www.javatpoint.com/spring-cloud) - [@article@Spring Cloud – Bootstrapping](https://www.baeldung.com/spring-cloud-bootstrapping) - [@feed@Explore top posts about Cloud](https://app.daily.dev/tags/cloud?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/108-microservices/index.md b/src/data/roadmaps/spring-boot/content/108-microservices/index.md index 23742a144..1af502e40 100644 --- a/src/data/roadmaps/spring-boot/content/108-microservices/index.md +++ b/src/data/roadmaps/spring-boot/content/108-microservices/index.md @@ -5,6 +5,5 @@ Spring Microservices is a framework that makes it easier to build and manage mic For more resources, visit the following links: - [@official@Microservices with Spring](https://spring.io/microservices) -- [@article@Microservices Tutorial](https://www.javatpoint.com/microservices) - [@article@Microservices with Spring Boot ](https://medium.com/omarelgabrys-blog/microservices-with-spring-boot-intro-to-microservices-part-1-c0d24cd422c3) - [@feed@Explore top posts about Microservices](https://app.daily.dev/tags/microservices?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/109-spring-mvc/102-architecture.md b/src/data/roadmaps/spring-boot/content/109-spring-mvc/102-architecture.md index 935ace9cb..7aabf3331 100644 --- a/src/data/roadmaps/spring-boot/content/109-spring-mvc/102-architecture.md +++ b/src/data/roadmaps/spring-boot/content/109-spring-mvc/102-architecture.md @@ -4,6 +4,5 @@ The Spring MVC (Model-View-Controller) is a web application framework that is pa For more resources, visit the following resources: -- [@article@Spring MVC Tutorial](https://www.javatpoint.com/spring-mvc-tutorial) - [@article@Overview of Spring MVC Architecture](https://terasolunaorg.github.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html) - [@feed@Explore top posts about Architecture](https://app.daily.dev/tags/architecture?ref=roadmapsh) diff --git a/src/data/roadmaps/spring-boot/content/109-spring-mvc/103-components.md b/src/data/roadmaps/spring-boot/content/109-spring-mvc/103-components.md index b413a07c9..9221fc1ff 100644 --- a/src/data/roadmaps/spring-boot/content/109-spring-mvc/103-components.md +++ b/src/data/roadmaps/spring-boot/content/109-spring-mvc/103-components.md @@ -11,8 +11,4 @@ The Spring MVC (Model-View-Controller) framework has several key components that - `HandlerMapping`: This maps requests to appropriate controllers, responsible for handling the requests. - `HandlerAdapter`: This is used to handle the request and generate the response. -There are other supporting components that are used to manage the lifecycle of the application's objects, such as the Spring IoC container and different interceptors that provides additional functionality, such as caching and security. - -For more information, visit the following links: - -- [@article@Spring Boot vs Spring MVC: How do They Compare?](https://www.javatpoint.com/spring-vs-spring-boot-vs-spring-mvc) +There are other supporting components that are used to manage the lifecycle of the application's objects, such as the Spring IoC container and different interceptors that provides additional functionality, such as caching and security. \ No newline at end of file diff --git a/src/data/roadmaps/spring-boot/content/109-spring-mvc/index.md b/src/data/roadmaps/spring-boot/content/109-spring-mvc/index.md index 6e85dbcc2..a74767002 100644 --- a/src/data/roadmaps/spring-boot/content/109-spring-mvc/index.md +++ b/src/data/roadmaps/spring-boot/content/109-spring-mvc/index.md @@ -6,7 +6,6 @@ In Spring MVC, the application is divided into three main components: the Model, For more information, visit the following links: -- [@article@Spring MVC Tutorial](https://www.javatpoint.com/spring-mvc-tutorial) - [@article@Spring - MVC Framework](https://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm) - [@article@Spring MVC Tutorial – Everything You Need To Know](https://www.edureka.co/blog/spring-mvc-tutorial/) - [@feed@Explore top posts about Spring Framework](https://app.daily.dev/tags/spring?ref=roadmapsh) diff --git a/src/data/roadmaps/sql/content/ceiling@BAqJQvcguhIhzyII5LRH6.md b/src/data/roadmaps/sql/content/ceiling@BAqJQvcguhIhzyII5LRH6.md index 99a233221..f8fe35fe3 100644 --- a/src/data/roadmaps/sql/content/ceiling@BAqJQvcguhIhzyII5LRH6.md +++ b/src/data/roadmaps/sql/content/ceiling@BAqJQvcguhIhzyII5LRH6.md @@ -4,5 +4,4 @@ The `CEILING()` function in SQL returns the smallest integer greater than or equ Learn more from the following resources: -- [@article@CEILING Function in SQL](https://www.javatpoint.com/ceiling-function-in-sql) - [@article@SQL CEILING](https://www.w3schools.com/sql/func_sqlserver_ceiling.asp) \ No newline at end of file diff --git a/src/data/roadmaps/sql/content/rdbms-benefits-and-limitations@fNTb9y3zs1HPYclAmu_Wv.md b/src/data/roadmaps/sql/content/rdbms-benefits-and-limitations@fNTb9y3zs1HPYclAmu_Wv.md index e2345c3a8..4385a4009 100644 --- a/src/data/roadmaps/sql/content/rdbms-benefits-and-limitations@fNTb9y3zs1HPYclAmu_Wv.md +++ b/src/data/roadmaps/sql/content/rdbms-benefits-and-limitations@fNTb9y3zs1HPYclAmu_Wv.md @@ -28,5 +28,4 @@ Here are some of the limitations of using an RDBMS: Learn more from the following resources: -- [@article@Advantages and Disadvantages of DBMS](https://www.javatpoint.com/advantages-and-disadvantages-of-dbms) -- [@article@ACID Transactions in Databases](https://www.databricks.com/glossary/acid-transactions) \ No newline at end of file +- [@article@Advantages and Disadvantages of DBMS](https://cloud.google.com/learn/what-is-a-relational-database) \ No newline at end of file diff --git a/src/data/roadmaps/system-design/content/geodes@6hOSEZJZ7yezVN67h5gmS.md b/src/data/roadmaps/system-design/content/geodes@6hOSEZJZ7yezVN67h5gmS.md index a82b4e78a..7a4d0a157 100644 --- a/src/data/roadmaps/system-design/content/geodes@6hOSEZJZ7yezVN67h5gmS.md +++ b/src/data/roadmaps/system-design/content/geodes@6hOSEZJZ7yezVN67h5gmS.md @@ -5,4 +5,3 @@ The Geode pattern involves deploying a collection of backend services into a set To learn more visit the following links: - [@article@Geode pattern](https://learn.microsoft.com/en-us/azure/architecture/patterns/geodes) -- [@article@Geode Formation, Types & Appearance | What is a Geode?](https://study.com/academy/lesson/geode-formation-types-appearance.html) \ No newline at end of file diff --git a/src/data/roadmaps/system-design/content/queue-based-load-leveling@LncTxPg-wx8loy55r5NmV.md b/src/data/roadmaps/system-design/content/queu-based-load-leveling@LncTxPg-wx8loy55r5NmV similarity index 100% rename from src/data/roadmaps/system-design/content/queue-based-load-leveling@LncTxPg-wx8loy55r5NmV.md rename to src/data/roadmaps/system-design/content/queu-based-load-leveling@LncTxPg-wx8loy55r5NmV diff --git a/src/data/roadmaps/system-design/content/write-through@RNITLR1FUQWkRbSBXTD_z.md b/src/data/roadmaps/system-design/content/write-through@RNITLR1FUQWkRbSBXTD_z.md index 5559860a3..434349b81 100644 --- a/src/data/roadmaps/system-design/content/write-through@RNITLR1FUQWkRbSBXTD_z.md +++ b/src/data/roadmaps/system-design/content/write-through@RNITLR1FUQWkRbSBXTD_z.md @@ -9,15 +9,15 @@ The application uses the cache as the main data store, reading and writing data Application code: ```python -set_user(12345, {"foo":"bar"}) +set_user(12345, {"foo": "bar"}) ``` Cache code: ```python def set_user(user_id, values): - user = db.query("UPDATE Users WHERE id = {0}", user_id, values) - cache.set(user_id, user) + user = db.query("UPDATE Users WHERE id = {0}", user_id, values) + cache.set(user_id, user) ``` Write-through is a slow overall operation due to the write operation, but subsequent reads of just written data are fast. Users are generally more tolerant of latency when updating data than reading data. Data in the cache is not stale. diff --git a/src/data/roadmaps/typescript/content/external-modules@egQWk1n3p8Pep83yIwCtI.md b/src/data/roadmaps/typescript/content/external-modules@egQWk1n3p8Pep83yIwCtI.md index 20b994e7a..6a084f66a 100644 --- a/src/data/roadmaps/typescript/content/external-modules@egQWk1n3p8Pep83yIwCtI.md +++ b/src/data/roadmaps/typescript/content/external-modules@egQWk1n3p8Pep83yIwCtI.md @@ -19,5 +19,4 @@ In this example, we use the "export" keyword in the "myModule.ts" file to export Learn more from the following links: -- [@official@External Module](https://www.javatpoint.com/typescript-module) - [@article@TypeScript - External Module](https://learncodeweb.com/typescript/modules-in-typescript-explain-with-an-example/) diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 867a8fbc5..de0e5946f 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -14,6 +14,9 @@ import '../styles/global.css'; import { PageVisit } from '../components/PageVisit/PageVisit'; import type { ResourceType } from '../lib/resource-progress'; import Clarity from '../components/Analytics/Clarity.astro'; +import RedditPixel from '../components/Analytics/RedditPixel.astro'; +import GoogleAd from '../components/Analytics/GoogleAd.astro'; +import GoogleAdSlot from '../components/Analytics/GoogleAdSlot.astro'; export interface Props { title: string; @@ -158,6 +161,8 @@ const gaPageIdentifier = Astro.url.pathname + + @@ -188,6 +193,7 @@ const gaPageIdentifier = Astro.url.pathname client:load /> + + +

+ diff --git a/src/pages/ai-data-scientist/vs-business-analytics.astro b/src/pages/ai-data-scientist/vs-business-analytics.astro new file mode 100644 index 000000000..a1fc61f66 --- /dev/null +++ b/src/pages/ai-data-scientist/vs-business-analytics.astro @@ -0,0 +1,29 @@ +--- +import GuideContent from '../../components/Guide/GuideContent.astro'; +import BaseLayout from '../../layouts/BaseLayout.astro'; +import { getGuideById } from '../../lib/guide'; +import { getOpenGraphImageUrl } from '../../lib/open-graph'; + +const guideId = 'ai-data-scientist-vs-business-analytics'; +const guide = await getGuideById(guideId); + +const { frontmatter: guideData } = guide!; + +const ogImageUrl = + guideData.seo.ogImageUrl || + getOpenGraphImageUrl({ + group: 'guide', + resourceId: guideId, + }); +--- + + + +
+
diff --git a/src/pages/ai-data-scientist/vs-data-engineering.astro b/src/pages/ai-data-scientist/vs-data-engineering.astro new file mode 100644 index 000000000..abd369879 --- /dev/null +++ b/src/pages/ai-data-scientist/vs-data-engineering.astro @@ -0,0 +1,30 @@ +--- +import GuideContent from '../../components/Guide/GuideContent.astro'; +import BaseLayout from '../../layouts/BaseLayout.astro'; +import { getGuideById } from '../../lib/guide'; +import { getOpenGraphImageUrl } from '../../lib/open-graph'; +import { replaceVariables } from '../../lib/markdown'; + +const guideId = 'ai-data-scientist-vs-data-engineering'; +const guide = await getGuideById(guideId); + +const { frontmatter: guideData } = guide!; + +const ogImageUrl = + guideData.seo.ogImageUrl || + getOpenGraphImageUrl({ + group: 'guide', + resourceId: guideId, + }); +--- + + + +
+
diff --git a/src/pages/ai-data-scientist/vs-statistics.astro b/src/pages/ai-data-scientist/vs-statistics.astro new file mode 100644 index 000000000..f67188ee0 --- /dev/null +++ b/src/pages/ai-data-scientist/vs-statistics.astro @@ -0,0 +1,30 @@ +--- +import GuideContent from '../../components/Guide/GuideContent.astro'; +import BaseLayout from '../../layouts/BaseLayout.astro'; +import { getGuideById } from '../../lib/guide'; +import { getOpenGraphImageUrl } from '../../lib/open-graph'; +import { replaceVariables } from '../../lib/markdown'; + +const guideId = 'ai-data-scientist-vs-statistics'; +const guide = await getGuideById(guideId); + +const { frontmatter: guideData } = guide!; + +const ogImageUrl = + guideData.seo.ogImageUrl || + getOpenGraphImageUrl({ + group: 'guide', + resourceId: guideId, + }); +--- + + + +
+
diff --git a/src/pages/devops/devops-engineer.astro b/src/pages/devops/devops-engineer.astro index ca95f2c13..abf33c5a8 100644 --- a/src/pages/devops/devops-engineer.astro +++ b/src/pages/devops/devops-engineer.astro @@ -5,6 +5,8 @@ import { getGuideById } from '../../lib/guide'; import { getOpenGraphImageUrl } from '../../lib/open-graph'; import { replaceVariables } from '../../lib/markdown'; +export const prerender = false; + const guideId = 'devops-engineer'; const guide = await getGuideById(guideId);