<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: abi</title>
    <description>The latest articles on DEV Community by abi (@abilashs003).</description>
    <link>https://dev.to/abilashs003</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F398265%2F38afd7cf-a85e-450d-becb-8d3fc14ebb7c.jpeg</url>
      <title>DEV Community: abi</title>
      <link>https://dev.to/abilashs003</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abilashs003"/>
    <language>en</language>
    <item>
      <title>GIT Under the Hood</title>
      <dc:creator>abi</dc:creator>
      <pubDate>Mon, 03 Oct 2022 16:35:25 +0000</pubDate>
      <link>https://dev.to/abilashs003/git-under-the-hood-1keh</link>
      <guid>https://dev.to/abilashs003/git-under-the-hood-1keh</guid>
      <description>&lt;p&gt;# Git Under the hood&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr16ssk42qvpbj5oef15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr16ssk42qvpbj5oef15.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;strong&gt;Git is modern distributed version control system helps developers or anyone who want to keep track of changes in their file system” We can name it as a timeline of our project from beginning to end.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As an software engineers lot of us use Git ,only few know the exact internals or what happens under the hood.&lt;/p&gt;

&lt;p&gt;what happens internally when you do a file change and commit it?&lt;/p&gt;

&lt;p&gt;How is git tracking all the changes occurred for the file?&lt;/p&gt;

&lt;p&gt;Sometime you may run into issues which you won’t know how to resolve without understanding how git works in the backend. &lt;/p&gt;

&lt;p&gt;In this article, I am sharing a deep dive understanding on How Git works under the hood by taking simple examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note : This article is to understand how git works using low level commands and what happens behind the scenes. It is not a guide to work with Git&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Initialize a Git Repository&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lets start with initializing a Git repository using &lt;strong&gt;git init&lt;/strong&gt;  command.&lt;/p&gt;

&lt;p&gt;It creates a hidden folder called &lt;strong&gt;.git&lt;/strong&gt; which contains different files and folders inside&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwomzermpp1ss6ixiwsvh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwomzermpp1ss6ixiwsvh.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This folder contains all information and configuration needed for git to version control. Here we are mainly concentrated on objects folder where this will contain the tracking information of our file system.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Git 3 states or repository states&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdtm1v0a8ugrrjzspjk5f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdtm1v0a8ugrrjzspjk5f.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Working State -&lt;/strong&gt; This is when you add, remove or modify something in the file. Git will notice the change but you will not formerly inform Git to save the changes. In traditional way these are “&lt;strong&gt;Untracked/ Not Staged Changes&lt;/strong&gt;”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Staging State -&lt;/strong&gt;  This is when you inform Git of the change and tell Git to take note of that change. Commonly Known as &lt;strong&gt;Staging area.&lt;/strong&gt; Staging changes can be done using &lt;strong&gt;git add&lt;/strong&gt; command. Modification of file can be done even after staging it, which lets you see the file both in Working state and staged state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Committed Stage -&lt;/strong&gt; This is the stage where Git has saved your Working state changes in .git folder in the &lt;strong&gt;form of  git objects&lt;/strong&gt;. In Traditional way It is achieved using &lt;strong&gt;git commit&lt;/strong&gt; command. &lt;/p&gt;

&lt;p&gt;Here lets look into the Git Internals/ Behind the scenes How Git stores the changes&lt;/p&gt;

&lt;p&gt;Git  is a content-addressable file system or a simple key value data file system. That means If you insert any kind of content into the Git It will return you hand you back with a &lt;strong&gt;unique key&lt;/strong&gt; so you can use that later to retrieve the content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unique Key&lt;/strong&gt; is nothing but a Secure hash algorithm (SHA-1), which is a cryptographic hash function that takes an input and produces a &lt;strong&gt;&lt;em&gt;160-bit (20-byte)&lt;/em&gt;&lt;/strong&gt; hash value typically rendered  as a hexadecimal which is 40 digits long*&lt;strong&gt;.&lt;/strong&gt;* &lt;/p&gt;

&lt;p&gt;Using this Hash function we can reference any file content, commits etc.&lt;/p&gt;

&lt;p&gt;A single space change in content will lead to different Hash value/ Unique key generation &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfnyeayz5x44zig8gw94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfnyeayz5x44zig8gw94.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each Hash value generated will be linked with the git objects in Git to understand the changes made by developer in working stage to save it in committed stage.&lt;/p&gt;

&lt;p&gt;Now its time for Git Objects. Git File system  uses 4 types of git objects. These are the only object types required for git to save the necessary data&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blob&lt;/strong&gt; -  any type of files it may be photo, video or any file extensions  is stored as a blob&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tree&lt;/strong&gt; - Information of Directories is stores as a Tree. Tree can contain a set of Blobs and even it can contain set of trees with blobs. Tree is representation of folder/directory in Git&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit&lt;/strong&gt; - With the help of commit object type, You can save different versions of our project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Annotated Tag&lt;/strong&gt; - Its  actually persistent text pointer to specific commit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lets create a sample file named &lt;strong&gt;gitsample.txt.&lt;/strong&gt; lets stage and commit it and see how the file is stored in .git folder as an object types&lt;/p&gt;

&lt;p&gt;According to above explanation there will be three object types created when we commit the file.&lt;/p&gt;

&lt;p&gt;Blob to store the content, tree which has information of the latest blob which was created when file is created/Changed and next is Commit object type which has information of the latest tree created&lt;/p&gt;

&lt;p&gt;Hierarchy can be assumed like this for object types&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffot6nyksotrtbacofhap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffot6nyksotrtbacofhap.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps to reproduce the above scenario&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a file named gitsample.txt inside the git repository. Save “Hello World” inside the file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkcihw629dm3hq92dwsr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkcihw629dm3hq92dwsr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa4l1swmq4v7rmt6pq89.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa4l1swmq4v7rmt6pq89.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;strong&gt;git status&lt;/strong&gt; command in git bash pointing to the git repo folder. As we previously discussed the file changed/ created will be in the Working state or also known as Untracked changes so now here &lt;strong&gt;gitsample.txt&lt;/strong&gt;  will be shown as an untracked change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w2cvem0asg07l7bcg2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w2cvem0asg07l7bcg2y.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next step is to move file from Working state to Staging state by running command &lt;strong&gt;git add .&lt;/strong&gt; Run git status after this command. &lt;strong&gt;gitsample.txt&lt;/strong&gt; will be moved to Staging state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59avr59iqx3tkspme222.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59avr59iqx3tkspme222.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One more thing to observe i.e. in .git/objects folder new blob object will be created with a unique key/ SHA 1 key as a file name. First 2 numbers of hash key will be used for a folder name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpqhc6ye0vwln18gk806.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpqhc6ye0vwln18gk806.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgx0me52ry6p5x52udvhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgx0me52ry6p5x52udvhn.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Combining both folder name and file name will be the hash key of gitsample.txt file. so the hash key will be &lt;strong&gt;3ee2d77fee2bc1ac806a945df84ad530a5de6fd8&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To ensure this run a git low level command &lt;strong&gt;git cat-file -p .&lt;/strong&gt;  This should retrieve the content “Hello World” used in gitsample.txt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfzwdnecs7vwp5zwalqx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfzwdnecs7vwp5zwalqx.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next from Staging state it should be moved to Committed State,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To Commit we have to run the command &lt;strong&gt;git commit  -m “Initial Commit”.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzxgdrfy7dqv7d1211w8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzxgdrfy7dqv7d1211w8.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When changes are moved to committed state it creates other 2 objects Tree and commit object.

