diff --git a/public/roadmap-content/android.json b/public/roadmap-content/android.json index b3423de9d..b01b769eb 100644 --- a/public/roadmap-content/android.json +++ b/public/roadmap-content/android.json @@ -220,8 +220,14 @@ }, "2iDJrxjXOt7o2fPp2HfRl": { "title": "Fragments", - "description": "", - "links": [] + "description": "A `Fragment` represents a reusable portion of your app's UI. A fragment defines and manages its own layout, has its own lifecycle, and can handle its own input events. Fragments can't live on their own. They must be hosted by an activity or another fragment. The fragment’s view hierarchy becomes part of, or attaches to, the host’s view hierarchy.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Android Developers: Fragments", + "url": "https://developer.android.com/guide/fragments", + "type": "article" + } + ] }, "boMz0HZlMAsLdCZlpUo-H": { "title": "EditText", @@ -230,13 +236,25 @@ }, "Mtx0bY0drmaTw8sCM5YTl": { "title": "Dialogs", - "description": "", - "links": [] + "description": "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:", + "links": [ + { + "title": "Android Developers: Dialogs", + "url": "https://developer.android.com/guide/fragments/dialogs", + "type": "article" + } + ] }, "WhfzFOUpm0DFEj7Oeq21R": { "title": "Buttons", - "description": "", - "links": [] + "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:", + "links": [ + { + "title": "Android Developers: Button", + "url": "https://developer.android.com/develop/ui/views/components/button", + "type": "article" + } + ] }, "BVgO9n7tGlVdiS72-hFSd": { "title": "Toast", @@ -306,18 +324,40 @@ }, "pSU-NZtjBh-u0WKTYfjk_": { "title": "MVVM", - "description": "", - "links": [] + "description": "The `Model-View-ViewModel` (MVVM) pattern is a software architectural pattern commonly used in UI development. It is designed to separate the concerns of an application, making the code more modular, testable, and maintainable.\n\nComponents:\n\n* `Model`: Refers either to a domain model, which represents real state content (an object-oriented approach), or to the data access layer, which represents content.\n* `View`: The view is the structure, layout, and appearance of what a user sees on the screen.\n* `View model`: The view model is an abstraction of the view exposing public properties and commands. The view model has been described as a state of the data in the model.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Android Developers: View Model", + "url": "https://developer.android.com/topic/libraries/architecture/viewmodel", + "type": "article" + }, + { + "title": "Wikipedia", + "url": "https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel", + "type": "article" + } + ] }, "aF_xFIqTjQbENtC7pkXvJ": { "title": "MVP", - "description": "", + "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": [] }, "w1A6wPKSd3Yh2luuHV-aE": { "title": "MVC", - "description": "", - "links": [] + "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:", + "links": [ + { + "title": "MVC", + "url": "https://developer.mozilla.org/en-US/docs/Glossary/MVC", + "type": "article" + }, + { + "title": "Model–view–controller", + "url": "https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller", + "type": "article" + } + ] }, "ZF5XgO7I_J9928bD3CVXo": { "title": "Repository Pattern", diff --git a/public/roadmap-content/angular.json b/public/roadmap-content/angular.json index 7b8b164a0..81c1ed229 100644 --- a/public/roadmap-content/angular.json +++ b/public/roadmap-content/angular.json @@ -252,18 +252,61 @@ }, "TDyFjKrIZJnCjEZsojPNQ": { "title": "Parent-Child Interaction", - "description": "", - "links": [] + "description": "In angular parent-child communication is commonly used to share data between two components.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Medium - Parent-Child Communication", + "url": "https://jaspritk.medium.com/parent-child-communication-in-angular-888373e0b69e", + "type": "article" + } + ] }, "v0XaLNZ-YrRqP-xv8wS43": { "title": "ViewChild", - "description": "", - "links": [] + "description": "View queries retrieve results from the elements in the component's view — the elements defined in the component's own template.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "View queries", + "url": "https://angular.dev/guide/components/queries#view-queries", + "type": "article" + }, + { + "title": "viewChild - signal", + "url": "https://angular.dev/guide/signals/queries#viewchild", + "type": "article" + }, + { + "title": "viewChildren - signal", + "url": "https://angular.dev/guide/signals/queries#viewchildren", + "type": "article" + }, + { + "title": "viewChild - API", + "url": "https://angular.dev/api/core/viewChild", + "type": "article" + } + ] }, "oQl9etjoHiU2JgxieUOEH": { "title": "ContentChild", - "description": "", - "links": [] + "description": "Content queries retrieve results from the elements in the component's content— the elements nested inside the component in the template where it's used.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Content queries - signal", + "url": "https://angular.dev/guide/signals/queries#content-queries", + "type": "article" + }, + { + "title": "Content queries", + "url": "https://angular.dev/guide/components/queries#content-queries", + "type": "article" + }, + { + "title": "contentChild - API", + "url": "https://angular.dev/api/core/contentChild", + "type": "article" + } + ] }, "nCpfj_35ZvW-NTygg06XZ": { "title": "Component Lifecycle", @@ -340,8 +383,19 @@ }, "9YhTXybJw2gszlqFeBtW3": { "title": "Creating Modules", - "description": "", - "links": [] + "description": "Creating modules in Angular helps organize your application into manageable, cohesive units. Each module can encapsulate related components, directives, pipes, and services. Here's a detailed guide on how to create and use modules in Angular.\n\nCreation Methods:\n\n* Generate Modules: Use ng generate module module-name.\n \n \n* Define Modules: Use @NgModule decorator to declare components, import other modules, and export components.\n \n \n* Create and Add Components: Generate and add components to the module.\n \n \n* Import Modules: Import your new module into app.module.ts or other feature modules.\n \n \n* Feature Modules: Use feature modules for large applications to manage related functionalities.\n \n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs (Feature Modules)", + "url": "https://angular.dev/guide/ngmodules/feature-modules", + "type": "article" + }, + { + "title": "How to Create a new module in Angular", + "url": "https://www.geeksforgeeks.org/how-to-create-a-new-module-in-angular/", + "type": "article" + } + ] }, "w_BazXvINFyxDCHmlznfy": { "title": "Feature Modules", @@ -350,8 +404,24 @@ }, "bLERvEERmNI5AgxtEYokZ": { "title": "Lazy Loading Modules", - "description": "", - "links": [] + "description": "By default, NgModules are eagerly loaded. This means that as soon as the application loads, so do all the NgModules, whether they are immediately necessary or not. For large applications with lots of routes, consider lazy loading —a design pattern that loads NgModules as needed. Lazy loading helps keep initial bundle sizes smaller, which in turn helps decrease load times.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Lazy Loading", + "url": "https://angular.dev/guide/ngmodules/lazy-loading", + "type": "article" + }, + { + "title": "Angular Lazy Loading", + "url": "https://www.bairesdev.com/blog/angular-lazy-loading/", + "type": "article" + }, + { + "title": "Lazy Loading in Angular: Improving Performance and User Experience", + "url": "https://www.youtube.com/watch?v=mjhi27YfV8Y", + "type": "video" + } + ] }, "5b590c7s-2XJ0rgdCYxLa": { "title": "Dependencies", @@ -419,11 +489,22 @@ }, "5vZkiH7HDwONIABLfNJ06": { "title": "Data Binding", - "description": "", - "links": [] + "description": "In an Angular template, a binding creates a live connection between a part of the UI created from a template (a DOM element, directive, or component) and the model (the component instance to which the template belongs). This connection can be used to synchronize the view with the model, to notify the model when an event or user action takes place in the view, or both. Angular's Change Detection algorithm is responsible for keeping the view and the model in sync. Bindings always have two parts: a target which will receive the bound value, and a template expression which produces a value from the model.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Understand Binding", + "url": "https://angular.dev/guide/templates/binding", + "type": "article" + }, + { + "title": "Data Binding in Angular", + "url": "https://www.angularminds.com/blog/data-binding-in-angular", + "type": "article" + } + ] }, "TJOZfHtsLfwA0CZ2bd1b2": { - "title": "Properties Binding", + "title": "Property Binding", "description": "Property binding helps you set values for properties of HTML elements or directives. To bind to an element's property, enclose it in square brackets `[]` which causes Angular to evaluate the right-hand side of the assignment as a dynamic expression.\n\nVisit the following resources to learn more:", "links": [ { @@ -434,24 +515,63 @@ ] }, "FgsSyM6To7irpbivtOLEE": { - "title": "Attributes Binding", - "description": "", - "links": [] + "title": "Attribute Binding", + "description": "Attribute binding in Angular helps you set values for attributes directly. With attribute binding, you can improve accessibility, style your application dynamically, and manage multiple CSS classes or styles simultaneously.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Attribute Binding", + "url": "https://angular.dev/guide/templates/attribute-binding", + "type": "article" + }, + { + "title": "What is difference between binding to attribute and binding to property in Angular?", + "url": "https://stackoverflow.com/questions/76967327/what-is-difference-between-binding-to-attribute-and-binding-to-property-in-angul", + "type": "article" + } + ] }, "bKnpirSvex4oE4lAjiSSV": { - "title": "Events", - "description": "", - "links": [] + "title": "Event Binding", + "description": "Event binding lets you listen for and respond to user actions such as keystrokes, mouse movements, clicks, and touches.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Event Binding", + "url": "https://angular.dev/guide/templates/event-binding", + "type": "article" + }, + { + "title": "Event Binding in Angular", + "url": "https://www.knowledgehut.com/blog/web-development/event-binding-in-angular", + "type": "article" + } + ] }, "2UH79nCjgtY1Qz1YjUJYL": { "title": "Two-way Binding", - "description": "", - "links": [] + "description": "Two-way binding gives components in your application a way to share data. Use two-way binding to listen for events and update values simultaneously between parent and child components. Angular's two-way binding syntax is a combination of square brackets and parentheses, `[()]`, commonly known as `banana in a box`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Two-way binding", + "url": "https://angular.dev/guide/templates/two-way-binding", + "type": "article" + }, + { + "title": "How to implement two-way data binding in Angular", + "url": "https://www.angularminds.com/blog/how-to-implement-two-way-data-binding-in-angular", + "type": "article" + } + ] }, "VzvB_bads057YtG4ST4a2": { "title": "Control Flow", - "description": "", - "links": [] + "description": "Angular templates support control flow blocks that let you conditionally show, hide, and repeat elements.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Built-in control flow", + "url": "https://angular.dev/guide/templates/control-flow", + "type": "article" + } + ] }, "Wc2ybRw43uamEtno0FpDv": { "title": "Template Ref Vars", @@ -518,8 +638,14 @@ }, "2kYS9w1UzQFZ1zhf01m9L": { "title": "@for", - "description": "", - "links": [] + "description": "The @for block repeatedly renders content of a block for each item in a collection.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - @for", + "url": "https://angular.dev/api/core/@for", + "type": "article" + } + ] }, "nZuim4Fjq6jYOXcRTAEay": { "title": "@switch", @@ -538,13 +664,40 @@ }, "AwOM0ucg6W7TohdUd7KWT": { "title": "@let", - "description": "", - "links": [] + "description": "@let allows you to define a local variable and re-use it across the template.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - @let", + "url": "https://angular.dev/api/core/@let", + "type": "article" + }, + { + "title": "Angular's next feature let syntax", + "url": "https://nhannguyendevjs.medium.com/angulars-next-feature-let-syntax-afba6354112b", + "type": "article" + } + ] }, "ONy-0olujU_FGZM7Wvfr2": { "title": "@defer", - "description": "", - "links": [] + "description": "A type of block that can be used to defer load the JavaScript for components, directives and pipes used inside a component template.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - @defer", + "url": "https://angular.dev/api/core/@defer", + "type": "article" + }, + { + "title": "Angular Defer Complete Guide", + "url": "https://blog.angular-university.io/angular-defer/", + "type": "article" + }, + { + "title": "How to use Angular's defer block to improve performance", + "url": "https://angular.love/en/how-to-use-angulars-defer-block-to-improve-performance", + "type": "article" + } + ] }, "j99WQxuTzGeBBVoReDp_y": { "title": "Pipes", @@ -585,8 +738,19 @@ }, "i2taHzQ5KLHjkkpbH4Ytd": { "title": "Common Pipes", - "description": "", - "links": [] + "description": "Angular provides built-in pipes for typical data transformations, including transformations for internationalization (i18n), which use locale information to format data. The following are commonly used built-in pipes for data formatting:\n\n* DatePipe: Formats a date value according to locale rules.\n* UpperCasePipe: Transforms text to all upper case.\n* LowerCasePipe: Transforms text to all lower case.\n* CurrencyPipe: Transforms a number to a currency string, formatted according to locale rules.\n* DecimalPipe: Transforms a number into a string with a decimal point, formatted according to locale rules.\n* PercentPipe: Transforms a number to a percentage string, formatted according to locale rules.\n* AsyncPipe: Subscribe and unsubscribe to an asynchronous source such as an observable.\n* JsonPipe: Display a component object property to the screen as JSON for debugging.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Pipes", + "url": "https://angular.dev/guide/pipes", + "type": "article" + }, + { + "title": "Pipes in Angular", + "url": "https://medium.com/@aqeelabbas3972/pipes-in-angular-6a871589299d", + "type": "article" + } + ] }, "nZxZnzbQg9dz-SI65UHq9": { "title": "Pipes Precedence", @@ -643,13 +807,40 @@ }, "xk3v8p6vf8ntGj5c-IU4U": { "title": "Structural Directives", - "description": "", - "links": [] + "description": "Structural directives are directives applied to an `` element that conditionally or repeatedly renders the content of that ``. If you just wrap elements in an `` without applying a structural directive, those elements will not be rendered.\n\nIn Angular, there are three standard structural directives:\n\n* `*ngIf` – conditionally includes a template depending on the value of an expression returned by a Boolean.\n* `*ngFor` – makes it simple to iterate over an array.\n* `*ngSwitch` – renders each matching view.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Structural Directives", + "url": "https://angular.dev/guide/directives/structural-directives", + "type": "article" + }, + { + "title": "Structural Directives in Angular", + "url": "https://medium.com/@eugeniyoz/structural-directives-in-angular-61fe522f3427", + "type": "article" + }, + { + "title": "Angular Structural Directive Patterns: What they are and how to use them", + "url": "https://www.freecodecamp.org/news/angular-structural-directive-patterns-what-they-are-and-how-to-use-them/", + "type": "article" + } + ] }, "xvwby0FTdIolRrV2j88fY": { "title": "Attribute Directives", - "description": "", - "links": [] + "description": "Change the appearance or behavior of DOM elements and Angular components with attribute directives.\n\nThe most used attribute directives are:\n\n* ngClass\n* ngStyle\n* ngModel\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Attribute Directives", + "url": "https://angular.dev/guide/directives/attribute-directives", + "type": "article" + }, + { + "title": "Angular Attribute Directive", + "url": "https://www.scaler.com/topics/angular/angular-attribute-directive/", + "type": "article" + } + ] }, "7GUvTMVzfdVEDBOz-tHUT": { "title": "Custom Directives", @@ -906,38 +1097,130 @@ }, "CpufN6DAOj5UNab9vnH0k": { "title": "Dynamic Forms", - "description": "", - "links": [] + "description": "Dynamic forms in Angular are a flexible way to create forms where the structure (such as form fields and validation rules) is generated at runtime, rather than being hardcoded. By using Angular's `FormBuilder` and `FormGroup`, you can dynamically add, remove, or modify form controls based on user input, data fetched from a server, or other logic. This approach allows for creating complex forms that can adapt to different user scenarios, reducing the need for multiple form templates and making the codebase more maintainable and scalable.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Dynamic Forms Documentation", + "url": "https://angular.dev/guide/forms/dynamic-forms", + "type": "article" + }, + { + "title": "Create a Dynamic Reactive Angular Form with JSON", + "url": "https://www.youtube.com/watch?v=ByHw_RMjkKM", + "type": "video" + } + ] }, "kxRtLsB3y_th8j-HjmJgK": { "title": "Custom Validators", - "description": "", - "links": [] + "description": "Custom validators in Angular are functions that allow you to define your own validation logic for form controls. They are used when the built-in validators (like `required`, `minLength`, etc.) do not meet your specific validation requirements. A custom validator is a function that returns either `null` if the form control is valid, or an object that represents the validation error if it is invalid. This object typically contains a key-value pair where the key is the error name and the value is a boolean or some details about the error.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Defining custom validators", + "url": "https://v17.angular.io/guide/form-validation#custom-validators", + "type": "article" + }, + { + "title": "How to create custom validator in Angular 17", + "url": "https://youtu.be/3TwmS0Gdg9I?si=1w4EX-HifJ70-CxT", + "type": "video" + } + ] }, "m5dgKgUR3ZqI9sBAzToev": { "title": "Control Value Accessor", - "description": "", - "links": [] + "description": "Defines an interface that acts as a bridge between the Angular forms API and a native element in the DOM. Implement this interface to create a custom form control directive that integrates with Angular forms.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - ControlValueAccessor", + "url": "https://angular.dev/api/forms/ControlValueAccessor", + "type": "article" + }, + { + "title": "Mastering Angular Control Value Accessor: A guide for Angular Developer", + "url": "https://hackernoon.com/mastering-angular-control-value-accessor-a-guide-for-angular-developer", + "type": "article" + }, + { + "title": "Angular Custom Form Controls", + "url": "https://blog.angular-university.io/angular-custom-form-controls/", + "type": "article" + } + ] }, "8UY0HAvjY7bdbFpt-MM1u": { "title": "HTTP Client", - "description": "", - "links": [] + "description": "Most front-end applications need to communicate with a server over the HTTP protocol, to download or upload data and access other back-end services. Angular provides a client HTTP API for Angular applications, the `HttpClient` service class in `@angular/common/http`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - HTTP Client", + "url": "https://angular.dev/guide/http", + "type": "article" + }, + { + "title": "Angular HTTP Client - Quickstart Guide", + "url": "https://blog.angular-university.io/angular-http/", + "type": "article" + }, + { + "title": "Using HTTP Client in modern Angular applications", + "url": "https://www.thisdot.co/blog/using-httpclient-in-modern-angular-applications", + "type": "article" + } + ] }, "AKPhbg10xXjccO7UBh5eJ": { "title": "Setting Up the Client", - "description": "", - "links": [] + "description": "Before you can use `HttpClient` in your app, you must configure it using dependency injection. `HttpClient` is provided using the `provideHttpClient` helper function, which most apps include in the application providers in `app.config.ts`. If your app is using NgModule-based bootstrap instead, you can include `provideHttpClient` in the providers of your app's `NgModule`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Setting up HttpClient", + "url": "https://angular.dev/guide/http/setup", + "type": "article" + }, + { + "title": "Setting up HttpClient in Angular (NgModule)", + "url": "https://www.youtube.com/watch?v=hBFtim1vO3M", + "type": "video" + } + ] }, "HjGAv3aV-p4ijYJ8XYIw3": { "title": "Making Requests", - "description": "", - "links": [] + "description": "`HttpClient` has methods corresponding to the different HTTP verbs used to make requests, both to load data and to apply mutations on the server. Each method returns an RxJS `Observable` which, when subscribed, sends the request and then emits the results when the server responds.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Making requests", + "url": "https://angular.dev/guide/http/making-requests", + "type": "article" + }, + { + "title": "How to make HTTP request in Angular 18", + "url": "https://www.youtube.com/watch?v=3vQpYKlHmS0", + "type": "video" + } + ] }, "xG7iSVOGcbxJbNv3xbNfc": { "title": "Writing Interceptors", - "description": "", - "links": [] + "description": "Interceptors are middleware that allows common patterns around retrying, caching, logging, and authentication to be abstracted away from individual requests.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Interceptors", + "url": "https://angular.dev/guide/http/interceptors", + "type": "article" + }, + { + "title": "Angular Interceptor", + "url": "https://www.scaler.com/topics/angular/angular-interceptor/", + "type": "article" + }, + { + "title": "Interceptors in Angular", + "url": "https://www.youtube.com/watch?v=w1_AmHv2LmA", + "type": "video" + } + ] }, "lfp7PIjwITU5gBITQdirD": { "title": "RxJS Basics", @@ -1078,28 +1361,113 @@ }, "u1TG8i145o0RKhOR_5epf": { "title": "Signals", - "description": "", - "links": [] - }, - "KAdtebWvgvMifIwd52yc4": { - "title": "RxJS Interop", - "description": "", - "links": [] + "description": "Angular Signals is a system that granularly tracks how and where your state is used throughout an application, allowing the framework to optimize rendering updates.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Signals", + "url": "https://angular.dev/guide/signals", + "type": "article" + }, + { + "title": "Angular Signals Complete Guide", + "url": "https://blog.angular-university.io/angular-signals/", + "type": "article" + }, + { + "title": "Signals Unleashed: The Full Guide", + "url": "https://www.youtube.com/watch?v=6W6gycuhiN0&t=169s", + "type": "video" + } + ] + }, + "KAdtebWvgvMifIwd52yc4": { + "title": "RxJS Interop", + "description": "Angular's `@angular/core/rxjs-interop` package provides useful utilities to integrate Angular Signals with RxJS Observables. Use a `toSignal` function to create a signal that tracks the value of an Observable. Use the `toObservable` utility to create an Observable which tracks the value of a signal.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - RxJS Interop", + "url": "https://angular.dev/guide/signals/rxjs-interop", + "type": "article" + }, + { + "title": "Angular signals RxJS interop from a practical example", + "url": "https://angular.love/en/angular-signals-rxjs-interop-from-a-practical-example", + "type": "article" + }, + { + "title": "Angular Signals RxJs Interoperability: toObservable() (Guess the Behavior)", + "url": "https://www.youtube.com/watch?v=cam39UyVbpI", + "type": "video" + } + ] }, "LcJyAfv9hjyUNXUVyPRP4": { "title": "Inputs as Signals", - "description": "", - "links": [] + "description": "Signal inputs allow values to be bound from parent components. Those values are exposed using a Signal and can change during the lifecycle of your component. Angular supports two variants of inputs: `Optional` and `Required`.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Inputs as Signals", + "url": "https://angular.dev/guide/signals/inputs", + "type": "article" + }, + { + "title": "Angular Signal Inputs: Complete Guide to input()", + "url": "https://blog.angular-university.io/angular-signal-inputs/", + "type": "article" + }, + { + "title": "Angular's New Signal Inputs", + "url": "https://www.youtube.com/watch?v=yjCeaiWXC0U", + "type": "video" + } + ] }, "9HS9C3yq9EUcUy0ZUZk_H": { "title": "Queries as Signals", - "description": "", - "links": [] + "description": "A component or directive can define queries that find child elements and read values from their injectors. Developers most commonly use queries to retrieve references to components, directives, DOM elements, and more. There are two categories of query: view queries and content queries.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Queries as Signals", + "url": "https://angular.dev/guide/signals/queries", + "type": "article" + }, + { + "title": "Querying made easy: exploring Angular's query signals", + "url": "https://netbasal.com/querying-made-easy-exploring-angulars-query-signals-ca850b5db892", + "type": "article" + }, + { + "title": "Angular signal queries with the viewChild() and contentChild() functions", + "url": "https://www.youtube.com/watch?v=b35ts9OinBc", + "type": "video" + } + ] }, "IeU6ClS_yp6BYKdkQOJVf": { "title": "Model Inputs", - "description": "", - "links": [] + "description": "Model inputs are a special type of input that enable a component to propagate new values back to another component. Use model inputs in components that exist to modify a value based on user interaction.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Model Inputs", + "url": "https://angular.dev/guide/signals/model", + "type": "article" + }, + { + "title": "Angular Model Inputs: Two-way binding inputs with signals", + "url": "https://www.codemotion.com/magazine/frontend/angular-model-inputs-two-way-binding-inputs-with-signals/", + "type": "article" + }, + { + "title": "Model Inputs: Reactive two-way binding ", + "url": "https://dev.to/this-is-angular/model-inputs-reactive-two-way-binding-2538", + "type": "article" + }, + { + "title": "Angular's New Model Inputs: Two-way Communication with your Child Components", + "url": "https://www.youtube.com/watch?v=frXIBKqzTK0", + "type": "video" + } + ] }, "Mqe_s-nwBqAL6X7OGRHEN": { "title": "State Management", @@ -1119,6 +1487,11 @@ "title": "Angular State Management with NgRx", "url": "https://www.syncfusion.com/blogs/post/angular-state-management-with-ngrx.aspx", "type": "article" + }, + { + "title": "State Management and the Facade pattern in Angular", + "url": "https://thefullstack.engineer/full-stack-development-series-part-10-state-management-and-the-facade-pattern-in-angular", + "type": "article" } ] }, @@ -1181,8 +1554,29 @@ }, "rgPUcSKxG9DvXicLfC2Ay": { "title": "Elf", - "description": "", - "links": [] + "description": "Elf is a reactive immutable state management solution built on top of RxJS. It uses custom RxJS operators to query the state and pure functions to update it. Elf encourages simplicity. It saves you the hassle of creating boilerplate code and offers powerful tools with a moderate learning curve, suitable for experienced and inexperienced developers alike.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Elf", + "url": "https://github.com/ngneat/elf", + "type": "opensource" + }, + { + "title": "Elf NG Router Store", + "url": "https://github.com/ngneat/elf-ng-router-store", + "type": "opensource" + }, + { + "title": "What is Elf?", + "url": "https://ngneat.github.io/elf/", + "type": "article" + }, + { + "title": "Case Study: Elf", + "url": "https://medium.com/@gronichomer/case-study-elf-%EF%B8%8F%EF%B8%8F-part-1-fe5e87c31c89", + "type": "article" + } + ] }, "m4WBnx_9h01Jl6Q1sxi4Y": { "title": "Zones", @@ -1207,8 +1601,39 @@ }, "1x5pT607aKE-S-NCWB810": { "title": "Zoneless Applications", - "description": "", - "links": [] + "description": "Angular 18 introduced an experimental feature called zoneless change detection. This technology removes the need for `Zone.js`, a library that was previously used for change detection in Angular from the beginning. By eliminating `Zone.js`, Angular applications can have faster initial renders, smaller bundle sizes, and simpler debugging.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Zoneless", + "url": "https://angular.dev/guide/experimental/zoneless", + "type": "article" + }, + { + "title": "Zoneless Change Detection Angular 18", + "url": "https://blog.logrocket.com/zoneless-change-detection-angular-18/", + "type": "article" + }, + { + "title": "From Zone JS to Zoneless Angular and back: How it all works", + "url": "https://angularindepth.com/posts/1513/from-zone-js-to-zoneless-angular-and-back-how-it-all-works", + "type": "article" + }, + { + "title": "A New Era for Angular: Zoneless Change Detection", + "url": "https://justangular.com/blog/a-new-era-for-angular-zoneless-change-detection", + "type": "article" + }, + { + "title": "Zoneless Angular Applications in V18", + "url": "https://www.youtube.com/watch?v=MZ6s5EL7hKk", + "type": "video" + }, + { + "title": "I tested Angular 18 Zoneless mode and this is what I found out!", + "url": "https://www.youtube.com/watch?v=vHNeAqgNM4o", + "type": "video" + } + ] }, "EbJib-XfZFF9bpCtL3aBs": { "title": "Developer Tools", @@ -1305,8 +1730,29 @@ }, "T3MmS3bvMMgCUbOk3ktU7": { "title": "DevTools", - "description": "", - "links": [] + "description": "Angular DevTools is a browser extension that provides debugging and profiling capabilities for Angular applications. You can view component trees and change detection cycles.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - devtools", + "url": "https://angular.dev/tools/devtools", + "type": "article" + }, + { + "title": "Chrome Web Store", + "url": "https://chromewebstore.google.com/detail/angular-devtools/ienfalfjdbdpebioblfackkekamfmbnh", + "type": "article" + }, + { + "title": "Firefox Add-ons", + "url": "https://addons.mozilla.org/en-US/firefox/addon/angular-devtools/", + "type": "article" + }, + { + "title": "Did you try the LATEST Angular developer tools?", + "url": "https://www.youtube.com/watch?v=tAfe33fVW4w", + "type": "video" + } + ] }, "ql7SyxrRmjpiXJ9hQeWPq": { "title": "Language Service", @@ -1419,8 +1865,29 @@ }, "5h7U0spwEUhB-hbjSlaeB": { "title": "Enforce Trusted Types", - "description": "", - "links": [] + "description": "It is recommended that you use Trusted Types as a way to help secure your applications from cross-site scripting attacks. Trusted Types is a web platform feature that can help you prevent cross-site scripting attacks by enforcing safer coding practices. Trusted Types can also help simplify the auditing of application code.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Enforcing Trusted Types", + "url": "https://angular.dev/best-practices/security#enforcing-trusted-types", + "type": "article" + }, + { + "title": "W3C - Trusted Types", + "url": "https://w3c.github.io/trusted-types/dist/spec/", + "type": "article" + }, + { + "title": "MDN Docs - Trusted Types API", + "url": "https://developer.mozilla.org/en-US/docs/Web/API/Trusted_Types_API", + "type": "article" + }, + { + "title": "How to use Trusted Types", + "url": "https://web.dev/articles/trusted-types#how-to-use-trusted-types", + "type": "article" + } + ] }, "xH3RHPhsaqD9zIMms5OmX": { "title": "HTTP Vulnerabilities", @@ -1449,33 +1916,109 @@ }, "VNG9DdXlS6R1OJ6Lrn4Lt": { "title": "Accessibility", - "description": "", - "links": [] + "description": "The web is used by a wide variety of people, including those who have visual or motor impairments. A variety of assistive technologies are available that make it much easier for these groups to interact with web-based software applications. Also, designing an application to be more accessible generally improves the user experience for all users.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Learn Accessibility", + "url": "https://web.dev/learn/accessibility/", + "type": "course" + }, + { + "title": "Angular Official Docs - Accessibility", + "url": "https://angular.dev/best-practices/a11y", + "type": "article" + }, + { + "title": "Angular a11y: 11 tips on how to make your apps more accessible", + "url": "https://angularindepth.com/posts/1152/angular-a11y-11-tips-on-how-to-make-your-apps-more-accessible", + "type": "article" + } + ] }, "0FvH7KPs9ag02QkD1HEJ-": { "title": "Attributes", - "description": "", - "links": [] + "description": "Building accessible web experience often involves setting Accessible Rich Internet Applications (ARIA) attributes to provide semantic meaning where it might otherwise be missing. Use attribute binding template syntax to control the values of accessibility-related attributes.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - accessibility attributes", + "url": "https://angular.dev/best-practices/a11y#accessibility-attributes", + "type": "article" + }, + { + "title": "ARIA HTML", + "url": "https://web.dev/learn/accessibility/aria-html/", + "type": "article" + }, + { + "title": "Comprehensive accessibility strayegies for Angular apps leveraging aria-label for dynamic content", + "url": "https://yasikahivin.medium.com/comprehensive-accessibility-strategies-for-angular-apps-leveraging-aria-label-for-dynamic-content-fdf114834317", + "type": "article" + } + ] }, "CZ1YRyai8Ds-ry4A8jVbr": { "title": "UI Components", - "description": "", - "links": [] + "description": "The Angular Material library, which is maintained by the Angular team, is a suite of reusable UI components that aims to be fully accessible. The Component Development Kit (CDK) includes the a11y package that provides tools to support various areas of accessibility.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Angular UI Components", + "url": "https://angular.dev/best-practices/a11y#angular-ui-components", + "type": "article" + }, + { + "title": "Angular a11y overview", + "url": "https://material.angular.io/cdk/a11y/overview", + "type": "article" + } + ] }, "0s-QhN5aZh2F3tLJFKEyR": { "title": "Containers", - "description": "", - "links": [] + "description": "Some Angular Material UI components cannot take children, such as an input, so you need to use container elements to customize the UI component.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Using containers for native elements", + "url": "https://angular.dev/best-practices/a11y#using-containers-for-native-elements", + "type": "article" + } + ] }, "8i_JD1P4gIhY1rdldwLC2": { "title": "Routing", - "description": "", - "links": [] + "description": "Tracking and controlling focus in a UI is an important consideration in designing for accessibility. When using Angular routing, you should decide where page focus goes upon navigation.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - a11y routing", + "url": "https://angular.dev/best-practices/a11y#routing", + "type": "article" + }, + { + "title": "Accessibility - Focus", + "url": "https://web.dev/learn/accessibility/focus/", + "type": "article" + }, + { + "title": "Router events in Angular", + "url": "https://medium.com/@gurunadhpukkalla/router-events-in-angular-3112a3968660", + "type": "article" + } + ] }, "5-RCB8AiDbkdIFYNXKWge": { "title": "Link Identification", - "description": "", - "links": [] + "description": "CSS classes applied to active `RouterLink` elements, such as `RouterLinkActive`, provide a visual cue to identify the active link. Unfortunately, a visual cue doesn't help blind or visually impaired users. Applying the `aria-current` attribute to the element can help identify the active link.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Accessibility - Active links identification", + "url": "https://angular.dev/best-practices/a11y#active-links-identification", + "type": "article" + }, + { + "title": "MDN Docs - ARIA Current", + "url": "https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current", + "type": "article" + } + ] }, "STEHxJpwBZxFdQl0zUKxo": { "title": "Performance", @@ -1490,13 +2033,50 @@ }, "CYjsXIOWtP5DJmYS-qR-s": { "title": "Deferrable Views", - "description": "", - "links": [] + "description": "Deferrable views can be used in component template to defer the loading of select dependencies within that template. Those dependencies include components, directives, and pipes, and any associated CSS. To use this feature, you can declaratively wrap a section of your template in a @defer block which specifies the loading conditions.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Deferrable Views", + "url": "https://angular.dev/guide/defer", + "type": "article" + }, + { + "title": "Unlocking performance with deferrable views", + "url": "https://medium.com/@kashif_khan/exploring-angular-17-unlocking-performance-with-deferrable-views-580b1977f430", + "type": "article" + }, + { + "title": "Learn how to unit test deferrable views", + "url": "https://angular.love/en/learn-how-to-unit-test-the-deferrable-views", + "type": "article" + }, + { + "title": "Angular 17 Defer Block |Lazy Loading in Angular 17|Angular 17 Deferrable Views |Angular 17 Tutorial", + "url": "https://www.youtube.com/watch?v=h2rEGoqwr6o", + "type": "video" + } + ] }, "1WIKjn3nxYDMIhBL17aYQ": { "title": "Image Optimization", - "description": "", - "links": [] + "description": "The NgOptimizedImage directive makes it easy to adopt performance best practices for loading images.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Image Optimization", + "url": "https://angular.dev/guide/image-optimization", + "type": "article" + }, + { + "title": "Automatic adjustments in Angular's optimized images", + "url": "https://medium.com/ngconf/automatic-adjustments-in-angulars-optimized-images-0034335e0374", + "type": "article" + }, + { + "title": "Boost your application's performance with NgOptimizedImage", + "url": "https://angular.love/en/boost-your-applications-performance-with-ngoptimizedimage", + "type": "article" + } + ] }, "pRSR5PEbkJXAJ1LPyK-EE": { "title": "Zone Pollution", @@ -1630,13 +2210,50 @@ }, "bqA2bxPcZrqQ-6QE-YDK1": { "title": "Code Coverage", - "description": "", - "links": [] + "description": "The Angular CLI can run unit tests and create code coverage reports. Code coverage reports show you any parts of your code base that might not be properly tested by your unit tests.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - code coverage", + "url": "https://angular.dev/guide/testing/code-coverage", + "type": "article" + }, + { + "title": "Measuring code coverage", + "url": "https://testing-angular.com/measuring-code-coverage/", + "type": "article" + } + ] }, "Xxyx3uzy5TpNhgR1IysMN": { "title": "Internationalization", - "description": "", - "links": [] + "description": "Internationalization, sometimes referenced as i18n, is the process of designing and preparing your project for use in different locales around the world. Localization is the process of building versions of your project for different locales.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Transloco", + "url": "https://github.com/jsverse/transloco", + "type": "opensource" + }, + { + "title": "Ngx Translate", + "url": "https://github.com/ngx-translate/core", + "type": "opensource" + }, + { + "title": "Angular Official Docs - Internationalization", + "url": "https://angular.dev/guide/i18n", + "type": "article" + }, + { + "title": "Angular i18n", + "url": "https://lokalise.com/blog/angular-i18n/", + "type": "article" + }, + { + "title": "Angular 18 Multi-Language Support", + "url": "https://www.youtube.com/watch?v=hIz0OglmT0Q", + "type": "video" + } + ] }, "W8OwpEw00xn0GxidlJjdc": { "title": "Localize Package", @@ -1660,27 +2277,107 @@ }, "rYJq59Q0YdfK6n3x740Em": { "title": "Animation", - "description": "", - "links": [] + "description": "Angular's animation system is built on CSS functionality, which means you can animate any property that the browser considers animatable. This includes positions, sizes, transforms, colors, borders, and more.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Animations Explorer", + "url": "https://github.com/williamjuan027/angular-animations-explorer", + "type": "opensource" + }, + { + "title": "Angular Official Docs - Animation", + "url": "https://angular.dev/guide/animations", + "type": "article" + }, + { + "title": "Angular Animations - A Beginner's Guide", + "url": "https://www.angularminds.com/blog/angular-animations-a-beginners-guide", + "type": "article" + }, + { + "title": "In-Depth guide into animations in Angular", + "url": "https://angularindepth.com/posts/1285/in-depth-guide-into-animations-in-angular", + "type": "article" + } + ] }, "Iv2d4sgODqMPzA9gH6RAw": { "title": "Transitions & Triggers", - "description": "", - "links": [] + "description": "In Angular, transition states can be defined explicitly through the `state()` function, or using the predefined `*` wildcard and `void` states. An asterisk `*` or wildcard matches any animation state. This is useful for defining transitions that apply regardless of the HTML element's start or end state. Use the `void` state to configure transitions for an element that is entering or leaving a page.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Transition and Triggers", + "url": "https://angular.dev/guide/animations/transition-and-triggers", + "type": "article" + }, + { + "title": "Angular Animations: Learn the basics", + "url": "https://www.youtube.com/watch?v=CGBcIz1tYec", + "type": "video" + }, + { + "title": "How to use trigger function in Angular Animations", + "url": "https://www.youtube.com/watch?v=3_B4OV5M_Ag", + "type": "video" + } + ] }, "Unjknmb4b2LY-nUVvvF7_": { "title": "Complex Sequences", - "description": "", - "links": [] + "description": "Angular lets you animate coordinated sequences, such as an entire grid or list of elements as they enter and leave a page. You can choose to run multiple animations in parallel, or run discrete animations sequentially, one following another.\n\nThe functions that control complex animation sequences are:\n\n* `query()`: Finds one or more inner HTML elements.\n* `stagger()`: Applies a cascading delay to animations for multiple elements.\n* `group()`: Runs multiple animation steps in parallel.\n* `sequence()`: Runs animation steps one after another.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Complex Sequences", + "url": "https://angular.dev/guide/animations/complex-sequences", + "type": "article" + }, + { + "title": "Angular Animations: Animating multiple items in parallel", + "url": "https://www.youtube.com/watch?v=RPdR7HzNQIw", + "type": "video" + } + ] }, "M1CU2Yq6dLp4yOuGV0fhF": { "title": "Reusable Animations", - "description": "", - "links": [] + "description": "To create a reusable animation, use the `animation()` function to define an animation in a separate .ts file and declare this animation definition as a const export variable. You can then import and reuse this animation in any of your application components using the `useAnimation()` function.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Reusable Animations", + "url": "https://angular.dev/guide/animations/reusable-animations", + "type": "article" + }, + { + "title": "Reusable Animations with Angular", + "url": "https://catalincodes.com/posts/reusable-animations-with-angular", + "type": "article" + }, + { + "title": "Angular Animations: Creating reusable animations!", + "url": "https://www.youtube.com/watch?v=ObYCutiBOTo", + "type": "video" + } + ] }, "x91jWP81oCTeVEwzX8FbK": { "title": "Route Transitions", - "description": "", - "links": [] + "description": "When a user navigates from one route to another, the Angular router maps the URL path to a relevant component and displays its view. Animating this route transition can greatly enhance the user experience.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Angular Official Docs - Route transition animations", + "url": "https://angular.dev/guide/animations/route-animations", + "type": "article" + }, + { + "title": "Add router animation trnasitions for navigation in Angular 17", + "url": "https://dev.to/this-is-angular/add-router-animation-transitions-for-navigation-in-angular-17-2m5a", + "type": "article" + }, + { + "title": "Angular Animations: Router transitions", + "url": "https://www.youtube.com/watch?v=7d8UDEKT1pU", + "type": "video" + } + ] } } \ No newline at end of file diff --git a/public/roadmap-content/blockchain.json b/public/roadmap-content/blockchain.json index 890f6cb55..62b07dc2a 100644 --- a/public/roadmap-content/blockchain.json +++ b/public/roadmap-content/blockchain.json @@ -1233,7 +1233,7 @@ ] }, "tvk1Wh04BcFbAAwYWMx27": { - "title": "Centralized Storage", + "title": "Decentralized Storage", "description": "Decentralized storage is where data is stored on a decentralized network across multiple locations by users or groups who are incentivized to join, store, and keep data accessible. The servers used are hosted by people, rather than a single company. Anyone is free to join, they are kept honest due to smart contracts, and they are incentivized to participate via tokens.\n\nVisit the following resources to learn more:", "links": [ { diff --git a/public/roadmap-content/computer-science.json b/public/roadmap-content/computer-science.json index ca1965ce5..f722fa8f5 100644 --- a/public/roadmap-content/computer-science.json +++ b/public/roadmap-content/computer-science.json @@ -1347,7 +1347,7 @@ }, { "title": "Breadth-first search in 4 minutes", - "url": "https://www.youtube.com/watch?v=hz5ytanv5qe", + "url": "https://www.youtube.com/watch?v=HZ5YTanv5QE", "type": "video" } ] diff --git a/public/roadmap-content/cyber-security.json b/public/roadmap-content/cyber-security.json index d19159fb3..e61a20e75 100644 --- a/public/roadmap-content/cyber-security.json +++ b/public/roadmap-content/cyber-security.json @@ -367,8 +367,34 @@ }, "BqvijNoRzSGYLCMP-6hhr": { "title": "CISSP", - "description": "The Certified Information Systems Security Professional (CISSP) is a globally recognized certification offered by the International Information System Security Certification Consortium (ISC)². It is designed for experienced security professionals to validate their knowledge and expertise in the field of information security.\n\nWho Should Obtain the CISSP Certification?\n------------------------------------------\n\nThe CISSP certification is ideal for security consultants, managers, IT directors, security auditors, security analysts, and other professionals who are responsible for designing, implementing, and managing security for their organization. This certification is aimed at professionals with at least five years of full-time experience in two or more of the eight CISSP domains:\n\n* Security and Risk Management\n* Asset Security\n* Security Architecture and Engineering\n* Communication and Network Security\n* Identity and Access Management (IAM)\n* Security Assessment and Testing\n* Security Operations\n* Software Development Security\n\nCertification Process\n---------------------\n\nTo obtain the CISSP certification, candidates must meet the following requirements:\n\n* **Experience:** Possess a minimum of five years of cumulative, paid, full-time work experience in two or more of the eight domains of the CISSP Common Body of Knowledge (CBK).\n \n* **Exam:** Pass the CISSP examination with a minimum scaled score of 700 out of 1000 points. The exam consists of 100 to 150 multiple-choice and advanced innovative questions that must be completed within three hours.\n \n* **Endorsement:** After passing the exam, candidates must submit an endorsement application to be reviewed and endorsed by an (ISC)² CISSP holder within nine months of passing the exam.\n \n* **Continuing Professional Education (CPE):** To maintain the CISSP certification, professionals must earn 120 CPE credits every three years, with a minimum of 40 credits earned each year, and pay an annual maintenance fee.\n \n\nBenefits of CISSP Certification\n-------------------------------\n\nObtaining the CISSP certification comes with numerous benefits, such as:\n\n* Enhanced credibility, as the CISSP is often considered the gold standard in information security certifications.\n* Increased job opportunities, as many organizations and government agencies require or prefer CISSP-certified professionals.\n* Improved knowledge and skills, as the certification covers a broad range of security topics and best practices.\n* Higher salary potential, as CISSP-certified professionals often command higher salaries compared to their non-certified counterparts.\n* Access to a network of other CISSP-certified professionals and resources, enabling continuous learning and professional development.", - "links": [] + "description": "The Certified Information Systems Security Professional (CISSP) is a globally recognized certification offered by the International Information System Security Certification Consortium (ISC)². It is designed for experienced security professionals to validate their knowledge and expertise in the field of information security.\n\nWho Should Obtain the CISSP Certification?\n------------------------------------------\n\nThe CISSP certification is ideal for security consultants, managers, IT directors, security auditors, security analysts, and other professionals who are responsible for designing, implementing, and managing security for their organization. This certification is aimed at professionals with at least five years of full-time experience in two or more of the eight CISSP domains:\n\n* Security and Risk Management\n* Asset Security\n* Security Architecture and Engineering\n* Communication and Network Security\n* Identity and Access Management (IAM)\n* Security Assessment and Testing\n* Security Operations\n* Software Development Security\n\nCertification Process\n---------------------\n\nTo obtain the CISSP certification, candidates must meet the following requirements:\n\n* **Experience:** Possess a minimum of five years of cumulative, paid, full-time work experience in two or more of the eight domains of the CISSP Common Body of Knowledge (CBK).\n \n* **Exam:** Pass the CISSP examination with a minimum scaled score of 700 out of 1000 points. The exam consists of 100 to 150 multiple-choice and advanced innovative questions that must be completed within three hours.\n \n* **Endorsement:** After passing the exam, candidates must submit an endorsement application to be reviewed and endorsed by an (ISC)² CISSP holder within nine months of passing the exam.\n \n* **Continuing Professional Education (CPE):** To maintain the CISSP certification, professionals must earn 120 CPE credits every three years, with a minimum of 40 credits earned each year, and pay an annual maintenance fee.\n \n\nBenefits of CISSP Certification\n-------------------------------\n\nObtaining the CISSP certification comes with numerous benefits, such as:\n\n* Enhanced credibility, as the CISSP is often considered the gold standard in information security certifications.\n* Increased job opportunities, as many organizations and government agencies require or prefer CISSP-certified professionals.\n* Improved knowledge and skills, as the certification covers a broad range of security topics and best practices.\n* Higher salary potential, as CISSP-certified professionals often command higher salaries compared to their non-certified counterparts.\n* Access to a network of other CISSP-certified professionals and resources, enabling continuous learning and professional development.\n\nLearn more from the following resources", + "links": [ + { + "title": "ISC2 CISSP", + "url": "https://www.isc2.org/certifications/cissp", + "type": "article" + }, + { + "title": "ISC2 CISSP - Official Study Guide", + "url": "https://www.wiley.com/en-us/ISC2+CISSP+Certified+Information+Systems+Security+Professional+Official+Study+Guide%2C+10th+Edition-p-9781394254699", + "type": "article" + }, + { + "title": "Destcert - CISSP Free Resources", + "url": "https://destcert.com/resources/", + "type": "article" + }, + { + "title": "CISSP Exam Cram 2024", + "url": "https://youtube.com/playlist?list=PL7XJSuT7Dq_XPK_qmYMqfiBjbtHJRWigD&si=_wSeCkvj-1rzv0ZF", + "type": "video" + }, + { + "title": "CISSP Prep (Coffee Shots)", + "url": "https://youtube.com/playlist?list=PL0hT6hgexlYxKzBmiCD6SXW0qO5ucFO-J&si=9ICs373Vl1ce3s0H", + "type": "video" + } + ] }, "lqFp4VLY_S-5tAbhNQTew": { "title": "CISA", @@ -438,10 +464,10 @@ }, "4frVcjYI1VlVU9hQgpwcT": { "title": "Linux", - "description": "Linux is an open-source operating system (OS) that is widely popular due to its flexibility, stability, and security features. As a Unix-based OS, Linux has a command-line interface, which allows users to perform various tasks through text commands. However, graphical user interfaces (GUIs) can also be installed for ease of use.\n\nKey Features\n------------\n\n* **Open-source**: Anyone can view, modify, and distribute the Linux source code, promoting collaboration and continuous improvement within the OS community.\n* **Modular design**: Linux can be customized for various computing environments, such as desktops, servers, and embedded systems.\n* **Stability and performance**: Linux is well-known for its ability to handle heavy loads without crashing, making it an ideal choice for servers.\n* **Strong Security**: Linux has robust security mechanisms, such as file permissions, a built-in firewall, and an extensive user privilege system.\n* **Large Community**: Linux has a vast, active user community that offers a wealth of knowledge, user-contributed software, and support forums.\n\nPopular Linux Distributions\n---------------------------\n\nThere are numerous Linux distributions available, catering to specific user needs and preferences. Some popular distributions include:\n\n* **Ubuntu**: A user-friendly distribution suitable for beginners, often used for desktop environments.\n* **Fedora**: A cutting-edge distribution with frequent updates and innovative features, ideal for developers and advanced users.\n* **Debian**: A very stable distribution that prioritizes free software and benefits from a large, active community.\n* **Arch Linux**: A highly customizable distribution that allows users to build their system from the ground up, suited for experienced users.\n* **CentOS**: A distribution focused on stability, security, and manageability, making it a popular choice for server environments.\n\nSecurity Best Practices for Linux\n---------------------------------\n\nWhile Linux is inherently secure, there are best practices to enhance your system's security further:\n\n* Keep your system updated: Regularly update your kernel, OS packages, and installed software to ensure you have the latest security patches.\n* Enable a firewall: Configure and enable a firewall, such as `iptables`, to control incoming and outgoing network traffic.\n* Use strong passwords and user accounts: Create separate accounts with strong passwords for different users and grant them only the required privileges.\n* Disable unused services: Unnecessary services can be potential security risks; ensure only required services are running on your system.\n* Implement a Security-Enhanced Linux (SELinux) policy: SELinux provides a mandatory access control (MAC) system that restricts user and process access to system resources.\n\nBy understanding Linux's features and best practices, you can leverage its powerful capabilities and robust security features to enhance your computing environment's performance and safety.", + "description": "Linux is an open-source operating system (OS) that is widely popular due to its flexibility, stability, and security features. As a Unix-based OS, Linux has a command-line interface, which allows users to perform various tasks through text commands. However, graphical user interfaces (GUIs) can also be installed for ease of use.\n\nKey Features\n------------\n\n* **Open-source**: Anyone can view, modify, and distribute the Linux source code, promoting collaboration and continuous improvement within the OS community.\n* **Modular design**: Linux can be customized for various computing environments, such as desktops, servers, and embedded systems.\n* **Stability and performance**: Linux is well-known for its ability to handle heavy loads without crashing, making it an ideal choice for servers.\n* **Strong Security**: Linux has robust security mechanisms, such as file permissions, a built-in firewall, and an extensive user privilege system.\n* **Large Community**: Linux has a vast, active user community that offers a wealth of knowledge, user-contributed software, and support forums.\n\nPopular Linux Distributions\n---------------------------\n\nThere are numerous Linux distributions available, catering to specific user needs and preferences. Some popular distributions include:\n\n* **Ubuntu**: A user-friendly distribution suitable for beginners, often used for desktop environments.\n* **Fedora**: A cutting-edge distribution with frequent updates and innovative features, ideal for developers and advanced users.\n* **Debian**: A very stable distribution that prioritizes free software and benefits from a large, active community.\n* **Arch Linux**: A highly customizable distribution that allows users to build their system from the ground up, suited for experienced users.\n* **CentOS**: A distribution focused on stability, security, and manageability, making it a popular choice for server environments.\n\nSecurity Best Practices for Linux\n---------------------------------\n\nWhile Linux is inherently secure, there are best practices to enhance your system's security further:\n\n* Keep your system updated: Regularly update your kernel, OS packages, and installed software to ensure you have the latest security patches.\n* Enable a firewall: Configure and enable a firewall, such as `iptables`, to control incoming and outgoing network traffic.\n* Use strong passwords and user accounts: Create separate accounts with strong passwords for different users and grant them only the required privileges.\n* Disable unused services: Unnecessary services can be potential security risks; ensure only required services are running on your system.\n* Implement a Security-Enhanced Linux (SELinux) policy: SELinux provides a mandatory access control (MAC) system that restricts user and process access to system resources.\n\nBy understanding Linux's features and best practices, you can leverage its powerful capabilities and robust security features to enhance your computing environment's performance and safety.\n\nRecommended resources include:", "links": [ { - "title": "Linux from scratch- Cisco", + "title": "Linux from scratch - Cisco", "url": "https://www.netacad.com/courses/os-it/ndg-linux-unhatched", "type": "course" }, @@ -561,8 +587,14 @@ }, "dJ0NUsODFhk52W2zZxoPh": { "title": "SSL and TLS Basics", - "description": "Secure Sockets Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols designed to provide secure communication over a computer network. They play a vital role in protecting sensitive information transmitted online, such as login credentials, financial information, and private user data.\n\nSecure Sockets Layer (SSL)\n--------------------------\n\nSSL is the predecessor to TLS and was first introduced in the 1990s. It creates an encrypted connection between a client (typically a web browser) and a server to ensure that any data transmitted remains private and secure. SSL uses a combination of symmetric and asymmetric encryption methods, as well as digital certificates, to establish and maintain secure communication.\n\nTransport Layer Security (TLS)\n------------------------------\n\nTLS is an improved and more secure version of SSL, with TLS 1.0 being released as an upgrade to SSL 3.0. The current version, as of this guide, is TLS 1.3. TLS provides a more robust and flexible security framework, addressing many of the vulnerabilities present in SSL. While many people still refer to SSL when discussing secure web communication, it's important to note that SSL has been deprecated, and TLS is the best-practice standard for secure communication.\n\nKey Components\n--------------\n\n* **Encryption**: SSL and TLS use powerful algorithms to protect data through encryption, ensuring it's unreadable by anyone without the proper decryption keys.\n* **Authentication**: SSL/TLS digital certificates verify the identities of clients and servers, providing trust and authenticity.\n* **Integrity**: These security protocols use message authentication codes to ensure that the data sent between clients and servers has not been tampered with during transmission.\n\nHandshake Process\n-----------------\n\nSSL and TLS follow a series of steps, known as the \"handshake process,\" to create a secure connection:\n\n* **Client hello**: The client initiates the handshake process by sending a message with supported cryptographic algorithms, random numbers, and session information.\n* **Server hello**: The server responds with its chosen cryptographic algorithms, random numbers, and its digital certificate. Optionally, the server can request the client's certificate for mutual authentication.\n* **Client verification**: The client verifies the server's certificate and may send its own if requested. It then creates a pre-master secret, encrypts it with the server's public key, and sends it to the server.\n* **Key generation and exchange**: Both the client and server generate the master secret and session keys using the pre-master secret and shared random numbers. These keys are used for encrypting and decrypting the data transmitted.\n* **Secured connection**: Once the keys are exchanged, the client and server can now communicate securely using the established encryption and keys.\n\nSecure communication is critical for any organization handling sensitive data. SSL and TLS serve as the backbone for protecting data in transit and play a significant role in ensuring the confidentiality, integrity, and authenticity of online communications.", - "links": [] + "description": "Secure Sockets Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols designed to provide secure communication over a computer network. They play a vital role in protecting sensitive information transmitted online, such as login credentials, financial information, and private user data.\n\nSecure Sockets Layer (SSL)\n--------------------------\n\nSSL is the predecessor to TLS and was first introduced in the 1990s. It creates an encrypted connection between a client (typically a web browser) and a server to ensure that any data transmitted remains private and secure. SSL uses a combination of symmetric and asymmetric encryption methods, as well as digital certificates, to establish and maintain secure communication.\n\nTransport Layer Security (TLS)\n------------------------------\n\nTLS is an improved and more secure version of SSL, with TLS 1.0 being released as an upgrade to SSL 3.0. The current version, as of this guide, is TLS 1.3. TLS provides a more robust and flexible security framework, addressing many of the vulnerabilities present in SSL. While many people still refer to SSL when discussing secure web communication, it's important to note that SSL has been deprecated, and TLS is the best-practice standard for secure communication.\n\nKey Components\n--------------\n\n* **Encryption**: SSL and TLS use powerful algorithms to protect data through encryption, ensuring it's unreadable by anyone without the proper decryption keys.\n* **Authentication**: SSL/TLS digital certificates verify the identities of clients and servers, providing trust and authenticity.\n* **Integrity**: These security protocols use message authentication codes to ensure that the data sent between clients and servers has not been tampered with during transmission.\n\nHandshake Process\n-----------------\n\nSSL and TLS follow a series of steps, known as the \"handshake process,\" to create a secure connection:\n\n* **Client hello**: The client initiates the handshake process by sending a message with supported cryptographic algorithms, random numbers, and session information.\n* **Server hello**: The server responds with its chosen cryptographic algorithms, random numbers, and its digital certificate. Optionally, the server can request the client's certificate for mutual authentication.\n* **Client verification**: The client verifies the server's certificate and may send its own if requested. It then creates a pre-master secret, encrypts it with the server's public key, and sends it to the server.\n* **Key generation and exchange**: Both the client and server generate the master secret and session keys using the pre-master secret and shared random numbers. These keys are used for encrypting and decrypting the data transmitted.\n* **Secured connection**: Once the keys are exchanged, the client and server can now communicate securely using the established encryption and keys.\n\nSecure communication is critical for any organization handling sensitive data. SSL and TLS serve as the backbone for protecting data in transit and play a significant role in ensuring the confidentiality, integrity, and authenticity of online communications.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SSH vs TLS vs SSL", + "url": "https://www.youtube.com/watch?v=k3rFFLmQCuY", + "type": "video" + } + ] }, "umbMBQ0yYmB5PgWfY6zfO": { "title": "Basics of NAS and SAN", @@ -825,8 +857,14 @@ }, "LKK1A5-xawA7yCIAWHS8P": { "title": "SSL / TLS", - "description": "**Secure Socket Layer (SSL)** and **Transport Layer Security (TLS)** are cryptographic protocols designed to provide security and data integrity for communications over networks. These protocols are commonly used for securing web traffic and ensuring that sensitive information, such as credit card numbers and login credentials, are transmitted securely between clients (e.g., web browsers) and servers.\n\nSSL\n---\n\nSSL was developed by Netscape in the mid-1990s and has gone through several iterations. The last version, SSLv3, was released in 1996. SSL was deprecated in 2015 due to security concerns, and it is not recommended for use in modern applications.\n\nTLS\n---\n\nTLS is the successor to SSL and is continually evolving with new versions and updates. The most recent version, TLS 1.3, was released in 2018. TLS is widely used and considered the standard for securing web traffic.\n\nHow SSL/TLS Works\n-----------------\n\nSSL/TLS operates by encrypting the data transmitted between a client and a server, ensuring that the data cannot be easily intercepted or tampered with. The encryption is achieved using a combination of cryptographic algorithms, key exchanges, and digital certificates.\n\nHere are the key steps in setting up an SSL/TLS connection:\n\n* **Handshake:** The client and server will engage in a process called a \"handshake\" to establish a secure connection. During this process, the client and server agree on which version of SSL/TLS to use, and choose the cipher suites and cryptographic algorithms they will use to secure the communication.\n \n* **Key Exchange:** The client and server will perform a key exchange, a process by which they generate and securely share encryption keys. These keys will be used to encrypt and decrypt the data being transmitted between them.\n \n* **Certificate Verification:** The server will provide a digital certificate, which contains its public key and information about the server. The client checks the validity of the certificate by confirming that it was issued by a trusted Certificate Authority (CA) and has not expired.\n \n* **Secure Communication:** Once the handshake, key exchange, and certificate verification are complete, the client and server can begin securely transmitting data using the encryption keys they have shared.\n \n\nAdvantages of SSL/TLS\n---------------------\n\n* **Secure communication:** SSL/TLS provides a secure, encrypted tunnel for data to be transmitted between clients and servers, protecting sensitive information from eavesdropping, interception, and tampering.\n \n* **Authentication:** SSL/TLS uses digital certificates to authenticate the server and sometimes the client. This helps to ensure that the parties involved in the communication are who they claim to be.\n \n* **Data integrity:** SSL/TLS includes mechanisms to confirm that the data received has not been tampered with during transmission, maintaining the integrity of the information being sent.", - "links": [] + "description": "**Secure Socket Layer (SSL)** and **Transport Layer Security (TLS)** are cryptographic protocols designed to provide security and data integrity for communications over networks. These protocols are commonly used for securing web traffic and ensuring that sensitive information, such as credit card numbers and login credentials, are transmitted securely between clients (e.g., web browsers) and servers.\n\nSSL\n---\n\nSSL was developed by Netscape in the mid-1990s and has gone through several iterations. The last version, SSLv3, was released in 1996. SSL was deprecated in 2015 due to security concerns, and it is not recommended for use in modern applications.\n\nTLS\n---\n\nTLS is the successor to SSL and is continually evolving with new versions and updates. The most recent version, TLS 1.3, was released in 2018. TLS is widely used and considered the standard for securing web traffic.\n\nHow SSL/TLS Works\n-----------------\n\nSSL/TLS operates by encrypting the data transmitted between a client and a server, ensuring that the data cannot be easily intercepted or tampered with. The encryption is achieved using a combination of cryptographic algorithms, key exchanges, and digital certificates.\n\nHere are the key steps in setting up an SSL/TLS connection:\n\n* **Handshake:** The client and server will engage in a process called a \"handshake\" to establish a secure connection. During this process, the client and server agree on which version of SSL/TLS to use, and choose the cipher suites and cryptographic algorithms they will use to secure the communication.\n \n* **Key Exchange:** The client and server will perform a key exchange, a process by which they generate and securely share encryption keys. These keys will be used to encrypt and decrypt the data being transmitted between them.\n \n* **Certificate Verification:** The server will provide a digital certificate, which contains its public key and information about the server. The client checks the validity of the certificate by confirming that it was issued by a trusted Certificate Authority (CA) and has not expired.\n \n* **Secure Communication:** Once the handshake, key exchange, and certificate verification are complete, the client and server can begin securely transmitting data using the encryption keys they have shared.\n \n\nAdvantages of SSL/TLS\n---------------------\n\n* **Secure communication:** SSL/TLS provides a secure, encrypted tunnel for data to be transmitted between clients and servers, protecting sensitive information from eavesdropping, interception, and tampering.\n \n* **Authentication:** SSL/TLS uses digital certificates to authenticate the server and sometimes the client. This helps to ensure that the parties involved in the communication are who they claim to be.\n \n* **Data integrity:** SSL/TLS includes mechanisms to confirm that the data received has not been tampered with during transmission, maintaining the integrity of the information being sent.\n \n\nLearn more from the following resources:", + "links": [ + { + "title": "SSL, TLS, HTTPS Explained", + "url": "https://www.youtube.com/watch?v=j9QmMEWmcfo", + "type": "video" + } + ] }, "AjywuCZdBi9atGUbetlUL": { "title": "VMWare", @@ -1104,8 +1142,19 @@ }, "FJsEBOFexbDyAj86XWBCc": { "title": "Basics of IDS and IPS", - "description": "When it comes to cybersecurity, detecting and preventing intrusions is crucial for protecting valuable information systems and networks. In this section, we'll discuss the basics of Intrusion Detection Systems (IDS) and Intrusion Prevention Systems (IPS) to help you better understand their function and importance in your overall cybersecurity strategy.\n\nWhat is Intrusion Detection System (IDS)?\n-----------------------------------------\n\nAn Intrusion Detection System (IDS) is a critical security tool designed to monitor and analyze network traffic or host activities for any signs of malicious activity, policy violations, or unauthorized access attempts. Once a threat or anomaly is identified, the IDS raises an alert to the security administrator for further investigation and possible actions.\n\nThere are two types of IDS:\n\n* **Network-Based Intrusion Detection System (NIDS)**: This type of IDS is deployed on network devices such as routers, switches, or firewalls to monitor and analyze the traffic between hosts within the network.\n \n* **Host-Based Intrusion Detection System (HIDS)**: This type of IDS is installed on individual hosts, such as servers or workstations, to monitor and analyze the activities on that specific host.\n \n\nWhat is Intrusion Prevention System (IPS)?\n------------------------------------------\n\nAn Intrusion Prevention System (IPS) is an advanced security solution closely related to IDS. While an IDS mainly focuses on detecting and alerting about intrusions, an IPS takes it a step further and actively works to prevent the attacks. It monitors, analyzes, and takes pre-configured automatic actions based on suspicious activities, such as blocking malicious traffic, reseting connections, or dropping malicious packets.\n\nThere are two types of IPS:\n\n* **Network-Based Intrusion Prevention System (NIPS)**: This type of IPS is deployed in-line with network devices and closely monitors network traffic, making it possible to take actions in real-time.\n \n* **Host-Based Intrusion Prevention System (HIPS)**: This type of IPS is installed on individual hosts and actively prevents attacks by controlling inputs and outputs on the host, restricting access to resources, and making use of application-level controls.\n \n\nKey Takeaways\n-------------\n\n* IDS and IPS are essential components of a robust cybersecurity strategy.\n* IDS focuses on detecting and alerting about potential intrusions, while IPS takes it further by actively preventing and mitigating attacks.\n* Network-based systems protect networks, while host-based systems protect individual hosts within a network.\n* Regularly updating and configuring IDS/IPS is necessary to continually defend against evolving threats.\n\nBy understanding the basics of IDS and IPS, you can better evaluate your security needs and take the right steps to protect your network and hosts from potential intruders.", - "links": [] + "description": "When it comes to cybersecurity, detecting and preventing intrusions is crucial for protecting valuable information systems and networks. In this section, we'll discuss the basics of Intrusion Detection Systems (IDS) and Intrusion Prevention Systems (IPS) to help you better understand their function and importance in your overall cybersecurity strategy.\n\nWhat is Intrusion Detection System (IDS)?\n-----------------------------------------\n\nAn Intrusion Detection System (IDS) is a critical security tool designed to monitor and analyze network traffic or host activities for any signs of malicious activity, policy violations, or unauthorized access attempts. Once a threat or anomaly is identified, the IDS raises an alert to the security administrator for further investigation and possible actions.\n\nThere are two types of IDS:\n\n* **Network-Based Intrusion Detection System (NIDS)**: This type of IDS is deployed on network devices such as routers, switches, or firewalls to monitor and analyze the traffic between hosts within the network.\n \n* **Host-Based Intrusion Detection System (HIDS)**: This type of IDS is installed on individual hosts, such as servers or workstations, to monitor and analyze the activities on that specific host.\n \n\nWhat is Intrusion Prevention System (IPS)?\n------------------------------------------\n\nAn Intrusion Prevention System (IPS) is an advanced security solution closely related to IDS. While an IDS mainly focuses on detecting and alerting about intrusions, an IPS takes it a step further and actively works to prevent the attacks. It monitors, analyzes, and takes pre-configured automatic actions based on suspicious activities, such as blocking malicious traffic, reseting connections, or dropping malicious packets.\n\nThere are two types of IPS:\n\n* **Network-Based Intrusion Prevention System (NIPS)**: This type of IPS is deployed in-line with network devices and closely monitors network traffic, making it possible to take actions in real-time.\n \n* **Host-Based Intrusion Prevention System (HIPS)**: This type of IPS is installed on individual hosts and actively prevents attacks by controlling inputs and outputs on the host, restricting access to resources, and making use of application-level controls.\n \n\nKey Takeaways\n-------------\n\n* IDS and IPS are essential components of a robust cybersecurity strategy.\n* IDS focuses on detecting and alerting about potential intrusions, while IPS takes it further by actively preventing and mitigating attacks.\n* Network-based systems protect networks, while host-based systems protect individual hosts within a network.\n* Regularly updating and configuring IDS/IPS is necessary to continually defend against evolving threats.\n\nBy understanding the basics of IDS and IPS, you can better evaluate your security needs and take the right steps to protect your network and hosts from potential intruders.\n\nLearn more from the following resources:", + "links": [ + { + "title": "What is an Intrusion Prevention System?", + "url": "https://www.paloaltonetworks.com/cyberpedia/what-is-an-intrusion-prevention-system-ips", + "type": "article" + }, + { + "title": "Intrusion Prevention System (IPS)", + "url": "https://www.youtube.com/watch?v=7QuYupuic3Q", + "type": "video" + } + ] }, "bj5YX8zhlam0yoNckL8e4": { "title": "Honeypots", @@ -1425,8 +1474,14 @@ }, "w6wXkoLrv0_d-Ah0txUHd": { "title": "Kali Linux", - "description": "", - "links": [] + "description": "Kali Linux is a specialized Linux distribution that is designed for penetration testing, security auditing, and related information security tasks. Originating from the Debian distribution, Kali Linux is equipped with a vast array of tools that are used for ethical hacking purposes. It is an open-source project that provides users with the means to test the security of systems and networks by simulating attacks in a controlled environment.\n\nTools\n-----\n\nWith over 600 pre-installed penetration-testing programs, Kali Linux offers tools for various security-related tasks, such as network analysis, vulnerability scanning, and forensic analysis. Its development is overseen by Offensive Security, a company known for their contributions to the field of information security. Kali Linux is highly customizable, allowing users to tailor the system to their specific needs, and supports a wide range of hardware platforms. It is a powerful resource for professionals in the cybersecurity field, as well as for those who are passionate about learning and practicing ethical hacking techniques.", + "links": [ + { + "title": "Kali Linux", + "url": "https://www.kali.org/", + "type": "article" + } + ] }, "10qbxX8DCrfyH7tgYexxQ": { "title": "LOLBAS", @@ -1506,8 +1561,19 @@ }, "LEgJtu1GZKOtoAXyOGWLE": { "title": "Endpoint Security", - "description": "Endpoint security refers to the practice of protecting individual devices, or \"endpoints\", that connect to your organization's network from potential cyber threats. These devices include desktop computers, laptops, smartphones, tablets, and servers. With the increase in remote working and the widespread use of personal devices in the workplace, endpoint security has become a critical aspect of a strong cybersecurity strategy.\n\nWhy is Endpoint Security Important?\n-----------------------------------\n\nEndpoint devices serve as potential entry points for cybercriminals to access sensitive data and launch attacks against your organization's network. By securing these devices, you can prevent unauthorized access, reduce the risk of data breaches, and maintain the integrity of your network.\n\nKey Components of Endpoint Security\n-----------------------------------\n\nTo effectively secure your endpoints, consider implementing the following measures:\n\n* **Antivirus and Malware Protection**: Make sure every endpoint device has up-to-date antivirus and anti-malware software installed. This will help to detect and remove malicious files, preventing them from causing harm to your network.\n \n* **Patch Management**: Stay up to date with the latest security patches for your operating systems and third-party applications. Regularly updating your software can help protect against vulnerabilities that cybercriminals may exploit.\n \n* **Device Management**: Implement a centralized device management solution that allows administrators to monitor, manage, and secure endpoints. This includes enforcing security policies, tracking device inventory, and remote wiping lost or stolen devices.\n \n* **Access Control**: Limit access to sensitive data by implementing a strict access control policy. Only grant necessary permissions to those who require it, and use authentication methods such as multi-factor authentication (MFA) to verify the identity of users.\n \n* **Encryption**: Encrypt sensitive data stored on endpoint devices to prevent unauthorized access to the data in case of device theft or loss.\n \n* **Firewall and Intrusion Prevention**: Deploy firewall and intrusion prevention systems to block external threats and alert administrators of potential attacks.\n \n* **User Training**: Educate users about the importance of endpoint security and the best practices for maintaining it. This includes topics like creating strong passwords, avoiding phishing scams, and following safe browsing practices.\n \n\nBy taking a comprehensive approach to endpoint security, you can protect your organization's network and sensitive data from the growing threat of cyberattacks.", - "links": [] + "description": "Endpoint security refers to the practice of protecting individual devices, or \"endpoints\", that connect to your organization's network from potential cyber threats. These devices include desktop computers, laptops, smartphones, tablets, and servers. With the increase in remote working and the widespread use of personal devices in the workplace, endpoint security has become a critical aspect of a strong cybersecurity strategy.\n\nWhy is Endpoint Security Important?\n-----------------------------------\n\nEndpoint devices serve as potential entry points for cybercriminals to access sensitive data and launch attacks against your organization's network. By securing these devices, you can prevent unauthorized access, reduce the risk of data breaches, and maintain the integrity of your network.\n\nKey Components of Endpoint Security\n-----------------------------------\n\nTo effectively secure your endpoints, consider implementing the following measures:\n\n* **Antivirus and Malware Protection**: Make sure every endpoint device has up-to-date antivirus and anti-malware software installed. This will help to detect and remove malicious files, preventing them from causing harm to your network.\n \n* **Patch Management**: Stay up to date with the latest security patches for your operating systems and third-party applications. Regularly updating your software can help protect against vulnerabilities that cybercriminals may exploit.\n \n* **Device Management**: Implement a centralized device management solution that allows administrators to monitor, manage, and secure endpoints. This includes enforcing security policies, tracking device inventory, and remote wiping lost or stolen devices.\n \n* **Access Control**: Limit access to sensitive data by implementing a strict access control policy. Only grant necessary permissions to those who require it, and use authentication methods such as multi-factor authentication (MFA) to verify the identity of users.\n \n* **Encryption**: Encrypt sensitive data stored on endpoint devices to prevent unauthorized access to the data in case of device theft or loss.\n \n* **Firewall and Intrusion Prevention**: Deploy firewall and intrusion prevention systems to block external threats and alert administrators of potential attacks.\n \n* **User Training**: Educate users about the importance of endpoint security and the best practices for maintaining it. This includes topics like creating strong passwords, avoiding phishing scams, and following safe browsing practices.\n \n\nBy taking a comprehensive approach to endpoint security, you can protect your organization's network and sensitive data from the growing threat of cyberattacks.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Manage endpoint security - Microsoft Learn", + "url": "https://learn.microsoft.com/en-us/training/paths/manage-endpoint-security/", + "type": "course" + }, + { + "title": "Endpoint Security", + "url": "https://youtu.be/5d7PCDm_MXs?si=RX3sAdNPLG0tJOaR&t=11", + "type": "video" + } + ] }, "9Z6HPHPj4escSVDWftFEx": { "title": "FTP vs SFTP", @@ -1521,8 +1587,14 @@ }, "gNFVtBxSYP5Uw3o3tlJ0M": { "title": "IPSEC", - "description": "", - "links": [] + "description": "IPSec, which stands for Internet Protocol Security, is a suite of protocols used to secure Internet communications by encrypting and authenticating IP packets. It is commonly utilized in Virtual Private Networks (VPNs) to ensure that data transmitted over public networks is not accessible to unauthorized individuals. IPSec operates by encrypting data at the source and decrypting it at the destination, maintaining the confidentiality and integrity of the data while in transit. Additionally, it provides authentication, ensuring that the data is being sent and received by the intended parties. This protocol suite is versatile as it can be used with both IPv4 and IPv6 networks, making it a fundamental component for secure online communication.", + "links": [ + { + "title": "IP Sec VPN Fundamentals", + "url": "https://www.youtube.com/watch?v=15amNny_kKI", + "type": "video" + } + ] }, "LLGXONul7JfZGUahnK0AZ": { "title": "DNSSEC", @@ -1582,8 +1654,14 @@ }, "QvHWrmMzO8IvNQ234E_wf": { "title": "EDR", - "description": "", - "links": [] + "description": "Endpoint Detection and Response (EDR) is a cybersecurity technology that provides continuous monitoring and response to threats at the endpoint level. It is designed to detect, investigate, and mitigate suspicious activities on endpoints such as laptops, desktops, and mobile devices. EDR solutions log and analyze behaviors on these devices to identify potential threats, such as malware or ransomware, that have bypassed traditional security measures like antivirus software. This technology equips security teams with the tools to quickly respond to and contain threats, minimizing the risk of a security breach spreading across the network. EDR systems are an essential component of modern cybersecurity strategies, offering advanced protection by utilizing real-time analytics, AI-driven automation, and comprehensive data recording.\n\nLearn more from the following resources:", + "links": [ + { + "title": "What is Endpoint Detection and Response (EDR)? - IBM", + "url": "https://www.youtube.com/watch?v=55GaIolVVqI", + "type": "video" + } + ] }, "iolsTC-63d_1wzKGul-cT": { "title": "DLP", @@ -1734,8 +1812,29 @@ }, "7obusm5UtHwWMcMMEB3lt": { "title": "Phishing", - "description": "", - "links": [] + "description": "The technique where scammers pretend to be trusted organizations like your _bank_, _online retailers_ or a _government office_ in order to trick you into sharing your personal information like bank passcode, credit card number, Paypal password etc.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "How to Recognize and Avoid Phishing Scams", + "url": "https://consumer.ftc.gov/articles/how-recognize-and-avoid-phishing-scams", + "type": "article" + }, + { + "title": "phishing - definition", + "url": "https://www.techtarget.com/searchsecurity/definition/phishing", + "type": "article" + }, + { + "title": "Protect yourself from phishing", + "url": "https://support.microsoft.com/en-us/windows/protect-yourself-from-phishing-0c7ea947-ba98-3bd9-7184-430e1f860a44", + "type": "video" + }, + { + "title": "Phishing attacks are SCARY easy to do!! (let me show you!)", + "url": "https://www.youtube.com/watch?v=u9dBGWVwMMA", + "type": "video" + } + ] }, "M65fCl72qlF0VTbGNT6du": { "title": "Whishing", @@ -1764,8 +1863,14 @@ }, "Iu0Qtk13RjrhHpSlm0uyh": { "title": "Dumpster Diving", - "description": "", - "links": [] + "description": "Dumpster Diving in the context of cybersecurity refers to the practice of searching through discarded materials in trash or recycling bins to find confidential information. This technique may seem unsophisticated, but it can be extremely effective in obtaining valuable data such as passwords, account information, network diagrams, or any other sensitive information that has not been properly destroyed.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is Dumpster Diving", + "url": "https://powerdmarc.com/dumpster-diving-in-cybersecurity/", + "type": "article" + } + ] }, "o-keJgF9hmifQ_hUD91iN": { "title": "Tailgating", @@ -1784,8 +1889,14 @@ }, "UU_inxa8Y2lLP2BRhdLDT": { "title": "Reconnaissance", - "description": "", - "links": [] + "description": "Reconnaissance is the first phase of a cyberattack, during which attackers gather as much information as possible about a target system, network, or organization. The goal of reconnaissance is to identify potential vulnerabilities, entry points, and other valuable details that can be exploited in subsequent attack phases.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is Cyber Reconnaissance", + "url": "https://www.sentinelone.com/cybersecurity-101/threat-intelligence/what-is-cyber-reconnaissance/", + "type": "article" + } + ] }, "ZEgxmvjWPp5NofLFz_FTJ": { "title": "Impersonation", @@ -2000,7 +2111,13 @@ "9OastXVfiG1YRMm68ecnn": { "title": "Dropbox", "description": "Dropbox is a widely used cloud storage service that allows you to store, access, and share files, documents, and media with ease across various devices. Launched in 2007, Dropbox has become one of the most popular cloud storage solutions, catering to both individual users and businesses. The service is available on multiple platforms, including Windows, macOS, Linux, iOS, and Android.\n\nKey features\n------------\n\n* **File synchronization**: Sync the same files across all your devices and have instant access to updated files from anywhere.\n* **File sharing**: Easily share files or folders by sending a link or inviting other users to a shared folder.\n* **Collaboration**: Dropbox allows real-time collaboration on documents with multiple users using integrations with other tools like Google Workspace and Microsoft Office 365.\n* **Version history**: Retrieve previous versions of a file for up to 30 days, allowing you to recover deleted files or reverse changes.\n\nPlans and pricing\n-----------------\n\nDropbox offers various plans for individual users and businesses with different storage capacities and features:\n\n* **Basic**: Free plan with 2 GB storage and core features like file synchronization and sharing.\n* **Plus**: Priced at $9.99/month for 2 TB storage, additional features like Smart Sync, remote device wipe, and a longer (30-day) version history.\n* **Professional**: Priced at $19.99/month for 3 TB storage and added features like advanced sharing controls and full-text search.\n* **Business plans**: Starting from $12.50/user/month for a minimum of 3 users, with 5 TB storage per user, priority support, and additional file controls.\n\nSecurity and privacy\n--------------------\n\nDropbox takes security and privacy seriously, with features like:\n\n* **Encryption**: Files are encrypted both when they are stored on Dropbox servers and during transmission (using SSL/TLS).\n* **Two-factor authentication**: You can enable two-factor authentication (2FA) to add an extra layer of security to your account.\n* **Selective sync**: Choose which files and folders to sync on each device, allowing you to keep sensitive data off certain computers or devices.\n* **GDPR compliance**: Dropbox is compliant with the General Data Protection Regulation (GDPR), which ensures better data protection and privacy for users.\n\nDrawbacks\n---------\n\nThere are a few downsides to using Dropbox as your cloud storage solution:\n\n* Limited storage on the free plan.\n* The need for a third-party app to encrypt files before uploading to add an extra layer of security.\n* Other alternatives offer additional features like built-in document editing.\n\nConclusion\n----------\n\nDropbox is a simple and user-friendly cloud storage service that offers seamless integration with various platforms and efficient file sharing options. While its free plan may be limited compared to other alternatives, the ease of use and robust feature set make it a popular choice for both personal and professional use.", - "links": [] + "links": [ + { + "title": "Dropbox", + "url": "https://www.dropbox.com/", + "type": "article" + } + ] }, "4Man3Bd-ySLFlAdxbLOHw": { "title": "Box", diff --git a/public/roadmap-content/data-analyst.json b/public/roadmap-content/data-analyst.json index 81af5d119..2227fbdf0 100644 --- a/public/roadmap-content/data-analyst.json +++ b/public/roadmap-content/data-analyst.json @@ -235,8 +235,19 @@ }, "dke_pySrqYZZ7K3rprnIT": { "title": "REPLACE / SUBSTITUTE", - "description": "", - "links": [] + "description": "In Microsoft Excel, the REPLACE and SUBSTITUTE functions are powerful tools used for modifying text data within cells. Both functions serve to alter text but are utilized in different scenarios based on the nature of the changes needed.\n\nThe SUBSTITUTE function is used to replace occurrences of a specified substring with a new substring. It allows for replacing text based on matching characters rather than position, making it ideal for altering specific instances of text within a string.\n\nThe REPLACE function is used to replace part of a text string with another text string, based on its position within the original text. It is particularly useful when you need to replace a specific segment of text with new text, starting at a designated position.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Replace Function", + "url": "https://support.microsoft.com/en-us/office/replace-function-6acf209b-01b7-4078-b4b8-e0a4ef67d181", + "type": "article" + }, + { + "title": "Substitute Function", + "url": "https://support.microsoft.com/en-us/office/substitute-function-6434944e-a904-4336-a9b0-1e58df3bc332", + "type": "article" + } + ] }, "YReKRRgE_2dWfGGdBQqbf": { "title": "UPPER / LOWER / PROPER", diff --git a/public/roadmap-content/devops.json b/public/roadmap-content/devops.json index 1150d5e8b..c533f33a7 100644 --- a/public/roadmap-content/devops.json +++ b/public/roadmap-content/devops.json @@ -572,7 +572,7 @@ }, "Jt8BmtLUH6fHT2pGKoJs3": { "title": "Vim / Nano / Emacs", - "description": "Editors are tools that allow you to create or edit files on your file system.\n\nVim\n---\n\nVim is a highly configurable text editor built to make creating and changing any kind of text very efficient. It is included as \"vi\" with most UNIX systems and with Apple OS X.\n\nVim ships with `vimtutor` that is a tutor designed to describe enough of the Vim commands that you will be able to easily use Vim as an all-purpose editor.\n\nVisit the following resources to learn more:", + "description": "Editors are tools that allow you to create or edit files on your file system.\n\nVim\n---\n\nVim is a highly configurable text editor built to make creating and changing any kind of text very efficient. It is included as \"vi\" with most UNIX systems and with macOS X.\n\nVim ships with `vimtutor` that is a tutor designed to describe enough of the Vim commands that you will be able to easily use Vim as an all-purpose editor.\n\nVisit the following resources to learn more:", "links": [ { "title": "Vim", diff --git a/public/roadmap-content/devrel.json b/public/roadmap-content/devrel.json index e8e0713ac..d381c9f04 100644 --- a/public/roadmap-content/devrel.json +++ b/public/roadmap-content/devrel.json @@ -82,6 +82,11 @@ "title": "Importance of DevRel", "description": "Developer Relations (DevRel) is crucial for fostering a vibrant and engaged developer community around a product or platform. It involves creating and maintaining strong relationships with developers through activities like community building, technical support, advocacy, and education. Effective DevRel ensures that developers have the resources and support they need to succeed, which in turn drives product adoption, innovation, and loyalty. By bridging the gap between a company's development teams and external developers, DevRel can also provide valuable feedback for product improvements and help in shaping the future direction of the product or platform.\n\nLearn more from the following resources:", "links": [ + { + "title": "What is Developer Relations? The Ultimate Guide for DevTool GTM Teams", + "url": "https://www.doc-e.ai/post/what-is-developer-relations-the-ultimate-guide-for-devtool-gtm-teams", + "type": "article" + }, { "title": "DevRel - Why is it important?", "url": "https://developers.onelogin.com/blog/devrel", @@ -103,6 +108,11 @@ "url": "https://appsembler.com/glossary/developer-advocacy/", "type": "article" }, + { + "title": "The Developer Advocate Playbook: Your Go-To Guide to Turning Users into Champions 🚀", + "url": "https://www.doc-e.ai/post/the-developer-advocate-playbook-your-go-to-guide-to-turning-users-into-champions", + "type": "article" + }, { "title": "Developer Relations: New Career Path for Developers", "url": "https://www.youtube.com/watch?v=iA2SQ4OL4GU", @@ -312,8 +322,19 @@ }, "yJygbi8cnp3oz2EFl2MR0": { "title": "Community Engagement", - "description": "", - "links": [] + "description": "Building a positive developer experience through community engagement is an ongoing process that requires dedication, empathy, and a genuine commitment to your users. By investing in a welcoming environment, facilitating knowledge sharing, and leveraging AI-powered tools like [Doc-E.ai](http://Doc-E.ai), you can create a thriving community that not only supports your product but also becomes a source of innovation, loyalty, and growth.\n\nLearn more from the following resources:", + "links": [ + { + "title": "The Ultimate Guide to Developer Engagement and Community Building: Unlocking the Power of Developer-Centric Growth", + "url": "https://www.doc-e.ai/post/the-ultimate-guide-to-developer-engagement-and-community-building-unlocking-the-power-of-developer-centric-growth", + "type": "article" + }, + { + "title": "Fostering a Positive Developer Experience Through Community Engagement: A Blueprint for DevTool Success", + "url": "https://www.doc-e.ai/post/fostering-a-positive-developer-experience-through-community-engagement-a-blueprint-for-devtool-success", + "type": "article" + } + ] }, "C2w8R4tNy2lOhhWU9l32s": { "title": "Event Participation", diff --git a/public/roadmap-content/frontend.json b/public/roadmap-content/frontend.json index c2e5e42c6..fa999cf18 100644 --- a/public/roadmap-content/frontend.json +++ b/public/roadmap-content/frontend.json @@ -753,7 +753,7 @@ }, { "title": "A Simple Guide to JavaScript Fetch API", - "url": "https://www.javascripttutorial.net/javascript-fetch-api/", + "url": "https://www.javascripttutorial.net/web-apis/javascript-fetch-api/", "type": "article" }, { @@ -2305,7 +2305,7 @@ }, "KJRkrFZIihCUBrOf579EU": { "title": "react-router", - "description": "Remix is a full stack web framework that lets you focus on the user interface and work back through web standards to deliver a fast, slick, and resilient user experience. People are gonna love using your stuff.\n\nVisit the following resources to learn more:", + "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:", "links": [ { "title": "Official Website", diff --git a/public/roadmap-content/full-stack.json b/public/roadmap-content/full-stack.json index 227b275b8..4f027568e 100644 --- a/public/roadmap-content/full-stack.json +++ b/public/roadmap-content/full-stack.json @@ -856,7 +856,7 @@ }, "YVMyHFSCVF-GgXydq-SFJ": { "title": "Checkpoint — Infrastructure", - "description": "If you remember, earlier in the roadmap, you manually logged into the AWS console and had to setup the services. Now that you know terraform, go ahead and automate the process of creating the infrastructure for your application using terraform and with that your deployments will be fully automated i.e., you should have:\n\n* Infrastructure setup using terraform\n* Provisioning using Ansible\n* CI/CD using GitHub Actions\n* Monitoring using Monit\n\nAnd that is it! You have successfully completed the roadmap and are now a full-stack developer. Congratulations! 🎉\n\nWhat's next?\n------------\n\nGo ahead and build something cool! Share your learnings with the community and help others learn as well. If you have any questions, feel free to join our [discord server](https://discord.gg/cJpEt5Qbwa) and ask away!", + "description": "If you remember, earlier in the roadmap, you manually logged into the AWS console and had to setup the services. Now that you know terraform, go ahead and automate the process of creating the infrastructure for your application using terraform and with that your deployments will be fully automated i.e., you should have:\n\n* Infrastructure setup using terraform\n* Provisioning using Ansible\n* CI/CD using GitHub Actions\n* Monitoring using Monit\n\nAnd that is it! You have successfully completed the roadmap and are now a full-stack developer. Congratulations! 🎉\n\nWhat's next?\n------------\n\nGo ahead and build something cool! Share your learnings with the community and help others learn as well. If you have any questions, feel free to join our [discord server](https://discord.gg/ZrSpJ8zH) and ask away!", "links": [] } } \ No newline at end of file diff --git a/public/roadmap-content/git-github.json b/public/roadmap-content/git-github.json new file mode 100644 index 000000000..2e7cf29d6 --- /dev/null +++ b/public/roadmap-content/git-github.json @@ -0,0 +1,1273 @@ +{ + "HlUUGj3dOZ68t4gIjerXh": { + "title": "Learn the Basics", + "description": "A Version Control System (VCS) is a tool that helps developers manage changes to their code over time. It allows multiple versions of a project to exist simultaneously, making it easier to collaborate with others and maintain a record of all modifications.\n\nLearn more from the following resources:", + "links": [ + { + "title": "What is version control?", + "url": "https://www.atlassian.com/git/tutorials/what-is-version-control", + "type": "article" + }, + { + "title": "What is Git? - The Complete Guide to Git", + "url": "https://www.datacamp.com/blog/all-about-git", + "type": "article" + }, + { + "title": "GUI Clients", + "url": "https://git-scm.com/downloads/guis", + "type": "article" + }, + { + "title": "Getting Started - Installing Git", + "url": "https://git-scm.com/book/en/v2/Getting-Started-Installing-Git", + "type": "article" + }, + { + "title": "Creating an account on GitHub", + "url": "https://docs.github.com/en/get-started/start-your-journey/creating-an-account-on-github", + "type": "article" + }, + { + "title": "What is Git? Explained in 2 Minutes!", + "url": "https://www.youtube.com/watch?v=2ReR1YJrNOM", + "type": "video" + } + ] + }, + "bY6b1GV2XQQ52NOx8gWFj": { + "title": "What is Version Control?", + "description": "", + "links": [] + }, + "dhIx1GnynvbSUriqYLUt0": { + "title": "Why use Version Control?", + "description": "", + "links": [] + }, + "_jSTrYN9G8EsGHkbusKPU": { + "title": "Git vs Other VCS", + "description": "", + "links": [] + }, + "v7hCNbgPByi3YiLSs46BK": { + "title": "Installing Git Locally", + "description": "", + "links": [] + }, + "PtU5Qwfzn3N1i3oRlCGoR": { + "title": "What is a Repository", + "description": "", + "links": [] + }, + "1iOkbO5juk2LO-WZHx_W6": { + "title": "git init", + "description": "The `git init` command creates a new Git repository. It can be used to convert an existing, unversioned project to a Git repository or initialize a new, empty repository. Most other Git commands are not available outside of an initialized repository, so this is usually the first command you'll run in a new project.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Git - git-init Documentation", + "url": "https://git-scm.com/docs/git-init", + "type": "article" + }, + { + "title": "git init | Atlassian Git Tutorial", + "url": "https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-init#:~:text=The%20git%20init%20command%20creates,run%20in%20a%20new%20project.", + "type": "article" + } + ] + }, + "NMCWgzhhfUvFOMO5GbF_u": { + "title": "git config", + "description": "The `git config` command is a convenience function that is used to set Git configuration values on a global or local project level. These configuration levels correspond to .gitconfig text files. Executing `git config` will modify a configuration text file.\n\nThe most basic use case for `git config` is to invoke it with a configuration name, which will display the set value at that name. Configuration names are dot delimited strings composed of a 'section' and a 'key' based on their hierarchy. For example: `user.email`\n\nLearn more from the following resources:", + "links": [ + { + "title": "Git - git-config Documentation", + "url": "https://git-scm.com/docs/git-config", + "type": "article" + }, + { + "title": "git config | Atlassian Git Tutorial", + "url": "https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-config", + "type": "article" + }, + { + "title": "Setting your username in Git", + "url": "https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git", + "type": "article" + }, + { + "title": "Git config commands | Git tutorial", + "url": "https://nulab.com/learn/software-development/git-tutorial/git-commands-settings/git-config-commands/", + "type": "article" + } + ] + }, + "tVvxC5JQgUb_B8kOqYpD8": { + "title": "Local vs Global Config", + "description": "", + "links": [] + }, + "Sv36oxTZwlUv-i1K28NeP": { + "title": "Working Directory", + "description": "", + "links": [] + }, + "h71Tx3nkfUrnhaqcHlDkQ": { + "title": "Staging Area", + "description": "", + "links": [] + }, + "2_z3R7seCvQVj-Na4H1SV": { + "title": "Committing Changes", + "description": "", + "links": [] + }, + "oz2oRAhaEQb0Fm3aRJQG8": { + "title": ".gitignore", + "description": "Ignored files are tracked in a special file named `.gitignore` that is checked in at the root of your repository. There is no explicit git ignore command: instead the `.gitignore` file must be edited and committed by hand when you have new files that you wish to ignore. `.gitignore` files contain patterns that are matched against file names in your repository to determine whether or not they should be ignored.\n\nLearn more from the following resources:", + "links": [ + { + "title": "gitignore Documentation", + "url": "https://git-scm.com/docs/gitignore/en", + "type": "article" + }, + { + "title": ".gitignore file - ignoring files in Git | Atlassian Git Tutorial", + "url": "https://www.atlassian.com/git/tutorials/saving-changes/gitignore", + "type": "article" + }, + { + "title": "Ignoring files - GitHub Docs", + "url": "https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files", + "type": "article" + } + ] + }, + "IfUm5D_zNaUKMd4HX4Fi4": { + "title": "Viewing Commit History", + "description": "", + "links": [] + }, + "bXfCUG3h1TIFPgD4WUDph": { + "title": "Branching Basics", + "description": "", + "links": [] + }, + "OegitQ5Ngjvd3ZfMpfrkM": { + "title": "Creating Branch", + "description": "", + "links": [] + }, + "_dPOVUbxApx0pfKPH8fgr": { + "title": "Renaming Branch", + "description": "", + "links": [] + }, + "1uDenoQ6zu7CT69FR2iQB": { + "title": "Deleting Branch", + "description": "", + "links": [] + }, + "PtRo-wGiNAagZ6CykfvMr": { + "title": "Checkout Branch", + "description": "In Git, to \"checkout\" from a branch means to switch your working directory to that branch, making it the active branch. This updates your files to match the state of that branch and allows you to work on it.\n\nLearn more from the following resources:", + "links": [ + { + "title": "git-checkout", + "url": "https://git-scm.com/docs/git-checkout", + "type": "article" + }, + { + "title": "git-commands-checkout", + "url": "https://www.git-tower.com/learn/git/commands/git-checkout", + "type": "article" + }, + { + "title": "Git Checkout. Different ways of using the checkout command in the Git Project", + "url": "https://youtu.be/h_PIHOFUYuw?si=tebKCCb5U3ues0Io", + "type": "video" + } + ] + }, + "sNuy6NMjLOEkJlqdEjFPq": { + "title": "Merging Basics", + "description": "", + "links": [] + }, + "NeSvgS2yA5x8qbcJHrV__": { + "title": "GitHub Essentials", + "description": "", + "links": [] + }, + "i7fIIHcBEk473te8bniJ5": { + "title": "Creating Account", + "description": "", + "links": [] + }, + "qZFtRABvlBbVvsy6T00J2": { + "title": "GitHub Interface", + "description": "", + "links": [] + }, + "GS3f1FKFVKT0-GJQrgCm8": { + "title": "Setting up Profile", + "description": "", + "links": [] + }, + "c_FO6xMixrrMo6iisfsvl": { + "title": "Creating Repositories", + "description": "", + "links": [] + }, + "KbVvFVQ4k77R2_ddsc7WT": { + "title": "Profile Readme", + "description": "", + "links": [] + }, + "HEqBbw_A4ZbJI5zEy8ViN": { + "title": "Private vs Public", + "description": "", + "links": [] + }, + "aWx9WHUrgofcTr8B-fQYe": { + "title": "Git Remotes", + "description": "", + "links": [] + }, + "sBQOInoFBU9XfkPZ-JlyT": { + "title": "Managing Remotes", + "description": "", + "links": [] + }, + "ZVMCh9om37ee1qsecFa-N": { + "title": "Pushing / Pulling Changes", + "description": "", + "links": [] + }, + "Gybnekbd1rJKTOf4hJ4Sh": { + "title": "Fetch without Merge", + "description": "", + "links": [] + }, + "d_GNnB6PBINz1jxGNWAE-": { + "title": "Collaboration on GitHub", + "description": "Collaboration on GitHub is a powerful way for multiple people to work together on the same project, using Git as the version control system. GitHub provides various tools and workflows that make collaboration efficient and organized.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How to collaborate in a GitHub project", + "url": "https://gist.github.com/neklaf/9002d3acccf6b6e448db5c4c4e8764c0", + "type": "article" + }, + { + "title": "Best Practices for collaborating in github", + "url": "https://www.gitkraken.com/blog/collaborate-on-github", + "type": "article" + }, + { + "title": "Working with GitHub in VS Code", + "url": "https://code.visualstudio.com/docs/sourcecontrol/github", + "type": "article" + } + ] + }, + "l1Wf7Pe_ah8ycCgslfSK4": { + "title": "Forking vs Cloning", + "description": "", + "links": [] + }, + "crdllx5cH_seIpgVPvHg_": { + "title": "Issues", + "description": "", + "links": [] + }, + "1Koej79yTv-OAswVZwgGq": { + "title": "Cloning Repositories", + "description": "Cloning a repository in Git and GitHub involves creating a local copy of a remote repository on your computer. This allows you to work on the project locally, commit changes, and later push those changes back to the remote repository.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Git clone", + "url": "https://git-scm.com/docs/git-clone/en", + "type": "article" + }, + { + "title": "Cloning a repository", + "url": "https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository", + "type": "article" + }, + { + "title": "Clone a git respository", + "url": "https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-clone", + "type": "article" + }, + { + "title": "Cloning remote respository into local machine", + "url": "https://youtu.be/xeQih8LVtZM?si=djlyTDpLNS0oyqQH", + "type": "video" + } + ] + }, + "x6eILrLCQrVpz4j8uOuy6": { + "title": "Pull Requests", + "description": "", + "links": [] + }, + "8lXXVFkgK6n5IHaYkYe3l": { + "title": "PR from a Fork", + "description": "", + "links": [] + }, + "r-u1vTpUyuvsB0revOU0C": { + "title": "Collaborators", + "description": "Collaborators in GitHub are users who have been granted direct access to a repository by the repository owner or organization administrators. Collaborators can perform actions like pushing commits, creating branches, and managing issues or pull requests, depending on the permissions granted to them. They are typically added to private repositories or to public repositories where more control over contributions is needed.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How to add collaborators to your personal projects", + "url": "https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/inviting-collaborators-to-a-personal-repository", + "type": "article" + }, + { + "title": "Adding outside collaborators to repositories in your organization", + "url": "https://docs.github.com/en/organizations/managing-user-access-to-your-organizations-repositories/managing-outside-collaborators/adding-outside-collaborators-to-repositories-in-your-organization", + "type": "article" + }, + { + "title": "What are github collaborators", + "url": "https://www.geeksforgeeks.org/what-are-github-collaborators/", + "type": "article" + }, + { + "title": "How to Add Collaborators to Your GitHub Repository", + "url": "https://www.blinkops.com/blog/how-to-add-collaborators-to-your-github-repository", + "type": "article" + }, + { + "title": "Using Github for Team collaboration", + "url": "https://youtu.be/4nyIS58ORWw?si=yK5LCONNVm9OIUK5", + "type": "video" + } + ] + }, + "y4DkB5NvTh41IeT0G2gr-": { + "title": "Labelling Issues / PRs", + "description": "", + "links": [] + }, + "dQS1V0zZxeKhHhUo3STBK": { + "title": "Saved Replies", + "description": "", + "links": [] + }, + "oWMaOWU06juoIuzXNe-wt": { + "title": "Mentions", + "description": "", + "links": [] + }, + "XstmIysIi_lWo6RzszLBt": { + "title": "Reactions", + "description": "", + "links": [] + }, + "0rHDUbAdXqH9zQW2VfJ8v": { + "title": "Merge Strategies", + "description": "", + "links": [] + }, + "agtPWS8j6i6wQPk10cy8E": { + "title": "Fast-Forward vs Non-FF", + "description": "", + "links": [] + }, + "9Dt4Gyiiq5jteWSKxsRMK": { + "title": "Handling Conflicts", + "description": "", + "links": [] + }, + "99FVJ3Zs8n6lr8L95mG6g": { + "title": "Rebase", + "description": "", + "links": [] + }, + "Z-srOhYFGVEKDexlJ6cjt": { + "title": "Squash", + "description": "", + "links": [] + }, + "eFf2fesrs-1aVM5tH3ORQ": { + "title": "Cherry Picking Commits", + "description": "Cherry-picking in Git allows you to apply a specific commit from one branch to another, without merging the entire branch. This is useful when you want to bring in a specific feature or fix from one branch to another without incorporating all the changes from the source branch.\n\nLearn more from the following resources:", + "links": [ + { + "title": "git-cherry-pick-docs", + "url": "https://git-scm.com/docs/git-cherry-pick", + "type": "article" + }, + { + "title": "Git cherry pick", + "url": "https://www.atlassian.com/git/tutorials/cherry-pick", + "type": "article" + }, + { + "title": "Git-CHERRY-PICK-Tutorial", + "url": "https://youtu.be/i657Bg_HAWI?si=3jjn2X8Hi1na--F4", + "type": "video" + } + ] + }, + "7lRUYWNSpHvJ-QyIE8RMa": { + "title": "Commit Messages", + "description": "A Git commit message is a brief explanation of the changes introduced in a particular commit. It helps others (and your future self) understand the purpose of the changes and the context behind them. Writing clear and informative commit messages is an important practice for maintaining a well-organized and easily navigable project history.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How to Write Better Git Commit Messages", + "url": "https://www.freecodecamp.org/news/how-to-write-better-git-commit-messages/", + "type": "article" + }, + { + "title": "Writing good commit messages", + "url": "https://www.theodinproject.com/lessons/foundations-commit-messages", + "type": "article" + }, + { + "title": "How to Write Good Git Commit Messages like a pro", + "url": "https://medium.com/front-end-weekly/how-to-write-good-git-commit-messages-like-a-pro-2c12f01569d9", + "type": "article" + }, + { + "title": "Write git commit messages like a PRO with Conventional Commits", + "url": "https://youtu.be/OJqUWvmf4gg?si=Fgl3isZpP13jYXHP", + "type": "video" + }, + { + "title": "How to Make Actually Good Commits in Git", + "url": "https://youtu.be/Dy5t_H2PRrk?si=0V-JEbqphpJX5OLl", + "type": "video" + } + ] + }, + "ks1Pip-RM-UWD6zuF2j4n": { + "title": "Branch Naming", + "description": "", + "links": [] + }, + "GwDNk2HBjASr_NWIL4G3-": { + "title": "PR Guidelines", + "description": "", + "links": [] + }, + "xLB2fhsOm0Vu3xg_PusJB": { + "title": "Code Reviews", + "description": "The purpose of a code review in software development is to help ensure that the code meets the organization’s standards and requirements, is of high quality, and is maintainable. In addition to identifying errors and bugs, code reviews also promote a culture of learning and collaboration among the development team.\n\nSome of the benefits of code reviews include:\n\n* Increase code quality by identifying defects in the code and issues such as security vulnerabilities and performance problems—before developers merge the code into an upstream branch.\n* Ensure compliance with organizational standards, regulations, and the team’s code style.\n* Save time and money by detecting issues earlier in the software development process before they become more complex and expensive to fix.\n* Boost collaboration, communication, and knowledge sharing among developers by providing a forum to discuss code and ask questions, share ideas and best practices, and learn from each other.\n* Ensure that the code is maintainable by identifying any software maintenance issues and suggesting improvements.\n\nLearn more from the following links:", + "links": [ + { + "title": "A practical guide for better, faster code reviews", + "url": "https://github.com/mawrkus/pull-request-review-guide", + "type": "article" + }, + { + "title": "How to improve code with code reviews", + "url": "https://github.com/resources/articles/software-development/how-to-improve-code-with-code-reviews", + "type": "article" + } + ] + }, + "pJ-najh7dXhhYA_0bDiR5": { + "title": "Contribution Guidelines", + "description": "", + "links": [] + }, + "D2WIExwfSnkAPIa5O-Hp5": { + "title": "Documentation", + "description": "", + "links": [] + }, + "1Ulxl4VUvRSfyCPpi-iv8": { + "title": "Markdown", + "description": "", + "links": [] + }, + "WIVr7JxO1AJTNObW8mtY3": { + "title": "Project Readme", + "description": "", + "links": [] + }, + "Ddkss13_qDJTquDHbVTVs": { + "title": "GitHub Wikis", + "description": "", + "links": [] + }, + "i3AbARgzQtxtlB-1AS8zv": { + "title": "Clean Git History", + "description": "Cleaning up Git history can make your commit history more readable, concise, and organized. Here are some of the reasons why you'd want to clean your git history:\n\n* makes it easy to decipher the order of the commits in your repository\n* It facilitates finding commits that might have introduced bugs and enable rollback if necessary\n* To be able to deploy any commit on your development branch using your CI/CD system\n* If you are handling mobile app releases and you are responsible for figuring out what feature is in which release.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Clean GIT history — a Step by Step Guide", + "url": "https://medium.com/@catalinaturlea/clean-git-history-a-step-by-step-guide-eefc0ad8696d", + "type": "article" + }, + { + "title": "Git best practice tip: clean commit history", + "url": "https://youtu.be/bZpiVijzd2g?si=8lJTlR3LfY9ZUd77", + "type": "video" + } + ] + }, + "yMx3LdadPz4g25CL3N8da": { + "title": "Working in a Team", + "description": "", + "links": [] + }, + "RMrxQLhrINO5g4Mhxh5qS": { + "title": "GitHub Organizations", + "description": "", + "links": [] + }, + "_ft-uvXt6s_xrcMT3fbSF": { + "title": "Collaborators / Members", + "description": "", + "links": [] + }, + "wydgCxR5VnieBpRolXt8i": { + "title": "Teams within Organization", + "description": "", + "links": [] + }, + "DzFJDdqnSy5GeGHWOpcVo": { + "title": "GitHub Projects", + "description": "", + "links": [] + }, + "q0zy_hXav5iXw8LpGVJVd": { + "title": "Project Planning", + "description": "", + "links": [] + }, + "RFJgfuxoVxt22QlwLI5mW": { + "title": "Kanban Boards", + "description": "", + "links": [] + }, + "sxvT2hGko2PDRBoBrCGWD": { + "title": "Roadmaps", + "description": "", + "links": [] + }, + "TNBz5755PhI6iKxTQTqcS": { + "title": "Automations", + "description": "", + "links": [] + }, + "snWQHCQECZyUXHdn6ppIk": { + "title": "GitHub Discussions", + "description": "", + "links": [] + }, + "X9K3PBpGsMoXkJsKdJPI7": { + "title": "Git Stash Basics", + "description": "", + "links": [] + }, + "zen3RRdK9_nPAYgicRoHk": { + "title": "History", + "description": "", + "links": [] + }, + "lXC07j6dOa3rQixY1P-Ob": { + "title": "Linear vs Non-Linear", + "description": "", + "links": [] + }, + "V8nLIvddyOKTzEjOJX5GW": { + "title": "HEAD", + "description": "", + "links": [] + }, + "0cLf7FiI9CX--UX45sm2f": { + "title": "Detached HEAD", + "description": "", + "links": [] + }, + "qFEonbCMLri8iA0yONwuf": { + "title": "git log options", + "description": "", + "links": [] + }, + "0Yi4cryT2v2SGBjouOas3": { + "title": "Undoing Changes", + "description": "", + "links": [] + }, + "dLr55Om7IOvI53c1DgTKc": { + "title": "git revert", + "description": "", + "links": [] + }, + "igrR7LguU1jemg_mf_AD6": { + "title": "git reset", + "description": "", + "links": [] + }, + "Uc7FyfAKpDFRGRNHwztFo": { + "title": "--soft", + "description": "", + "links": [] + }, + "V_joZNpQsS9G9PI-o-GmC": { + "title": "--hard", + "description": "", + "links": [] + }, + "qis7Z5VRxMcOmbesQlegZ": { + "title": "--mixed", + "description": "", + "links": [] + }, + "-0zQvCHG8jS_ghSjmTeIx": { + "title": "Viewing Diffs", + "description": "", + "links": [] + }, + "Rwpeltygwzcf6hnuZNURE": { + "title": "Between Commits", + "description": "", + "links": [] + }, + "O-zoAWkDvyn7B8_TmY257": { + "title": "Between Branches", + "description": "", + "links": [] + }, + "mzjtCdpke1ayHcEuS-YUS": { + "title": "Staged Changes", + "description": "", + "links": [] + }, + "uxqJzQFRcALqatNRIWR0w": { + "title": "Unstaged Changes", + "description": "", + "links": [] + }, + "sOoC-XxEoIvwKct00oKlX": { + "title": "Rewriting History", + "description": "", + "links": [] + }, + "NjPnEXLf1Lt9qzgxccogv": { + "title": "git commit --amend", + "description": "", + "links": [] + }, + "HMEfUFNu_Wp_Pac7VWHr-": { + "title": "git rebase", + "description": "", + "links": [] + }, + "BKVA6Q7DXemAYjyQOA0nh": { + "title": "git filter-branch", + "description": "", + "links": [] + }, + "OQOmxg9mCfcjt80hpvXkA": { + "title": "git push --force", + "description": "", + "links": [] + }, + "iFJBF-EEnLjQVsFSXjo_i": { + "title": "Tagging", + "description": "", + "links": [] + }, + "NeU38WPbEphJuJ_AMkH82": { + "title": "Managing Tags", + "description": "", + "links": [] + }, + "E3HAGNM-kXLL4Oci5JzpQ": { + "title": "Pushing Tags", + "description": "", + "links": [] + }, + "62E1tDMXB6K74OEN0WsS0": { + "title": "Checkout Tags", + "description": "Tags in Git are typically used to mark specific points in history, such as a release version. Checking out a tag means switching your working directory to the state of the repository at the point in time when that tag was created.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How To Checkout Git Tags", + "url": "https://devconnected.com/how-to-checkout-git-tags/", + "type": "article" + }, + { + "title": "What is git tag, How to create tags & How to checkout git remote tag(s)", + "url": "https://stackoverflow.com/questions/35979642/what-is-git-tag-how-to-create-tags-how-to-checkout-git-remote-tags", + "type": "article" + }, + { + "title": "Git Tag Tutorial | Create, Checkout, and Delete Git Tags | Learn Git", + "url": "https://youtu.be/spkUevg1NqM?si=UXRwJEOI6bpN30nM", + "type": "video" + } + ] + }, + "YmnTrjJtqHPXbEVrP8vd7": { + "title": "GitHub Releases", + "description": "", + "links": [] + }, + "pqBV7BMAs0z6qpfZeW2XP": { + "title": "Git hooks", + "description": "", + "links": [] + }, + "v7uabKuMQPOD_hBIaHOVT": { + "title": "What and Why?", + "description": "", + "links": [] + }, + "zsU6R2zvJKnYNU2ac4o4p": { + "title": "Client vs Server Hooks", + "description": "Like many other Version Control Systems, Git has a way to fire off custom scripts when certain important actions occur. There are two groups of these hooks: client-side and server-side. Client-side hooks are triggered by operations such as committing and merging, while server-side hooks run on network operations such as receiving pushed commits.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Git Hooks", + "url": "https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks#:~:text=There%20are%20two%20groups%20of,for%20all%20sorts%20of%20reasons.", + "type": "article" + }, + { + "title": "Git Hooks: The Powerful Tool You're Probably Not Using", + "url": "https://dev.to/algodame/git-hooks-the-powerful-tool-youre-probably-not-using-but-should-be-1lec", + "type": "article" + }, + { + "title": "Client vs Server Hooks", + "url": "https://youtu.be/egfuwOe8nXc?si=IkbLCr-3eGE9x6cY", + "type": "video" + } + ] + }, + "jzYjHx-gIKSP8dQUTqWVw": { + "title": "commit-msg", + "description": "", + "links": [] + }, + "SANEQI2rgOtsMQyn4qUCq": { + "title": "post-checkout", + "description": "", + "links": [] + }, + "buxb5TpzQ-xxn0vqtGdS3": { + "title": "post-update", + "description": "", + "links": [] + }, + "HhpAIzYMlMiQ9msrYZyDB": { + "title": "pre-commit", + "description": "", + "links": [] + }, + "j5kWEUKwBFg5EMm8-61K9": { + "title": "pre-push", + "description": "", + "links": [] + }, + "fjAFNjNNbPOzme9Uk_fDV": { + "title": "Submodules", + "description": "", + "links": [] + }, + "x4bnsPVTiX2xOCSyrgWpF": { + "title": "Adding / Updating", + "description": "", + "links": [] + }, + "d0-u_-_vtPK8tnUpnj_NB": { + "title": "What and Why use?", + "description": "", + "links": [] + }, + "h9cf_dh_pwjialOXOlNW-": { + "title": "GitHub CLI", + "description": "", + "links": [] + }, + "vHfpoVbOW0DHNtiy0VN4X": { + "title": "Installation and Setup", + "description": "", + "links": [] + }, + "lw4zHuhtxIO4kDvbyiVfq": { + "title": "Repository management", + "description": "", + "links": [] + }, + "kGnZifvXbHBf5zXIsfAQw": { + "title": "Issue Management", + "description": "", + "links": [] + }, + "s3MzDYFPMASqiS8UnvWzW": { + "title": "Pull Requests", + "description": "", + "links": [] + }, + "AmetdCURXXob5TUsikAab": { + "title": "GitHub Actions", + "description": "GitHub Actions is a very useful tool for automation, allowing developers to automate tasks within the software development lifecycle directly on GitHub.\n\nOne of the best ways to learn about GitHub Actions is through the course offered by Microsoft Learn. This course is well-structured and provides practical examples that are concise and easy to understand.", + "links": [ + { + "title": "Microsoft Learn: Introduction to GitHub Actions", + "url": "https://learn.microsoft.com/en-us/collections/n5p4a5z7keznp5", + "type": "course" + }, + { + "title": "YouTube: GitHub Actions Playlist", + "url": "https://www.youtube.com/watch?v=-hVG9z0fCac&list=PLArH6NjfKsUhvGHrpag7SuPumMzQRhUKY&pp=iAQB", + "type": "course" + } + ] + }, + "p6rq3lQ9YRrTqwcc31O23": { + "title": "YAML Syntax", + "description": "", + "links": [] + }, + "55uHPFNwYPVZx8Cy3c985": { + "title": "Workflow Triggers", + "description": "", + "links": [] + }, + "uS1H9KoKGNONvETCuFBbz": { + "title": "Scheduled Worfklows", + "description": "", + "links": [] + }, + "6QwlY3dEvjfAOPALcWKXQ": { + "title": "Workflow Runners", + "description": "", + "links": [] + }, + "BnPiTu1Jw2kIW560a2A5T": { + "title": "Workflow Context", + "description": "", + "links": [] + }, + "aflP7oWsQzAr4YPo2LLiQ": { + "title": "Secrets and Env Vars", + "description": "", + "links": [] + }, + "HMNhzzV6ApTKj4I_FOmUB": { + "title": "Caching Dependencies", + "description": "", + "links": [] + }, + "alysXC4b1hGi9ZdQ5-40y": { + "title": "Storing Artifacts", + "description": "", + "links": [] + }, + "jc4R1zhd1YeCEbVuxwJWy": { + "title": "Workflow Status", + "description": "", + "links": [] + }, + "SsogoCgJIbeTD6tk8UhTe": { + "title": "Marketplace Actions", + "description": "", + "links": [] + }, + "PUnYNBrAZWoZiopjtNgnA": { + "title": "Usecases", + "description": "", + "links": [] + }, + "Ni3HKVLanFvSrJ3u8i5I1": { + "title": "What are these?", + "description": "", + "links": [] + }, + "Y0EWgPsS4kZxH3y53jNxY": { + "title": "Use in Automation", + "description": "", + "links": [] + }, + "sFf1PdFfmEdQxsEntfeFq": { + "title": "Git Patch", + "description": "", + "links": [] + }, + "hru0sL1-D4bJSQI1efEyU": { + "title": "Git Reflog", + "description": "", + "links": [] + }, + "ExXuwTQSI_lg4SRGW3Iu1": { + "title": "Git Bisect", + "description": "", + "links": [] + }, + "4dxVN81rXWn6VZqK99yq0": { + "title": "Git Worktree", + "description": "", + "links": [] + }, + "CGj_UX5JMOOCKinedsNRc": { + "title": "Git Attributes", + "description": "", + "links": [] + }, + "zdunaucVe8J1tKf_z-NQo": { + "title": "Git LFS", + "description": "", + "links": [] + }, + "NV2HAXLEN7tskfgyFrbaf": { + "title": "GitHub API", + "description": "The GitHub API is a powerful tool that allows developers to interact with the GitHub platform programmatically. It provides access to various GitHub features, such as user data, repository information, and commit history.", + "links": [] + }, + "lSCnKhmRr6xrKVYxO8idD": { + "title": "REST API", + "description": "The GitHub REST API is a set of APIs that provide access to various GitHub features, such as user data, repository information, and commit history. It allows developers to interact with the GitHub platform programmatically.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "GitHub REST API documentation", + "url": "https://docs.github.com/en/rest?apiVersion=2022-11-28", + "type": "article" + }, + { + "title": "Quickstart for GitHub REST API", + "url": "https://docs.github.com/en/rest/quickstart?apiVersion=2022-11-28", + "type": "article" + }, + { + "title": "[Tutorial] - How to use GitHub REST API for Beginners", + "url": "https://www.youtube.com/watch?v=OvfLavRD1Os", + "type": "video" + } + ] + }, + "KlXPt-K6br8PtpLgELaCj": { + "title": "GraphQL API", + "description": "The GitHub GraphQL API is a set of APIs that provides access to various GitHub features, such as user data, repository information, and commit history. It allows developers to interact with the GitHub platform programmatically using GraphQL queries.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "GitHub GraphQL API documentation", + "url": "https://docs.github.com/en/graphql", + "type": "article" + }, + { + "title": "Forming calls with GraphQL", + "url": "https://docs.github.com/en/graphql/guides/forming-calls-with-graphql", + "type": "article" + } + ] + }, + "5Oax1p7zIZ9HD2hmENPof": { + "title": "Creating Apps", + "description": "GitHub Apps are a way to integrate with the GitHub platform programmatically, using either the REST API or GraphQL API. They allow developers to create custom integrations that can automate tasks, provide real-time notifications, and build custom workflows.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Creating GitHub Apps", + "url": "https://docs.github.com/en/apps/creating-github-apps", + "type": "article" + } + ] + }, + "560GJXFTt7DPdJjKtSDOo": { + "title": "GitHub Apps", + "description": "A GitHub App is a way to integrate with the GitHub platform programmatically, using either the REST API or GraphQL API. It allows developers to create custom integrations that can automate tasks, provide real-time notifications, and build custom workflows.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "GitHub Apps Documentation", + "url": "https://docs.github.com/en/apps", + "type": "article" + } + ] + }, + "qrdOARfqGPF9xhF6snbAn": { + "title": "OAuth Apps", + "description": "GitHub OAuth Apps are a way to integrate with the GitHub platform using OAuth authentication. They allow developers to create custom integrations that can automate tasks, provide real-time notifications, and build custom workflows.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Creating an OAuth app", + "url": "https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app", + "type": "article" + }, + { + "title": "GitHub Login With React (GitHub APIs, GitHub OAuth 2.0 Authentication)", + "url": "https://www.youtube.com/watch?v=rRn2EisxPl4", + "type": "video" + } + ] + }, + "MoG7D9kqPuA6o52-z_WDN": { + "title": "Webhooks", + "description": "GitHub Webhooks allow developers to receive real-time notifications about events happening within their repository, such as commits, pull requests, and issues. These webhooks enable users to automate tasks, integrate with other services, and build custom workflows.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "About webhooks", + "url": "https://docs.github.com/en/webhooks/about-webhooks", + "type": "article" + }, + { + "title": "Webhooks documentation", + "url": "https://docs.github.com/en/webhooks", + "type": "article" + }, + { + "title": "How to use GitHub Webhooks with Discord", + "url": "https://www.youtube.com/watch?v=-gyEHj0CVx0&", + "type": "video" + } + ] + }, + "vhdGUhMAyre_Xya6IxZ-t": { + "title": "GitHub Sponsors", + "description": "A GitHub Sponsor is a way to support and fund open-source projects on GitHub. It allows maintainers of public repositories to receive financial support from users who value their work. Sponsors can contribute funds to help with expenses, development time, or other project-related costs. In return, sponsors are recognized as supporters in the repository's README file and on the project's website. This feature promotes transparency, accountability, and appreciation within open-source communities, making it easier for maintainers to focus on their projects.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Sponsoring an open source contributor through GitHub", + "url": "https://docs.github.com/en/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-github", + "type": "article" + }, + { + "title": "Receiving sponsorships through GitHub Sponsors", + "url": "https://docs.github.com/en/sponsors/receiving-sponsorships-through-github-sponsors", + "type": "article" + } + ] + }, + "bnai6R6pOq_L5CPdbVwMW": { + "title": "GitHub Pages", + "description": "GitHub Pages is a feature that allows users to host and publish web content directly from their GitHub repositories. It provides a simple way to create and deploy websites, blogs, or projects without the need for manual configuration or maintenance. Users can upload custom themes, add plugins, and use various tools to customize their pages.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "About GitHub Pages", + "url": "https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages", + "type": "article" + }, + { + "title": "Ceating a GitHub Pages site", + "url": "https://docs.github.com/en/pages/getting-started-with-github-pages/creating-a-github-pages-site", + "type": "article" + }, + { + "title": "GitHub Pages examples", + "url": "https://github.com/collections/github-pages-examples", + "type": "article" + } + ] + }, + "M2_hBvXou7cCNqsMnexCt": { + "title": "GitHub Gists", + "description": "A GitHub Gist is a small code or text snippet that can be shared with others. It is a simple way to share code, configuration files, or other snippets of text without creating a full-fledged repository. Gists are useful for sharing examples, demos, or tutorials, and they can also serve as a starting point for larger projects. Each gist has a unique URL that can be shared with others, allowing them to view and edit the content. Gists support various file types, including code files, text files, and even images. They also provide features like syntax highlighting, line numbers, and commit history.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Creating gists", + "url": "https://docs.github.com/en/get-started/writing-on-github/editing-and-sharing-content-with-gists/creating-gists", + "type": "article" + }, + { + "title": "REST API endpoints for gists", + "url": "https://docs.github.com/en/rest/gists/gists?apiVersion=2022-11-28", + "type": "article" + } + ] + }, + "rqPCHh25xX_ROMr-ULpaw": { + "title": "GitHub Packages", + "description": "GitHub Packages is a package repository service that allows developers to store and share packages, containers, and other software artifacts. It provides a central location for sharing packages with teams, organizations, or the wider developer community. GitHub Packages supports popular package managers like npm, Maven, and Gradle, as well as container registries like Docker Hub. This feature enables seamless integration of packages into development workflows, making it easier to share dependencies, libraries, and frameworks within and across projects. By using GitHub Packages, developers can simplify dependency management, reduce errors, and improve overall collaboration.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Introduction to GitHub Packages", + "url": "https://docs.github.com/en/packages/learn-github-packages/introduction-to-github-packages", + "type": "article" + }, + { + "title": "GitHub Packages documentation", + "url": "https://docs.github.com/en/packages", + "type": "article" + } + ] + }, + "ZHplGidvhxEIC3HN8KqRa": { + "title": "Deploying Static Websites", + "description": "Deploying static websites on GitHub Pages involves uploading and serving website content that is generated beforehand, without dynamic functionality. This approach allows for fast deployment, low maintenance, and improved security.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "How to Deploy a Static Website for Free Using Github Pages", + "url": "https://medium.com/flycode/how-to-deploy-a-static-website-for-free-using-github-pages-8eddc194853b", + "type": "article" + }, + { + "title": "How to Host a Website on GitHub Pages Free (Custom Domain Setup Included)", + "url": "https://www.youtube.com/watch?v=e5AwNU3Y2es", + "type": "video" + } + ] + }, + "VdoxEWaU56-QCbHFRw649": { + "title": "Custom Domains", + "description": "On GitHub Pages, users can customize their site's URL by connecting a custom domain to their repository. This feature allows users to use their own domain name instead of the default [GitHub.io](http://GitHub.io) subdomain, giving their site a more professional and personalized look.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Configuring a custom domain for your GitHub Pages site", + "url": "https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site", + "type": "article" + }, + { + "title": "How to Host a Website on GitHub Pages Free (Custom Domain Setup Included)", + "url": "https://www.youtube.com/watch?v=e5AwNU3Y2es&t=156s", + "type": "video" + } + ] + }, + "iwfNYDlAgbA_rpWYcoHCC": { + "title": "Static Site Generators", + "description": "GitHub offers a set of static site generators (SSGs) that allow users to create and deploy websites directly from their GitHub repositories. These SSGs include `Jekyll`, `Hugo`, and `Middleman`, among others. They provide a simple way to build websites without the need for manual configuration or maintenance.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Static Site Generators", + "url": "https://github.com/collections/static-site-generators", + "type": "article" + }, + { + "title": "About GitHub Pages and Jekyll", + "url": "https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/about-github-pages-and-jekyll", + "type": "article" + } + ] + }, + "NdfwgwMOewiyEAFyC2l7U": { + "title": "GitHub Codespaces", + "description": "GitHub Codespaces is a cloud-based development environment that allows developers to create, access, and use pre-configured, ready-to-use environments for coding. It provides a seamless way to develop, test, and debug applications in a virtual machine or container, eliminating the need for local setup and configuration. With GitHub Codespaces, users can spin up a new environment with their desired configuration, tools, and dependencies in just a few clicks. This feature streamlines development workflows, reduces friction, and increases productivity by providing instant access to a tailored coding environment for each project.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "GitHub Codespaces Overview", + "url": "https://docs.github.com/en/codespaces/overview", + "type": "article" + }, + { + "title": "How to Deploy a GitHub Codespace", + "url": "https://www.youtube.com/watch?v=_01iCF9sO1c", + "type": "video" + } + ] + }, + "pFyMiyNQ16-kP7jKaKKEU": { + "title": "GitHub Education", + "description": "GitHub Education is a program that provides free and discounted access to GitHub's developer tools, services, and resources for students, teachers, and researchers. This program aims to support education and research in software development, by making it easier for students and educators to learn, collaborate, and build projects on GitHub. By using GitHub Education, students can gain hands-on experience with real-world coding challenges, while educators can create a more engaging and interactive learning environment.", + "links": [] + }, + "XRSVRl6iHncMmgSXoB7Lq": { + "title": "Student Developer Pack", + "description": "The GitHub Student Developer Pack is a collection of developer tools and resources that are offered free or at a discounted price to students through the GitHub Education program. This pack includes access to GitHub, GitHub Desktop, GitHub Classroom, GitHub Student Developer Kit, and other benefits. By using the Student Developer Pack, students can gain hands-on experience with professional developer tools, while also getting access to a wide range of educational resources.\n\nVisit the following resource to learn more:", + "links": [ + { + "title": "Apply to GitHub Education as a student", + "url": "https://docs.github.com/en/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-education-for-students/apply-to-github-education-as-a-student", + "type": "article" + } + ] + }, + "Pg6G4fzYb_RUhANeRKlRX": { + "title": "GitHub Classroom", + "description": "GitHub Classroom is an integrated feature within GitHub that allows educators to create and assign homework assignments, projects, or quizzes directly to students. This feature streamlines the process of teaching and learning by making it easy for instructors to share code, provide feedback, and track student progress all in one place. By using GitHub Classroom, teachers can focus on high-level instruction and student engagement, while also promoting collaboration and hands-on learning experiences.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "About GitHub Classroom", + "url": "https://docs.github.com/en/education/manage-coursework-with-github-classroom/get-started-with-github-classroom/about-github-classroom", + "type": "article" + }, + { + "title": "GitHub Classroom - Getting Started Guide", + "url": "https://www.youtube.com/watch?v=xVVeqIDgCvM&list=PLIRjfNq867bewk3ZGV6Z7a16YDNRCpK3u", + "type": "video" + } + ] + }, + "B1KiSOt2b8t8FYD7Jxw2A": { + "title": "Campus Program", + "description": "The GitHub Campus Program offers GitHub Enterprise Cloud and GitHub Enterprise Server free-of-charge for schools that want to make the most of GitHub for their community. This program provides access to a comprehensive set of developer tools, as well as resources and support to help students and educators build projects, collaborate, and develop skills in software development.\n\nVisit the following resource to learn more:", + "links": [ + { + "title": "About GitHub Campus Program", + "url": "https://docs.github.com/en/education/explore-the-benefits-of-teaching-and-learning-with-github-education/use-github-at-your-educational-institution/about-github-campus-program", + "type": "article" + } + ] + }, + "R20LXLLEzNn-SpyFDMRXj": { + "title": "GitHub Marketplace", + "description": "GitHub Marketplace is a platform that allows developers to discover, install, and manage third-party tools and services directly within their GitHub environment. These tools can provide a range of features, such as code analysis, project management, or collaboration, making it easier for developers to work efficiently and effectively. By using the GitHub Marketplace, developers can streamline their workflow, reduce friction, and focus on writing code.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "GitHub Marketplace", + "url": "https://github.com/marketplace", + "type": "article" + }, + { + "title": "About GitHub Marketplace for apps", + "url": "https://docs.github.com/en/apps/github-marketplace/github-marketplace-overview/about-github-marketplace-for-apps", + "type": "article" + } + ] + }, + "f2PG4t6iVtfIH8BVe5H7f": { + "title": "GitHub Security", + "description": "GitHub Security is a suite of features and tools that help developers identify, fix, and prevent security vulnerabilities in their code. It provides a comprehensive approach to secure coding practices by integrating with the developer's workflow. The main components of GitHub Security include: `Code Scanning`, which uses AI-powered analysis to detect potential vulnerabilities; `Dependabot`, which automates dependency updates to prevent attacks via vulnerable dependencies; `Secret scanning`, which detects and flags secrets like API keys or credentials; and `GitHub Advanced Security`, which offers more advanced security features for larger teams. By using these tools, developers can ensure their code is secure, and identify potential issues before they become serious problems.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "GitHub security features", + "url": "https://docs.github.com/en/code-security/getting-started/github-security-features", + "type": "article" + }, + { + "title": "Dependabot quickstart guide", + "url": "https://docs.github.com/en/code-security/getting-started/dependabot-quickstart-guide", + "type": "article" + }, + { + "title": "About user alerts", + "url": "https://docs.github.com/en/code-security/secret-scanning/managing-alerts-from-secret-scanning/about-alerts#about-user-alerts", + "type": "article" + } + ] + }, + "4slyjdk2Eeg5VYY6gCDG6": { + "title": "GitHub Models", + "description": "GitHub Models is a feature that allows developers to search, explore, and use pre-trained AI models from various sources. This platform provides a way to discover and experiment with these models, making it easier to integrate AI capabilities into software projects. By using GitHub Models, developers can quickly find and try out different models, without having to train them from scratch.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Prototyping with AI models", + "url": "https://docs.github.com/en/github-models/prototyping-with-ai-models", + "type": "article" + }, + { + "title": "GitHub Models DEMO | AI models for developers on GitHub", + "url": "https://www.youtube.com/watch?v=WiBB8Lsgl7I", + "type": "video" + } + ] + }, + "iWn3zDMOfLLjSp6f1jQoE": { + "title": "GitHub Copilot", + "description": "GitHub Copilot is an AI-powered code-completion tool that helps developers write code faster and with less errors. It uses a combination of machine learning algorithms and access to GitHub's vast repository of open-source code to provide context-aware suggestions for coding tasks. Copilot can generate entire functions, methods, or even entire classes based on the context of the code being written. This feature aims to reduce the time spent on coding by providing immediate and relevant suggestions, allowing developers to focus more on high-level design and problem-solving.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Quickstart for GitHub Copilot", + "url": "https://docs.github.com/en/copilot/quickstart", + "type": "article" + }, + { + "title": "Intro to GitHob Copilot in Visual Studio", + "url": "https://www.youtube.com/watch?v=z1ycDvspv8U", + "type": "video" + }, + { + "title": "GitHub Copilot in VSCode: Top 10 Features Explained", + "url": "https://www.youtube.com/watch?v=2nPoiUJpDaU", + "type": "video" + } + ] + } +} \ No newline at end of file diff --git a/public/roadmap-content/ios.json b/public/roadmap-content/ios.json index f40a32ccb..79596763e 100644 --- a/public/roadmap-content/ios.json +++ b/public/roadmap-content/ios.json @@ -93,6 +93,11 @@ "title": "Interoperability with Swift", "description": "Swift is designed to work seamlessly with Objective-C, allowing developers to integrate and use both languages within the same project. This interoperability enables:\n\n**Gradual Migration:** Developers can incrementally migrate their codebase from Objective-C to Swift without needing a complete rewrite.\n\n**Mixed-Language Projects:** Swift and Objective-C files can coexist, and developers can call Objective-C code from Swift and vice versa.\n\n**Access to Existing Libraries:** Swift code can leverage existing Objective-C libraries and frameworks, ensuring continued use of valuable resources and tools.\n\n**Bridging Header:** A bridging header file allows Swift to interface with Objective-C code, facilitating communication between the two languages.\n\n**Compatibility:** Swift supports dynamic libraries, ensuring compatibility with existing Objective-C runtime and APIs.\n\nVisit the following resources to learn more:", "links": [ + { + "title": "Swift and Objective-C Interoperability", + "url": "https://developer.apple.com/videos/play/wwdc2015/401/", + "type": "article" + }, { "title": "Explore top posts about Swift", "url": "https://app.daily.dev/tags/swift?ref=roadmapsh", @@ -343,7 +348,7 @@ }, "tqbg8mBJfjuXacdMlIB_L": { "title": "Memory Management", - "description": "Memory management involves allocating memory for objects and freeing it after use. Manual Retain-Release (MRR) requires developers to explicitly manage memory using reference counting, provided by the Foundation class NSObject. Automatic Reference Counting (ARC) automates this process by inserting memory management method calls during compilation, though it still uses reference counting. In contrast, Garbage Collection (GC) automatically tracks object ownership and releases unreferenced objects, using a different mechanism than MRR and ARC, and is supported only in the Mac OS X runtime environment, not on iOS.\n\n> Beginning May 1, 2015, new Mac apps and app updates submitted to the Mac App Store may no longer use garbage collection, which was deprecated in OS X Mountain Lion. Instead, migrate your apps to Automatic Reference Counting, using the migration assistant in Xcode to help with this transition. Apps may continue to use retain/release for manual memory management. For more information, read the [Transitioning to ARC Release Notes](https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html).\n\nVisit the following resources to learn more:", + "description": "Memory management involves allocating memory for objects and freeing it after use. Manual Retain-Release (MRR) requires developers to explicitly manage memory using reference counting, provided by the Foundation class NSObject. Automatic Reference Counting (ARC) automates this process by inserting memory management method calls during compilation, though it still uses reference counting. In contrast, Garbage Collection (GC) automatically tracks object ownership and releases unreferenced objects, using a different mechanism than MRR and ARC, and is supported only in the macOS X runtime environment, not on iOS.\n\n> Beginning May 1, 2015, new Mac apps and app updates submitted to the Mac App Store may no longer use garbage collection, which was deprecated in OS X Mountain Lion. Instead, migrate your apps to Automatic Reference Counting, using the migration assistant in Xcode to help with this transition. Apps may continue to use retain/release for manual memory management. For more information, read the [Transitioning to ARC Release Notes](https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html).\n\nVisit the following resources to learn more:", "links": [ { "title": "WWDC2021: ARC in Swift: Basics and beyond", @@ -426,8 +431,29 @@ }, "MrdIb9F-wSEbUz7KRnH3t": { "title": "Pick a Language", - "description": "", - "links": [] + "description": "Apple used to use Objective C for the development of apps for iOS and macOS, but since 2014 [Swift](https://www.swift.org/documentation/) has become the primary language for app development. After more than 10 years of growing strong and mature, now it is worth starting your iOS Developer journey by learning the language.\n\nSwift is a multi-paradigm language that has object-oriented, functional, and protocol-oriented flavors to it. For someone with a coding background in C++ and Java, the strange concepts would be Optionals, Closures, and the very fact you can skip writing semicolons when you end your statements.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Swift Programming Tutorial | FULL COURSE | Absolute Beginner", + "url": "https://www.youtube.com/watch?v=CwA1VWP0Ldw", + "type": "course" + }, + { + "title": "Swift Programming For Beginners - No Programming Experience", + "url": "https://www.udemy.com/course/swift-programming-for-beginners-no-experience/", + "type": "course" + }, + { + "title": "Swift Programming Tutorial – Full Course for Beginners", + "url": "https://www.youtube.com/watch?v=8Xg7E9shq0U", + "type": "course" + }, + { + "title": "Learn Swift Fast (2020) - Full Course For Beginners", + "url": "https://www.youtube.com/watch?v=FcsY1YPBwzQ", + "type": "course" + } + ] }, "sGnDm2xuJxqfU3pwmlY7H": { "title": "Version Control", diff --git a/public/roadmap-content/javascript.json b/public/roadmap-content/javascript.json index ead49c6d8..0e55582d4 100644 --- a/public/roadmap-content/javascript.json +++ b/public/roadmap-content/javascript.json @@ -450,13 +450,35 @@ }, "6lUF0neW1piiP1RsaVxEX": { "title": "bigint", - "description": "", - "links": [] + "description": "BigInt is a built-in JavaScript object that allows you to work with integers of arbitrary size.\n\nUnlike the Number type, which can accurately represent integers only within the range of ±2^53 , BigInt can handle integers far beyond this limit. This makes it particularly useful for applications requiring high precision with very large numbers, such as cryptography or scientific computations.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "BigInt", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt", + "type": "article" + }, + { + "title": "The Whys and Hows Of BigInt", + "url": "https://youtu.be/6I650PQfhMg?si=XyVGrmp4KWLRcHVj", + "type": "video" + } + ] }, "b1HvkoWA2t4kt8mS6FySm": { "title": "boolean", - "description": "", - "links": [] + "description": "In JavaScript, a `boolean` is a simple data type that can hold one of two values: `true` or `false`. These values are used to represent logical states and are essential in controlling the flow of a program.\n\nBooleans are commonly used in conditional statements (`if`, `else`, `while`, etc.) to determine whether a block of code should execute.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "JavaScript Boolean", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean", + "type": "article" + }, + { + "title": "Booleans in JavaScript", + "url": "https://www.youtube.com/watch?v=B4ZCFdrBmbE", + "type": "video" + } + ] }, "CxyNyFMuTLS3owtRMgClD": { "title": "null", @@ -935,8 +957,14 @@ }, "ATma3bLKdmWY_WTsPIKxh": { "title": "Object.is", - "description": "", - "links": [] + "description": "The [Object.is](http://Object.is)() static method determines whether two values are the same value.\n\n console.log(Object.is('1', 1));\n // Expected output: false\n \n console.log(Object.is(NaN, NaN));\n // Expected output: true\n \n console.log(Object.is(-0, 0));\n // Expected output: false\n \n const obj = {};\n console.log(Object.is(obj, {}));\n // Expected output: false\n \n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Object.is() - MDN", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is", + "type": "article" + } + ] }, "PLallt_T33W6bUEn0Hc3W": { "title": "isLooselyEqual", @@ -1914,11 +1942,6 @@ "title": "Callback Hell", "description": "The callback hell is when we try to write asynchronous JavaScript in a way where execution happens visually from top to bottom, creating a code that has a pyramid shape with many }) at the end.\n\nVisit the following resources to learn more:", "links": [ - { - "title": "Callback Hell", - "url": "http://callbackhell.com/", - "type": "article" - }, { "title": "Callbacks in Callbacks - Pyramid of Doom", "url": "https://javascript.info/callbacks#pyramid-of-doom", @@ -2179,11 +2202,22 @@ }, "bhuGtcyqPFKu-900aESYz": { "title": "DOM APIs", - "description": "", - "links": [] + "description": "With HTML DOM, JavaScript can access and change all the elements of an HTML document such as its attributes, CSS styles, remove elements, add and create new elements on the page. Web API means application programming inteface for the web. All browsers have a set og built-in Web APIs to support complex operations, and to help accessing data. Like Geolocation API, Web Storage, Web History and others.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "DOM- MDN Docs", + "url": "https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model", + "type": "article" + }, + { + "title": "Web APIs- W3schools", + "url": "https://www.w3schools.com/js/js_api_intro.asp", + "type": "article" + } + ] }, "KKyX8N4lTgN0w-Khm6Ztq": { - "title": "Gabage Collection", + "title": "Garbage Collection", "description": "Memory management in JavaScript is performed automatically and invisibly to us. We create primitives, objects, functions… All that takes memory. The main concept of memory management in JavaScript is reachability.\n\nVisit the following resources to learn more:", "links": [ { diff --git a/public/roadmap-content/nodejs.json b/public/roadmap-content/nodejs.json index b429e4ced..ffcb9c865 100644 --- a/public/roadmap-content/nodejs.json +++ b/public/roadmap-content/nodejs.json @@ -84,7 +84,7 @@ }, "Vrcv5px-3fqmyJnQv3WBK": { "title": "History of Node.js", - "description": "Node.js was written initially by Ryan Dahl in 2009, about thirteen years after the introduction of the first server-side JavaScript environment, Netscape's LiveWire Pro Web. The initial release supported only Linux and Mac OS X. Its development and maintenance were led by Dahl and later sponsored by Joyent.\n\nVisit the following resources to learn more:", + "description": "Node.js was written initially by Ryan Dahl in 2009, about thirteen years after the introduction of the first server-side JavaScript environment, Netscape's LiveWire Pro Web. The initial release supported only Linux and macOS X. Its development and maintenance were led by Dahl and later sponsored by Joyent.\n\nVisit the following resources to learn more:", "links": [ { "title": "Rising Stack - History of Node.js on a Timeline", @@ -319,8 +319,19 @@ }, "oYeux7PbveYaVwXRzAg5x": { "title": "Local Installation", - "description": "", - "links": [] + "description": "Locally installed packages are available only to the project where the packages are installed, while the globally installed packages can be used any where without installing them into a project. Another usecase of the global packages is when using CLI tools.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Downloading and installing packages locally", + "url": "https://docs.npmjs.com/downloading-and-installing-packages-locally", + "type": "article" + }, + { + "title": "Downloading and installing packages globally", + "url": "https://docs.npmjs.com/downloading-and-installing-packages-globally", + "type": "article" + } + ] }, "bYBz12FUiJ1qLgdQSGyGK": { "title": "Updating Packages", diff --git a/public/roadmap-content/python.json b/public/roadmap-content/python.json index da952200f..e69e8e952 100644 --- a/public/roadmap-content/python.json +++ b/public/roadmap-content/python.json @@ -194,8 +194,24 @@ }, "soZFqivM3YBuljeX6PoaX": { "title": "Sets", - "description": "", - "links": [] + "description": "Python Set is an unordered collection of data types that is iterable, mutable, and has no duplicate elements. The order of elements in a set is undefined though it may consist of various elements. The major advantage of using a set, as opposed to a list, is that it has a highly optimized method for checking whether a specific element is contained in the set.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "An W3Schools - Python Sets", + "url": "https://www.w3schools.com/python/python_sets.asp", + "type": "article" + }, + { + "title": "An In-Depth Guide to Working with Python Sets", + "url": "https://learnpython.com/blog/python-sets/", + "type": "article" + }, + { + "title": "Python Sets tutorial for Beginners", + "url": "https://www.youtube.com/watch?v=t9j8lCUGZXo", + "type": "video" + } + ] }, "bc9CL_HMT-R6nXO1eR-gP": { "title": "Dictionaries", diff --git a/public/roadmap-content/react.json b/public/roadmap-content/react.json index 66dd45364..9c9e51aea 100644 --- a/public/roadmap-content/react.json +++ b/public/roadmap-content/react.json @@ -183,6 +183,11 @@ "title": "Different techniques for conditional rendering in React", "url": "https://www.robinwieruch.de/conditional-rendering-react/", "type": "article" + }, + { + "title": "Conditional rendering in React", + "url": "https://www.youtube.com/watch?v=4oCVDkb_EIs", + "type": "video" } ] }, @@ -428,6 +433,11 @@ "title": "Explore top posts about React Hooks", "url": "https://app.daily.dev/tags/react-hooks?ref=roadmapsh", "type": "article" + }, + { + "title": "Custom Hooks in React", + "url": "https://www.youtube.com/watch?v=I2Bgi0Qcdvc", + "type": "video" } ] }, @@ -783,19 +793,24 @@ "description": "Context provides a way to pass data through the component tree without having to pass props down manually at every level.\n\nIn a typical React application, data is passed top-down (parent to child) via props, but such usage can be cumbersome for certain types of props (e.g. locale preference, UI theme) that are required by many components within an application. Context provides a way to share values like these between components without having to explicitly pass a prop through every level of the tree.\n\nVisit the following resources to learn more:", "links": [ { - "title": "Basic useContext Guide", - "url": "https://www.w3schools.com/react/react_usecontext.asp", + "title": "Passing Data Deeply with Context", + "url": "https://react.dev/learn/passing-data-deeply-with-context", "type": "article" }, { - "title": "Passing Data Deeply with Context", - "url": "https://react.dev/learn/passing-data-deeply-with-context", + "title": "Basic useContext Guide", + "url": "https://www.w3schools.com/react/react_usecontext.asp", "type": "article" }, { "title": "State with useContext and useState/useReducer", "url": "https://www.robinwieruch.de/react-state-usereducer-usestate-usecontext/", "type": "article" + }, + { + "title": "React Context API Crash Course", + "url": "https://www.youtube.com/watch?v=t9WmZFnE6Hg", + "type": "video" } ] }, @@ -1093,8 +1108,29 @@ }, "kiCTo0U6VgNON8rv_Ktlj": { "title": "Ark UI", - "description": "", - "links": [] + "description": "It is a modern and versatile user interface framework designed to streamline the development of responsive and accessible web applications. It provides a `comprehensive set` of components and tools that simplify the process of building user interfaces, allowing developers to focus on functionality and design. With a strong emphasis on flexibility and ease of use, Ark UI enables rapid prototyping and `scalable solutions`, ensuring a consistent and polished user experience across various devices and platforms. Its modular architecture and extensive documentation make it an excellent choice for developers looking to enhance productivity and maintain high standards in their UI design.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Official Website", + "url": "https://ark-ui.com/", + "type": "article" + }, + { + "title": "Official Website", + "url": "https://ark-ui.com/react/docs/overview/introduction", + "type": "article" + }, + { + "title": "What is ARK UI?", + "url": "https://shaxadd.medium.com/enhance-your-user-interfaces-with-ark-ui-a-comprehensive-guide-7e87dd0a79cf", + "type": "article" + }, + { + "title": "Hands On ARK UI", + "url": "https://www.youtube.com/watch?v=zjo-77I0unk", + "type": "video" + } + ] }, "b4AP2OggxFAwsQtUwiUJJ": { "title": "API Calls", @@ -1367,17 +1403,17 @@ }, "W-atg_Msa9uPLr6RXAKSb": { "title": "Frameworks", - "description": "Server-side rendering (SSR) is a technique for rendering a JavaScript application on the server, rather than in the browser. This can improve the performance and user experience of a web application, as the initial render of the application is done on the server and the content is sent to the browser as a fully-rendered HTML page.\n\nThere are several frameworks and libraries available for server-side rendering React applications, most common being:", + "description": "Server-side rendering (SSR) is a technique for rendering a JavaScript application on the server, rather than in the browser. This can improve the performance and user experience of a web application, as the initial render of the application is done on the server and the content is sent to the browser as a fully-rendered HTML page.\n\nThere are several frameworks and libraries available for server-side rendering React applications, most common being:\n\nNext.JS\n-------\n\nNext.js is a React framework for building full-stack web applications. You use React Components to build user interfaces, and Next.js for additional features and optimizations.\n\n* [@article@Next.js](https://nextjs.org/)\n* [@video@Next.js 14 Full Course 2024](https://www.youtube.com/watch?v=wm5gMKuwSYk)\n\nRemix.JS\n--------\n\nRemix is a full stack web framework that lets you focus on the user interface and work back through web standards to deliver a fast, slick, and resilient user experience. People are gonna love using your stuff.", "links": [ - { - "title": "Next.js", - "url": "https://nextjs.org/", - "type": "article" - }, { "title": "Remix", "url": "https://remix.run/", "type": "article" + }, + { + "title": "Remix Crash Course", + "url": "https://www.youtube.com/watch?v=RBYJTop1e-g", + "type": "video" } ] }, @@ -1419,8 +1455,24 @@ }, "_HoZkE7FH-v3wI_722ZTF": { "title": "Astro", - "description": "", - "links": [] + "description": "Astro is the web framework for building content-driven websites like blogs, marketing, and e-commerce. Astro is best-known for pioneering a new frontend architecture to reduce JavaScript overhead and complexity compared to other frameworks. If you need a website that loads fast and has great SEO, then Astro is for you.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Astro Website", + "url": "https://astro.build/", + "type": "article" + }, + { + "title": "Astro Crash Course in 60 Minutes", + "url": "https://www.youtube.com/watch?v=NniT0vKyn-E", + "type": "video" + }, + { + "title": "How To: Add/Integrate React.js and TailwindCss into Astro framework", + "url": "https://www.youtube.com/watch?v=d6CsWTVa42o", + "type": "video" + } + ] }, "-WjJBYCmRRj08n_9HxohY": { "title": "react-router", @@ -1446,6 +1498,11 @@ "title": "How to use Forms in React", "url": "https://www.robinwieruch.de/react-form/", "type": "article" + }, + { + "title": "React Forms: the SIMPLEST way", + "url": "https://www.youtube.com/watch?v=CT-72lTXdPg", + "type": "video" } ] }, @@ -1485,9 +1542,14 @@ "type": "article" }, { - "title": "Getting Started", - "url": "https://formik.org/docs/overview", - "type": "article" + "title": "Formik - Building React Forms easier", + "url": "https://www.youtube.com/watch?v=khGypss-RJs", + "type": "video" + }, + { + "title": "React Formik Tutorial with Yup (React Form Validation)", + "url": "https://www.youtube.com/watch?v=7Ophfq0lEAY", + "type": "video" } ] }, @@ -1530,8 +1592,24 @@ }, "bRpeoo9zXrnZ2IHSI7JX4": { "title": "Animation", - "description": "", - "links": [] + "description": "Animation in React can be achieved using various methods, such as CSS transitions, keyframes, or libraries like `react-spring`, `framer-motion`, and `GSAP` (GreenSock Animation Platform). CSS transitions are ideal for simple animations, where you can toggle classes or manipulate inline styles to create smooth transitions. For more complex and interactive animations, libraries like `react-spring` provide a declarative approach, allowing you to create animations by defining spring physics or interpolating values. `framer-motion` offers a rich API to handle complex animations, gestures, and even layout transitions with ease. `GSAP` is another powerful library that excels at creating high-performance animations, offering fine-grained control over every aspect of the animation process. These tools integrate seamlessly with React's component-driven architecture, enabling you to create responsive and dynamic user interfaces.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "Framer Motion Docs", + "url": "https://www.framer.com/motion/", + "type": "article" + }, + { + "title": "GSAP Docs", + "url": "https://gsap.com/docs/v3/", + "type": "article" + }, + { + "title": "React Spring Docs", + "url": "https://www.react-spring.dev/docs/getting-started", + "type": "article" + } + ] }, "SUeXDkmOLipdRP4fSrZOH": { "title": "Server APIs", @@ -1627,7 +1705,18 @@ "txARr3lgTvy-vJCj5zAb1": { "title": "Mobile Applications", "description": "React Native is an open-source UI software framework created by Meta Platforms, Inc. It is used to develop applications for Android, Android TV, iOS, macOS, tvOS, Web, Windows and UWP by enabling developers to use the React framework along with native platform capabilities.", - "links": [] + "links": [ + { + "title": "React Native Official website", + "url": "https://reactnative.dev/", + "type": "article" + }, + { + "title": "React Native Course for Beginners", + "url": "https://www.youtube.com/watch?v=ZBCUegTZF7M", + "type": "video" + } + ] }, "NvXAq1vN2wpncdW-yTL4c": { "title": "React Native", diff --git a/public/roadmap-content/server-side-game-developer.json b/public/roadmap-content/server-side-game-developer.json index 50578bf95..a777f830f 100644 --- a/public/roadmap-content/server-side-game-developer.json +++ b/public/roadmap-content/server-side-game-developer.json @@ -466,7 +466,7 @@ }, "HsBqd08Ro0VJnx0FlumMQ": { "title": "MySQL", - "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL (Structured Query Language) to interact with data. It is developed, marketed, and supported by MySQL AB, a Swedish company, and is written in C and C++. Since it's open-source, you can use MySQL completely free of charge. MySQL is primarily used for online transactions and for consolidating data. You can install it on various platforms like Linux, Windows, Mac OS and so on. With its comprehensive set of features like support for full-text search, cursors, triggers, stored procedures, it is powerful enough to manage even very large sets of data, making it suitable for a vast range of applications, whether they be web-based or embedded.", + "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL (Structured Query Language) to interact with data. It is developed, marketed, and supported by MySQL AB, a Swedish company, and is written in C and C++. Since it's open-source, you can use MySQL completely free of charge. MySQL is primarily used for online transactions and for consolidating data. You can install it on various platforms like Linux, Windows, macOS and so on. With its comprehensive set of features like support for full-text search, cursors, triggers, stored procedures, it is powerful enough to manage even very large sets of data, making it suitable for a vast range of applications, whether they be web-based or embedded.", "links": [] }, "dAiEwN7phwMyaitvM5kRl": { diff --git a/public/roadmap-content/sql.json b/public/roadmap-content/sql.json new file mode 100644 index 000000000..87d91751d --- /dev/null +++ b/public/roadmap-content/sql.json @@ -0,0 +1,1039 @@ +{ + "R9DQNc0AyAQ2HLpP4HOk6": { + "title": "What are Relational Databases?", + "description": "A **relational database** is a type of database that stores and organizes data in a structured way. It uses a structure that allows data to be identified and accessed in relation to other data in the database. Data in a relational database is stored in various data tables, each of which has a unique key identifying every row.\n\nRelational databases are made up of a set of tables with data that fits into a predefined category. Each table has at least one data category in a column, and each row contains a certain data instance for the categories defined in the columns.\n\nFor example, consider an 'Employees' table:\n\nEmployeeId\n\nFirstName\n\nLastName\n\nEmail\n\n1\n\nJohn\n\nDoe\n\n[john.doe@example.com](mailto:john.doe@example.com)\n\n2\n\nJane\n\nDoe\n\n[jane.doe@example.com](mailto:jane.doe@example.com)\n\n3\n\nBob\n\nSmith\n\n[bob.smith@example.com](mailto:bob.smith@example.com)\n\nIn this table, 'EmployeeId', 'FirstName', 'LastName' and 'Email' are categories, and each row represents a specific employee.\n\nRelationships\n-------------\n\nThe term \"relational database\" comes from the concept of a relation—a set of tuples that the database organizes into rows and columns. Each row in a table represents a relationship among a set of values.\n\nRelational databases use `keys` to create links between tables. A `primary key` is a unique identifier for a row of data. A `foreign key` is a column or combination of columns used to establish and enforce a link between the data in two tables.\n\nConsider an additional 'Orders' table:\n\nOrderId\n\nEmployeeId\n\nProduct\n\n1\n\n3\n\nApples\n\n2\n\n1\n\nBananas\n\n3\n\n2\n\nCherries\n\nIn the 'Orders' table, 'EmployeeId' serves as the foreign key creating a relationship between 'Orders' and 'Employees'. This allows queries that involve data in both tables, like \"Find all orders placed by John Doe\".\n\n SELECT Orders.OrderId, Orders.Product, Employees.FirstName, Employees.LastName\n FROM Orders\n INNER JOIN Employees ON Orders.EmployeeId = Employees.EmployeeId;\n \n\nThe above SQL code is an example of how to retrieve data from a relational database using a `JOIN` clause to combine rows from two or more tables.\n\nOverall, relational databases provide a powerful mechanism for defining relationships within data and enabling efficient data retrieval.", + "links": [] + }, + "fNTb9y3zs1HPYclAmu_Wv": { + "title": "RDBMS Benefits and Limitations", + "description": "Here are some of the benefits of using an RDBMS:\n\n* **Structured Data**: RDBMS allows data storage in a structured way, using rows and columns in tables. This makes it easy to manipulate the data using SQL (Structured Query Language), ensuring efficient and flexible usage.\n \n* **ACID Properties**: ACID stands for Atomicity, Consistency, Isolation, and Durability. These properties ensure reliable and safe data manipulation in a RDBMS, making it suitable for mission-critical applications.\n \n* **Normalization**: RDBMS supports data normalization, a process that organizes data in a way that reduces data redundancy and improves data integrity.\n \n* **Scalability**: RDBMSs generally provide good scalability options, allowing for the addition of more storage or computational resources as the data and workload grow.\n \n* **Data Integrity**: RDBMS provides mechanisms like constraints, primary keys, and foreign keys to enforce data integrity and consistency, ensuring that the data is accurate and reliable.\n \n* **Security**: RDBMSs offer various security features such as user authentication, access control, and data encryption to protect sensitive data.\n \n\nHere are some of the limitations of using an RDBMS:\n\n* **Complexity**: Setting up and managing an RDBMS can be complex, especially for large applications. It requires technical knowledge and skills to manage, tune, and optimize the database.\n \n* **Cost**: RDBMSs can be expensive, both in terms of licensing fees and the computational and storage resources they require.\n \n* **Fixed Schema**: RDBMS follows a rigid schema for data organization, which means any changes to the schema can be time-consuming and complicated.\n \n* **Handling of Unstructured Data**: RDBMSs are not suitable for handling unstructured data like multimedia files, social media posts, and sensor data, as their relational structure is optimized for structured data.\n \n* **Horizontal Scalability**: RDBMSs are not as easily horizontally scalable as NoSQL databases. Scaling horizontally, which involves adding more machines to the system, can be challenging in terms of cost and complexity.", + "links": [] + }, + "nhUKKWyBH80nyKfGT8ErC": { + "title": "Learn the Basics", + "description": "SQL, which stands for Structured Query Language, is a programming language that is used to communicate with and manage databases. SQL is a standard language for manipulating data held in relational database management systems (RDBMS), or for stream processing in a relational data stream management system (RDSMS). It was first developed in the 1970s by IBM.\n\nSQL consists of several components, each serving their own unique purpose in database communication:\n\n* **Queries:** This is the component that allows you to retrieve data from a database. The SELECT statement is most commonly used for this purpose.\n* **Data Definition Language (DDL):** It lets you to create, alter, or delete databases and their related objects like tables, views, etc. Commands include CREATE, ALTER, DROP, and TRUNCATE.\n* **Data Manipulation Language (DML):** It lets you manage data within database objects. These commands include SELECT, INSERT, UPDATE, and DELETE.\n* **Data Control Language (DCL):** It includes commands like GRANT and REVOKE, which primarily deal with rights, permissions and other control-level management tasks for the database system.\n\nSQL databases come in a number of forms, such as Oracle Database, Microsoft SQL Server, and MySQL. Despite their many differences, all SQL databases utilise the same language commands - SQL.\n\nLearn more about SQL from the following resources:", + "links": [ + { + "title": "SQL Tutorial - Mode", + "url": "https://mode.com/sql-tutorial/", + "type": "article" + }, + { + "title": "SQL Tutorial", + "url": "https://www.sqltutorial.org/", + "type": "article" + }, + { + "title": "SQL Tutorial - W3Schools", + "url": "https://www.w3schools.com/sql/default.asp", + "type": "article" + } + ] + }, + "gx4KaFqKgJX9n9_ZGMqlZ": { + "title": "SQL vs NoSQL Databases", + "description": "When discussing databases, it's essential to understand the difference between SQL and NoSQL databases, as each has its own set of advantages and limitations. In this section, we'll briefly compare and contrast the two, so you can determine which one suits your needs better.\n\nSQL Databases\n-------------\n\nSQL (Structured Query Language) databases are also known as relational databases. They have a predefined schema, and data is stored in tables consisting of rows and columns. SQL databases follow the ACID (Atomicity, Consistency, Isolation, Durability) properties to ensure reliable transactions. Some popular SQL databases include MySQL, PostgreSQL, and Microsoft SQL Server.\n\n**Advantages of SQL databases:**\n\n* **Predefined schema**: Ideal for applications with a fixed structure.\n* **ACID transactions**: Ensures data consistency and reliability.\n* **Support for complex queries**: Rich SQL queries can handle complex data relationships and aggregation operations.\n* **Scalability**: Vertical scaling by adding more resources to the server (e.g., RAM, CPU).\n\n**Limitations of SQL databases:**\n\n* **Rigid schema**: Data structure updates are time-consuming and can lead to downtime.\n* **Scaling**: Difficulties in horizontal scaling and sharding of data across multiple servers.\n* **Not well-suited for hierarchical data**: Requires multiple tables and JOINs to model tree-like structures.\n\nNoSQL Databases\n---------------\n\nNoSQL (Not only SQL) databases refer to non-relational databases, which don't follow a fixed schema for data storage. Instead, they use a flexible and semi-structured format like JSON documents, key-value pairs, or graphs. MongoDB, Cassandra, Redis, and Couchbase are some popular NoSQL databases.\n\n**Advantages of NoSQL databases:**\n\n* **Flexible schema**: Easily adapts to changes without disrupting the application.\n* **Scalability**: Horizontal scaling by partitioning data across multiple servers (sharding).\n* **Fast**: Designed for faster read and writes, often with a simpler query language.\n* **Handling large volumes of data**: Better suited to managing big data and real-time applications.\n* **Support for various data structures**: Different NoSQL databases cater to various needs, like document, graph, or key-value stores.\n\n**Limitations of NoSQL databases:**\n\n* **Limited query capabilities**: Some NoSQL databases lack complex query and aggregation support or use specific query languages.\n* **Weaker consistency**: Many NoSQL databases follow the BASE (Basically Available, Soft state, Eventual consistency) properties that provide weaker consistency guarantees than ACID-compliant databases.\n\nMongoDB: A NoSQL Database\n-------------------------\n\nThis guide focuses on MongoDB, a popular NoSQL database that uses a document-based data model. MongoDB has been designed with flexibility, performance, and scalability in mind. With its JSON-like data format (BSON) and powerful querying capabilities, MongoDB is an excellent choice for modern applications dealing with diverse and large-scale data.", + "links": [ + { + "title": "SQL vs NoSQL: The Differences", + "url": "https://www.sitepoint.com/sql-vs-nosql-differences/", + "type": "article" + }, + { + "title": "SQL vs. NoSQL Databases: What’s the Difference?", + "url": "https://www.ibm.com/blog/sql-vs-nosql/", + "type": "article" + }, + { + "title": "NoSQL vs. SQL Databases", + "url": "https://www.mongodb.com/nosql-explained/nosql-vs-sql", + "type": "article" + }, + { + "title": "Explore top posts about NoSQL", + "url": "https://app.daily.dev/tags/nosql?ref=roadmapsh", + "type": "article" + } + ] + }, + "JDDG4KfhtIlw1rkNCzUli": { + "title": "Basic SQL Syntax", + "description": "Basic SQL syntax consists of straightforward commands that allow users to interact with a relational database. The core commands include `SELECT` for querying data, `INSERT INTO` for adding new records, `UPDATE` for modifying existing data, and `DELETE` for removing records. Queries can be filtered using `WHERE`, sorted with `ORDER BY`, and data from multiple tables can be combined using `JOIN`. These commands form the foundation of SQL, enabling efficient data manipulation and retrieval within a database.\n\nLearn more about SQL from the following resources:", + "links": [ + { + "title": "SQL Tutorial - Mode", + "url": "https://mode.com/sql-tutorial/", + "type": "article" + }, + { + "title": "SQL Tutorial", + "url": "https://www.sqltutorial.org/", + "type": "article" + }, + { + "title": "SQL Tutorial - W3Schools", + "url": "https://www.w3schools.com/sql/default.asp", + "type": "article" + } + ] + }, + "6yoo7qC6X2jYDIjd3HIm7": { + "title": "SQL Keywords", + "description": "SQL employs a number of standard command keywords that are integral to interact with databases. Keywords in SQL provide instructions as to what action should be performed.\n\nHere are some of the primary SQL keywords:\n\n**SELECT**: This keyword retrieves data from a database. For example,\n\n SELECT * FROM Customers;\n \n\nIn the above statement `*` indicates that all records should be retrieved from the `Customers` table.\n\n**FROM**: Used in conjunction with `SELECT` to specify the table from which to fetch data.\n\n**WHERE**: Used to filter records. Incorporating a WHERE clause, you might specify conditions that must be met. For example,\n\n SELECT * FROM Customers WHERE Country='Germany';\n \n\n**INSERT INTO**: This command is used to insert new data into a database.\n\n INSERT INTO Customers (CustomerID, CustomerName, ContactName, Address, City, PostalCode, Country)\n VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');\n \n\n**UPDATE**: This keyword updates existing data within a table. For example,\n\n UPDATE Customers SET ContactName='Alfred Schmidt', City='Frankfurt' WHERE CustomerID=1;\n \n\n**DELETE**: This command removes one or more records from a table. For example,\n\n DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';\n \n\n**CREATE DATABASE**: As implied by its name, this keyword creates a new database.\n\n CREATE DATABASE mydatabase;\n \n\n**ALTER DATABASE**, **DROP DATABASE**, **CREATE TABLE**, **ALTER TABLE**, **DROP TABLE**: These keywords are used to modify databases and tables.\n\nRemember that SQL is not case sensitive, meaning keywords can be written in lower case. The convention is to write them in ALL CAPS for readability. There are many more keywords in SQL, but these are some of the most common.\n\nLearn more about SQL from the following resources:", + "links": [ + { + "title": "SQL Tutorial - Mode", + "url": "https://mode.com/sql-tutorial/", + "type": "article" + }, + { + "title": "SQL Tutorial", + "url": "https://www.sqltutorial.org/", + "type": "article" + }, + { + "title": "SQL Tutorial - W3Schools", + "url": "https://www.w3schools.com/sql/default.asp", + "type": "article" + } + ] + }, + "tBzMDfCMh6MIagNaxCzin": { + "title": "Data Types", + "description": "SQL data types define the kind of values that can be stored in a column and determine how the data is stored, processed, and retrieved. Common data types include numeric types (`INTEGER`, `DECIMAL`), character types (`CHAR`, `VARCHAR`), date and time types (`DATE`, `TIMESTAMP`), binary types (`BLOB`), and boolean types. Each database management system may have its own specific set of data types with slight variations. Choosing the appropriate data type for each column is crucial for optimizing storage, ensuring data integrity, and improving query performance.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL Data Types", + "url": "https://www.digitalocean.com/community/tutorials/sql-data-types", + "type": "article" + } + ] + }, + "ffwniprGJHZzJ7t3lQcXz": { + "title": "Operators", + "description": "SQL operators are used to perform operations like comparisons and arithmetic calculations. They are very crucial in forming queries. SQL operators are divided into the following types:\n\n1. **Arithmetic Operators**: These are used to perform mathematical operations. Here is a list of these operators:\n \n * `+` : Addition\n * `-` : Subtraction\n * `*` : Multiplication\n * `/` : Division\n * `%` : Modulus\n \n Example:\n \n SELECT product, price, (price * 0.18) as tax\n FROM products;\n \n \n2. **Comparison Operators**: These are used in the where clause to compare one expression with another. Some of these operators are:\n \n * `=` : Equal\n * `!=` or `<>` : Not equal\n * `>` : Greater than\n * `<` : Less than\n * `>=`: Greater than or equal\n * `<=`: Less than or equal\n \n Example:\n \n SELECT name, age\n FROM students\n WHERE age > 18;\n \n \n3. **Logical Operators**: They are used to combine the result set of two different component conditions. These include:\n \n * `AND`: Returns true if both components are true.\n * `OR` : Returns true if any one of the component is true.\n * `NOT`: Returns the opposite boolean value of the condition.\n \n Example:\n \n SELECT * \n FROM employees\n WHERE salary > 50000 AND age < 30;\n \n \n4. **Bitwise Operators**: These perform bit-level operations on the inputs. Here is a list of these operators:\n \n * `&` : Bitwise AND\n * `|` : Bitwise OR\n * `^` : Bitwise XOR\n \n Bitwise operators are much less commonly used in SQL than the other types of operators.\n \n\nRemember, the datatype of the result is dependent on the types of the operands.", + "links": [] + }, + "rmqXH29n1oXtZ8tvmcRFn": { + "title": "SELECT", + "description": "", + "links": [] + }, + "insert@mPj6BiK5FKKkIQ9WsWEo6.md": { + "title": "INSERT", + "description": "", + "links": [] + }, + "eu9dJFi6gBPMBdy08Y5Bb": { + "title": "UPDATE", + "description": "", + "links": [] + }, + "delete@ddtVaA4Ls6qRj-7OtTSIH.md": { + "title": "DELETE", + "description": "", + "links": [] + }, + "xPOeXK1EPBNG56vgfG-VV": { + "title": "Data Definition Language (DDL)", + "description": "Data Definition Language (DDL) is a subset of SQL used to define and manage the structure of database objects. DDL commands include `CREATE`, `ALTER`, `DROP`, and `TRUNCATE`, which are used to create, modify, delete, and empty database structures such as tables, indexes, views, and schemas. These commands allow database administrators and developers to define the database schema, set up relationships between tables, and manage the overall structure of the database. DDL statements typically result in immediate changes to the database structure and can affect existing data.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Data Definition Language (DDL)", + "url": "https://docs.getdbt.com/terms/ddl", + "type": "article" + } + ] + }, + "K5vhqTJrdPK08Txv8zaEj": { + "title": "Truncate Table", + "description": "The `TRUNCATE TABLE` statement is a Data Definition Language (DDL) operation that is used to mark the extents of a table for deallocation (empty for reuse). The result of this operation quickly removes all data from a table, typically bypassing a number of integrity enforcing mechanisms intended to protect data (like triggers).\n\nIt effectively eliminates all records in a table, but not the table itself. Unlike the `DELETE` statement, `TRUNCATE TABLE` does not generate individual row delete statements, so the usual overhead for logging or locking does not apply.\n\nSyntax\n------\n\nIn SQL, the `TRUNCATE TABLE` statement is quite simple:\n\n TRUNCATE TABLE table_name;\n \n\nIn this command, \"table\\_name\" refers to the name of the table you wish to clear.\n\nExample\n-------\n\nIf you have a table named `Orders` and you want to delete all its records, you would use:\n\n TRUNCATE TABLE Orders;\n \n\nAfter executing this statement, the `Orders` table would still exist, but it would be empty.\n\nRemember, while `TRUNCATE TABLE` is faster and uses fewer system and transaction log resources than `DELETE`, it does not invoke triggers and cannot be rolled back, so use with caution.\n\nLimitations\n-----------\n\nTruncate preserves the structure of the table for future use. But you can't truncate a table that:\n\n* Is referenced by a FOREIGN KEY constraint. (You can truncate a table that has a foreign key that references itself.)\n* Participates in an indexed view.\n* Is published by using transactional replication or merge replication.\n\nIf you try to truncate a table with a foreign key constraint, SQL Server will prevent you from doing so and you will have to use the `DELETE` statement instead.\n\nFor partitioned tables, `TRUNCATE TABLE` removes all rows from all partitions. The operation is not allowed if the table contains any LOB columns - `varchar(max), nvarchar(max), varbinary(max), text, ntext, image, xml`, or if the table contains any filestream columns or spatial geo, geography, geometry, and hierarchyid data type columns, or any columns of CLR user-defined data types.", + "links": [] + }, + "WjXlO42WL9saDS7RIGapt": { + "title": "Alter Table", + "description": "The `ALTER TABLE` statement in SQL is used to modify the structure of an existing table. This includes adding, dropping, or modifying columns, changing the data type of a column, setting default values, and adding or dropping primary or foreign keys.\n\nLearn more from the following resources:", + "links": [ + { + "title": "ALTER TABLE Statement", + "url": "https://www.techonthenet.com/sql/tables/alter_table.php", + "type": "article" + }, + { + "title": "ALTER TABLE - PostgreSQL", + "url": "https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-alter-table/", + "type": "article" + } + ] + }, + "epEpBxRosLhuAuKwp823r": { + "title": "Create Table", + "description": "`CREATE TABLE` is an SQL statement used to define and create a new table in a database. It specifies the table name, column names, data types, and optional constraints such as primary keys, foreign keys, and default values. This statement establishes the structure of the table, defining how data will be stored and organized within it. `CREATE TABLE` is a fundamental command in database management, essential for setting up the schema of a database and preparing it to store data.\n\nLearn more from the following resources:", + "links": [ + { + "title": "CREATE TABLE", + "url": "https://www.tutorialspoint.com/sql/sql-create-table.htm", + "type": "article" + } + ] + }, + "YzJ6QmY2arMfRzMAPaI0T": { + "title": "Drop Table", + "description": "The `DROP TABLE` statement is a Data Definition Language (DDL) operation that is used to completely remove a table from the database. This operation deletes the table structure along with all the data in it, effectively removing the table from the database system.\n\nWhen you execute the `DROP TABLE` statement, it eliminates both the table and its data, as well as any associated indexes, constraints, and triggers. Unlike the `TRUNCATE TABLE` statement, which only removes data but keeps the table structure, `DROP TABLE` removes everything associated with the table.\n\nLearn more from the following resources:", + "links": [ + { + "title": "DROP TABLE", + "url": "https://www.w3schools.com/sql/sql_drop_table.asp", + "type": "article" + } + ] + }, + "WMSXi-eez_hHGDM8kUdWz": { + "title": "Data Manipulation Language (DML)", + "description": "Data Manipulation Language (DML) is a subset of SQL used to manage data within database objects. It includes commands like `SELECT`, `INSERT`, `UPDATE`, and `DELETE`, which allow users to retrieve, add, modify, and remove data from tables. DML statements operate on the data itself rather than the database structure, enabling users to interact with the stored information. These commands are essential for day-to-day database operations, data analysis, and maintaining the accuracy and relevance of the data within a database system.", + "links": [] + }, + "i8u8E_sne6XiKJo2FXDog": { + "title": "Select", + "description": "The `SELECT` statement in SQL is majorly used for fetching data from the database. It is one of the most essential elements of SQL.\n\nSyntax\n------\n\nHere's how your `SELECT` command will look like:\n\n SELECT column1, column2, ...\n FROM table_name;\n \n\nIf you want to select all the columns of a table, you can use `*` like this:\n\n SELECT * FROM table_name;\n \n\nExample\n-------\n\nFor instance, consider we have a table `EMPLOYEES` with columns `name`, `designation`, and `salary`. We can use `SELECT` in the following way:\n\n SELECT name, designation FROM EMPLOYEES;\n \n\nThis will retrieve all the names and designations of all employees from the table `EMPLOYEES`.\n\nSELECT DISTINCT\n---------------\n\nThe `SELECT DISTINCT` statement is used to return only distinct (different) values. The DISTINCT keyword eliminates duplicate records from the results.\n\nHere's how you can use it:\n\n SELECT DISTINCT column1, column2, ...\n FROM table_name;\n \n\nFor example, if we want to select all unique designations from the `EMPLOYEES` table, the query will look like this:\n\n SELECT DISTINCT designation FROM EMPLOYEES;\n \n\nSELECT WHERE\n------------\n\n`SELECT` statement combined with `WHERE` gives us the ability to filter records based on a condition.\n\nSyntax:\n\n SELECT column1, column2, ...\n FROM table_name\n WHERE condition;\n \n\nFor example, to select employees with salary more than 50000, you can use this query:\n\n SELECT * FROM EMPLOYEES WHERE salary > 50000;\n \n\nSELECT ORDER BY\n---------------\n\nUsing `SELECT` statement in conjunction with `ORDER BY`, we can sort the result-set in ascending or descending order.\n\nSyntax:\n\n SELECT column1, column2, ...\n FROM table_name\n ORDER BY column ASC|DESC;\n \n\nFor example, to select all employees and order them by their name in ascending fashion:\n\n SELECT * FROM EMPLOYEES ORDER BY name ASC;\n \n\nRemember that the default sort order is ascending if the ASC|DESC parameter is not defined.", + "links": [] + }, + "N1Racr3ZpU320gS545We8": { + "title": "FROM", + "description": "The `FROM` clause in SQL specifies the tables from which the retrieval should be made. It is an integral part of `SELECT` statements and variants of `SELECT` like `SELECT INTO` and `SELECT WHERE`. `FROM` can be used to join tables as well.\n\nTypically, `FROM` is followed by space delimited list of tables in which the SELECT operation is to be executed. If you need to pull data from multiple tables, you would separate each table with a comma.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL FROM Keyword", + "url": "https://www.w3schools.com/sql/sql_ref_from.asp", + "type": "article" + } + ] + }, + "WhYAy6f7Euk3E49-ot644": { + "title": "WHERE", + "description": "SQL provides a WHERE clause that is basically used to filter the records. If the condition specified in the WHERE clause satisfies, then only it returns the specific value from the table. You should use the WHERE clause to filter the records and fetching only the necessary records.\n\nThe WHERE clause is not only used in SELECT statement, but it is also used in UPDATE, DELETE statement, etc., which we will learn in subsequent chapters.\n\nAn example of its implementation is:\n\n SELECT * FROM Students WHERE Age>10;\n \n\nIn this example, the statement selects all fields from the 'Students' table where the 'Age' field value is greater than 10.\n\nWHERE clause can be combined with AND, OR, and NOT operators. Here's an example:\n\n SELECT * FROM Students WHERE Age > 10 AND Gender = 'Female';\n \n\nIn this example, the statement selects all fields from 'Students' table where the 'Age' field value is greater than 10 and the 'Gender' is Female.\n\nThe syntax generally looks like this:\n\n SELECT column1, column2, ...\n FROM table_name\n WHERE condition;", + "links": [] + }, + "NfCiSPrL4upMssukcw3Kh": { + "title": "ORDER BY", + "description": "The `ORDER BY` clause in SQL is used to sort the result-set from a SELECT statement in ascending or descending order. It sorts the records in ascending order by default. If you want to sort the records in descending order, you have to use the `DESC` keyword.\n\nSyntax for Ascending Order:\n---------------------------\n\n SELECT column1, column2, ...\n FROM table_name\n ORDER BY column1, column2, ... ASC;\n \n\nHere, `ASC` is used for ascending order. If you use `ORDER BY` without `ASC` or `DESC`, `ASC` is used by default.\n\nSyntax for Descending Order:\n----------------------------\n\n SELECT column1, column2, ...\n FROM table_name\n ORDER BY column1, column2, ... DESC;\n \n\nHere, `DESC` is used for descending order.\n\nUsage Example\n-------------\n\nConsider the following `Customers` table:\n\nID\n\nNAME\n\nAGE\n\nADDRESS\n\nSALARY\n\n1\n\nRamesh\n\n32\n\nAhmedabad\n\n2000.0\n\n2\n\nKhilan\n\n25\n\nDelhi\n\n1500.0\n\n3\n\nkaushik\n\n23\n\nKota\n\n2000.0\n\n4\n\nChaitali\n\n25\n\nMumbai\n\n6500.0\n\n5\n\nHardik\n\n27\n\nBhopal\n\n8500.0\n\n6\n\nKomal\n\n22\n\nMP\n\n4500.0\n\n**Example 1 - Ascending Order:**\n\nSort the table by the `NAME` column in ascending order:\n\n SELECT * FROM Customers\n ORDER BY NAME ASC;\n \n\n**Example 2 - Descending Order:**\n\nSort the table by the `SALARY` column in descending order:\n\n SELECT * FROM Customers\n ORDER BY SALARY DESC;\n \n\n**Example 3 - Multiple Columns:**\n\nYou can also sort by multiple columns. Sort the table by the `AGE` column in ascending order and then `SALARY` in descending order:\n\n SELECT * FROM Customers\n ORDER BY AGE ASC, SALARY DESC;\n \n\nIn this instance, the `ORDER BY` clause first sorts the `Customers` table by the `AGE` column and then sorts the sorted result further by the `SALARY` column.", + "links": [] + }, + "14TKE6KhrH1yFtHcSZSXq": { + "title": "GROUP BY", + "description": "`GROUP BY` is an SQL clause used in `SELECT` statements to arrange identical data into groups. It's typically used with aggregate functions (like `COUNT`, `SUM`, `AVG`) to perform calculations on each group of rows. `GROUP BY` collects data across multiple records and groups the results by one or more columns, allowing for analysis of data at a higher level of granularity. This clause is fundamental for generating summary reports, performing data analysis, and creating meaningful aggregations of data in relational databases.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL GROUP BY", + "url": "https://www.programiz.com/sql/group-by", + "type": "article" + } + ] + }, + "ytwCkSMTiTuemE0KVfAfy": { + "title": "HAVING", + "description": "`HAVING` is a clause in SQL that allows you to filter result sets in a `GROUP BY` clause. It is used to mention conditions on the groups being selected. In other words, `HAVING` is mainly used with the `GROUP BY` clause to filter the results that a `GROUP BY` returns.\n\nIt’s similar to a `WHERE` clause, but operates on the results of a grouping. The `WHERE` clause places conditions on the selected columns, whereas the `HAVING` clause places conditions on groups created by the `GROUP BY` clause.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL HAVING Clause", + "url": "https://www.programiz.com/sql/having", + "type": "article" + } + ] + }, + "4UQQYbjzwVxZOAxBuXKQS": { + "title": "JOINs", + "description": "SQL `JOINs` are clauses used to combine rows from two or more tables based on a related column between them. They allow retrieval of data from multiple tables in a single query, enabling complex data analysis and reporting. The main types of `JOINs` include `INNER JOIN` (returns matching rows from both tables), `LEFT JOIN` (returns all rows from the left table and matching rows from the right), `RIGHT JOIN` (opposite of `LEFT JOIN`), and `FULL JOIN` (returns all rows when there's a match in either table). `JOINs` are fundamental to relational database operations, facilitating data integration and exploration across related datasets.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL JOINs Cheat Sheet", + "url": "https://www.datacamp.com/cheat-sheet/sql-joins-cheat-sheet", + "type": "article" + } + ] + }, + "-Hew0y53ziZK3epQnGA0O": { + "title": "INSERT", + "description": "The \"INSERT\" statement is used to add new rows of data to a table in a database. There are two main forms of the INSERT command: `INSERT INTO` which, if columns are not named, expects a full set of columns, and `INSERT INTO table_name (column1, column2, ...)` where only named columns will be filled with data.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL INSERT", + "url": "https://www.w3schools.com/sql/sql_insert.asp", + "type": "article" + } + ] + }, + "KJJ6PYjTnr_3yU2mNPL9v": { + "title": "UPDATE", + "description": "The `UPDATE` command in SQL is used to modify the existing records in a table. This command is useful when you need to update existing data within a database.\n\nHere are important points to remember before updating records in SQL:\n\n* The `WHERE` clause in the `UPDATE` statement specifies which records to modify. If you omit the `WHERE` clause, all records in the table will be updated!\n \n* Be careful when updating records in SQL. If you inadvertently run an `UPDATE` statement without a `WHERE` clause, you will rewrite all the data in the table.\n \n\nSQL UPDATE Syntax\n-----------------\n\nHere is a basic syntax of SQL UPDATE command:\n\n UPDATE table_name\n SET column1 = value1, column2 = value2...., columnN = valueN\n WHERE [condition];\n \n\nIn this syntax:\n\n* `table_name`: Specifies the table where you want to update records.\n* `SET`: This keyword is used to set the column values.\n* `column1, column2... columnN`: These are the columns of the table that you want to change.\n* `value1, value2... valueN`: These are the new values that you want to assign for your columns.\n* `WHERE`: This clause specifies which records need to be updated. It selects records based on one or more conditions.\n\nSQL UPDATE Example\n------------------\n\nLet's assume we have the following `Students` table:\n\nStudentID\n\nFirstName\n\nLastName\n\nAge\n\n1\n\nJohn\n\nDoe\n\n20\n\n2\n\nJane\n\nSmith\n\n22\n\n3\n\nBob\n\nJohnson\n\n23\n\nAnd we want to update the `Age` of the student with `StudentID` as 2. We can use the `UPDATE` command as follows:\n\n UPDATE Students\n SET Age = 23\n WHERE StudentID = 2;\n \n\nAfter executing the above SQL command, the `Age` of the student with `StudentID` 2 will be updated to 23.\n\nStudentID\n\nFirstName\n\nLastName\n\nAge\n\n1\n\nJohn\n\nDoe\n\n20\n\n2\n\nJane\n\nSmith\n\n23\n\n3\n\nBob\n\nJohnson\n\n23", + "links": [] + }, + "zWnvuHJLHr03PWkrW1wZZ": { + "title": "DELETE", + "description": "DELETE is an SQL statement used to remove one or more rows from a table. It allows you to specify which rows to delete using a WHERE clause, or delete all rows if no condition is provided. DELETE is part of the Data Manipulation Language (DML) and is used for data maintenance, removing outdated or incorrect information, or implementing business logic that requires data removal. When used without a WHERE clause, it empties the entire table while preserving its structure, unlike the TRUNCATE command.\n\nLearn more from the following resources:", + "links": [ + { + "title": "DELETE", + "url": "https://www.w3schools.com/sql/sql_delete.asp", + "type": "article" + } + ] + }, + "LX9nzJ4uqznHN4SksoDvr": { + "title": "Aggregate Queries", + "description": "Aggregate queries in SQL are used to perform calculations on multiple rows of data, returning a single summary value or grouped results. These queries typically involve the use of aggregate functions, such as:\n\n •\tCOUNT(): Returns the number of rows that match a specific condition.\n •\tSUM(): Calculates the total sum of a numeric column.\n •\tAVG(): Computes the average value of a numeric column.\n •\tMIN() and MAX(): Find the smallest and largest values in a column, respectively.\n •\tGROUP BY: Used to group rows that share a common value in specified columns, allowing aggregate functions to be applied to each group.\n •\tHAVING: Filters the results of a GROUP BY clause based on a specified condition, similar to WHERE but for groups.", + "links": [] + }, + "w4T3jFb0ilf1KNw-AvRXG": { + "title": "SUM", + "description": "The `SUM()` function in SQL is used to calculate the sum of a column. This function allows you to add up a column of numbers in an SQL table.\n\nThe syntax for SUM is as follows:\n\n SELECT SUM(column_name) FROM table_name;\n \n\nWhere `column_name` is the name of the column you want to calculate the sum of, and `table_name` is the name of the table where the column is.\n\nFor example, consider the following `ORDER` table:\n\n | OrderID | Company | Quantity |\n |------------|---------|----------|\n | 1 | A | 30 |\n | 2 | B | 15 |\n | 3 | A | 20 |\n \n\nIf you want to find the total quantity, you can use `SUM()`:\n\n SELECT SUM(Quantity) AS TotalQuantity FROM Order;\n \n\nOutput will be:\n\n | TotalQuantity |\n |---------------|\n | 65 |\n \n\n**Note:** The `SUM()` function skips NULL values.\n\nOne of the common use cases of `SUM()` function is in conjunction with `GROUP BY` to get the sum for each group of rows.\n\nExample:\n\n SELECT Company, SUM(Quantity) AS TotalQuantity \n FROM Order \n GROUP BY Company;\n \n\nThis will give us the sum of `Quantity` for each `Company` in the `Order` table.\n\n | Company | TotalQuantity |\n |-----------|----------------|\n | A | 50 |\n | B | 15 |\n \n\nNotably, in all databases, including MySQL, PostgreSQL, and SQLite, the `SUM()` function operates the same way.", + "links": [] + }, + "9aHYrOQDkA84tlxcVK5aD": { + "title": "COUNT", + "description": "`COUNT` is an SQL aggregate function that returns the number of rows that match the specified criteria. It can be used to count all rows in a table, non-null values in a specific column, or rows that meet certain conditions when combined with a `WHERE` clause. `COUNT` is often used in data analysis, reporting, and performance optimization queries to determine the size of datasets or the frequency of particular values.\n\nLearn more from the following resources:", + "links": [ + { + "title": "COUNT", + "url": "https://www.w3schools.com/sql/sql_count.asp", + "type": "article" + } + ] + }, + "Wou6YXLYUgomvcELh851L": { + "title": "AVG", + "description": "The `AVG()` function in SQL is an aggregate function that calculates the average value of a numeric column. It returns the sum of all the values in the column, divided by the count of those values.\n\nLearn more from the following resources:", + "links": [ + { + "title": "AVG", + "url": "https://www.sqlshack.com/sql-avg-function-introduction-and-examples/", + "type": "article" + }, + { + "title": "SQL AVG() Function", + "url": "https://www.w3schools.com/sql/sql_avg.asp", + "type": "article" + } + ] + }, + "bFEYMlqPZtTUYtDQxqHzT": { + "title": "MIN", + "description": "`MIN` is an aggregate function in SQL that returns the lowest value in a set of values. It works with numeric, date, or string data types, selecting the minimum value from a specified column. Often used in conjunction with `GROUP BY`, `MIN` can find the smallest value within each group. This function is useful for various data analysis tasks, such as identifying the lowest price, earliest date, or alphabetically first name in a dataset.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL MAX & MIN", + "url": "https://www.programiz.com/sql/min-and-max", + "type": "article" + } + ] + }, + "YqDJq3fPxUZlwsdq0kJg7": { + "title": "MAX", + "description": "`MAX` is an aggregate function in SQL that returns the highest value in a set of values. It can be used with numeric, date, or string data types, selecting the maximum value from a specified column. `MAX` is often used in combination with `GROUP` BY to find the highest value within each group. This function is useful for various data analysis tasks, such as finding the highest salary, the most recent date, or the alphabetically last name in a dataset.\n\nLearn more from the following resources:", + "links": [ + { + "title": "MAX", + "url": "https://www.techonthenet.com/sql/max.php", + "type": "article" + } + ] + }, + "Zw8IHfCCMSxmVjx5Ho5ff": { + "title": "GROUP BY", + "description": "GROUP BY is an SQL clause used in SELECT statements to arrange identical data into groups. It's typically used with aggregate functions (like COUNT, SUM, AVG) to perform calculations on each group of rows. GROUP BY collects data across multiple records and groups the results by one or more columns, allowing for analysis of data at a higher level of granularity. This clause is fundamental for generating summary reports, performing data analysis, and creating meaningful aggregations of data in relational databases.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL GROUP BY", + "url": "https://www.programiz.com/sql/group-by", + "type": "article" + } + ] + }, + "HhICJpCK5__b-itUoEBES": { + "title": "HAVING", + "description": "The `HAVING` clause is used in combination with the `GROUP BY` clause to filter the results of `GROUP BY`. It is used to mention conditions on the group functions, like `SUM`, `COUNT`, `AVG`, `MAX` or `MIN`.\n\nIt's important to note that where `WHERE` clause introduces conditions on individual rows, `HAVING` introduces conditions on groups created by the `GROUP BY` clause.\n\nAlso note, `HAVING` applies to summarized group records, whereas `WHERE` applies to individual records.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL HAVING Clause", + "url": "https://www.programiz.com/sql/having", + "type": "article" + } + ] + }, + "qBios3sZVhcJMpXmj9f7B": { + "title": "Data Constraints", + "description": "Data constraints in SQL are rules applied to columns or tables to enforce data integrity and consistency. They include primary key, foreign key, unique, check, and not null constraints. These constraints define limitations on the data that can be inserted, updated, or deleted in a database, ensuring that the data meets specific criteria and maintains relationships between tables. By implementing data constraints, database designers can prevent invalid data entry, maintain referential integrity, and enforce business rules directly at the database level.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Data Constraints", + "url": "https://www.w3schools.com/sql/sql_constraints.asp", + "type": "article" + } + ] + }, + "Jlwmyq6CUQeDAlL4dazOP": { + "title": "Primary Key", + "description": "A primary key is a special relational database table field (or combination of fields) designated to uniquely identify all table records.\n\nA primary key's main features are:\n\n* It must contain a unique value for each row of data.\n* It cannot contain null values.\n\nUsage of Primary Key\n--------------------\n\nYou define a primary key for a table using the `PRIMARY KEY` constraint. A table can have only one primary key. You can define a primary key in SQL when you create or modify a table.\n\nCreate Table With Primary Key\n-----------------------------\n\nIn SQL, you can create a table with a primary key by using `CREATE TABLE` syntax.\n\n CREATE TABLE Employees (\n ID INT PRIMARY KEY,\n NAME TEXT,\n AGE INT,\n ADDRESS CHAR(50)\n );\n \n\nIn this example, `ID` is the primary key which must consist of unique values and can't be null.\n\nModify Table to Add Primary Key\n-------------------------------\n\nIf you want to add a primary key to an existing table, you can use `ALTER TABLE` syntax.\n\n ALTER TABLE Employees\n ADD PRIMARY KEY (ID);\n \n\nThis will add a primary key to `ID` column in the `Employees` table.\n\nComposite Primary Key\n---------------------\n\nWe can also use multiple columns to define a primary key. Such key is known as composite key.\n\n CREATE TABLE Customers (\n CustomerID INT,\n StoreID INT,\n CONSTRAINT pk_CustomerID_StoreID PRIMARY KEY (CustomerID,StoreID)\n );\n \n\nIn this case, each combination of `CustomerID` and `StoreID` must be unique across the whole table.", + "links": [] + }, + "DHz6sRLYhFeCbAcNJS8hm": { + "title": "Foreign Key", + "description": "A foreign key in SQL is a column or group of columns in one table that refers to the primary key of another table. It establishes a link between two tables, enforcing referential integrity and maintaining relationships between related data. Foreign keys ensure that values in the referencing table correspond to valid values in the referenced table, preventing orphaned records and maintaining data consistency across tables. They are crucial for implementing relational database designs and supporting complex queries that join multiple tables.\n\nLearn more from the following resources:", + "links": [ + { + "title": "What is a foreign key?", + "url": "https://www.cockroachlabs.com/blog/what-is-a-foreign-key/", + "type": "article" + } + ] + }, + "5yGo8i7eplxtXOD_qfzOs": { + "title": "Unique", + "description": "The `UNIQUE` constraint ensures that all values in a column are different; that is, each value in the column should occur only once.\n\nBoth the `UNIQUE` and `PRIMARY KEY` constraints provide a guarantee for uniqueness for a column or set of columns. However, a primary key cannot contain `NULL` since it uniquely identifies each row, and each table can have only one primary key. On the other hand, a `UNIQUE` constraint allows for one `NULL` value, and a table can have multiple `UNIQUE` constraints.\n\nSyntax\n------\n\n CREATE TABLE table_name (\n column1 data_type UNIQUE,\n column2 data_type,\n column3 data_type,\n ....\n );\n \n\nHere, `UNIQUE` is the constraint's name, whereas `column1` and `data_type` refer to the column and data type for which we're setting the constraint, respectively.\n\nExample\n-------\n\nSuppose, for instance, we are creating a table named \"Employees\". We want the \"Email\" column to contain only unique values to avoid any duplication in email addresses.\n\nHere's how we can impose a `UNIQUE` constraint on the \"Email\" column:\n\n CREATE TABLE Employees (\n ID int NOT NULL,\n Name varchar (255) NOT NULL,\n Email varchar (255) UNIQUE\n );\n \n\nIn this SQL command, we are telling the SQL server that the \"Email\" column cannot have the same value in two or more rows.\n\nAdding a Unique Constraint to an Existing Table\n-----------------------------------------------\n\nTo add a `UNIQUE` constraint to an existing table, you would use the `ALTER TABLE` command. Here is the syntax:\n\n ALTER TABLE table_name\n ADD UNIQUE (column1, column2, ...);\n \n\nHere, `table_name` is the name of the table on which we're defining the constraint, and `column1`, `column2`, etc., are the names of the columns included in the constraint.\n\nDropping a Unique Constraint\n----------------------------\n\nThe `ALTER TABLE` command is also used to drop a `UNIQUE` constraint. The syntax to drop a `UNIQUE` constraint is:\n\n ALTER TABLE table_name\n DROP CONSTRAINT constraint_name;\n \n\nHere, `constraint_name` is the name of the `UNIQUE` constraint that you want to drop.", + "links": [] + }, + "M4M_-vjM9GNy0NmXZneDA": { + "title": "NOT NULL", + "description": "The `NOT NULL` constraint in SQL ensures that a column cannot have a NULL value. Thus, every row/record must contain a value for that column. It is a way to enforce certain fields to be mandatory while inserting records or updating records in a table.\n\nFor instance, if you're designing a table for employee data, you might want to ensure that the employee's `id` and `name` are always provided. In this case, you'd use the `NOT NULL` constraint.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL IS NULL and IS NOT NULL", + "url": "https://www.programiz.com/sql/is-null-not-null", + "type": "article" + } + ] + }, + "Q0h9Wfnl_W9ThOkv7Q17A": { + "title": "CHECK", + "description": "A `CHECK` constraint in SQL is used to enforce data integrity by specifying a condition that must be true for each row in a table. It allows you to define custom rules or restrictions on the values that can be inserted or updated in one or more columns. `CHECK` constraints help maintain data quality by preventing invalid or inconsistent data from being added to the database, ensuring that only data meeting specified criteria is accepted.\n\nLearn more from the following resources:", + "links": [ + { + "title": "CHECK - PostgreSQL", + "url": "https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-check/", + "type": "article" + } + ] + }, + "8V6yw7kLaow-VVcv_K_pL": { + "title": "JOIN Queries", + "description": "SQL `JOIN` queries combine rows from two or more tables based on a related column between them. There are several types of JOINs, including INNER JOIN (returns matching rows), `LEFT JOIN` (returns all rows from the left table and matching rows from the right), `RIGHT JOIN` (opposite of `LEFT JOIN`), and `FULL JOIN` (returns all rows when there's a match in either table). `JOIN`s are fundamental for working with relational databases, allowing users to retrieve data from multiple tables in a single query, establish relationships between tables, and perform complex data analysis across related datasets.\n\nLearn more from the following resources:", + "links": [ + { + "title": "7 SQL JOIN Examples With Detailed Explanations", + "url": "https://learnsql.com/blog/sql-join-examples-with-explanations/", + "type": "article" + } + ] + }, + "aaua13CkTxLOYXr8cAgPm": { + "title": "INNER JOIN", + "description": "An `INNER JOIN` in SQL is a type of join that returns the records with matching values in both tables. This operation compares each row of the first table with each row of the second table to find all pairs of rows that satisfy the join predicate.\n\nFew things to consider in case of `INNER JOIN`:\n\n* It is a default join in SQL. If you mention `JOIN` in your query without specifying the type, SQL considers it as an `INNER JOIN`.\n* It returns only the matching rows from both the tables.\n* If there is no match, the returned is an empty result.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL INNER JOIN", + "url": "https://www.w3schools.com/sql/sql_join_inner.asp", + "type": "article" + }, + { + "title": "SQL INNER JOIN Clause", + "url": "https://www.programiz.com/sql/inner-join", + "type": "article" + } + ] + }, + "X9cJJ8zLZCF2cOoqxwFfY": { + "title": "LEFT JOIN", + "description": "A `LEFT JOIN` in SQL returns all rows from the left (first) table and the matching rows from the right (second) table. If there's no match in the right table, `NULL` values are returned for those columns. This join type is useful when you want to see all records from one table, regardless of whether they have corresponding entries in another table. `LEFT JOIN`s are commonly used for finding missing relationships, creating reports that include all primary records, or when working with data where not all entries have corresponding matches in related tables.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL LEFT JOIN", + "url": "https://www.w3schools.com/sql/sql_join_left.asp", + "type": "article" + } + ] + }, + "shpgZkh1CLqUwjOaRtAFy": { + "title": "RIGHT JOIN", + "description": "The `RIGHT JOIN` keyword returns all records from the right table (table2), and the matched records from the left table (table1). If there is no match, the result is `NULL` on the left side.\n\nSyntax\n------\n\nBelow is the common syntax used for writing a `RIGHT JOIN`:\n\n SELECT column_name(s)\n FROM table1\n RIGHT JOIN table2\n ON table1.column_name = table2.column_name;\n \n\nExample\n-------\n\nConsider two tables:\n\n**Table \"Orders\":**\n\nOrderID\n\nCustomerID\n\nOrderDate\n\n1\n\n3\n\n2017/11/11\n\n2\n\n1\n\n2017/10/23\n\n3\n\n2\n\n2017/9/15\n\n4\n\n4\n\n2017/9/03\n\n**Table \"Customers\":**\n\nCustomerID\n\nCustomerName\n\nContactName\n\nCountry\n\n1\n\nAlfreds Futterkiste\n\nMaria Anders\n\nGermany\n\n2\n\nAna Trujillo Emparedados y helados\n\nAna Trujillo\n\nMexico\n\n3\n\nAntonio Moreno Taquería\n\nAntonio Moreno\n\nMexico\n\n5\n\nBerglunds snabbköp\n\nChristina Berglund\n\nSweden\n\nNow, we want to select all customers and any matching records in orders table. If there is no match, the result is null in order table:\n\n SELECT \n Customers.CustomerName, \n Orders.OrderID\n FROM \n Orders\n RIGHT JOIN \n Customers \n ON \n Orders.CustomerID = Customers.CustomerID;\n \n\n**Result:**\n\nCustomerName\n\nOrderID\n\nAlfreds Futterkiste\n\n2\n\nAna Trujillo Emparedados y helados\n\n3\n\nAntonio Moreno Taquería\n\n1\n\nBerglunds snabbköp\n\nNULL\n\nAround the Horn\n\nNULL\n\nBottom-Dollar Markets\n\nNULL\n\nAs you can see, the `RIGHT JOIN` keyword returned all the records from the Customers table and all matched records from the Orders table. For those customers who have no orders (like \"Berglunds snabbköp\"), the result is `NULL`.", + "links": [] + }, + "aS5zCyJRA779yHF0G2pje": { + "title": "FULL OUTER JOIN", + "description": "A `FULL OUTER JOIN` in SQL combines the results of both `LEFT` and `RIGHT OUTER JOIN`s. It returns all rows from both tables, matching records where the join condition is met and including unmatched rows from both tables with `NULL` values in place of missing data. This join type is useful when you need to see all data from both tables, regardless of whether there are matching rows, and is particularly valuable for identifying missing relationships or performing data reconciliation between two tables.\n\nLearn more from the following resources:", + "links": [ + { + "title": "FULL OUTER JOIN", + "url": "https://www.w3schools.com/sql/sql_join_full.asp", + "type": "article" + } + ] + }, + "6qG0AVYd6Y1B8LOSDoMX9": { + "title": "Self Join", + "description": "A `SELF JOIN` is a standard SQL operation where a table is joined to itself. This might sound counter-intuitive, but it's actually quite useful in scenarios where comparison operations need to be made within a table. Essentially, it is used to combine rows with other rows in the same table when there's a match based on the condition provided.\n\nIt's important to note that, since it's a join operation on the same table, alias(es) for table(s) must be used to avoid confusion during the join operation.\n\nSyntax of a Self Join\n---------------------\n\nHere is the basic syntax for a `SELF JOIN` statement:\n\n SELECT a.column_name, b.column_name\n FROM table_name AS a, table_name AS b\n WHERE a.common_field = b.common_field;\n \n\nIn this query:\n\n* `table_name`: is the name of the table to join to itself.\n* `a` and `b`: are different aliases for the same table.\n* `column_name`: specify the columns that should be returned as a result of the SQL `SELF JOIN` statement.\n* `WHERE a.common_field = b.common_field`: is the condition for the join.\n\nExample of a Self Join\n----------------------\n\nLet us consider a `EMPLOYEES` table with the following structure:\n\nEmployeeID\n\nName\n\nManagerID\n\n1\n\nSam\n\nNULL\n\n2\n\nAlex\n\n1\n\n3\n\nJohn\n\n1\n\n4\n\nSophia\n\n2\n\n5\n\nEmma\n\n2\n\nIf you want to find out all the employees and who their manager is, you can do so using a `SELF JOIN`:\n\n SELECT a.Name AS Employee, b.Name AS Manager\n FROM EMPLOYEES a, EMPLOYEES b\n WHERE a.ManagerID = b.EmployeeID;\n \n\nThis query will return the name of each employee along with the name of their respective manager.", + "links": [] + }, + "7ow6tiSSCnTpv_GYQU017": { + "title": "Cross Join", + "description": "The cross join in SQL is used to combine every row of the first table with every row of the second table. It's also known as the Cartesian product of the two tables. The most important aspect of performing a cross join is that it does not require any condition to join.\n\nThe issue with cross join is it returns the Cartesian product of the two tables, which can result in large numbers of rows and heavy resource usage. It's hence critical to use them wisely and only when necessary.\n\nLearn more from the following resources:", + "links": [ + { + "title": "CROSS JOIN", + "url": "https://www.w3schools.com/mysql/mysql_join_cross.asp", + "type": "article" + } + ] + }, + "86iZ8s8EdhSuYwgwAM_EO": { + "title": "Subqueries", + "description": "In SQL, a subquery is a query embedded within another SQL query. You can alternately call it a nested or an inner query. The containing query is often referred to as the outer query. Subqueries are utilized to retrieve data that will be used in the main query as a condition to further restrict the data to be retrieved.\n\nSubqueries can be used in various parts of a query, including:\n\n* **SELECT** statement\n* **FROM** clause\n* **WHERE** clause\n* **GROUP BY** clause\n* **HAVING** clause\n\nSyntax\n------\n\nIn general, the syntax can be written as:\n\n SELECT column_name [, column_name]\n FROM table1 [, table2 ]\n WHERE column_name OPERATOR\n (SELECT column_name [, column_name]\n FROM table1 [, table2 ]\n [WHERE])\n \n\nTypes of Subqueries\n-------------------\n\n1. **Scalar Subquery**: It returns single value.\n \n SELECT name \n FROM student \n WHERE roll_id = (SELECT roll_id FROM student WHERE name='John');\n \n \n2. **Row subquery**: It returns a single row or multiple rows of two or more values.\n \n SELECT * FROM student \n WHERE (roll_id, age)=(SELECT MIN(roll_id),MIN(age) FROM student);\n \n \n3. **Column subquery**: It returns single column value with multiple rows and one column.\n \n SELECT name, age FROM student \n WHERE name in (SELECT name FROM student);\n \n \n4. **Table subquery**: It returns more than one row and more than one column.\n \n SELECT name, age \n FROM student \n WHERE (name, age) IN (SELECT name, age FROM student);\n \n \n\nGeneral Note\n------------\n\nSubqueries can be either correlated or uncorrelated. A correlated subquery is a subquery that uses values from the outer query. Conversely, an uncorrelated subquery is a subquery that can be run independently of the outer query.", + "links": [] + }, + "eXQ-TrTlqL5p2AdGnozkL": { + "title": "Scalar", + "description": "In SQL, a scalar type is a type that holds a single value as opposed to composite types that hold multiple values. In simpler terms, scalar types represent a single unit of data.\n\nSome common examples of scalar types in SQL include:\n\n* Integers (`INT`)\n* Floating-point numbers (`FLOAT`)\n* Strings (`VARCHAR`, `CHAR`)\n* Date and Time (`DATE`, `TIME`)\n* Boolean (`BOOL`)\n\nExamples\n--------\n\nHere is how you can define different scalar types in SQL:\n\nIntegers\n--------\n\nAn integer can be defined using the INT type. Here is an example of how to declare an integer:\n\n CREATE TABLE Employees (\n EmployeeID INT,\n FirstName VARCHAR(50),\n LastName VARCHAR(50)\n );\n \n\nFloating-Point Numbers\n----------------------\n\nFloating-point numbers can be defined using the FLOAT or REAL type. Here is an example of how to declare a floating-point number:\n\n CREATE TABLE Products (\n ProductID INT,\n Price FLOAT\n );\n \n\nStrings\n-------\n\nStrings can be defined using the CHAR, VARCHAR, or TEXT type. Here is an example of how to declare a string:\n\n CREATE TABLE Employees (\n EmployeeID INT,\n FirstName VARCHAR(50), \n LastName VARCHAR(50) \n );\n \n\nDate and Time\n-------------\n\nThe DATE, TIME or DATETIME type can be used to define dates and times:\n\n CREATE TABLE Orders (\n OrderID INT,\n OrderDate DATE\n );\n \n\nBoolean\n-------\n\nBooleans can be declared using the BOOL or BOOLEAN type. They hold either `TRUE` or `FALSE`.\n\n CREATE TABLE Employees (\n EmployeeID INT,\n IsActive BOOL\n );\n \n\nRemember, the way these types are declared might slightly differ based on the SQL dialect you are using. It's crucial to refer to the specific documentation of the SQL flavor you're working with for the precise syntax and behavior.", + "links": [] + }, + "wmtt-3auWLdQWuVdwZLPd": { + "title": "Column", + "description": "In SQL, columns are used to categorize the data in a table. A column serves as a structure that stores a specific type of data (ints, str, bool, etc.) in a table. Each column in a table is designed with a type, which configures the data that it can hold. Using the right column types and size can help to maintain data integrity and optimize performance.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL Column", + "url": "https://www.w3schools.com/sql/sql_ref_column.asp", + "type": "article" + }, + { + "title": "Column Types - PostgreSQL", + "url": "https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-data-types/", + "type": "article" + } + ] + }, + "aLDl75i8gtLRA2Ud-fMmQ": { + "title": "Row", + "description": "In SQL, a \"row\" refers to a record in a table. Each row in a table represents a set of related data, and every row in the table has the same structure.\n\nFor instance, in a table named \"customers\", a row may represent one customer, with columns containing information like ID, name, address, email, etc.\n\nHere is a conceptual SQL table:\n\nID\n\nNAME\n\nADDRESS\n\nEMAIL\n\n1\n\nJohn\n\nNY\n\n[john@example.com](mailto:john@example.com)\n\n2\n\nJane\n\nLA\n\n[jane@example.com](mailto:jane@example.com)\n\n3\n\nJim\n\nChicago\n\n[jim@example.com](mailto:jim@example.com)\n\nEach of these line of data is referred to as a 'row' in the SQL table.\n\nTo select a row, you would use a `SELECT` statement. Here's an example of how you might select a row:\n\n SELECT * \n FROM customers \n WHERE ID = 1;\n \n\nThis would output:\n\nID\n\nName\n\nADDRESS\n\nEmail\n\n1\n\nJohn\n\nNY\n\n[john@example.com](mailto:john@example.com)\n\nThe `*` in the statement refers to all columns. If you want to only select specific columns, you can replace `*` with the column name(s):\n\n SELECT NAME, EMAIL\n FROM customers \n WHERE ID = 1;\n \n\nIn this case, the output would be:\n\nName\n\nEmail\n\nJohn\n\n[john@example.com](mailto:john@example.com)", + "links": [] + }, + "R9WDMRd-3wxsKH97-sT3n": { + "title": "Table", + "description": "In SQL, a table is a collection of related data held in a structured format within a database. It consists of rows (records) and columns (fields).\n\nA table is defined by its name and the nature of data it will hold, i.e., each field has a name and a specific data type.\n\nTable Creation\n--------------\n\nYou can create a table using the `CREATE TABLE` SQL statement. The syntax is as follows:\n\n CREATE TABLE table_name (\n column1 datatype,\n column2 datatype,\n column3 datatype,\n ....\n ); \n \n\nHere, `table_name` is the name of the table, `column1`, `column2`... are the names of the columns, and `datatype` specifies the type of data the column can hold (e.g., varchar, integer, date, etc.).\n\nTable Manipulation\n------------------\n\nOnce a table has been created, the `INSERT INTO` statement is used to insert new rows of data into the table.\n\n INSERT INTO table_name (column1, column2, column3,...)\n VALUES (value1, value2, value3,...); \n \n\nThe `SELECT` statement is used to select data from the table.\n\n SELECT column1, column2,...\n FROM table_name;\n \n\nThe `UPDATE` statement is used to modify existing records.\n\n UPDATE table_name\n SET column1 = value1, column2 = value2,...\n WHERE condition;\n \n\nAnd, finally, the `DELETE` statement is used to delete existing records.\n\n DELETE FROM table_name WHERE condition;\n \n\nThese basic operations allow for full manipulation of tables in SQL, letting users to manage their data effectively.", + "links": [] + }, + "xkPJ2MYiXmzC4yqQWyB_7": { + "title": "Nested Subqueries", + "description": "In SQL, a subquery is a query that is nested inside a main query. If a subquery is nested inside another subquery, it is called a nested subquery. They can be used in SELECT, INSERT, UPDATE, or DELETE statements or inside another subquery.\n\nNested subqueries can get complicated quickly, but they are essential for performing complex database tasks.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Nested Subqueries", + "url": "https://www.studysmarter.co.uk/explanations/computer-science/databases/nested-subqueries-in-sql/", + "type": "article" + } + ] + }, + "JZqS3Xapw6mfSPVgFW7av": { + "title": "Correlated Subqueries", + "description": "In SQL, a correlated subquery is a subquery that uses values from the outer query in its `WHERE` clause. The correlated subquery is evaluated once for each row processed by the outer query. It exists because it depends on the outer query and it cannot execute independently of the outer query because the subquery is correlated with the outer query as it uses its column in its `WHERE` clause.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Correlated Subqueries", + "url": "https://dev.mysql.com/doc/refman/8.4/en/correlated-subqueries.html", + "type": "article" + } + ] + }, + "vTMd0bqz4eTgLnhfgY61h": { + "title": "Advanced Functions", + "description": "Advanced SQL functions enable more sophisticated data manipulation and analysis within databases, offering powerful tools for complex queries. Key areas include:\n\n* **String Functions**: Manipulate text data using functions like `CONCAT`, `SUBSTRING`, and `REPLACE` to combine, extract, or modify strings.\n* **Date & Time**: Manage temporal data with functions like `DATEADD`, `DATEDIFF`, and `FORMAT`, allowing for calculations and formatting of dates and times.\n* **Numeric Functions**: Perform advanced calculations using functions such as `ROUND`, `FLOOR`, and `CEIL`, providing precision in numerical data processing.\n* **Conditional**: Implement logic within queries using functions like `CASE`, `COALESCE`, and `NULLIF` to control data flow and handle conditional scenarios.", + "links": [] + }, + "o2SH4iQn1Ap2yDZ7cVYLO": { + "title": "FLOOR", + "description": "The SQL `FLOOR` function is used to round down any specific decimal or numeric value to its nearest whole integer. The returned number will be less than or equal to the number given as an argument.\n\nOne important aspect to note is that the `FLOOR` function's argument must be a number and it always returns an integer.\n\nLearn more from the following resources:", + "links": [ + { + "title": "FLOOR", + "url": "https://www.w3schools.com/sql/func_sqlserver_floor.asp", + "type": "article" + } + ] + }, + "6vYFb_D1N_-tLWZftL-Az": { + "title": "ABS", + "description": "The `ABS()` function in SQL returns the absolute value of a given numeric expression, meaning it converts any negative number to its positive equivalent while leaving positive numbers unchanged. This function is useful when you need to ensure that the result of a calculation or a value stored in a database column is non-negative, such as when calculating distances, differences, or other metrics where only positive values make sense. For example, `SELECT ABS(-5)` would return `5`.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How to compute an absolute value in SQL", + "url": "https://www.airops.com/sql-guide/how-to-compute-an-absolute-value-in-sql", + "type": "article" + }, + { + "title": "ABS", + "url": "https://www.w3schools.com/sql/func_sqlserver_abs.asp", + "type": "article" + } + ] + }, + "OUw--8zEq6lk5-6oySVHe": { + "title": "MOD", + "description": "The `MOD` function in SQL calculates the remainder when one number is divided by another. It takes two arguments: the dividend and the divisor. `MOD` returns the remainder of the division operation, which is useful for various mathematical operations, including checking for odd/even numbers, implementing cyclic behaviors, or distributing data evenly. The syntax and exact behavior may vary slightly between different database systems, with some using the % operator instead of the `MOD` keyword.\n\nLearn more from the following resources:", + "links": [ + { + "title": "MOD", + "url": "https://www.w3schools.com/sql/func_mysql_mod.asp", + "type": "article" + } + ] + }, + "9DntFiZV1AyaRPhYP5q6u": { + "title": "ROUND", + "description": "The `ROUND` function in SQL is used to round a numeric field to the nearest specified decimal or integer.\n\nMost usually, `ROUND` accepts two arguments. The first one is the value that needs to be rounded, and the second is the number of decimal places to which the first argument will be rounded off. When dealing with decimals, SQL will round up when the number after the decimal point is 5 or higher, whereas it will round down if it's less than 5.\n\nSyntax\n------\n\nThe basic syntax for `ROUND` can be described as follows:\n\n ROUND ( numeric_expression, length [ , function ] )\n \n\n* `numeric_expression`: A floating point number to round.\n* `length`: The precision to which `numeric_expression` is to be rounded. When `length` is a positive number, rounding affects the right side of the decimal point. If `length` is negative, rounding affects the left side of the decimal point.\n* `function`: Optional parameter to determine the operation to perform. If this is omitted or 0, the `numeric_expression` is rounded. If this is 1, the `numeric_expression` is truncated.\n\nExample 1:\n----------\n\nRound off a decimal to the nearest whole number.\n\n SELECT ROUND(125.215);\n \n\nThis will result in `125`.\n\nExample 2:\n----------\n\nRound off a number to a specified decimal place.\n\n SELECT ROUND(125.215, 1);\n \n\nThis will result in `125.2` as the second decimal place (5) is less than 5.\n\nExample 3:\n----------\n\nRound off the left side of the decimal.\n\n SELECT ROUND(125.215, -2);\n \n\nThis will result in `100` as rounding now affects digits before the decimal point.\n\nWhenever you need to round off numeric data in SQL, the `ROUND` function is a valuable tool to have in your kit. It proficiently handles both positive and negative rounding, and its simple syntax makes it extremely user-friendly.", + "links": [] + }, + "BAqJQvcguhIhzyII5LRH6": { + "title": "CEILING", + "description": "The `CEILING()` function in SQL returns the smallest integer greater than or equal to a given numeric value. It's useful when you need to round up a number to the nearest whole number, regardless of whether the number is already an integer or a decimal. For example, `CEILING(4.2)` would return `5`, and `CEILING(-4.7)` would return `-4`. This function is commonly used in scenarios where rounding up is necessary, such as calculating the number of pages needed to display a certain number of items when each page has a fixed capacity.\n\nLearn more from the following resources:", + "links": [ + { + "title": "CEILING Function in SQL", + "url": "https://www.javatpoint.com/ceiling-function-in-sql", + "type": "article" + } + ] + }, + "5inpEqafeVCfqsURHzQQg": { + "title": "CONCAT", + "description": "`CONCAT` is an SQL function used to combine two or more strings into a single string. It takes multiple input strings as arguments and returns a new string that is the concatenation of all the input strings in the order they were provided. `CONCAT` is commonly used in `SELECT` statements to merge data from multiple columns, create custom output formats, or generate dynamic SQL statements.\n\nLearn more from the following resources:", + "links": [ + { + "title": "An overview of the CONCAT function in SQL", + "url": "https://www.sqlshack.com/an-overview-of-the-concat-function-in-sql-with-examples/", + "type": "article" + } + ] + }, + "RH8DLiQpDUWqw3U1522q5": { + "title": "LENGTH", + "description": "The `LENGTH` function in SQL returns the number of characters in a string. It's used to measure the size of text data, which can be helpful for data validation, formatting, or analysis. In some database systems, `LENGTH` may count characters differently for multi-byte character sets. Most SQL dialects support `LENGTH`, but some may use alternative names like LEN (in SQL Server) or `CHAR_LENGTH`. This function is particularly useful for enforcing character limits, splitting strings, or identifying anomalies in string data.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How to Check the Length of a String in SQL", + "url": "https://learnsql.com/cookbook/how-to-check-the-length-of-a-string-in-sql/", + "type": "article" + } + ] + }, + "PnG_5D6q66NAKxXVOwA6N": { + "title": "SUBSTRING", + "description": "The SQL `SUBSTRING` function is used to extract a part of a string, where you can specify the start position and the length of the text. This function can be very beneficial when you only need a specific part of a string.\n\nSyntax\n------\n\nThe standardized SQL syntax for `SUBSTRING` is as follows:\n\n SUBSTRING(string, start, length)\n \n\nWhere:\n\n* `string` is the source string from which you want to extract.\n* `start` is the position to start extraction from. The first position in the string is always 1.\n* `length` is the number of characters to extract.\n\nUsage\n-----\n\nFor instance, if you want to extract the first 5 characters from the string 'Hello World':\n\n SELECT SUBSTRING('Hello World', 1, 5) as ExtractedString;\n \n\nResult:\n\n | ExtractedString |\n | --------------- |\n | Hello |\n \n\nYou can also use `SUBSTRING` on table columns, like so:\n\n SELECT SUBSTRING(column_name, start, length) FROM table_name;\n \n\nSUBSTRING with FROM and FOR\n---------------------------\n\nIn some database systems (like PostgreSQL and SQL Server), the `SUBSTRING` function uses a different syntax:\n\n SUBSTRING(string FROM start FOR length)\n \n\nThis format functions the same way as the previously mentioned syntax.\n\nFor example:\n\n SELECT SUBSTRING('Hello World' FROM 1 FOR 5) as ExtractedString;\n \n\nThis would yield the same result as the previous example - 'Hello'.\n\nNote\n----\n\nSQL is case-insensitive, meaning `SUBSTRING`, `substring`, and `Substring` will all function the same way.", + "links": [] + }, + "VNbb3YPc0FtrROylRns8h": { + "title": "REPLACE", + "description": "You can use the `REPLACE()` function in SQL to substitute all occurrences of a specified string.\n\n**Synopsis**\n\n`REPLACE(input_string, string_to_replace, replacement_string)`\n\n**Parameters**\n\n* `input_string`: This is the original string where you want to replace some characters.\n* `string_to_replace`: This is the string that will be searched for in the original string.\n* `replacement_string`: This is the string that will replace the `string_to_replace` in the original string.\n\nThe `REPLACE()` function is handy when it comes to manipulating and modifying data in various ways, particularly when used in combination with other SQL data-manipulation functions.\n\n**Examples**\n\nSuppose we have the following table, `Employees`:\n\nEmpId\n\nEmpName\n\n1\n\nJohn Doe\n\n2\n\nJane Doe\n\n3\n\nJim Smith Doe\n\n4\n\nJennifer Doe Smith\n\nHere's how you can use the `REPLACE()` function:\n\n SELECT EmpId, EmpName,\n REPLACE(EmpName, 'Doe', 'Roe') as ModifiedName\n FROM Employees;\n \n\nAfter the execution of the above SQL, we will receive:\n\nEmpId\n\nEmpName\n\nModifiedName\n\n1\n\nJohn Doe\n\nJohn Roe\n\n2\n\nJane Doe\n\nJane Roe\n\n3\n\nJim Smith Doe\n\nJim Smith Roe\n\n4\n\nJennifer Doe Smith\n\nJennifer Roe Smith\n\nYou can see that all occurrences of 'Doe' are replaced with 'Roe'.", + "links": [] + }, + "Othfo7NvTVzfyL906PLM1": { + "title": "UPPER", + "description": "`UPPER()` is a built-in string function in SQL. As the name suggests, it is used to convert all letters in a specified string to uppercase. If the string already consists of all uppercase characters, the function will return the original string.\n\nSyntax for this function is:\n\n UPPER(string)\n \n\nHere 'string' can be a string value or a column of a table of string(s) type.\n\nLet's assume a table 'students' with column 'name' as below:\n\nname\n\nJohn Doe\n\nJane Smith\n\nKelly Will\n\nIf we want all the names in uppercase, we'll use `UPPER()` function as:\n\n SELECT UPPER(name) as 'Upper Case Name' FROM students;\n \n\nAnd we will get:\n\nUpper Case Name\n\nJOHN DOE\n\nJANE SMITH\n\nKELLY WILL\n\nSo, `UPPER()` function helps us to bring an entire string to uppercase for easier comparison and sorting.", + "links": [] + }, + "knTG6pAq2mYP24WMa29xI": { + "title": "LOWER", + "description": "The `LOWER` function in SQL converts all characters in a specified string to lowercase. It's a string manipulation function that takes a single argument (the input string) and returns the same string with all alphabetic characters converted to their lowercase equivalents. `LOWER` is useful for standardizing data, making case-insensitive comparisons, or formatting output. It doesn't affect non-alphabetic characters or numbers in the string. `LOWER` is commonly used in data cleaning, search operations, and ensuring consistent data representation across different systems.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How to change text to lowercase in SQL", + "url": "https://learnsql.com/cookbook/how-to-change-text-to-lowercase-in-sql/", + "type": "article" + } + ] + }, + "W2ePJHdfEiEJ3ZKoRQKt_": { + "title": "CASE", + "description": "The CASE statement in SQL is used to create conditional logic within a query, allowing you to perform different actions based on specific conditions. It operates like an if-else statement, returning different values depending on the outcome of each condition. The syntax typically involves specifying one or more WHEN conditions, followed by the result for each condition, and an optional ELSE clause for a default outcome if none of the conditions are met.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL CASE Expression", + "url": "https://www.w3schools.com/sql/sql_case.asp", + "type": "article" + }, + { + "title": "SQL CASE - Intermediate SQL", + "url": "https://mode.com/sql-tutorial/sql-case", + "type": "article" + } + ] + }, + "KI6vngoYcHsnpIk8ErhhS": { + "title": "NULLIF", + "description": "`NULLIF` is an SQL function that compares two expressions and returns NULL if they are equal, otherwise it returns the first expression. It's particularly useful for avoiding division by zero errors or for treating specific values as `NULL` in calculations or comparisons. `NULLIF` takes two arguments and is often used in combination with aggregate functions or in `CASE` statements to handle special cases in data processing or reporting.\n\nLearn more from the following resources:", + "links": [ + { + "title": "NULLIF", + "url": "https://www.w3schools.com/sql/func_sqlserver_nullif.asp", + "type": "article" + } + ] + }, + "k7lZe4QRt9q4InUImFmvx": { + "title": "COALESCE", + "description": "`COALESCE` is an SQL function that returns the first non-null value in a list of expressions. It's commonly used to handle null values or provide default values in queries. `COALESCE` evaluates its arguments in order and returns the first non-null result, making it useful for data cleaning, report generation, and simplifying complex conditional logic in SQL statements.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How to use the COALESCE function in SQL", + "url": "https://learnsql.com/blog/coalesce-function-sql/", + "type": "article" + }, + { + "title": "COALESCE - PostgreSQL", + "url": "https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-coalesce/", + "type": "article" + } + ] + }, + "Ivqo2wa-_NhGU3vGd0pUI": { + "title": "DATE", + "description": "The DATE data type in SQL is used to store calendar dates (typically in the format YYYY-MM-DD). It represents a specific day without any time information. DATE columns are commonly used for storing birthdates, event dates, or any other data that requires only day-level precision. SQL provides various functions to manipulate and format DATE values, allowing for date arithmetic, extraction of date components, and comparison between dates. The exact range of valid dates may vary depending on the specific database management system being used.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL DATE", + "url": "https://www.w3schools.com/sql/sql_dates.asp", + "type": "article" + } + ] + }, + "88KlrMqSza9_YaD7Dv61p": { + "title": "TIME", + "description": "In SQL, TIME data type is used to store time values in the database. It allows you to store hours, minutes, and seconds. The format of a TIME is 'HH:MI:SS'.\n\nSyntax\n------\n\nHere is the basic syntax to create a field with TIME data type in SQL:\n\n CREATE TABLE table_name (\n column_name TIME\n );\n \n\nYou can store data using the following syntax:\n\n INSERT INTO table_name (column_name) values ('17:34:20');\n \n\nRange\n-----\n\nThe time range in SQL is '00:00:00' to '23:59:59'.\n\nFetching Data\n-------------\n\nTo fetch the data you can use the SELECT statement. For example:\n\n SELECT column_name FROM table_name;\n \n\nIt will return the time values from the table.\n\nFunctions\n---------\n\nSQL provides several functions to work with the TIME data type. Some of them include:\n\nCURTIME()\n---------\n\nReturn the current time.\n\n SELECT CURTIME();\n \n\nADDTIME()\n---------\n\nAdd time values.\n\n SELECT ADDTIME('2007-12-31 23:59:59','1 1:1:1');\n \n\nTIMEDIFF()\n----------\n\nSubtract time values.\n\n SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:01:01');\n \n\nConversion\n----------\n\nConversion of TIME data type is also possible in SQL. It can be converted into other data types, like INT, and vice versa. Here is a conversion example of TIME to INT:\n\n SELECT TIME_TO_SEC('22:23:00');\n \n\nThis was a brief summary about \"TIME\" in SQL.", + "links": [] + }, + "7hEqkoxkdAWmakGZsMJx-": { + "title": "TIMESTAMP", + "description": "SQL `TIMESTAMP` is a data type that allows you to store both date and time. It is typically used to track updates and changes made to a record, providing a chronological time of happenings.\n\nDepending on the SQL platform, the format and storage size can slightly vary. For instance, MySQL uses the 'YYYY-MM-DD HH:MI:SS' format and in PostgreSQL, it's stored as a 'YYYY-MM-DD HH:MI:SS' format but it additionally can store microseconds.\n\nHere is how you can define a column with a `TIMESTAMP` type in an SQL table:\n\n CREATE TABLE table_name (\n column1 TIMESTAMP,\n column2 VARCHAR(100),\n ...\n );\n \n\nA common use-case of `TIMESTAMP` is to have an automatically updated timestamp each time the row is updated. This can be achieved by setting the `DEFAULT` constraint to `CURRENT_TIMESTAMP`:\n\n CREATE TABLE table_name (\n column1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n column2 VARCHAR(100),\n ...\n );\n \n\nIn MySQL, `ON UPDATE CURRENT_TIMESTAMP` can be used to automatically update the `TIMESTAMP` field to the current date and time whenever there is any change in other fields of the row.\n\n CREATE TABLE table_name (\n column1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n column2 VARCHAR(100),\n ...\n );\n \n\nYou can also insert or update records with a specific timestamp:\n\n INSERT INTO table_name (column1, column2) VALUES ('2019-06-10 10:20:30', 'example data');\n \n UPDATE table_name SET column1 = '2020-07-20 15:30:45' WHERE column2 = 'example data';\n \n\nRemember that the format of the date and time you enter must correspond to the format used by the SQL platform you are using.", + "links": [] + }, + "BJ4fQvagTO0B5UtXblyx8": { + "title": "DATEPART", + "description": "`DATEPART` is a useful function in SQL that allows you to extract a specific part of a date or time field. You can use it to get the year, quarter, month, day of the year, day, week, weekday, hour, minute, second, or millisecond from any date or time expression.\n\nLearn more from the following resources:", + "links": [ + { + "title": "DATEPART", + "url": "https://www.w3schools.com/sql/func_sqlserver_datepart.asp", + "type": "article" + } + ] + }, + "1E1WdWOyqxbbdiIbw26dZ": { + "title": "DATEADD", + "description": "`DATEADD` is an SQL function used to add or subtract a specified time interval to a date or datetime value. It typically takes three arguments: the interval type (e.g., day, month, year), the number of intervals to add or subtract, and the date to modify. This function is useful for date calculations, such as finding future or past dates, calculating durations, or generating date ranges. The exact syntax and name of this function may vary slightly between different database management systems (e.g., `DATEADD` in SQL Server, `DATE_ADD` in MySQL).\n\nLearn more from the following resources:", + "links": [ + { + "title": "DATEADD", + "url": "https://www.mssqltips.com/sqlservertutorial/9380/sql-dateadd-function/", + "type": "article" + } + ] + }, + "2tyezwOIxV6O84N-Q3Awh": { + "title": "Views", + "description": "SQL views are virtual tables that do not store data directly. They are essentially a saved SQL query and can pull data from multiple tables or just present the data from one table in a different way.\n\nCreating Views\n--------------\n\nYou can create a view using the `CREATE VIEW` statement. In the following example, a new view named `CustomerView` is created which contains customer's ID, name, and address from the `Customers` table:\n\n CREATE VIEW CustomerView AS\n SELECT CustomerID, Name, Address\n FROM Customers;\n \n\nQuerying Views\n--------------\n\nAfter a view has been created, it can be used in the `FROM` clause of a `SELECT` statement, as if it's an actual table. For instance, to select all from `CustomerView`:\n\n SELECT *\n FROM CustomerView;\n \n\nUpdating Views\n--------------\n\nThe `CREATE OR REPLACE VIEW` statement is used to update a view. Consider the `CustomerView` we created earlier. If we want to include the customer's phone, we can update it as follows:\n\n CREATE OR REPLACE VIEW CustomerView AS\n SELECT CustomerID, Name, Address, Phone\n FROM Customers;\n \n\nDropping Views\n--------------\n\nTo delete a view, use the `DROP VIEW` statement:\n\n DROP VIEW CustomerView;\n \n\nKeep in mind that not all database systems support the `CREATE OR REPLACE VIEW` statement. Also, the updatability of a view depends on whether it includes functions, expressions, or multiple tables. Some databases might not let you update a view at all.\n\nRestrictions\n------------\n\nThere are a few restrictions to bear in mind when working with views. SQL views can't:\n\n* Contain a `ORDER BY` clause in the view definition\n* Be indexed\n* Have triggers or default values\n\nEach database may have its own specific limitations and capabilities with using views, so always refer to the official documentation for more information.\n\nNote: The above examples use a hypothetical `Customers` table. Replace this with your actual table name when trying these in your environment.", + "links": [] + }, + "PcsGK4VBh0zNQIPZvNES4": { + "title": "Creating Views", + "description": "Creating views in SQL involves using the `CREATE VIEW` statement to define a virtual table based on the result of a `SELECT` query. Views don't store data themselves but provide a way to present data from one or more tables in a specific format. They can simplify complex queries, enhance data security by restricting access to underlying tables, and provide a consistent interface for querying frequently used data combinations. Views can be queried like regular tables and are often used to encapsulate business logic or present data in a more user-friendly manner.\n\nLearn more from the following resources:", + "links": [ + { + "title": "How to create a view in SQL", + "url": "https://www.sqlshack.com/how-to-create-a-view-in-sql-server/", + "type": "article" + }, + { + "title": "SQL Views in 4 minutes", + "url": "https://www.youtube.com/watch?v=vLLkNI-vkV8", + "type": "video" + } + ] + }, + "3eE-l-P93nOXoWfLr8PSW": { + "title": "Modifying Views", + "description": "In SQL, you can modify a `VIEW` in two ways:\n\n* Using `CREATE` OR `REPLACE VIEW`: This command helps you modify a VIEW but keeps the VIEW name intact. This is beneficial when you want to change the definition of the `VIEW` but do not want to change the VIEW name.\n \n* Using the `DROP VIEW` and then `CREATE VIEW`: In this method, you first remove the `VIEW` using the `DROP VIEW` command and then recreate the view using the new definition with the `CREATE VIEW` command.\n \n\nLearn more from the following resources:", + "links": [ + { + "title": "Modify Views in SQL Server", + "url": "https://www.sqlshack.com/create-view-sql-modifying-views-in-sql-server/", + "type": "article" + } + ] + }, + "MIOuWWcCjLAmgzog2DBC3": { + "title": "Dropping Views", + "description": "Dropping views in SQL involves using the `DROP VIEW` statement to remove an existing view from the database. This operation permanently deletes the view definition, but it doesn't affect the underlying tables from which the view was created. Dropping a view is typically done when the view is no longer needed, needs to be replaced with a different definition, or as part of database maintenance. It's important to note that dropping a view can impact other database objects or applications that depend on it, so caution should be exercised when performing this operation.\n\nLearn more from the following resources:", + "links": [ + { + "title": "DROP VIEW", + "url": "https://study.com/academy/lesson/sql-drop-view-tutorial-overview.html", + "type": "article" + } + ] + }, + "LcljR70T-OnzSrJJDqOWf": { + "title": "Indexes", + "description": "Indexes in SQL are database objects that improve the speed of data retrieval operations on database tables. They work similarly to book indexes, providing a quick lookup mechanism for finding rows with specific column values. Indexes create a separate data structure that allows the database engine to locate data without scanning the entire table. While they speed up `SELECT` queries, indexes can slow down `INSERT`, `UPDATE`, and `DELETE` operations because the index structure must be updated. Proper index design is crucial for optimizing database performance, especially for large tables or frequently queried columns.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Create SQL Index Statement", + "url": "https://www.w3schools.com/sql/sql_create_index.asp", + "type": "article" + } + ] + }, + "NtxGd6Vx-REBclry7lZuE": { + "title": "Managing Indexes", + "description": "Managing indexes in SQL involves creating, modifying, and dropping indexes to optimize database performance. This process includes identifying columns that benefit from indexing (frequently queried or used in JOIN conditions), creating appropriate index types (e.g., single-column, composite, unique), and regularly analyzing index usage and effectiveness. Database administrators must balance the improved query performance that indexes provide against the overhead they introduce for data modification operations. Proper index management also includes periodic maintenance tasks like rebuilding or reorganizing indexes to maintain their efficiency as data changes over time.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL Server Indexes", + "url": "https://www.sqlservercentral.com/articles/sql-server-indexes", + "type": "article" + } + ] + }, + "Ps9Yv2s-bKvEegGAbPsiA": { + "title": "Query Optimization", + "description": "Query optimization is a function of SQL that involves tuning and optimizing a SQL statement so that the system executes it in the fastest and most efficient way possible. It includes optimizing the costs of computation, communication, and disk I/O.\n\nThe primary approaches of query optimization involve the following:\n\nRewriting Queries\n-----------------\n\nThis means changing the original SQL query to an equivalent one which requires fewer system resources. It's usually done automatically by the database system.\n\nFor instance, let's say we have a query as follows:\n\n SELECT * \n FROM Customers \n WHERE state = 'New York' AND city = 'New York';\n \n\nThe above query can be rewritten using a subquery for better optimization:\n\n SELECT * \n FROM Customers \n WHERE state = 'New York' \n AND city IN (SELECT city \n FROM Customers \n WHERE city = 'New York');\n \n\nChoosing the right index\n------------------------\n\nIndexes are used to find rows with specific column values quickly. Without an index, SQL has to begin with the first row and then read through the entire table to find the appropriate rows. The larger the table, the more costly the operation. Choosing a right and efficient index greatly influence on query performance.\n\nFor example,\n\n CREATE INDEX index_name\n ON table_name (column1, column2, ...);\n \n\nFine-tuning Database Design\n---------------------------\n\nImproper database schema designs could result in poor query performances. While not strictly a part of query optimization, tuning the database design can speed up the query execution time drastically.\n\nChanges such as the separation of specific data to different tables (Normalization), combining redundant data (Denormalization), or changing the way how tables are linked (Optimized Join Operations), can be implemented to optimize the schema.\n\nUse of SQL Clauses wisely\n-------------------------\n\nThe usage of certain SQL clauses can help in query optimization like LIMIT, BETWEEN etc.\n\nExample,\n\n SELECT column1, column2\n FROM table_name\n WHERE condition\n LIMIT 10;\n \n\nSystem Configuration\n--------------------\n\nMany database systems allow you to configure system parameters that control its behavior during query execution. For instance, in MySQL, you can set parameters like `sort_buffer_size` or `join_buffer_size` to tweak how MySQL would use memory during sorting and joining operations.\n\nIn PostgreSQL, you can set `work_mem` to control how much memory is utilized during operations such as sorting and hashing.\n\nAlways remember the goal of query optimization is to lessen the system resources usage in terms of memory, CPU time, and thus improve the query performance.", + "links": [] + }, + "OdaBXz2XBAVLsQ-m7xtAM": { + "title": "Transactions", + "description": "A `transaction` in SQL is a unit of work that is performed against a database. Transactions are units or sequences of work accomplished in a logical order, whether in a manual fashion by a user or automatically by some sort of a database program.\n\nTransactions are used to ensure data integrity and to handle database errors while processing. SQL transactions are controlled by the following commands:\n\n* `BEGIN TRANSACTION`\n* `COMMIT`\n* `ROLLBACK`\n\nBEGIN TRANSACTION\n-----------------\n\nThis command is used to start a new transaction.\n\n BEGIN TRANSACTION; \n \n\nCOMMIT\n------\n\nThe `COMMIT` command is the transactional command used to save changes invoked by a transaction to the database.\n\n COMMIT;\n \n\nWhen you commit the transaction, the changes are permanently saved in the database.\n\nROLLBACK\n--------\n\nThe `ROLLBACK` command is the transactional command used to undo transactions that have not already been saved to the database.\n\n ROLLBACK;\n \n\nWhen you roll back a transaction, all changes made since the last commit in the database are undone, and the database is rolled back to the state it was in at the last commit.\n\nTransaction Example\n-------------------\n\n BEGIN TRANSACTION;\n \n UPDATE Accounts SET Balance = Balance - 100 WHERE id = 1;\n UPDATE Accounts SET Balance = Balance + 100 WHERE id = 2;\n \n IF @@ERROR = 0\n COMMIT;\n ELSE\n ROLLBACK;\n \n\nIn this example, we are transferring 100 units from account 1 to account 2 inside a transaction. If any errors occurred during any of the update statements (captured by `@@ERROR`), the transaction is rolled back, otherwise, it is committed.\n\nRemember that for the transaction to be successful, all commands must execute successfully. If any command fails, the transaction fails, the database state is left unchanged and an error is returned.", + "links": [] + }, + "7sTW1vwUhCFOMXYjScVEt": { + "title": "BEGIN", + "description": "`BEGIN` is used in SQL to start a transaction, which is a sequence of one or more SQL operations that are executed as a single unit. A transaction ensures that all operations within it are completed successfully before any changes are committed to the database. If any part of the transaction fails, the `ROLLBACK` command can be used to undo all changes made during the transaction, maintaining the integrity of the database. Once all operations are successfully completed, the `COMMIT` command is used to save the changes. Transactions are crucial for maintaining data consistency and handling errors effectively.\n\nLearn more from the following resources:", + "links": [ + { + "title": "BEGIN...END Statement", + "url": "https://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc00801.1510/html/iqrefso/BABFBJAB.htm", + "type": "article" + }, + { + "title": "SQL 'BEGIN' & 'END' Statements", + "url": "https://reintech.io/blog/understanding-sql-begin-end-statements-guide", + "type": "article" + } + ] + }, + "3cMECz5QPVDOFrk5duObs": { + "title": "COMMIT", + "description": "The SQL COMMIT command is used to save all the modifications made by the current transaction to the database. A COMMIT command ends the current transaction and makes permanent all changes performed in the transaction. It is a way of ending your transaction and saving your changes to the database.\n\nAfter the SQL COMMIT statement is executed, it can not be rolled back, which means you can't undo the operations. COMMIT command is used when the user is satisfied with the changes made in the transaction, and these changes can now be made permanent in the database.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL COMMIT and ROLLBACK", + "url": "https://www.digitalocean.com/community/tutorials/sql-commit-sql-rollback", + "type": "article" + } + ] + }, + "xbD67KVlt3UhHpKh8HLx8": { + "title": "ROLLBACK", + "description": "The `ROLLBACK` command is a transactional control language (TCL) instruction that undoes an unsuccessful or unsatisfactory running transaction. This process also applies to SQL Server where all individual statements in SQL Server are treated as a single atomic transaction.\n\nWhen a `ROLLBACK` command is issued, all the operations (such as Insert, Delete, Update, etc.) are undone and the database is restored to its initial state before the transaction started.\n\nWhen to use `ROLLBACK`\n----------------------\n\n1. If the transaction is unacceptable or unsuccessful.\n2. If you want to revert the unwanted changes.\n\nHere is a basic example:\n\n BEGIN TRANSACTION; \n \n -- This would delete all rows from the table.\n DELETE FROM Employee;\n \n -- Oh no! That's not what I wanted. Let's roll that back.\n ROLLBACK;\n \n\nIn this example, the `ROLLBACK` command would restore all deleted data into the `Employee` table.\n\nSQL also allows the usage of `SAVEPOINT`s along with the `ROLLBACK` command, which allows rolling back to a specific point in a transaction, instead of rolling back the entire transaction.\n\nHere is an example of using `SAVEPOINT`s:\n\n BEGIN TRANSACTION;\n \n -- Adding new employee.\n INSERT INTO Employee(ID, Name) VALUES(1, 'John');\n \n -- Create a savepoint to be able to roll back to this point.\n SAVEPOINT SP1;\n \n -- Oh no! I made a mistake creating this employee. Let's roll back to the savepoint.\n ROLLBACK TO SAVEPOINT SP1;\n \n -- Now I can try again.\n INSERT INTO Employee(ID, Name) VALUES(1, 'Jack');\n \n -- Commit the changes.\n COMMIT;\n \n\nIn this example, `ROLLBACK TO SAVEPOINT SP1` would undo the first insert into the `Employee` table while preserving the state of the database as it was at the savepoint `SP1`. So, the second insert command would properly add 'Jack' in place of 'John'.", + "links": [] + }, + "pJtYvXUo81aZfPuRjIbMq": { + "title": "SAVEPOINT", + "description": "A savepoint is a way of implementing subtransactions (nested transactions) within a relational database management system by indicating a particular point within a transaction that a user can \"roll back\" to in case of failure. The main property of a savepoint is that it enables you to create a rollback segment within a transaction. This allows you to revert the changes made to the database after the Savepoint without having to discard the entire transaction.\n\nA Savepoint might be used in instances where if a particular operation fails, you would like to revert the database to the state it was in before the operation was attempted, but you do not want to give up on the entire transaction.\n\nSavepoint Syntax\n----------------\n\nThe general syntax for `SAVEPOINT`:\n\n SAVEPOINT savepoint_name;\n \n\nUse of Savepoint\n----------------\n\nHere is the basic usage of savepoint:\n\n START TRANSACTION;\n INSERT INTO Table1 (Column1) VALUES ('Value1');\n \n SAVEPOINT SP1;\n \n INSERT INTO Table1 (Column1) VALUES ('Value2');\n \n ROLLBACK TO SP1;\n \n COMMIT;\n \n\nIn this example, an initial `INSERT` statement is performed before a Savepoint named `SP1` is created. Another `INSERT` statement is called and then `ROLLBACK TO SP1` is executed. This means all changes between the creation of `SP1` and `ROLLBACK TO SP1` are reverted. After that, 'COMMIT' is used to permanently store the changes made by the first `INSERT` statement.\n\nRelease Savepoint\n-----------------\n\nThe `RELEASE SAVEPOINT` deletes a savepoint within a transaction.\n\nHere’s the syntax:\n\n RELEASE SAVEPOINT savepoint_name;\n \n\nThe action of releasing a savepoint removes the named savepoint from the set of savepoints of the current transaction. No changes are undone.\n\nRemove Savepoint\n----------------\n\nThe `ROLLBACK TO SAVEPOINT` removes a savepoint within a transaction.\n\nHere’s the syntax:\n\n ROLLBACK TRANSACTION TO savepoint_name;\n \n\nThis statement rolls back a transaction to the named savepoint without terminating the transaction.\n\nPlease note, savepoint names are not case sensitive and must obey the syntax rules of the server.", + "links": [] + }, + "igg34gLPl3HYVAmRNFGcV": { + "title": "ACID", + "description": "ACID are the four properties of relational database systems that help in making sure that we are able to perform the transactions in a reliable manner. It's an acronym which refers to the presence of four properties: atomicity, consistency, isolation and durability\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "What is ACID Compliant Database?", + "url": "https://retool.com/blog/whats-an-acid-compliant-database/", + "type": "article" + }, + { + "title": "What is ACID Compliance?: Atomicity, Consistency, Isolation", + "url": "https://fauna.com/blog/what-is-acid-compliance-atomicity-consistency-isolation", + "type": "article" + }, + { + "title": "ACID Explained: Atomic, Consistent, Isolated & Durable", + "url": "https://www.youtube.com/watch?v=yaQ5YMWkxq4", + "type": "video" + } + ] + }, + "ujeq8EIFcrqkBjoFizsJM": { + "title": "Transaction Isolation Levels", + "description": "SQL supports four transaction isolation levels, each differing in how it deals with concurrency and locks to protect the integrity of the data. Each level makes different trade-offs between consistency and performance. Here is a brief of these isolation levels with relevant SQL statements.\n\n1. **READ UNCOMMITTED** This is the lowest level of isolation. One transaction may read not yet committed changes made by other transaction, also known as \"Dirty Reads\". Here's an example of how to set this level:\n \n SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;\n BEGIN TRANSACTION;\n -- Execute your SQL commands here\n COMMIT;\n \n \n2. **READ COMMITTED** A transaction only sees data changes committed before it started, averting \"Dirty Reads\". However, it may experience \"Non-repeatable Reads\", i.e. if a transaction reads the same row multiple times, it might get a different result each time. Here's how to set this level:\n \n SET TRANSACTION ISOLATION LEVEL READ COMMITTED;\n BEGIN TRANSACTION;\n -- Execute your SQL commands here\n COMMIT;\n \n \n3. **REPEATABLE READ** Here, once a transaction reads a row, any other transaction's writes (changes) onto those rows are blocked until the first transaction is finished, preventing \"Non-repeatable Reads\". However, \"Phantom Reads\" may still occur. Here's how to set this level:\n \n SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;\n BEGIN TRANSACTION;\n -- Execute your SQL commands here\n COMMIT;\n \n \n4. **SERIALIZABLE** This is the highest level of isolation. It avoids \"Dirty Reads\", \"Non-repeatable Reads\" and \"Phantom Reads\". This is done by fully isolating one transaction from others: read and write locks are acquired on data that are used in a query, preventing other transactions from accessing the respective data. Here's how to set this level:\n \n SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;\n BEGIN TRANSACTION;\n -- Execute your SQL commands here\n COMMIT;\n \n \n\nRemember, higher levels of isolation usually provide more consistency but can potentially decrease performance due to increased waiting times for locks.", + "links": [] + }, + "R1ktDJpXOz0PTllAcBrdu": { + "title": "Data Integrity & Security", + "description": "Data integrity and security in SQL encompass measures and techniques to ensure data accuracy, consistency, and protection within a database. This includes implementing constraints (like primary keys and foreign keys), using transactions to maintain data consistency, setting up user authentication and authorization, encrypting sensitive data, and regularly backing up the database.\n\nSQL provides various tools and commands to enforce data integrity rules, control access to data, and protect against unauthorized access or data corruption, ensuring the reliability and confidentiality of stored information.", + "links": [] + }, + "mBQ3Z8GlFcpIena3IB7D_": { + "title": "Data Integrity Constraints", + "description": "SQL constraints are used to specify rules for the data in a table. They ensure the accuracy and reliability of the data within the table. If there is any violation between the constraint and the action, the action is aborted by the constraint.\n\nConstraints are classified into two types: column level and table level. Column level constraints apply to individual columns whereas table level constraints apply to the entire table. Each constraint has its own purpose and usage, utilizing them effectively helps maintain the accuracy and integrity of the data.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Integrity Constraints in SQL: A Guide With Examples", + "url": "https://www.datacamp.com/tutorial/integrity-constraints-sql", + "type": "article" + } + ] + }, + "03qMopxzjx_-dZbYw9b7J": { + "title": "GRANT and Revoke", + "description": "`GRANT` and `REVOKE` are SQL commands used to manage user permissions in a database. `GRANT` is used to give specific privileges (such as `SELECT`, `INSERT`, `UPDATE`, `DELETE`) on database objects to users or roles, while `REVOKE` is used to remove these privileges. These commands are essential for implementing database security, controlling access to sensitive data, and ensuring that users have appropriate permissions for their roles. By using `GRANT` and `REVOKE`, database administrators can fine-tune access control, adhering to the principle of least privilege in database management.\n\nLearn more from the following resources:", + "links": [ + { + "title": "GRANT", + "url": "https://www.ibm.com/docs/en/qmf/12.2.0?topic=privileges-sql-grant-statement", + "type": "article" + }, + { + "title": "REVOKE", + "url": "https://www.ibm.com/docs/en/qmf/12.2.0?topic=privileges-sql-revoke-statement", + "type": "article" + } + ] + }, + "vhBZqqmUcEon6-Vwvla4q": { + "title": "DB Security Best Practices", + "description": "Database security is key in ensuring sensitive information is kept intact and isn't exposed to a malicious or accidental breach. Here are some best practices related to SQL security:\n\n1\\. Least Privilege Principle\n-----------------------------\n\nThis principle states that a user should have the minimum levels of access necessary and nothing more. For large systems, this could require a good deal of planning.\n\n2\\. Regular Updates\n-------------------\n\nAlways keep SQL Server patched and updated to gain the benefit of the most recent security updates.\n\n3\\. Complex and Secure Passwords\n--------------------------------\n\nPasswords should be complex and frequently changed. Alongside the use of `GRANT` and `REVOKE`, this is the front line of defense.\n\n4\\. Limiting Remote Access\n--------------------------\n\nIf remote connections to the SQL server are not necessary, it is best to disable it.\n\n5\\. Avoid Using SQL Server Admin Account\n----------------------------------------\n\nYou should avoid using the SQL Server admin account for regular database operations to limit security risk.\n\n6\\. Encrypt Communication\n-------------------------\n\nTo protect against data sniffing, all communication between SQL Server and applications should be encrypted.\n\n7\\. Database Backups\n--------------------\n\nRegular database backups are crucial for data integrity if there happens to be a data loss.\n\n8\\. Monitoring and Auditing\n---------------------------\n\nRegularly monitor and audit your database operations to keep track of who does what in your database.\n\n9\\. Regular Vulnerability Scanning\n----------------------------------\n\nUse a vulnerability scanner to assess the security posture of your SQL.\n\n10\\. SQL Injection\n------------------\n\nSQL injection can be reduced by using parameterized queries or prepared statements.\n\nLearn more from the following resources:", + "links": [ + { + "title": "What is database security?", + "url": "https://azure.microsoft.com/en-us/resources/cloud-computing-dictionary/what-is-database-security", + "type": "article" + } + ] + }, + "w7FNjdwqjY7X69aJqqBy4": { + "title": "Stored Procedures & Functions", + "description": "A SQL stored procedure is a set of SQL code that can be saved and reused. In other words, it's a precompiled object because it's compiled at a time when it's created on the database. Stored procedures can take parameters, process the tasks or query the database, and return a result.\n\nHere's a basic example:\n\n CREATE PROCEDURE getEmployeesBySalary\n @minSalary int\n AS\n BEGIN\n SELECT firstName, lastName\n FROM Employees\n WHERE salary > @minSalary\n END\n GO\n \n\nTo call this stored procedure, we would use:\n\n EXEC getEmployeesBySalary 50000\n \n\nFunctions\n---------\n\nA SQL function is a set of SQL statements that perform a specific task. Functions must return a value or result. We can use these functions in SELECT, INSERT, DELETE, UPDATE statements.\n\nThere are two types of functions in SQL:\n\n* **Scalar functions**, which return a single value and can be used where single expressions are used. For instance:\n\n CREATE FUNCTION addNumbers(@a int, @b int)\n RETURNS int \n AS \n BEGIN\n RETURN @a + @b\n END\n \n\n* **Table-valued functions**, which return a table. They can be used in JOIN clauses as if they were a normal table. For example:\n\n CREATE FUNCTION getBooks (@authorID INT)\n RETURNS TABLE\n AS \n RETURN (\n SELECT books.title, books.publicationYear \n FROM books \n WHERE books.authorID = @authorID\n )\n \n\nTo call this function:\n\n SELECT title, publicationYear \n FROM getBooks(3)", + "links": [] + }, + "4rqCPpTb0dAgpheBKshRG": { + "title": "Performance Optimization", + "description": "SQL performance optimization is crucial for accelerating SQL queries and improving overall database performance. Most importantly, it ensures smooth and efficient execution of SQL statements, which can result in better application performance and user experience.\n\n1\\. Indexes\n-----------\n\nCreating indexes is one of the prominent ways to optimize SQL performance. They accelerate lookup and retrieval of data from a database.\n\n CREATE INDEX index_name\n ON table_name (column1, column2, ...);\n \n\nRemember, though indexes speed up data retrieval, they can slow down data modification such as `INSERT`, `UPDATE`, and `DELETE`.\n\n2\\. Avoid SELECT \\*\n-------------------\n\nGet only the required columns instead of fetching all columns using `SELECT *`. It reduces the amount of data that needs to be read from the disk.\n\n SELECT required_column FROM table_name;\n \n\n3\\. Use Join Instead of Multiple Queries\n----------------------------------------\n\nUsing join clauses can combine rows from two or more tables in a single query based on a related column between them. This reduces the number of queries hitting the database, improving performance.\n\n SELECT Orders.OrderID, Customers.CustomerName\n FROM Orders\n INNER JOIN Customers\n ON Orders.CustomerID=Customers.CustomerID;\n \n\n4\\. Use LIMIT\n-------------\n\nIf only a certain number of rows are necessary, use the LIMIT keyword to restrict the number of rows returned by the query.\n\n SELECT column FROM table LIMIT 10;\n \n\n5\\. Avoid using LIKE Operator with Wildcards at the Start\n---------------------------------------------------------\n\nUsing wildcard at the start of a query (`LIKE '%search_term'`) can lead to full table scans.\n\n SELECT column FROM table WHERE column LIKE 'search_term%';\n \n\n6\\. Optimize Database Schema\n----------------------------\n\nDatabase schema involves how data is organized and should be optimized for better performance.\n\n7\\. Use EXPLAIN\n---------------\n\nMany databases have 'explain plan' functionality that shows the plan of the database engine to execute the query.\n\n EXPLAIN SELECT * FROM table_name WHERE column = 'value';\n \n\nThis can give insight into performance bottlenecks like full table scans, missing indices, etc.\n\n8\\. Denormalization\n-------------------\n\nIn some cases, it might be beneficial to denormalize the database to a certain extent to reduce complex joins and queries. Keep in mind that this is usually the last resort and may not always yield the desired results.\n\nRemember, each query and database is unique, so what might work in one scenario might not work in another. It is always crucial to test the queries in a controlled and isolated environment before pushing them into production.", + "links": [] + }, + "9wOgP0i9G4HSeZGn2Gm7r": { + "title": "Using Indexes", + "description": "Indexes in SQL are used as a way to quicken the rate of retrieval operations on a database table. Much like the index in a book, SQL indexes allow the database program to find the data without needing to go through every row in a table and thus improves performance.\n\nTypes of Indexes:\n-----------------\n\n1. **Single-Column Indexes:**\n\nThese are created based on only one table column. The syntax for creating a single column index is as follows:\n\n CREATE INDEX index_name\n ON table_name (column1);\n \n\n2. **Unique Indexes:**\n\nThey ensure the data contained in a column or a combination of two or more columns is unique. Syntax to create unique index is as follows:\n\n CREATE UNIQUE INDEX index_name\n ON table_name (column1, column2...);\n \n\n3. **Composite Indexes:**\n\nThese are based on two or more columns of a table. It's important to note that, the order of columns in the definition of an index is important. Syntax to create a Composite Indexes is as follows:\n\n CREATE INDEX index_name\n ON table_name (column1, column2);\n \n\n4. **Implicit Indexes:**\n\nThese are indexes that are automatically created by the database server when an object is defined. For example, when a primary key is defined.\n\nHow Indexes Work\n----------------\n\nSQL indexes work by storing a part of a table's data in a place where it can be accessed extremely swiftly. The index holds the column value, and the location of the record itself. This is similar to how an index in a book stores the word, and the page number on which the word can be found.\n\nConsiderations\n--------------\n\nWhile they do provide a significant advantage, they also require additional storage and can slow down the rate of updates and inserts into a database. As such, indexes should be used judiciously, taking into consideration the nature of the data in the table and the kinds of queries that will be used.", + "links": [] + }, + "C0dhS6uLf4TUSfvcWyXhv": { + "title": "Optimizing Joins", + "description": "Query optimization for joins is an essential aspect in improving the execution speed of your SQL commands and reduce the response time. Joins, particularly the ones involving multiple tables, can be quite costly in terms of database performance. Here are some methods to optimize joins in SQL:\n\n1\\. Minimize the Number of Tables in the Join\n---------------------------------------------\n\nTry to keep the number of tables in each join operation as low as possible. Remove any tables which are not necessary to retrieve the requested data.\n\n SELECT Customers.CustomerName, Orders.OrderID\n FROM Customers\n JOIN Orders\n ON Customers.CustomerID = Orders.CustomerID\n ORDER BY Customers.CustomerName;\n \n\n2\\. Check the Order of Tables in the Join\n-----------------------------------------\n\nThe order in which tables are joined can have a considerable impact on the execution time. As a general rule, join the tables that have the most rows last. If you are joining more than two tables, and aren’t certain of the best order, you can try different orders to see which gives the best performance.\n\n SELECT *\n FROM Table1 -- smallest table\n JOIN Table2 ON Table1.ID = Table2.ID -- larger table\n JOIN Table3 ON Table1.ID = Table3.ID -- largest table\n \n\n3\\. Always Use Indexes\n----------------------\n\nUsing indexes helps improve the speed at which SQL can execute a join. Indexes are particularly useful if your join involves columns that are often involved in where clauses or sort operations. SQL can utilize indexes to quickly locate the rows it needs, and this can drastically improve performance.\n\n CREATE INDEX idx_columnname\n ON table_name (column_name);\n \n\n4\\. Use Subqueries\n------------------\n\nSometimes, it would be faster to retrieve the data in multiple steps using subqueries. In the below example, instead of joining, we are retrieving IDs using a subquery and then fetching the data using those IDs.\n\n SELECT column_name(s)\n FROM table1\n WHERE column_name IN (SELECT column_name FROM table2);\n \n\n5\\. Use Explicit JOIN Syntax\n----------------------------\n\nUse of explicit syntax helps in better understanding of the relations between the tables, thus enabling the SQL execution engine to get optimized plans.\n\n SELECT Orders.OrderID, Customers.CustomerName\n FROM Orders\n INNER JOIN Customers\n ON Orders.CustomerID = Customers.CustomerID;\n \n\nIn conclusion, the optimization of joins is an art that requires some level of knowledge about database design and how SQL works under the hood. A performance-efficient SQL code needs thorough testing and trial-n-run for different scenarios.", + "links": [] + }, + "UVTgbZrqpbYl1bQvQejcF": { + "title": "Reducing Subqueries", + "description": "SQL subqueries allow you to nest a SELECT statement inside another query. However, while this can sometimes simplify the code, the drawback is they can result in long-running queries and reduced performance. Therefore, optimizing queries often involves reducing subqueries. Two common ways to achieve this include using JOINS and 'EXISTS' clause.\n\n1. **JOIN:** A JOIN clause combines rows from two or more tables based on a related column. In many cases, a JOIN can replace a subquery with equivalent logic, but with improved performance.\n\nAn example would be a scenario where you have two tables `Orders` and `Customers`, and you want to find orders made by a specific customer:\n\nSubquery could be:\n\n SELECT OrderNumber \n FROM Orders \n WHERE CustomerID IN (\n SELECT CustomerID \n FROM Customers \n WHERE CustomerName = 'John Doe'\n );\n \n\nEquivalent JOIN:\n\n SELECT o.OrderNumber \n FROM Orders o \n JOIN Customers c ON o.CustomerID = c.CustomerID \n WHERE c.CustomerName = 'John Doe';\n \n\n2. **EXISTS:** The EXISTS operator checks for the existence of rows returned by the subquery. Many times, a subquery can be replaced with an EXISTS clause which would greatly increase performance as EXISTS will stop processing once it hits a true condition and does not need to check all results like IN would.\n\nConsider you want to find all customers who have placed at least one order:\n\nSubquery might be:\n\n SELECT * \n FROM Customers \n WHERE CustomerID IN (\n SELECT CustomerID \n FROM Orders\n );\n \n\nEquivalent EXISTS use case:\n\n SELECT *\n FROM Customers c\n WHERE EXISTS (\n SELECT 1\n FROM Orders o\n WHERE c.CustomerID = o.CustomerID\n );\n \n\nWhile it's important to minimize subqueries whenever possible, there may be cases where you cannot replace a subquery, especially when dealing with correlated subqueries or complex queries where rewriting might be nontrivial or not feasible.", + "links": [] + }, + "w53CSY53nAAN0ux-XeJ4c": { + "title": "Selective Projection", + "description": "Selective projection in SQL is a concept related to retrieving only specific columns from a table rather than retrieving all columns. It's one of the most basic ways to optimize your queries in SQL and make them more efficient.\n\nIn SQL, a projection refers to the operation in which we choose certain columns (instead of all columns) from the table for our query results. If a table has numerous columns, and we only need data from a few of them, it's more efficient to only select those specific columns in the SQL query. This reduces the amount of data that needs to be scanned and fetched from the database, thereby improving performance.\n\nExamples\n--------\n\nLet's take an example where you have a \"students\" table with the following columns: Id, Name, Age, Gender, Department, and City. If you only need Name and Department information, you should use a selective projection to specify only these columns in your SELECT statement:\n\n SELECT Name, Department \n FROM students\n \n\nThis query returns just the Name and Department columns, rather than all fields in the students table.\n\nIn contrast, if you used a `SELECT *` statement:\n\n SELECT * \n FROM students\n \n\nThis would return all columns from the \"students\" table which can be inefficient if you don't need all that data.\n\nSelective projection can greatly optimize your SQL queries by minimizing the amount of data handled. It's especially beneficial when tables have large amounts of data and many columns, but only a subset of information is required.", + "links": [] + }, + "C6P69YiFdS-ioPXMNfX07": { + "title": "Query Analysis Techniques", + "description": "Query analysis is a critical part of performance optimization in SQL. It involves critically examining your SQL queries to determine potential bottlenecks, unnecessary computations or data fetch operations, and areas where you can implement performance optimization techniques.\n\nExplain Plan\n------------\n\nSQL provides an \"EXPLAIN PLAN\" statement that can be utilized to understand the execution plan of a query. This is used to analyze the performance of SQL commands before actually executing them.\n\nWhen running the command, the output shows the steps involved in executing the query and an estimation of the cost involved with each step. The cost is a unitless value representing the resources required to perform the operation.\n\n EXPLAIN PLAN FOR SELECT * FROM table_name;\n \n\nIndex Usage\n-----------\n\nUsing appropriate indexes is crucial for query performance. Unnecessary full table scans can be avoided if the correct indexes are present. Even though SQL will automatically determine the appropriate index to use, it can be helpful to manually specify which index to use for complex queries.\n\n CREATE INDEX idx_column ON table_name(column_name);\n \n\nJoin Optimization\n-----------------\n\nThe order in which tables are joined can have a large impact on query performance. In general, you should join tables in a way that results in the smallest result set as early as possible.\n\nLook out for \"Nested Loops\" in your explain plan. These can be a cause of slow performance if a large number of rows are being processed.\n\n SELECT *\n FROM table1\n INNER JOIN table2 ON table1.id = table2.id;\n \n\nRegular Performance Tests\n-------------------------\n\nRegular query performance testing can catch slow queries before they become a problem. Utilizing tools that can monitor and report query performance can help you keep an eye on your database's performance.\n\nAlso, continual analysis of the query performance should be done as your data grows. A query that performs well with a small dataset may not do so when the dataset grows.", + "links": [] + }, + "UDqbT1y-YzBrljfKSz_RG": { + "title": "Advanced SQL", + "description": "Advanced SQL concepts encompass a wide range of sophisticated techniques and features that go beyond basic querying and data manipulation. These include complex joins, subqueries, window functions, stored procedures, triggers, and advanced indexing strategies. By mastering these concepts, database professionals can optimize query performance, implement complex business logic, ensure data integrity, and perform advanced data analysis, enabling them to tackle more challenging database management and data processing tasks in large-scale, enterprise-level applications.", + "links": [] + }, + "TjgwabhEtaSoYMLNr6q9l": { + "title": "Recursive Queries", + "description": "Recursive queries are advanced SQL queries used for data analysis, especially when working with hierarchical or tree-structured data. These queries are implemented using Common Table Expressions (CTEs). CTEs have the same structure as a standard SELECT statement but are prefixed with `WITH`, followed by the CTE name and an optional list of columns.\n\nCTEs can be recursive and non-recursive. The non-recursive CTE is a query that is executed once and then goes out of scope.\n\nRecursive CTE\n-------------\n\nA recursive CTE is a CTE that references itself. Recursive CTEs have a minimum of two queries, an anchor member (runs only once), and a recursive member (runs repeatedly). Include a UNION ALL statement between these queries.\n\nHere's a sample of a recursive CTE:\n\n WITH RECURSIVE ancestors AS (\n SELECT employee_id, manager_id, full_name\n FROM employees\n WHERE manager_id IS NULL\n \n UNION ALL\n \n SELECT e.employee_id, e.manager_id, e.full_name\n FROM employees e\n INNER JOIN ancestors a ON a.employee_id = e.manager_id\n )\n SELECT * FROM ancestors;\n \n\nIn this code snippet, the first query is the anchor member that fetches the employees with no manager. The second part is the recursive member, continuously fetching managers until none are left.\n\nSyntax of Recursive CTE\n-----------------------\n\nHere's the general structure of a recursive CTE:\n\n WITH RECURSIVE cte_name (column_list) AS (\n \n -- Anchor member\n SELECT column_list\n FROM table_name\n WHERE condition\n \n UNION ALL\n \n -- Recursive member\n SELECT column_list\n FROM table_name\n INNER JOIN cte_name ON condition\n )\n SELECT * FROM cte_name;\n \n\nNote: some database systems such as MySQL, PostgreSQL, and SQLite use `WITH RECURSIVE` for recursive CTEs. Others like SQL Server, Oracle, and DB2 use just `WITH`.\n\nRemember to be careful when setting the conditions for your recursive query to avoid infinite loops.", + "links": [] + }, + "nwFaz9i-1s0WVrVaFsoqb": { + "title": "Pivot / Unpivot Operations", + "description": "PIVOT\n-----\n\nThe PIVOT operator is used in SQL to rotate the table data from rows to columns, essentially transforming the data into a matrix format. This operator allows you to create a crosstab view of the data, with selected columns as rows and others as columns, providing a summary view.\n\nHere is a general example of the syntax:\n\n SELECT ...\n FROM ...\n PIVOT (aggregate_function(column_to_aggregate)\n FOR column_to_pivot \n IN (list_of_values))\n \n\n**Example**: Let's assume we have a 'Sales' table with 'Year', 'Quarter' and 'Amount' columns. If we want to turn 'Quarter' values into columns, we might use:\n\n SELECT * FROM \n (\n SELECT Year, Quarter, Amount\n FROM Sales\n ) \n PIVOT \n (\n SUM(Amount)\n FOR Quarter IN ('Q1' 'Q2' 'Q3' 'Q4')\n )\n \n\nThis would give us each year as a row and each quarter as a column, with the total sales for each quarter in the cells.\n\nUNPIVOT\n-------\n\nThe UNPIVOT operator performs the reverse operation to PIVOT, rotating columns into rows. If the columns you're converting have a certain relationship, this can be factored into a single column instead.\n\nHere is a general example of the syntax:\n\n SELECT ...\n FROM ...\n UNPIVOT (column_for_values \n FOR column_for_names IN (list_of_columns))\n \n\n**Example**: Conversely, if we want to transform the quarter columns back into rows from the previous 'Sales' pivot table, we would use:\n\n SELECT * FROM \n (\n SELECT Year, Q1, Q2, Q3, Q4\n FROM Sales\n ) \n UNPIVOT \n (\n Amount\n FOR Quarter IN (Q1, Q2, Q3, Q4)\n )\n \n\nThis would result in each combination of year and quarter as a row, with the amount sold in that quarter as the 'Amount' column. Keep in mind, the UNPIVOTed data isn't equivalent to the original data as the original data might have had multiple rows for each year/quarter.", + "links": [] + }, + "tBvXLLp5FKeSSN35Kj1X4": { + "title": "Window Functions", + "description": "SQL Window functions enable you perform calculations on a set of rows related to the current row. This set of rows is known as a 'window', hence 'Window Functions'.\n\nThese are termed so because they perform a calculation across a set of rows which are related to the current row - somewhat like a sliding window.\n\nThere are four types of window functions in SQL:\n\n* **Aggregate functions:** These functions compute a single output value for a group of input values (like averages, sums).\n\n SELECT department, salary,\n AVG(salary) OVER (PARTITION BY department) as avg_departmental_salary\n FROM employee;\n \n\n* **Ranking functions:** These functions allocate a unique rank to each row within each window partition.\n\n SELECT department, salary,\n RANK() OVER (PARTITION BY department ORDER BY salary DESC) as salary_rank\n FROM employee;\n \n\n* **Value functions:** These functions provide information about the window partition or the row's position within it, for example - `FIRST_VALUE`, `LAST_VALUE`, `NTH_VALUE`.\n\n SELECT department, salary,\n FIRST_VALUE(salary) OVER (PARTITION BY department ORDER BY salary DESC) as highest_salary\n FROM employee;\n \n\n* **Offset functions:** The offset functions provide a way of accessing data from another row in the same result set without joining the table to itself. They can answer questions concerning the value on the row before or after the current row, for example - `LEAD`, `LAG`.\n\n SELECT department, salary,\n LAG(salary) OVER (PARTITION BY department ORDER BY salary) as previous_salary,\n LEAD(salary) OVER (PARTITION BY department ORDER BY salary) as next_salary\n FROM employee;\n \n\nIn using window functions, the `OVER` clause defines the windows or group of rows for function to consider, `PARTITION BY` breaks up the window by a specific column(s), and `ORDER BY` orders rows within the window.\n\nIt's important to note that SQL window functions do not cause rows to become grouped into a single output row like aggregate methods do. Therefore, they do not reduce the number of rows returned by the query, each row maintains its individual identity.", + "links": [] + }, + "tedQynR0xicVKhuR1oahw": { + "title": "Common Table Expressions", + "description": "Common Table Expressions (CTEs) in SQL are named temporary result sets that exist within the scope of a single `SELECT`, `INSERT`, `UPDATE`, `DELETE`, or `MERGE` statement. Defined using the `WITH` clause, CTEs act like virtual tables that can be referenced multiple times within a query. They improve query readability, simplify complex queries by breaking them into manageable parts, and allow for recursive queries. CTEs are particularly useful for hierarchical or graph-like data structures and can enhance query performance in some database systems.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Common Table Expressions (CTEs)", + "url": "https://hightouch.com/sql-dictionary/sql-common-table-expression-cte", + "type": "article" + } + ] + }, + "z5Sf0VU14ZCQ80kL1qOqc": { + "title": "Dynamic SQL", + "description": "Dynamic SQL is a programming method that allows you to build SQL statements dynamically at runtime. It allows you to create more flexible and adaptable applications because you can manipulate the SQL statements on the fly, in response to inputs or changing conditions.\n\nConsider an application where a user can choose multiple search conditions from a range of choices. You might not know how many conditions the user will choose, or what they'll be until runtime. With static SQL, you would have to include a large number of potential search conditions in your WHERE clause. With dynamic SQL, you can build the search string based on the user's actual choices. Note that while the use of Dynamic SQL offers greater flexibility, it also comes with potential security risks such as SQL Injection, and should be used judiciously. Always validate and sanitize inputs when building dynamic queries.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Dynamic SQL in SQL Server", + "url": "https://www.sqlshack.com/dynamic-sql-in-sql-server/", + "type": "article" + } + ] + }, + "zW27ZHdLwQY-85iqbBKQZ": { + "title": "Row_number", + "description": "**ROW\\_NUMBER()** is a SQL window function that assigns a unique number to each row in the result set.\n\nSyntax:\n\n ROW_NUMBER() OVER (\n [ORDER BY column_name]\n )\n \n\nFeatures:\n---------\n\n* Numbers are assigned based on the `ORDER BY` clause of `ROW_NUMBER()`.\n* In case of identical values in the `ORDER BY` clause, the function assigns numbers arbitrarily.\n* In other words, the sequence of numbers generated by `ROW_NUMBER()` is not guaranteed to be the same for the same set of data.\n\nExamples:\n---------\n\n**Example 1:** Basic usage of ROW\\_NUMBER() on a single column\n\n SELECT \n name, \n ROW_NUMBER() OVER (ORDER BY name) row_number\n FROM \n employees;\n \n\nIn this example, `ROW_NUMBER()` is used to assign a unique number to each row in the employees table, ordered by the employee names alphabetically.\n\n**Example 2:** Using ROW\\_NUMBER() to rank rows in each partition\n\n SELECT \n department_id, \n first_name, \n salary, \n ROW_NUMBER() OVER (\n PARTITION BY department_id \n ORDER BY salary DESC) row_number\n FROM \n employees;\n \n\nIn this example, `ROW_NUMBER()` is used to rank employee salaries within each department (i.e., partitioned by `department_id`). In each department, employees with higher salaries are assigned lower row numbers.", + "links": [] + }, + "cucCPw3KfetAP2OMFUs0X": { + "title": "rank", + "description": "`RANK()` is a window function in SQL that assigns a unique rank to each distinct row within a partition of a result set. The rank of the first row within each partition is one. The `RANK()` function adds the number of tied rows to the tied rank to calculate the next rank. So the ranks may not be consecutive numbers.\n\nParameters of RANK Function\n---------------------------\n\nThere are no arguments for the `RANK()` function. However, since it's a window function, the function operates on a set of rows (window) defined by the `OVER` clause, which is mandatory.\n\nSyntax\n------\n\nThe syntax of `RANK` function is:\n\n RANK () OVER (\n [PARTITION BY column_1, column_2,…]\n ORDER BY column_3,column_4,… \n )\n \n\n`PARTITION BY`: This clause divides the rows into multiple groups or partitions upon which the `RANK()` function is applied.\n\n`ORDER BY`: This clause sorts the rows in each partition.\n\nIf `PARTITION BY` is not specified, the function treats all rows in the result set as a single partition.\n\nExamples\n--------\n\nHere's an example query using the `RANK()` function:\n\n SELECT\n product_name, \n brand, \n RANK () OVER (\n PARTITION BY brand\n ORDER BY product_name ASC\n ) Product_rank\n FROM\n products;\n \n\nIn this example, it generates a list of products, grouped by brand, and ranked by product\\_name within each brand. The `product_name` with the smallest value (alphabetically first when sorting ASC) gets a rank of 1 within its partition.\n\nImportant Notes\n---------------\n\n* `RANK()` function may return duplicate rankings if the column on which the function is applied contains duplicate values.\n* The `RANK()` function will leave a gap and create a non-consecutive ranking if there are equal rankings (ties).\n* `RANK()` function offers a very efficient way to solve top-N problems.\n\nYou might also be interested in looking at other similar ranking functions in SQL like `DENSE_RANK()`, `ROW_NUMBER()`, etc.", + "links": [] + }, + "QM0ltgPu8lLLYc2MsTLj-": { + "title": "dense_rank", + "description": "`DENSE_RANK` is a window function in SQL that assigns a rank to each row within a window partition, with no gaps in the ranking numbers.\n\nUnlike the `RANK` function, `DENSE_RANK` does not skip any rank (positions in the order). If you have, for example, 1st, 2nd, and 2nd, the next rank listed would be 3rd when using `DENSE_RANK`, whereas it would be 4th using the `RANK` function. The `DENSE_RANK` function operates on a set of rows, called a window, and in that window, values are compared to each other.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL DENSE_RANK", + "url": "https://www.sqltutorial.org/sql-window-functions/sql-dense_rank/", + "type": "article" + } + ] + }, + "aJJjaGunRrwyh9MjQfJt-": { + "title": "lead", + "description": "`LEAD` is a window function in SQL that provides access to a row at a specified offset after the current row within a partition. It's the counterpart to the `LAG` function, allowing you to look ahead in your dataset rather than behind. `LEAD` is useful for comparing current values with future values, calculating forward-looking metrics, or analyzing trends in sequential data. Like `LAG`, it takes arguments for the column to offset, the number of rows to look ahead (default is 1), and an optional default value when the offset exceeds the partition's boundary.\n\nLearn more from the following resources:", + "links": [ + { + "title": "SQL LEAD", + "url": "https://www.codecademy.com/resources/docs/sql/window-functions/lead", + "type": "article" + } + ] + }, + "BcXdxY6bld5c0YNFSKkh-": { + "title": "lag", + "description": "`LAG` is a window function in SQL that provides access to a row at a specified offset prior to the current row within a partition. It allows you to compare the current row's values with previous rows' values without using self-joins. LAG is particularly useful for calculating running differences, identifying trends, or comparing sequential data points in time-series analysis. The function takes the column to offset, the number of rows to offset (default is 1), and an optional default value to return when the offset goes beyond the partition's boundary.\n\nLearn more from the following resources:", + "links": [ + { + "title": "Understanding the LAG function in SQL", + "url": "https://www.datacamp.com/tutorial/sql-lag", + "type": "article" + } + ] + } +} \ No newline at end of file diff --git a/public/roadmap-content/terraform.json b/public/roadmap-content/terraform.json index d1cb2a4a3..aa1b8e9d9 100644 --- a/public/roadmap-content/terraform.json +++ b/public/roadmap-content/terraform.json @@ -336,12 +336,12 @@ "description": "The `provider` meta-argument in Terraform specifies which provider configuration to use for a resource, overriding the default provider selection based on the resource type name. This is useful in scenarios where multiple configurations of the same provider are required, such as managing resources across different regions or environments. By setting the `provider` argument, you can ensure that the resource uses the specified provider setup, identified by its alias, enhancing control and flexibility in multi-provider or multi-region deployments. This meta-argument is essential for precisely directing Terraform on how to interact with the underlying infrastructure provider.\n\nLearn more from the following resources:", "links": [ { - "title": "Terraform Docs - for_each", + "title": "Terraform Docs - provider", "url": "https://developer.hashicorp.com/terraform/language/meta-arguments/resource-provider", "type": "article" }, { - "title": "Terraform by Example - for_each", + "title": "Terraform by Example - provider", "url": "https://www.terraformbyexample.com/providers/", "type": "article" } diff --git a/public/roadmap-content/vue.json b/public/roadmap-content/vue.json index 65cddf465..d5c669400 100644 --- a/public/roadmap-content/vue.json +++ b/public/roadmap-content/vue.json @@ -263,8 +263,14 @@ }, "xHj3W9Ig3MVuVlGyXchaP": { "title": "v-if", - "description": "", - "links": [] + "description": "Conditionally render an element or a template fragment based on the truthy-ness of the expression value.\n\nWhen a `v-if` element is toggled, the element and its contained directives / components are destroyed and re-constructed. If the initial condition is falsy, then the inner content won't be rendered at all.\n\nVisit the following resources to learn more:", + "links": [ + { + "title": "v-if Documentation", + "url": "https://vuejs.org/api/built-in-directives.html#v-if", + "type": "article" + } + ] }, "0CtAZQcFJexMiJfZ-mofv": { "title": "v-else",