* Update a setup from Vs Code for Flutter.
* Update content/roadmaps/117-flutter/content/101-setup-development-environment/101-ides/100-vs-code.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added Resources and Information for "Dart Basics"
* Update content/roadmaps/117-flutter/content/100-dart-basics/readme.md
* Update content/roadmaps/117-flutter/content/100-dart-basics/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
Remove invalid resource from Golang 102-types-and-type-assertions.md
The provided resource is a video about protocol buffers in Go, not types or type assertion
* Add link to OS tutorial
* Add introduction
* Update content/roadmaps/101-backend/content/102-os-general-knowledge/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* added content in Learn the Basics of csharp (.NET CLI) in ASP.NET Core roadmap
* Update content/roadmaps/116-aspnet-core/content/100-basics-of-csharp/102-dotnet-cli.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Adding information to the Registers and Ram node - CS Roadmap
* Update content/roadmaps/103-computer-science/content/120-how-computers-work/102-registers-and-ram.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 102-stored-procedures.md
Added information and link
* Update content/roadmaps/116-aspnet-core/content/102-database-fundamentals/102-stored-procedures.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* It's not polite term ' Dummies
* Update content/roadmaps/101-backend/content/100-internet/100-how-does-the-internet-work.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Fixed resource type
Fixed resource type from watch to read in 'Learn more about Data types and Variables'
* Updated java-fundamental resources
Replaced non-English resource with English one.
Added switch and nested conditional video resource
* Add SWAs, PWAs and Jamstack node information
* Update content/roadmaps/113-qa/content/103-qa-automated-testing/100-frontend-automation/100-basic-introduction/swas-pwas-jamstack.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added resources in frontend and react roadmaps
* moved new resources below exiting ones && BadgeLink stick to one line
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* A course added for PHP
- Add a link to PHP for Beginners (2023 Edition) [Free Course]
* Update content/roadmaps/101-backend/content/103-learn-a-language/103-php.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
Talks about how the development of single-page websites or mobile applications that permit navigating without refreshing the page. Additionally, how react-router allows us to access browser history functionalities while preserving the correct application view, how component-based routing plays a huge role, and much more.
* An indepth introductory guide about watchers
Talks about deep and immediate options with examples. showcases example use cases on how to use watchers in action, and when to utilize computed properties, and when to use watchers.
* Update content/roadmaps/105-vue/content/101-advanced-topics/104-watch.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
This course is an in-depth angular introductory course with 17hrs of content from freecodecamp. covers topics ranging from TS introduction to Important Angular topics.
* Add an Introductory Text to Solid.js
Update the Solid.js Resource panel with an introductory text
* Update content/roadmaps/100-frontend/content/111-pick-a-framework/104-solid-js.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added one of the best and new resource to the java datastructures list
* Added content to JavaScript Type Conversion vs Coercion
* Update content/roadmaps/110-java/content/100-java-fundamentals/104-datastructures.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added client-side-file-caching
There was no data on client-side-file-caching, so I added some for people to learn.
* Update content/roadmaps/101-backend/content/110-caching/102-client-side.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added instrumentation, telemetry, monitoring
There was no data on instrumentation, monitoring, and telemetry, so I decided to contribute and help others by also providing links.
* Update content/roadmaps/101-backend/content/123-scalability/101-instrumentation-monitoring-telemetry.md
* Update content/roadmaps/101-backend/content/123-scalability/101-instrumentation-monitoring-telemetry.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* fix readable content color scheme
* add content to 103-glob
* remove duplicate resources group title in 102-updating-packages
* fix swaped color in 100-morgan
* Update content/roadmaps/107-nodejs/content/107-nodejs-apis/101-express-js.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* feat: free content about ci/cd
add a read free content about ci/cd
* feat: add a postgre tutorial
Added PostgreSQL full tutorial for beginners in SQL
Thank you '-'
* Adding information on QA SDLC Delivery Model node
* Update content/roadmaps/113-qa/content/101-qa-sdlc/readme.md
* Tweaking files in the Chrome Dev Tools section - JS roadmap
* Tweaking format on files from Memory Management - JS roadmap
* Fixed issue with one of the Free Contents - CommonJS readme
* Format tweak on Callback nodes - JS Roadmap
* Format tweaks on different files from the Expressions and Operators tree
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* added content to 104-go-zero.md
added content to go zero with free-read content
* Update content/roadmaps/109-golang/content/109-go-microservices/104-go-zero.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
I think the already given description was not enough for new learners, so I added a little more about what semantic elements in HTML are and what they do.
* Add reference to Effective Go for Arrays
* Add reference to Effective Go for Slices
* Add reference to Effective Go for Maps
* Add reference to Effective Go for make
* Add reference to Effective Go for 'for' loop
* Add reference to Effective Go for Conditionals
* Add reference to Effective Go for Interfaces
* Add reference to Effective Go for Goroutines
* Add reference to Effective Go for Channels
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Adds shortcut for opening dev tools
`F12` open up Console tab in `Chrome`, `Mozilla`, `Brave` by default. However in `Microsoft Edge` it open up `Elements` panel.
* Update content/roadmaps/106-javascript/content/117-javascript-chrome-dev-tools/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* feat: free content about ci/cd
add a read free content about ci/cd
* feat: add cli-progress summary and content
Add summary and content to cli-progress package
Thank you '-'
* Edited Javascript Roadmaps Content
Added some content in arithmetic operators & arrow functions. Amended one file name as well.
* Reverted the File name
Just reverted the name of the file as it was breaking the build.
* add book to javascript roadmap
* add book to javascript section on frontend roadmap
* add book to javascript section on backend roadmap
* add book to javascript section on blockchain roadmap
* Update readme.md
Added CI/CD introductory description.
* Update readme.md
Added link to blog for further reference
* Update readme.md
Mentioned a video link
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Adding Windows definition
* Adding to terminal multiplexers
* Fixing Windows links and added SAR description
* Adding VMStat description
* Fixing typos
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added video resource(youtube) for event loop.
* Update content/roadmaps/106-javascript/content/112-javascript-asynchronous-javascript/100-event-loop.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Edited the typeof operator file
* Update 104-running-scripts.md
* Added the content to the stack-trace.md
* Added content for the 104-asyn-errors.md file
* Update content/roadmaps/107-nodejs/content/103-nodejs-error-handling/100-stack-trace.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Add summary and one free content to commander.js package
* Update content/roadmaps/107-nodejs/content/106-nodejs-command-line-apps/103-command-line-args/101-commander-js.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added Python Refrence read guide link from freecodecamp.org How to Learn python ?
* tag mistake update colorscheme
* \Update content/roadmaps/101-backend/content/103-learn-a-language/106-python.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content on desktop applications, examples and types along with free video and blog content
* Update content/roadmaps/100-frontend/content/122-desktop-applications/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content for JavaScript Error and its types
along with free tutorial link and YouTube link
* Update content/roadmaps/107-nodejs/content/103-nodejs-error-handling/103-error-types/100-javascript-errors.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content to readme.md file of 112-creating-a-custom-x folder
[#1847 ](https://github.com/kamranahmedse/developer-roadmap/issues/1847) I made the required addition of content to readme.md file of 112-creating-a-custom-x to resolve the issue.
* Update content/roadmaps/104-angular/content/112-creating-a-custom-x/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content for Nodejs to keep app running prod along with blog links
* Update content/roadmaps/107-nodejs/content/113-nodejs-keep-app-running-prod/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 104-datastructures.md
good guide to learn ds and alghoritms
* Update content/roadmaps/110-java/content/100-java-fundamentals/104-datastructures.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content to data structure readme.md
Added basic understanding of data structures with a free-read content
* Update readme.md
* Update content/roadmaps/106-javascript/content/104-javascript-data-structures/readme.md
* Update content/roadmaps/106-javascript/content/104-javascript-data-structures/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content to readme.md file of 103-qa-automated-testing folder
[#1840 ](https://github.com/kamranahmedse/developer-roadmap/issues/1840) I contributed to this issue by adding the readme.md file for the 103-qa-automated-testing folder.
* Update content/roadmaps/113-qa/content/103-qa-automated-testing/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content for debugging in node.js and how to debug.
added tutorial links for the same to learn more about debugging in node.js
* Update content/roadmaps/107-nodejs/content/116-nodejs-more-debugging/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content on memory leaks, its causes and its detectors
also added some free blog links for more information
* Update content/roadmaps/107-nodejs/content/116-nodejs-more-debugging/100-memory-leaks/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content to readme.md file of 104-qa-non-functional-testing
[#1840 ](https://github.com/kamranahmedse/developer-roadmap/issues/1840) I contributed to this issue by adding content to the readme.md file of 104-qa-non-functional-testing folder.
* Update content/roadmaps/113-qa/content/104-qa-non-functional-testing/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content to the readme.md file of 115-testing-angular-apps
[#1847 ](https://github.com/kamranahmedse/developer-roadmap/issues/1847) I contributed to this issue by adding the content to the readme.md file of 115-testing-angular-apps folder.
* Update content/roadmaps/104-angular/content/115-testing-angular-apps/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added node inspect content and useful links for reading and official documentation in node --inspect file
* Update content/roadmaps/107-nodejs/content/116-nodejs-more-debugging/101-node-inspect.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content for Debugging using APM and added blog link for complete information
* Update content/roadmaps/107-nodejs/content/116-nodejs-more-debugging/102-using-apm.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content about Migration strategies and added blog link for the same
* Update content/roadmaps/101-backend/content/123-scalability/102-migration-strategies.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
Include the recent addition (from Python 3.10 upwards) of the match-case statement under the conditionals node of the Python roadmap. Also, correct some grammar mistakes.
* add Go building clis introduction
* Update content/roadmaps/109-golang/content/102-go-building-clis/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Updated and Added the content to 100-junit.md file
[#1840](https://github.com/kamranahmedse/developer-roadmap/issues/1840) I added the content to 100-junit.md file of the 106-qa-reporting folder to resolve this issue. Please check into this PR!
* Update content/roadmaps/113-qa/content/106-qa-reporting/100-junit.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Updated and Added content to readme.md file of 100-qa-basics folder
[#1840 ](https://github.com/kamranahmedse/developer-roadmap/issues/1840) I added content to readme.md file of 100-qa-basics folder to resolve this issue! Please check this PR
* Update content/roadmaps/113-qa/content/100-qa-basics/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Adding information on QA SDLC Delivery Model node
* Update content/roadmaps/113-qa/content/101-qa-sdlc/readme.md
* Tweaking files in the Chrome Dev Tools section - JS roadmap
* Tweaking format on files from Memory Management - JS roadmap
* Fixed issue with one of the Free Contents - CommonJS readme
* Format tweak on Callback nodes - JS Roadmap
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 103-figlet.md
adding a description for figlet and a link to the github repo
* Update content/roadmaps/107-nodejs/content/106-nodejs-command-line-apps/101-printing-output/103-figlet.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 102-chalk.md
adding a description to the chalk package and adding a link to its github repository
* Update content/roadmaps/107-nodejs/content/106-nodejs-command-line-apps/101-printing-output/102-chalk.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 101-process-stderr.md
Adding a description to the process.stderr and adding the link to the official documentation
* Update content/roadmaps/107-nodejs/content/106-nodejs-command-line-apps/101-printing-output/101-process-stderr.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added information about df command
* Update content/roadmaps/102-devops/content/102-managing-servers/101-live-in-terminal/138-df.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* [content] Added note on history and use of linux OS.
* Update content/roadmaps/114-software-architect/content/115-operations-knowledge/103-linux-unix.md
* Update content/roadmaps/114-software-architect/content/115-operations-knowledge/103-linux-unix.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Updated info on windows card
* Update content/roadmaps/102-devops/content/102-managing-servers/100-operating-system/100-windows.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content to the readme.md file of 107-qa-monitoring-logs
[#1847](https://github.com/kamranahmedse/developer-roadmap/issues/1847) I added content to the readme.md file of 107-qa-monitoring-logs to resolve this issue! Please check this PR
* Update content/roadmaps/113-qa/content/107-qa-monitoring-logs/readme.md
* Update content/roadmaps/113-qa/content/107-qa-monitoring-logs/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Updated readme.md file of104-templates
[#1847 ](https://github.com/kamranahmedse/developer-roadmap/issues/1847) I made the required additions to this file and resolved the issue.
* Update content/roadmaps/104-angular/content/104-templates/readme.md
* Update content/roadmaps/104-angular/content/104-templates/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* added the complete guide to work with files using fs Module and a blog link is attached with it.
* Update fs content
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added documentation for interpolation
* Changed link
* \Update content/roadmaps/104-angular/content/104-templates/100-interpolation.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Fill or add info to orm, cucumber-jvm, jdbi3, ebean and jdbc template nodes
* Fill devops node management and monitoring
* Update content/roadmaps/102-devops/content/112-management-and-monitoring.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content to prisma.md and native-drivers.md
* Content added to forever.md
* link updated to forever documentation
* Content added to Nohup.md with links
* Update content/roadmaps/107-nodejs/content/110-nodejs-databases/101-document/102-native-drivers.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
This page introduces some basic considerations to help you get started developing web content that is more accessible to people with disabilities. These tips are good practice to help you meet Web Content Accessibility Guidelines (WCAG) requirements. Follow the links to the related WCAG requirements, detailed background in the “Understanding” document, guidance from Tutorials, user stories, and more.
* Added content to Rest in Golang section
The tutorial link are specific to Go language
* Update content/roadmaps/109-golang/content/107-go-api-clients/100-rest/readme.md
* Update content/roadmaps/109-golang/content/107-go-api-clients/100-rest/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* feat: add link to official website and official docs for daisyUI
* Add link to official website and official docs for daisyUI
* Update content/roadmaps/100-frontend/content/114-css-frameworks/114-js-first/105-daisy-ui.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Adding content to 134-strace.md
Added some content as a description of strace.
* Update content/roadmaps/102-devops/content/102-managing-servers/101-live-in-terminal/134-strace.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
New free course on Python ( pythonprinciples.com ) . This is where I learnt Python with interactive lessons - while reading what’s going on and giving you practical examples to follow along with and try yourself.
* content for Go maps
* content for Golang's make function
* content for Golang structs
* Update content/roadmaps/109-golang/content/100-go-basics/116-structs.md
* content for Go interfaces
* Update content/roadmaps/109-golang/content/101-go-advanced/103-interfaces.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* added content and resources to golang node
* Update content/roadmaps/109-golang/content/101-go-advanced/104-context.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 106-cryptography.md
Added content to learn what is Cryptography?
* Update content/roadmaps/112-blockchain/content/101-blockchain-general-knowledge/106-cryptography.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* (#1840) Add basic content for QA-Automation-Jasmine.
* feat(*): Added an additional great tutorial for Jasmine.
* (#1840) Added content for QA-Automation-Robot Framework
Co-authored-by: Carlo Martin <carlocarlo.mtz.martin@gmail.com>
* add go modules and their usage
* Update content/roadmaps/109-golang/content/101-go-advanced/100-go-modules.md
* Update content/roadmaps/109-golang/content/101-go-advanced/100-go-modules.md
Co-authored-by: Matteo Bruno <satboy78@MacBook-Pro-Matteo.local>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Adding information on QA SDLC Delivery Model node
* Update content/roadmaps/113-qa/content/101-qa-sdlc/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* (#1840) Add basic content for QA-Automation-Jasmine.
* feat(*): Added an additional great tutorial for Jasmine.
Co-authored-by: Carlo Martin <carlocarlo.mtz.martin@gmail.com>
* Added Resources and description to Morgan npm
* Update content/roadmaps/107-nodejs/content/112-nodejs-logging/100-morgan.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Resources and description added for jsonwebtoken
* Update content/roadmaps/107-nodejs/content/107-nodejs-apis/108-jsonwebtoken.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Add description and example usage cases
* Update content/roadmaps/113-qa/content/111-qa-headless-testing/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added one of the best and new resource to the java datastructures list
* Update content/roadmaps/110-java/content/100-java-fundamentals/104-datastructures.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* added link to mdn docs for rest parameter
* Added links to MDN documentation for default parameters,
rest parameters and function parameters
* added rest parameter MDN Docs following
guide lines
* Added MDN Docs links to rest and
default parameters in function parameters
* Update content/roadmaps/106-javascript/content/109-javascript-functions/101-function-parameters/100-default-params.md
* Update content/roadmaps/106-javascript/content/109-javascript-functions/101-function-parameters/100-default-params.md
* Update content/roadmaps/106-javascript/content/109-javascript-functions/101-function-parameters/101-rest-params.md
* Update readme.md
* Added link to article on function borrowing
* Update content/roadmaps/106-javascript/content/111-javascript-this-keyword/100-function-borrowing.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* added link to mdn docs for rest parameter
* Added links to MDN documentation for default parameters,
rest parameters and function parameters
* added rest parameter MDN Docs following
guide lines
* Added MDN Docs links to rest and
default parameters in function parameters
* Update content/roadmaps/106-javascript/content/109-javascript-functions/101-function-parameters/100-default-params.md
* Update content/roadmaps/106-javascript/content/109-javascript-functions/101-function-parameters/100-default-params.md
* Update content/roadmaps/106-javascript/content/109-javascript-functions/101-function-parameters/101-rest-params.md
* Update readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Updated isLooselyEqual operator
Updated isLooselyEqual operator
* Updated strictly equal operator
Updated strictly equal operator
* Updated Same Value
Updated Same Value
* Updated Same Valued Zero
Updated Same Valued Zero
* Update content/roadmaps/106-javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/100-is-loosely-equal.md
* Update content/roadmaps/106-javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/101-is-strictly-equal.md
* Update content/roadmaps/106-javascript/content/105-javascript-equality-comparisons/100-equality-algorithms/103-same-value.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added Details about RKT in 101-rkt.md
* Added Details about LXC in 102-lxc.md
* Update content/roadmaps/101-backend/content/118-containerization/101-rkt.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* content for Go maps
* content for Golang's make function
* content for Golang structs
* Update content/roadmaps/109-golang/content/100-go-basics/116-structs.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Changed TNS title error "Thew" to "The" and added "from" in place of the hyphen
* Update content/roadmaps/102-devops/content/105-infrastructure-as-code/101-containers.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* What is Software Architecture
added some descriptions and links for learning Software Architecture
* Update 100-what-is-software-architecture.md
* Update 100-what-is-software-architecture.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* short description about path module and its functions
* short description about path module and its functions
* short description about path module and its functions
* Update content/roadmaps/107-nodejs/content/105-nodejs-working-with-files/101-path-module.md
Co-authored-by: Muhammad Anas <anas.s@automatedbusiness.solutions>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* add defination about process-cwd
* Update content/roadmaps/107-nodejs/content/105-nodejs-working-with-files/102-process-cwd.md
Co-authored-by: Muhammad Anas <anas.s@automatedbusiness.solutions>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 103-test-oracles.md
- Add definition for Test Oracle taken directly from ISTQB Glossary entry for subject.
- Include link to glossary entry under `Read` badge in free content section
* Update content/roadmaps/113-qa/content/100-qa-basics/103-test-oracles.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 100-white-box-testing.md
Add description for white-box testing
Provide link to ISTQB glossary entry
Provide link to ISTQB syllabus with page to specific subject
* Update content/roadmaps/113-qa/content/100-qa-basics/102-testing-approaches/100-white-box-testing.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 103-functions.md
Added the content to learn Methods/Functions in Java.
Kindly merge this into the main branch!
Thank You!
* Update content/roadmaps/110-java/content/100-java-fundamentals/103-functions.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* comprehensive introduction of node js in (100 what is nodejs)
* add how nodejs works
* Update content/roadmaps/107-nodejs/content/100-nodejs-introduction/100-what-is-nodejs.md
Co-authored-by: Muhammad Anas <anas.s@automatedbusiness.solutions>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* history of node js
* Update content/roadmaps/107-nodejs/content/100-nodejs-introduction/102-history-of-nodejs.md
Co-authored-by: Muhammad Anas <anas.s@automatedbusiness.solutions>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added a new resource
This introduction to Ethereum is quite simple and easier for beginners to grasp.
* Update content/roadmaps/112-blockchain/content/101-blockchain-general-knowledge/109-blockchains/102-evm-based/ethereum.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Remove upcoming page and PDFs page from indexing
* Add tooling content
* Add project management contentg
* Add content for design system basics
* Update 110-traceroute.md
Add information for traceroute to DevOps roadmap with links
* Update content/roadmaps/102-devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Add modules resources
Added resouces of javascript.info it covers complete picture of modules like what is module and how to use import, export and dynamic imports.
* Update content/roadmaps/106-javascript/content/115-javascript-modules/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 102-conditionals.md
I've added content in the roadmap documentation to study conditionals in Java.
* Update content/roadmaps/110-java/content/100-java-fundamentals/102-conditionals.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added resources for the Java fundamantals
Basic Syntax - Proposed a G2G blog post as read and an intro to java syntax youtube video as watch.
* Update content/roadmaps/110-java/content/100-java-fundamentals/100-basic-syntax.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 104-datastructures.md
Added content in the Java roadmap to learn Data Structures and Algorithms.
* Update content/roadmaps/110-java/content/100-java-fundamentals/104-datastructures.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Add content: Go testing your apps
Put a little description and some free content.
* Update content/roadmaps/109-golang/content/108-go-testing-your-apps.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added a course to HTML node
* Update content/roadmaps/100-frontend/content/101-html/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* adds poetry, and pipx
niche package managers added as a mentions
* Update content/roadmaps/108-python/content/105-python-package-managers/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
Recommended because it's a very thorough and excellently written free, full-length textbook on JS. It's one of the resources that I most frequently saw mentioned when I was looking up how to learn JS, and it's the one that has helped me the most.
Recommended because it's a very thorough and excellently written free, full-length textbook on JS. It's one of the resources that I most frequently saw mentioned when I was looking up how to learn JS, and it's the one that has helped me the most.
* Web Components detail page and resources
Web Components detail page and resources
* Update content/roadmaps/100-frontend/content/113-web-components/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Updated Watch link for React Router v6
* Update content/roadmaps/103-react/content/102-react-ecosystem/100-routers/100-react-router.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
I'm proposing putting in a "latest news" links to The New Stack, where Roadmap and TNS categories overlap. The link here leads to an auto-updated TNS page with the latest news tagged with "service mesh."
* Update 105-javascript.md
Added a clear and more suitable description of what NodeJS does.
* Update content/roadmaps/101-backend/content/103-learn-a-language/105-javascript.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Resources added for Data Management
* Update content/roadmaps/102-devops/content/110-data-management.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Add content for consul
* Update content/roadmaps/102-devops/content/105-infrastructure-as-code/100-service-mesh/100-consul.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
Hi there! This book has helped me greatly with learning javascript. It is so pleasant to read but highly detailed, eloquently written as the title suggests. The book includes exercises for every chapter, with solutions, multiple projects, and has everything available with its own code sandbox. I have the paperback copy, but I love having all of the extra features with the online version. It is 100% free.
Talks about the JavaScript Fetch API and how to use it to make asynchronous HTTP requests. This post goes through Sending a Request to Handling the status codes of the Response. Extremely beginner-friendly, easy-to-understand examples.
- Changed "represents" to "represent" because the former is used with singular nouns, while the latter is used with plural nouns (e.g., roadmaps)
- Added commas to "i.e." and "e.g."
- Changed ! to an interrobang (?!)
- Added determiners (the) to "value" and "curator"
* Added a reading point
* Update content/roadmaps/100-frontend/content/100-internet/101-what-is-http.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Resources added for Open ID
* Update content/roadmaps/101-backend/content/109-apis/106-authentication/105-openid.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* filled it up, with most help from the mdn docs
youtube link added( gud vid ), with the mdn docs
* Update content/roadmaps/101-backend/content/122-web-servers/readme.md
Co-authored-by: CookedPotato-1428 <103060805+CookedPotato-1428@users.noreply.github.com>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Create 103 Tauri.md
Tauri is a great alternative for electron.js. Its super fast and small and secure. A great option every developer must consider.
* Add tauri docs
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* A Concrete Guide to React Native basics
I wasn't comfortable following the react native documentation when I was starting out as a web developer (even after learning javascript). this free react native course from udemy was my go-to guide to dive deep into react native basics. After playing with the basic knowledge you will acquire from this course then you'll be able to dive deep into react native documentation. This course structure follows a learn by build format. so you'll not be bored yet you'll be excited to build your first react native app ever.
* Update content/roadmaps/100-frontend/content/121-mobile-applications/100-react-native.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
In these SEO guidelines, the article talks about the importance of Clean Code, Site Architecture, Correct Title Tag, Meta Description, Optimized URLs, Meta Robot Tags, Structured Data, internal linking, Page Loading Speed, Website Responsiveness, and Security. which all of these play a crucial part from an SEO perspective for a web developer.
I found this ebook 2yrs ago explaining about Document Object Model. it was very helpful in my Journey to programming. A must-read for all DOM manipulators of the web.
* Update 106-data-replication.md
I added a short description and video link that explains data replication within four minutes. Please take a look at it, thanks :)
* Update content/roadmaps/101-backend/content/108-more-about-databases/106-data-replication.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* adding description to the type checkers
* Update content/roadmaps/100-frontend/content/116-type-checkers/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added a New resource to Fetch API
RapidAPI gives an in-depth explanation of fetch API. what it is, How to use it to process API responses, HTTP Methods with Fetch API and How can errors be handled. Suited For Beginners and the content is packed with real-time examples.
* Update content/roadmaps/100-frontend/content/103-javascript/102-learn-fetch-api-ajax-xhr.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update gRPC deffinition
I thought that some high-level definition of this would be nice.
* Update content/roadmaps/101-backend/content/109-apis/103-grpc.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
#### What roadmap does this PR target?
- [ ] Code Change
- [x] Frontend Roadmap
- [ ] Backend Roadmap
- [ ] DevOps Roadmap
- [ ] All Roadmaps
- [ ] Guides
#### Please acknowledge the items listed below
- [x] I have discussed this contribution and got a go-ahead in an issue before opening this pull request.
- [x] This is not a duplicate issue. I have searched and there is no existing issue for this.
- [x] I understand that these roadmaps are highly opinionated. The purpose is to not to include everything out there in these roadmaps but to have everything that is most relevant today comparing to the other options listed.
- [x] I have read the [contribution docs](../contributing) before opening this PR.
#### Enter the details about the contribution
I am suggesting the addition of PWA tutorials from MDN Web Docs. Apart from basic introduction to PWAs, it has numerous helpful How-to's such as using client-side storage with IndexedDB and Web Storage API, making mobile-first and installable PWAs, enabling "add to home screen", using notifications and push API etc.
#### What roadmap does this PR target?
- [ ] Code Change
- [x] Frontend Roadmap
- [ ] Backend Roadmap
- [ ] DevOps Roadmap
- [ ] All Roadmaps
- [ ] Guides
#### Please acknowledge the items listed below
- [x] I have discussed this contribution and got a go-ahead in an issue before opening this pull request.
- [x] This is not a duplicate issue. I have searched and there is no existing issue for this.
- [x] I understand that these roadmaps are highly opinionated. The purpose is to not to include everything out there in these roadmaps but to have everything that is most relevant today comparing to the other options listed.
- [x] I have read the [contribution docs](../contributing) before opening this PR.
#### Enter the details about the contribution
I have added a description and several resources that I have used myself and found useful in learning the topic of PWA performance analysis.
-1st link is from google web.dev and provides several articles on what is speed, how does it matter and how one can measure and optimize the performance of PWAs.
-2nd link gives detailed explanation on what is PRPL pattern and how it works.
-3rd resource is from google web.dev and teaches how to implement PRPL pattern to instantly load PWAs
-4th resource is from google web.dev and gives a detailed account about RAIL model and its implementation
-5th resource is from freecodecamp and gives an introduction to Chrome Lighthouse
-6th resource is from PWA training module of Google Developers (Web)
-7th resource is a 5 minute tutorial on how to use Lighthouse to audit your PWAs
I was unable to find a resource on devtools that is specifically catered to PWAs compared to general website performance analysis. Will add later if needed and this contribution gets approval!
* Resources added for JSON api
* Update content/roadmaps/101-backend/content/109-apis/101-json-apis.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Add the Vox video "How Does the Internet Works?"
As the article that describes how the internet works, Vox also have a very intersing video about the topic. It's a great production that covers the whole process among sending and receiving a picture between mobile phones.
* Update content/roadmaps/100-frontend/content/100-internet/100-how-does-the-internet-work.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Resources added for MS IIS
* Update content/roadmaps/101-backend/content/122-web-servers/103-ms-iis.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added resources for Basics of SEO in Frontend Development Roadmap
* Update content/roadmaps/100-frontend/content/101-html/105-seo-basics.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added content for Pick a Framework
* Update content/roadmaps/100-frontend/content/111-pick-a-framework/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added Resources for Less
* Update content/roadmaps/100-frontend/content/109-css-preprocessors/102-less.md
* Update content/roadmaps/100-frontend/content/109-css-preprocessors/102-less.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Added Resources for Material UI
* Update content/roadmaps/100-frontend/content/114-css-frameworks/114-js-first/102-material-ui.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Adding an extra resource on HTTP
I've recently read this 3-part series on HTTP, mostly focused on HTTP/3 and QUIC, but the first part covers basic concepts about HTTP and how it evolved to HTTP/3 (which is really HTTP/2-over-QUIC) and I find it might be a great reading resource on the topic.
I'm not recommending the 2nd and 3rd parts as they're linked through the 1st one and they diverge a little from the topic of HTTP (going into performance improvements and deployment of QUIC)
* Replicating new HTTP resource to back end roadmap
* Add content to Css modules
Also I think you guys should change CSS Modules to Alternative Option as is not used much anymore.
* Update 101-css-modules.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Add content for Scaling
- Add description and resources for vertical and horizontal scaling
- Fix typo
* Update 103-horizontal-vertial-scaling.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Add link to Roy Fielding's paper
The backend diagram makes reference to Roy Fielding's dissertation. I thought it would be helpful to have a direct link to his paper for convenience.
* Update 100-rest.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* DRY description and resources
Add a description and resources for DRY software development/design principle
* Minor space change
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Apollo Description and Content added
* Update content/roadmaps/100-frontend/content/119-graphql/100-apollo.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Update 104-accessibility.md
What I did: added new resource item
Why I chose it: Helped me several times to find a) a starting point on how to build an accessible web experience regarding a specific component and b) provides usually links with in-depth examples
* Update content/roadmaps/100-frontend/content/101-html/104-accessibility.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
✌️Added a youtube video as a watchable resource I found very useful and enough. I think knowing that much about how the browsers work is enough for the Front-end journey. The video covered all the important topics from User-Interface to Rendering Engine.
* Add Os and General KnowKnowledge content at backend roadmap
* Update content/roadmaps/101-backend/content/102-os-general-knowledge/readme.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* Updated the Electron section
Updated the Electron section in the front end road map
* Update 100-electron.md
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
* 📦 NEW: No auto formatting for JSON in VSCode
* 👌 IMPROVE: lingo for several libraries/software
* 👌 IMPROVE: alt text for Web Developer Roadmap Introduction
* 👌 IMPROVE: alt text for Frontend Roadmap
* 👌 IMPROVE: alt text for Back-end Roadmap
* 👌 IMPROVE: alt text for DevOps Roadmap
* 📖 DOC: make contribution fun again with more details
* 🐛 FIX: names of several libraries/software
Fetch API should be added instead of XMLHttpRequest(XHR) API
as fetch uses promises which enables a simpler and cleaner API.
However, understanding both Fetch/XHR is required for frontend.
Closes#475
* Added a list of Linux & Unix server distributions, and Emacs as text editor
* Updated Linux server list personal preference and possibilities
* Added OpenBSD and NetBSD as unix suitable OS's
Fill the details and open the issue. Any issue that
doesn't have all of these filled in will be closed,
if yours is closed reopen with everything filled in.
-->
#### What roadmap is this issue about?
- [ ] Frontend Roadmap
- [ ] Backend Roadmap
- [ ] DevOps Roadmap
- [ ] All Roadmaps
#### What is this issue about?
- [ ] Functionality of the website
- [ ] Discussion for a pull request I would want to open.
- [ ] Addition of a new item
- [ ] Removal of some existing item
- [ ] Changing in arrangement
- [ ] General suggestion
- [ ] Sharing an Idea
- [ ] Something else
#### Please acknowledge the below listed
- [ ] This is not a duplicate issue. I have searched and there is no existing issue for this.
- [ ] I understand that these roadmaps are highly opinionated. The purpose is to not to include everything out there in these roadmaps but to have everything that is most relevant today comparing to the other options listed.
- [ ] I have read the [contribution docs](../contributing) before opening this issue.
- [ ] I have discussed this contribution and got a go-ahead in an issue before opening this pull request.
- [ ] This is not a duplicate issue. I have searched and there is no existing issue for this.
- [ ] I understand that these roadmaps are highly opinionated. The purpose is to not to include everything out there in these roadmaps but to have everything that is most relevant today comparing to the other options listed.
- [ ] I have read the [contribution docs](../contributing) before opening this PR.
[roadmap.sh](https://roadmap.sh) is the community effort to create knowledge that is approachable for the developers.
The website is built with Next.js, contains roadmaps which are the step by step guides for developers, guides which are the easier to understand explanations on the complex topics. Anyone can contribute to the website by suggesting changes to existing paths, adding learning resources, becoming an author by adding new guides, updating the existing guides.
## Development
Clone the repository, install the dependencies and start the application
"description": "Learn how to peek through the history of any git repository to learn how it grew.",
"url": "/guides/project-history",
"fileName": "project-history",
"featured": true,
"author": "kamranahmedse",
"updatedAt": "2020-07-16T19:59:14.191Z",
"createdAt": "2020-07-16T19:59:14.191Z"
};
Asymptotic notation is the standard way of measuring the time and space that an algorithm will consume as the input grows. In one of my last guides, I covered "Big-O notation" and a lot of you asked for a similar one for Asymptotic notation. You can find the [previous guide here](/guides/big-o-notation).
Our last video series was about data structures. We looked at the most common data structures, their use cases, pros and cons, and the different operations you could perform on each data structure.
Today, we are kicking off a similar series for Authentication strategies where we will discuss everything you need to know about authentication and authentication strategies.
In this guide today will be talking about what authentication is, and we will cover some terminology that will help us later in the series. You can watch the video below or continue reading this guide.
<iframe src="https://www.youtube.com/embed/Mcyt9SrZT6g" title="Basics of Authentication" />
## What is Authentication?
Authentication is the process of verifying someone's identity. A real-world example of that would be when you board a plane, the airline worker checks your passport to verify your identity, so the airport worker authenticates you.
If we talk about computers, when you log in to any website, you usually authenticate yourself by entering your username and password, which is then checked by the website to ensure that you are who you claim to be. There are two things you should keep in mind:
- Authentication is not only for the persons
- And username and password are not the only way to authenticate.
Some other examples are:
- When you open a website in the browser. If the website uses HTTP, TLS is used to authenticate the server and avoid the fake loading of websites.
- There might be server-to-server communication on the website. The server may need to authenticate the incoming request to avoid malicious usage.
## How does Authentication Work?
On a high level, we have the following factors used for authentication.
- **Username and Password**
- **Security Codes, Pin Codes, or Security Questions** — An example would be the pin code you enter at an ATM to withdraw cash.
- **Hard Tokens and Soft Tokens** — Hard tokens are the special hardware devices that you attach to your device to authenticate yourself. Soft tokens, unlike hard tokens, don't have any authentication-specific device; we must verify the possession of a device that was used to set up the identity. For example, you may receive an OTP to log in to your account on a website.
- **Biometric Authentication** — In biometric authentication, we authenticate using biometrics such as iris, facial, or voice recognition.
We can categorize the factors above into three different types.
- Username / Password and Security codes rely on the person's knowledge: we can group them under the **Knowledge Factor**.
- In hard and soft tokens, we authenticate by checking the possession of hardware, so this would be a **Possession Factor**.
- And in biometrics, we test the person's inherent qualities, i.e., iris, face, or voice, so this would be a **Qualities** factor.
This brings us to our next topic: Multi-factor Authentication and Two-Factor Authentication.
## Multifactor Authentication
Multifactor authentication is the type of authentication in which we rely on more than one factor to authenticate a user.
For example, if we pick up username/password from the **knowledge factor**. And we pick soft tokens from the **possession factor**, and we say that for a user to authenticate, they must enter their credentials and an OTP, which will be sent to their mobile phone, so this would be an example of multifactor authentication.
In multifactor authentication, since we rely on more than one factor, this way of authentication is much more secure than single-factor authentication.
One important thing to note here is that the factors you pick for authentication, they must differ. So, for example, if we pick up a username/password and security question or security codes, it is still not true multifactor authentication because we still rely on the knowledge factor. The factors have to be different from each other.
### Two-Factor Authentication
Two-factor authentication is similar to multifactor authentication. The only difference is that there are precisely two factors in 2FA. In MFA, we can have 2, 3, 4, or any authentication factors; 2FA has exactly two factors. We can say that 2FA is always MFA, because there are more than one factors. MFA is not always 2FA because there may be more than two factors involved.
Next we have the difference between authentication and authorization. This comes up a lot in the interviews, and beginners often confuse them.
### What is Authentication
Authentication is the process of verifying the identity. For example, when you enter your credentials at a login screen, the application here identifies you through your credentials. So this is what the authentication is, the process of verifying the identity.
In case of an authentication failure, for example, if you enter an invalid username and password, the HTTP response code is "Unauthorized" 401.
### What is Authorization
Authorization is the process of checking permission. Once the user has logged in, i.e., the user has been authenticated, the process of reviewing the permission to see if the user can perform the relevant operation or not is called authorization.
And in case of authorization failure, i.e., if the user tries to perform an operation they are not allowed to perform, the HTTP response code is forbidden 403.
## Authentication Strategies
Given below is the list of common authentication strategies:
- Basics of Authentication
- Session Based Authentication
- Token-Based Authentication
- JWT Authentication
- OAuth - Open Authorization
- Single Sign On (SSO)
In this series of illustrated videos and textual guides, we will be going through each of the strategies discussing what they are, how they are implemented, the pros and cons and so on.
So stay tuned, and I will see you in the next one.
Around 10 years ago, Jeff Atwood (the founder of stackoverflow) made a case that JavaScript is going to be the future and he coined the “Atwood Law” which states that *Any application that can be written in JavaScript will eventually be written in JavaScript*. Fast-forward to today, 10 years later, if you look at it it rings truer than ever. JavaScript is continuing to gain more and more adoption.
### JavaScript is announced
JavaScript was initially created by [Brendan Eich](https://twitter.com/BrendanEich) of NetScape and was first announced in a press release by Netscape in 1995. It has a bizarre history of naming; initally it was named `Mocha` by the creator, which was later renamed to `LiveScript`. In 1996, about a year later after the release, NetScape decided to rename it to be `JavaScript` with hopes of capitalizing on the Java community (although JavaScript did not have any relationship with Java) and released Netscape 2.0 with the official support of JavaScript.
JavaScript was initially created by [Brendan Eich](https://twitter.com/BrendanEich) of NetScape and was first announced in a press release by Netscape in 1995. It has a bizarre history of naming; initially it was named `Mocha` by the creator, which was later renamed to `LiveScript`. In 1996, about a year later after the release, NetScape decided to rename it to be `JavaScript` with hopes of capitalizing on the Java community (although JavaScript did not have any relationship with Java) and released Netscape 2.0 with the official support of JavaScript.
### ES1, ES2 and ES3
In 1996, Netscape decided to submit it to [ECMA International](https://en.wikipedia.org/wiki/Ecma_International) with the hopes of getting it standardized. First edition of the standard specification was released in 1997 and the language was standardized. After the initial release, `ECMAScript` was continued to be worked upon and in no-time two more versions were released ECMAScript 2 in 1998 and ECMAScript 3 in 1999.
Our last guide was about the [basics of authentication](/guides/basics-of-authentication), where we discussed authentication, authorization, types of authentication, authentication factors, authentication strategies, and so on.
In this guide today, we will be learning about basic authentication, and we will see how we can implement Basic Authentication in Node.js. We have a [visual guide on the basic authentication](/guides/basic-authentication) and an illustrative video, watch the video below or continue reading:
Given the name "Basic Authentication", you should not confuse Basic Authentication with the standard username and password authentication. Basic authentication is a part of the HTTP specification, and the details can be [found in the RFC7617](https://www.rfc-editor.org/rfc/rfc7617.html).
Because it is a part of the HTTP specifications, all the browsers have native support for "HTTP Basic Authentication". Given below is the screenshot from the implementation in Google Chrome.
Now that we know what basic authentication is, the question is, how does it work? The answer is: it is controlled by the response of the server.
### Step 1
When the browser first requests the server, the server tries to check the availability of the `Authorization` header in the request. Because it is the first request, no `Authorization` header is found in the request. So the server responds with the `401 Unauthorized` response code and also sends the `WWW-Authenticate` header with the value set to `Basic`, which tells the browser that it needs to trigger the basic authentication flow.
```text
401 Unauthorized
WWW-Authenticate: Basic realm='user_pages'
```
If you notice the response, we have an additional parameter called `realm`, which is just a value assigned to a group of pages that share the same credentials.
The browser might use Realm to cache the credential. In the future, when there is an authentication failure browser will check if it has the credentials in the cache for the given realm of the domain, and it may use the same credentials.
## Step 2
Upon receiving the response from the server, the browser will notice the `WWW-Authenticate` header and will show the authentication popup.
After the user submits the credentials through this authentication popup, the browser will automatically encode the credentials using the `base64` encoding and send them in the `Authorization` header of the same request.
### Step 4
Upon receiving the request, the server will decode and verify the credentials. If the credentials are valid, the server will send the response to the client.
So that is how Basic Authentication works.
## Basic Authentication in Node.js
I have prepared the sample project in Node.js, which can be found on GitHub [kamranahmedse/node-basic-auth-example](https://github.com/kamranahmedse/node-basic-auth-example). If you look at the codebase of the project, we have two files `index.js` with the following content:
As you can see, it's just a regular express server. `authMiddleware` registration is where we have all the code for "Basic Authentication". Here is the content of the middleware:
As users, we easily get frustrated by the buffering videos, the images that take seconds to load, pages that got stuck because the content is being loaded. Loading the resources from some cache is much faster than fetching the same from the originating server. It reduces latency, speeds up the loading of resources, decreases the load on server, cuts down the bandwidth costs etc.
As users, we easily get frustrated by the buffering of videos, the images that take seconds to load, and pages that got stuck because the content is being loaded. Loading the resources from some cache is much faster than fetching the same from the originating server. It reduces latency, speeds up the loading of resources, decreases the load on the server, cuts down the bandwidth costs etc.
### Introduction
What is web cache? It is something that sits somewhere between the client and the server, continuously looking at the requests and their responses, looking for any responses that can be cached. So that there is less time consumed when the same request is made again.
What is a web cache? It is something that sits somewhere between the client and the server, continuously looking at the requests and their responses, looking for any responses that can be cached. So that there is less time consumed when the same request is made again.

@@ -11,9 +11,9 @@ What is web cache? It is something that sits somewhere between the client and th
Before we get into further details, let me give you an overview of the terms that will be used, further in the article
- **Client** could be your browser or any application requesting the server for some resource
- **Origin Server**, the source of truth, houses all the content required by the client and is responsible for fulfilling the client requests.
- **Stale Content** is the cached but expired content
- **Fresh Content** is the content available in cache that hasn't expired yet
- **Origin Server**, the source of truth, houses all the content required by the client and is responsible for fulfilling the client's requests.
- **Stale Content** is cached but expired content
- **Fresh Content** is the content available in the cache that hasn't expired yet
- **Cache Validation** is the process of contacting the server to check the validity of the cached content and get it updated for when it is going to expire
- **Cache Invalidation** is the process of removing any stale content available in the cache
@@ -43,15 +43,15 @@ Unlike browser cache which serves a single user, proxy caches may serve hundreds
#### Reverse Proxy Cache
Reverse proxy cache or surrogate cache is implemented close to the origin servers in order to reduce the load on server. Unlike proxy caches which are implemented by ISPs etc to reduce the bandwidth usage in a network, surrogates or reverse proxy caches are implemented near to the origin servers by the server administrators to reduce the load on server.
A Reverse proxy cache or surrogate cache is implemented close to the origin servers in order to reduce the load on the server. Unlike proxy caches which are implemented by ISPs etc to reduce the bandwidth usage in a network, surrogates or reverse proxy caches are implemented near the origin servers by the server administrators to reduce the load on the server.
Although you can control the reverse proxy caches (since it is implemented by you on your server) you can not avoid or control browser and proxy caches. And if your website is not configured to use these caches properly, it will still be cached using whatever the defaults are set on these caches.
Although you can control the reverse proxy caches (since it is implemented by you on your server) you can not avoid or control browser and proxy caches. And if your website is not configured to use these caches properly, it will still be cached using whatever defaults are set on these caches.
### Caching Headers
So, how do we control the web cache? Whenever the server emits some response, it is accompanied with some HTTP headers to guide the caches whether and how to cache this response. Content provider is the one that has to make sure to return proper HTTP headers to force the caches on how to cache the content.
So, how do we control the web cache? Whenever the server emits some response, it is accompanied by some HTTP headers to guide the caches on whether and how to cache this response. The content provider is the one that has to make sure to return proper HTTP headers to force the caches on how to cache the content.
- [Expires](#expires)
- [Pragma](#pragma)
@@ -71,19 +71,19 @@ So, how do we control the web cache? Whenever the server emits some response, it
#### Expires
Before HTTP/1.1 and introduction of `Cache-Control`, there was `Expires` header which is simply a timestamp telling the caches how long should some content be considered fresh. Possible value to this header is absolute expiry date; where date has to be in GMT. Below is the sample header
Before HTTP/1.1 and the introduction of `Cache-Control`, there was an `Expires` header which is simply a timestamp telling the caches how long should some content be considered fresh. A possible value to this header is the absolute expiry date; where a date has to be in GMT. Below is the sample header
```html
Expires: Mon, 13 Mar 2017 12:22:00 GMT
```
It should be noted that the date cannot be more than a year and if the date format is wrong, content will be considered stale. Also, the clock on cache has to be in sync with the clock on server, otherwise the desired results might not be achieved.
It should be noted that the date cannot be more than a year and if the date format is wrong, the content will be considered stale. Also, the clock on the cache has to be in sync with the clock on the server, otherwise, the desired results might not be achieved.
Although,`Expires` header is still valid and is supported widely by the caches, preference should be given to HTTP/1.1 successor of it i.e. `Cache-Control`.
Although the`Expires` header is still valid and is supported widely by the caches, preference should be given to HTTP/1.1 successor of it i.e. `Cache-Control`.
#### Pragma
Another one from the old, pre HTTP/1.1 days, is `Pragma`. Everything that it could do is now possible using the cache-control header given below. However, one thing I would like to point out about it is, you might see `Pragma: no-cache` being used here and there in hopes of stopping the response from being cached. It might not necessarily work; as HTTP specification discusses it in the request headers and there is no mention of it in the response headers. Rather `Cache-Control` header should be used to control the caching.
Another one from the old, pre HTTP/1.1 days, is `Pragma`. Everything that it could do is now possible using the cache-control header given below. However, one thing I would like to point out about it is, that you might see `Pragma: no-cache` being used here and there in hopes of stopping the response from being cached. It might not necessarily work; as HTTP specification discusses it in the request headers and there is no mention of it in the response headers. Rather `Cache-Control` header should be used to control the caching.
#### Cache-Control
@@ -98,7 +98,7 @@ Setting the cache to `private` means that the content will not be cached in any
Cache-Control: private
```
Having said that, don't let it fool you into thinking that setting this header will make your data any secure; you still have to use SSL for that purpose.
Having said that, don't let it fool you into thinking that setting this header will make your data any secure; you still have to use SSL for that purpose.
##### public
@@ -138,7 +138,7 @@ Cache-Control: s-maxage=3600, public
```
##### must-revalidate
**`must-revalidate`** it might happen sometimes that if you have network problems and the content cannot be retrieved from the server, browser may serve stale content without validation. `must-revalidate` avoids that. If this directive is present, it means that stale content cannot be served in any case and the data must be re-validated from the server before serving.
**`must-revalidate`** it might happen sometimes that if you have network problems and the content cannot be retrieved from the server, the browser may serve stale content without validation. `must-revalidate` avoids that. If this directive is present, it means that stale content cannot be served in any case and the data must be re-validated from the server before serving.
ETag: W/"j82j8232ha7sdh0q2882" - Weak Etag (prefixed with `W/`)
```
A strong validating ETag means that two resources are **exactly** same and there is no difference between them at all. While a weak ETag means that two resources are although not strictly same but could be considered same. Weak etags might be useful for dynamic content, for example.
A strong validating ETag means that two resources are **exactly** same and there is no difference between them at all. While a weak ETag means that two resources although not strictly the same but could be considered the same. Weak etags might be useful for dynamic content, for example.
Now you know what etags are but how does the browser make this request? by making a request to server while sending the available Etag in `If-None-Match` header.
@@ -71,7 +71,7 @@ Three-way handshake in its simplest form is that all the `TCP` connections begin
-`SYN ACK` - Server acknowledges the request by sending an `ACK` packet back to the client which is made up of a random number, let's say `y` picked up by server and the number `x+1` where `x` is the number that was sent by the client
-`ACK` - Client increments the number `y` received from the server and sends an `ACK` packet back with the number `y+1`
Once the three-way handshake is completed, the data sharing between the client and server may begin. It should be noted that the client may start sending the application data as soon as it dispatches the last `ACK` packet but the server will still have to wait for the `ACK` packet to be recieved in order to fulfill the request.
Once the three-way handshake is completed, the data sharing between the client and server may begin. It should be noted that the client may start sending the application data as soon as it dispatches the last `ACK` packet but the server will still have to wait for the `ACK` packet to be received in order to fulfill the request.

@@ -89,11 +89,11 @@ After merely 3 years of `HTTP/1.0`, the next version i.e. `HTTP/1.1` was release
- **Hostname Identification** In `HTTP/1.0``Host` header wasn't required but `HTTP/1.1` made it required.
- **Persistent Connections** As discussed above, in `HTTP/1.0` there was only one request per connection and the connection was closed as soon as the request was fulfilled which resulted in accute performance hit and latency problems. `HTTP/1.1` introduced the persistent connections i.e. **connections weren't closed by default** and were kept open which allowed multiple sequential requests. To close the connections, the header `Connection: close` had to be available on the request. Clients usually send this header in the last request to safely close the connection.
- **Persistent Connections** As discussed above, in `HTTP/1.0` there was only one request per connection and the connection was closed as soon as the request was fulfilled which resulted in acute performance hit and latency problems. `HTTP/1.1` introduced the persistent connections i.e. **connections weren't closed by default** and were kept open which allowed multiple sequential requests. To close the connections, the header `Connection: close` had to be available on the request. Clients usually send this header in the last request to safely close the connection.
- **Pipelining** It also introduced the support for pipelining, where the client could send multiple requests to the server without waiting for the response from server on the same connection and server had to send the response in the same sequence in which requests were received. But how does the client know that this is the point where first response download completes and the content for next response starts, you may ask! Well, to solve this, there must be `Content-Length` header present which clients can use to identify where the response ends and it can start waiting for the next response.
> It should be noted that in order to benefit from persistent connections or pipelining, `Content-Length` header must be available on the response, because this would let the client know when the transmission completes and it can send the next request (in normal sequential way of sending requests) or start waiting for the the next response (when pipelining is enabled).
> It should be noted that in order to benefit from persistent connections or pipelining, `Content-Length` header must be available on the response, because this would let the client know when the transmission completes and it can send the next request (in normal sequential way of sending requests) or start waiting for the next response (when pipelining is enabled).
> But there was still an issue with this approach. And that is, what if the data is dynamic and server cannot find the content length before hand? Well in that case, you really can't benefit from persistent connections, could you?! In order to solve this `HTTP/1.1` introduced chunked encoding. In such cases server may omit content-Length in favor of chunked encoding (more to it in a moment). However, if none of them are available, then the connection must be closed at the end of request.
@@ -111,7 +111,7 @@ After merely 3 years of `HTTP/1.0`, the next version i.e. `HTTP/1.1` was release
I am not going to dwell about all the `HTTP/1.1` features in this post as it is a topic in itself and you can already find a lot about it. The one such document that I would recommend you to read is [Key differences between `HTTP/1.0` and HTTP/1.1](http://www.ra.ethz.ch/cdstore/www8/data/2136/pdf/pd1.pdf) and here is the link to [original RFC](https://tools.ietf.org/html/rfc2616) for the overachievers.
`HTTP/1.1` was introduced in 1999 and it had been a standard for many years. Although, it improved alot over its predecessor; with the web changing everyday, it started to show its age. Loading a web page these days is more resource-intensive than it ever was. A simple webpage these days has to open more than 30 connections. Well `HTTP/1.1` has persistent connections, then why so many connections? you say! The reason is, in `HTTP/1.1` it can only have one outstanding connection at any moment of time. `HTTP/1.1` tried to fix this by introducing pipelining but it didn't completely address the issue because of the **head-of-line blocking** where a slow or heavy request may block the requests behind and once a request gets stuck in a pipeline, it will have to wait for the next requests to be fulfilled. To overcome these shortcomings of `HTTP/1.1`, the developers started implementing the workarounds, for example use of spritesheets, encoded images in CSS, single humungous CSS/Javascript files, [domain sharding](https://www.maxcdn.com/one/visual-glossary/domain-sharding-2/) etc.
`HTTP/1.1` was introduced in 1999 and it had been a standard for many years. Although, it improved alot over its predecessor; with the web changing everyday, it started to show its age. Loading a web page these days is more resource-intensive than it ever was. A simple webpage these days has to open more than 30 connections. Well `HTTP/1.1` has persistent connections, then why so many connections? you say! The reason is, in `HTTP/1.1` it can only have one outstanding connection at any moment of time. `HTTP/1.1` tried to fix this by introducing pipelining but it didn't completely address the issue because of the **head-of-line blocking** where a slow or heavy request may block the requests behind and once a request gets stuck in a pipeline, it will have to wait for the next requests to be fulfilled. To overcome these shortcomings of `HTTP/1.1`, the developers started implementing the workarounds, for example use of spritesheets, encoded images in CSS, single humongous CSS/Javascript files, [domain sharding](https://www.maxcdn.com/one/visual-glossary/domain-sharding-2/) etc.
### SPDY - 2009
@@ -121,7 +121,7 @@ Google went ahead and started experimenting with alternative protocols to make t
It was seen that if we keep increasing the bandwidth, the network performance increases in the beginning but a point comes when there is not much of a performance gain. But if you do the same with latency i.e. if we keep dropping the latency, there is a constant performance gain. This was the core idea for performance gain behind `SPDY`, decrease the latency to increase the network performance.
> For those who don't know the difference, latency is the delay i.e. how long it takes for data to travel between the source and destination (measured in milliseconds) and bandwidth is the amount of data transfered per second (bits per second).
> For those who don't know the difference, latency is the delay i.e. how long it takes for data to travel between the source and destination (measured in milliseconds) and bandwidth is the amount of data transferred per second (bits per second).
The features of `SPDY` included, multiplexing, compression, prioritization, security etc. I am not going to get into the details of SPDY, as you will get the idea when we get into the nitty gritty of `HTTP/2` in the next section as I said `HTTP/2` is mostly inspired from SPDY.
@@ -176,7 +176,7 @@ While we are talking headers, let me add here that the headers are still the sam
Server push is another tremendous feature of `HTTP/2` where the server, knowing that the client is going to ask for a certain resource, can push it to the client without even client asking for it. For example, let's say a browser loads a web page, it parses the whole page to find out the remote content that it has to load from the server and then sends consequent requests to the server to get that content.
Server push allows the server to decrease the roundtrips by pushing the data that it knows that client is going to demand. How it is done is, server sends a special frame called `PUSH_PROMISE` notifying the client that, "Hey, I am about to send this resource to you! Do not ask me for it." The `PUSH_PROMISE` frame is associated with the stream that caused the push to happen and it contains the promised stream ID i.e. the stream on which the server will send the resource to be pushed.
Server push allows the server to decrease the roundtrips by pushing the data that it knows that client is going to demand. How it is done is, server sends a special frame called `PUSH_PROMISE` notifying the client that, "Hey, I am about to send this resource to you! Do not ask me for it." The `PUSH_PROMISE` frame is associated with the stream that caused the push to happen and it contains the promised stream ID i.e. the stream on which the server will send the resource to be pushed.
#### 5. Request Prioritization
@@ -186,7 +186,7 @@ Without any priority information, server processes the requests asynchronously i
#### 6. Security
There was extensive discussion on whether security (through `TLS`) should be made mandatory for `HTTP/2` or not. In the end, it was decided not to make it mandatory. However, most vendors stated that they will only support `HTTP/2` when it is used over `TLS`. So, although `HTTP/2` doesn't require encryption by specs but it has kind of become mandatory by default anyway. With that out of the way, `HTTP/2` when implemented over `TLS` does impose some requirementsi.e. `TLS` version `1.2` or higher must be used, there must be a certain level of minimum keysizes, ephemeral keys are required etc.
There was extensive discussion on whether security (through `TLS`) should be made mandatory for `HTTP/2` or not. In the end, it was decided not to make it mandatory. However, most vendors stated that they will only support `HTTP/2` when it is used over `TLS`. So, although `HTTP/2` doesn't require encryption by specs but it has kind of become mandatory by default anyway. With that out of the way, `HTTP/2` when implemented over `TLS` does impose some requirementsi.e. `TLS` version `1.2` or higher must be used, there must be a certain level of minimum keysizes, ephemeral keys are required etc.
`HTTP/2` is here and it has already [surpassed SPDY in adaption](http://caniuse.com/#search=http2) which is gradually increasing. `HTTP/2` has alot to offer in terms of performance gain and it is about time we should start using it.
Internet has connected people across the world using social media and audio/video calling features along with providing an overabundance of knowledge and tools. All this comes with an inherent danger of security and privacy breaches. In this guide we will talk about **proxies**which play a vital role in mitigating these risks. We will cover the following topics in this guide:
The Internet has connected people across the world using social media and audio/video calling features along with providing an overabundance of knowledge and tools. All this comes with an inherent danger of security and privacy breaches. In this guide, we will talk about **proxies**that play a vital role in mitigating these risks. We will cover the following topics in this guide:
- [Proxy Server](#proxy-server)
- [Forward Proxy Server](#forward-proxy-server)
@@ -7,34 +7,34 @@ Internet has connected people across the world using social media and audio/vide
## Proxy Server
***Every web request which is sent from the client to a web server goes through some type of proxy server.*** A proxy server acts as a gateway between client *(you)* and the internet and separates end-users from the websites you browse. It replaces the source IP address of the web request with the proxy server's IP address and then forwards it to the web server. The web server is unaware of the client, it only sees the proxy server.
***Every web request which is sent from the client to a web server goes through some type of proxy server.*** A proxy server acts as a gateway between client *(you)* and the internet and separates end-users from the websites you browse. It replaces the source IP address of the web request with the proxy server's IP address and then forwards it to the web server. The web server is unaware of the client, it only sees the proxy server.

> NOTE: This is not an accurate description rather just an illustration.
> NOTE: This is not an accurate description but rather just an illustration.
Proxy servers serve as a single point of control making it easier to enforce security policies. It also provides caching mechanism which stores the requested web pages on the proxy server to improve performance. If the requested web-page is available in cache memory then instead of forwarding the request to the web-server it will send the cached webpage back to the client. This **saves big companies thousands of dollars** by reducing load on their servers as their website is visited by millions of users every day.
Proxy servers serve as a single point of control making it easier to enforce security policies. It also provides caching mechanism which stores the requested web pages on the proxy server to improve performance. If the requested web-page is available in cache memory then instead of forwarding the request to the web-server it will send the cached webpage back to the client. This **saves big companies thousands of dollars** by reducing the load on their servers as their website is visited by millions of users every day.
## Forward Proxy Server
A forward proxy is generally implemented on the client side and **sits in front of multiple clients** or client sources. Forward proxy servers are mainly used by companies to **manage internet usage** of their employees and **restrict content**. It is also used as a **firewall** to secure company's network by blocking any request which would pose threat to the companies's network. Proxy servers are also used to **bypass geo-restriction** and browse content which might be blocked in user's country. It enables users to **browse anonymously**, as the proxy server masks their details from the website's servers.
A forward proxy is generally implemented on the client side and **sits in front of multiple clients** or client sources. Forward proxy servers are mainly used by companies to **manage the internet usage** of their employees and **restrict content**. It is also used as a **firewall** to secure the company's network by blocking any request which would pose threat to the company's network. Proxy servers are also used to **bypass geo-restriction** and browse content that might be blocked in the user's country. It enables users to **browse anonymously**, as the proxy server masks their details from the website's servers.
> NOTE: This is not an accurate description rather just an illustration
> NOTE: This is not an accurate description but rather just an illustration
## Reverse Proxy Server
Reverse proxy servers are implemented on the **server side** instead of the client side. It **sits in front of multiple webservers** and manages the incoming requests by forwarding them to the web servers. It provides anonymity for the **back-end web servers and not the client**. Reverse proxy servers are generally used to perform tasks such as **authentication, content caching, and encryption/decryption** on behalf of the web server. These tasks would **hog CPU cycles** on the web server and degrade performance of the website by introducing high amount of delay in loading the webpage. Reverse proxies are also used as **load balancers** to distribute the incoming traffic efficiently among the web servers but it is **not optimized** for this task. In essence, reverse proxy server is a gateway to a web-server or group of web-servers.
Reverse proxy servers are implemented on the **server side** instead of the client side. It **sits in front of multiple webservers** and manages incoming requests by forwarding them to the web servers. It provides anonymity for the **back-end web servers and not the client**. Reverse proxy servers are generally used to perform tasks such as **authentication, content caching, and encryption/decryption** on behalf of the web server. These tasks would **hog CPU cycles** on the web server and degrade the performance of the website by introducing a high amount of delay in loading the webpage. Reverse proxies are also used as **load balancers** to distribute the incoming traffic efficiently among the web servers but it is **not optimized** for this task. In essence, a reverse proxy server is a gateway to a web-server or group of web-servers.
> NOTE: This is not an accurate description rather just an illustration. Red lines represent server's response and black lines represent initial request from client(s).
> NOTE: This is not an accurate description but rather just an illustration. Red lines represent the server's response and black lines represent the initial request from client(s).
## Summary
A proxy server acts as a gateway between client *(you)* and the internet and separates end-users from the websites you browse. ***The position of the proxy server on the network determines whether it is a forward or a reverse proxy server***. Forward proxy is implemented on the client side and **sits in front of multiple clients** or client sources and forwards requests to the web server. Reverse proxy servers are implemented on the **server side** it **sits in front of multiple webservers** and manages the incoming requests by forwarding them to the web servers.
A proxy server acts as a gateway between client *(you)* and the internet and separates end-users from the websites you browse. ***The position of the proxy server on the network determines whether it is a forward or a reverse proxy server***. A Forward proxy is implemented on the client side and **sits in front of multiple clients** or client sources and forwards requests to the web server. Reverse proxy servers are implemented on the **server side** it **sits in front of multiple webservers** and manage the incoming requests by forwarding them to the web servers.
If all this was too much to take in, I have a simple analogy for you.
At a restaurant the waiter/waitress takes your order and gives it to the kitchen head chef. The head chef then calls out the order and assigns tasks to everyone in the kitchen.
At a restaurant, the waiter/waitress takes your order and gives it to the kitchen head chef. The head chef then calls out the order and assigns tasks to everyone in the kitchen.
HTTP is the internet protocol that standardizes how clients and servers interact with each other. When you open a website, among other things, HTTP is the protocol that helps load the website in the browser.
## HTTP is Stateless
HTTP is a stateless protocol which means that each request made from the client to the server is treated as a standalone request; neither the client nor the server keeps track of the subsequent requests. Sessions allow you to change that; with sessions, the server has a way to associate some information with the client so that when the same client requests the server, it can retrieve that information.
In this guide, we will learn what is Session-Based Authentication and how to implement it in Node.js. We also have a separate [visual guide on Session-Based Authentication](/guides/session-authentication) as well that explains the topic visually.
## What is Session-Based Authentication?
Session-based authentication is a stateful authentication technique where we use sessions to keep track of the authenticated user. Here is how Session Based Authentication works:
* User submits the login request for authentication.
* Server validates the credentials. If the credentials are valid, the server initiates a session and stores some information about the client. This information can be stored in memory, file system, or database. The server also generates a unique identifier that it can later use to retrieve this session information from the storage. Server sends this unique session identifier to the client.
* Client saves the session id in a cookie and this cookie is sent to the server in each request made after the authentication.
* Server, upon receiving a request, checks if the session id is present in the request and uses this session id to get information about the client.
And that is how session-based authentication works.
## Session-Based Authentication in Node.js
Now that we know what session-based authentication is, let's see how we can implement session-based authentication in Node.js.
Please note that, for the sake of simplicity, I have intentionally kept the project strictly relevant to the Session Based Authentication and have left out a lot of details that a production-ready application may require. Also, if you don't want to follow along, project [codebase can be found on GitHub](https://github.com/kamranahmedse/node-session-auth-example).
First things first, create an empty directory that will be holding our application.
```shell
mkdir session-auth-example
```
Now run the following command to setup a sample `package.json` file:
```shell
npm init -y
```
Next, we need to install the dependencies:
```shell
npm install express express-session
```
`Express` is the application framework, and `express-session` is the package that helps work with sessions easily.
### Setting up the server
Now create an `index.js` file at the root of the project with the following content:
```javascript
constexpress=require('express');
constsessions=require('express-session');
constapp=express();
app.use(sessions({
secret:"some secret",
cookie:{
maxAge:1000*60*60*24// 24 hours
},
resave:true,
saveUninitialized:false,
}));
app.use(express.json());
app.use(express.urlencoded({extended:true}));
// @todo register routes
app.listen(3000,()=>{
console.log(`Server Running at port 3000`);
});
```
The important piece to note here is the `express-session` middleware registration which automatically handles the session initialization, cooking parsing and session data retrieval, and so on. In our example here, we are passing the following configuration options:
*`secret`: This is used to sign the session ID cookie. Using a secret that cannot be guessed will reduce the ability to hijack a session.
*`cookie`: Object containing the configuration for session id cookie.
*`resave`: Forces the session to be saved back to the session store, even if the session data was never modified during the request.
*`saveUninitialized`: Forces an "uninitialized" session to be saved to the store, i.e., saves a session to the store even if the session was not initiated.
Another important option is `store` which we can configure to change how/where the session data is stored on the server. By default, this data is stored in the memory, i.e., `MemoryStore`.
Look at the [express-session documentation](https://github.com/expressjs/session) to learn more about the available options.
### Creating Handlers
Create a directory called the `handlers` at the project's root. This is the directory where we will be placing all the route-handling functions.
Now let's create the homepage route, which will show the welcome message and a link to log out for the logged-in users and redirect to the login screen for the logged-out users. Create a file at `handlers/home.js` with the following content.
```javascript
module.exports=functionHomeHandler(req,res){
if(!req.session.userid){
returnres.redirect('/login');
}
res.setHeader('Content-Type','text/HTML')
res.write(`
<h1>Welcome back ${req.session.userid}</h1>
<a href="/logout">Logout</a>
`);
res.end()
}
```
At the top of this function, you will notice the check `req.session.userid`. `req.session` is automatically populated using the session cookie by the `express-session` middleware that we registered earlier. `req.session.userid` is one of the data fields that we will set to store the `userid` of the logged in user.
Next, we need to register this handler with a route. Open the `index.js` file at the root of the project and register the following route:
```javascript
constHomeHandler=require('./handlers/home.js');
app.get('/',HomeHandler);
```
Next, we have the login page, redirecting the user to the home screen if the user is logged in or showing the login form. Create a file at `handlers/login.js` with the following content:
Again, at the top of the function, we are simply checking if we have `userid` in the session (which means the user is logged in). If the user is logged in, we redirect them to the homepage; if not, we show the login screen. In the login form, we have the method of `post`, and we submit the form to `/process-login`. Please note that, for the sake of simplicity, we have a simple HTML string returned in the response, but in a real-world application, you will probably have a separate view file.
Let's first register this page and then implement `/process-login` endpoint. Open the `index.js` file from the root of the project and register the following route:
```javascript
constLoginHandler=require('./handlers/login.js');
app.get('/login',LoginHandler);
```
Next, we have to implement the functionality to process the login form submissions. Create a file at `handlers/process-login.js` with the following content:
As you can see, we are simply checking that the username and password should both be `admin` and `admin` for a user to authenticate successfully. Upon finding valid credentials, we set the `userid` in the session by updating `req.session.userid`. Similarly, you can set any data in the session. For example, if we wanted to store the user role, we would do the following:
```javascript
req.session.role='admin'
```
And later access this value out of the session anywhere in the subsequent requests.
Register this route in the `index.js` file at the root of the project:
Finally, we have the logout functionality. Create a file at `handlers/logout.js` with the following content:
```javascript
module.exports=functionLogout(req,res){
req.session.destroy();
res.redirect('/');
}
```
We reset the session by calling `req.session.destroy()` and then redirecting the user to the homepage. Register the logout handler in the `index.js` file using the following:
A thread is an execution context in which the instructions to the CPU can be scheduled and executed independently of the parent process. Concurrency is the concept of multiple threads in a shared memory space being computed simultaneously (or intermittently executed in succession to provide that illusion). Concurrency allows multiple processes to execute at once and can apply to programming languages as well as operating systems.
@@ -475,7 +475,7 @@ Files, pieces, and piece hashes aren't the full story—we can go further by bre
A peer is supposed to sever the connection if they receive a request for a block larger than 16KB. However, based on my experience, they're often perfectly happy to satisfy requests up to 128KB. I only got moderate gains in overall speed with larger block sizes, so it's probably better to stick with the spec.
#### Pipelining
Network round-trips are expensive, and requesting each block one by one will absolutely tank the performance of our download. Therefore, it's important to **pipeline** our requests such that we keep up a constant pressure of some number of unfulfilled requests. This can increase the throughput of our connection by an order of magnitude.
Network round-trips are expensive, and requesting each block one by one will absolutely thank the performance of our download. Therefore, it's important to **pipeline** our requests such that we keep up a constant pressure of some number of unfulfilled requests. This can increase the throughput of our connection by an order of magnitude.

Since the explosive growth of web-based applications, every developer could stand to benefit from understanding how the Internet works. In this article, accompanied with an introductory series of short videos about the Internet from [code.org](https://code.org), you will learn the basics of the Internet and how it works. After going through this article, you will be able to answer the below questions:
Since the explosive growth of web-based applications, every developer stands to benefit from understanding how the Internet works. Through this article and its accompanying introductory series of short videos about the Internet from [code.org](https://code.org), you will learn the basics of the Internet and how it works. After going through this article, you will be able to answer the following questions:
* What is the Internet?
* How does the information move on the internet?
@@ -19,7 +19,7 @@ In the video below, Vint Cerf, one of the "fathers of the internet," explains th
## Wires, Cables, and Wi-Fi
Information on the Internet moves from computer to another in the form of bits over various mediums, including Ethernet cables, fiber optic cables, and wireless signals (i.e., radio waves).
Information on the Internet moves from one computer to another in the form of bits over various mediums, including Ethernet cables, fiber optic cables, and wireless signals (i.e., radio waves).
In the video linked below, you will learn about the different mediums for data transfer on the Internet and the pros and cons for each.
@@ -49,13 +49,13 @@ HTTP is the standard protocol by which webpages are transferred over the Interne
## Encryption and Public Keys
Cryptography is what keeps our communication secure on the Internet. In this short video, you will learn the basics of cryptograpy, SSL/TLS, and how they help make the communication on the Internet secure.
Cryptography is what keeps our communication secure on the Internet. In this short video, you will learn the basics of cryptography, SSL/TLS, and how they help make the communication on the Internet secure.
In this video, you will learn about the basics of cybersecurity and common cybercrimes
Cybersecurity refers to the protective measures against criminal activity accomplished through using a network, technological devices, and the internet.In this video, you will learn about the basics of cybersecurity and common cybercrimes.
We all have heard the mantra *"build it and they will come"* many times. Stories of people building a startup or project and seemingly stumbling upon a goldmine aren't few, but they aren't the rule. These stories are still the exception in the mass of launched projects and startups.
Before the [Wright brothers](https://en.wikipedia.org/wiki/Wright_brothers) built their Kitty Hawk, people generally believed heavy objects could not fly - physics simply forbade it. The idea to regularly board airplanes as we do it these days was unthinkable. It was considered an unrealistic daydream for humans to ever claim the sky. When the first airplanes took off, people were fascinated, of course. It was a topic people continued to talk about for ages. Technology had made something impossible possible. While the wording "build it and they will come" originated from the movie [Field of Dreams](https://en.wikipedia.org/wiki/Field_of_Dreams), this and similar historic events gave birth to the idea behind it.
Before the [Wright brothers](https://en.wikipedia.org/wiki/Wright_brothers) built their Kitty Hawk, people generally believed heavy objects could not fly - physics simply forbade it. The idea of regularly boarding airplanes as we do it these days was unthinkable. It was considered an unrealistic daydream for humans to ever claim the sky. When the first airplanes took off, people were fascinated, of course. It was a topic people continued to talk about for ages. Technology had made something impossible possible. While the wording "build it and they will come" originated from the movie [Field of Dreams](https://en.wikipedia.org/wiki/Field_of_Dreams), this and similar historic events gave birth to the idea behind it.
The engineers' and inventors' dreams came true: spend time doing what you love while the success follows magically. The internet and web-standards democratized access to this dream. But with it, the idea behind it faded and became less and less powerful. In 2020, there are very strong signs the popular saying isn't correct anymore.
The engineers' and inventors' dreams came true: spend time doing what you love while success follows magically. The internet and web-standards democratized access to this dream. But with it, the idea behind it faded and became less and less powerful. In 2020, there are very strong signs the popular saying isn't correct anymore.
Why doesn't "build it and they will come" work anymore?
There are a few reasons working hard to make "build it and they will come" a thing of the past. This being said, it doesn't mean you can't succeed building a side-project anymore. You've just got to adjust the way you are building it.
There are a few reasons for working hard to make "build it and they will come" a thing of the past. This being said, it doesn't mean you can't succeed in building a side-project anymore. You've just got to adjust the way you are building it.
### Building got much easier
As a software engineer, some websites are a blessing. Most of us couldn't work without GitHub, Stackoverflow and of course Google, ahem, DuckDuckGo. These powerful sites help us to solve problems, learn new techniques and find the right libraries to make building projects easier. If any of these sites are down, most engineers take a break and go for a coffee instead of trying to continue working. Combine this with more sophisticated web-standards and easier access to tooling, and you arrive at a world where building projects isn't just a job for highly specialist developers anymore. Powerful frameworks such as [Laravel](https://laravel.com/) and [Quasar Framework](https://quasar.dev/) are available for anyone to build projects on - for free.
In fact, building projects got to a point where some people simply build them as an exercise or hobby. If you spend some time browsing GitHub you will be surprised by the open source projects people built without any commercial goals. "Low code" and "No code" are the next wave of people building projects with less technological background.
In fact, building projects got to a point where some people simply build them as an exercise or hobby. If you spend some time browsing GitHub you will be surprised by the open source projects people built without any commercial goals. "Low code" and "No code" are the next wave of people building projects with a less technological background.
### Too much going on: information overload
We are living in a world with information overload. In the online sphere, you can find a lot of useful information. But there is also a lot of noise. For each piece of information or advice you can find a number of opposing statements. This is partly due to the fact that the internet made it much easier to publish and share information. Everyone has been given a voice - for good or bad. This makes it much harder to reach potential users. Your new project probably just drowns amongst kitten videos, opinions, and news. Never has the average lifetime of published content been so low. You've got to come up with a marketing plan before setting out on the journey.
We are living in a world with information overload. In the online sphere, you can find a lot of useful information. But there is also a lot of noise. For each piece of information or advice, you can find a number of opposing statements. This is partly due to the fact that the internet made it much easier to publish and share information. Everyone has been given a voice - for good or bad. This makes it much harder to reach potential users. Your new project probably just drowns amongst kitten videos, opinions, and news. Never has the average lifetime of published content been so low. You've got to come up with a marketing plan before setting out on the journey.
### Smaller Problems
Besides building being easier than ever before and attention being in short supply, there is another issue making the life of makers, inventors and engineers harder: today's problems are much smaller. Back when the previously mentioned Wright Brothers set out, they fascinated people with the problem they were aiming to address: flying. Unless your name is Elon, your problem is unlikely to attract many people naturally. As a solo developer or indie hacker, the chances are higher for having a much smaller problem in a niche (of a niche). With the information overload mentioned before, niches are pretty much the only way to build a side-project or startup and succeed.
Besides building is easier than ever before and attention is in short supply, there is another issue making the life of makers, inventors, and engineers harder: today's problems are much smaller. Back when the previously mentioned Wright Brothers set out, they fascinated people with the problem they were aiming to address: flying. Unless your name is Elon, your problem is unlikely to attract many people naturally. As a solo developer or indie hacker, the chances are higher of having a much smaller problem in a niche (of a niche). With the information overload mentioned before, niches are pretty much the only way to build a side-project or startup and succeed.
Does sound pretty grim for inventors, developers and engineers? Well, yes and no. We've got to tweak the approach to get in front of the eye of potential users and customers.
Does sound pretty grim for inventors, developers, and engineers? Well, yes and no. We've got to tweak the approach to get in front of the eye of potential users and customers.
How to market your project nowadays?
@@ -34,27 +34,27 @@ The very first step to improving the odds of success is [idea validation](https:
### Build your Audience first and the project after.
Build your audience before you build your project. Spend your time connecting with potential users, learn from their needs and talk about their problems. This will help you market your project later on. Audience first, project second. There are numerous ways to build an audience. One of the simplest and easiest is to start with a personal or [project blog](https://startupnamecheck.com/blog/how-to-start-a-small-business-blog).
Build your audience before you build your project. Spend your time connecting with potential users, learning from their needs, and talking about their problems. This will help you market your project later on. The audience first, projects second. There are numerous ways to build an audience. One of the simplest and easiest is to start with a personal or [project blog](https://startupnamecheck.com/blog/how-to-start-a-small-business-blog).
Don't use Medium or a similar service - opt for a self-hosted blog as it allows you to build the blog freely to your needs and have decent links back to your project later on. Don't forget to add a newsletter. Newsletters are a key to reconnect in our world of short attention spans.
Don't use Medium or a similar service - opt for a self-hosted blog as it allows you to build the blog freely to your needs and have decent links back to your project later on. Don't forget to add a newsletter. Newsletters are a key to reconnecting in our world of short attention spans.
### Tool by Tool
Another approach is the "Tool by Tool" approach. I've first noticed this approach being used by Shopify. The team at Shopify are providing little tools such as a [logo generator](https://hatchful.shopify.com/) and release these tools free for anyone to use. This not just builds goodwill with people; it also allows Shopify to attract powerful backlinks to their projects. As developers we are in the perfect position to build such mini-tools. It boosts morale and drives attention at the same time.
Another approach is the "Tool by Tool" approach. I first noticed this approach being used by Shopify. The team at Shopify is providing little tools such as a [logo generator](https://hatchful.shopify.com/) and releasing these tools free for anyone to use. This not just builds goodwill with people; it also allows Shopify to attract powerful backlinks to their projects. As developers, we are in the perfect position to build such mini-tools. It boosts morale and drives attention at the same time.
Spend some time evaluating where your project or product will deliver value to the end-user. Look at options to split off small, independent tools. Build these and launch them before launching the whole product. This allows you to practice launching and promoting your part-projects at the same time. With each backlink to your part-projects you will enhance your ranking in Google. An example for a maker following this approach is [Kamban](https://kambanthemaker.com/) with [FlatGA](https://flatga.io/). He built FlatGA as phase one of a bigger project currently in development.
Spend some time evaluating where your project or product will deliver value to the end-user. Look at options to split off small, independent tools. Build these and launch them before launching the whole product. This allows you to practice launching and promoting your part-projects at the same time. With each backlink to your part-projects, you will enhance your ranking in Google. An example of a maker following this approach is [Kamban](https://kambanthemaker.com/) with [FlatGA](https://flatga.io/). He built FlatGA as phase one of a bigger project currently in development.
### Join a Maker community
While you are building your part-projects, don't forget to discuss the progress publicly. This helps to attract an audience around your work and makes the launches easier. You can use Twitter threads and Reddit posts to share updates. A maker community such as [makerlog](https://getmakerlog.com/) or [WIP.chat](https://wip.chat) can also extend your reach. These allow you to get instant feedback, keep yourself accountable and they will enhance your reach at the same time.
While you are building your part-projects, don't forget to discuss the progress publicly. This helps to attract an audience around your work and makes the launches easier. You can use Twitter threads and Reddit posts to share updates. A maker community such as [makerlog](https://getmakerlog.com/) or [WIP.chat](https://wip.chat) can also extend your reach. These allow you to get instant feedback, and keep yourself accountable and they will enhance your reach at the same time.
### Getting ready to Launch
Launching seems like this special moment when you release your project into the wide world. Often this moment is combined with high expectations and developers consider launching their project the key - if not only - part of their approach to marketing. While launching can help to attract some initial customers, it shouldn't be your only idea when it comes to marketing. You should also know that launching isn't a single event. You can (and should) launch again and again. Every time you launch you are increasing the chance to reach more and new customers. After the launch is before the launch.
Launching seems like this special moment when you release your project into the wide world. Often this moment is combined with high expectations and developers consider launching their project the key - if not only - part of their approach to marketing. While launching can help to attract some initial customers, it shouldn't be your only idea when it comes to marketing. You should also know that launching isn't a single event. You can (and should) launch again and again. Every time you launch you are increasing the chance to reach more new customers. After the launch is before the launch.
### Marketing Is an On-going Fight
Many developers plan to launch their product on a few sites and see where it takes their project from there on. This works well, if your product goes viral by luck. A much more sustainable approach is constantly working a little on it. Marketing is most effective, if done consistently. That holds true for blogging as well as most other forms of marketing. A simple approach to keep you on the path to market your project regularly is subscribing to a free [newsletter with small marketing opportunities](https://wheretopost.email). This way, you are regularly reminded and given bite-sized tasks to complete.
Many developers plan to launch their product on a few sites and see where it takes their project from there on. This works well if your product goes viral by luck. A much more sustainable approach is constantly working a little on it. Marketing is most effective if done consistently. That holds true for blogging as well as most other forms of marketing. A simple approach to keep you on the path to marketing your project regularly is subscribing to a free [newsletter with small marketing opportunities](https://wheretopost.email). This way, you are regularly reminded and given bite-sized tasks to complete.
Closing Words
@@ -66,4 +66,4 @@ I hope the article helped you to wrap your head around the idea that building si
About the author
----------------
[Peter Thaleikis](https://peterthaleikis.com/) a software engineer and business owner. He has been developing web applications since around 2000. Before he started his own software development company [Bring Your Own Ideas Ltd.](https://bringyourownideas.com/), he has been Lead Developer for multiple organisations.
[Peter Thaleikis](https://peterthaleikis.com/) a software engineer and business owner. He has been developing web applications since around 2000. Before he started his own software development company [Bring Your Own Ideas Ltd.](https://bringyourownideas.com/), he has been a Lead Developer for multiple organizations.
@@ -19,8 +19,8 @@ learnings, get feedbacks on their projects etc.
## How did you build roadmap.sh?
The basic version of the website has been built with [Next.js](https://github.com/zeit/next.js/), is opensource and can
be found on [github](https://github.com/kamranahmedse/roadmap.sh). It was hastily done to get it out in front of the
people and get people to start contributing so it might be rough on the edges, but that is where we need your help.
be found on [github](https://github.com/kamranahmedse/developer-roadmap). It was hastily done to get it out in front of the
people and get people to start contributing, so it might be rough on the edges, but that is where we need your help.
## How does it make money?
@@ -29,7 +29,7 @@ any intentions of monetization but as a good will, to help the people get out of
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
make enough money to pay for my rent, groceries, bills, travel expenses, etc but even if it doesn't it's likely I'll
continue growing the site however I can. My focus at the moment is not making money from it and just add content that
continue growing the site however I can. My focus at the moment is not making money from it and just adding content that
creates value for the people.
> Sponsor the efforts by [paying as little as 5$ per month](https://github.com/sponsors/kamranahmedse) or with [one time payment via paypal](https://paypal.me/kamranahmedse). Alternatively, reach out to me at [kamranahmed.se@gmail.com](mailto:kamranahmed.se@gmail.com).
@@ -37,7 +37,7 @@ creates value for the people.
## Can I contribute?
You definitely can, infact you are encouraged to do that. Even your minor contributions such as typo fixes count. The
source code of the website can be [found on Github](https://github.com/kamranahmedse/roadmap.sh). Your contributions can
source code of the website can be [found on Github](https://github.com/kamranahmedse/developer-roadmap). Your contributions can
be:
* Adding a new roadmap
@@ -51,7 +51,7 @@ be:
* Becoming a sponsor
Just make sure
to [follow the contribution guidelines](https://github.com/kamranahmedse/roadmap.sh/tree/master/contributing) when you
to [follow the contribution guidelines](https://github.com/kamranahmedse/developer-roadmap/tree/master/contributing.md) when you
This page is incomplete and is being worked upon. Please check back later or <a href='/signup'>subscribe</a> / <a href='https://twitter.com/kamranahmedse'>follow me on twitter</a> to get notified. Also, feel free to contribute by suggesting the resources in <a href='https://github.com/kamranahmedse/developer-roadmap'>the issues</a>.
</div>
# Become a Frontend Developer
Before I go ahead and list down the resources, please know that the roadmap and the list below is exhaustive and you don't need to know it all from the get go. For frontend development, all you need to get started with is learn some basic HTML, CSS and JavaScript and start working on projects; everything else you will learn along the way.
## Internet and how it works?
Get the basic understanding of internet, browsers, networks and other relevant knowledge.
* <BadgeLink badgeText='Read' href='/guides/what-is-internet'>What is Internet?</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=7_LPdttKXPc'>How the internet works in 5 minutes</BadgeLink>
* <BadgeLink badgeText='Read' href='https://kamranahmed.info/blog/2016/08/13/http-in-depth/'>What is HTTP and how it evolved?</BadgeLink>
* <BadgeLink badgeText='Read' href='https://blog.cloudflare.com/http3-the-past-present-and-future/'>HTTP/3: the past, the present, and the future</BadgeLink>
* <BadgeLink badgeText='Read' href='https://kinsta.com/blog/http3/'>What Is HTTP/3 – Lowdown on the Fast New UDP-Based Protocol</BadgeLink>
* <BadgeLink badgeText='Read' href='https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/'>How Browsers Work: Behind the scenes of modern web browsers</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=Rck3BALhI5c'>DNS as Fast As Possible</BadgeLink>
* <BadgeLink badgeText='Read' href='https://howdns.works/'>How DNS works?</BadgeLink>
* <BadgeLink badgeText='Read' href='/guides/dns-in-one-picture'>DNS in One Picture</BadgeLink>
## Learn HTML
HTML provides the skeleton of a webpage. Learn the basics of HTML; learn the basic tags, learn how to write semantic HTML, understand basic SEO, learn how to divide your pages into sections that will help you style them.
Please know that I have put multiple links for each resource. While you may pick something new while going through each, you don't need to go through all of them - if you feel like you have understood the concepts and are just repeating what you learnt, you may skip the resource and move to exercises section.
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=UB1O30fR-EE'>HTML Crash Course For Absolute Beginners</BadgeLink>
* <BadgeLink badgeText='Read' href='https://www.w3schools.com/html/default.asp'>W3Schools – HTML Tutorial</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=pQN-pnXPaVg'>HTML Full Course - Build a Website Tutorial</BadgeLink>
* <BadgeLink badgeText='Read' href='https://hacks.mozilla.org/2016/08/a-few-html-tips/'>A few HTML tips</BadgeLink>
* <BadgeLink badgeText='Read' href='https://hackernoon.com/six-tips-to-set-up-a-better-html-document-ud1033z3z'>Six tips to set up a better HTML document</BadgeLink>
* <BadgeLink badgeText='Read' href='https://developer.mozilla.org/en-US/docs/Web/HTML/Element'>HTML elements reference</BadgeLink>
## Style your pages with CSS
With the help of HTML, you create structure for your pages. CSS allows you to style your pages and make them pretty. If you take the analogy of human body, the skeleton would be the HTML, skin would be the CSS and muscles that help us move would be JavaScript - we will learn more about JavaScript in the coming sections.
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=yfoY53QXEnI'>CSS Crash Course For Absolute Beginners</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=Wm6CUkswsNw'>Build An HTML5 Website With A Responsive Layout</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://youtu.be/JJSoEo8JSnc?t=46'>Flexbox CSS In 20 Minutes</BadgeLink>
## Basics of JavaScript
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. In this section, you will learn the basics of JavaScript.
* <BadgeLink badgeText='Watch' href='https://youtu.be/hdI2bqOjy3c?t=2'>JavaScript Crash Course for Beginners</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://youtu.be/P7t13SGytRk?t=22'>Build a Netflix Landing Page Clone with HTML, CSS & JS</BadgeLink>
## Version Control Systems and Git
Version control systems allow you to track changes to your codebase/files over time. They allow you to go back to some previous version of the codebase without any issues. Also, they help in collaborating with people working on the same code – if you’ve ever collaborated with other people on a project, you might already know the frustration of copying and merging the changes from someone else into your codebase; version control systems allow you to get rid of this issue.
In this section, you will learn what version control systems are and understand how to use Git which is the de facto VCS.
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=zbKdDsNNOhg'>Version Control System Introduction</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=SWYqp7iY_Tc'>Git & GitHub Crash Course For Beginners</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://youtu.be/Y9XZQO1n_7c?t=21'>Learn Git in 20 Minutes</BadgeLink>
Now that you know what git is go ahead and create an account on [GitHub](https://github.com) and push everything that you do from now on to GitHub so that you can get the practice and get it reviewed from the other people in the community.
## Modern JavaScript
In this section you will learn how to use package managers and get started with the "modern JavaScript".
* <BadgeLink badgeText='Read' href='https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70'>Modern JavaScript for Dinosaurs (Don't worry if you don't understand some parts of it)</BadgeLink>
* <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=8Rmj5UY5mJk'>What is NPM and how to use it</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.vox.com/2014/6/16/18076282/the-internet'>The Internet Explained</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm'>How Does the Internet Work?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://developer.mozilla.org/en-US/docs/Learn/Common_questions/How_does_the_Internet_work'>How Does the Internet Work? MDN Docs</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='/guides/what-is-internet'>Introduction to Internet</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=TNQsmPf24go'>How does the Internet work?</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=7_LPdttKXPc'>How the Internet Works in 5 Minutes</BadgeLink>
HTTP is the `TCP/IP` based application layer communication protocol which standardizes how the client and server communicate with each other. HTTP follows a classical "Client-Server model" with a client opening a connection request, then waiting until it receives a response. HTTP is a stateless protocol, that means that the server does not keep any data (state) between two requests.
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/'>What is HTTP?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://howhttps.works'>How HTTPS Works ...in a comic!</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview'>An overview of HTTP</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://kamranahmed.info/blog/2016/08/13/http-in-depth'>Journey to HTTP/2</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/'>HTTP/3 From A To Z: Core Concepts</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://thenewstack.io/http-3-is-now-a-standard-why-use-it-and-how-to-get-started/'>HTTP/3 Is Now a Standard: Why Use It and How to Get Started</BadgeLink>
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.
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.browserstack.com/guide/browser-rendering-engine'>Role of Rendering Engine in Browsers</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work'>Populating the Page: How Browsers Work</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=WjDrMKZWCt0'>How Do Web Browsers Work?</BadgeLink>
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.
A domain name is a unique, easy-to-remember address used to access websites, such as ‘google.com’, and ‘facebook.com’. Users can connect to websites using domain names thanks to the Domain Name System (DNS).
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_domain_name'>What is a Domain Name?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.cloudflare.com/en-gb/learning/dns/glossary/what-is-a-domain-name/'>What is a Domain Name? | Domain name vs. URL</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=Y4cRx19nhJk'>A Beginners Guide to How Domain Names Work</BadgeLink>
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.
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.vox.com/2014/6/16/18076282/the-internet'>The Internet Explained</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm'>How Does the Internet Work?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='/guides/what-is-internet'>Introduction to Internet</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://internetfundamentals.com'>Learn How the Web Works</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=x3c1ih2NJEg'>How does the Internet work?</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=7_LPdttKXPc'>How the Internet Works in 5 Minutes</BadgeLink>
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.
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started'>MDN Docs: Getting Started with HTML </BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=pQN-pnXPaVg'>HTML Full Course - Build a Website Tutorial</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=qz0aGYrrlhU'>HTML Tutorial for Beginners: HTML Crash Course</BadgeLink>
Semantic element clearly describes its meaning to both the browser and the developer. In HTML, semantic element are the type of elements that can be used to define different parts of a web page such as `<form>`, `<table>`, `<article>`, `<header>`, `<footer>`, etc.
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://hackernoon.com/how-to-write-semantic-html-dkq3ulo'>How To Write Semantic HTML</BadgeLink>
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://www.freecodecamp.org/news/html-best-practices/'>HTML Best Practices – How to Build a Better HTML-Based Website</BadgeLink>
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://blog.hubspot.com/website/semantic-html'>Semantic HTML: What It Is and How It Improves Your Site</BadgeLink>
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.
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation'>MDN Web Docs: Client-side form validation</BadgeLink>
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://web.dev/learn/forms/'>Learn Forms by web.dev</BadgeLink>
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://www.w3schools.com/js/js_validation.asp'>W3Schools: JavaScript Form Validation</BadgeLink>
Web accessibility means that websites, tools, and technologies are designed and developed in such a way that people with disabilities can use them easily.
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://www.w3.org/WAI/tips/developing/'>Developing for Web Accessibility by W3C WAI</BadgeLink>
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://web.dev/accessibility'>Accessibility for Developers by Google</BadgeLink>
<BadgeLink badgeText='Course' colorScheme='green' href='https://www.udacity.com/course/web-accessibility--ud891'>Web Accessibility by Udacity</BadgeLink>
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://thenewstack.io/accessibility-as-an-essential-part-of-the-inclusive-developer-experience/'>Accessibility as an Essential Part of the Inclusive Developer Experience</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://neilpatel.com/blog/seo-developers/'>8 Must-Know SEO Best Practices For Developers</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://medium.com/welldone-software/seo-for-developers-a-quick-overview-5b5b7ce34679'>SEO for Developers</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=xsVTqzratPs'>Complete SEO Course for Beginners</BadgeLink>
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.
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.
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.freecodecamp.org/learn/responsive-web-design/'>freeCodeCamp — Responsive Web Design</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://learn.shayhowe.com/html-css/building-your-first-web-page/'>Learn to Code HTML & CSS</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=yfoY53QXEnI'>CSS Crash Course For Absolute Beginners</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=D-h8L5hgW-w'>HTML and CSS Tutorial</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=FqmB-Zj2-PA'>CSS Masterclass - Tutorial & Course for Beginners</BadgeLink>
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:
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://flexboxfroggy.com/'>Learn and Practice Flexbox</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://cssgridgarden.com/'>Game for learning CSS Grid</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://css-tricks.com/all-about-floats/'>All about Floats</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://css-tricks.com/absolute-relative-fixed-positioining-how-do-they-differ/'>Positioning Types: How Do They Differ?</BadgeLink>
<BadgeLink badgeText='Watch' href='https://scrimba.com/learn/cssgrid'>Learn CSS Grid for free</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://thenewstack.io/get-grid-last-css-grid-template-markup/'>Get on the Grid at Last with the CSS Grid Layout Module</BadgeLink>
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.
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://kinsta.com/blog/responsive-web-design/'>The Beginner’s Guide to Responsive Web Design</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://webflow.com/blog/responsive-web-design'>The guide to responsive web design in 2022</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=VQraviuwbzU'>5 simple tips to making responsive layouts the easy way</BadgeLink>
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=srvUrASNj0s'>Introduction To Responsive Web Design</BadgeLink>
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.
<BadgeLink badgeText='Read' colorScheme='yellow' href='https://cssreference.io/'>cssreference.io: All CSS properties at a glance</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://web.dev/learn/css/'>Web.dev by Google — Learn CSS</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.freecodecamp.org/learn/responsive-web-design/'>freeCodeCamp — Responsive Web Design</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://learn.shayhowe.com/html-css/building-your-first-web-page/'>Learn to Code HTML & CSS</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.joshwcomeau.com/'>Joshw Comeau's CSS Hack Blog Posts</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://100dayscss.com'>100 Days CSS Challenge</BadgeLink>
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.