&lt;ul&gt;
&lt;li&gt;Tree will also have its own new Hash key generated and It will be holding the file name and hash key of the blob object created during staging&lt;/li&gt;
&lt;li&gt;Commit will also have its own Hash key generated and it will be holding the the tree objects hash key which newly got created and the commit message.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltkya8bs036einrxn8za.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltkya8bs036einrxn8za.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To ensure these are the tree and commit objects run the low level command &lt;strong&gt;git cat-file&lt;/strong&gt; using &lt;strong&gt;-t&lt;/strong&gt; extension and respective hash keys. It will show the type of the object&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2sgr5u8vea2ie1a84dhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2sgr5u8vea2ie1a84dhv.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yf4nypo1jzcxxsu7ms9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yf4nypo1jzcxxsu7ms9.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With these object changes in .git/objects folder, HEAD file in .git/refs folder will have a file naming  branch name &lt;strong&gt;master&lt;/strong&gt; with latest commit hash key inside it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What happens when there is a change in same file and its committed?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Again the same process repeats which will create new blob, commit and tree with their own hash keys.&lt;/li&gt;
&lt;li&gt;Commit will hold information of previous commit key.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzxu1uby6k9q5d3kkya5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzxu1uby6k9q5d3kkya5y.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What happens when New Branch Created and checked out?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;.git/refs/HEAD folder will have another file with branch name and latest commit hash key derived from the parent branch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxuriv56nxilc1vb0z0jm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxuriv56nxilc1vb0z0jm.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HEAD in .git folder will point to that branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yheqosyo6v1g7xrl4of.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yheqosyo6v1g7xrl4of.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Wrapping Up&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I hope this article gives you a clear understanding on how Git works on back scenes. And hopefully you will be aware of most crucial parts of the git after reading this article.&lt;/p&gt;

&lt;p&gt;If you have reached this point, thanks for reading. I am Abilash S, You can check my latest posts regarding technology in these platforms. Feel Free to connect in any of these platforms&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UCkEdJb21tHsWEYUGe1-VrsQ" rel="noopener noreferrer"&gt;CodeHunt Channel Youtube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://abiaradhya.medium.com/" rel="noopener noreferrer"&gt;Abi Aradhya - Medium&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/abiaradhya003" rel="noopener noreferrer"&gt;JavaScript is not available.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>programming</category>
      <category>devops</category>
    </item>
    <item>
      <title>Vulnerabilities need to checked while deploying a node or any web application</title>
      <dc:creator>abi</dc:creator>
      <pubDate>Wed, 13 Oct 2021 08:05:04 +0000</pubDate>
      <link>https://dev.to/abilashs003/vulnerabilities-need-to-checked-while-deploying-a-node-or-any-web-application-1n66</link>
      <guid>https://dev.to/abilashs003/vulnerabilities-need-to-checked-while-deploying-a-node-or-any-web-application-1n66</guid>
      <description>&lt;h3&gt;
  
  
  Forced Browser Vulnerability
&lt;/h3&gt;

&lt;p&gt;Most applications require authentication for gaining access to restricted information or perform tasks. If adequate security is not in place, malicious users can circumvent the authentication process and gain access to these pages by simply skipping the login page and directly calling an internal page that is supposed to be accessed only after authentication has been performed. By directly browsing to the below listed pages without logging in, we are able to access and view its content without logging into the application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement session management to ensure that only users logged into the system and with
appropriate access levels are allowed access to the file.&lt;/li&gt;
&lt;li&gt;Check for the AUTH token to ensure only proper users logged into the system.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;🤫 Wanna know deep dive JavaScript stuff on modern web applications and how are they maintained in large environments🤯.  Check out below link for JavaScript related articles&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://abiaradhya.medium.com"&gt;Abi Aradhya - Medium&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bypass IP restrictions
&lt;/h3&gt;

&lt;p&gt;Some web applications implement IP-based protection rules that restrict users from accessing particular pages of an application if their IP addresses are not in the allowed list. These rules are used as an access control mechanism. &lt;/p&gt;

&lt;p&gt;In here, we are able to bypass the whitelisted IP by X-Forwarded-For header&lt;/p&gt;

&lt;p&gt;Attackers will use VPN and get different IP and then also they will get their response back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X-Forwarded-For HTTP header should not be used for any Access Control List (ACL) checks
because it can be spoofed by attackers. Use the real IP address for this type of restrictions.&lt;/li&gt;
&lt;li&gt;Add IP validation in the backend code if IP whitelisted list is maintained.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;In-secure HTTP Method is Enabled&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;HTTP Methods such as TRACK, TRACE, DEBUG, PUT, DELETE, OPTIONS are intended for debugging or testing purposes. Production environments that allow these HTTP methods can be vulnerable to a range of attacks that are facilitated by these HTTP methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Possibly disable the above descripted HTTP methods in production&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SSL not enforced
&lt;/h3&gt;

&lt;p&gt;SSL is an encryption protocol that is based on a chain of trust between users, browsers, and certificate authorities. For compatibility purposes, browsers and SSL certificates support a wide range of encryption algorithms.&lt;/p&gt;

&lt;p&gt;Using a non-SSL page for transmitting sensitive parameter makes it vulnerable to network sniffing as data is sent in cleartext. An attacker can thus obtain users credentials and in-turn compromises his account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is recommended, to enforce the application to use SSL for every request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Server Remote Version or Server Name Disclosure
&lt;/h3&gt;

&lt;p&gt;Lets say I am hosting an backend app in Nginx . As we know NGINX is a free, open-source, high performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server. NGINX is known for its high performance, stability, rich feature set, simple configuration, and low resource consumption. An attacker can search for specific security vulnerabilities for the version of NGINX identified within the&lt;br&gt;
SERVER header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Configure your web server to prevent information leakage from the SERVER header of its HTTP response&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Cross Origin Resource Sharing misconfigured&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Cross-origin resource sharing (CORS) is a mechanism that allows web page to make XMLHttpRequests to another domain. CORS defines a way in which the browser and the server can interact to determine whether or not to allow the cross-origin request. In this case, a web client can put any value into the Origin request HTTP header in&lt;br&gt;
order to force web application to provide it the target resource content. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An Access-Control-Allow-Origin header should not allow with *(wildcard) that allows all&lt;br&gt;
domains&lt;/p&gt;

