diff --git a/contributing.md b/contributing.md index df86e35a0..1bd29b362 100644 --- a/contributing.md +++ b/contributing.md @@ -2,12 +2,67 @@ First of all, thank you for considering to contribute. Please look at the details below: +- [Hacktoberfest Contributions](#hacktoberfest-contributions) - [New Roadmaps](#new-roadmaps) - [Existing Roadmaps](#existing-roadmaps) - [Adding Projects](#adding-projects) - [Adding Content](#adding-content) - [Guidelines](#guidelines) +## Hacktoberfest Contributions + +We are taking part in [Hacktoberfest 11](https://hacktoberfest.com/)! + +Before you start to contribute to our project in order to satisfy [Hacktoberfest requirements](https://hacktoberfest.com/participation/#contributors), please bare in mind the following: + +* There is not a Hacktoberfest t-shirt this year [(see their FAQ)](https://hacktoberfest.com/participation/#faq). +* There is not an infinite opportunity to contribute to the roadmap.sh project. + +### Hacktoberfest Specific Contribution rules + +As Hacktoberfest attracts a lot of contributors (which is awesome), it does require a more rigid and strictly enforced set of guidelines than the average contribution. + +These are as follows: + +1. No single file contributions, please contribute to a minimum of two. + +Whilst single file contributions, such as adding one link to a single topic, is perfectly fine outside of hacktoberfest, this can (and probably will) result it an easy 4 pull requests for everyone and we will just become a Hacktoberfest farming project. + +***Note: If you contribute the entire contents of a topic i.e. the topic has 0 copy and 0 links, this will count.*** + +2. Typo fixes will not count (by themselves). + +Whilst fixing typos is a great thing to do, lets bundle them in with actual contributions if we see them! + +3. The same basic rules apply. + +- Content must be in English. +- Maximum of 8 links per topic. +- Follow the below style guide for content. + +Here is an example of a **fully complete** topic: + +```markdown +# Redis + +Redis is an open-source, in-memory data structure store known for its speed and versatility. It supports various data types, including strings, lists, sets, hashes, and sorted sets, and provides functionalities such as caching, session management, real-time analytics, and message brokering. Redis operates as a key-value store, allowing for rapid read and write operations, and is often used to enhance performance and scalability in applications. It supports persistence options to save data to disk, replication for high availability, and clustering for horizontal scaling. Redis is widely used for scenarios requiring low-latency access to data and high-throughput performance. + +Learn more from the following resources: + +[@official@Link 1](https:/google.com) +[@article@Link 2](https:/google.com) +[@article@Link 3](https:/google.com) +[@course@Link 4](https:/google.com) +[@course@Link 5](https:/google.com) +[@video@Link 6](https:/google.com) +[@video@Link 7](https:/google.com) +[@video@Link 8](https:/google.com) +``` + +Contributions to the project that meet these requirements will be given the label `hacktoberfest-accepted` and merged, contributions that do not meet the requirements will simply be closed. + +Any attempts at spam PRs will be given the `spam` tag. If you recieve 2 `spam` tags against you, you will be [disqualified from Hacktoberfest](https://hacktoberfest.com/participation/#spam). + ## New Roadmaps For new roadmaps, you can either: diff --git a/public/images/gifs/party-popper.gif b/public/images/gifs/party-popper.gif new file mode 100644 index 000000000..a95fe2e4f Binary files /dev/null and b/public/images/gifs/party-popper.gif differ diff --git a/public/images/rocket.gif b/public/images/gifs/rocket.gif similarity index 100% rename from public/images/rocket.gif rename to public/images/gifs/rocket.gif diff --git a/public/images/gifs/star.gif b/public/images/gifs/star.gif new file mode 100644 index 000000000..8ba6cd590 Binary files /dev/null and b/public/images/gifs/star.gif differ diff --git a/public/images/gifs/starstruck.gif b/public/images/gifs/starstruck.gif new file mode 100644 index 000000000..53878edc7 Binary files /dev/null and b/public/images/gifs/starstruck.gif differ diff --git a/public/images/gifs/sunglasses.gif b/public/images/gifs/sunglasses.gif new file mode 100644 index 000000000..092280cb6 Binary files /dev/null and b/public/images/gifs/sunglasses.gif differ diff --git a/public/pdfs/roadmaps/ai-engineer.pdf b/public/pdfs/roadmaps/ai-engineer.pdf new file mode 100644 index 000000000..d1db7909f Binary files /dev/null and b/public/pdfs/roadmaps/ai-engineer.pdf differ diff --git a/public/roadmap-content/android.json b/public/roadmap-content/android.json index 50216cd62..c0a98e3c6 100644 --- a/public/roadmap-content/android.json +++ b/public/roadmap-content/android.json @@ -1,21 +1,37 @@ { "Suws-7f_6Z1ChpfcnxX2M": { "title": "Pick a Language", - "description": "When developing for Android, one crucial step is picking a programming language to use. There are multiple languages you can choose from, but the three most popular ones are Java, Kotlin, and C++. Java is the original language used for Android development and is widely used, making it a good choice for beginners due to the wealth of resources and developer communities. Kotlin is a newer option that is fully supported by Google and Android Studio, and addressing many of the drawbacks of Java which makes it a popular choice for many developers. Lastly, C++ can be used in Android development through the Android Native Development Kit (NDK), though it comes with more complexities and is usually not recommended for beginners. Your selection might depend on your existing familiarity with these languages, the complexity and specific requirements of your project, and the resources or libraries you wish to use.", - "links": [] + "description": "When developing for Android, one crucial step is picking a programming language to use. There are multiple languages you can choose from, but the three most popular ones are Java, Kotlin, and C++.\n\nJava is the original language used for Android development and is widely used, making it a good choice for beginners due to the wealth of resources and developer communities. Kotlin is a newer option that is fully supported by Google and Android Studio, and addressing many of the drawbacks of Java which makes it a popular choice for many developers.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Pick a Language", + "url": "https://developer.android.com/studio/write/java8-support", + "type": "article" + }, + { + "title": "Kotlin vs Java", + "url": "https://developer.android.com/kotlin", + "type": "article" + } + ] }, "qIzUv8-GgQnkqChEdgD50": { "title": "Kotlin", - "description": "`Kotlin` is a cross-platform, statically typed general-purpose programming language with type inference. Developed by JetBrains, the makers of the world’s leading IDEs, Kotlin has a syntax, which is more expressive and concise. This allows for more readable and maintainable code. It is fully interoperable with Java and comes with no limitations. It can be used almost everywhere Java is used today, for server-side development, Android apps, and much more. Kotlin introduces several improvements for programmers over Java, which makes it a preferred choice for many developers. With more concise code base and modern programming concept support - it's certainly a future of Android app development.\n\nUse following resources to learn more:", + "description": "`Kotlin` is a cross-platform, statically typed general-purpose programming language with type inference. Developed by JetBrains, the makers of the world’s leading IDEs, Kotlin has a syntax, which is more expressive and concise. This allows for more readable and maintainable code. It is fully interoperable with Java and comes with no limitations. It can be used almost everywhere Java is used today, for server-side development, Android apps, and much more. Kotlin introduces several improvements for programmers over Java, which makes it a preferred choice for many developers. With more concise code base and modern programming concept support - it's certainly a future of Android app development.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Learn Kotlin - w3schools", - "url": "https://www.w3schools.com/kotlin/", + "title": "Kotlin", + "url": "https://kotlinlang.org/", + "type": "article" + }, + { + "title": "Kotlin Documentation", + "url": "https://kotlinlang.org/docs/home.html", "type": "article" }, { - "title": "Explore top posts about Kotlin", - "url": "https://app.daily.dev/tags/kotlin?ref=roadmapsh", + "title": "Learn Kotlin - w3schools", + "url": "https://www.w3schools.com/kotlin/", "type": "article" }, { @@ -27,38 +43,119 @@ }, "RBABbkzD_uNFwEO-hssZO": { "title": "Java", - "description": "Java is a popular programming language used for Android development due to its robustness and ease of use. Its object-oriented structure allows developers to create modular programs and reusable code. The language was built with the philosophy of \"write once, run anywhere\" (WORA), meaning compiled Java code can run on all platforms without the need for recompilation. Android’s API and core libraries are primarily written in Java, therefore understanding Java is fundamental in creating diverse and powerful Android apps. Java is a statically-typed language, which can be beneficial for detecting errors at compile-time rather than at runtime. Oracle, who owns Java, provides comprehensive documentation and support for the language.", - "links": [] + "description": "Java is a popular programming language used for Android development due to its robustness and ease of use. Its object-oriented structure allows developers to create modular programs and reusable code. The language was built with the philosophy of \"write once, run anywhere\" (WORA), meaning compiled Java code can run on all platforms without the need for recompilation. Android’s API and core libraries are primarily written in Java, therefore understanding Java is fundamental in creating diverse and powerful Android apps.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Java Roadmap", + "url": "https://roadmap.sh/java", + "type": "article" + }, + { + "title": "Java", + "url": "https://www.oracle.com/java/technologies/javase-jdk11-downloads.html", + "type": "article" + }, + { + "title": "Java Documentation", + "url": "https://docs.oracle.com/en/java/javase/11/docs/api/", + "type": "article" + } + ] }, "HlUUGj3dOZ68t4gIjerXh": { "title": "The Fundamentals", - "description": "\"The Fundamentals\" of Android primarily concentrate on 5 components; Activities, Services, Broadcast Receivers, Content Providers, and Intents. **Activities** are essentially what you see on your screen; each screen in an app is a separate activity. **Services** run in the background to perform long-running operations or to perform work for remote processes. They do not provide a user interface. **Broadcast Receivers** respond to broadcast messages from other applications or from the system itself. These messages are often in the form of Intents. **Content Providers** manage a shared set of app data that other apps can query or modify, through a structured interface. Finally, **Intents** are messaging objects which facilitate the communication between the aforementioned components. Understanding these five core concepts is key to mastering Android fundamentals.", - "links": [] + "description": "\"The Fundamentals\" of Android primarily concentrate on 5 components; Activities, Services, Broadcast Receivers, Content Providers, and Intents. **Activities** are essentially what you see on your screen; each screen in an app is a separate activity. **Services** run in the background to perform long-running operations or to perform work for remote processes. They do not provide a user interface. **Broadcast Receivers** respond to broadcast messages from other applications or from the system itself. These messages are often in the form of Intents. **Content Providers** manage a shared set of app data that other apps can query or modify, through a structured interface. Finally, **Intents** are messaging objects which facilitate the communication between the aforementioned components. Understanding these five core concepts is key to mastering Android fundamentals.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "The Fundamentals", + "url": "https://developer.android.com/guide/components/fundamentals", + "type": "article" + } + ] }, "ZRGsokU313Ky-anWbWK6q": { "title": "Development IDE", - "description": "\"Development IDE\" refers to Development Integrated Development Environment that is vital for Android App development. For Android, the primary IDE is **Android Studio**. This official IDE from Google includes everything you need to build an Android app, such as a code editor, code analysis tools, emulators for all of Android's supported OS versions and hardware configurations, and more. Other popular IDEs include **Eclipse** (with an Android Developer Tools plugin), **NetBeans**, and **IntelliJ IDEA**. Each of these IDEs tends to have its own set of specialized features, but all are designed to provide the tools and services needed for Android development. The choice of IDE often depends on the specific needs and preferences of the developer or development team.", - "links": [] + "description": "Development IDE refers to Development Integrated Development Environment that is vital for Android App development. For Android, the primary IDE is **Android Studio**. This official IDE from Google includes everything you need to build an Android app, such as a code editor, code analysis tools, emulators for all of Android's supported OS versions and hardware configurations, and more. Other popular IDEs include **Eclipse** (with an Android Developer Tools plugin), **NetBeans**, and **IntelliJ IDEA**. Each of these IDEs tends to have its own set of specialized features, but all are designed to provide the tools and services needed for Android development. The choice of IDE often depends on the specific needs and preferences of the developer or development team.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Android Studio", + "url": "https://developer.android.com/studio", + "type": "article" + }, + { + "title": "Android Studio Documentation", + "url": "https://developer.android.com/studio/intro", + "type": "article" + }, + { + "title": "Android Studio Plugins", + "url": "https://developer.android.com/studio/intro/studio-plugins", + "type": "article" + } + ] }, "jl1FsQ5-WGKeFyaILNt_p": { "title": "Basics of Kotlin", - "description": "Kotlin is a statically-typed programming language that runs on the Java Virtual Machine (JVM) and can be used to develop all types of Android apps. It is Google's preferred language for Android app development. Kotlin's syntax is more concise than Java, which means less code to write and read, and fewer opportunities for errors. It provides several high-level features like lambdas, coroutines and higher order functions that help making the code more clean and understandable. Key basics of Kotlin include control flow statements (if, when, for, while), variables (mutable and non-mutable), null safety, classes and objects, inheritance, interfaces, and exception handling. While learning Kotlin, experience with Java will certainly be helpful, but it's not a prerequisite.", - "links": [] + "description": "Kotlin is a concise, multi-platform, and fun language developed by JetBrains. Learn how to use Kotlin for Android, server-side, and cross-platform development, and explore its features, news, and community. Kotlin is a statically-typed programming language that runs on the Java Virtual Machine (JVM) and can be used to develop all types of Android apps. It is Google's preferred language for Android app development.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Kotlin", + "url": "https://kotlinlang.org/", + "type": "article" + }, + { + "title": "Kotlin Docs", + "url": "https://kotlinlang.org/docs/getting-started.html", + "type": "article" + }, + { + "title": "Kotlin Tutorial for Beginners", + "url": "https://www.w3schools.com/kotlin/index.php", + "type": "article" + } + ] }, "j69erqfosSZMDlmKcnnn0": { "title": "Basics of OOP", - "description": "In Android development, understanding the `Basics of Object-Oriented Programming (OOP)` is crucial. OOP is a programming paradigm that uses \"Objects\" - entities that contain both data and functions that manipulate the data. Key concepts include `Classes`, which are blueprints from which objects are created; `Objects`, instances of a class; `Inheritance`, where one class acquires properties from another; `Polymorphism`, the ability of an object to take many forms; `Abstraction`, showing only necessary details and hiding implementation from the user; and `Encapsulation`, the concept of wrapping data and the methods that work on data within one unit. By understanding these fundamentals, you can create more efficient and effective Android apps.", - "links": [] + "description": "Understanding the `Basics of Object-Oriented Programming (OOP)` is crucial. OOP is a programming paradigm that uses \"Objects\" - entities that contain both data and functions that manipulate the data.\n\nKey concepts include `Classes`, which are blueprints from which objects are created; `Objects`, instances of a class; `Inheritance`, where one class acquires properties from another; `Polymorphism`, the ability of an object to take many forms; `Abstraction`, showing only necessary details and hiding implementation from the user; and `Encapsulation`, the concept of wrapping data and the methods that work on data within one unit.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Object-Oriented Programming - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Object-oriented_programming", + "type": "article" + }, + { + "title": "OOP in Kotlin", + "url": "https://developer.android.com/codelabs/basic-android-kotlin-compose-classes-and-objects", + "type": "article" + } + ] }, "cNeT1dJDfgn0ndPzSxhSL": { "title": "Data Structures and Algorithms", - "description": "In Android, **data structures** are primarily used to collect, organize and perform operations on the stored data more effectively. They are essential for designing advanced-level Android applications. Examples include Array, Linked List, Stack, Queue, Hash Map, and Tree.\n\nMeanwhile, **algorithms** are a sequence of instructions or rules for performing a particular task. In Android, algorithms can be used for data searching, sorting, or performing complex business logic. Some commonly used algorithms are Binary Search, Bubble Sort, Selection Sort, etc. A deep understanding of data structures and algorithms is crucial in optimizing the performance and the memory consumption of the Android applications.", - "links": [] + "description": "**Data Structures** are primarily used to collect, organize and perform operations on the stored data more effectively. They are essential for designing advanced-level Android applications. Examples include Array, Linked List, Stack, Queue, Hash Map, and Tree.\n\n**Algorithms** are a sequence of instructions or rules for performing a particular task. In Android, algorithms can be used for data searching, sorting, or performing complex business logic. Some commonly used algorithms are Binary Search, Bubble Sort, Selection Sort, etc. A deep understanding of data structures and algorithms is crucial in optimizing the performance and the memory consumption of the Android applications.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Data Structures and Algorithms in Android", + "url": "https://medium.com/@pranamsharma.1997/importance-of-data-structure-and-algorithms-in-android-app-development-75eed9f73909", + "type": "article" + } + ] }, "FVxNjbDBxgf6vkZWw1Awt": { "title": "What is and how to use Gradle?", - "description": "**Using Gradle**: Gradle is a powerful build system used in Android development that allows you to define your project and dependencies, and distinguish between different build types and flavors. Gradle uses a domain-specific language (DSL) which gives developers almost complete control over the build process. When you trigger a build in Android Studio, Gradle is the tool working behind the scenes to compile and package your app. It looks at the dependencies you declared in your build.gradle files and create a build script accordingly. Using Gradle in Android development requires continuous editing of the build.gradle files to manage app dependencies, build variants, signing configurations, and other essential aspects related to building your app.\n\nVisit the following resources to learn more:", + "description": "Gradle is a powerful build system used in Android development that allows you to define your project and dependencies, and distinguish between different build types and flavors. Gradle uses a domain-specific language (DSL) which gives developers almost complete control over the build process. When you trigger a build in Android Studio, Gradle is the tool working behind the scenes to compile and package your app. It looks at the dependencies you declared in your build.gradle files and create a build script accordingly. Using Gradle in Android development requires continuous editing of the build.gradle files to manage app dependencies, build variants, signing configurations, and other essential aspects related to building your app.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Gradle Build Tool", + "url": "https://gradle.org/", + "type": "article" + }, + { + "title": "Gradle Documentation", + "url": "https://docs.gradle.org/current/userguide/getting_started_eng.html", + "type": "article" + }, { "title": "Get going with Gradle - PDF", "url": "https://assets.gradlehero.com/get-going-with-gradle/get-going-with-gradle-book.pdf", @@ -70,23 +167,23 @@ "type": "article" }, { - "title": "Introduction to Gradle for Complete Beginners - 25minutes", - "url": "https://youtu.be/-dtcEMLNmn0?si=NuIP-3wNpUrxfTxA", + "title": "Gradle Course for Beginners - 55minutes", + "url": "https://www.youtube.com/watch?v=R6Z-Sxb837I", "type": "video" }, { - "title": "Gradle Course for Beginners - 55minutes", - "url": "https://www.youtube.com/watch?v=R6Z-Sxb837I", + "title": "Introduction to Gradle for Complete Beginners - 25minutes", + "url": "https://youtu.be/-dtcEMLNmn0?si=NuIP-3wNpUrxfTxA", "type": "video" } ] }, "5m_7DvInF8C_4Ml1xVI6L": { "title": "Create a Basic Hello World App", - "description": "The \"Hello World\" app is a simple project that you can build when you're getting started with Android development. It's often the first program that beginners learn to build in a new system. It's usually considered the simplest form of program that displays a message to the user - \"Hello, World!\" In Android, this involves creating a new project from the Android Studio and setting up the main activity. The main activity file is primarily written in Java or Kotlin where you can code for the display message, while the layout design view can be created in the XML file.\n\nResources:", + "description": "The \"Hello World\" app is a simple project that you can build when you're getting started with Android development. It's often the first program that beginners learn to build in a new system. It's usually considered the simplest form of program that displays a message to the user - \"Hello, World!\" In Android, this involves creating a new project from the Android Studio and setting up the main activity. The main activity file is primarily written in Java or Kotlin where you can code for the display message, while the layout design view can be created in the XML file.\n\nVisit the follow resources to learn more:", "links": [ { - "title": "Create your first android app", + "title": "Create Your First Android Application", "url": "https://developer.android.com/codelabs/basic-android-kotlin-compose-first-app", "type": "article" } @@ -94,93 +191,261 @@ }, "5s1CqsYCOXjNroDHaGKGa": { "title": "Version Control", - "description": "_Version Control_ is a system that records changes to a file or set of files over time so that you can recall specific versions later. An essential tool for software development, it helps to track changes, enhance collaboration, and manage different versions of a project. Two common types of version control systems are Centralized Version Control System (CVCS) and Distributed Version Control System (DVCS). CVCS uses a central server to store all versions of a project, with users getting snapshots from that server. Examples include SVN and Perforce. On the other hand, DVCS allows multiple developers to work on a single project simultaneously. Each user has a complete backup of all versions of the work. Examples include Git and Mercurial.", - "links": [] + "description": "_Version Control_ is a system that records changes to a file or set of files over time so that you can recall specific versions later. An essential tool for software development, it helps to track changes, enhance collaboration, and manage different versions of a project. Two common types of version control systems are Centralized Version Control System (CVCS) and Distributed Version Control System (DVCS). CVCS uses a central server to store all versions of a project, with users getting snapshots from that server. Examples include SVN and Perforce. On the other hand, DVCS allows multiple developers to work on a single project simultaneously. Each user has a complete backup of all versions of the work. Examples include Git and Mercurial.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Version Control Systems", + "url": "https://en.wikipedia.org/wiki/Version_control", + "type": "article" + } + ] }, "rqSZ2ATeHbOdIQE9Jlb0B": { "title": "Git", - "description": "`Git` is a highly efficient and flexible distributed version control system that was created by Linus Torvalds, the creator of Linux. It allows multiple developers to work on a project concurrently, providing tools for non-linear development and tracking changes in any set of files. Git has a local repository with a complete history and version-tracking capabilities, allowing offline operations, unlike SVN. It ensures data integrity and provides strong support for non-linear development with features such as branching and merging. Yet, Git has a high learning curve and can be complex for beginners to understand the command line interface. Furthermore, Git also allows you to create `tags` to reference certain points in your history for milestone or version releases.", - "links": [] + "description": "`Git` is a highly efficient and flexible distributed version control system that was created by **Linus Torvalds**, the creator of Linux. It allows multiple developers to work on a project concurrently, providing tools for non-linear development and tracking changes in any set of files. Git has a local repository with a complete history and version-tracking capabilities, allowing offline operations, unlike SVN. It ensures data integrity and provides strong support for non-linear development with features such as branching and merging.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Git and Github Roadmap", + "url": "https://roadmap.sh/git-github", + "type": "article" + }, + { + "title": "Git", + "url": "https://git-scm.com/", + "type": "article" + }, + { + "title": "Git Documentation", + "url": "https://git-scm.com/docs", + "type": "article" + } + ] }, "H-2eb8fLwz8IKYXbeSVKK": { "title": "GitHub", - "description": "**GitHub** is a cloud-based hosting service for managing software version control using Git. It provides a platform for enabling multiple developers to work together on the same project at the same time. With GitHub, codes can be stored publicly, allowing for collaboration with other developers or privately for individual projects. Key features of GitHub include code sharing, task management, and version control, among others. GitHub also offers functionalities such as bug tracking, feature requests, and task management for the project. For Android development, it supports Gradle-based android projects, plugins for Android Studio and JetBrains IntelliJ IDEA, making version control operations more user-friendly.", - "links": [] + "description": "**GitHub** is a cloud-based hosting service for managing software version control using Git. It provides a platform for enabling multiple developers to work together on the same project at the same time. With GitHub, codes can be stored publicly, allowing for collaboration with other developers or privately for individual projects. Key features of GitHub include code sharing, task management, and version control, among others. GitHub also offers functionalities such as bug tracking, feature requests, and task management for the project.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Git and Github Roadmap", + "url": "https://roadmap.sh/git-github", + "type": "article" + }, + { + "title": "GitHub", + "url": "https://github.com/", + "type": "article" + }, + { + "title": "Github Documentation", + "url": "https://docs.github.com/", + "type": "article" + } + ] }, "5LFZdUiFYYU_1sYsouyan": { "title": "Bitbucket", - "description": "Bitbucket is a web-based hosting service that is owned by Atlassian. Bitbucket uses either Mercurial or Git revision control systems, allowing users to manage and maintain their code. This platform is mainly used for code and code review. Bitbucket provides both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts) as of September 2010. It originally offered only Mercurial support. Bitbucket integrates with other Atlassian software like JIRA, HipChat, Confluence and Bamboo.", - "links": [] + "description": "Bitbucket is a web-based hosting service that is owned by Atlassian. Bitbucket uses either Mercurial or Git revision control systems, allowing users to manage and maintain their code. This platform is mainly used for code and code review. Bitbucket provides both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts) as of September 2010. It originally offered only Mercurial support. Bitbucket integrates with other Atlassian software like JIRA, HipChat, Confluence and Bamboo.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Bitbucket", + "url": "https://bitbucket.org/", + "type": "article" + }, + { + "title": "Bitbucket for Developers", + "url": "https://www.atlassian.com/software/bitbucket", + "type": "article" + } + ] }, "Q47BtQphp59NkkZoeNXmP": { "title": "GitLab", - "description": "`Gitlab` is a web-based DevOps lifecycle tool which provides a Git-repository manager, along with continuous integration and deployment pipeline features, using an open-source license, developed by GitLab Inc. Users can manage and create their software projects and repositories, and collaborate on these projects with other members. `Gitlab` also allows users to view analytics and open issues of their project. It stands next to other version control tools like `GitHub` and `Bitbucket`, but comes with its own set of additional features and nuances. For Android development, `Gitlab` can be particularly useful owing to its continuous integration and deployment system which can automate large parts of the app testing and deployment.", - "links": [] + "description": "`Gitlab` is a web-based DevOps lifecycle tool which provides a Git-repository manager, along with continuous integration and deployment pipeline features, using an open-source license, developed by GitLab Inc. Users can manage and create their software projects and repositories, and collaborate on these projects with other members. `Gitlab` also allows users to view analytics and open issues of their project. It stands next to other version control tools like `GitHub` and `Bitbucket`, but comes with its own set of additional features and nuances. For Android development, `Gitlab` can be particularly useful owing to its continuous integration and deployment system which can automate large parts of the app testing and deployment.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Gitlab", + "url": "https://about.gitlab.com/", + "type": "article" + }, + { + "title": "Gitlab Documentation", + "url": "https://docs.gitlab.com/", + "type": "article" + } + ] }, "5Li8J5iR_ZuyIlxX0LYei": { "title": "App Components", - "description": "Android apps are primarily made up of five different types of components:\n\n1. **Activities**: These are individual screens that a user can interact with. Any UI action like touching a button or swiping a screen will usually take place within an activity.\n \n2. **Services**: Unlike activities, services run in the background and don't have a user interface. They’re used for repetitive or long running operations, like playing music or pulling in a feed of data from a server.\n \n3. **Broadcast Receivers**: These are event listeners. The Android operating system uses them to respond to system-wide events.\n \n4. **Content Providers**: They manage and share app data with other apps installed on the device. For security, data is not generally shared across apps.\n \n5. **Intents**: These serve as messages or commands to the Android system. They're used to signal to the Android system that certain events have occurred.\n \n\nEach app component is designed to serve different purposes and to have a well-defined lifecycle which defines how the component is created and destroyed.", - "links": [] + "description": "Android apps are primarily made up of five different types of components:\n\n1. **Activities**: These are individual screens that a user can interact with. Any UI action like touching a button or swiping a screen will usually take place within an activity.\n \n2. **Services**: Unlike activities, services run in the background and don't have a user interface. They’re used for repetitive or long running operations, like playing music or pulling in a feed of data from a server.\n \n3. **Broadcast Receivers**: These are event listeners. The Android operating system uses them to respond to system-wide events.\n \n4. **Content Providers**: They manage and share app data with other apps installed on the device. For security, data is not generally shared across apps.\n \n5. **Intents**: These serve as messages or commands to the Android system. They're used to signal to the Android system that certain events have occurred.\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "App Fundamentals", + "url": "https://developer.android.com/guide/components/fundamentals", + "type": "article" + }, + { + "title": "Android App Components", + "url": "https://medium.com/android-hunger/android-app-components-activities-fragments-and-intents-ed7373455555", + "type": "article" + } + ] }, "nwuVlPmzwJ17mtVQ8Hi9w": { "title": "Activity", - "description": "`Activity` in Android is a crucial component that represents a single screen with a user interface. It is just like a window in a desktop application. Android apps are typically made up of one or more activities, each having its interface which allows user interaction. When an app is launched, an instance of `Activity` is created, starting the lifecycle of that app. Every activity has its own lifecycle (create, start, resume, pause, stop, destroy) that keeps the state of a user's progress, and Android manages these states automatically. Activities can also have `Intent`, which allows them to interact with other components, such as starting another activity or getting a result from that activity.", - "links": [] + "description": "`Activity` in Android is a crucial component that represents a single screen with a user interface. It is just like a window in a desktop application. Android apps are typically made up of one or more activities, each having its interface which allows user interaction. When an app is launched, an instance of `Activity` is created, starting the lifecycle of that app. Every activity has its own lifecycle (create, start, resume, pause, stop, destroy) that keeps the state of a user's progress, and Android manages these states automatically. Activities can also have `Intent`, which allows them to interact with other components, such as starting another activity or getting a result from that activity.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Android Activity", + "url": "https://developer.android.com/reference/android/app/Activity", + "type": "article" + }, + { + "title": "Mastering Android Activities", + "url": "https://medium.com/deuk/mastering-the-android-activity-lifecycle-best-practices-1d10f15d060a", + "type": "article" + } + ] }, "PcHmU1c9hqKyzSjwlRPHk": { "title": "Services", - "description": "**Services**: A service in Android is an app component that performs operations in the background without a user interface. It can be started by an application component, like an activity, and it will continue to run in the background even if the user switches to another application. There are two types of services in Android, namely, `Started Service` and `Bound Service`. A `Started Service` is used to perform a single operation, such as downloading a large file. On the other hand, a `Bound Service` offers a client-server interface that allows components to interact with the service, send requests, receive results, and even perform interprocess communication (IPC).", - "links": [] + "description": "**Services**: A service in Android is an app component that performs operations in the background without a user interface. It can be started by an application component, like an activity, and it will continue to run in the background even if the user switches to another application. There are two types of services in Android, namely, `Started Service` and `Bound Service`. A `Started Service` is used to perform a single operation, such as downloading a large file. On the other hand, a `Bound Service` offers a client-server interface that allows components to interact with the service, send requests, receive results, and even perform interprocess communication (IPC).\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Services", + "url": "https://developer.android.com/guide/components/services", + "type": "article" + } + ] }, "nkcdjrswv0WCzUs48BAt9": { "title": "Content Provider", - "description": "A **Content Provider** in Android is a key component that allows applications to securely share data with other applications. They act as a layer between databases and applications to enhance data security. Content providers manage access to a structured set of data by handling data transactions, implementing data security, and maintaining isolation between applications. They provide an abstracted interface which is used to access data, while the underlying storage method (Like SQLite database, web, or any other method) remains hidden. This mechanism aids in retrieving data from a non-relational source in a structured way. They're used primarily when data needs to be shared between multiple applications, not just within a single application.", - "links": [] + "description": "A **Content Provider** in Android is a key component that allows applications to securely share data with other applications. They act as a layer between databases and applications to enhance data security. Content providers manage access to a structured set of data by handling data transactions, implementing data security, and maintaining isolation between applications. They provide an abstracted interface which is used to access data, while the underlying storage method (Like SQLite database, web, or any other method) remains hidden. This mechanism aids in retrieving data from a non-relational source in a structured way. They're used primarily when data needs to be shared between multiple applications, not just within a single application.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Content Provider", + "url": "https://developer.android.com/guide/topics/providers/content-providers", + "type": "article" + } + ] }, "tFuAToid1Fkmu96BDtW7K": { "title": "Broadcast Receiver", - "description": "**Broadcast Receivers** in Android are components that respond to system-wide broadcast announcements. They can be registered to respond to a specific type of broadcasts or implement a user-defined broadcast. While you can initiate a broadcast from your app, they are generally used for receiving system notifications or communicating with other applications. However, keep in mind that they cannot display a user interface, but they can start activities if necessary, which do have a user interface. A `BroadcastReceiver` class must override the `onReceive()` method where each message is received as an `Intent` object parameter.", - "links": [] + "description": "**Broadcast Receivers** in Android are components that respond to system-wide broadcast announcements. They can be registered to respond to a specific type of broadcasts or implement a user-defined broadcast. While you can initiate a broadcast from your app, they are generally used for receiving system notifications or communicating with other applications. However, keep in mind that they cannot display a user interface, but they can start activities if necessary, which do have a user interface. A `BroadcastReceiver` class must override the `onReceive()` method where each message is received as an `Intent` object parameter.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Broadcast Receiver", + "url": "https://developer.android.com/reference/android/content/BroadcastReceiver", + "type": "article" + } + ] }, "hv_9imIQpthxEaMLXEUHI": { "title": "Intent", - "description": "\"Intent\" in Android is a software mechanism used for late runtime binding between components, such as activities, content providers, and services. It is essentially a passive data structure holding an abstract description of an operation that the Android system is requested to perform. The Intent can be explicit, in which you specify the component to start or implicit, where you declare a general action to perform, allowing a component from another app to handle it. Implicit intents are often used to request another app's functionality, such as showing a user a location on a map or taking a photo. \"Intent Filters\" are then used by the components to advertise their capabilities to handle different types of intents.", - "links": [] + "description": "Intent in Android is a software mechanism used for late runtime binding between components, such as activities, content providers, and services. It is essentially a passive data structure holding an abstract description of an operation that the Android system is requested to perform.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Intent", + "url": "https://developer.android.com/reference/android/content/Intent", + "type": "article" + } + ] }, "FVg438cVBBzqJFkGWVbQM": { "title": "Activity LifeCycle", - "description": "The **Activity Lifecycle** in Android represents a series of states or events that an activity can go through from its creation to its destruction. The primary states or events are `onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`, and `onRestart()`. The method `onCreate()` is called when the activity is first created, followed by `onStart()` when the activity becomes visible to the user. The `onResume()` method executes when the user starts interacting with the application. `onPause()` and `onStop()` methods are invoked when the application is no longer in the foreground or visible to the user. The `onDestroy()` method is used when the activity is being completely removed from the memory. The `onRestart()` method is called after the system stops the activity and is about to start it again. The proper handling of these states ensures the efficient use of resources and a smooth user experience.", - "links": [] + "description": "The **Activity Lifecycle** in Android represents a series of states or events that an activity can go through from its creation to its destruction. The primary states or events are `onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`, and `onRestart()`. The method `onCreate()` is called when the activity is first created, followed by `onStart()` when the activity becomes visible to the user. The `onResume()` method executes when the user starts interacting with the application. `onPause()` and `onStop()` methods are invoked when the application is no longer in the foreground or visible to the user. The `onDestroy()` method is used when the activity is being completely removed from the memory. The `onRestart()` method is called after the system stops the activity and is about to start it again. The proper handling of these states ensures the efficient use of resources and a smooth user experience.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Activity Lifecycle", + "url": "https://developer.android.com/guide/components/activities/activity-lifecycle", + "type": "article" + } + ] }, "oUjetA2eduvQIeLcQlLcu": { "title": "State Changes", - "description": "In Android, an \"Activity\" is a crucial component that represents a single screen with a user interface. One or more active activities make up an Application. These activities can go through different states in their lifecycle, often due to user interaction or system interruption. The primary states of an Activity include `Created`, `Started`, `Resumed`, `Paused`, `Stopped`, `Restarted`, and `Destroyed`. The \"Created\" state occurs when an activity instance is being created. The \"Started\" state is when the activity is visible to the user, while \"Resumed\" is when the activity is interacting with the user. An activity is \"Paused\" when it loses focus but is partly visible, \"Stopped\" when it's not visible, \"Restarted\" when the activity is about to be started, and \"Destroyed\" when the activity is finished or the system is temporarily destroying it.", - "links": [] + "description": "\"Activity\" is a crucial component that represents a single screen with a user interface. One or more active activities make up an Application. These activities can go through different states in their lifecycle, often due to user interaction or system interruption. The primary states of an Activity include `Created`, `Started`, `Resumed`, `Paused`, `Stopped`, `Restarted`, and `Destroyed`. The \"Created\" state occurs when an activity instance is being created. The \"Started\" state is when the activity is visible to the user, while \"Resumed\" is when the activity is interacting with the user. An activity is \"Paused\" when it loses focus but is partly visible, \"Stopped\" when it's not visible, \"Restarted\" when the activity is about to be started, and \"Destroyed\" when the activity is finished or the system is temporarily destroying it.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Activity Lifecycle", + "url": "https://developer.android.com/guide/components/activities/activity-lifecycle", + "type": "article" + } + ] }, "-O-G9bg36ut8NnZcdOaop": { "title": "Tasks & Backstack", - "description": "The **tasks backstack** in Android refers to the way Android manages and arranges tasks in a stack-like structure. Every task has a stack of activities, which is referred to as the task's back stack. The activities are placed in the order they are opened. When a new activity is started, it is placed at the top of the stack and becomes the running activity, while the previous activity is paused and put into the back stack. When you press the back button, the current activity is destroyed and the activity at the top of the back stack becomes active again. Android defines how to navigate between tasks and activities using this back stack concept.", - "links": [] + "description": "The **tasks backstack** in Android refers to the way Android manages and arranges tasks in a stack-like structure. Every task has a stack of activities, which is referred to as the task's back stack. The activities are placed in the order they are opened. When a new activity is started, it is placed at the top of the stack and becomes the running activity, while the previous activity is paused and put into the back stack. When you press the back button, the current activity is destroyed and the activity at the top of the back stack becomes active again. Android defines how to navigate between tasks and activities using this back stack concept.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Tasks and Backstack", + "url": "https://developer.android.com/guide/components/activities/tasks-and-back-stack", + "type": "article" + } + ] }, "gGdz3j33x0gfrFDp_rw8Z": { "title": "Implicit Intents", - "description": "In Android development, **Implicit Intents** do not specify the target component explicitly like Explicit Intents. Instead, they allow the system to find a suitable component matching the Intent description to handle the request. The system will find an activity that can handle this intent by comparing the `` section in the `AndroidManifest.xml` of all apps installed on the device against the Implicit Intent. An ideal example of an implicit intent is opening a URL. You do not need to know the specific activity that can handle this request, you just declare an intent to view a web page and Android system will select the suitable app that can open the URL.", - "links": [] + "description": "**Implicit Intents** do not specify the target component explicitly like Explicit Intents. Instead, they allow the system to find a suitable component matching the Intent description to handle the request. The system will find an activity that can handle this intent by comparing the `` section in the `AndroidManifest.xml` of all apps installed on the device against the Implicit Intent.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Implicit Intents", + "url": "https://developer.android.com/guide/components/intents-filters#implicit", + "type": "article" + } + ] }, "TmIeCF3xVCe5Sy3ITmM31": { "title": "Explicit Intents", - "description": "**Explicit Intents** are primarily used within an application's own boundaries. In explicit intents you specify the component that needs to be responded to the intent. Therefore, the target component must be specified by calling methods such as `setComponent(ComponentName)`, `setClass(Context, Class)`, or `setClassName(String, String)`. This means that explicit intents are typically used for launching activities, broadcasting messages, starting services within the app. Explicit intents are not resolved by the system but are passed to the component identified in the intent.", - "links": [] + "description": "**Explicit Intents** are primarily used within an application's own boundaries. In explicit intents you specify the component that needs to be responded to the intent. Therefore, the target component must be specified by calling methods such as `setComponent(ComponentName)`, `setClass(Context, Class)`, or `setClassName(String, String)`. This means that explicit intents are typically used for launching activities, broadcasting messages, starting services within the app. Explicit intents are not resolved by the system but are passed to the component identified in the intent.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Explicit Intents", + "url": "https://developer.android.com/guide/components/intents-filters#explicit", + "type": "article" + } + ] }, "b-sfh6NoS-APqaNKm5L5S": { "title": "Intent Filters", - "description": "`Intent Filters` in Android are essential components of the Android system where you can declare the capabilities of your activities, services, and broadcast receivers. An intent filter is an expression found in your app's manifest file, defined in the XML element. Android uses these filters to determine the appropriate components for incoming intents, which can be either explicit or implicit. Your app's ability to respond to intents depends on the filters you define. The filters are set of conditions comprised of `action`, `category`, and `data` which your activity or service is able to perform. If the incoming `Intent` matches with defined `Intent Filters`, Android system will permit that `Intent` to your Component (Activity, Service, or Broadcast Receiver).", - "links": [] + "description": "`Intent Filters` in Android are essential components of the Android system where you can declare the capabilities of your activities, services, and broadcast receivers. An intent filter is an expression found in your app's manifest file, defined in the `` XML element. Android uses these filters to determine the appropriate components for incoming intents, which can be either explicit or implicit. Your app's ability to respond to intents depends on the filters you define. The filters are set of conditions comprised of `action`, `category`, and `data` which your activity or service is able to perform. If the incoming `Intent` matches with defined `Intent Filters`, Android system will permit that `Intent` to your Component (Activity, Service, or Broadcast Receiver).\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Intent Filters", + "url": "https://developer.android.com/guide/components/intents-filters", + "type": "article" + } + ] }, "jePGzTejFe4ryA5qFFmjl": { "title": "Design & Architecture", - "description": "In Android, **Design Architecture** refers to structuring the code in a way that increases its readability, maintainability, and testability. There are several ways to design architecture like [Model-View-Controller (MVC)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller), [Model-View-Presenter (MVP)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter), [Model-View-ViewModel (MVVM)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel), and [Model-View-Intent (MVI)](https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started). Each of these define the interaction between the data, the logic, and the UI layers. Google’s recommended architectural pattern is [Android Architecture Components](https://developer.android.com/topic/libraries/architecture) which follow the principles of the MVVM pattern. Bear in mind that an architecture is not a rigid structure that fits all solutions. Rather, it serves as a guideline and can be tweaked as necessary.", - "links": [] + "description": "**Design Architecture** refers to structuring the code in a way that increases its readability, maintainability, and testability. There are several ways to design architecture like Model-View-Controller (MVC), Model-View-Intent (MVI). Each of these define the interaction between the data, the logic, and the UI layers. Google’s recommended architectural pattern is Android Architecture Components which follow the principles of the MVVM pattern. Bear in mind that an architecture is not a rigid structure that fits all solutions. Rather, it serves as a guideline and can be tweaked as necessary.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Android Architecture Components", + "url": "https://developer.android.com/topic/libraries/architecture", + "type": "article" + }, + { + "title": "Model-View-Controller (MVC)", + "url": "https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller", + "type": "article" + }, + { + "title": "Model-View-Presenter (MVP)", + "url": "https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter", + "type": "article" + }, + { + "title": "Model-View-ViewModel (MVVM)", + "url": "https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel", + "type": "article" + }, + { + "title": "Model-View-Intent (MVI)", + "url": "https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started", + "type": "article" + } + ] }, "Dp2DOX10u2xJUjB8Okhzh": { "title": "Frame", @@ -198,7 +463,7 @@ "description": "**LinearLayout** is a view group that aligns all children in a single directioni, vertically or horizontally. You can specify the layout direction with the `android:orientation` attribute.\n\n**LinearLayout** was commonly used in earlier Android development, but with the introduction of ConstraintLayout, it’s less frequently used in modern apps.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: Linear Layout", + "title": "Linear Layout", "url": "https://developer.android.com/develop/ui/views/layout/linear", "type": "article" } @@ -209,7 +474,7 @@ "description": "A **RelativeLayout** in Android is a type of ViewGroup that allows you to position child views relative to each other or relative to the parent layout. It's a flexible layout where you can arrange the child views in relation to one another based on certain rules, making it suitable for creating complex UI designs.\n\n**RelativeLayout** was commonly used in earlier Android development, but with the introduction of `ConstraintLayout`, it's less frequently used in modern apps.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: Relative Layout", + "title": "Relative Layout", "url": "https://developer.android.com/develop/ui/views/layout/relative", "type": "article" } @@ -220,12 +485,12 @@ "description": "Lets you create large, complex layouts with a flat view hierarchy—no nested view groups. It's similar to `RelativeLayout` in that all views are laid out according to relationships between sibling views and the parent layout, but it's more flexible than RelativeLayout and easier to use. Its available on xml and jetpack compose.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: ConstraintLayout in xml", + "title": "Android: ConstraintLayout in XML", "url": "https://developer.android.com/develop/ui/views/layout/constraint-layout", "type": "article" }, { - "title": "Android developers: ContraintLayout in compose", + "title": "Android: ConstraintLayout in Compose", "url": "https://developer.android.com/develop/ui/compose/layouts/constraintlayout", "type": "article" } @@ -236,7 +501,7 @@ "description": "RecyclerView is the most commonly used and powerful list management tool in Android development. Witch makes it easy to efficiently display large sets of data. You supply the data and define how each item looks, and the RecyclerView library dynamically creates the elements when they're needed.\n\nAs the name implies, RecyclerView recycles those individual elements. When an item scrolls off the screen, RecyclerView doesn't destroy its view. Instead, RecyclerView reuses the view for new items that have scrolled onscreen. RecyclerView improves performance and your app's responsiveness, and it reduces power consumption.\n\nLearn more from the following resources:", "links": [ { - "title": "Android Developers: Create dynamic lists with RecyclerView", + "title": "Create Dynamic Lists with RecyclerView", "url": "https://developer.android.com/develop/ui/views/layout/recyclerview", "type": "article" } @@ -247,7 +512,7 @@ "description": "TextView is a widget that is seen in every android application. This widget is used to display simple text within the android application.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: TextView", + "title": "TextView", "url": "https://developer.android.com/reference/android/widget/TextView", "type": "article" } @@ -288,12 +553,17 @@ }, "WhfzFOUpm0DFEj7Oeq21R": { "title": "Buttons", - "description": "A `button` consists of text or an icon, or both, that communicates what action occurs when the user taps it.\n\nLearn more from the following resources:", + "description": "A `button` consists of text or an icon, or both, that communicates what action occurs when the user taps it.\n\nButtons are UI widgets that allow users to interact with an application by tapping on them. A button typically consists of text, an icon, or a combination of both, and communicates what action will occur when the user taps it.\n\nLearn more from the following resources:", "links": [ { "title": "Android Developers: Button", "url": "https://developer.android.com/develop/ui/views/components/button", "type": "article" + }, + { + "title": "Create a Button - Android", + "url": "https://developer.android.com/quick-guides/content/create-button", + "type": "article" } ] }, @@ -302,7 +572,7 @@ "description": "A `toast` provides simple feedback about an operation in a small popup. It only fills the amount of space required for the message and the current activity remains visible and interactive. Toasts automatically disappear after a timeout.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: Toast", + "title": "Toast", "url": "https://developer.android.com/guide/topics/ui/notifiers/toasts", "type": "article" } @@ -313,7 +583,7 @@ "description": "Displays image resources, for example Bitmap or Drawable resources. ImageView is also commonly used to apply tints to an image and handle image scaling.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: ImageView", + "title": "Android Developers: ImageView", "url": "https://developer.android.com/reference/android/widget/ImageView", "type": "article" } @@ -321,10 +591,10 @@ }, "Z4Tbd5ClnqCXGPGG09F-G": { "title": "Bottom Sheet", - "description": "`Bottom sheets` are surfaces containing supplementary content that are anchored to the bottom of the screen.\n\nThere are several attributes that can be used to adjust the behavior of both standard and modal bottom sheets. Behavior attributes can be applied to standard bottom sheets in xml by setting them on a child View set to `app:layout_behavior` or programmatically.\n\nVisit the following resources to learn more:", + "description": "`Bottom sheets` are surfaces containing supplementary content that are anchored to the bottom of the screen.\n\nThere are several attributes that can be used to adjust the behavior of both standard and modal bottom sheets.\n\nBehavior attributes can be applied to standard bottom sheets in xml by setting them on a child View set to `app:layout_behavior` or programmatically.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: Bottom sheets", + "title": "Android developers: Bottom Sheets", "url": "https://developer.android.com/reference/com/google/android/material/bottomsheet/BottomSheetDialog", "type": "article" } @@ -332,10 +602,10 @@ }, "EzLjX4iRT7AxkAOsJYnSU": { "title": "ListView", - "description": "Displays a vertically-scrollable collection of views, where each view is positioned immediatelybelow the previous view in the list.\n\nFor a more modern, flexible, and performant approach to displaying lists, use `RecyclerView`.\n\nVisit the following resources to learn more:", + "description": "Displays a vertically-scrollable collection of views, where each view is positioned immediately below the previous view in the list.\n\nFor a more modern, flexible, and performant approach to displaying lists, use `RecyclerView`.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: ListView", + "title": "ListView", "url": "https://developer.android.com/reference/android/widget/ListView", "type": "article" } @@ -362,7 +632,7 @@ "description": "Tabs in Android Studio are a UI component used to organize content into multiple sections, allowing users to navigate between them by selecting the corresponding tab. This component is commonly used when there is a need to present different types of content in a single screen, like different categories, settings, or pages within an app.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Android developers: Material Tabs", + "title": "Material Tabs", "url": "https://developer.android.com/reference/com/google/android/material/tabs/package-summary", "type": "article" } @@ -386,11 +656,11 @@ }, "60Vm-77rseUqpMiFvp-dA": { "title": "Jetpack Compose", - "description": "`Jetpack Compose` is a modern toolkit for building native Android UI. It simplifies and accelerates UI development on Android with less code, powerful tools, and intuitive Kotlin APIs. `Jetpack Compose` offers a declarative approach to designing UI, where you can simply describe what your UI should look like at any given point of your app’s state, and `Compose` takes care of updating the view hierarchy, making UI development more efficient. It also integrates well with existing Android apps, letting you adopt its benefits at your own pace.", + "description": "`Jetpack Compose` is a modern toolkit for building native Android UI. It simplifies and accelerates UI development on Android with less code, powerful tools, and intuitive Kotlin APIs. `Jetpack Compose` offers a declarative approach to designing UI, where you can simply describe what your UI should look like at any given point of your app’s state, and `Compose` takes care of updating the view hierarchy, making UI development more efficient. It also integrates well with existing Android apps, letting you adopt its benefits at your own pace.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Explore top posts about Jetpack Compose", - "url": "https://app.daily.dev/tags/jetpack-compose?ref=roadmapsh", + "title": "Jetpack Compose", + "url": "https://developer.android.com/jetpack/compose", "type": "article" }, { @@ -402,13 +672,25 @@ }, "xV475jHTlLuHtpHZeXb7P": { "title": "App Shortcuts", - "description": "App shortcuts in Android are designed to provide quick and convenient routes to specific actions or functions within your app from the device home screen. To use them, long-press an app's icon and a pop-up menu will appear with the available shortcuts. Depending on the app, you might be able to send a message, make a booking, navigate home, or perform some other specific task without having to first open the app and navigate to the desired function. These shortcuts can also be moved and placed individually on the home screen for even faster access.", - "links": [] + "description": "App shortcuts in Android are designed to provide quick and convenient routes to specific actions or functions within your app from the device home screen. To use them, long-press an app's icon and a pop-up menu will appear with the available shortcuts. Depending on the app, you might be able to send a message, make a booking, navigate home, or perform some other specific task without having to first open the app and navigate to the desired function. These shortcuts can also be moved and placed individually on the home screen for even faster access.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "App Shortcuts", + "url": "https://developer.android.com/guide/topics/ui/shortcuts", + "type": "article" + } + ] }, "o5rzmnaQeiSh9ocvfJPpK": { "title": "Navigation Components", - "description": "The **Navigation Components** are part of Android Jetpack and are designed to simplify the implementation of navigation in your Android app. These components help you follow best practices, handle deep linking, and provide a consistent user experience across deep and conditional navigation. They also automate many common tasks, such as handling Up and Back actions correctly across many different types of devices. The Navigation component consists of three key parts which are Navigation graph, NavHost, and NavController.", - "links": [] + "description": "The **Navigation Components** are part of Android Jetpack and are designed to simplify the implementation of navigation in your Android app. These components help you follow best practices, handle deep linking, and provide a consistent user experience across deep and conditional navigation. They also automate many common tasks, such as handling Up and Back actions correctly across many different types of devices. The Navigation component consists of three key parts which are Navigation graph, NavHost, and NavController.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Navigation Components", + "url": "https://developer.android.com/guide/navigation", + "type": "article" + } + ] }, "Bz-BkfzsDHAbAw3HD7WCd": { "title": "MVI", @@ -439,12 +721,18 @@ }, "aF_xFIqTjQbENtC7pkXvJ": { "title": "MVP", - "description": "The MVP `Model View Presenter` pattern is a derivative of the well-known MVC `Model View Controller` pattern and is one of the most popular patterns for organizing the presentation layer in Android applications.\n\nMVP is divided into three components:\n\n* `Model`: Responsible for managing the data input to the app. This can often be an Interactor or UseCase, handling the business logic and data operations.\n* `View`: Takes care of updating the graphical part of the application. It acts as a passive view, only receiving data and requesting actions to be performed.\n* `Presenter`: Handles all the logic related to the graphical interface that the View requests. It provides the View with the data it needs to display on the screen.\n\nThis structure helps to create a clear separation of concerns, making your codebase more modular and easier to maintain.", - "links": [] + "description": "The MVP `Model View Presenter` pattern is a derivative of the well-known MVC `Model View Controller` pattern and is one of the most popular patterns for organizing the presentation layer in Android applications.\n\nMVP is divided into three components:\n\n* `Model`: Responsible for managing the data input to the app. This can often be an Interactor or UseCase, handling the business logic and data operations.\n* `View`: Takes care of updating the graphical part of the application. It acts as a passive view, only receiving data and requesting actions to be performed.\n* `Presenter`: Handles all the logic related to the graphical interface that the View requests. It provides the View with the data it needs to display on the screen.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Model View Presenter", + "url": "https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter", + "type": "article" + } + ] }, "w1A6wPKSd3Yh2luuHV-aE": { "title": "MVC", - "description": "MVC or `Model View Controller` is a software design pattern commonly used for developing user interfaces that divides the related program logic into three interconnected components.\n\nComponents:\n\n* `Model`: The internal representations of information. This can often be an Interactor or UseCase\n* `View`: The interface that presents information to and accepts it from the user\n* `Controller`: The controller contains logic that updates the model and/or view in response to input from the users of the app.\n\nVisit the following resources to learn more:", + "description": "MVC or `Model View Controller` is a software design pattern commonly used for developing user interfaces that divides the related program logic into three interconnected components.\n\nComponents:\n-----------\n\n* `Model`: The internal representations of information. This can often be an Interactor or UseCase\n* `View`: The interface that presents information to and accepts it from the user\n* `Controller`: The controller contains logic that updates the model and/or view in response to input from the users of the app.\n\nVisit the following resources to learn more:", "links": [ { "title": "MVC", @@ -452,7 +740,7 @@ "type": "article" }, { - "title": "Model–view–controller", + "title": "Model View Controller", "url": "https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller", "type": "article" } @@ -460,160 +748,420 @@ }, "ZF5XgO7I_J9928bD3CVXo": { "title": "Repository Pattern", - "description": "In Android design architecture, the `Repository Pattern` separates the data sources from the rest of the application. It acts as a mediator between different data sources, such as persistent models, web services, or caches. Instead of having the network and database calls spread out throughout your ViewModel, they are encapsulated within a Repository class. This separation will make the code clean, easy to read and testable. It provides a simple API for data access, the rest of the app doesn't need to know where the data is coming from it just asks the repository.", - "links": [] + "description": "The `Repository Pattern` separates the data sources from the rest of the application. It acts as a mediator between different data sources, such as persistent models, web services, or caches. Instead of having the network and database calls spread out throughout your ViewModel, they are encapsulated within a Repository class. This separation will make the code clean, easy to read and testable. It provides a simple API for data access, the rest of the app doesn't need to know where the data is coming from it just asks the repository.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Repository Pattern", + "url": "https://en.wikipedia.org/wiki/Repository_pattern", + "type": "article" + } + ] }, "784fiIdKrQDlIm3VIiJQN": { "title": "Builder Pattern", - "description": "The **Builder Pattern** in Android is used to construct complex objects step by step. It separates the construction of an object from its representation. The pattern involves a `Builder` class which is used to construct the `Product` class. The Builder class typically has a method for each part that may be used to construct a Product. It also has a method for returning the final product. The Builder pattern is useful in situations where you might have multiple ways to create an object or when an object requires a large number of parameters for its constructor.", - "links": [] + "description": "The **Builder Pattern** in Android is used to construct complex objects step by step. It separates the construction of an object from its representation. The pattern involves a `Builder` class which is used to construct the `Product` class. The Builder class typically has a method for each part that may be used to construct a Product. It also has a method for returning the final product. The Builder pattern is useful in situations where you might have multiple ways to create an object or when an object requires a large number of parameters for its constructor.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Builder Pattern", + "url": "https://developer.android.com/kotlin/style-guide#builder-pattern", + "type": "article" + }, + { + "title": "Android Builder Pattern", + "url": "https://medium.com/kayvan-kaseb/builder-design-pattern-in-android-a38dccb75485", + "type": "article" + } + ] }, "DeOxj6RzQBYfEWV-M1Ybm": { "title": "Factory Pattern", - "description": "The **Factory Pattern** is part of the Creational Design Patterns. This pattern provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created. It introduces an abstraction layer between the client code and the concrete objects. Normally, this is achieved by using a factory method to create objects instead of using constructors. The instance of the class is usually created by a method, referred to as a `factory method`, which is either specified in an interface and implemented in implementing classes or implemented in a base class which may be optionally overridden by derived classes. The Factory Method is used when we want to provide users with a way to create an instance of a class from one of several possible classes that share a common super class.\n\nHere is a basic example of the Factory Pattern:\n\n public abstract class Animal {\n public abstract String makeSound();\n }\n \n public class Dog extends Animal {\n @override\n public String makeSound() {\n return \"Woof\";\n }\n }\n \n public class Cat extends Animal {\n @override\n public String makeSound() {\n return \"Meow\";\n }\n }\n \n public class AnimalFactory {\n public Animal createAnimal(String type) {\n if (\"Dog\".equals(type)) {\n return new Dog();\n } else if (\"Cat\".equals(type)) {\n return new Cat();\n }\n return null;\n }\n }\n \n\nIn the code above, `AnimalFactory` is the factory class responsible to create and return instances of `Dog` and `Cat` classes.", - "links": [] + "description": "The **Factory Pattern** is part of the Creational Design Patterns. This pattern provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created. It introduces an abstraction layer between the client code and the concrete objects. Normally, this is achieved by using a factory method to create objects instead of using constructors. The instance of the class is usually created by a method, referred to as a `factory method`, which is either specified in an interface and implemented in implementing classes or implemented in a base class which may be optionally overridden by derived classes. The Factory Method is used when we want to provide users with a way to create an instance of a class from one of several possible classes that share a common super class.\n\nHere is a basic example of the Factory Pattern:\n\n public abstract class Animal {\n public abstract String makeSound();\n }\n \n public class Dog extends Animal {\n @override\n public String makeSound() {\n return \"Woof\";\n }\n }\n \n public class Cat extends Animal {\n @override\n public String makeSound() {\n return \"Meow\";\n }\n }\n \n public class AnimalFactory {\n public Animal createAnimal(String type) {\n if (\"Dog\".equals(type)) {\n return new Dog();\n } else if (\"Cat\".equals(type)) {\n return new Cat();\n }\n return null;\n }\n }\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Android: Factory Pattern", + "url": "https://developer.android.com/guide/components/intents-filters#factory", + "type": "article" + } + ] }, "N_auRfGKkeIIc-qiHLkR_": { "title": "Observer Pattern", - "description": "The **Observer Pattern** is a software design pattern in which an object, known as the subject, maintains a list of its dependants, called observers, and notifies them automatically of any state changes. This is usually done by calling one of their methods. It's mainly used for implementing distributed event handling systems and is viewed as a good practice to follow, making your design more robust, flexible, and scalable. The subject to be observed triggers events and observers react to the change or the event that they are listening to. In Android, observable libraries like `LiveData`, `RxJava`, `Flow`, and other reactive streams allow the implementation of observer pattern.", - "links": [] + "description": "The **Observer Pattern** is a software design pattern in which an object, known as the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes. This is usually done by calling one of their methods. It's mainly used for implementing distributed event handling systems and is viewed as a good practice to follow, making your design more robust, flexible, and scalable. The subject to be observed triggers events and observers react to the change or the event that they are listening to. In Android, observable libraries like `LiveData`, `RxJava`, `Flow`, and other reactive streams allow the implementation of observer pattern.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Observer Pattern", + "url": "https://en.wikipedia.org/wiki/Observer_pattern", + "type": "article" + } + ] }, "W-WTIiQml8dLK6i_V69JK": { "title": "Flow", - "description": "`Flow` in Android development is part of the Kotlin Coroutines library. It is a type that can emit multiple values sequentially, making it perfect for working with any data streams or any streams of events that aren't instantaneous. Like Observables, `Flow` is also based on the observer pattern, meaning it can emit values and these emissions can be observed and reacted to. However, `Flow` comes with built-in backpressure handling and the ability to transform, filter, or combine these flows in a sequence. Along with Coroutines, `Flow` encourages a more predictable and simplified concurrency design without callback hell problem.", - "links": [] - }, - "xk0vnWr7uESdzYRxwFjoK": { - "title": "RxJava", - "description": "RxJava, standing for Reactive Extensions for the JVM, is a library in the Java and Android ecosystem that allows developers to write asynchronous, event-based programs. It is developed according to reactive programming principles and it supports multi-threading operations. One can create data streams from just about anything - variables, data structures, inputs, etc. and these streams could be used with functional programming methods to process the data.\n\nIn Android, RxJava is often used in combination with Retrofit, to handle API calls or with Room, to handle tasks involving the database. This library provides a set of operators such as `map()`, `filter()`, `concat()`, `merge()`, `flatmap()` etc. to handle tasks such as chain asynchronous operations, perform computations, or transform data.\n\nThere are three important entities in RxJava - 'Observable', 'Observer' and 'Subscription'. 'Observable' is a data stream that does some work, 'Observer' watches the 'Observable' and does something when the 'Observable’ changes, and 'Subscription' is what ties an 'Observer' to an 'Observable' - linking their lifecycles and allowing 'Observer’s to unsubscribe (to stop receiving updates) when they’re destroyed. In other words, 'Subscription' is what allows you to manage memory and prevent crashes due to leaks.", - "links": [] - }, - "7rbsp1o5bzIJP11BRIoeG": { - "title": "RxKotlin", - "description": "`RxKotlin` is a lightweight library that adds convenient extension functions to `RxJava`. It allows developers to use RxJava with Kotlin in a more idiomatic way, thus making code more readable and understandable. While `RxJava` is a Java-based implementation of Reactive Extensions, `RxKotlin` is essentially a wrapper that includes extension functions and other constructs to take full advantage of Kotlin's features, such as its syntactic simplicity and ease of use.", - "links": [] - }, + "description": "`Flow` in Android development is part of the Kotlin Coroutines library. It is a type that can emit multiple values sequentially, making it perfect for working with any data streams or any streams of events that aren't instantaneous. Like Observables, `Flow` is also based on the observer pattern, meaning it can emit values and these emissions can be observed and reacted to. However, `Flow` comes with built-in back pressure handling and the ability to transform, filter, or combine these flows in a sequence. Along with Coroutines, `Flow` encourages a more predictable and simplified concurrency design without callback hell problem.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Flow", + "url": "https://kotlinlang.org/docs/flow.html", + "type": "article" + }, + { + "title": "Flow: Coroutines", + "url": "https://kotlinlang.org/docs/flow-coroutines.html", + "type": "article" + } + ] + }, + "xk0vnWr7uESdzYRxwFjoK": { + "title": "RxJava", + "description": "RxJava, standing for Reactive Extensions for the JVM, is a library in the Java and Android ecosystem that allows developers to write asynchronous, event-based programs. It is developed according to reactive programming principles and it supports multi-threading operations. One can create data streams from just about anything - variables, data structures, inputs, etc. and these streams could be used with functional programming methods to process the data.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "RxJava on GitHub", + "url": "https://github.com/ReactiveX/RxJava", + "type": "opensource" + } + ] + }, + "7rbsp1o5bzIJP11BRIoeG": { + "title": "RxKotlin", + "description": "`RxKotlin` is a lightweight library that adds convenient extension functions to `RxJava`. It allows developers to use RxJava with Kotlin in a more idiomatic way, thus making code more readable and understandable. While `RxJava` is a Java-based implementation of Reactive Extensions, `RxKotlin` is essentially a wrapper that includes extension functions and other constructs to take full advantage of Kotlin's features, such as its syntactic simplicity and ease of use.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "RxKotlin", + "url": "https://github.com/ReactiveX/RxKotlin", + "type": "opensource" + } + ] + }, "TiokceMGU9caqiR0lbFYL": { "title": "LiveData", - "description": "`LiveData` is a data holder class that can be observed within a given lifecycle. This means that an `Observer` can be added in a pair with a `LifecycleOwner`, and this observer will be notified about modifications of the `LiveData` object only if the associated `LifecycleOwner` is in active state. `LiveData` respects the lifecycle state of app components, such as activities, fragments, or services, and it only updates app-component observers that are in an active lifecycle state. Furthermore, `LiveData` automatically removes the observers when their associated `LifecycleOwner` moves to the `Destroyed` state. This combination of `LiveData` and `LifecycleOwner` helps you to manage appropriate and efficient updates because `LiveData` takes into consideration the lifecycle state of your app components.", - "links": [] + "description": "`LiveData` is a data holder class that can be observed within a given lifecycle. This means that an `Observer` can be added in a pair with a `LifecycleOwner`, and this observer will be notified about modifications of the `LiveData` object only if the associated `LifecycleOwner` is in active state. `LiveData` respects the lifecycle state of app components, such as activities, fragments, or services, and it only updates app-component observers that are in an active lifecycle state. Furthermore, `LiveData` automatically removes the observers when their associated `LifecycleOwner` moves to the `Destroyed` state. This combination of `LiveData` and `LifecycleOwner` helps you to manage appropriate and efficient updates because `LiveData` takes into consideration the lifecycle state of your app components.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "LiveData", + "url": "https://developer.android.com/topic/libraries/architecture/livedata", + "type": "article" + } + ] }, "qtXM9K7wyjOFuEMlZrB3C": { "title": "Dependency Injection", - "description": "`Dependency Injection` is a technique where an object does not need to create its own dependencies; instead, dependencies are provided (or injected) at runtime. This technique is highly beneficial in Android Development. It helps in creating loosely coupled and easily testable code. For example, the `Retrofit` instance that your application requires to make network calls can be created somewhere else and can be injected whenever required using libraries like `Dagger`, `Koin` or `Hilt`. The `ViewModel` instances can also be injected rather than being created in the required classes directly. Through dependency injection, plugins ensure the code becomes easier to change, understand, and maintain, hence, improving the quality of the code.", - "links": [] + "description": "`Dependency Injection` is a technique where an object does not need to create its own dependencies; instead, dependencies are provided (or injected) at runtime. This technique is highly beneficial in Android Development. It helps in creating loosely coupled and easily testable code. For example, the `Retrofit` instance that your application requires to make network calls can be created somewhere else and can be injected whenever required using libraries like `Dagger`, `Koin` or `Hilt`. The `ViewModel` instances can also be injected rather than being created in the required classes directly. Through dependency injection, plugins ensure the code becomes easier to change, understand, and maintain, hence, improving the quality of the code.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Dependency Injection", + "url": "https://developer.android.com/training/dependency-injection", + "type": "article" + } + ] }, "CK7Ce632fdTgxeFsRUVvd": { "title": "Dagger", - "description": "[Dagger](https://dagger.dev/) is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation of an earlier version created by Square that's focused on simplicity and speed. Dagger's primary focus is on compile-time analysis of dependencies, code simplicity, and clarity. It uses annotations to define dependencies, thus aiding in easy readability and understanding of the code. Dagger also eliminates the use of reflection to inject dependencies, thus boosting performance. It offers custom scopes to control the lifespan of instances and ensures that dependencies are Singleton across the entire lifespan of certain scopes.", - "links": [] + "description": "Dagger is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation of an earlier version created by Square that's focused on simplicity and speed. Dagger's primary focus is on compile-time analysis of dependencies, code simplicity, and clarity. It uses annotations to define dependencies, thus aiding in easy readability and understanding of the code. Dagger also eliminates the use of reflection to inject dependencies, thus boosting performance. It offers custom scopes to control the lifespan of instances and ensures that dependencies are Singleton across the entire lifespan of certain scopes.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Dagger", + "url": "https://dagger.dev/", + "type": "article" + } + ] }, "UMqZ-jmXKDXKuu8bzqDH_": { "title": "Koin", - "description": "[Koin](https://insert-koin.io) is a lightweight dependency injection framework developed specifically for Kotlin developers. It uses functional resolution only - no proxy, no code generation, no reflection, and offers simplicity by leveraging Kotlin's language features. While Koin is not related to the Android platform, it provides specific extensions enabling an efficient integration into your Android applications, including [Android Architecture Components](https://developer.android.com/topic/libraries/architecture/index.html) and [Kotlin Coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html), amongst others.", - "links": [] + "description": "Koin is a lightweight dependency injection framework developed specifically for Kotlin developers. It uses functional resolution only - no proxy, no code generation, no reflection, and offers simplicity by leveraging Kotlin's language features. While Koin is not related to the Android platform, it provides specific extensions enabling an efficient integration into your Android applications, including Android Architecture Components and Kotlin Coroutines amongst others.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Koin", + "url": "https://insert-koin.io", + "type": "article" + }, + { + "title": "Android Architecture Components", + "url": "https://developer.android.com/topic/libraries/architecture/index.html", + "type": "article" + }, + { + "title": "@officialKotlin Coroutines", + "url": "https://kotlinlang.org/docs/reference/coroutines-overview.html", + "type": "article" + } + ] }, "ooo_k2k_vUBR_jQ7Ke6Et": { "title": "Hilt", - "description": "Hilt is a dependency injection library for Android that reduces the boilerplate code that you would normally need to write when setting up manual dependency injection in your project. It is based on the Dagger library, but it simplifies the implementation process and streamlines the use of Dagger in Android apps. To set it up, you must annotate your Android classes and Hilt will automatically generate and provide the necessary dependencies for you. Moreover, Hilt provides predefined set of components tied to the Android lifecycle which helps to handle scoped instances.", - "links": [] + "description": "Hilt is a dependency injection library for Android that reduces the boilerplate code that you would normally need to write when setting up manual dependency injection in your project. It is based on the Dagger library, but it simplifies the implementation process and streamlines the use of Dagger in Android apps. To set it up, you must annotate your Android classes and Hilt will automatically generate and provide the necessary dependencies for you.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Hilt", + "url": "https://developer.android.com/training/dependency-injection/hilt-android", + "type": "article" + } + ] }, "dc7k50PjCYZcElHhCk66p": { "title": "Kodein", - "description": "`Kodein` is one of the recommended dependency injection frameworks suitable for Android development. This open-source Kotlin library simplifies the DI process by allowing developers to bind various types of dependencies, such as singleton, factory, or provider bindings into containers or `Kodein` modules. It promotes dependency declaration where used, instead of prior declaration. It follows a \"Define in Use\" principle that enables easy-to-use, easy-to-debug and very idiomatic Kotlin code. It's also worth noting that `Kodein` works hand in hand with Android's lifecycle and provides easy integration with popular libraries such as Android Architecture Components, leveraging their functionality.", - "links": [] + "description": "`Kodein` is one of the recommended dependency injection frameworks suitable for Android development. This open-source Kotlin library simplifies the DI process by allowing developers to bind various types of dependencies, such as singleton, factory, or provider bindings into containers or `Kodein` modules. It promotes dependency declaration where used, instead of prior declaration. It follows a \"Define in Use\" principle that enables easy-to-use, easy-to-debug and very idiomatic Kotlin code. It's also worth noting that `Kodein` works hand in hand with Android's lifecycle and provides easy integration with popular libraries such as Android Architecture Components, leveraging their functionality.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Kodein", + "url": "https://insert-kodein.io/", + "type": "article" + } + ] }, "0fNQWRxst8xRstIfPaPO6": { "title": "Storage", - "description": "On Android devices, storage refers to where your data such as apps, photos, videos, and music are saved. It can be categorized into two types: internal and external storage. Internal Storage is where data is stored that's tied directly to your app. This data is private by default and not accessible by other apps. External Storage, on the other hand, is a shared space where all apps can read and write data. It can be further subcategorized into Public and Private directories. Public directories are shared among all apps while private directories are specific to your app but can be accessed by other apps if they have the appropriate permissions. To control the access to these storage types, Android provides a file-based and a Scoped Storage framework. The latter limits apps' access to external storage and gives users more control over their data.", - "links": [] + "description": "On Android devices, storage refers to where your data such as apps, photos, videos, and music are saved. It can be categorized into two types: internal and external storage. Internal Storage is where data is stored that's tied directly to your app. This data is private by default and not accessible by other apps. External Storage, on the other hand, is a shared space where all apps can read and write data. It can be further sub-categorized into Public and Private directories. Public directories are shared among all apps while private directories are specific to your app but can be accessed by other apps if they have the appropriate permissions.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Storage", + "url": "https://developer.android.com/guide/topics/data/data-storage", + "type": "article" + } + ] }, "PKql1HY0PLMfp50FRELXL": { "title": "Shared Preferences", - "description": "Shared Preferences in Android are used to store data in key-value pairs. It works similar to a tiny database where you can save small pieces of data such as settings or the state of an application. When data is saved to Shared Preferences, it persists across user sessions, even if your application is killed or gets deleted. Data in Shared Preferences is not typically used for large amounts of data. To perform actions such as saving, retrieving, or editing data in Shared Preferences, you use an instance of `SharedPreferences.Editor`.", - "links": [] + "description": "Shared Preferences in Android are used to store data in key-value pairs. It works similar to a tiny database where you can save small pieces of data such as settings or the state of an application. When data is saved to Shared Preferences, it persists across user sessions, even if your application is killed or gets deleted. Data in Shared Preferences is not typically used for large amounts of data. To perform actions such as saving, retrieving, or editing data in Shared Preferences, you use an instance of `SharedPreferences.Editor`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Shared Preferences Documentation", + "url": "https://developer.android.com/training/data-storage/shared-preferences", + "type": "article" + }, + { + "title": "SharedPreferences in Android", + "url": "https://www.youtube.com/watch?v=rJ3uwqko9Ew", + "type": "video" + } + ] }, "GWq3s1iTxQOp1BstHscJ9": { "title": "DataStore", - "description": "`DataStore` is a new and improved data storage solution by Android, meant to supersede `SharedPreferences`. It is important to understand that it comes in two different implementations: `Preferences DataStore` and `Proto DataStore`. `Preferences DataStore` uses key-value pairs similar to `SharedPreferences`, but it's more robust and handles runtime exceptions more efficiently. On the other hand, `Proto DataStore` uses custom data types to provide type safety. It lets you leverage the power of Protocol Buffers, a language-neutral, platform-neutral mechanism for serializing structured data, as the data storage format. Operating on data in `DataStore` is transactional, meaning that if an error occurs during an operation, all changes are rolled back, so the data remains in a consistent state.", - "links": [] + "description": "`DataStore` is a new and improved data storage solution by Android, meant to supersede `SharedPreferences`. It is important to understand that it comes in two different implementations: `Preferences DataStore` and `Proto DataStore`. `Preferences DataStore` uses key-value pairs similar to `SharedPreferences`, but it's more robust and handles runtime exceptions more efficiently. On the other hand, `Proto DataStore` uses custom data types to provide type safety. It lets you leverage the power of Protocol Buffers, a language-neutral, platform-neutral mechanism for serializing structured data, as the data storage format. Operating on data in `DataStore` is transactional, meaning that if an error occurs during an operation, all changes are rolled back, so the data remains in a consistent state.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Documentation", + "url": "https://developer.android.com/topic/libraries/architecture/datastore", + "type": "article" + }, + { + "title": "Introduction to DataStore", + "url": "https://www.youtube.com/watch?v=9ws-cJzlJkU&list=PLWz5rJ2EKKc8to3Ere-ePuco69yBUmQ9C", + "type": "video" + } + ] }, "Bfg4So5RlI09zFNcburJd": { "title": "Room Database", - "description": "\"Room\" is a persistence library introduced by Google that provides an abstraction layer over SQLite to help with robust database access while harnessing the full power of SQLite. Room supports the creation of databases and defines queries in compile-time-checked SQL strings. These databases belong to the data classes that you create representing your app's data. Room comprises three main components: **Database**, a container that holds your app's data tables; **Entity**, representing a table within the database; and **DAO (Data Access Object)**, containing SQL query methods to interact with the database.", - "links": [] + "description": "\"Room\" is a persistence library introduced by Google that provides an abstraction layer over SQLite to help with robust database access while harnessing the full power of SQLite. Room supports the creation of databases and defines queries in compile-time-checked SQL strings. These databases belong to the data classes that you create representing your app's data. Room comprises three main components: **Database**, a container that holds your app's data tables; **Entity**, representing a table within the database; and **DAO (Data Access Object)**, containing SQL query methods to interact with the database.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Room Database", + "url": "https://developer.android.com/training/data-storage/room", + "type": "article" + }, + { + "title": "The Full Beginner's Guide for Room in Android", + "url": "https://www.youtube.com/watch?v=bOd3wO0uFr8&t=10s", + "type": "video" + } + ] }, "A4kdaj6AFueUgPI7hwKi5": { "title": "File System", - "description": "The Android operating system uses a specific File System structure to store and manage files. It’s primarily based on the Linux File system, with some specific Android features. The File System includes several key directories that are used for specific purposes. For instance, directories such as `/system` hold system apps and firmware, while `/data` contains user data, settings and installed applications, and `/sdcard` usually represents an internal or external SD card for additional storage. It's worth mentioning directories like `/proc`, `/dev`, and `/sys` which are virtual file systems and house important system files. As an Android developer, understanding these directories can help you interact with Android's file system more effectively. Note that access to some of these directories may be restricted depending on system permissions.", - "links": [] + "description": "The Android operating system uses a specific File System structure to store and manage files. It’s primarily based on the Linux File system, with some specific Android features. The File System includes several key directories that are used for specific purposes. For instance, directories such as `/system` hold system apps and firmware, while `/data` contains user data, settings and installed applications, and `/sdcard` usually represents an internal or external SD card for additional storage. It's worth mentioning directories like `/proc`, `/dev`, and `/sys` which are virtual file systems and house important system files. As an Android developer, understanding these directories can help you interact with Android's file system more effectively. Note that access to some of these directories may be restricted depending on system permissions.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Android File System", + "url": "https://developer.android.com/training/data-storage/", + "type": "article" + }, + { + "title": "Android File System", + "url": "https://www.androidauthority.com/android-file-system-1010817/", + "type": "article" + } + ] }, "Yb6aKJMMCxU1QVltWg3Dr": { "title": "Network", - "description": "In Android, the `Network` component offers vital capabilities that enable communication and interaction among users, between users and remote servers, and between users and cloud services. Android provides a variety of APIs and services to interact with networks. The primary APIs are the `ConnectivityManager`, `WifiManager`, `TelephonyManager`, and `BluetoothManager` APIs, among others. ConnectivityManager, for example, can tell you about network connectivity changes. The **Network** component also involves tools for network monitoring and testing, which can be useful for optimizing app performance and dealing with connectivity issues. Be aware, some network operations are subject to system imposed restrictions and require specific permissions.", - "links": [] + "description": "In Android, the `Network` component offers vital capabilities that enable communication and interaction among users, between users and remote servers, and between users and cloud services. Android provides a variety of APIs and services to interact with networks. The primary APIs are the `ConnectivityManager`, `WifiManager`, `TelephonyManager`, and `BluetoothManager` APIs, among others. ConnectivityManager, for example, can tell you about network connectivity changes.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Network", + "url": "https://developer.android.com/guide/topics/connectivity", + "type": "article" + }, + { + "title": "ConnectivityManager", + "url": "https://developer.android.com/reference/android/net/ConnectivityManager", + "type": "article" + }, + { + "title": "WifiManager", + "url": "https://developer.android.com/reference/android/net/wifi/WifiManager", + "type": "article" + } + ] }, "dDMRYiqrKyOBnRRQc8zsp": { "title": "Retro", - "description": "Retrofit is a type-safe HTTP client for Android and Java. It's designed to connect your application with an API or a back-end web service. Retrofit uses annotations to encode details about the API's operations and requests, such as the HTTP method (GET, POST, PUT, DELETE, HEAD) and the query parameters. The main advantage of Retrofit over other similar libraries is in its simplicity and intuitiveness, and it efficiently handles all network calls.\n\n Retrofit retrofit = new Retrofit.Builder()\n .baseUrl(\"https://api.example.com\")\n .addConverterFactory(GsonConverterFactory.create())\n .build();\n \n ExampleService service = retrofit.create(ExampleService.class);\n Call call = service.exampleCall();\n \n\nThe `baseUrl()` is your API base URL. The `addConverterFactory()` specifies a factory to use for serialization and deserialization. In the example above, the Gson library will handle the conversion of JSON data. The `build()` call finishes the builder and returns the retrofit instance. Finally, `create()` generates an implementation of the `ExampleService` interface.", - "links": [] + "description": "Retrofit is a type-safe HTTP client for Android. It's designed to connect your application with an API or a back-end web service. Retrofit uses annotations to encode details about the API's operations and requests, such as the HTTP method (`GET`, `POST`, `PUT`, `DELETE`, `HEAD`) and the query parameters. The main advantage of **Retrofit** over other similar libraries is in its simplicity and intuitiveness, and it efficiently handles all network calls.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Retrofit Documentation", + "url": "https://square.github.io/retrofit/", + "type": "article" + }, + { + "title": "Retrofit in Android Studio", + "url": "https://www.youtube.com/watch?v=KJSBsRKqNwU", + "type": "video" + } + ] }, "5pVuwOItAhUxxJX8ysAsn": { "title": "OkHttp", - "description": "`OkHttp` is an HTTP client that's extremely efficient, enabling several advanced features in Android app or other platforms that use Java. Developed by Square, it's built for high efficiency and capacity, simplifying many networking tasks, including connection pooling, response caching, and request retries. OkHttp allows seamless recovery from network issues, minimizing the loss of data. The library ensures fewer errors and higher quality of service by using the modern TLS encryption, extensible request and response models, and a fluent API for ease of use and integration.", - "links": [] + "description": "`OkHttp` is an HTTP client that's extremely efficient, enabling several advanced features in Android app or other platforms that use Java. Developed by Square, it's built for high efficiency and capacity, simplifying many networking tasks, including connection pooling, response caching, and request retries. OkHttp allows seamless recovery from network issues, minimizing the loss of data. The library ensures fewer errors and higher quality of service by using the modern TLS encryption, extensible request and response models, and a fluent API for ease of use and integration.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "OkHttp on GitHub", + "url": "https://github.com/square/okhttp", + "type": "opensource" + }, + { + "title": "OkHttp", + "url": "https://square.github.io/okhttp/", + "type": "article" + } + ] }, "ww0fTbdXwVr-QIOClU7ng": { "title": "Apollo-Android", - "description": "**Apollo Android** is a set of tools for using GraphQL with Android, made by the Apollo community developers. It's fully written in Kotlin and it was designed to seamlessly integrate with any Android app, making fetching data across network and handling data in the client-side a breeze. Apollo Android runs your queries and mutations and returns results as generated Kotlin types. It also normalizes your data and caches your results for further speed enhancements. It operates both on Android and Kotlin/JVM backend environment. It's also coroutines-first making handling concurrency easy and effective. To use Apollo Android, you'll set up the plugin, point it at your GraphQL schema, and write GraphQL queries.", - "links": [] + "description": "**Apollo Android** is a set of tools for using GraphQL with Android, made by the Apollo community developers. It's fully written in Kotlin and it was designed to seamlessly integrate with any Android app, making fetching data across network and handling data in the client-side a breeze. Apollo Android runs your queries and mutations and returns results as generated Kotlin types. It also normalizes your data and caches your results for further speed enhancements. It operates both on Android and Kotlin/JVM backend environment. It's also coroutines-first making handling concurrency easy and effective. To use Apollo Android, you'll set up the plugin, point it at your GraphQL schema, and write GraphQL queries.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "apollographql/apollo-kotlin - GraphQL for Android", + "url": "https://github.com/apollographql/apollo-kotlin", + "type": "opensource" + }, + { + "title": "Apollo Android", + "url": "https://www.apollographql.com/docs/kotlin/v2/", + "type": "article" + }, + { + "title": "Apollo Docs", + "url": "https://www.apollographql.com/docs/kotlin/", + "type": "article" + } + ] }, "cFYZ2C7yNnY6NHKUNP2Z4": { "title": "Asynchronism", - "description": "Asynchronism in Android is a practice that defines operations, which can run independently from the main operation without following the program's linear flow. The Android system uses threads to handle asynchronous processes. These threads function independently, ensuring that complex or time-consuming operations do not interfere with the user interface or other essential parts of the application. Android provides various tools for carrying out asynchronous tasks, such as `Handler`, `ThreadPoolExecutor`, `IntentService`, `AsyncTask`, and `Loader` etc. These tools provide ways to execute tasks on different threads and communicate the results back to the main thread.", - "links": [] + "description": "Asynchronism in Android is a practice that defines operations, which can run independently from the main operation without following the program's linear flow. The Android system uses threads to handle asynchronous processes. These threads function independently, ensuring that complex or time-consuming operations do not interfere with the user interface or other essential parts of the application. Android provides various tools for carrying out asynchronous tasks, such as `Handler`, `ThreadPoolExecutor`, `IntentService`, `AsyncTask`, and `Loader` etc. These tools provide ways to execute tasks on different threads and communicate the results back to the main thread.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Asynchronous Tasks", + "url": "https://developer.android.com/guide/background", + "type": "article" + }, + { + "title": "Asynchronous Task Execution", + "url": "https://medium.com/@cpvasani48/asynchronous-task-execution-in-android-a-guide-with-example-44732744f3b8", + "type": "article" + } + ] }, "i_cKmTnGAYw8xpHwZHjAd": { "title": "Coroutines", - "description": "In Android, `coroutines` refer to a concurrency design pattern that you can use on Android to simplify code that executes asynchronously. `Coroutines` provide a way to write asynchronous, non-blocking code in a natural, sequential manner. The fundamental building blocks of `coroutines` are `suspend` functions which are simply functions that can be paused and resumed at later times. They are the key to writing non-blocking asynchronous code and represent a single unit of asynchronous computation. This aspect of `coroutines` makes them useful for managing long-running tasks that might otherwise block the main thread and cause your application to become unresponsive.", - "links": [] + "description": "`Coroutines` refer to a concurrency design pattern that you can use on Android to simplify code that executes asynchronously. `Coroutines` provide a way to write asynchronous, non-blocking code in a natural, sequential manner. The fundamental building blocks of `coroutines` are `suspend` functions which are simply functions that can be paused and resumed at later times. They are the key to writing non-blocking asynchronous code and represent a single unit of asynchronous computation. This aspect of `coroutines` makes them useful for managing long-running tasks that might otherwise block the main thread and cause your application to become unresponsive.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Coroutines", + "url": "https://kotlinlang.org/docs/coroutines-overview.html", + "type": "article" + } + ] }, "BeGrA5BDBMZP1Jy7n-wl-": { "title": "Threads", - "description": "In Android, a `Thread` is a concurrent unit of execution. It has its own call stack, but can share its state with other threads in the same process, i.e., they can share the same memory area. They're primarily used in Android to perform operations in the background. One important aspect to note is that Android UI operations are not thread-safe, meaning they should always be done on the UI thread. Operations on `Threads` are typically managed through `Handler`, `Looper` and `MessageQueue` classes. Android also provides high-level constructs like `AsyncTask` and `Loader` for managing threads in relation to the UI.", - "links": [] + "description": "In Android, a `Thread` is a concurrent unit of execution. It has its own call stack, but can share its state with other threads in the same process, i.e., they can share the same memory area. They're primarily used in Android to perform operations in the background. One important aspect to note is that Android UI operations are not thread-safe, meaning they should always be done on the UI thread. Operations on `Threads` are typically managed through `Handler`, `Looper` and `MessageQueue` classes. Android also provides high-level constructs like `AsyncTask` and `Loader` for managing threads in relation to the UI.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Threads", + "url": "https://developer.android.com/guide/components/processes-and-threads", + "type": "article" + } + ] }, "zXsNEyRbb8UpEOAUv6FpY": { "title": "RxJava", - "description": "RxJava (Reactive Extensions for the JVM) is a powerful library for composing asynchronous and event-based programs using observable sequences in Java. If you are an Android developer, you might be familiar with callbacks and async tasks to perform long-running operations in the background. However, handling multiple async tasks and nested callbacks can produce code that's complicated to read and maintain. To alleviate such complexities, RxJava provides tools and methods to create, transform and chain Observable sequences in a clean and declarative manner. In other words, it provides a way to manage asynchronicity and concurrency in your code.", - "links": [] + "description": "RxJava (Reactive Extensions for the JVM) is a powerful library for composing asynchronous and event-based programs using observable sequences in Java. If you are an Android developer, you might be familiar with callbacks and async tasks to perform long-running operations in the background. However, handling multiple async tasks and nested callbacks can produce code that's complicated to read and maintain. To alleviate such complexities, RxJava provides tools and methods to create, transform and chain Observable sequences in a clean and declarative manner.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "RxJava on GitHub", + "url": "https://github.com/ReactiveX/RxJava", + "type": "opensource" + } + ] }, "4h37WBpYxRRyw9oH8ge7o": { "title": "RxKotlin", - "description": "`RxKotlin` is a lightweight language extension to Java for Android development, enabling Android apps to be built using Kotlin with Reactivex. It brings the power of reactive programming paradigm to Kotlin, extending its capabilities for processing asynchronous streams of data. It allows you to express static (e.g., already known) or dynamic (e.g., future unknown) data streams, and perform various operations on them easily. Key concepts of `RxKotlin` include Observables, Observers and Schedulers. Observables represent the data streams, Observers interact with the data stream, and Schedulers determine on which thread operations are performed. RxKotlin helps manage background tasks, handle asynchronous data streams, and implement complex UIs, among others. It is especially beneficial for mobile development where UI thread and background thread coordination is essential.", - "links": [] + "description": "`RxKotlin` is a lightweight language extension to Java for Android development, enabling Android apps to be built using Kotlin with Reactivex. It brings the power of reactive programming paradigm to Kotlin, extending its capabilities for processing asynchronous streams of data. It allows you to express static (e.g., already known) or dynamic (e.g., future unknown) data streams, and perform various operations on them easily. Key concepts of `RxKotlin` include Observables, Observers and Schedulers. Observables represent the data streams, Observers interact with the data stream, and Schedulers determine on which thread operations are performed. RxKotlin helps manage background tasks, handle asynchronous data streams, and implement complex UIs, among others.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "ReactiveX/RxKotlin - RxKotlin on GitHub", + "url": "https://github.com/ReactiveX/RxKotlin", + "type": "opensource" + } + ] }, "OAb_JD64uGm2tPoue7w6t": { "title": "WorkManager", - "description": "`WorkManager` is an Android library introduced by Google to execute tasks in a predictable and reliable manner. It's designed for tasks that require guaranteed execution, even if the app has been closed or the device restarts. It is backwards compatible up to API 14 and uses JobScheduler for API 23 and above, whilst using a combination of BroadcastReceiver + AlarmManager for APIs 14 and up. Regardless of the device API level, WorkManager works for all Android devices. Three types of work are supported by WorkManager - OneTimeWorkRequest, PeriodicWorkRequest, and DelayedWorkRequest. You can have constraints too for your work execution like work only when there's Internet or work only when the device is in idle state. It also supports work-chaining where you can create a chain of works to be performed in a specific order.", - "links": [] + "description": "`WorkManager` is an Android library introduced by Google to execute tasks in a predictable and reliable manner. It's designed for tasks that require guaranteed execution, even if the app has been closed or the device restarts. It is backwards compatible up to API 14 and uses JobScheduler for API 23 and above, whilst using a combination of BroadcastReceiver + AlarmManager for APIs 14 and up. Regardless of the device API level, WorkManager works for all Android devices. Three types of work are supported by WorkManager - OneTimeWorkRequest, PeriodicWorkRequest, and DelayedWorkRequest.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "WorkManager", + "url": "https://developer.android.com/topic/libraries/architecture/workmanager", + "type": "article" + } + ] }, "ZEdn2yy-IwHN3kOYr2ZbC": { "title": "Common Services", - "description": "In Android, \"Common Services\" are functional units or components provided by the Android system for use by developers. These services include things such as Location Services (used to determine the device's geographical location), Notification Services (handles the display and management of user notifications), and Sensor Services (interacts with hardware sensors). Other common services are Network and Connectivity Services, Account Manager, and Data Storage Services among others. They simplify the development process by handling complex functionalities behind the scenes, allowing developers to focus on the application's specific needs.", - "links": [] + "description": "Common Services are functional units or components provided by the Android system for use by developers. These services include things such as Location Services (used to determine the device's geographical location), Notification Services (handles the display and management of user notifications), and Sensor Services (interacts with hardware sensors). Other common services are Network and Connectivity Services, Account Manager, and Data Storage Services among others. They simplify the development process by handling complex functionalities behind the scenes, allowing developers to focus on the application's specific needs.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Common Services", + "url": "https://developer.android.com/guide/components/services", + "type": "article" + } + ] }, "Xv0es_z64vh-QzivMeAT3": { "title": "Authentication", - "description": "Firebase Authentication in Android provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users to your app. It supports authentication using passwords, popular federated identity providers like Google, Facebook and Twitter, and more. Firebase also facilitates integration of functionality to sign in, sign up, and reset password. Moreover, it can be used to secure your database by implementing role-based access to data and to provide personalized experience according to the user's unique identity.\n\nFirebase Authentication offers two methods to authenticate. These are using an `email/password` login provided by Firebase Authentication or a `federated identity provider` like Google or Facebook. It also covers token-based authentication by creating custom tokens or verifying ID tokens. In addition to this, Firebase Authentication works with Firebase's client SDKs for practical use and works for long-running server processes for some of your users.\n\nFirebase Authentication provides a full suite of capabilities even beyond authentication to make your life easier, which includes Security Rules for Cloud Storage and Cloud Firestore, Firebase Dynamic Links, and Firebase Invites.\n\nRemember to always keep your development environment and Firebase console synced for smooth development operations. Any changes to the authentication method in the Firebase console should be reflected in your app and vice versa.", - "links": [] + "description": "Firebase Authentication in Android provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users to your app. It supports authentication using passwords, popular federated identity providers like Google, Facebook and Twitter, and more. Firebase also facilitates integration of functionality to sign in, sign up, and reset password. Moreover, it can be used to secure your database by implementing role-based access to data and to provide personalized experience according to the user's unique identity.\n\nFirebase Authentication offers two methods to authenticate. These are using an `email/password` login provided by Firebase Authentication or a `federated identity provider` like Google or Facebook. It also covers token-based authentication by creating custom tokens or verifying ID tokens. In addition to this, Firebase Authentication works with Firebase's client SDKs for practical use and works for long-running server processes for some of your users.\n\nFirebase Authentication provides a full suite of capabilities even beyond authentication to make your life easier, which includes Security Rules for Cloud Storage and Cloud Firestore, Firebase Dynamic Links, and Firebase Invites.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Firebase Authentication", + "url": "https://firebase.google.com/docs/auth", + "type": "article" + }, + { + "title": "Firebase Authentication: Android", + "url": "https://firebase.google.com/docs/auth/android/start", + "type": "article" + } + ] }, "xB4evbD07n1VrHOIpowV4": { "title": "Crashlytics", "description": "`Crashlytics` is a lightweight, real-time crash reporter that helps you track, prioritize, and fix stability issues that dismantle your app's quality. It delivers fast and precise information about crashes and helps you gain insights into your app's performance so you can pinpoint the exact line of code your app crashed on. Crashlytics offers a comprehensive suite of features like crash analysis, issue aggregation, and tracking user activities that led to a crash. This tool is now a part of Google's `Firebase` platform but can also be used independently.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Documentation", + "title": "Crashlytics Documentation", "url": "https://firebase.google.com/docs/crashlytics/get-started?platform=android", "type": "article" }, @@ -629,12 +1177,12 @@ "description": "Firebase Remote Config is a cloud service offered by Firebase. It lets you change the behavior and appearance of your app without requiring a new app release. By using Firebase Remote config, you can customize your app for different user segments, manage the core aspects of your app by modifying parameters externally, and conduct A/B tests to improve your app. It works efficiently by using default values that control the behavior and appearance of your app. When your app needs configuration information, it makes a request to the Firebase Remote Config server. If the server has updated values, these values replace the default ones, hence modifying the app's behavior or appearance according to your needs.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Documentation", + "title": "Remote Config", "url": "https://firebase.google.com/docs/remote-config/get-started?platform=android", "type": "article" }, { - "title": "Firebase: Remote config", + "title": "Getting Started with Remote Config", "url": "https://www.youtube.com/watch?v=pcnnbjAAIkI", "type": "video" } @@ -658,102 +1206,272 @@ }, "3EEfKAd-ppIQpdQSEhbA1": { "title": "FireStore", - "description": "Firestore, often referred to as Firebase Firestore or Cloud Firestore, is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud. Firestore comes with features like expressive querying, real-time updates, and automatic multi-region data replication. It is designed to offer seamless integration with other Firebase and Google Cloud products. It provides a cloud-based NoSQL database, which means the data is stored as collections of documents. Each document, in turn, contains a set of key-value pairs. Firestore ensures durable networking, so data syncs across client apps in real-time, even when the device is offline, making it easier for you to work with distributed data that can be kept in sync across various clients.", - "links": [] + "description": "Firestore, often referred to as Firebase Firestore or Cloud Firestore, is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud. Firestore comes with features like expressive querying, real-time updates, and automatic multi-region data replication. It is designed to offer seamless integration with other Firebase and Google Cloud products. It provides a cloud-based NoSQL database, which means the data is stored as collections of documents. Each document, in turn, contains a set of key-value pairs. Firestore ensures durable networking, so data syncs across client apps in real-time, even when the device is offline, making it easier for you to work with distributed data that can be kept in sync across various clients.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Firestore", + "url": "https://firebase.google.com/docs/firestore", + "type": "article" + } + ] }, "D4ZXQOKJkyFYNZIy-MJ9Y": { "title": "Google Admob", - "description": "Google AdMob is a mobile advertising platform designed for app developers to monetize their apps by displaying ads from over 1 million Google advertisers. AdMob supports a wide range of ad formats, such as banner ads, interstitial ads, video ads, and more. It offers a powerful mediator that enables you to display ads from multiple sources, which includes the Google Mobile Ads SDK, third-party ad networks, and house ad campaigns. Furthermore, AdMob provides analytical tools to better understand your users and maximize ad revenue.", - "links": [] + "description": "Google AdMob is a mobile advertising platform designed for app developers to monetize their apps by displaying ads from over 1 million Google advertisers. AdMob supports a wide range of ad formats, such as banner ads, interstitial ads, video ads, and more. It offers a powerful mediator that enables you to display ads from multiple sources, which includes the Google Mobile Ads SDK, third-party ad networks, and house ad campaigns. Furthermore, AdMob provides analytical tools to better understand your users and maximize ad revenue.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Google AdMob", + "url": "https://admob.google.com/home/", + "type": "article" + }, + { + "title": "Google AdMob Documentation", + "url": "https://admob.google.com/home/get-started/", + "type": "article" + } + ] }, "m5rumeynEbS8T27pelr0-": { "title": "Google Play Services", - "description": "_Google Play Services_ is a proprietary background service and API package for Android devices from Google. Operated by Google, the service provides core functionalities like authentication for Google services, synchronized contacts, access to all the latest user privacy settings, and higher quality, lower-powered location-based services. It also speeds up offline searches, provides more immersive maps, and improves gaming experiences. Google Play Services play a crucial role in the operation of various other applications, including those not developed by Google. Moreover, it improves the overall Android experience by speeding up offline searches, providing more detailed maps, enhancing gaming experiences, and more.", - "links": [] + "description": "_Google Play Services_ is a proprietary background service and API package for Android devices from Google. Operated by Google, the service provides core functionalities like authentication for Google services, synchronized contacts, access to all the latest user privacy settings, and higher quality, lower-powered location-based services. It also speeds up offline searches, provides more immersive maps, and improves gaming experiences. Google Play Services play a crucial role in the operation of various other applications, including those not developed by Google. Moreover, it improves the overall Android experience by speeding up offline searches, providing more detailed maps, enhancing gaming experiences, and more.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Google Play Services", + "url": "https://developer.android.com/google/play-services", + "type": "article" + }, + { + "title": "Google Play Services Documentation", + "url": "https://developer.android.com/google/play-services/overview.html", + "type": "article" + } + ] }, "S5FVF9rMgVSSDKXJW2GYb": { "title": "Google Maps", - "description": "Google Maps is a crucial service on Android, offering powerful, user-friendly mapping technology and local business information. Google Maps features include street maps, satellite imagery, 360° panoramic views of streets (Street View), real-time traffic conditions (Google Traffic), and route planning for traveling by foot, car, bicycle and air, or public transportation. The service's interface includes a function to overlay various layers such as traffic density, public transit lines, and cycling paths. Google Maps for Android also provides an API, which allows developers to interface with and control certain aspects of the Google Maps service in their applications. This capability subjects to certain usage limits and requirements set by Google.", - "links": [] + "description": "Google Maps is a crucial service on Android, offering powerful, user-friendly mapping technology and local business information. Google Maps features include street maps, satellite imagery, 360° panoramic views of streets (Street View), real-time traffic conditions (Google Traffic), and route planning for traveling by foot, car, bicycle and air, or public transportation. The service's interface includes a function to overlay various layers such as traffic density, public transit lines, and cycling paths. Google Maps for Android also provides an API, which allows developers to interface with and control certain aspects of the Google Maps service in their applications. This capability subjects to certain usage limits and requirements set by Google.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Google Maps", + "url": "https://developers.google.com/maps/documentation/android-sdk/overview", + "type": "article" + }, + { + "title": "Google Maps Documentation", + "url": "https://developers.google.com/maps/documentation/android-sdk/intro", + "type": "article" + } + ] }, "77F9F3oI5CPgwgM_hxWfa": { "title": "Linting", - "description": "`Linting` in Android is a tool that analyzes the source code of your application to identify potential errors, bugs, stylistic errors, and suspicious constructs. The term Linting came from a Unix utility that examined C language source code. In Android, it not only checks for potential Java issues but also for XML layout files and provides alerts for issues it encounters regarding usability, performance, and accessibility. For instance, it may scrutinize a draft of your AndroidManifest.xml file for potential duplication of elements or other anomalies that would cause the app to crash.", - "links": [] + "description": "`Linting` in Android is a tool that analyzes the source code of your application to identify potential errors, bugs, stylistic errors, and suspicious constructs. The term Linting came from a Unix utility that examined C language source code. In Android, it not only checks for potential Java issues but also for XML layout files and provides alerts for issues it encounters regarding usability, performance, and accessibility. For instance, it may scrutinize a draft of your AndroidManifest.xml file for potential duplication of elements or other anomalies that would cause the app to crash.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Linting", + "url": "https://developer.android.com/studio/write/lint", + "type": "article" + } + ] }, "zMbXQH17Q52opdbitPzj7": { "title": "Ktlint", - "description": "`ktlint` is a static code analysis tool. It enforces a highly consistent style and adheres extensively to the official Kotlin coding conventions. `ktlint` does not have any configuration options (by design). The only exceptions are disabling specific rule(s) and specifying indentation size. `ktlint` can check, as well as automatically fix your code. Its main goal is to bring unified code style to your project. It works on the command line as well, so it can be hooked up into your continuous integration pipeline. It also has Ant, Gradle and Maven wrappers. You can use Ktlint on any Android/Kotlin project, as long as you have Gradle or Maven installed.", - "links": [] + "description": "`ktlint` is a static code analysis tool. It enforces a highly consistent style and adheres extensively to the official Kotlin coding conventions. `ktlint` does not have any configuration options (by design). The only exceptions are disabling specific rule(s) and specifying indentation size. `ktlint` can check, as well as automatically fix your code. Its main goal is to bring unified code style to your project. It works on the command line as well, so it can be hooked up into your continuous integration pipeline. It also has Ant, Gradle and Maven wrappers. You can use Ktlint on any Android/Kotlin project, as long as you have Gradle or Maven installed.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Ktlint: Static Code Analysis for Kotlin", + "url": "https://github.com/pinterest/ktlint", + "type": "opensource" + }, + { + "title": "Ktlint", + "url": "https://ktlint.github.io/", + "type": "article" + } + ] }, "RUvuCp_JK5MQQT13SSHUV": { "title": "Detekt", - "description": "`Detekt` is a static code analysis tool for the Kotlin programming language. It operates on the abstract syntax tree provided by the Kotlin compiler and can run in the command line or as a task in your Gradle build script. Detekt provides complexity reports that can be used to identify overly complex code and help simplify it. It also checks for a variety of potential bugs and code smells, including issues with formatting, naming conventions, exception handling, and more. Moreover, Detekt is highly configurable, allowing you to enable, disable, or modify the behavior of its checks to suit your project's needs.", - "links": [] + "description": "`Detekt` is a static code analysis tool for the Kotlin programming language. It operates on the abstract syntax tree provided by the Kotlin compiler and can run in the command line or as a task in your Gradle build script. Detekt provides complexity reports that can be used to identify overly complex code and help simplify it. It also checks for a variety of potential bugs and code smells, including issues with formatting, naming conventions, exception handling, and more. Moreover, Detekt is highly configurable, allowing you to enable, disable, or modify the behavior of its checks to suit your project's needs.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Detekt: Static Code Analysis for Kotlin", + "url": "https://github.com/detekt/detekt", + "type": "opensource" + }, + { + "title": "Detekt", + "url": "https://detekt.dev/", + "type": "article" + } + ] }, "6KbSUAoT_jTudFoIbwMpA": { "title": "Debugging", - "description": "\"Debugging\" is a critical step in the app development process. In Android development, it includes identifying and fixing errors, or bugs, in your code. You can debug Android apps using several tools and techniques. For example, Android Studio, the primary integrated development environment (IDE) for Android, comes with a built-in debugging tool, the Android Debug Bridge (ADB). This command-line tool allows you to communicate your device and perform various actions like installing and debugging apps. Android Studio also supports step-by-step debugging, where you can set breakpoints in your code and inspect the application state at those points. Additionally, you can use log messages to monitor the behavior of your application, which is especially useful for understanding the state of your app during runtime. Remember that before debugging, you need to build your app in debug mode.", - "links": [] + "description": "Debugging is a critical step in the app development process. In Android development, it includes identifying and fixing errors, or bugs, in your code. You can debug Android apps using several tools and techniques. For example, Android Studio, the primary integrated development environment (IDE) for Android, comes with a built-in debugging tool, the Android Debug Bridge (ADB). This command-line tool allows you to communicate your device and perform various actions like installing and debugging apps. Android Studio also supports step-by-step debugging, where you can set breakpoints in your code and inspect the application state at those points.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Debugging", + "url": "https://developer.android.com/studio/debug", + "type": "article" + } + ] }, "VFOD4JrV8kZ2583G3oT95": { "title": "Timber", - "description": "`Timber` is a logging utility tool that has been specifically extended from the `Log` class of Android. It has been built to simplify the logging process while aiming to reduce the amount of boilerplate code the developer has to write. It was designed and is maintained by Jake Wharton, a renowned contributor in the Android Developer community. In Timber, each log message is directed to the next available logger, reducing the redundancy of manually assigning log tags. The simplicity of Timber is highlighted by its ability to log without defining any tag. Most importantly, Timber only logs messages in debug builds by default, avoiding potential data leaks in your production application.", - "links": [] + "description": "`Timber` is a logging utility tool that has been specifically extended from the `Log` class of Android. It has been built to simplify the logging process while aiming to reduce the amount of boilerplate code the developer has to write. It was designed and is maintained by Jake Wharton, a renowned contributor in the Android Developer community. In Timber, each log message is directed to the next available logger, reducing the redundancy of manually assigning log tags. The simplicity of Timber is highlighted by its ability to log without defining any tag. Most importantly, Timber only logs messages in debug builds by default, avoiding potential data leaks in your production application.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Timber on GitHub", + "url": "https://github.com/JakeWharton/timber", + "type": "opensource" + } + ] }, "3i4g9ZWgLxKb2UMgRJi4Q": { "title": "Leak Canary", - "description": "LeakCanary is a powerful open-source memory leak detection library for Android and Java. It is integrated into your app, and once you run your app, LeakCanary immediately starts watching for memory leaks and captures a memory dump if it detects one. After investigation, it will present a full stack trace to help you pinpoint the exact location of the memory leak. With the LeakCanary's user-friendly interface, you can then analyze the memory leak right in your app. The most recent version of LeakCanary also includes other improvements like automatic detection of leaks in Activity, Fragment, View, ViewModel, LiveData, etc.", - "links": [] + "description": "LeakCanary is a powerful open-source memory leak detection library for Android and Java. It is integrated into your app, and once you run your app, LeakCanary immediately starts watching for memory leaks and captures a memory dump if it detects one. After investigation, it will present a full stack trace to help you pinpoint the exact location of the memory leak. With the LeakCanary's user-friendly interface, you can then analyze the memory leak right in your app. The most recent version of LeakCanary also includes other improvements like automatic detection of leaks in Activity, Fragment, View, ViewModel, LiveData, etc.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "LeakCanary on GitHub", + "url": "https://github.com/square/leakcanary", + "type": "opensource" + }, + { + "title": "Leak Canary", + "url": "https://square.github.io/leakcanary/", + "type": "article" + } + ] }, "7RKN1FNtRE_BE6QeAQrKb": { "title": "Chucker", - "description": "`Chucker` is an open-source debugging library created for Android applications. It has been designed to be easy to use and convenient for developers. This library intercepts and records all HTTP requests and responses inside your application, which helps to visualize and share this information in an understandable and easy-to-read format. Using Chucker's distinct features, you can inspect all the HTTP and HTTPS traffic going in and out of your app directly. In addition, it provides other nifty features such as a user-friendly interface to view the server's raw response. It's like having a built-in network inspector in your debugging tool, enabling you to solve network-related issues more efficiently.", - "links": [] + "description": "`Chucker` is an open-source debugging library created for Android applications. It has been designed to be easy to use and convenient for developers. This library intercepts and records all HTTP requests and responses inside your application, which helps to visualize and share this information in an understandable and easy-to-read format. Using Chucker's distinct features, you can inspect all the HTTP and HTTPS traffic going in and out of your app directly. In addition, it provides other nifty features such as a user-friendly interface to view the server's raw response. It's like having a built-in network inspector in your debugging tool, enabling you to solve network-related issues more efficiently.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "ChuckerTeam/chucker - Chucker On GitHub", + "url": "https://github.com/ChuckerTeam/chucker", + "type": "opensource" + }, + { + "title": "Network Traffic Inspection with Chucker", + "url": "https://medium.com/tech-takeaways/simple-android-network-traffic-inspection-with-chucker-and-seismic-1e6162c51f64", + "type": "article" + } + ] }, "ACUJlDDR0jqEohsFzWEoQ": { "title": "Jetpack Benchmark", - "description": "Jetpack Benchmark is a library within the Android Jetpack Suite that allows developers to quickly and accurately measure the performance of their apps. This library can help measure CPU, memory, and IO performance of code in Android apps. Developers can define some specific code paths to be benchmarked by wrapping the code in `BenchmarkRule.measureRepeated {}`. In addition, it automatically takes care of warmup, measures your code performance, and outputs benchmarking results to the Android Studio's logcat.", - "links": [] + "description": "Jetpack Benchmark is a library within the Android Jetpack Suite that allows developers to quickly and accurately measure the performance of their apps. This library can help measure CPU, memory, and IO performance of code in Android apps. Developers can define some specific code paths to be benchmarked by wrapping the code in `BenchmarkRule.measureRepeated {}`. In addition, it automatically takes care of warmup, measures your code performance, and outputs benchmarking results to the Android Studio's logcat.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Jetpack Benchmark", + "url": "https://developer.android.com/studio/profile/benchmark", + "type": "article" + } + ] }, "ZOQm5OlzCA-h_yxywwDrW": { "title": "Testing", - "description": "_**Android Testing**_ is a crucial part of the app development process. It involves validating the functionality, performance, usability, and consistency of your app before deploying it to the Play Store. There are two types of testing methods notably used: **Unit testing** and **Instrumentation testing**. Unit testing, as the name suggests, tests each unit or segment of your code separately. It doesn't require Android dependencies and hence, runs faster. Instrumentation testing, on another hand, requires Android dependencies and is slower. Instrumentation testing tests the UIs, simulates user interactions and validates the navigation between different parts of your app. Android provides built-in testing frameworks like `JUnit` for unit testing and `Espresso` for Instrumentation testing. These can effectively test different parts of your app, assuring its robustness.", - "links": [] + "description": "**Testing** is a crucial part of the app development process. It involves validating the functionality, performance, usability, and consistency of your app before deploying it to the Play Store. There are two types of testing methods notably used: **Unit testing** and **Instrumentation Testing**. Unit testing, as the name suggests, tests each unit or segment of your code separately. It doesn't require Android dependencies and hence, runs faster. Instrumentation testing, on another hand, requires Android dependencies and is slower. Instrumentation testing tests the UIs, simulates user interactions and validates the navigation between different parts of your app. Android provides built-in testing frameworks like `JUnit` for unit testing and `Espresso` for Instrumentation testing.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Testing", + "url": "https://developer.android.com/training/testing", + "type": "article" + } + ] }, "-ONSC-ImGSELbamKmjIlH": { "title": "Espresso", - "description": "Espresso is a testing framework provided by Android to create UI tests for Android applications. It automatically synchronizes your test actions with the UI of your application, ensuring that your test will only proceed when the necessary UI activities have been completed. In Espresso, you can programmatically simulate user interactions like clicking buttons, typing text, or swiping screens, and then examine the UI's state to confirm it's as expected. Espresso tests can run on devices running Android 4.3 (API level 18) or higher. It's important to note that Espresso tests are written based on what the user can see on the screen.", - "links": [] + "description": "Espresso is a testing framework provided by Android to create UI tests for Android applications. It automatically synchronizes your test actions with the UI of your application, ensuring that your test will only proceed when the necessary UI activities have been completed. In Espresso, you can programmatically simulate user interactions like clicking buttons, typing text, or swiping screens, and then examine the UI's state to confirm it's as expected. Espresso tests can run on devices running Android 4.3 (API level 18) or higher.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Espresso", + "url": "https://developer.android.com/training/testing/espresso", + "type": "article" + } + ] }, "gvGAwjk_nhEgxzZ_c3f6b": { "title": "JUnit", - "description": "JUnit is a popular testing framework for Java programming. It forms the basis for many other testing libraries and tools in the Android ecosystem, making it important for any Android developer to become familiar with. The basic use of JUnit involves annotations such as `@Test`, indicating methods that represent a single test case. Other useful features include `@Before` and `@After` which allow for setup and teardown processes to be defined clearly. Another powerful feature in JUnit is the ability to create parameterized tests, effectively running the same test multiple times with different inputs.", - "links": [] + "description": "JUnit is a popular testing framework for Java programming. It forms the basis for many other testing libraries and tools in the Android ecosystem, making it important for any Android developer to become familiar with. The basic use of JUnit involves annotations such as `@Test`, indicating methods that represent a single test case. Other useful features include `@Before` and `@After` which allow for setup and teardown processes to be defined clearly. Another powerful feature in JUnit is the ability to create parameterized tests, effectively running the same test multiple times with different inputs.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Documentation", + "url": "https://developer.android.com/training/testing/local-tests", + "type": "article" + }, + { + "title": "Junit for android", + "url": "https://www.youtube.com/watch?v=jE1vQGVHaQA", + "type": "video" + } + ] }, "kc6buUsLAeZeUb4Tk0apM": { "title": "Distribution", - "description": "Distribution in Android refers to the methods and channels you can use to get your Android application into the hands of users. You can choose to distribute your app on the Google Play Store, which is the official app store for the Android operating system. This platform makes your app available to users in various countries around the world. Additionally, you can also opt to distribute your app through other third-party app stores or even your own website. Furthermore, Google provides a range of distribution options such as country targeting, device targeting, and staged rollouts, which can be customized according to your distribution strategy. Remember, when you submit your application for distribution, you must adhere to the respective app store's policy and content guidelines.", - "links": [] + "description": "Distribution in Android refers to the methods and channels you can use to get your Android application into the hands of users. You can choose to distribute your app on the Google Play Store, which is the official app store for the Android operating system. This platform makes your app available to users in various countries around the world. Additionally, you can also opt to distribute your app through other third-party app stores or even your own website. Furthermore, Google provides a range of distribution options such as country targeting, device targeting, and staged roll-outs, which can be customized according to your distribution strategy. Remember, when you submit your application for distribution, you must adhere to the respective app store's policy and content guidelines.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Google Play Developer Distribution", + "url": "https://developer.android.com/distribute", + "type": "article" + } + ] }, "T7q_quNaIAuGi96OdnDT1": { "title": "Firebase Distribution", - "description": "Firebase Distribution is a development tool within the Google Firebase suite that allows you to share pre-release versions of your Android apps with your development team. It enables you to distribute your app binaries to multiple testers and teams to get feedback before the app's official launch. Firebase Distribution supports both Android and iOS applications and works in tandem with other features, like Firebase Crashlytics, to effectively manage the testing and debugging aspects of your application's lifecycle.", - "links": [] + "description": "Firebase Distribution is a development tool within the Google Firebase suite that allows you to share pre-release versions of your Android apps with your development team. It enables you to distribute your app binaries to multiple testers and teams to get feedback before the app's official launch. Firebase Distribution supports both Android and iOS applications and works in tandem with other features, like Firebase Crashlytics, to effectively manage the testing and debugging aspects of your application's lifecycle.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Firebase Distribution", + "url": "https://firebase.google.com/docs/app-distribution", + "type": "article" + } + ] }, "HgRdgi2Hu4C8YLG5PXfoo": { "title": "Google Playstore", - "description": "**Google Play Store** is the official distribution channel for Android apps and other digital media content. It is a global online software store developed and operated by Google. Developers submit their applications to Google Play through the Play Console where Google Play's automated systems scan for potentially malicious code and content violations, before they are published on the Play Store. Users can then browse, download, and use these applications on their Android devices or via the web. Purchases, downloads, and user feedback can be tracked via the Google Play Console. Owners of Android devices can also configure automatic updates for the applications they have installed from the store. This platform supports multiple languages and multiple forms of payment methods, making it accessible and customer-friendly.", - "links": [] + "description": "**Google Play Store** is the official distribution channel for Android apps and other digital media content. It is a global online software store developed and operated by Google. Developers submit their applications to Google Play through the Play Console where Google Play's automated systems scan for potentially malicious code and content violations, before they are published on the Play Store. Users can then browse, download, and use these applications on their Android devices or via the web. Purchases, downloads, and user feedback can be tracked via the Google Play Console. Owners of Android devices can also configure automatic updates for the applications they have installed from the store. This platform supports multiple languages and multiple forms of payment methods, making it accessible and customer-friendly.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Google Play Store", + "url": "https://play.google.com/store", + "type": "article" + }, + { + "title": "Google Play Store Documentation", + "url": "https://developer.android.com/distribute/googleplay", + "type": "article" + } + ] }, "_FSlD_qTz5Xo0x3pB6sZI": { "title": "Signed APK", - "description": "A **Signed APK** is a version of your app that you prepare for distribution in the Play Store or other Android markets. When you sign your app using a private key, you authenticate your identity as the developer of the app. It is a required step by the Android system that ensures only updates to the APK that are from the original developer will be accepted. The Android system refuses to install an app if it's not signed appropriately, thereby protecting users from potential security risks. Please make sure that you keep your private key in a safe place for future updates to your app, losing it would imply that you cannot update your app anymore.", - "links": [] + "description": "A **Signed APK** is a version of your app that you prepare for distribution in the Play Store or other Android markets. When you sign your app using a private key, you authenticate your identity as the developer of the app. It is a required step by the Android system that ensures only updates to the APK that are from the original developer will be accepted. The Android system refuses to install an app if it's not signed appropriately, thereby protecting users from potential security risks.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Signing Your App", + "url": "https://developer.android.com/studio/publish/app-signing", + "type": "article" + } + ] }, "4_e76QafrB419S2INOeKd": { "title": "Interface & Navigation", - "description": "In Android development, the concepts of \"Interface\" and \"Navigation\" are crucial. The \"Interface\" often refers to the Graphical User Interface (GUI) that users interact with. This includes buttons, text fields, image views, scroll views and other UI elements that the users can interact with to perform certain tasks. Tools like XML and Material Designs are used for interface design in Android. Meanwhile, \"Navigation\" refers to the interactions that allow users to navigate across, into, and back out from the different pieces of content within the app, following a clear path, like a map. Android uses the Navigation Component, a suite of libraries, tools, and guidance on constructing in-app navigation. Understanding both these elements, Interface and Navigation, is fundamental to creating an intuitive and user-friendly Android application.", - "links": [] + "description": "In Android development, the concepts of \"Interface\" and \"Navigation\" are crucial. The \"Interface\" often refers to the Graphical User Interface (GUI) that users interact with. This includes buttons, text fields, image views, scroll views and other UI elements that the users can interact with to perform certain tasks. Tools like XML and Material Designs are used for interface design in Android.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Android Developers: Interface", + "url": "https://developer.android.com/guide/topics/ui/declaring-layout.html", + "type": "article" + }, + { + "title": "Android Developers: Navigation", + "url": "https://developer.android.com/guide/navigation", + "type": "article" + } + ] } } \ No newline at end of file diff --git a/public/roadmap-content/backend.json b/public/roadmap-content/backend.json index 31247e4e5..abf458105 100644 --- a/public/roadmap-content/backend.json +++ b/public/roadmap-content/backend.json @@ -1,13 +1,30 @@ { "gKTSe9yQFVbPVlLzWB0hC": { "title": "Search Engines", - "description": "Search engines like Elasticsearch are specialized tools designed for fast, scalable, and flexible searching and analyzing of large volumes of data. Elasticsearch is an open-source, distributed search and analytics engine built on Apache Lucene, offering full-text search capabilities, real-time indexing, and advanced querying features. Key characteristics of search engines like Elasticsearch include:\n\n1. **Full-Text Search**: Support for complex search queries, including relevance scoring and text analysis.\n2. **Distributed Architecture**: Scalability through horizontal distribution across multiple nodes or servers.\n3. **Real-Time Indexing**: Ability to index and search data almost instantaneously.\n4. **Powerful Query DSL**: A domain-specific language for constructing and executing sophisticated queries.\n5. **Analytics**: Capabilities for aggregating and analyzing data, often used for log and event data analysis.\n\nElasticsearch is commonly used in applications requiring advanced search functionality, such as search engines, data analytics platforms, and real-time monitoring systems.", - "links": [] + "description": "Search engines like Elasticsearch are specialized tools designed for fast, scalable, and flexible searching and analyzing of large volumes of data. Elasticsearch is an open-source, distributed search and analytics engine built on Apache Lucene, offering full-text search capabilities, real-time indexing, and advanced querying features. Key characteristics of search engines like Elasticsearch include:\n\n1. **Full-Text Search**: Support for complex search queries, including relevance scoring and text analysis.\n2. **Distributed Architecture**: Scalability through horizontal distribution across multiple nodes or servers.\n3. **Real-Time Indexing**: Ability to index and search data almost instantaneously.\n4. **Powerful Query DSL**: A domain-specific language for constructing and executing sophisticated queries.\n5. **Analytics**: Capabilities for aggregating and analyzing data, often used for log and event data analysis.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Elasticsearch", + "url": "https://www.elastic.co/elasticsearch/", + "type": "article" + } + ] }, "9Fpoor-Os_9lvrwu5Zjh-": { "title": "Design and Development Principles", - "description": "Design and Development Principles are fundamental guidelines that inform the creation of software systems. Key principles include:\n\n1. SOLID (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion)\n2. DRY (Don't Repeat Yourself)\n3. KISS (Keep It Simple, Stupid)\n4. YAGNI (You Aren't Gonna Need It)\n5. Separation of Concerns\n6. Modularity\n7. Encapsulation\n8. Composition over Inheritance\n9. Loose Coupling and High Cohesion\n10. Principle of Least Astonishment\n\nThese principles aim to create more maintainable, scalable, and robust software. They encourage clean code, promote reusability, reduce complexity, and enhance flexibility. While not rigid rules, these principles guide developers in making design decisions that lead to better software architecture and easier long-term maintenance. Applying these principles helps in creating systems that are easier to understand, modify, and extend over time.", - "links": [] + "description": "Design and Development Principles are fundamental guidelines that inform the creation of software systems. Key principles include:\n\n* SOLID (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion)\n* DRY (Don't Repeat Yourself)\n* KISS (Keep It Simple, Stupid)\n* YAGNI (You Aren't Gonna Need It)\n* Separation of Concerns\n* Modularity\n* Encapsulation\n* Composition over Inheritance\n* Loose Coupling and High Cohesion\n* Principle of Least Astonishment\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Design Principles - Wikipedia", + "url": "https://en.wikipedia.org/wiki/Design_principles", + "type": "article" + }, + { + "title": "Design Principles - Microsoft", + "url": "https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/index", + "type": "article" + } + ] }, "EwvLPSI6AlZ4TnNIJTZA4": { "title": "Learn about APIs", @@ -71,7 +88,7 @@ "description": "Rust is a systems programming language known for its focus on safety, performance, and concurrency. It provides fine-grained control over system resources while ensuring memory safety without needing a garbage collector. Rust's ownership model enforces strict rules on how data is accessed and managed, preventing common issues like null pointer dereferences and data races. Its strong type system and modern features, such as pattern matching and concurrency support, make it suitable for a wide range of applications, from low-level systems programming to high-performance web servers and tools. Rust is gaining traction in both industry and open source for its reliability and efficiency.\n\nVisit the following resources to learn more:", "links": [ { - "title": "The Rust Programming Language - online book", + "title": "The Rust Programming Language - Book", "url": "https://doc.rust-lang.org/book/", "type": "article" }, @@ -334,8 +351,8 @@ "type": "article" }, { - "title": "Learn Git with Tutorials, News and Tips - Atlassian", - "url": "https://www.atlassian.com/git", + "title": "Git Documentation", + "url": "https://git-scm.com/doc", "type": "article" }, { @@ -370,8 +387,8 @@ "type": "article" }, { - "title": "Git", - "url": "https://git-scm.com/", + "title": "Git Documentation", + "url": "https://git-scm.com/doc", "type": "article" }, { @@ -396,7 +413,7 @@ "type": "article" }, { - "title": "GitHub Website", + "title": "GitHub", "url": "https://github.com", "type": "article" }, @@ -424,7 +441,7 @@ }, "Ry_5Y-BK7HrkIc6X0JG1m": { "title": "Bitbucket", - "description": "Bitbucket is a web-based version control repository hosting service owned by Atlassian. It primarily uses Git version control systems, offering both cloud-hosted and self-hosted options. Bitbucket provides features such as pull requests for code review, branch permissions, and inline commenting on code. It integrates seamlessly with other Atlassian products like Jira and Trello, making it popular among teams already using Atlassian tools. Bitbucket supports continuous integration and deployment through Bitbucket Pipelines. It offers unlimited private repositories for small teams, making it cost-effective for smaller organizations. While similar to GitHub in many aspects, Bitbucket's integration with Atlassian's ecosystem and its pricing model for private repositories are key differentiators. It's widely used for collaborative software development, particularly in enterprise environments already invested in Atlassian's suite of products.\n\nVisit the following resources to learn more:", + "description": "Bitbucket is a web-based version control repository hosting service owned by Atlassian. It primarily uses Git version control systems, offering both cloud-hosted and self-hosted options. Bitbucket provides features such as pull requests for code review, branch permissions, and inline commenting on code. It integrates seamlessly with other Atlassian products like Jira and Trello, making it popular among teams already using Atlassian tools. Bitbucket supports continuous integration and deployment through Bitbucket Pipelines. It offers unlimited private repositories for small teams, making it cost-effective for smaller organizations.\n\nVisit the following resources to learn more:", "links": [ { "title": "Bitbucket Website", @@ -453,9 +470,9 @@ "description": "GitLab is a web-based DevOps platform that provides a complete solution for the software development lifecycle. It offers source code management, continuous integration/continuous deployment (CI/CD), issue tracking, and more, all integrated into a single application. GitLab supports Git repositories and includes features like merge requests (similar to GitHub's pull requests), wiki pages, and issue boards. It emphasizes DevOps practices, providing built-in CI/CD pipelines, container registry, and Kubernetes integration. GitLab offers both cloud-hosted and self-hosted options, giving organizations flexibility in deployment. Its all-in-one approach differentiates it from competitors, as it includes features that might require multiple tools in other ecosystems. GitLab's focus on the entire DevOps lifecycle, from planning to monitoring, makes it popular among enterprises and teams seeking a unified platform for their development workflows.\n\nVisit the following resources to learn more:", "links": [ { - "title": "GitLab Website", + "title": "GitLab", "url": "https://gitlab.com/", - "type": "opensource" + "type": "article" }, { "title": "GitLab Documentation", @@ -546,7 +563,7 @@ "type": "article" }, { - "title": "MS SQL website", + "title": "MS SQL", "url": "https://www.microsoft.com/en-ca/sql-server/", "type": "article" }, @@ -567,12 +584,12 @@ "description": "MySQL is an open-source relational database management system (RDBMS) known for its speed, reliability, and ease of use. It uses SQL (Structured Query Language) for database interactions and supports a range of features for data management, including transactions, indexing, and stored procedures. MySQL is widely used for web applications, data warehousing, and various other applications due to its scalability and flexibility. It integrates well with many programming languages and platforms, and is often employed in conjunction with web servers and frameworks in popular software stacks like LAMP (Linux, Apache, MySQL, PHP/Python/Perl). MySQL is maintained by Oracle Corporation and has a large community and ecosystem supporting its development and use.\n\nVisit the following resources to learn more:", "links": [ { - "title": "MySQL website", + "title": "MySQL", "url": "https://www.mysql.com/", "type": "article" }, { - "title": "W3Schools - MySQL tutorial ", + "title": "W3Schools - MySQL Tutorial", "url": "https://www.w3schools.com/mySQl/default.asp", "type": "article" }, @@ -603,12 +620,12 @@ "description": "Oracle Database is a highly robust, enterprise-grade relational database management system (RDBMS) developed by Oracle Corporation. Known for its scalability, reliability, and comprehensive features, Oracle Database supports complex data management tasks and mission-critical applications. It provides advanced functionalities like SQL querying, transaction management, high availability through clustering, and data warehousing. Oracle's database solutions include support for various data models, such as relational, spatial, and graph, and offer tools for security, performance optimization, and data integration. It is widely used in industries requiring large-scale, secure, and high-performance data processing.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Oracle Website", "url": "https://www.oracle.com/database/", "type": "article" }, { - "title": "Official Docs", + "title": "Oracle Docs", "url": "https://docs.oracle.com/en/database/index.html", "type": "article" }, @@ -626,10 +643,10 @@ }, "tD3i-8gBpMKCHB-ITyDiU": { "title": "MariaDB", - "description": "MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry. MariaDB was created with the intention of being a more versatile, drop-in replacement version of MySQL\n\nVisit the following resources to learn more:", + "description": "MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most feature rich, stable, and sanely licensed open SQL server in the industry. MariaDB was created with the intention of being a more versatile, drop-in replacement version of MySQL\n\nVisit the following resources to learn more:", "links": [ { - "title": "MariaDB website", + "title": "MariaDB", "url": "https://mariadb.org/", "type": "article" }, @@ -782,8 +799,14 @@ }, "GwApfL4Yx-b5Y8dB9Vy__": { "title": "Failure Modes", - "description": "Database failure modes refer to the various ways in which a database system can malfunction or cease to operate correctly. These include hardware failures (like disk crashes or network outages), software bugs, data corruption, performance degradation due to overload, and inconsistencies in distributed systems. Common failure modes involve data loss, system unavailability, replication lag in distributed databases, and deadlocks. To mitigate these, databases employ strategies such as redundancy, regular backups, transaction logging, and failover mechanisms. Understanding potential failure modes is crucial for designing robust database systems with high availability and data integrity. It informs the implementation of fault tolerance measures, recovery procedures, and monitoring systems to ensure database reliability and minimize downtime in critical applications.", - "links": [] + "description": "Database failure modes refer to the various ways in which a database system can malfunction or cease to operate correctly. These include hardware failures (like disk crashes or network outages), software bugs, data corruption, performance degradation due to overload, and inconsistencies in distributed systems. Common failure modes involve data loss, system unavailability, replication lag in distributed databases, and deadlocks. To mitigate these, databases employ strategies such as redundancy, regular backups, transaction logging, and failover mechanisms. Understanding potential failure modes is crucial for designing robust database systems with high availability and data integrity. It informs the implementation of fault tolerance measures, recovery procedures, and monitoring systems to ensure database reliability and minimize downtime in critical applications.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Database Failure Modes", + "url": "https://ieeexplore.ieee.org/document/7107294/", + "type": "article" + } + ] }, "rq_y_OBMD9AH_4aoecvAi": { "title": "Transactions", @@ -921,7 +944,7 @@ "description": "Data replication is the process of creating and maintaining multiple copies of the same data across different locations or nodes in a distributed system. It enhances data availability, reliability, and performance by ensuring that data remains accessible even if one or more nodes fail. Replication can be synchronous (changes are applied to all copies simultaneously) or asynchronous (changes are propagated after being applied to the primary copy). It's widely used in database systems, content delivery networks, and distributed file systems. Replication strategies include master-slave, multi-master, and peer-to-peer models. While improving fault tolerance and read performance, replication introduces challenges in maintaining data consistency across copies and managing potential conflicts. Effective replication strategies must balance consistency, availability, and partition tolerance, often in line with the principles of the CAP theorem.\n\nVisit the following resources to learn more:", "links": [ { - "title": "What is data replication?", + "title": "Data Replication? - IBM", "url": "https://www.ibm.com/topics/data-replication", "type": "article" }, @@ -984,7 +1007,7 @@ "description": "JSON or JavaScript Object Notation is an encoding scheme that is designed to eliminate the need for an ad-hoc code for each application to communicate with servers that communicate in a defined way. JSON API module exposes an implementation for data stores and data structures, such as entity types, bundles, and fields.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "JSON API", "url": "https://jsonapi.org/", "type": "article" }, @@ -1014,15 +1037,15 @@ "url": "https://swagger.io/tools/swagger-editor/", "type": "article" }, - { - "title": " REST API and OpenAPI: It’s Not an Either/Or Question ", - "url": "https://www.youtube.com/watch?v=pRS9LRBgjYg", - "type": "article" - }, { "title": "OpenAPI 3.0: How to Design and Document APIs with the Latest OpenAPI Specification 3.0", "url": "https://www.youtube.com/watch?v=6kwmW_p_Tig", "type": "video" + }, + { + "title": " REST API and OpenAPI: It’s Not an Either/Or Question", + "url": "https://www.youtube.com/watch?v=pRS9LRBgjYg", + "type": "video" } ] }, @@ -1109,7 +1132,7 @@ "type": "article" }, { - "title": "GraphQL Official Website", + "title": "GraphQL", "url": "https://graphql.org/", "type": "article" }, @@ -1130,7 +1153,7 @@ "description": "Client-side caching is a technique where web browsers or applications store data locally on the user's device to improve performance and reduce server load. It involves saving copies of web pages, images, scripts, and other resources on the client's system for faster access on subsequent visits. Modern browsers implement various caching mechanisms, including HTTP caching (using headers like Cache-Control and ETag), service workers for offline functionality, and local storage APIs. Client-side caching significantly reduces network traffic and load times, enhancing user experience, especially on slower connections. However, it requires careful management to balance improved performance with the need for up-to-date content. Developers must implement appropriate cache invalidation strategies and consider cache-busting techniques for critical updates. Effective client-side caching is crucial for creating responsive, efficient web applications while minimizing server resource usage.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Client-side Caching", + "title": "Client Side Caching", "url": "https://redis.io/docs/latest/develop/use/client-side-caching/", "type": "article" }, @@ -1143,13 +1166,18 @@ }, "Nq2BO53bHJdFT1rGZPjYx": { "title": "CDN", - "description": "A Content Delivery Network (CDN) service aims to provide high availability and performance improvements of websites. This is achieved with fast delivery of website assets and content typically via geographically closer endpoints to the client requests. Traditional commercial CDNs (Amazon CloudFront, Akamai, CloudFlare and Fastly) provide servers across the globe which can be used for this purpose. Serving assets and contents via a CDN reduces bandwidth on website hosting, provides an extra layer of caching to reduce potential outages and can improve website security as well\n\nVisit the following resources to learn more:", + "description": "A Content Delivery Network (CDN) service aims to provide high availability and performance improvements of websites. This is achieved with fast delivery of website assets and content typically via geographically closer endpoints to the client requests.\n\nTraditional commercial CDNs (Amazon CloudFront, Akamai, CloudFlare and Fastly) provide servers across the globe which can be used for this purpose. Serving assets and contents via a CDN reduces bandwidth on website hosting, provides an extra layer of caching to reduce potential outages and can improve website security as well\n\nVisit the following resources to learn more:", "links": [ { "title": "CloudFlare - What is a CDN? | How do CDNs work?", "url": "https://www.cloudflare.com/en-ca/learning/cdn/what-is-a-cdn/", "type": "article" }, + { + "title": "AWS - CDN", + "url": "https://aws.amazon.com/what-is/cdn/", + "type": "article" + }, { "title": "What is Cloud CDN?", "url": "https://www.youtube.com/watch?v=841kyd_mfH0", @@ -1190,8 +1218,19 @@ }, "ELj8af7Mi38kUbaPJfCUR": { "title": "Caching", - "description": "Caching is a technique used in computing to store and retrieve frequently accessed data quickly, reducing the need to fetch it from the original, slower source repeatedly. It involves keeping a copy of data in a location that's faster to access than its primary storage. Caching can occur at various levels, including browser caching, application-level caching, and database caching. It significantly improves performance by reducing latency, decreasing network traffic, and lowering the load on servers or databases. Common caching strategies include time-based expiration, least recently used (LRU) algorithms, and write-through or write-back policies. While caching enhances speed and efficiency, it also introduces challenges in maintaining data consistency and freshness. Effective cache management is crucial in balancing performance gains with the need for up-to-date information in dynamic systems.", - "links": [] + "description": "Caching is a technique used in computing to store and retrieve frequently accessed data quickly, reducing the need to fetch it from the original, slower source repeatedly. It involves keeping a copy of data in a location that's faster to access than its primary storage. Caching can occur at various levels, including browser caching, application-level caching, and database caching. It significantly improves performance by reducing latency, decreasing network traffic, and lowering the load on servers or databases. Common caching strategies include time-based expiration, least recently used (LRU) algorithms, and write-through or write-back policies. While caching enhances speed and efficiency, it also introduces challenges in maintaining data consistency and freshness. Effective cache management is crucial in balancing performance gains with the need for up-to-date information in dynamic systems.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is Caching - AWS", + "url": "https://aws.amazon.com/caching/", + "type": "article" + }, + { + "title": "Caching - Cloudflare", + "url": "https://www.cloudflare.com/learning/cdn/what-is-caching/", + "type": "article" + } + ] }, "RBrIP5KbVQ2F0ly7kMfTo": { "title": "Web Security", @@ -1333,7 +1372,7 @@ "type": "article" }, { - "title": "DevOps CI/CD Explained in 100 Seconds by Fireship", + "title": "DevOps CI/CD Explained in 100 Seconds", "url": "https://www.youtube.com/watch?v=scEDHsr3APg", "type": "video" }, @@ -1581,7 +1620,7 @@ }, "8DmabQJXlrT__COZrDVTV": { "title": "Twelve Factor Apps", - "description": "The Twelve-Factor App methodology is a set of principles for building modern, scalable, and maintainable web applications, particularly suited for cloud environments. It emphasizes best practices for developing applications in a way that facilitates portability, scalability, and ease of deployment. Key principles include:\n\n1. **Codebase**: One codebase tracked in version control, with many deploys.\n2. **Dependencies**: Explicitly declare and isolate dependencies.\n3. **Config**: Store configuration in the environment.\n4. **Backing Services**: Treat backing services as attached resources.\n5. **Build, Release, Run**: Separate build and run stages.\n6. **Processes**: Execute the app as one or more stateless processes.\n7. **Port Binding**: Export services via port binding.\n8. **Concurrency**: Scale out via the process model.\n9. **Disposability**: Maximize robustness with fast startup and graceful shutdown.\n10. **Dev/Prod Parity**: Keep development, staging, and production environments as similar as possible.\n11. **Logs**: Treat logs as streams of events.\n12. **Admin Processes**: Run administrative or management tasks as one-off processes.\n\nThese principles help create applications that are easy to deploy, manage, and scale in cloud environments, promoting operational simplicity and consistency.\n\nVisit the following resources to learn more:", + "description": "The Twelve-Factor App methodology is a set of principles for building modern, scalable, and maintainable web applications, particularly suited for cloud environments. It emphasizes best practices for developing applications in a way that facilitates portability, scalability, and ease of deployment. Key principles include:\n\n1. **Codebase**: One codebase tracked in version control, with many deploys.\n2. **Dependencies**: Explicitly declare and isolate dependencies.\n3. **Config**: Store configuration in the environment.\n4. **Backing Services**: Treat backing services as attached resources.\n5. **Build, Release, Run**: Separate build and run stages.\n6. **Processes**: Execute the app as one or more stateless processes.\n7. **Port Binding**: Export services via port binding.\n8. **Concurrency**: Scale out via the process model.\n9. **Disposability**: Maximize robustness with fast startup and graceful shutdown.\n10. **Dev/Prod Parity**: Keep development, staging, and production environments as similar as possible.\n11. **Logs**: Treat logs as streams of events.\n12. **Admin Processes**: Run administrative or management tasks as one-off processes.\n\nVisit the following resources to learn more:", "links": [ { "title": "The Twelve-Factor App", @@ -1647,7 +1686,7 @@ "description": "Apache Kafka is a distributed event streaming platform designed for high-throughput, fault-tolerant data processing. It acts as a message broker, allowing systems to publish and subscribe to streams of records, similar to a distributed commit log. Kafka is highly scalable and can handle large volumes of data with low latency, making it ideal for real-time analytics, log aggregation, and data integration. It features topics for organizing data streams, partitions for parallel processing, and replication for fault tolerance, enabling reliable and efficient handling of large-scale data flows across distributed systems.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Apache Kafka quickstart", + "title": "Apache Kafka", "url": "https://kafka.apache.org/quickstart", "type": "article" }, @@ -1704,12 +1743,12 @@ "type": "article" }, { - "title": "Getting started with LXD Containerization", + "title": "Getting Started with LXD Containerization", "url": "https://www.youtube.com/watch?v=aIwgPKkVj8s", "type": "video" }, { - "title": "Getting started with LXC containers", + "title": "Getting Started with LXC containers", "url": "https://youtu.be/CWmkSj_B-wo", "type": "video" } @@ -1767,7 +1806,7 @@ "description": "Server-Sent Events (SSE) is a technology for sending real-time updates from a server to a web client over a single, persistent HTTP connection. It enables servers to push updates to clients efficiently and automatically reconnects if the connection is lost. SSE is ideal for applications needing one-way communication, such as live notifications or real-time data feeds, and uses a simple text-based format for transmitting event data, which can be easily handled by clients using the `EventSource` API in JavaScript.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Server-Sent Events - MDN", + "title": "Server Sent Events - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events", "type": "article" }, @@ -1783,7 +1822,7 @@ "description": "Nginx is a high-performance, open-source web server and reverse proxy server known for its efficiency, scalability, and low resource consumption. Originally developed as a web server, Nginx is also commonly used as a load balancer, HTTP cache, and mail proxy. It excels at handling a large number of concurrent connections due to its asynchronous, event-driven architecture. Nginx's features include support for serving static content, handling dynamic content through proxying to application servers, and providing SSL/TLS termination. Its modular design allows for extensive customization and integration with various applications and services, making it a popular choice for modern web infrastructures.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Nginx Website", "url": "https://nginx.org/", "type": "article" }, @@ -1809,7 +1848,7 @@ "description": "Caddy is a modern, open-source web server written in Go. It's known for its simplicity, automatic HTTPS encryption, and HTTP/2 support out of the box. Caddy stands out for its ease of use, with a simple configuration syntax and the ability to serve static files with zero configuration. It automatically obtains and renews SSL/TLS certificates from Let's Encrypt, making secure deployments straightforward. Caddy supports various plugins and modules for extended functionality, including reverse proxying, load balancing, and dynamic virtual hosting. It's designed with security in mind, implementing modern web standards by default. While it may not match the raw performance of servers like Nginx in extremely high-load scenarios, Caddy's simplicity, built-in security features, and low resource usage make it an attractive choice for many web hosting needs, particularly for smaller to medium-sized projects or developers seeking a hassle-free server setup.\n\nVisit the following resources to learn more:", "links": [ { - "title": "caddyserver/caddy", + "title": "caddyserver/caddy - Caddy on GitHub", "url": "https://github.com/caddyserver/caddy", "type": "opensource" }, @@ -1856,7 +1895,7 @@ "description": "Microsoft Internet Information Services (IIS) is a flexible, secure, and high-performance web server developed by Microsoft for hosting and managing web applications and services on Windows Server. IIS supports a variety of web technologies, including [ASP.NET](http://ASP.NET), PHP, and static content. It provides features such as request handling, authentication, SSL/TLS encryption, and URL rewriting. IIS also offers robust management tools, including a graphical user interface and command-line options, for configuring and monitoring web sites and applications. It is commonly used for deploying enterprise web applications and services in a Windows-based environment, offering integration with other Microsoft technologies and services.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "Microsoft -IIS", "url": "https://www.iis.net/", "type": "article" }, @@ -1942,7 +1981,7 @@ }, "xPvVwGQw28uMeLYIWn8yn": { "title": "Memcached", - "description": "Memcached (pronounced variously mem-cash-dee or mem-cashed) is a general-purpose distributed memory-caching system. It is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source (such as a database or API) must be read. Memcached is free and open-source software, licensed under the Revised BSD license. Memcached runs on Unix-like operating systems (Linux and macOS) and on Microsoft Windows. It depends on the `libevent` library. Memcached's APIs provide a very large hash table distributed across multiple machines. When the table is full, subsequent inserts cause older data to be purged in the least recently used (LRU) order. Applications using Memcached typically layer requests and additions into RAM before falling back on a slower backing store, such as a database.\n\nMemcached has no internal mechanism to track misses which may happen. However, some third-party utilities provide this functionality.\n\nVisit the following resources to learn more:", + "description": "Memcached (pronounced variously mem-cash-dee or mem-cashed) is a general-purpose distributed memory-caching system. It is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source (such as a database or API) must be read. Memcached is free and open-source software, licensed under the Revised BSD license. Memcached runs on Unix-like operating systems (Linux and macOS) and on Microsoft Windows. It depends on the `libevent` library. Memcached's APIs provide a very large hash table distributed across multiple machines. When the table is full, subsequent inserts cause older data to be purged in the least recently used (LRU) order. Applications using Memcached typically layer requests and additions into RAM before falling back on a slower backing store, such as a database.\n\nVisit the following resources to learn more:", "links": [ { "title": "memcached/memcached", @@ -2091,7 +2130,7 @@ "type": "article" }, { - "title": "Backpressure explained — the resisted flow of data through software", + "title": "Backpressure explained — The Resisted Flow of Data through Software", "url": "https://medium.com/@jayphelps/backpressure-explained-the-flow-of-data-through-software-2350b3e77ce7", "type": "article" }, @@ -2136,7 +2175,7 @@ }, "f7iWBkC0X7yyCoP_YubVd": { "title": "Migration Strategies", - "description": "Migration strategies involve planning and executing the transition of applications, data, or infrastructure from one environment to another, such as from on-premises systems to the cloud or between different cloud providers. Key strategies include:\n\n1. **Rehost (Lift and Shift)**: Moving applications as-is to the new environment with minimal changes, which is often the quickest but may not fully leverage new platform benefits.\n2. **Replatform**: Making some optimizations or changes to adapt applications for the new environment, enhancing performance or scalability while retaining most of the existing architecture.\n3. **Refactor**: Redesigning and modifying applications to optimize for the new environment, often taking advantage of new features and improving functionality or performance.\n4. **Repurchase**: Replacing existing applications with new, often cloud-based, solutions that better meet current needs.\n5. **Retain**: Keeping certain applications or systems in their current environment due to specific constraints or requirements.\n6. **Retire**: Decommissioning applications that are no longer needed or are redundant.\n\nEach strategy has its own trade-offs in terms of cost, complexity, and benefits, and the choice depends on factors like the application’s architecture, business needs, and resource availability.\n\nVisit the following resources to learn more:", + "description": "Migration strategies involve planning and executing the transition of applications, data, or infrastructure from one environment to another, such as from on-premises systems to the cloud or between different cloud providers. Key strategies include:\n\n1. **Rehost (Lift and Shift)**: Moving applications as-is to the new environment with minimal changes, which is often the quickest but may not fully leverage new platform benefits.\n2. **Replatform**: Making some optimizations or changes to adapt applications for the new environment, enhancing performance or scalability while retaining most of the existing architecture.\n3. **Refactor**: Redesigning and modifying applications to optimize for the new environment, often taking advantage of new features and improving functionality or performance.\n4. **Repurchase**: Replacing existing applications with new, often cloud-based, solutions that better meet current needs.\n5. **Retain**: Keeping certain applications or systems in their current environment due to specific constraints or requirements.\n6. **Retire**: Decommissioning applications that are no longer needed or are redundant.\n\nVisit the following resources to learn more:", "links": [ { "title": "Databases as a Challenge for Continuous Delivery", @@ -2152,7 +2191,7 @@ }, "osQlGGy38xMcKLtgZtWaZ": { "title": "Types of Scaling", - "description": "Horizontal scaling (scaling out/in) involves adding or removing instances of resources, such as servers or containers, to handle increased or decreased loads. It distributes the workload across multiple instances to improve performance and redundancy. This method enhances the system's capacity by expanding the number of nodes in a distributed system.\n\nVertical scaling (scaling up/down) involves increasing or decreasing the resources (CPU, memory, storage) of a single instance or server to handle more load or reduce capacity. This method improves performance by upgrading the existing hardware or virtual machine but has limits based on the maximum capacity of the individual resource.\n\nBoth approaches have their advantages: horizontal scaling offers better fault tolerance and flexibility, while vertical scaling is often simpler to implement but can be limited by the hardware constraints of a single machine.\n\nVisit the following resources to learn more:", + "description": "Horizontal scaling (scaling out/in) involves adding or removing instances of resources, such as servers or containers, to handle increased or decreased loads. It distributes the workload across multiple instances to improve performance and redundancy. This method enhances the system's capacity by expanding the number of nodes in a distributed system.\n\nVertical scaling (scaling up/down) involves increasing or decreasing the resources (CPU, memory, storage) of a single instance or server to handle more load or reduce capacity. This method improves performance by upgrading the existing hardware or virtual machine but has limits based on the maximum capacity of the individual resource.\n\nVisit the following resources to learn more:", "links": [ { "title": "Horizontal vs Vertical Scaling", @@ -2207,7 +2246,7 @@ "description": "Monitoring involves continuously observing and tracking the performance, availability, and health of systems, applications, and infrastructure. It typically includes collecting and analyzing metrics, logs, and events to ensure systems are operating within desired parameters. Monitoring helps detect anomalies, identify potential issues before they escalate, and provides insights into system behavior. It often involves tools and platforms that offer dashboards, alerts, and reporting features to facilitate real-time visibility and proactive management. Effective monitoring is crucial for maintaining system reliability, performance, and for supporting incident response and troubleshooting.\n\nA few popular tools are Grafana, Sentry, Mixpanel, NewRelic.", "links": [ { - "title": "Top monitoring tools 2024", + "title": "Top Monitoring Tools", "url": "https://thectoclub.com/tools/best-application-monitoring-software/", "type": "article" }, @@ -2307,9 +2346,9 @@ "description": "Bcrypt is a password-hashing function designed to securely hash passwords for storage in databases. Created by Niels Provos and David Mazières, it's based on the Blowfish cipher and incorporates a salt to protect against rainbow table attacks. Bcrypt's key feature is its adaptive nature, allowing for the adjustment of its cost factor to make it slower as computational power increases, thus maintaining resistance against brute-force attacks over time. It produces a fixed-size hash output, typically 60 characters long, which includes the salt and cost factor. Bcrypt is widely used in many programming languages and frameworks due to its security strength and relative ease of implementation. Its deliberate slowness in processing makes it particularly effective for password storage, where speed is not a priority but security is paramount.\n\nVisit the following resources to learn more:", "links": [ { - "title": "bcrypts npm package", + "title": "bcrypt", "url": "https://www.npmjs.com/package/bcrypt", - "type": "article" + "type": "opensource" }, { "title": "Understanding bcrypt", @@ -2429,7 +2468,7 @@ }, "TZ0BWOENPv6pQm8qYB8Ow": { "title": "Server Security", - "description": "Server security involves protecting servers from threats and vulnerabilities to ensure the confidentiality, integrity, and availability of the data and services they manage. Key practices include:\n\n1. **Patch Management**: Regularly updating software and operating systems to fix vulnerabilities.\n2. **Access Control**: Implementing strong authentication mechanisms and restricting access to authorized users only.\n3. **Firewalls and Intrusion Detection**: Using firewalls to block unauthorized access and intrusion detection systems to monitor and respond to suspicious activities.\n4. **Encryption**: Encrypting data both in transit and at rest to protect sensitive information from unauthorized access.\n5. **Security Hardening**: Configuring servers with minimal services and features, applying security best practices to reduce the attack surface.\n6. **Regular Backups**: Performing regular backups to ensure data can be restored in case of loss or corruption.\n7. **Monitoring and Logging**: Continuously monitoring server activity and maintaining logs for auditing and detecting potential security incidents.\n\nEffective server security is crucial for safeguarding against attacks, maintaining system stability, and protecting sensitive data.\n\nLearn more from the following resources:", + "description": "Server security involves protecting servers from threats and vulnerabilities to ensure the confidentiality, integrity, and availability of the data and services they manage. Key practices include:\n\n1. **Patch Management**: Regularly updating software and operating systems to fix vulnerabilities.\n2. **Access Control**: Implementing strong authentication mechanisms and restricting access to authorized users only.\n3. **Firewalls and Intrusion Detection**: Using firewalls to block unauthorized access and intrusion detection systems to monitor and respond to suspicious activities.\n4. **Encryption**: Encrypting data both in transit and at rest to protect sensitive information from unauthorized access.\n5. **Security Hardening**: Configuring servers with minimal services and features, applying security best practices to reduce the attack surface.\n6. **Regular Backups**: Performing regular backups to ensure data can be restored in case of loss or corruption.\n7. **Monitoring and Logging**: Continuously monitoring server activity and maintaining logs for auditing and detecting potential security incidents.\n\nLearn more from the following resources:", "links": [ { "title": "What is a hardened server?", @@ -2600,7 +2639,7 @@ }, "hkxw9jPGYphmjhTjw8766": { "title": "DNS and how it works?", - "description": "DNS (Domain Name System) is a hierarchical, decentralized naming system for computers, services, or other resources connected to the Internet or a private network. It translates human-readable domain names (like [www.example.com](http://www.example.com)) into IP addresses (like 192.0.2.1) that computers use to identify each other. DNS servers distributed worldwide work together to resolve these queries, forming a global directory service. The system uses a tree-like structure with root servers at the top, followed by top-level domain servers (.com, .org, etc.), authoritative name servers for specific domains, and local DNS servers. DNS is crucial for the functioning of the Internet, enabling users to access websites and services using memorable names instead of numerical IP addresses. It also supports email routing, service discovery, and other network protocols.\n\nVisit the following resources to learn more:", + "description": "DNS (Domain Name System) is a hierarchical, decentralized naming system for computers, services, or other resources connected to the Internet or a private network. It translates human-readable domain names (like `www.example.com`) into IP addresses (like 192.0.2.1) that computers use to identify each other. DNS servers distributed worldwide work together to resolve these queries, forming a global directory service. The system uses a tree-like structure with root servers at the top, followed by top-level domain servers (.com, .org, etc.), authoritative name servers for specific domains, and local DNS servers. DNS is crucial for the functioning of the Internet, enabling users to access websites and services using memorable names instead of numerical IP addresses. It also supports email routing, service discovery, and other network protocols.\n\nVisit the following resources to learn more:", "links": [ { "title": "What is DNS?", @@ -2811,7 +2850,7 @@ "description": "OpenID is an open standard for decentralized authentication that allows users to log in to multiple websites and applications using a single set of credentials, managed by an identity provider (IdP). It enables users to authenticate their identity through an external service, simplifying the login process and reducing the need for multiple usernames and passwords. OpenID typically works in conjunction with OAuth 2.0 for authorization, allowing users to grant access to their data while maintaining security. This approach enhances user convenience and streamlines identity management across various platforms.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", + "title": "OpenID Website", "url": "https://openid.net/", "type": "article" }, @@ -2839,7 +2878,7 @@ }, "UCHtaePVxS-0kpqlYxbfC": { "title": "SAML", - "description": "Security Assertion Markup Language (SAML)\n-----------------------------------------\n\nSecurity Assertion Markup Language (SAML) is an XML-based framework used for single sign-on (SSO) and identity federation, enabling users to authenticate once and gain access to multiple applications or services. It allows for the exchange of authentication and authorization data between an identity provider (IdP) and a service provider (SP). SAML assertions are XML documents that contain user identity information and attributes, and are used to convey authentication credentials and permissions. By implementing SAML, organizations can streamline user management, enhance security through centralized authentication, and simplify the user experience by reducing the need for multiple logins across different systems.\n\nLearn more from the following resources:", + "description": "Security Assertion Markup Language (SAML) is an XML-based framework used for single sign-on (SSO) and identity federation, enabling users to authenticate once and gain access to multiple applications or services. It allows for the exchange of authentication and authorization data between an identity provider (IdP) and a service provider (SP). SAML assertions are XML documents that contain user identity information and attributes, and are used to convey authentication credentials and permissions. By implementing SAML, organizations can streamline user management, enhance security through centralized authentication, and simplify the user experience by reducing the need for multiple logins across different systems.\n\nLearn more from the following resources:", "links": [ { "title": "SAML Explained in Plain English", @@ -2884,17 +2923,17 @@ "description": "Solr is an open-source, highly scalable search platform built on Apache Lucene, designed for full-text search, faceted search, and real-time indexing. It provides powerful features for indexing and querying large volumes of data with high performance and relevance. Solr supports complex queries, distributed searching, and advanced text analysis, including tokenization and stemming. It offers features such as faceted search, highlighting, and geographic search, and is commonly used for building search engines and data retrieval systems in various applications, from e-commerce to content management.\n\nVisit the following resources to learn more:", "links": [ { - "title": "apache/solr", + "title": "Solr on Github", "url": "https://github.com/apache/solr", "type": "opensource" }, { - "title": "Official Website", + "title": "Solr Website", "url": "https://solr.apache.org/", "type": "article" }, { - "title": "Official Documentation", + "title": "Solr Documentation", "url": "https://solr.apache.org/resources.html#documentation", "type": "article" }, @@ -2910,7 +2949,7 @@ "description": "Real-time data refers to information that is processed and made available immediately or with minimal delay, allowing users or systems to react promptly to current conditions. This type of data is essential in applications requiring immediate updates and responses, such as financial trading platforms, online gaming, real-time analytics, and monitoring systems. Real-time data processing involves capturing, analyzing, and delivering information as it is generated, often using technologies like stream processing frameworks (e.g., Apache Kafka, Apache Flink) and low-latency databases. Effective real-time data systems can handle high-speed data flows, ensuring timely and accurate decision-making.\n\nLearn more from the following resources:", "links": [ { - "title": "Real-time data - Wiki", + "title": "Real-time Data - Wiki", "url": "https://en.wikipedia.org/wiki/Real-time_data", "type": "article" }, @@ -2942,7 +2981,7 @@ "description": "Short polling is a technique where a client periodically sends requests to a server at regular intervals to check for updates or new data. The server responds with the current state or any changes since the last request. While simple to implement and compatible with most HTTP infrastructures, short polling can be inefficient due to the frequent network requests and potential for increased latency in delivering updates. It contrasts with long polling and WebSockets, which offer more efficient mechanisms for real-time communication. Short polling is often used when real-time requirements are less stringent and ease of implementation is a priority.\n\nLearn more from the following resources:", "links": [ { - "title": "Amazon SQS short and long polling", + "title": "Amazon SQS Short and Long Polling", "url": "https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html", "type": "article" }, @@ -2984,7 +3023,7 @@ "description": "Amazon DynamoDB is a fully managed, serverless NoSQL database service provided by Amazon Web Services (AWS). It offers high-performance, scalable, and flexible data storage for applications of any scale. DynamoDB supports both key-value and document data models, providing fast and predictable performance with seamless scalability. It features automatic scaling, built-in security, backup and restore options, and global tables for multi-region deployment. DynamoDB excels in handling high-traffic web applications, gaming backends, mobile apps, and IoT solutions. It offers consistent single-digit millisecond latency at any scale and supports both strongly consistent and eventually consistent read models. With its integration into the AWS ecosystem, on-demand capacity mode, and support for transactions, DynamoDB is widely used for building highly responsive and scalable applications, particularly those with unpredictable workloads or requiring low-latency data access.\n\nLearn more from the following resources:", "links": [ { - "title": "AWS DynamoDB Website", + "title": "AWS DynamoDB", "url": "https://aws.amazon.com/dynamodb/", "type": "article" }, @@ -3002,10 +3041,10 @@ }, "RyJFLLGieJ8Xjt-DlIayM": { "title": "Firebase", - "description": "Firebase is a comprehensive mobile and web application development platform owned by Google. It provides a suite of cloud-based services that simplify app development, hosting, and scaling. Key features include real-time database, cloud storage, authentication, hosting, cloud functions, and analytics. Firebase offers real-time synchronization, allowing data to be updated across clients instantly. Its authentication service supports multiple providers, including email/password, social media logins, and phone authentication. The platform's serverless architecture enables developers to focus on front-end development without managing backend infrastructure. Firebase also provides tools for app testing, crash reporting, and performance monitoring. While it excels in rapid prototyping and building real-time applications, its proprietary nature and potential for vendor lock-in are considerations for large-scale or complex applications. Firebase's ease of use and integration with Google Cloud Platform make it popular for startups and projects requiring quick deployment.\n\nLearn more from the following resources:", + "description": "Firebase is a comprehensive mobile and web application development platform owned by Google. It provides a suite of cloud-based services that simplify app development, hosting, and scaling. Key features include real-time database, cloud storage, authentication, hosting, cloud functions, and analytics. Firebase offers real-time synchronization, allowing data to be updated across clients instantly. Its authentication service supports multiple providers, including email/password, social media logins, and phone authentication. The platform's serverless architecture enables developers to focus on front-end development without managing backend infrastructure. Firebase also provides tools for app testing, crash reporting, and performance monitoring.\n\nLearn more from the following resources:", "links": [ { - "title": "The ultimate guide to Firebase", + "title": "The Ultimate Guide to Firebase", "url": "https://fireship.io/lessons/the-ultimate-beginners-guide-to-firebase/", "type": "course" }, @@ -3042,7 +3081,7 @@ "description": "SQLite is a lightweight, serverless, self-contained SQL database engine that is designed for simplicity and efficiency. It is widely used in embedded systems and applications where a full-featured database server is not required, such as mobile apps, desktop applications, and small to medium-sized websites. SQLite stores data in a single file, which makes it easy to deploy and manage. It supports standard SQL queries and provides ACID (Atomicity, Consistency, Isolation, Durability) compliance to ensure data integrity. SQLite’s small footprint, minimal configuration, and ease of use make it a popular choice for applications needing a compact, high-performance database solution.\n\nVisit the following resources to learn more:", "links": [ { - "title": "SQLite website", + "title": "SQLite", "url": "https://www.sqlite.org/index.html", "type": "article" }, @@ -3104,7 +3143,7 @@ "type": "video" }, { - "title": "What is time series data?", + "title": "What is Time Series Data?", "url": "https://www.youtube.com/watch?v=Se5ipte9DMY", "type": "video" } @@ -3203,5 +3242,21 @@ "type": "video" } ] + }, + "ZsZvStCvKwFhlBYe9HGhl": { + "title": "Migrations", + "description": "Database migrations are a version-controlled way to manage and apply incremental changes to a database schema over time, allowing developers to modify the database structure (e.g., adding tables, altering columns) without affecting existing data. They ensure that the database evolves alongside application code in a consistent, repeatable manner across environments (e.g., development, testing, production), while maintaining compatibility with older versions of the schema. Migrations are typically written in SQL or a database-agnostic language, and are executed using migration tools like Liquibase, Flyway, or built-in ORM features such as Django or Rails migrations.\n\nLearn more from the following resources:", + "links": [ + { + "title": "What are Database Migrations?", + "url": "https://www.prisma.io/dataguide/types/relational/what-are-database-migrations", + "type": "article" + }, + { + "title": "Database Migrations for Beginners", + "url": "https://www.youtube.com/watch?v=dJDBP7pPA-o", + "type": "video" + } + ] } } \ No newline at end of file diff --git a/public/roadmap-content/computer-science.json b/public/roadmap-content/computer-science.json index 9feb7b55c..853fd0649 100644 --- a/public/roadmap-content/computer-science.json +++ b/public/roadmap-content/computer-science.json @@ -372,16 +372,6 @@ "url": "https://www.coursera.org/lecture/data-structures/doubly-linked-lists-jpGKD", "type": "course" }, - { - "title": "CS 61B Lecture 7: Linked Lists I", - "url": "https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0", - "type": "article" - }, - { - "title": "CS 61B Lecture 7: Linked Lists II", - "url": "https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w", - "type": "article" - }, { "title": "Linked List Data Structure | Illustrated Data Structures", "url": "https://www.youtube.com/watch?v=odW9FU8jPRQ", @@ -392,6 +382,16 @@ "url": "https://www.youtube.com/watch?v=F8AbOfQwl1c", "type": "video" }, + { + "title": "CS 61B Lecture 7: Linked Lists I", + "url": "https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0", + "type": "video" + }, + { + "title": "CS 61B Lecture 7: Linked Lists II", + "url": "https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w", + "type": "video" + }, { "title": "Why you should avoid Linked Lists?", "url": "https://www.youtube.com/watch?v=YQs6IC-vgmo", @@ -511,16 +511,16 @@ "url": "https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV", "type": "course" }, - { - "title": "UC Berkeley CS61B - Linear and Multi-Dim Arrays (Start watching from 15m 32s)", - "url": "https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE", - "type": "article" - }, { "title": "Array Data Structure | Illustrated Data Structures", "url": "https://www.youtube.com/watch?v=QJNwK2uJyGs", "type": "video" }, + { + "title": "UC Berkeley CS61B - Linear and Multi-Dim Arrays (Start watching from 15m 32s)", + "url": "https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE", + "type": "video" + }, { "title": "Dynamic and Static Arrays", "url": "https://www.youtube.com/watch?v=PEnFFiQe1pM&list=PLDV1Zeh2NRsB6SWUrDFW2RmDotAfPbeHu&index=6", diff --git a/public/roadmap-content/cyber-security.json b/public/roadmap-content/cyber-security.json index 218cd6c61..208364f42 100644 --- a/public/roadmap-content/cyber-security.json +++ b/public/roadmap-content/cyber-security.json @@ -766,7 +766,7 @@ }, "dJ0NUsODFhk52W2zZxoPh": { "title": "SSL and TLS Basics", - "description": "Single Sign-On (SSO) is an authentication method that allows users to access multiple applications or systems with one set of login credentials. It enables users to log in once and gain access to various connected systems without re-entering credentials. SSO enhances user experience by reducing password fatigue, streamlines access management for IT departments, and can improve security by centralizing authentication controls. It typically uses protocols like SAML, OAuth, or OpenID Connect to securely share authentication information across different domains. While SSO offers convenience and can strengthen security when implemented correctly, it also presents a single point of failure if compromised, making robust security measures for the SSO system critical.\n\nLearn more from the following resources:", + "description": "Secure Sockets Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols used to provide security in internet communications. These protocols encrypt the data that is transmitted over the web, so anyone who tries to intercept packets will not be able to interpret the data. One difference that is important to know is that SSL is now deprecated due to security flaws, and most modern web browsers no longer support it. But TLS is still secure and widely supported, so preferably use TLS.\n\nLearn more from the following resources:", "links": [ { "title": "What’s the Difference Between SSL and TLS?", @@ -3223,7 +3223,7 @@ }, "6ILPXeUDDmmYRiA_gNTSr": { "title": "SSL vs TLS", - "description": "Single Sign-On (SSO) is an authentication method that allows users to access multiple applications or systems with one set of login credentials. It enables users to log in once and gain access to various connected systems without re-entering credentials. SSO enhances user experience by reducing password fatigue, streamlines access management for IT departments, and can improve security by centralizing authentication controls. It typically uses protocols like SAML, OAuth, or OpenID Connect to securely share authentication information across different domains. While SSO offers convenience and can strengthen security when implemented correctly, it also presents a single point of failure if compromised, making robust security measures for the SSO system critical.\n\nLearn more from the following resources:", + "description": "**SSL (Secure Sockets Layer)** is a cryptographic protocol used to secure communications by encrypting data transmitted between clients and servers. SSL establishes a secure connection through a process known as the handshake, during which the client and server agree on cryptographic algorithms, exchange keys, and authenticate the server with a digital certificate. SSL’s security is considered weaker compared to its successor, TLS, due to vulnerabilities in its older encryption methods and lack of modern cryptographic techniques.\n\n**TLS (Transport Layer Security)** improves upon SSL by using stronger encryption algorithms, more secure key exchange mechanisms, and enhanced certificate validation. Like SSL, TLS begins with a handshake where the client and server agree on a protocol version and cipher suite, exchange keys, and verify certificates. However, TLS incorporates additional features like Perfect Forward Secrecy (PFS) and more secure hashing algorithms, making it significantly more secure than SSL for modern communications.\n\nLearn more from the following resources:", "links": [ { "title": "What’s the Difference Between SSL and TLS?", diff --git a/public/roadmap-content/devops.json b/public/roadmap-content/devops.json index c4d0439d2..3b197b023 100644 --- a/public/roadmap-content/devops.json +++ b/public/roadmap-content/devops.json @@ -1827,21 +1827,21 @@ }, "1oYvpFG8LKT1JD6a_9J0m": { "title": "Provisioning", - "description": "Prometheus is an open-source systems monitoring and alerting toolkit designed for reliability and scalability. It features a multi-dimensional data model, a flexible query language (PromQL), and an efficient time series database. Prometheus collects metrics from configured targets at given intervals, evaluates rule expressions, displays results, and can trigger alerts when specified conditions are observed. It operates on a pull model, scraping metrics from HTTP endpoints, and supports service discovery for dynamic environments. Prometheus is particularly well-suited for monitoring microservices and containerized environments, integrating seamlessly with systems like Kubernetes. Its ecosystem includes various exporters for third-party systems and a built-in alert manager. Widely adopted in cloud-native architectures, Prometheus is a core component of modern observability stacks, often used alongside tools like Grafana for visualization.\n\nVisit the following resources to learn more:", + "description": "Provisioning refers to the process of setting up and configuring the necessary IT infrastructure to support an application or service. This includes allocating and preparing resources such as servers, storage, networking, and software environments. Provisioning can be done manually, but in modern DevOps practices, it's typically automated using tools like Terraform, Pulumi, or CloudFormation. These tools allow for infrastructure-as-code, where the entire provisioning process is defined in version-controlled scripts or templates. This approach enables consistent, repeatable deployments across different environments, reduces human error, and facilitates rapid scaling and disaster recovery.\n\nLearn more from the following resources:", "links": [ { - "title": "Prometheus Website", - "url": "https://prometheus.io/", + "title": "What is provisioning? - RedHat", + "url": "https://www.redhat.com/en/topics/automation/what-is-provisioning", "type": "article" }, { - "title": "Explore top posts about Prometheus", - "url": "https://app.daily.dev/tags/prometheus?ref=roadmapsh", + "title": "What is provisioning? - IBM", + "url": "https://www.ibm.com/topics/provisioning", "type": "article" }, { - "title": "Introduction to the Prometheus Monitoring System | Key Concepts and Features", - "url": "https://www.youtube.com/watch?v=STVMGrYIlfg", + "title": "Open Answers: What is provisioning?", + "url": "https://www.youtube.com/watch?v=hWvDlmhASpk", "type": "video" } ] diff --git a/public/roadmap-content/frontend.json b/public/roadmap-content/frontend.json index 00286be0f..f22c6f18d 100644 --- a/public/roadmap-content/frontend.json +++ b/public/roadmap-content/frontend.json @@ -1,48 +1,12 @@ { "VlNNwIEDWqQXtqkHWJYzC": { "title": "Internet", - "description": "The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols.\n\nVisit the following resources to learn more:", - "links": [ - { - "title": "Learn How the Web Works", - "url": "https://internetfundamentals.com", - "type": "website" - }, - { - "title": "How does the Internet Work?", - "url": "https://cs.fyi/guide/how-does-internet-work", - "type": "article" - }, - { - "title": "The Internet Explained", - "url": "https://www.vox.com/2014/6/16/18076282/the-internet", - "type": "article" - }, - { - "title": "How Does the Internet Work?", - "url": "http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm", - "type": "article" - }, - { - "title": "Introduction to Internet", - "url": "/guides/what-is-internet", - "type": "article" - }, - { - "title": "How does the Internet work?", - "url": "https://www.youtube.com/watch?v=x3c1ih2NJEg", - "type": "video" - }, - { - "title": "How the Internet Works in 5 Minutes", - "url": "https://www.youtube.com/watch?v=7_LPdttKXPc", - "type": "video" - } - ] + "description": "The Internet is a global network of interconnected computer networks that use the Internet Protocol Suite (TCP/IP) to communicate. It enables the exchange of data, information, and services across the world, connecting billions of devices and users. The Internet has revolutionized communication, commerce, education, and entertainment, becoming an integral part of modern society. It supports various applications and services, from web browsing and instant messaging to streaming media and online gaming. While offering unprecedented access to information and connectivity, the Internet also raises concerns about privacy, security, and digital divide issues.", + "links": [] }, "yCnn-NfSxIybUQ2iTuUGq": { "title": "How does the internet work?", - "description": "The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols.\n\nVisit the following resources to learn more:", + "description": "The Internet works through a global network of interconnected computers and servers, communicating via standardized protocols. Data is broken into packets and routed through various network nodes using the Internet Protocol (IP). These packets travel across different physical infrastructures, including fiber optic cables, satellites, and wireless networks. The Transmission Control Protocol (TCP) ensures reliable delivery and reassembly of packets at their destination. Domain Name System (DNS) servers translate human-readable website names into IP addresses. When you access a website, your device sends a request to the appropriate server, which responds with the requested data. This process, facilitated by routers, switches, and other networking equipment, enables the seamless exchange of information across vast distances, forming the backbone of our digital communications.\n\nVisit the following resources to learn more:", "links": [ { "title": "How does the Internet Work?", @@ -59,11 +23,6 @@ "url": "/guides/what-is-internet", "type": "article" }, - { - "title": "How does the Internet work?", - "url": "https://www.youtube.com/watch?v=TNQsmPf24go", - "type": "video" - }, { "title": "How the Internet Works in 5 Minutes", "url": "https://www.youtube.com/watch?v=7_LPdttKXPc", @@ -73,8 +32,13 @@ }, "R12sArWVpbIs_PHxBqVaR": { "title": "What is HTTP?", - "description": "HTTP is the `TCP/IP` based application layer communication protocol which standardizes how the client and server communicate with each other. HTTP follows a classical \"Client-Server model\" with a client opening a connection request, then waiting until it receives a response. HTTP is a stateless protocol, that means that the server does not keep any data (state) between two requests.\n\nVisit the following resources to learn more:", + "description": "HTTP (Hypertext Transfer Protocol) is the foundation of data communication on the World Wide Web. It's an application-layer protocol that defines how messages are formatted and transmitted between web browsers and servers. HTTP operates on a request-response model: clients (usually web browsers) send requests to servers, which then respond with the requested data. The protocol is stateless, meaning each request is independent of any previous requests. HTTP supports various methods (GET, POST, PUT, DELETE, etc.) for different types of interactions with resources. HTTPS is the secure version of HTTP, using encryption to protect data in transit. HTTP/2 and HTTP/3 are more recent versions, offering improved performance through features like multiplexing and header compression. Understanding HTTP is crucial for web development, as it underpins how web applications communicate and function.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "HTTP Crash Course", + "url": "https://www.youtube.com/watch?v=qgZiUvV41TI", + "type": "course" + }, { "title": "Everything you need to know about HTTP", "url": "https://cs.fyi/guide/http-in-depth", @@ -86,35 +50,20 @@ "type": "article" }, { - "title": "How HTTPS Works ...in a comic!", + "title": "How HTTPS Works", "url": "https://howhttps.works", "type": "article" }, - { - "title": "An overview of HTTP", - "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview", - "type": "article" - }, - { - "title": "HTTP/3 From A To Z: Core Concepts", - "url": "https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/", - "type": "article" - }, { "title": "HTTP/3 Is Now a Standard: Why Use It and How to Get Started", "url": "https://thenewstack.io/http-3-is-now-a-standard-why-use-it-and-how-to-get-started/", "type": "article" - }, - { - "title": "HTTP Crash Course & Exploration", - "url": "https://www.youtube.com/watch?v=iYM2zFP3Zn0", - "type": "video" } ] }, "ZhSuu2VArnzPDp6dPQQSC": { "title": "What is Domain Name?", - "description": "A domain name is a unique, easy-to-remember address used to access websites, such as ‘[google.com](http://google.com)’, and ‘[facebook.com](http://facebook.com)’. Users can connect to websites using domain names thanks to the Domain Name System (DNS).\n\nVisit the following resources to learn more:", + "description": "A domain name is a human-readable address used to identify and access websites on the internet. It serves as a more memorable alternative to the numerical IP addresses that computers use to locate web servers. Domain names consist of two main parts: the second-level domain (usually the website or organization name) and the top-level domain (such as .com, .org, or .net). They are registered through domain registrars and must be unique within their top-level domain. Domain names are crucial for branding, marketing, and establishing an online presence. The Domain Name System (DNS) translates domain names into IP addresses, allowing users to access websites by typing in familiar names rather than complex number sequences. Domain names can be customized, transferred, and renewed, playing a vital role in the structure and accessibility of the World Wide Web.\n\nVisit the following resources to learn more:", "links": [ { "title": "What is a Domain Name?", @@ -127,26 +76,21 @@ "type": "article" }, { - "title": "A Beginners Guide to How Domain Names Work", - "url": "https://www.youtube.com/watch?v=Y4cRx19nhJk", + "title": "What is a Domain Name?", + "url": "https://www.youtube.com/watch?v=lMHzpBwPuG8", "type": "video" } ] }, "aqMaEY8gkKMikiqleV5EP": { "title": "What is hosting?", - "description": "Web hosting is an online service that allows you to publish your website files onto the internet. So, anyone who has access to the internet has access to your website.\n\nVisit the following resources to learn more:", + "description": "Web hosting is a service that allows individuals and organizations to make their websites accessible on the internet. It involves storing website files on powerful computers called servers, which are connected to a high-speed network. When users enter a domain name in their browser, the web host serves the website's content. Hosting services range from shared hosting (where multiple websites share server resources) to dedicated hosting (where a server is exclusively used by one client). Other types include VPS (Virtual Private Server) hosting, cloud hosting, and managed WordPress hosting. Web hosts typically provide additional services such as email hosting, domain registration, SSL certificates, and technical support. The choice of web hosting impacts a website's performance, security, and scalability, making it a crucial decision for any online presence.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Web Hosting Explained for Beginners", - "url": "https://www.hostinger.com/tutorials/what-is-web-hosting/", + "title": "What is web hosting?", + "url": "https://www.namecheap.com/hosting/what-is-web-hosting-definition/", "type": "article" }, - { - "title": "What Is Web Hosting? Explained", - "url": "https://www.youtube.com/watch?v=htbY9-yggB0", - "type": "video" - }, { "title": "Different Types of Web Hosting Explained", "url": "https://www.youtube.com/watch?v=AXVZYzw8geg", @@ -161,7 +105,7 @@ }, "hkxw9jPGYphmjhTjw8766": { "title": "DNS and how it works?", - "description": "The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like [nytimes.com](http://nytimes.com) or [espn.com](http://espn.com). Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources.\n\nVisit the following resources to learn more:", + "description": "DNS (Domain Name System) is a hierarchical, decentralized naming system for computers, services, or other resources connected to the Internet or a private network. It translates human-readable domain names (like [www.example.com](http://www.example.com)) into IP addresses (like 192.0.2.1) that computers use to identify each other. DNS servers distributed worldwide work together to resolve these queries, forming a global directory service. The system uses a tree-like structure with root servers at the top, followed by top-level domain servers (.com, .org, etc.), authoritative name servers for specific domains, and local DNS servers. DNS is crucial for the functioning of the Internet, enabling users to access websites and services using memorable names instead of numerical IP addresses.\n\nVisit the following resources to learn more:", "links": [ { "title": "What is DNS?", @@ -187,21 +131,6 @@ "title": "DNS and How does it Work?", "url": "https://www.youtube.com/watch?v=Wj0od2ag5sk", "type": "video" - }, - { - "title": "DNS Records", - "url": "https://www.youtube.com/watch?v=7lxgpKh_fRY", - "type": "video" - }, - { - "title": "When to add glue records to DNS settings", - "url": "https://www.youtube.com/watch?v=e48AyJOA9W8", - "type": "video" - }, - { - "title": "DNS Records for Newbies - How To Manage Website Records", - "url": "https://www.youtube.com/watch?v=YV5tkQYcvfg", - "type": "video" } ] }, @@ -211,12 +140,7 @@ "links": [ { "title": "How Browsers Work", - "url": "https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/", - "type": "article" - }, - { - "title": "Role of Rendering Engine in Browsers", - "url": "https://www.browserstack.com/guide/browser-rendering-engine", + "url": "https://www.ramotion.com/blog/what-is-web-browser/", "type": "article" }, { @@ -231,14 +155,14 @@ }, { "title": "How Do Web Browsers Work?", - "url": "https://www.youtube.com/watch?v=WjDrMKZWCt0", + "url": "https://www.youtube.com/watch?v=5rLFYtXHo9s", "type": "video" } ] }, "yWG2VUkaF5IJVVut6AiSy": { "title": "HTML", - "description": "HTML stands for HyperText Markup Language. It is used on the frontend and gives the structure to the webpage which you can style using CSS and make interactive using JavaScript.\n\nVisit the following resources to learn more:", + "description": "HTML (Hypertext Markup Language) is the standard markup language used to create web pages and web applications. It provides a structure for content on the World Wide Web, using a system of elements and attributes to define the layout and content of a document. HTML elements are represented by tags, which browsers interpret to render the visual and auditory elements of a web page. The language has evolved through several versions, with HTML5 being the current standard, introducing semantic elements, improved multimedia support, and enhanced form controls. HTML works in conjunction with CSS for styling and JavaScript for interactivity, forming the foundation of modern web development.\n\nVisit the following resources to learn more:", "links": [ { "title": "W3Schools: Learn HTML", @@ -278,14 +202,14 @@ }, { "title": "HTML Full Course - Build a Website Tutorial", - "url": "https://www.youtube.com/watch?v=pQN-pnXPaVg", + "url": "https://www.youtube.com/watch?v=kUMe1FH4CHE", "type": "video" } ] }, "z8-556o-PaHXjlytrawaF": { "title": "Writing Semantic HTML", - "description": "Semantic element clearly describes its meaning to both the browser and the developer. In HTML, semantic element are the type of elements that can be used to define different parts of a web page such as `
`, ``, `
`, `
`, `
`, etc.\n\nVisit the following resources to learn more:", + "description": "Semantic HTML refers to the use of HTML markup to reinforce the meaning of web content, rather than merely defining its appearance. It involves using HTML elements that clearly describe their purpose and content. Semantic HTML improves accessibility, SEO, and code readability. Key elements include `
`, `
`, `
`, ``). Semantic HTML helps screen readers interpret page content, enables better browser rendering, and provides clearer structure for developers. By using semantically correct elements, developers create more meaningful, accessible, and maintainable web documents that are easier for both humans and machines to understand and process.\n\nVisit the following resources to learn more:", "links": [ { "title": "Guide to Writing Semantic HTML", @@ -297,15 +221,15 @@ "url": "https://www.w3schools.com/html/html5_semantic_elements.asp", "type": "article" }, - { - "title": "Semantic Markup", - "url": "https://html.com/semantic-markup", - "type": "article" - }, { "title": "Semantic HTML - web.dev", "url": "https://web.dev/learn/html/semantic-html/", "type": "article" + }, + { + "title": "Why & When to Use Semantic HTML Elements over Divs", + "url": "https://www.youtube.com/watch?v=bOUhq46fd5g", + "type": "video" } ] }, @@ -332,18 +256,8 @@ }, "iJIqi7ngpGHWAqtgdjgxB": { "title": "Accessibility", - "description": "Web accessibility means that websites, tools, and technologies are designed and developed in such a way that people with disabilities can use them easily.\n\nVisit the following resources to learn more:", + "description": "Website accessibility is the practice of designing and developing websites that can be used by everyone, including people with disabilities. It involves implementing features and standards that make web content perceivable, operable, understandable, and robust for all users, regardless of their physical or cognitive abilities. This includes providing text alternatives for images, ensuring keyboard navigation, using sufficient color contrast, offering captions for audio content, and creating a consistent and predictable layout. Adhering to accessibility guidelines not only improves usability for people with disabilities but also enhances the overall user experience for all visitors while potentially increasing a site's reach and legal compliance.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "Developing for Web Accessibility by W3C WAI", - "url": "https://www.w3.org/WAI/tips/developing/", - "type": "article" - }, - { - "title": "Accessibility Tutorial", - "url": "https://www.w3schools.com/accessibility/index.php", - "type": "article" - }, { "title": "Accessibility for Developers by Google", "url": "https://web.dev/accessibility", @@ -363,8 +277,18 @@ }, "mH_qff8R7R6eLQ1tPHLgG": { "title": "SEO Basics", - "description": "SEO or Search Engine Optimization is the technique used to optimize your website for better rankings on search engines such as Google, Bing etc.\n\nVisit the following resources to learn more:", + "description": "SEO (Search Engine Optimization) basics involve strategies to improve a website's visibility and ranking in search engine results. Key elements include creating relevant, high-quality content, proper use of keywords, optimizing meta tags and URLs, ensuring mobile-friendliness, improving site speed, and building quality backlinks. SEO also focuses on user experience, including easy navigation and responsive design. Technical aspects like XML sitemaps, HTTPS security, and structured data markup play crucial roles. Understanding user intent, regularly updating content, and adhering to search engine guidelines are essential practices. Effective SEO combines on-page optimization, off-page tactics, and technical enhancements to increase organic traffic, improve user engagement, and enhance online presence in an increasingly competitive digital landscape.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Complete SEO Course for Beginners", + "url": "https://www.youtube.com/watch?v=xsVTqzratPs", + "type": "course" + }, + { + "title": "SEO for 2024: The Complete Guide", + "url": "https://www.youtube.com/watch?v=8YDUP-RH_4g", + "type": "course" + }, { "title": "Google Search Central — SEO Docs", "url": "https://developers.google.com/search/docs", @@ -374,27 +298,22 @@ "title": "Explore top posts about SEO", "url": "https://app.daily.dev/tags/seo?ref=roadmapsh", "type": "article" - }, - { - "title": "Complete SEO Course for Beginners", - "url": "https://www.youtube.com/watch?v=xsVTqzratPs", - "type": "video" - }, - { - "title": "SEO Expert Course", - "url": "https://www.youtube.com/watch?v=SnxeXZpZkI0", - "type": "video" } ] }, "ZhJhf1M2OphYbEmduFq-9": { "title": "CSS", - "description": "CSS or Cascading Style Sheets is the language used to style the frontend of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript.\n\nVisit the following resources to learn more:", + "description": "CSS (Cascading Style Sheets) is a styling language used to describe the presentation of a document written in HTML or XML. It defines how elements should be displayed on screen, on paper, or in other media. CSS separates the design from the content, allowing for greater flexibility and control over the layout, colors, and fonts of web pages. It uses a system of selectors to target HTML elements and apply styles to them. CSS supports responsive design through media queries, enabling the creation of layouts that adapt to different screen sizes and devices. The cascade, inheritance, and specificity are key concepts in CSS that determine how styles are applied when multiple rules target the same element. Modern CSS includes features like Flexbox and Grid for advanced layout control, animations, and transitions for creating dynamic user interfaces.\n\nVisit the following resources to learn more:", "links": [ { - "title": "W3Schools — Learn CSS", - "url": "https://www.w3schools.com/css/", - "type": "article" + "title": "CSS Complete Course", + "url": "https://youtu.be/n4R2E7O-Ngo", + "type": "course" + }, + { + "title": "HTML & CSS Full Course - Beginner to Pro", + "url": "https://www.youtube.com/watch?v=G3e-cpL7ofc", + "type": "course" }, { "title": "Web.dev by Google — Learn CSS", @@ -405,16 +324,6 @@ "title": "Explore top posts about CSS", "url": "https://app.daily.dev/tags/css?ref=roadmapsh", "type": "article" - }, - { - "title": "CSS Complete Course", - "url": "https://youtu.be/n4R2E7O-Ngo", - "type": "video" - }, - { - "title": "HTML and CSS Tutorial", - "url": "https://www.youtube.com/watch?v=D-h8L5hgW-w", - "type": "video" } ] }, @@ -432,21 +341,11 @@ "url": "https://web.dev/learn/css/", "type": "article" }, - { - "title": "Learn to Code HTML & CSS", - "url": "https://learn.shayhowe.com/html-css/building-your-first-web-page/", - "type": "article" - }, { "title": "CSS Crash Course For Absolute Beginners", "url": "https://www.youtube.com/watch?v=yfoY53QXEnI", "type": "video" }, - { - "title": "HTML and CSS Tutorial", - "url": "https://www.youtube.com/watch?v=D-h8L5hgW-w", - "type": "video" - }, { "title": "CSS Masterclass - Tutorial & Course for Beginners", "url": "https://www.youtube.com/watch?v=FqmB-Zj2-PA", @@ -456,43 +355,18 @@ }, "dXeYVMXv-3MRQ1ovOUuJW": { "title": "Making Layouts", - "description": "Float, grid, flexbox, positioning, display and box model are some of the key topics that are used for making layouts. Use the resources below to learn about these topics:\n\nVisit the following resources to learn more:", + "description": "Making layouts in web design involves organizing content and visual elements on a page to create an effective and aesthetically pleasing user interface. Modern layout techniques primarily use CSS, with key approaches including:\n\n1. Flexbox for one-dimensional layouts (rows or columns)\n2. CSS Grid for two-dimensional layouts\n3. Responsive design principles for adaptability across devices\n4. CSS frameworks like Bootstrap or Tailwind for rapid development\n5. Custom CSS properties (variables) for consistent styling\n6. Media queries for device-specific adjustments\n7. CSS positioning and float for specific element placement\n\nThese tools allow designers to create complex, responsive layouts that maintain consistency and usability across various screen sizes and devices. Effective layouts consider visual hierarchy, user flow, accessibility, and content prioritization to enhance the overall user experience and achieve design goals.\n\nVisit the following resources to learn more:", "links": [ { "title": "Learn and Practice Flexbox", "url": "https://flexboxfroggy.com/", "type": "article" }, - { - "title": "Game for learning CSS Grid", - "url": "https://cssgridgarden.com/", - "type": "article" - }, - { - "title": "All about Floats", - "url": "https://css-tricks.com/all-about-floats/", - "type": "article" - }, - { - "title": "Positioning Types: How Do They Differ?", - "url": "https://css-tricks.com/absolute-relative-fixed-positioining-how-do-they-differ/", - "type": "article" - }, { "title": "The Box Model", "url": "https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model", "type": "article" }, - { - "title": "A Complete Guide to Flexbox", - "url": "https://css-tricks.com/snippets/css/a-guide-to-flexbox", - "type": "article" - }, - { - "title": "A Complete Guide to Grid", - "url": "https://css-tricks.com/snippets/css/complete-guide-grid", - "type": "article" - }, { "title": "Learn CSS Grid - Course", "url": "https://cssgrid.io/", @@ -507,12 +381,12 @@ }, "TKtWmArHn7elXRJdG6lDQ": { "title": "Responsive Design", - "description": "Responsive Web Designing is the technique to make your webpages look good on all screen sizes. There are certain techniques used to achieve that e.g. CSS media queries, percentage widths, min or max widths heights etc.\n\nVisit the following resources to learn more:", + "description": "Responsive web design is an approach to web development that creates dynamic changes to the appearance of a website, depending on the screen size and orientation of the device being used to view it. It uses fluid grids, flexible images, and CSS media queries to adapt the layout to the viewing environment. The goal is to build web pages that detect the visitor's screen size and orientation and change the layout accordingly, providing an optimal viewing experience across a wide range of devices, from desktop computers to mobile phones. This approach eliminates the need for a different design and development phase for each new gadget on the market, while ensuring a consistent and intuitive user experience across all devices.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Responsive Web Design", - "url": "https://www.w3schools.com/css/css_rwd_intro.asp", - "type": "article" + "title": "Conquering Responsive Layouts", + "url": "https://courses.kevinpowell.co/conquering-responsive-layouts", + "type": "course" }, { "title": "Learn Responsive Design", @@ -524,16 +398,6 @@ "url": "https://kinsta.com/blog/responsive-web-design/", "type": "article" }, - { - "title": "The guide to responsive web design in 2022", - "url": "https://webflow.com/blog/responsive-web-design", - "type": "article" - }, - { - "title": "5 simple tips to making responsive layouts the easy way", - "url": "https://www.youtube.com/watch?v=VQraviuwbzU", - "type": "video" - }, { "title": "Introduction To Responsive Web Design", "url": "https://www.youtube.com/watch?v=srvUrASNj0s", @@ -543,7 +407,7 @@ }, "ODcfFEorkfJNupoQygM53": { "title": "JavaScript", - "description": "JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on.\n\nVisit the following resources to learn more:", + "description": "JavaScript is a high-level, interpreted programming language that is a core technology of the World Wide Web. It allows for dynamic, client-side scripting in web browsers, enabling interactive web pages and user interfaces. JavaScript supports object-oriented, imperative, and functional programming styles. It's also used server-side through Node.js, for desktop application development with frameworks like Electron, and in various other contexts. The language features dynamic typing, first-class functions, and prototype-based object-orientation. JavaScript's ubiquity in web development, coupled with its versatility and continuous evolution through ECMAScript standards, has made it one of the most popular programming languages in use today.\n\nVisit the following resources to learn more:", "links": [ { "title": "Visit Dedicated JavaScript Roadmap", @@ -564,17 +428,12 @@ "title": "Explore top posts about JavaScript", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", "type": "article" - }, - { - "title": "JavaScript Crash Course for Beginners", - "url": "https://youtu.be/hdI2bqOjy3c?t=2", - "type": "video" } ] }, "A4brX0efjZ0FFPTB4r6U0": { "title": "Fetch API / Ajax (XHR)", - "description": "Ajax is the technique that lets us send and receive the data asynchronously from the servers e.g. updating the user profile or asynchronously fetching the list of searched products without reloading the page.\n\nVisit the following resources to learn more:", + "description": "The Fetch API is a modern JavaScript interface for making HTTP requests in web browsers. It provides a more powerful and flexible way to send and receive data compared to older methods like XMLHttpRequest. Fetch uses Promises, allowing for cleaner asynchronous code. It supports various data formats, custom headers, and different types of requests (GET, POST, etc.). The API is designed to be extensible and integrates well with other web technologies. While simpler for basic use cases, Fetch also handles complex scenarios like request cancellation and reading streamed responses. It's widely supported in modern browsers and has become the standard for network requests in client-side JavaScript applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "Fetch API MDN Docs", @@ -607,21 +466,6 @@ "url": "https://javascript.info/dom-nodes", "type": "article" }, - { - "title": "Eloquent JavaScript, 3rd Edition: The Document Object Model", - "url": "https://eloquentjavascript.net/14_dom.html", - "type": "article" - }, - { - "title": "JavaScript HTML DOM", - "url": "https://www.w3schools.com/js/js_htmldom.asp", - "type": "article" - }, - { - "title": "JavaScript DOM", - "url": "https://www.javascripttutorial.net/javascript-dom/", - "type": "article" - }, { "title": "Learn the HTML DOM with Exercises - CodeGuage", "url": "https://www.codeguage.com/courses/js/html-dom-introduction", @@ -659,33 +503,38 @@ "type": "article" }, { - "title": "JavaScript Crash Course for Beginners", - "url": "https://youtu.be/hdI2bqOjy3c?t=2", - "type": "video" - }, - { - "title": "Build a Netflix Landing Page Clone with HTML, CSS & JS", - "url": "https://youtu.be/P7t13SGytRk?t=22", + "title": "JavaScript Tutorial Full Course - Beginner to Pro (2024)", + "url": "https://www.youtube.com/watch?v=EerdGm-ehJQ", "type": "video" } ] }, "MXnFhZlNB1zTsBFDyni9H": { "title": "VCS Hosting", - "description": "There are different repository hosting services with the most famous one being GitHub, GitLab and BitBucket. I would recommend creating an account on GitHub because that is where most of the OpenSource work is done and most of the developers are.\n\nVisit the following resources to learn more:", + "description": "Repo hosting services provide platforms for storing, managing, and collaborating on software projects using version control systems, primarily Git. These services offer features like issue tracking, pull requests, code review tools, wikis, and continuous integration/continuous deployment (CI/CD) pipelines. Popular platforms include GitHub, GitLab, Bitbucket, and SourceForge, each with unique offerings. GitHub, owned by Microsoft, is the largest and most widely used, known for its open-source community. GitLab offers a complete DevOps platform with built-in CI/CD. Bitbucket, part of Atlassian's suite, integrates well with other Atlassian tools. These services facilitate team collaboration, code sharing, and project management, making them integral to modern software development workflows. They also often provide features like access control, branch protection, and integration with various development tools, enhancing the overall development process.\n\nVisit the following resources to learn more:", "links": [ { - "title": "GitHub: Where the world builds software", + "title": "Learn Git & Github", + "url": "/git-github", + "type": "article" + }, + { + "title": "Codeberg Website", + "url": "https://codeberg.org/", + "type": "article" + }, + { + "title": "GitHub Website", "url": "https://github.com", - "type": "opensource" + "type": "article" }, { - "title": "GitLab: Iterate faster, innovate together", + "title": "GitLab Website", "url": "https://gitlab.com", - "type": "opensource" + "type": "article" }, { - "title": "BitBucket: The Git solution for professional teams", + "title": "BitBucket Website", "url": "https://bitbucket.com", "type": "article" } @@ -693,8 +542,13 @@ }, "NIY7c4TQEEHx0hATu-k5C": { "title": "Version Control Systems", - "description": "Version control systems allow you to track changes to your codebase/files over time. They allow you to go back to some previous version of the codebase without any issues. Also, they help in collaborating with people working on the same code – if you’ve ever collaborated with other people on a project, you might already know the frustration of copying and merging the changes from someone else into your codebase; version control systems allow you to get rid of this issue.\n\nVisit the following resources to learn more:", + "description": "Version Control Systems (VCS) are tools that help developers track and manage changes to code over time. They allow multiple people to work on a project simultaneously, maintaining a history of modifications. Git is the most popular VCS, known for its distributed nature and branching model. Other systems include Subversion (SVN) and Mercurial. VCS enables features like branching for parallel development, merging to combine changes, and reverting to previous states. They facilitate collaboration through remote repositories, pull requests, and code reviews. VCS also provides backup and recovery capabilities, conflict resolution, and the ability to tag specific points in history. By maintaining a detailed record of changes and supporting non-linear development, VCS has become an essential tool in modern software development, enhancing productivity, code quality, and team collaboration.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Learn Git and GitHub", + "url": "/git-github", + "type": "article" + }, { "title": "Git Documentation", "url": "https://git-scm.com/docs", @@ -706,29 +560,19 @@ "type": "article" }, { - "title": "Version Control System Introduction", - "url": "https://www.youtube.com/watch?v=zbKdDsNNOhg", - "type": "video" - }, - { - "title": "Git & GitHub Crash Course For Beginners", - "url": "https://www.youtube.com/watch?v=SWYqp7iY_Tc", - "type": "video" - }, - { - "title": "Learn Git in 20 Minutes", - "url": "https://youtu.be/Y9XZQO1n_7c?t=21", + "title": "What is a Version Control System and why you should always use it", + "url": "https://www.youtube.com/watch?v=IeXhYROClZk", "type": "video" } ] }, "R_I4SGYqLk5zze5I1zS_E": { "title": "Git", - "description": "[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.\n\nVisit the following resources to learn more:", + "description": "Git is a distributed version control system designed to handle projects of any size with speed and efficiency. Created by Linus Torvalds in 2005, Git tracks changes in source code during software development, allowing multiple developers to work together on non-linear development. It provides strong support for branching, merging, and distributed development workflows. Git maintains a complete history of all changes, enabling easy rollbacks and comparisons between versions. Its distributed nature means each developer has a full copy of the repository, allowing for offline work and backup. Git's speed, flexibility, and robust branching and merging capabilities have made it the most widely used version control system in software development, particularly for open-source projects.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Learn Git with Tutorials, News and Tips - Atlassian", - "url": "https://www.atlassian.com/git", + "title": "Learn Git & GitHub", + "url": "/git-github", "type": "article" }, { @@ -755,13 +599,8 @@ }, "IqvS1V-98cxko3e9sBQgP": { "title": "Package Managers", - "description": "Package managers allow you to manage the dependencies (external code written by you or someone else) that your project needs to work correctly.\n\nVisit the following resources to learn more:", + "description": "Package managers are tools that automate the process of installing, updating, configuring, and removing software packages in a consistent manner. They handle dependency resolution, version management, and package distribution for programming languages and operating systems. Popular package managers include npm for JavaScript, pip for Python, and apt for Debian-based Linux distributions. These tools maintain a centralized repository of packages, allowing developers to easily share and reuse code. Package managers simplify project setup, ensure consistency across development environments, and help manage complex dependency trees. They play a crucial role in modern software development by streamlining workflow, enhancing collaboration, and improving code reusability.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "Modern JavaScript for Dinosaurs", - "url": "https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html", - "type": "article" - }, { "title": "An Absolute Beginners Guide to Using npm", "url": "https://nodesource.com/blog/an-absolute-beginners-guide-to-using-npm/", @@ -772,11 +611,6 @@ "url": "https://yarnpkg.com/en/docs/getting-started", "type": "article" }, - { - "title": "NPM tutorial for Beginners", - "url": "https://www.youtube.com/watch?v=2V1UUhBJ62Y", - "type": "video" - }, { "title": "NPM Crash Course", "url": "https://www.youtube.com/watch?v=jHDhaSSKmB0", @@ -791,8 +625,13 @@ }, "qmTVMJDsEhNIkiwE_UTYu": { "title": "GitHub", - "description": "[GitHub](https://github.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features.\n\nVisit the following resources to learn more:", + "description": "GitHub has become a central hub for open-source projects and is widely used by developers, companies, and organizations for both private and public repositories. It was acquired by Microsoft in 2018 but continues to operate as a relatively independent entity. GitHub's popularity has made it an essential tool in modern software development workflows and a key platform for showcasing coding projects and contributing to open-source software.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Learn Git & GitHub", + "url": "/git-github", + "type": "article" + }, { "title": "GitHub: Quickstart", "url": "https://docs.github.com/en/get-started/quickstart/hello-world", @@ -812,38 +651,23 @@ "title": "What is GitHub?", "url": "https://www.youtube.com/watch?v=w3jLJU7DT5E", "type": "video" - }, - { - "title": "Git vs. GitHub: Whats the difference?", - "url": "https://www.youtube.com/watch?v=wpISo9TNjfU", - "type": "video" - }, - { - "title": "Git and GitHub for Beginners", - "url": "https://www.youtube.com/watch?v=RGOj5yH7evk", - "type": "video" - }, - { - "title": "Git and GitHub - CS50 Beyond 2019", - "url": "https://www.youtube.com/watch?v=eulnSXkhE7I", - "type": "video" } ] }, "zIoSJMX3cuzCgDYHjgbEh": { "title": "GitLab", - "description": "[GitLab](https://gitlab.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features.\n\nVisit the following resources to learn more:", + "description": "GitLab is a web-based DevOps platform that provides a complete solution for the software development lifecycle. GitLab emphasizes an all-in-one approach, integrating various development tools into a single platform. It's available as both a cloud-hosted service and a self-hosted solution, giving organizations flexibility in deployment. GitLab's focus on DevOps practices and its comprehensive feature set make it popular among enterprises and teams seeking a unified platform for their entire development workflow. While similar to GitHub in many respects, GitLab's integrated CI/CD capabilities and self-hosting options are often cited as key differentiators.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "GitLab Website", - "url": "https://gitlab.com/", - "type": "opensource" - }, { "title": "GitLab Documentation", "url": "https://docs.gitlab.com/", "type": "article" }, + { + "title": "GitLab Website", + "url": "https://gitlab.com/", + "type": "article" + }, { "title": "Development: Connect git to GitLab for Small Projects", "url": "https://thenewstack.io/development-connect-git-to-gitlab-for-small-projects/", @@ -858,7 +682,7 @@ }, "DILBiQp7WWgSZ5hhtDW6A": { "title": "Bitbucket", - "description": "[BitBucket](https://bitbucket.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features.\n\nVisit the following resources to learn more:", + "description": "Bitbucket is a web-based version control repository hosting service owned by Atlassian. It provides Git and Mercurial version control systems for both open source and private projects. Bitbucket offers features such as pull requests, branch permissions, and in-line commenting for code review. It integrates seamlessly with other Atlassian products like Jira and Trello, facilitating project management and issue tracking. Bitbucket provides both cloud-hosted and self-hosted options, catering to different organizational needs. It supports continuous integration and deployment (CI/CD) through Bitbucket Pipelines.\n\nVisit the following resources to learn more:", "links": [ { "title": "How to use BitBucket?", @@ -879,13 +703,8 @@ }, "yrq3nOwFREzl-9EKnpU-e": { "title": "yarn", - "description": "Yarn is a software packaging system developed in 2016 by Facebook for Node.js JavaScript runtime environment that provides speed, consistency, stability, and security as an alternative to npm (package manager).\n\nVisit the following resources to learn more:", + "description": "Yarn is a fast, reliable, and secure package manager for JavaScript, developed by Facebook as an alternative to npm (Node Package Manager). It addresses issues of consistency, security, and performance in dependency management. Yarn uses a lockfile to ensure consistent installations across different environments and offers parallel installation of packages, significantly speeding up the process. It features offline mode, allowing installation from cached packages, and provides improved network performance through request queuing and retries. Yarn's focus on security includes checksum verification of every installed package. While it shares many features with npm, Yarn's emphasis on speed, reliability, and security has made it a popular choice among developers, especially for larger projects. Recent versions of Yarn (Berry) introduce new features like Plug'n'Play for even faster and more efficient package resolution.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "Modern JavaScript for Dinosaurs", - "url": "https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html", - "type": "article" - }, { "title": "Yarn - Getting Started", "url": "https://yarnpkg.com/en/docs/getting-started", @@ -905,7 +724,7 @@ }, "SLxA5qJFp_28TRzr1BjxZ": { "title": "pnpm", - "description": "PNPM is an alternative package manager for Node. js which stands for “Performant NPM”. The main purpose of PNPM is to hold all the packages at a global (centralized) store and use them if needed by other projects too by creating hard links to it.\n\nVisit the following resources to learn more:", + "description": "pnpm (performant npm) is a fast, disk-space efficient package manager for JavaScript and Node.js projects. It addresses inefficiencies in npm and Yarn by using a unique approach to storing and linking dependencies. pnpm creates a single, global store for all packages and uses hard links to reference them in project node\\_modules, significantly reducing disk space usage and installation time. It strictly adheres to package.json specifications, ensuring consistent installs across environments. pnpm offers features like workspace support for monorepos, side-by-side versioning, and improved security through better isolation of dependencies. While less widely adopted than npm or Yarn, pnpm's performance benefits and efficient disk usage are attracting increasing attention in the JavaScript community.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website", @@ -916,12 +735,17 @@ "title": "Meet PNPM: The Faster, More Performant NPM", "url": "https://blog.bitsrc.io/pnpm-javascript-package-manager-4b5abd59dc9", "type": "article" + }, + { + "title": "Get started with pnpm", + "url": "https://www.youtube.com/watch?v=MvbReZDSKHI", + "type": "video" } ] }, "ib_FHinhrw8VuSet-xMF7": { "title": "npm", - "description": "npm is a package manager for the JavaScript programming language maintained by npm, Inc. npm is the default package manager for the JavaScript runtime environment Node.js.\n\nVisit the following resources to learn more:", + "description": "npm (Node Package Manager) is the default package manager for Node.js, providing a vast ecosystem of reusable JavaScript code. It allows developers to easily share, discover, and install packages (libraries and tools) for their projects. npm consists of a command-line interface for package installation and management, and an online repository of open-source packages. It handles dependency management, version control, and script running for Node.js projects. The npm registry is the largest software registry in the world, containing over a million packages. npm's package.json file defines project metadata and dependencies, enabling reproducible builds across different environments. Despite competition from alternatives like Yarn, npm remains the most widely used package manager in the JavaScript ecosystem.\n\nVisit the following resources to learn more:", "links": [ { "title": "How to NPM", @@ -933,11 +757,6 @@ "url": "https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html", "type": "article" }, - { - "title": "An Absolute Beginners Guide to Using npm", - "url": "https://nodesource.com/blog/an-absolute-beginners-guide-to-using-npm/", - "type": "article" - }, { "title": "Explore top posts about NPM", "url": "https://app.daily.dev/tags/npm?ref=roadmapsh", @@ -947,11 +766,6 @@ "title": "NPM tutorial for Beginners", "url": "https://www.youtube.com/watch?v=2V1UUhBJ62Y", "type": "video" - }, - { - "title": "NPM Crash Course", - "url": "https://www.youtube.com/watch?v=jHDhaSSKmB0", - "type": "video" } ] }, @@ -960,8 +774,8 @@ "description": "Web frameworks are designed to write web applications. Frameworks are collections of libraries that aid in the development of a software product or website. Frameworks for web application development are collections of various tools. Frameworks vary in their capabilities and functions, depending on the tasks set. They define the structure, establish the rules, and provide the development tools required.\n\nVisit the following resources to learn more:", "links": [ { - "title": "What is the difference between a framework and a library?", - "url": "https://www.youtube.com/watch?v=D_MO9vIRBcA", + "title": "15 crazy new JS framework features you don’t know yet", + "url": "https://www.youtube.com/watch?v=466U-2D86bc", "type": "video" }, { @@ -973,7 +787,7 @@ }, "-bHFIiXnoUQSov64WI9yo": { "title": "Angular", - "description": "Angular is a component based front-end development framework built on TypeScript which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more.\n\nVisit the following resources to learn more:", + "description": "Angular is a popular open-source web application framework developed and maintained by Google. It uses TypeScript, a statically typed superset of JavaScript, to build scalable and efficient single-page applications (SPAs). Angular follows a component-based architecture, where the user interface is composed of reusable, self-contained components. The framework provides features like two-way data binding, dependency injection, and a powerful template syntax, which simplify the development of complex web applications. Angular also includes a comprehensive set of tools for testing, routing, and state management, making it a full-fledged solution for front-end development. Its modular structure and emphasis on best practices make it particularly suitable for large-scale enterprise applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "Visit Dedicated Angular Roadmap", @@ -999,7 +813,7 @@ }, "ERAdwL1G9M1bnx-fOm5ZA": { "title": "Vue.js", - "description": "Vue.js is an open-source JavaScript framework for building user interfaces and single-page applications. It is mainly focused on front end development.\n\nVisit the following resources to learn more:", + "description": "Vue.js is a progressive JavaScript framework for building user interfaces. It's designed to be incrementally adoptable, allowing developers to integrate it into projects gradually. Vue uses a template-based approach with a virtual DOM for efficient rendering. It features a reactive and composable component system, making it easy to organize and reuse code. Vue's core library focuses on the view layer, but it can be easily extended with official and community-built tools for state management, routing, and build tooling. Known for its gentle learning curve and flexibility, Vue has gained popularity for both small projects and large-scale applications. Its performance, lightweight nature, and comprehensive documentation have contributed to its widespread adoption in the web development community.\n\nVisit the following resources to learn more:", "links": [ { "title": "Visit Dedicated Vue Roadmap", @@ -1011,16 +825,6 @@ "url": "https://vuejs.org/", "type": "article" }, - { - "title": "Official Getting Started", - "url": "https://vuejs.org/v2/guide/", - "type": "article" - }, - { - "title": "Meet Vue.js, the Flexible JavaScript Framework", - "url": "https://thenewstack.io/meet-vue-js-flexible-javascript-framework/", - "type": "article" - }, { "title": "Explore top posts about Vue.js", "url": "https://app.daily.dev/tags/vuejs?ref=roadmapsh", @@ -1028,20 +832,20 @@ }, { "title": "Vue.js Course for Beginners", - "url": "https://www.youtube.com/watch?v=FXpIoQ_rT_c", - "type": "video" - }, - { - "title": "Vue.js Crash Course", - "url": "https://www.youtube.com/watch?v=qZXt1Aom3Cs", + "url": "https://www.youtube.com/watch?v=VeNfHj6MhgA", "type": "video" } ] }, "tG5v3O4lNIFc2uCnacPak": { "title": "React", - "description": "React is the most popular front-end JavaScript library for building user interfaces. React can also render on the server using Node and power mobile apps using React Native.\n\nVisit the following resources to learn more:", + "description": "React is an open-source JavaScript library for building user interfaces, primarily for single-page applications. Developed and maintained by Facebook, it allows developers to create reusable UI components that efficiently update and render as data changes. React uses a virtual DOM for performance optimization and supports a unidirectional data flow. Its component-based architecture promotes modularity and reusability. React's ecosystem includes tools like Redux for state management and React Native for mobile app development. The library's declarative nature, efficient rendering, and strong community support have made it one of the most popular choices for front-end development in modern web applications.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Full Stack React Developer Course", + "url": "https://www.youtube.com/watch?v=Bvwq_S0n2pk", + "type": "course" + }, { "title": "Visit Dedicated React Roadmap", "url": "https://roadmap.sh/react", @@ -1052,45 +856,25 @@ "url": "https://react.dev", "type": "article" }, - { - "title": "Official Getting Started", - "url": "https://react.dev/learn/tutorial-tic-tac-toe", - "type": "article" - }, { "title": "Explore top posts about React", "url": "https://app.daily.dev/tags/react?ref=roadmapsh", "type": "article" - }, - { - "title": "React JS Course for Beginners", - "url": "https://www.youtube.com/watch?v=nTeuhbP7wdE", - "type": "video" - }, - { - "title": "React Course - Beginners Tutorial for React JavaScript Library [2022]", - "url": "https://www.youtube.com/watch?v=bMknfKXIFA8", - "type": "video" - }, - { - "title": "Understanding Reacts UI Rendering Process", - "url": "https://www.youtube.com/watch?v=i793Qm6kv3U", - "type": "video" } ] }, "ZR-qZ2Lcbu3FtqaMd3wM4": { "title": "Svelte", - "description": "Svelte is a javascript framework that unlike Vue and React does not use vertical DOM diffing but instead knows exactly what and where to update when the state changes. It's mainly focused on frontend and building user interfaces.\n\nVisit the following resources to learn more:", + "description": "Svelte is a modern JavaScript framework for building user interfaces that takes a unique approach to web development. Unlike traditional frameworks that do most of their work in the browser, Svelte shifts that work into a compile step that happens when you build your app. It compiles your code to efficient vanilla JavaScript, resulting in smaller bundle sizes and better runtime performance. Svelte uses a component-based architecture and features a simple, intuitive syntax that allows developers to write less code. It includes built-in state management, CSS scoping, and animations. Svelte's approach eliminates the need for a virtual DOM, leading to faster initial loads and updates. Its simplicity and performance benefits have been gaining it increasing popularity in the front-end development community.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Svelte Website", - "url": "https://svelte.dev/", - "type": "article" + "title": "Svelte Course Playlist for beginners", + "url": "https://www.youtube.com/playlist?list=PL4cUxeGkcC9hlbrVO_2QFVqVPhlZmz7tO", + "type": "course" }, { - "title": "Svelte Documentation", - "url": "https://svelte.dev/docs", + "title": "Svelte Website", + "url": "https://svelte.dev/", "type": "article" }, { @@ -1107,17 +891,12 @@ "title": "Explore top posts about Svelte", "url": "https://app.daily.dev/tags/svelte?ref=roadmapsh", "type": "article" - }, - { - "title": "Svelte Course Playlist for beginners", - "url": "https://www.youtube.com/playlist?list=PL4cUxeGkcC9hlbrVO_2QFVqVPhlZmz7tO", - "type": "video" } ] }, "DxOSKnqAjZOPP-dq_U7oP": { "title": "Solid JS", - "description": "Solid is a reactive JavaScript toolkit for building user interfaces without a virtual DOM. To ensure that only the relevant code is executed when a state update occurs, it compiles templates down to real DOM nodes once and wraps modifications into fine-grained reactions.\n\nVisit the following resources to learn more:", + "description": "SolidJS is a declarative, efficient, and flexible JavaScript library for building user interfaces. It uses a fine-grained reactivity system that updates only what changes, resulting in high performance. SolidJS compiles templates to real DOM nodes and updates them in-place, avoiding the overhead of a virtual DOM. It offers a syntax similar to React, making it familiar to many developers, but with a different underlying mechanism. SolidJS supports JSX, provides built-in state management, and emphasizes composition over inheritance. Its small size and lack of runtime overhead make it particularly suitable for applications requiring high performance. While newer compared to some frameworks, SolidJS is gaining popularity for its simplicity, performance, and developer-friendly approach to reactive programming.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website - SolidJS", @@ -1133,23 +912,44 @@ "title": "Explore top posts about JavaScript", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", "type": "article" + }, + { + "title": "SolidJS in 100 Seconds", + "url": "https://www.youtube.com/watch?v=hw3Bx5vxKl0", + "type": "video" } ] }, "N5DCb6bDfgUnSdHPLYY4g": { "title": "Qwik", - "description": "Qwik is a new kind of web framework that can deliver instant loading web applications at any size or complexity. Your sites and apps can boot with about 1kb of JS (regardless of application complexity), and achieve consistent performance at scale.\n\nRead more about Qwik [on the official website](https://qwik.builder.io/).", - "links": [] + "description": "Qwik is an open-source front-end framework designed for optimal performance and near-instant loading of web applications. It focuses on delivering a \"resumable\" application model, where the app can start running with minimal JavaScript downloaded. Qwik achieves this through fine-grained lazy loading, serialization of the application state, and prefetching. It uses a unique approach to hydration, only loading JavaScript for interactive elements when needed. Qwik is built for modern web standards and aims to solve performance issues common in large-scale web applications. While still relatively new compared to established frameworks, Qwik's innovative approach to performance optimization is garnering attention in the web development community.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Qwik Website", + "url": "https://qwik.dev", + "type": "article" + }, + { + "title": "Qwik… the world's first O(1) JavaScript framework?", + "url": "https://www.youtube.com/watch?v=x2eF3YLiNhY", + "type": "video" + } + ] }, "XDTD8el6OwuQ55wC-X4iV": { "title": "Writing CSS", - "description": "The way we write CSS in our modern front-end applications is completely different from how we used to write CSS before. There are methods such as Styled Components, CSS Modules, Styled JSX, Emotion, etc", + "description": "Modern CSS emphasizes responsive design with techniques like media queries and fluid typography. It also includes methodologies like CSS-in-JS and utility-first frameworks (e.g., Tailwind CSS). Features such as CSS Logical Properties improve internationalization, while CSS Houdini allows for more powerful custom styling. Modern CSS focuses on performance optimization, maintainability, and creating adaptive, accessible designs across various devices and screen sizes, significantly improving the capabilities and efficiency of web styling.", "links": [] }, "eghnfG4p7i-EDWfp3CQXC": { "title": "Tailwind", - "description": "CSS Framework that provides atomic CSS classes to help you style components e.g. `flex`, `pt-4`, `text-center` and `rotate-90` that can be composed to build any design, directly in your markup.\n\nVisit the following resources to learn more:", + "description": "Tailwind CSS is a utility-first CSS framework that provides low-level utility classes to build custom designs without leaving your HTML. It offers a highly customizable set of pre-defined classes for layout, typography, color, and more, allowing rapid UI development. Tailwind emphasizes flexibility and composability, enabling developers to create unique designs without writing custom CSS. It uses a mobile-first approach and includes a built-in purge feature to remove unused styles in production, resulting in smaller file sizes. Tailwind's philosophy promotes consistency in design while maintaining the freedom to create custom looks. Its popularity has grown due to its efficiency in prototyping and building responsive designs quickly.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Tailwind CSS Full Course for Beginners", + "url": "https://www.youtube.com/watch?v=lCxcTsOHrjo", + "type": "course" + }, { "title": "Tailwind Website", "url": "https://tailwindcss.com", @@ -1160,16 +960,6 @@ "url": "https://app.daily.dev/tags/css?ref=roadmapsh", "type": "article" }, - { - "title": "Tailwind CSS Full Course for Beginners", - "url": "https://www.youtube.com/watch?v=lCxcTsOHrjo", - "type": "video" - }, - { - "title": "Tailwind CSS Crash Course", - "url": "https://www.youtube.com/watch?v=UBOj6rqRUME", - "type": "video" - }, { "title": "Should You Use Tailwind CSS?", "url": "https://www.youtube.com/watch?v=hdGsFpZ0J2E", @@ -1184,38 +974,28 @@ }, "nPg_YWpMJtlhU2t2UD_6B": { "title": "CSS Architecture", - "description": "CSS is notoriously difficult to manage in large, complex, rapidly-iterated systems. There are different ways of writing CSS that allows in writing more maintainable CSS.\n\nVisit the following resources to learn more:", + "description": "CSS architecture refers to the methodologies and organizational strategies used to structure and maintain CSS code in large-scale web projects. It focuses on creating scalable, maintainable, and modular stylesheets to manage the growing complexity of web applications. Key concepts include naming conventions (like BEM or SMACSS), component-based design, separation of concerns, and the use of preprocessors (such as Sass or Less). CSS architecture often employs techniques like CSS modules, utility classes, or CSS-in-JS solutions to improve code reusability and reduce specificity conflicts. The goal is to create a systematic approach to styling that enhances collaboration among developers, reduces code duplication, and facilitates easier updates and maintenance of the visual design across an entire application or website.\n\nVisit the following resources to learn more:", "links": [ { - "title": "A Look at Some CSS Methodologies", - "url": "https://www.webfx.com/blog/web-design/css-methodologies/", - "type": "article" - }, - { - "title": "BEM Official Website", - "url": "https://en.bem.info", - "type": "article" - }, - { - "title": "OOCSS Official Website", - "url": "http://oocss.org/", - "type": "article" - }, - { - "title": "SMACSS Official Website", - "url": "http://smacss.com/", + "title": "How to Organize Your CSS with a Modular Architecture", + "url": "https://snipcart.com/blog/organize-css-modular-architecture", "type": "article" }, { "title": "Explore top posts about Architecture", "url": "https://app.daily.dev/tags/architecture?ref=roadmapsh", "type": "article" + }, + { + "title": "Modern CSS For Dynamic Component-Based Architecture", + "url": "https://www.youtube.com/watch?v=Y50iqMlrqU8", + "type": "video" } ] }, "UTW1pP59dUehuf0zeHXqL": { "title": "CSS Preprocessors", - "description": "CSS Preprocessors are scripting languages that extend the default capabilities of CSS. They enable us to use logic in our CSS code, such as variables, nesting, inheritance, mixins, functions, and mathematical operations.\n\nVisit the following resources to learn more:", + "description": "CSS preprocessors are scripting languages that extend the capabilities of standard CSS, allowing developers to write more maintainable and efficient stylesheets. They introduce features like variables, nesting, mixins, functions, and mathematical operations, which are then compiled into standard CSS. Popular preprocessors include Sass, Less, and Stylus. These tools enable developers to organize styles more logically, reuse code more effectively, and create complex CSS structures with less repetition. Preprocessors often support features like partials for modular stylesheets and built-in color manipulation functions. By using a preprocessor, developers can write more DRY (Don't Repeat Yourself) code, manage large-scale projects more easily, and potentially improve the performance of their stylesheets through optimization during the compilation process.\n\nVisit the following resources to learn more:", "links": [ { "title": "Explore top posts about CSS", @@ -1239,31 +1019,21 @@ "type": "article" }, { - "title": "BEM 101", - "url": "https://css-tricks.com/bem-101", - "type": "article" - }, - { - "title": "BEM Tutorials", - "url": "https://en.bem.info/tutorials/", + "title": "5 Reasons To Use BEM Notation", + "url": "https://www.elpassion.com/blog/5-reasons-to-use-bem-a", "type": "article" } ] }, "kukEE5rMSPa4NeNjx21kt": { "title": "Sass", - "description": "Sass is a preprocessor scripting language that is interpreted or compiled into Cascading Style Sheets. It lets you write maintainable CSS and provides features like variable, nesting, mixins, extension, functions, loops, conditionals and so on.\n\nVisit the following resources to learn more:", + "description": "Sass (Syntactically Awesome Style Sheets) is a mature, stable, and powerful professional-grade CSS extension language. It extends CSS with features like variables, nested rules, mixins, inline imports, and more, all with fully CSS-compatible syntax. Sass allows for more organized, maintainable, and reusable styles in complex projects. It compiles to clean, standard CSS, supporting two syntaxes: the original indented syntax and the more popular SCSS (Sassy CSS) syntax. Sass provides functionality like control directives for libraries, making it easier to write well-structured, scalable CSS. Its features help reduce repetition in CSS and save time, making it a popular choice among frontend developers for managing large, complex stylesheets.\n\nVisit the following resources to learn more:", "links": [ { "title": "Sass Website", "url": "https://sass-lang.com/", "type": "article" }, - { - "title": "Official Documentation", - "url": "https://sass-lang.com/documentation", - "type": "article" - }, { "title": "Sass Tutorial for Beginners", "url": "https://www.youtube.com/watch?v=_a5j7KoflTs", @@ -1278,7 +1048,7 @@ }, "9WlPENh9g1xOv-zA64Tfg": { "title": "PostCSS", - "description": "PostCSS is a tool for transforming styles with JS plugins. These plugins can lint your CSS, support variables and mixins, transpile future CSS syntax, inline images, and more.\n\nVisit the following resources to learn more:", + "description": "PostCSS is a tool for transforming CSS with JavaScript plugins. It allows developers to enhance their CSS workflow by automating repetitive tasks, adding vendor prefixes, and implementing future CSS features. PostCSS works as a preprocessor, but unlike Sass or Less, it's highly modular and customizable. Users can choose from a wide range of plugins or create their own to suit specific needs. Popular plugins include Autoprefixer for adding vendor prefixes, cssnext for using future CSS features, and cssnano for minification. PostCSS integrates well with various build tools and can be used alongside traditional CSS preprocessors. Its flexibility and performance make it a popular choice for optimizing CSS in modern web development workflows.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website", @@ -1289,25 +1059,30 @@ "title": "Explore top posts about CSS", "url": "https://app.daily.dev/tags/css?ref=roadmapsh", "type": "article" + }, + { + "title": "Learn PostCSS in 15 minutes", + "url": "https://www.youtube.com/watch?v=Kn2SKUOaoT4", + "type": "video" } ] }, "i9z0stM4uKu27Cz6NIgNX": { "title": "Build Tools", - "description": "Task runners automatically execute commands and carry out processes behind the scenes. This helps automate your workflow by performing mundane, repetitive tasks that you would otherwise waste an egregious amount of time repeating yourself.\n\nCommon usages of task runners include numerous development tasks such as: spinning up development servers, compiling code (ex. SCSS to CSS), running linters, serving files up from a local port on your computer, and many more!\n\nVisit the following resources to learn more:", + "description": "Build tools are software utilities designed to automate the process of creating executable applications from source code. They handle tasks such as compiling, linking, minifying, and bundling code, as well as running tests and managing dependencies. Common build tools include Make, Gradle, Maven, Webpack, and Gulp. These tools streamline development workflows by reducing manual steps, ensuring consistency across different environments, and optimizing output for production. They often support features like incremental builds, parallel processing, and custom task definitions. Build tools are crucial in modern software development, especially for large-scale projects, as they improve efficiency, reduce errors, and facilitate continuous integration and deployment processes.\n\nVisit the following resources to learn more:", "links": [ { - "title": "webpack is a static module bundler for modern JavaScript applications", + "title": "Webpack Website", "url": "https://webpack.js.org/", "type": "article" }, { - "title": "Vite Next Generation Frontend Tooling", + "title": "Vite Website", "url": "https://vitejs.dev", "type": "article" }, { - "title": "Parcel is a zero configuration build tool for the web", + "title": "Parcel Website", "url": "https://parceljs.org/", "type": "article" }, @@ -1320,7 +1095,7 @@ }, "9VcGfDBBD8YcKatj4VcH1": { "title": "Linters and Formatters", - "description": "A linter is a tool used to analyze code and discover bugs, syntax errors, stylistic inconsistencies, and suspicious constructs. Popular linters for JavaScript include ESLint, JSLint, and JSHint.\n\nVisit the following resources to learn more:", + "description": "Linters and formatters are tools used in software development to improve code quality and consistency. Linters analyze source code to detect programming errors, bugs, stylistic issues, and suspicious constructs, often enforcing a set of predefined or custom rules. Formatters automatically restructure code to adhere to a consistent style, adjusting elements like indentation, line breaks, and spacing. Together, these tools help maintain code standards across projects and teams, enhance readability, catch potential errors early, and reduce the cognitive load on developers during code reviews. Popular examples include ESLint for JavaScript linting and Prettier for code formatting, both of which can be integrated into development workflows and IDEs for real-time feedback and automatic corrections.\n\nVisit the following resources to learn more:", "links": [ { "title": "What Is a Linter?", @@ -1331,8 +1106,23 @@ }, "hkSc_1x09m7-7BO7WzlDT": { "title": "Module Bundlers", - "description": "A module bundler is a tool that takes pieces of JavaScript and their dependencies and bundles them into a single file, usually for use in the browser. You may have used tools such as Browserify, Webpack, Rollup or one of many others.\n\nIt usually starts with an entry file, and from there it bundles up all of the code needed for that entry file.\n\nVisit the following resources to learn more:", + "description": "Module bundlers are development tools that combine multiple JavaScript files and their dependencies into a single file, optimized for web browsers. They resolve and manage dependencies, transform and optimize code, and often support features like code splitting and lazy loading. Popular module bundlers include Webpack, Rollup, and Parcel. These tools address challenges in managing complex JavaScript applications by organizing code into modules, eliminating global scope pollution, and improving load times. Bundlers typically support various file formats, enable the use of modern JavaScript features through transpilation, and integrate with task runners and other build tools. Their primary goal is to streamline the development process and enhance application performance in production environments.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "The Complete JavaScript Module Bundlers Guide", + "url": "https://snipcart.com/blog/javascript-module-bundler", + "type": "article" + }, + { + "title": "Rollup Bundler", + "url": "https://rollupjs.org/", + "type": "article" + }, + { + "title": "Webpack Website", + "url": "https://webpack.js.org/", + "type": "article" + }, { "title": "Module Bundlers Explained", "url": "https://www.youtube.com/watch?v=5IG4UmULyoA", @@ -1342,7 +1132,7 @@ }, "NS-hwaWa5ebSmNNRoxFDp": { "title": "Parcel", - "description": "Parcel is a web application bundler, differentiated by its developer experience. It offers blazing-fast performance utilizing multicore processing and requires zero configuration.\n\nVisit the following resources to learn more:", + "description": "Parcel is a zero-configuration web application bundler that simplifies the process of building and deploying web projects. It supports multiple programming languages and file types out of the box, including JavaScript, CSS, HTML, and various image formats. Parcel automatically analyzes dependencies, transforms code, and optimizes assets without requiring a complex configuration file. It offers features like hot module replacement, code splitting, and tree shaking by default. Parcel's main selling point is its ease of use and fast build times, achieved through parallel processing and caching. While it may lack some advanced features of more established bundlers like Webpack, Parcel's simplicity and performance make it an attractive option for rapid prototyping and smaller projects.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website and Docs", @@ -1355,15 +1145,15 @@ "type": "article" }, { - "title": "Using Parcel Bundler with React", - "url": "https://www.youtube.com/watch?v=hCxvp3_o0gM", + "title": "How to Build a Web App with Parcel.js", + "url": "https://www.youtube.com/watch?v=R02ehdTzi3I", "type": "video" } ] }, "sCjErk7rfWAUvhl8Kfm3n": { "title": "Rollup", - "description": "Rollup is a module bundler for JavaScript which compiles small pieces of code into something larger and more complex, such as a library or application.\n\nVisit the following resources to learn more:", + "description": "Rollup is a module bundler for JavaScript that compiles small pieces of code into larger, more complex structures. It specializes in producing smaller, more efficient bundles for ES modules. Rollup excels at tree-shaking, eliminating unused code for leaner outputs. It's particularly well-suited for libraries and applications using the ES module format. Rollup supports various output formats, including UMD and CommonJS, making it versatile for different deployment scenarios. While it may require more configuration than some alternatives, Rollup's focus on ES modules and its efficient bundling make it popular for projects prioritizing small bundle sizes and modern JavaScript practices.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website and Docs", @@ -1384,18 +1174,13 @@ }, "twufEtHgxcRUWAUQ9bXus": { "title": "Webpack", - "description": "Webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.\n\nVisit the following resources to learn more:", + "description": "Webpack is a popular open-source JavaScript module bundler that transforms, bundles, or packages resources for the web. It takes modules with dependencies and generates static assets representing those modules. Webpack can handle not just JavaScript, but also other assets like CSS, images, and fonts. It uses loaders to preprocess files and plugins to perform a wider range of tasks like bundle optimization. Webpack's key features include code splitting, lazy loading, and a rich ecosystem of extensions. It supports hot module replacement for faster development and tree shaking to eliminate unused code. While it has a steeper learning curve compared to some alternatives, Webpack's flexibility and powerful features make it a standard tool in many modern JavaScript development workflows, especially for complex applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "Webpack Official Website", "url": "https://webpack.js.org/", "type": "article" }, - { - "title": "Webpack Documentation", - "url": "https://webpack.js.org/concepts/", - "type": "article" - }, { "title": "A Complete Guide to Webpack 5", "url": "https://www.valentinog.com/blog/webpack", @@ -1410,16 +1195,16 @@ }, "4W7UXfdKIUsm1bUrjdTVT": { "title": "esbuild", - "description": "Our current build tools for the web are 10-100x slower than they could be. The main goal of the esbuild bundler project is to bring about a new era of build tool performance, and create an easy-to-use modern bundler along the way.\n\nVisit the following resources to learn more:", + "description": "esbuild is a high-performance JavaScript bundler and minifier designed for speed and efficiency. Created by Evan Wallace, it's written in Go and compiles to native code, making it significantly faster than traditional JavaScript-based build tools. esbuild supports modern JavaScript features, TypeScript, and JSX out of the box, with near-instant bundling times even for large projects. It offers a simple API and command-line interface, making it easy to integrate into existing build pipelines. While primarily focused on speed, esbuild also provides basic code splitting, tree shaking, and source map generation. Its extreme performance makes it particularly suitable for development environments and as a foundation for other build tools, though it may lack some advanced features found in more mature bundlers.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Esbuild Official Website", - "url": "https://esbuild.github.io/", - "type": "article" + "title": "Let's Learn esbuild! (with Sunil Pai) — Learn With Jason", + "url": "https://www.youtube.com/watch?v=KLdF1yu_bmI", + "type": "course" }, { - "title": "Esbuild Documentation", - "url": "https://esbuild.github.io/api/", + "title": "Esbuild Official Website", + "url": "https://esbuild.github.io/", "type": "article" }, { @@ -1427,11 +1212,6 @@ "url": "https://app.daily.dev/tags/webdev?ref=roadmapsh", "type": "article" }, - { - "title": "Why are People Obsessed with esbuild?", - "url": "https://www.youtube.com/watch?v=9XS_RA6zyyU", - "type": "video" - }, { "title": "What Is ESBuild?", "url": "https://www.youtube.com/watch?v=ZY8Vu8cbWF0", @@ -1441,18 +1221,13 @@ }, "0Awx3zEI5_gYEIrD7IVX6": { "title": "Vite", - "description": "Vite is a build tool that aims to provide a faster and leaner development experience for modern web projects.\n\nVisit the following resources to learn more:", + "description": "Vite is a modern build tool and development server designed for fast and lean development of web applications. Created by Evan You, the author of Vue.js, Vite leverages native ES modules in the browser to enable near-instantaneous server start and lightning-fast hot module replacement (HMR). It supports various frameworks including Vue, React, and Svelte out of the box. Vite uses Rollup for production builds, resulting in highly optimized bundles. It offers features like CSS pre-processor support, TypeScript integration, and plugin extensibility. Vite's architecture, which separates dev and build concerns, allows for faster development cycles and improved developer experience, particularly for large-scale projects where traditional bundlers might struggle with performance.\n\nVisit the following resources to learn more:", "links": [ { "title": "Vite Website", "url": "https://vitejs.dev", "type": "article" }, - { - "title": "Vite Documentation", - "url": "https://vitejs.dev/guide", - "type": "article" - }, { "title": "Explore top posts about Vite", "url": "https://app.daily.dev/tags/vite?ref=roadmapsh", @@ -1472,7 +1247,7 @@ }, "zbkpu_gvQ4mgCiZKzS1xv": { "title": "Prettier", - "description": "Prettier is an opinionated code formatter with support for JavaScript, HTML, CSS, YAML, Markdown, GraphQL Schemas. By far the biggest reason for adopting Prettier is to stop all the on-going debates over styles.\n\nVisit the following resources to learn more:", + "description": "Prettier is an opinionated code formatter that supports multiple programming languages, including JavaScript, TypeScript, CSS, and more. It automatically formats code to adhere to a consistent style, eliminating debates about code formatting in development teams. Prettier parses code and reprints it with its own rules, taking maximum line length into account and wrapping code when necessary. It integrates with most editors and can be run as part of the development workflow or in pre-commit hooks. Prettier's main benefits include saving time on code reviews, reducing cognitive load for developers, and maintaining a consistent code style across projects. Its \"zero-config\" philosophy and wide language support have made it a popular tool in modern development environments.\n\nVisit the following resources to learn more:", "links": [ { "title": "Prettier Website", @@ -1483,12 +1258,17 @@ "title": "Why Prettier", "url": "https://prettier.io/docs/en/why-prettier.html", "type": "article" + }, + { + "title": "How to set up Prettier", + "url": "https://www.youtube.com/watch?v=DqfQ4DPnRqI", + "type": "video" } ] }, "NFjsI712_qP0IOmjuqXar": { "title": "ESLint", - "description": "With ESLint you can impose the coding standard using a certain set of standalone rules.\n\nVisit the following resources to learn more:", + "description": "ESLint is a popular open-source static code analysis tool for identifying and fixing problems in JavaScript code. It enforces coding standards, detects potential errors, and promotes consistent coding practices across projects. ESLint is highly configurable, allowing developers to define custom rules or use preset configurations. It supports modern JavaScript features, JSX, and TypeScript through plugins. ESLint can be integrated into development workflows through IDE extensions, build processes, or git hooks, providing real-time feedback to developers. Its ability to automatically fix many issues it detects makes it a valuable tool for maintaining code quality and consistency, especially in large teams or projects. ESLint's extensibility and wide adoption in the JavaScript ecosystem have made it a standard tool in modern JavaScript development.\n\nVisit the following resources to learn more:", "links": [ { "title": "ESLint Official Website", @@ -1496,8 +1276,8 @@ "type": "article" }, { - "title": "Introduction to ESLint", - "url": "https://dev.to/shivambmgupta/eslint-what-why-when-how-5f1d", + "title": "What is ESLint and How to Use ESLint to Detect and Fix Code for JavaScript Projects", + "url": "https://2coffee.dev/en/articles/what-is-eslint-and-how-to-use-eslint-to-detect-fix-code-for-javascript-projects", "type": "article" }, { @@ -1514,7 +1294,7 @@ }, "igg4_hb3XE3vuvY8ufV-4": { "title": "Testing", - "description": "Before delivering your application to users, you need to be sure that your app meets the requirements it was designed for, and that it doesn't do any weird, unintended things (called 'bugs'). To accomplish this, we 'test' our applications in different ways.\n\nVisit the following resources to learn more:", + "description": "Testing apps involves systematically evaluating software to ensure it meets requirements, functions correctly, and maintains quality. Key testing types include:\n\n1. Unit testing: Verifying individual components or functions\n2. Integration testing: Checking interactions between different parts of the app\n3. Functional testing: Ensuring the app meets specified requirements\n4. UI/UX testing: Evaluating the user interface and experience\n5. Performance testing: Assessing app speed, responsiveness, and stability\n6. Security testing: Identifying vulnerabilities and ensuring data protection\n7. Accessibility testing: Verifying usability for people with disabilities\n8. Compatibility testing: Checking functionality across different devices and platforms\n\nModern testing often incorporates automated testing tools and continuous integration/continuous deployment (CI/CD) pipelines. Test-driven development (TDD) and behavior-driven development (BDD) are popular methodologies that emphasize writing tests before or alongside code. Effective testing strategies help identify bugs early, improve code quality, and ensure a reliable user experience.\n\nVisit the following resources to learn more:", "links": [ { "title": "A comprehensive dive into software testing.", @@ -1526,32 +1306,37 @@ "url": "https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing", "type": "article" }, - { - "title": "Testing React apps with Jest", - "url": "https://jestjs.io/docs/tutorial-react", - "type": "article" - }, { "title": "Explore top posts about Testing", "url": "https://app.daily.dev/tags/testing?ref=roadmapsh", "type": "article" + }, + { + "title": "How to test web applications - dotJS 2024", + "url": "https://www.youtube.com/watch?v=l3qjQpYBR8c", + "type": "video" } ] }, "hVQ89f6G0LXEgHIOKHDYq": { "title": "Vitest", - "description": "Vitest is a fast Vite-native unit test framework with out-of-box ESM, TypeScript and JSX support. Works on React, Vue, Svelte and more projects created with Vite\n\nVisit the following resources to learn more:", + "description": "Vitest is a fast and lightweight testing framework for JavaScript and TypeScript projects, designed as a Vite-native alternative to Jest. It leverages Vite's transformation pipeline and config resolution, offering near-instant test execution and hot module replacement (HMR) for tests. Vitest provides a Jest-compatible API, making migration easier for projects already using Jest. It supports features like snapshot testing, mocking, and code coverage out of the box. Vitest's architecture allows for parallel test execution and watch mode, significantly speeding up the testing process. Its integration with Vite's ecosystem makes it particularly well-suited for projects already using Vite, but it can be used in any JavaScript project. Vitest's focus on speed and developer experience has made it an increasingly popular choice for modern web development workflows.\n\nVisit the following resources to learn more:", "links": [ { "title": "Vitest Website", "url": "https://vitest.dev/", "type": "article" + }, + { + "title": "Vitets simplified", + "url": "https://www.youtube.com/watch?v=snCLQmINqCU", + "type": "video" } ] }, "g5itUjgRXd9vs9ujHezFl": { "title": "Jest", - "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:", + "description": "Jest is a popular JavaScript testing framework developed by Facebook. It provides a comprehensive solution for unit testing JavaScript code, with a focus on simplicity and minimal configuration. Jest offers features such as automatic mocking, code coverage reporting, and snapshot testing. It supports testing of both synchronous and asynchronous code, and can be used with various JavaScript frameworks and libraries, including React, Angular, and Vue. Jest's built-in assertion library and test runner make it easy to write and execute tests quickly. Its ability to run tests in parallel and its intelligent test-watching mode contribute to fast test execution, making it a preferred choice for many developers and organizations in the JavaScript ecosystem.\n\nVisit the following resources to learn more:", "links": [ { "title": "Jest Website", @@ -1572,18 +1357,13 @@ }, "jramLk8FGuaEH4YpHIyZT": { "title": "Playwright", - "description": "Playwright is an open-source test automation library initially developed by Microsoft contributors. It supports programming languages such as Java, Python, C#, and NodeJS. Playwright comes with Apache 2.0 License and is most popular with NodeJS with Javascript/Typescript.\n\nVisit the following resources to learn more:", + "description": "Playwright is an open-source automation framework developed by Microsoft for end-to-end testing of web applications. It provides a single API to automate Chromium, Firefox, and WebKit browsers across Windows, macOS, and Linux. Playwright supports multiple programming languages including JavaScript, TypeScript, Python, and .NET. It offers features like auto-waiting, network interception, and mobile emulation. The framework excels in handling modern web apps with dynamic content, providing reliable automation through its ability to wait for elements to be ready before acting on them. Playwright's cross-browser and cross-platform capabilities, combined with its powerful tooling for debugging and test generation, make it a robust choice for automated testing of web applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "Playwright Website", "url": "https://playwright.dev/", "type": "article" }, - { - "title": "Playwright Tutorial: Learn Basics and Setup", - "url": "https://www.browserstack.com/guide/playwright-tutorial", - "type": "article" - }, { "title": "Playwright, a Time-Saving End-to-End Testing Framework", "url": "https://thenewstack.io/playwright-a-time-saving-end-to-end-testing-framework/", @@ -1617,7 +1397,7 @@ }, { "title": "Cypress End-to-End Testing", - "url": "https://www.youtube.com/watch?v=7N63cMKosIE", + "url": "https://www.youtube.com/watch?v=BQqzfHQkREo", "type": "video" } ] @@ -1660,26 +1440,11 @@ }, "RDWbG3Iui6IPgp0shvXtg": { "title": "Web Security Basics", - "description": "Web security refers to the protective measures taken by the developers to protect the web applications from threats that could affect the business.\n\nVisit the following resources to learn more:", + "description": "Web security knowledge encompasses understanding and implementing practices to protect websites, web applications, and web services from various cyber threats. Key areas include:\n\n1. HTTPS and TLS for secure data transmission\n2. Cross-Site Scripting (XSS) prevention\n3. SQL injection protection\n4. Cross-Site Request Forgery (CSRF) mitigation\n5. Content Security Policy (CSP) implementation\n6. Secure authentication and session management\n7. Input validation and sanitization\n8. Protection against clickjacking\n9. Secure cookie handling\n10. Regular security updates and patch management\n\nWeb security also involves understanding common vulnerabilities listed in the OWASP Top Ten, implementing proper access controls, and using secure coding practices. It requires ongoing education and vigilance as new threats emerge. Effective web security strategies often include a combination of preventive measures, regular security audits, and incident response planning to ensure the confidentiality, integrity, and availability of web resources and user data.\n\nVisit the following resources to learn more:", "links": [ { - "title": "OWASP Web Application Security Testing Checklist", - "url": "https://github.com/0xRadi/OWASP-Web-Checklist", - "type": "opensource" - }, - { - "title": "Why HTTPS Matters", - "url": "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https", - "type": "article" - }, - { - "title": "Wikipedia - OWASP", - "url": "https://en.wikipedia.org/wiki/OWASP", - "type": "article" - }, - { - "title": "OWASP Top 10 Security Risks", - "url": "https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/", + "title": "OWASP Website", + "url": "https://owasp.org/", "type": "article" }, { @@ -1706,7 +1471,7 @@ }, "AfH2zCbqzw0Nisg1yyISS": { "title": "CORS", - "description": "Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources.\n\nVisit the following resources to learn more:", + "description": "Cross-Origin Resource Sharing (CORS) is a security mechanism implemented by web browsers to control access to resources (like APIs or fonts) on a web page from a different domain than the one serving the web page. It extends and adds flexibility to the Same-Origin Policy, allowing servers to specify who can access their resources. CORS works through a system of HTTP headers, where browsers send a preflight request to the server hosting the cross-origin resource, and the server responds with headers indicating whether the actual request is allowed. This mechanism helps prevent unauthorized access to sensitive data while enabling legitimate cross-origin requests. CORS is crucial for modern web applications that often integrate services and resources from multiple domains, balancing security needs with the functionality requirements of complex, distributed web systems.\n\nVisit the following resources to learn more:", "links": [ { "title": "Cross-Origin Resource Sharing (CORS)", @@ -1718,11 +1483,6 @@ "url": "https://rbika.com/blog/understanding-cors", "type": "article" }, - { - "title": "CORS in 100 Seconds", - "url": "https://www.youtube.com/watch?v=4KHiSt0oLJ0", - "type": "video" - }, { "title": "CORS in 6 minutes", "url": "https://www.youtube.com/watch?v=PNtFSVU-YTI", @@ -1732,7 +1492,7 @@ }, "uum7vOhOUR38vLuGZy8Oa": { "title": "HTTPS", - "description": "HTTPS is a secure way to send data between a web server and a browser.\n\nHypertext transfer protocol secure (HTTPS) is the secure version of HTTP, which is the primary protocol used to send data between a web browser and a website. HTTPS is encrypted in order to increase security of data transfer. This is particularly important when users transmit sensitive data, such as by logging into a bank account, email service, or health insurance provider\n\nVisit the following resources to learn more:", + "description": "Hypertext transfer protocol secure (HTTPS) is the secure version of HTTP, which is the primary protocol used to send data between a web browser and a website. HTTPS is encrypted in order to increase security of data transfer. This is particularly important when users transmit sensitive data, such as by logging into a bank account, email service, or health insurance provider.\n\nVisit the following resources to learn more:", "links": [ { "title": "What is HTTPS?", @@ -1758,17 +1518,12 @@ "title": "SSL, TLS, HTTP, HTTPS Explained", "url": "https://www.youtube.com/watch?v=hExRDVZHhig", "type": "video" - }, - { - "title": "HTTPS — Stories from the field", - "url": "https://www.youtube.com/watch?v=GoXgl9r0Kjk", - "type": "video" } ] }, "rmcm0CZbtNVC9LZ14-H6h": { "title": "Content Security Policy", - "description": "Content Security Policy is a computer security standard introduced to prevent cross-site scripting, clickjacking and other code injection attacks resulting from execution of malicious content in the trusted web page context.\n\nVisit the following resources to learn more:", + "description": "Content Security Policy (CSP) is a security standard implemented by web browsers to prevent cross-site scripting (XSS), clickjacking, and other code injection attacks. It works by allowing web developers to specify which sources of content are trusted and can be loaded on a web page. CSP is typically implemented through HTTP headers or meta tags, defining rules for various types of resources like scripts, stylesheets, images, and fonts. By restricting the origins from which content can be loaded, CSP significantly reduces the risk of malicious code execution. It also provides features like reporting violations to help developers identify and fix potential security issues. While powerful, implementing CSP requires careful configuration to balance security with functionality, especially for sites using third-party resources or inline scripts.\n\nVisit the following resources to learn more:", "links": [ { "title": "MDN Content Security Policy (CSP)", @@ -1794,7 +1549,7 @@ }, "JanR7I_lNnUCXhCMGLdn-": { "title": "OWASP Security Risks", - "description": "OWASP or Open Web Application Security Project is an online community that produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security.\n\nVisit the following resources to learn more:", + "description": "OWASP (Open Web Application Security Project) identifies and ranks the most critical security risks to web applications. The OWASP Top 10 list includes vulnerabilities such as injection flaws, broken authentication, sensitive data exposure, XML external entities (XXE), broken access control, security misconfigurations, cross-site scripting (XSS), insecure deserialization, using components with known vulnerabilities, and insufficient logging and monitoring. These risks represent common attack vectors exploited by malicious actors to compromise web applications and their underlying systems. OWASP provides guidelines and best practices for mitigating these risks, emphasizing the importance of secure coding practices, regular security assessments, and implementing robust security controls throughout the software development lifecycle. Understanding and addressing these risks is crucial for developers and organizations to enhance the security posture of their web applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "OWASP Web Application Security Testing Checklist", @@ -1802,13 +1557,8 @@ "type": "opensource" }, { - "title": "Wikipedia - OWASP", - "url": "https://en.wikipedia.org/wiki/OWASP", - "type": "article" - }, - { - "title": "OWASP Top 10 Security Risks", - "url": "https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/", + "title": "OWASP Website", + "url": "https://owasp.org/", "type": "article" }, { @@ -1830,10 +1580,10 @@ }, "ruoFa3M4bUE3Dg6GXSiUI": { "title": "Web Components", - "description": "Web Components is a suite of different technologies allowing you to create reusable custom elements — with their functionality encapsulated away from the rest of your code — and utilize them in your web apps.\n\nVisit the following resources to learn more:", + "description": "Web Components are a set of standardized browser technologies that allow developers to create reusable, encapsulated HTML elements for web pages and applications. They consist of three main technologies: Custom Elements for defining new HTML tags, Shadow DOM for encapsulating styles and markup, and HTML Templates for declaring fragments of reusable HTML. Web Components enable the creation of modular, shareable components that work across different frameworks and browsers. They provide strong encapsulation, reducing style conflicts and promoting code reuse. While adoption has been slower compared to popular JavaScript frameworks, Web Components offer a standards-based approach to component development, ensuring long-term compatibility and interoperability in web ecosystems.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Web Components | MDN", + "title": "Web Components - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/Web_Components", "type": "article" }, @@ -1856,7 +1606,7 @@ }, "hwPOGT0-duy3KfI8QaEwF": { "title": "Type Checkers", - "description": "Type checker helps developers write code with fewer bugs by adding types to their code, trying to catch type errors within your code, and then removing them during compile time. Flow and TypeScript are two popular static type checkers for JavaScript.", + "description": "Type checkers are tools that analyze code to detect and prevent type-related errors without executing the program. They enforce type consistency, helping developers catch mistakes early in the development process. Popular type checkers include TypeScript for JavaScript, Flow for JavaScript, and mypy for Python. These tools add static typing to dynamically typed languages, offering benefits like improved code reliability, better documentation, and enhanced developer tooling support. Type checkers can infer types in many cases and allow for gradual adoption in existing projects. They help prevent common runtime errors, facilitate refactoring, and improve code maintainability. While adding some overhead to the development process, type checkers are widely adopted in large-scale applications for their ability to catch errors before runtime and improve overall code quality.", "links": [] }, "VxiQPgcYDFAT6WgSRWpIA": { @@ -1872,6 +1622,11 @@ "title": "Explore top posts about Web Development", "url": "https://app.daily.dev/tags/webdev?ref=roadmapsh", "type": "article" + }, + { + "title": "Web Components | Custom Elements", + "url": "https://www.youtube.com/watch?v=1GT35DSdZbI", + "type": "video" } ] }, @@ -1884,6 +1639,11 @@ "url": "https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots", "type": "article" }, + { + "title": "HTML Template tag", + "url": "https://www.w3schools.com/tags/tag_template.asp", + "type": "article" + }, { "title": "Explore top posts about HTML", "url": "https://app.daily.dev/tags/html?ref=roadmapsh", @@ -1893,7 +1653,7 @@ }, "-SpsNeOZBkQfDA-rwzgPg": { "title": "Shadow DOM", - "description": "An important aspect of web components is encapsulation — being able to keep the markup structure, style, and behavior hidden and separate from other code on the page so that different parts do not clash, and the code can be kept nice and clean. The Shadow DOM API is a key part of this, providing a way to attach a hidden separated DOM to an element.\n\nVisit the following resources to learn more:", + "description": "The Shadow DOM is a web standard that provides encapsulation for JavaScript, CSS, and templating in web components. It allows developers to create isolated DOM trees within elements, separate from the main document DOM. This encapsulation prevents styles and scripts from leaking in or out, ensuring that component internals remain separate from the rest of the page. Shadow DOM enables more modular and maintainable code by reducing naming conflicts and CSS specificity issues. It's particularly useful for creating reusable custom elements with self-contained styling and behavior. While primarily used in web components, Shadow DOM can also be leveraged in various scenarios to improve code organization and reduce unintended side effects in complex web applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "Using shadow DOM | MDN web docs", @@ -1914,8 +1674,13 @@ }, "0asdhvwBH3gn-ercktV7A": { "title": "TypeScript", - "description": "TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.\n\nVisit the following resources to learn more:", + "description": "TypeScript is a strongly-typed, object-oriented programming language that builds upon JavaScript by adding optional static typing and other features. Developed and maintained by Microsoft, it compiles to plain JavaScript, allowing it to run in any environment that supports JavaScript. TypeScript offers enhanced IDE support with better code completion, refactoring, and error detection during development. It introduces concepts like interfaces, generics, and decorators, enabling more robust software architecture. TypeScript is particularly valuable for large-scale applications, as it improves code maintainability and readability. Its type system helps catch errors early in the development process, reducing runtime errors. With its growing ecosystem and adoption in popular frameworks like Angular, TypeScript has become a standard tool in modern web development.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "TypeScript Roadmap", + "url": "/typescript", + "type": "article" + }, { "title": "Official Website", "url": "https://www.typescriptlang.org/", @@ -1940,18 +1705,8 @@ }, "Cxspmb14_0i1tfw-ZLxEu": { "title": "SSR", - "description": "Server-side rendering refers to the process that the service side completes the HTML structure splicing of the page, sends it to the browser, and then binds the status and events for it to become a fully interactive page.\n\nVisit the following resources to learn more:", + "description": "Server-side rendering (SSR) is a technique used in web development where web pages are generated on the server and sent to the client as fully rendered HTML. This approach contrasts with client-side rendering, where the browser builds the page using JavaScript. SSR improves initial page load time and search engine optimization (SEO) by providing complete content to crawlers. It's particularly beneficial for content-heavy sites and applications requiring fast first-page loads. SSR can be implemented with various frameworks like Next.js for React or Nuxt.js for Vue.js. While it can increase server load and complexity, SSR offers advantages in performance perception, especially on slower devices or networks, and can be combined with client-side hydration for dynamic interactivity after initial load.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "what is server side rendering", - "url": "https://www.educative.io/answers/what-is-server-side-rendering", - "type": "article" - }, - { - "title": "When should I Server-Side Render?", - "url": "https://medium.com/@mbleigh/when-should-i-server-side-render-c2a383ff2d0f", - "type": "article" - }, { "title": "Server-Side Rendering (SSR)", "url": "https://vuejs.org/guide/scaling-up/ssr.html", @@ -1963,8 +1718,8 @@ "type": "article" }, { - "title": "what is server side rendering?", - "url": "https://www.youtube.com/watch?v=GQzn7XRdzxY", + "title": "wWhat are Server Side Rendering (SSR) & Client Side Rendering (CSR)", + "url": "https://www.youtube.com/watch?v=ObrSuDYMl1s", "type": "video" }, { @@ -1976,16 +1731,16 @@ }, "OL8I6nOZ8hGGWmtxg_Mv8": { "title": "Svelte", - "description": "Svelte is a javascript framework that unlike Vue and React does not use vertical DOM diffing but instead knows exactly what and where to update when the state changes. It's mainly focused on frontend and building user interfaces.\n\nVisit the following resources to learn more:", + "description": "Svelte is a modern JavaScript framework for building user interfaces that takes a unique approach to web development. Unlike traditional frameworks that do most of their work in the browser, Svelte shifts that work into a compile step that happens when you build your app. It compiles your code to efficient vanilla JavaScript, resulting in smaller bundle sizes and better runtime performance. Svelte uses a component-based architecture and features a simple, intuitive syntax that allows developers to write less code. It includes built-in state management, CSS scoping, and animations. Svelte's approach eliminates the need for a virtual DOM, leading to faster initial loads and updates. Its simplicity and performance benefits have been gaining it increasing popularity in the front-end development community.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Svelte Website", - "url": "https://svelte.dev/", - "type": "article" + "title": "Svelte Course Playlist for beginners", + "url": "https://www.youtube.com/playlist?list=PL4cUxeGkcC9hlbrVO_2QFVqVPhlZmz7tO", + "type": "course" }, { - "title": "Svelte Documentation", - "url": "https://svelte.dev/docs", + "title": "Svelte Website", + "url": "https://svelte.dev/", "type": "article" }, { @@ -2002,28 +1757,18 @@ "title": "Explore top posts about Svelte", "url": "https://app.daily.dev/tags/svelte?ref=roadmapsh", "type": "article" - }, - { - "title": "Svelte Course Playlist for beginners", - "url": "https://www.youtube.com/playlist?list=PL4cUxeGkcC9hlbrVO_2QFVqVPhlZmz7tO", - "type": "video" } ] }, "3TE_iYvbklXK0be-5f2M7": { "title": "Vue.js", - "description": "Vue.js is an open-source JavaScript framework for building user interfaces and single-page applications. It is mainly focused on front end development.\n\nVisit the following resources to learn more:", + "description": "Vue.js is a progressive JavaScript framework for building user interfaces. It's designed to be incrementally adoptable, allowing developers to integrate it into projects gradually. Vue uses a template-based approach with a virtual DOM for efficient rendering. It features a reactive and composable component system, making it easy to organize and reuse code. Vue's core library focuses on the view layer, but it can be easily extended with official and community-built tools for state management, routing, and build tooling. Known for its gentle learning curve and flexibility, Vue has gained popularity for both small projects and large-scale applications. Its performance, lightweight nature, and comprehensive documentation have contributed to its widespread adoption in the web development community.\n\nVisit the following resources to learn more:", "links": [ { "title": "Vue.js Website", "url": "https://vuejs.org/", "type": "article" }, - { - "title": "Official Getting Started", - "url": "https://vuejs.org/v2/guide/", - "type": "article" - }, { "title": "Meet Vue.js, the Flexible JavaScript Framework", "url": "https://thenewstack.io/meet-vue-js-flexible-javascript-framework/", @@ -2036,23 +1781,23 @@ }, { "title": "Vue.js Course for Beginners", - "url": "https://www.youtube.com/watch?v=FXpIoQ_rT_c", - "type": "video" - }, - { - "title": "Vue.js Crash Course", - "url": "https://www.youtube.com/watch?v=qZXt1Aom3Cs", + "url": "https://www.youtube.com/watch?v=VeNfHj6MhgA", "type": "video" } ] }, "k6rp6Ua9qUEW_DA_fOg5u": { "title": "Angular", - "description": "Angular is a component based front-end development framework built on TypeScript which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more.\n\nVisit the following resources to learn more:", + "description": "Angular is a popular open-source web application framework developed and maintained by Google. It uses TypeScript, a statically typed superset of JavaScript, to build scalable and efficient single-page applications (SPAs). Angular follows a component-based architecture, where the user interface is composed of reusable, self-contained components. The framework provides features like two-way data binding, dependency injection, and a powerful template syntax, which simplify the development of complex web applications. Angular also includes a comprehensive set of tools for testing, routing, and state management, making it a full-fledged solution for front-end development. Its modular structure and emphasis on best practices make it particularly suitable for large-scale enterprise applications.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official - Getting started with Angular", - "url": "https://angular.io/start", + "title": "Angular Roadmap", + "url": "https://roadmap.sh/angular", + "type": "article" + }, + { + "title": "Angular Website", + "url": "https://angular.dev", "type": "article" }, { @@ -2064,8 +1809,13 @@ }, "SGDf_rbfmFSHlxI-Czzlz": { "title": "React", - "description": "React is the most popular front-end JavaScript library for building user interfaces. React can also render on the server using Node and power mobile apps using React Native.\n\nVisit the following resources to learn more:", + "description": "React is an open-source JavaScript library for building user interfaces, primarily for single-page applications. Developed and maintained by Facebook, it allows developers to create reusable UI components that efficiently update and render as data changes. React uses a virtual DOM for performance optimization and supports a unidirectional data flow. Its component-based architecture promotes modularity and reusability. React's ecosystem includes tools like Redux for state management and React Native for mobile app development. The library's declarative nature, efficient rendering, and strong community support have made it one of the most popular choices for front-end development in modern web applications.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Full Stack React Developer Course", + "url": "https://www.youtube.com/watch?v=Bvwq_S0n2pk", + "type": "course" + }, { "title": "Visit Dedicated React Roadmap", "url": "https://roadmap.sh/react", @@ -2076,102 +1826,67 @@ "url": "https://react.dev", "type": "article" }, - { - "title": "Official Getting Started", - "url": "https://react.dev/learn/tutorial-tic-tac-toe", - "type": "article" - }, { "title": "Explore top posts about React", "url": "https://app.daily.dev/tags/react?ref=roadmapsh", "type": "article" - }, - { - "title": "React JS Course for Beginners", - "url": "https://www.youtube.com/watch?v=nTeuhbP7wdE", - "type": "video" - }, - { - "title": "React Course - Beginners Tutorial for React JavaScript Library [2022]", - "url": "https://www.youtube.com/watch?v=bMknfKXIFA8", - "type": "video" - }, - { - "title": "Understanding Reacts UI Rendering Process", - "url": "https://www.youtube.com/watch?v=i793Qm6kv3U", - "type": "video" } ] }, "KJRkrFZIihCUBrOf579EU": { "title": "react-router", - "description": "There used to be Remix in this list but they announced to merge Remix into react-router after v7.\n\nVisit the following resources to learn more:", + "description": "React Router is a popular routing library for React applications that enables dynamic, client-side routing. It allows developers to create single-page applications with multiple views, managing the URL and history of the browser while keeping the UI in sync with the URL. React Router provides a declarative way to define routes, supporting nested routes, route parameters, and programmatic navigation. It offers components like BrowserRouter, Route, and Link to handle routing logic and navigation. The library also supports features such as lazy loading of components, route guards, and custom history management. React Router's integration with React's component model makes it a go-to solution for managing navigation and creating complex, multi-view applications in React ecosystems.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website", - "url": "https://remix.run/", + "url": "https://reactrouter.com/en/main", "type": "article" }, { - "title": "Official Docs for Getting Started", - "url": "https://remix.run/docs/en/v1#getting-started", + "title": "A complete guide to routing in react", + "url": "https://hygraph.com/blog/routing-in-react", "type": "article" + }, + { + "title": "React router - Complete tutorial", + "url": "https://www.youtube.com/watch?v=oTIJunBa6MA", + "type": "video" } ] }, "zNFYAJaSq0YZXL5Rpx1NX": { "title": "Next.js", - "description": "Next.js is an open-source development framework built on top of Node.js enabling React based web applications functionalities such as server-side rendering and generating static websites.\n\nVisit the following resources to learn more:", + "description": "Next.js is a React-based open-source framework for building server-side rendered and statically generated web applications. It provides features like automatic code splitting, optimized performance, and simplified routing out of the box. Next.js supports both static site generation (SSG) and server-side rendering (SSR), allowing developers to choose the most appropriate rendering method for each page. The framework offers built-in CSS support, API routes for backend functionality, and easy deployment options. Next.js is known for its developer-friendly experience, with features like hot module replacement and automatic prefetching. Its ability to create hybrid apps that combine static and server-rendered pages makes it popular for building scalable, SEO-friendly web applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website", "url": "https://nextjs.org/", "type": "article" }, - { - "title": "Official Docs for Getting Started", - "url": "https://nextjs.org/docs/getting-started", - "type": "article" - }, - { - "title": "Mastering Next.js", - "url": "https://masteringnextjs.com/", - "type": "article" - }, { "title": "Explore top posts about JavaScript", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", "type": "article" }, { - "title": "Next.js for Beginners - freeCodeCamp", - "url": "https://www.youtube.com/watch?v=KjY94sAKLlw", - "type": "video" - }, - { - "title": "Introduction to Next.js and React by Lee Robinson", - "url": "https://www.youtube.com/watch?v=h2BcitZPMn4", + "title": "Next.js for Beginners - Full Course at freeCodeCamp YouTube Channel", + "url": "https://youtu.be/1WmNXEVia8I", "type": "video" } ] }, "BBsXxkbbEG-gnbM1xXKrj": { "title": "Nuxt.js", - "description": "Nuxt.js is a free and open source JavaScript library based on Vue.js, Node.js, Webpack and Babel.js. Nuxt is inspired by Next.js, which is a framework of similar purpose, based on React.js.\n\nVisit the following resources to learn more:", + "description": "Nuxt.js is a higher-level framework built on top of Vue.js, designed to create universal or single-page Vue applications. It simplifies the development process by providing a structured directory layout, automatic routing, and server-side rendering capabilities out of the box. Nuxt.js offers features like static site generation, code splitting, and asynchronous data fetching. It supports both client-side and server-side rendering, allowing developers to choose the most appropriate approach for each page. Nuxt.js emphasizes developer experience and performance optimization, making it popular for building scalable, SEO-friendly Vue applications. Its modular architecture and extensive plugin ecosystem enable easy integration of additional functionalities.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Nuxt Website", - "url": "https://nuxtjs.org/", - "type": "article" - }, - { - "title": "Nuxt Docs", - "url": "https://nuxtjs.org/docs/get-started/installation", - "type": "article" + "title": "Nuxt.js Fundamentals", + "url": "https://vueschool.io/courses/nuxtjs-fundamentals", + "type": "course" }, { - "title": "Nuxt Tutorials", - "url": "https://nuxtjs.org/tutorials", + "title": "Nuxt Website", + "url": "https://nuxtjs.org/", "type": "article" }, { @@ -2179,11 +1894,6 @@ "url": "https://explorers.netlify.com/learn/get-started-with-nuxt", "type": "article" }, - { - "title": "Nuxt.js Fundamentals", - "url": "https://vueschool.io/courses/nuxtjs-fundamentals", - "type": "article" - }, { "title": "Explore top posts about JavaScript", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", @@ -2193,7 +1903,7 @@ }, "P4st_telfCwKLSAU2WsQP": { "title": "Svelte Kit", - "description": "Svelte Kit is a framework for building web applications with the Svelte JavaScript framework. It is designed to be a complete solution for building web applications, with support for server-side rendering, automatic code splitting, and optimized performance.\n\nVisit the following resources to learn more:", + "description": "SvelteKit is a framework for building web applications using Svelte, a component-based JavaScript framework. It provides a full-stack development experience, handling both server-side and client-side rendering. SvelteKit offers features like file-based routing, code-splitting, and server-side rendering out of the box. It supports both static site generation and server-side rendering, allowing developers to choose the most appropriate approach for each page. SvelteKit emphasizes simplicity and performance, leveraging Svelte's compile-time approach to generate highly optimized JavaScript. It includes built-in development tools, easy deployment options, and integrates well with various backend services. SvelteKit's efficient development experience and flexibility make it an attractive option for building modern, performant web applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "Svelte Kit Official Website", @@ -2209,26 +1919,26 @@ "title": "Explore top posts about Svelte", "url": "https://app.daily.dev/tags/svelte?ref=roadmapsh", "type": "article" + }, + { + "title": "Sveltekit in 100 Seconds", + "url": "https://www.youtube.com/watch?v=H1eEFfAkIik", + "type": "video" } ] }, "L7AllJfKvClaam3y-u6DP": { "title": "GraphQL", - "description": "GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.\n\nVisit the following resources to learn more:", + "description": "GraphQL is a query language and runtime for APIs, developed by Facebook. GraphQL's flexibility and efficiency make it popular for building complex applications, especially those with diverse client requirements. It's particularly useful for mobile applications where bandwidth efficiency is crucial. While it requires a paradigm shift from REST, many developers and organizations find GraphQL's benefits outweigh the learning curve, especially for large-scale or rapidly evolving APIs.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Introduction to GraphQL", - "url": "https://graphql.org/learn/", - "type": "article" - }, - { - "title": "The Fullstack Tutorial for GraphQL", - "url": "https://www.howtographql.com/", + "title": "GraphQL Roadmap", + "url": "/graphql", "type": "article" }, { - "title": "GraphQL Tutorials", - "url": "https://odyssey.apollographql.com/", + "title": "Introduction to GraphQL", + "url": "https://graphql.org/learn/", "type": "article" }, { @@ -2255,7 +1965,7 @@ }, "5eUbDdOTOfaOhUlZAmmXW": { "title": "Apollo", - "description": "Apollo is a platform for building a unified graph, a communication layer that helps you manage the flow of data between your application clients (such as web and native apps) and your back-end services.\n\nVisit the following resources to learn more:", + "description": "Apollo GraphQL is a comprehensive platform for building and managing GraphQL-based data layers in modern applications. It provides a set of open-source tools and libraries that simplify the implementation of GraphQL on both the client and server sides. On the client side, Apollo Client offers powerful caching, state management, and data fetching capabilities, integrating seamlessly with various front-end frameworks. On the server side, Apollo Server facilitates the creation of GraphQL APIs, handling queries, mutations, and subscriptions efficiently. The Apollo platform also includes developer tools for schema management, performance monitoring, and API governance. By abstracting away much of the complexity of GraphQL implementation, Apollo enables developers to build faster, more scalable, and more maintainable applications with a unified data graph.\n\nVisit the following resources to learn more:", "links": [ { "title": "Apollo Website", @@ -2268,62 +1978,47 @@ "type": "article" }, { - "title": "Explore top posts about Apollo", - "url": "https://app.daily.dev/tags/apollo?ref=roadmapsh", + "title": "", + "url": "https://roadmap.sh/graphql", "type": "article" }, { - "title": "Official YouTube Channel", - "url": "https://www.youtube.com/c/ApolloGraphQL/", - "type": "video" - }, - { - "title": "GraphQL With React Tutorial - Apollo Client", - "url": "https://www.youtube.com/watch?v=YyUWW04HwKY", - "type": "video" + "title": "Explore top posts about Apollo", + "url": "https://app.daily.dev/tags/apollo?ref=roadmapsh", + "type": "article" } ] }, "0moPO23ol33WsjVXSpTGf": { "title": "Relay Modern", - "description": "Relay is a JavaScript client used in the browser to fetch GraphQL data. It's a JavaScript framework developed by Facebook for managing and fetching data in React applications. It is built with scalability in mind in order to power complex applications like Facebook. The ultimate goal of GraphQL and Relay is to deliver instant UI-response interactions.\n\nVisit the following resources to learn more:", + "description": "Relay is a JavaScript framework developed by Facebook for building data-driven React applications. It's specifically designed to work with GraphQL, providing a declarative approach to fetching and managing data in complex web applications. Relay optimizes data fetching by colocating data requirements with components, enabling efficient updates and minimizing over-fetching. It handles caching, real-time updates, and optimistic UI updates out of the box. Relay's architecture promotes scalability and performance in large applications by managing data dependencies and reducing network requests. While it has a steeper learning curve compared to simpler data-fetching solutions, Relay offers significant benefits for applications with complex data requirements, especially when used in conjunction with React and GraphQL.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "facebook/relay", + "url": "https://github.com/facebook/relay", + "type": "opensource" + }, { "title": "Official Website", "url": "https://relay.dev/", "type": "article" }, { - "title": "Introduction to Relay modern", - "url": "https://relay.dev/docs/", - "type": "article" + "title": "ELI5 - Relay", + "url": "https://www.youtube.com/watch?v=A4POd93GI_I", + "type": "video" } ] }, "n0q32YhWEIAUwbGXexoqV": { "title": "Static Site Generators", - "description": "A static site generator is a tool that generates a full static HTML website based on raw data and a set of templates. Essentially, a static site generator automates the task of coding individual HTML pages and gets those pages ready to serve to users ahead of time. Because these HTML pages are pre-built, they can load very quickly in users' browsers.\n\nVisit the following resources to learn more:", + "description": "Static site generators (SSGs) are tools that create HTML websites from raw data and templates, producing pre-rendered pages at build time rather than at runtime. They combine the benefits of static websites (speed, security, simplicity) with the flexibility of dynamic sites. SSGs typically use markup languages like Markdown for content, templating engines for layouts, and generate a fully static website that can be hosted on simple web servers or content delivery networks. Popular SSGs include Jekyll, Hugo, Gatsby, and Eleventy. They're well-suited for blogs, documentation sites, and content-focused websites. SSGs offer advantages in performance, version control integration, and reduced server-side complexity, making them increasingly popular for a wide range of web projects.\n\nVisit the following resources to learn more:", "links": [ { "title": "What is a static site generator?", "url": "https://www.cloudflare.com/learning/performance/static-site-generator/", "type": "article" }, - { - "title": "Next.js SSG", - "url": "https://nextjs.org/docs/advanced-features/static-html-export", - "type": "article" - }, - { - "title": "Gatsby SSG", - "url": "https://www.gatsbyjs.com/docs/glossary/static-site-generator/", - "type": "article" - }, - { - "title": "SSG — An 11ty, Vite And JAM Sandwich", - "url": "https://www.smashingmagazine.com/2021/10/building-ssg-11ty-vite-jam-sandwich/", - "type": "article" - }, { "title": "Get Back to Basics With Static Website Generators", "url": "https://thenewstack.io/get-back-basics-static-website-generators/", @@ -2333,78 +2028,78 @@ "title": "Explore top posts about Web Development", "url": "https://app.daily.dev/tags/webdev?ref=roadmapsh", "type": "article" + }, + { + "title": "What is a static site generator", + "url": "https://www.youtube.com/watch?v=Qms4k6y7OgI", + "type": "video" } ] }, "CMrss8E2W0eA6DVEqtPjT": { "title": "Vuepress", - "description": "VuePress is composed of two parts: a minimalistic static site generator (opens new window)with a Vue-powered theming system and Plugin API, and a default theme optimized for writing technical documentation. It was created to support the documentation needs of Vue’s own sub projects.\n\nVisit the following resources to learn more:", + "description": "VuePress is a static site generator powered by Vue.js, primarily designed for creating documentation websites. It generates pre-rendered static HTML for each page, resulting in fast loading times and SEO-friendly content. VuePress features a Vue-powered theming system, automatic code syntax highlighting, and a default theme optimized for technical documentation. It supports markdown content with Vue components, allowing for dynamic and interactive documentation. VuePress offers built-in search functionality, responsive layouts, and easy customization through plugins and themes. While primarily used for documentation, it's versatile enough for blogs and simple websites. VuePress's combination of simplicity, performance, and Vue.js integration makes it popular for creating modern, fast-loading documentation sites and technical blogs.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website", "url": "https://vuepress.vuejs.org/", "type": "article" }, - { - "title": "Official Docs for Getting Started", - "url": "https://vuepress.vuejs.org/guide/getting-started.html", - "type": "article" - }, { "title": "Explore top posts about Vue.js", "url": "https://app.daily.dev/tags/vuejs?ref=roadmapsh", "type": "article" }, { - "title": "Introduction to VuePress", - "url": "https://www.youtube.com/watch?v=lIv1ItUzktc", + "title": "Whats VuePress?", + "url": "https://www.youtube.com/watch?v=iRhRdY7SQJg", "type": "video" } ] }, "XWJxV42Dpu2D3xDK10Pn3": { "title": "Nuxt.js", - "description": "Nuxt.js is an open-source development framework built on top of Node.js enabling Vue based web applications functionalities such as server-side rendering and generating static websites.\n\nVisit the following resources to learn more:", + "description": "Nuxt.js is a higher-level framework built on top of Vue.js, designed to create universal or single-page Vue applications. It simplifies the development process by providing a structured directory layout, automatic routing, and server-side rendering capabilities out of the box. Nuxt.js offers features like static site generation, code splitting, and asynchronous data fetching. It supports both client-side and server-side rendering, allowing developers to choose the most appropriate approach for each page. Nuxt.js emphasizes developer experience and performance optimization, making it popular for building scalable, SEO-friendly Vue applications. Its modular architecture and extensive plugin ecosystem enable easy integration of additional functionalities.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", - "url": "https://nuxtjs.org/", - "type": "article" + "title": "Nuxt.js Fundamentals", + "url": "https://vueschool.io/courses/nuxtjs-fundamentals", + "type": "course" }, { - "title": "Official Docs for Getting Started", - "url": "https://nuxtjs.org/docs/get-started", + "title": "Nuxt Website", + "url": "https://nuxtjs.org/", "type": "article" }, { - "title": "Mastering Nuxt.js", - "url": "https://masteringnuxt.com/", + "title": "Get Started with Nuxt", + "url": "https://explorers.netlify.com/learn/get-started-with-nuxt", "type": "article" }, { "title": "Explore top posts about JavaScript", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", "type": "article" - }, - { - "title": "Vue.js for Beginners - Full Course at freeCodeCamp YouTube Channel", - "url": "https://www.youtube.com/watch?v=FXpIoQ_rT_c", - "type": "video" } ] }, "iUxXq7beg55y76dkwhM13": { "title": "Astro", - "description": "Astro is an all-in-one web framework for building fast, content-focused websites. Astro combines the power of a modern component-based framework with the performance and flexibility of a static site generator.\n\n* Component Islands: A new web architecture for building faster websites.\n* Server-first API design: Move expensive hydration off of your users’ devices.\n* Zero JS, by default: No JavaScript runtime overhead to slow you down.\n* Edge-ready: Deploy anywhere, even a global edge runtime like Deno or Cloudflare.\n* Customizable: Tailwind, MDX, and 100+ other integrations to choose from.\n* UI-agnostic: Supports React, Preact, Svelte, Vue, Solid, Lit and more.\n\nVisit the following resources to learn more:", + "description": "Astro is a modern static site generator (SSG) and web framework designed for building fast, content-focused websites. It allows developers to use multiple frontend frameworks (like React, Vue, or Svelte) within the same project, automatically rendering components to static HTML at build time. Astro's unique \"partial hydration\" approach only sends JavaScript to the browser when necessary, resulting in significantly smaller bundle sizes and faster load times. The framework supports file-based routing, markdown content, and built-in optimizations for images and assets. Astro's component islands architecture enables developers to create interactive components while maintaining the performance benefits of static HTML, making it particularly well-suited for content-rich sites like blogs, documentation, and marketing pages.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Astro Website", + "title": "Astro Web Framework Crash Course", + "url": "https://www.youtube.com/watch?v=e-hTm5VmofI", + "type": "course" + }, + { + "title": "Astro Website", "url": "https://astro.build/", "type": "article" }, { - "title": "Official Astro Docs", - "url": "https://docs.astro.build/", + "title": "What is Astro?", + "url": "https://www.contentful.com/blog/what-is-astro/", "type": "article" } ] @@ -2432,23 +2127,13 @@ }, "V70884VcuXkfrfHyLGtUg": { "title": "Next.js", - "description": "Next.js is an open-source development framework built on top of Node.js enabling React based web applications functionalities such as server-side rendering and generating static websites.\n\nVisit the following resources to learn more:", + "description": "Next.js is a React-based open-source framework for building server-side rendered and statically generated web applications. It provides features like automatic code splitting, optimized performance, and simplified routing out of the box. Next.js supports both static site generation (SSG) and server-side rendering (SSR), allowing developers to choose the most appropriate rendering method for each page. The framework offers built-in CSS support, API routes for backend functionality, and easy deployment options. Next.js is known for its developer-friendly experience, with features like hot module replacement and automatic prefetching. Its ability to create hybrid apps that combine static and server-rendered pages makes it popular for building scalable, SEO-friendly web applications.\n\nVisit the following resources to learn more:", "links": [ { "title": "Official Website", "url": "https://nextjs.org/", "type": "article" }, - { - "title": "Official Docs for Getting Started", - "url": "https://nextjs.org/docs/getting-started", - "type": "article" - }, - { - "title": "Mastering Next.js", - "url": "https://masteringnextjs.com/", - "type": "article" - }, { "title": "Explore top posts about JavaScript", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", @@ -2463,7 +2148,7 @@ }, "PoM77O2OtxPELxfrW1wtl": { "title": "PWAs", - "description": "Progressive Web Apps (PWAs) are websites that are progressively enhanced to function like installed, native apps on supporting platforms, while functioning like regular websites on other browsers.\n\nVisit the following resources to learn more:", + "description": "Progressive Web Apps (PWAs) are web applications that use modern web capabilities to deliver an app-like experience to users. They combine the best features of web and native apps, offering reliability, speed, and engagement. PWAs are built using web technologies (HTML, CSS, JavaScript) but provide features typically associated with native apps, such as offline functionality, push notifications, and home screen installation. They are responsive, work across different devices and browsers, and are discoverable through search engines. PWAs use service workers for background processing and caching, enabling faster load times and offline access. This approach allows developers to create cross-platform applications that are both cost-effective to develop and easy to maintain, while providing users with a seamless, app-like experience directly through their web browser.\n\nVisit the following resources to learn more:", "links": [ { "title": "Learn PWA", @@ -2475,26 +2160,21 @@ "url": "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/", "type": "article" }, - { - "title": "Building a simple offline-capable Notepad app ", - "url": "https://www.amitmerchant.com/Building-Simple-Offline-Notepad-Using-Service-Worker/", - "type": "article" - }, { "title": "Explore top posts about Web Development", "url": "https://app.daily.dev/tags/webdev?ref=roadmapsh", "type": "article" }, { - "title": "Build a Progressive Web App", - "url": "https://www.youtube.com/watch?v=sFsRylCQblw", + "title": "Progressive Web Apps in 2024", + "url": "https://www.youtube.com/watch?v=3ODP6tTpjqA", "type": "video" } ] }, "VOGKiG2EZVfCBAaa7Df0W": { "title": "Mobile Apps", - "description": "A while back, developing a mobile app using JavaScript was impossible. But now JavaScript developers can create mobile applications using their knowledge for web development. Here is the list of options to create mobile applications in JavaScript.", + "description": "Mobile applications are software programs designed to run on mobile devices such as smartphones and tablets. They are typically distributed through app stores like Google Play or Apple's App Store. Mobile apps can be native (built specifically for one platform using languages like Swift for iOS or Kotlin for Android), hybrid (web technologies wrapped in a native container), or cross-platform (using frameworks like React Native or Flutter). These apps leverage device-specific features such as GPS, cameras, and sensors to provide rich, interactive experiences. They cover a wide range of functions from productivity and entertainment to social networking and e-commerce. Mobile app development considers factors like user interface design, performance optimization, offline functionality, and security to ensure a smooth user experience across various devices and operating systems.", "links": [ { "title": "React Native", @@ -2525,16 +2205,16 @@ }, "dsTegXTyupjS8iU6I7Xiv": { "title": "React Native", - "description": "React Native is a popular JavaScript-based mobile app framework that allows you to build natively-rendered mobile apps for iOS and Android. The framework lets you create an application for various platforms by using the same codebase.\n\nVisit the following resources to learn more:", + "description": "React Native is an open-source mobile application development framework created by Facebook. It allows developers to build native mobile apps for iOS and Android using JavaScript and React. React Native translates JavaScript code into native components, providing near-native performance and a genuine native user interface. It enables code reuse across platforms, speeding up development and reducing costs. The framework offers hot reloading for quick iterations, access to native APIs, and a large ecosystem of third-party plugins. React Native's \"learn once, write anywhere\" philosophy and its ability to bridge web and mobile development make it popular for creating cross-platform mobile applications, especially among teams already familiar with React for web development.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Website", - "url": "https://reactnative.dev/", + "title": "React Native Roadmap", + "url": "/react-native", "type": "article" }, { - "title": "Official Getting Started to React Native", - "url": "https://reactnative.dev/docs/getting-started", + "title": "Official Website", + "url": "https://reactnative.dev/", "type": "article" }, { @@ -2546,8 +2226,13 @@ }, "dIQXjFEUAJAGxxfAYceHU": { "title": "Flutter", - "description": "Flutter is a free and open-source mobile UI framework created by Google and released in May 2017. In a few words, it allows you to create a native mobile application with only one codebase. This means that you can use one programming language and one codebase to create two different apps (for iOS and Android).\n\nFlutter consists of two important parts:\n\n* An SDK (Software Development Kit): A collection of tools that are going to help you develop your applications. This includes tools to compile your code into native machine code (code for iOS and Android).\n* A Framework (UI Library based on widgets): A collection of reusable UI elements (buttons, text inputs, sliders, and so on) that you can personalize for your own needs. To develop with Flutter, you will use a programming language called Dart. The language was created by Google in October 2011, but it has improved a lot over these past years.\n\nDart focuses on front-end development, and you can use it to create mobile and web applications.\n\nIf you know a bit of programming, Dart is a typed object programming language. You can compare Dart's syntax to JavaScript.\n\nVisit the following resources to learn more:", + "description": "Flutter is an open-source UI software development kit created by Google for building natively compiled, multi-platform applications from a single codebase. It uses the Dart programming language and provides a rich set of pre-designed widgets for creating responsive and visually appealing user interfaces. Flutter's architecture allows for fast development with hot reload, enabling developers to see changes instantly. It supports iOS, Android, web, and desktop platforms, offering true cross-platform development. Flutter uses a custom rendering engine, Skia, to draw UI components, ensuring consistent appearance across devices. While known for mobile app development, Flutter's expanding ecosystem and performance improvements have increased its adoption for web and desktop applications as well.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Flutter course for beginners", + "url": "https://www.youtube.com/watch?v=VPvVD8t02U8", + "type": "course" + }, { "title": "Visit Dedicated Flutter Roadmap", "url": "https://roadmap.sh/flutter", @@ -2559,8 +2244,8 @@ "type": "article" }, { - "title": "Learn Dart Programming", - "url": "https://www.tutorialspoint.com/dart_programming/index.htm", + "title": "Flutter for Desktop", + "url": "https://flutter.dev/multi-platform/desktop", "type": "article" }, { @@ -2572,69 +2257,43 @@ "title": "Explore top posts about Flutter", "url": "https://app.daily.dev/tags/flutter?ref=roadmapsh", "type": "article" - }, - { - "title": "Flutter Tutorial for Beginners", - "url": "https://www.youtube.com/watch?v=1ukSR1GRtMU&list=PL4cUxeGkcC9jLYyp2Aoh6hcWuxFDX6PBJ", - "type": "video" } ] }, "xmRv6-L45m5MDpHmdHFCL": { "title": "Ionic", - "description": "Ionic framework is an open-source UI toolkit for building performant, high-quality mobile apps, desktop apps, and progressive web apps using web technologies such as HTML, CSS, and JavaScript.\n\nVisit the following resources to learn more:", + "description": "Ionic is an open-source UI toolkit for building high-quality, cross-platform mobile and desktop applications using web technologies (HTML, CSS, and JavaScript). It leverages popular web frameworks like Angular, React, or Vue.js for application logic, while providing a rich set of pre-built UI components and native device functionalities. Ionic uses Cordova or Capacitor to wrap web apps for native deployment, allowing developers to create hybrid apps that can access device features through plugins. The framework emphasizes performance and native look-and-feel, offering adaptive styling for different platforms. With its focus on web standards and cross-platform compatibility, Ionic enables developers to maintain a single codebase for multiple platforms, making it a popular choice for rapid mobile app development.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "ionic-team/ionic-framework", + "url": "https://github.com/ionic-team/ionic-framework", + "type": "opensource" + }, { "title": "Official Website", "url": "https://ionicframework.com/", "type": "article" }, { - "title": "Official Getting Started to Ionic framework", - "url": "https://ionicframework.com/docs/", + "title": "Ionic 8 Announcment", + "url": "https://ionic.io/blog/ionic-8-is-here", "type": "article" }, { "title": "Explore top posts about Ionic", "url": "https://app.daily.dev/tags/ionic?ref=roadmapsh", "type": "article" - }, - { - "title": "Ionic Framework 4 - Full Tutorial", - "url": "https://www.youtube.com/watch?v=AvbuIRg8_Jg", - "type": "video" } ] }, "KMA7NkxFbPoUDtFnGBFnj": { "title": "Desktop Apps", - "description": "A while back, developing a desktop app using JavaScript was impossible. But now JavaScript developers can create desktop applications using their knowledge for web development. Here is the list of options to create desktop applications in JavaScript.", - "links": [ - { - "title": "Electron", - "url": "https://www.electronjs.org/", - "type": "article" - }, - { - "title": "NodeGUI", - "url": "https://docs.nodegui.org/", - "type": "article" - }, - { - "title": "NW.js", - "url": "https://nwjs.io/", - "type": "article" - }, - { - "title": "Meteor", - "url": "https://www.meteor.com/", - "type": "article" - } - ] + "description": "Desktop applications applications typically use frameworks like Electron, NW.js (Node-WebKit), or Tauri, which combine a JavaScript runtime with a native GUI toolkit. This approach allows developers to use their web development skills to create cross-platform desktop apps. Electron, developed by GitHub, is particularly popular, powering applications like Visual Studio Code, Atom, and Discord. These frameworks provide APIs to access native system features, enabling JavaScript to interact with the file system, system tray, and other OS-specific functionalities. While offering rapid development and cross-platform compatibility, JavaScript desktop apps can face challenges in terms of performance and resource usage compared to traditional native applications. However, they benefit from the vast ecosystem of JavaScript libraries and tools, making them an attractive option for many developers and businesses.", + "links": [] }, "mQHpSyMR4Rra4mqAslgiS": { "title": "Electron", - "description": "Electron allows you to build cross-platform desktop applications with HTML, CSS, and Javascript/Typescript. It uses Chromium and Node.js, so essentially it is a \"Browser\" like application that is compatible with Mac, Windows, and Linux.\n\nVisit the following resources to learn more:", + "description": "Electron is an open-source framework developed by GitHub that enables developers to build cross-platform desktop applications using web technologies. It combines the Chromium rendering engine with the Node.js runtime, allowing applications to be written in HTML, CSS, and JavaScript. Electron provides APIs to access native operating system functions, bridging the gap between web and desktop development. It's widely used for creating popular applications like Visual Studio Code, Atom, and Discord. Electron apps benefit from rapid development cycles, cross-platform compatibility, and access to a vast ecosystem of web technologies and Node.js modules. However, they can face challenges with resource usage and performance compared to native applications. Despite these trade-offs, Electron remains a popular choice for developers seeking to leverage web skills for desktop app development.\n\nVisit the following resources to learn more:", "links": [ { "title": "Electron Website", @@ -2660,7 +2319,7 @@ }, "GJctl0tVXe4B70s35RkLT": { "title": "Tauri", - "description": "Tauri is a toolkit that helps developers make applications for the major desktop platforms - using virtually any frontend framework in existence. The core is built with Rust, and the CLI leverages Node.js making Tauri a genuinely polyglot approach to creating and maintaining great apps.\n\nVisit the following resources to learn more:", + "description": "Tauri is an open-source framework for building lightweight, secure desktop applications using web technologies. It allows developers to create cross-platform apps with HTML, CSS, and JavaScript, while using a Rust backend for core functionality. Tauri offers smaller bundle sizes compared to Electron, as it leverages the operating system's native webview instead of bundling Chromium. It provides robust security features, including a custom protocol for IPC (Inter-Process Communication) and fine-grained permissions. Tauri supports multiple JavaScript frameworks and offers API bindings for various system-level operations. Its emphasis on performance, security, and small binary sizes makes it an attractive option for developers seeking to create efficient desktop applications with web technologies.\n\nVisit the following resources to learn more:", "links": [ { "title": "Tauri Website", @@ -2681,8 +2340,13 @@ }, "2MRvAK9G9RGM_auWytcKh": { "title": "Flutter", - "description": "Flutter is a free and open-source multi-platform UI framework created by Google and released in May 2017. In a few words, it allows you to create a native mobile application with only one codebase. This means that you can use one programming language and one codebase to create three different apps (for iOS, Android and Desktop).\n\nVisit the following resources to learn more:", + "description": "Flutter is an open-source UI software development kit created by Google for building natively compiled, multi-platform applications from a single codebase. It uses the Dart programming language and provides a rich set of pre-designed widgets for creating responsive and visually appealing user interfaces. Flutter's architecture allows for fast development with hot reload, enabling developers to see changes instantly. It supports iOS, Android, web, and desktop platforms, offering true cross-platform development. Flutter uses a custom rendering engine, Skia, to draw UI components, ensuring consistent appearance across devices. While known for mobile app development, Flutter's expanding ecosystem and performance improvements have increased its adoption for web and desktop applications as well.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Flutter course for beginners", + "url": "https://www.youtube.com/watch?v=VPvVD8t02U8", + "type": "course" + }, { "title": "Visit Dedicated Flutter Roadmap", "url": "https://roadmap.sh/flutter", @@ -2698,11 +2362,6 @@ "url": "https://flutter.dev/multi-platform/desktop", "type": "article" }, - { - "title": "Learn Dart Programming", - "url": "https://www.tutorialspoint.com/dart_programming/index.htm", - "type": "article" - }, { "title": "12 Ways Flutter Streamlines App Development", "url": "https://thenewstack.io/12-ways-flutter-streamlines-app-development/", @@ -2712,33 +2371,38 @@ "title": "Explore top posts about Flutter", "url": "https://app.daily.dev/tags/flutter?ref=roadmapsh", "type": "article" - }, - { - "title": "Flutter Tutorial for Beginners", - "url": "https://www.youtube.com/watch?v=1ukSR1GRtMU&list=PL4cUxeGkcC9jLYyp2Aoh6hcWuxFDX6PBJ", - "type": "video" } ] }, "-DsETM9xLgHyGZthptj1Y": { "title": "PRPL Pattern", - "description": "The PRPL pattern is a performance optimization pattern for web applications that focuses on minimizing the time it takes for the initial rendering of a web page. It stands for Push, Render, Pre-cache, and Lazy-load, and it involves the following steps:\n\n* Push: Prioritize the delivery of critical resources, such as HTML, CSS, and JavaScript, to the client as early as possible.\n* Render: Start rendering the web page as soon as the critical resources are received, even if some non-critical resources are still being downloaded.\n* Pre-cache: Pre-cache non-critical resources in the background so that they are available when needed.\n* Lazy-load: Defer the loading of non-critical resources until they are needed, such as when the user scrolls to them or interacts with them.\n\nThe PRPL pattern is designed to improve the perceived performance of a web page by reducing the time it takes for the page to become interactive. It is particularly useful for applications that are served over slow or unreliable networks, as it allows the page to render as quickly as possible and then gradually load the remaining resources.\n\nVisit the following resources to learn more:", + "description": "The PRPL pattern is a web application architecture strategy designed to improve performance, especially on mobile devices. PRPL stands for Push, Render, Pre-cache, and Lazy-load. It focuses on optimizing the initial load time and subsequent navigation speed. The pattern involves pushing critical resources for the initial route, rendering the initial route as quickly as possible, pre-caching remaining routes, and lazy-loading other routes and non-critical assets. This approach aims to deliver a near-instant loading experience for users, particularly on slower networks and less powerful devices. PRPL is often implemented using modern web technologies like service workers and is commonly associated with Progressive Web Apps (PWAs), though it can be applied to various web application architectures.\n\nVisit the following resources to learn more:", "links": [ { "title": "PRPL Pattern - Google Developers", "url": "https://developers.google.com/web/fundamentals/performance/prpl-pattern", "type": "article" + }, + { + "title": "PRPL Pattern", + "url": "https://www.patterns.dev/vanilla/prpl/", + "type": "article" } ] }, "xD5WfEP7Ez0oi3890UgmH": { "title": "RAIL Model", - "description": "The RAIL model is a performance optimization model for web applications that focuses on improving the perceived performance of a web page. It stands for Response, Animation, Idle, and Load, and it involves the following four performance goals:\n\n* Response: The time it takes for the web page to respond to user input should be under 100 milliseconds.\n* Animation: The time it takes for an animation to run should be under 10 milliseconds.\n* Idle: The web page should take advantage of idle time to perform non-critical tasks.\n* Load: The time it takes for the web page to fully load should be under 1 second.\n\nThe RAIL model is designed to provide a framework for optimizing the performance of a web page by focusing on the four key areas that impact the user's perception of performance. It is particularly useful for applications that require high levels of interactivity, such as games and social media applications.\n\nVisit the following resources to learn more:", + "description": "The RAIL Model is a user-centric performance model developed by Google that focuses on improving web application responsiveness and user experience. RAIL stands for Response, Animation, Idle, and Load. It provides specific performance goals: Responses to user input should occur within 100ms; Animations should run at 60 frames per second (16ms per frame); Idle time should be used to complete deferred work; and Load time for interactive content should be under 5 seconds. The model emphasizes the importance of perceived performance, encouraging developers to prioritize user interactions and break up long tasks. By adhering to RAIL guidelines, developers can create web applications that feel fast and responsive, enhancing user satisfaction and engagement.\n\nVisit the following resources to learn more:", "links": [ { "title": "RAIL Model - Google Developers", "url": "https://developers.google.com/web/fundamentals/performance/rail", "type": "article" + }, + { + "title": "An Overview of the RAIL performance model", + "url": "https://www.keycdn.com/blog/rail-performance-model", + "type": "article" } ] }, @@ -2752,8 +2416,8 @@ "type": "article" }, { - "title": "Measuring performance and user experience - Google Developers", - "url": "https://web.dev/metrics/", + "title": "Measuring web performance in 2024", + "url": "https://requestmetrics.com/web-performance/measure-web-performance/", "type": "article" }, { @@ -2770,7 +2434,7 @@ }, "RIhHMHLsLLPhNl05Q9aBf": { "title": "Using Lighthouse", - "description": "Lighthouse is an open-source tool developed by Google that is used to audit the performance, accessibility, and SEO of web pages. It is available as a browser extension and as a command-line tool, and it can be run on any web page to generate a report with recommendations for improvement.\n\nLighthouse works by simulating the load and interaction of a web page and measuring various performance metrics, such as load time, time to first paint, and time to interactive. It also checks for common issues such as incorrect image sizes, missing alt text, and broken links.\n\nLighthouse provides a comprehensive and easy-to-use tool for identifying and fixing performance and accessibility issues on web pages. It is widely used by web developers and is integrated into many popular development tools.\n\nVisit the following resources to learn more:", + "description": "Lighthouse is an open-source tool developed by Google that is used to audit the performance, accessibility, and SEO of web pages. It is available as a browser extension and as a command-line tool, and it can be run on any web page to generate a report with recommendations for improvement. Lighthouse works by simulating the load and interaction of a web page and measuring various performance metrics, such as load time, time to first paint, and time to interactive. It also checks for common issues such as incorrect image sizes, missing alt text, and broken links. Lighthouse provides a comprehensive and easy-to-use tool for identifying and fixing performance and accessibility issues on web pages. It is widely used by web developers and is integrated into many popular development tools.\n\nVisit the following resources to learn more:", "links": [ { "title": "Lighthouse - Google Developers", @@ -2783,21 +2447,26 @@ "type": "article" }, { - "title": "Improving Load Performance - Chrome DevTools 101", - "url": "https://www.youtube.com/watch?v=5fLW5Q5ODiE", + "title": "What is Google Lighthouse and how to use it", + "url": "https://www.youtube.com/watch?v=VyaHwvPWuZU", "type": "video" } ] }, "3_sJHKTogkDoCjR518-OL": { "title": "Using DevTools", - "description": "Most of the browsers have built-in developer tools that help you perform web development specific tasks on a webpage. My personal recommendation would be to use Chrome DevTools as it is the most advanced and has the most features. However, if you are using a different browser, you can still use the DevTools to debug your web application.\n\nChrome DevTools is a set of web development tools built into the Google Chrome browser. It allows web developers to debug and optimize web pages by providing a range of features for inspecting and manipulating the page's HTML, CSS, and JavaScript.\n\nSome of the features provided by Chrome DevTools include:\n\n* **Elements panel**: Inspect and modify the page's HTML and CSS.\n* **Console panel**: View and debug JavaScript errors and log messages.\n* **Network panel**: Monitor network requests and responses, and analyze performance issues.\n* **Performance panel**: Analyze the performance of the page and identify bottlenecks.\n* **Application panel**: Inspect the page's resources, such as cookies and local storage.\n\nChrome DevTools is a powerful and essential tool for web developers, and it is widely used to debug and optimize web pages. It is constantly updated with new features and improvements, and it is available on all modern web browsers.\n\nVisit the following resources to learn more:", + "description": "Browser Developer Tools, commonly known as DevTools, are built-in features in modern web browsers that provide a suite of debugging and development capabilities. These tools allow developers to inspect, edit, and debug HTML, CSS, and JavaScript in real-time on web pages. Key features include:\n\n1. DOM inspector for viewing and modifying page structure\n2. Console for JavaScript debugging and logging\n3. Network panel for analyzing HTTP requests and responses\n4. Performance profiler for optimizing page load and runtime performance\n5. Application panel for managing storage, caches, and service workers\n6. Source panel for setting breakpoints and debugging JavaScript\n7. Elements panel for live CSS editing\n8. Device emulation for testing responsive designs\n\nDevTools are essential for front-end development, performance optimization, and cross-browser compatibility testing, providing developers with crucial insights into web application behavior and structure.\n\nVisit the following resources to learn more:", "links": [ { "title": "Chrome DevTools - Google Developers", "url": "https://developers.google.com/web/tools/chrome-devtools", "type": "article" }, + { + "title": "Firefox DevTools User Docs", + "url": "https://firefox-source-docs.mozilla.org/devtools-user/", + "type": "article" + }, { "title": "Explore top posts about DevTools", "url": "https://app.daily.dev/tags/devtools?ref=roadmapsh", @@ -2807,7 +2476,7 @@ }, "raoa-75p_DyBAycvy3yVv": { "title": "Storage", - "description": "The Web Storage API provides mechanisms for storing key-value pairs in a web browser. It includes two storage objects: localStorage and sessionStorage, which allow you to save data on the client side and persist it across multiple browser sessions, respectively.\n\nThe Web Storage API is designed to be simple and easy to use, and it is widely supported across modern web browsers. It is often used as an alternative to cookies, as it allows for larger amounts of data to be stored and is more efficient in terms of performance.\n\nVisit the following resources to learn more:", + "description": "The Web Storage API provides mechanisms for storing key-value pairs in a web browser. It includes two storage objects: localStorage and sessionStorage, which allow you to save data on the client side and persist it across multiple browser sessions, respectively. The Web Storage API is designed to be simple and easy to use, and it is widely supported across modern web browsers. It is often used as an alternative to cookies, as it allows for larger amounts of data to be stored and is more efficient in terms of performance.\n\nVisit the following resources to learn more:", "links": [ { "title": "Web Storage API - MDN", @@ -2823,52 +2492,87 @@ }, "NDJR8UCoa31v45TBFP7we": { "title": "Web Sockets", - "description": "Web Sockets is a technology that allows for full-duplex communication over a single TCP connection. It enables real-time, bi-directional communication between a client and a server, and is typically used in applications that require high-speed, low-latency communication, such as online gaming and real-time data streaming.\n\nWeb Sockets utilizes a persistent connection between a client and a server, allowing for continuous data exchange without the need for the client to send additional requests to the server. This makes it more efficient and faster than other technologies, such as HTTP, which require a new request to be sent for each piece of data.\n\nWeb Sockets is supported by most modern web browsers and can be used with a variety of programming languages and frameworks.\n\nVisit the following resources to learn more:", + "description": "Web Sockets is a technology that allows for full-duplex communication over a single TCP connection. It enables real-time, bi-directional communication between a client and a server, and is typically used in applications that require high-speed, low-latency communication, such as online gaming and real-time data streaming. Web Sockets utilizes a persistent connection between a client and a server, allowing for continuous data exchange without the need for the client to send additional requests to the server. This makes it more efficient and faster than other technologies, such as HTTP, which require a new request to be sent for each piece of data. Web Sockets is supported by most modern web browsers and can be used with a variety of programming languages and frameworks.\n\nVisit the following resources to learn more:", "links": [ { "title": "Web Sockets - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API", "type": "article" + }, + { + "title": "What are Web Sockets?", + "url": "https://www.pubnub.com/guides/websockets/", + "type": "article" + }, + { + "title": "How Web Sockets Work", + "url": "https://www.youtube.com/watch?v=pnj3Jbho5Ck", + "type": "video" } ] }, "doPe92aUpo-8KWhi45lWK": { "title": "Server Sent Events", - "description": "Server-Sent Events (SSE) is a technology that allows a web server to push data to a client in real-time. It uses an HTTP connection to send a stream of data from the server to the client, and the client can listen for these events and take action when they are received.\n\nSSE is useful for applications that require real-time updates, such as chat systems, stock tickers, and social media feeds. It is a simple and efficient way to establish a long-lived connection between a client and a server, and it is supported by most modern web browsers.\n\nTo use SSE, the client must create an EventSource object and specify the URL of the server-side script that will send the events. The server can then send events by writing them to the response stream with the proper formatting.\n\nVisit the following resources to learn more:", + "description": "Server-Sent Events (SSE) is a technology that allows a web server to push data to a client in real-time. It uses an HTTP connection to send a stream of data from the server to the client, and the client can listen for these events and take action when they are received. SSE is useful for applications that require real-time updates, such as chat systems, stock tickers, and social media feeds. It is a simple and efficient way to establish a long-lived connection between a client and a server, and it is supported by most modern web browsers.\n\nTo use SSE, the client must create an EventSource object and specify the URL of the server-side script that will send the events. The server can then send events by writing them to the response stream with the proper formatting.\n\nVisit the following resources to learn more:", "links": [ { "title": "Server-Sent Events - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events", "type": "article" + }, + { + "title": "Server-Sent Events - Postman", + "url": "https://www.youtube.com/watch?v=KrE044J8jEQ", + "type": "video" } ] }, "TldWoXiqKxM4X3JONKAR7": { "title": "Service Workers", - "description": "Service Workers are a type of web worker that acts as a proxy between a web page and the network, allowing web developers to build offline-first and reliable applications. Service Workers can intercept network requests, access the cache, and make decisions on how to respond to a request based on the available resources.\n\nService Workers are written in JavaScript and are registered by a web page. Once registered, they can control the page and all its requests, even when the page is not open in a browser. This allows Service Workers to enable features such as push notifications, background synchronization, and offline support.\n\nService Workers are supported by most modern web browsers, and they are an essential component of progressive web applications (PWAs).\n\nVisit the following resources to learn more:", + "description": "Service Workers are a type of web worker that acts as a proxy between a web page and the network, allowing web developers to build offline-first and reliable applications. Service Workers can intercept network requests, access the cache, and make decisions on how to respond to a request based on the available resources. Service Workers are written in JavaScript and are registered by a web page. Once registered, they can control the page and all its requests, even when the page is not open in a browser. This allows Service Workers to enable features such as push notifications, background synchronization, and offline support. Service Workers are supported by most modern web browsers, and they are an essential component of progressive web applications (PWAs).\n\nVisit the following resources to learn more:", "links": [ { "title": "Service Workers - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API", "type": "article" + }, + { + "title": "Service Workers - Google", + "url": "https://web.dev/learn/pwa/service-workers", + "type": "article" + }, + { + "title": "Web Workers Explained", + "url": "https://www.youtube.com/watch?v=JMKLXGwltGc", + "type": "video" } ] }, "YbGGYoKJEx29PlvopUBiM": { "title": "Location", - "description": "The Geolocation API is a web API that provides access to the device's location data, such as latitude and longitude. It allows web developers to build location-based applications, such as mapping and location sharing, by using the device's GPS, Wi-Fi, and other sensors to determine the user's location.\n\nTo use the Geolocation API, a web page must first request permission from the user to access their location. If permission is granted, the page can then use the `navigator.geolocation` object to access the device's location data. The API provides several methods for getting the user's current location, watching for location changes, and calculating distances between two locations.\n\nVisit the following resources to learn more:", + "description": "The Geolocation API is a web API that provides access to the device's location data, such as latitude and longitude. It allows web developers to build location-based applications, such as mapping and location sharing, by using the device's GPS, Wi-Fi, and other sensors to determine the user's location. To use the Geolocation API, a web page must first request permission from the user to access their location. If permission is granted, the page can then use the `navigator.geolocation` object to access the device's location data. The API provides several methods for getting the user's current location, watching for location changes, and calculating distances between two locations.\n\nVisit the following resources to learn more:", "links": [ { "title": "Geolocation API - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API", "type": "article" + }, + { + "title": "Geolocation API overview", + "url": "https://developers.google.com/maps/documentation/geolocation/overview", + "type": "article" } ] }, "6AlcArOiJMhHXguAosDzn": { "title": "Notifications", - "description": "The Notifications API is a web API that allows web pages to display system-level notifications to the user. These notifications can be used to alert the user of important events, such as new messages or updates, even when the web page is not open in the browser.\n\nTo use the Notifications API, a web page must first request permission from the user to display notifications. If permission is granted, the page can then use the `Notification` constructor to create a new notification and display it to the user. The notification can include a title, body text, and an icon, and it can be customized with options such as a timeout and a click action.\n\nVisit the following resources to learn more:", + "description": "The Notifications API is a web API that allows web pages to display system-level notifications to the user. These notifications can be used to alert the user of important events, such as new messages or updates, even when the web page is not open in the browser. To use the Notifications API, a web page must first request permission from the user to display notifications. If permission is granted, the page can then use the `Notification` constructor to create a new notification and display it to the user. The notification can include a title, body text, and an icon, and it can be customized with options such as a timeout and a click action.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Get Started With The Notifications API", + "url": "https://web.dev/articles/codelab-notifications-get-started", + "type": "article" + }, { "title": "Notifications API - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API", @@ -2883,40 +2587,55 @@ }, "Fd0hQh1DleM0gMzCpGou4": { "title": "Device Orientation", - "description": "The Device Orientation API is a web API that provides access to the device's orientation and motion data, such as its pitch, roll, and yaw. It allows web developers to build applications that can respond to the device's orientation and motion, such as augmented reality and motion-controlled games.\n\nTo use the Device Orientation API, a web page must first request permission from the user to access the device's orientation data. If permission is granted, the page can then use the DeviceOrientationEvent object to access the device's orientation data and respond to changes in orientation. The API provides several properties for accessing the device's orientation and motion data, as well as events for detecting changes in orientation.\n\nThe Device Orientation API is supported by most modern web browsers and is often used in conjunction with other APIs, such as the Geolocation API, to build location-based applications.\n\nVisit the following resources to learn more:", + "description": "The Device Orientation API is a web API that provides access to the device's orientation and motion data, such as its pitch, roll, and yaw. It allows web developers to build applications that can respond to the device's orientation and motion, such as augmented reality and motion-controlled games. To use the Device Orientation API, a web page must first request permission from the user to access the device's orientation data. If permission is granted, the page can then use the DeviceOrientationEvent object to access the device's orientation data and respond to changes in orientation. The API provides several properties for accessing the device's orientation and motion data, as well as events for detecting changes in orientation.\n\nVisit the following resources to learn more:", "links": [ { "title": "Device Orientation API - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Device_orientation_events", "type": "article" + }, + { + "title": "Detect the device orientation with JS", + "url": "https://www.youtube.com/watch?v=fMDuFoqSQfw", + "type": "video" } ] }, "MAM1nuVk-h4AvTUk4nvmj": { "title": "Payments", - "description": "The Payment Request API is a web API that allows web developers to build checkout flows within their web applications. It provides a standardized, browser-based interface for collecting payment and shipping information from the user, and it supports a wide range of payment methods, including credit cards, debit cards, and digital wallets.\n\nTo use the Payment Request API, a web page must first create a `PaymentRequest` object and specify the payment and shipping options that are available to the user. The page can then invoke the Payment Request UI by calling the `show()` method on the `PaymentRequest` object. The user can then select their preferred payment and shipping options and confirm the payment, at which point the Payment Request API will return a payment response object that can be used to complete the transaction.\n\nThe Payment Request API is supported by most modern web browsers and is designed to be simple and efficient for both the developer and the user.\n\nVisit the following resources to learn more:", + "description": "The Payment Request API is a web API that allows web developers to build checkout flows within their web applications. It provides a standardized, browser-based interface for collecting payment and shipping information from the user, and it supports a wide range of payment methods, including credit cards, debit cards, and digital wallets. To use the Payment Request API, a web page must first create a `PaymentRequest` object and specify the payment and shipping options that are available to the user. The page can then invoke the Payment Request UI by calling the `show()` method on the `PaymentRequest` object. The user can then select their preferred payment and shipping options and confirm the payment, at which point the Payment Request API will return a payment response object that can be used to complete the transaction.\n\nVisit the following resources to learn more:", "links": [ { "title": "Payment Request API - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Payment_Request_API", "type": "article" + }, + { + "title": "The Payment Request API", + "url": "https://www.w3.org/TR/payment-request/", + "type": "article" } ] }, "opu2bAsmdWHqWqtsCscLC": { "title": "Credentials", - "description": "The Credential Management API is a web API that allows web developers to integrate password-based and federated login flows into their applications. It provides a standardized, browser-based interface for storing and retrieving user credentials, such as username and password combinations and OAuth tokens.\n\nTo use the Credential Management API, a web page must first create a Credential object and specify the credentials that the user wishes to store. The page can then use the navigator.credentials object to store and retrieve the user's credentials. The API provides several methods for storing and retrieving credentials, as well as for prompting the user to sign in or sign up.\n\nThe Credential Management API is supported by most modern web browsers and is designed to improve the security and usability of login flows by allowing the user to store and reuse their credentials across multiple sites and devices.\n\nVisit the following resources to learn more:", + "description": "The Credential Management API is a web standard that allows websites to interact with the browser's credential manager to store, retrieve, and manage user credentials. It provides a programmatic interface for seamless and secure user authentication, enabling features like automatic sign-in and one-tap sign-up. The API supports various credential types, including passwords, federated identities, and public key credentials. By leveraging this API, developers can improve user experience by reducing login friction, implementing smoother account switching, and enhancing overall security. It works in conjunction with password managers and platform authenticators, helping to streamline authentication processes across devices and browsers while adhering to modern security practices.\n\nVisit the following resources to learn more:", "links": [ { "title": "Credential Management API - MDN", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Credential_Management_API", "type": "article" + }, + { + "title": "The Credential Management API", + "url": "https://web.dev/articles/security-credential-management", + "type": "article" } ] }, "h26uS3muFCabe6ekElZcI": { "title": "SWC", - "description": "**SWC** (Speedy Web Compiler) is a JavaScript and TypeScript compiler and bundler built in Rust. Unlike Babel, which is JavaScript-based, SWC leverages Rust for blazing-fast performance, making it an ideal choice for large-scale projects. It focuses on speed while offering modern features like tree shaking, JSX transformation, and module bundling, catering to frontend development and build optimization.\n\nVisit the following resources to learn more:", + "description": "The Speedy Web Compiler (SWC) is a fast, extensible JavaScript/TypeScript compiler written in Rust. It's designed as a faster alternative to Babel for transpiling modern JavaScript code into backwards-compatible versions. SWC can be used for both compilation and bundling, offering significant performance improvements over traditional JavaScript-based tools. It supports latest ECMAScript features, JSX, and TypeScript, and can be configured for custom transformations. SWC is commonly used in development environments to speed up build times and in production builds to optimize code. Its speed and compatibility make it increasingly popular in large-scale JavaScript projects and as a core component in other build tools and frameworks aiming for improved performance.\n\nVisit the following resources to learn more:", "links": [ { "title": "SWC Website", @@ -2928,11 +2647,6 @@ "url": "https://swc.rs/docs/", "type": "article" }, - { - "title": "SWC vs Babel: A Rust-Powered Speed Revolution", - "url": "https://blog.logrocket.com/swc-vs-babel/", - "type": "article" - }, { "title": "Why SWC is the Future of JavaScript Tooling", "url": "https://dev.to/somelink/why-swc-is-the-future-of-javascript-tooling", @@ -2944,24 +2658,29 @@ "type": "article" }, { - "title": "Introduction to SWC", - "url": "https://www.youtube.com/watch?v=wlmbNWC3yB8", + "title": "Introduction to Speedy Web Compiler", + "url": "https://www.youtube.com/watch?v=RXQlPpbdn_E", "type": "video" } ] }, "wA2fSYsbBYU02VJXAvUz8": { "title": "Astro", - "description": "Astro is an all-in-one web framework for building fast, content-focused websites. Astro combines the power of a modern component-based framework with the performance and flexibility of a static site generator.\n\n* Component Islands: A new web architecture for building faster websites.\n* Server-first API design: Move expensive hydration off of your users’ devices.\n* Zero JS, by default: No JavaScript runtime overhead to slow you down.\n* Edge-ready: Deploy anywhere, even a global edge runtime like Deno or Cloudflare.\n* Customizable: Tailwind, MDX, and 100+ other integrations to choose from.\n* UI-agnostic: Supports React, Preact, Svelte, Vue, Solid, Lit and more.\n\nVisit the following resources to learn more:", + "description": "Astro is a modern static site generator (SSG) and web framework designed for building fast, content-focused websites. It allows developers to use multiple frontend frameworks (like React, Vue, or Svelte) within the same project, automatically rendering components to static HTML at build time. Astro's unique \"partial hydration\" approach only sends JavaScript to the browser when necessary, resulting in significantly smaller bundle sizes and faster load times. The framework supports file-based routing, markdown content, and built-in optimizations for images and assets. Astro's component islands architecture enables developers to create interactive components while maintaining the performance benefits of static HTML, making it particularly well-suited for content-rich sites like blogs, documentation, and marketing pages.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Official Astro Website", + "title": "Astro Web Framework Crash Course", + "url": "https://www.youtube.com/watch?v=e-hTm5VmofI", + "type": "course" + }, + { + "title": "Astro Website", "url": "https://astro.build/", "type": "article" }, { - "title": "Official Astro Docs", - "url": "https://docs.astro.build/", + "title": "What is Astro?", + "url": "https://www.contentful.com/blog/what-is-astro/", "type": "article" } ] diff --git a/public/roadmap-content/git-github.json b/public/roadmap-content/git-github.json index 6044e2025..fc0042fd7 100644 --- a/public/roadmap-content/git-github.json +++ b/public/roadmap-content/git-github.json @@ -267,6 +267,11 @@ "url": "https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging", "type": "article" }, + { + "title": "Learn Git Branching", + "url": "https://learngitbranching.js.org/", + "type": "article" + }, { "title": "Git Branches Tutorial", "url": "https://www.youtube.com/watch?v=e2IbNHi4uCI", diff --git a/public/roadmap-content/ios.json b/public/roadmap-content/ios.json index 5740a70d7..013b936fe 100644 --- a/public/roadmap-content/ios.json +++ b/public/roadmap-content/ios.json @@ -112,8 +112,29 @@ }, "IduGSdUa2Fi7VFMLKgmsS": { "title": "iOS Architecture", - "description": "", - "links": [] + "description": "iOS architecture refers to the design principles and patterns used to build iOS applications. It focuses on how to structure code, manage data, and ensure a smooth user experience. These architectural patterns help developers create maintainable, scalable, and testable applications while following best practices specific to iOS development. Use cases of these architectures may vary according to the requirements of the application. For example, MVC is used for simple apps, while MVVM is considered when the app is large and complex.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Model-View-Controller Pattern in swift (MVC) for Beginners", + "url": "https://ahmedaminhassanismail.medium.com/model-view-controller-pattern-in-swift-mvc-for-beginners-35db8d479832", + "type": "article" + }, + { + "title": "MVVM in iOS Swift", + "url": "https://medium.com/@zebayasmeen76/mvvm-in-ios-swift-6afb150458fd", + "type": "article" + }, + { + "title": "MVC Design Pattern Explained with Example", + "url": "https://youtu.be/sbYaWJEAYIY?t=2", + "type": "video" + }, + { + "title": "MVVM Design Pattern Explained with Example", + "url": "https://www.youtube.com/watch?v=sLHVxnRS75w", + "type": "video" + } + ] }, "IdGdLNgJI3WmONEFsMq-d": { "title": "Core OS", diff --git a/public/roadmap-content/mlops.json b/public/roadmap-content/mlops.json index 7eddbbd13..58a0f0035 100644 --- a/public/roadmap-content/mlops.json +++ b/public/roadmap-content/mlops.json @@ -1,13 +1,18 @@ { "_7uvOebQUI4xaSwtMjpEd": { "title": "Programming Fundamentals", - "description": "Programming is the key requirement for MLOps. You need to be proficient in atleast one programming language. Python is the most popular language for MLOps.", + "description": "ML programming fundamentals encompass the essential skills and concepts needed to develop machine learning models effectively. Key aspects include understanding data structures and algorithms, as well as proficiency in programming languages commonly used in ML, such as Python and R. Familiarity with libraries and frameworks like TensorFlow, PyTorch, and scikit-learn is crucial for implementing machine learning algorithms and building models. Additionally, concepts such as data preprocessing, feature engineering, model evaluation, and hyperparameter tuning are vital for optimizing performance. A solid grasp of statistics and linear algebra is also important, as these mathematical foundations underpin many ML techniques, enabling practitioners to analyze data and interpret model results accurately.", "links": [] }, "Vh81GnOUOZvDOlOyI5PwT": { "title": "Python", - "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\nTo start learning Python, here are some useful resources:\n\nRemember, practice is key, and the more you work with Python, the more you'll appreciate its utility in the world of cyber security.", + "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", + "url": "https://roadmap.sh/python", + "type": "article" + }, { "title": "Python.org", "url": "https://www.python.org/", @@ -32,7 +37,7 @@ }, "vdVq3RQvQF3mF8PQc6DMg": { "title": "Go", - "description": "Go is an open source programming language supported by Google. Go can be used to write cloud services, CLI tools, used for API development, and much more.\n\nVisit 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. Visit the following resources to learn more:", "links": [ { "title": "Visit Dedicated Go Roadmap", @@ -49,16 +54,6 @@ "url": "https://go.dev/doc/", "type": "article" }, - { - "title": "Go by Example - annotated example programs", - "url": "https://gobyexample.com/", - "type": "article" - }, - { - "title": "W3Schools Go Tutorial ", - "url": "https://www.w3schools.com/go/", - "type": "article" - }, { "title": "Making a RESTful JSON API in Go", "url": "https://thenewstack.io/make-a-restful-json-api-go/", @@ -75,16 +70,27 @@ "type": "article" }, { - "title": "Go Class by Matt", - "url": "https://www.youtube.com/playlist?list=PLoILbKo9rG3skRCj37Kn5Zj803hhiuRK6", + "title": "Go Programming Course", + "url": "https://www.youtube.com/watch?v=un6ZyFkqFKo", "type": "video" } ] }, "mMzqJF2KQ49TDEk5F3VAI": { "title": "Bash", - "description": "Understanding bash is essential for MLOps tasks.\n\n* **Book Suggestion:** _The Linux Command Line, 2nd Edition_ by William E. Shotts", - "links": [] + "description": "Bash (Bourne Again Shell) is a Unix shell and command language used for interacting with the operating system through a terminal. It allows users to execute commands, automate tasks via scripting, and manage system operations. As the default shell for many Linux distributions, it supports command-line utilities, file manipulation, process control, and text processing. Bash scripts can include loops, conditionals, and functions, making it a powerful tool for system administration, automation, and task scheduling.\n\nLearn more from the following resources:", + "links": [ + { + "title": "bash-guide", + "url": "https://github.com/Idnan/bash-guide", + "type": "opensource" + }, + { + "title": "Bash Scripting Course", + "url": "https://www.youtube.com/watch?v=tK9Oc6AEnR4", + "type": "video" + } + ] }, "oUhlUoWQQ1txx_sepD5ev": { "title": "Version Control Systems", @@ -104,8 +110,13 @@ }, "06T5CbZAGJU6fJhCmqCC8": { "title": "Git", - "description": "[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.\n\nVisit the following resources to learn more:", + "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", + "url": "https://roadmap.sh/git-github", + "type": "article" + }, { "title": "Learn Git with Tutorials, News and Tips - Atlassian", "url": "https://www.atlassian.com/git", @@ -130,26 +141,21 @@ }, "7t7jSb3YgyWlhgCe8Se1I": { "title": "GitHub", - "description": "GitHub is a provider of Internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features.\n\nVisit the following resources to learn more:", + "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": "GitHub Website", - "url": "https://github.com", - "type": "opensource" - }, - { - "title": "GitHub Documentation", - "url": "https://docs.github.com/en/get-started/quickstart", + "title": "Learn Git & GitHub", + "url": "https://roadmap.sh/git-github", "type": "article" }, { - "title": "How to Use Git in a Professional Dev Team", - "url": "https://ooloo.io/project/github-flow", + "title": "GitHub Website", + "url": "https://github.com", "type": "article" }, { - "title": "Learn Git Branching", - "url": "https://learngitbranching.js.org/?locale=en_us", + "title": "GitHub Documentation", + "url": "https://docs.github.com/en/get-started/quickstart", "type": "article" }, { @@ -161,29 +167,25 @@ "title": "What is GitHub?", "url": "https://www.youtube.com/watch?v=w3jLJU7DT5E", "type": "video" - }, - { - "title": "Git vs. GitHub: Whats the difference?", - "url": "https://www.youtube.com/watch?v=wpISo9TNjfU", - "type": "video" - }, + } + ] + }, + "00GZcwe25QYi7rDzaOoMt": { + "title": "Cloud Computing", + "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": "Git and GitHub for Beginners", - "url": "https://www.youtube.com/watch?v=RGOj5yH7evk", - "type": "video" + "title": "What is cloud computing?", + "url": "https://azure.microsoft.com/en-gb/resources/cloud-computing-dictionary/what-is-cloud-computing", + "type": "article" }, { - "title": "Git and GitHub - CS50 Beyond 2019", - "url": "https://www.youtube.com/watch?v=eulnSXkhE7I", + "title": "What is Cloud Computing? | Amazon Web Services", + "url": "https://www.youtube.com/watch?v=mxT233EdY5c", "type": "video" } ] }, - "00GZcwe25QYi7rDzaOoMt": { - "title": "Cloud Computing", - "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.", - "links": [] - }, "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:", @@ -212,12 +214,28 @@ }, "kbfucfIO5KCsuv3jKbHTa": { "title": "Cloud-native ML Services", - "description": "Most of the cloud providers offer managed services for machine learning. These services are designed to help data scientists and machine learning engineers to build, train, and deploy machine learning models at scale. These services are designed to be cloud-native, meaning they are designed to work with other cloud services and are optimized for the cloud environment.\n\nHere are the services offered by the major cloud providers:\n\n* **Amazon Web Services (AWS)**: SageMaker\n* **Google Cloud Platform (GCP)**: AI Platform\n* **Microsoft Azure**: Azure Machine Learning", - "links": [] + "description": "Most of the cloud providers offer managed services for machine learning. These services are designed to help data scientists and machine learning engineers to build, train, and deploy machine learning models at scale. These services are designed to be cloud-native, meaning they are designed to work with other cloud services and are optimized for the cloud environment.\n\nLearn more from the following resources:", + "links": [ + { + "title": "AWS Sage Maker", + "url": "https://aws.amazon.com/sagemaker/", + "type": "article" + }, + { + "title": "Azure ML", + "url": "https://azure.microsoft.com/en-gb/products/machine-learning", + "type": "article" + }, + { + "title": "What is Cloud Native?", + "url": "https://www.youtube.com/watch?v=fp9_ubiKqFU", + "type": "video" + } + ] }, "tKeejLv8Q7QX40UtOjpav": { "title": "Containerization", - "description": "Containers are a construct in which [cgroups](https://en.wikipedia.org/wiki/Cgroups), [namespaces](https://en.wikipedia.org/wiki/Linux_namespaces), and [chroot](https://en.wikipedia.org/wiki/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:", + "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?", @@ -274,8 +292,13 @@ }, "XQoK9l-xtN2J8ZV8dw53X": { "title": "Kubernetes", - "description": "Kubernetes is an [open source](https://github.com/kubernetes/kubernetes) 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).\n\nThe 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:", + "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", + "url": "https://roadmap.sh/kubernetes", + "type": "article" + }, { "title": "Kubernetes Website", "url": "https://kubernetes.io/", @@ -286,11 +309,6 @@ "url": "https://kubernetes.io/docs/home/", "type": "article" }, - { - "title": "Primer: How Kubernetes Came to Be, What It Is, and Why You Should Care", - "url": "https://thenewstack.io/primer-how-kubernetes-came-to-be-what-it-is-and-why-you-should-care/", - "type": "article" - }, { "title": "Kubernetes: An Overview", "url": "https://thenewstack.io/kubernetes-an-overview/", @@ -310,28 +328,93 @@ }, "ulka7VEVjz6ls5SnI6a6z": { "title": "Machine Learning Fundamentals", - "description": "An MLOps engineer should have a basic understanding of machine learning models.\n\n* **Courses:** [MLCourse.ai](https://mlcourse.ai/), [Fast.ai](https://course.fast.ai)\n* **Book Suggestion:** _Applied Machine Learning and AI for Engineers_ by Jeff Prosise", - "links": [] + "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:", + "links": [ + { + "title": "Fundamentals of Machine Learning - Microsoft", + "url": "https://learn.microsoft.com/en-us/training/modules/fundamentals-machine-learning/", + "type": "course" + }, + { + "title": "MLCourse.ai", + "url": "https://mlcourse.ai/", + "type": "course" + }, + { + "title": "Fast.ai", + "url": "https://course.fast.ai", + "type": "course" + } + ] }, "VykbCu7LWIx8fQpqKzoA7": { "title": "Data Engineering Fundamentals", - "description": "Data Engineering is essentially dealing with the collection, validation, storage, transformation, and processing of data. The objective is to provide reliable, efficient, and scalable data pipelines and infrastructure that allow data scientists to convert data into actionable insights. It involves steps like data ingestion, data storage, data processing, and data provisioning. Important concepts include designing, building, and maintaining data architecture, databases, processing systems, and large-scale processing systems. It is crucial to have extensive technical knowledge in various tools and programming languages like SQL, Python, Hadoop, and more.", - "links": [] + "description": "Data Engineering is essentially dealing with the collection, validation, storage, transformation, and processing of data. The objective is to provide reliable, efficient, and scalable data pipelines and infrastructure that allow data scientists to convert data into actionable insights. It involves steps like data ingestion, data storage, data processing, and data provisioning. Important concepts include designing, building, and maintaining data architecture, databases, processing systems, and large-scale processing systems. It is crucial to have extensive technical knowledge in various tools and programming languages like SQL, Python, Hadoop, and more.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Data Engineering 101", + "url": "https://www.redpanda.com/guides/fundamentals-of-data-engineering", + "type": "article" + }, + { + "title": "Fundamentals of Data Engineering", + "url": "https://www.youtube.com/watch?v=mPSzL8Lurs0", + "type": "video" + } + ] }, "cOg3ejZRYE-u-M0c89IjM": { "title": "Data Pipelines", - "description": "Data pipelines refer to a set of processes that involve moving data from one system to another, for purposes such as data integration, data migration, data transformation, or data synchronization. These processes can involve a variety of data sources and destinations, and may often require data to be cleaned, enriched, or otherwise transformed along the way. It's a key concept in data engineering to ensure that data is appropriately processed from its source to the location where it will be used, typically a data warehouse, data mart, or a data lake. As such, data pipelines play a crucial part in building an effective and efficient data analytics setup, enabling the flow of data to be processed for insights.\n\nIt is important to understand the difference between ELT and ETL pipelines. ELT stands for Extract, Load, Transform, and refers to a process where data is first extracted from source systems, then loaded into a target system, and finally transformed within the target system. ETL, on the other hand, stands for Extract, Transform, Load, and refers to a process where data is first extracted from source systems, then transformed, and finally loaded into a target system. The choice between ELT and ETL pipelines depends on the specific requirements of the data processing tasks at hand, and the capabilities of the systems involved.", - "links": [] + "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?", + "url": "https://www.ibm.com/topics/data-pipeline", + "type": "article" + }, + { + "title": "What are data pipelines?", + "url": "https://www.youtube.com/watch?v=oKixNpz6jNo", + "type": "video" + } + ] }, "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.\"", - "links": [] + "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", + "url": "https://azure.microsoft.com/en-gb/resources/cloud-computing-dictionary/what-is-a-data-lake", + "type": "article" + }, + { + "title": "What is a data lake?", + "url": "https://www.youtube.com/watch?v=LxcH6z8TFpI", + "type": "video" + }, + { + "title": "@hat is a data warehouse?", + "url": "https://www.youtube.com/watch?v=k4tK2ttdSDg", + "type": "video" + } + ] }, "Berd78HvnulNEGOsHCf8n": { "title": "Data Ingestion Architecture", - "description": "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.\n\nLambda and Kappa architectures are two popular data ingestion architectures that combine batch and real-time processing to handle large volumes of data efficiently.", - "links": [] + "description": "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.\n\nLambda and Kappa architectures are two popular data ingestion architectures that combine batch and real-time processing to handle large volumes of data efficiently.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Data Ingestion Patterns", + "url": "https://docs.aws.amazon.com/whitepapers/latest/aws-cloud-data-ingestion-patterns-practices/data-ingestion-patterns.html", + "type": "article" + }, + { + "title": "What is a data pipeline?", + "url": "https://www.youtube.com/watch?v=kGT4PcTEPP8", + "type": "video" + } + ] }, "pVSlVHXIap0unFxLGM-lQ": { "title": "Airflow", @@ -414,7 +497,7 @@ }, "iTsEHVCo6KGq7H2HMgy5S": { "title": "MLOps Principles", - "description": "Awareness of MLOps principles and maturity factors is required.\n\n* **Books:**\n * _Designing Machine Learning Systems_ by Chip Huyen\n * _Introducing MLOps_ by Mark Treveil and Dataiku\n* **Assessment:** [MLOps maturity assessment](https://marvelousmlops.substack.com/p/mlops-maturity-assessment)\n* **Great resource on MLOps:** [ml-ops.org](https://ml-ops.org)", + "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": [] }, "l1xasxQy2vAY34NWaqKEe": { @@ -445,23 +528,62 @@ }, "a6vawajw7BpL6plH_nuAz": { "title": "CI/CD", - "description": "Critical for traceable and reproducible ML model deployments.\n\n* **Books:**\n * _Learning GitHub Actions_ by Brent Laster\n * _Learning Git_ by Anna Skoulikari\n* **Tutorials & Courses:** [Git & GitHub for beginners](https://www.youtube.com/watch?v=RGOj5yH7evk), [Python to Production guide](https://www.udemy.com/course/setting-up-the-linux-terminal-for-software-development/), [Version Control Missing Semester](https://missing.csail.mit.edu/2020/version-control/), [https://learngitbranching.js.org/](https://learngitbranching.js.org/)\n* **Tool:** [Pre-commit hooks](https://marvelousmlops.substack.com/p/welcome-to-pre-commit-heaven)", - "links": [] + "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?", + "url": "https://www.redhat.com/en/topics/devops/what-is-ci-cd", + "type": "article" + }, + { + "title": "CI/CD In 5 Minutes", + "url": "https://www.youtube.com/watch?v=42UP1fxi2SY", + "type": "video" + } + ] }, "fes7M--Y8i08_zeP98tVV": { "title": "Orchestration", - "description": "Systems like Airflow and Mage are important in ML engineering.\n\n* **Course:** [Introduction to Airflow in Python](https://app.datacamp.com/learn/courses/introduction-to-airflow-in-python)\n* **Note:** Airflow is also featured in the _ML Engineering with Python_ book and [_The Full Stack 7-Steps MLOps Framework_](https://www.pauliusztin.me/courses/the-full-stack-7-steps-mlops-framework).", - "links": [] + "description": "ML orchestration refers to the process of managing and coordinating the various tasks and workflows involved in the machine learning lifecycle, from data preparation and model training to deployment and monitoring. It involves integrating multiple tools and platforms to streamline operations, automate repetitive tasks, and ensure seamless collaboration among data scientists, engineers, and operations teams. By using orchestration frameworks, organizations can enhance reproducibility, scalability, and efficiency, enabling them to manage complex machine learning pipelines and improve the overall quality of models in production. This ensures that models are consistently updated and maintained, facilitating rapid iteration and adaptation to changing data and business needs.\n\nLearn more from the following resources:", + "links": [ + { + "title": "ML Observability: what, why, how", + "url": "https://ubuntu.com/blog/ml-observability", + "type": "article" + } + ] }, "fGGWKmAJ50Ke6wWJBEgby": { "title": "Experiment Tracking & Model Registry", - "description": "**Experiment Tracking** is an essential part of MLOps, providing a system to monitor and record the different experiments conducted during the machine learning model development process. This involves capturing, organizing and visualizing the metadata associated with each experiment, such as hyperparameters used, models produced, metrics like accuracy or loss, and other information about the computational environment. This tracking allows for reproducibility of experiments, comparison across different experiment runs, and helps in identifying the best models.\n\nLogging metadata, parameters, and artifacts of training runs.\n\n* **Tool:** MLflow\n* **Courses:** [MLflow Udemy course](https://www.udemy.com/course/mlflow-course/), [End-to-end machine learning (MLflow piece)](https://www.udemy.com/course/sustainable-and-scalable-machine-learning-project-development/)", - "links": [] + "description": "**Experiment Tracking** is an essential part of MLOps, providing a system to monitor and record the different experiments conducted during the machine learning model development process. This involves capturing, organizing and visualizing the metadata associated with each experiment, such as hyperparameters used, models produced, metrics like accuracy or loss, and other information about the computational environment. This tracking allows for reproducibility of experiments, comparison across different experiment runs, and helps in identifying the best models.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Experiment Tracking", + "url": "https://madewithml.com/courses/mlops/experiment-tracking/#dashboard", + "type": "article" + }, + { + "title": "ML Flow Model Registry", + "url": "https://mlflow.org/docs/latest/model-registry.html", + "type": "article" + } + ] }, "6XgP_2NLuiw654zvTyueT": { "title": "Data Lineage & Feature Stores", - "description": "**Data Lineage** refers to the life-cycle of data, including its origins, movements, characteristics and quality. It's a critical component in MLOps for tracking the journey of data through every process in a pipeline, from raw input to model output. Data lineage helps in maintaining transparency, ensuring compliance, and facilitating data debugging or tracing data related bugs. It provides a clear representation of data sources, transformations, and dependencies thereby aiding in audits, governance, or reproduction of machine learning models.\n\nFeature stores are a crucial component of MLOps infrastructure.\n\n* **Tutorial:** Creating a feature store with Feast [Part 1](https://kedion.medium.com/creating-a-feature-store-with-feast-part-1-37c380223e2f) [Part 2](https://kedion.medium.com/feature-storage-for-ml-with-feast-part-2-34df1971a8d3) [Part 3](https://kedion.medium.com/feature-storage-for-ml-with-feast-a061899fc4a2)\n* **Tool:** DVC for data tracking\n* **Course:** [End-to-end machine learning (DVC piece)](https://www.udemy.com/course/sustainable-and-scalable-machine-learning-project-development/)", - "links": [] + "description": "**Data Lineage** refers to the life-cycle of data, including its origins, movements, characteristics and quality. It's a critical component in MLOps for tracking the journey of data through every process in a pipeline, from raw input to model output. Data lineage helps in maintaining transparency, ensuring compliance, and facilitating data debugging or tracing data related bugs. It provides a clear representation of data sources, transformations, and dependencies thereby aiding in audits, governance, or reproduction of machine learning models.\n\nLearn more from the following resources:", + "links": [ + { + "title": "What is Data Lineage?", + "url": "https://www.ibm.com/topics/data-lineage", + "type": "article" + }, + { + "title": "What is a feature store", + "url": "https://www.snowflake.com/guides/what-feature-store-machine-learning/", + "type": "article" + } + ] }, "zsW1NRb0dMgS-KzWsI0QU": { "title": "Model Training & Serving", @@ -470,33 +592,39 @@ }, "r4fbUwD83uYumEO1X8f09": { "title": "Monitoring & Observability", - "description": "**Monitoring** in MLOps primarily involves tracking the performance of machine learning (ML) models in production to ensure that they continually deliver accurate and reliable results. Such monitoring is necessary because the real-world data that these models handle may change over time, a scenario known as data drift. These changes can adversely affect model performance. Monitoring helps to detect any anomalies in the model’s behaviour or performance and such alerts can trigger the retraining of models with new data. From a broader perspective, monitoring also involves tracking resources and workflows to detect and rectify any operational issues in the MLOps pipeline.", + "description": "**Monitoring** in MLOps primarily involves tracking the performance of machine learning (ML) models in production to ensure that they continually deliver accurate and reliable results. Such monitoring is necessary because the real-world data that these models handle may change over time, a scenario known as data drift. These changes can adversely affect model performance. Monitoring helps to detect any anomalies in the model’s behaviour or performance and such alerts can trigger the retraining of models with new data. From a broader perspective, monitoring also involves tracking resources and workflows to detect and rectify any operational issues in the MLOps pipeline.\n\nLearn more from the following resources:", "links": [ { - "title": "ML Monitoring vs Observability article", - "url": "https://marvelousmlops.substack.com/p/ml-monitoring-vs-ml-observability", + "title": "ML Monitoring vs ML Observability", + "url": "https://medium.com/marvelous-mlops/ml-monitoring-vs-ml-observability-understanding-the-differences-fff574a8974f", "type": "article" }, { - "title": "Machine learning monitoring concepts", - "url": "https://app.datacamp.com/learn/courses/machine-learning-monitoring-concepts", + "title": "ML Observability vs ML Monitoring: What's the difference?", + "url": "https://www.youtube.com/watch?v=k1Reed3QIYE", + "type": "video" + } + ] + }, + "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.", + "links": [ + { + "title": "What is Infrastructure as Code?", + "url": "https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac", "type": "article" }, { - "title": "Monitoring ML in Python", - "url": "https://app.datacamp.com/learn/courses/monitoring-machine-learning-in-python", - "type": "article" + "title": "Terraform course for beginners", + "url": "https://www.youtube.com/watch?v=SLB_c_ayRMo", + "type": "video" }, { - "title": "Prometheus, Grafana", - "url": "https://www.udemy.com/course/mastering-prometheus-and-grafana/", - "type": "article" + "title": "8 Terraform best practices", + "url": "https://www.youtube.com/watch?v=gxPykhPxRW0", + "type": "video" } ] - }, - "sf67bSL7HAx6iN7S6MYKs": { - "title": "Infrastructure as Code", - "description": "Essential for a reproducible MLOps framework.\n\n* **Course:** [Terraform course for beginners](https://www.youtube.com/watch?v=SLB_c_ayRMo)\n* **Video:** [8 Terraform best practices by Techworld by Nana](https://www.youtube.com/watch?v=gxPykhPxRW0)\n* **Book Suggestion:** _Terraform: Up and Running, 3rd Edition_ by Yevgeniy Brikman", - "links": [] } } \ No newline at end of file diff --git a/public/roadmap-content/nodejs.json b/public/roadmap-content/nodejs.json index 43c4a3de7..0c590de47 100644 --- a/public/roadmap-content/nodejs.json +++ b/public/roadmap-content/nodejs.json @@ -1244,8 +1244,8 @@ "type": "article" }, { - "title": "Explore top posts about JavaScript", - "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", + "title": "Explore top posts about NestJS", + "url": "https://app.daily.dev/tags/nestjs?ref=roadmapsh", "type": "article" }, { diff --git a/public/roadmap-content/redis.json b/public/roadmap-content/redis.json index 2505a33d0..0ccb9687b 100644 --- a/public/roadmap-content/redis.json +++ b/public/roadmap-content/redis.json @@ -1,13 +1,25 @@ { "-3pADOHMDQ0H6ZKNjURyn": { "title": "What is Redis?", - "description": "", - "links": [] + "description": "Redis is an open-source, in-memory data structure store, primarily used as a database, cache, and message broker. It supports various data structures like strings, hashes, lists, sets, and sorted sets, making it highly versatile. Redis operates with extremely low latency due to its in-memory nature, enabling fast access to data. It is often used in real-time applications such as session management, leaderboards, or caching mechanisms, where quick data retrieval is critical. Additionally, Redis supports data persistence by periodically writing the dataset to disk, balancing memory speed with data reliability.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is redis?", + "url": "https://redis.io/docs/latest/get-started/", + "type": "article" + } + ] }, "M-EXrTDeAEMz_IkEi-ab4": { "title": "In-memory Data Structure Store", - "description": "", - "links": [] + "description": "An in-memory database is a purpose-built database that relies primarily on internal memory for data storage. It enables minimal response times by eliminating the need to access standard disk drives (SSDs). In-memory databases are ideal for applications that require microsecond response times or have large spikes in traffic, such as gaming leaderboards, session stores, and real-time data analytics. The terms main memory database (MMDB), in-memory database system (IMDS), and real-time database system (RTDB) also refer to in-memory databases.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Amazon MemoryDB", + "url": "https://aws.amazon.com/memorydb/", + "type": "article" + } + ] }, "l2aXyO3STnhbFjvUXPpm2": { "title": "Key-value Database", diff --git a/public/roadmap-content/software-architect.json b/public/roadmap-content/software-architect.json index f69ddf409..dbd6a246f 100644 --- a/public/roadmap-content/software-architect.json +++ b/public/roadmap-content/software-architect.json @@ -10,7 +10,7 @@ "links": [ { "title": "What is Software Architecture in Software Engineering?", - "url": "https://webcache.googleusercontent.com/search?q=cache:ya4xvYaEckQJ:https://www.future-processing.com/blog/what-is-software-architecture-in-software-engineering/&cd=1&hl=es-419&ct=clnk&gl=ar", + "url": "https://www.future-processing.com/blog/what-is-software-architecture-in-software-engineering/", "type": "article" }, { diff --git a/public/roadmap-content/typescript.json b/public/roadmap-content/typescript.json index ab7959af0..3c270773c 100644 --- a/public/roadmap-content/typescript.json +++ b/public/roadmap-content/typescript.json @@ -401,7 +401,7 @@ }, "HD1UGOidp7JGKdW6CEdQ_": { "title": "satisfies keyword", - "description": "TypeScript developers are often faced with a dilemma: we want to ensure that some expression matches some type, but also want to keep the most specific type of that expression for inference purposes.\n\nFor example:\n\n // Each property can be a string or an RGB tuple.\n const palette = {\n red: [255, 0, 0],\n green: '#00ff00',\n bleu: [0, 0, 255],\n // ^^^^ sacrebleu - we've made a typo!\n };\n \n // We want to be able to use array methods on 'red'...\n const redComponent = palette.red.at(0);\n \n // or string methods on 'green'...\n const greenNormalized = palette.green.toUpperCase();\n \n\nNotice that we’ve written `bleu`, whereas we probably should have written `blue`. We could try to catch that `bleu` typo by using a type annotation on palette, but we’d lose the information about each property.\n\n type Colors = 'red' | 'green' | 'blue';\n type RGB = [red: number, green: number, blue: number];\n \n const palette: Record = {\n red: [255, 0, 0],\n green: '#00ff00',\n bleu: [0, 0, 255],\n // ~~~~ The typo is now correctly detected\n };\n // But we now have an undesirable error here - 'palette.red' \"could\" be a string.\n const redComponent = palette.red.at(0);\n \n\nThe `satisfies` operator lets us validate that the type of an expression matches some type, without changing the resulting type of that expression. As an example, we could use `satisfies` to validate that all the properties of palette are compatible with `string | number[]`:\n\n type Colors = 'red' | 'green' | 'blue';\n type RGB = [red: number, green: number, blue: number];\n \n const palette = {\n red: [255, 0, 0],\n green: '#00ff00',\n bleu: [0, 0, 255],\n // ~~~~ The typo is now caught!\n } satisfies Record;\n \n // Both of these methods are still accessible!\n const redComponent = palette.red.at(0);\n const greenNormalized = palette.green.toUpperCase();\n \n\nLearn more from the following resources:", + "description": "The `satisfies` operator lets us validate that the type of an expression matches some type, without changing the resulting type of that expression.\n\nLearn more from the following resources:", "links": [ { "title": "satisfies Keyword", diff --git a/public/roadmaps/ai-engineer.png b/public/roadmaps/ai-engineer.png new file mode 100644 index 000000000..2d7d03b7b Binary files /dev/null and b/public/roadmaps/ai-engineer.png differ diff --git a/src/api/leaderboard.ts b/src/api/leaderboard.ts index 7e9405fd9..669683840 100644 --- a/src/api/leaderboard.ts +++ b/src/api/leaderboard.ts @@ -1,7 +1,7 @@ import { type APIContext } from 'astro'; import { api } from './api.ts'; -export type LeadeboardUserDetails = { +export type LeaderboardUserDetails = { id: string; name: string; avatar?: string; @@ -10,12 +10,15 @@ export type LeadeboardUserDetails = { export type ListLeaderboardStatsResponse = { streaks: { - active: LeadeboardUserDetails[]; - lifetime: LeadeboardUserDetails[]; + active: LeaderboardUserDetails[]; + lifetime: LeaderboardUserDetails[]; }; projectSubmissions: { - currentMonth: LeadeboardUserDetails[]; - lifetime: LeadeboardUserDetails[]; + currentMonth: LeaderboardUserDetails[]; + lifetime: LeaderboardUserDetails[]; + }; + githubContributors: { + currentMonth: LeaderboardUserDetails[]; }; referrals: { currentMonth: LeadeboardUserDetails[]; diff --git a/src/components/Changelog/ChangelogLaunch.astro b/src/components/Changelog/ChangelogLaunch.astro index e4c39c3de..84ae93840 100644 --- a/src/components/Changelog/ChangelogLaunch.astro +++ b/src/components/Changelog/ChangelogLaunch.astro @@ -23,7 +23,7 @@ const formattedDate = DateTime.fromISO('2024-09-13').toFormat('dd LLL, yyyy');
- +

Changelog page is launched

We will be sharing a selected list of updates, improvements, and fixes made to diff --git a/src/components/ChangelogBanner.astro b/src/components/ChangelogBanner.astro index af2cd1b64..c6a8d25a8 100644 --- a/src/components/ChangelogBanner.astro +++ b/src/components/ChangelogBanner.astro @@ -10,7 +10,7 @@ const top10Changelogs = allChangelogs.slice(0, 10);

diff --git a/src/components/Leaderboard/LeaderboardPage.tsx b/src/components/Leaderboard/LeaderboardPage.tsx index 19dfb5015..79fa5874d 100644 --- a/src/components/Leaderboard/LeaderboardPage.tsx +++ b/src/components/Leaderboard/LeaderboardPage.tsx @@ -1,11 +1,10 @@ -import { useState, type ReactNode } from 'react'; +import { type ReactNode, useState } from 'react'; import type { - LeadeboardUserDetails, + LeaderboardUserDetails, ListLeaderboardStatsResponse, } from '../../api/leaderboard'; import { cn } from '../../lib/classname'; -import { FolderKanban, Zap, Trophy, Users } from 'lucide-react'; -import { RankBadgeIcon } from '../ReactIcons/RankBadgeIcon'; +import { FolderKanban, GitPullRequest, Users, Users2, Zap } from 'lucide-react'; import { TrophyEmoji } from '../ReactIcons/TrophyEmoji'; import { SecondPlaceMedalEmoji } from '../ReactIcons/SecondPlaceMedalEmoji'; import { ThirdPlaceMedalEmoji } from '../ReactIcons/ThirdPlaceMedalEmoji'; @@ -18,70 +17,113 @@ export function LeaderboardPage(props: LeaderboardPageProps) { const { stats } = props; return ( -

-
-
-
- -

Leaderboard

-
-

- Top users based on their activity on roadmap.sh -

- -
- , - emptyText: 'No users with streaks yet', - }, - { - title: 'Lifetime', - users: stats.streaks?.lifetime || [], - emptyIcon: , - emptyText: 'No users with streaks yet', - }, - ]} - /> - , - emptyText: 'No projects submitted this month', - }, - { - title: 'Lifetime', - users: stats.projectSubmissions.lifetime, - emptyIcon: , - emptyText: 'No projects submitted yet', - }, - ]} - /> - , - emptyText: 'No referrals this month', - }, - { - title: 'Lifetime', - users: stats.referrals.lifetime, - emptyIcon: , - emptyText: 'No referrals yet', - }, - ]} - /> -
+
+
+

+ + Leaderboard +

+ +
+ , + emptyText: 'No users with streaks yet', + }, + { + title: 'Lifetime', + users: stats.streaks?.lifetime || [], + emptyIcon: , + emptyText: 'No users with streaks yet', + }, + ]} + /> + , + emptyText: 'No projects submitted this month', + }, + { + title: 'Lifetime', + users: stats.projectSubmissions.lifetime, + emptyIcon: , + emptyText: 'No projects submitted yet', + }, + ]} + /> + , + emptyText: 'No referrals this month', + }, + { + title: 'Lifetime', + users: stats.referrals.lifetime, + emptyIcon: , + emptyText: 'No referrals yet', + }, + ]} + /> +
+
+ , + emptyText: 'No users with streaks yet', + }, + { + title: 'Lifetime', + users: stats.streaks?.lifetime || [], + emptyIcon: , + emptyText: 'No users with streaks yet', + }, + ]} + /> + , + emptyText: 'No projects submitted this month', + }, + { + title: 'Lifetime', + users: stats.projectSubmissions.lifetime, + emptyIcon: , + emptyText: 'No projects submitted yet', + }, + ]} + /> + , + emptyText: 'No contributors this month', + }, + ]} + />
@@ -90,24 +132,32 @@ export function LeaderboardPage(props: LeaderboardPageProps) { type LeaderboardLaneProps = { title: string; + subtitle?: string; tabs: { title: string; - users: LeadeboardUserDetails[]; + users: LeaderboardUserDetails[]; emptyIcon?: ReactNode; emptyText?: string; }[]; }; function LeaderboardLane(props: LeaderboardLaneProps) { - const { title, tabs } = props; + const { title, subtitle, tabs } = props; const [activeTab, setActiveTab] = useState(tabs[0]); const { users: usersToShow, emptyIcon, emptyText } = activeTab; return ( -
-
-

{title}

+
+
+

+ {title}{' '} + {subtitle && ( + + {subtitle} + + )} +

{tabs.length > 1 && (
@@ -135,7 +185,7 @@ function LeaderboardLane(props: LeaderboardLaneProps) {
{usersToShow.length === 0 && emptyText && ( -
+
{emptyIcon}

{emptyText}

@@ -145,14 +195,18 @@ function LeaderboardLane(props: LeaderboardLaneProps) {
    {usersToShow.map((user, counter) => { const avatar = user?.avatar - ? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${user.avatar}` + ? user?.avatar?.startsWith('http') + ? user?.avatar + : `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${user.avatar}` : '/images/default-avatar.png'; + const rank = counter + 1; + const isGitHubUser = avatar?.indexOf('github') > -1; return (
  • - {user.name} + {isGitHubUser ? ( + + {user.name} + + ) : ( + {user.name} + )} {rank === 1 ? ( ) : rank === 2 ? ( diff --git a/src/components/Projects/ProjectCard.tsx b/src/components/Projects/ProjectCard.tsx index efa0ac210..1aaf99f85 100644 --- a/src/components/Projects/ProjectCard.tsx +++ b/src/components/Projects/ProjectCard.tsx @@ -5,10 +5,13 @@ import type { } from '../../lib/project.ts'; import { Users } from 'lucide-react'; import { formatCommaNumber } from '../../lib/number.ts'; +import { cn } from '../../lib/classname.ts'; +import { isLoggedIn } from '../../lib/jwt.ts'; type ProjectCardProps = { project: ProjectFileType; userCount?: number; + status?: 'completed' | 'started' | 'none'; }; const badgeVariants: Record = { @@ -18,10 +21,12 @@ const badgeVariants: Record = { }; export function ProjectCard(props: ProjectCardProps) { - const { project, userCount = 0 } = props; - + const { project, userCount = 0, status } = props; const { frontmatter, id } = project; + const isLoadingStatus = status === undefined; + const userStartedCount = status !== 'none' && userCount === 0 ? userCount + 1 : userCount; + return ( - + {frontmatter.title} {frontmatter.description} - - - {userCount > 0 ? ( - <>{formatCommaNumber(userCount)} Started + + {isLoadingStatus ? ( + <> + {' '} + {' '} + ) : ( - <>Be the first to solve! + <> + + + {userStartedCount > 0 ? ( + <>{formatCommaNumber(userStartedCount)} Started + ) : ( + <>Be the first to solve! + )} + + + {status !== 'none' && ( + + + {status} + + )} + )} diff --git a/src/components/Projects/ProjectsList.tsx b/src/components/Projects/ProjectsList.tsx index aa2bb8c3e..f8570224a 100644 --- a/src/components/Projects/ProjectsList.tsx +++ b/src/components/Projects/ProjectsList.tsx @@ -1,7 +1,7 @@ import { ProjectCard } from './ProjectCard.tsx'; import { HeartHandshake, Trash2 } from 'lucide-react'; import { cn } from '../../lib/classname.ts'; -import { useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { projectDifficulties, type ProjectDifficultyType, @@ -12,6 +12,8 @@ import { getUrlParams, setUrlParams, } from '../../lib/browser.ts'; +import { httpPost } from '../../lib/http.ts'; +import { isLoggedIn } from '../../lib/jwt.ts'; type DifficultyButtonProps = { difficulty: ProjectDifficultyType; @@ -38,6 +40,11 @@ function DifficultyButton(props: DifficultyButtonProps) { ); } +export type ListProjectStatusesResponse = Record< + string, + 'completed' | 'started' +>; + type ProjectsListProps = { projects: ProjectFileType[]; userCounts: Record; @@ -50,6 +57,30 @@ export function ProjectsList(props: ProjectsListProps) { const [difficulty, setDifficulty] = useState< ProjectDifficultyType | undefined >(urlDifficulty); + const [projectStatuses, setProjectStatuses] = + useState(); + + const loadProjectStatuses = async () => { + if (!isLoggedIn()) { + setProjectStatuses({}); + return; + } + + const projectIds = projects.map((project) => project.id); + const { response, error } = await httpPost( + `${import.meta.env.PUBLIC_API_URL}/v1-list-project-statuses`, + { + projectIds, + }, + ); + + if (error || !response) { + console.error(error); + return; + } + + setProjectStatuses(response); + }; const projectsByDifficulty: Map = useMemo(() => { @@ -72,12 +103,17 @@ export function ProjectsList(props: ProjectsListProps) { ? projectsByDifficulty.get(difficulty) || [] : projects; + useEffect(() => { + loadProjectStatuses().finally(); + }, []); + return (
    {projectDifficulties.map((projectDifficulty) => ( { setDifficulty(projectDifficulty); setUrlParams({ difficulty: projectDifficulty }); @@ -130,7 +166,18 @@ export function ProjectsList(props: ProjectsListProps) { }) .map((matchingProject) => { const count = userCounts[matchingProject?.id] || 0; - return ; + return ( + + ); })}
    diff --git a/src/components/Projects/ProjectsPage.tsx b/src/components/Projects/ProjectsPage.tsx index f3d797763..999b6e3c7 100644 --- a/src/components/Projects/ProjectsPage.tsx +++ b/src/components/Projects/ProjectsPage.tsx @@ -190,6 +190,7 @@ export function ProjectsPage(props: ProjectsPageProps) { key={project.id} project={project} userCount={userCounts[project.id] || 0} + status={'none'} /> ))}
    diff --git a/src/components/Roadmaps/RoadmapsPage.tsx b/src/components/Roadmaps/RoadmapsPage.tsx index 0b2097141..f49a9f65a 100644 --- a/src/components/Roadmaps/RoadmapsPage.tsx +++ b/src/components/Roadmaps/RoadmapsPage.tsx @@ -357,6 +357,11 @@ const groups: GroupType[] = [ link: '/ai-data-scientist', type: 'role', }, + { + title: 'AI Engineer', + link: '/ai-engineer', + type: 'role', + }, { title: 'Data Analyst', link: '/data-analyst', diff --git a/src/components/TopicDetail/TopicDetail.tsx b/src/components/TopicDetail/TopicDetail.tsx index 769eb11a1..e629407ad 100644 --- a/src/components/TopicDetail/TopicDetail.tsx +++ b/src/components/TopicDetail/TopicDetail.tsx @@ -175,7 +175,6 @@ export function TopicDetail(props: TopicDetailProps) { setError(''); setIsLoading(true); setIsActive(true); - sponsorHidden.set(true); setTopicId(topicId); setResourceType(resourceType); @@ -336,6 +335,10 @@ export function TopicDetail(props: TopicDetailProps) { return resource.topicIds.includes(normalizedTopicId); }); + const hasPaidScrimbaLinks = paidResourcesForTopic.some( + (resource) => resource?.url?.toLowerCase().indexOf('scrimba') !== -1, + ); + return (
    + {hasPaidScrimbaLinks && ( +
    +
    + + + Scrimba is offering{' '} + 20% off on + all courses for roadmap.sh users. + +
    +
    + )} + {showPaidResourceDisclaimer && ( { diff --git a/src/data/guides/backend-frameworks.md b/src/data/guides/backend-frameworks.md new file mode 100644 index 000000000..dcc6a3517 --- /dev/null +++ b/src/data/guides/backend-frameworks.md @@ -0,0 +1,441 @@ +--- +title: 'Top 7 Backend Frameworks to Use in 2024: Pro Advice' +description: 'Get expert advice on backend frameworks for 2024. Learn about the top 7 frameworks that can elevate your development process.' +authorId: fernando +excludedBySlug: '/backend/frameworks' +seo: + title: 'Top 7 Backend Frameworks to Use in 2024: Pro Advice' + description: 'Get expert advice on backend frameworks for 2024. Learn about the top 7 frameworks that can elevate your development process.' + ogImageUrl: 'https://assets.roadmap.sh/guest/top-backend-frameworks-jfpux.jpg' +isNew: true +type: 'textual' +date: 2024-09-27 +sitemap: + priority: 0.7 + changefreq: 'weekly' +tags: + - 'guide' + - 'textual-guide' + - 'guide-sitemap' +--- + +![Best backend frameworks](https://assets.roadmap.sh/guest/top-backend-frameworks-jfpux.jpg) + +Choosing the right backend framework in 2024 can be crucial when you’re building web applications. While the programming language you pick is important, the backend framework you go with will help define how scalable, secure, and maintainable your application is. It’s the foundation that supports all the features your users interact with on the frontend and keeps everything running smoothly behind the scenes. + +So, it’s a decision you want to get right. + +In 2024, [backend development](https://roadmap.sh/backend) is more complex and interconnected than ever. Developers are working with APIs, microservices, cloud-native architectures, and ensuring high availability while keeping security at the forefront. It’s an era where the demand for real-time data, seamless integrations, and efficient performance is higher than ever. + +Whether you're building an enterprise-level application or a small startup, the right backend framework can save you time and headaches down the road. + +Let’s take a look at the following top backend development frameworks at the top of all lists for 2024: + +* NextJS +* Fastify +* SvelteKit +* Ruby on Rails +* Laravel +* Phoenix +* Actix + +## Criteria for Evaluating The Top Backend Frameworks + +How can you determine what “best backend framework” means for you? To answer that question, I’ll define a set of key factors to consider. Let’s break down the most important criteria that will help you make the best choice for your project: + +**Performance**: + +* A high-performing backend framework processes server-side tasks (e.g., database queries, user sessions, real-time data) quickly and efficiently. +* Faster processing improves user experience, especially in 2024 when speed is critical. + +**Scalability**: + +* The framework should handle increased traffic, larger datasets, and feature expansion without issues. +* It should smoothly scale for both small and large user bases. + +**Flexibility**: + +* A flexible framework adapts to new business or technical requirements. +* It should support various project types without locking you into a specific structure. + +**Community and Ecosystem**: + +* A strong community provides support through tutorials, forums, and third-party tools. +* A good ecosystem includes useful plugins and integrations for popular services or databases. + +**Learning Curve**: + +* An easy-to-learn framework boosts productivity and helps you get up to speed quickly. +* A framework should balance ease of learning with powerful functionality. + +**Security**: + +* A reliable framework includes built-in security features to protect user data and prevent vulnerabilities. +* It should help you comply with regulations and address security concerns from the start. + +**Future-Proofing**: + +* Choose a framework with a history of updates, a clear development roadmap, and a growing community. +* A future-proof framework ensures long-term support and relevance. + +### My go-to backend framework + +My favorite backend framework is Next.js because it has the highest scores from the group. + +That said, I’ve applied the above criteria to the best backend development frameworks I’m covering below in this guide. This table gives you a snapshot view of how they all compare according to my ratings, and I’ll explain the details further below. + +![backend frameworks](https://assets.roadmap.sh/guest/backend-framework-table-nl1iw.png) + +Of course, Next.js is the best one for me, and that works for me alone. You have to consider your own projects and your own context to understand what the best choice for you would be. + +Let’s get into the selection and what their strengths and weaknesses are to help you select the right one for you. + +## Top 7 Backend Frameworks in 2024 + +### Next.js + +![NextJS](https://assets.roadmap.sh/guest/logo-nextjs-mbn1n.png) + +Next.js is a full-stack React framework and one of the most popular backend frameworks in the JavaScript community. Over the years, it has evolved into a robust web development solution that supports static site generation (SSG), server-side rendering (SSR), and even edge computing. Backed by Vercel, it’s now one of the go-to frameworks for modern web development. + +#### 1\. Performance + +Next.js has a wonderful performance thanks to its ability to optimize for both static and dynamic generation. With server-side rendering and support for edge computing, it's built to handle high-performance requirements. Additionally, automatic code splitting ensures only the necessary parts of the app are loaded, reducing load times. + +⭐ **Rating: 5/5** + +#### 2\. Scalability + +Next.js is designed to scale easily, from small static websites to large-scale dynamic applications. Its ability to turn backend routes into serverless functions puts it at an unfair advantage over other frameworks. Paired with Vercel’s deployment platform, scaling becomes almost effortless. + +⭐ **Rating: 5/5** + +#### 3\. Flexibility + +Next.js is one of the most flexible frameworks out there. It supports a wide range of use cases, from simple static websites to highly complex full-stack applications. With its API routes feature, developers can create powerful backends, making Next.js suitable for both frontend and backend development in a single framework. + +⭐ **Rating: 5/5** + +#### 4\. Community and Ecosystem + +The Next.js community (just like the JavaScript community in general) is large and quite active, with an ever-growing number of plugins, integrations, and third-party tools. The framework has solid documentation and an active ecosystem, thanks to its close ties to both the React community and Vercel’s developer support. + +⭐ **Rating: 5/5** + +#### 5\. Learning Curve + +For developers already familiar with React, Next.js provides a relatively smooth learning curve. However, for those new to SSR, SSG or even RSC (React Server Components), there’s a bit of a learning curve as you adapt to these concepts (after all, you’re learning React and backend development at the same time). That said, the framework's excellent documentation and active community make it easier to grasp. + +⭐ **Rating: 4/5** + +#### 6\. Security + +Next.js doesn’t inherently have a wide array of built-in security tools, but it follows secure default practices and can be paired with Vercel’s security optimizations for additional protection. Out of the box, Next.js ensures some level of security against common web threats but will need further configuration depending on the app's complexity. + +⭐ **Rating: 3.5/5** + +#### 7\. Future-Proofing + +Backed by Vercel, Next.js has a bright future. Vercel consistently pushes updates, introduces new features, and improves the overall developer experience. Given its adoption and strong support, Next.js is very future-proof, with no signs of slowing down. + +⭐ **Rating: 5/5** + +### Fastify + +![Fastify](https://assets.roadmap.sh/guest/logo-fastify-3bw4o.png) + +Fastify is a lightweight and fast backend framework for Node.js, often seen as a high-performance alternative to Express.js. It was created with a strong focus on speed, low overhead, and developer-friendly tooling, making it a popular choice for developers building APIs and microservices. Fastify offers a flexible plugin architecture and features like schema-based validation and HTTP/2 support, setting it apart in the Node.js ecosystem. + +#### 1\. Performance + +Fastify shines when it comes to performance. It’s optimized for handling large amounts of requests with low latency, making it one of the fastest Node.js frameworks available. + +⭐ **Rating: 5/5** + +#### 2\. Scalability + +With a strong focus on scalability, Fastify is ideal for handling large applications and high-traffic scenarios. Its lightweight nature ensures that you can build scalable services with minimal resource consumption. + +⭐ **Rating: 5/5** + +#### 3\. Flexibility + +Fastify’s [plugin architecture](https://fastify.dev/docs/latest/Reference/Plugins/) is one of its key strengths. This allows developers to easily extend the framework’s capabilities and tailor it to specific use cases, whether you’re building APIs, microservices, or even server-rendered applications. + +⭐ **Rating: 5/5** + +#### 4\. Community and Ecosystem + +While Fastify’s community is not as large as Express.js or Next.js, it is steadily growing. The ecosystem of plugins and tools continues to expand, making it easier to find the right tools and libraries to fit your needs. However, its smaller ecosystem means fewer third-party tools compared to some of the more established frameworks. + +⭐ **Rating: 3/5** + +#### 5\. Learning Curve + +If you’re coming from Express.js or another Node.js framework, Fastify’s learning curve is minimal. Its API is designed to be familiar and easy to adopt for Node.js developers. While there are some differences in how Fastify handles things like schema validation and plugins, it’s a relatively smooth transition for most developers. + +⭐ **Rating: 4/5** + +#### 6\. Security + +Fastify incorporates built-in security features such as schema-based validation, which helps prevent vulnerabilities like injection attacks. The framework also supports HTTP/2 out of the box, which provides enhanced security and performance. + +⭐ **Rating: 4/5** + +#### 7\. Future-Proofing + +Fastify has a strong development roadmap and is [consistently updated](https://github.com/fastify/fastify) with performance improvements and new features. The backing from a growing community and its continued adoption by large-scale applications make Fastify a solid bet for long-term use. + +⭐ **Rating: 5/5** + +### SvelteKit + +![SvelteKit](https://assets.roadmap.sh/guest/logo-sveltekit-9ntqz.png) + +SvelteKit is a full-stack framework built on top of Svelte, a front-end compiler that moves much of the heavy lifting to compile time rather than runtime. SvelteKit was designed to simplify building modern web applications by providing server-side rendering (SSR), static site generation (SSG), and support for client-side routing—all in a performance-optimized package. In other words, it’s an alternative to Next.js. + +#### 1\. Performance + +SvelteKit leverages Svelte compile-time optimizations, resulting in fast runtime performance. Unlike frameworks that rely heavily on virtual DOM diffing, Svelte compiles components to efficient JavaScript code, which means fewer resources are used during rendering. + +⭐ **Rating: 5/5** + +#### 2\. Scalability + +While SvelteKit is excellent for small to medium-sized applications, its scalability for enterprise-level applications is still being tested by the developer community. It is possible to scale SvelteKit for larger applications, especially with the right infrastructure and server setup, but it may not yet have the same level of proven scalability as more mature frameworks like Next.js or Fastify. + +⭐ **Rating: 4/5** + +#### 3\. Flexibility + +As with most web frameworks, SvelteKit is highly flexible, allowing developers to build everything from static sites to full-stack robust web applications. It provides SSR out of the box, making it easy to handle front-end and back-end logic in a single codebase. Additionally, it supports various deployment environments like serverless functions or traditional servers. + +⭐ **Rating: 5/5** + +#### 4\. Community and Ecosystem + +The SvelteKit community is growing rapidly, and more tools, plugins, and resources are being developed to support it. While the ecosystem isn’t as mature as frameworks like React or Vue, the rate of adoption is promising. The official documentation is well-written, and there’s a growing number of third-party tools, libraries, and guides available for developers to tap into. + +⭐ **Rating: 3.5/5** + +#### 5\. Learning Curve + +For developers familiar with Svelte, the transition to SvelteKit is smooth and intuitive. However, if you're new to Svelte, there is a moderate learning curve, particularly in understanding Svelte’s reactivity model and SvelteKit's routing and SSR features. Still, the simplicity of Svelte as a framework helps ease the learning process compared to more complex frameworks like React or Angular. + +⭐ **Rating: 4/5** + +#### 6\. Security + +SvelteKit’s security features are still evolving, with basic protections in place but requiring developers to implement best practices to build really secure web applications. There are no significant built-in security tools like in some larger frameworks, so developers need to be cautious and handle aspects like input validation, cross-site scripting (XSS) protection, and CSRF manually. + +⭐ **Rating: 3/5** + +#### 7\. Future-Proofing + +Svelte’s increasing popularity and SvelteKit’s rapid development signal a bright future for the framework. The growing adoption of Svelte, backed by its simplicity and performance, ensures that SvelteKit will continue to be developed and improved in the coming years. + +⭐ **Rating: 5/5** + +### Ruby on Rails + +![Ruby on Rails](https://assets.roadmap.sh/guest/logo-rails-eg1x0.png) + +Ruby on Rails (Rails) is a full-stack web development framework written in Ruby, created by David Heinemeier Hansson in 2004\. Rails revolutionized web development by promoting "convention over configuration" and allowing developers to rapidly build web applications with fewer lines of code. It + +#### 1\. Performance + +Rails performs exceptionally well for typical CRUD (Create, Read, Update, Delete) applications, where database operations are straightforward and heavily optimized within the framework. However, as applications grow in complexity or require real-time features, Rails’ performance can become a challenge. + +⭐ **Rating: 3.5/5** + +#### 2\. Scalability + +Rails is often critiqued for its scalability limitations, but it can scale when combined with proper architecture and best practices. Techniques like database sharding, horizontal scaling, and using background jobs for heavy-lifting tasks can help. Still, it’s not the first choice for developers who anticipate massive scale, as it requires careful planning and optimization to avoid performance bottlenecks. + +⭐ **Rating: 3.5/5** + +#### 3\. Flexibility + +Rails is a great framework for rapid development, especially for standard web applications, such as e-commerce platforms, blogs, or SaaS products. However, it’s less flexible when it comes to non-standard architectures or unique application needs. It’s designed with conventions in mind, so while those conventions help you move fast, they can become restrictive in more unconventional use cases. + +⭐ **Rating: 3.5/5** + +#### 4\. Community and Ecosystem + +Next to JavaScript with NPM, Rails has one of the most mature ecosystems in web development, with a huge repository of gems (libraries) that can help speed up development. From user authentication systems to payment gateways, there’s a gem for almost everything, saving developers from reinventing the wheel. The community is also very active, and there are many resources, tutorials, and tools to support developers at every level. + +⭐ **Rating: 5/5** + +#### 5\. Learning Curve + +Rails is known for its easy learning curve, especially for those new to web development. The framework’s focus on convention over configuration means that beginners don’t need to make many decisions and can get a functional app up and running quickly. On top of that, Ruby’s readable syntax also makes it approachable for new devs. + +However, as the application grows, mastering the framework’s more advanced concepts and learning how to break through those pre-defined conventions can become a bit of a problem. + +⭐ **Rating: 4/5** + +#### 6\. Security + +Rails comes with a solid set of built-in security features, including protections against SQL injection, XSS (cross-site scripting), and CSRF (cross-site request forgery). By following Rails' conventions, developers can implement secure practices without much additional work. However, as with any framework, you still need to stay updated on security vulnerabilities and ensure proper coding practices are followed. + +⭐ **Rating: 4.5/5** + +#### 7\. Future-Proofing + +While Rails is still highly relevant and widely used, its growth has slowed down from its initial hype during 2010, and it’s no longer the hot, new framework. That said, it remains a solid choice for many businesses, especially those building content-heavy or e-commerce applications. With an established user base and regular updates, Rails is not going anywhere, but its popularity may continue to wane as newer frameworks gain traction. + +⭐ **Rating: 4/5** + +### Laravel + +![Laravel](https://assets.roadmap.sh/guest/logo-laravel-iteyj.png) + +Laravel is a PHP backend framework that was introduced in 2011 by Taylor Otwell. It has since become one of the most popular frameworks in the PHP ecosystem, known for its elegant syntax, ease of use, and focus on developer experience (known to some as the RoR of PHP). Laravel offers a range of built-in tools and features like routing, authentication, and database management, making it ideal for building full-featured web applications quickly. + +#### 1\. Performance + +Laravel performs well for most typical web applications, especially CRUD operations. However, for larger, more complex applications, performance can be a concern. Using tools like caching, query optimization, and Laravel’s built-in optimization features (such as queue handling and task scheduling) can help boost performance, but some extra work may be required for high-load environments. + +⭐ **Rating: 4/5** + +#### 2\. Scalability + +Laravel can scale, but like Rails, it requires careful attention to architecture and infrastructure. By using horizontal scaling techniques, microservices, and services like AWS or Laravel’s Vapor platform, you can build scalable applications. However, Laravel is often seen as better suited for small to medium applications without heavy scaling needs right out of the box. + +⭐ **Rating: 3.5/5** + +#### 3\. Flexibility + +Laravel is highly flexible, allowing you to build a wide variety of web applications. With built-in features for routing, ORM, middleware, and templating, you can quickly build anything from small websites to enterprise applications. + +⭐ **Rating: 5/5** + +#### 4\. Community and Ecosystem + +Contrary to popular belief (mainly due to a lack of hype around the technology), Laravel has a large, active community and a vast ecosystem of packages and third-party tools. With Laracasts, a popular video tutorial platform, and Laravel.io the community portal for Laravel developers, there are many ways to reach out and learn from others. + +⭐ **Rating: 5/5** + +#### 5\. Learning Curve + +Laravel has a relatively gentle learning curve, especially for developers familiar with PHP. Its focus on simplicity, readable syntax, and built-in features make it easy to pick up for beginners. However, mastering the full list of Laravel’s capabilities and best practices can take some time for more complex projects. + +⭐ **Rating: 4.5/5** + +#### 6\. Security + +Just like others, Laravel comes with built-in security features, such as protection against common vulnerabilities like SQL injection, cross-site scripting (XSS), and cross-site request forgery (CSRF). The framework adheres to best security practices, making it easier for developers to build secure applications without much extra effort. + +⭐ **Rating: 4.5/5** + +#### 7\. Future-proofing + +Laravel is still highly relevant and continues to grow in popularity (having [recently secured a very substantial](https://laravel-news.com/laravel-raises-57-million-series-a) amount of money). It has a regular release schedule and a strong commitment to maintaining backward compatibility. With its consistent updates, active community, and growing ecosystem, Laravel is a solid choice for long-term projects. + +⭐ **Rating: 4.5/5** + +### Phoenix + +![Phoenix](https://assets.roadmap.sh/guest/phoenix-logo-5g60a.png) + +#### **Overview and History** + +Phoenix is a backend framework written in Elixir, designed to create high-performance, scalable web applications. It leverages Elixir's concurrency and fault-tolerant nature (inherited from the Erlang ecosystem) to build real-time, distributed systems. + +#### 1\. Performance + +Phoenix is known for its outstanding performance, particularly in handling large numbers of simultaneous connections. Thanks to Elixir’s concurrency model and lightweight processes, Phoenix can serve thousands of requests with minimal resource consumption. Real-time applications benefit especially from Phoenix’s built-in WebSockets and its LiveView feature for updating UIs in real-time without the need for JavaScript-heavy frameworks. + +⭐ **Rating: 5/5** + +#### 2\. Scalability + +Scalability is one of Phoenix’s biggest features. Because it runs on the Erlang VM, which was designed for distributed, fault-tolerant systems, Phoenix can scale horizontally and vertically with ease. + +⭐ **Rating: 5/5** + +#### 3\. Flexibility + +Phoenix is highly flexible, supporting everything from traditional web applications to real-time applications like chat apps and live updates. Its integration with Elixir’s functional programming paradigm and the BEAM virtual machine allows developers to build fault-tolerant, systems. The flexibility extends to how you can structure applications, scale components, and handle real-time events seamlessly. + +⭐ **Rating: 5/5** + +#### 4\. Community and Ecosystem + +Phoenix has a growing and passionate community, but it’s still smaller compared to more established frameworks like Rails or Laravel. However, it benefits from Elixir’s ecosystem, including libraries for testing, real-time applications, and database management. The community is supportive, and the framework’s documentation is detailed and developer-friendly, making it easy to get started. + +⭐ **Rating: 2.5/5** + +#### 5\. Learning Curve + +Phoenix, being built on Elixir, has a steeper learning curve than frameworks based on more common languages like JavaScript or PHP. Elixir’s functional programming model, while powerful, can be challenging for developers unfamiliar with the paradigm. + +⭐ **Rating: 3.5/5** + +#### 6\. Security + +As with most of the popular backend frameworks, Phoenix comes with strong built-in security features, including protections against common vulnerabilities like XSS, SQL injection, and CSRF. Additionally, because Elixir processes are isolated, Phoenix applications are resilient to many types of attacks. While some manual work is still required to ensure security, Phoenix adheres to best practices and provides tools to help developers write secure code. + +⭐ **Rating: 4.5/5** + +#### 7\. Future-Proofing + +Phoenix has a bright future thanks to its solid foundation in the Erlang/Elixir ecosystem, which is known for long-term reliability and support. While the framework might be technologically sound and future-proof, the key to having Elixir in the future will depend on the growth of its popularity. If Elixir’s community keeps growing, we’ll be able to enjoy the framework for a long time. + +⭐ **Rating: 5/5** + +### Actix + +![Actix](https://assets.roadmap.sh/guest/logo-actix-rust-31pi3.png) + +Actix is a powerful, high-performance web framework written in Rust. It’s based on the actor model, which is ideal for building concurrent, distributed systems. Actix is known for its incredible performance and memory safety, thanks to Rust’s strict compile-time guarantees. + +#### 1\. Performance + +Actix is one of the fastest web frameworks available, thanks to Rust’s system-level performance and Actix’s use of asynchronous programming. As it happens with JavaScript-based frameworks, it can handle a large number of requests with minimal overhead, making it ideal for high-performance, real-time applications. + +⭐ **Rating: 5/5** + +#### 2\. Scalability + +The actor model makes Actix the best at handling concurrent tasks and scaling across multiple threads or servers. Rust’s memory safety model and Actix’s architecture make it highly efficient in resource usage, meaning applications can scale well without excessive overhead. + +⭐ **Rating: 5/5** + +#### 3\. Flexibility + +Actix is flexible but requires a deeper understanding of Rust’s ownership and concurrency model to fully take advantage of it. It’s great for building both small, fast APIs and large, service architectures. While Actix is powerful, it’s less forgiving compared to other popular backend frameworks like Node.js or Python’s Flask, where rapid prototyping is easier. + +⭐ **Rating: 3/5** + +#### 4\. Community and Ecosystem + +Rust’s ecosystem, while growing, is still smaller compared to more established languages like JavaScript or Python. However, the Rust community is highly engaged, and support is steadily improving. + +⭐ **Rating: 3.5/5** + +#### 5\. Learning Curve + +Actix inherits Rust’s learning curve, which can be steep for developers new to systems programming or Rust’s strict memory management rules. However, for developers already familiar with Rust, Actix can be a great gateway into web development. + +⭐ **Rating: 2/5** + +#### 6\. Security + +Rust is known for its memory safety and security guarantees, and Actix benefits from these inherent strengths. Rust’s compile-time checks prevent common security vulnerabilities like null pointer dereferencing, buffer overflows, and data races. While these features tackle one side of the security ecosystem, more relevant ones like web-related vulnerabilities are not tackled by the framework. + +⭐ **Rating: 2.5/5** + +#### **7\. Future-Proofing** + +Rust’s growing popularity and adoption, especially in performance-critical areas, ensure that Actix has a strong future. While Actix’s ecosystem is still developing, the framework is regularly maintained and benefits from Rust’s long-term stability. + +⭐ **Rating: 4.5/5** + +## Conclusion + +Choosing the right backend framework is a critical decision that can shape the future of your project. In 2024, developers have more powerful options than ever, from popular backend frameworks like Ruby on Rails, Laravel or Next.js to high-performance focused, like Fastify, SvelteKit, Phoenix, and Actix. Each framework has its own strengths, making it essential to consider factors such as performance, scalability, flexibility, and the learning curve to ensure you pick the right tool for the job. + +Ultimately, there’s no proverbial silver bullet that solves all your problems. Your choice will depend on your project’s needs, your team's expertise, and the long-term goals of your application. + +So take your time, weigh the pros and cons, and pick the framework that aligns best with your vision for the future. \ No newline at end of file diff --git a/src/data/guides/devops-principles.md b/src/data/guides/devops-principles.md new file mode 100644 index 000000000..d825fbb66 --- /dev/null +++ b/src/data/guides/devops-principles.md @@ -0,0 +1,186 @@ +--- +title: '11 DevOps Principles and Practices to Master: Pro Advice' +description: 'Elevate your game by understanding this set of key DevOps principles and practices. Gain pro insights for a more efficient, collaborative workflow!' +authorId: fernando +excludedBySlug: '/devops/principles' +seo: + title: '11 DevOps Principles and Practices to Master: Pro Advice' + description: 'Elevate your game by understanding this set of key DevOps principles and practices. Gain pro insights for a more efficient, collaborative workflow!' + ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-skills-tlace.jpg' +isNew: true +type: 'textual' +date: 2024-09-24 +sitemap: + priority: 0.7 + changefreq: 'weekly' +tags: + - 'guide' + - 'textual-guide' + - 'guide-sitemap' +--- + +![DevOps Principles and Practices](https://assets.roadmap.sh/guest/devops-principles-pfswx.jpg) + +If you truly want to understand what makes DevOps so effective, it’s essential to know and master its core principles. + +DevOps is more than just a collaboration between development and operations teams; it's built on fundamental principles that simplify software delivery. + +In this guide, I’m going to dive deep into the core principles and practices that make the DevOps practice “tick.” If you’re a DevOps engineer or you want to become one, these are the DevOps principles you should master. + +I’ll explain the following principles in detail: + +1. Understanding the culture you want to join +2. CI/CD +3. Knowing how to use infrastructure as code tools. +4. Understanding containerization. +5. Monitoring & observability. +6. Security +7. Reducing the toil and technical debt. +8. Adopting GitOps. +9. Understanding that you’ll be learning & improving constantly. +10. Understanding basic programming concepts. +11. Embracing automation. + +## 1\. Understanding DevOps Culture + +[DevOps](https://roadmap.sh/devops) culture is the foundation for all DevOps principles. At its core, it's about fostering a collaborative environment where development and operations teams work together seamlessly. In traditional software development, developers focus on writing code while the operations team is tasked with deploying and maintaining it. This division often leads to misunderstandings and delays. + +Instead of operating in silos, these teams, when they follow the DevOps culture, end up sharing a common goal: delivering high-quality software efficiently. This cultural shift reduces the "us versus them" mentality that many organizations suffer, fostering cooperation instead of blame. + +DevOps culture encourages development and operations to collaborate throughout the software development lifecycle (SDLC). By aligning their goals and encouraging open communication, both teams can work together to improve the process of development, ultimately resulting in faster and more reliable software delivery. + +Key components of this culture include shared responsibility, transparency, and a commitment to continuous improvement. + +## 2\. Continuous Integration and Continuous Deployment (CI/CD) + +![Continuous Integration and Continuous Deployment](https://assets.roadmap.sh/guest/continous-development-vs-continuous-integration-l2fak.png) + +Continuous Integration (CI) and Continuous Deployment (CD) are central to DevOps principles. CI is the practice of frequently integrating code changes into a shared repository, ensuring that new code is automatically tested and validated. This practice helps catch bugs early, reducing the risk of introducing issues into the main codebase. CI allows devs and ops teams to work more efficiently, improving the overall quality of the software. + +Continuous Deployment, on the other hand, takes things a step further by automatically deploying code changes to production once they pass the CI tests. This ensures that new features and bug fixes are delivered to users as quickly as possible. Together, CI and CD form a pipeline that streamlines the software development lifecycle, from code commit to production deployment in seconds (or in some cases, minutes). + +Implementing CI/CD involves using various tools and practices. Jenkins, GitLab CI, CircleCI, and Travis CI are popular options for setting up CI pipelines, while tools like Spinnaker and Argo CD help with CD. + +## 3\. Infrastructure as Code (IaC) + +![Infrastructure as Code](https://assets.roadmap.sh/guest/infrastructure-as-code-w965a.png) + +Infrastructure as Code (IaC) is a game-changer in the DevOps world. Traditionally, provisioning infrastructure involved manual setup and configuration, which was time-consuming and, of course, prone to human error. IaC changes the game by treating infrastructure the same way we treat application code: as a set of scripts or configurations that can be version-controlled, tested, and automated. + +Through IaC, DevOps teams can ensure consistency and repeatability across different environments. It eliminates the "works on my machine" problem by providing a standardized environment for software to run on, whether it's on a developer's local machine, in a staging environment, or in production. + +Over the years, IaC tools have evolved quite a lot. At the start of it all, players like Chef and Puppet introduced the concept of configuration management, allowing you to define the desired state of your systems. Ansible took that one step further with its agentless architecture, making it easier to manage infrastructure at scale. Terraform took IaC to the next level by providing a tool-agnostic way to provision resources across multiple cloud providers, making it a favorite among DevOps engineers. + +## 4\. Containerization + +![Containerization](https://assets.roadmap.sh/guest/containers-docker-g491z.png) + +Containerization is a core practice and one of the main devops principles to constantly apply. Containers provide a lightweight, portable way to package software along with its dependencies, ensuring that it runs consistently across different environments. Containers share the host system's kernel, making them more efficient and faster to start up than virtual machines. + +These “containers” have been playing a key role in solving one of the age-old problems in software development: environment inconsistencies. By encapsulating an application and its dependencies into a container, you can ensure that it runs the same way on a developer's laptop as it does in production. This consistency simplifies the development process and reduces the risk of environment-related problems. + +In this space, Docker is the most popular tool for creating and managing containers (although not the only one), offering a simple way to build, package, and distribute containerized applications. Kubernetes takes containerization to the next level by providing a platform for orchestrating containers at scale. With Kubernetes, you can automate the deployment, scaling, and management of containerized applications, making it easier to manage complex, multi-container applications. + +While there is no excuse to not use DevOps at this stage in any software project, some of the biggest benefits of using containers in the DevOps lifecycle are: consistency, scalability, and portability. + +In other words, they make it easier to move applications between different environments. They also enable more efficient use of resources, as multiple containers can run on the same host without the overhead of a full virtual machine. + +## 5\. Monitoring and Observability + +![Monitoring and Observability](https://assets.roadmap.sh/guest/monitoring-servers-14k80.png) + +Monitoring and observability are essential components of the DevOps practice and key principles for any DevOps team. While monitoring focuses on tracking the health and performance of your systems, observability goes a step further by providing insights into the internal state of your applications based on the data they produce. Together, they enable DevOps teams to detect and troubleshoot issues quickly, ensuring that applications run smoothly. + +Continuous monitoring involves constantly tracking key metrics such as CPU usage, memory consumption, response times, and error rates. Tools like Prometheus, Grafana, and the ELK Stack (Elastic, Logstash, Kibana) are popular choices for collecting and visualizing this data. All public cloud providers also have their own solutions, in some cases even based on the open-source versions mentioned before. + +Whatever the tool of your choice is, they all provide real-time insights into the performance of your applications and infrastructure, helping you identify potential issues before they impact users. + +Now the practice of observability extends beyond monitoring by providing a deeper understanding of how your systems are behaving. It involves collecting and analyzing logs, metrics and traces to gain insights into the root cause of issues. OpenTelemetry, for instance, is an emerging standard for collecting telemetry data, offering a unified way to instrument, collect, and export data for analysis. This standardization makes it easier to integrate observability into your DevOps practices, regardless of the tools you're using. + +## 6\. Security in DevOps + +![Security in DevOps](https://assets.roadmap.sh/guest/secured-servers-amsed.png) + +Security is a critical aspect of the DevOps lifecycle, and it's something that needs to be integrated from the very beginning of any project expected to see the light of production at one point. + +DevSecOps is the practice of embedding security into the DevOps pipeline, ensuring that security measures are applied consistently throughout the software development lifecycle (reviewing code for vulnerabilities, checking IaC scripts, etc). Through this practice, DevOps helps catch vulnerabilities early and greatly reduce the risk of security breaches in production. + +Sadly, in many companies and teams that follow more traditional practices, security tends to be an afterthought, gaining importance only after the code is written and deployed. This approach can lead to costly and time-consuming fixes. DevSecOps, on the other hand, integrates security into every stage of the development and operations process, from code development to deployment. In the end, this helps security teams to automate security testing, identify vulnerabilities early, and enforce security policies consistently. All without having to read a single line of code themselves. + +In this space, tools like Snyk, Aqua Security, and HashiCorp Vault are king and they can help you integrate security into your DevOps workflows. + +## 7\. Reducing Toil and Technical Debt + +Toil and technical debt are two of the biggest productivity killers in software development. Toil refers to the repetitive, manual tasks that don't add direct value to the product, while technical debt is the accumulation of shortcuts and workarounds that make the codebase harder to maintain over time. Both can slow down your development workflow and make it more challenging to deliver new features. + +And because of that, one of the big and important DevOps principles is to aim to reduce both. Yes, DevOps teams can also help reduce technical debt. + +Reducing toil involves automating repetitive tasks to free up time for more valuable work. Tools like Ansible, Chef, and Puppet can help automate infrastructure management, while CI/CD pipelines can automate the build, test, and deployment processes. In the end, less manual work translates to reducing the chances of errors and giving team members the chance to focus on more interesting and strategic tasks. + +Technical debt, on the other hand, requires a proactive approach to address. It's about finding the right balance between delivering new features and maintaining the quality of the codebase. Regularly refactoring code, improving documentation, and addressing known issues can help keep technical debt in check. Of course, this also needs to be balanced with their ability to deliver new features and move the product forward. + +## 8\. GitOps: The Future of Deployment + +![GitOps](https://assets.roadmap.sh/guest/git-ops-tmggz.png) + +GitOps is a new practice that takes the principles of Git and applies them to operations. It's about using Git as the single source of truth for your infrastructure and application configurations. By storing everything in Git, you can use version control to manage changes, track history, and facilitate collaboration among development and operations teams. + +You essentially version your entire infrastructure with the same tools you version your code. + +In other words, all changes to the infrastructure and applications are made through pull requests to the Git repository. Once a change is merged, an automated process applies the change to the target environment. This approach provides a consistent, auditable, and repeatable way to manage deployments, making it easier to maintain the desired state of your systems. + +Through GitOps, teams can manage deployments and gain the following benefits: improved visibility, version control, and traceability. + +This methodology aligns well with the DevOps principles of automation, consistency, and collaboration, making it easier to manage complex deployments at scale. + +Key tools for implementing GitOps include Argo CD and Flux. These tools help you automate the deployment process by monitoring the Git repository for changes and applying them to the cluster. + +## 9\. Continuous Learning and Improvement + +![Continious Learning and Improvement](https://assets.roadmap.sh/guest/learn-improve-4fzcr.png) + +In general the world of tech is constantly evolving and changing and continuous learning and improvement are essential practices for staying ahead and relevant. + +That said, in the DevOps landscape change is also a constant, with new tools, practices, and technologies emerging all the time. If you think about it, before 2006 we didn’t even have containers. + +So to keep up, DevOps engineers and teams need to be committed to learning and improving continuously. + +Encouraging a culture of continuous learning within your team can help keep everyone up-to-date with the latest DevOps trends and tools. This can include participating in conferences, attending workshops, and enrolling in online courses. Reading books like "The Phoenix Project," "The Unicorn Project," and "The DevOps Handbook" can provide valuable insights and inspiration. + +If you’re not into books, then websites like [12factor.net](http://12factor.net), [OpenGitOps.dev](http://OpenGitOps.dev), and [CNCF.](http://CNCF.)io are also great resources for staying current with industry best practices. + +Continuous improvement goes hand-in-hand with continuous learning. It's about regularly reviewing and refining your processes, identifying areas for improvement after failing and experimenting with new approaches. This iterative approach helps you optimize the development process, improve collaboration between devs and operations, and deliver better software. + +## 10\. Understanding Programming Concepts + +![Understanding Programming Concepts](https://assets.roadmap.sh/guest/code-sample-fjblw.png) + +While not every DevOps engineer needs to be a full-fledged developer, having a solid understanding of programming concepts is key to success in the professional world. + +A good grasp of programming helps bridge the gap between development and operations, making it easier to collaborate and understand each other's needs. Which, if you think about it, is literally the core principle of the DevOps practice. + +Understanding programming translates to being able to write scripts in languages like Bash, Python, or PowerShell to automate tasks, manage infrastructure, and interact with APIs. This can range from simple tasks like automating server setup to more complex operations like orchestrating CI/CD pipelines. + +Understanding programming concepts also enables you to better manage the software development lifecycle. It helps you understand how code changes affect system performance, security, and stability. This insight allows you to make more informed decisions when designing and implementing infrastructure and deployment processes. + +## 11\. Automation in DevOps + +Automation is at the heart of DevOps principles. It's about automating repetitive and manual tasks to accelerate processes, reduce errors, and free up time for more strategic work. We partially covered this concept before as part of the toil reduction principle. + +However, it’s important to explain that automation not only involves code builds and tests, it also includes infrastructure provisioning and application deployment. In other words, automation plays a key role in every stage of the DevOps lifecycle. + +The whole point of automation is to accelerate processes. It enables faster, more consistent, and more reliable software delivery. By automating tasks like code integration, testing, and deployment, you can reduce the time it takes to get new features into production and minimize the risk of human error. + +There are many areas in the DevOps lifecycle where automation can be applied, in fact, the challenge would be to find areas where it wouldn’t make sense to apply it. These include CI/CD pipelines, infrastructure provisioning, configuration management, monitoring, and security testing. In this area, some of the most popular DevOps tools are Jenkins, Ansible, Terraform, and Selenium. They all provide the building blocks for automating these tasks, allowing you to create a seamless and efficient development workflow that everyone enjoys. + +If you’re looking to start implementing automation in your DevOps workflow, consider starting small and gradually expanding automation efforts, using version control for automation scripts (Git is a great option), and continuously monitoring and refining automated processes. + +It's important to find a balance between automation and human intervention, ensuring that automation enhances the development workflow without introducing unnecessary complexity. + +## Conclusion + +And there you have it—the core principles and practices of DevOps in a nutshell. By mastering them, you'll be well on your way to becoming a great [DevOps engineer](https://roadmap.sh/devops/devops-engineer). + +Whether you're just starting out or looking to level up your DevOps game, there's always something new to learn and explore. So keep experimenting, keep learning, and most importantly, keep having fun\! + +After all, DevOps isn't just about making systems run smoothly—it's about building a culture that encourages innovation, collaboration, and growth. As you dive deeper into the DevOps practice, you'll not only become more skilled but also contribute to creating better software and more agile teams. \ No newline at end of file diff --git a/src/data/guides/frontend-frameworks.md b/src/data/guides/frontend-frameworks.md new file mode 100644 index 000000000..33ea656b7 --- /dev/null +++ b/src/data/guides/frontend-frameworks.md @@ -0,0 +1,376 @@ +--- +title: 'Top 7 Frontend Frameworks to Use in 2024: Pro Advice' +description: 'Get expert advice on frontend frameworks for 2024. Elevate your web development process with these top picks.' +authorId: fernando +excludedBySlug: '/frontend/frameworks' +seo: + title: 'Top 7 Frontend Frameworks to Use in 2024: Pro Advice' + description: 'Get expert advice on frontend frameworks for 2024. Elevate your web development process with these top picks.' + ogImageUrl: 'https://assets.roadmap.sh/guest/top-frontend-frameworks-wmqwc.jpg' +isNew: true +type: 'textual' +date: 2024-09-26 +sitemap: + priority: 0.7 + changefreq: 'weekly' +tags: + - 'guide' + - 'textual-guide' + - 'guide-sitemap' +--- + +![Best frontend frameworks](https://assets.roadmap.sh/guest/top-frontend-frameworks-wmqwc.jpg) + +With the growing complexity of web applications, selecting the right frontend framework is more important than ever. Your choice will impact performance, scalability, and development speed. Not to mention the future-proofing of your application. + +In 2024, web development is increasingly about building fast, scalable, and highly interactive user interfaces. Frontend frameworks now need to support real-time interactions, handle large-scale data, and provide excellent developer experiences by simplifying the web development process. + +Picking the right frontend framework isn't just about what's popular—it's about finding the tool that fits your project’s needs, whether you’re building a small static site or a large, complex application. + +The top frontend frameworks for web development that I’ll cover as part of this article are: + +* React +* VueJS +* Angular +* Svelte +* Solid.js +* Qwik +* Astro + +## Criteria for Evaluating Frontend Frameworks + +Finding what the “best frontend framework” looks like is not easy. In fact, it’s impossible without the particular characteristics of your project, your team, and all other surrounding details. They will all inform your final decision. + +To help in that process, I’ve defined our own set of key indicators that will give you an idea of how we’re measuring the value of each of the leading [frontend development](https://roadmap.sh/frontend) frameworks covered in this article. + +1. **Performance:** How well does the frontend framework handle real-world scenarios, including page load times, rendering speed, and efficient resource use? +2. **Popularity and Community Support:** Is there a large community around the framework? How easy is it to find tutorials, forums, and third-party tools? +3. **Learning Curve:** Is the framework easy to learn for new developers, or does it require mastering complex patterns and paradigms? +4. **Ecosystem and Extensibility:** Does the framework offer a robust ecosystem of libraries, plugins, and tooling to extend its functionality? +5. **Scalability and Flexibility:** Can the framework handle both small and large projects? Is it flexible enough to support different project types, from single-page applications (SPAs) to complex enterprise solutions? +6. **Future-Proofing:** Is the framework actively maintained and evolving? Will it remain relevant in the next few years, based on trends and support? + +### My go-to frontend framework of choice + +My go-to framework is React because it has the highest ecosystem score and is one of the most future-proofed ones. + +I’ve applied the above criteria to the best frontend development frameworks I’m covering below in this guide. This table gives you a snapshot view of how they all compare according to my ratings, and I’ll explain the details further below. + +![table of frameworks](https://assets.roadmap.sh/guest/table-of-frameworks-yu22p.png) + +Of course, the choice of React is mine, and mine alone. You have to consider your own projects and your own context to understand what the best choice for you would be. + +Let’s get into the selection and what their strengths and weaknesses are to help you select the right one for you. + +## Top 7 Frontend Development Frameworks in 2024 + +### React + +![React](https://assets.roadmap.sh/guest/react-logo-d5ice.png) + +React was created by Facebook in 2013 and has since become one of the most popular frontend frameworks (though technically a library). Initially developed to solve the challenges of building dynamic and complex user interfaces for Facebook’s apps, React introduced the revolutionary concept of the virtual DOM (Document Object Model), which allowed developers to efficiently update only the parts of the UI that changed instead of re-rendering the entire page. + +#### Performance + +React uses a virtual DOM (the Virtual Document Object Model) to optimize performance by minimizing the number of direct manipulations to the actual DOM. This allows React to efficiently update only the components that need to change, rather than re-rendering the entire page. While React is fast, performance can be impacted in large applications if not managed carefully, especially with unnecessary re-renders or poorly optimized state management (two concepts that have created a lot of literature around them, and yet, most developers still get wrong). + +**⭐ Rating: 4/5** + +#### Popularity and Community Support + +React is one of the most popular frontend frameworks worldwide, with widespread adoption in both small and large-scale applications. Its massive community means there's a wealth of tutorials, libraries, and third-party tools available. With strong backing from Meta and continuous contributions from developers globally, React has one of the richest ecosystems and the largest support networks. + +⭐ **Rating: 5/5** + +#### Learning Curve + +React has a moderate learning curve. It’s relatively easy to get started with, especially if you’re familiar with JavaScript, but understanding concepts like JSX and hooks can take some time (especially if you throw in the relatively new server components). Once you grasp the basics, React becomes easier to work with, but mastering advanced patterns and state management solutions can add complexity. + +⭐ **Rating: 3.5/5** + +#### Ecosystem and Extensibility + +React has one of the most mature and extensive ecosystems in the frontend space. With a vast selection of libraries, tools, and plugins, React can be extended to meet virtually any development need. Key libraries like React Router (for routing) and Redux (for state management) are widely adopted, and there are countless third-party components available. React's ecosystem is one of its greatest strengths, offering flexibility and extensibility for all kinds of projects. + +⭐ **Rating: 5/5** + +#### Scalability and Flexibility + +React is highly flexible and can scale to meet the needs of both small and large applications. Its component-based architecture allows for modular development, making it easy to manage complex UIs. React is adaptable to various types of projects, from simple SPAs to large, enterprise-level applications. However, managing state in larger applications can become challenging, often requiring the use of external tools like Redux or Context API for better scalability. + +**⭐ Rating: 4.5/5** + +#### Future-Proofing + +React remains one of the most future-proof frameworks, with continuous updates and strong backing from Meta (Facebook). Its widespread adoption ensures that it will be well-supported for years to come. The ecosystem is mature, but React is constantly evolving with features like concurrent rendering and server-side components. The size of the community and corporate support make React a safe bet for long-term projects. + +⭐ **Rating: 5/5** + +### Vue.js + +### ![vuejs](https://assets.roadmap.sh/guest/vuejs-logo-b8w07.png) + +Vue.js was developed in 2014 by Evan You, who had previously worked on AngularJS at Google. His goal was to create a framework that combined the best parts of Angular’s templating system with the simplicity and flexibility of modern JavaScript libraries like React. Vue is known for its progressive nature, which means developers can incrementally adopt its features without having to completely rewrite an existing project. + +#### Performance + +Vue’s reactivity system provides a highly efficient way to track changes to data and update the DOM only when necessary. Its virtual DOM implementation is lightweight and fast, making Vue a strong performer for both small and large applications. Vue 3’s Composition API has further optimized performance by enabling more granular control over component updates. + +⭐ **Rating: 4.5/5** + +#### Popularity and Community Support: + +Vue.js has grown significantly in popularity, especially in regions like China and Europe, and is widely adopted by startups and smaller companies. Although it doesn't have the corporate backing of React or Angular, its community is passionate, and the framework enjoys strong support from individual contributors. Vue’s ecosystem is robust, with many official libraries and third-party plugins, making it a favorite among developers looking for a balance of simplicity and power. + +⭐ **Rating: 4.5/5** + +#### Learning Curve + +Vue’s syntax is clean and straightforward, with a structure that is easy to understand even for those new to frontend frameworks. Features like two-way data binding and directives are intuitive, making Vue much easier to pick up compared to React or Angular. + +⭐ **Rating: 4.5/5** + +#### Ecosystem and Extensibility + +Vue has a rich and growing ecosystem, with many official libraries like Vue Router, Vuex (for state management), and Vue CLI (for project setup). Additionally, its ecosystem includes many high-quality third-party plugins that make it easy to extend Vue applications. While not as large as React’s, Vue’s ecosystem is well-curated and highly effective, making it both powerful and developer-friendly. + +⭐ **Rating: 4.5/5** + +#### Scalability and Flexibility + +Vue is extremely flexible and scalable. It is designed to be incrementally adoptable, which means you can use it in small parts of a project or as the foundation for a large-scale application. Vue’s core libraries, along with tools like Vuex, make it highly scalable. + +⭐ **Rating: 4.5/5** + +#### Future-Proofing + +Vue is actively maintained and supported by a strong open-source community. Its development pace is steady. While it doesn’t have the same level of corporate backing as React or Angular, its growing popularity and enthusiastic community ensure its longevity. Vue is a solid choice for long-lasting projects. + +⭐ **Rating: 4.5/5** + +### Angular + +![Angular](https://assets.roadmap.sh/guest/angular-logo-tr4wg.png) + +Angular was first introduced by Google in 2010 as AngularJS, a framework that revolutionized web development by introducing two-way data binding and dependency injection. However, AngularJS eventually became difficult to maintain as applications grew more complex, leading Google to rewrite the framework from the ground up in 2016 with the release of Angular 2 (commonly referred to simply as "Angular"). + +#### Performance + +Angular offers solid performance, especially in large enterprise applications. It uses a change detection mechanism combined with the Ahead-of-Time (AOT) compiler to optimize performance by compiling templates into JavaScript code before the browser runs them. The built-in optimizations are robust, but Angular’s size and complexity can lead to performance overhead if not managed correctly. + +⭐ **Rating: 4/5** + +#### Popularity and Community Support + +Angular is backed by Google and is a popular choice for enterprise-level applications, especially in larger organizations. Its community is active, and Google’s long-term support ensures regular updates and improvements. Angular has a strong presence in corporate environments, and its ecosystem includes official tooling and libraries. However, it is less commonly used by smaller teams and individual developers compared to React and Vue. + +⭐ **Rating: 4.5/5** + +#### Learning Curve + +Angular has a steep learning curve due to its complexity and reliance on TypeScript. New web developers may find it challenging to grasp Angular’s concepts, such as dependency injection, decorators, and modules. The comprehensive nature of Angular also means there’s a lot to learn before you can be fully productive, but for experienced developers working on large-scale applications, the structure and tooling can be highly beneficial. + +⭐ **Rating: 3/5** + +#### Ecosystem and Extensibility + +Angular’s ecosystem is comprehensive and fully integrated, offering everything developers need right out of the box. Angular includes official libraries for routing, HTTP client, forms, and more, all provided and maintained by Google. The Angular CLI is a robust tool for managing projects. However, Angular's strict architecture means less flexibility when integrating with external libraries compared to React or Vue, though the ecosystem is extensive. + +⭐ **Rating: 4.5/5** + +#### Scalability and Flexibility + +Angular is built with scalability in mind, making it ideal for large, complex applications. Its strict structure and reliance on TypeScript make it a great fit for projects that require clear architecture and maintainability over time. Angular’s modularity and out-of-the-box features like dependency injection and lazy loading enable it to handle enterprise-level web applications with multiple teams. However, its strictness can reduce flexibility for smaller, less complex projects. + +⭐ **Rating: 5/5** + +#### Future-Proofing + +Angular has a clear roadmap and long-term support, making it one of the most future-proof frameworks, especially for enterprise applications. Google’s regular updates ensure that Angular remains competitive in the evolving frontend ecosystem. Its TypeScript foundation, strong architecture, and large-scale adoption make it a reliable option for projects with long lifecycles. + +⭐ **Rating: 5/5** + +### Svelte + +![Svelte](https://assets.roadmap.sh/guest/svelte-logo-mln7r.png) + +Svelte is a relatively new entrant in the frontend landscape, created by Rich Harris in 2016\. Unlike traditional frameworks like React and Vue, which do much of their work in the browser, Svelte takes a different approach. It shifts most of the work to compile time, meaning that the framework compiles the application code into optimized vanilla JavaScript during the build process, resulting in highly efficient and fast-running code. + +#### Performance + +Svelte takes a unique approach to performance by compiling components into highly optimized vanilla JavaScript at build time, removing the need for a virtual DOM entirely. This leads to very fast runtime performance and smaller bundle sizes, as only the necessary code is shipped to the browser. Svelte excels in small, fast-loading applications, making it one of the fastest frontend frameworks available. + +⭐ **Rating: 5/5** + +#### Popularity and Community Support + +Svelte has seen rapid growth in popularity (partially due to its novel approach). While its community is smaller compared to React, Vue, or Angular, it’s highly engaged and growing steadily. Svelte has fewer third-party libraries and tools, but the community is working hard to expand its ecosystem. It's particularly popular for smaller projects and developers who want a minimalistic framework. + +⭐ **Rating: 4/5** + +#### Learning Curve + +Svelte is relatively easy to learn, especially for web developers familiar with modern JavaScript. Its component-based structure is intuitive, and there’s no need to learn a virtual DOM or complex state management patterns. The absence of a virtual DOM and the simplicity of Svelte’s syntax make it one of the easiest frontend frameworks to pick up. + +⭐ **Rating: 4.5/5** + +#### Ecosystem and Extensibility + +Svelte’s ecosystem is still maturing compared to more established frameworks. While it lacks the extensive third-party library support of React or Vue, Svelte’s core tools like SvelteKit (for building full-stack applications) provide much of what is needed for most use cases. That said, the growing community is actively contributing to expanding the ecosystem and its extensive documentation. + +⭐ **Rating: 3.5/5** + +#### Scalability and Flexibility + +Svelte is highly flexible and performs well in small to medium-sized projects. It’s great at creating fast, lightweight applications with minimal boilerplate. While Svelte’s compile-time approach leads to excellent performance, the truth is Svelte is still too new and untested, so its scalability for very large projects or teams is still to be determined. + +⭐ **Rating: 4/5** + +#### Future-Proofing + +Svelte is gaining momentum as a modern, high-performance framework, and its unique approach has attracted a lot of attention. While the community is still smaller than that of React or Vue, it is growing rapidly, and the introduction of tools like SvelteKit further enhances its long-term viability. Svelte’s focus on simplicity and performance means it has the potential to become a significant player, but it's still early in terms of large-scale enterprise adoption. + +⭐ **Rating: 4/5** + +### Solid.js + +![Solidjs](https://assets.roadmap.sh/guest/solid-logo-4sh7s.png) + +Solid.js is a more recent addition to the frontend ecosystem, developed by Ryan Carniato in 2018\. Inspired by React’s declarative style, Solid.js seeks to offer similar features but with even better performance by using a fine-grained reactivity system. Unlike React, which uses a virtual DOM, Solid compiles its reactive components down to fine-grained, efficient updates, reducing overhead and increasing speed. + +#### Performance + +Solid.js is designed for performance, using a fine-grained reactivity system to ensure that only the necessary parts of the DOM are updated. This eliminates the need for a virtual DOM, resulting in highly efficient rendering and state updates. Solid’s performance is often considered one of the best in the frontend space, especially for applications with complex state management. + +⭐ **Rating: 5/5** + +#### Popularity and Community Support + +Solid.js is still a relatively new player in the frontend space, but it is gaining traction due to its high performance and fine-grained reactivity model. The community is smaller compared to other frameworks but highly enthusiastic, and interest in Solid.js is growing quickly. While it has fewer resources and libraries available compared to larger frameworks, it is gradually building a strong support network. + +⭐ **Rating: 3.5/5** + +#### Learning Curve + +Solid.js has a learning curve similar to React, particularly because of its JSX-like syntax. However, its fine-grained reactivity system introduces new concepts that might take some time to fully understand, especially for those new to reactive programming. While its reactivity model offers powerful performance benefits, frontend developers need to adjust to this different approach, making it slightly more challenging than React for beginners. + +⭐ **Rating: 3.5/5** + +#### Ecosystem and Extensibility + +Solid.js has a smaller but rapidly growing ecosystem. While it supports libraries like Solid Router for routing and integrates well with existing JavaScript tools, the number of available third-party extensions is still limited compared to React or Vue. Solid is seeing increasing contributions from the community, and as it grows in popularity, its ecosystem is expected to expand. + +⭐ **Rating: 3.5/5** + +#### Scalability and Flexibility + +Solid.js, with its fine-grained reactivity, is extremely flexible and scales well for complex applications. Its unique reactivity model enables it to handle large, state-heavy applications with minimal overhead. While Solid is still proving itself in larger, enterprise-level environments, its design offers promising scalability. However, due to its newness, large-scale implementations are less common compared to more established frameworks like React or Angular. + +⭐ **Rating: 4/5** + +#### Future-Proofing + +Solid.js, although newer, is quickly gaining traction due to its performance benefits and innovative reactivity model. Its small but dedicated community is growing, and the framework's architecture is built with modern web needs in mind. While it’s not yet widely adopted in enterprise environments, its potential for long-term use is promising, especially as more developers discover its benefits. However, its ecosystem is still developing. + +⭐ **Rating: 4/5** + +### Qwik + +![Qwik](https://assets.roadmap.sh/guest/qwik-logo-3dfy8.png) + +Qwik, created by Misko Hevery (the creator of Angular), is an innovative frontend framework that aims to solve the problem of slow page load times by introducing a new architecture called "resumability." Introduced in 2021 (making it the youngest frontend framework on this list), Qwik is designed to instantly load websites by only downloading and executing the minimal amount of code required to render the page, deferring the loading of other parts of the application until they are needed. + +#### Performance + +Qwik’s performance is built around its innovative resumable architecture, which optimizes for instant loading. It loads only the minimal amount of JavaScript needed to render the page, and additional code is loaded asynchronously as needed. This makes Qwik ideal for performance-critical applications, especially on slower devices and networks. + +⭐ **Rating: 5/5** + +#### Popularity and Community Support + +Qwik is an emerging framework with an innovative approach to performance. Its community is still in its early stages, but there is increasing interest due to its "resumable" architecture. Although the ecosystem is small, the framework’s unique features have caught the attention of developers looking to push the boundaries of frontend performance. As of 2024, Qwik's community is expanding, though still much smaller than React or Vue. + +⭐ **Rating: 3.5/5** + +#### Learning Curve + +Qwik has a moderate learning curve, largely due to its new "resumable" approach to web development. Developers who are used to traditional frontend frameworks may find Qwik’s architecture and its emphasis on lazy loading and instant loading a bit unfamiliar. While the concepts are powerful, it can take time to fully grasp how to take advantage of Qwik’s unique features. + +⭐ **Rating: 3.5/5** + +#### Ecosystem and Extensibility + +Qwik’s ecosystem is still in its early stages, but it is designed to be compatible with existing tools and libraries. The framework’s emphasis on performance over complexity means that while it lacks a large number of third-party plugins, it is designed to work alongside existing technologies. + +⭐ **Rating: 3/5** + +#### Scalability and Flexibility + +Qwik’s architecture is designed to handle scalability from the ground up. Its "resumable" approach allows applications to scale by loading only the necessary parts of the app on demand, making it particularly well-suited for performance-critical, large-scale projects. Although Qwik is still emerging, its emphasis on scalability and performance ensures it can grow with the demands of large, complex applications, at least on paper. Much like with Svelte, Qwik needs a lot more testing before we can draw a final verdict on its scalability. + +⭐ **Rating: 4.5/5** + +#### Future-Proofing + +Qwik is an exciting new frontend framework that introduces a novel approach with its resumable architecture, positioning it well for future needs around performance and scalability. Though still emerging, Qwik’s design aligns with modern web development process demands, particularly for fast-loading, performance-critical applications. If the community and ecosystem continue to grow, Qwik has strong future-proofing potential, especially for performance-sensitive projects. + +⭐ **Rating: 4/5** + +### + +### Astro + +![Astro](https://assets.roadmap.sh/guest/astro-logo-7rzp9.png) + +Astro was created by the team at Snowpack in 2021 and is a frontend framework focused on static site generation with minimal JavaScript. Astro takes a unique approach by allowing developers to build components using popular frameworks like React, Vue, and Svelte, but it only ships the HTML to the browser, greatly reducing the amount of JavaScript that needs to be processed by the client. + +#### Performance + +Astro is optimized for static site generation, shipping little to no JavaScript to the browser by default. This approach leads to very fast page load times, especially for content-heavy sites. While Astro does allow for interactive components, its performance is generally excellent due to the minimal JavaScript footprint on the client side. + +⭐ **Rating: 5/5** + +#### Popularity and Community Support + +Astro is rapidly gaining popularity, especially in the static site generation space. Its framework-agnostic approach and performance optimizations have led to a growing community. While smaller than React or Vue, Astro’s community is highly active, with increasing adoption for content-heavy websites and static site generation. The ecosystem is expanding quickly with new integrations and plugins. + +⭐ **Rating: 4/5** + +#### Learning Curve + +Astro is known for being easy to pick up, especially for developers already familiar with other frontend frameworks like React, Vue, or Svelte. Its framework-agnostic approach allows developers to use familiar components and libraries while taking advantage of Astro’s static site generation features. Astro’s simplicity makes it an accessible choice for beginners and experienced developers alike. + +⭐ **Rating: 5/5** + +#### Ecosystem and Extensibility + +Astro’s ecosystem is rapidly growing, with support for integrations with popular frameworks like React, Vue, and Svelte. Astro’s framework-agnostic approach allows developers to combine reusable components from different ecosystems in a single project. Its extensibility is also enhanced by its plugin system, which allows web developers to customize their creations even further. + +⭐ **Rating: 4/5** + +#### Scalability and Flexibility + +Astro is highly flexible for static sites and excels in building fast, scalable content-heavy websites. Its architecture allows for scaling static sites with minimal client-side JavaScript, making it an excellent choice for projects like blogs, documentation sites, or e-commerce platforms. However, Astro is not designed for large-scale, dynamic web applications like React or Angular, limiting its scalability in highly interactive or complex projects. + +⭐ **Rating: 3.5/5** + +#### Future-Proofing + +Astro is rapidly growing in popularity, especially for static site generation, and its framework-agnostic approach ensures that it can work with future tools and technologies. As the need for fast, content-heavy websites continues to grow, Astro is well-positioned to meet that demand. Its unique architecture and growing ecosystem suggest it will remain relevant, especially for static sites, but its future-proofing for dynamic applications is less certain compared to other frontend frameworks. + +⭐ **Rating: 4/5** + +## Conclusion + +The space of frontend development continues to evolve with an impressive list of frameworks to choose from. Whether you're aiming for performance, scalability, ease of use, or future-proofing, each frontend framework brings something unique to the table. + +* **React** remains a reliable choice for large-scale applications. +* **Vue.js** offers a perfect balance of simplicity and scalability. +* **Angular** is the go-to for enterprise-level projects. +* **Svelte** and **Solid.js** are great options for developers who prioritize performance and simplicity. +* **Qwik** is an exciting new contender focused on instant loading and performance. +* **Astro** shines in static site generation, combining a modern approach with the ability to integrate multiple frameworks for highly flexible, content-heavy sites. + +In the end, the choice comes down to your specific project needs. Whatever you’re building, there's a framework here that can help you succeed. + +The future of frontend development is exciting, and these frontend frameworks ensure you're equipped for whatever challenges lie ahead. diff --git a/src/data/roadmaps/ai-data-scientist/ai-data-scientist.md b/src/data/roadmaps/ai-data-scientist/ai-data-scientist.md index f0b6237bd..d6b91ec80 100644 --- a/src/data/roadmaps/ai-data-scientist/ai-data-scientist.md +++ b/src/data/roadmaps/ai-data-scientist/ai-data-scientist.md @@ -1,7 +1,7 @@ --- jsonUrl: '/jsons/roadmaps/ai-data-scientist.json' pdfUrl: '/pdfs/roadmaps/ai-data-scientist.pdf' -order: 4 +order: 5 renderer: 'editor' briefTitle: 'AI and Data Scientist' briefDescription: 'Step by step guide to becoming an AI and Data Scientist in 2024' diff --git a/src/data/roadmaps/ai-engineer/ai-engineer.json b/src/data/roadmaps/ai-engineer/ai-engineer.json new file mode 100644 index 000000000..53f4c916b --- /dev/null +++ b/src/data/roadmaps/ai-engineer/ai-engineer.json @@ -0,0 +1 @@ +{"nodes":[{"id":"xgDW3VKPFxsHzV37ZEBtt","type":"paragraph","position":{"x":61.5,"y":-100.15106699547101},"selected":true,"data":{"label":"Pre-requisites (One of these)","style":{"fontSize":17,"borderColor":"#000000","backgroundColor":"#ffffff","color":"#000000","textAlign":"center","justifyContent":"flex-start","padding":16}},"zIndex":999,"width":388,"height":124,"positionAbsolute":{"x":61.5,"y":-100.15106699547101},"dragging":false,"style":{"width":388,"height":124},"resizing":false,"focusable":true,"selectable":true},{"id":"2d12fAvrDGrpBHvIbT2c0","type":"paragraph","position":{"x":60.5,"y":40.33286386694641},"selected":true,"data":{"label":"Scrimba is offering 20% off to roadmap users on their AI Engineer course that covers this roadmap in depth. Check them out!","style":{"fontSize":17,"borderColor":"#000000","backgroundColor":"#ffffff","color":"#000000","textAlign":"center","justifyContent":"flex-start","padding":16}},"zIndex":999,"width":388,"height":166,"positionAbsolute":{"x":60.5,"y":40.33286386694641},"dragging":false,"style":{"width":388,"height":166},"resizing":false,"selectable":true,"focusable":true},{"id":"f7f_Pt8Ymq65FYDn0RTx0","type":"vertical","position":{"x":567.6567530029688,"y":3212.4007482223487},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":98,"style":{"width":20,"height":98},"positionAbsolute":{"x":567.6567530029688,"y":3212.4007482223487},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"cWm7uchA7HllHWHMET2Qy","type":"horizontal","position":{"x":730,"y":2957.9007482223487},"selected":true,"data":{"label":"horizontal node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":107,"height":20,"style":{"width":107,"height":20},"positionAbsolute":{"x":730,"y":2957.9007482223487},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"mag6fPpJF15RiIN9eAlE9","type":"section","position":{"x":837.4985923959754,"y":2922.9007482223487},"width":307,"height":376,"style":{"width":307,"height":376},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":837.4985923959754,"y":2922.9007482223487},"dragging":false,"selectable":true,"focusable":true},{"id":"P2fcMXV6vhm6MMMiBmy3r","type":"section","position":{"x":64.99859239597538,"y":2997.4007482223487},"width":278,"height":376,"style":{"width":278,"height":376},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":64.99859239597538,"y":2997.4007482223487},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"k8QYMT_d6EQWDqDgnPYsT","type":"section","position":{"x":840.3202732289765,"y":2655.9840127727616},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":296,"height":216,"style":{"width":296,"height":216},"dragging":false,"resizing":false,"positionAbsolute":{"x":840.3202732289765,"y":2655.9840127727616},"selectable":true,"focusable":true},{"id":"Lk-hBhJoaDCs6Dzq0d0I2","type":"vertical","position":{"x":570,"y":2652.7263937544244},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":117,"style":{"width":20,"height":117},"positionAbsolute":{"x":570,"y":2652.7263937544244},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"1_t82YAvkh8SCiyU_Otp8","type":"vertical","position":{"x":677,"y":2288.715898273103},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":1110,"style":{"width":20,"height":1110},"positionAbsolute":{"x":677,"y":2288.715898273103},"dragging":false,"resizing":false,"focusable":true,"selectable":true},{"id":"RSb6002qr_JXVKuIq40z2","type":"section","position":{"x":838.3356614935651,"y":2442.7243958663935},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":296,"height":186,"style":{"width":296,"height":186},"resizing":false,"positionAbsolute":{"x":838.3356614935651,"y":2442.7243958663935},"dragging":false,"selectable":true,"focusable":true},{"id":"zK_H4vmJXmyLYu1gVfhYK","type":"section","position":{"x":838.7247553252009,"y":2126.715898273103},"width":296,"height":331,"style":{"width":296,"height":331},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":838.7247553252009,"y":2126.715898273103},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"P7hG9GgyNRlmofosVs3ky","type":"vertical","position":{"x":88.5,"y":2319.227661473262},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"},"oldId":"hHhz7UIZIFgubv6pn5iKn"},"zIndex":999,"width":20,"height":60,"style":{"width":20,"height":60},"positionAbsolute":{"x":88.5,"y":2319.227661473262},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"1C4ZyHDYbp-ykYMBgGCgJ","type":"vertical","position":{"x":256.93627316762456,"y":2145.4100232103433},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":104,"style":{"width":20,"height":104},"positionAbsolute":{"x":256.93627316762456,"y":2145.4100232103433},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"hHhz7UIZIFgubv6pn5iKn","type":"vertical","position":{"x":88.5,"y":2008.0927158417944},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":226,"style":{"width":20,"height":226},"positionAbsolute":{"x":88.5,"y":2008.0927158417944},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"qrUpems5ggl3QG6PU5B9R","type":"section","position":{"x":63.77391817001211,"y":2735.4283305550825},"width":278,"height":164,"style":{"width":278,"height":164},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":63.77391817001211,"y":2735.4283305550825},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"UtzHMjmoyxrD9wHWWyfKI","type":"section","position":{"x":63.77391817001211,"y":2412.7263937544244},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":278,"height":331,"style":{"width":278,"height":331},"resizing":false,"positionAbsolute":{"x":63.77391817001211,"y":2412.7263937544244},"dragging":false,"selectable":true,"focusable":true},{"id":"4P2Sbyy2cVjOrXH75Hc2b","type":"section","position":{"x":487.3795624782034,"y":1896.0927158417944},"width":266,"height":272,"style":{"width":266,"height":272},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":487.3795624782034,"y":1896.0927158417944},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"OFEVSFDYuVn912lbBFEGV","type":"section","position":{"x":841.6087863651624,"y":1830.4687120415522},"width":295,"height":150,"style":{"width":295,"height":150},"selected":true,"data":{},"positionAbsolute":{"x":841.6087863651624,"y":1830.4687120415522},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"LVQKjfoO_nwMlmudTR5xf","type":"section","position":{"x":841.6087863651624,"y":1426.9424648726686},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":295,"height":372,"style":{"width":295,"height":372},"resizing":false,"dragging":false,"positionAbsolute":{"x":841.6087863651624,"y":1426.9424648726686},"selectable":true,"focusable":true},{"id":"Xj67gyzaoFU0809zao-Co","type":"horizontal","position":{"x":394.4565453870415,"y":1222.1146370882086},"selected":true,"data":{"label":"horizontal node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":139,"height":20,"style":{"width":139,"height":20},"positionAbsolute":{"x":394.4565453870415,"y":1222.1146370882086},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"s9fTyULS5azkrxwnXF3ZM","type":"section","position":{"x":65.4565453870415,"y":1189.060087180349},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":329,"height":599,"style":{"width":329,"height":599},"resizing":false,"positionAbsolute":{"x":65.4565453870415,"y":1189.060087180349},"dragging":false,"selectable":true,"focusable":true},{"id":"eilmLpxqlfX17bCbDDt5A","type":"horizontal","position":{"x":676.5,"y":1001.400748222349},"selected":true,"data":{"label":"horizontal node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":182,"height":20,"style":{"width":182,"height":20},"positionAbsolute":{"x":676.5,"y":1001.400748222349},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"QLCmjm7FEloKbKgZd69mp","type":"section","position":{"x":842.3618127280065,"y":902.900748222349},"width":298,"height":217,"style":{"width":298,"height":217},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":842.3618127280065,"y":902.900748222349},"dragging":false,"selectable":true,"focusable":true},{"id":"Nr60kOmUmudHb1H_ktoQh","type":"section","position":{"x":65.4565453870415,"y":784.900748222349},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":329,"height":378,"style":{"width":329,"height":378},"resizing":false,"dragging":false,"positionAbsolute":{"x":65.4565453870415,"y":784.900748222349},"selectable":true,"focusable":true},{"id":"CVA5JJQfQbLhUpq98LxxZ","type":"section","position":{"x":65.4565453870415,"y":590.900748222349},"width":329,"height":197,"style":{"width":329,"height":197},"selected":true,"data":{"style":{"backgroundColor":"#ffffff","borderColor":"#000000"}},"positionAbsolute":{"x":65.4565453870415,"y":590.900748222349},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"BO_Wx-cxY7Cr4U-9x-fpD","type":"section","position":{"x":842.3618127280065,"y":334.40074822234897},"selected":true,"data":{"label":"","style":{"width":150,"height":100,"fontSize":17,"backgroundColor":"#ffffff","borderColor":"#000000"}},"zIndex":-999,"width":298,"height":430,"style":{"width":298,"height":430},"resizing":false,"positionAbsolute":{"x":842.3618127280065,"y":334.40074822234897},"selectable":true,"focusable":true,"dragging":false},{"width":189,"height":68,"id":"iogwMmOvub2ZF4zgg6WyF","type":"title","position":{"x":526.5,"y":-9.599251777651034},"selected":true,"data":{"label":"AI Engineer","style":{"fontSize":28,"justifyContent":"flex-start","textAlign":"center"},"oldId":"9nxw2PEl-_eQPW0FHNPq2"},"zIndex":999,"dragging":false,"positionAbsolute":{"x":526.5,"y":-9.599251777651034},"focusable":true,"selectable":true},{"width":202,"height":49,"id":"_hYN0gEi9BL24nptEtXWU","type":"topic","position":{"x":520,"y":253.37833957831333},"selected":true,"data":{"label":"Introduction","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"c1edrcSmHO_L2e9DGh7st"},"zIndex":999,"style":{"width":202,"height":49},"resizing":false,"positionAbsolute":{"x":520,"y":253.37833957831333},"dragging":false,"focusable":true,"selectable":true},{"id":"GN6SnI7RXIeW8JeD-qORW","type":"subtopic","position":{"x":842.3618127280065,"y":226.40074822234897},"selected":true,"data":{"label":"What is an AI Engineer?","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":226.40074822234897},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"jSZ1LhPdhlkW-9QJhIvFs","type":"subtopic","position":{"x":842.3618127280065,"y":279.40074822234897},"selected":true,"data":{"label":"AI Engineer vs ML Engineer","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":279.40074822234897},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"wf2BSyUekr1S1q6l8kyq6","type":"subtopic","position":{"x":1011.8618127280065,"y":342.90074822234897},"selected":true,"data":{"label":"LLMs","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":119,"height":49,"style":{"width":119,"height":49},"resizing":false,"positionAbsolute":{"x":1011.8618127280065,"y":342.90074822234897},"dragging":false,"selectable":true,"focusable":true},{"id":"KWjD4xEPhOOYS51dvRLd2","type":"subtopic","position":{"x":851.8618127280066,"y":396.40074822234897},"selected":true,"data":{"label":"Inference","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"Qh4ivGbpmhhCnhAMrlpI5"},"zIndex":999,"width":279,"height":49,"style":{"width":279,"height":49},"positionAbsolute":{"x":851.8618127280066,"y":396.40074822234897},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"xostGgoaYkqMO28iN2gx8","type":"subtopic","position":{"x":851.8618127280066,"y":448.90074822234897},"selected":true,"data":{"label":"Training","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":279,"height":49,"style":{"width":279,"height":49},"positionAbsolute":{"x":851.8618127280066,"y":448.90074822234897},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"XyEp6jnBSpCxMGwALnYfT","type":"subtopic","position":{"x":851.8618127280066,"y":501.40074822234897},"selected":true,"data":{"label":"Embeddings","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":279,"height":49,"style":{"width":279,"height":49},"positionAbsolute":{"x":851.8618127280066,"y":501.40074822234897},"selectable":true,"focusable":true,"dragging":false,"resizing":true},{"id":"LnQ2AatMWpExUHcZhDIPd","type":"subtopic","position":{"x":851.8618127280066,"y":553.900748222349},"selected":true,"data":{"label":"Vector Databases","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":279,"height":49,"style":{"width":279,"height":49},"positionAbsolute":{"x":851.8618127280066,"y":553.900748222349},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"9JwWIK0Z2MK8-6EQQJsCO","type":"subtopic","position":{"x":1011.8618127280065,"y":605.900748222349},"selected":true,"data":{"label":"RAG","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":119,"height":49,"style":{"width":119,"height":49},"resizing":false,"positionAbsolute":{"x":1011.8618127280065,"y":605.900748222349},"dragging":false,"selectable":true,"focusable":true},{"id":"Dc15ayFlzqMF24RqIF_-X","type":"subtopic","position":{"x":851.8618127280066,"y":658.900748222349},"selected":true,"data":{"label":"Prompt Engineering","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":279,"height":49,"style":{"width":279,"height":49},"positionAbsolute":{"x":851.8618127280066,"y":658.900748222349},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"9XCxilAQ7FRet7lHQr1gE","type":"subtopic","position":{"x":851.8618127280066,"y":606.400748222349},"selected":true,"data":{"label":"AI Agents","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":155,"height":49,"style":{"width":155,"height":49},"positionAbsolute":{"x":851.8618127280066,"y":606.400748222349},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"5QdihE1lLpMc3DFrGy46M","type":"subtopic","position":{"x":851.8618127280066,"y":342.90074822234897},"selected":true,"data":{"label":"AI vs AGI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":155,"height":49,"style":{"width":155,"height":49},"resizing":false,"dragging":false,"positionAbsolute":{"x":851.8618127280066,"y":342.90074822234897},"selectable":true,"focusable":true},{"id":"yd1VRnSOeOzXF8fgl7CW4","type":"label","position":{"x":911.3618127280066,"y":717.400748222349},"selected":true,"data":{"label":"Common Terminology","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":182,"height":36,"style":{},"positionAbsolute":{"x":911.3618127280066,"y":717.400748222349},"dragging":false,"selectable":true,"focusable":true},{"id":"yHmHXymPNWwu8p1vvqD3o","type":"paragraph","position":{"x":808.4971847919508,"y":-105.15106699547101},"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"}},"zIndex":999,"width":354,"height":143,"positionAbsolute":{"x":808.4971847919508,"y":-105.15106699547101},"dragging":false,"selectable":true,"focusable":true,"style":{"width":354,"height":143},"resizing":false},{"id":"2zqZkyVgigifcRS1H7F_b","type":"button","position":{"x":821.7005592047509,"y":-23.165503577725815},"selected":true,"data":{"label":"roadmap.sh","href":"https://roadmap.sh","color":"#ffffff","backgroundColor":"#4136D6","style":{"fontSize":17}},"zIndex":999,"width":329,"height":49,"dragging":false,"style":{"width":329,"height":49},"resizing":false,"positionAbsolute":{"x":821.7005592047509,"y":-23.165503577725815},"selectable":true,"focusable":true},{"id":"5Irad96FtU3TkNZRK7x_8","type":"vertical","position":{"x":610.3795624782034,"y":-116.59925177765109},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"}},"zIndex":999,"width":20,"height":101,"style":{"width":20,"height":101},"positionAbsolute":{"x":610.3795624782034,"y":-116.59925177765109},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"MJvTQei3yqAMdLf5dACls","type":"button","position":{"x":71.5,"y":-44.62166042168667},"selected":true,"data":{"label":"Frontend","href":"https://roadmap.sh/frontend","color":"#000000","backgroundColor":"#d1d1d1","style":{"fontSize":17}},"zIndex":999,"width":127,"height":49,"style":{"width":127,"height":49},"positionAbsolute":{"x":71.5,"y":-44.62166042168667},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"9Vh9mUCXrYpTqEZexLW1L","type":"button","position":{"x":203,"y":-44.62166042168667},"selected":true,"data":{"label":"Backend","href":"https://roadmap.sh/backend","color":"#000000","backgroundColor":"#D1D1D1","style":{"fontSize":17}},"zIndex":999,"width":110,"height":49,"style":{"width":110,"height":49},"positionAbsolute":{"x":203,"y":-44.62166042168667},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"259d3vMaiFwnLF6ZecFyP","type":"button","position":{"x":317.5,"y":-44.62166042168667},"selected":true,"data":{"label":"Full-Stack","href":"https://roadmap.sh/full-stack","color":"#000000","backgroundColor":"#D1D1D1","style":{"fontSize":17}},"zIndex":999,"width":122,"height":49,"style":{"width":122,"height":49},"positionAbsolute":{"x":317.5,"y":-44.62166042168667},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"qJVgKe9uBvXc-YPfvX_Y7","type":"subtopic","position":{"x":842.3618127280065,"y":79.37833957831333},"selected":true,"data":{"label":"Impact on Product Development","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":79.37833957831333},"dragging":false,"selectable":true,"focusable":true},{"id":"K9EiuFgPBFgeRxY4wxAmb","type":"subtopic","position":{"x":842.3618127280065,"y":132.37833957831333},"selected":true,"data":{"label":"Roles and Responsiblities","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":132.37833957831333},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"wt_3LocKHpvsnsQdDI7LK","type":"paragraph","position":{"x":452.5,"y":378.40074822234897},"selected":true,"data":{"label":"Using Pre-trained Models","style":{"fontSize":20,"borderColor":"transparent","backgroundColor":"transparent","color":"#000000","textAlign":"center","justifyContent":"flex-start","padding":16}},"zIndex":999,"width":337,"height":67,"style":{"width":337,"height":67},"positionAbsolute":{"x":452.5,"y":378.40074822234897},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"d7fzv_ft12EopsQdmEsel","type":"topic","position":{"x":497,"y":510.40074822234897},"selected":true,"data":{"label":"Pre-trained Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":248,"height":49,"style":{"width":248,"height":49},"positionAbsolute":{"x":497,"y":510.40074822234897},"selectable":true,"focusable":true,"resizing":false,"dragging":false},{"id":"1Ga6DbOPc6Crz7ilsZMYy","type":"subtopic","position":{"x":65.4565453870415,"y":458.40074822234897},"selected":true,"data":{"label":"Benefits of Pre-trained Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":329,"height":49,"style":{"width":329,"height":49},"positionAbsolute":{"x":65.4565453870415,"y":458.40074822234897},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"MXqbQGhNM3xpXlMC2ib_6","type":"subtopic","position":{"x":65.4565453870415,"y":511.40074822234897},"selected":true,"data":{"label":"Limitations and Considerations","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":329,"height":49,"style":{"width":329,"height":49},"positionAbsolute":{"x":65.4565453870415,"y":511.40074822234897},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"ytU145_ip3ePMRKaroV-Z","type":"label","position":{"x":154,"y":791.900748222349},"selected":true,"data":{"label":"Popular AI Models","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":156,"height":36,"style":{},"positionAbsolute":{"x":154,"y":791.900748222349},"dragging":false,"selectable":true,"focusable":true},{"id":"2WbVpRLqwi3Oeqk1JPui4","type":"subtopic","position":{"x":78.5,"y":623.400748222349},"selected":true,"data":{"label":"Open AI Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":304,"height":49,"style":{"width":304,"height":49},"positionAbsolute":{"x":78.5,"y":623.400748222349},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"vvpYkmycH0_W030E-L12f","type":"subtopic","position":{"x":78.5,"y":676.400748222349},"selected":true,"data":{"label":"Capabilities / Context Length","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":304,"height":49,"style":{"width":304,"height":49},"positionAbsolute":{"x":78.5,"y":676.400748222349},"selectable":true,"focusable":true,"dragging":false},{"id":"LbB2PeytxRSuU07Bk0KlJ","type":"subtopic","position":{"x":78.5,"y":729.400748222349},"selected":true,"data":{"label":"Cut-off Dates / Knowledge","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":304,"height":49,"style":{"width":304,"height":49},"positionAbsolute":{"x":78.5,"y":729.400748222349},"dragging":false,"selectable":true,"focusable":true},{"id":"hy6EyKiNxk1x84J63dhez","type":"subtopic","position":{"x":78.5,"y":832.900748222349},"selected":true,"data":{"label":"Anthropic's Claude","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":304,"height":49,"style":{"width":304,"height":49},"positionAbsolute":{"x":78.5,"y":832.900748222349},"selectable":true,"focusable":true,"dragging":false},{"id":"oe8E6ZIQWuYvHVbYJHUc1","type":"subtopic","position":{"x":78.5,"y":885.900748222349},"selected":true,"data":{"label":"Google's Gemini","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":304,"height":49,"style":{"width":304,"height":49},"positionAbsolute":{"x":78.5,"y":885.900748222349},"selectable":true,"focusable":true,"dragging":false},{"id":"3PQVZbcr4neNMRr6CuNzS","type":"subtopic","position":{"x":78.5,"y":938.900748222349},"selected":true,"data":{"label":"Azure AI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":113,"height":49,"style":{"width":113,"height":49},"positionAbsolute":{"x":78.5,"y":938.900748222349},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"OkYO-aSPiuVYuLXHswBCn","type":"subtopic","position":{"x":194.47059387846707,"y":938.900748222349},"selected":true,"data":{"label":"AWS Sagemaker","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":189,"height":49,"style":{"width":189,"height":49},"positionAbsolute":{"x":194.47059387846707,"y":938.900748222349},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"8XjkRqHOdyH-DbXHYiBEt","type":"subtopic","position":{"x":78.5,"y":992.8781089665497},"selected":true,"data":{"label":"Hugging Face Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":304,"height":49,"style":{"width":304,"height":49},"positionAbsolute":{"x":78.5,"y":992.8781089665497},"selectable":true,"focusable":true,"dragging":false},{"id":"n-Ud2dXkqIzK37jlKItN4","type":"subtopic","position":{"x":79.5,"y":1044.8781089665497},"selected":true,"data":{"label":"Mistral AI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":158,"height":49,"style":{"width":158,"height":49},"positionAbsolute":{"x":79.5,"y":1044.8781089665497},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"a7qsvoauFe5u953I699ps","type":"subtopic","position":{"x":240.5,"y":1044.8781089665497},"selected":true,"data":{"label":"Cohere","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":142,"height":49,"style":{"width":142,"height":49},"positionAbsolute":{"x":240.5,"y":1044.8781089665497},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"5ShWZl1QUqPwO-NRGN85V","type":"subtopic","position":{"x":65.4565453870415,"y":566.400748222349},"selected":true,"data":{"label":"OpenAI Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center","colorType":"c"}},"zIndex":999,"width":329,"height":49,"style":{"width":329,"height":49},"resizing":false,"positionAbsolute":{"x":65.4565453870415,"y":566.400748222349},"dragging":false,"selectable":true,"focusable":true},{"id":"wr2_2ADvySOUZxzEo1Uw1","type":"paragraph","position":{"x":507,"y":707.900748222349},"selected":true,"data":{"label":"Open AI Platform","style":{"fontSize":20,"borderColor":"transparent","backgroundColor":"transparent","color":"#000000","textAlign":"center","justifyContent":"flex-start","padding":16},"oldId":"wt_3LocKHpvsnsQdDI7LK"},"zIndex":999,"width":228,"height":66,"style":{"width":228,"height":66},"positionAbsolute":{"x":507,"y":707.900748222349},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"zdeuA4GbdBl2DwKgiOA4G","type":"topic","position":{"x":528,"y":986.900748222349},"selected":true,"data":{"label":"OpenAI API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"d7fzv_ft12EopsQdmEsel"},"zIndex":999,"width":186,"height":49,"style":{"width":186,"height":49},"positionAbsolute":{"x":528,"y":986.900748222349},"selectable":true,"focusable":true,"resizing":false,"dragging":false},{"id":"_bPTciEA1GT1JwfXim19z","type":"subtopic","position":{"x":842.3618127280065,"y":795.900748222349},"selected":true,"data":{"label":"Chat Completions API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":795.900748222349},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"9-5DYeOnKJq9XvEMWP45A","type":"subtopic","position":{"x":842.3618127280065,"y":848.900748222349},"selected":true,"data":{"label":"Writing Prompts","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":848.900748222349},"selectable":true,"focusable":true,"dragging":false},{"id":"nyBgEHvUhwF-NANMwkRJW","type":"subtopic","position":{"x":842.3618127280065,"y":1126.900748222349},"selected":true,"data":{"label":"Open AI Playground","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":1126.900748222349},"selectable":true,"focusable":true,"dragging":false},{"id":"15XOFdVp0IC-kLYPXUJWh","type":"subtopic","position":{"x":842.3618127280065,"y":1179.900748222349},"selected":true,"data":{"label":"Fine-tuning","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":1179.900748222349},"selectable":true,"focusable":true,"dragging":false},{"id":"93tz7xYnToF3AMd_JKkNu","type":"label","position":{"x":920,"y":1070.900748222349},"selected":true,"data":{"label":"Managing Tokens","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":151,"height":36,"style":{},"positionAbsolute":{"x":920,"y":1070.900748222349},"selectable":true,"focusable":true,"dragging":false},{"id":"qzvp6YxWDiGakA2mtspfh","type":"subtopic","position":{"x":851.8618127280066,"y":910.900748222349},"selected":true,"data":{"label":"Maximum Tokens","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":279,"height":49,"style":{"width":279,"height":49},"positionAbsolute":{"x":851.8618127280066,"y":910.900748222349},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"FjV3oD7G2Ocq5HhUC17iH","type":"subtopic","position":{"x":851.8618127280066,"y":963.900748222349},"selected":true,"data":{"label":"Token Counting","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":279,"height":49,"style":{"width":279,"height":49},"positionAbsolute":{"x":851.8618127280066,"y":963.900748222349},"selectable":true,"focusable":true,"dragging":false},{"id":"DZPM9zjCbYYWBPLmQImxQ","type":"subtopic","position":{"x":851.8618127280066,"y":1016.900748222349},"selected":true,"data":{"label":"Pricing Considerations","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":279,"height":49,"style":{"width":279,"height":49},"dragging":false,"resizing":false,"positionAbsolute":{"x":851.8618127280066,"y":1016.900748222349},"selectable":true,"focusable":true},{"id":"nXsjZiJGgFyOO8b0J-E2V","type":"button","position":{"x":842.3618127280065,"y":1233.900748222349},"selected":true,"data":{"label":"Prompt Engineering Roadmap","href":"https://roadmap.sh/prompt-engineering","color":"#ffffff","backgroundColor":"#2a79e4","style":{"fontSize":17}},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":842.3618127280065,"y":1233.900748222349},"dragging":false,"selectable":true,"focusable":true},{"id":"8ndKHDJgL_gYwaXC7XMer","type":"topic","position":{"x":522.5,"y":1207.6146370882086},"selected":true,"data":{"label":"AI Safety and Ethics","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"a_3SabylVqzzOyw3tZN5f"},"zIndex":999,"width":197,"height":49,"style":{"width":197,"height":49},"positionAbsolute":{"x":522.5,"y":1207.6146370882086},"dragging":false,"selectable":true,"focusable":true},{"id":"r3lmdGQuphdbxA3Zd3e8x","type":"label","position":{"x":102.47059387846707,"y":1365.6030951949779},"selected":true,"data":{"label":"Understanding AI Safety Issues","href":"","color":"#000000","style":{"fontSize":17},"oldId":"_G2yiGWt55mSuqhfEL_vt"},"zIndex":999,"width":255,"height":36,"style":{},"dragging":false,"positionAbsolute":{"x":102.47059387846707,"y":1365.6030951949779},"selectable":true,"focusable":true},{"id":"cUyLT6ctYQ1pgmodCKREq","type":"subtopic","position":{"x":76.47059387846707,"y":1199.5015627391044},"selected":true,"data":{"label":"Prompt Injection Attacks","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1199.5015627391044},"selectable":true,"focusable":true,"dragging":false},{"id":"lhIU0ulpvDAn1Xc3ooYz_","type":"subtopic","position":{"x":76.47059387846707,"y":1305.5015627391044},"selected":true,"data":{"label":"Bias and Fareness","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1305.5015627391044},"selectable":true,"focusable":true,"dragging":false},{"id":"sWBT-j2cRuFqRFYtV_5TK","type":"subtopic","position":{"x":76.47059387846707,"y":1252.5015627391044},"selected":true,"data":{"label":"Security and Privacy Concerns","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1252.5015627391044},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"Pt-AJmSJrOxKvolb5_HEv","type":"subtopic","position":{"x":76.47059387846707,"y":1520.7260836911958},"selected":true,"data":{"label":"Conducting adversarial testing","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"ONLDyczNacGVZGojYyJrU"},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1520.7260836911958},"selectable":true,"focusable":true,"dragging":false},{"id":"ljZLa3yjQpegiZWwtnn_q","type":"subtopic","position":{"x":76.47059387846707,"y":1414.7260836911958},"selected":true,"data":{"label":"OpenAI Moderation API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1414.7260836911958},"selectable":true,"focusable":true,"dragging":false},{"id":"4Q5x2VCXedAWISBXUIyin","type":"subtopic","position":{"x":76.47059387846707,"y":1467.7260836911958},"selected":true,"data":{"label":"Adding end-user IDs in prompts","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1467.7260836911958},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"qmx6OHqx4_0JXVIv8dASp","type":"subtopic","position":{"x":76.47059387846707,"y":1573.7260836911958},"selected":true,"data":{"label":"Robust prompt engineering","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"ONLDyczNacGVZGojYyJrU"},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1573.7260836911958},"selectable":true,"focusable":true,"dragging":false},{"id":"t1SObMWkDZ1cKqNNlcd9L","type":"subtopic","position":{"x":76.47059387846707,"y":1626.7260836911958},"selected":true,"data":{"label":"Know your Customers / Usecases","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"ONLDyczNacGVZGojYyJrU"},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1626.7260836911958},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"ONLDyczNacGVZGojYyJrU","type":"subtopic","position":{"x":76.47059387846707,"y":1679.7260836911958},"selected":true,"data":{"label":"Constraining outputs and inputs","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":307,"height":49,"style":{"width":307,"height":49},"positionAbsolute":{"x":76.47059387846707,"y":1679.7260836911958},"selectable":true,"focusable":true,"dragging":false},{"id":"_G2yiGWt55mSuqhfEL_vt","type":"label","position":{"x":140.47059387846707,"y":1740.701849711868},"selected":true,"data":{"label":"Safety Best Practices","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":179,"height":36,"style":{},"dragging":false,"positionAbsolute":{"x":140.47059387846707,"y":1740.701849711868},"selectable":true,"focusable":true},{"id":"a_3SabylVqzzOyw3tZN5f","type":"topic","position":{"x":522.5,"y":1372.7838848882502},"selected":true,"data":{"label":"OpenSource AI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":197,"height":49,"style":{"width":197,"height":49},"positionAbsolute":{"x":522.5,"y":1372.7838848882502},"dragging":false,"selectable":true,"focusable":true},{"id":"RBwGsq9DngUsl8PrrCbqx","type":"subtopic","position":{"x":841.1539837884804,"y":1318.7838848882502},"selected":true,"data":{"label":"Open vs Closed Source Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"rTT2UnvqFO3GH6ThPLEjO"},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":841.1539837884804,"y":1318.7838848882502},"dragging":false,"selectable":true,"focusable":true},{"id":"97eu-XxYUH9pYbD_KjAtA","type":"subtopic","position":{"x":841.1539837884804,"y":1372.7838848882502},"selected":true,"data":{"label":"Popular Open Source Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"rTT2UnvqFO3GH6ThPLEjO"},"zIndex":999,"width":298,"height":49,"style":{"width":298,"height":49},"positionAbsolute":{"x":841.1539837884804,"y":1372.7838848882502},"dragging":false,"selectable":true,"focusable":true},{"id":"v99C5Bml2a6148LCJ9gy9","type":"topic","position":{"x":841.6087863651624,"y":1426.9424648726686},"selected":true,"data":{"label":"Hugging Face","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"rTT2UnvqFO3GH6ThPLEjO"},"zIndex":999,"width":295,"height":49,"style":{"width":295,"height":49},"positionAbsolute":{"x":841.6087863651624,"y":1426.9424648726686},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"YLOdOvLXa5Fa7_mmuvKEi","type":"subtopic","position":{"x":851.6087863651624,"y":1580.9265129447253},"selected":true,"data":{"label":"Hugging Face Hub","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"bGLrbpxKgENe2xS1eQtdh"},"zIndex":999,"width":275,"height":49,"style":{"width":275,"height":49},"positionAbsolute":{"x":851.6087863651624,"y":1580.9265129447253},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"YKIPOiSj_FNtg0h8uaSMq","type":"subtopic","position":{"x":851.6087863651624,"y":1527.9265129447253},"selected":true,"data":{"label":"Hugging Face Tasks","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":275,"height":49,"style":{"width":275,"height":49},"positionAbsolute":{"x":851.6087863651624,"y":1527.9265129447253},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"nDVgsa7xov1RjEMJeFAE9","type":"label","position":{"x":869.6087863651624,"y":1486.6598997473122},"selected":true,"data":{"label":"Finding Open Source Models","href":"","color":"#000000","style":{"fontSize":17},"oldId":"dDYwvkBj-voqoFCqSBfVr"},"zIndex":999,"width":239,"height":36,"style":{},"positionAbsolute":{"x":869.6087863651624,"y":1486.6598997473122},"dragging":false,"selectable":true,"focusable":true},{"id":"dDYwvkBj-voqoFCqSBfVr","type":"label","position":{"x":875.6087863651624,"y":1641.8285839892083},"selected":true,"data":{"label":"Using Open Source Models","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":227,"height":36,"style":{},"positionAbsolute":{"x":875.6087863651624,"y":1641.8285839892083},"dragging":false,"selectable":true,"focusable":true},{"id":"3kRTzlLNBnXdTsAEXVu_M","type":"subtopic","position":{"x":851.6087863651624,"y":1682.8285839892083},"selected":true,"data":{"label":"Inference SDK","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"bGLrbpxKgENe2xS1eQtdh"},"zIndex":999,"width":275,"height":49,"style":{"width":275,"height":49},"positionAbsolute":{"x":851.6087863651624,"y":1682.8285839892083},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"bGLrbpxKgENe2xS1eQtdh","type":"subtopic","position":{"x":851.6087863651624,"y":1735.8285839892083},"selected":true,"data":{"label":"Transformers.js","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":275,"height":49,"style":{"width":275,"height":49},"positionAbsolute":{"x":851.6087863651624,"y":1735.8285839892083},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"rTT2UnvqFO3GH6ThPLEjO","type":"topic","position":{"x":841.6087863651624,"y":1805.9687120415522},"selected":true,"data":{"label":"Ollama","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":295,"height":49,"style":{"width":295,"height":49},"positionAbsolute":{"x":841.6087863651624,"y":1805.9687120415522},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"ro3vY_sp6xMQ-hfzO-rc1","type":"subtopic","position":{"x":851.6087863651624,"y":1862.9687120415522},"selected":true,"data":{"label":"Ollama Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":275,"height":49,"style":{"width":275,"height":49},"positionAbsolute":{"x":851.6087863651624,"y":1862.9687120415522},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"TsG_I7FL-cOCSw8gvZH3r","type":"subtopic","position":{"x":851.6087863651624,"y":1916.9687120415522},"selected":true,"data":{"label":"Ollama SDK","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":275,"height":49,"style":{"width":275,"height":49},"positionAbsolute":{"x":851.6087863651624,"y":1916.9687120415522},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"--ig0Ume_BnXb9K2U7HJN","type":"topic","position":{"x":487.3795624782034,"y":1814.9687120415522},"selected":true,"data":{"label":"What are Embeddings","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"tt9u3oFlsjEMfPyojuqpc"},"zIndex":999,"width":266,"height":49,"style":{"width":266,"height":49},"positionAbsolute":{"x":487.3795624782034,"y":1814.9687120415522},"dragging":false,"selectable":true,"focusable":true},{"id":"eMfcyBxnMY_l_5-8eg6sD","type":"subtopic","position":{"x":497.90686980833937,"y":1906.0927158417944},"selected":true,"data":{"label":"Semantic Search","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":250,"height":49,"style":{"width":250,"height":49},"dragging":false,"positionAbsolute":{"x":497.90686980833937,"y":1906.0927158417944},"selectable":true,"focusable":true},{"id":"HQe9GKy3p0kTUPxojIfSF","type":"subtopic","position":{"x":497.90686980833937,"y":2012.0927158417944},"selected":true,"data":{"label":"Recommendation Systems","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":250,"height":49,"style":{"width":250,"height":49},"dragging":false,"positionAbsolute":{"x":497.90686980833937,"y":2012.0927158417944},"selectable":true,"focusable":true},{"id":"AglWJ7gb9rTT2rMkstxtk","type":"subtopic","position":{"x":497.90686980833937,"y":2065.0927158417944},"selected":true,"data":{"label":"Anomaly Detection","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":250,"height":49,"style":{"width":250,"height":49},"dragging":false,"positionAbsolute":{"x":497.90686980833937,"y":2065.0927158417944},"selectable":true,"focusable":true},{"id":"06Xta-OqSci05nV2QMFdF","type":"subtopic","position":{"x":497.90686980833937,"y":1959.0927158417944},"selected":true,"data":{"label":"Data Classification","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":250,"height":49,"style":{"width":250,"height":49},"dragging":false,"positionAbsolute":{"x":497.90686980833937,"y":1959.0927158417944},"selectable":true,"focusable":true},{"id":"OZvk1d0XxXwJwbEUYqnFq","type":"paragraph","position":{"x":450.8795624782034,"y":1573.7260836911958},"selected":true,"data":{"label":"Embeddings & Vector Databases","style":{"fontSize":20,"borderColor":"transparent","backgroundColor":"transparent","color":"#000000","textAlign":"center","justifyContent":"center","padding":16}},"zIndex":999,"width":339,"height":64,"style":{"width":339,"height":64},"positionAbsolute":{"x":450.8795624782034,"y":1573.7260836911958},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"S4LeKcmhmhOxGmDXWrYSW","type":"label","position":{"x":509.90686980833937,"y":2125.0927158417944},"selected":true,"data":{"label":"Use Cases for Embeddings","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":226,"height":36,"style":{},"positionAbsolute":{"x":509.90686980833937,"y":2125.0927158417944},"dragging":false,"selectable":true,"focusable":true},{"id":"l6priWeJhbdUD5tJ7uHyG","type":"topic","position":{"x":62.71396345748872,"y":1980.4687120415522},"selected":true,"data":{"label":"Open AI Embeddings API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"tt9u3oFlsjEMfPyojuqpc"},"zIndex":999,"width":264,"height":49,"style":{"width":264,"height":49},"positionAbsolute":{"x":62.71396345748872,"y":1980.4687120415522},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"y0qD5Kb4Pf-ymIwW-tvhX","type":"subtopic","position":{"x":62.71396345748872,"y":1830.6426346064957},"selected":true,"data":{"label":"Open AI Embedding Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"4GArjDYipit4SLqKZAWDf"},"zIndex":999,"width":264,"height":49,"style":{"width":264,"height":49},"positionAbsolute":{"x":62.71396345748872,"y":1830.6426346064957},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"4GArjDYipit4SLqKZAWDf","type":"subtopic","position":{"x":62.71396345748872,"y":1883.6426346064957},"selected":true,"data":{"label":"Pricing Considerations","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":264,"height":49,"style":{"width":264,"height":49},"positionAbsolute":{"x":62.71396345748872,"y":1883.6426346064957},"dragging":false,"selectable":true,"focusable":true},{"id":"apVYIV4EyejPft25oAvdI","type":"topic","position":{"x":62.5,"y":2216.727661473262},"selected":true,"data":{"label":"Open-Source Embeddings","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"tt9u3oFlsjEMfPyojuqpc"},"zIndex":999,"width":278,"height":49,"style":{"width":278,"height":49},"positionAbsolute":{"x":62.5,"y":2216.727661473262},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"ZV_V6sqOnRodgaw4mzokC","type":"subtopic","position":{"x":134.93627316762456,"y":2063.3782051585886},"selected":true,"data":{"label":"Sentence Transformers","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"dLEg4IA3F5jgc44Bst9if"},"zIndex":999,"width":264,"height":49,"style":{"width":264,"height":49},"positionAbsolute":{"x":134.93627316762456,"y":2063.3782051585886},"dragging":false,"selectable":true,"focusable":true},{"id":"dLEg4IA3F5jgc44Bst9if","type":"subtopic","position":{"x":134.93627316762456,"y":2116.3782051585886},"selected":true,"data":{"label":"Models on Hugging Face","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":264,"height":49,"style":{"width":264,"height":49},"positionAbsolute":{"x":134.93627316762456,"y":2116.3782051585886},"dragging":false,"selectable":true,"focusable":true},{"id":"tt9u3oFlsjEMfPyojuqpc","type":"topic","position":{"x":62.5,"y":2268.2838160405004},"selected":true,"data":{"label":"Vector Databases","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":278,"height":49,"style":{"width":278,"height":49},"positionAbsolute":{"x":62.5,"y":2268.2838160405004},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"WcjX6p-V-Rdd77EL8Ega9","type":"subtopic","position":{"x":62.5,"y":2358.7263937544244},"selected":true,"data":{"label":"Purpose and Functionality","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":278,"height":49,"style":{"width":278,"height":49},"positionAbsolute":{"x":62.5,"y":2358.7263937544244},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"dSd2C9lNl-ymmCRT9_ZC3","type":"subtopic","position":{"x":73.27752658021024,"y":2464.8371549138815},"selected":true,"data":{"label":"Chroma","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":127,"height":49,"style":{"width":127,"height":49},"resizing":false,"positionAbsolute":{"x":73.27752658021024,"y":2464.8371549138815},"dragging":false,"selectable":true,"focusable":true},{"id":"_Cf7S1DCvX7p1_3-tP3C3","type":"subtopic","position":{"x":204.27752658021024,"y":2464.8371549138815},"selected":true,"data":{"label":"Pinecone","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":130,"height":49,"style":{"width":130,"height":49},"resizing":false,"positionAbsolute":{"x":204.27752658021024,"y":2464.8371549138815},"dragging":false,"selectable":true,"focusable":true},{"id":"VgUnrZGKVjAAO4n_llq5-","type":"subtopic","position":{"x":73.27752658021024,"y":2517.8371549138815},"selected":true,"data":{"label":"Weaviate","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":127,"height":49,"style":{"width":127,"height":49},"positionAbsolute":{"x":73.27752658021024,"y":2517.8371549138815},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"JurLbOO1Z8r6C3yUqRNwf","type":"subtopic","position":{"x":204.27752658021024,"y":2517.8371549138815},"selected":true,"data":{"label":"FAISS","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":130,"height":49,"style":{"width":130,"height":49},"resizing":false,"positionAbsolute":{"x":204.27752658021024,"y":2517.8371549138815},"dragging":false,"selectable":true,"focusable":true},{"id":"rjaCNT3Li45kwu2gXckke","type":"subtopic","position":{"x":73.27752658021024,"y":2570.8371549138815},"selected":true,"data":{"label":"LanceDB","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":127,"height":49,"style":{"width":127,"height":49},"resizing":false,"positionAbsolute":{"x":73.27752658021024,"y":2570.8371549138815},"dragging":false,"selectable":true,"focusable":true},{"id":"DwOAL5mOBgBiw-EQpAzQl","type":"subtopic","position":{"x":204.27752658021024,"y":2570.8371549138815},"selected":true,"data":{"label":"Qdrant","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":130,"height":49,"style":{"width":130,"height":49},"resizing":false,"positionAbsolute":{"x":204.27752658021024,"y":2570.8371549138815},"dragging":false,"selectable":true,"focusable":true},{"id":"9kT7EEQsbeD2WDdN9ADx7","type":"subtopic","position":{"x":73.27752658021024,"y":2624.8371549138815},"selected":true,"data":{"label":"Supabase","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"positionAbsolute":{"x":73.27752658021024,"y":2624.8371549138815},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"j6bkm0VUgLkHdMDDJFiMC","type":"subtopic","position":{"x":73.27752658021024,"y":2677.8371549138815},"selected":true,"data":{"label":"MongoDB Atlas","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":73.27752658021024,"y":2677.8371549138815},"selectable":true,"focusable":true},{"id":"HCuwQPBl48sRzdbxdf_E5","type":"label","position":{"x":79.27391817001211,"y":2423.8371549138815},"selected":true,"data":{"label":"Popular Vector DBs (pick one)","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":247,"height":36,"style":{},"positionAbsolute":{"x":79.27391817001211,"y":2423.8371549138815},"dragging":false,"selectable":true,"focusable":true},{"id":"5TQnO9B4_LTHwqjI7iHB1","type":"subtopic","position":{"x":72.71593368999282,"y":2787.1963926350054},"selected":true,"data":{"label":"Indexing Embeddings","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":262,"height":49,"style":{"width":262,"height":49},"positionAbsolute":{"x":72.71593368999282,"y":2787.1963926350054},"dragging":false,"selectable":true,"focusable":true},{"id":"ZcbRPtgaptqKqWBgRrEBU","type":"subtopic","position":{"x":73.21593368999282,"y":2840.1963926350054},"selected":true,"data":{"label":"Performing Similarity Search","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":73.21593368999282,"y":2840.1963926350054},"resizing":false,"selectable":true,"focusable":true},{"id":"xsvdnT7BIbR_jAajTYDWw","type":"label","position":{"x":86.27391817001211,"y":2743.7263937544244},"selected":true,"data":{"label":"Implementing Vector Search","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":233,"height":36,"style":{},"positionAbsolute":{"x":86.27391817001211,"y":2743.7263937544244},"dragging":false,"selectable":true,"focusable":true},{"id":"lVhWhZGR558O-ljHobxIi","type":"topic","position":{"x":520,"y":2268.2838160405004},"selected":true,"data":{"label":"RAG & Implementation","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"W7cKPt_UxcUgwp8J6hS4p"},"zIndex":999,"width":220,"height":49,"style":{"width":220,"height":49},"positionAbsolute":{"x":520,"y":2268.2838160405004},"dragging":false,"selectable":true,"focusable":true},{"id":"GCn4LGNEtPI0NWYAZCRE-","type":"subtopic","position":{"x":839.7247553252009,"y":2018.167205684323},"selected":true,"data":{"label":"RAG Usecases","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":295,"height":49,"style":{"width":295,"height":49},"positionAbsolute":{"x":839.7247553252009,"y":2018.167205684323},"dragging":false,"selectable":true,"focusable":true},{"id":"qlBEXrbV88e_wAGRwO9hW","type":"subtopic","position":{"x":839.7247553252009,"y":2071.167205684323},"selected":true,"data":{"label":"RAG vs Fine-tuning","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":295,"height":49,"style":{"width":295,"height":49},"dragging":false,"positionAbsolute":{"x":839.7247553252009,"y":2071.167205684323},"selectable":true,"focusable":true},{"id":"mX987wiZF7p3V_gExrPeX","type":"subtopic","position":{"x":851.4069839913399,"y":2177.715898273103},"selected":true,"data":{"label":"Chunking","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"2jJnS9vRYhaS69d6OxrMh"},"zIndex":999,"width":272,"height":49,"style":{"width":272,"height":49},"positionAbsolute":{"x":851.4069839913399,"y":2177.715898273103},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"grTcbzT7jKk_sIUwOTZTD","type":"subtopic","position":{"x":851.4069839913398,"y":2230.715898273103},"selected":true,"data":{"label":"Embedding","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"2jJnS9vRYhaS69d6OxrMh"},"zIndex":999,"width":272,"height":49,"style":{"width":272,"height":49},"positionAbsolute":{"x":851.4069839913398,"y":2230.715898273103},"dragging":false,"selectable":true,"focusable":true},{"id":"zZA1FBhf1y4kCoUZ-hM4H","type":"subtopic","position":{"x":851.4069839913398,"y":2283.715898273103},"selected":true,"data":{"label":"Vector Database","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"2jJnS9vRYhaS69d6OxrMh"},"zIndex":999,"width":272,"height":49,"style":{"width":272,"height":49},"positionAbsolute":{"x":851.4069839913398,"y":2283.715898273103},"dragging":false,"selectable":true,"focusable":true},{"id":"OCGCzHQM2LQyUWmiqe6E0","type":"subtopic","position":{"x":851.4069839913398,"y":2336.715898273103},"selected":true,"data":{"label":"Retrieval Process","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"2jJnS9vRYhaS69d6OxrMh"},"zIndex":999,"width":272,"height":49,"style":{"width":272,"height":49},"positionAbsolute":{"x":851.4069839913398,"y":2336.715898273103},"dragging":false,"selectable":true,"focusable":true},{"id":"2jJnS9vRYhaS69d6OxrMh","type":"subtopic","position":{"x":851.4069839913398,"y":2389.715898273103},"selected":true,"data":{"label":"Generation","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":272,"height":49,"style":{"width":272,"height":49},"positionAbsolute":{"x":851.4069839913398,"y":2389.715898273103},"dragging":false,"selectable":true,"focusable":true},{"id":"Bt536neIoWehPSHUB6l_n","type":"label","position":{"x":906.2247553252009,"y":2137.0058206731997},"selected":true,"data":{"label":"Implementing RAG","href":"","color":"#000000","style":{"fontSize":17},"oldId":"v9whDFmN8Wf3oKlaOtHMD"},"zIndex":999,"width":161,"height":36,"style":{},"positionAbsolute":{"x":906.2247553252009,"y":2137.0058206731997},"dragging":false,"selectable":true,"focusable":true},{"id":"v9whDFmN8Wf3oKlaOtHMD","type":"label","position":{"x":874.3356614935651,"y":2468.2465978906853},"selected":true,"data":{"label":"Ways of Implementing RAG","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":225,"height":36,"style":{},"positionAbsolute":{"x":874.3356614935651,"y":2468.2465978906853},"dragging":false,"selectable":true,"focusable":true},{"id":"WZVW8FQu6LyspSKm1C_sl","type":"subtopic","position":{"x":847.8356614935651,"y":2514.3420928710716},"selected":true,"data":{"label":"Using SDKs Directly","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":278,"height":49,"style":{"width":278,"height":49},"positionAbsolute":{"x":847.8356614935651,"y":2514.3420928710716},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"ebXXEhNRROjbbof-Gym4p","type":"subtopic","position":{"x":847.8356614935651,"y":2567.3420928710716},"selected":true,"data":{"label":"Langchain","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"axwBe98SYWkguEwbMipIm"},"zIndex":999,"width":132,"height":49,"style":{"width":132,"height":49},"positionAbsolute":{"x":847.8356614935651,"y":2567.3420928710716},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"d0ontCII8KI8wfP-8Y45R","type":"subtopic","position":{"x":984.8356614935651,"y":2567.3420928710716},"selected":true,"data":{"label":"Llama Index","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"ebXXEhNRROjbbof-Gym4p"},"zIndex":999,"width":141,"height":49,"style":{"width":141,"height":49},"positionAbsolute":{"x":984.8356614935651,"y":2567.3420928710716},"dragging":false,"selectable":true,"focusable":true,"resizing":false},{"id":"eOqCBgBTKM8CmY3nsWjre","type":"topic","position":{"x":520,"y":2393.7243958663935},"selected":true,"data":{"label":"Open AI Assistant API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"W7cKPt_UxcUgwp8J6hS4p"},"zIndex":999,"width":220,"height":49,"style":{"width":220,"height":49},"positionAbsolute":{"x":520,"y":2393.7243958663935},"dragging":false,"selectable":true,"focusable":true},{"id":"c0RPhpD00VIUgF4HJgN2T","type":"subtopic","position":{"x":78.5,"y":1098.8781089665497},"selected":true,"data":{"label":"Replicate","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"n-Ud2dXkqIzK37jlKItN4"},"zIndex":999,"width":304,"height":49,"style":{"width":304,"height":49},"positionAbsolute":{"x":78.5,"y":1098.8781089665497},"selectable":true,"focusable":true,"dragging":false,"resizing":false},{"id":"AeHkNU-uJ_gBdo5-xdpEu","type":"topic","position":{"x":533.3795624782034,"y":2739.3420928710716},"selected":true,"data":{"label":"AI Agents","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"W7cKPt_UxcUgwp8J6hS4p"},"zIndex":999,"width":220,"height":49,"style":{"width":220,"height":49},"positionAbsolute":{"x":533.3795624782034,"y":2739.3420928710716},"dragging":false,"selectable":true,"focusable":true},{"id":"pqnC9N-AUKg0vjKzuCNqd","type":"label","position":{"x":516.5,"y":2354.715898273103},"selected":true,"data":{"label":"RAG Alternative","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":137,"height":36,"style":{},"positionAbsolute":{"x":516.5,"y":2354.715898273103},"dragging":false,"focusable":true,"selectable":true},{"id":"778HsQzTuJ_3c9OSn5DmH","type":"subtopic","position":{"x":405.1180805793284,"y":2527.2038885388165},"selected":true,"data":{"label":"Agents Usecases","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"6xaRB34_g0HGt-y1dGYXR"},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":405.1180805793284,"y":2527.2038885388165},"dragging":false,"focusable":true,"selectable":true},{"id":"BRdKYsyWaHg6kJA62mLNO","type":"button","position":{"x":405.1180805793284,"y":2580.2038885388165},"selected":true,"data":{"label":"Prompt Engineering","href":"https://roadmap.sh/prompt-engineering","color":"#ffffff","backgroundColor":"#2a79e4","style":{"fontSize":17}},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"dragging":false,"positionAbsolute":{"x":405.1180805793284,"y":2580.2038885388165},"focusable":true,"selectable":true},{"id":"voDKcKvXtyLzeZdx2g3Qn","type":"subtopic","position":{"x":405.1180805793284,"y":2633.2038885388165},"selected":true,"data":{"label":"ReAct Prompting","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"6xaRB34_g0HGt-y1dGYXR"},"zIndex":999,"width":239,"height":49,"style":{"width":239,"height":49},"positionAbsolute":{"x":405.1180805793284,"y":2633.2038885388165},"dragging":false,"focusable":true,"selectable":true},{"id":"6xaRB34_g0HGt-y1dGYXR","type":"subtopic","position":{"x":848.3202732289765,"y":2706.1704183412},"selected":true,"data":{"label":"Manual Implementation","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":280,"height":49,"style":{"width":280,"height":49},"positionAbsolute":{"x":848.3202732289765,"y":2706.1704183412},"dragging":false,"focusable":true,"resizing":false,"selectable":true},{"id":"Sm0Ne5Nx72hcZCdAcC0C2","type":"subtopic","position":{"x":848.3202732289765,"y":2759.1704183412},"selected":true,"data":{"label":"OpenAI Functions / Tools","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":280,"height":49,"style":{"width":280,"height":49},"positionAbsolute":{"x":848.3202732289765,"y":2759.1704183412},"dragging":false,"selectable":true,"focusable":true},{"id":"mbp2NoL-VZ5hZIIblNBXt","type":"subtopic","position":{"x":848.3202732289765,"y":2812.1704183412},"selected":true,"data":{"label":"OpenAI Assistant API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":280,"height":49,"style":{"width":280,"height":49},"positionAbsolute":{"x":848.3202732289765,"y":2812.1704183412},"dragging":false,"selectable":true,"focusable":true},{"id":"8DMSxbdBT5el9ECZE2EGx","type":"label","position":{"x":910.3202732289765,"y":2666.47564929518},"selected":true,"data":{"label":"Building AI Agents","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":156,"height":36,"style":{},"positionAbsolute":{"x":910.3202732289765,"y":2666.47564929518},"dragging":false,"selectable":true,"focusable":true},{"id":"W7cKPt_UxcUgwp8J6hS4p","type":"topic","position":{"x":533.3795624782034,"y":2942.715898273103},"selected":true,"data":{"label":"Multimodal AI","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":220,"height":49,"style":{"width":220,"height":49},"positionAbsolute":{"x":533.3795624782034,"y":2942.715898273103},"dragging":false,"selectable":true,"focusable":true},{"id":"sGR9qcro68KrzM8qWxcH8","type":"subtopic","position":{"x":65.4565453870415,"y":2942.715898273103},"selected":true,"data":{"label":"Multimodal AI Usecases","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":278,"height":49,"style":{"width":278,"height":49},"positionAbsolute":{"x":65.4565453870415,"y":2942.715898273103},"dragging":false,"selectable":true,"focusable":true},{"id":"fzVq4hGoa2gdbIzoyY1Zp","type":"subtopic","position":{"x":72.99859239597538,"y":3005.4007482223487},"selected":true,"data":{"label":"Image Understanding","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":72.99859239597538,"y":3005.4007482223487},"resizing":false,"selectable":true,"focusable":true},{"id":"49BWxYVFpIgZCCqsikH7l","type":"subtopic","position":{"x":72.99859239597538,"y":3058.4007482223487},"selected":true,"data":{"label":"Image Generation","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":72.99859239597538,"y":3058.4007482223487},"selectable":true,"focusable":true},{"id":"TxaZCtTCTUfwCxAJ2pmND","type":"subtopic","position":{"x":72.99859239597538,"y":3111.4007482223487},"selected":true,"data":{"label":"Video Understanding","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":72.99859239597538,"y":3111.4007482223487},"selectable":true,"focusable":true},{"id":"mxQYB820447DC6kogyZIL","type":"subtopic","position":{"x":72.99859239597538,"y":3164.4007482223487},"selected":true,"data":{"label":"Audio Processing","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":72.99859239597538,"y":3164.4007482223487},"selectable":true,"focusable":true},{"id":"GCERpLz5BcRtWPpv-asUz","type":"subtopic","position":{"x":72.99859239597538,"y":3217.4007482223487},"selected":true,"data":{"label":"Text-to-Speech","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":72.99859239597538,"y":3217.4007482223487},"selectable":true,"focusable":true},{"id":"jQX10XKd_QM5wdQweEkVJ","type":"subtopic","position":{"x":72.99859239597538,"y":3270.4007482223487},"selected":true,"data":{"label":"Speech-to-Text","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":261,"height":49,"style":{"width":261,"height":49},"dragging":false,"positionAbsolute":{"x":72.99859239597538,"y":3270.4007482223487},"selectable":true,"focusable":true},{"id":"chm2xTFPJKW0dubKGjq-2","type":"label","position":{"x":119.99859239597538,"y":3330.4007482223487},"selected":true,"data":{"label":"Multimodal AI Tasks","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":168,"height":36,"style":{},"positionAbsolute":{"x":119.99859239597538,"y":3330.4007482223487},"dragging":false,"selectable":true,"focusable":true},{"id":"CRrqa-dBw1LlOwVbrZhjK","type":"subtopic","position":{"x":845.4985923959754,"y":2930.9007482223487},"selected":true,"data":{"label":"OpenAI Vision API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":291,"height":49,"style":{"width":291,"height":49},"positionAbsolute":{"x":845.4985923959754,"y":2930.9007482223487},"selectable":true,"focusable":true,"dragging":false},{"id":"LKFwwjtcawJ4Z12X102Cb","type":"subtopic","position":{"x":845.4985923959754,"y":2983.9007482223487},"selected":true,"data":{"label":"DALL-E API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":291,"height":49,"style":{"width":291,"height":49},"positionAbsolute":{"x":845.4985923959754,"y":2983.9007482223487},"selectable":true,"focusable":true,"dragging":false},{"id":"OTBd6cPUayKaAM-fLWdSt","type":"subtopic","position":{"x":845.4985923959754,"y":3036.9007482223487},"selected":true,"data":{"label":"Whisper API","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":291,"height":49,"style":{"width":291,"height":49},"positionAbsolute":{"x":845.4985923959754,"y":3036.9007482223487},"selectable":true,"focusable":true,"dragging":false},{"id":"EIDbwbdolR_qsNKVDla6V","type":"subtopic","position":{"x":845.4985923959754,"y":3089.9007482223487},"selected":true,"data":{"label":"Hugging Face Models","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":291,"height":49,"style":{"width":291,"height":49},"positionAbsolute":{"x":845.4985923959754,"y":3089.9007482223487},"selectable":true,"focusable":true,"dragging":false},{"id":"j9zD3pHysB1CBhLfLjhpD","type":"subtopic","position":{"x":845.4985923959754,"y":3142.9007482223487},"selected":true,"data":{"label":"LangChain for Multimodal Apps","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":291,"height":49,"style":{"width":291,"height":49},"positionAbsolute":{"x":845.4985923959754,"y":3142.9007482223487},"selectable":true,"focusable":true,"dragging":false},{"id":"akQTCKuPRRelj2GORqvsh","type":"subtopic","position":{"x":845.4985923959754,"y":3195.9007482223487},"selected":true,"data":{"label":"LlamaIndex for Multimodal Apps","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":291,"height":49,"style":{"width":291,"height":49},"positionAbsolute":{"x":845.4985923959754,"y":3195.9007482223487},"selectable":true,"focusable":true,"dragging":false},{"id":"5hCv_2FQNIgQC4XLW4AYs","type":"label","position":{"x":875.9985923959754,"y":3255.9007482223487},"selected":true,"data":{"label":"Implementing Multimodal AI","href":"","color":"#000000","style":{"fontSize":17}},"zIndex":999,"width":230,"height":36,"style":{},"positionAbsolute":{"x":875.9985923959754,"y":3255.9007482223487},"dragging":false,"selectable":true,"focusable":true},{"width":459,"height":119,"id":"0vLaVNJaJSHZ_bHli6Qzs","type":"paragraph","position":{"x":452.1429505186827,"y":3390.969159826914},"selected":true,"data":{"label":"Continue 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":452.1429505186827,"y":3390.969159826914},"dragging":false,"style":{"width":459,"height":119},"resizing":false,"focusable":true,"selectable":true},{"width":228,"height":49,"id":"OIcmPSbdsuWapb6HZ4BEi","type":"button","position":{"x":466.1567530029688,"y":3445.1148172600238},"selected":true,"data":{"label":"AI & Data Scientist","href":"https://roadmap.sh/ai-data-scientist","color":"#FFf","backgroundColor":"#4136D6","style":{"fontSize":17},"borderColor":"#4136D6","oldId":"cmSSwPPiiHwYh9ct14N6A"},"zIndex":999,"dragging":false,"positionAbsolute":{"x":466.1567530029688,"y":3445.1148172600238},"style":{"width":228,"height":49},"focusable":true,"resizing":false,"selectable":true},{"width":20,"height":85,"id":"RLtk1C3gofHnLJ17x3o5b","type":"vertical","position":{"x":671.6429505186827,"y":3513.969159826914},"selected":true,"data":{"label":"vertical node","style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2B78E4"},"oldId":"ExXFPDHXtcOMcvZttzxvD"},"zIndex":999,"positionAbsolute":{"x":671.6429505186827,"y":3513.969159826914},"dragging":false,"focusable":true,"style":{"width":20,"height":85},"resizing":false,"selectable":true},{"width":199,"height":49,"id":"-sFboM4eFUMVq1tlPl-fV","type":"button","position":{"x":699.9869736111889,"y":3445.1148172600238},"selected":true,"data":{"label":"Prompt Engineering","href":"https://roadmap.sh/prompt-engineering","color":"#FFFFFf","backgroundColor":"#4136D6","style":{"fontSize":17},"borderColor":"#4136D6","oldId":"qXKNK_IsGS8-JgLK-Q9oU"},"zIndex":999,"dragging":false,"positionAbsolute":{"x":699.9869736111889,"y":3445.1148172600238},"style":{},"focusable":true,"resizing":false,"selectable":true},{"id":"NYge7PNtfI-y6QWefXJ4d","type":"topic","position":{"x":533.3795624782034,"y":3281.4007482223487},"selected":true,"data":{"label":"Development Tools","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"W7cKPt_UxcUgwp8J6hS4p"},"zIndex":999,"width":220,"height":49,"style":{"width":220,"height":49},"positionAbsolute":{"x":533.3795624782034,"y":3281.4007482223487},"dragging":false,"selectable":true,"focusable":true},{"id":"XcKeQfpTA5ITgdX51I4y-","type":"subtopic","position":{"x":423.1375395659161,"y":3135.6475050579174},"selected":true,"data":{"label":"AI Code Editors","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"}},"zIndex":999,"width":226,"height":49,"style":{"width":226,"height":49},"positionAbsolute":{"x":423.1375395659161,"y":3135.6475050579174},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"TifVhqFm1zXNssA8QR3SM","type":"subtopic","position":{"x":423.1375395659161,"y":3189.6475050579174},"selected":true,"data":{"label":"Code Completion Tools","style":{"fontSize":17,"justifyContent":"flex-start","textAlign":"center"},"oldId":"XcKeQfpTA5ITgdX51I4y-"},"zIndex":999,"width":226,"height":49,"style":{"width":226,"height":49},"positionAbsolute":{"x":423.1375395659161,"y":3189.6475050579174},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"8tcMfca2q2_6M-KmzmaT1","type":"button","position":{"x":72.27752658021029,"y":142.3328638669464},"selected":true,"data":{"label":"Scrimba - AI Engineer Path","href":"https://v2.scrimba.com/the-ai-engineer-path-c02v?via=roadmap","color":"#ffffff","backgroundColor":"#4136D6","style":{"fontSize":17}},"zIndex":999,"width":360,"height":49,"style":{"width":360,"height":49},"positionAbsolute":{"x":72.27752658021029,"y":142.3328638669464},"dragging":false,"resizing":false,"selectable":true,"focusable":true},{"id":"NxOYVBCLCLZ1wtGAGEn5W","type":"linksgroup","position":{"x":62.71396345748872,"y":225.90074822234897},"selected":true,"data":{"label":"Related Roadmaps","links":[{"id":"sk9lcGKC3DnpMWEn73SUX","label":"AI and Data Scientist Roadmap","href":"","url":"https://roadmap.sh/ai-data-scientist"},{"id":"quj9EG47r_g7lvwZXil4j","label":"Prompt Engineering","url":"https://roadmap.sh/prompt-engineering"},{"id":"7QOvFxjjApFOP5S9nkYf4","label":"Data Analyst Roadamp","url":"https://roadmap.sh/data-analyst"}]},"zIndex":999,"width":388,"height":160,"positionAbsolute":{"x":62.71396345748872,"y":225.90074822234897},"dragging":false,"style":{"width":388,"height":160},"resizing":false,"focusable":true,"selectable":true}],"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":"GN6SnI7RXIeW8JeD-qORW","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-_hYN0gEi9BL24nptEtXWUz2-GN6SnI7RXIeW8JeD-qORWy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"z2","target":"jSZ1LhPdhlkW-9QJhIvFs","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-_hYN0gEi9BL24nptEtXWUz2-jSZ1LhPdhlkW-9QJhIvFsy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"GN6SnI7RXIeW8JeD-qORW","sourceHandle":"w2","target":"K9EiuFgPBFgeRxY4wxAmb","targetHandle":"x2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-GN6SnI7RXIeW8JeD-qORWw2-K9EiuFgPBFgeRxY4wxAmbx2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"_hYN0gEi9BL24nptEtXWU","sourceHandle":"x2","target":"wt_3LocKHpvsnsQdDI7LK","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-_hYN0gEi9BL24nptEtXWUx2-wt_3LocKHpvsnsQdDI7LKw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"wt_3LocKHpvsnsQdDI7LK","sourceHandle":"x2","target":"d7fzv_ft12EopsQdmEsel","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-wt_3LocKHpvsnsQdDI7LKx2-d7fzv_ft12EopsQdmEselw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"d7fzv_ft12EopsQdmEsel","sourceHandle":"y2","target":"MXqbQGhNM3xpXlMC2ib_6","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-d7fzv_ft12EopsQdmEsely2-MXqbQGhNM3xpXlMC2ib_6z1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"d7fzv_ft12EopsQdmEsel","sourceHandle":"y2","target":"1Ga6DbOPc6Crz7ilsZMYy","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-d7fzv_ft12EopsQdmEsely2-1Ga6DbOPc6Crz7ilsZMYyz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"d7fzv_ft12EopsQdmEsel","sourceHandle":"y2","target":"5ShWZl1QUqPwO-NRGN85V","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-d7fzv_ft12EopsQdmEsely2-5ShWZl1QUqPwO-NRGN85Vz1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"d7fzv_ft12EopsQdmEsel","sourceHandle":"x2","target":"wr2_2ADvySOUZxzEo1Uw1","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-d7fzv_ft12EopsQdmEselx2-wr2_2ADvySOUZxzEo1Uw1w1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"wr2_2ADvySOUZxzEo1Uw1","sourceHandle":"x2","target":"zdeuA4GbdBl2DwKgiOA4G","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-wr2_2ADvySOUZxzEo1Uw1x2-zdeuA4GbdBl2DwKgiOA4Gw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"zdeuA4GbdBl2DwKgiOA4G","sourceHandle":"z2","target":"_bPTciEA1GT1JwfXim19z","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-zdeuA4GbdBl2DwKgiOA4Gz2-_bPTciEA1GT1JwfXim19zy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"zdeuA4GbdBl2DwKgiOA4G","sourceHandle":"z2","target":"9-5DYeOnKJq9XvEMWP45A","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-zdeuA4GbdBl2DwKgiOA4Gz2-9-5DYeOnKJq9XvEMWP45Ay1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"zdeuA4GbdBl2DwKgiOA4G","sourceHandle":"z2","target":"nyBgEHvUhwF-NANMwkRJW","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-zdeuA4GbdBl2DwKgiOA4Gz2-nyBgEHvUhwF-NANMwkRJWy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"zdeuA4GbdBl2DwKgiOA4G","sourceHandle":"z2","target":"nXsjZiJGgFyOO8b0J-E2V","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-zdeuA4GbdBl2DwKgiOA4Gz2-nXsjZiJGgFyOO8b0J-E2Vy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"zdeuA4GbdBl2DwKgiOA4G","sourceHandle":"x2","target":"8ndKHDJgL_gYwaXC7XMer","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-zdeuA4GbdBl2DwKgiOA4Gx2-a_3SabylVqzzOyw3tZN5fw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"8ndKHDJgL_gYwaXC7XMer","sourceHandle":"x2","target":"a_3SabylVqzzOyw3tZN5f","targetHandle":"w1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-8ndKHDJgL_gYwaXC7XMerx2-a_3SabylVqzzOyw3tZN5fw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"a_3SabylVqzzOyw3tZN5f","sourceHandle":"z2","target":"RBwGsq9DngUsl8PrrCbqx","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-a_3SabylVqzzOyw3tZN5fz2-RBwGsq9DngUsl8PrrCbqxy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"a_3SabylVqzzOyw3tZN5f","sourceHandle":"z2","target":"97eu-XxYUH9pYbD_KjAtA","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-a_3SabylVqzzOyw3tZN5fz2-97eu-XxYUH9pYbD_KjAtAy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"a_3SabylVqzzOyw3tZN5f","sourceHandle":"x2","target":"OZvk1d0XxXwJwbEUYqnFq","targetHandle":"w2","data":{"edgeStyle":"solid"},"id":"reactflow__edge-a_3SabylVqzzOyw3tZN5fx2-OZvk1d0XxXwJwbEUYqnFqw2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"OZvk1d0XxXwJwbEUYqnFq","sourceHandle":"x2","target":"--ig0Ume_BnXb9K2U7HJN","targetHandle":"w2","data":{"edgeStyle":"solid"},"id":"reactflow__edge-OZvk1d0XxXwJwbEUYqnFqx2-tt9u3oFlsjEMfPyojuqpcw2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"--ig0Ume_BnXb9K2U7HJN","sourceHandle":"x2","target":"4P2Sbyy2cVjOrXH75Hc2b","targetHandle":"w1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tt9u3oFlsjEMfPyojuqpcx2-4P2Sbyy2cVjOrXH75Hc2bw1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"--ig0Ume_BnXb9K2U7HJN","sourceHandle":"y2","target":"l6priWeJhbdUD5tJ7uHyG","targetHandle":"z2","data":{"edgeStyle":"solid"},"id":"reactflow__edge---ig0Ume_BnXb9K2U7HJNy2-tt9u3oFlsjEMfPyojuqpcz2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"l6priWeJhbdUD5tJ7uHyG","sourceHandle":"w2","target":"4GArjDYipit4SLqKZAWDf","targetHandle":"x2","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-tt9u3oFlsjEMfPyojuqpcw2-4GArjDYipit4SLqKZAWDfx2","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"lVhWhZGR558O-ljHobxIi","sourceHandle":"z2","target":"zK_H4vmJXmyLYu1gVfhYK","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-W7cKPt_UxcUgwp8J6hS4pz2-zK_H4vmJXmyLYu1gVfhYKy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"tt9u3oFlsjEMfPyojuqpc","sourceHandle":"z2","target":"lVhWhZGR558O-ljHobxIi","targetHandle":"y1","data":{"edgeStyle":"solid"},"id":"reactflow__edge-tt9u3oFlsjEMfPyojuqpcz2-W7cKPt_UxcUgwp8J6hS4py1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"AeHkNU-uJ_gBdo5-xdpEu","sourceHandle":"z2","target":"k8QYMT_d6EQWDqDgnPYsT","targetHandle":"y1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-W7cKPt_UxcUgwp8J6hS4pz2-k8QYMT_d6EQWDqDgnPYsTy1","selected":true,"selectable":true,"focusable":true},{"style":{"strokeDasharray":"0.8 8","strokeLinecap":"round","strokeWidth":3.5,"stroke":"#2b78e4"},"source":"W7cKPt_UxcUgwp8J6hS4p","sourceHandle":"y2","target":"sGR9qcro68KrzM8qWxcH8","targetHandle":"z1","data":{"edgeStyle":"dashed"},"id":"reactflow__edge-W7cKPt_UxcUgwp8J6hS4py2-sGR9qcro68KrzM8qWxcH8z1","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}]} \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/ai-engineer.md b/src/data/roadmaps/ai-engineer/ai-engineer.md new file mode 100644 index 000000000..7197b1928 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/ai-engineer.md @@ -0,0 +1,50 @@ +--- +jsonUrl: '/jsons/roadmaps/ai-engineer.json' +pdfUrl: '/pdfs/roadmaps/ai-engineer.pdf' +order: 4 +renderer: 'editor' +briefTitle: 'AI Engineer' +briefDescription: 'Step by step guide to becoming an AI Engineer in 2024' +title: 'AI Engineer Roadmap' +description: 'Step by step guide to becoming an AI Engineer in 2024' +hasTopics: true +isNew: true +dimensions: + width: 968 + height: 3200 +question: + title: 'What is an AI Engineer?' + description: | + An AI Engineer uses pre-trained models and existing AI tools to improve user experiences. They focus on applying AI in practical ways, without building models from scratch. This is different from AI Researchers and ML Engineers, who focus more on creating new models or developing AI theory. +schema: + headline: 'AI Engineer Roadmap' + description: 'Learn how to become an AI Engineer with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' + imageUrl: 'https://roadmap.sh/roadmaps/ai-engineer.png' + datePublished: '2024-10-03' + dateModified: '2024-10-03' +seo: + title: 'AI Engineer Roadmap' + description: 'Learn to become an AI Engineer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern backend development.' + keywords: + - 'ai engineer roadmap 2024' + - 'guide to becoming an ai engineer' + - 'ai engineer roadmap' + - 'ai engineer skills' + - 'become an ai engineer' + - 'ai engineer career path' + - 'skills for ai engineer' + - 'ai engineer quiz' + - 'ai engineer interview questions' +relatedRoadmaps: + - 'ai-data-scientist' + - 'prompt-engineering' + - 'data-analyst' + - 'python' +sitemap: + priority: 1 + changefreq: 'monthly' +tags: + - 'roadmap' + - 'main-sitemap' + - 'role-roadmap' +--- 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 new file mode 100644 index 000000000..dc31799d0 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/adding-end-user-ids-in-prompts@4Q5x2VCXedAWISBXUIyin.md @@ -0,0 +1,7 @@ +# Adding end-user IDs in prompts + +Sending end-user IDs in your requests can be a useful tool to help OpenAI monitor and detect abuse. This allows OpenAI to provide you with more actionable feedback in the event that they may detect any policy violations in applications. + +Visit the following resources to learn more: + +- [@official@OpenAI Documentation](https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/agents-usecases@778HsQzTuJ_3c9OSn5DmH.md b/src/data/roadmaps/ai-engineer/content/agents-usecases@778HsQzTuJ_3c9OSn5DmH.md new file mode 100644 index 000000000..9c459ee67 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/agents-usecases@778HsQzTuJ_3c9OSn5DmH.md @@ -0,0 +1,8 @@ +# Agents Usecases + +AI Agents allow you to automate complex workflows that involve multiple steps and decisions. + +Visit the following resources to learn more: + +- [@article@What are AI Agents?](https://aws.amazon.com/what-is/ai-agents/) +- [@video@What are AI Agents?](https://www.youtube.com/watch?v=F8NKVhkZZWI) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/ai-agents@9XCxilAQ7FRet7lHQr1gE.md b/src/data/roadmaps/ai-engineer/content/ai-agents@9XCxilAQ7FRet7lHQr1gE.md new file mode 100644 index 000000000..2de30bfb8 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ai-agents@9XCxilAQ7FRet7lHQr1gE.md @@ -0,0 +1,8 @@ +# AI Agents + +AI Agents are a type of LLM that can be used to automate complex workflows that involve multiple steps and decisions. + +Visit the following resources to learn more: + +- [@article@What are AI Agents?](https://aws.amazon.com/what-is/ai-agents/) +- [@video@What are AI Agents?](https://www.youtube.com/watch?v=F8NKVhkZZWI) \ No newline at end of file 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 new file mode 100644 index 000000000..2de30bfb8 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ai-agents@AeHkNU-uJ_gBdo5-xdpEu.md @@ -0,0 +1,8 @@ +# AI Agents + +AI Agents are a type of LLM that can be used to automate complex workflows that involve multiple steps and decisions. + +Visit the following resources to learn more: + +- [@article@What are AI Agents?](https://aws.amazon.com/what-is/ai-agents/) +- [@video@What are AI Agents?](https://www.youtube.com/watch?v=F8NKVhkZZWI) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/ai-code-editors@XcKeQfpTA5ITgdX51I4y-.md b/src/data/roadmaps/ai-engineer/content/ai-code-editors@XcKeQfpTA5ITgdX51I4y-.md new file mode 100644 index 000000000..4c7eacd08 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ai-code-editors@XcKeQfpTA5ITgdX51I4y-.md @@ -0,0 +1,8 @@ +# AI Code Editors + +AI code editors have the first-class support for AI in the editor. You can use AI to generate code, fix bugs, chat with your code, and more. + +Visit the following resources to learn more: + +- [@website@Cursor](https://cursor.com/) +- [@website@Zed AI](https://zed.dev/ai) diff --git a/src/data/roadmaps/ai-engineer/content/ai-engineer-vs-ml-engineer@jSZ1LhPdhlkW-9QJhIvFs.md b/src/data/roadmaps/ai-engineer/content/ai-engineer-vs-ml-engineer@jSZ1LhPdhlkW-9QJhIvFs.md new file mode 100644 index 000000000..214eb8050 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ai-engineer-vs-ml-engineer@jSZ1LhPdhlkW-9QJhIvFs.md @@ -0,0 +1,3 @@ +# AI Engineer vs ML Engineer + + AI Engineer differs from an AI Researcher or ML Engineer. AI Engineers focus on leveraging pre-trained models and existing AI technologies to enhance user experiences without the need to train models from scratch. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/ai-safety-and-ethics@8ndKHDJgL_gYwaXC7XMer.md b/src/data/roadmaps/ai-engineer/content/ai-safety-and-ethics@8ndKHDJgL_gYwaXC7XMer.md new file mode 100644 index 000000000..1fc79dd01 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ai-safety-and-ethics@8ndKHDJgL_gYwaXC7XMer.md @@ -0,0 +1,3 @@ +# AI Safety and Ethics + +Learn about the principles and guidelines for building safe and ethical AI systems. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/ai-vs-agi@5QdihE1lLpMc3DFrGy46M.md b/src/data/roadmaps/ai-engineer/content/ai-vs-agi@5QdihE1lLpMc3DFrGy46M.md new file mode 100644 index 000000000..be76d67e7 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ai-vs-agi@5QdihE1lLpMc3DFrGy46M.md @@ -0,0 +1,3 @@ +# AI vs AGI + +AI (Artificial Intelligence) refers to systems designed to perform specific tasks, like image recognition or language translation, often excelling in those narrow areas. In contrast, AGI (Artificial General Intelligence) would be a system capable of understanding, learning, and applying intelligence across a wide range of tasks, much like a human, and could adapt to new situations without specific programming. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/anomaly-detection@AglWJ7gb9rTT2rMkstxtk.md b/src/data/roadmaps/ai-engineer/content/anomaly-detection@AglWJ7gb9rTT2rMkstxtk.md new file mode 100644 index 000000000..a45d48801 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/anomaly-detection@AglWJ7gb9rTT2rMkstxtk.md @@ -0,0 +1,3 @@ +# Anomaly Detection + +Embeddings transform complex data (like text or behavior) into numerical vectors, capturing relationships between data points. These vectors are stored in a vector database, which allows for efficient similarity searches. Anomalies can be detected by measuring the distance between a data point's vector and its nearest neighbors—if a point is significantly distant, it's likely anomalous. This approach is scalable, adaptable to various data types, and effective for tasks like fraud detection, predictive maintenance, and cybersecurity. \ 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 new file mode 100644 index 000000000..9cbfaf55f --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/anthropics-claude@hy6EyKiNxk1x84J63dhez.md @@ -0,0 +1,7 @@ +# Anthropic's Claude + +Claude is a family of large language models developed by Anthropic. Claude 3.5 Sonnet is the latest model (at the time of this writing) in the series, known for its advanced reasoning and multi-modality capabilities. + +Visit the following resources to learn more: + +- [@official@Clause Website](https://claude.ai/) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/audio-processing@mxQYB820447DC6kogyZIL.md b/src/data/roadmaps/ai-engineer/content/audio-processing@mxQYB820447DC6kogyZIL.md new file mode 100644 index 000000000..b44a939a0 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/audio-processing@mxQYB820447DC6kogyZIL.md @@ -0,0 +1,3 @@ +# Audio Processing + +Using Multimodal AI, audio data can be processed with other types of data, such as text, images, or video, to enhance understanding and analysis. For example, it can synchronize audio with corresponding visual inputs, like lip movements in video, to improve speech recognition or emotion detection. This fusion of modalities enables more accurate transcription, better sentiment analysis, and enriched context understanding in applications such as virtual assistants, multimedia content analysis, and real-time communication systems. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/aws-sagemaker@OkYO-aSPiuVYuLXHswBCn.md b/src/data/roadmaps/ai-engineer/content/aws-sagemaker@OkYO-aSPiuVYuLXHswBCn.md new file mode 100644 index 000000000..d54ab4a97 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/aws-sagemaker@OkYO-aSPiuVYuLXHswBCn.md @@ -0,0 +1,7 @@ +# AWS Sagemaker + +AWS Sagemaker is a fully managed platform that provides every developer and data scientist with the ability to build, train, and deploy machine learning (ML) models quickly. Sagemaker takes care of the underlying infrastructure, allowing developers to focus on building and improving their models. + +Visit the following resources to learn more: + +- [@official@AWS Website](https://aws.amazon.com/sagemaker/) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/azure-ai@3PQVZbcr4neNMRr6CuNzS.md b/src/data/roadmaps/ai-engineer/content/azure-ai@3PQVZbcr4neNMRr6CuNzS.md new file mode 100644 index 000000000..23e797027 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/azure-ai@3PQVZbcr4neNMRr6CuNzS.md @@ -0,0 +1,7 @@ +# Azure AI + +Azure AI is a comprehensive set of AI services and tools provided by Microsoft. It includes a range of capabilities such as natural language processing, computer vision, speech recognition, and more. Azure AI is designed to help developers and organizations build, deploy, and scale AI solutions quickly and easily. + +Visit the following resources to learn more: + +- [@official@Azure Website](https://azure.microsoft.com/en-us/products/ai-services/) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/benefits-of-pre-trained-models@1Ga6DbOPc6Crz7ilsZMYy.md b/src/data/roadmaps/ai-engineer/content/benefits-of-pre-trained-models@1Ga6DbOPc6Crz7ilsZMYy.md new file mode 100644 index 000000000..4a3d6dfb1 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/benefits-of-pre-trained-models@1Ga6DbOPc6Crz7ilsZMYy.md @@ -0,0 +1,7 @@ +# Benefits of Pre-trained Models + +LLM models are not only difficult to train, but they are also expensive. Pre-trained models are a cost-effective solution for developers and organizations looking to leverage the power of AI without the need to train models from scratch. + +Visit the following resources to learn more: + +- [@article@Why you should use Pre-trained Models](https://cohere.com/blog/pre-trained-vs-in-house-nlp-models) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/bias-and-fareness@lhIU0ulpvDAn1Xc3ooYz_.md b/src/data/roadmaps/ai-engineer/content/bias-and-fareness@lhIU0ulpvDAn1Xc3ooYz_.md new file mode 100644 index 000000000..e0cd2c51f --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/bias-and-fareness@lhIU0ulpvDAn1Xc3ooYz_.md @@ -0,0 +1,3 @@ +# Bias and Fareness + +Bias and fairness in AI arise when models produce skewed or unequal outcomes for different groups, often reflecting imbalances in the training data. This can lead to discriminatory effects in critical areas like hiring, lending, and law enforcement. Addressing these concerns involves ensuring diverse and representative data, implementing fairness metrics, and ongoing monitoring to prevent biased outcomes. Techniques like debiasing algorithms and transparency in model development help mitigate bias and promote fairness in AI systems. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/capabilities--context-length@vvpYkmycH0_W030E-L12f.md b/src/data/roadmaps/ai-engineer/content/capabilities--context-length@vvpYkmycH0_W030E-L12f.md new file mode 100644 index 000000000..c55a8e594 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/capabilities--context-length@vvpYkmycH0_W030E-L12f.md @@ -0,0 +1,7 @@ +# Capabilities / Context Length + +OpenAI's capabilities include processing complex tasks like language understanding, code generation, and problem-solving. However, context length limits how much information the model can retain and reference during a session, affecting long conversations or documents. Advances aim to increase this context window for more coherent and detailed outputs over extended interactions. + +Visit the following resources to learn more: + +- [@official@OpenAI Website](https://platform.openai.com/docs/guides/fine-tuning/token-limits) diff --git a/src/data/roadmaps/ai-engineer/content/chat-completions-api@_bPTciEA1GT1JwfXim19z.md b/src/data/roadmaps/ai-engineer/content/chat-completions-api@_bPTciEA1GT1JwfXim19z.md new file mode 100644 index 000000000..0c0041ee2 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/chat-completions-api@_bPTciEA1GT1JwfXim19z.md @@ -0,0 +1,7 @@ +# Chat Completions API + +The Chat Completions API allows developers to create conversational agents by sending user inputs (prompts) and receiving model-generated responses. It supports multiple-turn dialogues, maintaining context across exchanges to deliver relevant responses. This API is often used for chatbots, customer support, and interactive applications where maintaining conversation flow is essential. + +Visit the following resources to learn more: + +- [@official@OpenAI Website](https://platform.openai.com/docs/api-reference/chat/completions) diff --git a/src/data/roadmaps/ai-engineer/content/chroma@dSd2C9lNl-ymmCRT9_ZC3.md b/src/data/roadmaps/ai-engineer/content/chroma@dSd2C9lNl-ymmCRT9_ZC3.md new file mode 100644 index 000000000..9a0d28be6 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/chroma@dSd2C9lNl-ymmCRT9_ZC3.md @@ -0,0 +1,7 @@ +# Chroma + +Chroma is a vector database designed to efficiently store, index, and query high-dimensional embeddings. It’s optimized for AI applications like semantic search, recommendation systems, and anomaly detection by allowing fast retrieval of similar vectors based on distance metrics (e.g., cosine similarity). Chroma enables scalable and real-time processing, making it a popular choice for projects involving embeddings from text, images, or other data types. + +Visit the following resources to learn more: + +- [@official@Chroma Website](https://docs.trychroma.com/) diff --git a/src/data/roadmaps/ai-engineer/content/chunking@mX987wiZF7p3V_gExrPeX.md b/src/data/roadmaps/ai-engineer/content/chunking@mX987wiZF7p3V_gExrPeX.md new file mode 100644 index 000000000..a20807cbd --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/chunking@mX987wiZF7p3V_gExrPeX.md @@ -0,0 +1,3 @@ +# Chunking + +In Retrieval-Augmented Generation (RAG), **chunking** refers to breaking large documents or data into smaller, manageable pieces (chunks) to improve retrieval and generation efficiency. This process helps the system retrieve relevant information more accurately by indexing these chunks in a vector database. During a query, the model retrieves relevant chunks instead of entire documents, which enhances the precision of the generated responses and allows better handling of long-form content within the context length limits. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/code-completion-tools@TifVhqFm1zXNssA8QR3SM.md b/src/data/roadmaps/ai-engineer/content/code-completion-tools@TifVhqFm1zXNssA8QR3SM.md new file mode 100644 index 000000000..5cf8b80ca --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/code-completion-tools@TifVhqFm1zXNssA8QR3SM.md @@ -0,0 +1,10 @@ +# Code Completion Tools + +AI Code Completion Tools are software tools that use AI models to assist with code generation and editing. These tools help developers write code more quickly and efficiently by providing suggestions, completing code snippets, and suggesting improvements. AI Code Completion Tools can also be used to generate documentation, comments, and other code-related content. + +Visit the following resources to learn more: + +- [@website@GitHub Copilot](https://copilot.github.com/) +- [@website@Codeium](https://codeium.com/) +- [@website@Supermaven](https://supermaven.com/) +- [@website@TabNine](https://www.tabnine.com/) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/cohere@a7qsvoauFe5u953I699ps.md b/src/data/roadmaps/ai-engineer/content/cohere@a7qsvoauFe5u953I699ps.md new file mode 100644 index 000000000..379842cfa --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/cohere@a7qsvoauFe5u953I699ps.md @@ -0,0 +1,7 @@ +# Cohere + +Cohere is an AI platform that provides natural language processing (NLP) models and tools, enabling developers to integrate powerful language understanding capabilities into their applications. It offers features like text generation, semantic search, classification, and embeddings. Cohere focuses on scalability and ease of use, making it popular for tasks such as content creation, customer support automation, and building search engines with advanced semantic understanding. It also provides a user-friendly API for custom NLP applications. + +Visit the following resources to learn more: + +- [@website@Cohere](https://cohere.com/) diff --git a/src/data/roadmaps/ai-engineer/content/conducting-adversarial-testing@Pt-AJmSJrOxKvolb5_HEv.md b/src/data/roadmaps/ai-engineer/content/conducting-adversarial-testing@Pt-AJmSJrOxKvolb5_HEv.md new file mode 100644 index 000000000..fdf79f0ae --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/conducting-adversarial-testing@Pt-AJmSJrOxKvolb5_HEv.md @@ -0,0 +1,3 @@ +# Conducting Adversarial Testing + +Adversarial testing involves creating malicious inputs to test the robustness of AI models. This includes testing for prompt injection, evasion, and other adversarial attacks. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/constraining-outputs-and-inputs@ONLDyczNacGVZGojYyJrU.md b/src/data/roadmaps/ai-engineer/content/constraining-outputs-and-inputs@ONLDyczNacGVZGojYyJrU.md new file mode 100644 index 000000000..c1dc13b47 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/constraining-outputs-and-inputs@ONLDyczNacGVZGojYyJrU.md @@ -0,0 +1,3 @@ +# Constraining Outputs and Inputs + +Constraining outputs and inputs is important for controlling the behavior of AI models. This includes techniques like output filtering, input validation, and rate limiting. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/cut-off-dates--knowledge@LbB2PeytxRSuU07Bk0KlJ.md b/src/data/roadmaps/ai-engineer/content/cut-off-dates--knowledge@LbB2PeytxRSuU07Bk0KlJ.md new file mode 100644 index 000000000..146581658 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/cut-off-dates--knowledge@LbB2PeytxRSuU07Bk0KlJ.md @@ -0,0 +1,3 @@ +# Cut-off Dates / Knowledge + +OpenAI models have a knowledge cutoff date, meaning they only have access to information available up until a specific time. For example, my knowledge is up to date until September 2023. As a result, I may not be aware of recent developments, events, or newly released technology. Additionally, these models don’t have real-time internet access, so they can't retrieve or update information beyond their training data. This can limit the ability to provide the latest details or react to rapidly changing topics. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/dall-e-api@LKFwwjtcawJ4Z12X102Cb.md b/src/data/roadmaps/ai-engineer/content/dall-e-api@LKFwwjtcawJ4Z12X102Cb.md new file mode 100644 index 000000000..f1a7ab9d2 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/dall-e-api@LKFwwjtcawJ4Z12X102Cb.md @@ -0,0 +1,3 @@ +# DALL-E API + +The DALL-E API allows developers to integrate OpenAI's image generation model into their applications. Using text-based prompts, the API generates unique images that match the descriptions provided by users. This makes it useful for tasks like creative design, marketing, product prototyping, and content creation. The API is highly customizable, enabling developers to adjust parameters such as image size and style. DALL-E excels at creating visually rich content from textual descriptions, expanding the possibilities for AI-driven creative workflows. \ 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 new file mode 100644 index 000000000..d64262b1a --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/data-classification@06Xta-OqSci05nV2QMFdF.md @@ -0,0 +1,3 @@ +# Data Classification + +Embeddings are used in data classification by converting data (like text or images) into numerical vectors that capture underlying patterns and relationships. These vector representations make it easier for machine learning models to distinguish between different classes based on the similarity or distance between vectors in high-dimensional space. By training a classifier on these embeddings, tasks like sentiment analysis, document categorization, and image classification can be performed more accurately and efficiently. Embeddings simplify complex data and enhance classification by highlighting key features relevant to each class. \ 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 new file mode 100644 index 000000000..d16a6f9c0 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/development-tools@NYge7PNtfI-y6QWefXJ4d.md @@ -0,0 +1,3 @@ +# Development Tools + +A lot of developer related tools have popped up since the AI revolution. It's being used in the coding editors, in the terminal, in the CI/CD pipelines, and more. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/embedding@grTcbzT7jKk_sIUwOTZTD.md b/src/data/roadmaps/ai-engineer/content/embedding@grTcbzT7jKk_sIUwOTZTD.md new file mode 100644 index 000000000..b4c76cfbd --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/embedding@grTcbzT7jKk_sIUwOTZTD.md @@ -0,0 +1,3 @@ +# Embedding + +Embedding refers to the conversion or mapping of discrete objects such as words, phrases, or even entire sentences into vectors of real numbers. It's an essential part of data preprocessing where high-dimensional data is transformed into a lower-dimensional equivalent. This dimensional reduction helps to preserve the semantic relationships between objects. In AI engineering, embedding techniques are often used in language-orientated tasks like sentiment analysis, text classification, and Natural Language Processing (NLP) to provide an understanding of the vast linguistic inputs AI models receive. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/embeddings@XyEp6jnBSpCxMGwALnYfT.md b/src/data/roadmaps/ai-engineer/content/embeddings@XyEp6jnBSpCxMGwALnYfT.md new file mode 100644 index 000000000..b4c76cfbd --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/embeddings@XyEp6jnBSpCxMGwALnYfT.md @@ -0,0 +1,3 @@ +# Embedding + +Embedding refers to the conversion or mapping of discrete objects such as words, phrases, or even entire sentences into vectors of real numbers. It's an essential part of data preprocessing where high-dimensional data is transformed into a lower-dimensional equivalent. This dimensional reduction helps to preserve the semantic relationships between objects. In AI engineering, embedding techniques are often used in language-orientated tasks like sentiment analysis, text classification, and Natural Language Processing (NLP) to provide an understanding of the vast linguistic inputs AI models receive. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/faiss@JurLbOO1Z8r6C3yUqRNwf.md b/src/data/roadmaps/ai-engineer/content/faiss@JurLbOO1Z8r6C3yUqRNwf.md new file mode 100644 index 000000000..f93d6a267 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/faiss@JurLbOO1Z8r6C3yUqRNwf.md @@ -0,0 +1,3 @@ +# FAISS + +FAISS stands for Facebook AI Similarity Search, it is a database management library developed by Facebook's AI team. Primarily used for efficient similarity search and clustering of dense vectors, it allows users to search through billions of feature vectors swiftly and efficiently. As an AI engineer, learning FAISS is beneficial because these vectors represent objects that are typically used in machine learning or AI applications. For instance, in an image recognition task, a dense vector might be a list of pixels from an image, and FAISS allows a quick search of similar images in a large database. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/fine-tuning@15XOFdVp0IC-kLYPXUJWh.md b/src/data/roadmaps/ai-engineer/content/fine-tuning@15XOFdVp0IC-kLYPXUJWh.md new file mode 100644 index 000000000..0d84b71ea --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/fine-tuning@15XOFdVp0IC-kLYPXUJWh.md @@ -0,0 +1,7 @@ +# Fine-tuning + +OpenAI API allows you to fine-tune and adapt pre-trained models to specific tasks or datasets, improving performance on domain-specific problems. By providing custom training data, the model learns from examples relevant to the intended application, such as specialized customer support, unique content generation, or industry-specific tasks. + +Visit the following resources to learn more: + +- [@official@OpenAI Docs](https://platform.openai.com/docs/guides/fine-tuning) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/generation@2jJnS9vRYhaS69d6OxrMh.md b/src/data/roadmaps/ai-engineer/content/generation@2jJnS9vRYhaS69d6OxrMh.md new file mode 100644 index 000000000..02dc22a45 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/generation@2jJnS9vRYhaS69d6OxrMh.md @@ -0,0 +1,3 @@ +# Generation + +In this step of implementing RAG, we use the found chunks to generate a response to the user's query using an LLM. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/googles-gemini@oe8E6ZIQWuYvHVbYJHUc1.md b/src/data/roadmaps/ai-engineer/content/googles-gemini@oe8E6ZIQWuYvHVbYJHUc1.md new file mode 100644 index 000000000..e3ad2defd --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/googles-gemini@oe8E6ZIQWuYvHVbYJHUc1.md @@ -0,0 +1,3 @@ +# Google's Gemini + +Gemini, formerly known as Bard, is a generative artificial intelligence chatbot developed by Google. Based on the large language model of the same name, it was launched in 2023 after being developed as a direct response to the rise of OpenAI's ChatGPT \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/hugging-face-hub@YLOdOvLXa5Fa7_mmuvKEi.md b/src/data/roadmaps/ai-engineer/content/hugging-face-hub@YLOdOvLXa5Fa7_mmuvKEi.md new file mode 100644 index 000000000..4abd4aec0 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/hugging-face-hub@YLOdOvLXa5Fa7_mmuvKEi.md @@ -0,0 +1,7 @@ +# Hugging Face Hub + +Hugging Face Hub is a platform where you can share, access and collaborate upon a wide array of machine learning models, primarily focused on Natural Language Processing (NLP) tasks. It is a central repository that facilitates storage and sharing of models, reducing the time and overhead usually associated with these tasks. For an AI Engineer, leveraging Hugging Face Hub can accelerate model development and deployment, effectively allowing them to work on structuring efficient AI solutions instead of worrying about model storage and accessibility issues. + +Visit the following resources to learn more: + +- [@official@Hugging Face](https://huggingface.co/) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/hugging-face-models@8XjkRqHOdyH-DbXHYiBEt.md b/src/data/roadmaps/ai-engineer/content/hugging-face-models@8XjkRqHOdyH-DbXHYiBEt.md new file mode 100644 index 000000000..b02989a7b --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/hugging-face-models@8XjkRqHOdyH-DbXHYiBEt.md @@ -0,0 +1,7 @@ +# Hugging Face Models + +Hugging Face has a wide range of pre-trained models that can be used for a variety of tasks, including language understanding and generation, translation, chatbots, and more. Anyone can create an account and use their models, and the models are organized by task, provider, and other criteria. + +Visit the following resources to learn more: + +- [@official@Hugging Face](https://huggingface.co/models) diff --git a/src/data/roadmaps/ai-engineer/content/hugging-face-models@EIDbwbdolR_qsNKVDla6V.md b/src/data/roadmaps/ai-engineer/content/hugging-face-models@EIDbwbdolR_qsNKVDla6V.md new file mode 100644 index 000000000..b02989a7b --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/hugging-face-models@EIDbwbdolR_qsNKVDla6V.md @@ -0,0 +1,7 @@ +# Hugging Face Models + +Hugging Face has a wide range of pre-trained models that can be used for a variety of tasks, including language understanding and generation, translation, chatbots, and more. Anyone can create an account and use their models, and the models are organized by task, provider, and other criteria. + +Visit the following resources to learn more: + +- [@official@Hugging Face](https://huggingface.co/models) diff --git a/src/data/roadmaps/ai-engineer/content/hugging-face-tasks@YKIPOiSj_FNtg0h8uaSMq.md b/src/data/roadmaps/ai-engineer/content/hugging-face-tasks@YKIPOiSj_FNtg0h8uaSMq.md new file mode 100644 index 000000000..1f52dc3f6 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/hugging-face-tasks@YKIPOiSj_FNtg0h8uaSMq.md @@ -0,0 +1,7 @@ +# Hugging Face Tasks + +Hugging face has a section where they have a list of tasks with the popular models for that task. + +Visit the following resources to learn more: + +- [@official@Hugging Face](https://huggingface.co/tasks) diff --git a/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md b/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md new file mode 100644 index 000000000..2c79bdc12 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/hugging-face@v99C5Bml2a6148LCJ9gy9.md @@ -0,0 +1,7 @@ +# Hugging Face + +Hugging Face is the platform where the machine learning community collaborates on models, datasets, and applications. + +Visit the following resources to learn more: + +- [@official@Hugging Face](https://huggingface.co/) diff --git a/src/data/roadmaps/ai-engineer/content/image-generation@49BWxYVFpIgZCCqsikH7l.md b/src/data/roadmaps/ai-engineer/content/image-generation@49BWxYVFpIgZCCqsikH7l.md new file mode 100644 index 000000000..d063c9e28 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/image-generation@49BWxYVFpIgZCCqsikH7l.md @@ -0,0 +1,3 @@ +# Image Generation + +Image Generation often refers to the process of creating new images from an existing dataset or completely from scratch. For an AI Engineer, understanding image generation is crucial as it is one of the key aspects of machine learning and deep learning related to computer vision. It often involves techniques like convolutional neural networks (CNN), generative adversarial networks (GANs), and autoencoders. These technologies are used to generate artificial images that closely resemble original input, and can be applied in various fields such as healthcare, entertainment, security and more. \ 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 new file mode 100644 index 000000000..d69b6fe79 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/image-understanding@fzVq4hGoa2gdbIzoyY1Zp.md @@ -0,0 +1,3 @@ +# Image Understanding + +Image Understanding involves extracting meaningful information from images, such as photos or videos. This process includes tasks like image recognition, where an AI system is trained to recognize certain objects within an image, and image segmentation, where an image is divided into multiple regions according to some criteria. For an AI engineer, mastering techniques in Image Understanding is crucial because it forms the basis for more complex tasks such as object detection, facial recognition, or even whole scene understanding, all of which play significant roles in various AI applications. As AI technologies continue evolving, the ability to analyze and interpret visual data becomes increasingly important in fields ranging from healthcare to autonomous vehicles. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/impact-on-product-development@qJVgKe9uBvXc-YPfvX_Y7.md b/src/data/roadmaps/ai-engineer/content/impact-on-product-development@qJVgKe9uBvXc-YPfvX_Y7.md new file mode 100644 index 000000000..63aea3f4c --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/impact-on-product-development@qJVgKe9uBvXc-YPfvX_Y7.md @@ -0,0 +1,3 @@ +# Impact on Product Development + +Incorporating Artificial Intelligence (AI) can transform the process of creating, testing, and delivering products. This could range from utilizing AI for enhanced data analysis to inform product design, use of AI-powered automation in production processes, or even AI as a core feature of the product itself. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/indexing-embeddings@5TQnO9B4_LTHwqjI7iHB1.md b/src/data/roadmaps/ai-engineer/content/indexing-embeddings@5TQnO9B4_LTHwqjI7iHB1.md new file mode 100644 index 000000000..c89f0188f --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/indexing-embeddings@5TQnO9B4_LTHwqjI7iHB1.md @@ -0,0 +1,3 @@ +# Indexing Embeddings + +This step involves converting data (such as text, images, or other content) into numerical vectors (embeddings) using a pre-trained model. These embeddings capture the semantic relationships between data points. Once generated, the embeddings are stored in a vector database, which organizes them in a way that enables efficient retrieval based on similarity. This indexed structure allows fast querying and comparison of vectors, facilitating tasks like semantic search, recommendation systems, and anomaly detection. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/inference-sdk@3kRTzlLNBnXdTsAEXVu_M.md b/src/data/roadmaps/ai-engineer/content/inference-sdk@3kRTzlLNBnXdTsAEXVu_M.md new file mode 100644 index 000000000..43996f6fe --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/inference-sdk@3kRTzlLNBnXdTsAEXVu_M.md @@ -0,0 +1,8 @@ +# Inference SDK + +Inference is the process of using a trained model to make predictions on new data. As this process can be compute-intensive, running on a dedicated server can be an interesting option. The huggingface_hub library provides an easy way to call a service that runs inference for hosted models. There are several services you can connect to: + +Visit the following resources to learn more: + +- [@official@Hugging Face Inference Client](https://huggingface.co/docs/huggingface_hub/en/package_reference/inference_client) +- [@official@Hugging Face Inference API](https://huggingface.co/docs/api-inference/en/index) diff --git a/src/data/roadmaps/ai-engineer/content/inference@KWjD4xEPhOOYS51dvRLd2.md b/src/data/roadmaps/ai-engineer/content/inference@KWjD4xEPhOOYS51dvRLd2.md new file mode 100644 index 000000000..93c2531e2 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/inference@KWjD4xEPhOOYS51dvRLd2.md @@ -0,0 +1,3 @@ +# Inference + +Inference involves using models developed through machine learning to make predictions or decisions. As part of the AI Engineer Roadmap, an AI engineer might create an inference engine, which uses rules and logic to infer new information based on existing data. Often used in natural language processing, image recognition, and similar tasks, inference can help AI systems provide useful outputs based on their training. Working with inference involves understanding different models, how they work, and how to apply them to new data to achieve reliable results. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/introduction@_hYN0gEi9BL24nptEtXWU.md b/src/data/roadmaps/ai-engineer/content/introduction@_hYN0gEi9BL24nptEtXWU.md new file mode 100644 index 000000000..2af471f13 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/introduction@_hYN0gEi9BL24nptEtXWU.md @@ -0,0 +1,3 @@ +# Introduction + +An AI Engineer uses pre-trained models and existing AI tools to improve user experiences. They focus on applying AI in practical ways, without building models from scratch. This is different from AI Researchers and ML Engineers, who focus more on creating new models or developing AI theory. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/know-your-customers--usecases@t1SObMWkDZ1cKqNNlcd9L.md b/src/data/roadmaps/ai-engineer/content/know-your-customers--usecases@t1SObMWkDZ1cKqNNlcd9L.md new file mode 100644 index 000000000..614454c5c --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/know-your-customers--usecases@t1SObMWkDZ1cKqNNlcd9L.md @@ -0,0 +1,3 @@ +# Know your Customers / Usecases + +Understanding your target customers and use-cases helps making informed decisions during the development to ensure that the final AI solution appropriately meets the relevant needs of the users. You can use this knowledge to choose the right tools, frameworks, technologies, design the right architecture, and even prevent abuse. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/lancedb@rjaCNT3Li45kwu2gXckke.md b/src/data/roadmaps/ai-engineer/content/lancedb@rjaCNT3Li45kwu2gXckke.md new file mode 100644 index 000000000..12b2ced59 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/lancedb@rjaCNT3Li45kwu2gXckke.md @@ -0,0 +1,3 @@ +# LanceDB + +LanceDB is a relatively new, multithreaded, high-speed data warehouse optimized for AI and machine learning data processing. It's designed to handle massive amounts of data, enables quick storage and retrieval, and supports lossless data compression. For an AI engineer, learning LanceDB could be beneficial as it can be integrated with machine learning frameworks for collecting, processing and analyzing large datasets. These functionalities can help to streamline the process for AI model training, which requires extensive data testing and validation. \ 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 new file mode 100644 index 000000000..56194f0eb --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/langchain-for-multimodal-apps@j9zD3pHysB1CBhLfLjhpD.md @@ -0,0 +1,3 @@ +# LangChain for Multimodal Apps + +LangChain is a software framework that helps facilitate the integration of large language models into applications. As a language model integration framework, LangChain's use-cases largely overlap with those of language models in general, including document analysis and summarization, chatbots, and code analysis. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/langchain@ebXXEhNRROjbbof-Gym4p.md b/src/data/roadmaps/ai-engineer/content/langchain@ebXXEhNRROjbbof-Gym4p.md new file mode 100644 index 000000000..1b3b96f1a --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/langchain@ebXXEhNRROjbbof-Gym4p.md @@ -0,0 +1,3 @@ +# Langchain + +LangChain is a software framework that helps facilitate the integration of large language models into applications. As a language model integration framework, LangChain's use-cases largely overlap with those of language models in general, including document analysis and summarization, chatbots, and code analysis. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/limitations-and-considerations@MXqbQGhNM3xpXlMC2ib_6.md b/src/data/roadmaps/ai-engineer/content/limitations-and-considerations@MXqbQGhNM3xpXlMC2ib_6.md new file mode 100644 index 000000000..67892b69b --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/limitations-and-considerations@MXqbQGhNM3xpXlMC2ib_6.md @@ -0,0 +1,3 @@ +# Limitations and Considerations under Pre-trained Models + +Pre-trained Models are AI models that are previously trained on a large benchmark dataset and provide a starting point for AI developers. They help in saving training time and computational resources. However, they also come with certain limitations and considerations. These models can sometimes fail to generalize well to tasks outside of their original context due to issues like dataset bias or overfitting. Furthermore, using them without understanding their internal working can lead to problematic consequences. Finally, transfer learning, which is the mechanism to deploy these pre-trained models, might not always be the optimum solution for every AI project. Thus, an AI Engineer must be aware of these factors while working with pre-trained models. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/llama-index@d0ontCII8KI8wfP-8Y45R.md b/src/data/roadmaps/ai-engineer/content/llama-index@d0ontCII8KI8wfP-8Y45R.md new file mode 100644 index 000000000..1cfdb1aaa --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/llama-index@d0ontCII8KI8wfP-8Y45R.md @@ -0,0 +1,7 @@ +# Llama Index + +LlamaIndex is a simple, flexible data framework for connecting custom data sources to large language models. + +Visit the following resources to learn more: + +- [@official@LlamaIndex Official Website](https://llamaindex.ai/) diff --git a/src/data/roadmaps/ai-engineer/content/llamaindex-for-multimodal-apps@akQTCKuPRRelj2GORqvsh.md b/src/data/roadmaps/ai-engineer/content/llamaindex-for-multimodal-apps@akQTCKuPRRelj2GORqvsh.md new file mode 100644 index 000000000..1cfdb1aaa --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/llamaindex-for-multimodal-apps@akQTCKuPRRelj2GORqvsh.md @@ -0,0 +1,7 @@ +# Llama Index + +LlamaIndex is a simple, flexible data framework for connecting custom data sources to large language models. + +Visit the following resources to learn more: + +- [@official@LlamaIndex Official Website](https://llamaindex.ai/) diff --git a/src/data/roadmaps/ai-engineer/content/llms@wf2BSyUekr1S1q6l8kyq6.md b/src/data/roadmaps/ai-engineer/content/llms@wf2BSyUekr1S1q6l8kyq6.md new file mode 100644 index 000000000..4a1f61e48 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/llms@wf2BSyUekr1S1q6l8kyq6.md @@ -0,0 +1,3 @@ +# LLMs + +LLM or Large Language Models are AI models that are trained on a large amount of text data to understand and generate human language. They are the core of applications like ChatGPT, and are used for a variety of tasks, including language translation, question answering, and more. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/manual-implementation@6xaRB34_g0HGt-y1dGYXR.md b/src/data/roadmaps/ai-engineer/content/manual-implementation@6xaRB34_g0HGt-y1dGYXR.md new file mode 100644 index 000000000..fd13caabe --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/manual-implementation@6xaRB34_g0HGt-y1dGYXR.md @@ -0,0 +1,3 @@ +# Manual Implementation + +You can build the AI agents manually by coding the logic from scratch without using any frameworks or libraries. For example, you can use the OpenAI API and write the looping logic yourself to keep the agent running until it has the answer. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/maximum-tokens@qzvp6YxWDiGakA2mtspfh.md b/src/data/roadmaps/ai-engineer/content/maximum-tokens@qzvp6YxWDiGakA2mtspfh.md new file mode 100644 index 000000000..0981b355a --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/maximum-tokens@qzvp6YxWDiGakA2mtspfh.md @@ -0,0 +1,9 @@ +# Maximum Tokens + +Number of Maximum tokens in OpenAI API depends on the model you are using. + +For example, the `gpt-4o` model has a maximum of 128,000 tokens. + +Visit the following resources to learn more: + +- [@official@OpenAI API Documentation](https://platform.openai.com/docs/api-reference/completions/create) 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 new file mode 100644 index 000000000..8a7189245 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/mistral-ai@n-Ud2dXkqIzK37jlKItN4.md @@ -0,0 +1,3 @@ +# Mistral AI + +Mistral AI is a French startup founded in 2023, specializing in open-source large language models (LLMs). Created by former Meta and Google DeepMind researchers, it focuses on efficient, customizable AI solutions that promote transparency. Its flagship models, Mistral Large and Mixtral, offer state-of-the-art performance with lower resource requirements, gaining significant attention in the AI field. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/models-on-hugging-face@dLEg4IA3F5jgc44Bst9if.md b/src/data/roadmaps/ai-engineer/content/models-on-hugging-face@dLEg4IA3F5jgc44Bst9if.md new file mode 100644 index 000000000..b02989a7b --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/models-on-hugging-face@dLEg4IA3F5jgc44Bst9if.md @@ -0,0 +1,7 @@ +# Hugging Face Models + +Hugging Face has a wide range of pre-trained models that can be used for a variety of tasks, including language understanding and generation, translation, chatbots, and more. Anyone can create an account and use their models, and the models are organized by task, provider, and other criteria. + +Visit the following resources to learn more: + +- [@official@Hugging Face](https://huggingface.co/models) diff --git a/src/data/roadmaps/ai-engineer/content/mongodb-atlas@j6bkm0VUgLkHdMDDJFiMC.md b/src/data/roadmaps/ai-engineer/content/mongodb-atlas@j6bkm0VUgLkHdMDDJFiMC.md new file mode 100644 index 000000000..7293b6d34 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/mongodb-atlas@j6bkm0VUgLkHdMDDJFiMC.md @@ -0,0 +1,7 @@ +# MongoDB Atlas + +MongoDB Atlas is a fully managed cloud-based NoSQL database service by MongoDB. It simplifies database deployment and management across platforms like AWS, Azure, and Google Cloud. Using a flexible document model, Atlas automates tasks such as scaling, backups, and security, allowing developers to focus on building applications. With features like real-time analytics and global clusters, it offers a powerful solution for scalable and resilient app development. + +Visit the following resources to learn more: + +- [@official@MongoDB Atlas Vector Search](https://www.mongodb.com/products/platform/atlas-vector-search) diff --git a/src/data/roadmaps/ai-engineer/content/multimodal-ai-usecases@sGR9qcro68KrzM8qWxcH8.md b/src/data/roadmaps/ai-engineer/content/multimodal-ai-usecases@sGR9qcro68KrzM8qWxcH8.md new file mode 100644 index 000000000..589d4fec2 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/multimodal-ai-usecases@sGR9qcro68KrzM8qWxcH8.md @@ -0,0 +1,3 @@ +# Multimodal AI Usecases + +Multimodal AI integrates various data types for diverse applications. In human-computer interaction, it enhances interfaces using speech, gestures, and facial expressions. In healthcare, it combines medical scans and records for accurate diagnoses. For autonomous vehicles, it processes data from sensors for real-time navigation. Additionally, it generates images from text and summarizes videos in content creation, while also analyzing satellite and sensor data for climate insights. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/multimodal-ai@W7cKPt_UxcUgwp8J6hS4p.md b/src/data/roadmaps/ai-engineer/content/multimodal-ai@W7cKPt_UxcUgwp8J6hS4p.md new file mode 100644 index 000000000..a3220811b --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/multimodal-ai@W7cKPt_UxcUgwp8J6hS4p.md @@ -0,0 +1,3 @@ +# Multimodal AI + +Multimodal AI refers to artificial intelligence systems capable of processing and integrating multiple types of data inputs simultaneously, such as text, images, audio, and video. Unlike traditional AI models that focus on a single data type, multimodal AI combines various inputs to achieve a more comprehensive understanding and generate more robust outputs. This approach mimics human cognition, which naturally integrates information from multiple senses to form a complete perception of the world. By leveraging diverse data sources, multimodal AI can perform complex tasks like image captioning, visual question answering, and cross-modal content generation. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/ollama-models@ro3vY_sp6xMQ-hfzO-rc1.md b/src/data/roadmaps/ai-engineer/content/ollama-models@ro3vY_sp6xMQ-hfzO-rc1.md new file mode 100644 index 000000000..89a29c1fe --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ollama-models@ro3vY_sp6xMQ-hfzO-rc1.md @@ -0,0 +1,7 @@ +# Ollama Models + +Ollama supports a wide range of language models, including but not limited to Llama, Phi, Mistral, Gemma and more. + +Visit the following resources to learn more: + +- [@official@Ollama Models](https://ollama.com/library) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/ollama-sdk@TsG_I7FL-cOCSw8gvZH3r.md b/src/data/roadmaps/ai-engineer/content/ollama-sdk@TsG_I7FL-cOCSw8gvZH3r.md new file mode 100644 index 000000000..a26e991f3 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ollama-sdk@TsG_I7FL-cOCSw8gvZH3r.md @@ -0,0 +1,7 @@ +# Ollama SDK + +Ollama SDK can be used to develop applications locally. + +Visit the following resources to learn more: + +- [@official@Ollama SDK](https://ollama.com) \ 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 new file mode 100644 index 000000000..0051314ff --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/ollama@rTT2UnvqFO3GH6ThPLEjO.md @@ -0,0 +1,7 @@ +# Ollama + +Ollama is an open-source tool for running large language models (LLMs) locally on personal computers. It supports various models like Llama 2, Mistral, and Code Llama, bundling weights, configurations, and data into a single package. Ollama offers a user-friendly interface, API access, and integration capabilities, allowing users to leverage AI capabilities while maintaining data privacy and control. It's designed for easy installation and use on macOS and Linux, with Windows support in development. + +Visit the following resources to learn more: + +- [@official@Ollama](https://ollama.com) \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/open-ai-assistant-api@eOqCBgBTKM8CmY3nsWjre.md b/src/data/roadmaps/ai-engineer/content/open-ai-assistant-api@eOqCBgBTKM8CmY3nsWjre.md new file mode 100644 index 000000000..bc94303ac --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/open-ai-assistant-api@eOqCBgBTKM8CmY3nsWjre.md @@ -0,0 +1,3 @@ +# Open AI Assistant API + +OpenAI Assistant API is a tool provided by OpenAI that allows developers to integrate the same AI used in ChatGPT into their own applications, products or services. This AI conducts dynamic, interactive and context-aware conversations useful for building AI assistants in various applications. In the AI Engineer Roadmap, mastering the use of APIs like the Open AI Assistant API is a crucial skill, as it allows engineers to harness the power and versatility of pre-trained algorithms and use them for their desired tasks. AI Engineers can offload the intricacies of model training and maintenance, focusing more on product development and innovation. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/open-ai-embedding-models@y0qD5Kb4Pf-ymIwW-tvhX.md b/src/data/roadmaps/ai-engineer/content/open-ai-embedding-models@y0qD5Kb4Pf-ymIwW-tvhX.md new file mode 100644 index 000000000..6d48c7242 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/open-ai-embedding-models@y0qD5Kb4Pf-ymIwW-tvhX.md @@ -0,0 +1,7 @@ +# Open AI Embedding Models + +Open AI embedding models refer to the artificial intelligence variants designed to reformat or transcribe input data into compact, dense numerical vectors. These models simplify and reduce the input data from its original complex nature, creating a digital representation that is easier to manipulate. This data reduction technique is critical in the AI Engineer Roadmap because it paves the way for natural language processing tasks. It helps in making precise predictions, clustering similar data, and producing accurate search results based on contextual relevance. + +Visit the following resources to learn more: + +- [@official@Open AI Embedding Models](https://platform.openai.com/docs/guides/embeddings) diff --git a/src/data/roadmaps/ai-engineer/content/open-ai-embeddings-api@l6priWeJhbdUD5tJ7uHyG.md b/src/data/roadmaps/ai-engineer/content/open-ai-embeddings-api@l6priWeJhbdUD5tJ7uHyG.md new file mode 100644 index 000000000..6a5ba212c --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/open-ai-embeddings-api@l6priWeJhbdUD5tJ7uHyG.md @@ -0,0 +1,3 @@ +# Open AI Embeddings API + +Open AI Embeddings API is a powerful system that is used to generate high-quality word and sentence embeddings. With this API, it becomes a breeze to convert textual data into a numerical format that Machine Learning models can process. This conversion of text into numerical data is crucial for Natural Language Processing (NLP) tasks that an AI Engineer often encounters. Understanding and harnessing the capabilities of the Open AI Embeddings API, therefore, forms an essential part of the AI Engineer's roadmap. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/open-ai-models@2WbVpRLqwi3Oeqk1JPui4.md b/src/data/roadmaps/ai-engineer/content/open-ai-models@2WbVpRLqwi3Oeqk1JPui4.md new file mode 100644 index 000000000..be69860f5 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/open-ai-models@2WbVpRLqwi3Oeqk1JPui4.md @@ -0,0 +1,3 @@ +# Open AI Models + +Open AI Models are a set of pre-designed, predefined models provided by OpenAI. These models are trained using Machine Learning algorithms to perform artificial intelligence tasks without any need of explicit programming. OpenAI's models are suited for various applications such as text generation, classification and extraction, allowing AI engineers to leverage them for effective implementations. Therefore, understanding and utilizing these models becomes an essential aspect in the roadmap for an AI engineer to develop AI-powered solutions with more efficiency and quality. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/open-ai-playground@nyBgEHvUhwF-NANMwkRJW.md b/src/data/roadmaps/ai-engineer/content/open-ai-playground@nyBgEHvUhwF-NANMwkRJW.md new file mode 100644 index 000000000..a9b871c60 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/open-ai-playground@nyBgEHvUhwF-NANMwkRJW.md @@ -0,0 +1,3 @@ +# Open AI Playground + +Open AI Playground is an interactive platform, provided by OpenAI, that enables developers to experiment with and understand the capabilities of OpenAI's offerings. Here, you can try out several cutting-edge language models like GPT-3 or Codex. This tool is crucial in the journey of becoming an AI Engineer, because it provides a hands-on experience in implementing and testing language models. Manipulating models directly helps you get a good grasp on how AI models can influence the results based on input parameters. Therefore, Open AI Playground holds significance on the AI Engineer's roadmap not only as a learning tool, but also as a vital platform for rapid prototyping and debugging. \ No newline at end of file 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 new file mode 100644 index 000000000..7cec4c6d9 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/open-source-embeddings@apVYIV4EyejPft25oAvdI.md @@ -0,0 +1,3 @@ +# Open-Source Embeddings + +Open-source embeddings, such as Word2Vec, GloVe, and FastText, are essentially vector representations of words or phrases. These representations capture the semantic relationships between words and their surrounding context in a multi-dimensional space, making it easier for machine learning models to understand and process textual data. In the AI Engineer Roadmap, gaining knowledge of open-source embeddings is critical. These embeddings serve as a foundation for natural language processing tasks, ranging from sentiment analysis to chatbot development, and are widely used in the AI field for their ability to enhance the performance of machine learning models dealing with text data. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/open-vs-closed-source-models@RBwGsq9DngUsl8PrrCbqx.md b/src/data/roadmaps/ai-engineer/content/open-vs-closed-source-models@RBwGsq9DngUsl8PrrCbqx.md new file mode 100644 index 000000000..c3d567894 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/open-vs-closed-source-models@RBwGsq9DngUsl8PrrCbqx.md @@ -0,0 +1,3 @@ +# Open vs Closed Source Models + +Open source models are types of software whose source code is available for the public to view, modify, and distribute. They encourage collaboration and transparency, often resulting in rapid improvements and innovations. Closed source models, on the other hand, do not make their source code available and are typically developed and maintained by specific companies or teams. They often provide more stability, support, and consistency. Within the AI Engineer Roadmap, both open and closed source models play a unique role. While open source models allow for customization, experimentation and a broader understanding of underlying algorithms, closed source models might offer proprietary algorithms and structures that could lead to more efficient or unique solutions. Therefore, understanding the differences, advantages, and drawbacks of both models is essential for an aspiring AI engineer. \ 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 new file mode 100644 index 000000000..475a9c76c --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/openai-api@zdeuA4GbdBl2DwKgiOA4G.md @@ -0,0 +1,3 @@ +# OpenAI API + +OpenAI API is a powerful language model developed by OpenAI, a non-profit artificial intelligence research organization. It uses machine learning to generate text from a given set of keywords or sentences, presenting the capability to learn, understand, and generate human-friendly content. As an AI Engineering aspirant, familiarity with tools like the OpenAI API positions you on the right track. It can help with creating AI applications that can analyze and generate text, which is particularly useful in AI tasks such as data extraction, summarization, translation, and natural language processing. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/openai-assistant-api@mbp2NoL-VZ5hZIIblNBXt.md b/src/data/roadmaps/ai-engineer/content/openai-assistant-api@mbp2NoL-VZ5hZIIblNBXt.md new file mode 100644 index 000000000..aa6dc206e --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/openai-assistant-api@mbp2NoL-VZ5hZIIblNBXt.md @@ -0,0 +1,3 @@ +# OpenAI Assistant API + +OpenAI Assistant API is a tool developed by OpenAI which allows developers to establish interaction between their applications, products or services and state-of-the-art AI models. By integrating this API in their software architecture, artificial intelligence engineers can leverage the power of advanced language models developed by the OpenAI community. These integrated models can accomplish a multitude of tasks, like writing emails, generating code, answering questions, tutoring in different subjects and even creating conversational agents. For an AI engineer, mastery over such APIs means they can deploy and control highly sophisticated AI models with just a few lines of code. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/openai-functions--tools@Sm0Ne5Nx72hcZCdAcC0C2.md b/src/data/roadmaps/ai-engineer/content/openai-functions--tools@Sm0Ne5Nx72hcZCdAcC0C2.md new file mode 100644 index 000000000..7a2187afb --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/openai-functions--tools@Sm0Ne5Nx72hcZCdAcC0C2.md @@ -0,0 +1,3 @@ +# OpenAI Functions / Tools + +OpenAI, a leading organization in the field of artificial intelligence, provides a suite of functions and tools to enable developers and AI engineers to design, test, and deploy AI models. These tools include robust APIs for tasks like natural language processing, vision, and reinforcement learning, and platforms like GPT-3, CLIP, and Codex that provide pre-trained models. Utilization of these OpenAI components allows AI engineers to get a head-start in application development, simplifying the process of integration and reducing the time required for model training and tuning. Understanding and being adept at these tools forms a crucial part of the AI Engineer's roadmap to build impactful AI-driven applications. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/openai-models@5ShWZl1QUqPwO-NRGN85V.md b/src/data/roadmaps/ai-engineer/content/openai-models@5ShWZl1QUqPwO-NRGN85V.md new file mode 100644 index 000000000..ebb89dff6 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/openai-models@5ShWZl1QUqPwO-NRGN85V.md @@ -0,0 +1,3 @@ +# OpenAI Models + +OpenAI is an artificial intelligence research lab that is known for its cutting-edge models. These models, like GPT-3, are pre-trained on vast amounts of data and perform remarkably well on tasks like language translation, question-answering, and more without needing any specific task training. Using these pre-trained models can give a massive head-start in building AI applications, as it saves the substantial time and resources that are required for training models from scratch. For an AI Engineer, understanding and leveraging these pre-trained models can greatly accelerate development and lead to superior AI systems. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/openai-moderation-api@ljZLa3yjQpegiZWwtnn_q.md b/src/data/roadmaps/ai-engineer/content/openai-moderation-api@ljZLa3yjQpegiZWwtnn_q.md new file mode 100644 index 000000000..01e710f41 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/openai-moderation-api@ljZLa3yjQpegiZWwtnn_q.md @@ -0,0 +1,3 @@ +# OpenAI Moderation API + +OpenAI Moderation API is a feature or service provided by OpenAI that helps in controlling or filtering the output generated by an AI model. It is highly useful in identifying and preventing content that violates OpenAI’s usage policies from being shown. As an AI engineer, learning to work with this API helps implement a layer of security to ensure that the AI models developed are producing content that aligns with the ethical and moral guidelines set in place. Thus, it becomes a fundamental aspect of the AI Engineer Roadmap when dealing with user-generated content or creating AI-based services that interact with people. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/openai-vision-api@CRrqa-dBw1LlOwVbrZhjK.md b/src/data/roadmaps/ai-engineer/content/openai-vision-api@CRrqa-dBw1LlOwVbrZhjK.md new file mode 100644 index 000000000..0bd35d585 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/openai-vision-api@CRrqa-dBw1LlOwVbrZhjK.md @@ -0,0 +1,3 @@ +# OpenAI Vision API + +OpenAI Vision API is an API provided by OpenAI that is designed to analyze and generate insights from images. By feeding it an image, the Vision API can provide information about the objects and activities present in the image. For AI Engineers, this tool can be particularly useful for conducting Computer Vision tasks effortlessly. Using this API can support in creating applications that need image recognition, object detection and similar functionality, saving AI Engineers from having to create complex image processing algorithms from scratch. Understanding how to work with APIs, especially ones as advanced as the OpenAI Vision API, is an essential skill in the AI Engineer's roadmap. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/opensource-ai@a_3SabylVqzzOyw3tZN5f.md b/src/data/roadmaps/ai-engineer/content/opensource-ai@a_3SabylVqzzOyw3tZN5f.md new file mode 100644 index 000000000..27c36eeb3 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/opensource-ai@a_3SabylVqzzOyw3tZN5f.md @@ -0,0 +1,3 @@ +# OpenSource AI + +OpenSource AI refers to artificial intelligence tools, software, libraries and platforms that are freely available to the public, allowing individuals and organizations to use, modify and distribute them as per their requirements. The OpenSource AI initiatives provide an ecosystem for AI developers to innovate, collaborate and mutually learn by sharing their codebase and datasets. Specifically, in the AI engineer's roadmap, OpenSource AI aids in accelerating the AI application development process, provides access to pre-trained models, and promotes the understanding of AI technology through transparency. \ No newline at end of file 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 new file mode 100644 index 000000000..79a4af54d --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/performing-similarity-search@ZcbRPtgaptqKqWBgRrEBU.md @@ -0,0 +1,3 @@ +# Performing Similarity Search + +This step involves querying the vector database to find the most similar embeddings to a given input vector. When a query is made, the system computes the distance between the input vector and stored embeddings using metrics like cosine similarity or Euclidean distance. The closest matches—those with the smallest distances—are retrieved as results, allowing for accurate semantic search, recommendations, or content retrieval based on similarity in the embedded space. This process enables highly efficient and relevant searches across large datasets. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/pinecone@_Cf7S1DCvX7p1_3-tP3C3.md b/src/data/roadmaps/ai-engineer/content/pinecone@_Cf7S1DCvX7p1_3-tP3C3.md new file mode 100644 index 000000000..044a6672c --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/pinecone@_Cf7S1DCvX7p1_3-tP3C3.md @@ -0,0 +1,3 @@ +# Pinecone + +Pinecone is a vector database designed specifically for machine learning applications. It facilitates the process of transforming data into a vector and indexing it for quick retrieval. As a cloud-based service, it allows AI Engineers to easily handle high-dimensional data and utilize it for building models. As part of an AI Engineer's Roadmap, understanding and using vector databases like Pinecone can help streamline the development and deployment of AI and ML applications. This is particularly useful in building recommendation systems, personalized search and similarity search which are important components of an AI-based service. \ 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 new file mode 100644 index 000000000..c60a09404 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/popular-open-source-models@97eu-XxYUH9pYbD_KjAtA.md @@ -0,0 +1,3 @@ +# Popular Open Source Models in AI + +Open-source models consist of pre-made algorithms and mathematical models that are freely available for anyone to use, modify, and distribute. In the realm of Artificial Intelligence, these models often include frameworks for machine learning, deep learning, natural language processing, and other AI methodologies. Thanks to their openly accessible nature, AI engineers often utilize these open-source models during project execution, fostering increased efficiency by reducing the need to create complex models from scratch. They serve as a valuable resource, often speeding up the development phase and promoting collaboration among the global AI community. Popular examples include TensorFlow, PyTorch, and Keras, each offering unique strengths and capabilities for different areas of AI engineering. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/pre-trained-models@d7fzv_ft12EopsQdmEsel.md b/src/data/roadmaps/ai-engineer/content/pre-trained-models@d7fzv_ft12EopsQdmEsel.md new file mode 100644 index 000000000..799d68542 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/pre-trained-models@d7fzv_ft12EopsQdmEsel.md @@ -0,0 +1,3 @@ +# Pre-trained Models + +Pre-trained models are simply models created by some machine learning engineers to solve a problem. Such models are often shared and other machine learning engineers use these models for similar problems. These models are called pre-trained models because they have been previously trained by using large datasets. These pre-trained models can be used as the starting point for a variety of AI tasks, often as part of transfer learning, to save on the resources that would be needed to start a learning process from scratch. This hastens the journey of becoming an AI engineer as one gets to understand how to improve and fine-tune pre-existing models to specific tasks, making them an essential part of an AI engineer's development plan. diff --git a/src/data/roadmaps/ai-engineer/content/pricing-considerations@4GArjDYipit4SLqKZAWDf.md b/src/data/roadmaps/ai-engineer/content/pricing-considerations@4GArjDYipit4SLqKZAWDf.md new file mode 100644 index 000000000..a49561087 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/pricing-considerations@4GArjDYipit4SLqKZAWDf.md @@ -0,0 +1,3 @@ +# Pricing Considerations in OpenAI Embeddings API + +OpenAI Embeddings API allows users to compute and extract textual embeddings from large-scale models that OpenAI trains. The pricing for this API can vary based on multiple factors like the number of requests, number of tokens in the text, total computation time, throughput, and others. Understanding the pricing model for the OpenAI Embeddings API is vital for AI Engineers to effectively manage costs while using the API. They should be aware of any limitations or additional costs associated with high volume requests, speed of processing, or special features they plan to use. This knowledge helps the engineers to optimize costs, which is important for the budgeting of AI projects and the overall roadmap of an AI Engineer. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/pricing-considerations@DZPM9zjCbYYWBPLmQImxQ.md b/src/data/roadmaps/ai-engineer/content/pricing-considerations@DZPM9zjCbYYWBPLmQImxQ.md new file mode 100644 index 000000000..c968d7690 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/pricing-considerations@DZPM9zjCbYYWBPLmQImxQ.md @@ -0,0 +1,3 @@ +# Pricing Considerations + +Pricing Considerations refer to the factors and elements that need to be taken into account when setting the price for a product or service. It includes aspects such as cost of production, market demand, competition, and perceived value. In the AI Engineer Roadmap, it can denote the determination of the cost involved in AI model development, implementation, maintenance, and upgrades. Various factors such as the complexity of models, the resources required, timeline, expertise needed, and the value provided to the user play a significant role in pricing considerations. \ 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 new file mode 100644 index 000000000..e29f3771d --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/prompt-engineering@Dc15ayFlzqMF24RqIF_-X.md @@ -0,0 +1,3 @@ +# Prompt Engineering + +Prompt Engineering refers to the process of carefully designing and shaping queries or prompts to extract specific responses or behaviors from artificial intelligence models. These prompts are often thought of as the gateway to exploiting these AI models and essential tools for machine testing and performance evaluations. They can affect the model's response, making it invaluable to AI Engineers who are developing AI systems and need to test model's reaction and adaptability with diverse prompts. \ No newline at end of file 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 new file mode 100644 index 000000000..fce1a4685 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/prompt-injection-attacks@cUyLT6ctYQ1pgmodCKREq.md @@ -0,0 +1,3 @@ +# Prompt Injection Attacks + +Prompt Injection Attacks refer to a cyber threat where nefarious actors manipulate or inject malicious codes into the system using various techniques like SQL injection, Cross-Site Scripting (XSS), or Command Injection. This practice aims to exploit a software system's vulnerabilities, allowing unauthorized access to sensitive information. In the AI Engineer Roadmap, understanding these attack types is essential. Knowledge about such attacks can help developers in AI to build robust and secure AI systems that can resist potential threats and ensure system integrity. Better understanding of threat landscape can guide engineers toward implementing additional security measures during the design and development process of AI applications. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/purpose-and-functionality@WcjX6p-V-Rdd77EL8Ega9.md b/src/data/roadmaps/ai-engineer/content/purpose-and-functionality@WcjX6p-V-Rdd77EL8Ega9.md new file mode 100644 index 000000000..6b27fd3a1 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/purpose-and-functionality@WcjX6p-V-Rdd77EL8Ega9.md @@ -0,0 +1,3 @@ +# Purpose and Functionality + +The Purpose and Functionality are fundamental concepts in the AI Engineer Roadmap. To put simply, 'Purpose' refers to the intended goal or desired result that an AI engineer wants to achieve in an AI project. These goals can range from building neural networks to creating self-driving cars. 'Functionality', on the other hand, pertains to the behaviors and actions that an AI program can perform to fulfill its purpose. This could involve machine learning algorithms, language processing techniques, or data analysis methods among others. Understanding the purpose and functionality of an AI project allows an AI engineer to strategically plan, develop, and manage AI systems effectively. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/qdrant@DwOAL5mOBgBiw-EQpAzQl.md b/src/data/roadmaps/ai-engineer/content/qdrant@DwOAL5mOBgBiw-EQpAzQl.md new file mode 100644 index 000000000..706199ab7 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/qdrant@DwOAL5mOBgBiw-EQpAzQl.md @@ -0,0 +1,3 @@ +# Qdrant + +Qdrant is a high-performance vector similarity search engine with extensive restful API and distributed support, written in Rust. It allows efficiently storing, handling, and retrieving large amounts of vector data. Integrating Qdrant as a part of the AI Engineer's toolkit can drastically improve functionality and efficiency for AI Engineers, as they often work with vectors during data preprocessing, feature extraction, and modeling. Qdrant's flexibility and control over data indexing and query processing make it particularly handy when dealing with large datasets prevalent in AI projects. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/rag--implementation@lVhWhZGR558O-ljHobxIi.md b/src/data/roadmaps/ai-engineer/content/rag--implementation@lVhWhZGR558O-ljHobxIi.md new file mode 100644 index 000000000..fa6eb87e7 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/rag--implementation@lVhWhZGR558O-ljHobxIi.md @@ -0,0 +1,3 @@ +# RAG & Implementation + +RAG (Relation and Graph) is a mechanism used in artificial intelligence that represents the structured relationships existing between different data entities. Programming languages such as Python provide libraries for RAG implementation, making it simpler for AI engineers. In the AI Engineer roadmap, understanding and implementing RAG models can prove beneficial especially while working with AI algorithms that extensively deal with relational and structured data, such as graph-based Deep Learning algorithms, or while creating knowledge graphs in contexts like Natural Language Processing (NLP). Implementing RAG efficiently can lead to more accurate, efficient, and interpretable AI models. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/rag-usecases@GCn4LGNEtPI0NWYAZCRE-.md b/src/data/roadmaps/ai-engineer/content/rag-usecases@GCn4LGNEtPI0NWYAZCRE-.md new file mode 100644 index 000000000..d00a8bc22 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/rag-usecases@GCn4LGNEtPI0NWYAZCRE-.md @@ -0,0 +1,3 @@ +# RAG Usecases + +Retrieval-Augmented Generation (RAG) is a type of sequence-to-sequence model with documents retrievers in their architecture. This method integrates the power of pre-trained language models and extractive question answering methods to answer any queries with high precision. In the AI Engineer Roadmap, this tool has practical applications, such as enabling machines to provide detailed responses based on large-scale databases instead of generating responses only from a fixed context. This feature is highly beneficial in developing advanced AI systems with extensive knowledge recall capabilities. RAG's use-cases cover areas like customer service chatbots, automated legal assistance, healthcare advice systems, and other areas where comprehensive information retrieval is crucial. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/rag-vs-fine-tuning@qlBEXrbV88e_wAGRwO9hW.md b/src/data/roadmaps/ai-engineer/content/rag-vs-fine-tuning@qlBEXrbV88e_wAGRwO9hW.md new file mode 100644 index 000000000..ba83d545e --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/rag-vs-fine-tuning@qlBEXrbV88e_wAGRwO9hW.md @@ -0,0 +1,3 @@ +# RAG vs Fine-tuning + +RAG (Retrieval-Augmented Generation) and Fine-tuning are two distinct techniques utilized in Natural Language Processing (NLP). RAG introduces an approach where the model retrieves documents and faqs from a database to enhance the content generation process. It enables more factual accuracy and relevant context in the outputs. On the other hand, Fine-tuning involves modifying a pre-trained Neural Network model on a new or different task. Adjustments are made to the model's parameters to enhance performance on the new task. Typically, an AI engineer might use RAG for tasks requiring contextual understanding and factual accuracy, while implementing fine-tuning techniques to leverage existing pre-trained models for optimizing new tasks and projects. \ 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 new file mode 100644 index 000000000..2ade2e173 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/rag@9JwWIK0Z2MK8-6EQQJsCO.md @@ -0,0 +1,3 @@ +# RAG (Retrieval-Augmented Generation) + +RAG is a paradigm for applying transformer-based generative models in Natural Language Processing tasks. It leverages a hybrid approach, i.e. it combines the capabilities of pre-trained language models and powerful retrieval methods to generate responses. For an AI Engineer, RAG forms an essential part of the NLP (Natural Language Processing) toolkit. This model operates by first retrieving relevant context from a large corpus, and then utilizing this context to generate detailed and contextually rich responses. Its successful application spans across a multitude of NLP tasks including machine translation, dialogue systems, QnA systems, and more. Therefore, RAG is a significant stop on the route to becoming an accomplished AI engineer as it equips them with skills to deal with complex NLP tasks efficiently. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/react-prompting@voDKcKvXtyLzeZdx2g3Qn.md b/src/data/roadmaps/ai-engineer/content/react-prompting@voDKcKvXtyLzeZdx2g3Qn.md new file mode 100644 index 000000000..f73dc24c5 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/react-prompting@voDKcKvXtyLzeZdx2g3Qn.md @@ -0,0 +1,3 @@ +# ReAct Prompting + +ReAct prompting is a tactical approach employed in Conversational AI to generate textual responses. It is essentially utilized in scenarios where a chatbot or an AI-generated persona is required to carry on a conversation. This strategy adds a layer of intelligence to the conversation, maneuvering the AI to generate responses that are contextually sensitive and relevant. In an AI Engineer's Roadmap, an understanding of React Prompting becomes significant during the design of AI interaction models. Using this technique, AI Engineers are capable of creating more intuitive, engaging, and user-friendly conversational AI agents. \ 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 new file mode 100644 index 000000000..a5fda5783 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/recommendation-systems@HQe9GKy3p0kTUPxojIfSF.md @@ -0,0 +1,3 @@ +# Recommendation Systems + +Recommendation systems are a subclass of information filtering systems that are meant to predict the preferences or ratings that a user would give to a particular item. Broadly speaking, these systems are primarily used in applications where a user receives suggestions for the products or services they might be interested in, such as Netflix's movie recommendations or Amazon's product suggestions. In terms of an AI Engineer Roadmap, building recommendation systems is a fundamental skill, as these systems typically utilize concepts of machine learning and data mining, and their purpose primarily revolves around making predictions based on large volumes of data. These skills make an integral part of AI-related fields like natural language processing, robotics, and deep learning. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/replicate@c0RPhpD00VIUgF4HJgN2T.md b/src/data/roadmaps/ai-engineer/content/replicate@c0RPhpD00VIUgF4HJgN2T.md new file mode 100644 index 000000000..d571cd340 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/replicate@c0RPhpD00VIUgF4HJgN2T.md @@ -0,0 +1,3 @@ +# Replicate + +Replicate is a version-control tool specifically designed for machine learning. It enables effective tracking of experiments, facilitating the comparison of different models and parameters. As an AI Engineer, knowing how to use Replicate provides you with the ability to save versions of data and model files, thereby preventing loss of work and confusion. It also contributes to smoother teamwork and collaborations by allowing effective sharing and reproduction of experiments, which is crucial in an AI project life cycle. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/retrieval-process@OCGCzHQM2LQyUWmiqe6E0.md b/src/data/roadmaps/ai-engineer/content/retrieval-process@OCGCzHQM2LQyUWmiqe6E0.md new file mode 100644 index 000000000..7d2b2204c --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/retrieval-process@OCGCzHQM2LQyUWmiqe6E0.md @@ -0,0 +1,3 @@ +# Retrieval Process + +In this step of implementing RAG, we clean up the user's query by removing any extra information, we then generate an embedding for the query and look for the most similar embeddings in the vector database. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/robust-prompt-engineering@qmx6OHqx4_0JXVIv8dASp.md b/src/data/roadmaps/ai-engineer/content/robust-prompt-engineering@qmx6OHqx4_0JXVIv8dASp.md new file mode 100644 index 000000000..171af3241 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/robust-prompt-engineering@qmx6OHqx4_0JXVIv8dASp.md @@ -0,0 +1,3 @@ +# Robust Prompt Engineering + +Robust prompt engineering refers to designing, refining, and optimizing the instructions or queries given to an AI model to execute specific tasks. Originally, AI models were trained on a wide range of internet text without any specific commands. However, it can be more effective to provide these models with explicit prompts to guide their responses or actions. Prompt engineering aids in shaping the output of an AI model, significantly improving the accuracy of its responses. This becomes particularly valuable for AI engineers when working on state-of-the-art models like GPT-3, where the output's quality and relevance can be heavily influenced by innovative and well-structured prompts. With robust prompt engineering, AI practitioners can better channel the model's raw capabilities into desired outcomes, marking a crucial skill in an AI Engineer's journey. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/roles-and-responsiblities@K9EiuFgPBFgeRxY4wxAmb.md b/src/data/roadmaps/ai-engineer/content/roles-and-responsiblities@K9EiuFgPBFgeRxY4wxAmb.md new file mode 100644 index 000000000..9b9496d75 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/roles-and-responsiblities@K9EiuFgPBFgeRxY4wxAmb.md @@ -0,0 +1,3 @@ +# Roles and Responsbilities of an AI Engineer + +An AI Engineer is entrusted with the task of designing and implementing AI models. This involves working closely with Data Scientists to transform machine learning models into APIs, ensuring that the models are equipped to interact with software applications. AI Engineers are proficient in a variety of programming languages, work with vast datasets, and utilize AI-related applications. Additionally, they often handle tasks such as data preprocessing, data analysis, and machine learning algorithm deployment. They also troubleshoot any issues that might emerge during the AI lifecycle, while maintaining a high level of knowledge about the latest industry trends and technological advancements. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/security-and-privacy-concerns@sWBT-j2cRuFqRFYtV_5TK.md b/src/data/roadmaps/ai-engineer/content/security-and-privacy-concerns@sWBT-j2cRuFqRFYtV_5TK.md new file mode 100644 index 000000000..fdf632a9f --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/security-and-privacy-concerns@sWBT-j2cRuFqRFYtV_5TK.md @@ -0,0 +1,3 @@ +# Security and Privacy Concerns + +Security and Privacy Concerns encapsulates the understanding and addressing of potential risks associated with AI systems. These include, but are not limited to, data protection, access control, regulatory compliance, and the ethically complex area of how AI impacts individual privacy. As an aspiring AI Engineer, it is essential to acknowledge these concerns alongside technical skills as they influence the design, implementation, and application of AI technologies. Familiarity with this area helps in designing AI solutions that align with standards of security and privacy while effectively addressing the needs of the user. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/semantic-search@eMfcyBxnMY_l_5-8eg6sD.md b/src/data/roadmaps/ai-engineer/content/semantic-search@eMfcyBxnMY_l_5-8eg6sD.md new file mode 100644 index 000000000..abfb3bc25 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/semantic-search@eMfcyBxnMY_l_5-8eg6sD.md @@ -0,0 +1,3 @@ +# Semantic Search + +Semantic Search is an information retrieval approach which leverages not just the keywords in a search query, but also the intent and contextual meaning behind them to produce highly relevant results. In other words, it makes search engines more intelligent and precise, understanding user intent and making connections like a human brain would. It's an important technique that an AI Engineer might utilize, especially when dealing with large amounts of data or if they're involved in creating intelligent search systems. From natural language processing to relationship mapping, semantic search plays a key role in advancing artificial intelligence search capabilities. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/sentence-transformers@ZV_V6sqOnRodgaw4mzokC.md b/src/data/roadmaps/ai-engineer/content/sentence-transformers@ZV_V6sqOnRodgaw4mzokC.md new file mode 100644 index 000000000..5bac20c04 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/sentence-transformers@ZV_V6sqOnRodgaw4mzokC.md @@ -0,0 +1,3 @@ +# Sentence Transformers + +Sentence Transformers refer to a variant of the popular Transformers model that is specifically designed and optimized for creating meaningful and effective sentence embeddings. It enables developers to easily convert paragraphs and sentences into dense vector representations that can be compared for semantic similarity. In the AI engineer's journey, getting familiar with Sentence Transformers is important because it allows the modelling of natural language in AI systems to provide richer, more nuanced interactions. This can be especially valuable in designing and implementing AI applications such as chatbots, sentiment analysis tools, and more. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/speech-to-text@jQX10XKd_QM5wdQweEkVJ.md b/src/data/roadmaps/ai-engineer/content/speech-to-text@jQX10XKd_QM5wdQweEkVJ.md new file mode 100644 index 000000000..20546f1d3 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/speech-to-text@jQX10XKd_QM5wdQweEkVJ.md @@ -0,0 +1,3 @@ +# Speech-to-Text + +Speech-to-Text is a type of technology that converts spoken language into written text. This technology is often incorporated in virtual assistants, transcription services and many other applications where transforming voice into text can facilitate better user interaction or communication. For an AI engineer, this falls under the wider ambit of Natural Language Processing (NLP), making it an important skill to understand and comprehend. The ability to design and implement speech-to-text models can allow AI engineers to create more interactive and adaptive machine learning systems, improve accessibility, and expand the scope of potential AI applications. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/supabase@9kT7EEQsbeD2WDdN9ADx7.md b/src/data/roadmaps/ai-engineer/content/supabase@9kT7EEQsbeD2WDdN9ADx7.md new file mode 100644 index 000000000..fd02c3433 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/supabase@9kT7EEQsbeD2WDdN9ADx7.md @@ -0,0 +1,3 @@ +# Supabase + +Supabase is an open-source Firebase alternative that offers a suite of tools for database management, realtime subscriptions, and automating tasks. As an AI Engineer, you'll often have to manage and work with data to develop and test AI models. With Supabase, you can build databases more efficiently and interact with your data in real-time. It also supports user authentication and provides serverless functions which can be crucial in AI development workflows. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/text-to-speech@GCERpLz5BcRtWPpv-asUz.md b/src/data/roadmaps/ai-engineer/content/text-to-speech@GCERpLz5BcRtWPpv-asUz.md new file mode 100644 index 000000000..f97646146 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/text-to-speech@GCERpLz5BcRtWPpv-asUz.md @@ -0,0 +1,3 @@ +# Text-to-Speech + +Text-to-Speech (TTS) is a type of assistive technology that reads digital text out loud. It is a technology widely used in various programming fields, including AI Engineering. Traditionally, TTS has been employed in accessibility applications, but with the advent of AI, it's now being used to develop voice assistants, audio book narrators, and many more intelligent applications. For AI engineers, knowledge of TTS techniques opens up new possibilities for user interaction and can form an essential part of any AI application which interacts with its users primarily through spoken language. diff --git a/src/data/roadmaps/ai-engineer/content/token-counting@FjV3oD7G2Ocq5HhUC17iH.md b/src/data/roadmaps/ai-engineer/content/token-counting@FjV3oD7G2Ocq5HhUC17iH.md new file mode 100644 index 000000000..0adc70826 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/token-counting@FjV3oD7G2Ocq5HhUC17iH.md @@ -0,0 +1,3 @@ +# Token Counting + +Token counting refers to the process of quantifying the occurrence of tokens—unique instances of meaningful words, symbols, or other atomic units in a dataset. In artificial intelligence (AI), specifically in natural language processing (NLP), token counting serves as a foundational building block to understand and analyze text data. It helps in performing tasks such as text classification, sentiment analysis, and other language modeling tasks. It also forms the basis of techniques like Bag of Words, Term Frequency-Inverse Document Frequency (TF-IDF), and word embeddings, which are crucial in developing effective AI models. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/training@xostGgoaYkqMO28iN2gx8.md b/src/data/roadmaps/ai-engineer/content/training@xostGgoaYkqMO28iN2gx8.md new file mode 100644 index 000000000..276b1f8c8 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/training@xostGgoaYkqMO28iN2gx8.md @@ -0,0 +1,3 @@ +# Training + +Training in the field of AI involves feeding an algorithm or a neural network with data, and allowing it to adjust its parameters in order to improve its predictions over time. The main objective is to design the system to accurately recognize the patterns within the data set and make accurate predictions or decisions when confronted with new data. In the roadmap to becoming an AI engineer, understanding and implementing various training methodologies is a critical step. AI engineers require this skill to develop accurate and efficient algorithms that can learn from and make decisions based on data. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/transformersjs@bGLrbpxKgENe2xS1eQtdh.md b/src/data/roadmaps/ai-engineer/content/transformersjs@bGLrbpxKgENe2xS1eQtdh.md new file mode 100644 index 000000000..5ab1801cc --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/transformersjs@bGLrbpxKgENe2xS1eQtdh.md @@ -0,0 +1,3 @@ +# Transformers.js + +Transformers.js is a JavaScript library providing the ability to use machine learning transformers in applications. It is based on the concept of attention mechanism - "transformers" in artificial intelligence, which allows the model to focus on different words in a sentence during translation or text generation tasks. The benefits of using such transformers are their capacity to handle long sequences of data and their parallelization abilities which offer faster computational time. In the AI Engineer's learning pathway, understanding and working with transformers can be pivotal as they form a fundamental part of natural language processing tasks, often used within AI solutions. With JavaScript being a language of choice for many web applications, having an understanding of Transformers.js provides an AI engineer with the knowledge necessary to integrate powerful language models directly within web-applications. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/using-sdks-directly@WZVW8FQu6LyspSKm1C_sl.md b/src/data/roadmaps/ai-engineer/content/using-sdks-directly@WZVW8FQu6LyspSKm1C_sl.md new file mode 100644 index 000000000..f67817d57 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/using-sdks-directly@WZVW8FQu6LyspSKm1C_sl.md @@ -0,0 +1,3 @@ +# Using SDKs Directly + +Software Development Kits, often referred to as SDKs, are a collection of development tools bundled together. These tools assist in creating innovative applications for specific software frameworks or hardware platforms. In the AI Engineer Roadmap, using SDKs directly implies that AI engineers leverage these kits to interact directly with AI-related services or platforms. This approach provides a lower level control, allowing engineers to customize applications according to their unique requirements. Therefore, acquiring skill in using SDKs directly forms an instrumental part of the AI Engineer Roadmap, enabling practitioners to build and enhance AI applications effectively and efficiently. \ 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 new file mode 100644 index 000000000..7edf280cc --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/vector-database@zZA1FBhf1y4kCoUZ-hM4H.md @@ -0,0 +1,3 @@ +# Vector Database + +A Vector Database is a tool that specializes in storing and efficiently retrieving vector representations (or embeddings). These vectors often represent embeddings of items or entities in high-dimensional space. This indexation process enables search and clustering algorithms. In this step of implementing RAG, we use a Vector Database to store the embeddings of the documents. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/vector-databases@LnQ2AatMWpExUHcZhDIPd.md b/src/data/roadmaps/ai-engineer/content/vector-databases@LnQ2AatMWpExUHcZhDIPd.md new file mode 100644 index 000000000..700ae7354 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/vector-databases@LnQ2AatMWpExUHcZhDIPd.md @@ -0,0 +1,3 @@ +# Vector Databases + +Vector databases are specialized databases that are capable of handling and processing data in the form of vectors. Unlike traditional relational databases, which store data in tables, vector databases work with data that can be represented as mathematical vectors. This makes them particularly well-suited for dealing with large, multi-dimensional datasets, which are commonplace in the field of artificial intelligence. As an AI Engineer, understanding and utilizing vector databases can come in handy for numerous tasks such as similarity search, image recognition, and other machine learning applications where large-scale vector data needs to be quickly queried. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/vector-databases@tt9u3oFlsjEMfPyojuqpc.md b/src/data/roadmaps/ai-engineer/content/vector-databases@tt9u3oFlsjEMfPyojuqpc.md new file mode 100644 index 000000000..07c53cccb --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/vector-databases@tt9u3oFlsjEMfPyojuqpc.md @@ -0,0 +1,3 @@ +# Vector Databases + +Vector databases are a type of database system specifically designed to handle vector space model data, typically used for high-dimensional data sets. With the explosion of data in AI applications, these databases have become an integral part of the infrastructure, providing an efficient and scalable way to manage and query large volumes of vector data. For AI engineers, understanding how to use and optimize vector databases can significantly improve the performance of AI models which use vector-based data, such as natural language processing (NLP) and image recognition models. Proficiency in vector databases is hence a crucial skill in the AI Engineer Roadmap. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/video-understanding@TxaZCtTCTUfwCxAJ2pmND.md b/src/data/roadmaps/ai-engineer/content/video-understanding@TxaZCtTCTUfwCxAJ2pmND.md new file mode 100644 index 000000000..92327a92e --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/video-understanding@TxaZCtTCTUfwCxAJ2pmND.md @@ -0,0 +1,3 @@ +# Video Understanding + +Video Understanding is the process of analyzing videos to comprehend its content and context. Leveraging Machine Learning and AI technologies, this branch is responsible for extracting valuable information from video data. In the AI Engineer's Roadmap, video understanding comes into play when building AI models that can interpret video inputs. These engines need to recognize patterns and actions within the video, can track object's movements, and may also infer the future actions from the video stream. Training an AI model in video understanding requires knowledge of convolutional neural networks (CNN), recurring neural networks (RNN), and preferably some experience with Long Short-Term Memory (LSTM) networks. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/weaviate@VgUnrZGKVjAAO4n_llq5-.md b/src/data/roadmaps/ai-engineer/content/weaviate@VgUnrZGKVjAAO4n_llq5-.md new file mode 100644 index 000000000..533c1e819 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/weaviate@VgUnrZGKVjAAO4n_llq5-.md @@ -0,0 +1,3 @@ +# Weaviate + +Weaviate is an open-source, GraphQL and RESTful API-based, knowledge graph that allows you to store, search, and retrieve data. One of its core features is machine learning algorithms that enhance information handling. For an AI Engineer, mastering Weaviate becomes relevant as it bridges the gap between unstructured data and structured data, which is a common challenge when working with AI and machine learning models. By understanding this, an AI engineer can leverage these abilities to manipulate structured data more effectively, optimize data searchability, and improve the efficiency of data-dependent processes in AI projects. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/what-are-embeddings@--ig0Ume_BnXb9K2U7HJN.md b/src/data/roadmaps/ai-engineer/content/what-are-embeddings@--ig0Ume_BnXb9K2U7HJN.md new file mode 100644 index 000000000..6ac8e4d88 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/what-are-embeddings@--ig0Ume_BnXb9K2U7HJN.md @@ -0,0 +1,3 @@ +# What are Embeddings + +Embeddings are a way of representing complex and high-dimensional data in a low-dimensional space, typically a vector. For example, words in a language can be represented as multi-dimensional vectors through word embedding techniques, such as Word2Vec or GloVe. These representations capture semantic relationships among words that machines can understand and process. In the roadmap of becoming an AI Engineer, handling and understanding embeddings is vital because they are essential to natural language processing, recommendation systems and any AI component that deals with complex data in a compact, meaningful manner. \ No newline at end of file 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 new file mode 100644 index 000000000..f5a1d0e78 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/what-is-an-ai-engineer@GN6SnI7RXIeW8JeD-qORW.md @@ -0,0 +1,3 @@ +# What is an AI Engineer? + +An AI Engineer uses pre-trained models and existing AI tools to improve user experiences. They focus on applying AI in practical ways, without building models from scratch. This is different from AI Researchers and ML Engineers, who focus more on creating new models or developing AI theory. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/content/whisper-api@OTBd6cPUayKaAM-fLWdSt.md b/src/data/roadmaps/ai-engineer/content/whisper-api@OTBd6cPUayKaAM-fLWdSt.md new file mode 100644 index 000000000..c52256f3a --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/whisper-api@OTBd6cPUayKaAM-fLWdSt.md @@ -0,0 +1,3 @@ +# Whisper API + +Whisper API is an interface primarily used for interacting with OpenAI's Whisper ASR system. It's a system designed to convert spoken language into written text, a technique that is commonly known as Automatic Speech Recognition (ASR). As an AI engineer, understanding and using Whisper API in the roadmap is key as it fuses with several other machine learning principles to improve an application's ability to understand and transcribe spoken language, which is becoming increasingly significant in domains like virtual assistants, transcription services, voice biometrics and more. \ No newline at end of file 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 new file mode 100644 index 000000000..086956d68 --- /dev/null +++ b/src/data/roadmaps/ai-engineer/content/writing-prompts@9-5DYeOnKJq9XvEMWP45A.md @@ -0,0 +1,3 @@ +# Writing Prompts under OpenAI API + +Writing Prompts are specific instructions or guides provided to OpenAI API to produce desired texts. They can range from simple, straight sentences intended for generating specific outputs to more complex, creative ones aiming for more open-ended, artificial intelligent responses. While the OpenAI API is capable of executing an extensive variety of tasks, how it performs is strongly influenced by how these writing prompts are crafted and constructed. During the journey to become an AI Engineer, understanding and designing effective prompts becomes vital for proper system training and interaction. \ No newline at end of file diff --git a/src/data/roadmaps/ai-engineer/faqs.astro b/src/data/roadmaps/ai-engineer/faqs.astro new file mode 100644 index 000000000..e69de29bb diff --git a/src/data/roadmaps/android/content/activity-lifecycle@FVg438cVBBzqJFkGWVbQM.md b/src/data/roadmaps/android/content/activity-lifecycle@FVg438cVBBzqJFkGWVbQM.md index db33dbc0d..e810b06e4 100644 --- a/src/data/roadmaps/android/content/activity-lifecycle@FVg438cVBBzqJFkGWVbQM.md +++ b/src/data/roadmaps/android/content/activity-lifecycle@FVg438cVBBzqJFkGWVbQM.md @@ -1,3 +1,7 @@ # Activity Lifecycle -The **Activity Lifecycle** in Android represents a series of states or events that an activity can go through from its creation to its destruction. The primary states or events are `onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`, and `onRestart()`. The method `onCreate()` is called when the activity is first created, followed by `onStart()` when the activity becomes visible to the user. The `onResume()` method executes when the user starts interacting with the application. `onPause()` and `onStop()` methods are invoked when the application is no longer in the foreground or visible to the user. The `onDestroy()` method is used when the activity is being completely removed from the memory. The `onRestart()` method is called after the system stops the activity and is about to start it again. The proper handling of these states ensures the efficient use of resources and a smooth user experience. \ No newline at end of file +The **Activity Lifecycle** in Android represents a series of states or events that an activity can go through from its creation to its destruction. The primary states or events are `onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`, and `onRestart()`. The method `onCreate()` is called when the activity is first created, followed by `onStart()` when the activity becomes visible to the user. The `onResume()` method executes when the user starts interacting with the application. `onPause()` and `onStop()` methods are invoked when the application is no longer in the foreground or visible to the user. The `onDestroy()` method is used when the activity is being completely removed from the memory. The `onRestart()` method is called after the system stops the activity and is about to start it again. The proper handling of these states ensures the efficient use of resources and a smooth user experience. + +Visit the following resources to learn more: + +- [@official@Activity Lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle) diff --git a/src/data/roadmaps/android/content/activity@nwuVlPmzwJ17mtVQ8Hi9w.md b/src/data/roadmaps/android/content/activity@nwuVlPmzwJ17mtVQ8Hi9w.md index d65af078a..b229df375 100644 --- a/src/data/roadmaps/android/content/activity@nwuVlPmzwJ17mtVQ8Hi9w.md +++ b/src/data/roadmaps/android/content/activity@nwuVlPmzwJ17mtVQ8Hi9w.md @@ -1,3 +1,8 @@ # Activity -`Activity` in Android is a crucial component that represents a single screen with a user interface. It is just like a window in a desktop application. Android apps are typically made up of one or more activities, each having its interface which allows user interaction. When an app is launched, an instance of `Activity` is created, starting the lifecycle of that app. Every activity has its own lifecycle (create, start, resume, pause, stop, destroy) that keeps the state of a user's progress, and Android manages these states automatically. Activities can also have `Intent`, which allows them to interact with other components, such as starting another activity or getting a result from that activity. \ No newline at end of file +`Activity` in Android is a crucial component that represents a single screen with a user interface. It is just like a window in a desktop application. Android apps are typically made up of one or more activities, each having its interface which allows user interaction. When an app is launched, an instance of `Activity` is created, starting the lifecycle of that app. Every activity has its own lifecycle (create, start, resume, pause, stop, destroy) that keeps the state of a user's progress, and Android manages these states automatically. Activities can also have `Intent`, which allows them to interact with other components, such as starting another activity or getting a result from that activity. + +Visit the following resources to learn more: + +- [@official@Android Activity](https://developer.android.com/reference/android/app/Activity) +- [@article@Mastering Android Activities](https://medium.com/deuk/mastering-the-android-activity-lifecycle-best-practices-1d10f15d060a) diff --git a/src/data/roadmaps/android/content/apollo-android@ww0fTbdXwVr-QIOClU7ng.md b/src/data/roadmaps/android/content/apollo-android@ww0fTbdXwVr-QIOClU7ng.md index 0c7b8304a..3fd219a7e 100644 --- a/src/data/roadmaps/android/content/apollo-android@ww0fTbdXwVr-QIOClU7ng.md +++ b/src/data/roadmaps/android/content/apollo-android@ww0fTbdXwVr-QIOClU7ng.md @@ -1,3 +1,9 @@ # Apollo-Android -**Apollo Android** is a set of tools for using GraphQL with Android, made by the Apollo community developers. It's fully written in Kotlin and it was designed to seamlessly integrate with any Android app, making fetching data across network and handling data in the client-side a breeze. Apollo Android runs your queries and mutations and returns results as generated Kotlin types. It also normalizes your data and caches your results for further speed enhancements. It operates both on Android and Kotlin/JVM backend environment. It's also coroutines-first making handling concurrency easy and effective. To use Apollo Android, you'll set up the plugin, point it at your GraphQL schema, and write GraphQL queries. \ No newline at end of file +**Apollo Android** is a set of tools for using GraphQL with Android, made by the Apollo community developers. It's fully written in Kotlin and it was designed to seamlessly integrate with any Android app, making fetching data across network and handling data in the client-side a breeze. Apollo Android runs your queries and mutations and returns results as generated Kotlin types. It also normalizes your data and caches your results for further speed enhancements. It operates both on Android and Kotlin/JVM backend environment. It's also coroutines-first making handling concurrency easy and effective. To use Apollo Android, you'll set up the plugin, point it at your GraphQL schema, and write GraphQL queries. + +Visit the following resources to learn more: + +- [@official@Apollo Android](https://www.apollographql.com/docs/kotlin/v2/) +- [@official@Apollo Docs](https://www.apollographql.com/docs/kotlin/) +- [@opensource@apollographql/apollo-kotlin - GraphQL for Android](https://github.com/apollographql/apollo-kotlin) diff --git a/src/data/roadmaps/android/content/app-components@5Li8J5iR_ZuyIlxX0LYei.md b/src/data/roadmaps/android/content/app-components@5Li8J5iR_ZuyIlxX0LYei.md index dfac9e5cd..2e3de5163 100644 --- a/src/data/roadmaps/android/content/app-components@5Li8J5iR_ZuyIlxX0LYei.md +++ b/src/data/roadmaps/android/content/app-components@5Li8J5iR_ZuyIlxX0LYei.md @@ -1,15 +1,18 @@ # App Components -Android apps are primarily made up of five different types of components: +Android apps are primarily made up of five different types of components: -1. **Activities**: These are individual screens that a user can interact with. Any UI action like touching a button or swiping a screen will usually take place within an activity. +1. **Activities**: These are individual screens that a user can interact with. Any UI action like touching a button or swiping a screen will usually take place within an activity. -2. **Services**: Unlike activities, services run in the background and don't have a user interface. They’re used for repetitive or long running operations, like playing music or pulling in a feed of data from a server. +2. **Services**: Unlike activities, services run in the background and don't have a user interface. They’re used for repetitive or long running operations, like playing music or pulling in a feed of data from a server. -3. **Broadcast Receivers**: These are event listeners. The Android operating system uses them to respond to system-wide events. +3. **Broadcast Receivers**: These are event listeners. The Android operating system uses them to respond to system-wide events. 4. **Content Providers**: They manage and share app data with other apps installed on the device. For security, data is not generally shared across apps. 5. **Intents**: These serve as messages or commands to the Android system. They're used to signal to the Android system that certain events have occurred. - -Each app component is designed to serve different purposes and to have a well-defined lifecycle which defines how the component is created and destroyed. \ No newline at end of file + +Visit the following resources to learn more: + +- [@official@App Fundamentals](https://developer.android.com/guide/components/fundamentals) +- [@article@Android App Components](https://medium.com/android-hunger/android-app-components-activities-fragments-and-intents-ed7373455555) diff --git a/src/data/roadmaps/android/content/app-shortcuts@xV475jHTlLuHtpHZeXb7P.md b/src/data/roadmaps/android/content/app-shortcuts@xV475jHTlLuHtpHZeXb7P.md index ed6877acd..7aaaea26a 100644 --- a/src/data/roadmaps/android/content/app-shortcuts@xV475jHTlLuHtpHZeXb7P.md +++ b/src/data/roadmaps/android/content/app-shortcuts@xV475jHTlLuHtpHZeXb7P.md @@ -1,3 +1,7 @@ # App Shortcuts App shortcuts in Android are designed to provide quick and convenient routes to specific actions or functions within your app from the device home screen. To use them, long-press an app's icon and a pop-up menu will appear with the available shortcuts. Depending on the app, you might be able to send a message, make a booking, navigate home, or perform some other specific task without having to first open the app and navigate to the desired function. These shortcuts can also be moved and placed individually on the home screen for even faster access. + +Visit the following resources to learn more: + +- [@official@App Shortcuts](https://developer.android.com/guide/topics/ui/shortcuts) diff --git a/src/data/roadmaps/android/content/asynchronism@cFYZ2C7yNnY6NHKUNP2Z4.md b/src/data/roadmaps/android/content/asynchronism@cFYZ2C7yNnY6NHKUNP2Z4.md index 49fe87ffe..d012eac17 100644 --- a/src/data/roadmaps/android/content/asynchronism@cFYZ2C7yNnY6NHKUNP2Z4.md +++ b/src/data/roadmaps/android/content/asynchronism@cFYZ2C7yNnY6NHKUNP2Z4.md @@ -1,3 +1,8 @@ # Asynchronism -Asynchronism in Android is a practice that defines operations, which can run independently from the main operation without following the program's linear flow. The Android system uses threads to handle asynchronous processes. These threads function independently, ensuring that complex or time-consuming operations do not interfere with the user interface or other essential parts of the application. Android provides various tools for carrying out asynchronous tasks, such as `Handler`, `ThreadPoolExecutor`, `IntentService`, `AsyncTask`, and `Loader` etc. These tools provide ways to execute tasks on different threads and communicate the results back to the main thread. \ No newline at end of file +Asynchronism in Android is a practice that defines operations, which can run independently from the main operation without following the program's linear flow. The Android system uses threads to handle asynchronous processes. These threads function independently, ensuring that complex or time-consuming operations do not interfere with the user interface or other essential parts of the application. Android provides various tools for carrying out asynchronous tasks, such as `Handler`, `ThreadPoolExecutor`, `IntentService`, `AsyncTask`, and `Loader` etc. These tools provide ways to execute tasks on different threads and communicate the results back to the main thread. + +Visit the following resources to learn more: + +- [@official@Asynchronous Tasks](https://developer.android.com/guide/background) +- [@article@Asynchronous Task Execution](https://medium.com/@cpvasani48/asynchronous-task-execution-in-android-a-guide-with-example-44732744f3b8) diff --git a/src/data/roadmaps/android/content/authentication@Xv0es_z64vh-QzivMeAT3.md b/src/data/roadmaps/android/content/authentication@Xv0es_z64vh-QzivMeAT3.md index 902d9e856..7b62962cb 100644 --- a/src/data/roadmaps/android/content/authentication@Xv0es_z64vh-QzivMeAT3.md +++ b/src/data/roadmaps/android/content/authentication@Xv0es_z64vh-QzivMeAT3.md @@ -6,4 +6,7 @@ Firebase Authentication offers two methods to authenticate. These are using an ` Firebase Authentication provides a full suite of capabilities even beyond authentication to make your life easier, which includes Security Rules for Cloud Storage and Cloud Firestore, Firebase Dynamic Links, and Firebase Invites. -Remember to always keep your development environment and Firebase console synced for smooth development operations. Any changes to the authentication method in the Firebase console should be reflected in your app and vice versa. \ No newline at end of file +Visit the following resources to learn more: + +- [@official@Firebase Authentication](https://firebase.google.com/docs/auth) +- [@official@Firebase Authentication: Android](https://firebase.google.com/docs/auth/android/start) diff --git a/src/data/roadmaps/android/content/basics-of-kotlin@jl1FsQ5-WGKeFyaILNt_p.md b/src/data/roadmaps/android/content/basics-of-kotlin@jl1FsQ5-WGKeFyaILNt_p.md index 4f9f08aa1..45a692130 100644 --- a/src/data/roadmaps/android/content/basics-of-kotlin@jl1FsQ5-WGKeFyaILNt_p.md +++ b/src/data/roadmaps/android/content/basics-of-kotlin@jl1FsQ5-WGKeFyaILNt_p.md @@ -1,3 +1,9 @@ # Basics of Kotlin -Kotlin is a statically-typed programming language that runs on the Java Virtual Machine (JVM) and can be used to develop all types of Android apps. It is Google's preferred language for Android app development. Kotlin's syntax is more concise than Java, which means less code to write and read, and fewer opportunities for errors. It provides several high-level features like lambdas, coroutines and higher order functions that help making the code more clean and understandable. Key basics of Kotlin include control flow statements (if, when, for, while), variables (mutable and non-mutable), null safety, classes and objects, inheritance, interfaces, and exception handling. While learning Kotlin, experience with Java will certainly be helpful, but it's not a prerequisite. \ No newline at end of file +Kotlin is a concise, multi-platform, and fun language developed by JetBrains. Learn how to use Kotlin for Android, server-side, and cross-platform development, and explore its features, news, and community. Kotlin is a statically-typed programming language that runs on the Java Virtual Machine (JVM) and can be used to develop all types of Android apps. It is Google's preferred language for Android app development. + +Visit the following resources to learn more: + +- [@official@Kotlin](https://kotlinlang.org/) +- [@official@Kotlin Docs](https://kotlinlang.org/docs/getting-started.html) +- [@article@Kotlin Tutorial for Beginners](https://www.w3schools.com/kotlin/index.php) diff --git a/src/data/roadmaps/android/content/basics-of-oop@j69erqfosSZMDlmKcnnn0.md b/src/data/roadmaps/android/content/basics-of-oop@j69erqfosSZMDlmKcnnn0.md index c725b8190..bda3d465c 100644 --- a/src/data/roadmaps/android/content/basics-of-oop@j69erqfosSZMDlmKcnnn0.md +++ b/src/data/roadmaps/android/content/basics-of-oop@j69erqfosSZMDlmKcnnn0.md @@ -1,3 +1,10 @@ # Basics of OOP -In Android development, understanding the `Basics of Object-Oriented Programming (OOP)` is crucial. OOP is a programming paradigm that uses "Objects" - entities that contain both data and functions that manipulate the data. Key concepts include `Classes`, which are blueprints from which objects are created; `Objects`, instances of a class; `Inheritance`, where one class acquires properties from another; `Polymorphism`, the ability of an object to take many forms; `Abstraction`, showing only necessary details and hiding implementation from the user; and `Encapsulation`, the concept of wrapping data and the methods that work on data within one unit. By understanding these fundamentals, you can create more efficient and effective Android apps. \ No newline at end of file +Understanding the `Basics of Object-Oriented Programming (OOP)` is crucial. OOP is a programming paradigm that uses "Objects" - entities that contain both data and functions that manipulate the data. + +Key concepts include `Classes`, which are blueprints from which objects are created; `Objects`, instances of a class; `Inheritance`, where one class acquires properties from another; `Polymorphism`, the ability of an object to take many forms; `Abstraction`, showing only necessary details and hiding implementation from the user; and `Encapsulation`, the concept of wrapping data and the methods that work on data within one unit. + +Visit the following resources to learn more: + +- [@official@Object-Oriented Programming - Wikipedia](https://en.wikipedia.org/wiki/Object-oriented_programming) +- [@official@OOP in Kotlin](https://developer.android.com/codelabs/basic-android-kotlin-compose-classes-and-objects) diff --git a/src/data/roadmaps/android/content/bitbucket@5LFZdUiFYYU_1sYsouyan.md b/src/data/roadmaps/android/content/bitbucket@5LFZdUiFYYU_1sYsouyan.md index b16ec0eda..42eadfdc1 100644 --- a/src/data/roadmaps/android/content/bitbucket@5LFZdUiFYYU_1sYsouyan.md +++ b/src/data/roadmaps/android/content/bitbucket@5LFZdUiFYYU_1sYsouyan.md @@ -1,3 +1,8 @@ # BitBucket -Bitbucket is a web-based hosting service that is owned by Atlassian. Bitbucket uses either Mercurial or Git revision control systems, allowing users to manage and maintain their code. This platform is mainly used for code and code review. Bitbucket provides both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts) as of September 2010. It originally offered only Mercurial support. Bitbucket integrates with other Atlassian software like JIRA, HipChat, Confluence and Bamboo. \ No newline at end of file +Bitbucket is a web-based hosting service that is owned by Atlassian. Bitbucket uses either Mercurial or Git revision control systems, allowing users to manage and maintain their code. This platform is mainly used for code and code review. Bitbucket provides both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts) as of September 2010. It originally offered only Mercurial support. Bitbucket integrates with other Atlassian software like JIRA, HipChat, Confluence and Bamboo. + +Visit the following resources to learn more: + +- [@official@Bitbucket](https://bitbucket.org/) +- [@article@Bitbucket for Developers](https://www.atlassian.com/software/bitbucket) diff --git a/src/data/roadmaps/android/content/bottom-sheet@Z4Tbd5ClnqCXGPGG09F-G.md b/src/data/roadmaps/android/content/bottom-sheet@Z4Tbd5ClnqCXGPGG09F-G.md index 077254e2b..ba0df3ca9 100644 --- a/src/data/roadmaps/android/content/bottom-sheet@Z4Tbd5ClnqCXGPGG09F-G.md +++ b/src/data/roadmaps/android/content/bottom-sheet@Z4Tbd5ClnqCXGPGG09F-G.md @@ -2,9 +2,10 @@ `Bottom sheets` are surfaces containing supplementary content that are anchored to the bottom of the screen. -There are several attributes that can be used to adjust the behavior of both standard and modal bottom sheets. +There are several attributes that can be used to adjust the behavior of both standard and modal bottom sheets. + Behavior attributes can be applied to standard bottom sheets in xml by setting them on a child View set to `app:layout_behavior` or programmatically. Visit the following resources to learn more: -- [@article@Android developers: Bottom sheets](https://developer.android.com/reference/com/google/android/material/bottomsheet/BottomSheetDialog) +- [@official@Android developers: Bottom Sheets](https://developer.android.com/reference/com/google/android/material/bottomsheet/BottomSheetDialog) diff --git a/src/data/roadmaps/android/content/broadcast-receiver@tFuAToid1Fkmu96BDtW7K.md b/src/data/roadmaps/android/content/broadcast-receiver@tFuAToid1Fkmu96BDtW7K.md index d37d278e3..6cf0e3858 100644 --- a/src/data/roadmaps/android/content/broadcast-receiver@tFuAToid1Fkmu96BDtW7K.md +++ b/src/data/roadmaps/android/content/broadcast-receiver@tFuAToid1Fkmu96BDtW7K.md @@ -1,3 +1,7 @@ # Broadcast Receiver -**Broadcast Receivers** in Android are components that respond to system-wide broadcast announcements. They can be registered to respond to a specific type of broadcasts or implement a user-defined broadcast. While you can initiate a broadcast from your app, they are generally used for receiving system notifications or communicating with other applications. However, keep in mind that they cannot display a user interface, but they can start activities if necessary, which do have a user interface. A `BroadcastReceiver` class must override the `onReceive()` method where each message is received as an `Intent` object parameter. \ No newline at end of file +**Broadcast Receivers** in Android are components that respond to system-wide broadcast announcements. They can be registered to respond to a specific type of broadcasts or implement a user-defined broadcast. While you can initiate a broadcast from your app, they are generally used for receiving system notifications or communicating with other applications. However, keep in mind that they cannot display a user interface, but they can start activities if necessary, which do have a user interface. A `BroadcastReceiver` class must override the `onReceive()` method where each message is received as an `Intent` object parameter. + +Visit the following resources to learn more: + +- [@official@Broadcast Receiver](https://developer.android.com/reference/android/content/BroadcastReceiver) diff --git a/src/data/roadmaps/android/content/builder-pattern@784fiIdKrQDlIm3VIiJQN.md b/src/data/roadmaps/android/content/builder-pattern@784fiIdKrQDlIm3VIiJQN.md index 3e0ed23af..8515fdf40 100644 --- a/src/data/roadmaps/android/content/builder-pattern@784fiIdKrQDlIm3VIiJQN.md +++ b/src/data/roadmaps/android/content/builder-pattern@784fiIdKrQDlIm3VIiJQN.md @@ -1,3 +1,8 @@ # Builder Pattern -The **Builder Pattern** in Android is used to construct complex objects step by step. It separates the construction of an object from its representation. The pattern involves a `Builder` class which is used to construct the `Product` class. The Builder class typically has a method for each part that may be used to construct a Product. It also has a method for returning the final product. The Builder pattern is useful in situations where you might have multiple ways to create an object or when an object requires a large number of parameters for its constructor. \ No newline at end of file +The **Builder Pattern** in Android is used to construct complex objects step by step. It separates the construction of an object from its representation. The pattern involves a `Builder` class which is used to construct the `Product` class. The Builder class typically has a method for each part that may be used to construct a Product. It also has a method for returning the final product. The Builder pattern is useful in situations where you might have multiple ways to create an object or when an object requires a large number of parameters for its constructor. + +Visit the following resources to learn more: + +- [@official@Builder Pattern](https://developer.android.com/kotlin/style-guide#builder-pattern) +- [@article@Android Builder Pattern](https://medium.com/kayvan-kaseb/builder-design-pattern-in-android-a38dccb75485) diff --git a/src/data/roadmaps/android/content/buttons@WhfzFOUpm0DFEj7Oeq21R.md b/src/data/roadmaps/android/content/buttons@WhfzFOUpm0DFEj7Oeq21R.md index cccceecb1..fb01c9ff6 100644 --- a/src/data/roadmaps/android/content/buttons@WhfzFOUpm0DFEj7Oeq21R.md +++ b/src/data/roadmaps/android/content/buttons@WhfzFOUpm0DFEj7Oeq21R.md @@ -2,6 +2,9 @@ A `button` consists of text or an icon, or both, that communicates what action occurs when the user taps it. +Buttons are UI widgets that allow users to interact with an application by tapping on them. A button typically consists of text, an icon, or a combination of both, and communicates what action will occur when the user taps it. + Learn more from the following resources: -- [@official@Android Developers: Button](https://developer.android.com/develop/ui/views/components/button) \ No newline at end of file +- [@official@Android Developers: Button](https://developer.android.com/develop/ui/views/components/button) +- [@official@Create a Button - Android](https://developer.android.com/quick-guides/content/create-button) diff --git a/src/data/roadmaps/android/content/chucker@7RKN1FNtRE_BE6QeAQrKb.md b/src/data/roadmaps/android/content/chucker@7RKN1FNtRE_BE6QeAQrKb.md index 1fbaebc4e..cc4987ef7 100644 --- a/src/data/roadmaps/android/content/chucker@7RKN1FNtRE_BE6QeAQrKb.md +++ b/src/data/roadmaps/android/content/chucker@7RKN1FNtRE_BE6QeAQrKb.md @@ -1,3 +1,8 @@ # Chucker -`Chucker` is an open-source debugging library created for Android applications. It has been designed to be easy to use and convenient for developers. This library intercepts and records all HTTP requests and responses inside your application, which helps to visualize and share this information in an understandable and easy-to-read format. Using Chucker's distinct features, you can inspect all the HTTP and HTTPS traffic going in and out of your app directly. In addition, it provides other nifty features such as a user-friendly interface to view the server's raw response. It's like having a built-in network inspector in your debugging tool, enabling you to solve network-related issues more efficiently. \ No newline at end of file +`Chucker` is an open-source debugging library created for Android applications. It has been designed to be easy to use and convenient for developers. This library intercepts and records all HTTP requests and responses inside your application, which helps to visualize and share this information in an understandable and easy-to-read format. Using Chucker's distinct features, you can inspect all the HTTP and HTTPS traffic going in and out of your app directly. In addition, it provides other nifty features such as a user-friendly interface to view the server's raw response. It's like having a built-in network inspector in your debugging tool, enabling you to solve network-related issues more efficiently. + +Visit the following resources to learn more: + +- [@opensource@ChuckerTeam/chucker - Chucker On GitHub](https://github.com/ChuckerTeam/chucker) +- [@article@Network Traffic Inspection with Chucker](https://medium.com/tech-takeaways/simple-android-network-traffic-inspection-with-chucker-and-seismic-1e6162c51f64) diff --git a/src/data/roadmaps/android/content/cloud-messaging@e3vHFaFFMV7kI9q6yf5e9.md b/src/data/roadmaps/android/content/cloud-messaging@e3vHFaFFMV7kI9q6yf5e9.md index 50ef1a13c..dcecd6f72 100644 --- a/src/data/roadmaps/android/content/cloud-messaging@e3vHFaFFMV7kI9q6yf5e9.md +++ b/src/data/roadmaps/android/content/cloud-messaging@e3vHFaFFMV7kI9q6yf5e9.md @@ -5,4 +5,4 @@ Firebase Cloud Messaging (FCM) is a powerful, battery-efficient messaging servic Visit the following resources to learn more: - [@official@Documentation](https://firebase.google.com/docs/cloud-messaging/android/client) -- [@video@Firebase Cloud Messaging](https://www.youtube.com/watch?v=sioEY4tWmLI&list=PLl-K7zZEsYLkuHRCtHTpi6JYHka8oHLft) +- [@video@Firebase Cloud Messaging](https://www.youtube.com/watch?v=sioEY4tWmLI&list=PLl-K7zZEsYLkuHRCtHTpi6JYHka8oHLft) diff --git a/src/data/roadmaps/android/content/common-services@ZEdn2yy-IwHN3kOYr2ZbC.md b/src/data/roadmaps/android/content/common-services@ZEdn2yy-IwHN3kOYr2ZbC.md index 31d6f0af5..b87f0a94a 100644 --- a/src/data/roadmaps/android/content/common-services@ZEdn2yy-IwHN3kOYr2ZbC.md +++ b/src/data/roadmaps/android/content/common-services@ZEdn2yy-IwHN3kOYr2ZbC.md @@ -1,3 +1,7 @@ # Common Services -In Android, "Common Services" are functional units or components provided by the Android system for use by developers. These services include things such as Location Services (used to determine the device's geographical location), Notification Services (handles the display and management of user notifications), and Sensor Services (interacts with hardware sensors). Other common services are Network and Connectivity Services, Account Manager, and Data Storage Services among others. They simplify the development process by handling complex functionalities behind the scenes, allowing developers to focus on the application's specific needs. \ No newline at end of file +Common Services are functional units or components provided by the Android system for use by developers. These services include things such as Location Services (used to determine the device's geographical location), Notification Services (handles the display and management of user notifications), and Sensor Services (interacts with hardware sensors). Other common services are Network and Connectivity Services, Account Manager, and Data Storage Services among others. They simplify the development process by handling complex functionalities behind the scenes, allowing developers to focus on the application's specific needs. + +Visit the following resources to learn more: + +- [@official@Common Services](https://developer.android.com/guide/components/services) diff --git a/src/data/roadmaps/android/content/constraint@3fFNMhQIuuh-NRzSXYpXO.md b/src/data/roadmaps/android/content/constraint@3fFNMhQIuuh-NRzSXYpXO.md index dbf4c9fc6..a69fe8a8e 100644 --- a/src/data/roadmaps/android/content/constraint@3fFNMhQIuuh-NRzSXYpXO.md +++ b/src/data/roadmaps/android/content/constraint@3fFNMhQIuuh-NRzSXYpXO.md @@ -4,5 +4,5 @@ Lets you create large, complex layouts with a flat view hierarchy—no nested vi Visit the following resources to learn more: -- [@official@Android developers: ConstraintLayout in xml](https://developer.android.com/develop/ui/views/layout/constraint-layout) -- [@official@Android developers: ContraintLayout in compose](https://developer.android.com/develop/ui/compose/layouts/constraintlayout) +- [@official@Android: ConstraintLayout in XML](https://developer.android.com/develop/ui/views/layout/constraint-layout) +- [@official@Android: ConstraintLayout in Compose](https://developer.android.com/develop/ui/compose/layouts/constraintlayout) diff --git a/src/data/roadmaps/android/content/content-provider@nkcdjrswv0WCzUs48BAt9.md b/src/data/roadmaps/android/content/content-provider@nkcdjrswv0WCzUs48BAt9.md index 6b6e31539..90866c89c 100644 --- a/src/data/roadmaps/android/content/content-provider@nkcdjrswv0WCzUs48BAt9.md +++ b/src/data/roadmaps/android/content/content-provider@nkcdjrswv0WCzUs48BAt9.md @@ -1,3 +1,7 @@ # Content Provider -A **Content Provider** in Android is a key component that allows applications to securely share data with other applications. They act as a layer between databases and applications to enhance data security. Content providers manage access to a structured set of data by handling data transactions, implementing data security, and maintaining isolation between applications. They provide an abstracted interface which is used to access data, while the underlying storage method (Like SQLite database, web, or any other method) remains hidden. This mechanism aids in retrieving data from a non-relational source in a structured way. They're used primarily when data needs to be shared between multiple applications, not just within a single application. \ No newline at end of file +A **Content Provider** in Android is a key component that allows applications to securely share data with other applications. They act as a layer between databases and applications to enhance data security. Content providers manage access to a structured set of data by handling data transactions, implementing data security, and maintaining isolation between applications. They provide an abstracted interface which is used to access data, while the underlying storage method (Like SQLite database, web, or any other method) remains hidden. This mechanism aids in retrieving data from a non-relational source in a structured way. They're used primarily when data needs to be shared between multiple applications, not just within a single application. + +Visit the following resources to learn more: + +- [@official@Content Provider](https://developer.android.com/guide/topics/providers/content-providers) diff --git a/src/data/roadmaps/android/content/coroutines@i_cKmTnGAYw8xpHwZHjAd.md b/src/data/roadmaps/android/content/coroutines@i_cKmTnGAYw8xpHwZHjAd.md index 707afd52c..2204192a5 100644 --- a/src/data/roadmaps/android/content/coroutines@i_cKmTnGAYw8xpHwZHjAd.md +++ b/src/data/roadmaps/android/content/coroutines@i_cKmTnGAYw8xpHwZHjAd.md @@ -1,3 +1,7 @@ # Coroutines -In Android, `coroutines` refer to a concurrency design pattern that you can use on Android to simplify code that executes asynchronously. `Coroutines` provide a way to write asynchronous, non-blocking code in a natural, sequential manner. The fundamental building blocks of `coroutines` are `suspend` functions which are simply functions that can be paused and resumed at later times. They are the key to writing non-blocking asynchronous code and represent a single unit of asynchronous computation. This aspect of `coroutines` makes them useful for managing long-running tasks that might otherwise block the main thread and cause your application to become unresponsive. \ No newline at end of file +`Coroutines` refer to a concurrency design pattern that you can use on Android to simplify code that executes asynchronously. `Coroutines` provide a way to write asynchronous, non-blocking code in a natural, sequential manner. The fundamental building blocks of `coroutines` are `suspend` functions which are simply functions that can be paused and resumed at later times. They are the key to writing non-blocking asynchronous code and represent a single unit of asynchronous computation. This aspect of `coroutines` makes them useful for managing long-running tasks that might otherwise block the main thread and cause your application to become unresponsive. + +Visit the following resources to learn more: + +- [@official@Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) diff --git a/src/data/roadmaps/android/content/crashlytics@xB4evbD07n1VrHOIpowV4.md b/src/data/roadmaps/android/content/crashlytics@xB4evbD07n1VrHOIpowV4.md index 55897fdf4..8bf162237 100644 --- a/src/data/roadmaps/android/content/crashlytics@xB4evbD07n1VrHOIpowV4.md +++ b/src/data/roadmaps/android/content/crashlytics@xB4evbD07n1VrHOIpowV4.md @@ -4,5 +4,5 @@ Visit the following resources to learn more: -- [@official@Documentation](https://firebase.google.com/docs/crashlytics/get-started?platform=android) +- [@official@Crashlytics Documentation](https://firebase.google.com/docs/crashlytics/get-started?platform=android) - [@video@Firebase: Crashlytics](https://www.youtube.com/watch?v=LhjTAkifr6g) diff --git a/src/data/roadmaps/android/content/create-a-basic-hello-world-app@5m_7DvInF8C_4Ml1xVI6L.md b/src/data/roadmaps/android/content/create-a-basic-hello-world-app@5m_7DvInF8C_4Ml1xVI6L.md index 8b45ef80c..292f9fe28 100644 --- a/src/data/roadmaps/android/content/create-a-basic-hello-world-app@5m_7DvInF8C_4Ml1xVI6L.md +++ b/src/data/roadmaps/android/content/create-a-basic-hello-world-app@5m_7DvInF8C_4Ml1xVI6L.md @@ -1,6 +1,7 @@ -# Create a basic Hello World App +# Create a Hello World App The "Hello World" app is a simple project that you can build when you're getting started with Android development. It's often the first program that beginners learn to build in a new system. It's usually considered the simplest form of program that displays a message to the user - "Hello, World!" In Android, this involves creating a new project from the Android Studio and setting up the main activity. The main activity file is primarily written in Java or Kotlin where you can code for the display message, while the layout design view can be created in the XML file. -Resources: -- [@article@Create your first android app](https://developer.android.com/codelabs/basic-android-kotlin-compose-first-app) +Visit the follow resources to learn more: + +- [@official@Create Your First Android Application](https://developer.android.com/codelabs/basic-android-kotlin-compose-first-app) diff --git a/src/data/roadmaps/android/content/dagger@CK7Ce632fdTgxeFsRUVvd.md b/src/data/roadmaps/android/content/dagger@CK7Ce632fdTgxeFsRUVvd.md index e13a3b2f7..8c5556615 100644 --- a/src/data/roadmaps/android/content/dagger@CK7Ce632fdTgxeFsRUVvd.md +++ b/src/data/roadmaps/android/content/dagger@CK7Ce632fdTgxeFsRUVvd.md @@ -1,3 +1,7 @@ # Dagger -[Dagger](https://dagger.dev/) is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation of an earlier version created by Square that's focused on simplicity and speed. Dagger's primary focus is on compile-time analysis of dependencies, code simplicity, and clarity. It uses annotations to define dependencies, thus aiding in easy readability and understanding of the code. Dagger also eliminates the use of reflection to inject dependencies, thus boosting performance. It offers custom scopes to control the lifespan of instances and ensures that dependencies are Singleton across the entire lifespan of certain scopes. \ No newline at end of file +Dagger is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation of an earlier version created by Square that's focused on simplicity and speed. Dagger's primary focus is on compile-time analysis of dependencies, code simplicity, and clarity. It uses annotations to define dependencies, thus aiding in easy readability and understanding of the code. Dagger also eliminates the use of reflection to inject dependencies, thus boosting performance. It offers custom scopes to control the lifespan of instances and ensures that dependencies are Singleton across the entire lifespan of certain scopes. + +Visit the following resources to learn more: + +- [@official@Dagger](https://dagger.dev/) diff --git a/src/data/roadmaps/android/content/data-structures-and-algorithms@cNeT1dJDfgn0ndPzSxhSL.md b/src/data/roadmaps/android/content/data-structures-and-algorithms@cNeT1dJDfgn0ndPzSxhSL.md index 84fb30122..5f0951af0 100644 --- a/src/data/roadmaps/android/content/data-structures-and-algorithms@cNeT1dJDfgn0ndPzSxhSL.md +++ b/src/data/roadmaps/android/content/data-structures-and-algorithms@cNeT1dJDfgn0ndPzSxhSL.md @@ -1,5 +1,9 @@ # DataStructures and Algorithms -In Android, **data structures** are primarily used to collect, organize and perform operations on the stored data more effectively. They are essential for designing advanced-level Android applications. Examples include Array, Linked List, Stack, Queue, Hash Map, and Tree. +**Data Structures** are primarily used to collect, organize and perform operations on the stored data more effectively. They are essential for designing advanced-level Android applications. Examples include Array, Linked List, Stack, Queue, Hash Map, and Tree. -Meanwhile, **algorithms** are a sequence of instructions or rules for performing a particular task. In Android, algorithms can be used for data searching, sorting, or performing complex business logic. Some commonly used algorithms are Binary Search, Bubble Sort, Selection Sort, etc. A deep understanding of data structures and algorithms is crucial in optimizing the performance and the memory consumption of the Android applications. \ No newline at end of file +**Algorithms** are a sequence of instructions or rules for performing a particular task. In Android, algorithms can be used for data searching, sorting, or performing complex business logic. Some commonly used algorithms are Binary Search, Bubble Sort, Selection Sort, etc. A deep understanding of data structures and algorithms is crucial in optimizing the performance and the memory consumption of the Android applications. + +Visit the following resources to learn more: + +- [@article@Data Structures and Algorithms in Android](https://medium.com/@pranamsharma.1997/importance-of-data-structure-and-algorithms-in-android-app-development-75eed9f73909) diff --git a/src/data/roadmaps/android/content/debugging@6KbSUAoT_jTudFoIbwMpA.md b/src/data/roadmaps/android/content/debugging@6KbSUAoT_jTudFoIbwMpA.md index 55f486b1b..5af631057 100644 --- a/src/data/roadmaps/android/content/debugging@6KbSUAoT_jTudFoIbwMpA.md +++ b/src/data/roadmaps/android/content/debugging@6KbSUAoT_jTudFoIbwMpA.md @@ -1,3 +1,7 @@ # Debugging -"Debugging" is a critical step in the app development process. In Android development, it includes identifying and fixing errors, or bugs, in your code. You can debug Android apps using several tools and techniques. For example, Android Studio, the primary integrated development environment (IDE) for Android, comes with a built-in debugging tool, the Android Debug Bridge (ADB). This command-line tool allows you to communicate your device and perform various actions like installing and debugging apps. Android Studio also supports step-by-step debugging, where you can set breakpoints in your code and inspect the application state at those points. Additionally, you can use log messages to monitor the behavior of your application, which is especially useful for understanding the state of your app during runtime. Remember that before debugging, you need to build your app in debug mode. \ No newline at end of file +Debugging is a critical step in the app development process. In Android development, it includes identifying and fixing errors, or bugs, in your code. You can debug Android apps using several tools and techniques. For example, Android Studio, the primary integrated development environment (IDE) for Android, comes with a built-in debugging tool, the Android Debug Bridge (ADB). This command-line tool allows you to communicate your device and perform various actions like installing and debugging apps. Android Studio also supports step-by-step debugging, where you can set breakpoints in your code and inspect the application state at those points. + +Visit the following resources to learn more: + +- [@official@Debugging](https://developer.android.com/studio/debug) diff --git a/src/data/roadmaps/android/content/dependency-injection@qtXM9K7wyjOFuEMlZrB3C.md b/src/data/roadmaps/android/content/dependency-injection@qtXM9K7wyjOFuEMlZrB3C.md index 246ec9587..ef5bba3ce 100644 --- a/src/data/roadmaps/android/content/dependency-injection@qtXM9K7wyjOFuEMlZrB3C.md +++ b/src/data/roadmaps/android/content/dependency-injection@qtXM9K7wyjOFuEMlZrB3C.md @@ -1,3 +1,7 @@ # Dependency Injection -`Dependency Injection` is a technique where an object does not need to create its own dependencies; instead, dependencies are provided (or injected) at runtime. This technique is highly beneficial in Android Development. It helps in creating loosely coupled and easily testable code. For example, the `Retrofit` instance that your application requires to make network calls can be created somewhere else and can be injected whenever required using libraries like `Dagger`, `Koin` or `Hilt`. The `ViewModel` instances can also be injected rather than being created in the required classes directly. Through dependency injection, plugins ensure the code becomes easier to change, understand, and maintain, hence, improving the quality of the code. \ No newline at end of file +`Dependency Injection` is a technique where an object does not need to create its own dependencies; instead, dependencies are provided (or injected) at runtime. This technique is highly beneficial in Android Development. It helps in creating loosely coupled and easily testable code. For example, the `Retrofit` instance that your application requires to make network calls can be created somewhere else and can be injected whenever required using libraries like `Dagger`, `Koin` or `Hilt`. The `ViewModel` instances can also be injected rather than being created in the required classes directly. Through dependency injection, plugins ensure the code becomes easier to change, understand, and maintain, hence, improving the quality of the code. + +Visit the following resources to learn more: + +- [@official@Dependency Injection](https://developer.android.com/training/dependency-injection) diff --git a/src/data/roadmaps/android/content/design--architecture@jePGzTejFe4ryA5qFFmjl.md b/src/data/roadmaps/android/content/design--architecture@jePGzTejFe4ryA5qFFmjl.md index 1fdb41f54..31c652461 100644 --- a/src/data/roadmaps/android/content/design--architecture@jePGzTejFe4ryA5qFFmjl.md +++ b/src/data/roadmaps/android/content/design--architecture@jePGzTejFe4ryA5qFFmjl.md @@ -1,3 +1,11 @@ # Architecture and Design Patterns -In Android, **Design Architecture** refers to structuring the code in a way that increases its readability, maintainability, and testability. There are several ways to design architecture like [Model-View-Controller (MVC)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller), [Model-View-Presenter (MVP)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter), [Model-View-ViewModel (MVVM)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel), and [Model-View-Intent (MVI)](https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started). Each of these define the interaction between the data, the logic, and the UI layers. Google’s recommended architectural pattern is [Android Architecture Components](https://developer.android.com/topic/libraries/architecture) which follow the principles of the MVVM pattern. Bear in mind that an architecture is not a rigid structure that fits all solutions. Rather, it serves as a guideline and can be tweaked as necessary. \ No newline at end of file +**Design Architecture** refers to structuring the code in a way that increases its readability, maintainability, and testability. There are several ways to design architecture like Model-View-Controller (MVC), Model-View-Intent (MVI). Each of these define the interaction between the data, the logic, and the UI layers. Google’s recommended architectural pattern is Android Architecture Components which follow the principles of the MVVM pattern. Bear in mind that an architecture is not a rigid structure that fits all solutions. Rather, it serves as a guideline and can be tweaked as necessary. + +Visit the following resources to learn more: + +- [@official@Android Architecture Components](https://developer.android.com/topic/libraries/architecture) +- [@article@Model-View-Controller (MVC)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) +- [@article@Model-View-Presenter (MVP)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter) +- [@article@Model-View-ViewModel (MVVM)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel) +- [@article@Model-View-Intent (MVI)](https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started) diff --git a/src/data/roadmaps/android/content/detekt@RUvuCp_JK5MQQT13SSHUV.md b/src/data/roadmaps/android/content/detekt@RUvuCp_JK5MQQT13SSHUV.md index 4177bafce..b96da19ac 100644 --- a/src/data/roadmaps/android/content/detekt@RUvuCp_JK5MQQT13SSHUV.md +++ b/src/data/roadmaps/android/content/detekt@RUvuCp_JK5MQQT13SSHUV.md @@ -1,3 +1,8 @@ # Detekt -`Detekt` is a static code analysis tool for the Kotlin programming language. It operates on the abstract syntax tree provided by the Kotlin compiler and can run in the command line or as a task in your Gradle build script. Detekt provides complexity reports that can be used to identify overly complex code and help simplify it. It also checks for a variety of potential bugs and code smells, including issues with formatting, naming conventions, exception handling, and more. Moreover, Detekt is highly configurable, allowing you to enable, disable, or modify the behavior of its checks to suit your project's needs. \ No newline at end of file +`Detekt` is a static code analysis tool for the Kotlin programming language. It operates on the abstract syntax tree provided by the Kotlin compiler and can run in the command line or as a task in your Gradle build script. Detekt provides complexity reports that can be used to identify overly complex code and help simplify it. It also checks for a variety of potential bugs and code smells, including issues with formatting, naming conventions, exception handling, and more. Moreover, Detekt is highly configurable, allowing you to enable, disable, or modify the behavior of its checks to suit your project's needs. + +Visit the following resources to learn more: + +- [@official@Detekt](https://detekt.dev/) +- [@opensource@Detekt: Static Code Analysis for Kotlin](https://github.com/detekt/detekt) diff --git a/src/data/roadmaps/android/content/development-ide@ZRGsokU313Ky-anWbWK6q.md b/src/data/roadmaps/android/content/development-ide@ZRGsokU313Ky-anWbWK6q.md index 7216eb3f9..753e62698 100644 --- a/src/data/roadmaps/android/content/development-ide@ZRGsokU313Ky-anWbWK6q.md +++ b/src/data/roadmaps/android/content/development-ide@ZRGsokU313Ky-anWbWK6q.md @@ -1,3 +1,9 @@ # Development IDE -"Development IDE" refers to Development Integrated Development Environment that is vital for Android App development. For Android, the primary IDE is **Android Studio**. This official IDE from Google includes everything you need to build an Android app, such as a code editor, code analysis tools, emulators for all of Android's supported OS versions and hardware configurations, and more. Other popular IDEs include **Eclipse** (with an Android Developer Tools plugin), **NetBeans**, and **IntelliJ IDEA**. Each of these IDEs tends to have its own set of specialized features, but all are designed to provide the tools and services needed for Android development. The choice of IDE often depends on the specific needs and preferences of the developer or development team. \ No newline at end of file +Development IDE refers to Development Integrated Development Environment that is vital for Android App development. For Android, the primary IDE is **Android Studio**. This official IDE from Google includes everything you need to build an Android app, such as a code editor, code analysis tools, emulators for all of Android's supported OS versions and hardware configurations, and more. Other popular IDEs include **Eclipse** (with an Android Developer Tools plugin), **NetBeans**, and **IntelliJ IDEA**. Each of these IDEs tends to have its own set of specialized features, but all are designed to provide the tools and services needed for Android development. The choice of IDE often depends on the specific needs and preferences of the developer or development team. + +Visit the following resources to learn more: + +- [@official@Android Studio](https://developer.android.com/studio) +- [@official@Android Studio Documentation](https://developer.android.com/studio/intro) +- [@official@Android Studio Plugins](https://developer.android.com/studio/intro/studio-plugins) diff --git a/src/data/roadmaps/android/content/dialogs@Mtx0bY0drmaTw8sCM5YTl.md b/src/data/roadmaps/android/content/dialogs@Mtx0bY0drmaTw8sCM5YTl.md index 3af8d6b64..07519feb5 100644 --- a/src/data/roadmaps/android/content/dialogs@Mtx0bY0drmaTw8sCM5YTl.md +++ b/src/data/roadmaps/android/content/dialogs@Mtx0bY0drmaTw8sCM5YTl.md @@ -3,4 +3,4 @@ A `DialogFragment` is a special fragment subclass that is designed for creating and hosting dialogs. Although you don't need to host your **dialog** within a fragment, doing so lets the `FragmentManager` manage the state of the dialog and automatically restore the dialog when a configuration change occurs. Learn more from the following resources: -- [@official@Android Developers: Dialogs](https://developer.android.com/guide/fragments/dialogs) \ No newline at end of file +- [@official@Android Developers: Dialogs](https://developer.android.com/guide/fragments/dialogs) diff --git a/src/data/roadmaps/android/content/distribution@kc6buUsLAeZeUb4Tk0apM.md b/src/data/roadmaps/android/content/distribution@kc6buUsLAeZeUb4Tk0apM.md index 95ab195d1..67318517c 100644 --- a/src/data/roadmaps/android/content/distribution@kc6buUsLAeZeUb4Tk0apM.md +++ b/src/data/roadmaps/android/content/distribution@kc6buUsLAeZeUb4Tk0apM.md @@ -1,3 +1,7 @@ # Distribution -Distribution in Android refers to the methods and channels you can use to get your Android application into the hands of users. You can choose to distribute your app on the Google Play Store, which is the official app store for the Android operating system. This platform makes your app available to users in various countries around the world. Additionally, you can also opt to distribute your app through other third-party app stores or even your own website. Furthermore, Google provides a range of distribution options such as country targeting, device targeting, and staged rollouts, which can be customized according to your distribution strategy. Remember, when you submit your application for distribution, you must adhere to the respective app store's policy and content guidelines. \ No newline at end of file +Distribution in Android refers to the methods and channels you can use to get your Android application into the hands of users. You can choose to distribute your app on the Google Play Store, which is the official app store for the Android operating system. This platform makes your app available to users in various countries around the world. Additionally, you can also opt to distribute your app through other third-party app stores or even your own website. Furthermore, Google provides a range of distribution options such as country targeting, device targeting, and staged roll-outs, which can be customized according to your distribution strategy. Remember, when you submit your application for distribution, you must adhere to the respective app store's policy and content guidelines. + +Visit the following resources to learn more: + +- [@official@Google Play Developer Distribution](https://developer.android.com/distribute) diff --git a/src/data/roadmaps/android/content/edittext@boMz0HZlMAsLdCZlpUo-H.md b/src/data/roadmaps/android/content/edittext@boMz0HZlMAsLdCZlpUo-H.md index da30afbd5..20d197fa9 100644 --- a/src/data/roadmaps/android/content/edittext@boMz0HZlMAsLdCZlpUo-H.md +++ b/src/data/roadmaps/android/content/edittext@boMz0HZlMAsLdCZlpUo-H.md @@ -4,4 +4,4 @@ Visit the following resources to learn more: -- [@official@Android developers: EditText](https://developer.android.com/reference/android/widget/EditText) \ No newline at end of file +- [@official@Android developers: EditText](https://developer.android.com/reference/android/widget/EditText) diff --git a/src/data/roadmaps/android/content/espresso@-ONSC-ImGSELbamKmjIlH.md b/src/data/roadmaps/android/content/espresso@-ONSC-ImGSELbamKmjIlH.md index b2bcf3745..fc85e4920 100644 --- a/src/data/roadmaps/android/content/espresso@-ONSC-ImGSELbamKmjIlH.md +++ b/src/data/roadmaps/android/content/espresso@-ONSC-ImGSELbamKmjIlH.md @@ -1,3 +1,7 @@ # Espresso -Espresso is a testing framework provided by Android to create UI tests for Android applications. It automatically synchronizes your test actions with the UI of your application, ensuring that your test will only proceed when the necessary UI activities have been completed. In Espresso, you can programmatically simulate user interactions like clicking buttons, typing text, or swiping screens, and then examine the UI's state to confirm it's as expected. Espresso tests can run on devices running Android 4.3 (API level 18) or higher. It's important to note that Espresso tests are written based on what the user can see on the screen. \ No newline at end of file +Espresso is a testing framework provided by Android to create UI tests for Android applications. It automatically synchronizes your test actions with the UI of your application, ensuring that your test will only proceed when the necessary UI activities have been completed. In Espresso, you can programmatically simulate user interactions like clicking buttons, typing text, or swiping screens, and then examine the UI's state to confirm it's as expected. Espresso tests can run on devices running Android 4.3 (API level 18) or higher. + +Visit the following resources to learn more: + +- [@official@Espresso](https://developer.android.com/training/testing/espresso) diff --git a/src/data/roadmaps/android/content/explicit-intents@TmIeCF3xVCe5Sy3ITmM31.md b/src/data/roadmaps/android/content/explicit-intents@TmIeCF3xVCe5Sy3ITmM31.md index 9554ef009..7dbf60ce2 100644 --- a/src/data/roadmaps/android/content/explicit-intents@TmIeCF3xVCe5Sy3ITmM31.md +++ b/src/data/roadmaps/android/content/explicit-intents@TmIeCF3xVCe5Sy3ITmM31.md @@ -1,3 +1,7 @@ # Explicit Intents -**Explicit Intents** are primarily used within an application's own boundaries. In explicit intents you specify the component that needs to be responded to the intent. Therefore, the target component must be specified by calling methods such as `setComponent(ComponentName)`, `setClass(Context, Class)`, or `setClassName(String, String)`. This means that explicit intents are typically used for launching activities, broadcasting messages, starting services within the app. Explicit intents are not resolved by the system but are passed to the component identified in the intent. \ No newline at end of file +**Explicit Intents** are primarily used within an application's own boundaries. In explicit intents you specify the component that needs to be responded to the intent. Therefore, the target component must be specified by calling methods such as `setComponent(ComponentName)`, `setClass(Context, Class)`, or `setClassName(String, String)`. This means that explicit intents are typically used for launching activities, broadcasting messages, starting services within the app. Explicit intents are not resolved by the system but are passed to the component identified in the intent. + +Visit the following resources to learn more: + +- [@official@Explicit Intents](https://developer.android.com/guide/components/intents-filters#explicit) diff --git a/src/data/roadmaps/android/content/factory-pattern@DeOxj6RzQBYfEWV-M1Ybm.md b/src/data/roadmaps/android/content/factory-pattern@DeOxj6RzQBYfEWV-M1Ybm.md index 04961ebd1..501bbf63e 100644 --- a/src/data/roadmaps/android/content/factory-pattern@DeOxj6RzQBYfEWV-M1Ybm.md +++ b/src/data/roadmaps/android/content/factory-pattern@DeOxj6RzQBYfEWV-M1Ybm.md @@ -34,4 +34,7 @@ public class AnimalFactory { } } ``` -In the code above, `AnimalFactory` is the factory class responsible to create and return instances of `Dog` and `Cat` classes. \ No newline at end of file + +Visit the following resources to learn more: + +- [@official@Android: Factory Pattern](https://developer.android.com/guide/components/intents-filters#factory) diff --git a/src/data/roadmaps/android/content/file-system@A4kdaj6AFueUgPI7hwKi5.md b/src/data/roadmaps/android/content/file-system@A4kdaj6AFueUgPI7hwKi5.md index 72ab0f3f9..2efb6c4ae 100644 --- a/src/data/roadmaps/android/content/file-system@A4kdaj6AFueUgPI7hwKi5.md +++ b/src/data/roadmaps/android/content/file-system@A4kdaj6AFueUgPI7hwKi5.md @@ -1,3 +1,8 @@ # File System -The Android operating system uses a specific File System structure to store and manage files. It’s primarily based on the Linux File system, with some specific Android features. The File System includes several key directories that are used for specific purposes. For instance, directories such as `/system` hold system apps and firmware, while `/data` contains user data, settings and installed applications, and `/sdcard` usually represents an internal or external SD card for additional storage. It's worth mentioning directories like `/proc`, `/dev`, and `/sys` which are virtual file systems and house important system files. As an Android developer, understanding these directories can help you interact with Android's file system more effectively. Note that access to some of these directories may be restricted depending on system permissions. \ No newline at end of file +The Android operating system uses a specific File System structure to store and manage files. It’s primarily based on the Linux File system, with some specific Android features. The File System includes several key directories that are used for specific purposes. For instance, directories such as `/system` hold system apps and firmware, while `/data` contains user data, settings and installed applications, and `/sdcard` usually represents an internal or external SD card for additional storage. It's worth mentioning directories like `/proc`, `/dev`, and `/sys` which are virtual file systems and house important system files. As an Android developer, understanding these directories can help you interact with Android's file system more effectively. Note that access to some of these directories may be restricted depending on system permissions. + +Visit the following resources to learn more: + +- [@official@Android File System](https://developer.android.com/training/data-storage/) +- [@article@Android File System](https://www.androidauthority.com/android-file-system-1010817/) diff --git a/src/data/roadmaps/android/content/firebase-distribution@T7q_quNaIAuGi96OdnDT1.md b/src/data/roadmaps/android/content/firebase-distribution@T7q_quNaIAuGi96OdnDT1.md index a3c7b99ef..098beb143 100644 --- a/src/data/roadmaps/android/content/firebase-distribution@T7q_quNaIAuGi96OdnDT1.md +++ b/src/data/roadmaps/android/content/firebase-distribution@T7q_quNaIAuGi96OdnDT1.md @@ -1,3 +1,7 @@ # Firebase Distribution -Firebase Distribution is a development tool within the Google Firebase suite that allows you to share pre-release versions of your Android apps with your development team. It enables you to distribute your app binaries to multiple testers and teams to get feedback before the app's official launch. Firebase Distribution supports both Android and iOS applications and works in tandem with other features, like Firebase Crashlytics, to effectively manage the testing and debugging aspects of your application's lifecycle. \ No newline at end of file +Firebase Distribution is a development tool within the Google Firebase suite that allows you to share pre-release versions of your Android apps with your development team. It enables you to distribute your app binaries to multiple testers and teams to get feedback before the app's official launch. Firebase Distribution supports both Android and iOS applications and works in tandem with other features, like Firebase Crashlytics, to effectively manage the testing and debugging aspects of your application's lifecycle. + +Visit the following resources to learn more: + +- [@official@Firebase Distribution](https://firebase.google.com/docs/app-distribution) diff --git a/src/data/roadmaps/android/content/firestore@3EEfKAd-ppIQpdQSEhbA1.md b/src/data/roadmaps/android/content/firestore@3EEfKAd-ppIQpdQSEhbA1.md index f91f445c0..f3eb11b20 100644 --- a/src/data/roadmaps/android/content/firestore@3EEfKAd-ppIQpdQSEhbA1.md +++ b/src/data/roadmaps/android/content/firestore@3EEfKAd-ppIQpdQSEhbA1.md @@ -1,3 +1,7 @@ # FireStore -Firestore, often referred to as Firebase Firestore or Cloud Firestore, is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud. Firestore comes with features like expressive querying, real-time updates, and automatic multi-region data replication. It is designed to offer seamless integration with other Firebase and Google Cloud products. It provides a cloud-based NoSQL database, which means the data is stored as collections of documents. Each document, in turn, contains a set of key-value pairs. Firestore ensures durable networking, so data syncs across client apps in real-time, even when the device is offline, making it easier for you to work with distributed data that can be kept in sync across various clients. \ No newline at end of file +Firestore, often referred to as Firebase Firestore or Cloud Firestore, is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud. Firestore comes with features like expressive querying, real-time updates, and automatic multi-region data replication. It is designed to offer seamless integration with other Firebase and Google Cloud products. It provides a cloud-based NoSQL database, which means the data is stored as collections of documents. Each document, in turn, contains a set of key-value pairs. Firestore ensures durable networking, so data syncs across client apps in real-time, even when the device is offline, making it easier for you to work with distributed data that can be kept in sync across various clients. + +Visit the following resources to learn more: + +- [@official@Firestore](https://firebase.google.com/docs/firestore) diff --git a/src/data/roadmaps/android/content/flow@W-WTIiQml8dLK6i_V69JK.md b/src/data/roadmaps/android/content/flow@W-WTIiQml8dLK6i_V69JK.md index 5d51234cd..3ad61dffb 100644 --- a/src/data/roadmaps/android/content/flow@W-WTIiQml8dLK6i_V69JK.md +++ b/src/data/roadmaps/android/content/flow@W-WTIiQml8dLK6i_V69JK.md @@ -1,3 +1,8 @@ # Flow -`Flow` in Android development is part of the Kotlin Coroutines library. It is a type that can emit multiple values sequentially, making it perfect for working with any data streams or any streams of events that aren't instantaneous. Like Observables, `Flow` is also based on the observer pattern, meaning it can emit values and these emissions can be observed and reacted to. However, `Flow` comes with built-in backpressure handling and the ability to transform, filter, or combine these flows in a sequence. Along with Coroutines, `Flow` encourages a more predictable and simplified concurrency design without callback hell problem. \ No newline at end of file +`Flow` in Android development is part of the Kotlin Coroutines library. It is a type that can emit multiple values sequentially, making it perfect for working with any data streams or any streams of events that aren't instantaneous. Like Observables, `Flow` is also based on the observer pattern, meaning it can emit values and these emissions can be observed and reacted to. However, `Flow` comes with built-in back pressure handling and the ability to transform, filter, or combine these flows in a sequence. Along with Coroutines, `Flow` encourages a more predictable and simplified concurrency design without callback hell problem. + +Visit the following resources to learn more: + +- [@official@Flow](https://kotlinlang.org/docs/flow.html) +- [@official@Flow: Coroutines](https://kotlinlang.org/docs/flow-coroutines.html) diff --git a/src/data/roadmaps/android/content/fragments@2iDJrxjXOt7o2fPp2HfRl.md b/src/data/roadmaps/android/content/fragments@2iDJrxjXOt7o2fPp2HfRl.md index 564e732f2..f6b8737e2 100644 --- a/src/data/roadmaps/android/content/fragments@2iDJrxjXOt7o2fPp2HfRl.md +++ b/src/data/roadmaps/android/content/fragments@2iDJrxjXOt7o2fPp2HfRl.md @@ -4,4 +4,4 @@ A `Fragment` represents a reusable portion of your app's UI. A fragment defines Visit the following resources to learn more: -- [@official@Android Developers: Fragments](https://developer.android.com/guide/fragments) \ No newline at end of file +- [@official@Android Developers: Fragments](https://developer.android.com/guide/fragments) diff --git a/src/data/roadmaps/android/content/git@rqSZ2ATeHbOdIQE9Jlb0B.md b/src/data/roadmaps/android/content/git@rqSZ2ATeHbOdIQE9Jlb0B.md index 608faf32a..b011b9f50 100644 --- a/src/data/roadmaps/android/content/git@rqSZ2ATeHbOdIQE9Jlb0B.md +++ b/src/data/roadmaps/android/content/git@rqSZ2ATeHbOdIQE9Jlb0B.md @@ -1,3 +1,9 @@ # Git -`Git` is a highly efficient and flexible distributed version control system that was created by Linus Torvalds, the creator of Linux. It allows multiple developers to work on a project concurrently, providing tools for non-linear development and tracking changes in any set of files. Git has a local repository with a complete history and version-tracking capabilities, allowing offline operations, unlike SVN. It ensures data integrity and provides strong support for non-linear development with features such as branching and merging. Yet, Git has a high learning curve and can be complex for beginners to understand the command line interface. Furthermore, Git also allows you to create `tags` to reference certain points in your history for milestone or version releases. \ No newline at end of file +`Git` is a highly efficient and flexible distributed version control system that was created by **Linus Torvalds**, the creator of Linux. It allows multiple developers to work on a project concurrently, providing tools for non-linear development and tracking changes in any set of files. Git has a local repository with a complete history and version-tracking capabilities, allowing offline operations, unlike SVN. It ensures data integrity and provides strong support for non-linear development with features such as branching and merging. + +Visit the following resources to learn more: + +- [@roadmap@Git and Github Roadmap](https://roadmap.sh/git-github) +- [@official@Git](https://git-scm.com/) +- [@official@Git Documentation](https://git-scm.com/docs) diff --git a/src/data/roadmaps/android/content/github@H-2eb8fLwz8IKYXbeSVKK.md b/src/data/roadmaps/android/content/github@H-2eb8fLwz8IKYXbeSVKK.md index 088787c4a..106f5cfbd 100644 --- a/src/data/roadmaps/android/content/github@H-2eb8fLwz8IKYXbeSVKK.md +++ b/src/data/roadmaps/android/content/github@H-2eb8fLwz8IKYXbeSVKK.md @@ -1,4 +1,9 @@ # GitHub **GitHub** is a cloud-based hosting service for managing software version control using Git. It provides a platform for enabling multiple developers to work together on the same project at the same time. With GitHub, codes can be stored publicly, allowing for collaboration with other developers or privately for individual projects. Key features of GitHub include code sharing, task management, and version control, among others. GitHub also offers functionalities such as bug tracking, feature requests, and task management for the project. -For Android development, it supports Gradle-based android projects, plugins for Android Studio and JetBrains IntelliJ IDEA, making version control operations more user-friendly. \ No newline at end of file + +Visit the following resources to learn more: + +- [@roadmap@Git and Github Roadmap](https://roadmap.sh/git-github) +- [@official@GitHub](https://github.com/) +- [@official@Github Documentation](https://docs.github.com/) diff --git a/src/data/roadmaps/android/content/gitlab@Q47BtQphp59NkkZoeNXmP.md b/src/data/roadmaps/android/content/gitlab@Q47BtQphp59NkkZoeNXmP.md index 26418bfaf..6866e212e 100644 --- a/src/data/roadmaps/android/content/gitlab@Q47BtQphp59NkkZoeNXmP.md +++ b/src/data/roadmaps/android/content/gitlab@Q47BtQphp59NkkZoeNXmP.md @@ -1,3 +1,8 @@ # GitLab -`Gitlab` is a web-based DevOps lifecycle tool which provides a Git-repository manager, along with continuous integration and deployment pipeline features, using an open-source license, developed by GitLab Inc. Users can manage and create their software projects and repositories, and collaborate on these projects with other members. `Gitlab` also allows users to view analytics and open issues of their project. It stands next to other version control tools like `GitHub` and `Bitbucket`, but comes with its own set of additional features and nuances. For Android development, `Gitlab` can be particularly useful owing to its continuous integration and deployment system which can automate large parts of the app testing and deployment. \ No newline at end of file +`Gitlab` is a web-based DevOps lifecycle tool which provides a Git-repository manager, along with continuous integration and deployment pipeline features, using an open-source license, developed by GitLab Inc. Users can manage and create their software projects and repositories, and collaborate on these projects with other members. `Gitlab` also allows users to view analytics and open issues of their project. It stands next to other version control tools like `GitHub` and `Bitbucket`, but comes with its own set of additional features and nuances. For Android development, `Gitlab` can be particularly useful owing to its continuous integration and deployment system which can automate large parts of the app testing and deployment. + +Visit the following resources to learn more: + +- [@official@Gitlab](https://about.gitlab.com/) +- [@official@Gitlab Documentation](https://docs.gitlab.com/) diff --git a/src/data/roadmaps/android/content/google-admob@D4ZXQOKJkyFYNZIy-MJ9Y.md b/src/data/roadmaps/android/content/google-admob@D4ZXQOKJkyFYNZIy-MJ9Y.md index 15613c1c7..1ccd72102 100644 --- a/src/data/roadmaps/android/content/google-admob@D4ZXQOKJkyFYNZIy-MJ9Y.md +++ b/src/data/roadmaps/android/content/google-admob@D4ZXQOKJkyFYNZIy-MJ9Y.md @@ -1,3 +1,8 @@ # Google AdMob -Google AdMob is a mobile advertising platform designed for app developers to monetize their apps by displaying ads from over 1 million Google advertisers. AdMob supports a wide range of ad formats, such as banner ads, interstitial ads, video ads, and more. It offers a powerful mediator that enables you to display ads from multiple sources, which includes the Google Mobile Ads SDK, third-party ad networks, and house ad campaigns. Furthermore, AdMob provides analytical tools to better understand your users and maximize ad revenue. \ No newline at end of file +Google AdMob is a mobile advertising platform designed for app developers to monetize their apps by displaying ads from over 1 million Google advertisers. AdMob supports a wide range of ad formats, such as banner ads, interstitial ads, video ads, and more. It offers a powerful mediator that enables you to display ads from multiple sources, which includes the Google Mobile Ads SDK, third-party ad networks, and house ad campaigns. Furthermore, AdMob provides analytical tools to better understand your users and maximize ad revenue. + +Visit the following resources to learn more: + +- [@official@Google AdMob](https://admob.google.com/home/) +- [@official@Google AdMob Documentation](https://admob.google.com/home/get-started/) diff --git a/src/data/roadmaps/android/content/google-maps@S5FVF9rMgVSSDKXJW2GYb.md b/src/data/roadmaps/android/content/google-maps@S5FVF9rMgVSSDKXJW2GYb.md index 9e0076d28..c95f05c60 100644 --- a/src/data/roadmaps/android/content/google-maps@S5FVF9rMgVSSDKXJW2GYb.md +++ b/src/data/roadmaps/android/content/google-maps@S5FVF9rMgVSSDKXJW2GYb.md @@ -1,3 +1,8 @@ # Google Maps Google Maps is a crucial service on Android, offering powerful, user-friendly mapping technology and local business information. Google Maps features include street maps, satellite imagery, 360° panoramic views of streets (Street View), real-time traffic conditions (Google Traffic), and route planning for traveling by foot, car, bicycle and air, or public transportation. The service's interface includes a function to overlay various layers such as traffic density, public transit lines, and cycling paths. Google Maps for Android also provides an API, which allows developers to interface with and control certain aspects of the Google Maps service in their applications. This capability subjects to certain usage limits and requirements set by Google. + +Visit the following resources to learn more: + +- [@official@Google Maps](https://developers.google.com/maps/documentation/android-sdk/overview) +- [@official@Google Maps Documentation](https://developers.google.com/maps/documentation/android-sdk/intro) diff --git a/src/data/roadmaps/android/content/google-play-services@m5rumeynEbS8T27pelr0-.md b/src/data/roadmaps/android/content/google-play-services@m5rumeynEbS8T27pelr0-.md index 6c2b45099..8ada4fe5b 100644 --- a/src/data/roadmaps/android/content/google-play-services@m5rumeynEbS8T27pelr0-.md +++ b/src/data/roadmaps/android/content/google-play-services@m5rumeynEbS8T27pelr0-.md @@ -1,3 +1,8 @@ # Google Play Services -*Google Play Services* is a proprietary background service and API package for Android devices from Google. Operated by Google, the service provides core functionalities like authentication for Google services, synchronized contacts, access to all the latest user privacy settings, and higher quality, lower-powered location-based services. It also speeds up offline searches, provides more immersive maps, and improves gaming experiences. Google Play Services play a crucial role in the operation of various other applications, including those not developed by Google. Moreover, it improves the overall Android experience by speeding up offline searches, providing more detailed maps, enhancing gaming experiences, and more. \ No newline at end of file +*Google Play Services* is a proprietary background service and API package for Android devices from Google. Operated by Google, the service provides core functionalities like authentication for Google services, synchronized contacts, access to all the latest user privacy settings, and higher quality, lower-powered location-based services. It also speeds up offline searches, provides more immersive maps, and improves gaming experiences. Google Play Services play a crucial role in the operation of various other applications, including those not developed by Google. Moreover, it improves the overall Android experience by speeding up offline searches, providing more detailed maps, enhancing gaming experiences, and more. + +Visit the following resources to learn more: + +- [@official@Google Play Services](https://developer.android.com/google/play-services) +- [@official@Google Play Services Documentation](https://developer.android.com/google/play-services/overview.html) diff --git a/src/data/roadmaps/android/content/google-playstore@HgRdgi2Hu4C8YLG5PXfoo.md b/src/data/roadmaps/android/content/google-playstore@HgRdgi2Hu4C8YLG5PXfoo.md index a686647b5..c4ae7696b 100644 --- a/src/data/roadmaps/android/content/google-playstore@HgRdgi2Hu4C8YLG5PXfoo.md +++ b/src/data/roadmaps/android/content/google-playstore@HgRdgi2Hu4C8YLG5PXfoo.md @@ -1,3 +1,8 @@ # Google Playstore -**Google Play Store** is the official distribution channel for Android apps and other digital media content. It is a global online software store developed and operated by Google. Developers submit their applications to Google Play through the Play Console where Google Play's automated systems scan for potentially malicious code and content violations, before they are published on the Play Store. Users can then browse, download, and use these applications on their Android devices or via the web. Purchases, downloads, and user feedback can be tracked via the Google Play Console. Owners of Android devices can also configure automatic updates for the applications they have installed from the store. This platform supports multiple languages and multiple forms of payment methods, making it accessible and customer-friendly. \ No newline at end of file +**Google Play Store** is the official distribution channel for Android apps and other digital media content. It is a global online software store developed and operated by Google. Developers submit their applications to Google Play through the Play Console where Google Play's automated systems scan for potentially malicious code and content violations, before they are published on the Play Store. Users can then browse, download, and use these applications on their Android devices or via the web. Purchases, downloads, and user feedback can be tracked via the Google Play Console. Owners of Android devices can also configure automatic updates for the applications they have installed from the store. This platform supports multiple languages and multiple forms of payment methods, making it accessible and customer-friendly. + +Visit the following resources to learn more: + +- [@official@Google Play Store](https://play.google.com/store) +- [@official@Google Play Store Documentation](https://developer.android.com/distribute/googleplay) diff --git a/src/data/roadmaps/android/content/hilt@ooo_k2k_vUBR_jQ7Ke6Et.md b/src/data/roadmaps/android/content/hilt@ooo_k2k_vUBR_jQ7Ke6Et.md index 935eda834..1803e2335 100644 --- a/src/data/roadmaps/android/content/hilt@ooo_k2k_vUBR_jQ7Ke6Et.md +++ b/src/data/roadmaps/android/content/hilt@ooo_k2k_vUBR_jQ7Ke6Et.md @@ -1,3 +1,7 @@ # Hilt -Hilt is a dependency injection library for Android that reduces the boilerplate code that you would normally need to write when setting up manual dependency injection in your project. It is based on the Dagger library, but it simplifies the implementation process and streamlines the use of Dagger in Android apps. To set it up, you must annotate your Android classes and Hilt will automatically generate and provide the necessary dependencies for you. Moreover, Hilt provides predefined set of components tied to the Android lifecycle which helps to handle scoped instances. \ No newline at end of file +Hilt is a dependency injection library for Android that reduces the boilerplate code that you would normally need to write when setting up manual dependency injection in your project. It is based on the Dagger library, but it simplifies the implementation process and streamlines the use of Dagger in Android apps. To set it up, you must annotate your Android classes and Hilt will automatically generate and provide the necessary dependencies for you. + +Visit the following resources to learn more: + +- [@official@Hilt](https://developer.android.com/training/dependency-injection/hilt-android) diff --git a/src/data/roadmaps/android/content/imageview@A4rtNULX_MoV93IH1Lgqw.md b/src/data/roadmaps/android/content/imageview@A4rtNULX_MoV93IH1Lgqw.md index e7138a154..a279509df 100644 --- a/src/data/roadmaps/android/content/imageview@A4rtNULX_MoV93IH1Lgqw.md +++ b/src/data/roadmaps/android/content/imageview@A4rtNULX_MoV93IH1Lgqw.md @@ -4,4 +4,4 @@ Displays image resources, for example Bitmap or Drawable resources. ImageView is Visit the following resources to learn more: -- [@article@Android developers: ImageView](https://developer.android.com/reference/android/widget/ImageView) +- [@article@Android Developers: ImageView](https://developer.android.com/reference/android/widget/ImageView) diff --git a/src/data/roadmaps/android/content/implicit-intents@gGdz3j33x0gfrFDp_rw8Z.md b/src/data/roadmaps/android/content/implicit-intents@gGdz3j33x0gfrFDp_rw8Z.md index 61f20ab62..2a41c5499 100644 --- a/src/data/roadmaps/android/content/implicit-intents@gGdz3j33x0gfrFDp_rw8Z.md +++ b/src/data/roadmaps/android/content/implicit-intents@gGdz3j33x0gfrFDp_rw8Z.md @@ -1,3 +1,7 @@ # Implicit Intents -In Android development, **Implicit Intents** do not specify the target component explicitly like Explicit Intents. Instead, they allow the system to find a suitable component matching the Intent description to handle the request. The system will find an activity that can handle this intent by comparing the `` section in the `AndroidManifest.xml` of all apps installed on the device against the Implicit Intent. An ideal example of an implicit intent is opening a URL. You do not need to know the specific activity that can handle this request, you just declare an intent to view a web page and Android system will select the suitable app that can open the URL. \ No newline at end of file +**Implicit Intents** do not specify the target component explicitly like Explicit Intents. Instead, they allow the system to find a suitable component matching the Intent description to handle the request. The system will find an activity that can handle this intent by comparing the `` section in the `AndroidManifest.xml` of all apps installed on the device against the Implicit Intent. + +Visit the following resources to learn more: + +- [@official@Implicit Intents](https://developer.android.com/guide/components/intents-filters#implicit) diff --git a/src/data/roadmaps/android/content/intent-filters@b-sfh6NoS-APqaNKm5L5S.md b/src/data/roadmaps/android/content/intent-filters@b-sfh6NoS-APqaNKm5L5S.md index 35d87e03c..4a87c24a7 100644 --- a/src/data/roadmaps/android/content/intent-filters@b-sfh6NoS-APqaNKm5L5S.md +++ b/src/data/roadmaps/android/content/intent-filters@b-sfh6NoS-APqaNKm5L5S.md @@ -1,3 +1,7 @@ # Intent Filters -`Intent Filters` in Android are essential components of the Android system where you can declare the capabilities of your activities, services, and broadcast receivers. An intent filter is an expression found in your app's manifest file, defined in the XML element. Android uses these filters to determine the appropriate components for incoming intents, which can be either explicit or implicit. Your app's ability to respond to intents depends on the filters you define. The filters are set of conditions comprised of `action`, `category`, and `data` which your activity or service is able to perform. If the incoming `Intent` matches with defined `Intent Filters`, Android system will permit that `Intent` to your Component (Activity, Service, or Broadcast Receiver). \ No newline at end of file +`Intent Filters` in Android are essential components of the Android system where you can declare the capabilities of your activities, services, and broadcast receivers. An intent filter is an expression found in your app's manifest file, defined in the `` XML element. Android uses these filters to determine the appropriate components for incoming intents, which can be either explicit or implicit. Your app's ability to respond to intents depends on the filters you define. The filters are set of conditions comprised of `action`, `category`, and `data` which your activity or service is able to perform. If the incoming `Intent` matches with defined `Intent Filters`, Android system will permit that `Intent` to your Component (Activity, Service, or Broadcast Receiver). + +Visit the following resources to learn more: + +- [@official@Intent Filters](https://developer.android.com/guide/components/intents-filters) diff --git a/src/data/roadmaps/android/content/intent@hv_9imIQpthxEaMLXEUHI.md b/src/data/roadmaps/android/content/intent@hv_9imIQpthxEaMLXEUHI.md index d64c6cc0b..5965c0b33 100644 --- a/src/data/roadmaps/android/content/intent@hv_9imIQpthxEaMLXEUHI.md +++ b/src/data/roadmaps/android/content/intent@hv_9imIQpthxEaMLXEUHI.md @@ -1,3 +1,7 @@ # Intent -"Intent" in Android is a software mechanism used for late runtime binding between components, such as activities, content providers, and services. It is essentially a passive data structure holding an abstract description of an operation that the Android system is requested to perform. The Intent can be explicit, in which you specify the component to start or implicit, where you declare a general action to perform, allowing a component from another app to handle it. Implicit intents are often used to request another app's functionality, such as showing a user a location on a map or taking a photo. "Intent Filters" are then used by the components to advertise their capabilities to handle different types of intents. \ No newline at end of file +Intent in Android is a software mechanism used for late runtime binding between components, such as activities, content providers, and services. It is essentially a passive data structure holding an abstract description of an operation that the Android system is requested to perform. + +Visit the following resources to learn more: + +- [@official@Intent](https://developer.android.com/reference/android/content/Intent) diff --git a/src/data/roadmaps/android/content/interface--navigation@4_e76QafrB419S2INOeKd.md b/src/data/roadmaps/android/content/interface--navigation@4_e76QafrB419S2INOeKd.md index 7c3bae050..5216c4ea5 100644 --- a/src/data/roadmaps/android/content/interface--navigation@4_e76QafrB419S2INOeKd.md +++ b/src/data/roadmaps/android/content/interface--navigation@4_e76QafrB419S2INOeKd.md @@ -1,3 +1,8 @@ # Interface and Navigation -In Android development, the concepts of "Interface" and "Navigation" are crucial. The "Interface" often refers to the Graphical User Interface (GUI) that users interact with. This includes buttons, text fields, image views, scroll views and other UI elements that the users can interact with to perform certain tasks. Tools like XML and Material Designs are used for interface design in Android. Meanwhile, "Navigation" refers to the interactions that allow users to navigate across, into, and back out from the different pieces of content within the app, following a clear path, like a map. Android uses the Navigation Component, a suite of libraries, tools, and guidance on constructing in-app navigation. Understanding both these elements, Interface and Navigation, is fundamental to creating an intuitive and user-friendly Android application. \ No newline at end of file +In Android development, the concepts of "Interface" and "Navigation" are crucial. The "Interface" often refers to the Graphical User Interface (GUI) that users interact with. This includes buttons, text fields, image views, scroll views and other UI elements that the users can interact with to perform certain tasks. Tools like XML and Material Designs are used for interface design in Android. + +Visit the following resources to learn more: + +- [@official@Android Developers: Interface](https://developer.android.com/guide/topics/ui/declaring-layout.html) +- [@official@Android Developers: Navigation](https://developer.android.com/guide/navigation) diff --git a/src/data/roadmaps/android/content/java@RBABbkzD_uNFwEO-hssZO.md b/src/data/roadmaps/android/content/java@RBABbkzD_uNFwEO-hssZO.md index 3fc193443..8f88adf3d 100644 --- a/src/data/roadmaps/android/content/java@RBABbkzD_uNFwEO-hssZO.md +++ b/src/data/roadmaps/android/content/java@RBABbkzD_uNFwEO-hssZO.md @@ -1,3 +1,9 @@ # Java -Java is a popular programming language used for Android development due to its robustness and ease of use. Its object-oriented structure allows developers to create modular programs and reusable code. The language was built with the philosophy of "write once, run anywhere" (WORA), meaning compiled Java code can run on all platforms without the need for recompilation. Android’s API and core libraries are primarily written in Java, therefore understanding Java is fundamental in creating diverse and powerful Android apps. Java is a statically-typed language, which can be beneficial for detecting errors at compile-time rather than at runtime. Oracle, who owns Java, provides comprehensive documentation and support for the language. \ No newline at end of file +Java is a popular programming language used for Android development due to its robustness and ease of use. Its object-oriented structure allows developers to create modular programs and reusable code. The language was built with the philosophy of "write once, run anywhere" (WORA), meaning compiled Java code can run on all platforms without the need for recompilation. Android’s API and core libraries are primarily written in Java, therefore understanding Java is fundamental in creating diverse and powerful Android apps. + +Visit the following resources to learn more: + +- [@roadmap@Java Roadmap](https://roadmap.sh/java) +- [@official@Java](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) +- [@official@Java Documentation](https://docs.oracle.com/en/java/javase/11/docs/api/) diff --git a/src/data/roadmaps/android/content/jetpack-benchmark@ACUJlDDR0jqEohsFzWEoQ.md b/src/data/roadmaps/android/content/jetpack-benchmark@ACUJlDDR0jqEohsFzWEoQ.md index 1d5d0e26e..0af4dddf9 100644 --- a/src/data/roadmaps/android/content/jetpack-benchmark@ACUJlDDR0jqEohsFzWEoQ.md +++ b/src/data/roadmaps/android/content/jetpack-benchmark@ACUJlDDR0jqEohsFzWEoQ.md @@ -1,3 +1,7 @@ # Jetpack Benchmark -Jetpack Benchmark is a library within the Android Jetpack Suite that allows developers to quickly and accurately measure the performance of their apps. This library can help measure CPU, memory, and IO performance of code in Android apps. Developers can define some specific code paths to be benchmarked by wrapping the code in `BenchmarkRule.measureRepeated {}`. In addition, it automatically takes care of warmup, measures your code performance, and outputs benchmarking results to the Android Studio's logcat. \ No newline at end of file +Jetpack Benchmark is a library within the Android Jetpack Suite that allows developers to quickly and accurately measure the performance of their apps. This library can help measure CPU, memory, and IO performance of code in Android apps. Developers can define some specific code paths to be benchmarked by wrapping the code in `BenchmarkRule.measureRepeated {}`. In addition, it automatically takes care of warmup, measures your code performance, and outputs benchmarking results to the Android Studio's logcat. + +Visit the following resources to learn more: + +- [@official@Jetpack Benchmark](https://developer.android.com/studio/profile/benchmark) diff --git a/src/data/roadmaps/android/content/jetpack-compose@60Vm-77rseUqpMiFvp-dA.md b/src/data/roadmaps/android/content/jetpack-compose@60Vm-77rseUqpMiFvp-dA.md index b4bef7fce..abe56cfde 100644 --- a/src/data/roadmaps/android/content/jetpack-compose@60Vm-77rseUqpMiFvp-dA.md +++ b/src/data/roadmaps/android/content/jetpack-compose@60Vm-77rseUqpMiFvp-dA.md @@ -2,5 +2,7 @@ `Jetpack Compose` is a modern toolkit for building native Android UI. It simplifies and accelerates UI development on Android with less code, powerful tools, and intuitive Kotlin APIs. `Jetpack Compose` offers a declarative approach to designing UI, where you can simply describe what your UI should look like at any given point of your app’s state, and `Compose` takes care of updating the view hierarchy, making UI development more efficient. It also integrates well with existing Android apps, letting you adopt its benefits at your own pace. +Visit the following resources to learn more: + +- [@official@Jetpack Compose](https://developer.android.com/jetpack/compose) - [@video@Jetpack Compose Crash Course](https://www.youtube.com/watch?v=6_wK_Ud8--0) -- [@feed@Explore top posts about Jetpack Compose](https://app.daily.dev/tags/jetpack-compose?ref=roadmapsh) diff --git a/src/data/roadmaps/android/content/junit@gvGAwjk_nhEgxzZ_c3f6b.md b/src/data/roadmaps/android/content/junit@gvGAwjk_nhEgxzZ_c3f6b.md index d5bfb6e53..a350154dc 100644 --- a/src/data/roadmaps/android/content/junit@gvGAwjk_nhEgxzZ_c3f6b.md +++ b/src/data/roadmaps/android/content/junit@gvGAwjk_nhEgxzZ_c3f6b.md @@ -1,3 +1,8 @@ # JUnit -JUnit is a popular testing framework for Java programming. It forms the basis for many other testing libraries and tools in the Android ecosystem, making it important for any Android developer to become familiar with. The basic use of JUnit involves annotations such as `@Test`, indicating methods that represent a single test case. Other useful features include `@Before` and `@After` which allow for setup and teardown processes to be defined clearly. Another powerful feature in JUnit is the ability to create parameterized tests, effectively running the same test multiple times with different inputs. \ No newline at end of file +JUnit is a popular testing framework for Java programming. It forms the basis for many other testing libraries and tools in the Android ecosystem, making it important for any Android developer to become familiar with. The basic use of JUnit involves annotations such as `@Test`, indicating methods that represent a single test case. Other useful features include `@Before` and `@After` which allow for setup and teardown processes to be defined clearly. Another powerful feature in JUnit is the ability to create parameterized tests, effectively running the same test multiple times with different inputs. + +Visit the following resources to learn more: + +- [@official@Documentation](https://developer.android.com/training/testing/local-tests) +- [@video@Junit for android](https://www.youtube.com/watch?v=jE1vQGVHaQA) \ No newline at end of file diff --git a/src/data/roadmaps/android/content/kodein@dc7k50PjCYZcElHhCk66p.md b/src/data/roadmaps/android/content/kodein@dc7k50PjCYZcElHhCk66p.md index 1cc02971c..0a26bd670 100644 --- a/src/data/roadmaps/android/content/kodein@dc7k50PjCYZcElHhCk66p.md +++ b/src/data/roadmaps/android/content/kodein@dc7k50PjCYZcElHhCk66p.md @@ -1,3 +1,7 @@ # Kodein -`Kodein` is one of the recommended dependency injection frameworks suitable for Android development. This open-source Kotlin library simplifies the DI process by allowing developers to bind various types of dependencies, such as singleton, factory, or provider bindings into containers or `Kodein` modules. It promotes dependency declaration where used, instead of prior declaration. It follows a "Define in Use" principle that enables easy-to-use, easy-to-debug and very idiomatic Kotlin code. It's also worth noting that `Kodein` works hand in hand with Android's lifecycle and provides easy integration with popular libraries such as Android Architecture Components, leveraging their functionality. \ No newline at end of file +`Kodein` is one of the recommended dependency injection frameworks suitable for Android development. This open-source Kotlin library simplifies the DI process by allowing developers to bind various types of dependencies, such as singleton, factory, or provider bindings into containers or `Kodein` modules. It promotes dependency declaration where used, instead of prior declaration. It follows a "Define in Use" principle that enables easy-to-use, easy-to-debug and very idiomatic Kotlin code. It's also worth noting that `Kodein` works hand in hand with Android's lifecycle and provides easy integration with popular libraries such as Android Architecture Components, leveraging their functionality. + +Visit the following resources to learn more: + +- [@official@Kodein](https://insert-kodein.io/) diff --git a/src/data/roadmaps/android/content/koin@UMqZ-jmXKDXKuu8bzqDH_.md b/src/data/roadmaps/android/content/koin@UMqZ-jmXKDXKuu8bzqDH_.md index cf5418b8d..329db50a5 100644 --- a/src/data/roadmaps/android/content/koin@UMqZ-jmXKDXKuu8bzqDH_.md +++ b/src/data/roadmaps/android/content/koin@UMqZ-jmXKDXKuu8bzqDH_.md @@ -1,3 +1,9 @@ # Koin -[Koin](https://insert-koin.io) is a lightweight dependency injection framework developed specifically for Kotlin developers. It uses functional resolution only - no proxy, no code generation, no reflection, and offers simplicity by leveraging Kotlin's language features. While Koin is not related to the Android platform, it provides specific extensions enabling an efficient integration into your Android applications, including [Android Architecture Components](https://developer.android.com/topic/libraries/architecture/index.html) and [Kotlin Coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html), amongst others. \ No newline at end of file +Koin is a lightweight dependency injection framework developed specifically for Kotlin developers. It uses functional resolution only - no proxy, no code generation, no reflection, and offers simplicity by leveraging Kotlin's language features. While Koin is not related to the Android platform, it provides specific extensions enabling an efficient integration into your Android applications, including Android Architecture Components and Kotlin Coroutines amongst others. + +Visit the following resources to learn more: + +- [@official@Koin](https://insert-koin.io) +- [@official@Android Architecture Components](https://developer.android.com/topic/libraries/architecture/index.html) +- [@officialKotlin Coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html) diff --git a/src/data/roadmaps/android/content/kotlin@qIzUv8-GgQnkqChEdgD50.md b/src/data/roadmaps/android/content/kotlin@qIzUv8-GgQnkqChEdgD50.md index 83a1e098f..0116b6a1a 100644 --- a/src/data/roadmaps/android/content/kotlin@qIzUv8-GgQnkqChEdgD50.md +++ b/src/data/roadmaps/android/content/kotlin@qIzUv8-GgQnkqChEdgD50.md @@ -2,8 +2,9 @@ `Kotlin` is a cross-platform, statically typed general-purpose programming language with type inference. Developed by JetBrains, the makers of the world’s leading IDEs, Kotlin has a syntax, which is more expressive and concise. This allows for more readable and maintainable code. It is fully interoperable with Java and comes with no limitations. It can be used almost everywhere Java is used today, for server-side development, Android apps, and much more. Kotlin introduces several improvements for programmers over Java, which makes it a preferred choice for many developers. With more concise code base and modern programming concept support - it's certainly a future of Android app development. -Use following resources to learn more: +Visit the following resources to learn more: -- [@video@Learn Kotlin Programming for Beginners - Free Code Camp](https://youtu.be/EExSSotojVI?si=4VPW8ZHa2UMX0HH1) +- [@official@Kotlin](https://kotlinlang.org/) +- [@official@Kotlin Documentation](https://kotlinlang.org/docs/home.html) - [@article@Learn Kotlin - w3schools](https://www.w3schools.com/kotlin/) -- [@feed@Explore top posts about Kotlin](https://app.daily.dev/tags/kotlin?ref=roadmapsh) +- [@video@Learn Kotlin Programming for Beginners - Free Code Camp](https://youtu.be/EExSSotojVI?si=4VPW8ZHa2UMX0HH1) diff --git a/src/data/roadmaps/android/content/ktlint@zMbXQH17Q52opdbitPzj7.md b/src/data/roadmaps/android/content/ktlint@zMbXQH17Q52opdbitPzj7.md index 788892935..9d4296d7d 100644 --- a/src/data/roadmaps/android/content/ktlint@zMbXQH17Q52opdbitPzj7.md +++ b/src/data/roadmaps/android/content/ktlint@zMbXQH17Q52opdbitPzj7.md @@ -1,3 +1,8 @@ # Ktlint -`ktlint` is a static code analysis tool. It enforces a highly consistent style and adheres extensively to the official Kotlin coding conventions. `ktlint` does not have any configuration options (by design). The only exceptions are disabling specific rule(s) and specifying indentation size. `ktlint` can check, as well as automatically fix your code. Its main goal is to bring unified code style to your project. It works on the command line as well, so it can be hooked up into your continuous integration pipeline. It also has Ant, Gradle and Maven wrappers. You can use Ktlint on any Android/Kotlin project, as long as you have Gradle or Maven installed. \ No newline at end of file +`ktlint` is a static code analysis tool. It enforces a highly consistent style and adheres extensively to the official Kotlin coding conventions. `ktlint` does not have any configuration options (by design). The only exceptions are disabling specific rule(s) and specifying indentation size. `ktlint` can check, as well as automatically fix your code. Its main goal is to bring unified code style to your project. It works on the command line as well, so it can be hooked up into your continuous integration pipeline. It also has Ant, Gradle and Maven wrappers. You can use Ktlint on any Android/Kotlin project, as long as you have Gradle or Maven installed. + +Visit the following resources to learn more: + +- [@official@Ktlint](https://ktlint.github.io/) +- [@opensource@Ktlint: Static Code Analysis for Kotlin](https://github.com/pinterest/ktlint) diff --git a/src/data/roadmaps/android/content/leak-canary@3i4g9ZWgLxKb2UMgRJi4Q.md b/src/data/roadmaps/android/content/leak-canary@3i4g9ZWgLxKb2UMgRJi4Q.md index 3fec9a18c..f9dc30a9f 100644 --- a/src/data/roadmaps/android/content/leak-canary@3i4g9ZWgLxKb2UMgRJi4Q.md +++ b/src/data/roadmaps/android/content/leak-canary@3i4g9ZWgLxKb2UMgRJi4Q.md @@ -1,3 +1,8 @@ # Leak Canary -LeakCanary is a powerful open-source memory leak detection library for Android and Java. It is integrated into your app, and once you run your app, LeakCanary immediately starts watching for memory leaks and captures a memory dump if it detects one. After investigation, it will present a full stack trace to help you pinpoint the exact location of the memory leak. With the LeakCanary's user-friendly interface, you can then analyze the memory leak right in your app. The most recent version of LeakCanary also includes other improvements like automatic detection of leaks in Activity, Fragment, View, ViewModel, LiveData, etc. \ No newline at end of file +LeakCanary is a powerful open-source memory leak detection library for Android and Java. It is integrated into your app, and once you run your app, LeakCanary immediately starts watching for memory leaks and captures a memory dump if it detects one. After investigation, it will present a full stack trace to help you pinpoint the exact location of the memory leak. With the LeakCanary's user-friendly interface, you can then analyze the memory leak right in your app. The most recent version of LeakCanary also includes other improvements like automatic detection of leaks in Activity, Fragment, View, ViewModel, LiveData, etc. + +Visit the following resources to learn more: + +- [@official@Leak Canary](https://square.github.io/leakcanary/) +- [@opensource@LeakCanary on GitHub](https://github.com/square/leakcanary) diff --git a/src/data/roadmaps/android/content/linear@U8iMGGOd2EgPxSuwSG39Z.md b/src/data/roadmaps/android/content/linear@U8iMGGOd2EgPxSuwSG39Z.md index f1695a1ab..bf8f47f90 100644 --- a/src/data/roadmaps/android/content/linear@U8iMGGOd2EgPxSuwSG39Z.md +++ b/src/data/roadmaps/android/content/linear@U8iMGGOd2EgPxSuwSG39Z.md @@ -6,4 +6,4 @@ Visit the following resources to learn more: -- [@official@Android developers: Linear Layout](https://developer.android.com/develop/ui/views/layout/linear) +- [@official@Linear Layout](https://developer.android.com/develop/ui/views/layout/linear) diff --git a/src/data/roadmaps/android/content/linting@77F9F3oI5CPgwgM_hxWfa.md b/src/data/roadmaps/android/content/linting@77F9F3oI5CPgwgM_hxWfa.md index a2344d163..d8a6201bd 100644 --- a/src/data/roadmaps/android/content/linting@77F9F3oI5CPgwgM_hxWfa.md +++ b/src/data/roadmaps/android/content/linting@77F9F3oI5CPgwgM_hxWfa.md @@ -1,3 +1,7 @@ # Linting -`Linting` in Android is a tool that analyzes the source code of your application to identify potential errors, bugs, stylistic errors, and suspicious constructs. The term Linting came from a Unix utility that examined C language source code. In Android, it not only checks for potential Java issues but also for XML layout files and provides alerts for issues it encounters regarding usability, performance, and accessibility. For instance, it may scrutinize a draft of your AndroidManifest.xml file for potential duplication of elements or other anomalies that would cause the app to crash. \ No newline at end of file +`Linting` in Android is a tool that analyzes the source code of your application to identify potential errors, bugs, stylistic errors, and suspicious constructs. The term Linting came from a Unix utility that examined C language source code. In Android, it not only checks for potential Java issues but also for XML layout files and provides alerts for issues it encounters regarding usability, performance, and accessibility. For instance, it may scrutinize a draft of your AndroidManifest.xml file for potential duplication of elements or other anomalies that would cause the app to crash. + +Visit the following resources to learn more: + +- [@official@Linting](https://developer.android.com/studio/write/lint) diff --git a/src/data/roadmaps/android/content/listview@EzLjX4iRT7AxkAOsJYnSU.md b/src/data/roadmaps/android/content/listview@EzLjX4iRT7AxkAOsJYnSU.md index e217c232d..9cd953093 100644 --- a/src/data/roadmaps/android/content/listview@EzLjX4iRT7AxkAOsJYnSU.md +++ b/src/data/roadmaps/android/content/listview@EzLjX4iRT7AxkAOsJYnSU.md @@ -1,9 +1,9 @@ # ListView -Displays a vertically-scrollable collection of views, where each view is positioned immediatelybelow the previous view in the list. +Displays a vertically-scrollable collection of views, where each view is positioned immediately below the previous view in the list. For a more modern, flexible, and performant approach to displaying lists, use `RecyclerView`. Visit the following resources to learn more: -- [@official@Android developers: ListView](https://developer.android.com/reference/android/widget/ListView) +- [@official@ListView](https://developer.android.com/reference/android/widget/ListView) diff --git a/src/data/roadmaps/android/content/livedata@TiokceMGU9caqiR0lbFYL.md b/src/data/roadmaps/android/content/livedata@TiokceMGU9caqiR0lbFYL.md index 8a46eb365..8dbec371f 100644 --- a/src/data/roadmaps/android/content/livedata@TiokceMGU9caqiR0lbFYL.md +++ b/src/data/roadmaps/android/content/livedata@TiokceMGU9caqiR0lbFYL.md @@ -1,3 +1,7 @@ # LiveData -`LiveData` is a data holder class that can be observed within a given lifecycle. This means that an `Observer` can be added in a pair with a `LifecycleOwner`, and this observer will be notified about modifications of the `LiveData` object only if the associated `LifecycleOwner` is in active state. `LiveData` respects the lifecycle state of app components, such as activities, fragments, or services, and it only updates app-component observers that are in an active lifecycle state. Furthermore, `LiveData` automatically removes the observers when their associated `LifecycleOwner` moves to the `Destroyed` state. This combination of `LiveData` and `LifecycleOwner` helps you to manage appropriate and efficient updates because `LiveData` takes into consideration the lifecycle state of your app components. \ No newline at end of file +`LiveData` is a data holder class that can be observed within a given lifecycle. This means that an `Observer` can be added in a pair with a `LifecycleOwner`, and this observer will be notified about modifications of the `LiveData` object only if the associated `LifecycleOwner` is in active state. `LiveData` respects the lifecycle state of app components, such as activities, fragments, or services, and it only updates app-component observers that are in an active lifecycle state. Furthermore, `LiveData` automatically removes the observers when their associated `LifecycleOwner` moves to the `Destroyed` state. This combination of `LiveData` and `LifecycleOwner` helps you to manage appropriate and efficient updates because `LiveData` takes into consideration the lifecycle state of your app components. + +Visit the following resources to learn more: + +- [@official@LiveData](https://developer.android.com/topic/libraries/architecture/livedata) diff --git a/src/data/roadmaps/android/content/mvc@w1A6wPKSd3Yh2luuHV-aE.md b/src/data/roadmaps/android/content/mvc@w1A6wPKSd3Yh2luuHV-aE.md index 6d4d6b777..78ee6e21f 100644 --- a/src/data/roadmaps/android/content/mvc@w1A6wPKSd3Yh2luuHV-aE.md +++ b/src/data/roadmaps/android/content/mvc@w1A6wPKSd3Yh2luuHV-aE.md @@ -2,7 +2,7 @@ MVC or `Model View Controller` is a software design pattern commonly used for developing user interfaces that divides the related program logic into three interconnected components. -Components: +## Components: - `Model`: The internal representations of information. This can often be an Interactor or UseCase - `View`: The interface that presents information to and accepts it from the user @@ -11,4 +11,4 @@ Components: Visit the following resources to learn more: - [@article@MVC](https://developer.mozilla.org/en-US/docs/Glossary/MVC) -- [@article@Model–view–controller](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) \ No newline at end of file +- [@article@Model View Controller](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) diff --git a/src/data/roadmaps/android/content/mvp@aF_xFIqTjQbENtC7pkXvJ.md b/src/data/roadmaps/android/content/mvp@aF_xFIqTjQbENtC7pkXvJ.md index 112957923..48c59a089 100644 --- a/src/data/roadmaps/android/content/mvp@aF_xFIqTjQbENtC7pkXvJ.md +++ b/src/data/roadmaps/android/content/mvp@aF_xFIqTjQbENtC7pkXvJ.md @@ -8,4 +8,6 @@ MVP is divided into three components: - `View`: Takes care of updating the graphical part of the application. It acts as a passive view, only receiving data and requesting actions to be performed. - `Presenter`: Handles all the logic related to the graphical interface that the View requests. It provides the View with the data it needs to display on the screen. -This structure helps to create a clear separation of concerns, making your codebase more modular and easier to maintain. +Visit the following resources to learn more: + +- [@article@Model View Presenter](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter) diff --git a/src/data/roadmaps/android/content/mvvm@pSU-NZtjBh-u0WKTYfjk_.md b/src/data/roadmaps/android/content/mvvm@pSU-NZtjBh-u0WKTYfjk_.md index 8521196d1..b9a69a2b3 100644 --- a/src/data/roadmaps/android/content/mvvm@pSU-NZtjBh-u0WKTYfjk_.md +++ b/src/data/roadmaps/android/content/mvvm@pSU-NZtjBh-u0WKTYfjk_.md @@ -10,5 +10,5 @@ Components: Visit the following resources to learn more: -- [@article@Android Developers: View Model](https://developer.android.com/topic/libraries/architecture/viewmodel) -- [@article@Wikipedia](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel) \ No newline at end of file +- [@official@Android Developers: View Model](https://developer.android.com/topic/libraries/architecture/viewmodel) +- [@article@Wikipedia](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel) diff --git a/src/data/roadmaps/android/content/navigation-components@o5rzmnaQeiSh9ocvfJPpK.md b/src/data/roadmaps/android/content/navigation-components@o5rzmnaQeiSh9ocvfJPpK.md index 5ac35cec4..8a9446983 100644 --- a/src/data/roadmaps/android/content/navigation-components@o5rzmnaQeiSh9ocvfJPpK.md +++ b/src/data/roadmaps/android/content/navigation-components@o5rzmnaQeiSh9ocvfJPpK.md @@ -1,3 +1,7 @@ # Navigation Components -The **Navigation Components** are part of Android Jetpack and are designed to simplify the implementation of navigation in your Android app. These components help you follow best practices, handle deep linking, and provide a consistent user experience across deep and conditional navigation. They also automate many common tasks, such as handling Up and Back actions correctly across many different types of devices. The Navigation component consists of three key parts which are Navigation graph, NavHost, and NavController. \ No newline at end of file +The **Navigation Components** are part of Android Jetpack and are designed to simplify the implementation of navigation in your Android app. These components help you follow best practices, handle deep linking, and provide a consistent user experience across deep and conditional navigation. They also automate many common tasks, such as handling Up and Back actions correctly across many different types of devices. The Navigation component consists of three key parts which are Navigation graph, NavHost, and NavController. + +Visit the following resources to learn more: + +- [@official@Navigation Components](https://developer.android.com/guide/navigation) diff --git a/src/data/roadmaps/android/content/network@Yb6aKJMMCxU1QVltWg3Dr.md b/src/data/roadmaps/android/content/network@Yb6aKJMMCxU1QVltWg3Dr.md index d938f8a23..ca35baa89 100644 --- a/src/data/roadmaps/android/content/network@Yb6aKJMMCxU1QVltWg3Dr.md +++ b/src/data/roadmaps/android/content/network@Yb6aKJMMCxU1QVltWg3Dr.md @@ -1,3 +1,9 @@ # Network -In Android, the `Network` component offers vital capabilities that enable communication and interaction among users, between users and remote servers, and between users and cloud services. Android provides a variety of APIs and services to interact with networks. The primary APIs are the `ConnectivityManager`, `WifiManager`, `TelephonyManager`, and `BluetoothManager` APIs, among others. ConnectivityManager, for example, can tell you about network connectivity changes. The **Network** component also involves tools for network monitoring and testing, which can be useful for optimizing app performance and dealing with connectivity issues. Be aware, some network operations are subject to system imposed restrictions and require specific permissions. \ No newline at end of file +In Android, the `Network` component offers vital capabilities that enable communication and interaction among users, between users and remote servers, and between users and cloud services. Android provides a variety of APIs and services to interact with networks. The primary APIs are the `ConnectivityManager`, `WifiManager`, `TelephonyManager`, and `BluetoothManager` APIs, among others. ConnectivityManager, for example, can tell you about network connectivity changes. + +Visit the following resources to learn more: + +- [@official@Network](https://developer.android.com/guide/topics/connectivity) +- [@official@ConnectivityManager](https://developer.android.com/reference/android/net/ConnectivityManager) +- [@official@WifiManager](https://developer.android.com/reference/android/net/wifi/WifiManager) diff --git a/src/data/roadmaps/android/content/observer-pattern@N_auRfGKkeIIc-qiHLkR_.md b/src/data/roadmaps/android/content/observer-pattern@N_auRfGKkeIIc-qiHLkR_.md index 69b31fe73..ccd9e7fb9 100644 --- a/src/data/roadmaps/android/content/observer-pattern@N_auRfGKkeIIc-qiHLkR_.md +++ b/src/data/roadmaps/android/content/observer-pattern@N_auRfGKkeIIc-qiHLkR_.md @@ -1,3 +1,7 @@ # Observer Pattern -The **Observer Pattern** is a software design pattern in which an object, known as the subject, maintains a list of its dependants, called observers, and notifies them automatically of any state changes. This is usually done by calling one of their methods. It's mainly used for implementing distributed event handling systems and is viewed as a good practice to follow, making your design more robust, flexible, and scalable. The subject to be observed triggers events and observers react to the change or the event that they are listening to. In Android, observable libraries like `LiveData`, `RxJava`, `Flow`, and other reactive streams allow the implementation of observer pattern. \ No newline at end of file +The **Observer Pattern** is a software design pattern in which an object, known as the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes. This is usually done by calling one of their methods. It's mainly used for implementing distributed event handling systems and is viewed as a good practice to follow, making your design more robust, flexible, and scalable. The subject to be observed triggers events and observers react to the change or the event that they are listening to. In Android, observable libraries like `LiveData`, `RxJava`, `Flow`, and other reactive streams allow the implementation of observer pattern. + +Visit the following resources to learn more: + +- [@article@Observer Pattern](https://en.wikipedia.org/wiki/Observer_pattern) diff --git a/src/data/roadmaps/android/content/okhttp@5pVuwOItAhUxxJX8ysAsn.md b/src/data/roadmaps/android/content/okhttp@5pVuwOItAhUxxJX8ysAsn.md index 94f1d7419..3fac1c518 100644 --- a/src/data/roadmaps/android/content/okhttp@5pVuwOItAhUxxJX8ysAsn.md +++ b/src/data/roadmaps/android/content/okhttp@5pVuwOItAhUxxJX8ysAsn.md @@ -1,3 +1,8 @@ # OkHttp -`OkHttp` is an HTTP client that's extremely efficient, enabling several advanced features in Android app or other platforms that use Java. Developed by Square, it's built for high efficiency and capacity, simplifying many networking tasks, including connection pooling, response caching, and request retries. OkHttp allows seamless recovery from network issues, minimizing the loss of data. The library ensures fewer errors and higher quality of service by using the modern TLS encryption, extensible request and response models, and a fluent API for ease of use and integration. \ No newline at end of file +`OkHttp` is an HTTP client that's extremely efficient, enabling several advanced features in Android app or other platforms that use Java. Developed by Square, it's built for high efficiency and capacity, simplifying many networking tasks, including connection pooling, response caching, and request retries. OkHttp allows seamless recovery from network issues, minimizing the loss of data. The library ensures fewer errors and higher quality of service by using the modern TLS encryption, extensible request and response models, and a fluent API for ease of use and integration. + +Visit the following resources to learn more: + +- [@official@OkHttp](https://square.github.io/okhttp/) +- [@opensource@OkHttp on GitHub](https://github.com/square/okhttp) diff --git a/src/data/roadmaps/android/content/pick-a-language@Suws-7f_6Z1ChpfcnxX2M.md b/src/data/roadmaps/android/content/pick-a-language@Suws-7f_6Z1ChpfcnxX2M.md index d4aa110f4..1cc1227ad 100644 --- a/src/data/roadmaps/android/content/pick-a-language@Suws-7f_6Z1ChpfcnxX2M.md +++ b/src/data/roadmaps/android/content/pick-a-language@Suws-7f_6Z1ChpfcnxX2M.md @@ -1,3 +1,10 @@ # Pick a Language -When developing for Android, one crucial step is picking a programming language to use. There are multiple languages you can choose from, but the three most popular ones are Java, Kotlin, and C++. Java is the original language used for Android development and is widely used, making it a good choice for beginners due to the wealth of resources and developer communities. Kotlin is a newer option that is fully supported by Google and Android Studio, and addressing many of the drawbacks of Java which makes it a popular choice for many developers. Lastly, C++ can be used in Android development through the Android Native Development Kit (NDK), though it comes with more complexities and is usually not recommended for beginners. Your selection might depend on your existing familiarity with these languages, the complexity and specific requirements of your project, and the resources or libraries you wish to use. \ No newline at end of file +When developing for Android, one crucial step is picking a programming language to use. There are multiple languages you can choose from, but the three most popular ones are Java, Kotlin, and C++. + +Java is the original language used for Android development and is widely used, making it a good choice for beginners due to the wealth of resources and developer communities. Kotlin is a newer option that is fully supported by Google and Android Studio, and addressing many of the drawbacks of Java which makes it a popular choice for many developers. + +Visit the following resources to learn more: + +- [@official@Pick a Language](https://developer.android.com/studio/write/java8-support) +- [@official@Kotlin vs Java](https://developer.android.com/kotlin) diff --git a/src/data/roadmaps/android/content/recycleview@xIvplWfe-uDr9iHjPT1Mx.md b/src/data/roadmaps/android/content/recycleview@xIvplWfe-uDr9iHjPT1Mx.md index 59761ade3..c12407983 100644 --- a/src/data/roadmaps/android/content/recycleview@xIvplWfe-uDr9iHjPT1Mx.md +++ b/src/data/roadmaps/android/content/recycleview@xIvplWfe-uDr9iHjPT1Mx.md @@ -6,5 +6,4 @@ As the name implies, RecyclerView recycles those individual elements. When an it Learn more from the following resources: -- [@article@Android Developers: Create dynamic lists with RecyclerView](https://developer.android.com/develop/ui/views/layout/recyclerview) - +- [@official@Create Dynamic Lists with RecyclerView](https://developer.android.com/develop/ui/views/layout/recyclerview) diff --git a/src/data/roadmaps/android/content/relative@yE0qAQZiEC9R8WvCdskpr.md b/src/data/roadmaps/android/content/relative@yE0qAQZiEC9R8WvCdskpr.md index 31a07bcd3..69d368a32 100644 --- a/src/data/roadmaps/android/content/relative@yE0qAQZiEC9R8WvCdskpr.md +++ b/src/data/roadmaps/android/content/relative@yE0qAQZiEC9R8WvCdskpr.md @@ -2,8 +2,8 @@ A **RelativeLayout** in Android is a type of ViewGroup that allows you to position child views relative to each other or relative to the parent layout. It's a flexible layout where you can arrange the child views in relation to one another based on certain rules, making it suitable for creating complex UI designs. -**RelativeLayout** was commonly used in earlier Android development, but with the introduction of `ConstraintLayout`, it's less frequently used in modern apps. +**RelativeLayout** was commonly used in earlier Android development, but with the introduction of `ConstraintLayout`, it's less frequently used in modern apps. Visit the following resources to learn more: -- [@official@Android developers: Relative Layout](https://developer.android.com/develop/ui/views/layout/relative) +- [@official@Relative Layout](https://developer.android.com/develop/ui/views/layout/relative) diff --git a/src/data/roadmaps/android/content/remote-config@1Tz-Shj_Tuz2U8llEAcLr.md b/src/data/roadmaps/android/content/remote-config@1Tz-Shj_Tuz2U8llEAcLr.md index 674694968..d8a35af5c 100644 --- a/src/data/roadmaps/android/content/remote-config@1Tz-Shj_Tuz2U8llEAcLr.md +++ b/src/data/roadmaps/android/content/remote-config@1Tz-Shj_Tuz2U8llEAcLr.md @@ -4,5 +4,5 @@ Firebase Remote Config is a cloud service offered by Firebase. It lets you chang Visit the following resources to learn more: -- [@official@Documentation](https://firebase.google.com/docs/remote-config/get-started?platform=android) -- [@video@Firebase: Remote config](https://www.youtube.com/watch?v=pcnnbjAAIkI) +- [@official@Remote Config](https://firebase.google.com/docs/remote-config/get-started?platform=android) +- [@video@Getting Started with Remote Config](https://www.youtube.com/watch?v=pcnnbjAAIkI) diff --git a/src/data/roadmaps/android/content/repository-pattern@ZF5XgO7I_J9928bD3CVXo.md b/src/data/roadmaps/android/content/repository-pattern@ZF5XgO7I_J9928bD3CVXo.md index f428de86f..a9df6e7e9 100644 --- a/src/data/roadmaps/android/content/repository-pattern@ZF5XgO7I_J9928bD3CVXo.md +++ b/src/data/roadmaps/android/content/repository-pattern@ZF5XgO7I_J9928bD3CVXo.md @@ -1,3 +1,7 @@ # Repository Pattern -In Android design architecture, the `Repository Pattern` separates the data sources from the rest of the application. It acts as a mediator between different data sources, such as persistent models, web services, or caches. Instead of having the network and database calls spread out throughout your ViewModel, they are encapsulated within a Repository class. This separation will make the code clean, easy to read and testable. It provides a simple API for data access, the rest of the app doesn't need to know where the data is coming from it just asks the repository. \ No newline at end of file +The `Repository Pattern` separates the data sources from the rest of the application. It acts as a mediator between different data sources, such as persistent models, web services, or caches. Instead of having the network and database calls spread out throughout your ViewModel, they are encapsulated within a Repository class. This separation will make the code clean, easy to read and testable. It provides a simple API for data access, the rest of the app doesn't need to know where the data is coming from it just asks the repository. + +Visit the following resources to learn more: + +- [@article@Repository Pattern](https://en.wikipedia.org/wiki/Repository_pattern) diff --git a/src/data/roadmaps/android/content/retro@dDMRYiqrKyOBnRRQc8zsp.md b/src/data/roadmaps/android/content/retro@dDMRYiqrKyOBnRRQc8zsp.md index 68823fe37..1dfefa066 100644 --- a/src/data/roadmaps/android/content/retro@dDMRYiqrKyOBnRRQc8zsp.md +++ b/src/data/roadmaps/android/content/retro@dDMRYiqrKyOBnRRQc8zsp.md @@ -1,13 +1,8 @@ # Retrofit -Retrofit is a type-safe HTTP client for Android and Java. It's designed to connect your application with an API or a back-end web service. Retrofit uses annotations to encode details about the API's operations and requests, such as the HTTP method (GET, POST, PUT, DELETE, HEAD) and the query parameters. The main advantage of Retrofit over other similar libraries is in its simplicity and intuitiveness, and it efficiently handles all network calls. -``` -Retrofit retrofit = new Retrofit.Builder() - .baseUrl("https://api.example.com") - .addConverterFactory(GsonConverterFactory.create()) - .build(); +Retrofit is a type-safe HTTP client for Android. It's designed to connect your application with an API or a back-end web service. Retrofit uses annotations to encode details about the API's operations and requests, such as the HTTP method (`GET`, `POST`, `PUT`, `DELETE`, `HEAD`) and the query parameters. The main advantage of **Retrofit** over other similar libraries is in its simplicity and intuitiveness, and it efficiently handles all network calls. -ExampleService service = retrofit.create(ExampleService.class); -Call call = service.exampleCall(); -``` -The `baseUrl()` is your API base URL. The `addConverterFactory()` specifies a factory to use for serialization and deserialization. In the example above, the Gson library will handle the conversion of JSON data. The `build()` call finishes the builder and returns the retrofit instance. Finally, `create()` generates an implementation of the `ExampleService` interface. \ No newline at end of file +Visit the following resources to learn more: + +- [@official@Retrofit Documentation](https://square.github.io/retrofit/) +- [@video@Retrofit in Android Studio](https://www.youtube.com/watch?v=KJSBsRKqNwU) \ No newline at end of file diff --git a/src/data/roadmaps/android/content/room-database@Bfg4So5RlI09zFNcburJd.md b/src/data/roadmaps/android/content/room-database@Bfg4So5RlI09zFNcburJd.md index d7a7de39d..7cec2c279 100644 --- a/src/data/roadmaps/android/content/room-database@Bfg4So5RlI09zFNcburJd.md +++ b/src/data/roadmaps/android/content/room-database@Bfg4So5RlI09zFNcburJd.md @@ -4,5 +4,5 @@ Visit the following resources to learn more: -- [@official@Save data in a local database using Room](https://developer.android.com/training/data-storage/room) -- [@video@The full beginner guide for Room in Android](https://www.youtube.com/watch?v=bOd3wO0uFr8&t=10s) +- [@official@Room Database](https://developer.android.com/training/data-storage/room) +- [@video@The Full Beginner's Guide for Room in Android](https://www.youtube.com/watch?v=bOd3wO0uFr8&t=10s) diff --git a/src/data/roadmaps/android/content/rxjava@xk0vnWr7uESdzYRxwFjoK.md b/src/data/roadmaps/android/content/rxjava@xk0vnWr7uESdzYRxwFjoK.md index cbb3eef4a..111f34c53 100644 --- a/src/data/roadmaps/android/content/rxjava@xk0vnWr7uESdzYRxwFjoK.md +++ b/src/data/roadmaps/android/content/rxjava@xk0vnWr7uESdzYRxwFjoK.md @@ -1,7 +1,7 @@ # RxJava -RxJava, standing for Reactive Extensions for the JVM, is a library in the Java and Android ecosystem that allows developers to write asynchronous, event-based programs. It is developed according to reactive programming principles and it supports multi-threading operations. One can create data streams from just about anything - variables, data structures, inputs, etc. and these streams could be used with functional programming methods to process the data. +RxJava, standing for Reactive Extensions for the JVM, is a library in the Java and Android ecosystem that allows developers to write asynchronous, event-based programs. It is developed according to reactive programming principles and it supports multi-threading operations. One can create data streams from just about anything - variables, data structures, inputs, etc. and these streams could be used with functional programming methods to process the data. -In Android, RxJava is often used in combination with Retrofit, to handle API calls or with Room, to handle tasks involving the database. This library provides a set of operators such as `map()`, `filter()`, `concat()`, `merge()`, `flatmap()` etc. to handle tasks such as chain asynchronous operations, perform computations, or transform data. +Visit the following resources to learn more: -There are three important entities in RxJava - 'Observable', 'Observer' and 'Subscription'. 'Observable' is a data stream that does some work, 'Observer' watches the 'Observable' and does something when the 'Observable’ changes, and 'Subscription' is what ties an 'Observer' to an 'Observable' - linking their lifecycles and allowing 'Observer’s to unsubscribe (to stop receiving updates) when they’re destroyed. In other words, 'Subscription' is what allows you to manage memory and prevent crashes due to leaks. \ No newline at end of file +- [@opensource@RxJava on GitHub](https://github.com/ReactiveX/RxJava) diff --git a/src/data/roadmaps/android/content/rxjava@zXsNEyRbb8UpEOAUv6FpY.md b/src/data/roadmaps/android/content/rxjava@zXsNEyRbb8UpEOAUv6FpY.md index 72e3ff06e..0600af571 100644 --- a/src/data/roadmaps/android/content/rxjava@zXsNEyRbb8UpEOAUv6FpY.md +++ b/src/data/roadmaps/android/content/rxjava@zXsNEyRbb8UpEOAUv6FpY.md @@ -1,3 +1,7 @@ # RxJava -RxJava (Reactive Extensions for the JVM) is a powerful library for composing asynchronous and event-based programs using observable sequences in Java. If you are an Android developer, you might be familiar with callbacks and async tasks to perform long-running operations in the background. However, handling multiple async tasks and nested callbacks can produce code that's complicated to read and maintain. To alleviate such complexities, RxJava provides tools and methods to create, transform and chain Observable sequences in a clean and declarative manner. In other words, it provides a way to manage asynchronicity and concurrency in your code. +RxJava (Reactive Extensions for the JVM) is a powerful library for composing asynchronous and event-based programs using observable sequences in Java. If you are an Android developer, you might be familiar with callbacks and async tasks to perform long-running operations in the background. However, handling multiple async tasks and nested callbacks can produce code that's complicated to read and maintain. To alleviate such complexities, RxJava provides tools and methods to create, transform and chain Observable sequences in a clean and declarative manner. + +Visit the following resources to learn more: + +- [@opensource@RxJava on GitHub](https://github.com/ReactiveX/RxJava) diff --git a/src/data/roadmaps/android/content/rxkotlin@4h37WBpYxRRyw9oH8ge7o.md b/src/data/roadmaps/android/content/rxkotlin@4h37WBpYxRRyw9oH8ge7o.md index bec3a9363..e17d2866b 100644 --- a/src/data/roadmaps/android/content/rxkotlin@4h37WBpYxRRyw9oH8ge7o.md +++ b/src/data/roadmaps/android/content/rxkotlin@4h37WBpYxRRyw9oH8ge7o.md @@ -1,3 +1,7 @@ # RxKotlin -`RxKotlin` is a lightweight language extension to Java for Android development, enabling Android apps to be built using Kotlin with Reactivex. It brings the power of reactive programming paradigm to Kotlin, extending its capabilities for processing asynchronous streams of data. It allows you to express static (e.g., already known) or dynamic (e.g., future unknown) data streams, and perform various operations on them easily. Key concepts of `RxKotlin` include Observables, Observers and Schedulers. Observables represent the data streams, Observers interact with the data stream, and Schedulers determine on which thread operations are performed. RxKotlin helps manage background tasks, handle asynchronous data streams, and implement complex UIs, among others. It is especially beneficial for mobile development where UI thread and background thread coordination is essential. \ No newline at end of file +`RxKotlin` is a lightweight language extension to Java for Android development, enabling Android apps to be built using Kotlin with Reactivex. It brings the power of reactive programming paradigm to Kotlin, extending its capabilities for processing asynchronous streams of data. It allows you to express static (e.g., already known) or dynamic (e.g., future unknown) data streams, and perform various operations on them easily. Key concepts of `RxKotlin` include Observables, Observers and Schedulers. Observables represent the data streams, Observers interact with the data stream, and Schedulers determine on which thread operations are performed. RxKotlin helps manage background tasks, handle asynchronous data streams, and implement complex UIs, among others. + +Visit the following resources to learn more: + +- [@opensource@ReactiveX/RxKotlin - RxKotlin on GitHub](https://github.com/ReactiveX/RxKotlin) diff --git a/src/data/roadmaps/android/content/rxkotlin@7rbsp1o5bzIJP11BRIoeG.md b/src/data/roadmaps/android/content/rxkotlin@7rbsp1o5bzIJP11BRIoeG.md index f54056975..42f325c52 100644 --- a/src/data/roadmaps/android/content/rxkotlin@7rbsp1o5bzIJP11BRIoeG.md +++ b/src/data/roadmaps/android/content/rxkotlin@7rbsp1o5bzIJP11BRIoeG.md @@ -1,3 +1,7 @@ # RxKotlin -`RxKotlin` is a lightweight library that adds convenient extension functions to `RxJava`. It allows developers to use RxJava with Kotlin in a more idiomatic way, thus making code more readable and understandable. While `RxJava` is a Java-based implementation of Reactive Extensions, `RxKotlin` is essentially a wrapper that includes extension functions and other constructs to take full advantage of Kotlin's features, such as its syntactic simplicity and ease of use. \ No newline at end of file +`RxKotlin` is a lightweight library that adds convenient extension functions to `RxJava`. It allows developers to use RxJava with Kotlin in a more idiomatic way, thus making code more readable and understandable. While `RxJava` is a Java-based implementation of Reactive Extensions, `RxKotlin` is essentially a wrapper that includes extension functions and other constructs to take full advantage of Kotlin's features, such as its syntactic simplicity and ease of use. + +Visit the following resources to learn more: + +- [@opensource@RxKotlin](https://github.com/ReactiveX/RxKotlin) diff --git a/src/data/roadmaps/android/content/services@PcHmU1c9hqKyzSjwlRPHk.md b/src/data/roadmaps/android/content/services@PcHmU1c9hqKyzSjwlRPHk.md index 1facf8822..01f7c7934 100644 --- a/src/data/roadmaps/android/content/services@PcHmU1c9hqKyzSjwlRPHk.md +++ b/src/data/roadmaps/android/content/services@PcHmU1c9hqKyzSjwlRPHk.md @@ -1,3 +1,7 @@ # Services -**Services**: A service in Android is an app component that performs operations in the background without a user interface. It can be started by an application component, like an activity, and it will continue to run in the background even if the user switches to another application. There are two types of services in Android, namely, `Started Service` and `Bound Service`. A `Started Service` is used to perform a single operation, such as downloading a large file. On the other hand, a `Bound Service` offers a client-server interface that allows components to interact with the service, send requests, receive results, and even perform interprocess communication (IPC). \ No newline at end of file +**Services**: A service in Android is an app component that performs operations in the background without a user interface. It can be started by an application component, like an activity, and it will continue to run in the background even if the user switches to another application. There are two types of services in Android, namely, `Started Service` and `Bound Service`. A `Started Service` is used to perform a single operation, such as downloading a large file. On the other hand, a `Bound Service` offers a client-server interface that allows components to interact with the service, send requests, receive results, and even perform interprocess communication (IPC). + +Visit the following resources to learn more: + +- [@official@Services](https://developer.android.com/guide/components/services) diff --git a/src/data/roadmaps/android/content/shared-preferences@PKql1HY0PLMfp50FRELXL.md b/src/data/roadmaps/android/content/shared-preferences@PKql1HY0PLMfp50FRELXL.md index 7cf6e9dd8..01aecf2fa 100644 --- a/src/data/roadmaps/android/content/shared-preferences@PKql1HY0PLMfp50FRELXL.md +++ b/src/data/roadmaps/android/content/shared-preferences@PKql1HY0PLMfp50FRELXL.md @@ -1,3 +1,8 @@ # Shared Preferences -Shared Preferences in Android are used to store data in key-value pairs. It works similar to a tiny database where you can save small pieces of data such as settings or the state of an application. When data is saved to Shared Preferences, it persists across user sessions, even if your application is killed or gets deleted. Data in Shared Preferences is not typically used for large amounts of data. To perform actions such as saving, retrieving, or editing data in Shared Preferences, you use an instance of `SharedPreferences.Editor`. \ No newline at end of file +Shared Preferences in Android are used to store data in key-value pairs. It works similar to a tiny database where you can save small pieces of data such as settings or the state of an application. When data is saved to Shared Preferences, it persists across user sessions, even if your application is killed or gets deleted. Data in Shared Preferences is not typically used for large amounts of data. To perform actions such as saving, retrieving, or editing data in Shared Preferences, you use an instance of `SharedPreferences.Editor`. + +Visit the following resources to learn more: + +- [@official@Shared Preferences Documentation](https://developer.android.com/training/data-storage/shared-preferences) +- [@video@SharedPreferences in Android](https://www.youtube.com/watch?v=rJ3uwqko9Ew) diff --git a/src/data/roadmaps/android/content/signed-apk@_FSlD_qTz5Xo0x3pB6sZI.md b/src/data/roadmaps/android/content/signed-apk@_FSlD_qTz5Xo0x3pB6sZI.md index 4d64ad4af..da7a8be7f 100644 --- a/src/data/roadmaps/android/content/signed-apk@_FSlD_qTz5Xo0x3pB6sZI.md +++ b/src/data/roadmaps/android/content/signed-apk@_FSlD_qTz5Xo0x3pB6sZI.md @@ -1,3 +1,7 @@ # Signed APK -A **Signed APK** is a version of your app that you prepare for distribution in the Play Store or other Android markets. When you sign your app using a private key, you authenticate your identity as the developer of the app. It is a required step by the Android system that ensures only updates to the APK that are from the original developer will be accepted. The Android system refuses to install an app if it's not signed appropriately, thereby protecting users from potential security risks. Please make sure that you keep your private key in a safe place for future updates to your app, losing it would imply that you cannot update your app anymore. \ No newline at end of file +A **Signed APK** is a version of your app that you prepare for distribution in the Play Store or other Android markets. When you sign your app using a private key, you authenticate your identity as the developer of the app. It is a required step by the Android system that ensures only updates to the APK that are from the original developer will be accepted. The Android system refuses to install an app if it's not signed appropriately, thereby protecting users from potential security risks. + +Visit the following resources to learn more: + +- [@official@Signing Your App](https://developer.android.com/studio/publish/app-signing) diff --git a/src/data/roadmaps/android/content/state-changes@oUjetA2eduvQIeLcQlLcu.md b/src/data/roadmaps/android/content/state-changes@oUjetA2eduvQIeLcQlLcu.md index 4a2dcfd40..4c32ea04a 100644 --- a/src/data/roadmaps/android/content/state-changes@oUjetA2eduvQIeLcQlLcu.md +++ b/src/data/roadmaps/android/content/state-changes@oUjetA2eduvQIeLcQlLcu.md @@ -1,3 +1,7 @@ # State Changes -In Android, an "Activity" is a crucial component that represents a single screen with a user interface. One or more active activities make up an Application. These activities can go through different states in their lifecycle, often due to user interaction or system interruption. The primary states of an Activity include `Created`, `Started`, `Resumed`, `Paused`, `Stopped`, `Restarted`, and `Destroyed`. The "Created" state occurs when an activity instance is being created. The "Started" state is when the activity is visible to the user, while "Resumed" is when the activity is interacting with the user. An activity is "Paused" when it loses focus but is partly visible, "Stopped" when it's not visible, "Restarted" when the activity is about to be started, and "Destroyed" when the activity is finished or the system is temporarily destroying it. +"Activity" is a crucial component that represents a single screen with a user interface. One or more active activities make up an Application. These activities can go through different states in their lifecycle, often due to user interaction or system interruption. The primary states of an Activity include `Created`, `Started`, `Resumed`, `Paused`, `Stopped`, `Restarted`, and `Destroyed`. The "Created" state occurs when an activity instance is being created. The "Started" state is when the activity is visible to the user, while "Resumed" is when the activity is interacting with the user. An activity is "Paused" when it loses focus but is partly visible, "Stopped" when it's not visible, "Restarted" when the activity is about to be started, and "Destroyed" when the activity is finished or the system is temporarily destroying it. + +Visit the following resources to learn more: + +- [@official@Activity Lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle) diff --git a/src/data/roadmaps/android/content/storage@0fNQWRxst8xRstIfPaPO6.md b/src/data/roadmaps/android/content/storage@0fNQWRxst8xRstIfPaPO6.md index 948a88d85..b72153de2 100644 --- a/src/data/roadmaps/android/content/storage@0fNQWRxst8xRstIfPaPO6.md +++ b/src/data/roadmaps/android/content/storage@0fNQWRxst8xRstIfPaPO6.md @@ -1,3 +1,7 @@ # Storage -On Android devices, storage refers to where your data such as apps, photos, videos, and music are saved. It can be categorized into two types: internal and external storage. Internal Storage is where data is stored that's tied directly to your app. This data is private by default and not accessible by other apps. External Storage, on the other hand, is a shared space where all apps can read and write data. It can be further subcategorized into Public and Private directories. Public directories are shared among all apps while private directories are specific to your app but can be accessed by other apps if they have the appropriate permissions. To control the access to these storage types, Android provides a file-based and a Scoped Storage framework. The latter limits apps' access to external storage and gives users more control over their data. \ No newline at end of file +On Android devices, storage refers to where your data such as apps, photos, videos, and music are saved. It can be categorized into two types: internal and external storage. Internal Storage is where data is stored that's tied directly to your app. This data is private by default and not accessible by other apps. External Storage, on the other hand, is a shared space where all apps can read and write data. It can be further sub-categorized into Public and Private directories. Public directories are shared among all apps while private directories are specific to your app but can be accessed by other apps if they have the appropriate permissions. + +Visit the following resources to learn more: + +- [@official@Storage](https://developer.android.com/guide/topics/data/data-storage) diff --git a/src/data/roadmaps/android/content/tabs@pEBpXv3Jf1AzBNHlvVrG8.md b/src/data/roadmaps/android/content/tabs@pEBpXv3Jf1AzBNHlvVrG8.md index 04caef9e6..89d4ccca8 100644 --- a/src/data/roadmaps/android/content/tabs@pEBpXv3Jf1AzBNHlvVrG8.md +++ b/src/data/roadmaps/android/content/tabs@pEBpXv3Jf1AzBNHlvVrG8.md @@ -4,4 +4,4 @@ Tabs in Android Studio are a UI component used to organize content into multiple Visit the following resources to learn more: -- [@official@Android developers: Material Tabs](https://developer.android.com/reference/com/google/android/material/tabs/package-summary) \ No newline at end of file +- [@official@Material Tabs](https://developer.android.com/reference/com/google/android/material/tabs/package-summary) diff --git a/src/data/roadmaps/android/content/tasks--backstack@-O-G9bg36ut8NnZcdOaop.md b/src/data/roadmaps/android/content/tasks--backstack@-O-G9bg36ut8NnZcdOaop.md index 6793b8a81..488d28772 100644 --- a/src/data/roadmaps/android/content/tasks--backstack@-O-G9bg36ut8NnZcdOaop.md +++ b/src/data/roadmaps/android/content/tasks--backstack@-O-G9bg36ut8NnZcdOaop.md @@ -1,3 +1,7 @@ # Tasks and Backstack -The **tasks backstack** in Android refers to the way Android manages and arranges tasks in a stack-like structure. Every task has a stack of activities, which is referred to as the task's back stack. The activities are placed in the order they are opened. When a new activity is started, it is placed at the top of the stack and becomes the running activity, while the previous activity is paused and put into the back stack. When you press the back button, the current activity is destroyed and the activity at the top of the back stack becomes active again. Android defines how to navigate between tasks and activities using this back stack concept. \ No newline at end of file +The **tasks backstack** in Android refers to the way Android manages and arranges tasks in a stack-like structure. Every task has a stack of activities, which is referred to as the task's back stack. The activities are placed in the order they are opened. When a new activity is started, it is placed at the top of the stack and becomes the running activity, while the previous activity is paused and put into the back stack. When you press the back button, the current activity is destroyed and the activity at the top of the back stack becomes active again. Android defines how to navigate between tasks and activities using this back stack concept. + +Visit the following resources to learn more: + +- [@official@Tasks and Backstack](https://developer.android.com/guide/components/activities/tasks-and-back-stack) diff --git a/src/data/roadmaps/android/content/testing@ZOQm5OlzCA-h_yxywwDrW.md b/src/data/roadmaps/android/content/testing@ZOQm5OlzCA-h_yxywwDrW.md index e25b54975..49489cbe7 100644 --- a/src/data/roadmaps/android/content/testing@ZOQm5OlzCA-h_yxywwDrW.md +++ b/src/data/roadmaps/android/content/testing@ZOQm5OlzCA-h_yxywwDrW.md @@ -1,3 +1,7 @@ # Testing -***Android Testing*** is a crucial part of the app development process. It involves validating the functionality, performance, usability, and consistency of your app before deploying it to the Play Store. There are two types of testing methods notably used: **Unit testing** and **Instrumentation testing**. Unit testing, as the name suggests, tests each unit or segment of your code separately. It doesn't require Android dependencies and hence, runs faster. Instrumentation testing, on another hand, requires Android dependencies and is slower. Instrumentation testing tests the UIs, simulates user interactions and validates the navigation between different parts of your app. Android provides built-in testing frameworks like `JUnit` for unit testing and `Espresso` for Instrumentation testing. These can effectively test different parts of your app, assuring its robustness. \ No newline at end of file +**Testing** is a crucial part of the app development process. It involves validating the functionality, performance, usability, and consistency of your app before deploying it to the Play Store. There are two types of testing methods notably used: **Unit testing** and **Instrumentation Testing**. Unit testing, as the name suggests, tests each unit or segment of your code separately. It doesn't require Android dependencies and hence, runs faster. Instrumentation testing, on another hand, requires Android dependencies and is slower. Instrumentation testing tests the UIs, simulates user interactions and validates the navigation between different parts of your app. Android provides built-in testing frameworks like `JUnit` for unit testing and `Espresso` for Instrumentation testing. + +Visit the following resources to learn more: + +- [@official@Testing](https://developer.android.com/training/testing) diff --git a/src/data/roadmaps/android/content/textview@znvZp24L-PcQwkSObtixs.md b/src/data/roadmaps/android/content/textview@znvZp24L-PcQwkSObtixs.md index d24d19261..2b9d3d0c0 100644 --- a/src/data/roadmaps/android/content/textview@znvZp24L-PcQwkSObtixs.md +++ b/src/data/roadmaps/android/content/textview@znvZp24L-PcQwkSObtixs.md @@ -4,4 +4,4 @@ TextView is a widget that is seen in every android application. This widget is u Visit the following resources to learn more: -- [@article@Android developers: TextView](https://developer.android.com/reference/android/widget/TextView) +- [@article@TextView](https://developer.android.com/reference/android/widget/TextView) diff --git a/src/data/roadmaps/android/content/the-fundamentals@HlUUGj3dOZ68t4gIjerXh.md b/src/data/roadmaps/android/content/the-fundamentals@HlUUGj3dOZ68t4gIjerXh.md index 55c77fe8d..29fcabd58 100644 --- a/src/data/roadmaps/android/content/the-fundamentals@HlUUGj3dOZ68t4gIjerXh.md +++ b/src/data/roadmaps/android/content/the-fundamentals@HlUUGj3dOZ68t4gIjerXh.md @@ -1,3 +1,7 @@ # The Fundamentals -"The Fundamentals" of Android primarily concentrate on 5 components; Activities, Services, Broadcast Receivers, Content Providers, and Intents. **Activities** are essentially what you see on your screen; each screen in an app is a separate activity. **Services** run in the background to perform long-running operations or to perform work for remote processes. They do not provide a user interface. **Broadcast Receivers** respond to broadcast messages from other applications or from the system itself. These messages are often in the form of Intents. **Content Providers** manage a shared set of app data that other apps can query or modify, through a structured interface. Finally, **Intents** are messaging objects which facilitate the communication between the aforementioned components. Understanding these five core concepts is key to mastering Android fundamentals. \ No newline at end of file +"The Fundamentals" of Android primarily concentrate on 5 components; Activities, Services, Broadcast Receivers, Content Providers, and Intents. **Activities** are essentially what you see on your screen; each screen in an app is a separate activity. **Services** run in the background to perform long-running operations or to perform work for remote processes. They do not provide a user interface. **Broadcast Receivers** respond to broadcast messages from other applications or from the system itself. These messages are often in the form of Intents. **Content Providers** manage a shared set of app data that other apps can query or modify, through a structured interface. Finally, **Intents** are messaging objects which facilitate the communication between the aforementioned components. Understanding these five core concepts is key to mastering Android fundamentals. + +Visit the following resources to learn more: + +- [@official@The Fundamentals](https://developer.android.com/guide/components/fundamentals) diff --git a/src/data/roadmaps/android/content/threads@BeGrA5BDBMZP1Jy7n-wl-.md b/src/data/roadmaps/android/content/threads@BeGrA5BDBMZP1Jy7n-wl-.md index e496add54..b289149bd 100644 --- a/src/data/roadmaps/android/content/threads@BeGrA5BDBMZP1Jy7n-wl-.md +++ b/src/data/roadmaps/android/content/threads@BeGrA5BDBMZP1Jy7n-wl-.md @@ -1,3 +1,7 @@ # Threads -In Android, a `Thread` is a concurrent unit of execution. It has its own call stack, but can share its state with other threads in the same process, i.e., they can share the same memory area. They're primarily used in Android to perform operations in the background. One important aspect to note is that Android UI operations are not thread-safe, meaning they should always be done on the UI thread. Operations on `Threads` are typically managed through `Handler`, `Looper` and `MessageQueue` classes. Android also provides high-level constructs like `AsyncTask` and `Loader` for managing threads in relation to the UI. \ No newline at end of file +In Android, a `Thread` is a concurrent unit of execution. It has its own call stack, but can share its state with other threads in the same process, i.e., they can share the same memory area. They're primarily used in Android to perform operations in the background. One important aspect to note is that Android UI operations are not thread-safe, meaning they should always be done on the UI thread. Operations on `Threads` are typically managed through `Handler`, `Looper` and `MessageQueue` classes. Android also provides high-level constructs like `AsyncTask` and `Loader` for managing threads in relation to the UI. + +Visit the following resources to learn more: + +- [@official@Threads](https://developer.android.com/guide/components/processes-and-threads) diff --git a/src/data/roadmaps/android/content/timber@VFOD4JrV8kZ2583G3oT95.md b/src/data/roadmaps/android/content/timber@VFOD4JrV8kZ2583G3oT95.md index fc3fcdc6d..5497fc0fd 100644 --- a/src/data/roadmaps/android/content/timber@VFOD4JrV8kZ2583G3oT95.md +++ b/src/data/roadmaps/android/content/timber@VFOD4JrV8kZ2583G3oT95.md @@ -1,3 +1,7 @@ # Timber -`Timber` is a logging utility tool that has been specifically extended from the `Log` class of Android. It has been built to simplify the logging process while aiming to reduce the amount of boilerplate code the developer has to write. It was designed and is maintained by Jake Wharton, a renowned contributor in the Android Developer community. In Timber, each log message is directed to the next available logger, reducing the redundancy of manually assigning log tags. The simplicity of Timber is highlighted by its ability to log without defining any tag. Most importantly, Timber only logs messages in debug builds by default, avoiding potential data leaks in your production application. \ No newline at end of file +`Timber` is a logging utility tool that has been specifically extended from the `Log` class of Android. It has been built to simplify the logging process while aiming to reduce the amount of boilerplate code the developer has to write. It was designed and is maintained by Jake Wharton, a renowned contributor in the Android Developer community. In Timber, each log message is directed to the next available logger, reducing the redundancy of manually assigning log tags. The simplicity of Timber is highlighted by its ability to log without defining any tag. Most importantly, Timber only logs messages in debug builds by default, avoiding potential data leaks in your production application. + +Visit the following resources to learn more: + +- [@opensource@Timber on GitHub](https://github.com/JakeWharton/timber) diff --git a/src/data/roadmaps/android/content/toast@BVgO9n7tGlVdiS72-hFSd.md b/src/data/roadmaps/android/content/toast@BVgO9n7tGlVdiS72-hFSd.md index 28a3e401c..c3fb5eb57 100644 --- a/src/data/roadmaps/android/content/toast@BVgO9n7tGlVdiS72-hFSd.md +++ b/src/data/roadmaps/android/content/toast@BVgO9n7tGlVdiS72-hFSd.md @@ -4,4 +4,4 @@ A `toast` provides simple feedback about an operation in a small popup. It only Visit the following resources to learn more: -- [@article@Android developers: Toast](https://developer.android.com/guide/topics/ui/notifiers/toasts) +- [@official@Toast](https://developer.android.com/guide/topics/ui/notifiers/toasts) diff --git a/src/data/roadmaps/android/content/version-control@5s1CqsYCOXjNroDHaGKGa.md b/src/data/roadmaps/android/content/version-control@5s1CqsYCOXjNroDHaGKGa.md index ba41c05b4..f2469a7dd 100644 --- a/src/data/roadmaps/android/content/version-control@5s1CqsYCOXjNroDHaGKGa.md +++ b/src/data/roadmaps/android/content/version-control@5s1CqsYCOXjNroDHaGKGa.md @@ -1,3 +1,7 @@ # Version Control Systems -_Version Control_ is a system that records changes to a file or set of files over time so that you can recall specific versions later. An essential tool for software development, it helps to track changes, enhance collaboration, and manage different versions of a project. Two common types of version control systems are Centralized Version Control System (CVCS) and Distributed Version Control System (DVCS). CVCS uses a central server to store all versions of a project, with users getting snapshots from that server. Examples include SVN and Perforce. On the other hand, DVCS allows multiple developers to work on a single project simultaneously. Each user has a complete backup of all versions of the work. Examples include Git and Mercurial. \ No newline at end of file +_Version Control_ is a system that records changes to a file or set of files over time so that you can recall specific versions later. An essential tool for software development, it helps to track changes, enhance collaboration, and manage different versions of a project. Two common types of version control systems are Centralized Version Control System (CVCS) and Distributed Version Control System (DVCS). CVCS uses a central server to store all versions of a project, with users getting snapshots from that server. Examples include SVN and Perforce. On the other hand, DVCS allows multiple developers to work on a single project simultaneously. Each user has a complete backup of all versions of the work. Examples include Git and Mercurial. + +Visit the following resources to learn more: + +- [@article@Version Control Systems](https://en.wikipedia.org/wiki/Version_control) diff --git a/src/data/roadmaps/android/content/what-is-and-how-to-use-gradle@FVxNjbDBxgf6vkZWw1Awt.md b/src/data/roadmaps/android/content/what-is-and-how-to-use-gradle@FVxNjbDBxgf6vkZWw1Awt.md index e6bd8d12f..4d27ca5af 100644 --- a/src/data/roadmaps/android/content/what-is-and-how-to-use-gradle@FVxNjbDBxgf6vkZWw1Awt.md +++ b/src/data/roadmaps/android/content/what-is-and-how-to-use-gradle@FVxNjbDBxgf6vkZWw1Awt.md @@ -1,10 +1,12 @@ # What is and how to use Gradle? -**Using Gradle**: Gradle is a powerful build system used in Android development that allows you to define your project and dependencies, and distinguish between different build types and flavors. Gradle uses a domain-specific language (DSL) which gives developers almost complete control over the build process. When you trigger a build in Android Studio, Gradle is the tool working behind the scenes to compile and package your app. It looks at the dependencies you declared in your build.gradle files and create a build script accordingly. Using Gradle in Android development requires continuous editing of the build.gradle files to manage app dependencies, build variants, signing configurations, and other essential aspects related to building your app. +Gradle is a powerful build system used in Android development that allows you to define your project and dependencies, and distinguish between different build types and flavors. Gradle uses a domain-specific language (DSL) which gives developers almost complete control over the build process. When you trigger a build in Android Studio, Gradle is the tool working behind the scenes to compile and package your app. It looks at the dependencies you declared in your build.gradle files and create a build script accordingly. Using Gradle in Android development requires continuous editing of the build.gradle files to manage app dependencies, build variants, signing configurations, and other essential aspects related to building your app. Visit the following resources to learn more: -- [@video@Introduction to Gradle for Complete Beginners - 25minutes](https://youtu.be/-dtcEMLNmn0?si=NuIP-3wNpUrxfTxA) +- [@official@Gradle Build Tool](https://gradle.org/) +- [@official@Gradle Documentation](https://docs.gradle.org/current/userguide/getting_started_eng.html) - [@video@Gradle Course for Beginners - 55minutes](https://www.youtube.com/watch?v=R6Z-Sxb837I) +- [@video@Introduction to Gradle for Complete Beginners - 25minutes](https://youtu.be/-dtcEMLNmn0?si=NuIP-3wNpUrxfTxA) - [@article@Get going with Gradle - PDF](https://assets.gradlehero.com/get-going-with-gradle/get-going-with-gradle-book.pdf) - [@feed@Explore top posts about Gradle](https://app.daily.dev/tags/gradle?ref=roadmapsh) diff --git a/src/data/roadmaps/android/content/workmanager@OAb_JD64uGm2tPoue7w6t.md b/src/data/roadmaps/android/content/workmanager@OAb_JD64uGm2tPoue7w6t.md index 6460e03f2..b28aa1cfc 100644 --- a/src/data/roadmaps/android/content/workmanager@OAb_JD64uGm2tPoue7w6t.md +++ b/src/data/roadmaps/android/content/workmanager@OAb_JD64uGm2tPoue7w6t.md @@ -1,3 +1,7 @@ # WorkManager -`WorkManager` is an Android library introduced by Google to execute tasks in a predictable and reliable manner. It's designed for tasks that require guaranteed execution, even if the app has been closed or the device restarts. It is backwards compatible up to API 14 and uses JobScheduler for API 23 and above, whilst using a combination of BroadcastReceiver + AlarmManager for APIs 14 and up. Regardless of the device API level, WorkManager works for all Android devices. Three types of work are supported by WorkManager - OneTimeWorkRequest, PeriodicWorkRequest, and DelayedWorkRequest. You can have constraints too for your work execution like work only when there's Internet or work only when the device is in idle state. It also supports work-chaining where you can create a chain of works to be performed in a specific order. \ No newline at end of file +`WorkManager` is an Android library introduced by Google to execute tasks in a predictable and reliable manner. It's designed for tasks that require guaranteed execution, even if the app has been closed or the device restarts. It is backwards compatible up to API 14 and uses JobScheduler for API 23 and above, whilst using a combination of BroadcastReceiver + AlarmManager for APIs 14 and up. Regardless of the device API level, WorkManager works for all Android devices. Three types of work are supported by WorkManager - OneTimeWorkRequest, PeriodicWorkRequest, and DelayedWorkRequest. + +Visit the following resources to learn more: + +- [@official@WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager) diff --git a/src/data/roadmaps/api-design/api-design.md b/src/data/roadmaps/api-design/api-design.md index 07d2589d8..fe9bf9087 100644 --- a/src/data/roadmaps/api-design/api-design.md +++ b/src/data/roadmaps/api-design/api-design.md @@ -7,7 +7,7 @@ briefTitle: 'API Design' briefDescription: 'Step by step guide to learn how to design and build robust APIs.' title: 'API Design' description: 'Step by step guide to learn how to design and build robust APIs.' -isNew: true +isNew: false hasTopics: true dimensions: width: 968 diff --git a/src/data/roadmaps/backend/backend.json b/src/data/roadmaps/backend/backend.json index 4045ce770..215295dc9 100644 --- a/src/data/roadmaps/backend/backend.json +++ b/src/data/roadmaps/backend/backend.json @@ -1318,7 +1318,7 @@ "type": "subtopic", "position": { "x": 141.1821043313223, - "y": 1234.4323026615211 + "y": 1195.4323026615211 }, "selected": false, "data": { @@ -1344,7 +1344,7 @@ "focusable": true, "positionAbsolute": { "x": 141.1821043313223, - "y": 1234.4323026615211 + "y": 1195.4323026615211 }, "dragging": false }, @@ -1355,7 +1355,7 @@ "type": "subtopic", "position": { "x": 141.1821043313223, - "y": 1450.4323026615211 + "y": 1411.4323026615211 }, "selected": false, "data": { @@ -1381,7 +1381,7 @@ "focusable": true, "positionAbsolute": { "x": 141.1821043313223, - "y": 1450.4323026615211 + "y": 1411.4323026615211 }, "dragging": false }, @@ -1392,7 +1392,7 @@ "type": "subtopic", "position": { "x": 141.1821043313223, - "y": 1288.4323026615211 + "y": 1249.4323026615211 }, "selected": false, "data": { @@ -1418,7 +1418,7 @@ "focusable": true, "positionAbsolute": { "x": 141.1821043313223, - "y": 1288.4323026615211 + "y": 1249.4323026615211 }, "dragging": false }, @@ -1429,7 +1429,7 @@ "type": "subtopic", "position": { "x": 141.1821043313223, - "y": 1504.4323026615211 + "y": 1465.4323026615211 }, "selected": false, "data": { @@ -1455,7 +1455,7 @@ "focusable": true, "positionAbsolute": { "x": 141.1821043313223, - "y": 1504.4323026615211 + "y": 1465.4323026615211 }, "dragging": false }, @@ -1466,7 +1466,7 @@ "type": "subtopic", "position": { "x": 141.1821043313223, - "y": 1342.4323026615211 + "y": 1303.4323026615211 }, "selected": false, "data": { @@ -1492,7 +1492,7 @@ "focusable": true, "positionAbsolute": { "x": 141.1821043313223, - "y": 1342.4323026615211 + "y": 1303.4323026615211 }, "dragging": false }, @@ -1503,7 +1503,7 @@ "type": "subtopic", "position": { "x": 141.1821043313223, - "y": 1558.4323026615211 + "y": 1519.4323026615211 }, "selected": false, "data": { @@ -1529,7 +1529,7 @@ "focusable": true, "positionAbsolute": { "x": 141.1821043313223, - "y": 1558.4323026615211 + "y": 1519.4323026615211 }, "dragging": false, "resizing": false @@ -1541,7 +1541,7 @@ "type": "subtopic", "position": { "x": 141.1821043313223, - "y": 1396.4323026615211 + "y": 1357.4323026615211 }, "selected": false, "data": { @@ -1567,7 +1567,7 @@ "focusable": true, "positionAbsolute": { "x": 141.1821043313223, - "y": 1396.4323026615211 + "y": 1357.4323026615211 }, "dragging": false }, @@ -6148,6 +6148,41 @@ }, "focusable": true, "resizing": false + }, + { + "id": "ZsZvStCvKwFhlBYe9HGhl", + "type": "subtopic", + "position": { + "x": 141.18643733008196, + "y": 1573.4323026615211 + }, + "selected": false, + "data": { + "label": "Migrations", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "legend": { + "id": "NJhQIvMyMD1Cu-JA1UCmJ", + "color": "#874efe", + "label": "Personal Recommendation / Opinion", + "position": "right-center" + } + }, + "zIndex": 999, + "width": 161, + "height": 49, + "positionAbsolute": { + "x": 141.18643733008196, + "y": 1573.4323026615211 + }, + "dragging": false, + "style": { + "width": 161, + "height": 49 + } } ], "edges": [ @@ -7875,6 +7910,23 @@ }, "id": "reactflow__edge-NvUcSDWBhzJZ31nzT4UlEw2-Wcp-VDdFHipwa7hNAp1z_x1", "selected": false + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "LJt27onEOeIBomiEMTyKd", + "sourceHandle": "z2", + "target": "ZsZvStCvKwFhlBYe9HGhl", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "reactflow__edge-LJt27onEOeIBomiEMTyKdz2-ZsZvStCvKwFhlBYe9HGhly1", + "selected": false } ] -} +} \ No newline at end of file diff --git a/src/data/roadmaps/backend/content/architectural-patterns@tHiUpG9LN35E5RaHddMv5.md b/src/data/roadmaps/backend/content/architectural-patterns@tHiUpG9LN35E5RaHddMv5.md index 807367cf8..a13dc0377 100644 --- a/src/data/roadmaps/backend/content/architectural-patterns@tHiUpG9LN35E5RaHddMv5.md +++ b/src/data/roadmaps/backend/content/architectural-patterns@tHiUpG9LN35E5RaHddMv5.md @@ -3,5 +3,6 @@ An architectural pattern is a general, reusable solution to a commonly occurring problem in software architecture within a given context. The architectural patterns address various issues in software engineering, such as computer hardware performance limitations, high availability and minimization of a business risk. Visit the following resources to learn more: + - [@article@14 Architectural Patterns to know](https://www.redhat.com/architect/14-software-architecture-patterns) - [@article@Architectural Patterns in a nutshell](https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013) diff --git a/src/data/roadmaps/backend/content/aws-neptune@5xy66yQrz1P1w7n6PcAFq.md b/src/data/roadmaps/backend/content/aws-neptune@5xy66yQrz1P1w7n6PcAFq.md index 5c54b2585..5eaf0d862 100644 --- a/src/data/roadmaps/backend/content/aws-neptune@5xy66yQrz1P1w7n6PcAFq.md +++ b/src/data/roadmaps/backend/content/aws-neptune@5xy66yQrz1P1w7n6PcAFq.md @@ -6,4 +6,4 @@ Learn more from the following resources: - [@official@AWS Neptune Website](https://aws.amazon.com/neptune/) - [@video@Getting Started with Neptune Serverless](https://www.youtube.com/watch?v=b04-jjM9t4g) -- [@article@Setting Up Amazon Neptune Graph Database](https://cliffordedsouza.medium.com/setting-up-amazon-neptune-graph-database-2b73512a7388) \ No newline at end of file +- [@article@Setting Up Amazon Neptune Graph Database](https://cliffordedsouza.medium.com/setting-up-amazon-neptune-graph-database-2b73512a7388) diff --git a/src/data/roadmaps/backend/content/backpressure@JansCqGDyXecQkD1K7E7e.md b/src/data/roadmaps/backend/content/backpressure@JansCqGDyXecQkD1K7E7e.md index 3932fa0cc..37e0fa072 100644 --- a/src/data/roadmaps/backend/content/backpressure@JansCqGDyXecQkD1K7E7e.md +++ b/src/data/roadmaps/backend/content/backpressure@JansCqGDyXecQkD1K7E7e.md @@ -5,5 +5,5 @@ Back pressure is a flow control mechanism in systems processing asynchronous dat Visit the following resources to learn more: - [@article@Awesome Architecture: Backpressure](https://awesome-architecture.com/back-pressure/) -- [@article@Backpressure explained — the resisted flow of data through software](https://medium.com/@jayphelps/backpressure-explained-the-flow-of-data-through-software-2350b3e77ce7) +- [@article@Backpressure explained — The Resisted Flow of Data through Software](https://medium.com/@jayphelps/backpressure-explained-the-flow-of-data-through-software-2350b3e77ce7) - [@video@What is Back Pressure](https://www.youtube.com/watch?v=viTGm_cV7lE) diff --git a/src/data/roadmaps/backend/content/base@QZwTLOvjUTaSb_9deuxsR.md b/src/data/roadmaps/backend/content/base@QZwTLOvjUTaSb_9deuxsR.md index 1dafb9e34..9005eaba9 100644 --- a/src/data/roadmaps/backend/content/base@QZwTLOvjUTaSb_9deuxsR.md +++ b/src/data/roadmaps/backend/content/base@QZwTLOvjUTaSb_9deuxsR.md @@ -4,4 +4,4 @@ Oracle Base Database Service enables you to maintain absolute control over your Learn more from the following resources: -- [@official@Base Database Website](https://docs.oracle.com/en-us/iaas/base-database/index.html) \ No newline at end of file +- [@official@Base Database Website](https://docs.oracle.com/en-us/iaas/base-database/index.html) diff --git a/src/data/roadmaps/backend/content/bcrypt@dlG1bVkDmjI3PEGpkm1xH.md b/src/data/roadmaps/backend/content/bcrypt@dlG1bVkDmjI3PEGpkm1xH.md index f05472240..ed2a7290d 100644 --- a/src/data/roadmaps/backend/content/bcrypt@dlG1bVkDmjI3PEGpkm1xH.md +++ b/src/data/roadmaps/backend/content/bcrypt@dlG1bVkDmjI3PEGpkm1xH.md @@ -4,6 +4,6 @@ Bcrypt is a password-hashing function designed to securely hash passwords for st Visit the following resources to learn more: -- [@article@bcrypts npm package](https://www.npmjs.com/package/bcrypt) +- [@opensource@bcrypt](https://www.npmjs.com/package/bcrypt) - [@article@Understanding bcrypt](https://auth0.com/blog/hashing-in-action-understanding-bcrypt/) - [@video@bcrypt explained](https://www.youtube.com/watch?v=AzA_LTDoFqY) diff --git a/src/data/roadmaps/backend/content/bitbucket@Ry_5Y-BK7HrkIc6X0JG1m.md b/src/data/roadmaps/backend/content/bitbucket@Ry_5Y-BK7HrkIc6X0JG1m.md index eb4fcbfbd..b0a4b86a9 100644 --- a/src/data/roadmaps/backend/content/bitbucket@Ry_5Y-BK7HrkIc6X0JG1m.md +++ b/src/data/roadmaps/backend/content/bitbucket@Ry_5Y-BK7HrkIc6X0JG1m.md @@ -1,6 +1,6 @@ # Bitbucket -Bitbucket is a web-based version control repository hosting service owned by Atlassian. It primarily uses Git version control systems, offering both cloud-hosted and self-hosted options. Bitbucket provides features such as pull requests for code review, branch permissions, and inline commenting on code. It integrates seamlessly with other Atlassian products like Jira and Trello, making it popular among teams already using Atlassian tools. Bitbucket supports continuous integration and deployment through Bitbucket Pipelines. It offers unlimited private repositories for small teams, making it cost-effective for smaller organizations. While similar to GitHub in many aspects, Bitbucket's integration with Atlassian's ecosystem and its pricing model for private repositories are key differentiators. It's widely used for collaborative software development, particularly in enterprise environments already invested in Atlassian's suite of products. +Bitbucket is a web-based version control repository hosting service owned by Atlassian. It primarily uses Git version control systems, offering both cloud-hosted and self-hosted options. Bitbucket provides features such as pull requests for code review, branch permissions, and inline commenting on code. It integrates seamlessly with other Atlassian products like Jira and Trello, making it popular among teams already using Atlassian tools. Bitbucket supports continuous integration and deployment through Bitbucket Pipelines. It offers unlimited private repositories for small teams, making it cost-effective for smaller organizations. Visit the following resources to learn more: diff --git a/src/data/roadmaps/backend/content/browsers-and-how-they-work@P82WFaTPgQEPNp5IIuZ1Y.md b/src/data/roadmaps/backend/content/browsers-and-how-they-work@P82WFaTPgQEPNp5IIuZ1Y.md index 8504830de..228190f12 100644 --- a/src/data/roadmaps/backend/content/browsers-and-how-they-work@P82WFaTPgQEPNp5IIuZ1Y.md +++ b/src/data/roadmaps/backend/content/browsers-and-how-they-work@P82WFaTPgQEPNp5IIuZ1Y.md @@ -7,4 +7,4 @@ Visit the following resources to learn more: - [@article@How Browsers Work](https://www.ramotion.com/blog/what-is-web-browser/) - [@article@Populating the Page: How Browsers Work](https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work) - [@video@How Do Web Browsers Work?](https://www.youtube.com/watch?v=5rLFYtXHo9s) -- [@feed@Explore top posts about Browsers](https://app.daily.dev/tags/browsers?ref=roadmapsh) \ No newline at end of file +- [@feed@Explore top posts about Browsers](https://app.daily.dev/tags/browsers?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/caching@ELj8af7Mi38kUbaPJfCUR.md b/src/data/roadmaps/backend/content/caching@ELj8af7Mi38kUbaPJfCUR.md index 65d38068f..758807435 100644 --- a/src/data/roadmaps/backend/content/caching@ELj8af7Mi38kUbaPJfCUR.md +++ b/src/data/roadmaps/backend/content/caching@ELj8af7Mi38kUbaPJfCUR.md @@ -1,3 +1,8 @@ # Caching Caching is a technique used in computing to store and retrieve frequently accessed data quickly, reducing the need to fetch it from the original, slower source repeatedly. It involves keeping a copy of data in a location that's faster to access than its primary storage. Caching can occur at various levels, including browser caching, application-level caching, and database caching. It significantly improves performance by reducing latency, decreasing network traffic, and lowering the load on servers or databases. Common caching strategies include time-based expiration, least recently used (LRU) algorithms, and write-through or write-back policies. While caching enhances speed and efficiency, it also introduces challenges in maintaining data consistency and freshness. Effective cache management is crucial in balancing performance gains with the need for up-to-date information in dynamic systems. + +Visit the following resources to learn more: + +- [@article@What is Caching - AWS](https://aws.amazon.com/caching/) +- [@article@Caching - Cloudflare](https://www.cloudflare.com/learning/cdn/what-is-caching/) diff --git a/src/data/roadmaps/backend/content/caddy@Op-PSPNoyj6Ss9CS09AXh.md b/src/data/roadmaps/backend/content/caddy@Op-PSPNoyj6Ss9CS09AXh.md index 840650c5f..63cd1bcaf 100644 --- a/src/data/roadmaps/backend/content/caddy@Op-PSPNoyj6Ss9CS09AXh.md +++ b/src/data/roadmaps/backend/content/caddy@Op-PSPNoyj6Ss9CS09AXh.md @@ -5,5 +5,5 @@ Caddy is a modern, open-source web server written in Go. It's known for its simp Visit the following resources to learn more: - [@official@Official Website](https://caddyserver.com/) -- [@opensource@caddyserver/caddy](https://github.com/caddyserver/caddy) +- [@opensource@caddyserver/caddy - Caddy on GitHub](https://github.com/caddyserver/caddy) - [@video@How to Make a Simple Caddy 2 Website](https://www.youtube.com/watch?v=WgUV_BlHvj0) diff --git a/src/data/roadmaps/backend/content/cdn@Nq2BO53bHJdFT1rGZPjYx.md b/src/data/roadmaps/backend/content/cdn@Nq2BO53bHJdFT1rGZPjYx.md index 55133c028..b0812afd7 100644 --- a/src/data/roadmaps/backend/content/cdn@Nq2BO53bHJdFT1rGZPjYx.md +++ b/src/data/roadmaps/backend/content/cdn@Nq2BO53bHJdFT1rGZPjYx.md @@ -1,10 +1,12 @@ # CDN (Content Delivery Network) A Content Delivery Network (CDN) service aims to provide high availability and performance improvements of websites. This is achieved with fast delivery of website assets and content typically via geographically closer endpoints to the client requests. + Traditional commercial CDNs (Amazon CloudFront, Akamai, CloudFlare and Fastly) provide servers across the globe which can be used for this purpose. Serving assets and contents via a CDN reduces bandwidth on website hosting, provides an extra layer of caching to reduce potential outages and can improve website security as well Visit the following resources to learn more: - [@article@CloudFlare - What is a CDN? | How do CDNs work?](https://www.cloudflare.com/en-ca/learning/cdn/what-is-a-cdn/) +- [@article@AWS - CDN](https://aws.amazon.com/what-is/cdn/) - [@video@What is Cloud CDN?](https://www.youtube.com/watch?v=841kyd_mfH0) - [@video@What is a CDN and how does it work?](https://www.youtube.com/watch?v=RI9np1LWzqw) diff --git a/src/data/roadmaps/backend/content/ci--cd@mGfD7HfuP184lFkXZzGjG.md b/src/data/roadmaps/backend/content/ci--cd@mGfD7HfuP184lFkXZzGjG.md index 459d96f0c..c2cec1275 100644 --- a/src/data/roadmaps/backend/content/ci--cd@mGfD7HfuP184lFkXZzGjG.md +++ b/src/data/roadmaps/backend/content/ci--cd@mGfD7HfuP184lFkXZzGjG.md @@ -4,9 +4,9 @@ CI/CD (Continuous Integration/Continuous Delivery) is a set of practices and too Visit the following resources to learn more: -- [@video@DevOps CI/CD Explained in 100 Seconds by Fireship](https://www.youtube.com/watch?v=scEDHsr3APg) -- [@video@Automate your Workflows with GitHub Actions](https://www.youtube.com/watch?v=nyKZTKQS_EQ) - [@article@What is CI/CD?](https://about.gitlab.com/topics/ci-cd/) - [@article@A Primer: Continuous Integration and Continuous Delivery (CI/CD)](https://thenewstack.io/a-primer-continuous-integration-and-continuous-delivery-ci-cd/) +- [@video@DevOps CI/CD Explained in 100 Seconds](https://www.youtube.com/watch?v=scEDHsr3APg) +- [@video@Automate your Workflows with GitHub Actions](https://www.youtube.com/watch?v=nyKZTKQS_EQ) - [@article@Articles about CI/CD](https://thenewstack.io/category/ci-cd/) - [@feed@Explore top posts about CI/CD](https://app.daily.dev/tags/cicd?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/client-side@KWTbEVX_WxS8jmSaAX3Fe.md b/src/data/roadmaps/backend/content/client-side@KWTbEVX_WxS8jmSaAX3Fe.md index 3ec9ff8c7..8b88ed80c 100644 --- a/src/data/roadmaps/backend/content/client-side@KWTbEVX_WxS8jmSaAX3Fe.md +++ b/src/data/roadmaps/backend/content/client-side@KWTbEVX_WxS8jmSaAX3Fe.md @@ -4,5 +4,5 @@ Client-side caching is a technique where web browsers or applications store data Visit the following resources to learn more: +- [@article@Client Side Caching](https://redis.io/docs/latest/develop/use/client-side-caching/) - [@video@Everything you need to know about HTTP Caching](https://www.youtube.com/watch?v=HiBDZgTNpXY) -- [@article@Client-side Caching](https://redis.io/docs/latest/develop/use/client-side-caching/) diff --git a/src/data/roadmaps/backend/content/data-replication@wrl7HHWXOaxoKVlNZxZ6d.md b/src/data/roadmaps/backend/content/data-replication@wrl7HHWXOaxoKVlNZxZ6d.md index 46c140495..8a18ec184 100644 --- a/src/data/roadmaps/backend/content/data-replication@wrl7HHWXOaxoKVlNZxZ6d.md +++ b/src/data/roadmaps/backend/content/data-replication@wrl7HHWXOaxoKVlNZxZ6d.md @@ -4,5 +4,5 @@ Data replication is the process of creating and maintaining multiple copies of t Visit the following resources to learn more: -- [@article@What is data replication?](https://www.ibm.com/topics/data-replication) +- [@article@Data Replication? - IBM](https://www.ibm.com/topics/data-replication) - [@video@What is Data Replication?](https://www.youtube.com/watch?v=iO8a1nMbL1o) diff --git a/src/data/roadmaps/backend/content/design-and-development-principles@9Fpoor-Os_9lvrwu5Zjh-.md b/src/data/roadmaps/backend/content/design-and-development-principles@9Fpoor-Os_9lvrwu5Zjh-.md index a68990229..e8d3b5f60 100644 --- a/src/data/roadmaps/backend/content/design-and-development-principles@9Fpoor-Os_9lvrwu5Zjh-.md +++ b/src/data/roadmaps/backend/content/design-and-development-principles@9Fpoor-Os_9lvrwu5Zjh-.md @@ -2,15 +2,18 @@ Design and Development Principles are fundamental guidelines that inform the creation of software systems. Key principles include: -1. SOLID (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) -2. DRY (Don't Repeat Yourself) -3. KISS (Keep It Simple, Stupid) -4. YAGNI (You Aren't Gonna Need It) -5. Separation of Concerns -6. Modularity -7. Encapsulation -8. Composition over Inheritance -9. Loose Coupling and High Cohesion -10. Principle of Least Astonishment +- SOLID (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) +- DRY (Don't Repeat Yourself) +- KISS (Keep It Simple, Stupid) +- YAGNI (You Aren't Gonna Need It) +- Separation of Concerns +- Modularity +- Encapsulation +- Composition over Inheritance +- Loose Coupling and High Cohesion +- Principle of Least Astonishment -These principles aim to create more maintainable, scalable, and robust software. They encourage clean code, promote reusability, reduce complexity, and enhance flexibility. While not rigid rules, these principles guide developers in making design decisions that lead to better software architecture and easier long-term maintenance. Applying these principles helps in creating systems that are easier to understand, modify, and extend over time. \ No newline at end of file +Visit the following resources to learn more: + +- [@article@Design Principles - Wikipedia](https://en.wikipedia.org/wiki/Design_principles) +- [@article@Design Principles - Microsoft](https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/index) diff --git a/src/data/roadmaps/backend/content/dns-and-how-it-works@hkxw9jPGYphmjhTjw8766.md b/src/data/roadmaps/backend/content/dns-and-how-it-works@hkxw9jPGYphmjhTjw8766.md index 2fa8069eb..aae7a2a63 100644 --- a/src/data/roadmaps/backend/content/dns-and-how-it-works@hkxw9jPGYphmjhTjw8766.md +++ b/src/data/roadmaps/backend/content/dns-and-how-it-works@hkxw9jPGYphmjhTjw8766.md @@ -1,6 +1,6 @@ # DNS -DNS (Domain Name System) is a hierarchical, decentralized naming system for computers, services, or other resources connected to the Internet or a private network. It translates human-readable domain names (like www.example.com) into IP addresses (like 192.0.2.1) that computers use to identify each other. DNS servers distributed worldwide work together to resolve these queries, forming a global directory service. The system uses a tree-like structure with root servers at the top, followed by top-level domain servers (.com, .org, etc.), authoritative name servers for specific domains, and local DNS servers. DNS is crucial for the functioning of the Internet, enabling users to access websites and services using memorable names instead of numerical IP addresses. It also supports email routing, service discovery, and other network protocols. +DNS (Domain Name System) is a hierarchical, decentralized naming system for computers, services, or other resources connected to the Internet or a private network. It translates human-readable domain names (like `www.example.com`) into IP addresses (like 192.0.2.1) that computers use to identify each other. DNS servers distributed worldwide work together to resolve these queries, forming a global directory service. The system uses a tree-like structure with root servers at the top, followed by top-level domain servers (.com, .org, etc.), authoritative name servers for specific domains, and local DNS servers. DNS is crucial for the functioning of the Internet, enabling users to access websites and services using memorable names instead of numerical IP addresses. It also supports email routing, service discovery, and other network protocols. Visit the following resources to learn more: diff --git a/src/data/roadmaps/backend/content/dynamodb@dwfEHInbX2eFiafM-nRMX.md b/src/data/roadmaps/backend/content/dynamodb@dwfEHInbX2eFiafM-nRMX.md index 589b32f32..eee4c10ae 100644 --- a/src/data/roadmaps/backend/content/dynamodb@dwfEHInbX2eFiafM-nRMX.md +++ b/src/data/roadmaps/backend/content/dynamodb@dwfEHInbX2eFiafM-nRMX.md @@ -4,6 +4,6 @@ Amazon DynamoDB is a fully managed, serverless NoSQL database service provided b Learn more from the following resources: -- [@official@AWS DynamoDB Website](https://aws.amazon.com/dynamodb/) +- [@official@AWS DynamoDB](https://aws.amazon.com/dynamodb/) - [@video@AWS DynamoDB Tutorial For Beginners](https://www.youtube.com/watch?v=2k2GINpO308) -- [@feed@daily.dev AWS DynamoDB Feed](https://app.daily.dev/tags/aws-dynamodb) \ No newline at end of file +- [@feed@daily.dev AWS DynamoDB Feed](https://app.daily.dev/tags/aws-dynamodb) diff --git a/src/data/roadmaps/backend/content/failure-modes@GwApfL4Yx-b5Y8dB9Vy__.md b/src/data/roadmaps/backend/content/failure-modes@GwApfL4Yx-b5Y8dB9Vy__.md index 6ee7ca09d..15c304d48 100644 --- a/src/data/roadmaps/backend/content/failure-modes@GwApfL4Yx-b5Y8dB9Vy__.md +++ b/src/data/roadmaps/backend/content/failure-modes@GwApfL4Yx-b5Y8dB9Vy__.md @@ -2,3 +2,6 @@ Database failure modes refer to the various ways in which a database system can malfunction or cease to operate correctly. These include hardware failures (like disk crashes or network outages), software bugs, data corruption, performance degradation due to overload, and inconsistencies in distributed systems. Common failure modes involve data loss, system unavailability, replication lag in distributed databases, and deadlocks. To mitigate these, databases employ strategies such as redundancy, regular backups, transaction logging, and failover mechanisms. Understanding potential failure modes is crucial for designing robust database systems with high availability and data integrity. It informs the implementation of fault tolerance measures, recovery procedures, and monitoring systems to ensure database reliability and minimize downtime in critical applications. +Visit the following resources to learn more: + +- [@article@Database Failure Modes](https://ieeexplore.ieee.org/document/7107294/) diff --git a/src/data/roadmaps/backend/content/firebase@RyJFLLGieJ8Xjt-DlIayM.md b/src/data/roadmaps/backend/content/firebase@RyJFLLGieJ8Xjt-DlIayM.md index 003b074df..f46fc1d88 100644 --- a/src/data/roadmaps/backend/content/firebase@RyJFLLGieJ8Xjt-DlIayM.md +++ b/src/data/roadmaps/backend/content/firebase@RyJFLLGieJ8Xjt-DlIayM.md @@ -1,9 +1,9 @@ # Firebase -Firebase is a comprehensive mobile and web application development platform owned by Google. It provides a suite of cloud-based services that simplify app development, hosting, and scaling. Key features include real-time database, cloud storage, authentication, hosting, cloud functions, and analytics. Firebase offers real-time synchronization, allowing data to be updated across clients instantly. Its authentication service supports multiple providers, including email/password, social media logins, and phone authentication. The platform's serverless architecture enables developers to focus on front-end development without managing backend infrastructure. Firebase also provides tools for app testing, crash reporting, and performance monitoring. While it excels in rapid prototyping and building real-time applications, its proprietary nature and potential for vendor lock-in are considerations for large-scale or complex applications. Firebase's ease of use and integration with Google Cloud Platform make it popular for startups and projects requiring quick deployment. +Firebase is a comprehensive mobile and web application development platform owned by Google. It provides a suite of cloud-based services that simplify app development, hosting, and scaling. Key features include real-time database, cloud storage, authentication, hosting, cloud functions, and analytics. Firebase offers real-time synchronization, allowing data to be updated across clients instantly. Its authentication service supports multiple providers, including email/password, social media logins, and phone authentication. The platform's serverless architecture enables developers to focus on front-end development without managing backend infrastructure. Firebase also provides tools for app testing, crash reporting, and performance monitoring. Learn more from the following resources: - [@official@Firebase Website](https://firebase.google.com/) - [@video@Firebase in 100 seconds](https://www.youtube.com/watch?v=vAoB4VbhRzM) -- [@course@The ultimate guide to Firebase](https://fireship.io/lessons/the-ultimate-beginners-guide-to-firebase/) \ No newline at end of file +- [@course@The Ultimate Guide to Firebase](https://fireship.io/lessons/the-ultimate-beginners-guide-to-firebase/) diff --git a/src/data/roadmaps/backend/content/git@_I1E__wCIVrhjMk6IMieE.md b/src/data/roadmaps/backend/content/git@_I1E__wCIVrhjMk6IMieE.md index 96fdacf10..868bd3b59 100644 --- a/src/data/roadmaps/backend/content/git@_I1E__wCIVrhjMk6IMieE.md +++ b/src/data/roadmaps/backend/content/git@_I1E__wCIVrhjMk6IMieE.md @@ -5,8 +5,8 @@ Git is a distributed version control system designed to handle projects of any s Visit the following resources to learn more: - [@roadmap@Learn Git & GitHub](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) -- [@article@Learn Git with Tutorials, News and Tips - Atlassian](https://www.atlassian.com/git) - [@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/backend/content/github@ptD8EVqwFUYr4W5A_tABY.md b/src/data/roadmaps/backend/content/github@ptD8EVqwFUYr4W5A_tABY.md index 3325fbd1e..f44df07ad 100644 --- a/src/data/roadmaps/backend/content/github@ptD8EVqwFUYr4W5A_tABY.md +++ b/src/data/roadmaps/backend/content/github@ptD8EVqwFUYr4W5A_tABY.md @@ -5,7 +5,7 @@ GitHub is a web-based platform for version control and collaboration using Git. Visit the following resources to learn more: - [@roadmap@Learn Git & GitHub](https://roadmap.sh/git-github) -- [@official@GitHub Website](https://github.com) +- [@official@GitHub](https://github.com) - [@video@What is GitHub?](https://www.youtube.com/watch?v=w3jLJU7DT5E) - [@video@Git vs. GitHub: Whats the difference?](https://www.youtube.com/watch?v=wpISo9TNjfU) - [@video@Git and GitHub for Beginners](https://www.youtube.com/watch?v=RGOj5yH7evk) diff --git a/src/data/roadmaps/backend/content/gitlab@Wcp-VDdFHipwa7hNAp1z_.md b/src/data/roadmaps/backend/content/gitlab@Wcp-VDdFHipwa7hNAp1z_.md index ee898b44f..8182c1091 100644 --- a/src/data/roadmaps/backend/content/gitlab@Wcp-VDdFHipwa7hNAp1z_.md +++ b/src/data/roadmaps/backend/content/gitlab@Wcp-VDdFHipwa7hNAp1z_.md @@ -4,7 +4,7 @@ GitLab is a web-based DevOps platform that provides a complete solution for the Visit the following resources to learn more: -- [@opensource@GitLab Website](https://gitlab.com/) -- [@article@GitLab Documentation](https://docs.gitlab.com/) +- [@official@GitLab](https://gitlab.com/) +- [@official@GitLab Documentation](https://docs.gitlab.com/) - [@video@What is Gitlab and Why Use It?](https://www.youtube.com/watch?v=bnF7f1zGpo4) - [@feed@Explore top posts about GitLab](https://app.daily.dev/tags/gitlab?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/god-design-patterns@6XIWO0MoE-ySl4qh_ihXa.md b/src/data/roadmaps/backend/content/god-design-patterns@6XIWO0MoE-ySl4qh_ihXa.md deleted file mode 100644 index ac419ee7c..000000000 --- a/src/data/roadmaps/backend/content/god-design-patterns@6XIWO0MoE-ySl4qh_ihXa.md +++ /dev/null @@ -1,13 +0,0 @@ -# Design Patterns - -Design patterns are typical solutions to commonly occurring problems in software design. They can be broken into three categories: - -- Creational Patterns for the creation of objects -- Structural Patterns to provide relationship between objects -- Behavioral Patterns to help define how objects interact - -Visit the following resources to learn more: - -- [@opensource@Design Patterns for Humans](https://github.com/kamranahmedse/design-patterns-for-humans) -- [@article@GOF design patterns](https://springframework.guru/gang-of-four-design-patterns/) -- [@article@Design Patterns](https://refactoring.guru/design-patterns) diff --git a/src/data/roadmaps/backend/content/graphql@zp3bq38tMnutT2N0tktOW.md b/src/data/roadmaps/backend/content/graphql@zp3bq38tMnutT2N0tktOW.md index 48fa46e44..f7e2e2be5 100644 --- a/src/data/roadmaps/backend/content/graphql@zp3bq38tMnutT2N0tktOW.md +++ b/src/data/roadmaps/backend/content/graphql@zp3bq38tMnutT2N0tktOW.md @@ -5,6 +5,6 @@ GraphQL is a query language for APIs and a runtime for executing those queries, Visit the following resources to learn more: - [@roadmap@GraphQL Roadmap](https://roadmap.sh/graphql) -- [@official@GraphQL Official Website](https://graphql.org/) +- [@official@GraphQL](https://graphql.org/) - [@video@Tutorial - GraphQL Explained in 100 Seconds](https://www.youtube.com/watch?v=eIQh02xuVw4) - [@feed@Explore top posts about GraphQL](https://app.daily.dev/tags/graphql?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/internet@SiYUdtYMDImRPmV2_XPkH.md b/src/data/roadmaps/backend/content/internet@SiYUdtYMDImRPmV2_XPkH.md index 6820d4151..0ecd7d396 100644 --- a/src/data/roadmaps/backend/content/internet@SiYUdtYMDImRPmV2_XPkH.md +++ b/src/data/roadmaps/backend/content/internet@SiYUdtYMDImRPmV2_XPkH.md @@ -10,4 +10,3 @@ Visit the following resources to learn more: - [@roadmap.sh@Introduction to Internet](/guides/what-is-internet) - [@video@How does the Internet work?](https://www.youtube.com/watch?v=x3c1ih2NJEg) - [@video@How does the internet work? (Full Course)](https://www.youtube.com/watch?v=zN8YNNHcaZc) - diff --git a/src/data/roadmaps/backend/content/json-apis@sNceS4MpSIjRkWhNDmrFg.md b/src/data/roadmaps/backend/content/json-apis@sNceS4MpSIjRkWhNDmrFg.md index 2c5691a15..7f36965ab 100644 --- a/src/data/roadmaps/backend/content/json-apis@sNceS4MpSIjRkWhNDmrFg.md +++ b/src/data/roadmaps/backend/content/json-apis@sNceS4MpSIjRkWhNDmrFg.md @@ -4,6 +4,6 @@ JSON or JavaScript Object Notation is an encoding scheme that is designed to eli Visit the following resources to learn more: -- [@official@Official Website](https://jsonapi.org/) +- [@official@JSON API](https://jsonapi.org/) - [@article@What is JSON API?](https://medium.com/@niranjan.cs/what-is-json-api-3b824fba2788) - [@video@JSON API: Explained in 4 minutes](https://www.youtube.com/watch?v=N-4prIh7t38) diff --git a/src/data/roadmaps/backend/content/kafka@VoYSis1F1ZfTxMlQlXQKB.md b/src/data/roadmaps/backend/content/kafka@VoYSis1F1ZfTxMlQlXQKB.md index 36809e3df..f17ab8cf3 100644 --- a/src/data/roadmaps/backend/content/kafka@VoYSis1F1ZfTxMlQlXQKB.md +++ b/src/data/roadmaps/backend/content/kafka@VoYSis1F1ZfTxMlQlXQKB.md @@ -4,7 +4,7 @@ Apache Kafka is a distributed event streaming platform designed for high-through Visit the following resources to learn more: -- [@official@Apache Kafka quickstart](https://kafka.apache.org/quickstart) +- [@official@Apache Kafka](https://kafka.apache.org/quickstart) - [@video@Apache Kafka Fundamentals](https://www.youtube.com/watch?v=B5j3uNBH8X4) - [@video@Kafka in 100 Seconds](https://www.youtube.com/watch?v=uvb00oaa3k8) - [@feed@Explore top posts about Kafka](https://app.daily.dev/tags/kafka?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/learn-about-apis@EwvLPSI6AlZ4TnNIJTZA4.md b/src/data/roadmaps/backend/content/learn-about-apis@EwvLPSI6AlZ4TnNIJTZA4.md index f3e307072..2f3546b1c 100644 --- a/src/data/roadmaps/backend/content/learn-about-apis@EwvLPSI6AlZ4TnNIJTZA4.md +++ b/src/data/roadmaps/backend/content/learn-about-apis@EwvLPSI6AlZ4TnNIJTZA4.md @@ -6,4 +6,4 @@ Visit the following resources to learn more: - [@article@What is an API?](https://aws.amazon.com/what-is/api/) - [@video@What is an API (in 5 minutes)](https://www.youtube.com/watch?v=ByGJQzlzxQg) -- [@feed@daily.dev API Feed](https://app.daily.dev/tags/rest-api) \ No newline at end of file +- [@feed@daily.dev API Feed](https://app.daily.dev/tags/rest-api) diff --git a/src/data/roadmaps/backend/content/lxc@31ZlpfIPr9-5vYZqvjUeL.md b/src/data/roadmaps/backend/content/lxc@31ZlpfIPr9-5vYZqvjUeL.md index e450af50c..7e607fe38 100644 --- a/src/data/roadmaps/backend/content/lxc@31ZlpfIPr9-5vYZqvjUeL.md +++ b/src/data/roadmaps/backend/content/lxc@31ZlpfIPr9-5vYZqvjUeL.md @@ -6,5 +6,5 @@ Visit the following resources to learn more: - [@official@LXC Documentation](https://linuxcontainers.org/lxc/documentation/) - [@article@What is LXC?](https://linuxcontainers.org/lxc/introduction/) -- [@video@Getting started with LXD Containerization](https://www.youtube.com/watch?v=aIwgPKkVj8s) -- [@video@Getting started with LXC containers](https://youtu.be/CWmkSj_B-wo) +- [@video@Getting Started with LXD Containerization](https://www.youtube.com/watch?v=aIwgPKkVj8s) +- [@video@Getting Started with LXC containers](https://youtu.be/CWmkSj_B-wo) diff --git a/src/data/roadmaps/backend/content/mariadb@tD3i-8gBpMKCHB-ITyDiU.md b/src/data/roadmaps/backend/content/mariadb@tD3i-8gBpMKCHB-ITyDiU.md index 59d8959fb..62e32111e 100644 --- a/src/data/roadmaps/backend/content/mariadb@tD3i-8gBpMKCHB-ITyDiU.md +++ b/src/data/roadmaps/backend/content/mariadb@tD3i-8gBpMKCHB-ITyDiU.md @@ -1,10 +1,10 @@ # MariaDB -MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry. MariaDB was created with the intention of being a more versatile, drop-in replacement version of MySQL +MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most feature rich, stable, and sanely licensed open SQL server in the industry. MariaDB was created with the intention of being a more versatile, drop-in replacement version of MySQL Visit the following resources to learn more: -- [@official@MariaDB website](https://mariadb.org/) +- [@official@MariaDB](https://mariadb.org/) - [@article@MariaDB vs MySQL](https://www.guru99.com/mariadb-vs-mysql.html) - [@video@MariaDB Tutorial For Beginners in One Hour](https://www.youtube.com/watch?v=_AMj02sANpI) - [@feed@Explore top posts about Infrastructure](https://app.daily.dev/tags/infrastructure?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/memcached@xPvVwGQw28uMeLYIWn8yn.md b/src/data/roadmaps/backend/content/memcached@xPvVwGQw28uMeLYIWn8yn.md index 8c4f802a2..badcc4af4 100644 --- a/src/data/roadmaps/backend/content/memcached@xPvVwGQw28uMeLYIWn8yn.md +++ b/src/data/roadmaps/backend/content/memcached@xPvVwGQw28uMeLYIWn8yn.md @@ -2,8 +2,6 @@ Memcached (pronounced variously mem-cash-dee or mem-cashed) is a general-purpose distributed memory-caching system. It is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source (such as a database or API) must be read. Memcached is free and open-source software, licensed under the Revised BSD license. Memcached runs on Unix-like operating systems (Linux and macOS) and on Microsoft Windows. It depends on the `libevent` library. Memcached's APIs provide a very large hash table distributed across multiple machines. When the table is full, subsequent inserts cause older data to be purged in the least recently used (LRU) order. Applications using Memcached typically layer requests and additions into RAM before falling back on a slower backing store, such as a database. -Memcached has no internal mechanism to track misses which may happen. However, some third-party utilities provide this functionality. - Visit the following resources to learn more: - [@opensource@memcached/memcached](https://github.com/memcached/memcached#readme) diff --git a/src/data/roadmaps/backend/content/migration-strategies@f7iWBkC0X7yyCoP_YubVd.md b/src/data/roadmaps/backend/content/migration-strategies@f7iWBkC0X7yyCoP_YubVd.md index 1be349a90..9b9df67c1 100644 --- a/src/data/roadmaps/backend/content/migration-strategies@f7iWBkC0X7yyCoP_YubVd.md +++ b/src/data/roadmaps/backend/content/migration-strategies@f7iWBkC0X7yyCoP_YubVd.md @@ -9,8 +9,6 @@ Migration strategies involve planning and executing the transition of applicatio 5. **Retain**: Keeping certain applications or systems in their current environment due to specific constraints or requirements. 6. **Retire**: Decommissioning applications that are no longer needed or are redundant. -Each strategy has its own trade-offs in terms of cost, complexity, and benefits, and the choice depends on factors like the application’s architecture, business needs, and resource availability. - Visit the following resources to learn more: - [@article@Databases as a Challenge for Continuous Delivery](https://phauer.com/2015/databases-challenge-continuous-delivery/) diff --git a/src/data/roadmaps/backend/content/migrations@ZsZvStCvKwFhlBYe9HGhl.md b/src/data/roadmaps/backend/content/migrations@ZsZvStCvKwFhlBYe9HGhl.md new file mode 100644 index 000000000..b729d7654 --- /dev/null +++ b/src/data/roadmaps/backend/content/migrations@ZsZvStCvKwFhlBYe9HGhl.md @@ -0,0 +1,8 @@ +# Migrations + +Database migrations are a version-controlled way to manage and apply incremental changes to a database schema over time, allowing developers to modify the database structure (e.g., adding tables, altering columns) without affecting existing data. They ensure that the database evolves alongside application code in a consistent, repeatable manner across environments (e.g., development, testing, production), while maintaining compatibility with older versions of the schema. Migrations are typically written in SQL or a database-agnostic language, and are executed using migration tools like Liquibase, Flyway, or built-in ORM features such as Django or Rails migrations. + +Learn more from the following resources: + +- [@article@What are Database Migrations?](https://www.prisma.io/dataguide/types/relational/what-are-database-migrations) +- [@video@Database Migrations for Beginners](https://www.youtube.com/watch?v=dJDBP7pPA-o) diff --git a/src/data/roadmaps/backend/content/monitoring@QvMEEsXh0-rzn5hDGcmEv.md b/src/data/roadmaps/backend/content/monitoring@QvMEEsXh0-rzn5hDGcmEv.md index 55657dd5c..f9b05ba5f 100644 --- a/src/data/roadmaps/backend/content/monitoring@QvMEEsXh0-rzn5hDGcmEv.md +++ b/src/data/roadmaps/backend/content/monitoring@QvMEEsXh0-rzn5hDGcmEv.md @@ -4,6 +4,6 @@ Monitoring involves continuously observing and tracking the performance, availab A few popular tools are Grafana, Sentry, Mixpanel, NewRelic. -- [@article@Top monitoring tools 2024](https://thectoclub.com/tools/best-application-monitoring-software/) +- [@article@Top Monitoring Tools](https://thectoclub.com/tools/best-application-monitoring-software/) - [@video@Grafana Explained in 5 Minutes](https://www.youtube.com/watch?v=lILY8eSspEo) -- [@feed@daily.dev Monitoring Feed](https://app.daily.dev/tags/monitoring) \ No newline at end of file +- [@feed@daily.dev Monitoring Feed](https://app.daily.dev/tags/monitoring) diff --git a/src/data/roadmaps/backend/content/monolithic-apps@Ke522R-4k6TDeiDRyZbbU.md b/src/data/roadmaps/backend/content/monolithic-apps@Ke522R-4k6TDeiDRyZbbU.md index fae29c5cd..007aba6db 100644 --- a/src/data/roadmaps/backend/content/monolithic-apps@Ke522R-4k6TDeiDRyZbbU.md +++ b/src/data/roadmaps/backend/content/monolithic-apps@Ke522R-4k6TDeiDRyZbbU.md @@ -6,4 +6,4 @@ Visit the following resources to learn more: - [@article@Pattern: Monolithic Architecture](https://microservices.io/patterns/monolithic.html) - [@article@Monolithic Architecture - Advantages & Disadvantages](https://datamify.medium.com/monolithic-architecture-advantages-and-disadvantages-e71a603eec89) -- [@video@Monolithic vs Microservice Architecture](https://www.youtube.com/watch?v=NdeTGlZ__Do) \ No newline at end of file +- [@video@Monolithic vs Microservice Architecture](https://www.youtube.com/watch?v=NdeTGlZ__Do) diff --git a/src/data/roadmaps/backend/content/ms-iis@0NJDgfe6eMa7qPUOI6Eya.md b/src/data/roadmaps/backend/content/ms-iis@0NJDgfe6eMa7qPUOI6Eya.md index ef1f8c905..fdcac99f2 100644 --- a/src/data/roadmaps/backend/content/ms-iis@0NJDgfe6eMa7qPUOI6Eya.md +++ b/src/data/roadmaps/backend/content/ms-iis@0NJDgfe6eMa7qPUOI6Eya.md @@ -4,7 +4,7 @@ Microsoft Internet Information Services (IIS) is a flexible, secure, and high-pe Visit the following resources to learn more: -- [@official@Official Website](https://www.iis.net/) +- [@official@Microsoft -IIS](https://www.iis.net/) - [@video@Learn Windows Web Server IIS](https://www.youtube.com/watch?v=1VdxPWwtISA) - [@video@What is IIS?](https://www.youtube.com/watch?v=hPWSqEXOjQY) - [@feed@Explore top posts about .NET](https://app.daily.dev/tags/.net?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/ms-sql@dEsTje8kfHwWjCI3zcgLC.md b/src/data/roadmaps/backend/content/ms-sql@dEsTje8kfHwWjCI3zcgLC.md index 144b75a3c..7fad28fcf 100644 --- a/src/data/roadmaps/backend/content/ms-sql@dEsTje8kfHwWjCI3zcgLC.md +++ b/src/data/roadmaps/backend/content/ms-sql@dEsTje8kfHwWjCI3zcgLC.md @@ -5,6 +5,6 @@ Microsoft SQL Server (MS SQL) is a relational database management system develop Visit the following resources to learn more: - [@roadmap@SQL Roadmap](https://roadmap.sh/sql) -- [@article@MS SQL website](https://www.microsoft.com/en-ca/sql-server/) +- [@official@MS SQL](https://www.microsoft.com/en-ca/sql-server/) - [@article@Tutorials for SQL Server](https://docs.microsoft.com/en-us/sql/sql-server/tutorials-for-sql-server-2016?view=sql-server-ver15) - [@video@SQL Server tutorial for beginners](https://www.youtube.com/watch?v=-EPMOaV7h_Q) diff --git a/src/data/roadmaps/backend/content/mysql@VPxOdjJtKAqmM5V0LR5OC.md b/src/data/roadmaps/backend/content/mysql@VPxOdjJtKAqmM5V0LR5OC.md index 9ef9e5580..c8204d097 100644 --- a/src/data/roadmaps/backend/content/mysql@VPxOdjJtKAqmM5V0LR5OC.md +++ b/src/data/roadmaps/backend/content/mysql@VPxOdjJtKAqmM5V0LR5OC.md @@ -4,8 +4,8 @@ MySQL is an open-source relational database management system (RDBMS) known for Visit the following resources to learn more: -- [@official@MySQL website](https://www.mysql.com/) -- [@article@W3Schools - MySQL tutorial ](https://www.w3schools.com/mySQl/default.asp) +- [@official@MySQL](https://www.mysql.com/) +- [@article@W3Schools - MySQL Tutorial](https://www.w3schools.com/mySQl/default.asp) - [@article@MySQL for Developers](https://planetscale.com/courses/mysql-for-developers/introduction/course-introduction) - [@article@MySQL Tutorial](https://www.mysqltutorial.org/) - [@video@MySQL Full Course for free](https://www.youtube.com/watch?v=5OdVJbNCSso) diff --git a/src/data/roadmaps/backend/content/nginx@z5AdThp9ByulmM9uekgm-.md b/src/data/roadmaps/backend/content/nginx@z5AdThp9ByulmM9uekgm-.md index af24e087e..00a88bdb2 100644 --- a/src/data/roadmaps/backend/content/nginx@z5AdThp9ByulmM9uekgm-.md +++ b/src/data/roadmaps/backend/content/nginx@z5AdThp9ByulmM9uekgm-.md @@ -4,7 +4,7 @@ Nginx is a high-performance, open-source web server and reverse proxy server kno Visit the following resources to learn more: -- [@official@Official Website](https://nginx.org/) +- [@official@Nginx Website](https://nginx.org/) - [@video@NGINX Explained in 100 Seconds](https://www.youtube.com/watch?v=JKxlsvZXG7c) - [@video@NGINX Tutorial for Beginners](https://www.youtube.com/watch?v=9t9Mp0BGnyI) - [@feed@Explore top posts about Nginx](https://app.daily.dev/tags/nginx?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/open-api-specs@9cD5ag1L0GqHx4_zxc5JX.md b/src/data/roadmaps/backend/content/open-api-specs@9cD5ag1L0GqHx4_zxc5JX.md index e3a581c5a..37d839b1b 100644 --- a/src/data/roadmaps/backend/content/open-api-specs@9cD5ag1L0GqHx4_zxc5JX.md +++ b/src/data/roadmaps/backend/content/open-api-specs@9cD5ag1L0GqHx4_zxc5JX.md @@ -1,4 +1,4 @@ -# Open api spec +# Open API Spec The OpenAPI Specification (OAS), formerly known as Swagger, is a standard for defining and documenting RESTful APIs. It provides a structured format in YAML or JSON to describe API endpoints, request and response formats, authentication methods, and other metadata. By using OAS, developers can create a comprehensive and machine-readable API description that facilitates client generation, automated documentation, and testing. This specification promotes consistency and clarity in API design, enhances interoperability between different systems, and enables tools to generate client libraries, server stubs, and interactive API documentation. @@ -7,4 +7,4 @@ Visit the following resources to learn more: - [@official@OpenAPI Specification Website](https://swagger.io/specification/) - [@official@Open API Live Editor](https://swagger.io/tools/swagger-editor/) - [@video@OpenAPI 3.0: How to Design and Document APIs with the Latest OpenAPI Specification 3.0](https://www.youtube.com/watch?v=6kwmW_p_Tig) -- [@vidoe@ REST API and OpenAPI: It’s Not an Either/Or Question ](https://www.youtube.com/watch?v=pRS9LRBgjYg) +- [@video@ REST API and OpenAPI: It’s Not an Either/Or Question](https://www.youtube.com/watch?v=pRS9LRBgjYg) diff --git a/src/data/roadmaps/backend/content/openid@z3EJBpgGm0_Uj3ymhypbX.md b/src/data/roadmaps/backend/content/openid@z3EJBpgGm0_Uj3ymhypbX.md index a610199bb..597470799 100644 --- a/src/data/roadmaps/backend/content/openid@z3EJBpgGm0_Uj3ymhypbX.md +++ b/src/data/roadmaps/backend/content/openid@z3EJBpgGm0_Uj3ymhypbX.md @@ -4,7 +4,7 @@ OpenID is an open standard for decentralized authentication that allows users to Visit the following resources to learn more: -- [@official@Official Website](https://openid.net/) +- [@official@OpenID Website](https://openid.net/) - [@article@OpenID Connect Protocol](https://auth0.com/docs/authenticate/protocols/openid-connect-protocol) - [@video@An Illustrated Guide to OAuth and OpenID Connect](https://www.youtube.com/watch?v=t18YB3xDfXI) - [@video@OAuth 2.0 and OpenID Connect (in plain English)](https://www.youtube.com/watch?v=996OiexHze0) diff --git a/src/data/roadmaps/backend/content/oracle@h1SAjQltHtztSt8QmRgab.md b/src/data/roadmaps/backend/content/oracle@h1SAjQltHtztSt8QmRgab.md index f6d5602ee..e6c5503a4 100644 --- a/src/data/roadmaps/backend/content/oracle@h1SAjQltHtztSt8QmRgab.md +++ b/src/data/roadmaps/backend/content/oracle@h1SAjQltHtztSt8QmRgab.md @@ -4,7 +4,7 @@ Oracle Database is a highly robust, enterprise-grade relational database managem Visit the following resources to learn more: -- [@official@Official Website](https://www.oracle.com/database/) -- [@article@Official Docs](https://docs.oracle.com/en/database/index.html) +- [@official@Oracle Website](https://www.oracle.com/database/) +- [@official@Oracle Docs](https://docs.oracle.com/en/database/index.html) - [@video@Oracle SQL Tutorial for Beginners](https://www.youtube.com/watch?v=ObbNGhcxXJA) - [@feed@Explore top posts about Oracle](https://app.daily.dev/tags/oracle?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/profiling-perfor@SYXJhanu0lFmGj2m2XXhS.md b/src/data/roadmaps/backend/content/profiling-perfor@SYXJhanu0lFmGj2m2XXhS.md index fd4ac6ce1..628ab8408 100644 --- a/src/data/roadmaps/backend/content/profiling-perfor@SYXJhanu0lFmGj2m2XXhS.md +++ b/src/data/roadmaps/backend/content/profiling-perfor@SYXJhanu0lFmGj2m2XXhS.md @@ -4,5 +4,5 @@ Profiling performance involves analyzing a system or application's behavior to i Learn more from the following resources: -- [@video@Performance Profiling](https://www.youtube.com/watch?v=MaauQTeGg2k) - [@article@How to Profile SQL Queries for Better Performance](https://servebolt.com/articles/profiling-sql-queries/) +- [@video@Performance Profiling](https://www.youtube.com/watch?v=MaauQTeGg2k) diff --git a/src/data/roadmaps/backend/content/real-time-data@5XGvep2qoti31bsyqNzrU.md b/src/data/roadmaps/backend/content/real-time-data@5XGvep2qoti31bsyqNzrU.md index f5a46c8ac..63e6002e5 100644 --- a/src/data/roadmaps/backend/content/real-time-data@5XGvep2qoti31bsyqNzrU.md +++ b/src/data/roadmaps/backend/content/real-time-data@5XGvep2qoti31bsyqNzrU.md @@ -3,5 +3,6 @@ Real-time data refers to information that is processed and made available immediately or with minimal delay, allowing users or systems to react promptly to current conditions. This type of data is essential in applications requiring immediate updates and responses, such as financial trading platforms, online gaming, real-time analytics, and monitoring systems. Real-time data processing involves capturing, analyzing, and delivering information as it is generated, often using technologies like stream processing frameworks (e.g., Apache Kafka, Apache Flink) and low-latency databases. Effective real-time data systems can handle high-speed data flows, ensuring timely and accurate decision-making. Learn more from the following resources: -- [@article@Real-time data - Wiki](https://en.wikipedia.org/wiki/Real-time_data) -- [@article@What is Real-time Data?](https://www.qlik.com/us/streaming-data/real-time-data) \ No newline at end of file + +- [@article@Real-time Data - Wiki](https://en.wikipedia.org/wiki/Real-time_data) +- [@article@What is Real-time Data?](https://www.qlik.com/us/streaming-data/real-time-data) diff --git a/src/data/roadmaps/backend/content/rethinkdb@5T0ljwlHL0545ICCeehcQ.md b/src/data/roadmaps/backend/content/rethinkdb@5T0ljwlHL0545ICCeehcQ.md index bb44c1288..437fc8699 100644 --- a/src/data/roadmaps/backend/content/rethinkdb@5T0ljwlHL0545ICCeehcQ.md +++ b/src/data/roadmaps/backend/content/rethinkdb@5T0ljwlHL0545ICCeehcQ.md @@ -5,4 +5,4 @@ RethinkDB is an open-source, distributed NoSQL database designed for real-time a Learn more from the following resources: - [@official@RethinkDB Website](https://rethinkdb.com/) -- [@course@RethinkDB Crash Course](https://www.youtube.com/watch?v=pW3PFtchHDc) \ No newline at end of file +- [@course@RethinkDB Crash Course](https://www.youtube.com/watch?v=pW3PFtchHDc) diff --git a/src/data/roadmaps/backend/content/rust@CWwh2abwqx4hAxpAGvhIx.md b/src/data/roadmaps/backend/content/rust@CWwh2abwqx4hAxpAGvhIx.md index c454b41c3..c559af2eb 100644 --- a/src/data/roadmaps/backend/content/rust@CWwh2abwqx4hAxpAGvhIx.md +++ b/src/data/roadmaps/backend/content/rust@CWwh2abwqx4hAxpAGvhIx.md @@ -4,7 +4,7 @@ Rust is a systems programming language known for its focus on safety, performanc Visit the following resources to learn more: -- [@official@The Rust Programming Language - online book](https://doc.rust-lang.org/book/) +- [@official@The Rust Programming Language - Book](https://doc.rust-lang.org/book/) - [@article@Rust vs. Go: Why They’re Better Together](https://thenewstack.io/rust-vs-go-why-theyre-better-together/) - [@article@Rust by the Numbers: The Rust Programming Language in 2021](https://thenewstack.io/rust-by-the-numbers-the-rust-programming-language-in-2021/) - [@video@Learn Rust Programming](https://www.youtube.com/watch?v=BpPEoZW5IiY) diff --git a/src/data/roadmaps/backend/content/saml@UCHtaePVxS-0kpqlYxbfC.md b/src/data/roadmaps/backend/content/saml@UCHtaePVxS-0kpqlYxbfC.md index d709963d8..09cb5760b 100644 --- a/src/data/roadmaps/backend/content/saml@UCHtaePVxS-0kpqlYxbfC.md +++ b/src/data/roadmaps/backend/content/saml@UCHtaePVxS-0kpqlYxbfC.md @@ -1,8 +1,8 @@ -## Security Assertion Markup Language (SAML) +# Security Assertion Markup Language (SAML) Security Assertion Markup Language (SAML) is an XML-based framework used for single sign-on (SSO) and identity federation, enabling users to authenticate once and gain access to multiple applications or services. It allows for the exchange of authentication and authorization data between an identity provider (IdP) and a service provider (SP). SAML assertions are XML documents that contain user identity information and attributes, and are used to convey authentication credentials and permissions. By implementing SAML, organizations can streamline user management, enhance security through centralized authentication, and simplify the user experience by reducing the need for multiple logins across different systems. Learn more from the following resources: - [@video@How SAML Authentication Works](https://www.youtube.com/watch?v=VzRnb9u8T1A) -- [@article@SAML Explained in Plain English](https://www.onelogin.com/learn/saml) \ No newline at end of file +- [@article@SAML Explained in Plain English](https://www.onelogin.com/learn/saml) diff --git a/src/data/roadmaps/backend/content/scrypt@kGTALrvCpxyVCXHRmkI7s.md b/src/data/roadmaps/backend/content/scrypt@kGTALrvCpxyVCXHRmkI7s.md index 8f483e833..f107a23eb 100644 --- a/src/data/roadmaps/backend/content/scrypt@kGTALrvCpxyVCXHRmkI7s.md +++ b/src/data/roadmaps/backend/content/scrypt@kGTALrvCpxyVCXHRmkI7s.md @@ -5,4 +5,4 @@ scrypt is a key derivation function designed to be computationally intensive and Visit the following resources to learn more: - [@official@sCrypt Website](https://scrypt.io/) -- [@article@sCrypt: A Beginner’s Guide](https://medium.com/@yusufedresmaina/scrypt-a-beginners-guide-cf1aecf8b010) \ No newline at end of file +- [@article@sCrypt: A Beginner’s Guide](https://medium.com/@yusufedresmaina/scrypt-a-beginners-guide-cf1aecf8b010) diff --git a/src/data/roadmaps/backend/content/search-engines@gKTSe9yQFVbPVlLzWB0hC.md b/src/data/roadmaps/backend/content/search-engines@gKTSe9yQFVbPVlLzWB0hC.md index 12e8a203b..1a0744d67 100644 --- a/src/data/roadmaps/backend/content/search-engines@gKTSe9yQFVbPVlLzWB0hC.md +++ b/src/data/roadmaps/backend/content/search-engines@gKTSe9yQFVbPVlLzWB0hC.md @@ -8,4 +8,6 @@ Search engines like Elasticsearch are specialized tools designed for fast, scala 4. **Powerful Query DSL**: A domain-specific language for constructing and executing sophisticated queries. 5. **Analytics**: Capabilities for aggregating and analyzing data, often used for log and event data analysis. -Elasticsearch is commonly used in applications requiring advanced search functionality, such as search engines, data analytics platforms, and real-time monitoring systems. \ No newline at end of file +Visit the following resources to learn more: + +- [@official@Elasticsearch](https://www.elastic.co/elasticsearch/) diff --git a/src/data/roadmaps/backend/content/server-security@TZ0BWOENPv6pQm8qYB8Ow.md b/src/data/roadmaps/backend/content/server-security@TZ0BWOENPv6pQm8qYB8Ow.md index f2713200e..1ec8d113e 100644 --- a/src/data/roadmaps/backend/content/server-security@TZ0BWOENPv6pQm8qYB8Ow.md +++ b/src/data/roadmaps/backend/content/server-security@TZ0BWOENPv6pQm8qYB8Ow.md @@ -10,9 +10,7 @@ Server security involves protecting servers from threats and vulnerabilities to 6. **Regular Backups**: Performing regular backups to ensure data can be restored in case of loss or corruption. 7. **Monitoring and Logging**: Continuously monitoring server activity and maintaining logs for auditing and detecting potential security incidents. -Effective server security is crucial for safeguarding against attacks, maintaining system stability, and protecting sensitive data. - Learn more from the following resources: - [@video@10 Tips for Hardening your Linux Servers](https://www.youtube.com/watch?v=Jnxx_IAC0G4) -- [@article@What is a hardened server?](https://www.sophos.com/en-us/cybersecurity-explained/what-is-server-hardening) \ No newline at end of file +- [@article@What is a hardened server?](https://www.sophos.com/en-us/cybersecurity-explained/what-is-server-hardening) diff --git a/src/data/roadmaps/backend/content/server-sent-events@RUSdlokJUcEYbCvq5FJBJ.md b/src/data/roadmaps/backend/content/server-sent-events@RUSdlokJUcEYbCvq5FJBJ.md index f3a2966d5..eb89b305f 100644 --- a/src/data/roadmaps/backend/content/server-sent-events@RUSdlokJUcEYbCvq5FJBJ.md +++ b/src/data/roadmaps/backend/content/server-sent-events@RUSdlokJUcEYbCvq5FJBJ.md @@ -4,5 +4,5 @@ Server-Sent Events (SSE) is a technology for sending real-time updates from a se Visit the following resources to learn more: -- [@article@Server-Sent Events - MDN](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) +- [@article@Server Sent Events - MDN](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) - [@video@Server-Sent Events | Postman Level Up](https://www.youtube.com/watch?v=KrE044J8jEQ&t=1s) diff --git a/src/data/roadmaps/backend/content/short-polling@Tt7yr-ChHncJG0Ge1f0Xk.md b/src/data/roadmaps/backend/content/short-polling@Tt7yr-ChHncJG0Ge1f0Xk.md index 2851f9728..d33d36af8 100644 --- a/src/data/roadmaps/backend/content/short-polling@Tt7yr-ChHncJG0Ge1f0Xk.md +++ b/src/data/roadmaps/backend/content/short-polling@Tt7yr-ChHncJG0Ge1f0Xk.md @@ -4,5 +4,5 @@ Short polling is a technique where a client periodically sends requests to a ser Learn more from the following resources: -- [@article@Amazon SQS short and long polling](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html) -- [@video@Short Polling vs Long Polling vs WebSockets](https://www.youtube.com/watch?v=ZBM28ZPlin8) \ No newline at end of file +- [@article@Amazon SQS Short and Long Polling](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html) +- [@video@Short Polling vs Long Polling vs WebSockets](https://www.youtube.com/watch?v=ZBM28ZPlin8) diff --git a/src/data/roadmaps/backend/content/solr@iN_1EuIwCx_7lRBw1Io4U.md b/src/data/roadmaps/backend/content/solr@iN_1EuIwCx_7lRBw1Io4U.md index ceaaaee96..fc6ed4e36 100644 --- a/src/data/roadmaps/backend/content/solr@iN_1EuIwCx_7lRBw1Io4U.md +++ b/src/data/roadmaps/backend/content/solr@iN_1EuIwCx_7lRBw1Io4U.md @@ -4,7 +4,7 @@ Solr is an open-source, highly scalable search platform built on Apache Lucene, Visit the following resources to learn more: -- [@article@Official Website](https://solr.apache.org/) -- [@article@Official Documentation](https://solr.apache.org/resources.html#documentation) -- [@opensource@apache/solr](https://github.com/apache/solr) +- [@article@Solr Website](https://solr.apache.org/) +- [@article@Solr Documentation](https://solr.apache.org/resources.html#documentation) +- [@opensource@Solr on Github](https://github.com/apache/solr) - [@video@Apache Solr vs Elasticsearch Differences](https://www.youtube.com/watch?v=MMWBdSdbu5k) diff --git a/src/data/roadmaps/backend/content/sqlite@kdulE3Z_BdbtRmq6T2KmR.md b/src/data/roadmaps/backend/content/sqlite@kdulE3Z_BdbtRmq6T2KmR.md index 44a2d35b6..850e57b39 100644 --- a/src/data/roadmaps/backend/content/sqlite@kdulE3Z_BdbtRmq6T2KmR.md +++ b/src/data/roadmaps/backend/content/sqlite@kdulE3Z_BdbtRmq6T2KmR.md @@ -4,7 +4,7 @@ SQLite is a lightweight, serverless, self-contained SQL database engine that is Visit the following resources to learn more: -- [@official@SQLite website](https://www.sqlite.org/index.html) +- [@official@SQLite](https://www.sqlite.org/index.html) - [@article@SQLite Tutorial](https://www.sqlitetutorial.net/) - [@video@SQLite Introduction](https://www.youtube.com/watch?v=8Xyn8R9eKB8) - [@feed@Explore top posts about SQLite](https://app.daily.dev/tags/sqlite?ref=roadmapsh) diff --git a/src/data/roadmaps/backend/content/telemetry@neVRtPjIHP_VG7lHwfah0.md b/src/data/roadmaps/backend/content/telemetry@neVRtPjIHP_VG7lHwfah0.md index 54bf5a1aa..a334d37b7 100644 --- a/src/data/roadmaps/backend/content/telemetry@neVRtPjIHP_VG7lHwfah0.md +++ b/src/data/roadmaps/backend/content/telemetry@neVRtPjIHP_VG7lHwfah0.md @@ -6,4 +6,4 @@ Learn more from the following resources: - [@article@What is telemetry and how does it work?](https://www.techtarget.com/whatis/definition/telemetry) - [@course@OpenTelemetry Course - Understand Software Performance](https://www.youtube.com/watch?v=r8UvWSX3KA8) -- [@feed@daily.dev OpenTelemetry feed](https://app.daily.dev/tags/opentelemetry) \ No newline at end of file +- [@feed@daily.dev OpenTelemetry feed](https://app.daily.dev/tags/opentelemetry) diff --git a/src/data/roadmaps/backend/content/timescale@WiAK70I0z-_bzbWNwiHUd.md b/src/data/roadmaps/backend/content/timescale@WiAK70I0z-_bzbWNwiHUd.md index b75c9b078..e1507bee7 100644 --- a/src/data/roadmaps/backend/content/timescale@WiAK70I0z-_bzbWNwiHUd.md +++ b/src/data/roadmaps/backend/content/timescale@WiAK70I0z-_bzbWNwiHUd.md @@ -6,4 +6,4 @@ Visit the following resources to learn more: - [@official@Timescale Website](https://www.timescale.com/) - [@video@Tutorial - TimeScaleDB Explained in 100 Seconds](https://www.youtube.com/watch?v=69Tzh_0lHJ8) -- [@video@What is time series data?](https://www.youtube.com/watch?v=Se5ipte9DMY) \ No newline at end of file +- [@video@What is Time Series Data?](https://www.youtube.com/watch?v=Se5ipte9DMY) diff --git a/src/data/roadmaps/backend/content/twelve-factor-apps@8DmabQJXlrT__COZrDVTV.md b/src/data/roadmaps/backend/content/twelve-factor-apps@8DmabQJXlrT__COZrDVTV.md index 1c2c0790f..7efdb5402 100644 --- a/src/data/roadmaps/backend/content/twelve-factor-apps@8DmabQJXlrT__COZrDVTV.md +++ b/src/data/roadmaps/backend/content/twelve-factor-apps@8DmabQJXlrT__COZrDVTV.md @@ -15,8 +15,6 @@ The Twelve-Factor App methodology is a set of principles for building modern, sc 11. **Logs**: Treat logs as streams of events. 12. **Admin Processes**: Run administrative or management tasks as one-off processes. -These principles help create applications that are easy to deploy, manage, and scale in cloud environments, promoting operational simplicity and consistency. - Visit the following resources to learn more: - [@article@The Twelve-Factor App](https://12factor.net/) diff --git a/src/data/roadmaps/backend/content/types-of-scaling@osQlGGy38xMcKLtgZtWaZ.md b/src/data/roadmaps/backend/content/types-of-scaling@osQlGGy38xMcKLtgZtWaZ.md index 2baa7469c..1540fcefe 100644 --- a/src/data/roadmaps/backend/content/types-of-scaling@osQlGGy38xMcKLtgZtWaZ.md +++ b/src/data/roadmaps/backend/content/types-of-scaling@osQlGGy38xMcKLtgZtWaZ.md @@ -4,8 +4,6 @@ Horizontal scaling (scaling out/in) involves adding or removing instances of res Vertical scaling (scaling up/down) involves increasing or decreasing the resources (CPU, memory, storage) of a single instance or server to handle more load or reduce capacity. This method improves performance by upgrading the existing hardware or virtual machine but has limits based on the maximum capacity of the individual resource. -Both approaches have their advantages: horizontal scaling offers better fault tolerance and flexibility, while vertical scaling is often simpler to implement but can be limited by the hardware constraints of a single machine. - Visit the following resources to learn more: - [@article@Horizontal vs Vertical Scaling](https://touchstonesecurity.com/horizontal-vs-vertical-scaling-what-you-need-to-know/) diff --git a/src/data/roadmaps/backend/content/version-control-systems@ezdqQW9wTUw93F6kjOzku.md b/src/data/roadmaps/backend/content/version-control-systems@ezdqQW9wTUw93F6kjOzku.md index c37be47aa..3c524613c 100644 --- a/src/data/roadmaps/backend/content/version-control-systems@ezdqQW9wTUw93F6kjOzku.md +++ b/src/data/roadmaps/backend/content/version-control-systems@ezdqQW9wTUw93F6kjOzku.md @@ -5,6 +5,6 @@ Version Control Systems (VCS) are tools that manage and track changes to code or Visit the following resources to learn more: - [@roadmap@Learn Git & GitHub](https://roadmap.sh/git-github) -- [@article@Git](https://git-scm.com/) +- [@official@Git Documentation](https://git-scm.com/doc) - [@article@What is Version Control?](https://www.atlassian.com/git/tutorials/what-is-version-control) - [@video@Version Control System (VCS) - Everything you need to know](https://www.youtube.com/watch?v=SVkuliabq4g) diff --git a/src/data/roadmaps/backend/content/what-is-domain-name@ZhSuu2VArnzPDp6dPQQSC.md b/src/data/roadmaps/backend/content/what-is-domain-name@ZhSuu2VArnzPDp6dPQQSC.md index 4c39dd63b..6bad79d05 100644 --- a/src/data/roadmaps/backend/content/what-is-domain-name@ZhSuu2VArnzPDp6dPQQSC.md +++ b/src/data/roadmaps/backend/content/what-is-domain-name@ZhSuu2VArnzPDp6dPQQSC.md @@ -7,4 +7,4 @@ Visit the following resources to learn more: - [@article@What is a Domain Name?](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_domain_name) - [@article@What is a Domain Name? | Domain name vs. URL](https://www.cloudflare.com/en-gb/learning/dns/glossary/what-is-a-domain-name/) - [@video@A Beginners Guide to How Domain Names Work](https://www.youtube.com/watch?v=Y4cRx19nhJk) -- [@video@Everything You Need to Know About Domain Names](https://www.youtube.com/watch?v=qO5qcQgiNX4) \ No newline at end of file +- [@video@Everything You Need to Know About Domain Names](https://www.youtube.com/watch?v=qO5qcQgiNX4) diff --git a/src/data/roadmaps/backend/content/what-is-hosting@aqMaEY8gkKMikiqleV5EP.md b/src/data/roadmaps/backend/content/what-is-hosting@aqMaEY8gkKMikiqleV5EP.md index 9be9b58f0..925cc514b 100644 --- a/src/data/roadmaps/backend/content/what-is-hosting@aqMaEY8gkKMikiqleV5EP.md +++ b/src/data/roadmaps/backend/content/what-is-hosting@aqMaEY8gkKMikiqleV5EP.md @@ -8,4 +8,4 @@ Visit the following resources to learn more: - [@article@What is a web server?](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server) - [@video@What is Web Hosting and How Does It Work?](https://www.youtube.com/watch?v=H8oAvyqQwew) - [@video@Different Types of Web Hosting Explained](https://www.youtube.com/watch?v=AXVZYzw8geg) -- [@video@Where to Host a Fullstack Project on a Budget](https://www.youtube.com/watch?v=Kx_1NYYJS7Q) \ No newline at end of file +- [@video@Where to Host a Fullstack Project on a Budget](https://www.youtube.com/watch?v=Kx_1NYYJS7Q) diff --git a/src/data/roadmaps/backend/faqs.astro b/src/data/roadmaps/backend/faqs.astro index aa25f77d2..9272f149b 100644 --- a/src/data/roadmaps/backend/faqs.astro +++ b/src/data/roadmaps/backend/faqs.astro @@ -40,9 +40,10 @@ export const faqs: FAQType[] = [ ] }, { - question: 'What are backend technologies?', + question: 'What are backend frameworks?', answer: [ - '[Backend technologies](https://roadmap.sh/backend/technologies) are the technologies that power the server-side of web applications. They are responsible for managing data, processing requests, and generating responses to the client-side of the application. Some of the most popular backend technologies include programming languages like Python, Ruby, Java, and Go, as well as frameworks like Django, Ruby on Rails, Spring Boot, and Gin. Backend technologies also include databases like PostgreSQL, MySQL, and MongoDB, as well as tools like Docker, Kubernetes, and Jenkins. These technologies work together to create the server-side of web applications and provide the functionality that users interact with on the client-side.', + '[Backend frameworks](https://roadmap.sh/backend/frameworks) are the frameworks that power the server-side of web applications. They are responsible for managing data, processing requests, and generating responses to the client-side of the application. Some of the most popular backend frameworks include Django for Python, Ruby on Rails for Ruby, Spring Boot for Java, and Gin for Go.', + 'These frameworks work alongside databases like PostgreSQL, MySQL, and MongoDB, as well as tools like Docker, Kubernetes, and Jenkins. Backend frameworks, along with other server-side components, work together to create the functionality that users interact with on the client-side of web applications.' ] } diff --git a/src/data/roadmaps/computer-science/content/array@TwW6SO2IXqkxJXVjLzdwU.md b/src/data/roadmaps/computer-science/content/array@TwW6SO2IXqkxJXVjLzdwU.md index 96fa99bc9..04d85c576 100644 --- a/src/data/roadmaps/computer-science/content/array@TwW6SO2IXqkxJXVjLzdwU.md +++ b/src/data/roadmaps/computer-science/content/array@TwW6SO2IXqkxJXVjLzdwU.md @@ -7,7 +7,7 @@ Visit the following resources to learn more: - [@video@Array Data Structure | Illustrated Data Structures](https://www.youtube.com/watch?v=QJNwK2uJyGs) - [@course@Array Data Structure - Coursera](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) - [@course@Dynamic Arrays - Coursera](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV) -- [@article@UC Berkeley CS61B - Linear and Multi-Dim Arrays (Start watching from 15m 32s)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) +- [@video@UC Berkeley CS61B - Linear and Multi-Dim Arrays (Start watching from 15m 32s)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) - [@video@Dynamic and Static Arrays](https://www.youtube.com/watch?v=PEnFFiQe1pM&list=PLDV1Zeh2NRsB6SWUrDFW2RmDotAfPbeHu&index=6) - [@video@Dynamic Array Code](https://www.youtube.com/watch?v=tvw4v7FEF1w&list=PLDV1Zeh2NRsB6SWUrDFW2RmDotAfPbeHu&index=5) - [@video@Jagged Arrays](https://www.youtube.com/watch?v=1jtrQqYpt7g) diff --git a/src/data/roadmaps/computer-science/content/hashing--encryption--encoding@7r7o8pYhFHVAJIv0wNT6X.md b/src/data/roadmaps/computer-science/content/hashing--encryption--encoding@7r7o8pYhFHVAJIv0wNT6X.md index 8e82c6029..84c5471b8 100644 --- a/src/data/roadmaps/computer-science/content/hashing--encryption--encoding@7r7o8pYhFHVAJIv0wNT6X.md +++ b/src/data/roadmaps/computer-science/content/hashing--encryption--encoding@7r7o8pYhFHVAJIv0wNT6X.md @@ -1,10 +1,10 @@ # Hashing/Encryption/Encoding -Hashing is a one-way function that takes an input and produces a fixed-length output. The output is called a hash. The hash is a unique representation of the input. The hash is deterministic, meaning that the same input will always produce the same hash. The hash is irreversible, meaning that it is impossible to go from the hash back to the original input. The hash is collision-resistant, meaning that it is impossible to find two different inputs that produce the same hash. +Hashing is a one-way function that takes an input and produces a fixed-length output. The output is called a hash. The hash is a unique representation of the input. The hash is deterministic, meaning that the same input will always produce the same hash. The hash is irreversible, meaning that it is impossible to go from the hash back to the original input. The hash is not collision-resistant, meaning that it is possible to find two different inputs that produce the same hash. Encryption is a two-way function that takes an input and produces an output. The output is called ciphertext. The ciphertext is a unique representation of the input. The ciphertext is deterministic, meaning that the same input will always produce the same ciphertext. The ciphertext is reversible, meaning that it is possible to go from the ciphertext back to the original input. The ciphertext is collision-resistant, meaning that it is impossible to find two different inputs that produce the same ciphertext. -Encoding is a two-way function that takes an input and produces an output. The output is called encoded text. The encoded text is a unique representation of the input. The encoded text is deterministic, meaning that the same input will always produce the same encoded text. The encoded text is reversible, meaning that it is possible to go from the encoded text back to the original input. The encoded text is not collision-resistant, meaning that it is possible to find two different inputs that produce the same encoded text. +Encoding is a two-way function that takes an input and produces an output. The output is called encoded text. The encoded text is a unique representation of the input. The encoded text is deterministic, meaning that the same input will always produce the same encoded text. The encoded text is reversible, meaning that it is possible to go from the encoded text back to the original input. The encoded text is collision-resistant, meaning that it is impossible to find two different inputs that produce the same encoded text. Visit the following resources to learn more: diff --git a/src/data/roadmaps/computer-science/content/linked-list@gr8BK6vq4AVwp_aUozZmf.md b/src/data/roadmaps/computer-science/content/linked-list@gr8BK6vq4AVwp_aUozZmf.md index dc627556c..0ff1dcb92 100644 --- a/src/data/roadmaps/computer-science/content/linked-list@gr8BK6vq4AVwp_aUozZmf.md +++ b/src/data/roadmaps/computer-science/content/linked-list@gr8BK6vq4AVwp_aUozZmf.md @@ -7,8 +7,8 @@ Visit the following resources to learn more: - [@video@Linked List Data Structure | Illustrated Data Structures](https://www.youtube.com/watch?v=odW9FU8jPRQ) - [@video@Linked Lists in 4 minutes](https://www.youtube.com/watch?v=F8AbOfQwl1c) - [@course@Singly Linked Lists](https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK) -- [@article@CS 61B Lecture 7: Linked Lists I](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) -- [@article@CS 61B Lecture 7: Linked Lists II](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) +- [@video@CS 61B Lecture 7: Linked Lists I](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) +- [@video@CS 61B Lecture 7: Linked Lists II](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [@course@Core: Linked Lists vs Arrays](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) - [@course@In the Real World: Linked Lists vs Arrays](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) - [@video@Why you should avoid Linked Lists?](https://www.youtube.com/watch?v=YQs6IC-vgmo) diff --git a/src/data/roadmaps/cyber-security/content/ssl-and-tls-basics@dJ0NUsODFhk52W2zZxoPh.md b/src/data/roadmaps/cyber-security/content/ssl-and-tls-basics@dJ0NUsODFhk52W2zZxoPh.md index b7e5a4179..0c206e8ca 100644 --- a/src/data/roadmaps/cyber-security/content/ssl-and-tls-basics@dJ0NUsODFhk52W2zZxoPh.md +++ b/src/data/roadmaps/cyber-security/content/ssl-and-tls-basics@dJ0NUsODFhk52W2zZxoPh.md @@ -1,6 +1,6 @@ # SSL vs TLS -Single Sign-On (SSO) is an authentication method that allows users to access multiple applications or systems with one set of login credentials. It enables users to log in once and gain access to various connected systems without re-entering credentials. SSO enhances user experience by reducing password fatigue, streamlines access management for IT departments, and can improve security by centralizing authentication controls. It typically uses protocols like SAML, OAuth, or OpenID Connect to securely share authentication information across different domains. While SSO offers convenience and can strengthen security when implemented correctly, it also presents a single point of failure if compromised, making robust security measures for the SSO system critical. +Secure Sockets Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols used to provide security in internet communications. These protocols encrypt the data that is transmitted over the web, so anyone who tries to intercept packets will not be able to interpret the data. One difference that is important to know is that SSL is now deprecated due to security flaws, and most modern web browsers no longer support it. But TLS is still secure and widely supported, so preferably use TLS. Learn more from the following resources: diff --git a/src/data/roadmaps/cyber-security/content/ssl-vs-tls@6ILPXeUDDmmYRiA_gNTSr.md b/src/data/roadmaps/cyber-security/content/ssl-vs-tls@6ILPXeUDDmmYRiA_gNTSr.md index b7e5a4179..fbb508bb0 100644 --- a/src/data/roadmaps/cyber-security/content/ssl-vs-tls@6ILPXeUDDmmYRiA_gNTSr.md +++ b/src/data/roadmaps/cyber-security/content/ssl-vs-tls@6ILPXeUDDmmYRiA_gNTSr.md @@ -1,6 +1,8 @@ # SSL vs TLS -Single Sign-On (SSO) is an authentication method that allows users to access multiple applications or systems with one set of login credentials. It enables users to log in once and gain access to various connected systems without re-entering credentials. SSO enhances user experience by reducing password fatigue, streamlines access management for IT departments, and can improve security by centralizing authentication controls. It typically uses protocols like SAML, OAuth, or OpenID Connect to securely share authentication information across different domains. While SSO offers convenience and can strengthen security when implemented correctly, it also presents a single point of failure if compromised, making robust security measures for the SSO system critical. +**SSL (Secure Sockets Layer)** is a cryptographic protocol used to secure communications by encrypting data transmitted between clients and servers. SSL establishes a secure connection through a process known as the handshake, during which the client and server agree on cryptographic algorithms, exchange keys, and authenticate the server with a digital certificate. SSL’s security is considered weaker compared to its successor, TLS, due to vulnerabilities in its older encryption methods and lack of modern cryptographic techniques. + +**TLS (Transport Layer Security)** improves upon SSL by using stronger encryption algorithms, more secure key exchange mechanisms, and enhanced certificate validation. Like SSL, TLS begins with a handshake where the client and server agree on a protocol version and cipher suite, exchange keys, and verify certificates. However, TLS incorporates additional features like Perfect Forward Secrecy (PFS) and more secure hashing algorithms, making it significantly more secure than SSL for modern communications. Learn more from the following resources: diff --git a/src/data/roadmaps/datastructures-and-algorithms/content/105-sorting-algorithms/102-insertion-sort.md b/src/data/roadmaps/datastructures-and-algorithms/content/105-sorting-algorithms/102-insertion-sort.md index 46494583e..511922887 100644 --- a/src/data/roadmaps/datastructures-and-algorithms/content/105-sorting-algorithms/102-insertion-sort.md +++ b/src/data/roadmaps/datastructures-and-algorithms/content/105-sorting-algorithms/102-insertion-sort.md @@ -3,4 +3,4 @@ Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It's much less efficient on large lists than more advanced algorithms like quicksort, heapsort, or merge sort. Still, it provides several advantages such as it's easy to understand the algorithm, it performs well with small lists or lists that are already partially sorted and it can sort the list as it receives it. The algorithm iterates, consuming one input element each repetition and growing a sorted output list. At each iteration, it removes one element from the input data, finds the location it belongs within the sorted list and inserts it there. It repeats until no input elements remain. - [@article@Insertion Sort - W3Schools](https://www.w3schools.com/dsa/dsa_algo_insertionsort.php) -- [@article@Insertion Sort Visulation](https://www.hackerearth.com/practice/algorithms/sorting/insertion-sort/visualize/) +- [@article@Insertion Sort Visualization](https://www.hackerearth.com/practice/algorithms/sorting/insertion-sort/visualize/) diff --git a/src/data/roadmaps/devops/content/git@uyDm1SpOQdpHjq9zBAdck.md b/src/data/roadmaps/devops/content/git@uyDm1SpOQdpHjq9zBAdck.md index ba42ed027..a9b11da95 100644 --- a/src/data/roadmaps/devops/content/git@uyDm1SpOQdpHjq9zBAdck.md +++ b/src/data/roadmaps/devops/content/git@uyDm1SpOQdpHjq9zBAdck.md @@ -5,6 +5,7 @@ Git is a distributed version control system designed to track changes in source Visit the following resources to learn more: - [@roadmap@Learn Git & GitHub](https://roadmap.sh/git-github) +- [@course@Git by Example - Learn Version Control with Bite-sized Lessons](https://antonz.org/git-by-example/) - [@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/devops/content/operating-system@qe84v529VbCyydl0BKFk2.md b/src/data/roadmaps/devops/content/operating-system@qe84v529VbCyydl0BKFk2.md index 60fed3bda..52d44ec6f 100644 --- a/src/data/roadmaps/devops/content/operating-system@qe84v529VbCyydl0BKFk2.md +++ b/src/data/roadmaps/devops/content/operating-system@qe84v529VbCyydl0BKFk2.md @@ -4,7 +4,8 @@ Operating systems (OS) are fundamental software that manage computer hardware an Visit the following resources to learn more: -- [@article@All you need to know about OS.](https://www.javatpoint.com/os-tutorial) +- [@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) +- [@video@Operating Systems](https://www.youtube.com/watch?v=vBURTt97EkA&list=PLBlnK6fEyqRiVhbXDGLXDk_OQAeuVcp2O) diff --git a/src/data/roadmaps/devops/content/provisioning@1oYvpFG8LKT1JD6a_9J0m.md b/src/data/roadmaps/devops/content/provisioning@1oYvpFG8LKT1JD6a_9J0m.md index d271fe768..3262edcaa 100644 --- a/src/data/roadmaps/devops/content/provisioning@1oYvpFG8LKT1JD6a_9J0m.md +++ b/src/data/roadmaps/devops/content/provisioning@1oYvpFG8LKT1JD6a_9J0m.md @@ -1,9 +1,9 @@ -# Prometheus +# Provisioning -Prometheus is an open-source systems monitoring and alerting toolkit designed for reliability and scalability. It features a multi-dimensional data model, a flexible query language (PromQL), and an efficient time series database. Prometheus collects metrics from configured targets at given intervals, evaluates rule expressions, displays results, and can trigger alerts when specified conditions are observed. It operates on a pull model, scraping metrics from HTTP endpoints, and supports service discovery for dynamic environments. Prometheus is particularly well-suited for monitoring microservices and containerized environments, integrating seamlessly with systems like Kubernetes. Its ecosystem includes various exporters for third-party systems and a built-in alert manager. Widely adopted in cloud-native architectures, Prometheus is a core component of modern observability stacks, often used alongside tools like Grafana for visualization. +Provisioning refers to the process of setting up and configuring the necessary IT infrastructure to support an application or service. This includes allocating and preparing resources such as servers, storage, networking, and software environments. Provisioning can be done manually, but in modern DevOps practices, it's typically automated using tools like Terraform, Pulumi, or CloudFormation. These tools allow for infrastructure-as-code, where the entire provisioning process is defined in version-controlled scripts or templates. This approach enables consistent, repeatable deployments across different environments, reduces human error, and facilitates rapid scaling and disaster recovery. -Visit the following resources to learn more: +Learn more from the following resources: -- [@official@Prometheus Website](https://prometheus.io/) -- [@video@Introduction to the Prometheus Monitoring System | Key Concepts and Features](https://www.youtube.com/watch?v=STVMGrYIlfg) -- [@feed@Explore top posts about Prometheus](https://app.daily.dev/tags/prometheus?ref=roadmapsh) +- [@article@What is provisioning? - RedHat](https://www.redhat.com/en/topics/automation/what-is-provisioning) +- [@article@What is provisioning? - IBM](https://www.ibm.com/topics/provisioning) +- [@video@Open Answers: What is provisioning?](https://www.youtube.com/watch?v=hWvDlmhASpk) \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/rust@eL62bKAoJCMsu7zPlgyhy.md b/src/data/roadmaps/devops/content/rust@eL62bKAoJCMsu7zPlgyhy.md index b1620a7b8..f6e207a8c 100644 --- a/src/data/roadmaps/devops/content/rust@eL62bKAoJCMsu7zPlgyhy.md +++ b/src/data/roadmaps/devops/content/rust@eL62bKAoJCMsu7zPlgyhy.md @@ -7,6 +7,7 @@ Visit the following resources to learn more: - [@official@The Rust Programming Language - online book](https://doc.rust-lang.org/book/) - [@article@Comprehensive Rust by Google - Learn Rust in 4 Days](https://google.github.io/comprehensive-rust/) - [@article@Rust Katas - Small, interactive Rust exercises](https://rustlings.cool/) +- [@course@Rust by Practice - Interactive Rust Course](https://practice.course.rs/) - [@video@The Rust Programming Book - Video Version](https://youtube.com/playlist?list=PLai5B987bZ9CoVR-QEIN9foz4QCJ0H2Y8) - [@video@Full Crash Rust Tutorial for Beginners](https://www.youtube.com/watch?v=R33h77nrMqc&list=PLPoSdR46FgI412aItyJhj2bF66cudB6Qs) - [@feed@Explore top posts about Rust](https://app.daily.dev/tags/rust?ref=roadmapsh) diff --git a/src/data/roadmaps/devops/devops.md b/src/data/roadmaps/devops/devops.md index a1849ac41..e3e43c6aa 100644 --- a/src/data/roadmaps/devops/devops.md +++ b/src/data/roadmaps/devops/devops.md @@ -15,7 +15,7 @@ question: description: | DevOps is a cultural and collaborative mindset that emphasizes communication, collaboration, integration, and automation between development and operations teams in order to achieve faster and more reliable software delivery. - DevOps is not a specific job title or role, but rather a set of practices and principles that can be applied across a variety of roles in software development and IT operations. Anyone involved in the software development and delivery process can adopt a DevOps mindset and apply DevOps practices in their work, including developers, testers, operations engineers, product managers, and others. + DevOps is not a specific job title or role, but rather a set of [principles and practices](https://roadmap.sh/devops/principles) that can be applied across a variety of roles in software development and IT operations. Anyone involved in the software development and delivery process can adopt a DevOps mindset and apply DevOps practices in their work, including developers, testers, operations engineers, product managers, and others. ## What is a DevOps Engineer? While DevOps is not a specific job title or role, organizations often hire for a "DevOps Engineer" role. A [DevOps Engineer](https://roadmap.sh/devops/devops-engineer) is a software engineer who specializes in the practices and tools that enable the continuous delivery of software. DevOps Engineers are responsible for the design and implementation of applications, software, and services for their organization, and they work closely with developers, testers, and operations staff to oversee the code releases. diff --git a/src/data/roadmaps/devrel/devrel.md b/src/data/roadmaps/devrel/devrel.md index 0cb015152..8f710f311 100644 --- a/src/data/roadmaps/devrel/devrel.md +++ b/src/data/roadmaps/devrel/devrel.md @@ -9,7 +9,7 @@ title: 'Developer Relations' description: 'Step by step guide to becoming a Developer Advocate in 2024' hasTopics: true isForkable: false -isNew: true +isNew: false question: title: 'What is DevRel/Developer Relations?' description: | diff --git a/src/data/roadmaps/frontend/content/accessibility@iJIqi7ngpGHWAqtgdjgxB.md b/src/data/roadmaps/frontend/content/accessibility@iJIqi7ngpGHWAqtgdjgxB.md index 50d6b1b8e..8366107f2 100644 --- a/src/data/roadmaps/frontend/content/accessibility@iJIqi7ngpGHWAqtgdjgxB.md +++ b/src/data/roadmaps/frontend/content/accessibility@iJIqi7ngpGHWAqtgdjgxB.md @@ -1,11 +1,9 @@ # Accessibility -Web accessibility means that websites, tools, and technologies are designed and developed in such a way that people with disabilities can use them easily. +Website accessibility is the practice of designing and developing websites that can be used by everyone, including people with disabilities. It involves implementing features and standards that make web content perceivable, operable, understandable, and robust for all users, regardless of their physical or cognitive abilities. This includes providing text alternatives for images, ensuring keyboard navigation, using sufficient color contrast, offering captions for audio content, and creating a consistent and predictable layout. Adhering to accessibility guidelines not only improves usability for people with disabilities but also enhances the overall user experience for all visitors while potentially increasing a site's reach and legal compliance. Visit the following resources to learn more: -- [@article@Developing for Web Accessibility by W3C WAI](https://www.w3.org/WAI/tips/developing/) -- [@article@Accessibility Tutorial](https://www.w3schools.com/accessibility/index.php) -- [@video@Complete Playlist on Accessibility](https://youtube.com/playlist?list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g) - [@article@Accessibility for Developers by Google](https://web.dev/accessibility) +- [@video@Complete Playlist on Accessibility](https://youtube.com/playlist?list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g) - [@feed@Explore top posts about Accessibility](https://app.daily.dev/tags/accessibility?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/angular@-bHFIiXnoUQSov64WI9yo.md b/src/data/roadmaps/frontend/content/angular@-bHFIiXnoUQSov64WI9yo.md index e963b1b7c..9c06c4a48 100644 --- a/src/data/roadmaps/frontend/content/angular@-bHFIiXnoUQSov64WI9yo.md +++ b/src/data/roadmaps/frontend/content/angular@-bHFIiXnoUQSov64WI9yo.md @@ -1,10 +1,10 @@ # Angular -Angular is a component based front-end development framework built on TypeScript which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more. +Angular is a popular open-source web application framework developed and maintained by Google. It uses TypeScript, a statically typed superset of JavaScript, to build scalable and efficient single-page applications (SPAs). Angular follows a component-based architecture, where the user interface is composed of reusable, self-contained components. The framework provides features like two-way data binding, dependency injection, and a powerful template syntax, which simplify the development of complex web applications. Angular also includes a comprehensive set of tools for testing, routing, and state management, making it a full-fledged solution for front-end development. Its modular structure and emphasis on best practices make it particularly suitable for large-scale enterprise applications. Visit the following resources to learn more: - [@roadmap@Visit Dedicated Angular Roadmap](https://roadmap.sh/angular) -- [@official@Official - Getting started with Angular](https://angular.io/start) +- [@official@Getting started with Angular](https://angular.io/start) - [@video@Angular for Beginners Course](https://www.youtube.com/watch?v=3qBXWUpoPHo) - [@feed@Explore top posts about Angular](https://app.daily.dev/tags/angular?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/angular@k6rp6Ua9qUEW_DA_fOg5u.md b/src/data/roadmaps/frontend/content/angular@k6rp6Ua9qUEW_DA_fOg5u.md index e68b8c25f..310cafdf3 100644 --- a/src/data/roadmaps/frontend/content/angular@k6rp6Ua9qUEW_DA_fOg5u.md +++ b/src/data/roadmaps/frontend/content/angular@k6rp6Ua9qUEW_DA_fOg5u.md @@ -1,8 +1,9 @@ # Angular -Angular is a component based front-end development framework built on TypeScript which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more. +Angular is a popular open-source web application framework developed and maintained by Google. It uses TypeScript, a statically typed superset of JavaScript, to build scalable and efficient single-page applications (SPAs). Angular follows a component-based architecture, where the user interface is composed of reusable, self-contained components. The framework provides features like two-way data binding, dependency injection, and a powerful template syntax, which simplify the development of complex web applications. Angular also includes a comprehensive set of tools for testing, routing, and state management, making it a full-fledged solution for front-end development. Its modular structure and emphasis on best practices make it particularly suitable for large-scale enterprise applications. Visit the following resources to learn more: -- [@official@Official - Getting started with Angular](https://angular.io/start) +- [@roadmap@Angular Roadmap](https://roadmap.sh/angular) +- [@official@Angular Website](https://angular.dev) - [@feed@Explore top posts about Angular](https://app.daily.dev/tags/angular?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/apollo@5eUbDdOTOfaOhUlZAmmXW.md b/src/data/roadmaps/frontend/content/apollo@5eUbDdOTOfaOhUlZAmmXW.md index 2998402db..35a05e99e 100644 --- a/src/data/roadmaps/frontend/content/apollo@5eUbDdOTOfaOhUlZAmmXW.md +++ b/src/data/roadmaps/frontend/content/apollo@5eUbDdOTOfaOhUlZAmmXW.md @@ -1,11 +1,10 @@ # Apollo -Apollo is a platform for building a unified graph, a communication layer that helps you manage the flow of data between your application clients (such as web and native apps) and your back-end services. +Apollo GraphQL is a comprehensive platform for building and managing GraphQL-based data layers in modern applications. It provides a set of open-source tools and libraries that simplify the implementation of GraphQL on both the client and server sides. On the client side, Apollo Client offers powerful caching, state management, and data fetching capabilities, integrating seamlessly with various front-end frameworks. On the server side, Apollo Server facilitates the creation of GraphQL APIs, handling queries, mutations, and subscriptions efficiently. The Apollo platform also includes developer tools for schema management, performance monitoring, and API governance. By abstracting away much of the complexity of GraphQL implementation, Apollo enables developers to build faster, more scalable, and more maintainable applications with a unified data graph. Visit the following resources to learn more: -- [@article@Apollo Website](https://www.apollographql.com) -- [@article@Official Docs](https://www.apollographql.com/docs/) -- [@video@Official YouTube Channel](https://www.youtube.com/c/ApolloGraphQL/) -- [@video@GraphQL With React Tutorial - Apollo Client](https://www.youtube.com/watch?v=YyUWW04HwKY) +- [@official@Apollo Website](https://www.apollographql.com) +- [@official@Apollo Docs](https://www.apollographql.com/docs/) +- [@roadmap@Visit Dedicated GraphQL Roadmap](https://roadmap.sh/graphql) - [@feed@Explore top posts about Apollo](https://app.daily.dev/tags/apollo?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/astro@iUxXq7beg55y76dkwhM13.md b/src/data/roadmaps/frontend/content/astro@iUxXq7beg55y76dkwhM13.md index fc28d4143..e1f66f090 100644 --- a/src/data/roadmaps/frontend/content/astro@iUxXq7beg55y76dkwhM13.md +++ b/src/data/roadmaps/frontend/content/astro@iUxXq7beg55y76dkwhM13.md @@ -1,15 +1,10 @@ # Astro -Astro is an all-in-one web framework for building fast, content-focused websites. Astro combines the power of a modern component-based framework with the performance and flexibility of a static site generator. - -- Component Islands: A new web architecture for building faster websites. -- Server-first API design: Move expensive hydration off of your users’ devices. -- Zero JS, by default: No JavaScript runtime overhead to slow you down. -- Edge-ready: Deploy anywhere, even a global edge runtime like Deno or Cloudflare. -- Customizable: Tailwind, MDX, and 100+ other integrations to choose from. -- UI-agnostic: Supports React, Preact, Svelte, Vue, Solid, Lit and more. +Astro is a modern static site generator (SSG) and web framework designed for building fast, content-focused websites. It allows developers to use multiple frontend frameworks (like React, Vue, or Svelte) within the same project, automatically rendering components to static HTML at build time. Astro's unique "partial hydration" approach only sends JavaScript to the browser when necessary, resulting in significantly smaller bundle sizes and faster load times. The framework supports file-based routing, markdown content, and built-in optimizations for images and assets. Astro's component islands architecture enables developers to create interactive components while maintaining the performance benefits of static HTML, making it particularly well-suited for content-rich sites like blogs, documentation, and marketing pages. Visit the following resources to learn more: -- [@official@Official Astro Website](https://astro.build/) -- [@article@Official Astro Docs](https://docs.astro.build/) +- [@official@Astro Website](https://astro.build/) +- [@official@Getting Started with Astro](https://docs.astro.build/en/getting-started/) +- [@article@What is Astro?](https://www.contentful.com/blog/what-is-astro/) +- [@course@Astro Web Framework Crash Course](https://www.youtube.com/watch?v=e-hTm5VmofI) diff --git a/src/data/roadmaps/frontend/content/astro@wA2fSYsbBYU02VJXAvUz8.md b/src/data/roadmaps/frontend/content/astro@wA2fSYsbBYU02VJXAvUz8.md index fc28d4143..f51791415 100644 --- a/src/data/roadmaps/frontend/content/astro@wA2fSYsbBYU02VJXAvUz8.md +++ b/src/data/roadmaps/frontend/content/astro@wA2fSYsbBYU02VJXAvUz8.md @@ -1,15 +1,9 @@ # Astro -Astro is an all-in-one web framework for building fast, content-focused websites. Astro combines the power of a modern component-based framework with the performance and flexibility of a static site generator. - -- Component Islands: A new web architecture for building faster websites. -- Server-first API design: Move expensive hydration off of your users’ devices. -- Zero JS, by default: No JavaScript runtime overhead to slow you down. -- Edge-ready: Deploy anywhere, even a global edge runtime like Deno or Cloudflare. -- Customizable: Tailwind, MDX, and 100+ other integrations to choose from. -- UI-agnostic: Supports React, Preact, Svelte, Vue, Solid, Lit and more. +Astro is a modern static site generator (SSG) and web framework designed for building fast, content-focused websites. It allows developers to use multiple frontend frameworks (like React, Vue, or Svelte) within the same project, automatically rendering components to static HTML at build time. Astro's unique "partial hydration" approach only sends JavaScript to the browser when necessary, resulting in significantly smaller bundle sizes and faster load times. The framework supports file-based routing, markdown content, and built-in optimizations for images and assets. Astro's component islands architecture enables developers to create interactive components while maintaining the performance benefits of static HTML, making it particularly well-suited for content-rich sites like blogs, documentation, and marketing pages. Visit the following resources to learn more: -- [@official@Official Astro Website](https://astro.build/) -- [@article@Official Astro Docs](https://docs.astro.build/) +- [@official@Astro Website](https://astro.build/) +- [@article@What is Astro?](https://www.contentful.com/blog/what-is-astro/) +- [@course@Astro Web Framework Crash Course](https://www.youtube.com/watch?v=e-hTm5VmofI) diff --git a/src/data/roadmaps/frontend/content/bem@dRDmS072xeNLX7p_X565w.md b/src/data/roadmaps/frontend/content/bem@dRDmS072xeNLX7p_X565w.md index 57df7640c..cf1422420 100644 --- a/src/data/roadmaps/frontend/content/bem@dRDmS072xeNLX7p_X565w.md +++ b/src/data/roadmaps/frontend/content/bem@dRDmS072xeNLX7p_X565w.md @@ -4,7 +4,6 @@ The Block, Element, Modifier methodology (commonly referred to as BEM) is a popu Visit the following resources to learn more: -- [@article@BEM Official Website](https://en.bem.info) -- [@article@BEM Documentation](https://en.bem.info/methodology/quick-start) -- [@article@BEM 101](https://css-tricks.com/bem-101) -- [@article@BEM Tutorials](https://en.bem.info/tutorials/) +- [@official@BEM Official Website](https://en.bem.info) +- [@official@BEM Documentation](https://en.bem.info/methodology/quick-start) +- [@article@5 Reasons To Use BEM Notation](https://www.elpassion.com/blog/5-reasons-to-use-bem-a) diff --git a/src/data/roadmaps/frontend/content/bitbucket@DILBiQp7WWgSZ5hhtDW6A.md b/src/data/roadmaps/frontend/content/bitbucket@DILBiQp7WWgSZ5hhtDW6A.md index b2c0424a5..7058f6589 100644 --- a/src/data/roadmaps/frontend/content/bitbucket@DILBiQp7WWgSZ5hhtDW6A.md +++ b/src/data/roadmaps/frontend/content/bitbucket@DILBiQp7WWgSZ5hhtDW6A.md @@ -1,6 +1,6 @@ # BitBucket -[BitBucket](https://bitbucket.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. +Bitbucket is a web-based version control repository hosting service owned by Atlassian. It provides Git and Mercurial version control systems for both open source and private projects. Bitbucket offers features such as pull requests, branch permissions, and in-line commenting for code review. It integrates seamlessly with other Atlassian products like Jira and Trello, facilitating project management and issue tracking. Bitbucket provides both cloud-hosted and self-hosted options, catering to different organizational needs. It supports continuous integration and deployment (CI/CD) through Bitbucket Pipelines. Visit the following resources to learn more: diff --git a/src/data/roadmaps/frontend/content/browsers-and-how-they-work@P82WFaTPgQEPNp5IIuZ1Y.md b/src/data/roadmaps/frontend/content/browsers-and-how-they-work@P82WFaTPgQEPNp5IIuZ1Y.md index 8ae008249..bc351c4ee 100644 --- a/src/data/roadmaps/frontend/content/browsers-and-how-they-work@P82WFaTPgQEPNp5IIuZ1Y.md +++ b/src/data/roadmaps/frontend/content/browsers-and-how-they-work@P82WFaTPgQEPNp5IIuZ1Y.md @@ -4,8 +4,7 @@ A web browser is a software application that enables a user to access and displa Visit the following resources to learn more: -- [@article@How Browsers Work](https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/) -- [@article@Role of Rendering Engine in Browsers](https://www.browserstack.com/guide/browser-rendering-engine) +- [@article@How Browsers Work](https://www.ramotion.com/blog/what-is-web-browser/) - [@article@Populating the Page: How Browsers Work](https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work) -- [@video@How Do Web Browsers Work?](https://www.youtube.com/watch?v=WjDrMKZWCt0) +- [@video@How Do Web Browsers Work?](https://www.youtube.com/watch?v=5rLFYtXHo9s) - [@feed@Explore top posts about Browsers](https://app.daily.dev/tags/browsers?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/build-tools@i9z0stM4uKu27Cz6NIgNX.md b/src/data/roadmaps/frontend/content/build-tools@i9z0stM4uKu27Cz6NIgNX.md index a7d1c98d2..8a2c8f010 100644 --- a/src/data/roadmaps/frontend/content/build-tools@i9z0stM4uKu27Cz6NIgNX.md +++ b/src/data/roadmaps/frontend/content/build-tools@i9z0stM4uKu27Cz6NIgNX.md @@ -1,12 +1,10 @@ # Build Tools -Task runners automatically execute commands and carry out processes behind the scenes. This helps automate your workflow by performing mundane, repetitive tasks that you would otherwise waste an egregious amount of time repeating yourself. - -Common usages of task runners include numerous development tasks such as: spinning up development servers, compiling code (ex. SCSS to CSS), running linters, serving files up from a local port on your computer, and many more! +Build tools are software utilities designed to automate the process of creating executable applications from source code. They handle tasks such as compiling, linking, minifying, and bundling code, as well as running tests and managing dependencies. Common build tools include Make, Gradle, Maven, Webpack, and Gulp. These tools streamline development workflows by reducing manual steps, ensuring consistency across different environments, and optimizing output for production. They often support features like incremental builds, parallel processing, and custom task definitions. Build tools are crucial in modern software development, especially for large-scale projects, as they improve efficiency, reduce errors, and facilitate continuous integration and deployment processes. Visit the following resources to learn more: -- [@article@webpack is a static module bundler for modern JavaScript applications](https://webpack.js.org/) -- [@article@Vite Next Generation Frontend Tooling](https://vitejs.dev) -- [@article@Parcel is a zero configuration build tool for the web](https://parceljs.org/) +- [@official@Webpack Website](https://webpack.js.org/) +- [@official@Vite Website](https://vitejs.dev) +- [@official@Parcel Website](https://parceljs.org/) - [@feed@Explore top posts about Tools](https://app.daily.dev/tags/tools?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/content-security-policy@rmcm0CZbtNVC9LZ14-H6h.md b/src/data/roadmaps/frontend/content/content-security-policy@rmcm0CZbtNVC9LZ14-H6h.md index 4688e9682..ec2a06add 100644 --- a/src/data/roadmaps/frontend/content/content-security-policy@rmcm0CZbtNVC9LZ14-H6h.md +++ b/src/data/roadmaps/frontend/content/content-security-policy@rmcm0CZbtNVC9LZ14-H6h.md @@ -1,6 +1,6 @@ # Content Security Policy -Content Security Policy is a computer security standard introduced to prevent cross-site scripting, clickjacking and other code injection attacks resulting from execution of malicious content in the trusted web page context. +Content Security Policy (CSP) is a security standard implemented by web browsers to prevent cross-site scripting (XSS), clickjacking, and other code injection attacks. It works by allowing web developers to specify which sources of content are trusted and can be loaded on a web page. CSP is typically implemented through HTTP headers or meta tags, defining rules for various types of resources like scripts, stylesheets, images, and fonts. By restricting the origins from which content can be loaded, CSP significantly reduces the risk of malicious code execution. It also provides features like reporting violations to help developers identify and fix potential security issues. While powerful, implementing CSP requires careful configuration to balance security with functionality, especially for sites using third-party resources or inline scripts. Visit the following resources to learn more: diff --git a/src/data/roadmaps/frontend/content/cors@AfH2zCbqzw0Nisg1yyISS.md b/src/data/roadmaps/frontend/content/cors@AfH2zCbqzw0Nisg1yyISS.md index a6f4d6f02..15af1ae30 100644 --- a/src/data/roadmaps/frontend/content/cors@AfH2zCbqzw0Nisg1yyISS.md +++ b/src/data/roadmaps/frontend/content/cors@AfH2zCbqzw0Nisg1yyISS.md @@ -1,10 +1,9 @@ # CORS -Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources. +Cross-Origin Resource Sharing (CORS) is a security mechanism implemented by web browsers to control access to resources (like APIs or fonts) on a web page from a different domain than the one serving the web page. It extends and adds flexibility to the Same-Origin Policy, allowing servers to specify who can access their resources. CORS works through a system of HTTP headers, where browsers send a preflight request to the server hosting the cross-origin resource, and the server responds with headers indicating whether the actual request is allowed. This mechanism helps prevent unauthorized access to sensitive data while enabling legitimate cross-origin requests. CORS is crucial for modern web applications that often integrate services and resources from multiple domains, balancing security needs with the functionality requirements of complex, distributed web systems. Visit the following resources to learn more: - [@article@Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) -- [@video@CORS in 100 Seconds](https://www.youtube.com/watch?v=4KHiSt0oLJ0) - [@video@CORS in 6 minutes](https://www.youtube.com/watch?v=PNtFSVU-YTI) - [@article@Understanding CORS](https://rbika.com/blog/understanding-cors) diff --git a/src/data/roadmaps/frontend/content/credentials@opu2bAsmdWHqWqtsCscLC.md b/src/data/roadmaps/frontend/content/credentials@opu2bAsmdWHqWqtsCscLC.md index 3f05530e4..b317f9b4d 100644 --- a/src/data/roadmaps/frontend/content/credentials@opu2bAsmdWHqWqtsCscLC.md +++ b/src/data/roadmaps/frontend/content/credentials@opu2bAsmdWHqWqtsCscLC.md @@ -1,11 +1,8 @@ # Credentials API -The Credential Management API is a web API that allows web developers to integrate password-based and federated login flows into their applications. It provides a standardized, browser-based interface for storing and retrieving user credentials, such as username and password combinations and OAuth tokens. - -To use the Credential Management API, a web page must first create a Credential object and specify the credentials that the user wishes to store. The page can then use the navigator.credentials object to store and retrieve the user's credentials. The API provides several methods for storing and retrieving credentials, as well as for prompting the user to sign in or sign up. - -The Credential Management API is supported by most modern web browsers and is designed to improve the security and usability of login flows by allowing the user to store and reuse their credentials across multiple sites and devices. +The Credential Management API is a web standard that allows websites to interact with the browser's credential manager to store, retrieve, and manage user credentials. It provides a programmatic interface for seamless and secure user authentication, enabling features like automatic sign-in and one-tap sign-up. The API supports various credential types, including passwords, federated identities, and public key credentials. By leveraging this API, developers can improve user experience by reducing login friction, implementing smoother account switching, and enhancing overall security. It works in conjunction with password managers and platform authenticators, helping to streamline authentication processes across devices and browsers while adhering to modern security practices. Visit the following resources to learn more: - [@article@Credential Management API - MDN](https://developer.mozilla.org/en-US/docs/Web/API/Credential_Management_API) +- [@article@The Credential Management API](https://web.dev/articles/security-credential-management) diff --git a/src/data/roadmaps/frontend/content/css-architecture@nPg_YWpMJtlhU2t2UD_6B.md b/src/data/roadmaps/frontend/content/css-architecture@nPg_YWpMJtlhU2t2UD_6B.md index e6ea40ff4..8d6bb4237 100644 --- a/src/data/roadmaps/frontend/content/css-architecture@nPg_YWpMJtlhU2t2UD_6B.md +++ b/src/data/roadmaps/frontend/content/css-architecture@nPg_YWpMJtlhU2t2UD_6B.md @@ -1,11 +1,9 @@ # CSS Architecture -CSS is notoriously difficult to manage in large, complex, rapidly-iterated systems. There are different ways of writing CSS that allows in writing more maintainable CSS. +CSS architecture refers to the methodologies and organizational strategies used to structure and maintain CSS code in large-scale web projects. It focuses on creating scalable, maintainable, and modular stylesheets to manage the growing complexity of web applications. Key concepts include naming conventions (like BEM or SMACSS), component-based design, separation of concerns, and the use of preprocessors (such as Sass or Less). CSS architecture often employs techniques like CSS modules, utility classes, or CSS-in-JS solutions to improve code reusability and reduce specificity conflicts. The goal is to create a systematic approach to styling that enhances collaboration among developers, reduces code duplication, and facilitates easier updates and maintenance of the visual design across an entire application or website. Visit the following resources to learn more: -- [@article@A Look at Some CSS Methodologies](https://www.webfx.com/blog/web-design/css-methodologies/) -- [@article@BEM Official Website](https://en.bem.info) -- [@article@OOCSS Official Website](http://oocss.org/) -- [@article@SMACSS Official Website](http://smacss.com/) +- [@article@How to Organize Your CSS with a Modular Architecture](https://snipcart.com/blog/organize-css-modular-architecture) +- [@video@Modern CSS For Dynamic Component-Based Architecture](https://www.youtube.com/watch?v=Y50iqMlrqU8) - [@feed@Explore top posts about Architecture](https://app.daily.dev/tags/architecture?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/css-preprocessors@UTW1pP59dUehuf0zeHXqL.md b/src/data/roadmaps/frontend/content/css-preprocessors@UTW1pP59dUehuf0zeHXqL.md index b47d9e78f..0e6c9f787 100644 --- a/src/data/roadmaps/frontend/content/css-preprocessors@UTW1pP59dUehuf0zeHXqL.md +++ b/src/data/roadmaps/frontend/content/css-preprocessors@UTW1pP59dUehuf0zeHXqL.md @@ -1,7 +1,11 @@ # CSS Preprocessors -CSS Preprocessors are scripting languages that extend the default capabilities of CSS. They enable us to use logic in our CSS code, such as variables, nesting, inheritance, mixins, functions, and mathematical operations. +CSS preprocessors are scripting languages that extend the capabilities of standard CSS, allowing developers to write more maintainable and efficient stylesheets. They introduce features like variables, nesting, mixins, functions, and mathematical operations, which are then compiled into standard CSS. Popular preprocessors include Sass, Less, and Stylus. These tools enable developers to organize styles more logically, reuse code more effectively, and create complex CSS structures with less repetition. Preprocessors often support features like partials for modular stylesheets and built-in color manipulation functions. By using a preprocessor, developers can write more DRY (Don't Repeat Yourself) code, manage large-scale projects more easily, and potentially improve the performance of their stylesheets through optimization during the compilation process. Visit the following resources to learn more: +- [@official@Sass Website](https://sass-lang.com/) +- [@official@Less Website](https://lesscss.org/) +- [@official@Stylus Website](https://stylus-lang.com/) +- [@official@PostCSS Website](https://postcss.org/) - [@feed@Explore top posts about CSS](https://app.daily.dev/tags/css?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/css@ZhJhf1M2OphYbEmduFq-9.md b/src/data/roadmaps/frontend/content/css@ZhJhf1M2OphYbEmduFq-9.md index 7a414069e..f434ee1af 100644 --- a/src/data/roadmaps/frontend/content/css@ZhJhf1M2OphYbEmduFq-9.md +++ b/src/data/roadmaps/frontend/content/css@ZhJhf1M2OphYbEmduFq-9.md @@ -1,11 +1,10 @@ # CSS -CSS or Cascading Style Sheets is the language used to style the frontend of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript. +CSS (Cascading Style Sheets) is a styling language used to describe the presentation of a document written in HTML or XML. It defines how elements should be displayed on screen, on paper, or in other media. CSS separates the design from the content, allowing for greater flexibility and control over the layout, colors, and fonts of web pages. It uses a system of selectors to target HTML elements and apply styles to them. CSS supports responsive design through media queries, enabling the creation of layouts that adapt to different screen sizes and devices. The cascade, inheritance, and specificity are key concepts in CSS that determine how styles are applied when multiple rules target the same element. Modern CSS includes features like Flexbox and Grid for advanced layout control, animations, and transitions for creating dynamic user interfaces. Visit the following resources to learn more: -- [@video@CSS Complete Course](https://youtu.be/n4R2E7O-Ngo) -- [@video@HTML and CSS Tutorial](https://www.youtube.com/watch?v=D-h8L5hgW-w) -- [@article@W3Schools — Learn CSS](https://www.w3schools.com/css/) +- [@course@CSS Complete Course](https://youtu.be/n4R2E7O-Ngo) +- [@course@HTML & CSS Full Course - Beginner to Pro](https://www.youtube.com/watch?v=G3e-cpL7ofc) - [@article@Web.dev by Google — Learn CSS](https://web.dev/learn/css/) - [@feed@Explore top posts about CSS](https://app.daily.dev/tags/css?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/custom-elements@VxiQPgcYDFAT6WgSRWpIA.md b/src/data/roadmaps/frontend/content/custom-elements@VxiQPgcYDFAT6WgSRWpIA.md index f81ad8367..f53478e4b 100644 --- a/src/data/roadmaps/frontend/content/custom-elements@VxiQPgcYDFAT6WgSRWpIA.md +++ b/src/data/roadmaps/frontend/content/custom-elements@VxiQPgcYDFAT6WgSRWpIA.md @@ -4,5 +4,6 @@ One of the key features of the Web Components standard is the ability to create Visit the following resources to learn more: -- [@article@Using custom elements | MDN web docs](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements) +- [@article@Using Custom Elements - MDN](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements) +- [@video@Web Components | Custom Elements](https://www.youtube.com/watch?v=1GT35DSdZbI) - [@feed@Explore top posts about Web Development](https://app.daily.dev/tags/webdev?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/cypress@DaynCz5RR26gjT6N6gTDL.md b/src/data/roadmaps/frontend/content/cypress@DaynCz5RR26gjT6N6gTDL.md index 856442ed1..61cad7f0b 100644 --- a/src/data/roadmaps/frontend/content/cypress@DaynCz5RR26gjT6N6gTDL.md +++ b/src/data/roadmaps/frontend/content/cypress@DaynCz5RR26gjT6N6gTDL.md @@ -4,7 +4,7 @@ Cypress framework is a JavaScript-based end-to-end testing framework built on to Visit the following resources to learn more: -- [@official@Official Website](https://www.cypress.io/) -- [@article@Official Documentation](https://docs.cypress.io/guides/overview/why-cypress#Other) -- [@video@Cypress End-to-End Testing](https://www.youtube.com/watch?v=7N63cMKosIE) +- [@official@Cypress Website](https://www.cypress.io/) +- [@article@Cypress Documentation](https://docs.cypress.io/) +- [@video@Cypress End-to-End Testing](https://www.youtube.com/watch?v=BQqzfHQkREo) - [@feed@Explore top posts about Cypress](https://app.daily.dev/tags/cypress?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/desktop-apps@KMA7NkxFbPoUDtFnGBFnj.md b/src/data/roadmaps/frontend/content/desktop-apps@KMA7NkxFbPoUDtFnGBFnj.md index 7824fffdd..3d54bfc7f 100644 --- a/src/data/roadmaps/frontend/content/desktop-apps@KMA7NkxFbPoUDtFnGBFnj.md +++ b/src/data/roadmaps/frontend/content/desktop-apps@KMA7NkxFbPoUDtFnGBFnj.md @@ -1,8 +1,9 @@ # Desktop Applications in JavaScript -A while back, developing a desktop app using JavaScript was impossible. But now JavaScript developers can create desktop applications using their knowledge for web development. Here is the list of options to create desktop applications in JavaScript. +Desktop applications applications typically use frameworks like Electron, NW.js (Node-WebKit), or Tauri, which combine a JavaScript runtime with a native GUI toolkit. This approach allows developers to use their web development skills to create cross-platform desktop apps. Electron, developed by GitHub, is particularly popular, powering applications like Visual Studio Code, Atom, and Discord. These frameworks provide APIs to access native system features, enabling JavaScript to interact with the file system, system tray, and other OS-specific functionalities. While offering rapid development and cross-platform compatibility, JavaScript desktop apps can face challenges in terms of performance and resource usage compared to traditional native applications. However, they benefit from the vast ecosystem of JavaScript libraries and tools, making them an attractive option for many developers and businesses. -- [@article@Electron](https://www.electronjs.org/) -- [@article@NodeGUI](https://docs.nodegui.org/) -- [@article@NW.js](https://nwjs.io/) -- [@article@Meteor](https://www.meteor.com/) +Visit the following resources to learn more: + +- [@official@Electron Website](https://www.electronjs.org/) +- [@official@NW.js Website](https://nwjs.io/) +- [@official@Tauri Website](https://tauri.app/) diff --git a/src/data/roadmaps/frontend/content/device-orientation@Fd0hQh1DleM0gMzCpGou4.md b/src/data/roadmaps/frontend/content/device-orientation@Fd0hQh1DleM0gMzCpGou4.md index ee8454553..210b46f5e 100644 --- a/src/data/roadmaps/frontend/content/device-orientation@Fd0hQh1DleM0gMzCpGou4.md +++ b/src/data/roadmaps/frontend/content/device-orientation@Fd0hQh1DleM0gMzCpGou4.md @@ -1,11 +1,8 @@ # Device Orientation API -The Device Orientation API is a web API that provides access to the device's orientation and motion data, such as its pitch, roll, and yaw. It allows web developers to build applications that can respond to the device's orientation and motion, such as augmented reality and motion-controlled games. - -To use the Device Orientation API, a web page must first request permission from the user to access the device's orientation data. If permission is granted, the page can then use the DeviceOrientationEvent object to access the device's orientation data and respond to changes in orientation. The API provides several properties for accessing the device's orientation and motion data, as well as events for detecting changes in orientation. - -The Device Orientation API is supported by most modern web browsers and is often used in conjunction with other APIs, such as the Geolocation API, to build location-based applications. +The Device Orientation API is a web API that provides access to the device's orientation and motion data, such as its pitch, roll, and yaw. It allows web developers to build applications that can respond to the device's orientation and motion, such as augmented reality and motion-controlled games. To use the Device Orientation API, a web page must first request permission from the user to access the device's orientation data. If permission is granted, the page can then use the DeviceOrientationEvent object to access the device's orientation data and respond to changes in orientation. The API provides several properties for accessing the device's orientation and motion data, as well as events for detecting changes in orientation. Visit the following resources to learn more: - [@article@Device Orientation API - MDN](https://developer.mozilla.org/en-US/docs/Web/API/Device_orientation_events) +- [@video@Detect the device orientation with JS](https://www.youtube.com/watch?v=fMDuFoqSQfw) diff --git a/src/data/roadmaps/frontend/content/dns-and-how-it-works@hkxw9jPGYphmjhTjw8766.md b/src/data/roadmaps/frontend/content/dns-and-how-it-works@hkxw9jPGYphmjhTjw8766.md index f7f72e0d3..6ecb89bb2 100644 --- a/src/data/roadmaps/frontend/content/dns-and-how-it-works@hkxw9jPGYphmjhTjw8766.md +++ b/src/data/roadmaps/frontend/content/dns-and-how-it-works@hkxw9jPGYphmjhTjw8766.md @@ -1,6 +1,6 @@ # DNS -The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com. Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources. +DNS (Domain Name System) is a hierarchical, decentralized naming system for computers, services, or other resources connected to the Internet or a private network. It translates human-readable domain names (like www.example.com) into IP addresses (like 192.0.2.1) that computers use to identify each other. DNS servers distributed worldwide work together to resolve these queries, forming a global directory service. The system uses a tree-like structure with root servers at the top, followed by top-level domain servers (.com, .org, etc.), authoritative name servers for specific domains, and local DNS servers. DNS is crucial for the functioning of the Internet, enabling users to access websites and services using memorable names instead of numerical IP addresses. Visit the following resources to learn more: @@ -8,7 +8,4 @@ Visit the following resources to learn more: - [@article@Mess with DNS - DNS Playground](https://messwithdns.net/) - [@article@How DNS works (comic)](https://howdns.works/) - [@video@DNS and How does it Work?](https://www.youtube.com/watch?v=Wj0od2ag5sk) -- [@video@DNS Records](https://www.youtube.com/watch?v=7lxgpKh_fRY) -- [@video@When to add glue records to DNS settings](https://www.youtube.com/watch?v=e48AyJOA9W8) -- [@video@DNS Records for Newbies - How To Manage Website Records](https://www.youtube.com/watch?v=YV5tkQYcvfg) - [@feed@Explore top posts about DNS](https://app.daily.dev/tags/dns?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/electron@mQHpSyMR4Rra4mqAslgiS.md b/src/data/roadmaps/frontend/content/electron@mQHpSyMR4Rra4mqAslgiS.md index b2f80714b..ffc432913 100644 --- a/src/data/roadmaps/frontend/content/electron@mQHpSyMR4Rra4mqAslgiS.md +++ b/src/data/roadmaps/frontend/content/electron@mQHpSyMR4Rra4mqAslgiS.md @@ -1,10 +1,10 @@ # Electron -Electron allows you to build cross-platform desktop applications with HTML, CSS, and Javascript/Typescript. It uses Chromium and Node.js, so essentially it is a "Browser" like application that is compatible with Mac, Windows, and Linux. +Electron is an open-source framework developed by GitHub that enables developers to build cross-platform desktop applications using web technologies. It combines the Chromium rendering engine with the Node.js runtime, allowing applications to be written in HTML, CSS, and JavaScript. Electron provides APIs to access native operating system functions, bridging the gap between web and desktop development. It's widely used for creating popular applications like Visual Studio Code, Atom, and Discord. Electron apps benefit from rapid development cycles, cross-platform compatibility, and access to a vast ecosystem of web technologies and Node.js modules. However, they can face challenges with resource usage and performance compared to native applications. Despite these trade-offs, Electron remains a popular choice for developers seeking to leverage web skills for desktop app development. Visit the following resources to learn more: -- [@article@Electron Website](https://www.electronjs.org/) -- [@article@Electron Docs](https://www.electronjs.org/docs/latest/) +- [@official@Electron Website](https://www.electronjs.org/) +- [@official@Electron Docs](https://www.electronjs.org/docs/latest/) - [@video@Create a Desktop App With JavaScript & Electron](https://www.youtube.com/watch?v=ML743nrkMHw) - [@feed@Explore top posts about Electron](https://app.daily.dev/tags/electron?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/eleventy@io0RHJWIcVxDhcYkV9d38.md b/src/data/roadmaps/frontend/content/eleventy@io0RHJWIcVxDhcYkV9d38.md index 326bb82f6..a560b0fd9 100644 --- a/src/data/roadmaps/frontend/content/eleventy@io0RHJWIcVxDhcYkV9d38.md +++ b/src/data/roadmaps/frontend/content/eleventy@io0RHJWIcVxDhcYkV9d38.md @@ -4,6 +4,6 @@ Eleventy (11ty) is a simple to use, easy to customize, highly performant and pow Visit the following resources to learn more: -- [@article@Official Website](https://www.11ty.dev/) -- [@article@A collection of 11ty starters, projects, plugins, and resources](https://11ty.rocks/) +- [@official@Official Website](https://www.11ty.dev/) +- [@official@A collection of 11ty starters, projects, plugins, and resources](https://11ty.rocks/) - [@video@Introduction to Eleventy](https://www.youtube.com/watch?v=-dM6AmNmMFA) diff --git a/src/data/roadmaps/frontend/content/esbuild@4W7UXfdKIUsm1bUrjdTVT.md b/src/data/roadmaps/frontend/content/esbuild@4W7UXfdKIUsm1bUrjdTVT.md index 58c1e84f6..b69e5a3c7 100644 --- a/src/data/roadmaps/frontend/content/esbuild@4W7UXfdKIUsm1bUrjdTVT.md +++ b/src/data/roadmaps/frontend/content/esbuild@4W7UXfdKIUsm1bUrjdTVT.md @@ -1,11 +1,10 @@ # esbuild -Our current build tools for the web are 10-100x slower than they could be. The main goal of the esbuild bundler project is to bring about a new era of build tool performance, and create an easy-to-use modern bundler along the way. +esbuild is a high-performance JavaScript bundler and minifier designed for speed and efficiency. Created by Evan Wallace, it's written in Go and compiles to native code, making it significantly faster than traditional JavaScript-based build tools. esbuild supports modern JavaScript features, TypeScript, and JSX out of the box, with near-instant bundling times even for large projects. It offers a simple API and command-line interface, making it easy to integrate into existing build pipelines. While primarily focused on speed, esbuild also provides basic code splitting, tree shaking, and source map generation. Its extreme performance makes it particularly suitable for development environments and as a foundation for other build tools, though it may lack some advanced features found in more mature bundlers. Visit the following resources to learn more: -- [@article@Esbuild Official Website](https://esbuild.github.io/) -- [@article@Esbuild Documentation](https://esbuild.github.io/api/) -- [@video@Why are People Obsessed with esbuild?](https://www.youtube.com/watch?v=9XS_RA6zyyU) +- [@official@Esbuild Website](https://esbuild.github.io/) +- [@course@Let's Learn esbuild! (with Sunil Pai) — Learn With Jason](https://www.youtube.com/watch?v=KLdF1yu_bmI) - [@video@What Is ESBuild?](https://www.youtube.com/watch?v=ZY8Vu8cbWF0) - [@feed@Explore top posts about Web Development](https://app.daily.dev/tags/webdev?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/eslint@NFjsI712_qP0IOmjuqXar.md b/src/data/roadmaps/frontend/content/eslint@NFjsI712_qP0IOmjuqXar.md index 10e5f116a..ee60435d4 100644 --- a/src/data/roadmaps/frontend/content/eslint@NFjsI712_qP0IOmjuqXar.md +++ b/src/data/roadmaps/frontend/content/eslint@NFjsI712_qP0IOmjuqXar.md @@ -1,10 +1,10 @@ # ESLint -With ESLint you can impose the coding standard using a certain set of standalone rules. +ESLint is a popular open-source static code analysis tool for identifying and fixing problems in JavaScript code. It enforces coding standards, detects potential errors, and promotes consistent coding practices across projects. ESLint is highly configurable, allowing developers to define custom rules or use preset configurations. It supports modern JavaScript features, JSX, and TypeScript through plugins. ESLint can be integrated into development workflows through IDE extensions, build processes, or git hooks, providing real-time feedback to developers. Its ability to automatically fix many issues it detects makes it a valuable tool for maintaining code quality and consistency, especially in large teams or projects. ESLint's extensibility and wide adoption in the JavaScript ecosystem have made it a standard tool in modern JavaScript development. Visit the following resources to learn more: -- [@official@ESLint Official Website](https://eslint.org/) -- [@article@Introduction to ESLint](https://dev.to/shivambmgupta/eslint-what-why-when-how-5f1d) +- [@official@ESLint Website](https://eslint.org/) +- [@article@What is ESLint and How to Use ESLint to Detect and Fix Code for JavaScript Projects](https://2coffee.dev/en/articles/what-is-eslint-and-how-to-use-eslint-to-detect-fix-code-for-javascript-projects) - [@video@ESLint Quickstart - find errors automatically](https://www.youtube.com/watch?v=qhuFviJn-es) - [@feed@Explore top posts about JavaScript](https://app.daily.dev/tags/javascript?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/fetch-api--ajax-xhr@A4brX0efjZ0FFPTB4r6U0.md b/src/data/roadmaps/frontend/content/fetch-api--ajax-xhr@A4brX0efjZ0FFPTB4r6U0.md index c94d6950f..676192130 100644 --- a/src/data/roadmaps/frontend/content/fetch-api--ajax-xhr@A4brX0efjZ0FFPTB4r6U0.md +++ b/src/data/roadmaps/frontend/content/fetch-api--ajax-xhr@A4brX0efjZ0FFPTB4r6U0.md @@ -1,6 +1,6 @@ # Fetch API -Ajax is the technique that lets us send and receive the data asynchronously from the servers e.g. updating the user profile or asynchronously fetching the list of searched products without reloading the page. +The Fetch API is a modern JavaScript interface for making HTTP requests in web browsers. It provides a more powerful and flexible way to send and receive data compared to older methods like XMLHttpRequest. Fetch uses Promises, allowing for cleaner asynchronous code. It supports various data formats, custom headers, and different types of requests (GET, POST, etc.). The API is designed to be extensible and integrates well with other web technologies. While simpler for basic use cases, Fetch also handles complex scenarios like request cancellation and reading streamed responses. It's widely supported in modern browsers and has become the standard for network requests in client-side JavaScript applications. Visit the following resources to learn more: diff --git a/src/data/roadmaps/frontend/content/flutter@2MRvAK9G9RGM_auWytcKh.md b/src/data/roadmaps/frontend/content/flutter@2MRvAK9G9RGM_auWytcKh.md index bac6fd860..6d4dcaa7f 100644 --- a/src/data/roadmaps/frontend/content/flutter@2MRvAK9G9RGM_auWytcKh.md +++ b/src/data/roadmaps/frontend/content/flutter@2MRvAK9G9RGM_auWytcKh.md @@ -1,13 +1,12 @@ # Flutter -Flutter is a free and open-source multi-platform UI framework created by Google and released in May 2017. In a few words, it allows you to create a native mobile application with only one codebase. This means that you can use one programming language and one codebase to create three different apps (for iOS, Android and Desktop). +Flutter is an open-source UI software development kit created by Google for building natively compiled, multi-platform applications from a single codebase. It uses the Dart programming language and provides a rich set of pre-designed widgets for creating responsive and visually appealing user interfaces. Flutter's architecture allows for fast development with hot reload, enabling developers to see changes instantly. It supports iOS, Android, web, and desktop platforms, offering true cross-platform development. Flutter uses a custom rendering engine, Skia, to draw UI components, ensuring consistent appearance across devices. While known for mobile app development, Flutter's expanding ecosystem and performance improvements have increased its adoption for web and desktop applications as well. Visit the following resources to learn more: - [@roadmap@Visit Dedicated Flutter Roadmap](https://roadmap.sh/flutter) - [@official@Flutter Website](https://flutter.dev) - [@official@Flutter for Desktop](https://flutter.dev/multi-platform/desktop) -- [@video@Flutter Tutorial for Beginners](https://www.youtube.com/watch?v=1ukSR1GRtMU\&list=PL4cUxeGkcC9jLYyp2Aoh6hcWuxFDX6PBJ) -- [@article@Learn Dart Programming](https://www.tutorialspoint.com/dart_programming/index.htm) +- [@course@Flutter course for beginners](https://www.youtube.com/watch?v=VPvVD8t02U8) - [@article@12 Ways Flutter Streamlines App Development](https://thenewstack.io/12-ways-flutter-streamlines-app-development/) - [@feed@Explore top posts about Flutter](https://app.daily.dev/tags/flutter?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/flutter@dIQXjFEUAJAGxxfAYceHU.md b/src/data/roadmaps/frontend/content/flutter@dIQXjFEUAJAGxxfAYceHU.md index 3cd63eb36..6d4dcaa7f 100644 --- a/src/data/roadmaps/frontend/content/flutter@dIQXjFEUAJAGxxfAYceHU.md +++ b/src/data/roadmaps/frontend/content/flutter@dIQXjFEUAJAGxxfAYceHU.md @@ -1,22 +1,12 @@ # Flutter -Flutter is a free and open-source mobile UI framework created by Google and released in May 2017. In a few words, it allows you to create a native mobile application with only one codebase. This means that you can use one programming language and one codebase to create two different apps (for iOS and Android). - -Flutter consists of two important parts: - -- An SDK (Software Development Kit): A collection of tools that are going to help you develop your applications. This includes tools to compile your code into native machine code (code for iOS and Android). -- A Framework (UI Library based on widgets): A collection of reusable UI elements (buttons, text inputs, sliders, and so on) that you can personalize for your own needs. - To develop with Flutter, you will use a programming language called Dart. The language was created by Google in October 2011, but it has improved a lot over these past years. - -Dart focuses on front-end development, and you can use it to create mobile and web applications. - -If you know a bit of programming, Dart is a typed object programming language. You can compare Dart's syntax to JavaScript. +Flutter is an open-source UI software development kit created by Google for building natively compiled, multi-platform applications from a single codebase. It uses the Dart programming language and provides a rich set of pre-designed widgets for creating responsive and visually appealing user interfaces. Flutter's architecture allows for fast development with hot reload, enabling developers to see changes instantly. It supports iOS, Android, web, and desktop platforms, offering true cross-platform development. Flutter uses a custom rendering engine, Skia, to draw UI components, ensuring consistent appearance across devices. While known for mobile app development, Flutter's expanding ecosystem and performance improvements have increased its adoption for web and desktop applications as well. Visit the following resources to learn more: - [@roadmap@Visit Dedicated Flutter Roadmap](https://roadmap.sh/flutter) - [@official@Flutter Website](https://flutter.dev) -- [@video@Flutter Tutorial for Beginners](https://www.youtube.com/watch?v=1ukSR1GRtMU\&list=PL4cUxeGkcC9jLYyp2Aoh6hcWuxFDX6PBJ) -- [@article@Learn Dart Programming](https://www.tutorialspoint.com/dart_programming/index.htm) +- [@official@Flutter for Desktop](https://flutter.dev/multi-platform/desktop) +- [@course@Flutter course for beginners](https://www.youtube.com/watch?v=VPvVD8t02U8) - [@article@12 Ways Flutter Streamlines App Development](https://thenewstack.io/12-ways-flutter-streamlines-app-development/) - [@feed@Explore top posts about Flutter](https://app.daily.dev/tags/flutter?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/git@R_I4SGYqLk5zze5I1zS_E.md b/src/data/roadmaps/frontend/content/git@R_I4SGYqLk5zze5I1zS_E.md index 637f1554d..b2f35eddd 100644 --- a/src/data/roadmaps/frontend/content/git@R_I4SGYqLk5zze5I1zS_E.md +++ b/src/data/roadmaps/frontend/content/git@R_I4SGYqLk5zze5I1zS_E.md @@ -1,11 +1,11 @@ # Git -[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. +Git is a distributed version control system designed to handle projects of any size with speed and efficiency. Created by Linus Torvalds in 2005, Git tracks changes in source code during software development, allowing multiple developers to work together on non-linear development. It provides strong support for branching, merging, and distributed development workflows. Git maintains a complete history of all changes, enabling easy rollbacks and comparisons between versions. Its distributed nature means each developer has a full copy of the repository, allowing for offline work and backup. Git's speed, flexibility, and robust branching and merging capabilities have made it the most widely used version control system in software development, particularly for open-source projects. Visit the following resources to learn more: +- [@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) - [@article@Tutorial: Git for Absolutely Everyone](https://thenewstack.io/tutorial-git-for-absolutely-everyone/) - [@feed@Explore top posts about Git](https://app.daily.dev/tags/git?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/github@qmTVMJDsEhNIkiwE_UTYu.md b/src/data/roadmaps/frontend/content/github@qmTVMJDsEhNIkiwE_UTYu.md index 48935cb4b..c32bf18d3 100644 --- a/src/data/roadmaps/frontend/content/github@qmTVMJDsEhNIkiwE_UTYu.md +++ b/src/data/roadmaps/frontend/content/github@qmTVMJDsEhNIkiwE_UTYu.md @@ -1,13 +1,11 @@ # GitHub -[GitHub](https://github.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. +GitHub has become a central hub for open-source projects and is widely used by developers, companies, and organizations for both private and public repositories. It was acquired by Microsoft in 2018 but continues to operate as a relatively independent entity. GitHub's popularity has made it an essential tool in modern software development workflows and a key platform for showcasing coding projects and contributing to open-source software. Visit the following resources to learn more: -- [@article@GitHub: Quickstart](https://docs.github.com/en/get-started/quickstart/hello-world) -- [@article@Learn GitHub by doing](https://skills.github.com/) +- [@roadmap@Visit Dedicated Git & Github Roadmap](https://roadmap.sh/git-github) +- [@official@GitHub: Quickstart](https://docs.github.com/en/get-started/quickstart/hello-world) +- [@official@Learn GitHub by doing](https://skills.github.com/) - [@video@What is GitHub?](https://www.youtube.com/watch?v=w3jLJU7DT5E) -- [@video@Git vs. GitHub: Whats the difference?](https://www.youtube.com/watch?v=wpISo9TNjfU) -- [@video@Git and GitHub for Beginners](https://www.youtube.com/watch?v=RGOj5yH7evk) -- [@video@Git and GitHub - CS50 Beyond 2019](https://www.youtube.com/watch?v=eulnSXkhE7I) - [@feed@Explore top posts about GitHub](https://app.daily.dev/tags/github?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/gitlab@zIoSJMX3cuzCgDYHjgbEh.md b/src/data/roadmaps/frontend/content/gitlab@zIoSJMX3cuzCgDYHjgbEh.md index 948fc6df8..f943e24ba 100644 --- a/src/data/roadmaps/frontend/content/gitlab@zIoSJMX3cuzCgDYHjgbEh.md +++ b/src/data/roadmaps/frontend/content/gitlab@zIoSJMX3cuzCgDYHjgbEh.md @@ -1,10 +1,10 @@ # GitLab -[GitLab](https://gitlab.com) is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. +GitLab is a web-based DevOps platform that provides a complete solution for the software development lifecycle. GitLab emphasizes an all-in-one approach, integrating various development tools into a single platform. It's available as both a cloud-hosted service and a self-hosted solution, giving organizations flexibility in deployment. GitLab's focus on DevOps practices and its comprehensive feature set make it popular among enterprises and teams seeking a unified platform for their entire development workflow. While similar to GitHub in many respects, GitLab's integrated CI/CD capabilities and self-hosting options are often cited as key differentiators. Visit the following resources to learn more: -- [@article@GitLab Documentation](https://docs.gitlab.com/) -- [@opensource@GitLab Website](https://gitlab.com/) +- [@official@GitLab Website](https://gitlab.com/) +- [@official@GitLab Documentation](https://docs.gitlab.com/) - [@article@Development: Connect git to GitLab for Small Projects](https://thenewstack.io/development-connect-git-to-gitlab-for-small-projects/) - [@feed@Explore top posts about GitLab](https://app.daily.dev/tags/gitlab?ref=roadmapsh) diff --git a/src/data/roadmaps/frontend/content/graphql@L7AllJfKvClaam3y-u6DP.md b/src/data/roadmaps/frontend/content/graphql@L7AllJfKvClaam3y-u6DP.md index 2d5100cbd..ef5f1983f 100644 --- a/src/data/roadmaps/frontend/content/graphql@L7AllJfKvClaam3y-u6DP.md +++ b/src/data/roadmaps/frontend/content/graphql@L7AllJfKvClaam3y-u6DP.md @@ -1,12 +1,11 @@ # Graphql -GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools. +GraphQL is a query language and runtime for APIs, developed by Facebook. GraphQL's flexibility and efficiency make it popular for building complex applications, especially those with diverse client requirements. It's particularly useful for mobile applications where bandwidth efficiency is crucial. While it requires a paradigm shift from REST, many developers and organizations find GraphQL's benefits outweigh the learning curve, especially for large-scale or rapidly evolving APIs. Visit the following resources to learn more: +- [@roadmap@visit Dedicated GraphQL Roadmap](https://roadmap.sh/graphql) - [@official@Introduction to GraphQL](https://graphql.org/learn/) -- [@article@The Fullstack Tutorial for GraphQL](https://www.howtographql.com/) -- [@article@GraphQL Tutorials](https://odyssey.apollographql.com/) - [@video@GraphQL Course for Beginners](https://www.youtube.com/watch?v=ed8SzALpx1Q) - [@article@Introduction to GraphQL](https://thenewstack.io/introduction-to-graphql/) - [@article@How to Execute a Simple GraphQL Query](https://thenewstack.io/how-to-execute-a-simple-graphql-query/) diff --git a/src/data/roadmaps/frontend/content/how-does-the-internet-work@yCnn-NfSxIybUQ2iTuUGq.md b/src/data/roadmaps/frontend/content/how-does-the-internet-work@yCnn-NfSxIybUQ2iTuUGq.md index f37ee0060..774d46faa 100644 --- a/src/data/roadmaps/frontend/content/how-does-the-internet-work@yCnn-NfSxIybUQ2iTuUGq.md +++ b/src/data/roadmaps/frontend/content/how-does-the-internet-work@yCnn-NfSxIybUQ2iTuUGq.md @@ -1,11 +1,10 @@ -# Internet +# How Does The Internet Work -The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols. +The Internet works through a global network of interconnected computers and servers, communicating via standardized protocols. Data is broken into packets and routed through various network nodes using the Internet Protocol (IP). These packets travel across different physical infrastructures, including fiber optic cables, satellites, and wireless networks. The Transmission Control Protocol (TCP) ensures reliable delivery and reassembly of packets at their destination. Domain Name System (DNS) servers translate human-readable website names into IP addresses. When you access a website, your device sends a request to the appropriate server, which responds with the requested data. This process, facilitated by routers, switches, and other networking equipment, enables the seamless exchange of information across vast distances, forming the backbone of our digital communications. Visit the following resources to learn more: +- [@roadmap@Introduction to Internet](https://roadmap.sh/guides/what-is-internet) - [@article@How does the Internet Work?](https://cs.fyi/guide/how-does-internet-work) - [@article@How Does the Internet Work? MDN Docs](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/How_does_the_Internet_work) -- [@roadmap.sh@Introduction to Internet](/guides/what-is-internet) -- [@video@How does the Internet work?](https://www.youtube.com/watch?v=TNQsmPf24go) - [@video@How the Internet Works in 5 Minutes](https://www.youtube.com/watch?v=7_LPdttKXPc) diff --git a/src/data/roadmaps/frontend/content/html-templates@Hk8AVonOd693_y1sykPqd.md b/src/data/roadmaps/frontend/content/html-templates@Hk8AVonOd693_y1sykPqd.md index 4e3e2956e..d10593bb3 100644 --- a/src/data/roadmaps/frontend/content/html-templates@Hk8AVonOd693_y1sykPqd.md +++ b/src/data/roadmaps/frontend/content/html-templates@Hk8AVonOd693_y1sykPqd.md @@ -4,5 +4,6 @@ The `