1 line
583 KiB
JavaScript
1 line
583 KiB
JavaScript
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[280],{79280:function(e,t,n){var r={"./authors":58712,"./authors.json":58712,"./guides":19552,"./guides.json":19552,"./guides/asymptotic-notation.md":43070,"./guides/avoid-render-blocking-javascript-with-async-defer.md":58829,"./guides/basic-authentication.md":15151,"./guides/big-o-notation.md":55198,"./guides/character-encodings.md":33180,"./guides/ci-cd.md":77354,"./guides/design-patterns-for-humans.md":13406,"./guides/dhcp-in-one-picture.md":33784,"./guides/dns-in-one-picture.md":9937,"./guides/history-of-javascript.md":98003,"./guides/http-caching.md":69128,"./guides/journey-to-http2.md":43045,"./guides/jwt-authentication.md":25772,"./guides/levels-of-seniority.md":33878,"./guides/oauth.md":90801,"./guides/project-history.md":46681,"./guides/proxy-servers.md":37035,"./guides/random-numbers.md":513,"./guides/scaling-databases.md":87507,"./guides/session-authentication.md":18676,"./guides/ssl-tls-https-ssh.md":86053,"./guides/sso.md":9809,"./guides/threads-and-concurrency.md":95991,"./guides/token-authentication.md":85607,"./guides/torrent-client.md":53406,"./guides/unfamiliar-codebase.md":15941,"./guides/upcoming.md":85104,"./guides/what-are-web-vitals.md":93442,"./guides/what-is-internet.md":1470,"./guides/what-is-sli-slo-sla.md":71307,"./guides/why-build-it-and-they-will-come-wont-work-anymore.md":19554,"./pages/about.md":74160,"./pages/privacy.md":25591,"./pages/terms.md":32547,"./roadmaps":1662,"./roadmaps.json":1662,"./roadmaps/100-frontend/content-paths":18359,"./roadmaps/100-frontend/content-paths.json":18359,"./roadmaps/100-frontend/content/100-internet/100-how-does-the-internet-work.md":65606,"./roadmaps/100-frontend/content/100-internet/101-what-is-http.md":40181,"./roadmaps/100-frontend/content/100-internet/102-browsers-and-how-they-work.md":66152,"./roadmaps/100-frontend/content/100-internet/103-dns-and-how-it-works.md":13405,"./roadmaps/100-frontend/content/100-internet/104-what-is-domain-name.md":2222,"./roadmaps/100-frontend/content/100-internet/105-what-is-hosting.md":48129,"./roadmaps/100-frontend/content/100-internet/readme.md":62633,"./roadmaps/100-frontend/content/101-html/100-learn-the-basics.md":17828,"./roadmaps/100-frontend/content/101-html/101-writing-semantic-html.md":90258,"./roadmaps/100-frontend/content/101-html/102-forms-and-validations.md":40757,"./roadmaps/100-frontend/content/101-html/103-conventions-and-best-practices.md":31881,"./roadmaps/100-frontend/content/101-html/104-accessibility.md":23699,"./roadmaps/100-frontend/content/101-html/105-seo-basics.md":20584,"./roadmaps/100-frontend/content/101-html/readme.md":33913,"./roadmaps/100-frontend/content/102-css/100-learn-the-basics.md":88533,"./roadmaps/100-frontend/content/102-css/101-making-layouts.md":13780,"./roadmaps/100-frontend/content/102-css/102-responsive-design-and-media-queries.md":41118,"./roadmaps/100-frontend/content/102-css/readme.md":35211,"./roadmaps/100-frontend/content/103-javascript/100-syntax-and-basic-constructs.md":30617,"./roadmaps/100-frontend/content/103-javascript/101-learn-dom-manipulation.md":51569,"./roadmaps/100-frontend/content/103-javascript/102-learn-fetch-api-ajax-xhr.md":74746,"./roadmaps/100-frontend/content/103-javascript/103-es6-and-modular-javascript.md":66401,"./roadmaps/100-frontend/content/103-javascript/104-concepts.md":82698,"./roadmaps/100-frontend/content/103-javascript/readme.md":8613,"./roadmaps/100-frontend/content/104-version-control-systems/100-basic-usage-of-git.md":42555,"./roadmaps/100-frontend/content/104-version-control-systems/readme.md":8405,"./roadmaps/100-frontend/content/105-repo-hosting-services/100-github.md":58548,"./roadmaps/100-frontend/content/105-repo-hosting-services/101-gitlab.md":41952,"./roadmaps/100-frontend/content/105-repo-hosting-services/102-bitbucket.md":56145,"./roadmaps/100-frontend/content/105-repo-hosting-services/readme.md":40493,"./roadmaps/100-frontend/content/106-web-security-knowledge/100-https.md":62510,"./roadmaps/100-frontend/content/106-web-security-knowledge/101-content-security-policy.md":9377,"./roadmaps/100-frontend/content/106-web-security-knowledge/102-cors.md":38705,"./roadmaps/100-frontend/content/106-web-security-knowledge/103-owasp-security-risks.md":98633,"./roadmaps/100-frontend/content/106-web-security-knowledge/readme.md":49012,"./roadmaps/100-frontend/content/107-package-managers/100-npm.md":61415,"./roadmaps/100-frontend/content/107-package-managers/101-yarn.md":16356,"./roadmaps/100-frontend/content/107-package-managers/readme.md":88988,"./roadmaps/100-frontend/content/108-css-architecture/100-bem.md":86665,"./roadmaps/100-frontend/content/108-css-architecture/101-oocss.md":21750,"./roadmaps/100-frontend/content/108-css-architecture/102-smacss.md":58887,"./roadmaps/100-frontend/content/108-css-architecture/readme.md":45220,"./roadmaps/100-frontend/content/109-css-preprocessors/100-sass.md":84447,"./roadmaps/100-frontend/content/109-css-preprocessors/101-postcss.md":85106,"./roadmaps/100-frontend/content/109-css-preprocessors/102-less.md":22972,"./roadmaps/100-frontend/content/109-css-preprocessors/readme.md":68365,"./roadmaps/100-frontend/content/110-build-tools/100-task-runners/100-npm-scripts.md":86523,"./roadmaps/100-frontend/content/110-build-tools/100-task-runners/readme.md":88664,"./roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/100-webpack.md":86795,"./roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/101-esbuild.md":19500,"./roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/102-rollup.md":5104,"./roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/103-parcel.md":25648,"./roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/104-vite.md":20762,"./roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/readme.md":76459,"./roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/100-prettier.md":840,"./roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/101-eslint.md":62816,"./roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/102-standardjs.md":74453,"./roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/readme.md":82310,"./roadmaps/100-frontend/content/110-build-tools/readme.md":37093,"./roadmaps/100-frontend/content/111-pick-a-framework/100-react-js/100-redux.md":57139,"./roadmaps/100-frontend/content/111-pick-a-framework/100-react-js/101-mobx.md":25783,"./roadmaps/100-frontend/content/111-pick-a-framework/100-react-js/102-recoil.md":57810,"./roadmaps/100-frontend/content/111-pick-a-framework/100-react-js/readme.md":96199,"./roadmaps/100-frontend/content/111-pick-a-framework/101-angular/100-rxjs.md":5685,"./roadmaps/100-frontend/content/111-pick-a-framework/101-angular/101-ngrx.md":13162,"./roadmaps/100-frontend/content/111-pick-a-framework/101-angular/readme.md":23666,"./roadmaps/100-frontend/content/111-pick-a-framework/102-vue-js/100-vuex.md":80549,"./roadmaps/100-frontend/content/111-pick-a-framework/102-vue-js/readme.md":85277,"./roadmaps/100-frontend/content/111-pick-a-framework/readme.md":91473,"./roadmaps/100-frontend/content/112-modern-css/100-styled-components.md":73745,"./roadmaps/100-frontend/content/112-modern-css/101-css-modules.md":51720,"./roadmaps/100-frontend/content/112-modern-css/102-styled-jsx.md":24349,"./roadmaps/100-frontend/content/112-modern-css/103-emotion.md":14291,"./roadmaps/100-frontend/content/112-modern-css/readme.md":59904,"./roadmaps/100-frontend/content/113-web-components/100-html-templates.md":41484,"./roadmaps/100-frontend/content/113-web-components/101-custom-elements.md":16625,"./roadmaps/100-frontend/content/113-web-components/102-shadow-dom.md":32901,"./roadmaps/100-frontend/content/113-web-components/readme.md":58933,"./roadmaps/100-frontend/content/114-css-frameworks/114-css-first/100-bootstrap.md":94642,"./roadmaps/100-frontend/content/114-css-frameworks/114-css-first/101-bulma.md":14505,"./roadmaps/100-frontend/content/114-css-frameworks/114-css-first/readme.md":94740,"./roadmaps/100-frontend/content/114-css-frameworks/114-js-first/100-tailwind-css.md":21160,"./roadmaps/100-frontend/content/114-css-frameworks/114-js-first/101-chakra-ui.md":6937,"./roadmaps/100-frontend/content/114-css-frameworks/114-js-first/102-material-ui.md":99120,"./roadmaps/100-frontend/content/114-css-frameworks/114-js-first/103-radix-ui.md":13694,"./roadmaps/100-frontend/content/114-css-frameworks/114-js-first/readme.md":17562,"./roadmaps/100-frontend/content/114-css-frameworks/readme.md":21879,"./roadmaps/100-frontend/content/115-testing-your-apps/100-jest.md":25996,"./roadmaps/100-frontend/content/115-testing-your-apps/101-react-testing-library.md":42772,"./roadmaps/100-frontend/content/115-testing-your-apps/102-cypress.md":73431,"./roadmaps/100-frontend/content/115-testing-your-apps/103-enzyme.md":44375,"./roadmaps/100-frontend/content/115-testing-your-apps/104-other-options.md":64946,"./roadmaps/100-frontend/content/115-testing-your-apps/105-mocha.md":69011,"./roadmaps/100-frontend/content/115-testing-your-apps/106-chai.md":95136,"./roadmaps/100-frontend/content/115-testing-your-apps/107-ava.md":30327,"./roadmaps/100-frontend/content/115-testing-your-apps/108-jasmine.md":68976,"./roadmaps/100-frontend/content/115-testing-your-apps/readme.md":25770,"./roadmaps/100-frontend/content/116-type-checkers/100-typescript.md":83227,"./roadmaps/100-frontend/content/116-type-checkers/101-flow.md":79935,"./roadmaps/100-frontend/content/116-type-checkers/readme.md":98323,"./roadmaps/100-frontend/content/117-progressive-web-apps/100-apis.md":54990,"./roadmaps/100-frontend/content/117-progressive-web-apps/101-performance.md":95089,"./roadmaps/100-frontend/content/117-progressive-web-apps/readme.md":72768,"./roadmaps/100-frontend/content/118-server-side-rendering/100-react-js/100-next-js.md":99086,"./roadmaps/100-frontend/content/118-server-side-rendering/100-react-js/101-after-js.md":4930,"./roadmaps/100-frontend/content/118-server-side-rendering/100-react-js/readme.md":88747,"./roadmaps/100-frontend/content/118-server-side-rendering/101-angular/100-universal.md":67815,"./roadmaps/100-frontend/content/118-server-side-rendering/101-angular/readme.md":26394,"./roadmaps/100-frontend/content/118-server-side-rendering/102-vue-js/100-nuxt-js.md":62573,"./roadmaps/100-frontend/content/118-server-side-rendering/102-vue-js/readme.md":35137,"./roadmaps/100-frontend/content/118-server-side-rendering/readme.md":71905,"./roadmaps/100-frontend/content/119-graphql/100-apollo.md":60410,"./roadmaps/100-frontend/content/119-graphql/101-relay-modern.md":60485,"./roadmaps/100-frontend/content/119-graphql/readme.md":24133,"./roadmaps/100-frontend/content/120-static-site-generators/100-next-js.md":57935,"./roadmaps/100-frontend/content/120-static-site-generators/101-gatsbyjs.md":1291,"./roadmaps/100-frontend/content/120-static-site-generators/102-nuxt-js.md":20855,"./roadmaps/100-frontend/content/120-static-site-generators/103-vuepress.md":32374,"./roadmaps/100-frontend/content/120-static-site-generators/104-jekyll.md":51898,"./roadmaps/100-frontend/content/120-static-site-generators/105-hugo.md":90355,"./roadmaps/100-frontend/content/120-static-site-generators/106-gridsome.md":82578,"./roadmaps/100-frontend/content/120-static-site-generators/107-eleventy.md":80476,"./roadmaps/100-frontend/content/120-static-site-generators/readme.md":35470,"./roadmaps/100-frontend/content/121-mobile-applications/100-react-native.md":52919,"./roadmaps/100-frontend/content/121-mobile-applications/101-nativescript.md":15760,"./roadmaps/100-frontend/content/121-mobile-applications/102-flutter.md":59268,"./roadmaps/100-frontend/content/121-mobile-applications/103-ionic.md":17280,"./roadmaps/100-frontend/content/121-mobile-applications/readme.md":20388,"./roadmaps/100-frontend/content/122-desktop-applications/100-electron.md":37137,"./roadmaps/100-frontend/content/122-desktop-applications/101-carlo.md":30373,"./roadmaps/100-frontend/content/122-desktop-applications/102-proton-native.md":55588,"./roadmaps/100-frontend/content/122-desktop-applications/readme.md":78773,"./roadmaps/100-frontend/content/123-web-assembly.md":9429,"./roadmaps/100-frontend/content/readme.md":17086,"./roadmaps/100-frontend/meta":39258,"./roadmaps/100-frontend/meta.json":39258,"./roadmaps/100-frontend/resources.md":47083,"./roadmaps/101-backend/content-paths":33309,"./roadmaps/101-backend/content-paths.json":33309,"./roadmaps/101-backend/content/100-internet/100-how-does-the-internet-work.md":31921,"./roadmaps/101-backend/content/100-internet/101-what-is-http.md":24765,"./roadmaps/101-backend/content/100-internet/102-browsers-and-how-they-work.md":98817,"./roadmaps/101-backend/content/100-internet/103-dns-and-how-it-works.md":60450,"./roadmaps/101-backend/content/100-internet/104-what-is-domain-name.md":98402,"./roadmaps/101-backend/content/100-internet/105-what-is-hosting.md":52573,"./roadmaps/101-backend/content/100-internet/readme.md":91812,"./roadmaps/101-backend/content/101-basic-frontend/100-html.md":56363,"./roadmaps/101-backend/content/101-basic-frontend/101-css.md":91440,"./roadmaps/101-backend/content/101-basic-frontend/102-javascript.md":65898,"./roadmaps/101-backend/content/101-basic-frontend/readme.md":80760,"./roadmaps/101-backend/content/102-os-general-knowledge/100-terminal-usage.md":43869,"./roadmaps/101-backend/content/102-os-general-knowledge/101-how-oss-work-in-general.md":55739,"./roadmaps/101-backend/content/102-os-general-knowledge/102-process-management.md":25210,"./roadmaps/101-backend/content/102-os-general-knowledge/103-threads-and-concurrency.md":73693,"./roadmaps/101-backend/content/102-os-general-knowledge/104-basic-terminal-commands.md":72175,"./roadmaps/101-backend/content/102-os-general-knowledge/105-memory-management.md":62300,"./roadmaps/101-backend/content/102-os-general-knowledge/106-interprocess-communication.md":94668,"./roadmaps/101-backend/content/102-os-general-knowledge/107-io-management.md":86789,"./roadmaps/101-backend/content/102-os-general-knowledge/108-posix-basics.md":39736,"./roadmaps/101-backend/content/102-os-general-knowledge/109-basic-networking-concepts.md":47142,"./roadmaps/101-backend/content/102-os-general-knowledge/readme.md":98419,"./roadmaps/101-backend/content/103-learn-a-language/100-go.md":75063,"./roadmaps/101-backend/content/103-learn-a-language/101-rust.md":4332,"./roadmaps/101-backend/content/103-learn-a-language/102-java.md":76017,"./roadmaps/101-backend/content/103-learn-a-language/103-csharp.md":99855,"./roadmaps/101-backend/content/103-learn-a-language/103-php.md":80110,"./roadmaps/101-backend/content/103-learn-a-language/105-javascript.md":30174,"./roadmaps/101-backend/content/103-learn-a-language/106-python.md":82331,"./roadmaps/101-backend/content/103-learn-a-language/107-ruby.md":4236,"./roadmaps/101-backend/content/103-learn-a-language/readme.md":22533,"./roadmaps/101-backend/content/104-version-control-systems/100-basic-usage-of-git.md":63163,"./roadmaps/101-backend/content/104-version-control-systems/readme.md":32223,"./roadmaps/101-backend/content/105-repo-hosting-services/100-github.md":66926,"./roadmaps/101-backend/content/105-repo-hosting-services/101-gitlab.md":11425,"./roadmaps/101-backend/content/105-repo-hosting-services/102-bitbucket.md":94448,"./roadmaps/101-backend/content/105-repo-hosting-services/readme.md":1973,"./roadmaps/101-backend/content/106-relational-databases/100-postgresql.md":29982,"./roadmaps/101-backend/content/106-relational-databases/101-mysql.md":16468,"./roadmaps/101-backend/content/106-relational-databases/102-mariadb.md":40795,"./roadmaps/101-backend/content/106-relational-databases/103-mssql.md":1485,"./roadmaps/101-backend/content/106-relational-databases/104-oracle.md":54528,"./roadmaps/101-backend/content/106-relational-databases/readme.md":59539,"./roadmaps/101-backend/content/107-nosql-databases/100-document-databases.md":16090,"./roadmaps/101-backend/content/107-nosql-databases/101-column-databases.md":58036,"./roadmaps/101-backend/content/107-nosql-databases/102-timeseries-databases.md":29569,"./roadmaps/101-backend/content/107-nosql-databases/103-realtime-databases.md":55005,"./roadmaps/101-backend/content/107-nosql-databases/readme.md":68633,"./roadmaps/101-backend/content/108-more-about-databases/100-orms.md":11223,"./roadmaps/101-backend/content/108-more-about-databases/101-acid.md":98963,"./roadmaps/101-backend/content/108-more-about-databases/102-transactions.md":73696,"./roadmaps/101-backend/content/108-more-about-databases/103-n-plus-one-problem.md":13381,"./roadmaps/101-backend/content/108-more-about-databases/104-database-normalization.md":70052,"./roadmaps/101-backend/content/108-more-about-databases/105-database-indexes.md":20290,"./roadmaps/101-backend/content/108-more-about-databases/106-data-replication.md":89952,"./roadmaps/101-backend/content/108-more-about-databases/107-sharding-strategies.md":70188,"./roadmaps/101-backend/content/108-more-about-databases/108-cap-theorem.md":17250,"./roadmaps/101-backend/content/108-more-about-databases/readme.md":30506,"./roadmaps/101-backend/content/109-apis/100-rest.md":64361,"./roadmaps/101-backend/content/109-apis/101-json-apis.md":48567,"./roadmaps/101-backend/content/109-apis/102-soap.md":6277,"./roadmaps/101-backend/content/109-apis/103-grpc.md":35896,"./roadmaps/101-backend/content/109-apis/104-hateoas.md":81995,"./roadmaps/101-backend/content/109-apis/105-open-api-spec.md":51690,"./roadmaps/101-backend/content/109-apis/106-authentication/100-cookie-based.md":28558,"./roadmaps/101-backend/content/109-apis/106-authentication/101-oauth.md":39693,"./roadmaps/101-backend/content/109-apis/106-authentication/102-basic-authentication.md":86863,"./roadmaps/101-backend/content/109-apis/106-authentication/103-token-authentication.md":88862,"./roadmaps/101-backend/content/109-apis/106-authentication/104-jwt.md":35747,"./roadmaps/101-backend/content/109-apis/106-authentication/105-openid.md":41796,"./roadmaps/101-backend/content/109-apis/106-authentication/105-saml.md":52037,"./roadmaps/101-backend/content/109-apis/106-authentication/readme.md":16633,"./roadmaps/101-backend/content/109-apis/readme.md":32790,"./roadmaps/101-backend/content/110-caching/100-cdn.md":8806,"./roadmaps/101-backend/content/110-caching/101-server-side/100-redis.md":69103,"./roadmaps/101-backend/content/110-caching/101-server-side/101-memcached.md":42024,"./roadmaps/101-backend/content/110-caching/101-server-side/readme.md":86326,"./roadmaps/101-backend/content/110-caching/102-client-side.md":2954,"./roadmaps/101-backend/content/110-caching/readme.md":66019,"./roadmaps/101-backend/content/111-web-security-knowledge/100-md5.md":49549,"./roadmaps/101-backend/content/111-web-security-knowledge/101-sha-family.md":78772,"./roadmaps/101-backend/content/111-web-security-knowledge/102-bcrypt.md":54134,"./roadmaps/101-backend/content/111-web-security-knowledge/104-scrypt.md":26896,"./roadmaps/101-backend/content/111-web-security-knowledge/105-content-security-policy.md":99182,"./roadmaps/101-backend/content/111-web-security-knowledge/105-https.md":5233,"./roadmaps/101-backend/content/111-web-security-knowledge/106-cors.md":7768,"./roadmaps/101-backend/content/111-web-security-knowledge/107-ssl-tls.md":38453,"./roadmaps/101-backend/content/111-web-security-knowledge/108-owasp.md":2598,"./roadmaps/101-backend/content/111-web-security-knowledge/readme.md":12824,"./roadmaps/101-backend/content/112-testing/100-integration-testing.md":85729,"./roadmaps/101-backend/content/112-testing/101-unit-testing.md":53763,"./roadmaps/101-backend/content/112-testing/102-functional-testing.md":78764,"./roadmaps/101-backend/content/112-testing/readme.md":10584,"./roadmaps/101-backend/content/113-ci-cd.md":82019,"./roadmaps/101-backend/content/114-design-and-development-principles/100-gof-design-patterns.md":65392,"./roadmaps/101-backend/content/114-design-and-development-principles/101-domain-driven-design.md":1024,"./roadmaps/101-backend/content/114-design-and-development-principles/102-test-driven-development.md":18712,"./roadmaps/101-backend/content/114-design-and-development-principles/103-solid.md":32506,"./roadmaps/101-backend/content/114-design-and-development-principles/104-kiss.md":35992,"./roadmaps/101-backend/content/114-design-and-development-principles/105-yagni.md":45279,"./roadmaps/101-backend/content/114-design-and-development-principles/106-dry.md":19444,"./roadmaps/101-backend/content/114-design-and-development-principles/readme.md":6828,"./roadmaps/101-backend/content/115-architectural-patterns/100-monolithic-apps.md":90413,"./roadmaps/101-backend/content/115-architectural-patterns/101-microservices.md":59107,"./roadmaps/101-backend/content/115-architectural-patterns/102-soa.md":28227,"./roadmaps/101-backend/content/115-architectural-patterns/103-cqrs.md":28760,"./roadmaps/101-backend/content/115-architectural-patterns/104-serverless.md":96026,"./roadmaps/101-backend/content/115-architectural-patterns/readme.md":2938,"./roadmaps/101-backend/content/116-search-engines/100-elasticsearch.md":85569,"./roadmaps/101-backend/content/116-search-engines/101-solr.md":7328,"./roadmaps/101-backend/content/116-search-engines/readme.md":79359,"./roadmaps/101-backend/content/117-message-brokers/100-rabbitmq.md":93093,"./roadmaps/101-backend/content/117-message-brokers/101-kafka.md":44196,"./roadmaps/101-backend/content/117-message-brokers/readme.md":91265,"./roadmaps/101-backend/content/118-containerization/100-docker.md":53797,"./roadmaps/101-backend/content/118-containerization/101-rkt.md":82153,"./roadmaps/101-backend/content/118-containerization/102-lxc.md":12998,"./roadmaps/101-backend/content/118-containerization/readme.md":57485,"./roadmaps/101-backend/content/119-graphql/100-apollo.md":5373,"./roadmaps/101-backend/content/119-graphql/101-relay-modern.md":79033,"./roadmaps/101-backend/content/119-graphql/readme.md":33620,"./roadmaps/101-backend/content/120-graph-databases/100-neo4j.md":47898,"./roadmaps/101-backend/content/120-graph-databases/readme.md":78826,"./roadmaps/101-backend/content/121-web-sockets.md":6084,"./roadmaps/101-backend/content/122-web-servers/100-nginx.md":34821,"./roadmaps/101-backend/content/122-web-servers/101-apache.md":55293,"./roadmaps/101-backend/content/122-web-servers/102-caddy.md":28549,"./roadmaps/101-backend/content/122-web-servers/103-ms-iis.md":297,"./roadmaps/101-backend/content/122-web-servers/readme.md":94521,"./roadmaps/101-backend/content/123-scalability/100-mitigation-strategies.md":78878,"./roadmaps/101-backend/content/123-scalability/101-instrumentation-monitoring-telemetry.md":52928,"./roadmaps/101-backend/content/123-scalability/102-migration-strategies.md":50760,"./roadmaps/101-backend/content/123-scalability/103-horizontal-vertial-scaling.md":80576,"./roadmaps/101-backend/content/123-scalability/104-observability.md":54572,"./roadmaps/101-backend/content/123-scalability/readme.md":99222,"./roadmaps/101-backend/content/readme.md":51403,"./roadmaps/101-backend/meta":76782,"./roadmaps/101-backend/meta.json":76782,"./roadmaps/101-backend/resources.md":78093,"./roadmaps/102-devops/meta":54017,"./roadmaps/102-devops/meta.json":54017,"./roadmaps/102-devops/resources.md":65332,"./roadmaps/103-react/landscape.md":34558,"./roadmaps/103-react/meta":88477,"./roadmaps/103-react/meta.json":88477,"./roadmaps/103-react/resources.md":20063,"./roadmaps/104-angular/landscape.md":595,"./roadmaps/104-angular/meta":8834,"./roadmaps/104-angular/meta.json":8834,"./roadmaps/104-angular/resources.md":67489,"./roadmaps/105-android/landscape.md":65191,"./roadmaps/105-android/meta":19508,"./roadmaps/105-android/meta.json":19508,"./roadmaps/105-android/resources.md":97890,"./roadmaps/106-python/landscape.md":69556,"./roadmaps/106-python/meta":34099,"./roadmaps/106-python/meta.json":34099,"./roadmaps/106-python/resources.md":8481,"./roadmaps/107-golang/landscape.md":62388,"./roadmaps/107-golang/meta":82737,"./roadmaps/107-golang/meta.json":82737,"./roadmaps/107-golang/resources.md":79101,"./roadmaps/108-java/landscape.md":57913,"./roadmaps/108-java/meta":62507,"./roadmaps/108-java/meta.json":62507,"./roadmaps/108-java/resources.md":79673,"./roadmaps/109-postgresql-dba/landscape.md":51464,"./roadmaps/109-postgresql-dba/meta":88951,"./roadmaps/109-postgresql-dba/meta.json":88951,"./roadmaps/109-postgresql-dba/resources.md":1545,"./roadmaps/110-aws/landscape.md":48188,"./roadmaps/110-aws/meta":67559,"./roadmaps/110-aws/meta.json":67559,"./roadmaps/110-aws/resources.md":91048,"./roadmaps/111-qa/landscape.md":44894,"./roadmaps/111-qa/meta":83204,"./roadmaps/111-qa/meta.json":83204,"./roadmaps/111-qa/resources.md":49598,"./site":28641,"./site.json":28641,"./videos":91797,"./videos.json":91797,"./videos/acid-explained.md":98974,"./videos/all-about-http-caching.md":73730,"./videos/array-structure.md":71232,"./videos/arrays-and-objects-in-javascript.md":77589,"./videos/async-javascript.md":38001,"./videos/big-o-notation.md":6736,"./videos/content-delivery-networks.md":45489,"./videos/dns-explained.md":79029,"./videos/dns-records.md":74046,"./videos/floating-point-arithmetic.md":27327,"./videos/freeze-and-seal-objects-in-javascript.md":66527,"./videos/hash-table-data-structure.md":99046,"./videos/how-to-use-css-variables.md":85512,"./videos/how-to-use-github-actions.md":48688,"./videos/javascript-fetch-api.md":4474,"./videos/linked-list-data-structure.md":36955,"./videos/load-balancers-101.md":2012,"./videos/osi-model.md":85495,"./videos/practical-intro-to-react.md":24913,"./videos/promises-in-javascript.md":77e3,"./videos/queue-data-structure.md":29495,"./videos/random-number-generators.md":61516,"./videos/scaling-the-unscalable.md":37850,"./videos/ssh-ssl-tls.md":39345,"./videos/stack-data-structure.md":56851,"./videos/system-design-101.md":35069,"./videos/tcp-ip-model.md":1559,"./videos/transport-protocols-tcp-vs-udp.md":32382,"./videos/what-are-data-structures.md":68496,"./videos/what-is-cap-theorem.md":45875,"./videos/what-is-dependency-injection.md":52635,"./videos/what-is-dom-shadow-dom-virtual-dom.md":16095,"./videos/what-is-eventual-consistency.md":72068,"./videos/yaml-in-depth.md":26372};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=79280},74160:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",null,"What is roadmap.sh?"),(0,r.kt)("p",null,"Roadmap.sh is the place containing community curated roadmaps, study plans, paths and resources for the budding\ndevelopers. It started as a ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap"}),"set of charts to guide the developers"),"\nwho are confused about what should they learn next but that alone wasn't enough so I expanded it into the website to get\nmore contributors involved."),(0,r.kt)("h2",null,"What are the plans for roadmap.sh?"),(0,r.kt)("p",null,"The website started off as\na ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap"}),"simple repository containing a few charts")," for developers and\nbased on my personal opinions but it could have been much more than that so I decided to expand it to a website where\npeople can contribute to study plans with their areas of expertise as well, add more roadmaps, write guides etc."),(0,r.kt)("p",null,"We haven't opened up the sign ups for now but we will be doing. My long term plans for this website are to turn it into\na goto place for the developers to seek guidance about their careers, help others, share their journeys, incentivize the\nlearnings, get feedbacks on their projects etc."),(0,r.kt)("h2",null,"How did you build roadmap.sh?"),(0,r.kt)("p",null,"The basic version of the website has been built with ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/zeit/next.js/"}),"Next.js"),", is opensource and can\nbe found on ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap"}),"github"),". It was hastily done to get it out in front of the\npeople and get people to start contributing, so it might be rough on the edges, but that is where we need your help."),(0,r.kt)("h2",null,"How does it make money?"),(0,r.kt)("p",null,"It doesn't make any money. I have been using my personal time and budget to build it. I did not create this website with\nany intentions of monetization but as a good will, to help the people get out of the frustration that I was once in."),(0,r.kt)("p",null,"Having said that, I love teaching and my future plans are to be able to work full-time on roadmap.sh for which it has to\nmake enough money to pay for my rent, groceries, bills, travel expenses, etc but even if it doesn't it's likely I'll\ncontinue growing the site however I can. My focus at the moment is not making money from it and just add content that\ncreates value for the people."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Sponsor the efforts by ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/sponsors/kamranahmedse"}),"paying as little as 5$ per month")," or with ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://paypal.me/kamranahmedse"}),"one time payment via paypal"),". Alternatively, reach out to me at ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"mailto:kamranahmed.se@gmail.com"}),"kamranahmed.se@gmail.com"),".")),(0,r.kt)("h2",null,"Can I contribute?"),(0,r.kt)("p",null,"You definitely can, infact you are encouraged to do that. Even your minor contributions such as typo fixes count. The\nsource code of the website can be ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap"}),"found on Github"),". Your contributions can\nbe:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Adding a new roadmap"),(0,r.kt)("li",{parentName:"ul"},"Updating existing roadmap"),(0,r.kt)("li",{parentName:"ul"},"Suggesting changes to the existing roadmaps"),(0,r.kt)("li",{parentName:"ul"},"Writing a Guide"),(0,r.kt)("li",{parentName:"ul"},"Updating an existing guide"),(0,r.kt)("li",{parentName:"ul"},"Fixing grammar mistakes, typos on the website or the content"),(0,r.kt)("li",{parentName:"ul"},"Updating the UI of the website"),(0,r.kt)("li",{parentName:"ul"},"Refactoring the codebase"),(0,r.kt)("li",{parentName:"ul"},"Becoming a sponsor")),(0,r.kt)("p",null,"Just make sure\nto ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap/tree/master/contributing"}),"follow the contribution guidelines")," when you\ndecide to contribute."),(0,r.kt)("h2",null,"Can I redistribute the content?"),(0,r.kt)("p",null,"No, the license of the content on this website does not allow you to redistribute any of the content on this website\nanywhere. You can use it for personal use or share the link to the content if you have to but redistribution is not\nallowed."),(0,r.kt)("h2",null,"What is the best way to contact you?"),(0,r.kt)("p",null,"Tweet or send me a message ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://twitter.com/kamranahmedse"}),"@kamranahmedse")," or email me\nat ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"mailto:kamranahmed.se@gmail.com"}),"kamranahmed.se@gmail.com"),". I get lots of messages so apologies in advance if you don't hear back\nfrom me soon but I do reply to everyone."))}s.isMDXComponent=!0},25591:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Privacy Policy"),(0,r.kt)("p",null,"By using or accessing the Services in any manner, you acknowledge that you accept the practices and policies outlined in this Privacy Policy, and you hereby consent that we will collect, use, and share your information in the following ways. Remember that your use of roadmap.sh\u2019s Services is at all times subject to the ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/terms"}),"Terms of Use"),", which incorporates this Privacy Policy. Any terms we use in this Policy without defining them have the definitions given to them in the Terms of Use."),(0,r.kt)("h2",null,"What does this Privacy Policy cover?"),(0,r.kt)("p",null,'This Privacy Policy covers our treatment of personally identifiable information ("Personal Information") that we gather when you are accessing or using our Services, but not to the practices of companies we don\u2019t own or control, or people that we don\u2019t manage. We gather various types of Personal Information from our users, as explained in more detail below, and we use this Personal Information internally in connection with our Services, including to personalize, provide, and improve our services, to allow you to set up a user account and profile, to contact you and allow other users to contact you, to fulfill your requests for certain products and services, and to analyze how you use the Services. In certain cases, we may also share some Personal Information with third parties, but only as described below.'),(0,r.kt)("p",null,"As noted in the Terms of Use, we do not knowingly collect or solicit personal information from anyone under the age of 13. If you are under 13, please do not attempt to register for the Services or send any personal information about yourself to us. If we learn that we have collected personal information from a child under age 13, we will delete that information as quickly as possible. If you believe that a child under 13 may have provided us personal information, please contact us at ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"mailto:kamranahmed.se@gmail.com"}),"kamranahmed.se@gmail.com"),"."),(0,r.kt)("h2",null,"Will roadmap.sh ever change this Privacy Policy?"),(0,r.kt)("p",null,"We\u2019re constantly trying to improve our Services, so we may need to change this Privacy Policy from time to time as well, but we will alert you to changes by updating the services on the website, placing a notice on the Services, by sending you an email, and/or by some other means. Please note that if you\u2019ve opted not to receive legal notice emails from us (or you haven\u2019t provided us with your email address), those legal notices will still govern your use of the Services, and you are still responsible for reading and understanding them. If you use the Services after any changes to the Privacy Policy have been posted, that means you agree to all of the changes. Use of information we collect now is subject to the Privacy Policy in effect at the time such information is used or collected."),(0,r.kt)("h2",null,"What Information does roadmap.sh Collect?"),(0,r.kt)("p",null,"Information You Provide to Us:"),(0,r.kt)("p",null,"We receive and store any information you knowingly provide to us. For example, through the registration process and/or through your account settings, we may collect Personal Information such as your name, title, email address, phone number, and third-party account credentials (for example, your log-in credentials for Twitter or other third party sites. If you provide your third-party account credentials to us or otherwise sign in to the Services through a third party site or service, you understand some content and/or information in those accounts (\u201cThird Party Account Information\u201d) may be transmitted into your account with us if you authorize such transmissions], and that Third Party Account Information transmitted to our Services is covered by this Privacy Policy. Certain information may be required to register with us or to take advantage of some of our features."),(0,r.kt)("p",null,"We may communicate with you if you\u2019ve provided us the means to do so. For example, if you\u2019ve given us your email address, we may send you promotional email offers on behalf of other businesses, or email you about your use of the Services. Also, we may receive a confirmation when you open an email from us. This confirmation helps us make our communications with you more interesting and improve our services. If you do not want to receive communications from us, please email us at ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"mailto:kamranahmed.se@gmail.com"}),"kamranahmed.se@gmail.com"),"."),(0,r.kt)("h2",null,"Information Collected Automatically"),(0,r.kt)("p",null,"Whenever you interact with our Services, we automatically receive and record information on our server logs from your browser or device, which may include your IP address, geolocation data, device identification, \u201ccookie\u201d information, the type of browser and/or device you\u2019re using to access our Services, and the page or feature you requested. \u201cCookies\u201d are identifiers we transfer to your browser or device that allow us to recognize your browser or device and tell us how and when pages and features in our Services are visited and by how many people. You may be able to change the preferences on your browser or device to prevent or limit your device\u2019s acceptance of cookies, but this may prevent you from taking advantage of some of our features. Our advertising partners may also transmit cookies to your browser or device, when you click on ads that appear on the Services. Also if you click on a link to a third party website or service, such third party may also transmit cookies to you. Again, this Privacy Policy does not cover the use of cookies by any third parties, and we aren\u2019t responsible for their privacy policies and practices."),(0,r.kt)("p",null,"When we collect the usage information described above, we only use this data in aggregate form, and not in a manner that would identify you personally. For example, this aggregate data can tell us how often users use a particular feature of the Services, and we can use that knowledge to make the Services interesting to as many users as possible."),(0,r.kt)("h2",null,"Will roadmap.sh Share Any of the Personal Information it Receives?"),(0,r.kt)("p",null,"We may share your Personal Information with third parties as described in this section:"),(0,r.kt)("p",null,"Information that\u2019s no longer personally identifiable. We may anonymize your Personal Information so that you are not individually identified, and provide that information to our partners. We may also provide aggregate usage information to our partners, who may use such information to understand how often and in what ways people use our Services, so that they, too, can provide you with an optimal online experience. However, we never disclose aggregate information to a partner in a manner that would identify you personally, as an individual."),(0,r.kt)("p",null,"Advertisers: We may allow advertisers and/or merchant partners (\u201cAdvertisers\u201d) to choose the demographic information of users who will see their advertisements and/or promotional offers and you agree that we may provide any of the information we have collected from you in non-personally identifiable form to an Advertiser, in order for that Advertiser to select the appropriate audience for those advertisements and/or offers. For example, we might use the fact you are located in San Francisco to show you ads or offers for San Francisco businesses, but we will not tell such businesses who you are. Note that if an advertiser asks us to show an ad to a certain audience or audience segment and you respond to that ad, the advertiser may conclude that you fit the description of the audience they were trying to reach."),(0,r.kt)("p",null,"We may deliver a file to you through the Services (known as a \u201cweb beacon\u201d) from an ad network. Web beacons allow ad networks to provide anonymized, aggregated auditing, research and reporting for us and for advertisers. Web beacons also enable ad networks to serve targeted advertisements to you when you visit other websites. Because your web browser must request these advertisements and web beacons from the ad network\u2019s servers, these companies can view, edit, or set their own cookies, just as if you had requested a web page from their site. You may be able to opt-out of web beacon tracking by adjusting the settings on your browser."),(0,r.kt)("p",null,"Affiliated Businesses: In certain situations, businesses or third party websites we\u2019re affiliated with may sell or provide products or services to you through or in connection with the Services (either alone or jointly with us). You can recognize when an affiliated business is associated with such a transaction or service, and we will share your Personal Information with that affiliated business only to the extent that it is related to such transaction or service. One such service may include the ability for you to automatically transmit Third Party Account Information to your Services profile or to automatically transmit information in your Services profile to your third party account; for example, you may sign into your roadmap.sh account using your Twitter account. We have no control over the policies and practices of third party websites or businesses as to privacy or anything else, so if you choose to take part in any transaction or service relating to an affiliated website or business, please review all such business\u2019 or websites\u2019 policies."),(0,r.kt)("p",null,"Our Agents: We employ other companies and people to perform tasks on our behalf and need to share your information with them to provide products or services to you. Unless we tell you differently, our agents do not have any right to use the Personal Information we share with them beyond what is necessary to assist us."),(0,r.kt)("p",null,"User Profiles and Submissions: Certain user profile information, including your name, location, and any video or image content that such user has uploaded to the Services, may be displayed to other users to facilitate user interaction within the Services or address your request for our services. Please remember that any content you upload to your public user profile, along with any Personal Information or content that you voluntarily disclose online in a manner other users can view (on discussion boards, in messages and chat areas, etc.) becomes publicly available, and can be collected and used by anyone. Your user name may also be displayed to other users if and when you send messages or comments or upload images or videos through the Services and other users can contact you through messages and comments. Additionally, if you sign into the Services through a third party social networking site or service, your list of \u201cfriends\u201d from that site or service may be automatically imported to the Services, and such \u201cfriends,\u201d if they are also registered users of the Services, may be able to access certain non-public information you have entered in your Services user profile. Again, we do not control the policies and practices of any other third party site or service."),(0,r.kt)("p",null,"Business Transfers: We may choose to buy or sell assets. In these types of transactions, customer information is typically one of the business assets that would be transferred. Also, if we (or our assets) are acquired, or if we go out of business, enter bankruptcy, or go through some other change of control, Personal Information could be one of the assets transferred to or acquired by a third party."),(0,r.kt)("p",null,"Protection of roadmap.sh and Others: We reserve the right to access, read, preserve, and disclose any information that we reasonably believe is necessary to comply with law or court order; enforce or apply our terms of use and other agreements; or protect the rights, property, or safety of roadmap.sh, our employees, our users, or others."),(0,r.kt)("h2",null,"Is Personal Information about me secure?"),(0,r.kt)("p",null,"Your account is protected by a password for your privacy and security. If you access your account via a third party site or service, you may have additional or different sign-on protections via that third party site or service. You must prevent unauthorized access to your account and Personal Information by selecting and protecting your password and/or other sign-on mechanism appropriately and limiting access to your computer or device and browser by signing off after you have finished accessing your account. We endeavor to protect the privacy of your account and other Personal Information we hold in our records, but unfortunately, we cannot guarantee complete security. Unauthorized entry or use, hardware or software failure, and other factors, may compromise the security of user information at any time."),(0,r.kt)("h2",null,"What Personal Information can I access?"),(0,r.kt)("p",null,"Through your account settings, you may access, and, in some cases, edit or delete the following information you\u2019ve provided to us:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"first and last name"),(0,r.kt)("li",{parentName:"ul"},"location of residence"),(0,r.kt)("li",{parentName:"ul"},"age or birthday"),(0,r.kt)("li",{parentName:"ul"},"username")),(0,r.kt)("p",null,"The information you can view, update, and delete may change as the Services change. If you have any questions about viewing or updating information we have on file about you, please contact us at ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"mailto:kamranahmed.se@gmail.com"}),"kamranahmed.se@gmail.com"),"."),(0,r.kt)("p",null,"Under California Civil Code Sections 1798.83-1798.84, California residents are entitled to ask us for a notice identifying the categories of Personal Information which we share with our affiliates and/or third parties for marketing purposes, and providing contact information for such affiliates and/or third parties. If you are a California resident and would like a copy of this notice, please submit a written request to: ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"mailto:kamranahmed.se@gmail.com"}),"kamranahmed.se@gmail.com"),"."),(0,r.kt)("h2",null,"What choices do I have?"),(0,r.kt)("p",null,"You can always opt not to disclose information to us, but keep in mind some information may be needed to register with us or to take advantage of some of our features."),(0,r.kt)("p",null,"You may be able to add, update, or delete information as explained above. When you update information, however, we may maintain a copy of the unrevised information in our records. You may request deletion of your account by contacting us at ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"mailto:kamranahmed.se@gmail.com"}),"kamranahmed.se@gmail.com")," and we will disassociate our email address and Twitter account from any content or other information provided to us. Some information may remain in our records after your deletion of such information from your account. We may use any aggregated data derived from or incorporating your Personal Information after you update or delete it, but not in a manner that would identify you personally."),(0,r.kt)("h2",null,"What if I have questions about this policy?"),(0,r.kt)("p",null,"If you have any questions or concerns regarding our privacy policies, please send us a detailed message to ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"mailto:kamranahmed.se@gmail.com"}),"kamranahmed.se@gmail.com"),", and we will try to resolve your concerns."))}s.isMDXComponent=!0},65606:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Internet"),(0,r.kt)("p",null,"The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.vox.com/2014/6/16/18076282/the-internet",mdxType:"BadgeLink"},"The Internet Explained"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm",mdxType:"BadgeLink"},"How Does the Internet Work?"),(0,r.kt)(i,{badgeText:"Watch",href:"/guides/what-is-internet",mdxType:"BadgeLink"},"Introduction to Internet"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=TNQsmPf24go",mdxType:"BadgeLink"},"How does the Internet work?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7_LPdttKXPc",mdxType:"BadgeLink"},"How the Internet Works in 5 Minutes"))}l.isMDXComponent=!0},40181:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"What is HTTP?"),(0,r.kt)("p",null,"HTTP is the ",(0,r.kt)("inlineCode",{parentName:"p"},"TCP/IP")," based application layer communication protocol which standardizes how the client and server communicate with each other. It defines how the content is requested and transmitted across the internet."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/",mdxType:"BadgeLink"},"What is HTTP?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview",mdxType:"BadgeLink"},"An overview of HTTP"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://kamranahmed.info/blog/2016/08/13/http-in-depth/",mdxType:"BadgeLink"},"Journey to HTTP/2"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/",mdxType:"BadgeLink"},"HTTP/3 From A To Z: Core Concepts"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=iYM2zFP3Zn0",mdxType:"BadgeLink"},"HTTP Crash Course & Exploration"))}l.isMDXComponent=!0},66152:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Browsers"),(0,r.kt)("p",null,"A web browser is a software application that enables a user to access and display web pages or other online content through its graphical user interface. "),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/",mdxType:"BadgeLink"},"How Browsers Work"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.browserstack.com/guide/browser-rendering-engine",mdxType:"BadgeLink"},"Role of Rendering Engine in Browsers"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work",mdxType:"BadgeLink"},"Populating the Page: How Browsers Work"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=WjDrMKZWCt0",mdxType:"BadgeLink"},"How Do Web Browsers Work?"))}l.isMDXComponent=!0},13405:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"DNS"),(0,r.kt)("p",null,"The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com. Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/",mdxType:"BadgeLink"},"What is DNS?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Wj0od2ag5sk",mdxType:"BadgeLink"},"DNS and How does it Work?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7lxgpKh_fRY",mdxType:"BadgeLink"},"DNS Records"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=e48AyJOA9W8",mdxType:"BadgeLink"},"When to add glue records to DNS settings"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Visit",href:"https://messwithdns.net/",mdxType:"BadgeLink"},"Miss with DNS - DNS Playground"))}l.isMDXComponent=!0},2222:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Domain Name"),(0,r.kt)("p",null,"A domain name is a unique, easy-to-remember address used to access websites, such as \u2018google.com\u2019, and \u2018facebook.com\u2019. Users can connect to websites using domain names thanks to the DNS system."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_domain_name",mdxType:"BadgeLink"},"What is a Domain Name?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/en-gb/learning/dns/glossary/what-is-a-domain-name/",mdxType:"BadgeLink"},"What is a Domain Name? | Domain name vs. URL"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Y4cRx19nhJk",mdxType:"BadgeLink"},"A Beginners Guide to How Domain Names Work"))}l.isMDXComponent=!0},48129:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Hosting"),(0,r.kt)("p",null,"Web hosting is an online service that allows you to publish your website files onto the internet. So, anyone who has access to the internet has access to your website."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=htbY9-yggB0",mdxType:"BadgeLink"},"What Is Web Hosting? Explained"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=AXVZYzw8geg",mdxType:"BadgeLink"},"Different Types of Web Hosting Explained"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Kx_1NYYJS7Q",mdxType:"BadgeLink"},"Where to Host a Fullstack Project on a Budget"))}l.isMDXComponent=!0},62633:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Internet"),(0,r.kt)("p",null,"The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.vox.com/2014/6/16/18076282/the-internet",mdxType:"BadgeLink"},"The Internet Explained"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm",mdxType:"BadgeLink"},"How Does the Internet Work?"),(0,r.kt)(i,{badgeText:"Watch",href:"/guides/what-is-internet",mdxType:"BadgeLink"},"Introduction to Internet"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=x3c1ih2NJEg",mdxType:"BadgeLink"},"How does the Internet work?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7_LPdttKXPc",mdxType:"BadgeLink"},"How the Internet Works in 5 Minutes"))}l.isMDXComponent=!0},17828:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"HTML Basics"),(0,r.kt)("p",null,"HTML stands for HyperText Markup Language. It is used on the frontend and gives the structure to the webpage which you can style using CSS and make interactive using JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",href:"https://www.w3schools.com/html/html_intro.asp",mdxType:"BadgeLink"},"W3Schools: Learn HTML"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=pQN-pnXPaVg",mdxType:"BadgeLink"},"HTML Full Course - Build a Website Tutorial"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=qz0aGYrrlhU",mdxType:"BadgeLink"},"HTML Tutorial for Beginners: HTML Crash Course"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=3PHXvlpOkf4",mdxType:"BadgeLink"},"Build 15 JavaScript Projects - Vanilla JavaScript"))}l.isMDXComponent=!0},90258:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Semantic HTML"),(0,r.kt)("p",null,"Semantic element clearly describes its meaning to both the browser and the developer."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/html/html5_semantic_elements.asp",mdxType:"BadgeLink"},"W3Schools: Semantic HTML"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://hackernoon.com/how-to-write-semantic-html-dkq3ulo",mdxType:"BadgeLink"},"How To Write Semantic HTML"))}l.isMDXComponent=!0},40757:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Forms and Validations"),(0,r.kt)("p",null,"Before submitting data to the server, it is important to ensure all required form controls are filled out, in the correct format. This is called client-side form validation, and helps ensure data submitted matches the requirements set forth in the various form controls."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation",mdxType:"BadgeLink"},"MDN Web Docs: Client-side form validation"))}l.isMDXComponent=!0},31881:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Best Practices"),(0,r.kt)("p",null,"Learn to follow the best practices for writing maintainable and scalable HTML documents."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://github.com/hail2u/html-best-practices",mdxType:"BadgeLink"},"HTML Best Practices"))}l.isMDXComponent=!0},23699:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Accessibility"),(0,r.kt)("p",null,"Web accessibility means that websites, tools, and technologies are designed and developed in such a way that people with disabilities can use them easily."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtube.com/playlist?list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g",mdxType:"BadgeLink"},"Complete Playlist on Accessibility"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/accessibility/index.php",mdxType:"BadgeLink"},"Accessibility Tutorial"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.smashingmagazine.com/2021/03/complete-guide-accessible-front-end-components/",mdxType:"BadgeLink"},"A Complete Guide To Accessible Front-End Components"))}l.isMDXComponent=!0},20584:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Basics of SEO"),(0,r.kt)("p",null,"SEO or Search Engine Optimization is the technique used to optimize your website for better rankings on search engines such as Google, Bing etc."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developers.google.com/search/docs",mdxType:"BadgeLink"},"Google Search Central \u2014 SEO Docs"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://github.com/seo/guide",mdxType:"BadgeLink"},"SEO Guide"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://medium.com/welldone-software/seo-for-developers-a-quick-overview-5b5b7ce34679",mdxType:"BadgeLink"},"SEO for Developers"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=xsVTqzratPs",mdxType:"BadgeLink"},"Complete SEO Course for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=SnxeXZpZkI0",mdxType:"BadgeLink"},"SEO Expert Course"))}l.isMDXComponent=!0},33913:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"HTML"),(0,r.kt)("p",null,"HTML stands for HyperText Markup Language. It is used on the frontend and gives the structure to the webpage which you can style using CSS and make interactive using JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",href:"https://www.w3schools.com/html/html_intro.asp",mdxType:"BadgeLink"},"W3Schools: Learn HTML"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=pQN-pnXPaVg",mdxType:"BadgeLink"},"HTML Full Course - Build a Website Tutorial"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=qz0aGYrrlhU",mdxType:"BadgeLink"},"HTML Tutorial for Beginners: HTML Crash Course"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.codecademy.com/learn/learn-html",mdxType:"BadgeLink"},"Codecademy - Learn HTML"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://github.com/denysdovhan/learnyouhtml",mdxType:"BadgeLink"},"Interactive HTML Course"))}l.isMDXComponent=!0},88533:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CSS Basics"),(0,r.kt)("p",null,"CSS or Cascading Style Sheets is the language used to style the frontend of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.w3schools.com/css/",mdxType:"BadgeLink"},"W3Schools \u2014 Learn CSS"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/learn/responsive-web-design/",mdxType:"BadgeLink"},"freeCodeCamp \u2014 Responsive Web Design"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://learn.shayhowe.com/html-css/building-your-first-web-page/",mdxType:"BadgeLink"},"Learn to Code HTML & CSS"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=yfoY53QXEnI",mdxType:"BadgeLink"},"CSS Crash Course For Absolute Beginners"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=D-h8L5hgW-w",mdxType:"BadgeLink"},"HTML and CSS Tutorial"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=FqmB-Zj2-PA",mdxType:"BadgeLink"},"CSS Masterclass - Tutorial & Course for Beginners"))}l.isMDXComponent=!0},13780:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Making layouts"),(0,r.kt)("p",null,"Float, grid, flexbox, positioning, display and box model are some of the key topics that are used for making layouts. Use the resources below to learn about these topics: "),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://flexboxfroggy.com/",mdxType:"BadgeLink"},"Learn and Practice Flexbox"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://cssgridgarden.com/",mdxType:"BadgeLink"},"Game for learning CSS Grid"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://css-tricks.com/all-about-floats/",mdxType:"BadgeLink"},"All about Floats"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://css-tricks.com/absolute-relative-fixed-positioining-how-do-they-differ/",mdxType:"BadgeLink"},"Positioning Types: How Do They Differ?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model",mdxType:"BadgeLink"},"The Box Model"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/news/the-css-display-property-display-none-display-table-inline-block-and-more/",mdxType:"BadgeLink"},"The CSS Display Property"))}l.isMDXComponent=!0},41118:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Responsive Web Design"),(0,r.kt)("p",null,"Responsive Web Designing is the technique to make your webpages look good on all screen sizes. There are certain techniques used to achieve that e.g. CSS media queries, percentage widths, min or max widths heights etc."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.w3schools.com/css/css_rwd_intro.asp",mdxType:"BadgeLink"},"Responsive Web Design"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://web.dev/learn/design/",mdxType:"BadgeLink"},"Learn Responsive Design"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=srvUrASNj0s",mdxType:"BadgeLink"},"Introduction To Responsive Web Design"))}l.isMDXComponent=!0},35211:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CSS"),(0,r.kt)("p",null,"CSS or Cascading Style Sheets is the language used to style the frontend of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.w3schools.com/css/",mdxType:"BadgeLink"},"W3Schools \u2014 Learn CSS"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://web.dev/learn/css/",mdxType:"BadgeLink"},"Web.dev by Google \u2014 Learn CSS"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/learn/responsive-web-design/",mdxType:"BadgeLink"},"freeCodeCamp \u2014 Responsive Web Design"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://learn.shayhowe.com/html-css/building-your-first-web-page/",mdxType:"BadgeLink"},"Learn to Code HTML & CSS"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=yfoY53QXEnI",mdxType:"BadgeLink"},"CSS Crash Course For Absolute Beginners"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=D-h8L5hgW-w",mdxType:"BadgeLink"},"HTML and CSS Tutorial"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=FqmB-Zj2-PA",mdxType:"BadgeLink"},"CSS Masterclass - Tutorial & Course for Beginners"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://flexbox.io/",mdxType:"BadgeLink"},"What The Flexbox!"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.codecademy.com/learn/learn-css",mdxType:"BadgeLink"},"Learn CSS | Codecademy"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.codecademy.com/learn/learn-intermediate-css",mdxType:"BadgeLink"},"Learn Intermediate CSS | Codecademy"))}l.isMDXComponent=!0},30617:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"JavaScript"),(0,r.kt)("p",null,"JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/js/",mdxType:"BadgeLink"},"W3Schools \u2013 JavaScript Tutorial"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://javascript.info/",mdxType:"BadgeLink"},"The Modern JavaScript Tutorial"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/hdI2bqOjy3c?t=2",mdxType:"BadgeLink"},"JavaScript Crash Course for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/P7t13SGytRk?t=22",mdxType:"BadgeLink"},"Build a Netflix Landing Page Clone with HTML, CSS & JS"))}l.isMDXComponent=!0},51569:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"DOM Manipulation"),(0,r.kt)("p",null,"The Document Object Model (DOM) connects web pages to scripts or programming languages by representing the structure of a document\u2014such as the HTML representing a web page\u2014in memory."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.freecodecamp.org/news/what-is-the-dom-document-object-model-meaning-in-javascript/",mdxType:"BadgeLink"},"What is the DOM?"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/js/js_htmldom.asp",mdxType:"BadgeLink"},"JavaScript HTML DOM"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.javascripttutorial.net/javascript-dom/",mdxType:"BadgeLink"},"JavaScript DOM"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7Tok22qxPzQ",mdxType:"BadgeLink"},"What is DOM, Shadow DOM and Virtual DOM?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=0ik6X4DJKCc",mdxType:"BadgeLink"},"JavaScript DOM Crash Course"))}l.isMDXComponent=!0},74746:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Fetch API"),(0,r.kt)("p",null,"Ajax is the technique that lets us send and receive the data asynchronously from the servers e.g. updaing the user profile or asynchronously fetch the list of searched products without reloading the page."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API",mdxType:"BadgeLink"},"Fetch API MDN Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=-ZI0ea5O2oA",mdxType:"BadgeLink"},"JavaScript Fetch API"))}l.isMDXComponent=!0},66401:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Modern JavaScript"),(0,r.kt)("p",null,"ECMAScript 2015 or ES2015 is a significant update to the JavaScript programming language. It is the first major update to the language since ES5 which was standardized in 2009. You should look at the features introduced with ES6 and onwards."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.javascripttutorial.net/es6/",mdxType:"BadgeLink"},"ES6 Tutorial"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=NCwa_xi0Uuc",mdxType:"BadgeLink"},"Learn Modern JavaScript in 1 Hour"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=nZ1DMMsyVyI",mdxType:"BadgeLink"},"JavaScript ES6, ES7, ES8"))}l.isMDXComponent=!0},82698:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"JavaScript Concepts"),(0,r.kt)("p",null,"Learn and understand the concepts such as Hoisting, Event Bubbling, Scope, Prototype, Shadow DOM and strict."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Glossary/Hoisting",mdxType:"BadgeLink"},"JavaScript Hoisting"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://javascript.info/bubbling-and-capturing",mdxType:"BadgeLink"},"Event Bubbling and Capturing"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Glossary/Scope",mdxType:"BadgeLink"},"Scope in JavaScript"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.freecodecamp.org/news/var-let-and-const-whats-the-difference/",mdxType:"BadgeLink"},"Var, Let and Const \u2014 What's the difference?"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain",mdxType:"BadgeLink"},"Inheritance and Prototype Chain"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode",mdxType:"BadgeLink"},"JavaScript Strict Mode"),(0,r.kt)(i,{badgeText:"Read",href:"https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif",mdxType:"BadgeLink"},"JavaScript Visualized (7 Part Series)"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7Tok22qxPzQ",mdxType:"BadgeLink"},"DOM vs Shadow DOM vs Virtual DOM"))}l.isMDXComponent=!0},8613:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"JavaScript"),(0,r.kt)("p",null,"JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/js/",mdxType:"BadgeLink"},"W3Schools \u2013 JavaScript Tutorial"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://javascript.info/",mdxType:"BadgeLink"},"The Modern JavaScript Tutorial"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/hdI2bqOjy3c?t=2",mdxType:"BadgeLink"},"JavaScript Crash Course for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/P7t13SGytRk?t=22",mdxType:"BadgeLink"},"Build a Netflix Landing Page Clone with HTML, CSS & JS"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://github.com/workshopper/javascripting",mdxType:"BadgeLink"},"Learn the basics of JavaScript"))}l.isMDXComponent=!0},42555:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Git"),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://git-scm.com/"}),"Git")," is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=zbKdDsNNOhg",mdxType:"BadgeLink"},"Version Control System Introduction"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=SWYqp7iY_Tc",mdxType:"BadgeLink"},"Git & GitHub Crash Course For Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/Y9XZQO1n_7c?t=21",mdxType:"BadgeLink"},"Learn Git in 20 Minutes"))}l.isMDXComponent=!0},8405:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Version Control Systems"),(0,r.kt)("p",null,"Version control systems allow you to track changes to your codebase/files over time. They allow you to go back to some previous version of the codebase without any issues. Also, they help in collaborating with people working on the same code \u2013 if you\u2019ve ever collaborated with other people on a project, you might already know the frustration of copying and merging the changes from someone else into your codebase; version control systems allow you to get rid of this issue."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=zbKdDsNNOhg",mdxType:"BadgeLink"},"Version Control System Introduction"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=SWYqp7iY_Tc",mdxType:"BadgeLink"},"Git & GitHub Crash Course For Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/Y9XZQO1n_7c?t=21",mdxType:"BadgeLink"},"Learn Git in 20 Minutes"))}l.isMDXComponent=!0},58548:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"GitHub"),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com"}),"GitHub")," is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",href:"https://docs.github.com/en/get-started/quickstart/hello-world",mdxType:"BadgeLink"},"GitHub: Quickstart"),(0,r.kt)(i,{badgeText:"Watch",colorScheme:"yellow",href:"https://www.youtube.com/watch?v=w3jLJU7DT5E",mdxType:"BadgeLink"},"What is GitHub?"),(0,r.kt)(i,{badgeText:"Watch",colorScheme:"yellow",href:"https://www.youtube.com/watch?v=wpISo9TNjfU",mdxType:"BadgeLink"},"Git vs. GitHub: What's the difference?"),(0,r.kt)(i,{badgeText:"Watch",colorScheme:"yellow",href:"https://www.youtube.com/watch?v=RGOj5yH7evk",mdxType:"BadgeLink"},"Git and GitHub for Beginners"),(0,r.kt)(i,{badgeText:"Watch",colorScheme:"yellow",href:"https://www.youtube.com/watch?v=eulnSXkhE7I",mdxType:"BadgeLink"},"Git and GitHub - CS50 Beyond 2019"))}l.isMDXComponent=!0},41952:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"GitLab"),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://gitlab.com"}),"GitLab")," is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Visit",colorScheme:"green",href:"https://gitlab.com/",mdxType:"BadgeLink"},"GitLab Website"),(0,r.kt)(i,{badgeText:"Read",href:"https://docs.gitlab.com/",mdxType:"BadgeLink"},"GitLab Documentation"))}l.isMDXComponent=!0},56145:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"BitBucket"),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://bitbucket.com"}),"BitBucket")," is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Visit",colorScheme:"green",href:"https://bitbucket.com/",mdxType:"BadgeLink"},"BitBucket Website"),(0,r.kt)(i,{badgeText:"Read",href:"https://bitbucket.org/product/guides",mdxType:"BadgeLink"},"How to use BitBucket?"))}l.isMDXComponent=!0},40493:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Repo Hosting Services"),(0,r.kt)("p",null,"There are different repository hosting services with the most famous one being GitHub, GitLab and BitBucket. I would recommend creating an account on GitHub because that is where most of the OpenSource work is done and most of the developers are."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Services Links"),(0,r.kt)(i,{badgeText:"Visit",colorScheme:"green",href:"https://github.com",mdxType:"BadgeLink"},"GitHub: Where the world builds software"),(0,r.kt)(i,{badgeText:"Visit",href:"https://gitlab.com",mdxType:"BadgeLink"},"GitLab: Iterate faster, innovate together"),(0,r.kt)(i,{badgeText:"Visit",href:"https://bitbucket.com",mdxType:"BadgeLink"},"BitBucket: The Git solution for professional teams"))}l.isMDXComponent=!0},62510:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"HTTPS"),(0,r.kt)("p",null,"HTTPS is a secure way to send data between a web server and a browser."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/",mdxType:"BadgeLink"},"What is HTTPS?"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https",mdxType:"BadgeLink"},"Why HTTPS Matters"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https",mdxType:"BadgeLink"},"Enabling HTTPS on Your Servers"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=hExRDVZHhig",mdxType:"BadgeLink"},"SSL, TLS, HTTP, HTTPS Explained"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=GoXgl9r0Kjk",mdxType:"BadgeLink"},"HTTPS \u2014 Stories from the field"))}l.isMDXComponent=!0},9377:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Content Security Policy"),(0,r.kt)("p",null,"Content Security Policy is a computer security standard introduced to prevent cross-site scripting, clickjacking and other code injection attacks resulting from execution of malicious content in the trusted web page context."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP",mdxType:"BadgeLink"},"MDN \u2014 Content Security Policy (CSP)"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developers.google.com/web/fundamentals/security/csp",mdxType:"BadgeLink"},"Google Devs \u2014 Content Security Policy (CSP)"))}l.isMDXComponent=!0},38705:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CORS"),(0,r.kt)("p",null,"Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS",mdxType:"BadgeLink"},"CORS \u2014 Cross-Origin Resource Sharing"))}l.isMDXComponent=!0},98633:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"OWASP Security Risks"),(0,r.kt)("p",null,"OWASP or Open Web Application Security Project is an online community that produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://en.wikipedia.org/wiki/OWASP",mdxType:"BadgeLink"},"Wikipedia - OWASP"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://github.com/0xRadi/OWASP-Web-Checklist",mdxType:"BadgeLink"},"OWASP Web Application Security Testing Checklist"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/",mdxType:"BadgeLink"},"OWASP Top 10 Security Risks"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html",mdxType:"BadgeLink"},"OWASP Cheatsheets"))}l.isMDXComponent=!0},49012:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Web Security Knowledge"),(0,r.kt)("p",null,"Web security refers to the protective measures taken by the developers to protect the web applications from threats that could affect the business."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https",mdxType:"BadgeLink"},"Why HTTPS Matters"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://en.wikipedia.org/wiki/OWASP",mdxType:"BadgeLink"},"Wikipedia - OWASP"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://github.com/0xRadi/OWASP-Web-Checklist",mdxType:"BadgeLink"},"OWASP Web Application Security Testing Checklist"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/",mdxType:"BadgeLink"},"OWASP Top 10 Security Risks"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html",mdxType:"BadgeLink"},"OWASP Cheatsheets"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP",mdxType:"BadgeLink"},"Content Security Policy (CSP)"))}l.isMDXComponent=!0},61415:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"npm"),(0,r.kt)("p",null,"npm is a package manager for the JavaScript programming language maintained by npm, Inc. npm is the default package manager for the JavaScript runtime environment Node.js."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html",mdxType:"BadgeLink"},"Modern JavaScript for Dinosaurs"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://nodesource.com/blog/an-absolute-beginners-guide-to-using-npm/",mdxType:"BadgeLink"},"An Absolute Beginner's Guide to Using npm"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=2V1UUhBJ62Y",mdxType:"BadgeLink"},"NPM tutorial for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=jHDhaSSKmB0",mdxType:"BadgeLink"},"NPM Crash Course"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://github.com/workshopper/how-to-npm",mdxType:"BadgeLink"},"How to NPM"))}l.isMDXComponent=!0},16356:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Yarn"),(0,r.kt)("p",null,"Yarn is a software packaging system developed in 2016 by Facebook for Node.js JavaScript runtime environment that provides speed, consistency, stability, and security as an alternative to npm (package manager)."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html",mdxType:"BadgeLink"},"Modern JavaScript for Dinosaurs"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://yarnpkg.com/en/docs/getting-started",mdxType:"BadgeLink"},"Yarn - Getting Started"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=g9_6KmiBISk",mdxType:"BadgeLink"},"Yarn Crash Course"))}l.isMDXComponent=!0},88988:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Package Managers"),(0,r.kt)("p",null,"Package managers allow you to manage the dependencies (external code written by you or someone else) that your project needs to work correctly."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html",mdxType:"BadgeLink"},"Modern JavaScript for Dinosaurs"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://nodesource.com/blog/an-absolute-beginners-guide-to-using-npm/",mdxType:"BadgeLink"},"An Absolute Beginner's Guide to Using npm"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=2V1UUhBJ62Y",mdxType:"BadgeLink"},"NPM tutorial for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=jHDhaSSKmB0",mdxType:"BadgeLink"},"NPM Crash Course"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://yarnpkg.com/en/docs/getting-started",mdxType:"BadgeLink"},"Yarn - Getting Started"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=g9_6KmiBISk",mdxType:"BadgeLink"},"Yarn Crash Course"))}l.isMDXComponent=!0},86665:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"BEM"),(0,r.kt)("p",null,"The Block, Element, Modifier methodology (commonly referred to as BEM) is a popular naming convention for classes in HTML and CSS. Developed by the team at Yandex, its goal is to help developers better understand the relationship between the HTML and CSS in a given project."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://en.bem.info",mdxType:"BadgeLink"},"BEM Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Documentation",href:"https://en.bem.info/methodology/quick-start",mdxType:"BadgeLink"},"BEM Documentation"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://css-tricks.com/bem-101",mdxType:"BadgeLink"},"BEM 101"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.bem.info/tutorials/",mdxType:"BadgeLink"},"BEM Tutorials"))}l.isMDXComponent=!0},21750:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"OOCSS"),(0,r.kt)("p",null,"As with any object-based coding method, the purpose of OOCSS or Object Oriented CSS is to encourage code reuse and, ultimately, faster and more efficient stylesheets that are easier to add to and maintain."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"http://oocss.org/",mdxType:"BadgeLink"},"OOCSS Official Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.smashingmagazine.com/2011/12/an-introduction-to-object-oriented-css-oocss/",mdxType:"BadgeLink"},"Introduction to Object Oriented CSS"))}l.isMDXComponent=!0},58887:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"SMACSS"),(0,r.kt)("p",null,"SMACSS (pronounced \u201csmacks\u201d) is more style guide than rigid framework. SMACSS is a way to examine your design process and as a way to fit those rigid frameworks into a flexible thought process. It is an attempt to document a consistent approach to site development when using CSS."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"http://smacss.com/",mdxType:"BadgeLink"},"SMACSS Official Website"))}l.isMDXComponent=!0},45220:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CSS Architecture"),(0,r.kt)("p",null,"CSS is notoriously difficult to manage in large, complex, rapidly-iterated systems. There are different ways of writing CSS that allows in writing more maintainable CSS."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.webfx.com/blog/web-design/css-methodologies/",mdxType:"BadgeLink"},"A Look at Some CSS Methodologies"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://en.bem.info",mdxType:"BadgeLink"},"BEM Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"http://oocss.org/",mdxType:"BadgeLink"},"OOCSS Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"http://smacss.com/",mdxType:"BadgeLink"},"SMACSS Official Website"))}l.isMDXComponent=!0},84447:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Sass"),(0,r.kt)("p",null,"Sass is a preprocessor scripting language that is interpreted or compiled into Cascading Style Sheets. It lets you write maintainable CSS and provides features like variable, nesting, mixins, extension, functions, loops, conditionals and so on."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://sass-lang.com/",mdxType:"BadgeLink"},"Sass Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Documentation",href:"https://sass-lang.com/documentation",mdxType:"BadgeLink"},"Official Documentation"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=_a5j7KoflTs",mdxType:"BadgeLink"}," Sass Tutorial for Beginners"))}l.isMDXComponent=!0},85106:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"PostCSS"),(0,r.kt)("p",null,"PostCSS is a tool for transforming styles with JS plugins. These plugins can lint your CSS, support variables and mixins, transpile future CSS syntax, inline images, and more."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://postcss.org/",mdxType:"BadgeLink"},"Official Website"))}l.isMDXComponent=!0},22972:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Less"),(0,r.kt)("p",null,"Less extends CSS with dynamic behavior such as variables, mixins, operations and functions. Less runs on both the server-side (with Node.js and Rhino) or client-side (modern browsers only)."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://lesscss.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://lesscss.org/usage/",mdxType:"BadgeLink"},"Official Documentation"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=YD91G8DdUsw",mdxType:"BadgeLink"}," Less CSS Pre-Processor Tutorial"))}l.isMDXComponent=!0},68365:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CSS Preprocessors"),(0,r.kt)("p",null,"CSS Preprocessors are scripting languages that extend the default capabilities of CSS. They enable us to use logic in our CSS code, such as variables, nesting, inheritance, mixins, functions, and mathematical operations."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/news/css-preprocessors/#:~:text=CSS%20Preprocessors%20compile%20the%20code,preprocessor%20were%20not%20in%20place.",mdxType:"BadgeLink"},"CSS Preprocessors Explained"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://sherocommerce.com/what-is-a-css-preprocessors-why-use-them/",mdxType:"BadgeLink"},"Why Use Preprocessors?"))}l.isMDXComponent=!0},86523:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"npm Scripts"),(0,r.kt)("p",null,"npm scripts are the entries in the scripts field of the package.json file. The scripts field holds an object where you can specify various commands and scripts that you want to expose."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.geeksforgeeks.org/introduction-to-npm-scripts/",mdxType:"BadgeLink"},"Introduction to npm scripts"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=hHt3oVk3XVk",mdxType:"BadgeLink"},"Codevolution: npm scripts"))}l.isMDXComponent=!0},88664:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Task runners"))}s.isMDXComponent=!0},86795:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Webpack"),(0,r.kt)("p",null,"Webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://webpack.js.org/",mdxType:"BadgeLink"},"Webpack Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Documentation",href:"https://webpack.js.org/concepts/",mdxType:"BadgeLink"},"Webpack Documentation"))}l.isMDXComponent=!0},19500:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a,s=(a="BadgeLink",function(e){return console.warn("Component "+a+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},e))}),i={};function c(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"esbuild"),(0,r.kt)("p",null,"Our current build tools for the web are 10-100x slower than they could be. The main goal of the esbuild bundler project is to bring about a new era of build tool performance, and create an easy-to-use modern bundler along the way."),(0,r.kt)(s,{colorScheme:"blue",badgeText:"Official Website",href:"https://esbuild.github.io/",mdxType:"BadgeLink"},"Esbuild Official Website"),(0,r.kt)(s,{colorScheme:"blue",badgeText:"Official Documentation",href:"https://esbuild.github.io/api/",mdxType:"BadgeLink"},"Esbuild Documentation"),(0,r.kt)(s,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=9XS_RA6zyyU",mdxType:"BadgeLink"},"Why are People Obsessed with esbuild?"))}c.isMDXComponent=!0},5104:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Rollup"),(0,r.kt)("p",null,"Rollup is a module bundler for JavaScript which compiles small pieces of code into something larger and more complex, such as a library or application."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://rollupjs.org/",mdxType:"BadgeLink"},"Official Website and Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=ICYLOZuFMz8",mdxType:"BadgeLink"},"How to Set Up JavaScript Bundling Using Rollup"))}l.isMDXComponent=!0},25648:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Parcel"),(0,r.kt)("p",null,"Parcel is a web application bundler, differentiated by its developer experience. It offers blazing-fast performance utilizing multicore processing and requires zero configuration."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://parceljs.org/plugin-system/bundler/",mdxType:"BadgeLink"},"Official Website and Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=hCxvp3_o0gM",mdxType:"BadgeLink"},"Using Parcel Bundler with React"))}l.isMDXComponent=!0},20762:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Vite"),(0,r.kt)("p",null,"Vite is a build tool that aims to provide a faster and leaner development experience for modern web projects."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://vitejs.dev",mdxType:"BadgeLink"},"Vite Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Documentation",href:"https://vitejs.dev/guide",mdxType:"BadgeLink"},"Vite Documentation"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://youtu.be/LQQ3CR2JTX8",mdxType:"BadgeLink"},"Vite Crash Course"))}l.isMDXComponent=!0},76459:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Module bundlers"))}s.isMDXComponent=!0},840:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Prettier"),(0,r.kt)("p",null,"Prettier is an opinionated code formatter with support for JavaScript, HTML, CSS, and more."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://prettier.io",mdxType:"BadgeLink"},"Prettier Website"))}l.isMDXComponent=!0},62816:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"ESLint"),(0,r.kt)("p",null,"With ESLint you can impose the coding standard using a certain set of standalone rules."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Official Website",colorScheme:"blue",href:"https://eslint.org/",mdxType:"BadgeLink"},"ESLint Official Website"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://dev.to/shivambmgupta/eslint-what-why-when-how-5f1d",mdxType:"BadgeLink"},"Introduction to ESLint"),(0,r.kt)(i,{badgeText:"Watch",colorScheme:"red",href:"https://www.youtube.com/watch?v=qhuFviJn-es",mdxType:"BadgeLink"},"ESLint Quickstart - find errors automatically"))}l.isMDXComponent=!0},74453:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"StandardJS"),(0,r.kt)("p",null,"Standardjs is a Style guide, with linter & automatic code fixer. It is a way to enforce consistent style in your project. It automatically formats code.\nStandard JS is a tool in the Code Review category of a tech stack."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"blue",href:"https://standardjs.com/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=bqho-uAnNJk",mdxType:"BadgeLink"},"Standard JS Tutorial with React, Prettier"))}l.isMDXComponent=!0},82310:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a,s=(a="BadgeLink",function(e){return console.warn("Component "+a+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},e))}),i={};function c(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Linters formatters"),(0,r.kt)("p",null,"A linter is a tool used to analyze code and discover bugs, syntax errors, stylistic inconsistencies, and suspicious constructs. Popular linters for JavaScript include ESLint, JSLint, and JSHint."),(0,r.kt)(s,{colorScheme:"blue",badgeText:"Read",href:"https://www.testim.io/blog/what-is-a-linter-heres-a-definition-and-quick-start-guide/",mdxType:"BadgeLink"},"What Is a Linter?"))}c.isMDXComponent=!0},37093:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Build tools"))}s.isMDXComponent=!0},57139:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Redux"),(0,r.kt)("p",null,"Redux is a predictable state container for JavaScript apps. It helps you write applications that behave consistently, run in different environments (client, server, and native), and are easy to test. On top of that, it provides a great developer experience, such as ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/reduxjs/redux-devtools"}),"live code editing combined with a time traveling debugger"),"."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://redux.js.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://redux.js.org/introduction/getting-started",mdxType:"BadgeLink"},"Official Getting Started to Redux"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://redux.js.org/tutorials/essentials/part-1-overview-concepts",mdxType:"BadgeLink"},"Official Tutorial to Learn Redux"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://egghead.io/courses/fundamentals-of-redux-course-from-dan-abramov-bd5cc867",mdxType:"BadgeLink"},"Fundamentals of Redux Course from Dan Abramov"))}l.isMDXComponent=!0},25783:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"MobX"),(0,r.kt)("p",null,"MobX is an open source state management tool. MobX, a simple, scalable, and standalone state management library, follows functional reactive programming (FRP) implementation and prevents inconsistent state by ensuring that all derivations are performed automatically."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://mobx.js.org/",mdxType:"BadgeLink"},"MobX Official Website"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=WQQq1QbYlAw",mdxType:"BadgeLink"},"Intro to MobX Tutorial"))}l.isMDXComponent=!0},57810:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Recoil"),(0,r.kt)("p",null,"Recoil is a new state management library built by the Facebook team that simplifies global state management."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://recoiljs.org/",mdxType:"BadgeLink"},"Recoil Official Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://recoiljs.org/docs/introduction/getting-started",mdxType:"BadgeLink"},"Official Documentation"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=BchtCWxs7sA",mdxType:"BadgeLink"},"Learn the basics of Recoil.js"))}l.isMDXComponent=!0},96199:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"React"),(0,r.kt)("p",null,"React is the most popular front-end JavaScript library for building user interfaces. React can also render on the server using Node and power mobile apps using React Native."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://reactjs.org/",mdxType:"BadgeLink"},"React Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://reactjs.org/tutorial/tutorial.html",mdxType:"BadgeLink"},"Official Getting Started"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://egghead.io/courses/the-beginner-s-guide-to-react",mdxType:"BadgeLink"},"The Beginner's Guide to React"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=nTeuhbP7wdE",mdxType:"BadgeLink"},"React JS Course for Beginners"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=bMknfKXIFA8",mdxType:"BadgeLink"},"React Course - Beginner's Tutorial for React JavaScript Library [2022]"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=i793Qm6kv3U",mdxType:"BadgeLink"},"Understanding React's UI Rendering Process"))}l.isMDXComponent=!0},5685:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"RxJS"),(0,r.kt)("p",null,"RxJS (Reactive Extensions for JavaScript) is a library for reactive programming using observables that makes it easier to compose asynchronous or callback-based code."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://rxjs.dev/guide/overview",mdxType:"BadgeLink"},"RxJS Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://angular.io/guide/rx-library",mdxType:"BadgeLink"},"RxJS Angular Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=2LCo926NFLI",mdxType:"BadgeLink"},"RxJS Quick Start"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=PhggNGsSQyg",mdxType:"BadgeLink"},"RxJS Crash Course"))}l.isMDXComponent=!0},13162:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"NgRx"),(0,r.kt)("p",null,"NgRx is an open source library that provides reactive state management for your Angular applications"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://ngrx.io/docs",mdxType:"BadgeLink"},"Official Documentation"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=2LCo926NFLI",mdxType:"BadgeLink"},"Angular NgRx Redux Quick Start Tutorial"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=nuHBHD32iw8",mdxType:"BadgeLink"},"NgRx Course"))}l.isMDXComponent=!0},23666:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Angular"),(0,r.kt)("p",null,"Angular is a component based front-end development framework built on TypeScript which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://angular.io/start",mdxType:"BadgeLink"},"Official - Getting started with Angular"))}l.isMDXComponent=!0},80549:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Vuex"),(0,r.kt)("p",null,"Vuex is a state management pattern + library for Vue.js applications. It serves as a centralized store for all the components in an application, with rules ensuring that the state can only be mutated in a predictable fashion. "),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://vuex.vuejs.org/",mdxType:"BadgeLink"},"Official Documentation"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=5lVQgZzLMHc",mdxType:"BadgeLink"},"Vuex Crash Course"))}l.isMDXComponent=!0},85277:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Vue.js"),(0,r.kt)("p",null,"Vue.js is an open-source JavaScript framework for building user interfaces and single-page applications. It is mainly focused on front end development."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://vuejs.org/",mdxType:"BadgeLink"},"Vue.js Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://vuejs.org/v2/guide/",mdxType:"BadgeLink"},"Official Getting Started"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=FXpIoQ_rT_c",mdxType:"BadgeLink"},"Vue.js Course for Beginners"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=qZXt1Aom3Cs",mdxType:"BadgeLink"},"Vue.js Crash Course"))}l.isMDXComponent=!0},91473:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Pick a Framework"),(0,r.kt)("p",null,"Web frameworks are designed to write web applications. Frameworks are collections of libraries that aid in the development of a software product or website. Frameworks for web application development are collections of various tools. Frameworks vary in their capabilities and functions, depending on the tasks set. They define the structure, establish the rules, and provide the development tools required."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=D_MO9vIRBcA",mdxType:"BadgeLink"},"What is the difference between a framework and a library?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=cuHDQhDhvPE",mdxType:"BadgeLink"}," Which JS Framework is best?"))}l.isMDXComponent=!0},73745:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Styled components"),(0,r.kt)("p",null,"Styled-components is a CSS-in-JS library that enables you to write regular CSS and attach it to JavaScript components. With styled-components, you can use the CSS you\u2019re already familiar with instead of having to learn a new styling structure."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://styled-components.com/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://styled-components.com/docs",mdxType:"BadgeLink"},"Official Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=02zO0hZmwnw",mdxType:"BadgeLink"},"Styled Components Crash Course & Project"))}l.isMDXComponent=!0},51720:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CSS Modules"),(0,r.kt)("p",null,"CSS files in which all class names and animation names are scoped locally by default."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Official Website",colorScheme:"blue",href:"https://github.com/css-modules/css-modules",mdxType:"BadgeLink"},"Project GitHub Repository"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://medium.com/@ralph1786/using-css-modules-in-react-app-c2079eadbb87",mdxType:"BadgeLink"},"Using CSS Modules In React App"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=pKMWU9OrA2s",mdxType:"BadgeLink"},"CSS Modules: Why are they great?"))}l.isMDXComponent=!0},24349:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Styled JSX"),(0,r.kt)("p",null,"Styled JSX is a CSS-in-JS library that allows you to write encapsulated and scoped CSS to style your components. The styles you introduce for one component won't affect other components, allowing you to add, change and delete styles without worrying about unintended side effects."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://github.com/vercel/styled-jsx",mdxType:"BadgeLink"},"Getting started"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=SM5uVbfgfdo",mdxType:"BadgeLink"},"Styled JSX in Next.js: Master Next.js"))}l.isMDXComponent=!0},14291:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Emotion"),(0,r.kt)("p",null,"Emotion is a library designed for writing css styles with JavaScript. It provides powerful and predictable style composition in addition to a great developer experience with features such as source maps, labels, and testing utilities. Both string and object styles are supported."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://emotion.sh/docs/introduction",mdxType:"BadgeLink"},"Official Website and Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=yO3JU2bMLGA",mdxType:"BadgeLink"},"Styled components using emotion in React"))}l.isMDXComponent=!0},59904:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Modern css"))}s.isMDXComponent=!0},41484:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Html templates"))}s.isMDXComponent=!0},16625:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Custom elements"))}s.isMDXComponent=!0},32901:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Shadow dom"))}s.isMDXComponent=!0},58933:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Web components"))}s.isMDXComponent=!0},94642:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Bootstrap"),(0,r.kt)("p",null,"Quickly design and customize responsive mobile-first sites with Bootstrap, the world\u2019s most popular front-end open source toolkit, featuring Sass variables and mixins, responsive grid system, extensive prebuilt components, and powerful JavaScript plugins."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://getbootstrap.com",mdxType:"BadgeLink"},"Bootstrap Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://getbootstrap.com/docs/5.2/getting-started/introduction/",mdxType:"BadgeLink"},"Bootstrap Official Documentation"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=-qfEOE4vtxE",mdxType:"BadgeLink"},"Bootstrap CSS Framework - Full Course for Beginners"))}l.isMDXComponent=!0},14505:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Bulma"),(0,r.kt)("p",null,"Bulma is a free, open source framework that provides ready-to-use frontend components that you can easily combine to build responsive web interfaces."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://bulma.io/",mdxType:"BadgeLink"},"Bulma Website"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://youtube.com/playlist?list=PL4cUxeGkcC9iXItWKbaQxcyDT1u6E7a8a",mdxType:"BadgeLink"},"Bulma CSS Tutorial"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://scrimba.com/learn/bulma",mdxType:"BadgeLink"},"Learn Bulma CSS"),(0,r.kt)(i,{badgeText:"Read",href:"https://www.freecodecamp.org/news/how-to-build-a-responsive-blog-design-with-bulma-css-c2257a17c16b",mdxType:"BadgeLink"},"How To Build A ? Responsive Blog Design With Bulma CSS"))}l.isMDXComponent=!0},94740:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Css first"))}s.isMDXComponent=!0},21160:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Tailwind CSS"),(0,r.kt)("p",null,"CSS Framework that provides atomic CSS classes to help you style components e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"flex"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pt-4"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"text-center")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"rotate-90")," that can be composed to build any design, directly in your markup."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://tailwindcss.com",mdxType:"BadgeLink"},"Tailwind Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"YouTube Channel",href:"https://www.youtube.com/c/TailwindLabs/videos",mdxType:"BadgeLink"},"Official Screencasts"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Watch",href:"https://www.youtube.com/watch?v=hdGsFpZ0J2E",mdxType:"BadgeLink"},"Should You Use Tailwind CSS?"),(0,r.kt)(i,{badgeText:"Read",href:"https://www.codemag.com/Article/2105091/Tailwind-CSS-An-Introduction",mdxType:"BadgeLink"},"Tailwind CSS: An Introduction"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=UBOj6rqRUME",mdxType:"BadgeLink"},"Tailwind CSS Crash Course"))}l.isMDXComponent=!0},6937:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Chakra UI"),(0,r.kt)("p",null,"Chakra UI is a simple, modular and accessible component library that gives you the building blocks you need to build your React applications."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://chakra-ui.com/",mdxType:"BadgeLink"},"Chakra UI Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://chakra-ui.com/docs/getting-started",mdxType:"BadgeLink"},"Chakra UI Official Getting Started"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://egghead.io/courses/build-a-modern-user-interface-with-chakra-ui-fac68106",mdxType:"BadgeLink"},"Build a Modern User Interface with Chakra UI"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/wI2vqXsjsIo",mdxType:"BadgeLink"},"Official Getting Started Video"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/s-bIsz-NR3c",mdxType:"BadgeLink"},"Chakra UI Crash Course"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/news/why-should-you-start-using-chakraui/",mdxType:"BadgeLink"},"Why You Should Start Using Chakra UI"))}l.isMDXComponent=!0},99120:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Material UI"),(0,r.kt)("p",null,"Material-UI is an open-source framework that features React components that implement Google\u2019s Material Design."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://mui.com/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://mui.com/getting-started/installation/",mdxType:"BadgeLink"},"Official Documentation"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=vyJU9efvUtQ",mdxType:"BadgeLink"},"Material UI React Tutorial"))}l.isMDXComponent=!0},13694:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Radix UI"),(0,r.kt)("p",null,"An open-source UI component library for building high-quality, accessible design systems and web apps."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://www.radix-ui.com/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://www.radix-ui.com/docs/primitives/overview/introduction",mdxType:"BadgeLink"},"Official Documentation"))}l.isMDXComponent=!0},17562:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Js first"))}s.isMDXComponent=!0},21879:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CSS frameworks"),(0,r.kt)("p",null,"A CSS framework provides the user with a fully functional CSS stylesheet, allowing them to create a web page by simply coding the HTML with appropriate classes, structure, and IDs. Classes for popular website features like as the footer, slider, navigation bar, hamburger menu, column-based layouts, and so on are already included in the framework."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://en.wikipedia.org/wiki/CSS_framework",mdxType:"BadgeLink"},"CSS Frameworks Introduction"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Benefits",href:"https://css-tricks.com/what-are-the-benefits-of-using-a-css-framework/",mdxType:"BadgeLink"},"What are the benefits of using a css framework"))}l.isMDXComponent=!0},25996:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Jest"),(0,r.kt)("p",null,"Jest is a delightful JavaScript Testing Framework with a focus on simplicity.\nIt works with projects using: Babel, TypeScript, Node, React, Angular, Vue and more!"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://jestjs.io/",mdxType:"BadgeLink"},"Jest Website"))}l.isMDXComponent=!0},42772:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"React Testing Library"),(0,r.kt)("p",null,"The React Testing Library is a very lightweight solution for testing React components. It provides light utility functions on top of react-dom and react-dom/test-utils, in a way that encourages better testing practices. Its primary guiding principle is: The more your tests resemble the way your software is used, the more confidence they can give you."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Getting Started",href:"https://testing-library.com/docs/react-testing-library/intro/",mdxType:"BadgeLink"}))}l.isMDXComponent=!0},73431:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Cypress"),(0,r.kt)("p",null,"Cypress framework is a JavaScript-based end-to-end testing framework built on top of Mocha \u2013 a feature-rich JavaScript test framework running on and in the browser, making asynchronous testing simple and convenient. It also uses a BDD/TDD assertion library and a browser to pair with any JavaScript testing framework."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://www.cypress.io/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://docs.cypress.io/guides/overview/why-cypress#Other",mdxType:"BadgeLink"},"Official Documentation"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=7N63cMKosIE",mdxType:"BadgeLink"},"Cypress End-to-End Testing"))}l.isMDXComponent=!0},44375:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Enzyme"),(0,r.kt)("p",null,"Enzyme is a JavaScript Testing utility for React that makes it easier to test your React Components' output. You can also manipulate, traverse, and in some ways simulate runtime given the output."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://enzymejs.github.io/enzyme/",mdxType:"BadgeLink"},"Enzyme Website"))}l.isMDXComponent=!0},64946:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Other options"))}s.isMDXComponent=!0},69011:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Mocha"),(0,r.kt)("p",null,"Mocha is a feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun. Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct test cases."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://mochajs.org/",mdxType:"BadgeLink"},"Official Website and Docs"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=Bs68k6xfR3E",mdxType:"BadgeLink"},"Testing Node.js with Mocha"))}l.isMDXComponent=!0},95136:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Chai"),(0,r.kt)("p",null,"Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.chaijs.com/",mdxType:"BadgeLink"},"Official Website and Docs"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://www.chaijs.com/guide/",mdxType:"BadgeLink"},"Official Docs"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=MLTRHc5dk6s",mdxType:"BadgeLink"},"Intro To JavaScript Unit Testing With Mocha JS & Chai"))}l.isMDXComponent=!0},30327:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Ava"),(0,r.kt)("p",null,"Ava is a JavaScript test runner. It utilizes the async I/O nature of Node and runs concurrent tests, thereby vastly decreasing your test times."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Rep",href:"https://github.com/avajs/ava",mdxType:"BadgeLink"},"Official Repository"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/news/testing-your-nodejs-applications-with-ava-js-99e806a226a7/",mdxType:"BadgeLink"},"Testing your Node.js applications with Ava.js"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=RxLW6-3dk5A",mdxType:"BadgeLink"},"AVA Tutorial"))}l.isMDXComponent=!0},68976:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Jasmine"),(0,r.kt)("p",null,"Jasmine is a behavior-driven development framework for testing JavaScript code. It does not depend on any other JavaScript frameworks. It does not require a DOM. And it has a clean, obvious syntax so that you can easily write tests. It provides utilities that can be used to run automated tests for both synchronous and asynchronous code."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://jasmine.github.io/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://jasmine.github.io/pages/docs_home.html",mdxType:"BadgeLink"},"Official Docs"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Rep",href:"https://github.com/jasmine/jasmine",mdxType:"BadgeLink"},"Official Repository"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=rw4KlxKEENQ",mdxType:"BadgeLink"},"Javascript Unit Testing with Jasmine"))}l.isMDXComponent=!0},25770:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Testing your apps"),(0,r.kt)("p",null,"Before delivering your application to users, you need to be sure that your app meets the requirements it was designed for, and that it doesn't do any weird, unintended things (called 'bugs'). To accomplish this, we 'test' our applications in different ways."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.softwaretestingmaterial.com/software-testing/",mdxType:"BadgeLink"},"A comprehensive dive into software testing."),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing",mdxType:"BadgeLink"},"The different types of software tests"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://jestjs.io/docs/tutorial-react",mdxType:"BadgeLink"},"Testing React apps with Jest"))}l.isMDXComponent=!0},83227:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"TypeScript"),(0,r.kt)("p",null,"TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://www.typescriptlang.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://www.typescriptlang.org/docs/",mdxType:"BadgeLink"},"Official Docs for Deep Dives"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Handbook",href:"https://www.typescriptlang.org/docs/handbook/intro.html",mdxType:"BadgeLink"},"The TypeScript Handbook"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.tutorialspoint.com/typescript/index.htm",mdxType:"BadgeLink"},"TypeScript Tutorial"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=BwuLxPH8IDs",mdxType:"BadgeLink"},"TypeScript for Beginners"))}l.isMDXComponent=!0},79935:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Flow"),(0,r.kt)("p",null,"Flow is a static type checker, designed to find type errors in JavaScript programs."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://flow.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://flow.org/en/docs/",mdxType:"BadgeLink"},"Official Documentation"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=0HlqX4lQZas",mdxType:"BadgeLink"},"Flow for Beginners"))}l.isMDXComponent=!0},98323:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Type checkers"))}s.isMDXComponent=!0},54990:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Apis"))}s.isMDXComponent=!0},95089:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a,s=(a="BadgeLink",function(e){return console.warn("Component "+a+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},e))}),i={};function c(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Performance"),(0,r.kt)("p",null,"Performance plays a significant role in the success of any online venture, as high performing sites engage and retain users better than poorly performing ones. Tools like Lighthouse and Devtools highlight performance metrics and help improve performance of PWAs."),(0,r.kt)(s,{colorScheme:"yellow",badgeText:"Read",href:"https://web.dev/fast/",mdxType:"BadgeLink"}," Fast load times: Techniques for improving site performance."),(0,r.kt)(s,{colorScheme:"yellow",badgeText:"Read",href:"https://www.patterns.dev/posts/prpl/",mdxType:"BadgeLink"},"PRPL pattern"),(0,r.kt)(s,{colorScheme:"yellow",badgeText:"Read",href:"https://web.dev/apply-instant-loading-with-prpl/",mdxType:"BadgeLink"},"Apply instant loading with PRPL"),(0,r.kt)(s,{colorScheme:"yellow",badgeText:"Read",href:"https://web.dev/rail/",mdxType:"BadgeLink"},"Measure performance with the RAIL model"),(0,r.kt)(s,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/news/introduction-to-chrome-lighthouse/",mdxType:"BadgeLink"},"Introduction to Chrome Lighthouse"),(0,r.kt)(s,{colorScheme:"yellow",badgeText:"Read",href:"https://developers.google.com/web/ilt/pwa/lighthouse-pwa-analysis-tool",mdxType:"BadgeLink"},"Lighthouse PWA Analysis Tool"),(0,r.kt)(s,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=egmwY9n6qWY",mdxType:"BadgeLink"},"PWA Tutorial: Lighthouse Audit"))}c.isMDXComponent=!0},72768:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Progressive Web Apps"),(0,r.kt)("p",null,"Progressive Web Apps (PWAs) are websites that are progressively enhanced to function like installed, native apps on supporting platforms, while functioning like regular websites on other browsers."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.freecodecamp.org/news/what-are-progressive-web-apps/",mdxType:"BadgeLink"},"Progressive Web Apps for Beginners"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://web.dev/learn/pwa/",mdxType:"BadgeLink"},"Learn PWA"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/",mdxType:"BadgeLink"},"MDN Web Docs: Progressive Web Apps "),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=sFsRylCQblw",mdxType:"BadgeLink"},"Build a Progressive Web App"))}l.isMDXComponent=!0},99086:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Next.js"),(0,r.kt)("p",null,"Next.js is an open-source development framework built on top of Node.js\nenabling React based web applications functionalities such as server-side\nrendering and generating static websites."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://nextjs.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://nextjs.org/docs/getting-started",mdxType:"BadgeLink"},"Official Docs for Getting Started"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://masteringnextjs.com/",mdxType:"BadgeLink"},"Mastering Next.js"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://youtu.be/1WmNXEVia8I",mdxType:"BadgeLink"},"Next.js for Beginners - freeCodeCamp"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Handbook",href:"https://www.freecodecamp.org/news/the-next-js-handbook/",mdxType:"BadgeLink"},"The Next.js Handbook \u2014 freeCodeCamp"))}l.isMDXComponent=!0},4930:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"After.js"),(0,r.kt)("p",null,"After.js is an open-source JavaScript framework for developing SSR (Server Side Rendering) based applications. It is similar to the Next.js framework for server-rendered React apps but uses React Router instead of a folder structure based router like Next.js"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"GitHub",href:"https://github.com/jaredpalmer/after.js",mdxType:"BadgeLink"},"Official GitHub repository"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://www.npmjs.com/package/@jaredpalmer/after",mdxType:"BadgeLink"},"Documetation"))}l.isMDXComponent=!0},88747:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"React"),(0,r.kt)("p",null,"React is the most popular front-end JavaScript library for building user interfaces. React can also render on the server using Node and power mobile apps using React Native."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://reactjs.org/",mdxType:"BadgeLink"},"React Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://reactjs.org/tutorial/tutorial.html",mdxType:"BadgeLink"},"Official Getting Started"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://egghead.io/courses/the-beginner-s-guide-to-react",mdxType:"BadgeLink"},"The Beginner's Guide to React"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=nTeuhbP7wdE",mdxType:"BadgeLink"},"React JS Course for Beginners"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=bMknfKXIFA8",mdxType:"BadgeLink"},"React Course - Beginner's Tutorial for React JavaScript Library [2022]"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=i793Qm6kv3U",mdxType:"BadgeLink"},"Understanding React's UI Rendering Process"))}l.isMDXComponent=!0},67815:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Universal"))}s.isMDXComponent=!0},26394:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Angular"),(0,r.kt)("p",null,"Angular is a component based front-end development framework built on TypeScript which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"blue",href:"https://angular.io/start",mdxType:"BadgeLink"},"Official - Getting started with Angular"))}l.isMDXComponent=!0},62573:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Nuxt.js"),(0,r.kt)("p",null,"Nuxt.js is a free and open source JavaScript library based on Vue.js, Node.js, Webpack and Babel.js. Nuxt is inspired by Next.js, which is a framework of similar purpose, based on React.js."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://nuxtjs.org/",mdxType:"BadgeLink"},"Nuxt Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://nuxtjs.org/docs/get-started/installation",mdxType:"BadgeLink"},"Nuxt Docs"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://explorers.netlify.com/learn/get-started-with-nuxt",mdxType:"BadgeLink"},"Get Started with Nuxt"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://vueschool.io/courses/nuxtjs-fundamentals",mdxType:"BadgeLink"},"Nuxt.js Fundamentals"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://nuxtjs.org/tutorials",mdxType:"BadgeLink"},"Nuxt Tutorials"))}l.isMDXComponent=!0},35137:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Vue.js"),(0,r.kt)("p",null,"Vue.js is an open-source JavaScript framework for building user interfaces and single-page applications. It is mainly focused on front end development."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://vuejs.org/",mdxType:"BadgeLink"},"Vue.js Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://vuejs.org/v2/guide/",mdxType:"BadgeLink"},"Official Getting Started"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=FXpIoQ_rT_c",mdxType:"BadgeLink"},"Vue.js Course for Beginners"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=qZXt1Aom3Cs",mdxType:"BadgeLink"},"Vue.js Crash Course"))}l.isMDXComponent=!0},71905:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Server side rendering"))}s.isMDXComponent=!0},60410:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Apollo"),(0,r.kt)("p",null,"Apollo is a platform for building a unified graph, a communication layer that helps you manage the flow of data between your application clients (such as web and native apps) and your back-end services."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.apollographql.com",mdxType:"BadgeLink"},"Apollo Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://www.apollographql.com/docs/",mdxType:"BadgeLink"},"Official Docs"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Watch",href:"https://www.youtube.com/c/ApolloGraphQL/",mdxType:"BadgeLink"},"Official YouTube Channel"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=YyUWW04HwKY",mdxType:"BadgeLink"},"GraphQL With React Tutorial - Apollo Client"))}l.isMDXComponent=!0},60485:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Relay Modern"),(0,r.kt)("p",null,"Relay is a JavaScript client used in the browser to fetch GraphQL data. It's a JavaScript framework developed by Facebook for managing and fetching data in React applications. It is built with scalability in mind in order to power complex applications like Facebook. The ultimate goal of GraphQL and Relay is to deliver instant UI-response interactions."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://relay.dev/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://relay.dev/docs/",mdxType:"BadgeLink"},"Introduction to Relay modern"))}l.isMDXComponent=!0},24133:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Graphql"),(0,r.kt)("p",null,"GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://graphql.org/learn/",mdxType:"BadgeLink"},"Introduction to GraphQL"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.howtographql.com/",mdxType:"BadgeLink"},"The Fullstack Tutorial for GraphQL"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://odyssey.apollographql.com/",mdxType:"BadgeLink"},"GraphQL Tutorials"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=ed8SzALpx1Q",mdxType:"BadgeLink"},"GraphQL Course for Beginners"))}l.isMDXComponent=!0},57935:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Next.js"),(0,r.kt)("p",null,"Next.js is an open-source development framework built on top of Node.js\nenabling React based web applications functionalities such as server-side\nrendering and generating static websites."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://nextjs.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://nextjs.org/docs/getting-started",mdxType:"BadgeLink"},"Official Docs for Getting Started"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://masteringnextjs.com/",mdxType:"BadgeLink"},"Mastering Next.js"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://youtu.be/1WmNXEVia8I",mdxType:"BadgeLink"},"Next.js for Beginners - Full Course at freeCodeCamp YouTube Channel"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Handbook",href:"https://www.freecodecamp.org/news/the-next-js-handbook/",mdxType:"BadgeLink"},"The Next.js Handbook \u2014 FreeCodeCamp"))}l.isMDXComponent=!0},1291:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Gatsby"),(0,r.kt)("p",null,"Gatsby is a React-based open source framework with performance, scalability and security built-in."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.gatsbyjs.com/",mdxType:"BadgeLink"},"Gatsby Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://www.gatsbyjs.com/docs",mdxType:"BadgeLink"},"Gatsby Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtube.com/playlist?list=PL4cUxeGkcC9hw1g77I35ZivVLe8k2nvjB",mdxType:"BadgeLink"},"Gatsby Tutorial"))}l.isMDXComponent=!0},20855:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Nuxt js"),(0,r.kt)("p",null,"Nuxt.js is an open-source development framework built on top of Node.js\nenabling Vue based web applications functionalities such as server-side\nrendering and generating static websites."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://nuxtjs.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://nuxtjs.org/docs/get-started",mdxType:"BadgeLink"},"Official Docs for Getting Started"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://masteringnuxt.com/",mdxType:"BadgeLink"},"Mastering Nuxt.js"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=FXpIoQ_rT_c",mdxType:"BadgeLink"},"Vue.js for Beginners - Full Course at freeCodeCamp YouTube Channel"))}l.isMDXComponent=!0},32374:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Vuepress"),(0,r.kt)("p",null,"VuePress is composed of two parts: a minimalistic static site generator (opens new window)with a Vue-powered theming system and Plugin API, and a default theme optimized for writing technical documentation. It was created to support the documentation needs of Vue\u2019s own sub projects."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://vuepress.vuejs.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://vuepress.vuejs.org/guide/getting-started.html",mdxType:"BadgeLink"},"Official Docs for Getting Started"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=lIv1ItUzktc",mdxType:"BadgeLink"},"Introduction to VuePress"))}l.isMDXComponent=!0},51898:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Jekyll"),(0,r.kt)("p",null,"Jekyll is a static site generator. It takes text written in your favorite markup language and uses layouts to create a static website. You can tweak the site\u2019s look and feel, URLs, the data displayed on the page, and more."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://jekyllrb.com/",mdxType:"BadgeLink"},"Jekyll Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://jekyllrb.com/docs/",mdxType:"BadgeLink"},"Jekyll Docs"))}l.isMDXComponent=!0},90355:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Hugo"),(0,r.kt)("p",null,"Hugo is the world\u2019s fastest static website engine. It\u2019s written in Go (aka Golang) and developed by bep, spf13 and friends."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Resources"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://gohugo.io/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://gohugo.io/documentation/",mdxType:"BadgeLink"},"Official Docs for Getting Started"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=qtIqKaDlqXo&list=PLLAZ4kZ9dFpOnyRlyS-liKL5ReHDcj4G3",mdxType:"BadgeLink"},"Introduction to Hugo - Static Site Generator "))}l.isMDXComponent=!0},82578:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Gridsome"),(0,r.kt)("p",null,"Gridsome is a Vue.js powered Jamstack framework for building static generated websites & apps that are fast by default."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://gridsome.org/",mdxType:"BadgeLink"},"Gridsome Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://gridsome.org/docs/",mdxType:"BadgeLink"},"Gridsome Documentation"))}l.isMDXComponent=!0},80476:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Eleventy"),(0,r.kt)("p",null,"Eleventy (11ty) is a simple to use, easy to customize, highly performant and powerful static site generator with a helpful set of plugins (e.g. navigation, build-time image transformations, cache assets). Pages can be built and written with a variety of template languages (HTML, Markdown, JavaScript, Liquid, Nunjucks, Handlebars, Mustache, EJS, Haml, Pug or JS template literals). But it also offers the possibility to dynamically create pages from local data or external sources that are compiled at build time. It has zero client-side JavaScript dependencies."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Website",href:"https://www.11ty.dev/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=-dM6AmNmMFA",mdxType:"BadgeLink"},"Introduction to Eleventy"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://11ty.rocks/",mdxType:"BadgeLink"},"A collection of 11ty starters, projects, plugins, and resources"))}l.isMDXComponent=!0},35470:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Static Site Generators"),(0,r.kt)("p",null,"A static site generator is a tool that generates a full static HTML website based on raw data and a set of templates. Essentially, a static site generator automates the task of coding individual HTML pages and gets those pages ready to serve to users ahead of time. Because these HTML pages are pre-built, they can load very quickly in users' browsers."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/learning/performance/static-site-generator/",mdxType:"BadgeLink"},"What is a static site generator?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://nextjs.org/docs/advanced-features/static-html-export",mdxType:"BadgeLink"},"Next.js SSG"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.gatsbyjs.com/docs/glossary/static-site-generator/",mdxType:"BadgeLink"},"Gatsby SSG"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.smashingmagazine.com/2021/10/building-ssg-11ty-vite-jam-sandwich/",mdxType:"BadgeLink"},"SSG \u2014\xa0An 11ty, Vite And JAM Sandwich"))}l.isMDXComponent=!0},52919:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"React Native"),(0,r.kt)("p",null,"React Native is a popular JavaScript-based mobile app framework that allows you to build natively-rendered mobile apps for iOS and Android. The framework lets you create an application for various platforms by using the same codebase."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://reactnative.dev/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://reactnative.dev/docs/getting-started",mdxType:"BadgeLink"},"Official Getting Started to React Native"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=0-S5a0eXPoc",mdxType:"BadgeLink"},"Tutorial to Learn React Native"))}l.isMDXComponent=!0},15760:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"NativeScript"),(0,r.kt)("p",null,"NativeScript is an open source framework for creating native iOS and Android apps in Angular, TypeScript, or JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://nativescript.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://docs.nativescript.org/",mdxType:"BadgeLink"},"Official Getting Started to NativeScript"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=DcCSq2Y9bow",mdxType:"BadgeLink"},"NativeScript Tutorial for Beginners"))}l.isMDXComponent=!0},59268:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Flutter"),(0,r.kt)("p",null,"Flutter is a free and open-source mobile UI framework created by Google and released in May 2017. In a few words, it allows you to create a native mobile application with only one codebase. This means that you can use one programming language and one codebase to create two different apps (for iOS and Android)."),(0,r.kt)("p",null,"Flutter consists of two important parts:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"An SDK (Software Development Kit): A collection of tools that are going to help you develop your applications. This includes tools to compile your code into native machine code (code for iOS and Android)."),(0,r.kt)("li",{parentName:"ul"},"A Framework (UI Library based on widgets): A collection of reusable UI elements (buttons, text inputs, sliders, and so on) that you can personalize for your own needs.\nTo develop with Flutter, you will use a programming language called Dart. The language was created by Google in October 2011, but it has improved a lot over these past years.")),(0,r.kt)("p",null,"Dart focuses on front-end development, and you can use it to create mobile and web applications."),(0,r.kt)("p",null,"If you know a bit of programming, Dart is a typed object programming language. You can compare Dart's syntax to JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://flutter.dev",mdxType:"BadgeLink"},"Flutter Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.w3adda.com/flutter-tutorial",mdxType:"BadgeLink"},"Flutter Tutorial"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=1ukSR1GRtMU&list=PL4cUxeGkcC9jLYyp2Aoh6hcWuxFDX6PBJ",mdxType:"BadgeLink"},"Flutter Tutorial for Beginners"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.w3adda.com/flutter-tutorial",mdxType:"BadgeLink"},"Flutter Tutorial"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.tutorialspoint.com/dart_programming/index.htm",mdxType:"BadgeLink"},"Learn Dart Programming"))}l.isMDXComponent=!0},17280:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Ionic"),(0,r.kt)("p",null,"Ionic framework is an open-source UI toolkit for building performant, high-quality mobile apps, desktop apps, and progressive web apps using web technologies such as HTML, CSS, and JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://ionicframework.com/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://ionicframework.com/docs/",mdxType:"BadgeLink"},"Official Getting Started to Ionic framework"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=AvbuIRg8_Jg",mdxType:"BadgeLink"},"Ionic Framework 4 - Full Tutorial"))}l.isMDXComponent=!0},20388:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Mobile applications"))}s.isMDXComponent=!0},37137:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Electron"),(0,r.kt)("p",null,'Electron allows you to build cross-platform desktop applications with HTML, CSS, and Javascript/Typescript. It uses Chromium and Node.js, so essentially it is a "Browser" like application that is compatible with Mac, Windows, and Linux.'),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.electronjs.org/",mdxType:"BadgeLink"},"Electron Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://www.electronjs.org/docs/latest/",mdxType:"BadgeLink"},"Electron Docs"))}l.isMDXComponent=!0},30373:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Carlo"),(0,r.kt)("p",null,"Carlo is a headful Node app framework for building desktop applications."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Official Rep",href:"https://github.com/GoogleChromeLabs/carlo",mdxType:"BadgeLink"},"Github Repository"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://blog.agney.dev/carlo-on-web-server/",mdxType:"BadgeLink"},"Carlo development on a web server"))}l.isMDXComponent=!0},55588:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Proton native"),(0,r.kt)("p",null,"Proton Native allows you to create desktop applications through a React syntax, on all platforms."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://proton-native.js.org/",mdxType:"BadgeLink"},"Official Website and Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Hw6vPBfVVeo",mdxType:"BadgeLink"},"Getting Started With Proton Native"))}l.isMDXComponent=!0},78773:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Desktop applications"))}s.isMDXComponent=!0},9429:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Web Assembly"),(0,r.kt)("p",null,"WebAssembly is a new type of code that can be run in modern web browsers \u2014 it is a low-level assembly-like language with a compact binary format that runs with near-native performance and provides languages such as C/C++, C# and Rust with a compilation target so that they can run on the web. It is also designed to run alongside JavaScript, allowing both to work together."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://webassembly.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://webassembly.org/getting-started/developers-guide/",mdxType:"BadgeLink"},"Official Getting Started to Web Assembly"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=3sU557ZKjUs",mdxType:"BadgeLink"},"An introduction to WebAssembly"))}l.isMDXComponent=!0},17086:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null))}s.isMDXComponent=!0},47083:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("br",null),(0,r.kt)("p",null,"The resources have been moved to the ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/frontend"}),"interactive frontend roadmap")," \u2014 try clicking any nodes!"))}s.isMDXComponent=!0},31921:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Internet"),(0,r.kt)("p",null,"The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.vox.com/2014/6/16/18076282/the-internet",mdxType:"BadgeLink"},"The Internet Explained"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm",mdxType:"BadgeLink"},"How Does the Internet Work?"),(0,r.kt)(i,{badgeText:"Watch",href:"/guides/what-is-internet",mdxType:"BadgeLink"},"Introduction to Internet"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=x3c1ih2NJEg",mdxType:"BadgeLink"},"How does the Internet work?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7_LPdttKXPc",mdxType:"BadgeLink"},"How the Internet Works in 5 Minutes"))}l.isMDXComponent=!0},24765:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"What is HTTP?"),(0,r.kt)("p",null,"HTTP is the ",(0,r.kt)("inlineCode",{parentName:"p"},"TCP/IP")," based application layer communication protocol which standardizes how the client and server communicate with each other. It defines how the content is requested and transmitted across the internet."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/",mdxType:"BadgeLink"},"What is HTTP?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview",mdxType:"BadgeLink"},"An overview of HTTP"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://kamranahmed.info/blog/2016/08/13/http-in-depth/",mdxType:"BadgeLink"},"Journey to HTTP/2"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/",mdxType:"BadgeLink"},"HTTP/3 From A To Z: Core Concepts"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=iYM2zFP3Zn0",mdxType:"BadgeLink"},"HTTP Crash Course & Exploration"))}l.isMDXComponent=!0},98817:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Browsers"),(0,r.kt)("p",null,"A web browser is a software application that enables a user to access and display web pages or other online content through its graphical user interface."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/",mdxType:"BadgeLink"},"How Browsers Work"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.browserstack.com/guide/browser-rendering-engine",mdxType:"BadgeLink"},"Role of Rendering Engine in Browsers"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work",mdxType:"BadgeLink"},"Populating the Page: How Browsers Work"))}l.isMDXComponent=!0},60450:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"DNS"),(0,r.kt)("p",null,"The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com. Web browsers interact through Internet Protocol (IP) addresses. DNS translates domain names to IP addresses so browsers can load Internet resources."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/",mdxType:"BadgeLink"},"What is DNS?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Wj0od2ag5sk",mdxType:"BadgeLink"},"DNS and How does it Work?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7lxgpKh_fRY",mdxType:"BadgeLink"},"DNS Records"))}l.isMDXComponent=!0},98402:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Domain Name"),(0,r.kt)("p",null,"A domain name is a unique, easy-to-remember address used to access websites, such as \u2018google.com\u2019, and \u2018facebook.com\u2019. Users can connect to websites using domain names thanks to the DNS system."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_domain_name",mdxType:"BadgeLink"},"What is a Domain Name?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/en-gb/learning/dns/glossary/what-is-a-domain-name/",mdxType:"BadgeLink"},"What is a Domain Name? | Domain name vs. URL"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Y4cRx19nhJk",mdxType:"BadgeLink"},"A Beginners Guide to How Domain Names Work"))}l.isMDXComponent=!0},52573:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Hosting"),(0,r.kt)("p",null,"Web hosting is an online service that allows you to publish your website files onto the internet. So, anyone who has access to the internet has access to your website."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=htbY9-yggB0",mdxType:"BadgeLink"},"What Is Web Hosting? Explained"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=AXVZYzw8geg",mdxType:"BadgeLink"},"Different Types of Web Hosting Explained"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Kx_1NYYJS7Q",mdxType:"BadgeLink"},"Where to Host a Fullstack Project on a Budget"))}l.isMDXComponent=!0},91812:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Internet"),(0,r.kt)("p",null,"The Internet is a global network of computers connected to each other which communicate through a standardized set of protocols."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.vox.com/2014/6/16/18076282/the-internet",mdxType:"BadgeLink"},"The Internet Explained"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm",mdxType:"BadgeLink"},"How Does the Internet Work?"),(0,r.kt)(i,{badgeText:"Watch",href:"/guides/what-is-internet",mdxType:"BadgeLink"},"Introduction to Internet"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=x3c1ih2NJEg",mdxType:"BadgeLink"},"How does the Internet work?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7_LPdttKXPc",mdxType:"BadgeLink"},"How the Internet Works in 5 Minutes"))}l.isMDXComponent=!0},56363:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"HTML"),(0,r.kt)("p",null,"HTML stands for HyperText Markup Language. It is used on the frontend and gives the structure to the webpage which you can style using CSS and make interactive using JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",href:"https://www.w3schools.com/html/html_intro.asp",mdxType:"BadgeLink"},"W3Schools: Learn HTML"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=pQN-pnXPaVg",mdxType:"BadgeLink"},"HTML Full Course - Build a Website Tutorial"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=qz0aGYrrlhU",mdxType:"BadgeLink"},"HTML Tutorial for Beginners: HTML Crash Course"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.codecademy.com/learn/learn-html",mdxType:"BadgeLink"},"Codecademy - Learn HTML"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://github.com/denysdovhan/learnyouhtml",mdxType:"BadgeLink"},"Interactive HTML Course"))}l.isMDXComponent=!0},91440:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CSS"),(0,r.kt)("p",null,"CSS or Cascading Style Sheets is the language used to style the frontend of any website. CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.w3schools.com/css/",mdxType:"BadgeLink"},"W3Schools \u2014 Learn CSS"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/learn/responsive-web-design/",mdxType:"BadgeLink"},"freeCodeCamp \u2014 Responsive Web Design"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://learn.shayhowe.com/html-css/building-your-first-web-page/",mdxType:"BadgeLink"},"Learn to Code HTML & CSS"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=yfoY53QXEnI",mdxType:"BadgeLink"},"CSS Crash Course For Absolute Beginners"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=D-h8L5hgW-w",mdxType:"BadgeLink"},"HTML and CSS Tutorial"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=FqmB-Zj2-PA",mdxType:"BadgeLink"},"CSS Masterclass - Tutorial & Course for Beginners"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://flexbox.io/",mdxType:"BadgeLink"},"What The Flexbox!"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.codecademy.com/learn/learn-css",mdxType:"BadgeLink"},"Learn CSS | Codecademy"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.codecademy.com/learn/learn-intermediate-css",mdxType:"BadgeLink"},"Learn Intermediate CSS | Codecademy"))}l.isMDXComponent=!0},65898:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"JavaScript"),(0,r.kt)("p",null,"JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/js/",mdxType:"BadgeLink"},"W3Schools \u2013 JavaScript Tutorial"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://javascript.info/",mdxType:"BadgeLink"},"The Modern JavaScript Tutorial"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/hdI2bqOjy3c?t=2",mdxType:"BadgeLink"},"JavaScript Crash Course for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/P7t13SGytRk?t=22",mdxType:"BadgeLink"},"Build a Netflix Landing Page Clone with HTML, CSS & JS"))}l.isMDXComponent=!0},80760:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Basic Frontend Knowledge"),(0,r.kt)("p",null,"As a backend developer, you may not need to have proficient knowledge of the frontend stack but you should at least have some basic understanding of HTML, CSS and JavaScript."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/html/html_intro.asp",mdxType:"BadgeLink"},"W3Schools: Learn HTML"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.w3schools.com/css/",mdxType:"BadgeLink"},"W3Schools: Learn CSS"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/js/",mdxType:"BadgeLink"},"W3Schools: JavaScript Tutorial"))}l.isMDXComponent=!0},43869:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a,s=(a="BadgeLink",function(e){return console.warn("Component "+a+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},e))}),i={};function c(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Terminal usage"),(0,r.kt)("p",null,"Terminals, also known as command lines or consoles, allow us to accomplish and automate tasks on a computer without the use of a graphical user interface."),(0,r.kt)(s,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line",mdxType:"BadgeLink"},"Command line crash course"),(0,r.kt)(s,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=jDINUSK7rXE",mdxType:"BadgeLink"},"Basic Terminal Usage - Cheat Sheet to make the command line EASY"))}c.isMDXComponent=!0},55739:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a,s=(a="BadgeLink",function(e){return console.warn("Component "+a+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},e))}),i={};function c(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Operating Systems"),(0,r.kt)("p",null,"An operating system is a main program on computer, that governs all other applications. It allows you to use browsers, play games, print documents, launch your favorite program."),(0,r.kt)(s,{colorScheme:"yellow",badgeText:"Read",href:"https://infinite.education/view/how_oss_work_in_general",mdxType:"BadgeLink"},"How OSs work in general"),(0,r.kt)(s,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=9GDX-IyZ_C8",mdxType:"BadgeLink"}," Operating System Basics "))}c.isMDXComponent=!0},25210:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Process Management"),(0,r.kt)("p",null,"Process management involves various tasks like creation, scheduling, termination of processes, and a deadlock. Process is a program that is under execution, which is an important part of modern-day operating systems. The OS must allocate resources that enable processes to share and exchange information. It also protects the resources of each process from other methods and allows synchronization among processes."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://medium.com/@akhandmishra/operating-system-process-and-process-management-108d83e8ce60",mdxType:"BadgeLink"},"Operating System: Process and Process Management"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.guru99.com/process-management-pcb.html",mdxType:"BadgeLink"},"Process Management in OS: PCB in Operating System"))}l.isMDXComponent=!0},73693:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Threads and Concurrency"),(0,r.kt)("p",null,"A thread is the smallest unit of processing that can be performed in an OS. In most modern operating systems, a thread exists within a process - that is, a single process may contain multiple threads."),(0,r.kt)("p",null,"Concurrency refers to the execution of multiple threads at the same time. It occurs in an operating system when multiple process threads are executing concurrently. These threads can interact with one another via shared memory or message passing. Concurrency results in resource sharing, which causes issues like deadlocks and resource scarcity. It aids with techniques such as process coordination, memory allocation, and execution schedule to maximize throughput."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.backblaze.com/blog/whats-the-diff-programs-processes-and-threads/",mdxType:"BadgeLink"},"What\u2019s the Diff: Programs, Processes and Threads"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.javatpoint.com/concurrency-in-operating-system",mdxType:"BadgeLink"},"Concurrency in Operating System"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=exbKr6fnoUw",mdxType:"BadgeLink"},"Intro to Processes & Threads"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=iKtvNJQoCNw",mdxType:"BadgeLink"},"Introduction to Concurrency"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=olYdb0DdGtM",mdxType:"BadgeLink"},"Concurrency, Threading and Parallelism Explained"))}l.isMDXComponent=!0},72175:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Basic Terminal Commands"),(0,r.kt)("p",null,"Working within the terminal is common practice for any Backend Developer and there are many commands and utilities that can help you achieve your tasks more efficiently."),(0,r.kt)("p",null,"The best way to learn these commands is to practice them in your own machine/environment. Specifically, these are related to Linux commands/utilities which are the most prevalent in the market."),(0,r.kt)("p",null,"To understand these commands, read through the manual pages by using ",(0,r.kt)("inlineCode",{parentName:"p"},"man")," command e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"man grep"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"man awk")," etc."),(0,r.kt)("p",null,"After enough exposure and practice to these commands, it will become easier to use these in practice"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.learnenough.com/command-line-tutorial",mdxType:"BadgeLink"},"Command Line Tutorial"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.hostinger.com/tutorials/linux-commands",mdxType:"BadgeLink"},"34 Basic Linux Commands"))}l.isMDXComponent=!0},62300:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a,s=(a="BadgeLink",function(e){return console.warn("Component "+a+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},e))}),i={};function c(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Memory Management"),(0,r.kt)("p",null,"The term Memory can be defined as a collection of data in a specific format. It is used to store instructions and process data. The memory comprises a large array or group of words or bytes, each with its own location. The primary motive of a computer system is to execute programs. These programs, along with the information they access, should be in the main memory during execution. The CPU fetches instructions from memory according to the value of the program counter. "),(0,r.kt)("p",null,"To achieve a degree of multiprogramming and proper utilization of memory, memory management is important. There are several memory management methods, reflecting various approaches, and the effectiveness of each algorithm depends on the situation."),(0,r.kt)(s,{badgeText:"Read",colorScheme:"yellow",href:"https://dev.to/deepu105/demystifying-memory-management-in-modern-programming-languages-ddd",mdxType:"BadgeLink"},"Demystifying memory management in modern programming languages"),(0,r.kt)(s,{badgeText:"Read",colorScheme:"yellow",href:"https://www.geeksforgeeks.org/memory-management-in-operating-system/",mdxType:"BadgeLink"},"Memory Management in Operating System"))}c.isMDXComponent=!0},94668:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a,s=(a="BadgeLink",function(e){return console.warn("Component "+a+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},e))}),i={};function c(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Interprocess Communication"),(0,r.kt)("p",null,"Interprocess communication (IPC) refers specifically to the mechanisms an operating system provides to allow the processes to manage shared data"),(0,r.kt)(s,{badgeText:"Read",colorScheme:"yellow",href:"https://www.geeksforgeeks.org/inter-process-communication-ipc/",mdxType:"BadgeLink"},"Interprocess Communication"),(0,r.kt)(s,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=dJuYKfR8vec",mdxType:"BadgeLink"},"Interprocess Communication - Neso Academy"))}c.isMDXComponent=!0},86789:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Io management"))}s.isMDXComponent=!0},39736:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Posix basics"))}s.isMDXComponent=!0},47142:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Basic networking concepts"))}s.isMDXComponent=!0},98419:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"General Knowledge"),(0,r.kt)("p",null,"Operating System is a program that manages a computer\u2019s resources, especially the allocation of those resources among other programs. Typical resources include the central processing unit (CPU), computer memory, file storage, input/output (I/O) devices, and network connections."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://edu.gcfglobal.org/en/computerbasics/understanding-operating-systems/1/",mdxType:"BadgeLink"},"What is an operating system?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=26QPDBe-NB8&ab_channel=CrashCourse",mdxType:"BadgeLink"},"Operating Systems: Crash Course Computer Science #18"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=vBURTt97EkA&list=PL9hkZBQk8d1zEGbY7ShWCZ2n1gtxqkRrS&index=1",mdxType:"BadgeLink"},"Introduction to Operating System"))}l.isMDXComponent=!0},75063:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Go"),(0,r.kt)("p",null,"Go is an open source programming language supported by Google. Go can be used to write cloud services, CLI tools, used for API development, and much more."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://go.dev/tour/welcome/1",mdxType:"BadgeLink"},"A Tour of Go \u2013 Go Basics"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://go.dev/doc/",mdxType:"BadgeLink"},"Go Reference Documentation"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://gobyexample.com/",mdxType:"BadgeLink"},"Go by Example - annotated example programs"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.codecademy.com/learn/learn-go",mdxType:"BadgeLink"},"Learn Go | Codecademy"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.w3schools.com/go/",mdxType:"BadgeLink"},"W3Schools Go Tutorial "))}l.isMDXComponent=!0},4332:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Rust"),(0,r.kt)("p",null,"Rust is a modern systems programming language focusing on safety, speed, and concurrency. It accomplishes these goals by being memory safe without using garbage collection."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://doc.rust-lang.org/book/",mdxType:"BadgeLink"},"The Rust Programming Language - online book"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://doc.rust-lang.org/stable/rust-by-example/index.html",mdxType:"BadgeLink"},"Rust by Example - collection of runnable examples"))}l.isMDXComponent=!0},76017:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Java"),(0,r.kt)("p",null,"Java is general-purpose language, primarily used for Internet-based applications.\nIt was created in 1995 by James Gosling at Sun Microsystems and is one of the most popular options for backend developers."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.java.com/",mdxType:"BadgeLink"},"Java Website"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Learn",href:"https://www.codecademy.com/learn/learn-java",mdxType:"BadgeLink"},"Codeacademy - Free Course"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Learn",href:"https://www.w3schools.com/java/",mdxType:"BadgeLink"},"W3 Schools Tutorials"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=eIrMbAQSU34",mdxType:"BadgeLink"},"Java Crash Course"))}l.isMDXComponent=!0},99855:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Csharp"),(0,r.kt)("p",null,'C# (pronounced "C sharp") is a general purpose programming language made by Microsoft. It is used to perform different tasks and can be used to create web apps, games, mobile apps, etc.'),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Learn",href:"https://docs.microsoft.com/en-us/learn/paths/csharp-first-steps/?WT.mc_id=dotnet-35129-website",mdxType:"BadgeLink"},"C# Learning Path"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Learn",href:"https://www.w3schools.com/cs/index.php",mdxType:"BadgeLink"},"C# on W3 schools"),(0,r.kt)(i,{badgeText:"Watch",href:"https://docs.microsoft.com/en-us/shows/CSharp-101/?WT.mc_id=Educationalcsharp-c9-scottha",mdxType:"BadgeLink"},"Introduction to C#"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=gfkTfcpWqAY&list=PLTjRvDozrdlz3_FPXwb6lX_HoGXa09Yef",mdxType:"BadgeLink"},"C# tutorials"))}l.isMDXComponent=!0},80110:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"PHP"),(0,r.kt)("p",null,"PHP is a server scripting language and a powerful tool for making dynamic and interactive Web pages. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1994. The PHP reference implementation is now produced by The PHP Group."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://php.org/",mdxType:"BadgeLink"},"PHP Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.w3schools.com/php/",mdxType:"BadgeLink"},"Learn PHP - W3Schools"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=2eebptXfEvw",mdxType:"BadgeLink"},"PHP For Absolute Beginners"))}l.isMDXComponent=!0},30174:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"JavaScript"),(0,r.kt)("p",null,"JavaScript allows you to add interactivity to your pages. Common examples that you may have seen on the websites are sliders, click interactions, popups and so on. Apart from being used on the frontend in browsers, there is Node.js which is an open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside a web browser."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.w3schools.com/js/",mdxType:"BadgeLink"},"W3Schools \u2013 JavaScript Tutorial"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://javascript.info/",mdxType:"BadgeLink"},"The Modern JavaScript Tutorial"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/hdI2bqOjy3c",mdxType:"BadgeLink"},"JavaScript Crash Course for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=fBNz5xF-Kx4",mdxType:"BadgeLink"},"Node.js Crash Course"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=TlB_eWDSMt4",mdxType:"BadgeLink"},"Node.js Tutorial for Beginners"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.codecademy.com/learn/introduction-to-javascript",mdxType:"BadgeLink"},"Codecademy - Learn JavaScript"))}l.isMDXComponent=!0},82331:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Python"),(0,r.kt)("p",null,"Python is a well known programming language which is both a strongly typed and a dynamically typed language. Being an interpreted language, code is executed as soon as it is written and the Python syntax allows for writing code in functional, procedureal or object-oriented programmatic ways."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Python Website",href:"https://www.python.org/",mdxType:"BadgeLink"},"Python Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://www.python.org/about/gettingstarted/",mdxType:"BadgeLink"},"Python Getting Started"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.w3schools.com/python/",mdxType:"BadgeLink"},"W3Schools - Python Tutorial "),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://ehmatthes.github.io/pcc/",mdxType:"BadgeLink"},"Python Crash Course"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://automatetheboringstuff.com/",mdxType:"BadgeLink"},"Automate the Boring Stuff"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.codecademy.com/learn/learn-python",mdxType:"BadgeLink"},"Codecademy - Learn Python 2"))}l.isMDXComponent=!0},4236:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Ruby"),(0,r.kt)("p",null,"Ruby is a high-level, interpreted programming language that blends Perl, Smalltalk, Eiffel, Ada, and Lisp. Ruby focuses on simplicity and productivity along with a syntax that reads and writes naturally. Ruby supports procedural, object-oriented and functional programming and is dynamically typed."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Ruby Website",href:"https://www.ruby-lang.org/en/",mdxType:"BadgeLink"},"Ruby Website"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.ruby-lang.org/en/documentation/quickstart/",mdxType:"BadgeLink"},"Learn Ruby in 20 minutes"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.codecademy.com/learn/learn-ruby",mdxType:"BadgeLink"},"Learn Ruby | Codecademy"))}l.isMDXComponent=!0},22533:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Learn a language"))}s.isMDXComponent=!0},63163:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Git"),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://git-scm.com/"}),"Git")," is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=zbKdDsNNOhg",mdxType:"BadgeLink"},"Version Control System Introduction"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=SWYqp7iY_Tc",mdxType:"BadgeLink"},"Git & GitHub Crash Course For Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/Y9XZQO1n_7c?t=21",mdxType:"BadgeLink"},"Learn Git in 20 Minutes"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://github.com/jlord/git-it-electron",mdxType:"BadgeLink"},"Learn Git on the command line"))}l.isMDXComponent=!0},32223:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Version Control Systems"),(0,r.kt)("p",null,"Version control/source control systems allow developers to track and control changes to code over time. These services often include the ability to make atomic revisions to code, branch/fork off of specific points, and to compare versions of code. They are useful in determining the who, what, when, and why code changes were made."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://git-scm.com/",mdxType:"BadgeLink"},"Git"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.mercurial-scm.org/",mdxType:"BadgeLink"},"Mercurial"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.atlassian.com/git/tutorials/what-is-version-control",mdxType:"BadgeLink"},"What is Version Control?"))}l.isMDXComponent=!0},66926:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"GitHub"),(0,r.kt)("p",null,"GitHub is a provider of Internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Official Website",colorScheme:"blue",href:"https://github.com",mdxType:"BadgeLink"},"GitHub Website"),(0,r.kt)(i,{badgeText:"Official Documentation",colorScheme:"blue",href:"https://docs.github.com/en/get-started/quickstart",mdxType:"BadgeLink"},"GitHub Documentation"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=w3jLJU7DT5E",mdxType:"BadgeLink"},"What is GitHub?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=wpISo9TNjfU",mdxType:"BadgeLink"},"Git vs. GitHub: What's the difference?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=RGOj5yH7evk",mdxType:"BadgeLink"},"Git and GitHub for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=eulnSXkhE7I",mdxType:"BadgeLink"},"Git and GitHub - CS50 Beyond 2019"),(0,r.kt)(i,{badgeText:"Course",href:"https://ooloo.io/project/github-flow",mdxType:"BadgeLink"},"How to Use Git in a Professional Dev Team"))}l.isMDXComponent=!0},11425:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"GitLab"),(0,r.kt)("p",null,"GitLab is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Official Website",colorScheme:"blue",href:"https://gitlab.com/",mdxType:"BadgeLink"},"GitLab Website"),(0,r.kt)(i,{badgeText:"Official Documentation",colorScheme:"blue",href:"https://docs.gitlab.com/",mdxType:"BadgeLink"},"GitLab Documentation"))}l.isMDXComponent=!0},94448:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Bitbucket"),(0,r.kt)("p",null,"Bitbucket is a Git based hosting and source code repository service that is Atlassian's alternative to other products like GitHub, GitLab etc"),(0,r.kt)("p",null,"Bitbucket offers hosting options via Bitbucket Cloud (Atlassian's servers), Bitbucket Server (customer's on-premise) or Bitbucket Data Centre (number of servers in customers on-premise or cloud environment)"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Bitbucket Website",href:"https://bitbucket.org/product",mdxType:"BadgeLink"},"Bitbucket Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://bitbucket.org/product/guides/getting-started/overview#a-brief-overview-of-bitbucket",mdxType:"BadgeLink"},"A brief overview of Bitbucket"),(0,r.kt)(i,{badgeText:"Guide",colorScheme:"green",href:"https://bitbucket.org/product/guides/basics/bitbucket-interface",mdxType:"BadgeLink"},"Getting started with Bitbucket"),(0,r.kt)(i,{badgeText:"Guide",colorScheme:"green",href:"https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud",mdxType:"BadgeLink"},"Using Git with Bitbucket Cloud"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=M44nEyd_5To",mdxType:"BadgeLink"},"Bitbucket tutorial | How to use Bitbucket Cloud"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=i5T-DB8tb4A",mdxType:"BadgeLink"},"Bitbucket Tutorial | Bitbucket for Beginners"))}l.isMDXComponent=!0},1973:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Repo Hosting Services"),(0,r.kt)("p",null,"When working on a team, you often need a remote place to put your code so others can access it, create their own branches, and create or review pull requests. These services often include issue tracking, code review, and continuous integration features. A few popular choices are GitHub, GitLab, BitBucket, and AWS CodeCommit."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://github.com/features/",mdxType:"BadgeLink"},"GitHub"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://about.gitlab.com/",mdxType:"BadgeLink"},"GitLab"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://bitbucket.org/product/guides/getting-started/overview",mdxType:"BadgeLink"},"BitBucket"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://bitbucket.org/product/code-repository",mdxType:"BadgeLink"},"How to choose the best source code repository"))}l.isMDXComponent=!0},29982:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"PostgreSQL"),(0,r.kt)("p",null,"PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Official Website",colorScheme:"red",href:"https://www.postgresql.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.geeksforgeeks.org/what-is-postgresql-introduction/",mdxType:"BadgeLink"},"What is PostgreSQL"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=qw--VYLpxG4",mdxType:"BadgeLink"},"Learn PostgreSQL Tutorial - Full Course for Beginners"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=eMIxuk0nOkU",mdxType:"BadgeLink"},"Postgres tutorial for Beginners"))}l.isMDXComponent=!0},16468:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"MySQL"),(0,r.kt)("p",null,"MySQL is an incredibly popular open source relational database management system (RDBMS). MySQL can be used as a stand-alone client or in conjunction with other services to provide database connectivity. The ",(0,r.kt)("strong",{parentName:"p"},"M")," in LAMP stack stands for MySQL; that alone should provide an idea of its prevalence."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"MySQL Website",href:"https://www.mysql.com/",mdxType:"BadgeLink"},"MySQL website"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.w3schools.com/mySQl/default.asp",mdxType:"BadgeLink"},"W3Schools - MySQL tutorial "),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=7S_tz1z_5bA",mdxType:"BadgeLink"},"MySQL tutorial for beginners"))}l.isMDXComponent=!0},40795:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"MariaDB"),(0,r.kt)("p",null,"MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry. MariaDB was created with the intention of being a more versatile, drop-in replacement version of MySQL"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"MariaDB Website",href:"https://mariadb.org/",mdxType:"BadgeLink"},"MariaDB website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://www.guru99.com/mariadb-vs-mysql.html",mdxType:"BadgeLink"},"MariaDB vs MySQL"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.w3schools.blog/mariadb-tutorial",mdxType:"BadgeLink"},"W3Schools - MariaDB tutorial "),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=_AMj02sANpI",mdxType:"BadgeLink"},"MariaDB Tutorial For Beginners in One Hour"))}l.isMDXComponent=!0},1485:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"MS SQL"),(0,r.kt)("p",null,"MS SQL (or Microsoft SQL Server) is the Microsoft developed relational database management system (RDBMS). MS SQL uses the T-SQL (Transact-SQL) query language to interact with the relational databases. There are many different versions and editions available of MS SQL"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"MS SQL Website",href:"https://www.microsoft.com/en-ca/sql-server/",mdxType:"BadgeLink"},"MS SQL website"),(0,r.kt)(i,{badgeText:"Tutorial",colorScheme:"green",href:"https://docs.microsoft.com/en-us/sql/sql-server/tutorials-for-sql-server-2016?view=sql-server-ver15",mdxType:"BadgeLink"},"Tutorials for SQL Server"),(0,r.kt)(i,{badgeText:"Course",colorScheme:"green",href:"https://www.youtube.com/watch?v=-EPMOaV7h_Q",mdxType:"BadgeLink"},"SQL Server tutorial for beginners"))}l.isMDXComponent=!0},54528:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Oracle"),(0,r.kt)("p",null,"Oracle Database Server or sometimes called Oracle RDBMS or even simply Oracle is a world leading relational database management system produced by Oracle Corporation."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Official Website",colorScheme:"purple",href:"https://www.oracle.com/database/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://docs.oracle.com/en/database/index.html",mdxType:"BadgeLink"},"Official Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=ObbNGhcxXJA",mdxType:"BadgeLink"},"Oracle SQL Tutorial for Beginners"))}l.isMDXComponent=!0},59539:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Relational Databases"),(0,r.kt)("p",null,"A relational database is ",(0,r.kt)("strong",{parentName:"p"},"a type of database that stores and provides access to data points that are related to one another"),". Relational databases store data in a series of tables. Interconnections between the tables are specified as foreign keys. A foreign key is a unique reference from one row in a relational table to another row in a table, which can be the same table but is most commonly a different table."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.ibm.com/cloud/learn/relational-databases",mdxType:"BadgeLink"},"Relational Databases"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://learnsql.com/blog/codd-article-databases/",mdxType:"BadgeLink"},"51 Years of Relational Databases"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.edx.org/course/databases-5-sql",mdxType:"BadgeLink"},"Databases and SQL"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.udacity.com/course/intro-to-relational-databases--ud197",mdxType:"BadgeLink"},"Intro To Relational Databases"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/OqjJjpjDRLc",mdxType:"BadgeLink"},"What is Relational Database"))}l.isMDXComponent=!0},16090:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Document databases"),(0,r.kt)("h2",null,"MongoDB"),(0,r.kt)("p",null,"MongoDB is a source-available cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas. MongoDB is developed by MongoDB Inc. and licensed under the Server Side Public License (SSPL)."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Official Website",colorScheme:"blue",href:"https://www.mongodb.com/",mdxType:"BadgeLink"},"MongoDB Website"),(0,r.kt)(i,{badgeText:"Official Documentation",colorScheme:"blue",href:"https://docs.mongodb.com/",mdxType:"BadgeLink"},"MongoDB Documentation"),(0,r.kt)(i,{badgeText:"Official Courses",href:"https://university.mongodb.com/learning_paths/developer",mdxType:"BadgeLink"},"Learning Path for MongoDB Developers"),(0,r.kt)(i,{badgeText:"Sandbox",href:"https://mongoplayground.net/",mdxType:"BadgeLink"},"MongoDB Online Sandbox"))}l.isMDXComponent=!0},58036:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Column databases"))}s.isMDXComponent=!0},29569:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Timeseries databases"))}s.isMDXComponent=!0},55005:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Realtime databases"))}s.isMDXComponent=!0},68633:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"NoSQL databases"),(0,r.kt)("p",null,'NoSQL databases offer data storage and retrieval that is modelled differently to "traditional" relational databases. NoSQL databases typically focus more on horizontal scaling, eventual consistency, speed and flexibility and is used commonly for big data and real-time streaming applications.\nNoSQL is often described as a BASE system (',(0,r.kt)("strong",{parentName:"p"},"B"),"asically ",(0,r.kt)("strong",{parentName:"p"},"A"),"vailable, ",(0,r.kt)("strong",{parentName:"p"},"S"),"oft state, ",(0,r.kt)("strong",{parentName:"p"},"E"),"ventual consistency) as opposed to SQL/relational which typically focus on ACID (Atomicity, Consistency, Isolation, Durability). Common NoSQL data structures include key-value pair, wide column, graph and document."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.mongodb.com/nosql-explained",mdxType:"BadgeLink"},"NoSQL Explained"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=0buKQHokLK8",mdxType:"BadgeLink"},"How do NoSQL Databases work"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=ruz-vK8IesE",mdxType:"BadgeLink"},"SQL vs NoSQL Explained"))}l.isMDXComponent=!0},11223:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"ORMs"),(0,r.kt)("p",null,'Object-Relational Mapping (ORM) is a technique that lets you query and manipulate data from a database using an object-oriented paradigm. When talking about ORM, most people are referring to a library that implements the Object-Relational Mapping technique, hence the phrase "an ORM".'),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/Object\u2013relational_mapping",mdxType:"BadgeLink"},"Object Relational Mapping - Wikipedia"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://stackoverflow.com/questions/1279613/what-is-an-orm-how-does-it-work-and-how-should-i-use-one",mdxType:"BadgeLink"},"What is an ORM and how should I use it?"))}l.isMDXComponent=!0},98963:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"ACID"),(0,r.kt)("p",null,"ACID are the four properties of any database system 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 "),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=yaQ5YMWkxq4",mdxType:"BadgeLink"},"ACID Explained: Atomic, Consistent, Isolated & Durable"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://retool.com/blog/whats-an-acid-compliant-database/",mdxType:"BadgeLink"},"What is ACID Compliant Database?"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://fauna.com/blog/what-is-acid-compliance-atomicity-consistency-isolation",mdxType:"BadgeLink"},"What is ACID Compliance?: Atomicity, Consistency, Isolation"))}l.isMDXComponent=!0},73696:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Transactions"))}s.isMDXComponent=!0},13381:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"N plus one problem"),(0,r.kt)("p",null,"The N+1 query problem happens when your code executes N additional query statements to fetch the same data that could have been retrieved when executing the primary query."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"READ",href:"https://medium.com/doctolib/understanding-and-fixing-n-1-query-30623109fe89",mdxType:"BadgeLink"},"In Detail Explanation of N+1 Problem"))}l.isMDXComponent=!0},70052:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Database normalization"))}s.isMDXComponent=!0},20290:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Database indexes"),(0,r.kt)("p",null,"An index is a data structure that you build and assign on top of an existing table that basically looks through your table and tries to analyze and summarize so that it can create shortcuts."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/news/database-indexing-at-a-glance-bb50809d48bd/",mdxType:"BadgeLink"},"An in-depth look at Database Indexing"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=-qNSXK7s7_w",mdxType:"BadgeLink"},"Database Indexing Explained"))}l.isMDXComponent=!0},89952:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Data replication"))}s.isMDXComponent=!0},70188:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Sharding strategies"))}s.isMDXComponent=!0},17250:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CAP Theorem"),(0,r.kt)("p",null,"CAP is an acronym that stands for Consistency, Availability and Partition Tolerance. According to CAP theorem, any distributed system can only guarantee two of the three properties at any point of time. You can't guarantee all three properties at once."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"purple",badgeText:"Watch",href:"https://www.youtube.com/watch?v=_RbsFXWRZ10",mdxType:"BadgeLink"},"What is CAP Theorem?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.bmc.com/blogs/cap-theorem/",mdxType:"BadgeLink"},"What is CAP Theorem?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/CAP_theorem",mdxType:"BadgeLink"},"CAP Theorem - Wikipedia"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/",mdxType:"BadgeLink"},"An Illustrated Proof of the CAP Theorem"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.ibm.com/uk-en/cloud/learn/cap-theorem",mdxType:"BadgeLink"},"CAP Theorem and it's applications in NoSQL Databases"))}l.isMDXComponent=!0},30506:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"More about databases"))}s.isMDXComponent=!0},64361:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"REST"),(0,r.kt)("p",null,"REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other. "),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.codecademy.com/article/what-is-rest",mdxType:"BadgeLink"},"What is REST?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.redhat.com/en/topics/api/what-is-a-rest-api",mdxType:"BadgeLink"},"What is a REST API?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm",mdxType:"BadgeLink"},'Roy Fielding\'s dissertation chapter, "Representational State Transfer (REST)"'))}l.isMDXComponent=!0},48567:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"JSON APIs"),(0,r.kt)("p",null,"JSON or JavaScript Object Notation is an encoding scheme that is designed to eliminate the need for an ad-hoc code for each application to communicate with servers that communicate in a defined way. JSON API module exposes an implementation for data stores and data structures, such as entity types, bundles, and fields."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://jsonapi.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://jsonapi.org/implementations/",mdxType:"BadgeLink"},"Official Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=N-4prIh7t38",mdxType:"BadgeLink"},"JSON API: Explained in 4 minutes "))}l.isMDXComponent=!0},6277:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Soap"))}s.isMDXComponent=!0},35896:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"gRPC"),(0,r.kt)("p",null,"gRPC is a high-performance, open source universal RPC framework"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://grpc.io/",mdxType:"BadgeLink"},"gRPC Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Docs",href:"https://grpc.io/docs/",mdxType:"BadgeLink"},"gRPC Docs"))}l.isMDXComponent=!0},81995:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Hateoas"),(0,r.kt)("p",null,"HATEOAS is an acronym for ",(0,r.kt)("b",null,"H"),"ypermedia ",(0,r.kt)("b",null,"A"),"s ",(0,r.kt)("b",null,"T"),"he ",(0,r.kt)("b",null,"E"),"ngine ",(0,r.kt)("b",null,"O"),"f ",(0,r.kt)("b",null,"A"),"pplication ",(0,r.kt)("b",null,"S"),"tate, it's the concept that when sending information over a RESTful API the document received should contain everything the client needs in order to parse and use the data i.e they don't have to contact any other endpoint not explicitly mentioned within the Document "),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/MiOSzpfP1Ww?t=236",mdxType:"BadgeLink"},"Oktane17: Designing Beautiful REST + JSON APIs (3:56 - 5:57)"))}l.isMDXComponent=!0},51690:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Open api spec"),(0,r.kt)("p",null,"The OpenAPI Specification (OAS) defines a standard, language-agnostic interface to RESTful APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection. When properly defined, a consumer can understand and interact with the remote service with a minimal amount of implementation logic."),(0,r.kt)("p",null,"An OpenAPI definition can then be used by documentation generation tools to display the API, code generation tools to generate servers and clients in various programming languages, testing tools, and many other use cases."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Framework Website",href:"https://swagger.io/specification/",mdxType:"BadgeLink"},"OpenAPI Specification Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Demo",href:"https://swagger.io/tools/swagger-editor/",mdxType:"BadgeLink"},"Open API Live Editor"),(0,r.kt)(i,{badgeText:"Watch",colorScheme:"green",href:"https://www.youtube.com/watch?v=6kwmW_p_Tig",mdxType:"BadgeLink"},"OpenAPI 3.0: How to Design and Document APIs with the Latest OpenAPI Specification 3.0"),(0,r.kt)(i,{badgeText:"Course",href:"https://swagger.io/docs/specification/about/",mdxType:"BadgeLink"},"Official training guide"))}l.isMDXComponent=!0},28558:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Cookie based"))}s.isMDXComponent=!0},39693:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"OAuth"),(0,r.kt)("p",null,"OAuth stands for ",(0,r.kt)("strong",{parentName:"p"},"O"),"pen ",(0,r.kt)("strong",{parentName:"p"},"Auth"),'orization and is an open standard for authorization. It works to authorize devices, APIs, servers and applications using access tokens rather than user credentials, known as "secure delegated access".'),(0,r.kt)("p",null,"In its most simplest form, OAuth delegates authentication to services like Facebook, Amazon, Twitter and authorizes third-party applications to access the user account ",(0,r.kt)("strong",{parentName:"p"},"without")," having to enter their login and password."),(0,r.kt)("p",null,"It is mostly utilized for REST/APIs and only provides a limited scope of a user's data."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.okta.com/blog/2017/06/21/what-the-heck-is-oauth",mdxType:"BadgeLink"},"Okta - What the Heck is OAuth"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2",mdxType:"BadgeLink"},"DigitalOcean - An Introduction to OAuth 2"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=t4-416mg6iU",mdxType:"BadgeLink"},"What is OAuth really all about"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=CPbvxxslDTU",mdxType:"BadgeLink"},"OAuth 2.0: An Overview"))}l.isMDXComponent=!0},86863:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Basic authentication"))}s.isMDXComponent=!0},88862:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Token authentication"))}s.isMDXComponent=!0},35747:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"JWT"),(0,r.kt)("p",null,"JWT stands for JSON Web Token is a token-based encryption open standard/methodology that is used to transfer information securely as a JSON object. Clients and Servers use JWT to securely share information, with the JWT containing encoded JSON objects and claims. JWT tokens are designed to be compact, safe to use within URLs, and ideal for SSO contexts."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"JWT Website",href:"https://jwt.io//",mdxType:"BadgeLink"},"jwt.io Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://jwt.io/introduction",mdxType:"BadgeLink"},"Introduction to JSON Web Tokens"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.akana.com/blog/what-is-jwt",mdxType:"BadgeLink"},"What is JWT?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=7Q17ubqLfaM",mdxType:"BadgeLink"},"What Is JWT and Why Should You Use JWT"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=926mknSW9Lo",mdxType:"BadgeLink"},"What is JWT? JSON Web Token Explained"))}l.isMDXComponent=!0},41796:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Openid"))}s.isMDXComponent=!0},52037:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Saml"))}s.isMDXComponent=!0},16633:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Authentication"))}s.isMDXComponent=!0},32790:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Apis"))}s.isMDXComponent=!0},8806:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CDN (Content Delivery Network)"),(0,r.kt)("p",null,"A Content Delivery Network (CDN) service aims to provide high availability and performance improvements of websites. This is achieved with fast delivery of website assets and content typically via geographically closer endpoints to the client requests.\nTraditional commercial CDNs (Amazon CloudFront, Akamai, CloudFlare and Fastly) provide servers across the globe which can be used for this purpose.\nServing assets and contents via a CDN reduces bandwidth on website hosting, provides an extra layer of caching to reduce potential outages and can improve website security as well"),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/en-ca/learning/cdn/what-is-a-cdn/",mdxType:"BadgeLink"},"CloudFlare - What is a CDN? | How do CDNs work?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/Content_delivery_network",mdxType:"BadgeLink"},"Wikipedia - Content Delivery Network"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=841kyd_mfH0",mdxType:"BadgeLink"},"What is Cloud CDN?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Bsq5cKkS33I",mdxType:"BadgeLink"},"What is a Content Delivery Network (CDN)?"))}l.isMDXComponent=!0},69103:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Redis"))}s.isMDXComponent=!0},42024:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Memcached"))}s.isMDXComponent=!0},86326:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Server side"))}s.isMDXComponent=!0},2954:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Client side"))}s.isMDXComponent=!0},66019:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Caching"))}s.isMDXComponent=!0},49549:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"MD5"),(0,r.kt)("p",null,"MD5 (Message-Digest Algorithm 5) is a hash function that is currently advised not to be used due to its extensive vulnerabilities. It is still used as a checksum to verify data integrity."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/MD5",mdxType:"BadgeLink"},"Wikipedia - MD5"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.techtarget.com/searchsecurity/definition/MD5",mdxType:"BadgeLink"},"What is MD5?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://infosecscout.com/why-md5-is-not-safe/",mdxType:"BadgeLink"},"Why is MD5 not safe?"))}l.isMDXComponent=!0},78772:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"SHA family"),(0,r.kt)("p",null,"SHA (Secure Hash Algorithms) is a family of cryptographic hash functions created by the NIST (National Institute of Standards and Technology). The family includes:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"SHA-0: Published in 1993, this is the first algorithm in the family. Shortly after its release, it was discontinued for an undisclosed significant flaw."),(0,r.kt)("li",{parentName:"ul"},"SHA-1: Created to replace SHA-0 and which resembles MD5, this algorithm has been considered insecure since 2010."),(0,r.kt)("li",{parentName:"ul"},"SHA-2: This isn't an algorithm, but a set of them, with SHA-256 and SHA-512 being the most popular. SHA-2 is still secure and widely used."),(0,r.kt)("li",{parentName:"ul"},"SHA-3: Born in a competition, this is the newest member of the family. SHA-3 is very secure and doesn't carry the same design flaws as its brethren.")),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/SHA-1",mdxType:"BadgeLink"},"Wikipedia - SHA-1"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/SHA-2",mdxType:"BadgeLink"},"Wikipedia - SHA-2"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/SHA-3",mdxType:"BadgeLink"},"Wikipedia - SHA-3"))}l.isMDXComponent=!0},54134:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Bcrypt"),(0,r.kt)("p",null,"bcrypt is a password hashing function, that has proven been proven reliable and secure since it's release in 1999.It has been implemented into most commonly-used programming languages."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=O6cmuiTBZVs",mdxType:"BadgeLink"},"bcrypt explained"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://auth0.com/blog/hashing-in-action-understanding-bcrypt/",mdxType:"BadgeLink"},"Understanding bcrypt"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"NPM",href:"https://www.npmjs.com/package/bcrypt",mdxType:"BadgeLink"},"bcrypt's npm package"))}l.isMDXComponent=!0},26896:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Scrypt"),(0,r.kt)("p",null,'Scrypt (pronounced "ess crypt") is a password hashing function (like bcrypt). It is designed to use a lot of hardware, which makes brute-force attacks more difficult. Scrypt is mainly used as a proof-of-work algorithm for cryptocurrencies.'),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/Scrypt",mdxType:"BadgeLink"},"Wikipedia - Scrypt"))}l.isMDXComponent=!0},99182:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Content Security Policy"),(0,r.kt)("p",null,"Content Security Policy is a computer security standard introduced to prevent cross-site scripting, clickjacking and other code injection attacks resulting from execution of malicious content in the trusted web page context."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP",mdxType:"BadgeLink"},"MDN \u2014 Content Security Policy (CSP)"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developers.google.com/web/fundamentals/security/csp",mdxType:"BadgeLink"},"Google Devs \u2014 Content Security Policy (CSP)"))}l.isMDXComponent=!0},5233:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"HTTPS"),(0,r.kt)("p",null,"HTTPS is a secure way to send data between a web server and a browser."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/",mdxType:"BadgeLink"},"What is HTTPS?"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https",mdxType:"BadgeLink"},"Why HTTPS Matters"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https",mdxType:"BadgeLink"},"Enabling HTTPS on Your Servers"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=hExRDVZHhig",mdxType:"BadgeLink"},"SSL, TLS, HTTP, HTTPS Explained"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=GoXgl9r0Kjk",mdxType:"BadgeLink"},"HTTPS \u2014 Stories from the field"))}l.isMDXComponent=!0},7768:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Cors"),(0,r.kt)("p",null,"Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS",mdxType:"BadgeLink"},"Cross-Origin Resource Sharing (CORS)"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=4KHiSt0oLJ0",mdxType:"BadgeLink"},"CORS in 100 Seconds"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=PNtFSVU-YTI",mdxType:"BadgeLink"},"CORS in 6 minutes"))}l.isMDXComponent=!0},38453:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"SSL/TLS"),(0,r.kt)("p",null,"Secure Sockets Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols used to provide security in internet communications. These protocols encrypt the data that is transmitted over the web, so anyone who tries to intercept packets will not be able to interpret the data. One difference that is important to know is that SSL is now deprecated due to security flaws, and most modern web browsers no longer support it. But TLS is still secure and widely supported, so preferably use TLS."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://en.wikipedia.org/wiki/Transport_Layer_Security",mdxType:"BadgeLink"},"Wikipedia - SSL/TLS"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.cloudflare.com/learning/ssl/what-is-ssl/",mdxType:"BadgeLink"},"Cloudflare - What is SSL?"))}l.isMDXComponent=!0},2598:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"OWASP Security Risks"),(0,r.kt)("p",null,"OWASP or Open Web Application Security Project is an online community that produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://en.wikipedia.org/wiki/OWASP",mdxType:"BadgeLink"},"Wikipedia - OWASP"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://github.com/0xRadi/OWASP-Web-Checklist",mdxType:"BadgeLink"},"OWASP Web Application Security Testing Checklist"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/",mdxType:"BadgeLink"},"OWASP Top 10 Security Risks"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html",mdxType:"BadgeLink"},"OWASP Cheatsheets"))}l.isMDXComponent=!0},12824:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Web Security Knowledge"),(0,r.kt)("p",null,"Web security refers to the protective measures taken by the developers to protect the web applications from threats that could affect the business."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https",mdxType:"BadgeLink"},"Why HTTPS Matters"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://en.wikipedia.org/wiki/OWASP",mdxType:"BadgeLink"},"Wikipedia - OWASP"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://github.com/0xRadi/OWASP-Web-Checklist",mdxType:"BadgeLink"},"OWASP Web Application Security Testing Checklist"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://sucuri.net/guides/owasp-top-10-security-vulnerabilities-2021/",mdxType:"BadgeLink"},"OWASP Top 10 Security Risks"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html",mdxType:"BadgeLink"},"OWASP Cheatsheets"),(0,r.kt)(i,{badgeText:"Read",colorScheme:"yellow",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP",mdxType:"BadgeLink"},"Content Security Policy (CSP)"))}l.isMDXComponent=!0},85729:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Integration Testing"),(0,r.kt)("p",null,"Integration testing a broad category of tests where multiple software modules are ",(0,r.kt)("strong",{parentName:"p"},"integrated")," and tested as a group. It is meant to test the ",(0,r.kt)("strong",{parentName:"p"},"interaction")," between multiple services, resources, or modules. For example, an API's interaction with a backend service, or a service with a database."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.guru99.com/integration-testing.html",mdxType:"BadgeLink"},"Integration Testing"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/QYCaaNz8emY",mdxType:"BadgeLink"},"What is Integration Testing?"))}l.isMDXComponent=!0},53763:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Unit Testing"),(0,r.kt)("p",null,"Unit testing is where individual ",(0,r.kt)("strong",{parentName:"p"},"units")," (modules, functions/methods, routines, etc.) of software are tested to ensure their correctness. This low-level testing ensures smaller components are functionally sound while taking the burden off of higher-level tests. Generally, a developer writes these tests during the development process and they are run as automated tests."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.guru99.com/unit-testing-guide.html",mdxType:"BadgeLink"},"Unit Testing Tutorial"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/3kzHmaeozDI",mdxType:"BadgeLink"},"What is Unit Testing?"))}l.isMDXComponent=!0},78764:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Functional Testing"),(0,r.kt)("p",null,"Functional testing is where software is tested to ensure functional requirements are met. Usually, it is a form of black box testing in which the tester has no understanding of the source code; testing is performed by providing input and comparing expected/actual output.\nIt contrasts with non-functional testing, which includes performance, load, scalability, and penetration testing."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.guru99.com/functional-testing.html",mdxType:"BadgeLink"},"What is Functional Testing?"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/j_79AXkG4PY",mdxType:"BadgeLink"},"Functional Testing vs Non-Functional Testing"))}l.isMDXComponent=!0},10584:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Testing"),(0,r.kt)("p",null,"A key to building software that meets requirements without defects is testing. Software testing helps developers know they are building the right software. When tests are run as part of the development process (often with continuous integration tools), they build confidence and prevent regressions in the code."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.guru99.com/software-testing-introduction-importance.html",mdxType:"BadgeLink"},"What is Software Testing?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.browserstack.com/guide/testing-pyramid-for-test-automation",mdxType:"BadgeLink"},"Testing Pyramid"))}l.isMDXComponent=!0},82019:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CI/CD"),(0,r.kt)("p",null,"CI/CD (Continuous Integration/Continuous Deployment) is the practice of automating building, testing, and deployment of applications with the main goal of detecting issues early, and provide quicker releases to the production environment."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=scEDHsr3APg",mdxType:"BadgeLink"},"DevOps CI/CD Explained in 100 Seconds by Fireship"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=nyKZTKQS_EQ",mdxType:"BadgeLink"},"Automate your Workflows with GitHub Actions"))}l.isMDXComponent=!0},65392:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Design Patterns"),(0,r.kt)("p",null,"Design patterns are typical solutions to commonly occurring problems in software design. They can be broken into three categories: "),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Creational Patterns for the creation of objects"),(0,r.kt)("li",{parentName:"ul"},"Structural Patterns to provide relationship between objects"),(0,r.kt)("li",{parentName:"ul"},"Behavioral Patterns to help define how objects interact")),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://github.com/kamranahmedse/design-patterns-for-humans",mdxType:"BadgeLink"},"Design Patterns for Humans"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://springframework.guru/gang-of-four-design-patterns/",mdxType:"BadgeLink"},"GOF design patterns"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://refactoring.guru/design-patterns",mdxType:"BadgeLink"},"Design Patterns"))}l.isMDXComponent=!0},1024:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Domain driven design"))}s.isMDXComponent=!0},18712:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Test Driven Development"),(0,r.kt)("p",null,"Test driven development (TDD) is the process of writing tests for software's requirements which will fail until the software is developed to meet those requirements. Once those tests pass, then the cycle repeats to refactor code or develop another feature/requirement. In theory, this ensures that software is written to meet requirements in the simplest form, and avoids code defects."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.guru99.com/test-driven-development.html",mdxType:"BadgeLink"},"What is Test Driven Development (TDD)?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.ibm.com/garage/method/practices/code/practice_test_driven_development/",mdxType:"BadgeLink"},"Test-driven development"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/uGaNkTahrIw",mdxType:"BadgeLink"},"Agile in Practice: Test Driven Development"))}l.isMDXComponent=!0},32506:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"SOLID"),(0,r.kt)("p",null,"SOLID is a set of principles applied to object-oriented design (OOD) to create maintainable, understandable, and flexible code, while avoiding code smells and defects. The principles are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Single Responsibility"),(0,r.kt)("li",{parentName:"ul"},"Open/Closed"),(0,r.kt)("li",{parentName:"ul"},"Liskov Substitution"),(0,r.kt)("li",{parentName:"ul"},"Interface Segregation"),(0,r.kt)("li",{parentName:"ul"},"Dependency Inversion")),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Original Paper",href:"https://web.archive.org/web/20150906155800/http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf",mdxType:"BadgeLink"},"Design Principles and Design Patterns"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.baeldung.com/solid-principles",mdxType:"BadgeLink"},"SOLID Principles"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.digitalocean.com/community/conceptual_articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design",mdxType:"BadgeLink"},"SOLID: The First 5 Principles of Object Oriented Design"))}l.isMDXComponent=!0},35992:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"KISS"),(0,r.kt)("p",null,"Keep It Simple, Stupid (KISS) is a software design principle that states avoiding needless complexity is the best way to build software that is easier to maintain, understand, and contains fewer defects. A simple product that does a single thing well is better than a complex product that does many things poorly."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://deviq.com/principles/keep-it-simple",mdxType:"BadgeLink"},"Keep It Simple"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.interaction-design.org/literature/topics/keep-it-simple-stupid",mdxType:"BadgeLink"},"Keep It Simple, Stupid (Kiss)"))}l.isMDXComponent=!0},45279:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"YAGNI"),(0,r.kt)("p",null,"You Aren't Going to Need It (YAGNI) is a software design principle from the Extreme Programming (XP) framework that states when developing software, functionality or features should not be added until they are necessary. Within agile software development in general, requirements are always open to change; any extra functionality may end up being wasted time and resources."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://martinfowler.com/bliki/Yagni.html",mdxType:"BadgeLink"},"Yagni"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://deviq.com/principles/yagni",mdxType:"BadgeLink"},"YAGNI"))}l.isMDXComponent=!0},19444:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"DRY"),(0,r.kt)("p",null,"Don't Repeat Yourself (DRY) is a software design principle which encourages developers to not repeat software patterns or code. DRY encourages code reusability, often in the form of methods, functions, or subroutines. When DRY is implemented successfully, developers are able to make one change to update many related elements while avoiding making changes to unrelated elements."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://dzone.com/articles/software-design-principles-dry-and-kiss",mdxType:"BadgeLink"},"Software Design Principles DRY and KISS"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.1001745#s5",mdxType:"BadgeLink"},"Best Practices for Scientific Computing"))}l.isMDXComponent=!0},6828:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Design and development principles"))}s.isMDXComponent=!0},90413:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Monolithic Apps"),(0,r.kt)("p",null,"Monolithic architecture is a pattern in which an application handles requests, executes business logic, interacts with the database, and creates the HTML for the front end. In simpler terms, this one application does many things. It's inner components are highly coupled and deployed as one unit."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://microservices.io/patterns/monolithic.html",mdxType:"BadgeLink"},"Pattern: Monolithic Architecture"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://datamify.medium.com/monolithic-architecture-advantages-and-disadvantages-e71a603eec89",mdxType:"BadgeLink"},"Monolithic Architecture - Advantages & Disadvantages"))}l.isMDXComponent=!0},59107:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Microservices"),(0,r.kt)("p",null,"Microservice architecture is a pattern in which highly cohesive, loosely coupled services are separately developed, maintained, and deployed. Each component handles an individual function, and when combined, the application handles an overall business function."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://microservices.io/patterns/microservices.html",mdxType:"BadgeLink"},"Pattern: Microservice Architecture"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://smartbear.com/solutions/microservices/",mdxType:"BadgeLink"},"What is Microservices?"))}l.isMDXComponent=!0},28227:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"SOA"),(0,r.kt)("p",null,"SOA, or service-oriented architecture, defines a way to make software components reusable via service interfaces. These interfaces utilize common communication standards in such a way that they can be rapidly incorporated into new applications without having to perform deep integration each time."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Reference Model",href:"http://docs.oasis-open.org/soa-rm/soa-ra/v1.0/soa-ra.html",mdxType:"BadgeLink"},"Reference Architecture Foundation for Service Oriented Architecture"))}l.isMDXComponent=!0},28760:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"CQRS and Event Sourcing"),(0,r.kt)("p",null,"CQRS, or command query responsibility segregation, defines an architectural pattern where the main focus is to separate the approach of reading and writing operations for a data store. CQRS can also be used along with Event Sourcing pattern in order to persist application state as an ordered of sequence events, making it possible to restore data to any point in time."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Reference Model",href:"https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs",mdxType:"BadgeLink"},"CQRS Pattern"))}l.isMDXComponent=!0},96026:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Serverless"),(0,r.kt)("p",null,"Serverless is an architecture in which a developer builds and runs applications without provisioning or managing servers. With cloud computing/serverless, servers exist but are managed by the cloud provider. Resources are used as they are needed, on demand and often using auto scaling."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.ibm.com/cloud/learn/serverless",mdxType:"BadgeLink"},"Serverless"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://aws.amazon.com/serverless/",mdxType:"BadgeLink"},"AWS Services"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=W_VV2Fx32_Y&ab_channel=Fireship",mdxType:"BadgeLink"},"Serverless Computing in 100 Seconds"))}l.isMDXComponent=!0},2938:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Architectural patterns"))}s.isMDXComponent=!0},85569:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Elasticsearch"),(0,r.kt)("p",null,"Elastic search at its core is a document-oriented search engine. It is a document based database that lets you INSERT, DELETE , RETRIEVE and even perform analytics on the saved records. But, Elastic Search is unlike any other general purpose database you have worked with, in the past. It's essentially a search engine and offers an arsenal of features you can use to retrieve the data stored in it, as per your search criteria. And that too, at lightning speeds."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.elastic.co/elasticsearch/",mdxType:"BadgeLink"},"Elasticsearch Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Docs",href:"https://www.elastic.co/guide/index.html",mdxType:"BadgeLink"},"Elasticsearch Documentation"))}l.isMDXComponent=!0},7328:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Solr"),(0,r.kt)("p",null,"Solr is highly reliable, scalable and fault tolerant, providing distributed indexing, replication and load-balanced querying, automated failover and recovery, centralized configuration and more. Solr powers the search and navigation features of many of the world's largest internet sites."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://solr.apache.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://solr.apache.org/resources.html#documentation",mdxType:"BadgeLink"},"Official Documentation"))}l.isMDXComponent=!0},79359:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Search engines"))}s.isMDXComponent=!0},93093:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"RabbitMQ"),(0,r.kt)("p",null,"With tens of thousands of users, RabbitMQ is one of the most popular open-source message brokers. RabbitMQ is lightweight and easy to deploy on-premises and in the cloud. It supports multiple messaging protocols. RabbitMQ can be deployed in distributed and federated configurations to meet high-scale, high-availability requirements."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.rabbitmq.com/getstarted.html",mdxType:"BadgeLink"},"RabbitMQ Tutorials"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=nFxjaVmFj5E",mdxType:"BadgeLink"},"RabbitMQ Tutorial - Message Queues and Distributed Systems"))}l.isMDXComponent=!0},44196:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Kafka"),(0,r.kt)("p",null,"Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://kafka.apache.org/quickstart",mdxType:"BadgeLink"},"Apache Kafka quickstart"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=B5j3uNBH8X4",mdxType:"BadgeLink"},"Apache Kafka Fundamentals"))}l.isMDXComponent=!0},91265:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Message Brokers"),(0,r.kt)("p",null,"Message brokers are an inter-application communication technology to help build a common integration mechanism to support cloud-native, microservices-based, serverless, and hybrid cloud architectures. Two of the most famous message brokers are ",(0,r.kt)("inlineCode",{parentName:"p"},"RabbitMQ")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Apache Kafka")),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=57Qr9tk6Uxc",mdxType:"BadgeLink"},"Introduction to Message Brokers"))}l.isMDXComponent=!0},53797:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Docker"),(0,r.kt)("p",null,"Docker is a platform for working with containerized applications. Among its features are a daemon and client for managing and interacting with containers, registries for storing images, and a desktop application to package all these features together."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://docs.docker.com/",mdxType:"BadgeLink"},"Docker Documentation"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://aws.amazon.com/docker/",mdxType:"BadgeLink"},"What is Docker | AWS "),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/3c-iBn73dDE",mdxType:"BadgeLink"},"Docker Tutorial"))}l.isMDXComponent=!0},82153:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Rkt"))}s.isMDXComponent=!0},12998:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Lxc"))}s.isMDXComponent=!0},57485:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Containerization vs. Virtualization"),(0,r.kt)("p",null,"Containers and virtual machines are the two most popular approaches to setting up a software infrastructure for your organization."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://middleware.io/blog/containerization-vs-virtualization/",mdxType:"BadgeLink"},"Containerization vs. Virtualization: Everything you need to know"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=1WnDHitznGY",mdxType:"BadgeLink"},"Containerization or Virtualization - The Differences "))}l.isMDXComponent=!0},5373:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Apollo"),(0,r.kt)("p",null,"Apollo is a platform for building a unified graph, a communication layer that helps you manage the flow of data between your application clients (such as web and native apps) and your back-end services."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.apollographql.com",mdxType:"BadgeLink"},"Apollo Website"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Read",href:"https://www.apollographql.com/docs/",mdxType:"BadgeLink"},"Official Docs"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Watch",href:"https://www.youtube.com/c/ApolloGraphQL/",mdxType:"BadgeLink"},"Official YouTube Channel"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=YyUWW04HwKY",mdxType:"BadgeLink"},"GraphQL With React Tutorial - Apollo Client"))}l.isMDXComponent=!0},79033:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Relay Modern"),(0,r.kt)("p",null,"Relay is a JavaScript client used in the browser to fetch GraphQL data. It's a JavaScript framework developed by Facebook for managing and fetching data in React applications. It is built with scalability in mind in order to power complex applications like Facebook. The ultimate goal of GraphQL and Relay is to deliver instant UI-response interactions."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://relay.dev/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://relay.dev/docs/",mdxType:"BadgeLink"},"Introduction to Relay modern"))}l.isMDXComponent=!0},33620:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Graphql"),(0,r.kt)("p",null,"GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://graphql.org/learn/",mdxType:"BadgeLink"},"Introduction to GraphQL"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.howtographql.com/",mdxType:"BadgeLink"},"The Fullstack Tutorial for GraphQL"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://odyssey.apollographql.com/",mdxType:"BadgeLink"},"GraphQL Tutorials"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=ed8SzALpx1Q",mdxType:"BadgeLink"},"GraphQL Course for Beginners"))}l.isMDXComponent=!0},47898:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Neo4j"),(0,r.kt)("p",null,"Neo4j AuraDB is a fast, reliable, scalable, and completely automated Neo4j graph database, provided as a cloud service."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Official Website",href:"https://neo4j.com/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://neo4j.com/docs/",mdxType:"BadgeLink"},"Official Docs"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=8jNPelugC2s",mdxType:"BadgeLink"},"Neo4j (Graph Database) Crash Course"))}l.isMDXComponent=!0},78826:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Graph databases"),(0,r.kt)("p",null,"A graph database stores nodes and relationships instead of tables, or documents. Data is stored just like you might sketch ideas on a whiteboard. Your data is stored without restricting it to a pre-defined model, allowing a very flexible way of thinking about and using it."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://neo4j.com/developer/graph-database/",mdxType:"BadgeLink"},"What is a Graph Database?"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.freecodecamp.org/news/graph-database-vs-relational-database/",mdxType:"BadgeLink"},"Graph Databases VS Relational Databases"))}l.isMDXComponent=!0},6084:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Web sockets"),(0,r.kt)("p",null,"Web sockets are defined as a two-way communication between the servers and the clients, which mean both the parties, communicate and exchange data at the same time. This protocol defines a full duplex communication from the ground up. Web sockets take a step forward in bringing desktop rich functionalities to the web browsers."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.tutorialspoint.com/websockets/index.htm",mdxType:"BadgeLink"},"Introduction to WebSockets"),(0,r.kt)(i,{colorScheme:"green",badgeText:"Course",href:"https://www.youtube.com/watch?v=8ARodQ4Wlf4",mdxType:"BadgeLink"},"A Beginner's Guide to WebSockets"))}l.isMDXComponent=!0},34821:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Nginx"),(0,r.kt)("p",null,"NGINX is a powerful web server and uses a non-threaded, event-driven architecture that enables it to outperform Apache if configured correctly. It can also do other important things, such as load balancing, HTTP caching, or be used as a reverse proxy."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://nginx.org/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=JKxlsvZXG7c",mdxType:"BadgeLink"},"NGINX Explained in 100 Seconds"))}l.isMDXComponent=!0},55293:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Apache"),(0,r.kt)("p",null,"Apache is a free, open-source HTTP server, available on many operating systems, but mainly used on Linux distributions. It is one of the most popular options for web developers, as it accounts for over 30% of all the websites, as estimated by W3Techs."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://httpd.apache.org/",mdxType:"BadgeLink"},"Apache Server Website"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=kaaenHXO4t4",mdxType:"BadgeLink"},"What is Apache Web Server?"))}l.isMDXComponent=!0},28549:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Caddy"),(0,r.kt)("p",null,"The Caddy web server is an extensible, cross-platform, open-source web server written in Go. It has some really nice features like automatic SSL/HTTPs and a really easy configuration file."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://caddyserver.com/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=t4naLFSlBpQ",mdxType:"BadgeLink"},"Getting started with Caddy the HTTPS Web Server from scratch"))}l.isMDXComponent=!0},297:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"MS IIS"),(0,r.kt)("p",null,"Internet Information Services (IIS) for Windows\xae Server is a flexible, secure and manageable Web server for hosting anything on the Web."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{colorScheme:"blue",badgeText:"Official Website",href:"https://www.iis.net/",mdxType:"BadgeLink"},"Official Website"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=1VdxPWwtISA",mdxType:"BadgeLink"},"Learn Windows Web Server IIS"))}l.isMDXComponent=!0},94521:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Web servers"))}s.isMDXComponent=!0},78878:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Mitigation strategies"))}s.isMDXComponent=!0},52928:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Instrumentation monitoring telemetry"))}s.isMDXComponent=!0},50760:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Migration strategies"))}s.isMDXComponent=!0},80576:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,r.kt)("div",Object.assign({},t))}},s=a("ResourceGroupTitle"),i=a("BadgeLink"),c={};function l(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Horizontal/Vertical Scaling"),(0,r.kt)("p",null,"Horizontal scaling is a change in the ",(0,r.kt)("strong",{parentName:"p"},"number")," of a resource. For example, increasing the number of virtual machines processing messages in a queue. Vertical scaling is a change in the ",(0,r.kt)("strong",{parentName:"p"},"size/power")," of a resource. For example, increasing the memory or disk space available to a machine. Scaling can be applied to databases, cloud resources, and other areas of computing."),(0,r.kt)(s,{mdxType:"ResourceGroupTitle"},"Free Content"),(0,r.kt)(i,{badgeText:"Watch",href:"https://youtu.be/xpDnVSmNFX0",mdxType:"BadgeLink"},"System Design Basics: Horizontal vs. Vertical Scaling"),(0,r.kt)(i,{badgeText:"Watch",href:"https://www.youtube.com/watch?v=Y-Gl4HEyeUQ",mdxType:"BadgeLink"},"System Design 101"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://touchstonesecurity.com/horizontal-vs-vertical-scaling-what-you-need-to-know/",mdxType:"BadgeLink"},"Horizontal vs Vertical Scaling"),(0,r.kt)(i,{colorScheme:"yellow",badgeText:"Read",href:"https://www.geeksforgeeks.org/horizontal-and-vertical-scaling-in-databases/",mdxType:"BadgeLink"},"Scaling In Databases"))}l.isMDXComponent=!0},54572:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Observability"))}s.isMDXComponent=!0},99222:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null,"Scalability"))}s.isMDXComponent=!0},51403:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",null))}s.isMDXComponent=!0},78093:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},65332:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},34558:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The intent of this guide is to give you an idea about the React ecosystem and to help guide your learning if you are confused. We have another ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/frontend"}),"roadmap on the Frontend Development")," that focuses on the frontend development if you are interested in that."),(0,r.kt)("p",null,"Also, please note that the list below is exhaustive, and the items are listed in no particular order. You don't need to learn everything listed in the picture, however knowing what you don't know is as important as knowing things."),(0,r.kt)("p",null,(0,r.kt)("img",Object.assign({parentName:"p"},{src:"/roadmaps/react.png",alt:null}))),(0,r.kt)("p",null,"Please note that the list is opinionated, and you might have different opinions than those of the author. Having said that, ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap/issues/new"}),"we would love to hear your opinions")," and incorporate them in the picture if suitable."))}s.isMDXComponent=!0},20063:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},595:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The intent of this guide is to give you an idea about the Angular ecosystem and to help guide your learning if you are confused. We have another ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/frontend"}),"roadmap on the Frontend Development")," that focuses on the frontend development if you are interested in that."),(0,r.kt)("p",null,"Also, please note that the list below is exhaustive, and the items are listed in no particular order. You don't need to learn everything listed in the picture, however knowing what you don't know is as important as knowing things."),(0,r.kt)("p",null,(0,r.kt)("img",Object.assign({parentName:"p"},{src:"/roadmaps/angular.png",alt:null}))),(0,r.kt)("p",null,"Please note that the list is opinionated, and you might have different opinions than those of the author. Having said that, ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap/issues/new"}),"we would love to hear your opinions")," and incorporate them in the picture if suitable."))}s.isMDXComponent=!0},67489:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},65191:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The intent of this guide is to give you an idea about the Android development landscape and to help guide your learning if you are confused. Before we start, please note that the roadmap is opinionated, and you might have different opinions than those of the author. Having said that, ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap/issues/new"}),"we would love to hear your opinions")," and incorporate them in the roadmap if suitable."),(0,r.kt)("p",null,"There are multiple ways to develop applications for the android; you can go down the path of hybrid application development where ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://flutter.dev/"}),"flutter"),", ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://reactnative.dev/"}),"react-native"),", or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://www.nativescript.org/"}),"NativeScript")," are the most common contenders. Flutter uses Dart, whereas React Native and Native Script rely on JavaScript. Answering the question of hybrid vs native is out of the scope of this roadmap. This roadmap is focused on the native Android apps development but if you are interested in learning any hybrid framework, my personal preference is ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://reactnative.dev"}),"react-native")," and I would recommend you to checkout the ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/frontend"}),"Frontend Developer Roadmap"),"."),(0,r.kt)("h2",null,"Complete Roadmap"),(0,r.kt)("p",null,"Here is the full version of the roadmap in a single image and after that we have the broken down version with the resources and links to learn more about each of the boxes."),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps/android/roadmap.png"}),(0,r.kt)("img",Object.assign({parentName:"a"},{src:"/roadmaps/android/roadmap.svg",alt:null})))),(0,r.kt)("h2",null,"Broken Down Version"),(0,r.kt)("p",null,"Below is the broken down version of the roadmap with links and resources to learn more about each of the items listed in the complete roadmap above."),(0,r.kt)("h2",null,"Pick a Language"),(0,r.kt)("p",null,"For the languages, you can develop android apps either by using Kotlin or Java."),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps/android/pick-language.svg"}),(0,r.kt)("img",Object.assign({parentName:"a"},{src:"/roadmaps/android/pick-language.svg",alt:null})))),(0,r.kt)("p",null,"Although, you can use both ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://en.wikipedia.org/wiki/Kotlin_(programming_language)"}),"Kotlin")," and ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://en.wikipedia.org/wiki/Java_(programming_language)"}),"Java")," to develop native android apps, ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://android-developers.googleblog.com/2019/05/google-io-2019-empowering-developers-to-build-experiences-on-Android-Play.html"}),"Google announced in 2019")," to make Kotlin the preferred way of developing android applications. If you were to start learning android development today, Kotlin should be your language of choice."),(0,r.kt)("h2",null,"The Fundamentals"),(0,r.kt)("p",null,"Install the ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://developer.android.com/studio"}),"Android Studio")," and learn the basics of Kotlin to get started. "),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps/android/the-fundamentals.png"}),(0,r.kt)("img",Object.assign({parentName:"a"},{src:"/roadmaps/android/the-fundamentals.png",alt:null})))),(0,r.kt)("p",null,"We have also listed down some free resources which you can use for the items listed in the image above. If you have some better ones, please do suggest. Also, you don't need to go through all of them, just go through them and pick what you like."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://blog.teamtreehouse.com/absolute-beginners-guide-kotlin"}),"Learn the basics of Kotlin")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://kotlinlang.org/docs/reference/basic-syntax.html"}),"Kotlin Docs")," and ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://kotlinlang.org/docs/tutorials/"}),"Official Kotlin Tutorials")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.studytonight.com/data-structures/introduction-to-data-structures"}),"Data Structures and Algorithms"),". Also ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.tutorialspoint.com/data_structures_algorithms/index.htm"}),"check this"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://kotlinlang.org/docs/reference/collections-overview.html"}),"Kotlin DataStructures")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://github.com/bmaslakov/kotlin-algorithm-club"}),"Algorithms and DataStructures in Kotlin"))),(0,r.kt)("h2",null,"Version Control Systems"),(0,r.kt)("p",null,"Version control systems record your changes to the codebase and allow you to recall specific versions later. There are multiple Version Control Systems available but ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://git-scm.com/"}),"Git")," is the most common one these days."),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps/android/git-github.png"}),(0,r.kt)("img",Object.assign({parentName:"a"},{src:"/roadmaps/android/git-github.png",alt:null})))),(0,r.kt)("p",null,"Here are some of the resources to get you started. Feel free to google and find something else that you find easier."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.udacity.com/course/version-control-with-git--ud123"}),"Udacity \u2014 Version Control with Git")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://guides.github.com/activities/hello-world/"}),"GitHub Hello World"))),(0,r.kt)("h2",null,"Building an Application"),(0,r.kt)("p",null,"Here is the list of items that you are going to need when developing Android applications. Please note that, this is an exhaustive list, and you don't need to know it all from the get-go. Get an idea of the items listed, and just start building some apps and keep the items listed in the back of your mind and have a deep dive when using them. "),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps/android/build-an-application.png"}),(0,r.kt)("img",Object.assign({parentName:"a"},{src:"/roadmaps/android/build-an-application.png",alt:null})))),(0,r.kt)("p",null,"To learn more about the items listed in the image above, here are the links to the relevant docs"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/guide/components/activities/intro-activities"}),"Using Activities and Activity Life Cycles")),(0,r.kt)("li",{parentName:"ul"},"Building Flexible Interfaces using ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/guide/components/fragments"}),"Fragments")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/studio/debug"}),"Debugging using Android Studio Debugger")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/work/managed-configurations"}),"Handling App Configurations")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/guide/components/intents-filters"}),"Using Intents and Intent Filters")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://guides.codepath.com/android/Using-Context"}),"Understand Context")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/training/multiple-threads"}),"Learn about Multithreading")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.raywenderlich.com/6901838-data-privacy-for-android"}),"Data Privacy")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.raywenderlich.com/5634-securing-network-data-tutorial-for-android"}),"Securing Network Data")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/training/dependency-injection"}),"Dependency Injection")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/guide/topics/providers/content-providers"}),"Content Providers")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://github.com/bumptech/glide"}),"Glide"),", ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://square.github.io/retrofit/"}),"Retrofit"),", ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://firebase.google.com/docs/crashlytics/get-started"}),"Crashlytics"),", ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://github.com/google/gson"}),"GSON")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/topic/libraries/architecture/room"}),"Room"),", ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/guide/navigation/navigation-getting-started"}),"Navigation"),", ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/topic/libraries/architecture/workmanager"}),"Work Manager"),", ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/topic/libraries/architecture/livedata"}),"LiveData"),", ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/topic/libraries/data-binding"}),"Data Binding")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://github.com/ReactiveX/RxJava"}),"RxJava"),", ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://github.com/ReactiveX/RxKotlin"}),"RxKotlin")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/topic/performance/memory-overview"}),"Memory Management Overview")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://proandroiddev.com/diving-deeper-into-context-oriented-programming-in-kotlin-3ecb4ec38814"}),"Diving deeper into context-oriented programming in Kotlin")," ")),(0,r.kt)("p",null,"I would highly recommend watching ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012"}),"this free course")," from google on Developing Android Apps with Kotlin. Also, here are some of the resources to learn more about the topics listed above."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012"}),"Developing Android Apps with Kotlin")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://developer.android.com/guide"}),"Android Developer Guides")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.raywenderlich.com"}),"Raywenderlich"))),(0,r.kt)("h2",null,"Wrap Up"),(0,r.kt)("p",null,"That wraps it up for the android developer roadmap. Again, remember to not be exhausted by the list; just learn the basics and start working on some project, rest of the learnings will come along the way. Good luck!"),(0,r.kt)("p",null,"For any suggestions, improvements and feedback, feel free to ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://github.com/kamranahmedse/developer-roadmap"}),"submit an issue")," or reach out to me on twitter ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"https://twitter.com/kamranahmedse"}),"@kamranahmedse"),"."),(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("br",null))}s.isMDXComponent=!0},97890:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},69556:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The intent of this guide is to give you an idea about the Python ecosystem and to help guide your learning if you are confused. We have another roadmap on the ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/backend"}),"Backend Development")," that focuses on the backend development if you are interested in that."),(0,r.kt)("p",null,"Also, please note that the list below is exhaustive, and the items are listed in no particular order. You don't need to learn everything listed in the picture, however knowing what you don't know is as important as knowing things."),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps/python.png"}),(0,r.kt)("img",Object.assign({parentName:"a"},{src:"/roadmaps/python.png",alt:null})))))}s.isMDXComponent=!0},8481:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},62388:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The intent of this guide is to give you an idea about the Go ecosystem and to help guide your learning if you are confused. We have another roadmap on the ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/backend"}),"Backend Development")," that focuses on the backend development if you are interested in that."),(0,r.kt)("p",null,"Also, please note that the list below is exhaustive, and the items are listed in no particular order. You don't need to learn everything listed in the picture, however knowing what you don't know is as important as knowing things."),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps/golang.png"}),(0,r.kt)("img",Object.assign({parentName:"a"},{src:"/roadmaps/golang.png",alt:null})))))}s.isMDXComponent=!0},79101:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},57913:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The intent of this guide is to give you an idea about the Java ecosystem and to help guide your learning if you are confused. We have another roadmap on the ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/backend"}),"Backend Development")," that focuses on the backend development if you are interested in that."),(0,r.kt)("p",null,"Also, please note that the list below is exhaustive, and the items are listed in no particular order. You don't need to learn everything listed in the picture, however knowing what you don't know is as important as knowing things."),(0,r.kt)("p",null,(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps/java.png"}),(0,r.kt)("img",Object.assign({parentName:"a"},{src:"/roadmaps/java.png",alt:null})))))}s.isMDXComponent=!0},79673:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},51464:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The intent of this guide is to give you an idea about the DBA landscape and to help guide your learning if you are confused. The roadmap is highly opinionated \u2014 neither, knowing everything listed in the roadmap, nor the order of items given in the roadmap is required to be followed in order to be a DBA."),(0,r.kt)("h2",null,"Learn basic RDBMS terms and concepts"),(0,r.kt)("p",null,"Get basic understanding of Postgres key terms and basic RDBMS concepts."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Object model"),": data types, columns, rows, tables, schemas, databases, queries."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Relational model"),": domains, attributes, tuples, relations, constraints, NULL."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Databases high-level concepts"),": ACID, MVCC, transactions, write-ahead log, query processing."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Links"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/13/glossary.html"}),"Postgres Glossary")," "),(0,r.kt)("li",{parentName:"ul"},"SQL and Relational Theory - Christopher J. Date, 2009"),(0,r.kt)("li",{parentName:"ul"},"Database Design and Relational Theory - Christopher J. Date, 2012")))),(0,r.kt)("h2",null,"Learn how to install and run PostgreSQL"),(0,r.kt)("p",null,"Get practical skills of how to set up and run Postgres to get a working environment for further learning."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Using package managers (APT, YUM, etc.)"),(0,r.kt)("li",{parentName:"ul"},"Using ",(0,r.kt)("inlineCode",{parentName:"li"},"docker"),"."),(0,r.kt)("li",{parentName:"ul"},"Managing Postgres service using ",(0,r.kt)("inlineCode",{parentName:"li"},"systemd")," (start, stop, restart, reload)."),(0,r.kt)("li",{parentName:"ul"},"Managing Postgres service using ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_ctl"),", or OS-specific tools (like ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_ctlcluster"),")."),(0,r.kt)("li",{parentName:"ul"},"Connect to Postgres using ",(0,r.kt)("inlineCode",{parentName:"li"},"psql"),"."),(0,r.kt)("li",{parentName:"ul"},"Deploy database service in cloud environment (AWS, GCE, Azure, Heroku, DigitalOcean, etc...)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Links"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/download/"}),"Official download and install instructions")," "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://hub.docker.com/_/postgres"}),"Official Docker images")," ")))),(0,r.kt)("h2",null,"Learn SQL concepts"),(0,r.kt)("p",null,"Get practical skills of how to create and manipulate database objects and how to execute queries using ",(0,r.kt)("inlineCode",{parentName:"p"},"psql")," client."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Understand basic data types."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"DML queries"),": querying data, modifying data, filtering data, joining tables.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Advanced topics"),": transactions, CTE, subqueries, lateral join, grouping, set operations."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"DDL queries"),": managing tables and schemas (create, alter, drop)."),(0,r.kt)("li",{parentName:"ul"},"Import and export data using ",(0,r.kt)("inlineCode",{parentName:"li"},"COPY"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Links"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.db-fiddle.com/"}),"DB Fiddle")," "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresqltutorial.com/"}),"PostgreSQL Tutorial")," "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/tutorial-sql.html"}),"PostgreSQL SQL Getting Started")," "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/sql.html"}),"The SQL Language"))))),(0,r.kt)("h2",null,"Learn how to configure Postgres"),(0,r.kt)("p",null,"Get understanding of the main aspects of how Postgres could be configured. Deep understanding of Postgres internals is not yet necessary here."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"postgresql.conf:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Resources usage"),(0,r.kt)("li",{parentName:"ul"},"Write-ahead Log"),(0,r.kt)("li",{parentName:"ul"},"Checkpoints and Background Writer"),(0,r.kt)("li",{parentName:"ul"},"Cost-based vacuum and auto-vacuum"),(0,r.kt)("li",{parentName:"ul"},"Replication"),(0,r.kt)("li",{parentName:"ul"},"Query planner"),(0,r.kt)("li",{parentName:"ul"},"Reporting, logging and statistics"),(0,r.kt)("li",{parentName:"ul"},"Adding extra extensions"),(0,r.kt)("li",{parentName:"ul"},"...keep exploring other configuration options"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Links"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"http://postgresqlco.nf/"}),"Postgresqlco.nf")," ")))),(0,r.kt)("h2",null,"Learn Postgres security concepts"),(0,r.kt)("p",null,"Get understanding about basic security concepts and common ways of how to deploy secure configurations."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Authentication models, roles, pg_hba.conf, SSL settings."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Objects privileges"),": grant/revoke, default privileges."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Advanced topics")," - row-level security, selinux."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Links"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/client-authentication.html"}),"Client authentication")," "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/user-manag.html"}),"Roles and users managements"))))),(0,r.kt)("h2",null,"Develop infrastructure DBA skills"),(0,r.kt)("p",null,"Get practical skills of how to deploy, extend, maintain and support Postgres installations and 3rd-party Postgres ecosystem software."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Replication"),": streaming replication, logical replication"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Backup/recovery tools"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Built-in: ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_dump"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_dumpall"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_restore"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_basebackup")),(0,r.kt)("li",{parentName:"ul"},"3rd-party: ",(0,r.kt)("inlineCode",{parentName:"li"},"barman"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"pgbackrest"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_probackup"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"WAL-G")),(0,r.kt)("li",{parentName:"ul"},"Backup validation procedures"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Upgrading procedures"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Minor and major upgrades using ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_upgrade")),(0,r.kt)("li",{parentName:"ul"},"Upgrades using logical replication"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Connection pooling"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Pgbouncer")),(0,r.kt)("li",{parentName:"ul"},"Alternatives: ",(0,r.kt)("inlineCode",{parentName:"li"},"Pgpool-II"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Odyssey"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Pgagroal")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Infrastructure monitoring"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"Prometheus"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Zabbix"),", other favourite monitoring solution"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"High availability and cluster management tools"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Patroni")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Alternatives"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"Repmgr"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Stolon"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"pg_auto_failover"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"PAF")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Applications Load Balancing and Service Discovery"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"Haproxy"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Keepalived"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Consul"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Etcd")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Deploy Postgres on ",(0,r.kt)("inlineCode",{parentName:"strong"},"Kubernetes")),": Simple ",(0,r.kt)("inlineCode",{parentName:"li"},"StatefulSet")," setup, ",(0,r.kt)("inlineCode",{parentName:"li"},"HELM"),", operators"),(0,r.kt)("li",{parentName:"ul"},"Resource usage and provisioning, capacity planning")),(0,r.kt)("h2",null,"Learn how to automate routines"),(0,r.kt)("p",null,"Get practical skills, learn automation tools and automate existing routine tasks."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Automation using shell scripts or any other favourite language (",(0,r.kt)("inlineCode",{parentName:"li"},"Bash"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Python"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Perl"),", etc)"),(0,r.kt)("li",{parentName:"ul"},"Configuration management: ",(0,r.kt)("inlineCode",{parentName:"li"},"Ansible"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Salt"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Chef"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Puppet"))),(0,r.kt)("h2",null,"Develop application DBA skills"),(0,r.kt)("p",null,"Learn theory and get practical skills of how applications should work with Postgres"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Migrations"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"practical patterns and antipatterns"),(0,r.kt)("li",{parentName:"ul"},"tools: ",(0,r.kt)("inlineCode",{parentName:"li"},"liquibase"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"sqitch"),", language-specific tools"))),(0,r.kt)("li",{parentName:"ul"},"Data import/export, bulk loading and processing"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Queues"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"practical patterns and anti-patterns"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Skytools PGQ")))),(0,r.kt)("li",{parentName:"ul"},"Data partitioning and sharding patterns."),(0,r.kt)("li",{parentName:"ul"},"Database normalization and normal forms."),(0,r.kt)("li",{parentName:"ul"},"Books:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"The Art of PostgreSQL - Dimitri Fontaine, 2020")))),(0,r.kt)("h2",null,"Learn Postgres advanced topics"),(0,r.kt)("p",null,"Here is important to continuously extend and develop existing knowledge about Postgres."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Low level internals"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Processes and memory architecture"),(0,r.kt)("li",{parentName:"ul"},"Vacuum processing"),(0,r.kt)("li",{parentName:"ul"},"Buffer management"),(0,r.kt)("li",{parentName:"ul"},"Lock management"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/storage.html"}),"Physical storage and file layout")," "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/catalogs.html"}),"System catalog")," "))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Fine-grained tuning"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Per-user, per-database settings"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-STORAGE-PARAMETERS"}),"Storage parameters")," "),(0,r.kt)("li",{parentName:"ul"},"Workload-dependant tuning: OLTP, OLAP, HTAP"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Advanced SQL topics"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"PL/pgSQL, procedures and functions, triggers"),(0,r.kt)("li",{parentName:"ul"},"Aggregate and window functions"),(0,r.kt)("li",{parentName:"ul"},"Recursive CTE"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Links"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"http://www.interdb.jp/pg/index.html"}),"The Internals of PostgreSQL")," for database administrators and system developers"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/plpgsql.html"}),"PL/pgSQL Guide"))))),(0,r.kt)("h2",null,"Learn Postgres troubleshooting techniques"),(0,r.kt)("p",null,"Get basic understanding about troubleshooting tools and get practical skills of how to detect and resolve problems."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Operating system tools"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"top")," (",(0,r.kt)("inlineCode",{parentName:"li"},"htop"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"atop"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"sysstat")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"iotop")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Postgres system views"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"pg_stat_activity")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"pg_stat_statements")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Postgres tools"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"pgcenter")," - ",(0,r.kt)("em",{parentName:"li"},"personal recommendation")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Query analyzing"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/docs/current/sql-explain.html"}),"EXPLAIN")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://explain.depesz.com/"}),"Depesz")," online EXPLAIN visualization tool"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://tatiyants.com/pev/#/plans"}),"PEV")," online EXPLAIN visualization tool"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://explain.tensor.ru/"}),"Tensor")," online EXPLAIN visualization tool, RU language only"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Log analyzing"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"pgBadger")),(0,r.kt)("li",{parentName:"ul"},"Ad-hoc analyzing using ",(0,r.kt)("inlineCode",{parentName:"li"},"grep"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"awk"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"sed"),", etc."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"External tracing/profiling tools"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"gdb"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"strace"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"perf-tools"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"ebpf"),", core dumps"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Troubleshooting methods"),": USE, RED, Golden signals"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Links"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"http://www.brendangregg.com/linuxperf.html"}),"Linux Performance")," by Brendan Gregg"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"http://www.brendangregg.com/usemethod.html"}),"USE Method"))))),(0,r.kt)("h2",null,"Learn SQL optimization technics"),(0,r.kt)("p",null,"Get understanding and practical skills of how to optimize SQL queries."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Indexes, and their use cases"),": B-tree, Hash, GiST, SP-GiST, GIN, BRIN"),(0,r.kt)("li",{parentName:"ul"},"SQL queries patterns and anti-patterns"),(0,r.kt)("li",{parentName:"ul"},"SQL schema design patterns and anti-patterns"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Links"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://use-the-index-luke.com/"}),"Use the Index, Luke")," - a Guide to Database Performance for Developers"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Books"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"SQL Antipatterns: Avoiding the Pitfalls of Database Programming - Bill Karwin, 2010 ")))),(0,r.kt)("h2",null,"Develop architect skills"),(0,r.kt)("p",null,"Get deeper understanding of Postgres use cases and where Postgres is suitable and where is not."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Postgres forks and extensions"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"Greenplum"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Timescaledb"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Citus"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Postgres-XL"),", etc."),(0,r.kt)("li",{parentName:"ul"},"RDBMS in general, benefits and limitations"),(0,r.kt)("li",{parentName:"ul"},"Differences between Postgres and other RDBMS and NoSQL databases")),(0,r.kt)("h2",null,"Develop Postgres hacker skills"),(0,r.kt)("p",null,"Get involved to Postgres community and contribute to Postgres; be a useful member of Postgres, and the open source community; use personal experience to help other people."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Daily reading and answering in ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://www.postgresql.org/list/"}),"mailing lists"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"pgsql-general"),(0,r.kt)("li",{parentName:"ul"},"pgsql-admin"),(0,r.kt)("li",{parentName:"ul"},"pgsql-performance"),(0,r.kt)("li",{parentName:"ul"},"pgsql-hackers"),(0,r.kt)("li",{parentName:"ul"},"pgsql-bugs"))),(0,r.kt)("li",{parentName:"ul"},"Reviewing patches"),(0,r.kt)("li",{parentName:"ul"},"Writing patches, attending in ",(0,r.kt)("a",Object.assign({parentName:"li"},{href:"https://commitfest.postgresql.org/"}),"Commitfests"))),(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("br",null))}s.isMDXComponent=!0},1545:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},48188:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Roadmap is not ready yet"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the roadmap, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")," "))}s.isMDXComponent=!0},91048:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},44894:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Roadmap is not ready yet"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the roadmap, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")," "))}s.isMDXComponent=!0},49598:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return s}});n(67294);var r=n(3905);function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a={};function s(e){var t=e.components,n=o(e,["components"]);return(0,r.kt)("wrapper",Object.assign({},a,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"We are still preparing the resources"),". Please check back later or ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"subscribe to get notified"),".")),(0,r.kt)("p",null,"While we prepare the list, follow this simple advice to learn anything"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Just ",(0,r.kt)("strong",{parentName:"p"},"pick a project and start working on it"),", you will learn all that you need along the way.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2192")," ","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/roadmaps"}),"All Roadmaps")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/guides"}),"Programming guides")," ","\xa0","\u2022","\xa0"," ",(0,r.kt)("a",Object.assign({parentName:"p"},{href:"/signup"}),"Subscribe")))}s.isMDXComponent=!0},58712:function(e){"use strict";e.exports=JSON.parse('[{"username":"kamranahmedse","name":"Kamran Ahmed","twitter":"kamranahmedse","picture":"/authors/kamranahmedse.jpeg","bio":"Lead engineer at Tajawal. Lover of all things web and opensource. Created roadmap.sh to help the confused ones."},{"username":"jesse","name":"Jesse Li","twitter":"__jesse_li","picture":"/authors/jesse.png","bio":"Software engineer."},{"username":"dmytrobol","name":"Dmytro Bolkachov","twitter":"dmytrobol","picture":"/authors/dmytrobol.png","bio":"JavaScript Lad, Movie buff and coder interested in everything web related"},{"username":"spekulatius","name":"Peter Thaleikis","twitter":"spekulatius1984","picture":"/authors/spekulatius.jpg","bio":"Developer building side-projects for fun, lover of the web and open source"},{"username":"ebrahimbharmal007","name":"Ebrahim Bharmal","twitter":"BharmalEbrahim","picture":"/authors/ebrahimbharmal007.png","bio":"Love building projects using tools completely new to me. Python forever. Senior at University of Texas at Arlington (2021)"},{"username":"lesovsky","name":"Alexey Lesovsky","bio":"Linux system administrator and PostgreSQL DBA at DataEgret.","picture":"/authors/lesovsky.jpeg"}]')},19552:function(e){"use strict";e.exports=JSON.parse('[{"id":"avoid-render-blocking-javascript-with-async-defer","title":"Async and Defer Script Loading","description":"Learn how to avoid render blocking JavaScript using async and defer scripts.","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-09-10T19:59:14.191Z","createdAt":"2021-09-10T19:59:14.191Z"},{"id":"what-are-web-vitals","title":"What are Web Vitals?","description":"Learn what are the core web vitals and how to measure them.","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-09-05T19:59:14.191Z","createdAt":"2021-09-05T19:59:14.191Z"},{"id":"what-is-sli-slo-sla","title":"SLIs, SLOs and SLAs","description":"Learn what are different indicators for performance identification of any service.","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-08-31T19:59:14.191Z","createdAt":"2021-08-31T19:59:14.191Z"},{"id":"ci-cd","title":"What is CI and CD?","description":"Learn the basics of CI/CD and how to implement that with GitHub Actions.","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-07-09T19:59:14.191Z","createdAt":"2021-07-09T19:59:14.191Z"},{"id":"sso","title":"SSO \u2014 Single Sign On","description":"Learn the basics of SAML and understand how does Single Sign On work.","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-07-01T19:59:14.191Z","createdAt":"2021-07-01T19:59:14.191Z"},{"id":"oauth","title":"OAuth \u2014 Open Authorization","description":"Learn and understand what is OAuth and how it works","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-06-28T19:59:14.191Z","createdAt":"2021-06-28T19:59:14.191Z"},{"id":"jwt-authentication","title":"JWT Authentication","description":"Understand what is JWT authentication and how is it implemented","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-06-20T19:59:14.191Z","createdAt":"2021-06-20T19:59:14.191Z"},{"id":"token-authentication","title":"Token Based Authentication","description":"Understand what is token based authentication and how it is implemented","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-06-02T20:59:14.191Z","createdAt":"2021-06-02T20:59:14.191Z"},{"id":"session-authentication","title":"Session Based Authentication","description":"Understand what is session based authentication and how it is implemented","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-05-26T20:59:14.191Z","createdAt":"2021-05-26T20:59:14.191Z"},{"id":"basic-authentication","title":"Basic Authentication","description":"Understand what is basic authentication and how it is implemented","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-05-19T20:59:14.191Z","createdAt":"2021-05-19T20:59:14.191Z"},{"id":"character-encodings","title":"Character Encodings","description":"Covers the basics of character encodings and explains ASCII vs Unicode","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-05-14T20:59:14.191Z","createdAt":"2021-05-14T20:59:14.191Z"},{"id":"unfamiliar-codebase","title":"Unfamiliar Codebase","description":"Tips on getting getting familiar with an unfamiliar codebase","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-05-04T20:59:14.191Z","createdAt":"2021-05-04T20:59:14.191Z"},{"id":"why-build-it-and-they-will-come-wont-work-anymore","title":"Build it and they will come?","description":"Why \u201cbuild it and they will come\u201d alone won\u2019t work anymore","isPro":false,"authorUsername":"spekulatius","updatedAt":"2021-05-04T12:59:14.191Z","createdAt":"2021-05-04T12:59:14.191Z"},{"id":"dhcp-in-one-picture","title":"DHCP in One Picture","description":"Here is what happens when a new device joins the network.","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-04-28T15:48:21.191Z","createdAt":"2021-04-28T15:48:21.191Z"},{"id":"ssl-tls-https-ssh","title":"SSL vs TLS vs SSH","description":"Quick tidbit on the differences between SSL, TLS, HTTPS and SSH","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-04-22T15:48:21.191Z","createdAt":"2021-04-22T15:48:21.191Z"},{"id":"asymptotic-notation","title":"Asymptotic Notation","description":"Learn the basics of measuring the time and space complexity of algorithms","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-04-03T15:48:21.191Z","createdAt":"2021-04-03T15:48:21.191Z"},{"id":"big-o-notation","title":"Big-O Notation","description":"Easy to understand explanation of Big-O notation without any fancy terms","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-03-15T15:48:21.191Z","createdAt":"2021-03-15T15:48:21.191Z"},{"id":"random-numbers","title":"Random Numbers: Are they?","description":"Learn how they are generated and why they may not be truly random.","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-03-14T15:48:21.191Z","createdAt":"2021-03-14T15:48:21.191Z"},{"id":"scaling-databases","title":"Scaling Databases","description":"Learn the ups and downs of different database scaling strategies","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2021-02-18T15:48:21.191Z","createdAt":"2021-02-18T15:48:21.191Z"},{"id":"what-is-internet","title":"How does the internet work?","description":"Learn the basics of internet and everything involved with this short video series","isPro":false,"authorUsername":"dmytrobol","updatedAt":"2021-02-29T15:48:21.191Z","createdAt":"2021-02-29T15:48:21.191Z"},{"id":"torrent-client","title":"Building a BitTorrent Client","description":"Learn everything you need to know about BitTorrent by writing a client in Go","isPro":false,"authorUsername":"jesse","updatedAt":"2021-01-17T15:48:21.191Z","createdAt":"2021-01-17T15:48:21.191Z","canonical":"https://blog.jse.li/posts/torrent/"},{"id":"levels-of-seniority","title":"Levels of Seniority","description":"How to Step Up as a Junior, Mid Level or a Senior Developer?","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2020-12-03T12:13:00.860Z","createdAt":"2020-12-03T12:13:00.860Z"},{"id":"design-patterns-for-humans","title":"Design Patterns for Humans","description":"A language agnostic, ultra-simplified explanation to design patterns","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2019-10-09T12:00:00.860Z","createdAt":"2019-01-23T17:00:00.860Z"},{"id":"journey-to-http2","title":"Journey to HTTP/2","description":"The evolution of HTTP. How it all started and where we stand today","isPro":false,"authorUsername":"kamranahmedse","createdAt":"2018-12-04T12:00:00.860Z","updatedAt":"2018-12-04T12:00:00.860Z","isDraft":true},{"id":"dns-in-one-picture","title":"DNS in One Picture","description":"Quick illustrative guide on how a website is found on the internet.","isPro":false,"authorUsername":"kamranahmedse","updatedAt":"2018-12-04T12:00:00.860Z","createdAt":"2018-12-04T17:00:00.860Z"},{"id":"http-caching","title":"HTTP Caching","description":"Everything you need to know about web caching","isPro":false,"authorUsername":"kamranahmedse","createdAt":"2018-11-29T17:00:00.860Z","updatedAt":"2018-11-29T17:00:00.860Z"},{"id":"history-of-javascript","title":"Brief History of JavaScript","description":"How JavaScript was introduced and evolved over the years","isPro":false,"authorUsername":"kamranahmedse","createdAt":"2017-10-28T17:00:00.860Z","updatedAt":"2017-10-28T17:00:00.860Z"},{"id":"proxy-servers","title":"Proxy Servers","description":"How do proxy servers work and what are forward and reverse proxies?","isPro":false,"authorUsername":"ebrahimbharmal007","createdAt":"2017-10-24T17:00:00.860Z","updatedAt":"2017-10-24T17:00:00.860Z"}]')},1662:function(e){"use strict";e.exports=JSON.parse('[{"seo":{"title":"Frontend Developer Roadmap: Learn to become a modern frontend developer","description":"Learn to become a modern frontend developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development.","keywords":["javascript roadmap 2022","frontend roadmap 2022","frontend developer roadmap 2022","guide to becoming a developer","guide to becoming a frontend developer","frontend developer","frontend engineer","frontend skills","frontend development","javascript developer","frontend development skills","frontend development skills test","frontend roadmap","frontend engineer roadmap","frontend developer roadmap","become a frontend developer","frontend developer career path","javascript developer","modern javascript developer","node developer","skills for frontend development","learn frontend development","what is frontend development","frontend developer quiz","frontend developer interview questions"]},"title":"Frontend Developer","description":"Step by step guide to becoming a modern frontend developer in 2022","featuredTitle":"Frontend","featuredDescription":"Step by step guide to becoming a frontend developer in 2022","author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"featured":true,"imageUrl":"/roadmaps/frontend.png","jsonUrl":"/project/frontend.json","resourcesPath":"/roadmaps/100-frontend/resources.md","pdfUrl":"/pdfs/frontend.pdf","contentPathsFilePath":"/roadmaps/100-frontend/content-paths.json","id":"frontend","metaPath":"/roadmaps/100-frontend/meta.json","isUpcoming":false},{"seo":{"title":"Backend Developer Roadmap: Learn to become a modern backend developer","description":"Learn to become a modern backend developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern backend development.","keywords":["backend roadmap 2022","backend developer roadmap 2022","guide to becoming a developer","guide to becoming a backend developer","backend roadmap","backend developer","backend engineer","backend skills","backend development","javascript developer","backend development skills","backend development skills test","backend engineer roadmap","backend developer roadmap","become a backend developer","backend developer career path","javascript developer","modern javascript developer","node developer","skills for backend development","learn backend development","what is backend development","backend developer quiz","backend developer interview questions"]},"title":"Backend Developer","description":"Step by step guide to becoming a modern backend developer in 2022","featuredTitle":"Backend","featuredDescription":"Step by step guide to becoming a backend developer in 2022","featured":true,"imageUrl":"/roadmaps/backend.png","jsonUrl":"/project/backend.json","resourcesPath":"/roadmaps/101-backend/resources.md","author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/backend.pdf","contentPathsFilePath":"/roadmaps/101-backend/content-paths.json","id":"backend","metaPath":"/roadmaps/101-backend/meta.json","isUpcoming":false},{"seo":{"title":"DevOps Roadmap: Learn to become a DevOps Engineer or SRE","description":"Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["devops roadmap 2022","sre roadmap 2022","operations roadmap 2022","guide to becoming a devops enginer","devops roadmap","sre roadmap","site reliability engineer roadmap","operations roles","become devops","devops skills","modern devops skills","devops skills test","skills for devops","learn devops","what is devops","what is sre","devops quiz","devops interview questions"]},"title":"DevOps Roadmap","description":"Step by step guide for DevOps, SRE or any other Operations Role in 2022","featuredTitle":"DevOps","featuredDescription":"Step by step guide for DevOps or operations role in 2022","featured":true,"imageUrl":"/roadmaps/devops.png","jsonUrl":"/project/devops.json","resourcesPath":"/roadmaps/102-devops/resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/devops.pdf","id":"devops","metaPath":"/roadmaps/102-devops/meta.json","isUpcoming":false},{"seo":{"title":"React Developer Roadmap: Learn to become a React developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for react development. Learn to become a modern React developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["react roadmap 2022","react developer roadmap 2022","guide to becoming a react developer","react developer roadmap","react roadmap","become react developer","react developer skills","react skills test","skills for react development","learn react development","what is react","react quiz","react interview questions"]},"title":"React Developer","description":"Everything that is there to learn about React and the ecosystem in 2022.","featuredTitle":"React","featuredDescription":"Step by step guide to become a React Developer in 2022","isTextHeavy":false,"isCommunity":false,"featured":true,"landingPath":"/roadmaps/103-react/landscape.md","resourcesPath":"/roadmaps/103-react/resources.md","jsonUrl":"/project/react.json","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/react.pdf","id":"react","metaPath":"/roadmaps/103-react/meta.json","isUpcoming":false},{"seo":{"title":"Angular Developer Roadmap: Learn to become a Angular developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for angular development. Learn to become a modern Angular developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a angular developer","angular developer roadmap","angular roadmap","become angular developer","angular developer skills","angular skills test","skills for angular development","learn angular development","what is angular","angular quiz","angular interview questions"]},"title":"Angular Developer","description":"Everything that is there to learn about Angular and the ecosystem in 2022.","featuredTitle":"Angular","featuredDescription":"Step by step guide to become a Angular Developer in 2022","isTextHeavy":false,"isCommunity":false,"featured":true,"jsonUrl":"/project/angular.json","landingPath":"/roadmaps/104-angular/landscape.md","resourcesPath":"/roadmaps/104-angular/resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/angular.pdf","id":"angular","metaPath":"/roadmaps/104-angular/meta.json","isUpcoming":false},{"seo":{"title":"Android Developer Roadmap: Learn to become an Android developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for android development. Learn to become a modern Android developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming an android developer","android developer roadmap","android roadmap","become android developer","android developer skills","android skills test","skills for android development","learn android development","what is android","android quiz","android interview questions"]},"title":"Android Developer","description":"Step by step guide to becoming an Android developer in 2022","featuredTitle":"Android","featuredDescription":"Step by step guide to becoming an Android Developer in 2022","isTextHeavy":true,"isCommunity":false,"featured":true,"jsonUrl":"/project/android.json","landingPath":"/roadmaps/105-android/landscape.md","resourcesPath":"/roadmaps/105-android/resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"id":"android","metaPath":"/roadmaps/105-android/meta.json","isUpcoming":false},{"seo":{"title":"Learn to become a modern Python developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for python development. Learn to become a modern Python developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming an python developer","python developer roadmap","python roadmap","become python developer","python developer skills","python skills test","skills for python development","learn python development","what is python","python quiz","python interview questions"]},"title":"Python Developer","description":"Step by step guide to becoming a Python developer in 2022","featuredTitle":"Python","featuredDescription":"Step by step guide to becoming a Python Developer in 2022","isTextHeavy":true,"isCommunity":false,"featured":true,"jsonUrl":"/project/python.json","resourcesPath":"/roadmaps/106-python/resources.md","landingPath":"/roadmaps/106-python/landscape.md","pdfUrl":"/pdfs/python.pdf","versions":["latest"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"id":"python","metaPath":"/roadmaps/106-python/meta.json","isUpcoming":false},{"seo":{"title":"Learn to become a Go developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for Go development. Learn to become a modern React developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a golang developer","guide to becoming a go developer","golang developer","go developer","guide to golang","guide to go","golang roadmap","go roadmap","golang skills","go skills","golang skills test","go skills test","skills for golang","skills for go","cloud development","what is golang","what is go","golang quiz","go quiz","golang interview questions","go interview questions"]},"title":"Go Developer","description":"Step by step guide to becoming a Go developer in 2022","featuredTitle":"Go","featuredDescription":"Step by step guide to becoming a Go developer in 2022","isTextHeavy":false,"isCommunity":false,"isUpcoming":false,"featured":true,"jsonUrl":"/project/golang.json","landingPath":"/roadmaps/107-golang/landscape.md","resourcesPath":"/roadmaps/107-golang/resources.md","pdfUrl":"/pdfs/go.pdf","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"id":"golang","metaPath":"/roadmaps/107-golang/meta.json"},{"seo":{"title":"Learn to become a modern Java developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for java development. Learn to become a modern Java developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a developer","guide to becoming a java developer","java developer","java engineer","java skills","guide to java","java roadmap","java skills","java skills test","skills for java","cloud development","what is java","java quiz","java interview questions","java engineer roadmap","java developer roadmap","become a java developer","java developer career path","java developer","modern java developer"]},"title":"Java Developer","description":"Step by step guide to becoming a Java developer in 2022","featuredTitle":"Java","featuredDescription":"Step by step guide to becoming a Java Developer in 2022","isTextHeavy":false,"isCommunity":false,"isUpcoming":false,"featured":true,"jsonUrl":"/project/java.json","landingPath":"/roadmaps/108-java/landscape.md","resourcesPath":"/roadmaps/108-java/resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/java.pdf","id":"java","metaPath":"/roadmaps/108-java/meta.json"},{"seo":{"title":"DBA Roadmap: Learn to become a database administrator with PostgreSQL","description":"Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a database administrator","guide to becoming a DBA","dba roadmap","db administrator roadmap","database administrator roadmap","postgresql roadmap","dba skills","db administrator skills","become dba","postgresql skills","modern dba skills","dba skills test","skills for dba","skills for database administrator","learn dba","what is dba","database administrator quiz","dba interview questions"]},"title":"PostgreSQL DBA","description":"Step by step guide to becoming a modern PostgreSQL DB Administrator in 2022","featuredTitle":"DBA","featuredDescription":"Step by step guide to become a PostgreSQL DBA in 2022","landingPath":"/roadmaps/109-postgresql-dba/landscape.md","resourcesPath":"/roadmaps/109-postgresql-dba/resources.md","author":{"name":"Alexey Lesovsky","url":"https://github.com/lesovsky"},"isCommunity":false,"isTextHeavy":true,"featured":true,"detailed":false,"versions":[],"id":"postgresql-dba","metaPath":"/roadmaps/109-postgresql-dba/meta.json","isUpcoming":false},{"seo":{"title":"AWS Roadmap: Learn to use AWS","description":"Community driven, articles, resources, guides, interview questions, quizzes for react development. Learn to become a modern React developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to aws","aws roadmap","aws skills","aws skills test","skills for aws","cloud development","what is aws","aws quiz","aws interview questions"]},"title":"AWS","description":"Everything that is there to learn about AWS and the ecosystem in 2022.","featuredTitle":"AWS","featuredDescription":"Step by step guide to learn AWS in 2022","isTextHeavy":false,"isCommunity":false,"isUpcoming":true,"featured":true,"landingPath":"/roadmaps/110-aws/landscape.md","resourcesPath":"/roadmaps/110-aws/resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"id":"aws","metaPath":"/roadmaps/110-aws/meta.json"},{"seo":{"title":"QA Roadmap: Learn to become a modern QA engineer","description":"Community driven, articles, resources, guides, interview questions, quizzes for modern QA development. Learn to become a modern QA engineer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a QA engineer","QA engineer","QA skills","QA development skills","QA development skills test","QA engineer roadmap","become a QA engineer","QA engineer career path","skills for QA development","what is QA engineer","QA engineer quiz","QA engineer interview questions"]},"title":"QA Engineer","description":"Steps to follow in order to become a modern QA Engineer in 2022","featuredTitle":"QA","featuredDescription":"Step by step guide to becoming a modern QA Engineer in 2022","isUpcoming":true,"featured":true,"landingPath":"/roadmaps/111-qa/landscape.md","resourcesPath":"/roadmaps/111-qa/resources.md","author":{"name":"Anas Fitiani","url":"https://github.com/anas-qa"},"id":"qa","metaPath":"/roadmaps/111-qa/meta.json"}]')},18359:function(e){"use strict";e.exports=JSON.parse('{"home":"/roadmaps/100-frontend/content/readme.md","internet":"/roadmaps/100-frontend/content/100-internet/readme.md","internet:how-does-the-internet-work":"/roadmaps/100-frontend/content/100-internet/100-how-does-the-internet-work.md","internet:what-is-http":"/roadmaps/100-frontend/content/100-internet/101-what-is-http.md","internet:browsers-and-how-they-work":"/roadmaps/100-frontend/content/100-internet/102-browsers-and-how-they-work.md","internet:dns-and-how-it-works":"/roadmaps/100-frontend/content/100-internet/103-dns-and-how-it-works.md","internet:what-is-domain-name":"/roadmaps/100-frontend/content/100-internet/104-what-is-domain-name.md","internet:what-is-hosting":"/roadmaps/100-frontend/content/100-internet/105-what-is-hosting.md","html":"/roadmaps/100-frontend/content/101-html/readme.md","html:learn-the-basics":"/roadmaps/100-frontend/content/101-html/100-learn-the-basics.md","html:writing-semantic-html":"/roadmaps/100-frontend/content/101-html/101-writing-semantic-html.md","html:forms-and-validations":"/roadmaps/100-frontend/content/101-html/102-forms-and-validations.md","html:conventions-and-best-practices":"/roadmaps/100-frontend/content/101-html/103-conventions-and-best-practices.md","html:accessibility":"/roadmaps/100-frontend/content/101-html/104-accessibility.md","html:seo-basics":"/roadmaps/100-frontend/content/101-html/105-seo-basics.md","css":"/roadmaps/100-frontend/content/102-css/readme.md","css:learn-the-basics":"/roadmaps/100-frontend/content/102-css/100-learn-the-basics.md","css:making-layouts":"/roadmaps/100-frontend/content/102-css/101-making-layouts.md","css:responsive-design-and-media-queries":"/roadmaps/100-frontend/content/102-css/102-responsive-design-and-media-queries.md","javascript":"/roadmaps/100-frontend/content/103-javascript/readme.md","javascript:syntax-and-basic-constructs":"/roadmaps/100-frontend/content/103-javascript/100-syntax-and-basic-constructs.md","javascript:learn-dom-manipulation":"/roadmaps/100-frontend/content/103-javascript/101-learn-dom-manipulation.md","javascript:learn-fetch-api-ajax-xhr":"/roadmaps/100-frontend/content/103-javascript/102-learn-fetch-api-ajax-xhr.md","javascript:es6-and-modular-javascript":"/roadmaps/100-frontend/content/103-javascript/103-es6-and-modular-javascript.md","javascript:concepts":"/roadmaps/100-frontend/content/103-javascript/104-concepts.md","version-control-systems":"/roadmaps/100-frontend/content/104-version-control-systems/readme.md","version-control-systems:basic-usage-of-git":"/roadmaps/100-frontend/content/104-version-control-systems/100-basic-usage-of-git.md","repo-hosting-services":"/roadmaps/100-frontend/content/105-repo-hosting-services/readme.md","repo-hosting-services:github":"/roadmaps/100-frontend/content/105-repo-hosting-services/100-github.md","repo-hosting-services:gitlab":"/roadmaps/100-frontend/content/105-repo-hosting-services/101-gitlab.md","repo-hosting-services:bitbucket":"/roadmaps/100-frontend/content/105-repo-hosting-services/102-bitbucket.md","web-security-knowledge":"/roadmaps/100-frontend/content/106-web-security-knowledge/readme.md","web-security-knowledge:cors":"/roadmaps/100-frontend/content/106-web-security-knowledge/102-cors.md","web-security-knowledge:https":"/roadmaps/100-frontend/content/106-web-security-knowledge/100-https.md","web-security-knowledge:content-security-policy":"/roadmaps/100-frontend/content/106-web-security-knowledge/101-content-security-policy.md","web-security-knowledge:owasp-security-risks":"/roadmaps/100-frontend/content/106-web-security-knowledge/103-owasp-security-risks.md","package-managers":"/roadmaps/100-frontend/content/107-package-managers/readme.md","package-managers:npm":"/roadmaps/100-frontend/content/107-package-managers/100-npm.md","package-managers:yarn":"/roadmaps/100-frontend/content/107-package-managers/101-yarn.md","css-architecture":"/roadmaps/100-frontend/content/108-css-architecture/readme.md","css-architecture:bem":"/roadmaps/100-frontend/content/108-css-architecture/100-bem.md","css-architecture:oocss":"/roadmaps/100-frontend/content/108-css-architecture/101-oocss.md","css-architecture:smacss":"/roadmaps/100-frontend/content/108-css-architecture/102-smacss.md","css-preprocessors":"/roadmaps/100-frontend/content/109-css-preprocessors/readme.md","css-preprocessors:sass":"/roadmaps/100-frontend/content/109-css-preprocessors/100-sass.md","css-preprocessors:postcss":"/roadmaps/100-frontend/content/109-css-preprocessors/101-postcss.md","css-preprocessors:less":"/roadmaps/100-frontend/content/109-css-preprocessors/102-less.md","build-tools":"/roadmaps/100-frontend/content/110-build-tools/readme.md","build-tools:task-runners":"/roadmaps/100-frontend/content/110-build-tools/100-task-runners/readme.md","build-tools:task-runners:npm-scripts":"/roadmaps/100-frontend/content/110-build-tools/100-task-runners/100-npm-scripts.md","build-tools:linters-formatters":"/roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/readme.md","build-tools:linters-formatters:prettier":"/roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/100-prettier.md","build-tools:linters-formatters:eslint":"/roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/101-eslint.md","build-tools:linters-formatters:standardjs":"/roadmaps/100-frontend/content/110-build-tools/102-linters-formatters/102-standardjs.md","build-tools:module-bundlers":"/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/readme.md","build-tools:module-bundlers:webpack":"/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/100-webpack.md","build-tools:module-bundlers:esbuild":"/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/101-esbuild.md","build-tools:module-bundlers:rollup":"/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/102-rollup.md","build-tools:module-bundlers:parcel":"/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/103-parcel.md","build-tools:module-bundlers:vite":"/roadmaps/100-frontend/content/110-build-tools/101-module-bundlers/104-vite.md","pick-a-framework":"/roadmaps/100-frontend/content/111-pick-a-framework/readme.md","pick-a-framework:react-js":"/roadmaps/100-frontend/content/111-pick-a-framework/100-react-js/readme.md","pick-a-framework:react-js:recoil":"/roadmaps/100-frontend/content/111-pick-a-framework/100-react-js/102-recoil.md","pick-a-framework:react-js:redux":"/roadmaps/100-frontend/content/111-pick-a-framework/100-react-js/100-redux.md","pick-a-framework:react-js:mobx":"/roadmaps/100-frontend/content/111-pick-a-framework/100-react-js/101-mobx.md","pick-a-framework:angular":"/roadmaps/100-frontend/content/111-pick-a-framework/101-angular/readme.md","pick-a-framework:angular:rxjs":"/roadmaps/100-frontend/content/111-pick-a-framework/101-angular/100-rxjs.md","pick-a-framework:angular:ngrx":"/roadmaps/100-frontend/content/111-pick-a-framework/101-angular/101-ngrx.md","pick-a-framework:vue-js":"/roadmaps/100-frontend/content/111-pick-a-framework/102-vue-js/readme.md","pick-a-framework:vue-js:vuex":"/roadmaps/100-frontend/content/111-pick-a-framework/102-vue-js/100-vuex.md","modern-css":"/roadmaps/100-frontend/content/112-modern-css/readme.md","modern-css:styled-components":"/roadmaps/100-frontend/content/112-modern-css/100-styled-components.md","modern-css:css-modules":"/roadmaps/100-frontend/content/112-modern-css/101-css-modules.md","modern-css:styled-jsx":"/roadmaps/100-frontend/content/112-modern-css/102-styled-jsx.md","modern-css:emotion":"/roadmaps/100-frontend/content/112-modern-css/103-emotion.md","web-components":"/roadmaps/100-frontend/content/113-web-components/readme.md","web-components:html-templates":"/roadmaps/100-frontend/content/113-web-components/100-html-templates.md","web-components:custom-elements":"/roadmaps/100-frontend/content/113-web-components/101-custom-elements.md","web-components:shadow-dom":"/roadmaps/100-frontend/content/113-web-components/102-shadow-dom.md","css-frameworks":"/roadmaps/100-frontend/content/114-css-frameworks/readme.md","css-frameworks:js-first":"/roadmaps/100-frontend/content/114-css-frameworks/114-js-first/readme.md","css-frameworks:js-first:chakra-ui":"/roadmaps/100-frontend/content/114-css-frameworks/114-js-first/101-chakra-ui.md","css-frameworks:js-first:material-ui":"/roadmaps/100-frontend/content/114-css-frameworks/114-js-first/102-material-ui.md","css-frameworks:js-first:radix-ui":"/roadmaps/100-frontend/content/114-css-frameworks/114-js-first/103-radix-ui.md","css-frameworks:js-first:tailwind-css":"/roadmaps/100-frontend/content/114-css-frameworks/114-js-first/100-tailwind-css.md","css-frameworks:css-first":"/roadmaps/100-frontend/content/114-css-frameworks/114-css-first/readme.md","css-frameworks:css-first:bootstrap":"/roadmaps/100-frontend/content/114-css-frameworks/114-css-first/100-bootstrap.md","css-frameworks:css-first:bulma":"/roadmaps/100-frontend/content/114-css-frameworks/114-css-first/101-bulma.md","testing-your-apps":"/roadmaps/100-frontend/content/115-testing-your-apps/readme.md","testing-your-apps:jest":"/roadmaps/100-frontend/content/115-testing-your-apps/100-jest.md","testing-your-apps:react-testing-library":"/roadmaps/100-frontend/content/115-testing-your-apps/101-react-testing-library.md","testing-your-apps:cypress":"/roadmaps/100-frontend/content/115-testing-your-apps/102-cypress.md","testing-your-apps:enzyme":"/roadmaps/100-frontend/content/115-testing-your-apps/103-enzyme.md","testing-your-apps:other-options":"/roadmaps/100-frontend/content/115-testing-your-apps/104-other-options.md","testing-your-apps:mocha":"/roadmaps/100-frontend/content/115-testing-your-apps/105-mocha.md","testing-your-apps:chai":"/roadmaps/100-frontend/content/115-testing-your-apps/106-chai.md","testing-your-apps:ava":"/roadmaps/100-frontend/content/115-testing-your-apps/107-ava.md","testing-your-apps:jasmine":"/roadmaps/100-frontend/content/115-testing-your-apps/108-jasmine.md","type-checkers":"/roadmaps/100-frontend/content/116-type-checkers/readme.md","type-checkers:typescript":"/roadmaps/100-frontend/content/116-type-checkers/100-typescript.md","type-checkers:flow":"/roadmaps/100-frontend/content/116-type-checkers/101-flow.md","progressive-web-apps":"/roadmaps/100-frontend/content/117-progressive-web-apps/readme.md","progressive-web-apps:performance":"/roadmaps/100-frontend/content/117-progressive-web-apps/101-performance.md","progressive-web-apps:apis":"/roadmaps/100-frontend/content/117-progressive-web-apps/100-apis.md","server-side-rendering":"/roadmaps/100-frontend/content/118-server-side-rendering/readme.md","server-side-rendering:react-js":"/roadmaps/100-frontend/content/118-server-side-rendering/100-react-js/readme.md","server-side-rendering:react-js:next-js":"/roadmaps/100-frontend/content/118-server-side-rendering/100-react-js/100-next-js.md","server-side-rendering:react-js:after-js":"/roadmaps/100-frontend/content/118-server-side-rendering/100-react-js/101-after-js.md","server-side-rendering:angular":"/roadmaps/100-frontend/content/118-server-side-rendering/101-angular/readme.md","server-side-rendering:angular:universal":"/roadmaps/100-frontend/content/118-server-side-rendering/101-angular/100-universal.md","server-side-rendering:vue-js":"/roadmaps/100-frontend/content/118-server-side-rendering/102-vue-js/readme.md","server-side-rendering:vue-js:nuxt-js":"/roadmaps/100-frontend/content/118-server-side-rendering/102-vue-js/100-nuxt-js.md","graphql":"/roadmaps/100-frontend/content/119-graphql/readme.md","graphql:apollo":"/roadmaps/100-frontend/content/119-graphql/100-apollo.md","graphql:relay-modern":"/roadmaps/100-frontend/content/119-graphql/101-relay-modern.md","static-site-generators":"/roadmaps/100-frontend/content/120-static-site-generators/readme.md","static-site-generators:next-js":"/roadmaps/100-frontend/content/120-static-site-generators/100-next-js.md","static-site-generators:gatsbyjs":"/roadmaps/100-frontend/content/120-static-site-generators/101-gatsbyjs.md","static-site-generators:nuxt-js":"/roadmaps/100-frontend/content/120-static-site-generators/102-nuxt-js.md","static-site-generators:vuepress":"/roadmaps/100-frontend/content/120-static-site-generators/103-vuepress.md","static-site-generators:jekyll":"/roadmaps/100-frontend/content/120-static-site-generators/104-jekyll.md","static-site-generators:hugo":"/roadmaps/100-frontend/content/120-static-site-generators/105-hugo.md","static-site-generators:gridsome":"/roadmaps/100-frontend/content/120-static-site-generators/106-gridsome.md","static-site-generators:eleventy":"/roadmaps/100-frontend/content/120-static-site-generators/107-eleventy.md","mobile-applications":"/roadmaps/100-frontend/content/121-mobile-applications/readme.md","mobile-applications:react-native":"/roadmaps/100-frontend/content/121-mobile-applications/100-react-native.md","mobile-applications:nativescript":"/roadmaps/100-frontend/content/121-mobile-applications/101-nativescript.md","mobile-applications:flutter":"/roadmaps/100-frontend/content/121-mobile-applications/102-flutter.md","mobile-applications:ionic":"/roadmaps/100-frontend/content/121-mobile-applications/103-ionic.md","desktop-applications":"/roadmaps/100-frontend/content/122-desktop-applications/readme.md","desktop-applications:electron":"/roadmaps/100-frontend/content/122-desktop-applications/100-electron.md","desktop-applications:carlo":"/roadmaps/100-frontend/content/122-desktop-applications/101-carlo.md","desktop-applications:proton-native":"/roadmaps/100-frontend/content/122-desktop-applications/102-proton-native.md","web-assembly":"/roadmaps/100-frontend/content/123-web-assembly.md"}')},39258:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"Frontend Developer Roadmap: Learn to become a modern frontend developer","description":"Learn to become a modern frontend developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development.","keywords":["javascript roadmap 2022","frontend roadmap 2022","frontend developer roadmap 2022","guide to becoming a developer","guide to becoming a frontend developer","frontend developer","frontend engineer","frontend skills","frontend development","javascript developer","frontend development skills","frontend development skills test","frontend roadmap","frontend engineer roadmap","frontend developer roadmap","become a frontend developer","frontend developer career path","javascript developer","modern javascript developer","node developer","skills for frontend development","learn frontend development","what is frontend development","frontend developer quiz","frontend developer interview questions"]},"title":"Frontend Developer","description":"Step by step guide to becoming a modern frontend developer in 2022","featuredTitle":"Frontend","featuredDescription":"Step by step guide to becoming a frontend developer in 2022","author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"featured":true,"imageUrl":"/roadmaps/frontend.png","jsonUrl":"/project/frontend.json","resourcesPath":"./resources.md","pdfUrl":"/pdfs/frontend.pdf","contentPathsFilePath":"./content-paths.json"}')},33309:function(e){"use strict";e.exports=JSON.parse('{"home":"/roadmaps/101-backend/content/readme.md","internet":"/roadmaps/101-backend/content/100-internet/readme.md","internet:how-does-the-internet-work":"/roadmaps/101-backend/content/100-internet/100-how-does-the-internet-work.md","internet:what-is-http":"/roadmaps/101-backend/content/100-internet/101-what-is-http.md","internet:browsers-and-how-they-work":"/roadmaps/101-backend/content/100-internet/102-browsers-and-how-they-work.md","internet:dns-and-how-it-works":"/roadmaps/101-backend/content/100-internet/103-dns-and-how-it-works.md","internet:what-is-domain-name":"/roadmaps/101-backend/content/100-internet/104-what-is-domain-name.md","internet:what-is-hosting":"/roadmaps/101-backend/content/100-internet/105-what-is-hosting.md","basic-frontend":"/roadmaps/101-backend/content/101-basic-frontend/readme.md","basic-frontend:html":"/roadmaps/101-backend/content/101-basic-frontend/100-html.md","basic-frontend:css":"/roadmaps/101-backend/content/101-basic-frontend/101-css.md","basic-frontend:javascript":"/roadmaps/101-backend/content/101-basic-frontend/102-javascript.md","os-general-knowledge":"/roadmaps/101-backend/content/102-os-general-knowledge/readme.md","os-general-knowledge:terminal-usage":"/roadmaps/101-backend/content/102-os-general-knowledge/100-terminal-usage.md","os-general-knowledge:how-oss-work-in-general":"/roadmaps/101-backend/content/102-os-general-knowledge/101-how-oss-work-in-general.md","os-general-knowledge:process-management":"/roadmaps/101-backend/content/102-os-general-knowledge/102-process-management.md","os-general-knowledge:threads-and-concurrency":"/roadmaps/101-backend/content/102-os-general-knowledge/103-threads-and-concurrency.md","os-general-knowledge:basic-terminal-commands":"/roadmaps/101-backend/content/102-os-general-knowledge/104-basic-terminal-commands.md","os-general-knowledge:memory-management":"/roadmaps/101-backend/content/102-os-general-knowledge/105-memory-management.md","os-general-knowledge:interprocess-communication":"/roadmaps/101-backend/content/102-os-general-knowledge/106-interprocess-communication.md","os-general-knowledge:io-management":"/roadmaps/101-backend/content/102-os-general-knowledge/107-io-management.md","os-general-knowledge:posix-basics":"/roadmaps/101-backend/content/102-os-general-knowledge/108-posix-basics.md","os-general-knowledge:basic-networking-concepts":"/roadmaps/101-backend/content/102-os-general-knowledge/109-basic-networking-concepts.md","learn-a-language":"/roadmaps/101-backend/content/103-learn-a-language/readme.md","learn-a-language:go":"/roadmaps/101-backend/content/103-learn-a-language/100-go.md","learn-a-language:rust":"/roadmaps/101-backend/content/103-learn-a-language/101-rust.md","learn-a-language:java":"/roadmaps/101-backend/content/103-learn-a-language/102-java.md","learn-a-language:csharp":"/roadmaps/101-backend/content/103-learn-a-language/103-csharp.md","learn-a-language:php":"/roadmaps/101-backend/content/103-learn-a-language/103-php.md","learn-a-language:javascript":"/roadmaps/101-backend/content/103-learn-a-language/105-javascript.md","learn-a-language:python":"/roadmaps/101-backend/content/103-learn-a-language/106-python.md","learn-a-language:ruby":"/roadmaps/101-backend/content/103-learn-a-language/107-ruby.md","version-control-systems":"/roadmaps/101-backend/content/104-version-control-systems/readme.md","version-control-systems:git":"/roadmaps/101-backend/content/104-version-control-systems/100-basic-usage-of-git.md","repo-hosting-services":"/roadmaps/101-backend/content/105-repo-hosting-services/readme.md","repo-hosting-services:github":"/roadmaps/101-backend/content/105-repo-hosting-services/100-github.md","repo-hosting-services:gitlab":"/roadmaps/101-backend/content/105-repo-hosting-services/101-gitlab.md","repo-hosting-services:bitbucket":"/roadmaps/101-backend/content/105-repo-hosting-services/102-bitbucket.md","relational-databases":"/roadmaps/101-backend/content/106-relational-databases/readme.md","relational-databases:postgresql":"/roadmaps/101-backend/content/106-relational-databases/100-postgresql.md","relational-databases:mysql":"/roadmaps/101-backend/content/106-relational-databases/101-mysql.md","relational-databases:mariadb":"/roadmaps/101-backend/content/106-relational-databases/102-mariadb.md","relational-databases:mssql":"/roadmaps/101-backend/content/106-relational-databases/103-mssql.md","relational-databases:oracle":"/roadmaps/101-backend/content/106-relational-databases/104-oracle.md","nosql-databases":"/roadmaps/101-backend/content/107-nosql-databases/readme.md","nosql-databases:document-databases":"/roadmaps/101-backend/content/107-nosql-databases/100-document-databases.md","nosql-databases:column-databases":"/roadmaps/101-backend/content/107-nosql-databases/101-column-databases.md","nosql-databases:timeseries-databases":"/roadmaps/101-backend/content/107-nosql-databases/102-timeseries-databases.md","nosql-databases:realtime-databases":"/roadmaps/101-backend/content/107-nosql-databases/103-realtime-databases.md","more-about-databases":"/roadmaps/101-backend/content/108-more-about-databases/readme.md","more-about-databases:orms":"/roadmaps/101-backend/content/108-more-about-databases/100-orms.md","more-about-databases:acid":"/roadmaps/101-backend/content/108-more-about-databases/101-acid.md","more-about-databases:transactions":"/roadmaps/101-backend/content/108-more-about-databases/102-transactions.md","more-about-databases:n-plus-one-problem":"/roadmaps/101-backend/content/108-more-about-databases/103-n-plus-one-problem.md","more-about-databases:database-normalization":"/roadmaps/101-backend/content/108-more-about-databases/104-database-normalization.md","more-about-databases:database-indexes":"/roadmaps/101-backend/content/108-more-about-databases/105-database-indexes.md","more-about-databases:data-replication":"/roadmaps/101-backend/content/108-more-about-databases/106-data-replication.md","more-about-databases:sharding-strategies":"/roadmaps/101-backend/content/108-more-about-databases/107-sharding-strategies.md","more-about-databases:cap-theorem":"/roadmaps/101-backend/content/108-more-about-databases/108-cap-theorem.md","apis":"/roadmaps/101-backend/content/109-apis/readme.md","apis:rest":"/roadmaps/101-backend/content/109-apis/100-rest.md","apis:json-apis":"/roadmaps/101-backend/content/109-apis/101-json-apis.md","apis:soap":"/roadmaps/101-backend/content/109-apis/102-soap.md","apis:grpc":"/roadmaps/101-backend/content/109-apis/103-grpc.md","apis:hateoas":"/roadmaps/101-backend/content/109-apis/104-hateoas.md","apis:open-api-spec":"/roadmaps/101-backend/content/109-apis/105-open-api-spec.md","apis:authentication":"/roadmaps/101-backend/content/109-apis/106-authentication/readme.md","apis:authentication:cookie-based":"/roadmaps/101-backend/content/109-apis/106-authentication/100-cookie-based.md","apis:authentication:oauth":"/roadmaps/101-backend/content/109-apis/106-authentication/101-oauth.md","apis:authentication:basic-authentication":"/roadmaps/101-backend/content/109-apis/106-authentication/102-basic-authentication.md","apis:authentication:token-authentication":"/roadmaps/101-backend/content/109-apis/106-authentication/103-token-authentication.md","apis:authentication:jwt":"/roadmaps/101-backend/content/109-apis/106-authentication/104-jwt.md","apis:authentication:openid":"/roadmaps/101-backend/content/109-apis/106-authentication/105-openid.md","apis:authentication:saml":"/roadmaps/101-backend/content/109-apis/106-authentication/105-saml.md","caching":"/roadmaps/101-backend/content/110-caching/readme.md","caching:cdn":"/roadmaps/101-backend/content/110-caching/100-cdn.md","caching:server-side":"/roadmaps/101-backend/content/110-caching/101-server-side/readme.md","caching:server-side:redis":"/roadmaps/101-backend/content/110-caching/101-server-side/100-redis.md","caching:server-side:memcached":"/roadmaps/101-backend/content/110-caching/101-server-side/101-memcached.md","caching:client-side":"/roadmaps/101-backend/content/110-caching/102-client-side.md","web-security-knowledge":"/roadmaps/101-backend/content/111-web-security-knowledge/readme.md","web-security-knowledge:md5":"/roadmaps/101-backend/content/111-web-security-knowledge/100-md5.md","web-security-knowledge:sha-family":"/roadmaps/101-backend/content/111-web-security-knowledge/101-sha-family.md","web-security-knowledge:bcrypt":"/roadmaps/101-backend/content/111-web-security-knowledge/102-bcrypt.md","web-security-knowledge:scrypt":"/roadmaps/101-backend/content/111-web-security-knowledge/104-scrypt.md","web-security-knowledge:https":"/roadmaps/101-backend/content/111-web-security-knowledge/105-https.md","web-security-knowledge:content-security-policy":"/roadmaps/101-backend/content/111-web-security-knowledge/105-content-security-policy.md","web-security-knowledge:cors":"/roadmaps/101-backend/content/111-web-security-knowledge/106-cors.md","web-security-knowledge:ssl-tls":"/roadmaps/101-backend/content/111-web-security-knowledge/107-ssl-tls.md","web-security-knowledge:owasp":"/roadmaps/101-backend/content/111-web-security-knowledge/108-owasp.md","testing":"/roadmaps/101-backend/content/112-testing/readme.md","testing:integration-testing":"/roadmaps/101-backend/content/112-testing/100-integration-testing.md","testing:unit-testing":"/roadmaps/101-backend/content/112-testing/101-unit-testing.md","testing:functional-testing":"/roadmaps/101-backend/content/112-testing/102-functional-testing.md","ci-cd":"/roadmaps/101-backend/content/113-ci-cd.md","design-and-development-principles":"/roadmaps/101-backend/content/114-design-and-development-principles/readme.md","design-and-development-principles:gof-design-patterns":"/roadmaps/101-backend/content/114-design-and-development-principles/100-gof-design-patterns.md","design-and-development-principles:domain-driven-design":"/roadmaps/101-backend/content/114-design-and-development-principles/101-domain-driven-design.md","design-and-development-principles:test-driven-development":"/roadmaps/101-backend/content/114-design-and-development-principles/102-test-driven-development.md","design-and-development-principles:solid":"/roadmaps/101-backend/content/114-design-and-development-principles/103-solid.md","design-and-development-principles:kiss":"/roadmaps/101-backend/content/114-design-and-development-principles/104-kiss.md","design-and-development-principles:yagni":"/roadmaps/101-backend/content/114-design-and-development-principles/105-yagni.md","design-and-development-principles:dry":"/roadmaps/101-backend/content/114-design-and-development-principles/106-dry.md","architectural-patterns":"/roadmaps/101-backend/content/115-architectural-patterns/readme.md","architectural-patterns:monolithic-apps":"/roadmaps/101-backend/content/115-architectural-patterns/100-monolithic-apps.md","architectural-patterns:microservices":"/roadmaps/101-backend/content/115-architectural-patterns/101-microservices.md","architectural-patterns:soa":"/roadmaps/101-backend/content/115-architectural-patterns/102-soa.md","architectural-patterns:cqrs":"/roadmaps/101-backend/content/115-architectural-patterns/103-cqrs.md","architectural-patterns:serverless":"/roadmaps/101-backend/content/115-architectural-patterns/104-serverless.md","search-engines":"/roadmaps/101-backend/content/116-search-engines/readme.md","search-engines:elasticsearch":"/roadmaps/101-backend/content/116-search-engines/100-elasticsearch.md","search-engines:solr":"/roadmaps/101-backend/content/116-search-engines/101-solr.md","message-brokers":"/roadmaps/101-backend/content/117-message-brokers/readme.md","message-brokers:rabbitmq":"/roadmaps/101-backend/content/117-message-brokers/100-rabbitmq.md","message-brokers:kafka":"/roadmaps/101-backend/content/117-message-brokers/101-kafka.md","containerization":"/roadmaps/101-backend/content/118-containerization/readme.md","containerization:docker":"/roadmaps/101-backend/content/118-containerization/100-docker.md","containerization:rkt":"/roadmaps/101-backend/content/118-containerization/101-rkt.md","containerization:lxc":"/roadmaps/101-backend/content/118-containerization/102-lxc.md","graphql":"/roadmaps/101-backend/content/119-graphql/readme.md","graphql:apollo":"/roadmaps/101-backend/content/119-graphql/100-apollo.md","graphql:relay-modern":"/roadmaps/101-backend/content/119-graphql/101-relay-modern.md","graph-databases":"/roadmaps/101-backend/content/120-graph-databases/readme.md","graph-databases:neo4j":"/roadmaps/101-backend/content/120-graph-databases/100-neo4j.md","web-sockets":"/roadmaps/101-backend/content/121-web-sockets.md","web-servers":"/roadmaps/101-backend/content/122-web-servers/readme.md","web-servers:nginx":"/roadmaps/101-backend/content/122-web-servers/100-nginx.md","web-servers:apache":"/roadmaps/101-backend/content/122-web-servers/101-apache.md","web-servers:caddy":"/roadmaps/101-backend/content/122-web-servers/102-caddy.md","web-servers:ms-iis":"/roadmaps/101-backend/content/122-web-servers/103-ms-iis.md","scalability":"/roadmaps/101-backend/content/123-scalability/readme.md","scalability:mitigation-strategies":"/roadmaps/101-backend/content/123-scalability/100-mitigation-strategies.md","scalability:instrumentation-monitoring-telemetry":"/roadmaps/101-backend/content/123-scalability/101-instrumentation-monitoring-telemetry.md","scalability:migration-strategies":"/roadmaps/101-backend/content/123-scalability/102-migration-strategies.md","scalability:horizontal-vertial-scaling":"/roadmaps/101-backend/content/123-scalability/103-horizontal-vertial-scaling.md","scalability:observability":"/roadmaps/101-backend/content/123-scalability/104-observability.md"}')},76782:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"Backend Developer Roadmap: Learn to become a modern backend developer","description":"Learn to become a modern backend developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern backend development.","keywords":["backend roadmap 2022","backend developer roadmap 2022","guide to becoming a developer","guide to becoming a backend developer","backend roadmap","backend developer","backend engineer","backend skills","backend development","javascript developer","backend development skills","backend development skills test","backend engineer roadmap","backend developer roadmap","become a backend developer","backend developer career path","javascript developer","modern javascript developer","node developer","skills for backend development","learn backend development","what is backend development","backend developer quiz","backend developer interview questions"]},"title":"Backend Developer","description":"Step by step guide to becoming a modern backend developer in 2022","featuredTitle":"Backend","featuredDescription":"Step by step guide to becoming a backend developer in 2022","featured":true,"imageUrl":"/roadmaps/backend.png","jsonUrl":"/project/backend.json","resourcesPath":"./resources.md","author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/backend.pdf","contentPathsFilePath":"./content-paths.json"}')},54017:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"DevOps Roadmap: Learn to become a DevOps Engineer or SRE","description":"Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["devops roadmap 2022","sre roadmap 2022","operations roadmap 2022","guide to becoming a devops enginer","devops roadmap","sre roadmap","site reliability engineer roadmap","operations roles","become devops","devops skills","modern devops skills","devops skills test","skills for devops","learn devops","what is devops","what is sre","devops quiz","devops interview questions"]},"title":"DevOps Roadmap","description":"Step by step guide for DevOps, SRE or any other Operations Role in 2022","featuredTitle":"DevOps","featuredDescription":"Step by step guide for DevOps or operations role in 2022","featured":true,"imageUrl":"/roadmaps/devops.png","jsonUrl":"/project/devops.json","resourcesPath":"./resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/devops.pdf"}')},88477:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"React Developer Roadmap: Learn to become a React developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for react development. Learn to become a modern React developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["react roadmap 2022","react developer roadmap 2022","guide to becoming a react developer","react developer roadmap","react roadmap","become react developer","react developer skills","react skills test","skills for react development","learn react development","what is react","react quiz","react interview questions"]},"title":"React Developer","description":"Everything that is there to learn about React and the ecosystem in 2022.","featuredTitle":"React","featuredDescription":"Step by step guide to become a React Developer in 2022","isTextHeavy":false,"isCommunity":false,"featured":true,"landingPath":"./landscape.md","resourcesPath":"./resources.md","jsonUrl":"/project/react.json","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/react.pdf"}')},8834:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"Angular Developer Roadmap: Learn to become a Angular developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for angular development. Learn to become a modern Angular developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a angular developer","angular developer roadmap","angular roadmap","become angular developer","angular developer skills","angular skills test","skills for angular development","learn angular development","what is angular","angular quiz","angular interview questions"]},"title":"Angular Developer","description":"Everything that is there to learn about Angular and the ecosystem in 2022.","featuredTitle":"Angular","featuredDescription":"Step by step guide to become a Angular Developer in 2022","isTextHeavy":false,"isCommunity":false,"featured":true,"jsonUrl":"/project/angular.json","landingPath":"./landscape.md","resourcesPath":"./resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/angular.pdf"}')},19508:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"Android Developer Roadmap: Learn to become an Android developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for android development. Learn to become a modern Android developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming an android developer","android developer roadmap","android roadmap","become android developer","android developer skills","android skills test","skills for android development","learn android development","what is android","android quiz","android interview questions"]},"title":"Android Developer","description":"Step by step guide to becoming an Android developer in 2022","featuredTitle":"Android","featuredDescription":"Step by step guide to becoming an Android Developer in 2022","isTextHeavy":true,"isCommunity":false,"featured":true,"jsonUrl":"/project/android.json","landingPath":"./landscape.md","resourcesPath":"./resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"}}')},34099:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"Learn to become a modern Python developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for python development. Learn to become a modern Python developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming an python developer","python developer roadmap","python roadmap","become python developer","python developer skills","python skills test","skills for python development","learn python development","what is python","python quiz","python interview questions"]},"title":"Python Developer","description":"Step by step guide to becoming a Python developer in 2022","featuredTitle":"Python","featuredDescription":"Step by step guide to becoming a Python Developer in 2022","isTextHeavy":true,"isCommunity":false,"featured":true,"jsonUrl":"/project/python.json","resourcesPath":"./resources.md","landingPath":"./landscape.md","pdfUrl":"/pdfs/python.pdf","versions":["latest"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"}}')},82737:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"Learn to become a Go developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for Go development. Learn to become a modern React developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a golang developer","guide to becoming a go developer","golang developer","go developer","guide to golang","guide to go","golang roadmap","go roadmap","golang skills","go skills","golang skills test","go skills test","skills for golang","skills for go","cloud development","what is golang","what is go","golang quiz","go quiz","golang interview questions","go interview questions"]},"title":"Go Developer","description":"Step by step guide to becoming a Go developer in 2022","featuredTitle":"Go","featuredDescription":"Step by step guide to becoming a Go developer in 2022","isTextHeavy":false,"isCommunity":false,"isUpcoming":false,"featured":true,"jsonUrl":"/project/golang.json","landingPath":"./landscape.md","resourcesPath":"./resources.md","pdfUrl":"/pdfs/go.pdf","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"}}')},62507:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"Learn to become a modern Java developer","description":"Community driven, articles, resources, guides, interview questions, quizzes for java development. Learn to become a modern Java developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a developer","guide to becoming a java developer","java developer","java engineer","java skills","guide to java","java roadmap","java skills","java skills test","skills for java","cloud development","what is java","java quiz","java interview questions","java engineer roadmap","java developer roadmap","become a java developer","java developer career path","java developer","modern java developer"]},"title":"Java Developer","description":"Step by step guide to becoming a Java developer in 2022","featuredTitle":"Java","featuredDescription":"Step by step guide to becoming a Java Developer in 2022","isTextHeavy":false,"isCommunity":false,"isUpcoming":false,"featured":true,"jsonUrl":"/project/java.json","landingPath":"./landscape.md","resourcesPath":"./resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"},"pdfUrl":"/pdfs/java.pdf"}')},88951:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"DBA Roadmap: Learn to become a database administrator with PostgreSQL","description":"Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a database administrator","guide to becoming a DBA","dba roadmap","db administrator roadmap","database administrator roadmap","postgresql roadmap","dba skills","db administrator skills","become dba","postgresql skills","modern dba skills","dba skills test","skills for dba","skills for database administrator","learn dba","what is dba","database administrator quiz","dba interview questions"]},"title":"PostgreSQL DBA","description":"Step by step guide to becoming a modern PostgreSQL DB Administrator in 2022","featuredTitle":"DBA","featuredDescription":"Step by step guide to become a PostgreSQL DBA in 2022","landingPath":"./landscape.md","resourcesPath":"./resources.md","author":{"name":"Alexey Lesovsky","url":"https://github.com/lesovsky"},"isCommunity":false,"isTextHeavy":true,"featured":true,"detailed":false,"versions":[]}')},67559:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"AWS Roadmap: Learn to use AWS","description":"Community driven, articles, resources, guides, interview questions, quizzes for react development. Learn to become a modern React developer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to aws","aws roadmap","aws skills","aws skills test","skills for aws","cloud development","what is aws","aws quiz","aws interview questions"]},"title":"AWS","description":"Everything that is there to learn about AWS and the ecosystem in 2022.","featuredTitle":"AWS","featuredDescription":"Step by step guide to learn AWS in 2022","isTextHeavy":false,"isCommunity":false,"isUpcoming":true,"featured":true,"landingPath":"./landscape.md","resourcesPath":"./resources.md","versions":["latest","2018","2017"],"author":{"name":"Kamran Ahmed","url":"https://twitter.com/kamranahmedse"}}')},83204:function(e){"use strict";e.exports=JSON.parse('{"seo":{"title":"QA Roadmap: Learn to become a modern QA engineer","description":"Community driven, articles, resources, guides, interview questions, quizzes for modern QA development. Learn to become a modern QA engineer by following the steps, skills, resources and guides listed in this roadmap.","keywords":["guide to becoming a QA engineer","QA engineer","QA skills","QA development skills","QA development skills test","QA engineer roadmap","become a QA engineer","QA engineer career path","skills for QA development","what is QA engineer","QA engineer quiz","QA engineer interview questions"]},"title":"QA Engineer","description":"Steps to follow in order to become a modern QA Engineer in 2022","featuredTitle":"QA","featuredDescription":"Step by step guide to becoming a modern QA Engineer in 2022","isUpcoming":true,"featured":true,"landingPath":"./landscape.md","resourcesPath":"./resources.md","author":{"name":"Anas Fitiani","url":"https://github.com/anas-qa"}}')},91797:function(e){"use strict";e.exports=JSON.parse('[{"id":"hash-table-data-structure","title":"Hash Table Data Structure","description":"Learn everything you need to know about the hash table data structure","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=jalSiaIi8j4","authorUsername":"kamranahmedse","duration":"8 minutes","updatedAt":"2022-02-21T19:59:14.191Z","createdAt":"2022-02-21T19:59:14.191Z"},{"id":"queue-data-structure","title":"Queue Data Structure","description":"Learn everything you need to know about the queue data structure","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=mDCi1lXd9hc","authorUsername":"kamranahmedse","duration":"4 minutes","updatedAt":"2022-02-14T19:59:14.191Z","createdAt":"2022-02-14T19:59:14.191Z"},{"id":"stack-data-structure","title":"Stack Data Structure","description":"Learn everything you need to know about the stack data structure","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=I5lq6sCuABE","authorUsername":"kamranahmedse","duration":"5 minutes","updatedAt":"2022-02-07T19:59:14.191Z","createdAt":"2022-02-07T19:59:14.191Z"},{"id":"linked-list-data-structure","title":"Linked List Data Structure","description":"Learn everything you need to know about linked list data structure","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=odW9FU8jPRQ","authorUsername":"kamranahmedse","duration":"11 minutes","updatedAt":"2022-01-31T19:59:14.191Z","createdAt":"2022-01-31T19:59:14.191Z"},{"id":"array-structure","title":"All about Array Data Structure","description":"Learn everything you need to know about array data structure","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=QJNwK2uJyGs","authorUsername":"kamranahmedse","duration":"10 minutes","updatedAt":"2022-01-09T19:59:14.191Z","createdAt":"2022-01-09T19:59:14.191Z"},{"id":"what-are-data-structures","title":"What are Data Structures?","description":"Learn about the different data structures in this illustrated series","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=9rhT3P1MDHk","authorUsername":"kamranahmedse","duration":"1 minute","updatedAt":"2021-12-12T19:59:14.191Z","createdAt":"2021-12-12T19:59:14.191Z"},{"id":"what-is-eventual-consistency","title":"What is Eventual Consistency?","description":"Learn about the different consistency models in distributed systems","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=rpqsSkTIdAw","authorUsername":"kamranahmedse","duration":"5 minutes","updatedAt":"2021-11-30T19:59:14.191Z","createdAt":"2021-11-30T19:59:14.191Z"},{"id":"ssh-ssl-tls","title":"SSH vs TLS vs SSL","description":"Learn the difference between SSH, TLS and SSL","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=k3rFFLmQCuY","authorUsername":"kamranahmedse","duration":"3 minutes","updatedAt":"2021-11-25T19:59:14.191Z","createdAt":"2021-11-25T19:59:14.191Z"},{"id":"async-javascript","title":"Asynchronous JavaScript","description":"Learn how to write asynchronous JavaScript using Async/Await","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=VyIK6SV5f7o","authorUsername":"kamranahmedse","duration":"15 minutes","updatedAt":"2021-11-14T19:59:14.191Z","createdAt":"2021-11-14T19:59:14.191Z"},{"id":"random-number-generators","title":"Random Number Generators","description":"How do random number generators work?","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=nDv3yXdD0rk","authorUsername":"kamranahmedse","duration":"8 minutes","updatedAt":"2021-11-03T19:59:14.191Z","createdAt":"2021-11-03T19:59:14.191Z"},{"id":"big-o-notation","title":"Big O Notation","description":"Learn what the Big-O notation is and how to calculate the time complexity of an algorithm.","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=Z0bH0cMY0E8","authorUsername":"kamranahmedse","duration":"8 minutes","updatedAt":"2021-10-25T19:59:14.191Z","createdAt":"2021-10-25T19:59:14.191Z"},{"id":"yaml-in-depth","title":"YAML in Depth","description":"Everything you need to know about YAML","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=ImHSpwUlNVc","authorUsername":"kamranahmedse","duration":"8 minutes","updatedAt":"2021-10-18T19:59:14.191Z","createdAt":"2021-10-18T19:59:14.191Z"},{"id":"floating-point-arithmetic","title":"Floating Point Arithmetic","description":"Learn how ow the arithmetic operations work on floating-point numbers and why the results might be different from what you may expect.","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=RIiq4tTt6rI","authorUsername":"kamranahmedse","duration":"4 minutes","updatedAt":"2021-10-10T19:59:14.191Z","createdAt":"2021-10-10T19:59:14.191Z"},{"id":"what-is-cap-theorem","title":"What is CAP Theorem?","description":"An illustrated explanation to CAP theorem with examples and proof.","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=_RbsFXWRZ10","authorUsername":"kamranahmedse","duration":"8 minutes","updatedAt":"2021-10-05T19:59:14.191Z","createdAt":"2021-10-05T19:59:14.191Z"},{"id":"acid-explained","title":"ACID Explained","description":"Learn what it means for a database to be ACID compliant with examples.","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=yaQ5YMWkxq4","authorUsername":"kamranahmedse","duration":"5 minutes","updatedAt":"2021-09-26T19:59:14.191Z","createdAt":"2021-09-26T19:59:14.191Z"},{"id":"transport-protocols-tcp-vs-udp","title":"Transport Protocols: TCP vs UDP","description":"Learn about the Transport Layer of the TCP/IP model and different transport protocols.","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=37AFBZv4_6Y","authorUsername":"kamranahmedse","duration":"10 minutes","updatedAt":"2020-11-21T19:59:14.191Z","createdAt":"2020-11-21T19:59:14.191Z"},{"id":"tcp-ip-model","title":"TCP/IP Model Explained","description":"Learn what is TCP/IP Model and the different layers involved.","isPro":false,"authorUsername":"kamranahmedse","youtubeLink":"https://www.youtube.com/watch?v=F5rni9fr1yE","duration":"5 minutes","updatedAt":"2020-11-06T19:59:14.191Z","createdAt":"2020-11-06T19:59:14.191Z"},{"id":"osi-model","title":"OSI Model Explained","description":"Learn what is OSI Model and the different layers involved.","isPro":false,"youtubeLink":"https://www.youtube.com/watch?v=dV8mjZd1OtU","authorUsername":"kamranahmedse","duration":"7 minutes","updatedAt":"2020-10-24T19:59:14.191Z","createdAt":"2020-10-24T19:59:14.191Z"},{"id":"freeze-and-seal-objects-in-javascript","title":"Freeze and Seal in JavaScript","description":"Learn what is object freeze and seal in JavaScript and how to use them","youtubeLink":"https://www.youtube.com/watch?v=O3uT2l6vgZ8","isPro":false,"authorUsername":"kamranahmedse","duration":"6 minutes","updatedAt":"2020-10-16T19:59:14.191Z","createdAt":"2020-10-16T19:59:14.191Z"},{"id":"all-about-http-caching","title":"All about HTTP Caching","description":"Learn what is HTTP caching, places for caching and different caching headers.","youtubeLink":"https://www.youtube.com/watch?v=HiBDZgTNpXY","isPro":false,"authorUsername":"kamranahmedse","duration":"13 minutes","updatedAt":"2020-10-04T19:59:14.191Z","createdAt":"2020-10-04T19:59:14.191Z"},{"id":"content-delivery-networks","title":"Content Delivery Networks","description":"Learn what the CDNs are and the difference between push CDN vs pull CDN.","youtubeLink":"https://www.youtube.com/watch?v=6DXEPcXKQNY","isPro":false,"authorUsername":"kamranahmedse","duration":"4 minutes","updatedAt":"2020-09-26T19:59:14.191Z","createdAt":"2020-09-26T19:59:14.191Z"},{"id":"load-balancers-101","title":"Load Balancers 101","description":"Learn the basics of load balancers, types and different algorithms.","youtubeLink":"https://www.youtube.com/watch?v=galcDRNd5Ow","isPro":false,"authorUsername":"kamranahmedse","duration":"9 minutes","updatedAt":"2020-09-18T19:59:14.191Z","createdAt":"2020-09-18T19:59:14.191Z"},{"id":"dns-records","title":"DNS Records","description":"Learn what the DNS is and how a website is found on the internet.","youtubeLink":"https://www.youtube.com/watch?v=7lxgpKh_fRY","isPro":false,"authorUsername":"kamranahmedse","duration":"6 minutes","updatedAt":"2020-08-31T19:59:14.191Z","createdAt":"2020-08-31T19:59:14.191Z"},{"id":"dns-explained","title":"DNS and how does it work?","description":"Learn what the DNS is and how a website is found on the internet.","youtubeLink":"https://www.youtube.com/watch?v=Wj0od2ag5sk","isPro":false,"authorUsername":"kamranahmedse","duration":"5 minutes","updatedAt":"2020-08-17T19:59:14.191Z","createdAt":"2020-08-17T19:59:14.191Z"},{"id":"system-design-101","title":"System Design 101","description":"Learn about all the bits and pieces of system design.","youtubeLink":"https://www.youtube.com/watch?v=Y-Gl4HEyeUQ","isPro":false,"authorUsername":"kamranahmedse","duration":"7 minutes","updatedAt":"2020-08-08T19:59:14.191Z","createdAt":"2020-08-08T19:59:14.191Z"},{"id":"javascript-fetch-api","title":"JavaScript Fetch API","description":"Learn how to use JavaScript\'s Fetch API to interact with remote API.","youtubeLink":"https://www.youtube.com/watch?v=-ZI0ea5O2oA","isPro":false,"authorUsername":"kamranahmedse","duration":"3 minutes","updatedAt":"2020-08-02T19:59:14.191Z","createdAt":"2020-08-02T19:59:14.191Z"},{"id":"scaling-the-unscalable","title":"Scaling the Unscalable","description":"Learn the basics of System Design and understand how to build a scalable application.","youtubeLink":"https://www.youtube.com/watch?v=a2rcgzludDU","isPro":false,"authorUsername":"kamranahmedse","duration":"10 minutes","updatedAt":"2020-07-26T19:59:14.191Z","createdAt":"2020-07-26T19:59:14.191Z"},{"id":"promises-in-javascript","title":"All about Promises in JavaScript","youtubeLink":"https://www.youtube.com/watch?v=BvrkobaCVVE","description":"Learn how to write asynchronous code in JavaScript using promises.","isPro":false,"authorUsername":"kamranahmedse","duration":"8 minutes","updatedAt":"2020-07-20T19:59:14.191Z","createdAt":"2020-07-20T19:59:14.191Z"},{"id":"how-to-use-github-actions","title":"Automate with GitHub Actions","description":"Learn how to implement CI/CD with GitHub Actions","youtubeLink":"https://www.youtube.com/watch?v=nyKZTKQS_EQ","isPro":false,"authorUsername":"kamranahmedse","duration":"6 minutes","updatedAt":"2020-07-13T19:59:14.191Z","createdAt":"2020-07-13T19:59:14.191Z"},{"id":"what-is-dependency-injection","title":"What is Dependency Injection?","description":"Learn what is dependency injection and how to write better code with the help of it.","youtubeLink":"https://www.youtube.com/watch?v=0yc2UANSDiw","isPro":false,"authorUsername":"kamranahmedse","duration":"3 minutes","updatedAt":"2020-07-04T19:59:14.191Z","createdAt":"2020-07-04T19:59:14.191Z"},{"id":"how-to-use-css-variables","title":"How to use CSS Variables?","description":"Learn how to write scalable CSS using CSS Variables.","youtubeLink":"https://www.youtube.com/watch?v=lgaxU7CRmxU","isPro":false,"authorUsername":"kamranahmedse","duration":"5 minutes","updatedAt":"2020-07-03T19:59:14.191Z","createdAt":"2020-07-03T19:59:14.191Z"},{"id":"what-is-dom-shadow-dom-virtual-dom","title":"DOM, Shadow DOM, Virtual DOM","description":"Learn what is DOM, Shadow DOM and Virtual DOM and how they work.","youtubeLink":"https://www.youtube.com/watch?v=7Tok22qxPzQ","isPro":false,"authorUsername":"kamranahmedse","duration":"6 minutes","updatedAt":"2020-07-20T19:59:14.191Z","createdAt":"2020-07-20T19:59:14.191Z"},{"id":"practical-intro-to-react","title":"Practical Introduction to React","description":"Learn how to create a React Application with practical example.","youtubeLink":"https://www.youtube.com/watch?v=NyG7YJWJd6s&list=PLkZYeFmDuaN3NDLnBG01-sH2-nwn43mYu","isPro":false,"authorUsername":"kamranahmedse","duration":"40 minutes","updatedAt":"2020-07-09T19:59:14.191Z","createdAt":"2020-07-09T19:59:14.191Z"},{"id":"arrays-and-objects-in-javascript","title":"Arrays and Objects in JavaScript","description":"Learn how to manipulate arrays and objects in JavaScript.","youtubeLink":"https://www.youtube.com/watch?v=n3NKGsM3iEw","isPro":false,"authorUsername":"kamranahmedse","duration":"12 minutes","updatedAt":"2020-05-09T19:59:14.191Z","createdAt":"2020-05-09T19:59:14.191Z"}]')}}]); |