&lt;h3&gt;
  
  
  Several Security Headers
&lt;/h3&gt;

&lt;p&gt;When a user tries to access a page, his browser requests it from a web server. The server then responds with the content along with appropriate HTTP Response Headers which contain meta data, status error codes, cache rules and so on. A big subset of those headers are security headers which instruct your browser exactly how to behave when it handles your websites content and data. HTTP security headers are a fundamental part of website security. Upon implementation, they protect you against the types of attacks that your site is most likely to come across. These headers protect against XSS, code injection, clickjacking, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP Strict-Transport-Security&lt;/strong&gt; : The HTTP Strict Transport Security (HSTS) header is a mechanism that web sites have to communicate to the web browsers that all traffic exchanged with a given domain must always be sent over https, this will help protect&lt;br&gt;
the information from being passed over unencrypted requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content-Security-Policy&lt;/strong&gt; : The content-security-policy HTTP header provides an additional layer of security. The HTTP Content Security Policy response header gives website admins a sense of control by giving them the authority to restrict the resources a user is allowed to load within site. In other words, you can whitelist your sites content sources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X-XSS-Protection&lt;/strong&gt; : This header is used to configure the built in reflective XSS protection found in Internet Explorer, Chrome and Safari (Webkit). Valid settings for the header are 0, which disables the protection, 1 which enables the protection and 1; mode=block which tells the browser to block the response if it detects an attack rather&lt;br&gt;
than sanitizing the script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X-Frame-Options&lt;/strong&gt;: The X-Frame-Options header (RFC), or XFO header, protects your visitors against clickjacking attacks. An attacker can load up an iframe on their site and set your site as the source, it's quite easy: . Using some crafty CSS they can hide your site in the background and create some genuine looking overlays. When your visitors click on what they think is a harmless link, they're actually clicking on links on your website in the background.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;🤫 Wanna know deep dive JavaScript stuff on modern web applications and how are they maintained in large environments🤯.  Check out below link for JavaScript related articles and if you really liked it clap and subscribe.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://abiaradhya.medium.com"&gt;Abi Aradhya - Medium&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can catch me up on other platforms too&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://dev.to/abilashs003"&gt;abi - DEV Community Profile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codewithabi.hashnode.dev/"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instagram.com/abi_aradhya/"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>Angular Dependency Injection(Custom Provider)</title>
      <dc:creator>abi</dc:creator>
      <pubDate>Sat, 19 Jun 2021 08:19:36 +0000</pubDate>
      <link>https://dev.to/abilashs003/angular-dependecy-injection-custom-provider-1l3n</link>
      <guid>https://dev.to/abilashs003/angular-dependecy-injection-custom-provider-1l3n</guid>
      <description>&lt;h2&gt;
  
  
  Angular Dependency Injection
&lt;/h2&gt;

&lt;p&gt;Before discussing dependency injection lets understand what are dependencies first&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependencies are services or objects that the class needs to perform its function&lt;/li&gt;
&lt;li&gt;Dependency Injection is a design pattern in which a class/ component request dependencies from external sources rather than creating them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Angular, Component or services are injected with dependencies via the constructor arguments.  Angular DI's framework will provide dependencies calling the factory function to instantiate the dependencies. &lt;/p&gt;

&lt;p&gt;How Services are exposed to Inject?&lt;/p&gt;

&lt;p&gt;Its using @Injectable decorator and dependency injection provider which is declared in service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fympjgdcjd6zyx22z5s4v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fympjgdcjd6zyx22z5s4v.png" alt="Untitled"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above service named AngProvidedDepService the if provided In is removed then you will get following error&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmppdw8pjmbis8bridnbj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmppdw8pjmbis8bridnbj.png" alt="Untitled 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No provider for "service_name". This is because Angular not able to find any provider which will provide AngProvidedDepService. &lt;/p&gt;

&lt;h2&gt;
  
  
  Lets create our own Custom Provider
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provider is simply a function which needs to be passed to Angular dependency Injection system. System will call this function and this function will provide the dependency its needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In our case we have to return AngProvideDepService which needs to provide its own dependencies also as shown below inside the function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03kjbw7yd0nmge2f3710.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03kjbw7yd0nmge2f3710.png" alt="Untitled 2"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We created a Custom service provider which will return new AngProvidedDepService. Here comes one more question how will you provide dependencies to the provider that is also through Angular Dependency Injection system.&lt;/p&gt;

&lt;p&gt;Next step is to plug this provider into Angular Dependency Injection system. There are multiple ways doing that lets provide to component inside Component decorator&lt;/p&gt;

&lt;p&gt;We will use providers property and pass it an configuration object. In this Configuration object we will telling exactly what we are providing using a unique name to service via Injection Token.&lt;/p&gt;

&lt;p&gt;Lets create one Unique Injection token for Angular Provided service and then pass it to the providers property available in Component annotation&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frovvbuamc97f4dxvkeh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frovvbuamc97f4dxvkeh8.png" alt="Untitled 3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lets provide Configuration object to provider&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3n9qarfbt8tl8z391tz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3n9qarfbt8tl8z391tz.png" alt="Untitled 4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provide will have unique token for the service i.e. Injection token which is created&lt;/li&gt;
&lt;li&gt;use factory will be provided with custom provider created&lt;/li&gt;
&lt;li&gt;deps will have the dependencies which is needed for AngDepProvidedService to run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have provided all these to Angular dependency Injection system so that whenever any component use this via constructor Service will be provided&lt;/p&gt;

&lt;p&gt;Lets inject it in one of the compoent using inject decorator&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmvaylvvmp0s767lv4f3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmvaylvvmp0s767lv4f3.png" alt="Untitled 5"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Summarize :&lt;/p&gt;

&lt;p&gt;Angular Dependency Injection system will provide services or objects which were injected into components via constructor. Each Dependency has its own Injection token and provider function which will provide the instantiation. To go deeper into we have created our custom provider and Custom injection token and updated into one of the component.&lt;/p&gt;

&lt;p&gt;Thanks for Reading...&lt;/p&gt;

&lt;p&gt;If you liked this reading follow me on this for technical blogs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://abiaradhya.medium.com/" rel="noopener noreferrer"&gt;Abi Aradhya - Medium&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/abilashs003"&gt;abi - DEV Community Profile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/abilash-s-aa305997/" rel="noopener noreferrer"&gt;Abilash S - Software Developer - Siemens Healthineers | LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;follow me on insta for personal profile &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instagram.com/abi_aradhya/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For Subscribing my next upcoming articles click here&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codewithabi.hashnode.dev/" rel="noopener noreferrer"&gt;CodeWithAbi&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>RxJS CheatSheet</title>
      <dc:creator>abi</dc:creator>
      <pubDate>Thu, 31 Dec 2020 18:21:00 +0000</pubDate>
      <link>https://dev.to/abilashs003/rxjs-cheatsheet-15h9</link>
      <guid>https://dev.to/abilashs003/rxjs-cheatsheet-15h9</guid>
      <description>&lt;h2&gt;
  
  
  Understanding RxJs - What are streams?
&lt;/h2&gt;

&lt;p&gt;core notion of RxJs is stream of values, before understanding observables, first Stream of values should be understood. Lets take an example of an click event triggered&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438715924%2FnlGwc9W7E.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438715924%2FnlGwc9W7E.png" alt="Untitled.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It emits a stream of multiple values on every click.&lt;/p&gt;

&lt;p&gt;Its the same for setInterval() which will be calling the function inside for every 'x' seconds. This also emits a stream of values.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438702590%2FDiSFKIAyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438702590%2FDiSFKIAyv.png" alt="Untitled 1.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;so you guys may be confused why am i explaining this is RxJs Course let me get into it.🙂&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is RxJs?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If we wish to trigger set interval after every 3 seconds of a mouse click event then we need to nest 3 stream of values/callbacks which sometimes leads to &lt;strong&gt;callback hell.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438690196%2FEC7DgJVw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438690196%2FEC7DgJVw3.png" alt="Untitled 2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If mouse double clicked here then two streams are emitted. Here we ne&lt;/p&gt;

&lt;p&gt;ed a multiple stream of values to be connected and respond to events, http requests , timeouts and intervals.&lt;/p&gt;

&lt;p&gt;Instead of using native callbacks, &lt;strong&gt;RxJs library is introduced to combine multiple stream of values in maintainable way.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Whats is RxJs Observable?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To define a stream which emits values Observable is used in RxJs or in simple terms Observables are the definition/blueprint of stream of values.&lt;/p&gt;

&lt;p&gt;Below interval$ of type Observable is defined which will emit numbers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438679447%2FH0SdyRCIg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438679447%2FH0SdyRCIg.png" alt="Untitled 3.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;if Observable need to emit stream of values then we should subscribe it like how we subscribe to Netflix/amazon prime😉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438668884%2FbZpXf4Ymh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438668884%2FbZpXf4Ymh.png" alt="Untitled 4.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;interval()&lt;/strong&gt; is a function from RxJs library which emits series of number values.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3 Core RxJs Concepts - Error, Completion and Subscriptions&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;subscription : callback which emits the stream of values&lt;/li&gt;
&lt;li&gt;error : when the stream of values combined didn't work properly and throws an error than error callback is called.&lt;/li&gt;
&lt;li&gt;complete : completion callback is called when stream of values are completely emitted successfully.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: Both error and completion cannot happen, either one of those will be triggered based on the stream of values emitted successfully or failed.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Observables under the hood&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;lets take an example by calling an api using fetch api&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438655720%2FyMAQZLre-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438655720%2FyMAQZLre-.png" alt="Untitled 5.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;fetch is a promise, it is very different from observables it gets executed when defined.&lt;/p&gt;

&lt;p&gt;Lets create a &lt;strong&gt;custom observable&lt;/strong&gt; and include this above promise request inside that observable.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="nx"&gt;Observable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// this create function is used to create custom observable&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;fetch function getting courses is included into the create function of an observable and fetch function takes one parameter known as &lt;strong&gt;observer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observer&lt;/strong&gt; is the one which allows to emit stream of values, or throw error and also trigger when function gets completed and it is kept private. Its is defined inside observable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observable&lt;/strong&gt; doesn't allow values to emit on its behalf we can only subscribe and get stream of values.&lt;/p&gt;

&lt;p&gt;Observer functions to emit, complete and throwing error.&lt;/p&gt;

&lt;p&gt;next():&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// function which emits values&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;complete() :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;complete&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;//function which emits complete value&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;error():&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Custom Http Observable with the promise function fetch code is below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438640296%2FnKvzKPfTa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438640296%2FnKvzKPfTa.png" alt="Untitled 6.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is the use of converting promise into an Observable ?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As we converted a promise into a Observable which means a stream of values. this stream can be combined with many Rxjs operators which parallelly states that it can combine many streams like set interval, set timeout and other apis with HTTP Observable.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;RxJs Operator - Map operator&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Operator is a way of deriving one Observable from another observable&lt;/p&gt;

&lt;p&gt;Map operator takes an input observable and converts into to an another Observable based on the operator specified.&lt;/p&gt;

&lt;p&gt;Passing a chain or stream of values to map function is done through pipe function.&lt;/p&gt;

&lt;p&gt;Below code converts the payload data to array using map functionality&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438625995%2FZpqcXJqGo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438625995%2FZpqcXJqGo.png" alt="Untitled 7.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Building components with RxJs - Imperative design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the above example lets say we need to categorize the courses into two categories beginner and advanced so that we will declare two courses array and filter inside the subscribe method.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438613295%2F_RayRWhgf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438613295%2F_RayRWhgf.png" alt="Untitled 8.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too much of logic inside the subscribe method doesn't help good in scaling complexity which leads to nested subscribe call and reach callback hell. Its not recommended to use nested subscribe also.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Above is the imperative design or approach to filter categories inside the subscribe method.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Building components with RxJs - Reactive design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Create 2 observables Beginner and advanced ,which is a definition and its not directly mutable and then use map operator to filter. this wont create nested subscriptions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438600827%2FXmG-UtxGd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438600827%2FXmG-UtxGd.png" alt="Untitled 9.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438589173%2FIwW7LDZVk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438589173%2FIwW7LDZVk.png" alt="Untitled 10.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To display it in Html using async pipe&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;async :&lt;/strong&gt; Angular pipe which directly subscribe to observable and emits stream of values directly to html&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438575423%2FCAVperYGC.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609438575423%2FCAVperYGC.png" alt="Untitled 11.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;sharereplay and tap operator :&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the above example we have defined two observables (beginner and advanced) and these observables are each subscribed using async pipe . here we have two different subscriptions derived from same http$ Observable which leads to two http calls to backend which is not a feasible scenario.&lt;/p&gt;

&lt;p&gt;To avoid multiple http requests we will use new operator sharereplay which shares the existing stream of data to all subscriptions instead of creating new.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436578586%2FyoQX1vgUs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436578586%2FyoQX1vgUs.png" alt="Untitled 12.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If any logs to be produced while stream of values are emitted then tap() operator is used which will produce side effects while performing observable operations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436659586%2F4XaSouSj8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436659586%2F4XaSouSj8.png" alt="Untitled 13.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Observable Concatenation - InDepth explanation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;lets define three observable which emits series of numbers if subscribed . We will concat them sequentially&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437093484%2FBiNFA7l2H.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437093484%2FBiNFA7l2H.png" alt="Untitled 14.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;of() :&lt;/strong&gt; this function is helpful for defining al*&lt;em&gt;l type of observables&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;concat()&lt;/strong&gt; : concat function which combines stream of values will subscribe internally to the above observables and concat them only when the successor subscription completes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437109392%2F7YX2C3_gIF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437109392%2F7YX2C3_gIF.png" alt="Untitled 15.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below example concatinates 3 observables sequentially. If Observable source2$ gets concatinated with source1$ only when the source1$ stops emiting values.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437077199%2F4KrHI4h96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437077199%2F4KrHI4h96.png" alt="Untitled 16.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Form Draft Pre-Save Example and the RxJs Filter Operator&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let say we have one form which has some form fields as below example and user needs to auto save the draft.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436631075%2FIeui16Skh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436631075%2FIeui16Skh.png" alt="Untitled 17.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;angular provides a form which is observable&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437065003%2FRyzTxEh3c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437065003%2FRyzTxEh3c.png" alt="Untitled 18.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;form has a link to value observable which can connect to other observables.&lt;/p&gt;

&lt;p&gt;Now the form field as we know its a stream of values it should be filtered and we need to get only the valid form data using &lt;strong&gt;filter()&lt;/strong&gt; RxJs operator. this will filter out the valid forms.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437053124%2FwyrT19afy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437053124%2FwyrT19afy.png" alt="Untitled 19.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the first stream of values which should be combined or concatenated with second stream which will call backend api and save the draft every time any changes occur. here is the code which will combine above form Observable changes with the Http request observable. This is the practical example for Observable concatenation&lt;/p&gt;

&lt;p&gt;first we will define a Observable which calls the Http put request to save the draft form and put inside a function like below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437039419%2FrC0Xn63eC.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437039419%2FrC0Xn63eC.png" alt="Untitled 20.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;savecourse is a method which returns observable which takes form 'changes' as an input and call an http put request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;fromPromise() :&lt;/strong&gt; function of rxjs which converts promise call into an observable.&lt;/p&gt;

&lt;p&gt;after defining an second stream of observable both stream of observables should be concatenated via concatMap operator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;concatMap :&lt;/strong&gt; Rxjs operator which takes an stream of source observable and combines with the derived observable. Second input value of source observable is concatenated with derived observable only when first value of source observable completes its operation with derived observable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437025984%2FxPAt_r6-u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437025984%2FxPAt_r6-u.png" alt="Untitled 21.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here whenever the form data is edited many times, many http requests will be triggered continuously in parallel. It should be avoided. Http request should be called only previous request is completed so to achieve this concatMap is used as below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437011550%2FBgVA-TlO1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437011550%2FBgVA-TlO1.png" alt="Untitled 22.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Understanding the merge Observable combination Strategy&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;merge&lt;/strong&gt; : Rxjs operator which combines multiple observable to convert into a an observable which will have stream of values emitted whenever a new values emitted in any input observable&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436994320%2FPlwbn3t68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436994320%2FPlwbn3t68.png" alt="Untitled 23.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436979640%2FTKoJXRasj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436979640%2FTKoJXRasj.png" alt="Untitled 24.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mergeMap&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;Maps each value from stream emitted to an Observable whenever value is emitted it doesn't wait for the previous value of source variable operation to get completed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436962975%2FCE1Loo8VF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436962975%2FCE1Loo8VF.png" alt="Untitled 25.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practically used in calling multiple Http requests at the same time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;exhaust map :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rxjs operator which ignores source observable emitted value when previous value of source observable is still not completed operation with derived observable. below example 5 is ignored.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436948740%2FDi66hNoEE.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436948740%2FDi66hNoEE.png" alt="Untitled 26.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;practical use case&lt;/strong&gt; : Multiple times button click will lead to multiple asynchronous calls to avoid those exhaust map is used so that until the operation of first value gets completed, other values emitted will be ignored.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436934661%2FKzxJkSl_0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436934661%2FKzxJkSl_0.png" alt="Untitled 27.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Unsubscription In Detail - Implementing a Cancellable HTTP Observable&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If Httprequest should be cancelled for onflight requests then unsubscribe() should be used for the type subscription.&lt;/li&gt;
&lt;li&gt;There are some Observables which cancellable logic should be written using AbortController.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436921678%2FPcIZBVtZf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436921678%2FPcIZBVtZf.png" alt="Untitled 28.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;debounceTime and distinct until changed:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If using a search option and search text is directly calling Http requests, observable will emits new value when a new character is added in search text and it creates huge backend requests to avoid debounceTime will be used.&lt;/p&gt;

&lt;p&gt;debounce Rxjs operator takes an input argument of time to wait, When one value is emitted then operator wait until the that time ends to emit the new value of the observable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436904882%2FkZoekypaQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436904882%2FkZoekypaQ.png" alt="Untitled 29.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;distinct until changed : if search box emitting same value than to stop calling duplicate requests with same value we will use this operator&lt;/p&gt;

&lt;p&gt;fromevent : converts events into observables&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436889841%2FVhu5VO5xv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436889841%2FVhu5VO5xv.png" alt="Untitled 30.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;switchmap operator: Rxjs Operator which unsubscribes previous value of source observable and subscribes to new value when emitted. Helpful in search functionality&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436866477%2F8aaGxwqkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436866477%2F8aaGxwqkn.png" alt="Untitled 31.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436851969%2Fs0dUyi1hF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436851969%2Fs0dUyi1hF.png" alt="Untitled 32.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rxjs Error Handling strategy&lt;/p&gt;

&lt;p&gt;catchError: provide an alternative source when error occurred and continue the observable errored out to complete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436836992%2F1-o_d6LUl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436836992%2F1-o_d6LUl.png" alt="Untitled 33.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;throwerror() : function which returns the observable which emits the value of error used inside catchError block to emit the error outside as an observable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436823043%2F-AM74WE-t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436823043%2F-AM74WE-t.png" alt="Untitled 34.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;retrywhen:&lt;/strong&gt; retry when operator is used to call Http request after an previous http request throw an error&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;startwith:&lt;/strong&gt; startwith operator is used to initiate the stream with the starting value instead of concat and rest all based on input element event.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436809400%2FSK9fA0eBy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436809400%2FSK9fA0eBy.png" alt="Untitled 35.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;RxJs Throttling&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Throttle time is to limit the values coming from the source observable and send only one value for a period of time and leave other values until the time elapses. It can be mainly used for fetching the data from the web page continuously and limit  multiple values coming across the stream&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Custom Debug RxJs Operator for Tap Rxjs Operat&lt;/strong&gt;or :
&lt;/h3&gt;

&lt;p&gt;This will log data based on levels. Code is to demonstrate how to create custom rxjs operator .&lt;/p&gt;

&lt;p&gt;Its a higher order function which contains two functions where first function you will sending parameters what is needed and second function parameters contain source observble.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437158624%2F1vxy_shFg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437158624%2F1vxy_shFg.png" alt="Untitled 36.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usage of Debug Rxjs Operator&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436726739%2Fq3nmXp3FG.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436726739%2Fq3nmXp3FG.png" alt="Untitled 37.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RxJs ForkJoin operator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;forkjoin Rxjs operator is used to call parallel operations at a same time and receive the observables. Helpful in completing large running tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436716751%2FZz0ogY4KX.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436716751%2FZz0ogY4KX.png" alt="Untitled 38.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Subjects and Stores
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Notion of Subject :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Subject is a combination of both Observable and observer which has all properties of emitting values and subscribing. It has no unsubscribe logic to our observable shared from subject.&lt;/p&gt;

&lt;p&gt;Subject is a best way to create custom Observable and also to multicast&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437178445%2FZe3cO9jHS.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609437178445%2FZe3cO9jHS.png" alt="Untitled 39.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Behavioral subject&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;supports late subscription by emitting providing last value to the subscriber&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436702125%2FZb_nD466y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436702125%2FZb_nD466y.png" alt="Untitled 40.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Async Subject:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Subject emits values after completion of subject. Async subject will emit last value when completed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436682003%2F0PO5DiceM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1609436682003%2F0PO5DiceM.png" alt="Untitled 41.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replay Subject&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Subject emits complete values after subscription.&lt;/p&gt;

&lt;p&gt;Hope this cheat sheet works I added almost every example I could add. this could help understanding most of the topics involved in RxJs.&lt;/p&gt;

</description>
      <category>angular</category>
      <category>javascript</category>
      <category>reactive</category>
      <category>rxjs</category>
    </item>
    <item>
      <title>Angular architecture ready book</title>
      <dc:creator>abi</dc:creator>
      <pubDate>Tue, 08 Dec 2020 18:35:41 +0000</pubDate>
      <link>https://dev.to/abilashs003/angular-architecture-ready-book-4j1e</link>
      <guid>https://dev.to/abilashs003/angular-architecture-ready-book-4j1e</guid>
      <description>&lt;p&gt;In this article we are going to learn how to scaffold new angular application with clean and maintainable and extendable architecture in almost no time and what are the benefits of doing so, we will also discuss the most reusable services and feature specific components.&lt;/p&gt;

&lt;p&gt;I am inspired by &lt;a href="https://medium.com/@tomastrajan" rel="noopener noreferrer"&gt;Tomas Trajan&lt;/a&gt; angular architecture blog. I am explaining same concepts with different examples and tools.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;From last year I am learning angular and have been developed more 9 to 10 applications. So with that understanding pitching in these concepts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;this article brings all lessons learned in a  distilled cleanup form you to cut down your learning curve and help you guys create angular project epic.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Starting a project
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Need Angular CLI, download it using npm
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;as of  now(November 2020) the current angular version is 10.2.1and I would strongly recommend to create new apps using that version (or any latest versions) and start using goodies like IVY or --strict flag right from the beginning&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;IVY is a rendering engine for Angular which minifies the code into very minimal size.&lt;/li&gt;
&lt;li&gt;strict flag enabling initializes your project with few new settings that improve maintainability , help you catch bugs ahead of time, and allow the CLI to perform advanced optimizations on your application. Additionally, applications that use these stricter settings are easier to statically analyze, which can help the ng update command refactor code more safely and precisely when you are updating to future versions of Angular.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a coding enthusiast, always try to update angular to the latest version by running below command on your timeline.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; @angular/cli@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;First after installing angular cli, we have to generate fresh new Angular workspace and this can be achieved by running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng new angular-arch &lt;span class="nt"&gt;--create-application&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="nt"&gt;--strict&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;angular-arch is project name&lt;/li&gt;
&lt;li&gt;”create-application false will create an empty workspace&lt;/li&gt;
&lt;li&gt;”strict will adjust the values of some Typescript compiler flags to nudge us to do right things&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607450263808%2FabP5s00VA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607450263808%2FabP5s00VA.png" alt="Untitled.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;to see available schematics type ng g&lt;/p&gt;

&lt;h2&gt;
  
  
  Application
&lt;/h2&gt;

&lt;p&gt;In the list of available schematics contains one called application and we will use it to create our first application in the workspace by running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng g application my-ang-arch &lt;span class="nt"&gt;--prefix&lt;/span&gt; my-ang &lt;span class="nt"&gt;--style&lt;/span&gt; scss &lt;span class="nt"&gt;--routing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;my-ang-arch will be created in the projects folder.  It will have angular router and will be using Sass styles ( with .scss file extension)&lt;/li&gt;
&lt;li&gt;”prefix will be used in the name of every component tag and directive selector so we will get my-ang in every component as a selector.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For styling we will use Angular material which comes with simple and elegant components!&lt;/p&gt;

&lt;p&gt;To add  &lt;a href="https://material.angular.io/" rel="noopener noreferrer"&gt;Angular Material&lt;/a&gt;  run following command using angular cli&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng add @angular/material
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will install lib using npm and we will be prompted about couple of initial options&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;select any default themes or if you want to customize select custom as an option later style with own theme in style.scss like &lt;a href="https://material.angular.io/guide/theming" rel="noopener noreferrer"&gt;this.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;install typography&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once finished we can start importing Angular material components in our app but more on that later.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tooling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;**Prettier&lt;/a&gt;** : An opinionated code formatter which integrates with most of the IDE. We can even format whole project with the help of short npm script!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lets add it using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-D&lt;/span&gt; prettier
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once installed, we can create .prettierrc file which allows to customize copule of formatting options as specified &lt;a href="https://prettier.io/docs/en/configuration.html" rel="noopener noreferrer"&gt;here.&lt;/a&gt; Sample configuration as shown below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="s2"&gt;"singleQuote"&lt;/span&gt; : &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Angular, we can make prettier play nicely with tslint which is provided by AngularCLI,&lt;/p&gt;

&lt;p&gt;to do that we can install tslint-config-prettier and add it in last item in the extends array filed in tslint.json file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="s2"&gt;"extends"&lt;/span&gt; : &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"tslint:recommended"&lt;/span&gt;, &lt;span class="s2"&gt;"tslint-config-prettier"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we can add npm script to package.json just to run the command to format code before checkin&lt;/p&gt;

&lt;p&gt;add this piece of commands scripts section of package.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="s2"&gt;"format:write"&lt;/span&gt; : &lt;span class="s2"&gt;"prettier &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;projects/**/*.{ts,html,md,scss,json}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; --write"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/webpack-bundle-analyzer" rel="noopener noreferrer"&gt;webpack-bundle-analyzer&lt;/a&gt; : It can help us understand content of the bundle size produced during the prod build helpful for debugging correct structure and hence architecture of our app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install webpack-bundle-analyzer by running command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-D&lt;/span&gt; webpack-bundle-analyzer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;once installed add following script in package.json in scripts section&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="s2"&gt;"analyze"&lt;/span&gt; : &lt;span class="s2"&gt;"ng build --prod --stats-json &amp;amp;&amp;amp; webpack-bundle-analyzer ./dist/&amp;lt;app-name&amp;gt;/stats.json"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Script do the following things&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;builds application for production as we are using â€”prod flag&lt;/li&gt;
&lt;li&gt;collects statistics of all the modules by build because we are using â€”stats-json flag&lt;/li&gt;
&lt;li&gt;last step will call webpack bundle analyzer and specify the stats.json file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;amp;&amp;amp; operator wont work in windows just create two commands in script by dividing them&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="s2"&gt;"analyze"&lt;/span&gt; : &lt;span class="s2"&gt;"ng build --prod --stats-json"&lt;/span&gt;
&lt;span class="s2"&gt;"analyze:webpack"&lt;/span&gt;: &lt;span class="s2"&gt;"webpack-bundle-analyzer ./dist/&amp;lt;app-name&amp;gt;/stats.json"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;running both npm commands will open a new page which will show the amount of surface covered by each module.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://compodoc.app/" rel="noopener noreferrer"&gt;Compodoc :&lt;/a&gt; Static documentation tool for angular application which generates angular documentation in seconds by parsing all the components , services and pipes etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607450234736%2F903ozEpUR.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607450234736%2F903ozEpUR.png" alt="Untitled 1.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install Compodoc using command globally&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @compodoc/compodoc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;define a script task in your package.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="s2"&gt;"compodoc"&lt;/span&gt;: &lt;span class="s2"&gt;"npx compodoc -p tsconfig.json src"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and run it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run compodoc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Start the application
&lt;/h2&gt;

&lt;p&gt;Run application using command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng serve &lt;span class="nt"&gt;-o&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything went well then application must be running in &lt;a href="http://localhost:4200" rel="noopener noreferrer"&gt;http://localhost:4200&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cool our initial setup is done. We have a workspace with empty Angular application and we have added some cool tooling to improve our developer experience!&lt;/p&gt;

&lt;p&gt;The Architecture&lt;/p&gt;

&lt;p&gt;Before generating and writing code lets sit back and see bigger picture&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607450214268%2FkPxSiOxxP.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607450214268%2FkPxSiOxxP.png" alt="Untitled 2.png"&gt;&lt;/a&gt;&lt;br&gt;
Lets organize code this way based on the functionality we implement.&lt;/p&gt;

&lt;p&gt;We have two parts above :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eager part&lt;/strong&gt; which will be loaded from start(the main.js bundle).It will contain the AppModule with top-level routes and CoreModule with  basic layout like navbar/main layout  and all the core singleton services which will be used through out the application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lazy loaded&lt;/strong&gt; part which will be loaded as a result of user navigation to these features. The lazy modules will also import shared module. Shared module consists of reusable components directives, pipes  by all lazy modules hence which makes it a smaller bundle size and reasonable developer experience!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Great our architecture structure is finished ,now we can organize our code and start adding features based on functionality&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;We have created our angular application with extensible architecture in a very short time!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;While creating application we added --strict flag to maintain strict null checks, strict function types, restricting any type and strict property initialization&lt;/li&gt;
&lt;li&gt;We added necessary tools  to format code(prettier), to check bundle size(webpack-bundle-analyzer) and for documentation(Compodoc)&lt;/li&gt;
&lt;li&gt;We saw angular architecture modules on what needs to be created at what place&lt;/li&gt;
&lt;li&gt;Core Module : will be the base of whole project which consists of base layout or nav bar and core singleton services&lt;/li&gt;
&lt;li&gt;Share Module : consists of reusable components, pipes ,directives that will be used by lazy features.&lt;/li&gt;
&lt;li&gt;Lazy Module :Lazy module will implement the feature business logic (services) and views(components) that are specific to features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please support this article and developer  with your claps  and sharing because it helps to spread wider audience. Follow me on medium and also other blogs to get updated on tech stuff.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/in-depth-angular" rel="noopener noreferrer"&gt;In-Depth Angular - Medium&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/abilashs003"&gt;abi - DEV Profile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://codewithabi.hashnode.dev/" rel="noopener noreferrer"&gt;CodeWithAbi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Other than technical stuff follow me on instagram&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instagram.com/abi_aradhya/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Till the next article ba bye!!!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>typescript</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Angular Bookmarks much needed</title>
      <dc:creator>abi</dc:creator>
      <pubDate>Mon, 07 Dec 2020 18:35:35 +0000</pubDate>
      <link>https://dev.to/abilashs003/angular-bookmarks-much-needed-24im</link>
      <guid>https://dev.to/abilashs003/angular-bookmarks-much-needed-24im</guid>
      <description>&lt;h2&gt;
  
  
  Angular architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://medium.com/@tomastrajan/how-to-build-epic-angular-app-with-clean-architecture-91640ed1656"&gt;How to architect epic Angular app in less than 10 minutes! ⏱️😅&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Theming Angular Project
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://medium.com/@tomastrajan/the-complete-guide-to-angular-material-themes-4d165a9d24d1"&gt;The complete guide to Angular Material Themes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indepth.dev/custom-theme-for-angular-material-components-series-part-1-create-a-theme/%5D(https://indepth.dev/custom-theme-for-angular-material-components-series-part-1-create-a-theme/)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular Static code analysis
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://mowede.com/blog/angular-devops-series-2/#:~:text=Static"&gt;Automating the Angular Application Development Process: Part 2 | MOWEDE Blog&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  State management with ngrx
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dzone.com/articles/angular-app-state-management-with-ngrx"&gt;Angular Tutorial: State Management With NgRx - DZone Web Dev&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular Cheat sheet
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://medium.com/javascript-in-plain-english/angular-cheat-sheet-cddd2f295b2c"&gt;Angular Cheat Sheet&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular Router explained
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.angular-university.io/angular-2-router-nested-routes-and-nested-auxiliary-routes-build-a-menu-navigation-system/"&gt;Angular Router: A Complete Example (Bootstrap Navigation Menu)&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular CLI behind the scenes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art074"&gt;Angular CLI Behind the Scenes - Part One&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular Forms
&lt;/h2&gt;

&lt;p&gt;Template driven forms&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.thoughtram.io/angular/2016/03/21/template-driven-forms-in-angular-2.html"&gt;Template-driven Forms in Angular&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Custom validators &lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.thoughtram.io/angular/2016/03/14/custom-validators-in-angular-2.html"&gt;Custom Validators in Angular&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.positronx.io/angular-8-express-file-upload-tutorial-with-reactive-forms/"&gt;Angular 8 &amp;amp; Express File Upload Tutorial with Reactive Forms - positronX&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular databinding
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.bitsrc.io/data-binding-in-angular-cbc433481cec"&gt;Understanding Data Binding in Angular&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular with Firebase
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.angular-university.io/angular-2-firebase/"&gt;Angular, Firebase and AngularFire Crash Course - Why Firebase ?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Build your own observables - Angular 4 series
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://medium.com/angular-in-depth/learning-observables-part-1-arrays-14480816eb61"&gt;Build Your Own Observable Part 1: Arrays&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular 2 training book
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://angular-2-training-book.rangle.io/"&gt;Introduction&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular clean code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://angular-2-training-book.rangle.io/"&gt;Introduction&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  RXJS bookmarks
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://rxjs-dev.firebaseapp.com/"&gt;RxJS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Shareplay :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://2muchcoffee.com/blog/rxjs-welcome-on-board-upgraded-sharereplay-operator/"&gt;RxJS: Welcome on Board Upgraded ShareReplay Operator&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular CDK overlay
&lt;/h2&gt;

&lt;p&gt;[&lt;a href="https://material.angular.io/cdk/overlay/overview"&gt;Angular Material&lt;/a&gt;](Link) &lt;/p&gt;

&lt;h2&gt;
  
  
  Angular ng-Template, ng-container and ngTemplateoutlet
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.angular-university.io/angular-ng-template-ng-container-ngtemplateoutlet/"&gt;Angular ng-template, ng-container and ngTemplateOutlet: Guided Tour&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular 300 questions covered
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/sudheerj/angular-interview-questions"&gt;sudheerj/angular-interview-questions&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Popular Angular experts Blog
&lt;/h2&gt;

&lt;p&gt;Netanel Basal&lt;/p&gt;

&lt;p&gt;&lt;a href="https://netbasal.com/"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tomas Trojan &lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@tomastrajan"&gt;Tomas Trajan - Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>Angular In Depth - Part 1</title>
      <dc:creator>abi</dc:creator>
      <pubDate>Mon, 07 Dec 2020 18:15:58 +0000</pubDate>
      <link>https://dev.to/abilashs003/angular-in-depth-part-1-4j8</link>
      <guid>https://dev.to/abilashs003/angular-in-depth-part-1-4j8</guid>
      <description>&lt;h3&gt;
  
  
  Exploring core concepts of Angular in depth
&lt;/h3&gt;

&lt;p&gt;This series of Angular in depth will cover all the following features part by part :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic Understanding of Angular and features&lt;/li&gt;
&lt;li&gt;Custom components with @Component&lt;/li&gt;
&lt;li&gt;Components @Input and @Output, event Emitters&lt;/li&gt;
&lt;li&gt;ngFor&lt;/li&gt;
&lt;li&gt;ngIf&lt;/li&gt;
&lt;li&gt;ngClass&lt;/li&gt;
&lt;li&gt;ngStyle&lt;/li&gt;
&lt;li&gt;ngSwitch&lt;/li&gt;
&lt;li&gt;Built-In Pipes&lt;/li&gt;
&lt;li&gt;Async Pipe&lt;/li&gt;
&lt;li&gt;Custom Pipes&lt;/li&gt;
&lt;li&gt;@Injectable and Custom Services&lt;/li&gt;
&lt;li&gt;HTTP Client - GET POST PUT DELETE&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article concentrates on key features of Angular and basics setup to start with any application.&lt;/p&gt;

&lt;p&gt;We will build an example application throughout the whole series and understanding all core features&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Understanding of Angular and features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Things required to start Angular development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Understanding on HTML, CSS, Typescript&lt;/li&gt;
&lt;li&gt;Node installed in system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/download/" rel="noopener noreferrer"&gt;Download | Node.js&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;install angular cli to scaffold application
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Take a tour of the example application
&lt;/h2&gt;

&lt;p&gt;Lets take a tour on example application "Crazy developers" together by exploring all Angular topics one by one&lt;/p&gt;

&lt;h3&gt;
  
  
  Create new Angular application using Angular CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng new crazydevelopersapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;&lt;code&gt;ng :&lt;/code&gt;&lt;/em&gt; referring to angular CLI&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;code&gt;new  :&lt;/code&gt;&lt;/em&gt; is the keyword to create new angular application&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;code&gt;crazydevelopersapp :&lt;/code&gt;&lt;/em&gt; application name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If project needs to be created in existing folder&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng new &lt;span class="k"&gt;*&lt;/span&gt;crazydevelopersapp&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="nt"&gt;--directory&lt;/span&gt; ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CLI asks to enable routing choose yes and choose SCSS for stylesheets. folder structure after scaffolding the template looks like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607364309080%2FMCbojGVs6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607364309080%2FMCbojGVs6.png" alt="Untitled.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay now Why Angular ?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;we will see main features of Angular Core with an example&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;custom HTML content&lt;/strong&gt;: You can create your own custom HTML content and extend application functionality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;app-root&lt;/strong&gt; is the custom HTML Tag for app component html&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607364333899%2FVGcGI8f5a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607364333899%2FVGcGI8f5a.png" alt="Untitled 1.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;separating data or the model of the application from view template&lt;/p&gt;

&lt;p&gt;below example shows title in html tag is a variable consists of string "crazydeveloper" in component.ts&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607364346698%2F4dWG1M4ye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607364346698%2F4dWG1M4ye.png" alt="Untitled 2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;component based architecture co ordinates between view and data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607364368755%2FDLlrZD8BB.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1607364368755%2FDLlrZD8BB.png" alt="Untitled 3.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;built in change detection mechanism which is completely transparent which synchronizes with view&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updating of data in secure way&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We will discuss on components, @Input, @Output and Event emitter in our next article.&lt;/p&gt;

&lt;p&gt;For latest news on Angular core and other technical articles. follow me on &lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/in-depth-angular" rel="noopener noreferrer"&gt;In-Depth Angular - Medium&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codewithabi.hashnode.dev/" rel="noopener noreferrer"&gt;CodeWithAbi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Other than technical follow me on instagram&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instagram.com/abi_aradhya/" rel="noopener noreferrer"&gt;https://www.instagram.com/abi_aradhya/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
