{"componentChunkName":"component---src-templates-blog-list-template-js","path":"/engineering/29","result":{"data":{"allMarkdownRemark":{"edges":[{"node":{"excerpt":"There are more than 1 million websites or apps are using \"SignIn with Facebook\" or \"Login with Facebook\". Do you know why they are using…","fields":{"slug":"/engineering/login-with-facebook/"},"html":"<p>There are more than 1 million websites or apps are using <strong>\"SignIn with Facebook\"</strong> or <strong>\"Login with Facebook\"</strong>. Do you know why they are using Facebook login and how it is beneficial in conversion?</p>\n<p>According to multiple surveys, there are more than 3 billion users worldwide are using social media and it is around 50% of the world's population. </p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 441px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 73.24263038548753%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABJ0AAASdAHeZh94AAAD7ElEQVQ4yyWU609TZxzHz0uzReQul0JcXcsoQq1QbqW0lPac01Naej+tpzcUKreBgC04ERRwEzVoXNQtu2TGLUvmm8VsS5Yly/wLtuzP8c1nD+wkvzzPeV58vt/fN8/vkYzLOslUnLyhkxP7bFZnLq9TzMQJBGWUkIwaVghOq8hTMpPqBP6Ql8CUDy0aIJFRSRsa04lJvPI4kpEvUMgbzBYNSqUCoy4nqwmFHx/sUr5qEIoHmUqqhBIyWlyAY37CSZ8AeQXITzqnEdVDaAlVnIeQcgJmpCP4fWP0Oe30WjvYy0V4tbvB47Uy2VSQRFolllEEPCBKJpqWien+E6FgLEgg4heCGhOaD+lyMcxh5RqL4uD9mlN0Np8h5x04qcNrBp/dmBdxqGRExTMyek5BF870XICIcDqVCBIRolpMRBPxIj07WOOP5w+ZE7lYhLuRC2bKyii7RoSD2Qzf7q6TM9xEE05S6SGCoT4GXR8y7LaIjHuIxAe5nPOQyg6T1AeR3nx+yFeVRXR1EP+oDcXRRXSwm5L3klhtlEMThFUH7skuhsesWC6YMHe3c87aisXWhs1uore/E5fHysi4Fen7/U0elg1iwX6ioX4CdjMeaxtanxmXpY3MxBCRwDBmWwsd55sxd7XR2tF4Uk1t9Sd11tTIBx+1cV4ISS+3r1NUXHR01GHpaUf1OJjsMjFiPovSe46y5mazmKS6kCMkj9Hdc46a+veoaz5Ni4A2nK2lWUCP902t9Uj3SnGuxAI4+qy4hy8xb8Tx9Z7Hbqqjt72WxJCNuLObR+vz/PnyBV/u32SlkMY1ZKehqYaW9noammupbThNo4BLldgkR6tXuS3aXk5pxMcHCAzYGDC34OhsJOywkJ1wMtpn4aiyxM9P7vHbi0f88uwBlRkdU2cTTS11/wOPHV4Pe/imusiWESU7OYIRcKGN2HFa2vGKLN2WVpLaBFnR7l0h+sWtVY7WyzytLvDd3SozuoLX14OsXERWLyLdTCkcFGNsJgLkZRcL4l7l1HG2K9e5f+cWG0tlDg/u8HB/h+dH93n64B6HO1vcKCTYWyzy9d4GdytJttYjVNciSHP+QVQRvks4ygvQanZaAN38/usbjr/Xr3/i33/+5tUPr3j37h1/vX3L/s4nrOfjzEVlnlSXeLQ1w+66zu5aFsluasDSXEPrmVN4+nuYEWO0pE+x+fE1Pr2zTSk9zf7tLVbmr3AoXFZX5tkoF9hbLjErHodtEcP+yjEwzc5aCmnK14tTXBNLSy1mEaqvv5vw2CUiLgcrYqRKmgdHVwcrIuNl8QgUxX9ZjFlBrMGhC8zGFJZzouWFGLfWpvkPdD9BmOWpBOcAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"login-with-facebook\"\n        title=\"login-with-facebook\"\n        src=\"/static/a7663b66ba06daf295eda5e5e2ce441f/efc6e/facebook-login-wow.png\"\n        srcset=\"/static/a7663b66ba06daf295eda5e5e2ce441f/efc6e/facebook-login-wow.png 441w\"\n        sizes=\"(max-width: 441px) 100vw, 441px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>The biggest challenge and most important things are to make user registration and login quick and easy while developing our application. The registration forms required a lot of data that need to be filled by users manually and it causes lost, potential users. Additionally, users need to enter their usernames/emails and passwords in the login forms to authenticate themselves and also need to remember more individual IDs and passwords. </p>\n<p>Social Login allows customers to bring their existing social identities and use them to register and log in without creating a new profile explicitly. </p>\n<p>Facebook is the most favorite social media provider in comparison to other social media providers and the number of active Facebook users growing day by day.</p>\n<p>In this article, I will explain how you can implement <strong>“Log in with Facebook”</strong>  on your website or mobile app in a very easy manner. </p>\n<p>Facebook work on the OAuth 2.0 protocol and most of the social providers like Facebook, Google, Microsoft, Linkedin are supporting OAuth 2.0. Refer to this article <a href=\"/oauth2/\">Getting Started with OAuth 2.0</a> to know about OAuth flow. </p>\n<h3 id=\"create-your-facebook-login-app\" style=\"position:relative;\"><a href=\"#create-your-facebook-login-app\" aria-label=\"create your facebook login app permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create Your Facebook Login App</h3>\n<p>Here you can find the complete step by step guide to create your Facebook Login App.</p>\n<h4 id=\"step-1\" style=\"position:relative;\"><a href=\"#step-1\" aria-label=\"step 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 1</h4>\n<p>Go to <a href=\"https://developers.facebook.com\">Facebook Developer</a> and log in using your Facebook credentials.</p>\n<p><strong>NOTE</strong>: Please do not log in using a business account as Facebook will not allow you to create an app if you do so.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 42.15384615384615%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB80lEQVQoz12SS08TURiGB7CJ9qYIpaWdXoeZtvQCQyltR7EX2kJES1poEcrFnfGy6MrEBQtjYmIIO+NGdyZqoq6MMe7c6cIfwH/wRzyemSoLFm/Ol5x8z3nf7zvSuNpgOr3OhNbkqtrEGali8y8jeQykKQN7uMblsEEgGBWKEIooqPFZoopGbCZuSdcUskJyWEGyhytclG+IxiouARv1LHHr4Ih3X0959vIbbqWOO2Qgh4ZAUx6vnylfwJJZe6dl/P/uJEeozLi6SqYxYDK1yai/Sv/BU379POXtBxPYwCkXycwtUG+uUas3yRdKzOmLZOdz5PJF0hndgpmPSg7h0BWr49FW0PsfUdZeYPPlsQXKjEzmsUdqAlhgqXiNnf4+7c0u2zt9ur07dETd3zug0+meJZDMmTmjK0iuJPHWKxY7x2SKLTSjTzjXwyGAjkCBQuk69x8+Yndvn9utNp2tHlvdbVobbQE9REvM4pfDQ6A9VGHw/BPff//hyfFn5NQqN3cf8/r9D8Z8Bm6xlFRmnmqtwXK5iqImrLlNB0KWTNBZZBNoxj4cnHDy5gsbd4+QJvJ4kuvojXtcClYsoKIlSWd1ZrSE2GbMaj6v4VIEzISOeApIVxYY85Zwx2rCdZkLvpIV2QRGYqrlLCi+xv/m8zDz/AvxdgD9qFyQaQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Facebook Login\"\n        title=\"Facebook Login\"\n        src=\"/static/24db342a3c6a9447251fd1606d058c55/e5715/loginadius-facebook-img1.png\"\n        srcset=\"/static/24db342a3c6a9447251fd1606d058c55/a6d36/loginadius-facebook-img1.png 650w,\n/static/24db342a3c6a9447251fd1606d058c55/e5715/loginadius-facebook-img1.png 768w,\n/static/24db342a3c6a9447251fd1606d058c55/6aacb/loginadius-facebook-img1.png 1347w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h4 id=\"step-2\" style=\"position:relative;\"><a href=\"#step-2\" aria-label=\"step 2 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 2</h4>\n<p>Select the <strong>My Apps</strong> as displayed on the below screen.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 53.84615384615385%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAADI0lEQVQozy2S3U+aBxSH2c3ulixpYtzWmhVS69CiRYpbq9OCH7EFUaiKgPLqtAURq2IL+AH1qzAL1VAR3KhlKkZt17RYu1aNXZYtWZt9dNmyZN3FdrGbZX/EszfLrs7V+f2ek/NIZAX5aGu0VNdoMDTqMBobuGBqwGZtxd5uRrBbEAQbNouJLqGVLnsrzSYDrfp6GsQduaKUyg/ew3xeRUdzNZJ38nIoOymjUiVFX1mI9fwpeq11DDtaCPRbmHE3EbCXE+yp4+MpPzeuB1iY9pGZ6OWj+nJycg/zZs5bHJbKOK4oQaJSK+iy6HB26PA5jQRdTUy4Grjpbyd1TWArZCfVV8ZtTw0PM0s8yd5lbXqQkE1D2mvDY65DV6Yg2KIh94gUiUZ7hjFPNzMjvcTCXtYWAqTDLlbDTnbiQ3y7MsLBgpOniWGeP93klxfPeLQ4zWxbOfsxL9+thtgLXSLZc45Dh3KQnP5QzdT4INHpYVJRL/eWrvFoeZKv7if4fm+Lg+wW23fX+ePXl/z120/8/ecrXj0/YMNtZDco8E3Sy5fxYTbGrMiP5oknn1biG+hkatjO0pSTrdgVsiJZ1NdJs9lGRa0BWX4hE75Bvv48wY9iye8v9tiJXCWoU7PtbyIbNLMz2UZjRTESaUEeDvEJIxd1RAYMfBa6yP7yCHZjNa+9/ga5uW/jMJs4p60i1FvPerCFlVETD1JhMqMu7lzSkHTWsumuQqd8F4ms8Ch9gp5gn5HFQAebMQ9fLF3l9qSThMPA4/Ag//xwwJ3ZAKnrV0hHPKzcGGBn+z7jY37UqhM06qppOatELj0iBhbJ6O/UM+7UEx9rZz3czW7KSzY5zrKvh8RQJ3OjQ/y8vcLup1Hmw6Iy6RixxCLlmiqKSk6g19f+52lJqaiNVHEM9/+BC/42MjMCj+Nu7s1eJiqqlPK6uNVnZ381zuYnN4lM9LORSTIXj1NQrBDFLkKpViJYm1CJU1L8fikOSy0+Qcstv5n12R4O1sLsp+e4bKxhptuG4cwpSuXH2RHJXj7Lsrf7hMj8PMVlZeQdy0deouCstkIkPMm/C1b1npiNuEcAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Facebook Login\"\n        title=\"Facebook Login\"\n        src=\"/static/20b2c36d3b3e0924d6a391fb48b91c35/e5715/loginadius-facebook-img2.png\"\n        srcset=\"/static/20b2c36d3b3e0924d6a391fb48b91c35/a6d36/loginadius-facebook-img2.png 650w,\n/static/20b2c36d3b3e0924d6a391fb48b91c35/e5715/loginadius-facebook-img2.png 768w,\n/static/20b2c36d3b3e0924d6a391fb48b91c35/b4904/loginadius-facebook-img2.png 1768w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h4 id=\"step-3\" style=\"position:relative;\"><a href=\"#step-3\" aria-label=\"step 3 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 3</h4>\n<p>Click on <strong>Add a New App</strong> as displayed in the below screen.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 27.23076923076923%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAABFUlEQVQY0zWQYU/CMBRF9///jgEl4DIQ1GCiiVEjbEI23NaNtVvbFR3Crq81fji5t016XltvMr3D9eweY8orf4GLUYDBeEZMMZjc0N4cQ1pfUh8S4+AWI9pbPr0g/IjxHm4RbpLepj9fnjypDCxKtZDlFoowPEFbxS5ZUUG3B3x3Rxx/TuBCoqxqKG0cdaNR7AX2vOklObycDuQFR57nKHZrpIzT1A2yQoAlK/jBgg5waN3ifD7j+S3Cw+MrjDHous4NI0fPSu7Ss4XRBMYYys+1E8W7DFlZo0ojtLpBa76IA0Sj0EjtusXesBINnIMoCG/PazgqAZ6uwLMQIo+oU2ZrEkjYp0ilncxKbXfQrUX99wX/nl9lvG87rawiEwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Facebook Login\"\n        title=\"Facebook Login\"\n        src=\"/static/f9826f57bf77405cc9f453197e1c74a8/e5715/loginadius-facebook-img3.png\"\n        srcset=\"/static/f9826f57bf77405cc9f453197e1c74a8/a6d36/loginadius-facebook-img3.png 650w,\n/static/f9826f57bf77405cc9f453197e1c74a8/e5715/loginadius-facebook-img3.png 768w,\n/static/f9826f57bf77405cc9f453197e1c74a8/46435/loginadius-facebook-img3.png 1885w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h4 id=\"step-4\" style=\"position:relative;\"><a href=\"#step-4\" aria-label=\"step 4 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 4</h4>\n<p>Input display name and contact email. Once you have done so, click on <strong>Create App ID</strong></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 50.46153846153846%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABQ0lEQVQoz5WSyU7DMBCG8yYgKhYJwY0LqlSEBDQFKbS0CcsrNF14K96BCzdunLhzRbRJKVmcOM6P7axqCIKRPnlG4xn/Y1vZ3dvHze0ddOO6wkA30Nf1hIFRgy4R+xuNTSiT6T2EfS6XICSA43pwPV/yX+v1+lCG5giMxfiYzWDbC8wtW2Jx33FceJ6HL76SIOD7WIUoiiTCNK0LxRyNZSCaEUIQx3FOUlAUl3Or+2TDy1LDTJErRuZkvlgpjfLCOpVFQz6ybDi34Pn+r4X1DcsKzUShy+/K94l8GDG6Two/DCnYXxUOU4VhGOYXnEEzaFTJyTzlBzF+Haz0KOPJVAY0PYULSWOAhDECmhD/8E3EVE8v73h4fMPz6wJa9wrK1vYOOucXOGurnI6krXLaKWopVldiTrN1goPDYzSPTrG2voFvAE6ilga5ZWMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Facebook Login\"\n        title=\"Facebook Login\"\n        src=\"/static/ee19125fdb7fcd13e0e1130e97f3f7a7/e5715/loginadius-facebook-img4.png\"\n        srcset=\"/static/ee19125fdb7fcd13e0e1130e97f3f7a7/a6d36/loginadius-facebook-img4.png 650w,\n/static/ee19125fdb7fcd13e0e1130e97f3f7a7/e5715/loginadius-facebook-img4.png 768w,\n/static/ee19125fdb7fcd13e0e1130e97f3f7a7/612f7/loginadius-facebook-img4.png 773w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h4 id=\"step-5\" style=\"position:relative;\"><a href=\"#step-5\" aria-label=\"step 5 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 5</h4>\n<p>In the security check, Complete the security steps and click on the <strong>submit</strong> button.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 584px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 52.56849315068494%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAByUlEQVQoz5VSTW/TQBTMr+VcAScOCKmBA0WiCErTpk6U1ikiIaFcQOLOoReExKGUqvkoqZOsYzux1+u1E3t4u65RhVRUnjR6M9J63rwnl55VP+Np5SM2dj7h0eYH3C23cP9JG/cet4i/vTXW1lsob1RQGk1DnA0YfvYYTvsMJ+cMP86nxG0MLB/9ywV6owUG1BUf/IX+FYbjAOZhCyVkK/iLOThB8AAiDBCFPmQU4n/r6Og9GVKFoUAkZY4oQhwnkHGMZSJxORP48m1KPEaaZjcg1YbdbhelLMvgeR4sa4zJZELd0qaSzFfLBMPRBMdfTxGTVqXeKxR1XXc6nTyhEAJJklAyqY0KqMRzz4XrMNoivL2hlGSWLJFee3hTFQYKxcqFoV45SVLMnLkG5+LqhvGflCq9lKTjJVar9J/DdEJ1G8dxaC1Xd8YYXFfxXNu2TcOIewv4AdcDFYIgxEnPxtlwhoCH+jztdjtfmXOuk+g0+gOhoXihBd1QvfODQP9SF5aDh9vHePnmO4a/xmA0+J0ybDT2YRgGarU6avU69vZq2KnmqOwa2NXaQGP/AM1mE6ZpUjdxQL1qNPD8xRa2Xm/jwfor3Fkr4zcYZx1e6ZQSFQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Facebook Login\"\n        title=\"Facebook Login\"\n        src=\"/static/efbf9d763ad5dc1ded34050d8a408b74/e05eb/loginadius-facebook-img5.png\"\n        srcset=\"/static/efbf9d763ad5dc1ded34050d8a408b74/e05eb/loginadius-facebook-img5.png 584w\"\n        sizes=\"(max-width: 584px) 100vw, 584px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h4 id=\"step-6\" style=\"position:relative;\"><a href=\"#step-6\" aria-label=\"step 6 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 6</h4>\n<p>Once you land on the App dashboard, Select Facebook Login, and click <strong>Set Up</strong>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 50.76923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABqUlEQVQoz21S0W7bMAzM/3/NXvdWYMCAPqwv3dp0TVLETSzLkm3JkiXLTnqj6GxL1xkg7kBR5PHkVVU3kBQZy0pDyMxbSJWjYawu50vuErX+cJ5j9bvwKBR2LwXqWkJrjVJIiMsQ1VED/XegkITa0XnL/HrYKqsTyqArn/DmCmx+PqHYPePsDvBqhzRP2K87aOGJJzg/IIwzYvkDsdfMle7+NF1l2aLu4OoNgDfcPVR43Crkb7YF4+OthNxb5tM0M47bLzj7mrlu/tdQvXBxiCOGEDGdgFNW6Rxa26DpGoxjwpgSPKlUxsP0DpHqdWuuGmYzaWVTrhHNkST0wCDg1p8wHL9hiKToTM0JjO1p5QBPA2kZzDQ151Rj/lXYoms1VRh8f95jWxxoJ4ngDV98kF9R2h3zEJdmn19vcLCCef1+5eWljAvsx7a0eFUD8zSfGDfVPVRfXjycGG/3d6jt4rX62LCB7T3mmV5v8ByJvEp0OZIi34/kZWD/UpqWM58Qw8gD3nt4+THbrkfIBaQqhyXD+/yLUG4mA/OD5Vz2MMREuRMPzLlrhb8AKEf4I6SYIJQAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Facebook Login\"\n        title=\"Facebook Login\"\n        src=\"/static/a31c9add537406960d222f19891bb897/e5715/loginadius-facebook-img6.png\"\n        srcset=\"/static/a31c9add537406960d222f19891bb897/a6d36/loginadius-facebook-img6.png 650w,\n/static/a31c9add537406960d222f19891bb897/e5715/loginadius-facebook-img6.png 768w,\n/static/a31c9add537406960d222f19891bb897/1d499/loginadius-facebook-img6.png 1632w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h4 id=\"step-7\" style=\"position:relative;\"><a href=\"#step-7\" aria-label=\"step 7 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 7</h4>\n<p>Click on Settings in the sidebar under Facebook Login. Turn on Client OAuth Login. Turn on Web OAuth Login. Put the valid redirect URL on <strong>\"Valid OAuth redirect URIs\"</strong>. Click on the Save button.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 39.53846153846154%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABN0lEQVQoz2WR227EIAxE9///ro9VpT60q80SAgQS7pCpIYn2UksjYouMj81FCIGcM3Kp0HKCnhisdSiUl1IeZ33ktX3Xdm6Qs8EwCjAuuy5SSrRIucIO30i3T4iRQZsVzvku61xv4n3optu2dbVQzZA9GWpjEGPshJbfEPgPkYpuEEPAdpA1M84nCKmOCcrD8Jnwzth+yQX4mBBChNILpNLQy4ozWsOZ6q1mybzugP3uC6FZDFJK/YfVaAQ9Qd5+YPgAKxnSIl9U7AyEBZs3gNdQSr0SJhq3LTlTy3W8YuZ3aDGi+BU1WNK6i/JeO+vRoy4TFGcYuAI7TC/nSCkXOCJ0aoQYfjthXhSq0/9lNdERYTKY3wnP18pkuNKLxlT6LndlhHelDE97ZpPGx9eE6yAxktH9MP0D/YBpMq/9JuIAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Facebook Login\"\n        title=\"Facebook Login\"\n        src=\"/static/d23cd26ebfc6f1e63b8c71e3c3561e6d/e5715/loginadius-facebook-img7.png\"\n        srcset=\"/static/d23cd26ebfc6f1e63b8c71e3c3561e6d/a6d36/loginadius-facebook-img7.png 650w,\n/static/d23cd26ebfc6f1e63b8c71e3c3561e6d/e5715/loginadius-facebook-img7.png 768w,\n/static/d23cd26ebfc6f1e63b8c71e3c3561e6d/3d405/loginadius-facebook-img7.png 1348w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h4 id=\"step-8\" style=\"position:relative;\"><a href=\"#step-8\" aria-label=\"step 8 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 8</h4>\n<p>Click on Basic under settings in the sidebar. Under App, Domains include your website Url. Enter all the required details. Change the status of the app from Development to Live from the top-right corner. Click on the <strong>Save Changes</strong> button.</p>\n<p>Now your Facebook app is ready. You can start implementing Facebook login\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 42.46153846153847%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABUUlEQVQoz2WRjXKDIBCE8/4v2E5nOrVNjKKA/KmA4PYgJk1bZtbTU77blRMXEsZarKuH0gbTpKGNxTwvcE+al/WoHvraQJzfMRkHKRXYwDFyiZFYJy4EFvo4bolADlrfYKVXILXSs6CNrvY9ljUc8hBkgI3yoZOQkjYu8D5AW4eBJq1howEZgRQT1Ziq6xAjYtxqDaHcR0gCdkxUWD8Icsg5ckrIO2DZF+b2DdAdoK7Yi6YrsrzAKFkd5ZxR1r7v5UpAU0EPh87NFGlGoveu+4A7v2JlDeL4WZWnFmlsoDjDpAw5C9VZIucFWhz+Alo6kIUiF4duEjBDC8t7RCuR3AR4hyRbyOYFTvQIisGrEYmcY/OQyqJn/AeYKG6ZVCaWSMrMkNodkW5rjx5uuMDxDkGPBB2RDQfydgCfHN43FaClQyk/v546xSrQKvxf997fyN/r0WftIyhcFQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Facebook Login\"\n        title=\"Facebook Login\"\n        src=\"/static/ad6fe0cf1bcb752d3ad0798cf4030d78/e5715/loginadius-facebook-img8.png\"\n        srcset=\"/static/ad6fe0cf1bcb752d3ad0798cf4030d78/a6d36/loginadius-facebook-img8.png 650w,\n/static/ad6fe0cf1bcb752d3ad0798cf4030d78/e5715/loginadius-facebook-img8.png 768w,\n/static/ad6fe0cf1bcb752d3ad0798cf4030d78/3d405/loginadius-facebook-img8.png 1348w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"data-selection\" style=\"position:relative;\"><a href=\"#data-selection\" aria-label=\"data selection permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data Selection</h3>\n<p>When a user logs into your website or app via Facebook Login, you can access the user's data stored on Facebook. Facebook only allows the basic profile data permissions for a new Facebook app.  To get more data according to your business requirement,  you need to enable additional permissions on your Facebook app. Facebook is supporting around <a href=\"https://developers.facebook.com/docs/permissions/reference\">42 permissions</a>. You need to choose user data that you want to collect from Facebook. </p>\n<h3 id=\"submit-your-facebook-login-app-for-review\" style=\"position:relative;\"><a href=\"#submit-your-facebook-login-app-for-review\" aria-label=\"submit your facebook login app for review permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Submit Your Facebook Login App For Review</h3>\n<p>To grab more than basic profile data points or asking for additional permissions from your users, your Facebook apps go through the review process. Sometimes businesses require some additional permissions on the Facebook app and for that, you need to submit your Facebook app for approval before starting to ask for additional information. </p>\n<p>The Facebook app review process is pretty much simple, Please refer to this document <a href=\"https://www.loginradius.com/docs/api/v2/admin-console/social-provider/app-reviews/facebook-app-review/\">here</a> for the Facebook App Review Process. </p>\n<h3 id=\"add-login-with-the-facebook-button-on-your-site\" style=\"position:relative;\"><a href=\"#add-login-with-the-facebook-button-on-your-site\" aria-label=\"add login with the facebook button on your site permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Add Login with the Facebook button on Your Site</h3>\n<p>Implement Facebook login to a web page is very easy using Facebook’s JavaScript SDK. Facebook is providing <a href=\"https://developers.facebook.com/docs/facebook-login/web\">documentation and instructions</a> along with code examples to implement the login system. </p>\n<p>Let's see how we can add the Facebook login interface. For this, we just need to copy and paste the code provided to us by Facebook. Here I have added some customization to the existing code </p>\n<p>Place this code in the body section of your HTML code. </p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">&lt;!-- </span><span class=\"mtk12\">The</span><span class=\"mtk1\"> </span><span class=\"mtk12\">JS</span><span class=\"mtk1\"> </span><span class=\"mtk12\">SDK</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Login</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Button</span><span class=\"mtk1\"> --&gt;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">fb</span><span class=\"mtk1\">:</span><span class=\"mtk10\">login-button</span><span class=\"mtk1\"> </span><span class=\"mtk12\">scope</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;public_profile,email&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">onlogin</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;checkLoginState();&quot;</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">fb</span><span class=\"mtk1\">:</span><span class=\"mtk10\">login-button</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">&lt;!-- </span><span class=\"mtk12\">The</span><span class=\"mtk1\"> </span><span class=\"mtk12\">JS</span><span class=\"mtk1\"> </span><span class=\"mtk12\">SDK</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Login</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Button</span><span class=\"mtk1\"> --&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">div</span><span class=\"mtk1\"> </span><span class=\"mtk12\">id</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;status&quot;</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span></span></code></pre>\n<p>Now you need to include the JavaScript section. It'll loads the Facebook SDK JavaScript asynchronously.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">&lt;!-- </span><span class=\"mtk12\">Load</span><span class=\"mtk1\"> </span><span class=\"mtk12\">the</span><span class=\"mtk1\"> </span><span class=\"mtk12\">JS</span><span class=\"mtk1\"> </span><span class=\"mtk12\">SDK</span><span class=\"mtk1\"> </span><span class=\"mtk12\">asynchronously</span><span class=\"mtk1\"> --&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">script</span><span class=\"mtk1\"> </span><span class=\"mtk12\">async</span><span class=\"mtk1\"> </span><span class=\"mtk12\">defer</span><span class=\"mtk1\"> </span><span class=\"mtk12\">crossorigin</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;anonymous&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">src</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;https://connect.facebook.net/en_US/sdk.js&quot;</span><span class=\"mtk17\">&gt;&lt;/</span><span class=\"mtk4\">script</span><span class=\"mtk17\">&gt;</span></span></code></pre>\n<p>Next, we'll add the Facebook init function. We just need to replace the app id placeholder with the app id of your app you created in the beginning. You’ll find the placeholder in this line appId: '{your-app-id}'. </p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk12\">window</span><span class=\"mtk1\">.</span><span class=\"mtk11\">fbAsyncInit</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">function</span><span class=\"mtk1\">() {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">FB</span><span class=\"mtk1\">.</span><span class=\"mtk11\">init</span><span class=\"mtk1\">({</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">appId      :</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;{your-app-id}&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">cookie     :</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,                     </span><span class=\"mtk3\">// Enable cookies to allow the server to access the session.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">xfbml      :</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,                     </span><span class=\"mtk3\">// Parse social plugins on this webpage.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">version    :</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;v7.0&#39;</span><span class=\"mtk1\">           </span><span class=\"mtk3\">// Use this Graph API version for this call.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    });</span></span></code></pre>\n<p>Next, we need to add the function that handles the response and alters the page contents based on the type of response. I have added this function at the very top of the scripts section.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">checkFacebookLoginStatusCallback</span><span class=\"mtk1\">(</span><span class=\"mtk12\">response</span><span class=\"mtk1\">) {  </span><span class=\"mtk3\">// Called with the results from FB.getLoginStatus().</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk10\">console</span><span class=\"mtk1\">.</span><span class=\"mtk11\">log</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&#39; Checking Facebook Login Status&#39;</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk10\">console</span><span class=\"mtk1\">.</span><span class=\"mtk11\">log</span><span class=\"mtk1\">(</span><span class=\"mtk12\">response</span><span class=\"mtk1\">);                   </span><span class=\"mtk3\">// The current login status of the person.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">status</span><span class=\"mtk1\"> === </span><span class=\"mtk8\">&#39;connected&#39;</span><span class=\"mtk1\">) {   </span><span class=\"mtk3\">// Logged into your webpage and Facebook.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk11\">getUserProfile</span><span class=\"mtk1\">();  </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    } </span><span class=\"mtk15\">else</span><span class=\"mtk1\"> {                                 </span><span class=\"mtk3\">// Not logged into your webpage or we are unable to tell.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">document</span><span class=\"mtk1\">.</span><span class=\"mtk11\">getElementById</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&#39;status&#39;</span><span class=\"mtk1\">).</span><span class=\"mtk12\">innerHTML</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&#39;Please login with Facebook into this webpage.&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  }</span></span></code></pre>\n<p>As you can see, the above function receives a response variable and checks it's status. If it is connected it fetches the logged in users info and outputs this information in the console of your browser, that area is where you could build more onto this script to handle the data. When the login is not authorized, this function changed the HTML on your page to ask you to log in.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">checkLoginState</span><span class=\"mtk1\">() {               </span><span class=\"mtk3\">// Called when a person is finished with the Login Button.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">FB</span><span class=\"mtk1\">.</span><span class=\"mtk11\">getLoginStatus</span><span class=\"mtk1\">(</span><span class=\"mtk4\">function</span><span class=\"mtk1\">(</span><span class=\"mtk12\">response</span><span class=\"mtk1\">) {   </span><span class=\"mtk3\">// See the onlogin handler</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk11\">checkFacebookLoginStatusCallback</span><span class=\"mtk1\">(</span><span class=\"mtk12\">response</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    });</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  }</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">FB</span><span class=\"mtk1\">.</span><span class=\"mtk11\">getLoginStatus</span><span class=\"mtk1\">(</span><span class=\"mtk4\">function</span><span class=\"mtk1\">(</span><span class=\"mtk12\">response</span><span class=\"mtk1\">) {   </span><span class=\"mtk3\">// Called after the JS SDK has been initialized.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk11\">checkFacebookLoginStatusCallback</span><span class=\"mtk1\">(</span><span class=\"mtk12\">response</span><span class=\"mtk1\">);        </span><span class=\"mtk3\">// Returns the login status.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    });</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">     </span><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">getUserProfile</span><span class=\"mtk1\">() {                      </span><span class=\"mtk3\">// Get User Profile using Facebook Graph API after login.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk10\">console</span><span class=\"mtk1\">.</span><span class=\"mtk11\">log</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&#39;Welcome!  Fetching your profile information.... &#39;</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">FB</span><span class=\"mtk1\">.</span><span class=\"mtk11\">api</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&#39;/me&#39;</span><span class=\"mtk1\">, </span><span class=\"mtk4\">function</span><span class=\"mtk1\">(</span><span class=\"mtk12\">response</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk10\">console</span><span class=\"mtk1\">.</span><span class=\"mtk11\">log</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&#39;Successful login for: &#39;</span><span class=\"mtk1\"> + </span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">name</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">document</span><span class=\"mtk1\">.</span><span class=\"mtk11\">getElementById</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&#39;status&#39;</span><span class=\"mtk1\">).</span><span class=\"mtk12\">innerHTML</span><span class=\"mtk1\"> =</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk8\">&#39;Thanks for logging in, &#39;</span><span class=\"mtk1\"> + </span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">name</span><span class=\"mtk1\"> + </span><span class=\"mtk8\">&#39;!&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    });</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  }</span></span></code></pre>\n<p>Now if you save this page as login.html and open it in a browser you should see the Facebook Login button. You can also download this code from my <a href=\"https://github.com/VijayShekhawat/login-with-facebook\">GitHub Repo</a> and I have customized it to make it a bit shorter for an explanation.</p>\n<p>Now just Log In and check the console output. You’ll now see some basic info including id, email, first<em>name, gender, last</em>name.</p>\n<p>This is all there is to it. Of course, there are many more options and features available in Facebook documentation to discover.</p>\n<h3 id=\"closing-thoughts\" style=\"position:relative;\"><a href=\"#closing-thoughts\" aria-label=\"closing thoughts permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Closing Thoughts</h3>\n<p>Social Media platforms are growing day-by-day and simplifying the registration and login process. Consumers can use their existing social identities to register and log in. They don't need to create a separate username/password combination so it is simplifying the Sign in/Signup process.</p>\n<p>LoginRadius supports Sign with Facebook with more than 40 other popular social networks google, twitter, Linkedin, etc. You can implement all the popular social media providers on your website or mobile app in less than 60 seconds.</p>\n<h3 id=\"source\" style=\"position:relative;\"><a href=\"#source\" aria-label=\"source permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Source</h3>\n<p><a href=\"https://www.statista.com/statistics/278414/number-of-worldwide-social-network-users/\">statista</a> </p>\n<p><a href=\"https://news.netcraft.com/archives/2020/01/21/january-2020-web-server-survey.html\">netcraft</a> </p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n  .dark-default-dark .mtk1 { color: #D4D4D4; }\n  .dark-default-dark .mtk12 { color: #9CDCFE; }\n  .dark-default-dark .mtk17 { color: #808080; }\n  .dark-default-dark .mtk4 { color: #569CD6; }\n  .dark-default-dark .mtk10 { color: #4EC9B0; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n  .dark-default-dark .mtk11 { color: #DCDCAA; }\n  .dark-default-dark .mtk3 { color: #6A9955; }\n  .dark-default-dark .mtk15 { color: #C586C0; }\n</style>","frontmatter":{"date":"September 16, 2020","updated_date":null,"description":"This article will explain about social login benefits and how we can implement Sign In using Facebook on our website or mobile app.","title":"How to implement Facebook Login","tags":["Login With Facebook","Facebook","Facebook Login","Login","Oauth"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.6666666666666667,"src":"/static/4e677331ecf5f923c5e08c812bca0026/1c1a5/index.png","srcSet":"/static/4e677331ecf5f923c5e08c812bca0026/69585/index.png 200w,\n/static/4e677331ecf5f923c5e08c812bca0026/497c6/index.png 400w,\n/static/4e677331ecf5f923c5e08c812bca0026/1c1a5/index.png 550w","sizes":"(max-width: 550px) 100vw, 550px"}}},"author":{"id":"Vijay Singh Shekhawat","github":"code-vj","avatar":null}}}},{"node":{"excerpt":"Assuming that the reader of this blog has a fair idea of the docker ecosystem! Docker has changed the world of software development! Since…","fields":{"slug":"/engineering/production-grade-development-using-docker-compose/"},"html":"<blockquote>\n<p>Assuming that the reader of this blog has a fair idea of the docker ecosystem!</p>\n</blockquote>\n<p>Docker has changed the world of software development! Since the last few years, docker has helped the developer community, enterprises, and startups to create solutions quickly and effectively. Also, deployment is relatively hassle-free with docker (conditions apply). And worth mentioning is, it resolves the “Works fine on my system” problem.  </p>\n<p>Well, just not docker, there are many container ecosystems available as an alternative to Docker. For example, Mesos by Apache and Vagrant by Hashicorp. Docker is more loved for what it is <strong>not</strong>, and that is Bulky! Docker is otherwise lightweight, works mostly with Linux and eventually was identified by Kubernetes in 2015. But, that story... some other time!!</p>\n<p>Straight to the context, Docker Compose! Docker compose is a powerful utility that is bundled with Docker installation. Docker-Compose can be used for production and development, to make things virtually seamless.</p>\n<h3 id=\"microservices-and-docker\" style=\"position:relative;\"><a href=\"#microservices-and-docker\" aria-label=\"microservices and docker permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Microservices and Docker</h3>\n<p>Docker is doing a great job when it comes to describing and developing microservices.</p>\n<p>While working on microservices where quite a few ( <em>being reasonably complicated, in our example 6</em> ) containers talk to each other to complete a task and since it is an end to end task, the whole thing looks very complicated. To rectify :</p>\n<ul>\n<li>the troubles of developing end to end feature</li>\n<li>how it works in integration</li>\n<li>containerizing the application</li>\n</ul>\n<p>the developer has two choices, create a script in a scripting language of choice, or choose docker-compose. Well, docker-compose is an easier option.</p>\n<p>Here in this <em>kind of</em> practical example, we are going to demonstrate a similar situation, where multiple containers talk to each other. We are going to use docker-compose as our primary tool to build and deploy images.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 544px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 61.029411764705884%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAADXElEQVQoz3VTbUwTaRCe3qJe1EsMWkzQ5CIXMUETzXk5cyjKBSPE3Pnj1CNqTIzenYSEgImG+AsQUVAxIm1AK1dDEVGhyke/aCm0hWy72w/abgvlIxSRbbfdQulH9Jfru03EmMtN8iRvJjPzPvPMDMzPz2OhUAgLBoOY3+9f63SOA0mSP0ciLBePx7lYbOXj0tISN+70nPV6fYCAAZyC/7XFxUWIxWKwvLwMiUQCcDMBHR1d+e8W6UQoFH7PMOEkTQc5s9lRbLO7wW53Yxx3A17U/iTQNh2BYdEhGBHlfSn4dmGhcDkaLQyzbGE0Gj0uk3XtTE/P/o7yzn5fd6tp+/0H0q1juGNHs7h9o6TtBbRKFWAQHYS7pbtAfCUHWq/ugRaEVQuHwxxil0I8HuOMRryO4zioqr4HlNt92umk/nnaLoWHog54/lIDqvocUDbsg9pLWZtqL2zDmkoy4MblH6GsrAzKyyv4lulwCNFjmBDDspEPas1IJV/QZBqDnp6B/d1ydX4yuQRa3SgQhjdr634FeNlwNFNen5scFP126Vk5Bponf6fxOTygs0uxpbffIOyW64QDSlPGwbziDdeuVW1HzE+6XK4/Kcp7kmGYM0qlVkh5p0Ez8CqVqLh7oK6rMnNvkibhcfcs78NGxwgB9PZpQaMdA5XaCG1PFYgZDkqlpoBlWQ4V4miaTsnh8UxKpqamK3S64QqKmmj2zgRvhiPxxrk5v/SxpP0AG4mA0WQBMFscApvdIyCtboHL7cWmpvjV8O6h6QDaqLco3j+D3gGrzXXFZqdyB7Wmw0N6Y3Hzw9ZKvd50cdI3+0d1TeMui8V61ePxFa0ORyj8BXbmnIXPWrRJ+9NHRy1VpNXZKOtU/8D7PKhls9kK8XhiNS6lG8A6h4MqGNLjX8aNYd/CufPXQSbrFIjFrSD999EGkrT2EYTNIn+tyEaJaxDWTUxM7EZHcMLnmzxhMJjOI2ZF9Xda0nCzDQxG4usll7TJAcdxgU6nA6VKlcXryKOvTyWanp4RWwhbjd0+ruO1DQSCKY3n5uZXbje0bD7++1+gHjR+85/LQT+CWqOFN7396wOBUP3CO+bJI8mrLL4JJEyaZtCQTZDOIoJ0FVht7mP6YTyvpLR6TWlZDYhbnsEntnIYO9rKgIkAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"title\"\n        title=\"title\"\n        src=\"/static/1bda5aef1d7445dcdf8ea583c442f42c/b3e51/example-arch.png\"\n        srcset=\"/static/1bda5aef1d7445dcdf8ea583c442f42c/b3e51/example-arch.png 544w\"\n        sizes=\"(max-width: 544px) 100vw, 544px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>The picture above depicts the architecture of a hypothetical portal of flash sale.</p>\n<p><em>Flash Sale is an e-commerce concept, where an item is made available for sale to the public on a portal at a specific time and in a limited quantity.</em></p>\n<p>The components of the application are</p>\n<ul>\n<li>Gateway</li>\n<li>Frontend (react)</li>\n<li>API server ( node.js)</li>\n<li>SQS ( In this example SQS Emulator)</li>\n<li>Listener (node.js)</li>\n<li>DataStore (mongo-db)</li>\n</ul>\n<p>The application is otherwise fairly simple. Go to the portal, hit the green button which calls an API, the API drops a message to the queue, the listener picks the messages, grabs the item from the database reduces the quantity and updates the datastore again.</p>\n<p>So far so good!</p>\n<h3 id=\"code\" style=\"position:relative;\"><a href=\"#code\" aria-label=\"code permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Code</h3>\n<p>You may fork a copy from here.</p>\n<p><code>git clone https://github.com/LoginRadius/engineering-blog-samples/tree/master/Docker/docker-compose-dev-sample</code></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 225px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAEDBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAB2xOaK6iszkpF7Ah//8QAGxAAAwEAAwEAAAAAAAAAAAAAAQIREgADITH/2gAIAQEAAQUCCLywo2g0x7pGihRhOygfP//EABURAQEAAAAAAAAAAAAAAAAAAAEg/9oACAEDAQE/AQj/xAAWEQADAAAAAAAAAAAAAAAAAAAAEBH/2gAIAQIBAT8BK//EABwQAAICAgMAAAAAAAAAAAAAAAABESESMQIQUf/aAAgBAQAGPwLRWRJBWjQnEv0bx411/8QAHhABAAICAgMBAAAAAAAAAAAAAQARITFBcVFhkaH/2gAIAQEAAT8hfnY5Y0VWvNMftRixpfERcv6lWC+SyxTdtzAl6E0dT//aAAwDAQACAAMAAAAQPz8A/8QAGBEAAwEBAAAAAAAAAAAAAAAAAAERECH/2gAIAQMBAT8QVBrpc//EABgRAAIDAAAAAAAAAAAAAAAAAAABEBEh/9oACAECAQE/EG9Kz//EABsQAQEAAwEBAQAAAAAAAAAAAAERACExQXFh/9oACAEBAAE/EJRUCyuH3kQxxOAHRp7iRMZVEwAXxq9fMWXu7W8I7hY1KXf5vEsJQoem+5v82f/Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"So what is the problem\"\n        title=\"So what is the problem\"\n        src=\"/static/3162769ede82087ce5b5175352957f96/863e1/what-is-the-problem.jpg\"\n        srcset=\"/static/3162769ede82087ce5b5175352957f96/863e1/what-is-the-problem.jpg 225w\"\n        sizes=\"(max-width: 225px) 100vw, 225px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"the-use-of-docker-compose-and-why\" style=\"position:relative;\"><a href=\"#the-use-of-docker-compose-and-why\" aria-label=\"the use of docker compose and why permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The use of docker-compose and why?</h3>\n<p>Exactly! What is the problem? As such, there is no problem, but it may arise if we do not program or develop it well in an integrated manner. Programming a component and managing it well reduces the time-to-production to a greater degree.</p>\n<blockquote>\n<p><em>I am not a great programmer; I am just a good programmer with great habits.</em></p>\n<ul>\n<li>Martin Fowler</li>\n</ul>\n</blockquote>\n<p>While designing and developing complicated systems where microservices are involved, integration and debugging become cumbersome.</p>\n<p>To ease it up docker-compose acts a friend.</p>\n<p>For the example above we are going to write a docker-compose. Docker-Compose has got <em>powers</em> to</p>\n<ul>\n<li>Build images</li>\n<li>Bring up the whole application ecosystem</li>\n<li>Wipe it up from the memory in one command</li>\n</ul>\n<p>First things first, the Dockerfile.</p>\n<p>Starting from the API. The API needs a docker image to build. The following is the Dockerfile for the same.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">FROM node:alpine</span>\n<span class=\"grvsc-line\">WORKDIR &#39;/app&#39;</span>\n<span class=\"grvsc-line\">COPY ./package.json ./</span>\n<span class=\"grvsc-line\">RUN npm install </span>\n<span class=\"grvsc-line\">COPY . .</span>\n<span class=\"grvsc-line\">CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]</span></code></pre>\n<p>Since the other two components, listener and frontend are also written in JavaScript the Dockerfile does not change at all for them too, for this particular example.</p>\n<p>The following is a two-liner Dockerfile for gateway. The conf file targets apiserver and frontend. Please have a look at the configuration file in the repository itself.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">FROM nginx</span>\n<span class=\"grvsc-line\">COPY ./nginx.conf /etc/nginx/conf.d/default.conf</span></code></pre>\n<p>The other 2 components :</p>\n<ul>\n<li>Mongodb has its image. We will leverage that while writing the docker-compose.</li>\n<li>SQS is emulated using softwaremill/elasticmq image.</li>\n</ul>\n<h3 id=\"action\" style=\"position:relative;\"><a href=\"#action\" aria-label=\"action permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Action!</h3>\n<p>First things first, file version. Since it is all yaml out there, the file <code>version</code> tells docker-compose about the data structure. The data structure which is expected by docker \"compose\".</p>\n<p>so we start the docker-compose as</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">version: &#39;3&#39;</span></code></pre>\n<p>All the components in the docker-compose are known as <code>services</code>. Next, we are going to write some services. Yes, the services we have written for our business.</p>\n<p>Message Queue :</p>\n<p>The message queue shall use <code>softwaremill/elasticmq</code> image out of the box and the applications will access that on port 9324. The service description in docker-compose shall look like this.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">mqserver:</span>\n<span class=\"grvsc-line\">        image: softwaremill/elasticmq</span>\n<span class=\"grvsc-line\">        ports:</span>\n<span class=\"grvsc-line\">            - &#39;9324:9324&#39;</span></code></pre>\n<p>That is analogous to <code>docker run -it -p '9324:9324' softwaremill/elasticmq</code>.</p>\n<p>A bit more complicated service next, mongodb.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">mongodbdb: </span>\n<span class=\"grvsc-line\">        depends_on: </span>\n<span class=\"grvsc-line\">            - mqserver</span>\n<span class=\"grvsc-line\">        image: mongo</span>\n<span class=\"grvsc-line\">        container_name: mongo</span>\n<span class=\"grvsc-line\">        volumes:</span>\n<span class=\"grvsc-line\">            - /data/db:/mongodata</span>\n<span class=\"grvsc-line\">        ports:</span>\n<span class=\"grvsc-line\">            - &#39;27017:27017&#39;</span></code></pre>\n<p>There are a couple of things one may notice more here.</p>\n<p><code>depends_on</code> shall wait for the container of mqserver service to come up, before mongodbdb service goes on air.</p>\n<blockquote>\n<p>Docker is only liable to check the containers when we use depends_on, if you want to check whether your service (which you have embedded) is ready to use or not, use <code>healthcheck</code>and <code>link</code>.</p>\n</blockquote>\n<p>Apart from this, we are mounting a volume and exposing ports for an image mongo which gets pulled directly from the docker container registry. <code>container_name</code> will give the service a name, so that it can be discovered *in the network. *Kind of a domain name in the internal docker-compose network.</p>\n<p>Now the developer's proprietary API service:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">apiserver:</span>\n<span class=\"grvsc-line\">        restart: always</span>\n<span class=\"grvsc-line\">        depends_on: </span>\n<span class=\"grvsc-line\">            - mqserver</span>\n<span class=\"grvsc-line\">            - mongodbdb</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">        build:</span>\n<span class=\"grvsc-line\">            dockerfile: Dockerfile</span>\n<span class=\"grvsc-line\">            context: ../fs-express-api/.</span>\n<span class=\"grvsc-line\">        volumes:</span>\n<span class=\"grvsc-line\">            - /app/node_modules</span>\n<span class=\"grvsc-line\">        environment: </span>\n<span class=\"grvsc-line\">            - NODE_ENV=production</span>\n<span class=\"grvsc-line\">            - AWS_SQS_URL=http://mqserver:9324/</span>\n<span class=\"grvsc-line\">            - AWS_SQS_FQ_URL=http://mqserver:9324/queue/fsqueue</span>\n<span class=\"grvsc-line\">            - AWS_ACCESS_KEY=na</span>\n<span class=\"grvsc-line\">            - AWS_SECRET_ACCESS_KEY=na</span>\n<span class=\"grvsc-line\">            - AWS_REGION=REGION</span>\n<span class=\"grvsc-line\">            - QUEUE_NAME=fsqueue</span>\n<span class=\"grvsc-line\">            - MONGODB_CONNECTION=mongodb://mongo:27017/fsorder</span>\n<span class=\"grvsc-line\">            - API_APP_PORT=5000</span>\n<span class=\"grvsc-line\">        ports:</span>\n<span class=\"grvsc-line\">            - &#39;5000:5000&#39;</span></code></pre>\n<p>The <code>build</code>tag will be used by the <code>docker-compose build</code> command to build an image. The build is defined as Dockerfile and the context is docker context, the directory which you want to use as context. Equivalent to:  <code>docker build -f filename.</code></p>\n<p>The more you are seeing here is <em>environment</em> and <em>restart</em> options. Environment variables are used to set environment variables while running the image. This is another part where docker-compose comes handy. Think about setting all nine environment variables with <code>docker run</code>.</p>\n<p><code>restart</code> is a bit interesting. One may specify a restart policy if the application crashes, which leads to stopping the docker image itself. always specifies to restart the container if it exit.</p>\n<p>In the environment section, one can see mqserver and mongo, instead of the regular localhost and loopback address. This is because when we run docker-compose, it creates a DNS recordset of all the <code>services</code> mentioned. The services can be referred to by their names. A slight deviation here may happen when the container is explicitly named. Here, container_name = mongo is used for service mongodbdb. Hence, the other containers in the environment shall refer to it by mongo and not mongodbdb.</p>\n<p>The pollingmod and frontend services are quite the same.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">    pollingmod:</span>\n<span class=\"grvsc-line\">        restart: always</span>\n<span class=\"grvsc-line\">        depends_on: </span>\n<span class=\"grvsc-line\">            - mqserver</span>\n<span class=\"grvsc-line\">            - mongodbdb</span>\n<span class=\"grvsc-line\">        build:</span>\n<span class=\"grvsc-line\">            dockerfile: Dockerfile</span>\n<span class=\"grvsc-line\">            context: ../polling-mod/</span>\n<span class=\"grvsc-line\">        volumes:</span>\n<span class=\"grvsc-line\">            - /app/node_modules</span>\n<span class=\"grvsc-line\">        environment: </span>\n<span class=\"grvsc-line\">            - AWS_QUEUE_URL=http://mqserver:9324/queue/fsqueue</span>\n<span class=\"grvsc-line\">            - AWS_ACCESS_KEY=na</span>\n<span class=\"grvsc-line\">            - AWS_SECRET_ACCESS_KEY=na</span>\n<span class=\"grvsc-line\">            - AWS_REGION=REGION</span>\n<span class=\"grvsc-line\">            - MONGODB_CONNECTION=mongodb://mongo:27017/fsorder   </span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">    frontend:</span>\n<span class=\"grvsc-line\">        build:</span>\n<span class=\"grvsc-line\">            dockerfile: Dockerfile</span>\n<span class=\"grvsc-line\">            context: ../fs-frontend</span>\n<span class=\"grvsc-line\">        volumes:</span>\n<span class=\"grvsc-line\">            - /app/node_modules</span>\n<span class=\"grvsc-line\">            - ../fs-frontend:/app</span>\n<span class=\"grvsc-line\">        stdin_open: true</span>\n<span class=\"grvsc-line\">        ports:</span>\n<span class=\"grvsc-line\">            - &#39;3000:3000&#39;</span></code></pre>\n<p>Finally, the gateway. So, a gateway is created on the front using Nginx to make the development production-grade. If you go through the gateway code you will find that the services are accessed by their name <code>frontend</code> and <code>apiserver</code>.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">upstream frontend{</span>\n<span class=\"grvsc-line\">    server frontend:3000;</span>\n<span class=\"grvsc-line\">}</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">upstream apiserver{</span>\n<span class=\"grvsc-line\">    server apiserver:5000;</span>\n<span class=\"grvsc-line\">}</span></code></pre>\n<p>The Nginx container opens port 80 to an external port 5500. The Nginx container keeps configuration where the user can see just one port 5500 from out of the system, everything else is gray.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 542px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 31.734317343173434%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABiElEQVQY02WQzS8DYRDGh15cXInPAwd3icTFwaEOzhJ/BGfh6uDg1JIWkTqIkJA4IYQmu91+0O272+622m6/Euwq8VVtmpR2x2zTC97kl3kO8z4zz4AoyrDmXIVUSrMpatyGiFAqlcCq5XK5WUVRZIlEAuPxeJ3AP5jEt6qq6PVyDuA4YcSzvQHJVBoYk+H+rtCZTCanDcOw67pup+Ypas7mcjkkGvl8HlsaLU2YxLemaSgIQScsLi1PcJx/lAxWFDUxL0eVua+vGlYqFaxWq2iaDcxkMphOp81oNIqMMZQkCWOxWFMTJummIc8HnECvw+X2DIbD8sz5BT/J88HZl9e3zwfdMHTjsfj2/lGkjWv0oaEoal1RlDpt3IQG1MnMOkOtZeiAoeGxHutOEYobFiUoPr227e4dD1x6Q31X3uvedddOP5lkW/F+USgQLW2l8PtDbujqHm/f3Dpoo0jtwWDY5vPdABnC2bkAh0cnoOWeIRAI7TNJvo1EJEZI/2CyKEak7OnZ5cIP/vFp9zeD8fcAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"User to System\"\n        title=\"User to System\"\n        src=\"/static/75b7d55327e23abc1558b2172b80f0f0/c0388/UserToSystem.png\"\n        srcset=\"/static/75b7d55327e23abc1558b2172b80f0f0/c0388/UserToSystem.png 542w\"\n        sizes=\"(max-width: 542px) 100vw, 542px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>And this is, how it happens in the real world as well!</p>\n<p>Finally, we have docker-compose.yml. And following are simple commands which make life even simpler when we need to build and run &#x26; stop the entire ecosystem.</p>\n<p>To build</p>\n<p><code>docker-compose build</code></p>\n<p>To start</p>\n<p><code>docker-compose up</code></p>\n<p>To stop</p>\n<p><code>docker-compose down</code></p>\n<p>This scratches the surface of using docker-compose for a production-grade development environment.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 493px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 82.96146044624746%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAIAAABSJhvpAAAACXBIWXMAABJ0AAASdAHeZh94AAAD5klEQVQ4y2NgZmZesGBBfX19TU3NzJkzZ8yY0dLSAmS0trbGxcV1d3c3NjaWl5fX1tYC2UDBjo4OIHfatGkqKioMQABUlJiYGBYWVlpampKSAiSB0uHh4d7e3nl5eenp6QkJCf7+/kB2RkZGfn5+VlZWWlqakJAQSHNOTs78+fObm5snTJjQ0NAAdAWQGx0dDTQFaM+UKVP6+vqmT58OtADoqKKiosWLF2dnZzNAgJ2dLdBsNze3kJCQ9IwMF1eXqKgoNzdXX18foCWxsbFAa4F2AmW9vLxMTU0iIiK8vDwZGBgZMAETE0i0pqZu5oxZkyZO0tTQAAsyYVEqJsohKMzOI8jGxc/CKcjCJQgkWVWURNpba5oaq6urS3MKi9zc3ZzszX38/PSM9USl+EUkePlA6pkZvFwlTU0F1PQ5FfQ5pfXYJXRYxHW4nD01ZnTE71jRu3VR16GDW44f23Ll7JbHj68tXlQfEWmoYCAgp8OmoMfJ4G4vaGbEbmzEbmTKrW3MI6vNoWkkWpPmuqzcf1WJ6742v3mFnstndV68tG/hwqaSHENTSwEhOUYxBQZJdWYGNzsOVxsOL0d+Z0cBGztBPTP+tliV47Vmh3uD1tf6nOp2v9DlML8qorTcPyBMTMuIRVSBWUiKQd5M0CbVnMHHiT3Mkz/cVzTAT9TDUyQ6Qu9Iu/3+apW9rRbnZ0btKPFaGmC9vT2xMM9JxZRTWo1LWIZByUY8flJi3bYmhkAPnkh/4eggUX8f3uxsmwub2t/vr9vT4dgVpby6NKTQzLzW0XxuqXd+sp2kKju/OIOCtVja3MxJp6bnLy9iCAsQjAmTjI6Ubm8NOHJg0ePDM47PTLg9v2xdU05ndvyS1Mw6d6cFWalz6tJUDATlDISiJydOuzCn83CfS5YRQ1ykWFKMTGWV88UTy2+dWXd46+R1c8uPLOh7vHrTorbCSZURvWmuszKTd/Z07tiybNvh9Xsvb154eWnMlDAdKxaGlBjJ5GjpmiqPSW0BjWVOmQF8k1qCdm7oX1QZUZdm1V/jPLnCb2Vf3M6VTXt2Lzl3Zuutq6c3XtxoGSWnb8bKEBsilhAmFRssEerP5+bJ4uXB4WzLHuHHt2JG3o5lDUc39e5Y3T27LyMpkq+rO3Xv3nWTVzcnTo3Utec1cRJg8PUUCPASCPYVDPATiIxQSIpWN9RlcLLlqc8zW9Id3l5l3Zlv1NUS6ODJ7BrEl1hl33yg1zXLWNeGz9xDgsHWls/Gls3FmcvVjT0hRnlBY6y7s6iTBXeIG0+AP4u7B2NAIJt/HJODJ0dci2vLvp6cJbmmXsLm7hLW3tIAw+9kFKCGTbYAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"No Animals Harmed\"\n        title=\"No Animals Harmed\"\n        src=\"/static/ce6bb0b0f93199d6510e41916aebfbe2/f88d0/noanimalsharmed.png\"\n        srcset=\"/static/ce6bb0b0f93199d6510e41916aebfbe2/f88d0/noanimalsharmed.png 493w\"\n        sizes=\"(max-width: 493px) 100vw, 493px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Thanks for reading the blog. For detailed information and execution example of this blog, please refer to the video below:</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/G-s2GXGAjTk\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n</style>","frontmatter":{"date":"September 11, 2020","updated_date":null,"description":null,"title":"Production Grade Development using Docker-Compose","tags":["Docker","Docker-compose"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7699115044247788,"src":"/static/a4a816f26fe017e3244b736c0cbee474/ee604/index.png","srcSet":"/static/a4a816f26fe017e3244b736c0cbee474/69585/index.png 200w,\n/static/a4a816f26fe017e3244b736c0cbee474/497c6/index.png 400w,\n/static/a4a816f26fe017e3244b736c0cbee474/ee604/index.png 800w,\n/static/a4a816f26fe017e3244b736c0cbee474/f3583/index.png 1200w,\n/static/a4a816f26fe017e3244b736c0cbee474/5707d/index.png 1600w,\n/static/a4a816f26fe017e3244b736c0cbee474/eeb1b/index.png 1920w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Anurag Choudhary","github":"choudharyanurag","avatar":null}}}},{"node":{"excerpt":"In JavaScript, web workers allow developers to benefit from parallel programming. Parallel programming enables various computations to be…","fields":{"slug":"/engineering/adding-multi-threading-to-javascript-using-web-workers/"},"html":"<p>In JavaScript, web workers allow developers to benefit from parallel programming. Parallel programming enables various computations to be performed at the same time by applications. It is helpful to consider the importance of web staff as an example of how humans benefit from parallel tasks.</p>\n<p>Web workers give us the ability to write multi-threaded Javascript that doesn't block the DOM. To some extent, even asynchronous operations block the DOM. On the other hand, Web employees help us solve this problem, escape from the single-threaded world, and achieve higher <a href=\"https://www.loginradius.com/blog/engineering/16-javascript-hacks-for-optimization/\">performance on our web pages</a>.</p>\n<h2 id=\"what-are-web-workers-in-js\" style=\"position:relative;\"><a href=\"#what-are-web-workers-in-js\" aria-label=\"what are web workers in js permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What are web workers in JS?</h2>\n<p>Web Workers are a simple means of running scripts in background threads for web content. Without interfering with the user interface, the worker thread may perform tasks.</p>\n<p>Furthermore, they can use XMLHttpRequest to perform I/O (although the responseXML and channel attributes are always null) or fetch (with no such restrictions). Once created, by posting messages to an event handler defined by that code, a worker can send messages to the JavaScript code that made it (and vice versa).</p>\n<h2 id=\"why-use-javascript-web-workers\" style=\"position:relative;\"><a href=\"#why-use-javascript-web-workers\" aria-label=\"why use javascript web workers permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why Use JavaScript Web Workers?</h2>\n<p>Web workers let you build background threads separate from the main execution thread, where the logic of the user interface is usually executed. </p>\n<p>The key benefit of this separation of workload is that inside an isolated thread and without interrupting or impacting the main thread's responsiveness and usability, you can perform costly operations.</p>\n<p>When the background thread completes its mission, the main thread is informed of the results seamlessly via an event handled by standard <a href=\"https://www.loginradius.com/blog/engineering/understanding-event-loop/\">JavaScript event handling</a>.</p>\n<h2 id=\"setting-up-web-workers--multi-threading-to-javascript\" style=\"position:relative;\"><a href=\"#setting-up-web-workers--multi-threading-to-javascript\" aria-label=\"setting up web workers  multi threading to javascript permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Setting Up Web Workers &#x26; Multi-threading to JavaScript</h2>\n<h3 id=\"step-1-create-a-project-folder-and-add-indexhtml-in-the-root-of-it\" style=\"position:relative;\"><a href=\"#step-1-create-a-project-folder-and-add-indexhtml-in-the-root-of-it\" aria-label=\"step 1 create a project folder and add indexhtml in the root of it permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 1: Create a project folder and add index.html in the root of it.</h3>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"html\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">&lt;!</span><span class=\"mtk12\">DOCTYPE</span><span class=\"mtk1\"> </span><span class=\"mtk12\">html</span><span class=\"mtk1\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">html</span><span class=\"mtk1\"> </span><span class=\"mtk12\">lang</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;en&quot;</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">head</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">meta</span><span class=\"mtk1\"> </span><span class=\"mtk12\">charset</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;UTF-8&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk17\">/&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">meta</span><span class=\"mtk1\"> </span><span class=\"mtk12\">name</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;viewport&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">content</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;width=device-width, initial-scale=1.0&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk17\">/&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">title</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">Club JavaScripters</span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">title</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">head</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">body</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">button</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">Can you click me?</span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">button</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">h2</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">Let&#39;s do the party. 👯‍♂️‍</span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">h2</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">ul</span><span class=\"mtk1\"> </span><span class=\"mtk12\">id</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;club&quot;</span><span class=\"mtk17\">&gt;&lt;/</span><span class=\"mtk4\">ul</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">script</span><span class=\"mtk1\"> </span><span class=\"mtk12\">src</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;./main.js&quot;</span><span class=\"mtk17\">&gt;&lt;/</span><span class=\"mtk4\">script</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">body</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">html</span><span class=\"mtk17\">&gt;</span></span></code></pre>\n<p>We just created a simple HTML page with a link to our javascript file which we will create in a moment.</p>\n<h3 id=\"step-2-lets-add-our-javascript-code-in-two-separate-files-mainjs-and-workerjs-in-the-same-folder\" style=\"position:relative;\"><a href=\"#step-2-lets-add-our-javascript-code-in-two-separate-files-mainjs-and-workerjs-in-the-same-folder\" aria-label=\"step 2 lets add our javascript code in two separate files mainjs and workerjs in the same folder permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 2: Let's add our JavaScript code in two separate files, <code>main.js</code> and <code>worker.js</code> in the same folder.</h3>\n<p><code>main.js</code></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">persons</span><span class=\"mtk1\"> = [</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Hriday&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Hridayesh&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">false</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Bob&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Daisy&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">]</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">// Our club container</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">club</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">document</span><span class=\"mtk1\">.</span><span class=\"mtk11\">getElementById</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;club&quot;</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">let</span><span class=\"mtk1\"> </span><span class=\"mtk12\">worker</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">/**</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\"> * Function entry allows entry to people coming to our club</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\"> */</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">entry</span><span class=\"mtk1\">(</span><span class=\"mtk12\">persons</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">persons</span><span class=\"mtk1\">.</span><span class=\"mtk11\">forEach</span><span class=\"mtk1\">(</span><span class=\"mtk12\">person</span><span class=\"mtk1\"> </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">const</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">isMember</span><span class=\"mtk1\">, </span><span class=\"mtk12\">name</span><span class=\"mtk1\"> } = </span><span class=\"mtk12\">person</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">listItem</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">document</span><span class=\"mtk1\">.</span><span class=\"mtk11\">createElement</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;li&quot;</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">listItem</span><span class=\"mtk1\">.</span><span class=\"mtk12\">textContent</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">name</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk3\">// if a person is not registered, register them first</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (!</span><span class=\"mtk12\">isMember</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk3\">// create a new worker thread</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">worker</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">Worker</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;worker.js&quot;</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk3\">// pass data to worker thread</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">worker</span><span class=\"mtk1\">.</span><span class=\"mtk11\">postMessage</span><span class=\"mtk1\">(</span><span class=\"mtk12\">name</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk3\">// listen to any data passed from worker thread</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">worker</span><span class=\"mtk1\">.</span><span class=\"mtk11\">addEventListener</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;message&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk12\">event</span><span class=\"mtk1\"> </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">event</span><span class=\"mtk1\">.</span><span class=\"mtk12\">data</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">          </span><span class=\"mtk12\">club</span><span class=\"mtk1\">.</span><span class=\"mtk11\">appendChild</span><span class=\"mtk1\">(</span><span class=\"mtk12\">listItem</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    } </span><span class=\"mtk15\">else</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk3\">// if they are registered let them in</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">club</span><span class=\"mtk1\">.</span><span class=\"mtk11\">appendChild</span><span class=\"mtk1\">(</span><span class=\"mtk12\">listItem</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk11\">entry</span><span class=\"mtk1\">(</span><span class=\"mtk12\">persons</span><span class=\"mtk1\">)</span></span></code></pre>\n<p><code>worker.js</code></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">// addEventListener is directly accessible in worker file</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk11\">addEventListener</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;message&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk12\">event</span><span class=\"mtk1\"> </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk3\">// extract person passed from main thread from event object</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk4\">let</span><span class=\"mtk1\"> </span><span class=\"mtk12\">person</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">event</span><span class=\"mtk1\">.</span><span class=\"mtk12\">data</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk11\">registerMember</span><span class=\"mtk1\">(</span><span class=\"mtk12\">person</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">})</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">registerMember</span><span class=\"mtk1\">(</span><span class=\"mtk12\">member</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk3\">// generating membership card takes some amount of time</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk4\">let</span><span class=\"mtk1\"> </span><span class=\"mtk12\">i</span><span class=\"mtk1\"> = </span><span class=\"mtk7\">0</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk15\">while</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">i</span><span class=\"mtk1\"> &lt; </span><span class=\"mtk10\">Math</span><span class=\"mtk1\">.</span><span class=\"mtk11\">pow</span><span class=\"mtk1\">(</span><span class=\"mtk7\">10</span><span class=\"mtk1\">, </span><span class=\"mtk7\">10</span><span class=\"mtk1\">)) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">i</span><span class=\"mtk1\">++</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk3\">// send result back to the main thread</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk11\">postMessage</span><span class=\"mtk1\">(</span><span class=\"mtk4\">true</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk11\">close</span><span class=\"mtk1\">()</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span></code></pre>\n<h3 id=\"step-3-on-to-some-explanations-about-what-just-happened\" style=\"position:relative;\"><a href=\"#step-3-on-to-some-explanations-about-what-just-happened\" aria-label=\"step 3 on to some explanations about what just happened permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 3: On to some Explanations about what just happened.</h3>\n<p>Now, the problem I faced when I went to the club with Hriday was that I (and everyone else after me) had to wait for my registration process to complete. We don't want that to happen to our virtual club and therefore we added one more person (thread) who is in charge of the whole registration process. Once registration is done, he will tell the main guy(thread) to let the new person in.</p>\n<h3 id=\"heres-what-we-did-to-solve-it-in-our-code\" style=\"position:relative;\"><a href=\"#heres-what-we-did-to-solve-it-in-our-code\" aria-label=\"heres what we did to solve it in our code permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Here's what we did to solve it in our code.</h3>\n<ol>\n<li>First of all we check for each person if they are a member or not. If they are, we let them in.</li>\n<li>If someone is not a member of the club yet, we create a worker thread for it using <code>new Worker('path to worker code')</code> and pass that person to the worker thread using <code>worker.postMessage()</code> and add the person as a member after registering them.</li>\n<li>To simulate the registration process we are doing some processing using a long <code>while</code> loop. In real life this could be some cryptographic code, image processing or anything that is CPU intensive and might block the main thread and make the page unresponsive.</li>\n<li>Once registered, the worker thread let's the main thread know about it by sending data using <code>postMessage</code> and the main thread listens for it using <code>onmessage handler</code> and lets the person in the club i.e add to DOM.</li>\n<li>Once we get the result from the worker thread, we close it using <code>close()</code>.</li>\n</ol>\n<h2 id=\"web-workers-faqs\" style=\"position:relative;\"><a href=\"#web-workers-faqs\" aria-label=\"web workers faqs permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Web Workers FAQs</h2>\n<h3 id=\"how-do-the-main-thread-and-worker-threads-talk-to-each-other\" style=\"position:relative;\"><a href=\"#how-do-the-main-thread-and-worker-threads-talk-to-each-other\" aria-label=\"how do the main thread and worker threads talk to each other permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How do the main thread and worker threads talk to each other?</h3>\n<p>They talk to each other by message passing. Both workers and the main thread use <code>postMessage</code> to send data to each other and <code>onmessage</code> event handler to get data. The data is available inside the event's data property.\nYou can only pass one argument to <code>postMessage</code>. If you wish to pass multiple arguments use an <code>object</code> instead.</p>\n<h3 id=\"can-i-update-dom-in-a-worker-thread-or-access-window-object\" style=\"position:relative;\"><a href=\"#can-i-update-dom-in-a-worker-thread-or-access-window-object\" aria-label=\"can i update dom in a worker thread or access window object permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Can I update DOM in a worker thread or access window object?</h3>\n<p>No you can not update DOM in a worker thread as worker threads run in a separate context from the main window and don't have access to <code>window</code> object and <code>document</code> object but they do have access to some of the <code>window</code> object's capabilities like <code>Websockets</code> and <code>indexedDB</code>.</p>\n<h3 id=\"why-did-you-add-worker-code-in-a-separate-file\" style=\"position:relative;\"><a href=\"#why-did-you-add-worker-code-in-a-separate-file\" aria-label=\"why did you add worker code in a separate file permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why did you add worker code in a separate file?</h3>\n<p>It's important that the worker code must be in a separate file, which we can use to create a separate worker thread by using the <code>Worker</code> constructor and passing it the path of the file.</p>\n<h3 id=\"why-did-you-add-that-button-i-can-easily-click-it\" style=\"position:relative;\"><a href=\"#why-did-you-add-that-button-i-can-easily-click-it\" aria-label=\"why did you add that button i can easily click it permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why did you add that button? I can easily click it.</h3>\n<p>You were able to click that button because we did not block the main thread.\nTo see the difference add the following code to <code>main.js</code> and see the difference.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">persons</span><span class=\"mtk1\"> = [</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Joe&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Hriday&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Hridayesh&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">false</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Bob&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Daisy&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">isMember:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">]</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">// Our club container</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">club</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">document</span><span class=\"mtk1\">.</span><span class=\"mtk11\">getElementById</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;club&quot;</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">let</span><span class=\"mtk1\"> </span><span class=\"mtk12\">worker</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">entry</span><span class=\"mtk1\">() {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">persons</span><span class=\"mtk1\">.</span><span class=\"mtk11\">forEach</span><span class=\"mtk1\">(</span><span class=\"mtk12\">person</span><span class=\"mtk1\"> </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">const</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">isMember</span><span class=\"mtk1\">, </span><span class=\"mtk12\">name</span><span class=\"mtk1\"> } = </span><span class=\"mtk12\">person</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">listItem</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">document</span><span class=\"mtk1\">.</span><span class=\"mtk11\">createElement</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;li&quot;</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">listItem</span><span class=\"mtk1\">.</span><span class=\"mtk12\">textContent</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">name</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (!</span><span class=\"mtk12\">isMember</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk4\">let</span><span class=\"mtk1\"> </span><span class=\"mtk12\">memeberAdded</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">registerMember</span><span class=\"mtk1\">(</span><span class=\"mtk12\">person</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">memeberAdded</span><span class=\"mtk1\">) </span><span class=\"mtk12\">club</span><span class=\"mtk1\">.</span><span class=\"mtk11\">appendChild</span><span class=\"mtk1\">(</span><span class=\"mtk12\">listItem</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    } </span><span class=\"mtk15\">else</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">club</span><span class=\"mtk1\">.</span><span class=\"mtk11\">appendChild</span><span class=\"mtk1\">(</span><span class=\"mtk12\">listItem</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk11\">entry</span><span class=\"mtk1\">()</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">function</span><span class=\"mtk1\"> </span><span class=\"mtk11\">registerMember</span><span class=\"mtk1\">(</span><span class=\"mtk12\">member</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk4\">let</span><span class=\"mtk1\"> </span><span class=\"mtk12\">i</span><span class=\"mtk1\"> = </span><span class=\"mtk7\">0</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk15\">while</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">i</span><span class=\"mtk1\"> &lt; </span><span class=\"mtk10\">Math</span><span class=\"mtk1\">.</span><span class=\"mtk11\">pow</span><span class=\"mtk1\">(</span><span class=\"mtk7\">10</span><span class=\"mtk1\">, </span><span class=\"mtk7\">10</span><span class=\"mtk1\">)) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">i</span><span class=\"mtk1\">++</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk11\">close</span><span class=\"mtk1\">()</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span></code></pre>\n<h3 id=\"could-you-still-click-the-button\" style=\"position:relative;\"><a href=\"#could-you-still-click-the-button\" aria-label=\"could you still click the button permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Could you still click the button?</h3>\n<p>You can share that answer in the comment section 😉 To get the full code you can visit to <a href=\"https://github.com/LoginRadius/engineering-blog-samples/tree/master/JavaScript/WebWorkers\">Github Repo</a></p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>We introduced web workers in this article, a technology that helps the web industry keep up with demanding web applications. This is achieved by providing web apps with a way to exploit multiprocessor and multi-threaded machines by granting JavaScript some multi-threaded superpowers.</p>\n<p>Do you have any tips on web workers and the web as a forum for programming? Let us know in the comment section below.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n  .dark-default-dark .mtk1 { color: #D4D4D4; }\n  .dark-default-dark .mtk12 { color: #9CDCFE; }\n  .dark-default-dark .mtk17 { color: #808080; }\n  .dark-default-dark .mtk4 { color: #569CD6; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n  .dark-default-dark .mtk3 { color: #6A9955; }\n  .dark-default-dark .mtk11 { color: #DCDCAA; }\n  .dark-default-dark .mtk15 { color: #C586C0; }\n  .dark-default-dark .mtk10 { color: #4EC9B0; }\n  .dark-default-dark .mtk7 { color: #B5CEA8; }\n</style>","frontmatter":{"date":"September 09, 2020","updated_date":null,"description":" Learn how web workers help with the success of the web app and get started by creating a simple web worker for JavaScript.","title":"Web Workers: How to add multi-threading in JS","tags":["JavaScript","Web"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7699115044247788,"src":"/static/bb9b45936f45ddb8d312dcff1653e084/14b42/cover.jpg","srcSet":"/static/bb9b45936f45ddb8d312dcff1653e084/f836f/cover.jpg 200w,\n/static/bb9b45936f45ddb8d312dcff1653e084/2244e/cover.jpg 400w,\n/static/bb9b45936f45ddb8d312dcff1653e084/14b42/cover.jpg 800w,\n/static/bb9b45936f45ddb8d312dcff1653e084/47498/cover.jpg 1200w,\n/static/bb9b45936f45ddb8d312dcff1653e084/ec6c5/cover.jpg 1280w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Hridayesh Sharma","github":"vyasriday","avatar":null}}}},{"node":{"excerpt":"In this article, we will learn about state management in Angular with NGXS. Here we will understand the basic concept of NGXS and create a…","fields":{"slug":"/engineering/angular-state-management-with-ngxs/"},"html":"<p>In this article, we will learn about state management in Angular with NGXS. Here we will understand the basic concept of NGXS and create a simple TO-DO App.</p>\n<h2 id=\"what-is-state\" style=\"position:relative;\"><a href=\"#what-is-state\" aria-label=\"what is state permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is State</h2>\n<p>In the bigger apps, managing the data states is very complicated. In angular, each component has its own state, to share the data/state between the components we normally use @Input and @Output decorators, but when the application goes bigger, its challenging to maintain the data consistency. So to solve this problem, redux was introduced. It provides a central store that holds all states of your application. Each component can access the stored state without sending it from one component to another.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 58.92307692307692%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB9ElEQVQoz01SyXLaQBDlmsrf+Z7Kn+SWs38glUMOObhycRX2gcRsAWGkmEppQUhGAolFLCVUGAktM5rJQ8I4XV2zdPebft09lZwxxvl0OjUMY6TrWDNCWH4S2Asn3+12hmmqmrbdbnGlJx/LsqyCC/zHVzmEIRw5P8l0H12P/a8T3/OD1Wq1C4IkTXnxIiBvYMjhcECG0kdPG/3wtHz3vf/+ZnBtbqLNSjdNxBBCinAOghUgS+ayLLdarfJVWrC9XwRXXfuj6Pxd70Sh2+l0QW3/8pIX+c5giKqqgiAsFgvgwQeWknlyPPI8VxVZkqTxePzY60VRhJrPmbF5ntcXRW04RMTTYKBpWlrWxnmaZs581hn8cVxXlCRFUUajUVYwP4N7gmBb1rMxwhNpktRqteVyyYtysDabTW+zGWoa6kqSpFqtBkEAe4qGCb3eaj67Gyifb245yX49PKy329/tdjmVer2BNn5rP3752cqisN5o+L7fajZROchXHMdJ49j01v3nCaJd10VCFB+GIa5gyyiRnbm+8GiaIhgYrHGSEEor/PUnYPINzdgfYU9QD0YaRhG4HeOYkIyxcg7n4LdRlQrEpx93qjWxbUvTdcu2TdNEF8eWJSuKO5tdusAuYCS6KCMZheZ5qcUXZZSejvgbMeS/YMg/cHaVEGMm3H4AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Image\"\n        title=\"Image\"\n        src=\"/static/e7078db45932adcc702097caf1919a23/e5715/redux.png\"\n        srcset=\"/static/e7078db45932adcc702097caf1919a23/a6d36/redux.png 650w,\n/static/e7078db45932adcc702097caf1919a23/e5715/redux.png 768w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"what-is-ngxs\" style=\"position:relative;\"><a href=\"#what-is-ngxs\" aria-label=\"what is ngxs permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is NGXS</h2>\n<p>NGXS is a state management pattern + library. It provides as a single source of truth for your application's state, providing simple rules for predictable state mutations.</p>\n<p>NGXS is modeled after the CQRS pattern popularly implemented in libraries like Redux and NgRx but reduces boilerplate by using modern TypeScript features such as classes and decorators.</p>\n<h2 id=\"how-ngxs-works\" style=\"position:relative;\"><a href=\"#how-ngxs-works\" aria-label=\"how ngxs works permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How NGXS works:</h2>\n<p>NGXS is very simple to use as compared to other state management patterns like redux and Akita. NGXS takes full advantage of angular and typescript over the redux pattern.\nThere are majors 4 concepts to NGXS</p>\n<h4 id=\"1-store\" style=\"position:relative;\"><a href=\"#1-store\" aria-label=\"1 store permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Store:</h4>\n<p>It is a global state container and manages the states of the application.We can dispatch the actions to perform certain operations.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"typescript\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">this</span><span class=\"mtk1\">.</span><span class=\"mtk12\">store</span><span class=\"mtk1\">.</span><span class=\"mtk11\">dispatch</span><span class=\"mtk1\">(</span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">TodoActions</span><span class=\"mtk1\">.</span><span class=\"mtk10\">AddTodo</span><span class=\"mtk1\">(</span><span class=\"mtk12\">form</span><span class=\"mtk1\">));</span></span></code></pre>\n<h4 id=\"2-actions\" style=\"position:relative;\"><a href=\"#2-actions\" aria-label=\"2 actions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Actions</h4>\n<p>An action is a type of command which should be called when something happens or you want to trigger at any event like adding a new todo, listing todos etc.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"typescript\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">AddTodo</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">static</span><span class=\"mtk1\"> </span><span class=\"mtk4\">readonly</span><span class=\"mtk1\"> </span><span class=\"mtk12\">type</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&#39;[Todo] Add&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">constructor</span><span class=\"mtk1\">(</span><span class=\"mtk4\">public</span><span class=\"mtk1\"> </span><span class=\"mtk12\">payload</span><span class=\"mtk1\">: </span><span class=\"mtk10\">ITodo</span><span class=\"mtk1\">) { }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span></code></pre>\n<h4 id=\"3-state\" style=\"position:relative;\"><a href=\"#3-state\" aria-label=\"3 state permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. State</h4>\n<p>States are classes along with decorators to describe metadata and action mappings.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"typescript\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">Injectable</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@angular/core&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">State</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@ngxs/store&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">@</span><span class=\"mtk11\">State</span><span class=\"mtk1\">&lt;</span><span class=\"mtk10\">ITodoStateModel</span><span class=\"mtk1\">[]&gt;({</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;todoList&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">defaults:</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk12\">todoList:</span><span class=\"mtk1\"> [],</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">})</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">@</span><span class=\"mtk11\">Injectable</span><span class=\"mtk1\">()</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">TodoState</span><span class=\"mtk1\"> {}</span></span></code></pre>\n<h4 id=\"4-select\" style=\"position:relative;\"><a href=\"#4-select\" aria-label=\"4 select permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. Select</h4>\n<p>Selects are functions that slice a specific portion of the state from the global state container i.e. to get the data from the specific global state whenever you want to use.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"typescript\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">  @</span><span class=\"mtk11\">Select</span><span class=\"mtk1\">(</span><span class=\"mtk12\">TodoState</span><span class=\"mtk1\">) todoList$: </span><span class=\"mtk12\">Observable</span><span class=\"mtk1\">&lt;</span><span class=\"mtk12\">ITodo</span><span class=\"mtk1\">&gt;;</span></span></code></pre>\n<h2 id=\"lets-build-a-to-do-app\" style=\"position:relative;\"><a href=\"#lets-build-a-to-do-app\" aria-label=\"lets build a to do app permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Let's build a To-Do App:</h2>\n<h4 id=\"1-get-started\" style=\"position:relative;\"><a href=\"#1-get-started\" aria-label=\"1 get started permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Get started</h4>\n<p>Install the <code>npm install @ngxs/store --save</code> then import the below code in  <code>app.module.ts</code></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"typescript\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">//File name app.module.ts</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">NgxsModule</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@ngxs/store&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">@</span><span class=\"mtk11\">NgModule</span><span class=\"mtk1\">({</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">imports:</span><span class=\"mtk1\"> [</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">NgxsModule</span><span class=\"mtk1\">.</span><span class=\"mtk11\">forRoot</span><span class=\"mtk1\">([</span><span class=\"mtk12\">ToDoState</span><span class=\"mtk1\">], { </span><span class=\"mtk3\">// here login state </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">developmentMode:</span><span class=\"mtk1\"> !</span><span class=\"mtk12\">environment</span><span class=\"mtk1\">.</span><span class=\"mtk12\">production</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  ]</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">})</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">AppModule</span><span class=\"mtk1\"> {}</span></span></code></pre>\n<h4 id=\"2-create-your-store\" style=\"position:relative;\"><a href=\"#2-create-your-store\" aria-label=\"2 create your store permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Create your store</h4>\n<p>Here we have created a component that dispatches actions to create a to-do and for other operations. Apart from that, we are using a selector <code>TodoState</code>, from which we are listening for the updated to-do list.</p>\n<p>Put this code in the <code>app.component.ts</code></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"typescript\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">// File name app.component.ts</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">Component</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@angular/core&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">Store</span><span class=\"mtk1\">, </span><span class=\"mtk12\">Select</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@ngxs/store&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">TodoActions</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;./state/todo-actions&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">FormGroup</span><span class=\"mtk1\">, </span><span class=\"mtk12\">FormControl</span><span class=\"mtk1\">, </span><span class=\"mtk12\">Validators</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@angular/forms&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">TodoState</span><span class=\"mtk1\">, </span><span class=\"mtk12\">ITodo</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;./state/todo-state&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">Observable</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;rxjs&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">@</span><span class=\"mtk11\">Component</span><span class=\"mtk1\">({</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">selector:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;app-root&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">templateUrl:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;./app.component.html&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">styleUrls:</span><span class=\"mtk1\"> [</span><span class=\"mtk8\">&#39;./app.component.scss&#39;</span><span class=\"mtk1\">]</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">})</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">AppComponent</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">title</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&#39;ngxs-todo-app&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  @</span><span class=\"mtk11\">Select</span><span class=\"mtk1\">(</span><span class=\"mtk12\">TodoState</span><span class=\"mtk1\">) </span><span class=\"mtk12\">todoList$</span><span class=\"mtk1\">: </span><span class=\"mtk10\">Observable</span><span class=\"mtk1\">&lt;</span><span class=\"mtk10\">ITodo</span><span class=\"mtk1\">&gt;;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">addForm</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">FormGroup</span><span class=\"mtk1\">({</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">title:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">FormControl</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&#39;&#39;</span><span class=\"mtk1\">, [</span><span class=\"mtk12\">Validators</span><span class=\"mtk1\">.</span><span class=\"mtk12\">required</span><span class=\"mtk1\">])</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  });</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk4\">constructor</span><span class=\"mtk1\">(</span><span class=\"mtk4\">private</span><span class=\"mtk1\"> </span><span class=\"mtk12\">store</span><span class=\"mtk1\">: </span><span class=\"mtk10\">Store</span><span class=\"mtk1\">){}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk11\">onSubmit</span><span class=\"mtk1\">(</span><span class=\"mtk12\">form</span><span class=\"mtk1\">: </span><span class=\"mtk10\">any</span><span class=\"mtk1\">){</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">this</span><span class=\"mtk1\">.</span><span class=\"mtk12\">store</span><span class=\"mtk1\">.</span><span class=\"mtk11\">dispatch</span><span class=\"mtk1\">(</span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">TodoActions</span><span class=\"mtk1\">.</span><span class=\"mtk10\">AddTodo</span><span class=\"mtk1\">(</span><span class=\"mtk12\">form</span><span class=\"mtk1\">));</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk11\">markDone</span><span class=\"mtk1\">(</span><span class=\"mtk12\">id</span><span class=\"mtk1\">: </span><span class=\"mtk10\">string</span><span class=\"mtk1\">, </span><span class=\"mtk12\">is_done</span><span class=\"mtk1\">: </span><span class=\"mtk10\">boolean</span><span class=\"mtk1\">){</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">this</span><span class=\"mtk1\">.</span><span class=\"mtk12\">store</span><span class=\"mtk1\">.</span><span class=\"mtk11\">dispatch</span><span class=\"mtk1\">(</span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">TodoActions</span><span class=\"mtk1\">.</span><span class=\"mtk10\">markDone</span><span class=\"mtk1\">(</span><span class=\"mtk12\">id</span><span class=\"mtk1\">, </span><span class=\"mtk12\">is_done</span><span class=\"mtk1\">));</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span></code></pre>\n<h4 id=\"3-create-your-actions\" style=\"position:relative;\"><a href=\"#3-create-your-actions\" aria-label=\"3 create your actions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Create your actions</h4>\n<p>Create a folder <code>state</code> and put the <code>todo-actions.ts</code> file and add below code</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"typescript\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">// File name todo-actions.ts</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">AddTodo</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">static</span><span class=\"mtk1\"> </span><span class=\"mtk4\">readonly</span><span class=\"mtk1\"> </span><span class=\"mtk12\">type</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&#39;[Todo] Add&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">constructor</span><span class=\"mtk1\">(</span><span class=\"mtk4\">public</span><span class=\"mtk1\"> </span><span class=\"mtk12\">payload</span><span class=\"mtk1\">: </span><span class=\"mtk10\">any</span><span class=\"mtk1\">) { }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">EditTodo</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">static</span><span class=\"mtk1\"> </span><span class=\"mtk4\">readonly</span><span class=\"mtk1\"> </span><span class=\"mtk12\">type</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&#39;[Todo] Edit&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">constructor</span><span class=\"mtk1\">(</span><span class=\"mtk4\">public</span><span class=\"mtk1\"> </span><span class=\"mtk12\">payload</span><span class=\"mtk1\">: </span><span class=\"mtk10\">any</span><span class=\"mtk1\">) { }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">FetchAllTodos</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">static</span><span class=\"mtk1\"> </span><span class=\"mtk4\">readonly</span><span class=\"mtk1\"> </span><span class=\"mtk12\">type</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&#39;[Todo] Fetch All&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">DeleteTodo</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">static</span><span class=\"mtk1\"> </span><span class=\"mtk4\">readonly</span><span class=\"mtk1\"> </span><span class=\"mtk12\">type</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&#39;[Todo] Delete&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk4\">constructor</span><span class=\"mtk1\">(</span><span class=\"mtk4\">public</span><span class=\"mtk1\"> </span><span class=\"mtk12\">id</span><span class=\"mtk1\">: </span><span class=\"mtk10\">number</span><span class=\"mtk1\">) { }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span></code></pre>\n<h4 id=\"4-create-your-state\" style=\"position:relative;\"><a href=\"#4-create-your-state\" aria-label=\"4 create your state permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. Create your State:</h4>\n<p>Here we have created the state of the todo, it contains the global state of the todo list.\nCreate a folder <code>state</code> and put the <code>todo-state.ts</code> file and add below code</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"typescript\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">// File name todo-state.ts</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">Injectable</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@angular/core&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">State</span><span class=\"mtk1\">, </span><span class=\"mtk12\">NgxsOnInit</span><span class=\"mtk1\">, </span><span class=\"mtk12\">Action</span><span class=\"mtk1\">, </span><span class=\"mtk12\">StateContext</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@ngxs/store&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">TodoActions</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;./todo-actions&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">patch</span><span class=\"mtk1\">, </span><span class=\"mtk12\">updateItem</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;@ngxs/store/operators&#39;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">interface</span><span class=\"mtk1\"> </span><span class=\"mtk10\">ITodo</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">id</span><span class=\"mtk1\">: </span><span class=\"mtk10\">string</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">title</span><span class=\"mtk1\">: </span><span class=\"mtk10\">string</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">is_done</span><span class=\"mtk1\">: </span><span class=\"mtk10\">boolean</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">interface</span><span class=\"mtk1\"> </span><span class=\"mtk10\">ITodoStateModel</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">todoList</span><span class=\"mtk1\">: </span><span class=\"mtk10\">ITodo</span><span class=\"mtk1\">[];</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">@</span><span class=\"mtk11\">State</span><span class=\"mtk1\">&lt;</span><span class=\"mtk10\">ITodoStateModel</span><span class=\"mtk1\">&gt;({</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">name:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&#39;todoList&#39;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">defaults:</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk12\">todoList:</span><span class=\"mtk1\"> [],</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    },</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">})</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">@</span><span class=\"mtk11\">Injectable</span><span class=\"mtk1\">()</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk10\">TodoState</span><span class=\"mtk1\"> </span><span class=\"mtk4\">implements</span><span class=\"mtk1\"> </span><span class=\"mtk10\">NgxsOnInit</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk11\">ngxsOnInit</span><span class=\"mtk1\">(</span><span class=\"mtk12\">ctx</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk12\">ctx</span><span class=\"mtk1\">.</span><span class=\"mtk11\">dispatch</span><span class=\"mtk1\">(</span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">TodoActions</span><span class=\"mtk1\">.</span><span class=\"mtk10\">FetchAllTodos</span><span class=\"mtk1\">());</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    @</span><span class=\"mtk11\">Action</span><span class=\"mtk1\">(</span><span class=\"mtk12\">TodoActions</span><span class=\"mtk1\">.</span><span class=\"mtk12\">markDone</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk11\">markDone</span><span class=\"mtk1\">(</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">ctx</span><span class=\"mtk1\">: </span><span class=\"mtk10\">StateContext</span><span class=\"mtk1\">&lt;</span><span class=\"mtk10\">ITodoStateModel</span><span class=\"mtk1\">&gt;, </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      { </span><span class=\"mtk12\">payload</span><span class=\"mtk1\">, </span><span class=\"mtk12\">is_done</span><span class=\"mtk1\"> }: </span><span class=\"mtk10\">TodoActions</span><span class=\"mtk1\">.</span><span class=\"mtk10\">markDone</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    ) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk12\">ctx</span><span class=\"mtk1\">.</span><span class=\"mtk11\">setState</span><span class=\"mtk1\">(</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">            </span><span class=\"mtk11\">patch</span><span class=\"mtk1\">({</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                </span><span class=\"mtk12\">todoList:</span><span class=\"mtk1\"> </span><span class=\"mtk11\">updateItem</span><span class=\"mtk1\">(</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                  (</span><span class=\"mtk12\">item</span><span class=\"mtk1\">: </span><span class=\"mtk10\">ITodo</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">item</span><span class=\"mtk1\">.</span><span class=\"mtk12\">id</span><span class=\"mtk1\"> === </span><span class=\"mtk12\">payload</span><span class=\"mtk1\">, </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                  </span><span class=\"mtk11\">patch</span><span class=\"mtk1\">({ </span><span class=\"mtk12\">is_done:</span><span class=\"mtk1\"> !</span><span class=\"mtk12\">is_done</span><span class=\"mtk1\"> })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                )</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">            })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        );</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    }</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    @</span><span class=\"mtk11\">Action</span><span class=\"mtk1\">(</span><span class=\"mtk12\">TodoActions</span><span class=\"mtk1\">.</span><span class=\"mtk12\">AddTodo</span><span class=\"mtk1\">)</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk11\">add</span><span class=\"mtk1\">(</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk12\">ctx</span><span class=\"mtk1\">: </span><span class=\"mtk10\">StateContext</span><span class=\"mtk1\">&lt;</span><span class=\"mtk10\">ITodoStateModel</span><span class=\"mtk1\">&gt;,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        { </span><span class=\"mtk12\">payload</span><span class=\"mtk1\"> }: </span><span class=\"mtk10\">TodoActions</span><span class=\"mtk1\">.</span><span class=\"mtk10\">AddTodo</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    ) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">state</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">ctx</span><span class=\"mtk1\">.</span><span class=\"mtk11\">getState</span><span class=\"mtk1\">();</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk12\">ctx</span><span class=\"mtk1\">.</span><span class=\"mtk11\">setState</span><span class=\"mtk1\">({</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">            ...</span><span class=\"mtk12\">state</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">            </span><span class=\"mtk12\">todoList:</span><span class=\"mtk1\"> [</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                ...</span><span class=\"mtk12\">state</span><span class=\"mtk1\">.</span><span class=\"mtk12\">todoList</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                    ...</span><span class=\"mtk12\">payload</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                    </span><span class=\"mtk12\">id:</span><span class=\"mtk1\"> </span><span class=\"mtk10\">Math</span><span class=\"mtk1\">.</span><span class=\"mtk11\">random</span><span class=\"mtk1\">().</span><span class=\"mtk11\">toString</span><span class=\"mtk1\">(</span><span class=\"mtk7\">36</span><span class=\"mtk1\">).</span><span class=\"mtk11\">substring</span><span class=\"mtk1\">(</span><span class=\"mtk7\">7</span><span class=\"mtk1\">),</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                    </span><span class=\"mtk12\">is_done:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">false</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">                }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">            ],</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        );</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    }</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span></code></pre>\n<h4 id=\"5-create-your-html-view\" style=\"position:relative;\"><a href=\"#5-create-your-html-view\" aria-label=\"5 create your html view permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. Create your html view</h4>\n<p>Here we have created a form that we use to create todo and listed all todos.\nput this code in your <code>app.component.html</code></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"html\" data-index=\"8\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">&lt;!-- </span><span class=\"mtk12\">File</span><span class=\"mtk1\"> </span><span class=\"mtk12\">name</span><span class=\"mtk1\">  </span><span class=\"mtk12\">app</span><span class=\"mtk1\">.</span><span class=\"mtk12\">component</span><span class=\"mtk1\">.</span><span class=\"mtk12\">html</span><span class=\"mtk1\"> --&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">form</span><span class=\"mtk1\"> </span><span class=\"mtk14\">[formGroup]=&quot;addForm&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk14\">(ngSubmit)=&quot;onSubmit(addForm.value)&quot;&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk14\">&lt;input</span><span class=\"mtk1\"> </span><span class=\"mtk12\">type</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;text&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">formControlName</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;title&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;form-control todo-list-input&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">placeholder</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;What do you need to do today?&quot;</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">button</span><span class=\"mtk1\"> </span><span class=\"mtk12\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;add btn btn-primary font-weight-bold todo-list-add-btn&quot;</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">Add</span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">button</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">form</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">ul</span><span class=\"mtk1\"> </span><span class=\"mtk12\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;d-flex flex-column-reverse todo-list&quot;</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">li</span><span class=\"mtk1\"> </span><span class=\"mtk14\">*ngFor=&quot;let</span><span class=\"mtk1\"> </span><span class=\"mtk12\">todo</span><span class=\"mtk1\"> </span><span class=\"mtk12\">of</span><span class=\"mtk1\"> </span><span class=\"mtk14\">(todoList$</span><span class=\"mtk1\"> </span><span class=\"mtk14\">|</span><span class=\"mtk1\"> </span><span class=\"mtk14\">async)</span><span class=\"mtk1\"> </span><span class=\"mtk14\">?.</span><span class=\"mtk1\"> </span><span class=\"mtk14\">todoList&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk14\">[ngClass]=&quot;{&#39;completed&#39;:</span><span class=\"mtk1\"> </span><span class=\"mtk14\">todo.is_done}&quot;&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk14\">&lt;div</span><span class=\"mtk1\"> </span><span class=\"mtk12\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;form-check&quot;</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">        </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">label</span><span class=\"mtk1\"> </span><span class=\"mtk12\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;form-check-label&quot;</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">          </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">input</span><span class=\"mtk1\"> </span><span class=\"mtk14\">(click)=&quot;markDone(todo.id,</span><span class=\"mtk1\"> </span><span class=\"mtk14\">todo.is_done)&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;checkbox&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk12\">type</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;checkbox&quot;</span><span class=\"mtk1\"> </span><span class=\"mtk14\">[checked]=&quot;todo.is_done&quot;&gt;{{todo.title}}</span><span class=\"mtk1\"> </span><span class=\"mtk14\">&lt;i</span><span class=\"mtk1\"> </span><span class=\"mtk12\">class</span><span class=\"mtk1\">=</span><span class=\"mtk8\">&quot;input-helper&quot;</span><span class=\"mtk17\">&gt;&lt;/</span><span class=\"mtk4\">i</span><span class=\"mtk17\">&gt;&lt;/</span><span class=\"mtk4\">label</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\"> </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">li</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  &lt;/</span><span class=\"mtk12\">ul</span><span class=\"mtk1\">&gt;</span></span></code></pre>\n<p>After lots of code, it's time to see the results. So here is the UI you will get. To get the complete code please go to <a href=\"https://github.com/LoginRadius/engineering-blog-samples/tree/master/Angular/To-do-App-in-angular-with-NGXS\">Github Repo.</a>\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 412px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 157.28155339805824%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAfCAYAAADnTu3OAAAACXBIWXMAABJ0AAASdAHeZh94AAACnUlEQVRIx51WS47TQBD1UTgDJ0EsYAViAwvOwpYdC0YCMQgWiDMAAoSQYAZGilA0cRLHdhz//+7uR3U7HpyJE9u0VHKny3ldn1cv0UBLMI4/kwnOzs5xcX6B6fQS6lyIo9as9l4jl9rkeY6MrCgKVFWFvsU5B6NAGrDmqTVOudI0xcqy4XoBNq6HIAzhByHCKILtbNSZH9Q++R3OBXgXoPxQ0W1JlsMjAC+I4Iex2odRjDhJ4PqB2kdxjDCMKAt2KEJZD3WEMetQHTXGa7DPOnD3FLj3RuD+W4HbLwW+zoXyMX68ITtNqbaAz74JaA8FbjwRuPmU9g8ETr7XgCXr7/ZehJ9mAndeAY/eCTx+L3DrBfBlXt9avzNsabKArQRaz+bmUaWtu8wYQ5KkCoJtqdBVt64UOwEFcSrLMhRlObjDByNsnLwBpUmRUyOtosjl54z4WZYVWTkwwpZz7ThYGAaWZPKCnMxYruDQpAS+r8CPAl6vjeu6WK8dtTcME6ZlQdd1NYJdvOuPcL2GT2NmmiaM1UqNmW1bClym3Qe6U0OpMrJOEYmBT+nFNLfSX1A9A4qQbUVkECBjlUp3aIcHADKk1IB2BLVE8f0Z7qNNO21nsyFNpPpRl/O8UF02TYui90gHXXU2iDaNW6YtO5sT/zyPOm7bmM/nSnRrlWYjeEjPpssRialFwNIWiyVsOu/j4E4Nm9Rlhz3qsCS2QySXMh/TmSxBMICLV4CSMpImfRGIHvnR6reYApMKAzFcTI/WkHG2l44YK4ZtwCQtSFmqTgKPsa3AckymFtHFw+xyhhXxruqhR2+XryK7Nhn/FaFcJ68/4scvHTH9ewjjFFygt0FHAZ+ffsDP3zos0kLT9urJEWL8j9Rhkv4DGxPhX9j2e81D8ZGsAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Image\"\n        title=\"Image\"\n        src=\"/static/1d73631385a6f5f4c0fda45a96eb775e/9e32a/result.png\"\n        srcset=\"/static/1d73631385a6f5f4c0fda45a96eb775e/9e32a/result.png 412w\"\n        sizes=\"(max-width: 412px) 100vw, 412px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>We have gone through the basic concepts of NGXS and built a simple to-do app. There are a lot of advanced features and plugins by NGXS, but beyond the scope, we could not add, but hopefully, we will be exploring in future blogs.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n  .dark-default-dark .mtk1 { color: #D4D4D4; }\n  .dark-default-dark .mtk4 { color: #569CD6; }\n  .dark-default-dark .mtk12 { color: #9CDCFE; }\n  .dark-default-dark .mtk11 { color: #DCDCAA; }\n  .dark-default-dark .mtk10 { color: #4EC9B0; }\n  .dark-default-dark .mtk15 { color: #C586C0; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n  .dark-default-dark .mtk3 { color: #6A9955; }\n  .dark-default-dark .mtk7 { color: #B5CEA8; }\n  .dark-default-dark .mtk17 { color: #808080; }\n  .dark-default-dark .mtk14 { color: #F44747; }\n</style>","frontmatter":{"date":"September 08, 2020","updated_date":null,"description":"NGXS is a state management pattern + library for Angular. It acts as a single source of truth for your application's state, providing simple rules for predictable state mutations.","title":"Angular State Management With NGXS","tags":["Angular","NGXS","Redux"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.2903225806451613,"src":"/static/11800c1071c0ff7f8e9b3161611001aa/ee604/title-image.png","srcSet":"/static/11800c1071c0ff7f8e9b3161611001aa/69585/title-image.png 200w,\n/static/11800c1071c0ff7f8e9b3161611001aa/497c6/title-image.png 400w,\n/static/11800c1071c0ff7f8e9b3161611001aa/ee604/title-image.png 800w,\n/static/11800c1071c0ff7f8e9b3161611001aa/81944/title-image.png 875w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Akshaya Sharma","github":"akshay-js","avatar":null}}}},{"node":{"excerpt":"Go announced Go 1.15 version on 11 Aug 2020. Highlighted updates and features include Substantial improvements to the Go linker, Improved…","fields":{"slug":"/engineering/what-is-the-new-go-1-15/"},"html":"<p>Go announced <a href=\"https://blog.golang.org/\">Go 1.15</a> version on 11 Aug 2020. Highlighted updates and features include Substantial improvements to the Go linker, Improved allocation for small objects at high core counts, X.509 CommonName deprecation, GOPROXY supports skipping proxies that return errors, New embedded tzdata package, Several Core Library improvements and more. </p>\n<p>As <a href=\"https://golang.org/doc/go1compat\">Go promise</a> for maintaining backward compatibility. After upgrading to the latest Go 1.15 version, almost all existing Golang applications or programs continue to compile and run as older Golang version.</p>\n<p>Download the latest Go Version from <a href=\"https://golang.org/dl/\">Golang</a>.</p>\n<h3 id=\"operating-system-and-platform-compatibility\" style=\"position:relative;\"><a href=\"#operating-system-and-platform-compatibility\" aria-label=\"operating system and platform compatibility permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Operating system and platform compatibility</h3>\n<h4 id=\"macos\" style=\"position:relative;\"><a href=\"#macos\" aria-label=\"macos permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>macOS</h4>\n<p>Go 1.14 version announced some changes for the macOS. According to announcement  </p>\n<blockquote>\n<p>Go 1.14 is the last release that will run on macOS 10.11 El Capitan. Go 1.15 will require macOS 10.12 Sierra or later.</p>\n</blockquote>\n<p>The lastest macOS 10.15 (Catalina) is no longer supporting 32-bit binaries. Go 1.14 will likely to be the last Go release to support 32-bit binaries on iOS, iPadOS, watchOS, and tvOS (the darwin/arm port). Go continues to support the 64-bit darwin/amd64 port.</p>\n<h4 id=\"windows\" style=\"position:relative;\"><a href=\"#windows\" aria-label=\"windows permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Windows</h4>\n<p>Go now generates Windows ASLR executables when -buildmode=pie cmd/link flag is provided. Go command uses <code>-buildmode=pie</code> by default on Windows.</p>\n<p>The -race and -msan flags now always enable <code>-d=checkptr</code>, which checks uses of unsafe. Pointer. This was previously the case on all OSes except Windows.</p>\n<h4 id=\"android\" style=\"position:relative;\"><a href=\"#android\" aria-label=\"android permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Android</h4>\n<p>Mobile applications were crashing in some devices due to some invalid lld linker versions so now avoiding the crashing the latest Go 1.15 version explicitly selects the lld linker available in recent versions of the NDK. This explicitly lld linker avoids crashes on some devices. it becomes the default NDK linker in a future NDK version.</p>\n<h3 id=\"smaller-binaries--performance-improvements\" style=\"position:relative;\"><a href=\"#smaller-binaries--performance-improvements\" aria-label=\"smaller binaries  performance improvements permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Smaller binaries &#x26; Performance improvements</h3>\n<p>Always new Go 1.15 brings many minor/major performance improvements. The first major improvement has reduced the executable's binary size by almost 5% - 10% as compared to Go 1.14. As Brad Fitzpatrick <a href=\"https://twitter.com/bradfitz/status/1256348714198654976?lang=en\">tweet</a>, test program down from 8.2MB in Go 1.14 to 3.9MB in 1.15. </p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 80.76923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAACiUlEQVQ4y5WTW2/aQBCFnXD3FdvccTAYgzH1BeMQIJCkuTV5iCpVykulqv//X5zOLEJVW6VpH45md737zczxrrTcP+L5y1e8vH7D5u4Fo3gLL9liEK5ovEFz+AHW2Qz2IETDnYv5MR51nLe9GFK6uUW2e8D+8TO29y9YXD4gv3pCsrnDcv8Jq5tnZLQWrz+iNYr+gP2eQHLnFxhFG0Sra4TLPcL8CvPza8wppts7Me5NUpH9ePhvkuLzNTZX1wjyG/iLHTxq04vW8KntINtR67kA2XzgWNFbYuDTfY7vr2tY0Q3s+Ba2l8I+C4Rn7J3p8HhGIGrLfUfcsmL1IJ2WUFNUdPtnGI0ncEdjJIulkOdPoOp1FEoVFMvVN1UolaE3HUiybkGSJBSLRTj9PrLFAlEUwXUH6HY6UBUF5VJJ7HlPSr1JQKMhJgUCdrpdxHGM3W6Hi4s1ujT/F5AknRyAZvsnsERVNJtNjMdjpGkK3/dxcnLYeIzvVmi2IFW1Q8unpwUBzLIM0+lUVMrzarX6HxUSsD+coFatQNcNWJaFDvnGMk0TffK01+vRNx0Kecmq1+tQVfXtCmfxEsOhiyAIEIahiI7joNFoCHES9pJBrVZLJONEnMQwDMiyDE3TSCpUizz0ggiddpugQ+EfH+aqGM5gBnBkiOu6AswQFlfKVXNSs24cgH6YwB0MRPYugZIkERrQGkNqtZrwkce2bRNAPVRHYAbphv5ry64/o7uXUBV99AnIVyagn7JcZri83Ir7mOc5XaMVPG8k9qRpgl5KXV07cNYd6MODp7JB99CdRvRC6IM7Qk0l8zXyheJBhljTDFOs1xQNFVkVsazJKOsyKoaCCvnHr4Vfyg/oqpwpFWDL7wAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"image 1\"\n        title=\"image 1\"\n        src=\"/static/216a02ed439988a46672b5b77a351a6a/e5715/lr-tweet1.png\"\n        srcset=\"/static/216a02ed439988a46672b5b77a351a6a/a6d36/lr-tweet1.png 650w,\n/static/216a02ed439988a46672b5b77a351a6a/e5715/lr-tweet1.png 768w,\n/static/216a02ed439988a46672b5b77a351a6a/dd104/lr-tweet1.png 1064w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 80.76923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAACYUlEQVQ4y5WSW3eaUBCFQV0rUcGIIqgEEbkoF0G8BWM0Mdqmq13NS/vWvvX//4bdYUy72jfz8K05Z2D22XPOCNvTK758/4lvP35hc3xFuD4gWD7Cm20xWexxO56j781g+LO3mOGWKPbFuuemnNdHU2h2DCHJn7Hcv2C1/4Tp3QGL3Qtm90fihPn2A4LFDvHqEUl+QLx+4n9mmyMiyqWbZ+LIdJ0EqhVCcJMcXrpBuNxzQfFjQbEeZ1sWYpH7s0hxQCHEhz98pLodCxV0hiTopfd8wpScTuYP/wkGdMgovsMwWsGO1hSJcAWLKHLONIc5WZBQTESM4JO7NH9iMnKxOXzGw+krtbnHlNCsAM2+A8XwoPTdc2Rcyp/3bdMnxueWr+UWBEFAS+1gmqRIZxk0vYtypUJ5EaVy5SLEUgk32gBCVbphQUVRMB6PEQQB2u0WyuUy59+DrPYhyIrKG1Es4erqCtVqFbIss7v3CjZUA4LWM6GqbViWhU6ng1qtxsL1ep1dt1otzl3mkASv31ru9XrcbpIk8H0fruvyFYRhCMdxIEnS+wR1XedCz/OYQkxVVXZZfC/RpV8kWJWavDHNAaIoYodpmmK32yHPc76Kyx/lH4dFYZZlWC6XLLTdbrFer/+2KoriZYI1+dySQpdvGAZj2zY/0HA4JOcmjZF6+SsbgxEaUh2NhowajYyuddCl+1RpFq/ptc/uBFRoLsViTZRLNPCUK4l/4pvDNs2hMZrAGnlQu7fQDQvJfAU/TOBOYoyjBNJNm/GCGH3ThtY3YTk+BlRjewFH03ZRk5to9mz8BmAjmKWlNCj4AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"image 1\"\n        title=\"image 1\"\n        src=\"/static/f97cca2c10ac4080b1558296d5a61401/e5715/lr-tweet2.png\"\n        srcset=\"/static/f97cca2c10ac4080b1558296d5a61401/a6d36/lr-tweet2.png 650w,\n/static/f97cca2c10ac4080b1558296d5a61401/e5715/lr-tweet2.png 768w,\n/static/f97cca2c10ac4080b1558296d5a61401/dd104/lr-tweet2.png 1064w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Go 1.15 has improved the code build process now unused code is eliminating in the new linker, along with several targeted improvements, such as Clements's CL 230544, which reduces the number of stack and register maps included in the executable.  </p>\n<h3 id=\"standard-library-additions\" style=\"position:relative;\"><a href=\"#standard-library-additions\" aria-label=\"standard library additions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Standard library additions</h3>\n<p>Always in every new version release Go come with various minor changes and updates to the library. I m including some useful and important changes  </p>\n<h4 id=\"tzdata-package\" style=\"position:relative;\"><a href=\"#tzdata-package\" aria-label=\"tzdata package permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>tzdata Package</h4>\n<p>A new embedded tzdata package was added that permits embedding the timezone database into a program. Importing this package (as import _ \"time/tzdata\") which allows the program to find timezone information without the timezone database on the local system. We can also embed the timezone database by building with -tags timet/zdata. This approach increases the size of the program by about 800 KB. This might be useful and can test some code with the virtualized environments like <a href=\"https://play.golang.org/\">Go playground</a>.</p>\n<h4 id=\"x509-commonname-deprecation\" style=\"position:relative;\"><a href=\"#x509-commonname-deprecation\" aria-label=\"x509 commonname deprecation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>X.509 CommonName deprecation</h4>\n<p>Go older versions were using CommonName field on X.509 certificates as a hostname if there is no Subject\nAlternative Names, would be disabled by default. If Still want to use this legacy behavior then we need to add x509ignoreCN=0 in the GODEBUG environment variable.</p>\n<h4 id=\"neturl-package\" style=\"position:relative;\"><a href=\"#neturl-package\" aria-label=\"neturl package permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>net/url Package</h4>\n<p>The <code>net/url</code> package adds a new URL. The redacted () method that returns the URL as a string. This is proposed in the <a href=\"https://github.com/golang/go/issues/34855\">Issue 34855</a>. It is a very useful improvement for audit logging and security. It's a simple derivation from the URL.String() that masks the password if exists from the string being passed. It does not modify at all to the URL itself but a copy of it.</p>\n<h3 id=\"summary\" style=\"position:relative;\"><a href=\"#summary\" aria-label=\"summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Summary</h3>\n<p>Go 1.15 has released with various improvements, bug fixes. We can get all improvements, closed proposals and features details for the Go GitHub repository.</p>\n<h3 id=\"referance\" style=\"position:relative;\"><a href=\"#referance\" aria-label=\"referance permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Referance</h3>\n<ul>\n<li><a href=\"https://blog.golang.org/\">Go Blog</a></li>\n<li><a href=\"https://golang.org/doc/go1.15\">Go 1.15</a></li>\n</ul>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"September 07, 2020","updated_date":null,"description":null,"title":"What's new in the go 1.15","tags":["Go","Golang","Go 1.15"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7699115044247788,"src":"/static/d85b112d59a5149f84548b866984f6db/ee604/index.png","srcSet":"/static/d85b112d59a5149f84548b866984f6db/69585/index.png 200w,\n/static/d85b112d59a5149f84548b866984f6db/497c6/index.png 400w,\n/static/d85b112d59a5149f84548b866984f6db/ee604/index.png 800w,\n/static/d85b112d59a5149f84548b866984f6db/f3583/index.png 1200w,\n/static/d85b112d59a5149f84548b866984f6db/5707d/index.png 1600w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Vijay Singh Shekhawat","github":"code-vj","avatar":null}}}},{"node":{"excerpt":"Programming is an excellent exercise for your brain as programmers deal with never-ending situations like bugs, compiler, issues, deadlines…","fields":{"slug":"/engineering/lets-take-meme-break/"},"html":"<p>Programming is an excellent exercise for your brain as programmers deal with never-ending situations like bugs, compiler, issues, deadlines, languages, etc. During all these times, other than the phenomenal codes, we produce MEMEs and a hell lot of MEMEs</p>\n<p>MEMEs can light the environment for every programmer in the world. On that note, there is a famous saying-</p>\n<p><strong>“If debugging is the process of removing software bugs, then programming must be the process of putting them in – Edsger Dijkstra”</strong></p>\n<h2 id=\"here-is-our-developer-picked-list-of-21-complied-meme-for-you\" style=\"position:relative;\"><a href=\"#here-is-our-developer-picked-list-of-21-complied-meme-for-you\" aria-label=\"here is our developer picked list of 21 complied meme for you permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Here is our developer picked list of 21 complied MEME for you:</h2>\n<h3 id=\"1-always-ready-for-new---kunal\" style=\"position:relative;\"><a href=\"#1-always-ready-for-new---kunal\" aria-label=\"1 always ready for new   kunal permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Always ready for new!!! - <a href=\"/author/kunal/\">Kunal</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 225px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 200%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKJElEQVRIx62W51dUZx7H5w/Ykxd7zp6s+2b3JJ4kG0uMWbHEEgu6IihgB1FHQBSpgoAURXqHkT4MRbAAM5ShKEhRuihSFCQgKiKKKAFFqTP42QdIsi+yL/fe89x7z3Pv+d1fez7fR/Lp0yf+H8dvdiSzl7GxMdTqfO7evcv9+/dpa2sTo5XGO41zc3cbG2lqaqKjo5221laqqqro6elBnZ/PjRs36O3tnTM2MzPzm8Fxmu7do6K8HJlMRo5KRXl5GSqliry8PArUaq4XX6e2tlb84B5ZWVk0N7dQVlbGlctXqKmpYXh4eN7D6alJNNPTv7s+PT016/8fQpr9+69PfwxXnGPjY7x9+xZJoUpGkTKWocEnvH7ZQ8PtAt70P577bFozKe5TvOzvIS5eTnqagrxMGRFBLuRmyKjMjqEkI5RrKTJ8vGyxPWGEJNTvKKqMYF73PWSw9z7Feel4eXhSVKRm7P0g0xNDdLbdJtzVghCXY8JQBHaWuwn2PE7IeVuC3G0J8bTBz+0orvZ7kaTEORIa7ER8uCfPf77Djcw48mN8SAu0o6+rHu34AOV58eR6SGmMdCE/PRL/M4epUqeQGBOJj48f8QkyPNzMWbP8SySqy36csj1IuK8DzzobuRrsSPeVELLdj6JU+ImQ31NfVkRRQgTp/m7kFBaRFu1La0MB3TfTMN+xkpPSLeTmylm35lsk6muhmB7RJ9jHnsZbuYRYGdAS54VKeBQpPLlzMxd1RhLF11KQJWQSoCghLr2Ah+1NVMS7I3fej+W2r5Cd2YPetlVIapTBBHsd51KEO0UiwSu/+BOl56V4GK5g46K/0JitoKO+guS4GOzcZYTIi3H0SaSksgyp3g9khZ7iXlE8AS57KS9NR9JWm0tjSQZd9XnUX4nFYtUXFIZYURRkz5n1i+m9U8XExChlFZUYSu2JSb+Bd+QV0hSJqBLPUy93obUql7wHuYwOVCOpuOJPZow3DYXpTDo6MGqsx+BJEyZd7ZgxMWFYFjjbndyqauQnAzOCHSy4LIsk0CeY+oo8ahI8yc3JorCuEAd7eyS1JUkUZMagDDzFiIkx6Buh2aiLRk+facO9vIxwYnzkOcr8UjboHyL9nAWR3l6cdjlLqSqVkig35Mocurp7CJXJkUxMTlJeJpJtvp6+/frC4AFmDPbDHhO0B0zp8jvJmyf3uRAah4WNJ5fOncLG8Ryxl1R0l15GGRNARmkNgy9f8KijE8kvbwZ58LANdaIXxeu+onPhQp4v+o7n3y6iffE3dPhacqeygOP2AbifDSXGzZFjpyNQpF7jWtgZorNvUNM9yJRmCq1Wg2RmRjO3zPqePKD9VgHPS4p4KcbATUERcX/z831evHhGfWMLD9raefKog7qWdlpamqm7XUlTRzeDA6+4Jo/hcnI0kt84Njw6yoepeUhoxXg7+oExjfZ/sm92dnxyfO55cmyER9GpVB5wIOCYxayH8wZ/GRkR7TH/UV/vUyJCw/Bxdaat8fa8Ea0WjRgzM1refRhjYnKCe431xMfFEuivIMDvKm6u3vM8nD16Hj+hrq6eus4O4hURBFvvJUMUROZtx9CYllfvRpn+FV7DUxq6O5vJuOhPfl4OIb6e+F2wRXlVhmRIhHrn2VOC0lKwND8mXpwlT+6LOsCaTmUU10Kc8YiOIb+2noGBYZHrPl4PDJItD6S9IBFtfytJrubE+TjAh8dIDvp6sdrmJFutpew1WE2gw34eFyrI8nOkMdqDJJdD3LxxiQR5ELfq7/Ly1RB9L/poyo+jQxCn95aa/OAzBDpLqa0qRtIkdEJ9PZPkhHC2rlpIyjlLnmWGInNxJPq0GU8r4/nQ28zt2zV8HH8/F7RG+56qjHD6StJ4UaGiIckH6/2bkCtk/83hz23NrFr4GYpzx2gRocQGuPCxu4CG7CgSM0o4KyugoDCLrtZSeu6q8D2yhYpoZ/qL0/A228aRHTpcykhGotHMt0r1zWxMN3xBg6jq2/5O3lfHkupxBGvnYC7mtnLUOUGsVQFiWSgt5UpiHfQpDrPhjvws1npLBMIWUZojDI4Ovubju3eUpfvhZmXE3Y/Q9bSbjtxIzPYYc/VWNzF59zFxjiXsvCdt5Soe1uRx8cRWyqNd6RfLL93dDG/T1RREOSF5M/SBkXfD5ERaCYqc5uWHQXp6H/KsLoM3rUoKM6IxtfFh00E3/MJi59MjyBJnrctQW60A+gBvu+6RdnY3oUfXIemIj+NpTBj5Bjo0HNPlddBJOgXjXlUrGH18i5ykYByd3YhJzuFB9/M5g2+f/YwywYW6xgLGpsfm5rrqS8lPDkPy8G+fM/D1Pxj5fjET/1rEuLEB3dFhjHeU/kGBu7u6aG9/RHldAbbnjTnisI4zvrvJKZXR2lM9L/TjGzbySXcT2q0/od2lx8edBrxKTmT0bj6fZqbml5xGI1plBoVCLojjionlOoylS/j3nmXsN1+Lxen1WLuvIURxXOwcNm/h0/YdYGgEB/ahtZAyWqhitCpLdP7Q79719nQSK7Q4ycWMU8fXcdh6FVu2LyYwIJCAID9MrXRwDNgiaLNtO1MG+ly2PkGInT0JQuQVUeH0ix3C5JM6Pk7NA6O7oVI0fASVF09jdlyHvSd1OGFjwOmTVrgJWdgvXYOtx0Yk2rUbGN+wnjJ9PbJ276bw5CmKHe1oD3BkqOEqNe2NdA+NoUwWUipg62qrx8Y9S9gt1SHI/gAWxrrYm+rjZK0v5pYKCVixkvdLv2di6RJYsxKMDOC4JU/D3HlTnUNWSRvywnv4BsZy8OBGtu7+Fr0dS9hq9DURtvuw2bGKI4IB4UKKnY5uRjL8w3LeLV3O2IoVTK/fwKThTjgqpdP7jIBEKpcya0lRN+MVks5OqSkOJwzwsBJ5tNnFIVEQc8NlVF8KQjNQQXWcg9CUFcuYXr4G7Zo1zGzdjMbIUBTnIL3eTgw0lZCtqiAxrxPfiFRkgW6URDugjrUnP8WVcL9dYpO0nX5VIN25F4j3kgoervoOzQ9r0axey8zmzczsFB4a7eLFrNpVX+dqwmUSo2J4lBtLdrCUZMWPYmdrSEnxNsqTTbif5cKL1DNEhfnhHxaCpFlvGZNLdZhcsVro8U/C4C4QYt/sc4rO9Mv4C6ULcLBi37pl7Du2CN/4bwhO+IaErGUo47fzVHhad3E35nbbCUlUIFHYLuLdMlGUFavQ/rgB7Q59NHv0uBmTRGJaOUHxZTgFpLHg71/ift6ItHQzki6Z4B+1DyexBwo9bS40xQOPyEA8EwuQtBTHMrhxLZM6Io/rNoo8bkJz7DApcaV4y6uQqx9x2PY8X325GH0DQ8yFTJQVZuMdmso2y1jW7/dni5kMI5ur7LRJE/ga6OAX6SE+LP9ursrobmDEygrvICU2AZnEq9vR3Snl8z8vYMFfF/LZZws4bHkQuwsX+N7Ym52WJ9A1NuafOvp8rbOL/wD1ciHEtZ1rgAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"1\"\n        title=\"1\"\n        src=\"/static/08f4fdb7d36c3cc372f5929f5ac00d68/3684f/1.png\"\n        srcset=\"/static/08f4fdb7d36c3cc372f5929f5ac00d68/3684f/1.png 225w\"\n        sizes=\"(max-width: 225px) 100vw, 225px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span> </p>\n<h3 id=\"2-nothing-changes-with-time---tanvi-jain\" style=\"position:relative;\"><a href=\"#2-nothing-changes-with-time---tanvi-jain\" aria-label=\"2 nothing changes with time   tanvi jain permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Nothing Changes With Time - <a href=\"/author/tanvi-jain/\">Tanvi Jain</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFTUlEQVQ4yyWU61PaZxbH+W/25b7uzL7ZF912p9N0067TJDPNNm2yTUyrNV4aG1dNghovK94FQ0CjQqMigqAUkHu4CCjIRQFFQTBNxd2ocRPbpp/+6j4zZ87z5pzzPc/5PEe0s/8jB6envOQNRcEX8gWOT07YPHlFqFgivFdipbhPWLgnc3lSGwn290u8eHHIfqlEfneXw8NDDo8OWd7aQKR+LMGwpGc1v409EUWrmcC4OMtjsxltKkuvL0J/KEXvcoZxsxWn1cjM9BRjSgWLCwbmZmeQDQ9ht9mQGFWI9IoHTI908KD5FuI7FaikLdRXl1P2URnmGSXqMQnivm6GXCGkgo27lhlzB1HafSgdPsafhlE4XMiXTEw6FxHVlv+DtjuVNNd+SWfT10g779HSVIu4/iZaodC0VExT+SXa+iX0BRJ0OYL0eGMMCKplsR0GrX5GgkF6o1b08SCiL65d5l81ldRVf0lrYzW1lVepu36F9z44x6Wr17hWfoPLVbU0qjX0uVaQLSeRh9IM++P0+pMMNzQit9iZy2ZZK+QQ3Sq/QldTDd0P6rkjqKy6eYWmzz5Bcv4cnvk5ApkM6lCEvqCQKJxBEcmiXM0iDcUZTW6gHFdh3chQ/PUN8Wwa0cXLlzj3wV8YVI6wsGSm4XYljdXXqf7r29z+8DzpZ3tsHJQYXw7xKBxjZDUt+E3k0TST6Twtc99zoaKOsfl5Yqk1RCqNGulQN4sWE5vPnxHJZjCYdXS0fcP7599nck5LXEBjaWuLmUyWx7E0yugWvc4wUk+QdsUoFz76mLvtnYRCHkSdLfUMS+4zp9eQSifYzefY2s4QCLoIeG1E19cIr0XJFgtknwkcFraJ5XYwu5fQzo6j+07GYFfLWXwkuoxoZuoxD2UD6Oa+w2jSs2i18b3NidFqxv7Uh9sXxCZg4fcFcLsduFxWbAKLdoeFro4OaoRhVlV+hXygA71W4LChR8E33XIaWsRY9XJc6nY8TzrwTj3ArRLjUrWyNDfEvG4ck8mAy2kXEjt56vVgtZixCOZ2u3G7nKgn5Iha+/uQDd7DMt3OT2k1R0v32DE2E9fdJ27oJGzsxW4YJO6bpFDI4nB7WDSZWTAtojcKNm/AIRQ5/fkn1lYciFy6XlY0YkJP7pwlbu2RMD2vI72zw87eD/zn5WviG0mirkliKzYiXgOrfgt+j4mwQ8OTCSVdPX109w0yPaVA5HBa+FH45Ilkgv++OOJ56YBAKMCr0xNOXh7z+8nltkiFdRxvzrNv+pbSmorjgodfn5uZVbVz+bNrlF24iEz6b0ShFf9ZUFKY5Fe36lmNraHRavH6fOTzeU6FDZTd3iThV3EafQTOu5SSswSdJqxqrbAHhqm++U9GhyVsr9uFhAI7WaG92oZ7VNY1UHpRIhKLnRV58+aXM79TKLDuGOCXUBevl9sxjLeheiRDMzLKw/ZulP2t9HSLGR4SFEZWvYxOqvnDH99iORymdPCcQHiF3WKRSDx+BqtFWEsmeT2p3wdlHcK18BCLXkHXfTEVn9bRVt/MjSsVnPvT54j8Aff/VeR2z/zB0REzE4OopiYYEPhsqLiIoqMWzVgfVt0kxol+RmVddN6v5pN3b/Lt1Sa6W+5SdaOOpq+bEOmmZKSiXgIeC17bItYFDXdvX2f0oQRpr5hHwx0CJjrMdjsTKiXtjVXc+LyM9979Oxf/XEPNx82Uvf0Ff3vnU9oa6xHtF1PsZWNsJIQ2t9bJZeIUd7MUcxn2Cnn+9+o1x8fHFIUnSG/ESSbjpDdTpJObJKMZ0okt4qspouE465E4vwGD2M/H2cpfMQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2\"\n        title=\"2\"\n        src=\"/static/29756dde05314d6c37244af708dcd456/37523/2.png\"\n        srcset=\"/static/29756dde05314d6c37244af708dcd456/a6d36/2.png 650w,\n/static/29756dde05314d6c37244af708dcd456/37523/2.png 720w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"3-heaviest-object-in-the-universe---nitesh-jain\" style=\"position:relative;\"><a href=\"#3-heaviest-object-in-the-universe---nitesh-jain\" aria-label=\"3 heaviest object in the universe   nitesh jain permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Heaviest Object In The Universe - <a href=\"/author/nitesh-jain/\">Nitesh Jain</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 71.84615384615384%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElEQVQ4y42Sa1PaQBSG+YH9bf3cL1RntAIDjlwcKx2UTsNNUS4SLiapXBIuiaU6FEhCLm93NwQZxWnfmc2c3Zzz7Lt7NgC4uBv8wlldQarURIYfIHHVwQlXQ6LQQKrII5prIvajhtMSjxhXx8PkN0q8hIPMLZLFBsKXN+Dq9zANHQFJfcZ5TYIoXONaeMBxWUL6boC8OERD1pBtyzgnc290kRMUfK11IaozXDTpvx5ZGyLdkDGdGwgsTBudvoJh+gOqlW940oGlYYKXH3FakSBNnqCbFgwyzqo9fMkLeF4YWBgrWLaNVKWHUEHAXDdZXgBErutCm/Rhmjp8/SEJnzJN2LZDM9jalaQhfttl8YrAqAqihiSBUtmOg4BDPo7jbkA+YLY08THdhr6yQHOoioKKRMUDmpYHzN2rSFX7LLZIbYC6Y1Cyowf3gHNiP9l5ZEkvQO0NME+BlS0gTd5A18PeArt0bq+B4n8Afdh7ov+t9X0VRXU3sPrKIZVhGJhMJphOp1A1DaqqsrllWQTqwUukKala/w0wWe29AG2yO3UhSSKCwSCOYzGEQyFEIhHET+KYzWbkyZisgGsNEcm3djjcAlIHsWgUoaMjZLNZcByHm3KZxTzPI3t5gXA4wgrawk+kM989IOn+zjukDulx260W9j7vkeIwQqEwDg8Osb+3D1mWsVwu2dF9OVuN2tllKl3XoSgKu7vRaITxeIxBv88285vjvwAavwv8V5d9RzRv87xeA7e6/BfTjBARrO1baQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"3\"\n        title=\"3\"\n        src=\"/static/dcb277d218fa70767e0eb1a887de66db/e5715/3.png\"\n        srcset=\"/static/dcb277d218fa70767e0eb1a887de66db/a6d36/3.png 650w,\n/static/dcb277d218fa70767e0eb1a887de66db/e5715/3.png 768w,\n/static/dcb277d218fa70767e0eb1a887de66db/d9199/3.png 960w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"4-perception---vikram-jain\" style=\"position:relative;\"><a href=\"#4-perception---vikram-jain\" aria-label=\"4 perception   vikram jain permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. Perception!! - <a href=\"/author/vikram-jain/\">Vikram Jain</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 520px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 87.1153846153846%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEqUlEQVQ4yx2S2VPTZxSG8y/0ttMbb1ov2hmr0zrtKNUWx2VcBgSs1lqtOiwOm8hmkC0ESTCEPezUsAWBsCUhCTthlUACsgVkX0YDKgrY4vb0N158c86Zeb93nvfMEVn6VDhm1YxPVTI4rKHP+pDW9jwM+kS6e/MYsldjtdUyPGFkbLqJ4ZFaJqYrmJ4rFqoZ6/gsozML2KeXUKRlIBqedOJY/pex+Rd0DvXTNWRjdHyJQatd+LDG3LNdbJOrlBZqMJt6mVnZZnbtHfPPwWpfoFodhd5cK8w7qB/VITK29+BYWuVhbRry/GCaLZ109Q3Ta7UxNb/GwvPX9I9MIg/0xevrPaQnyVl5vYtjZYO+bguNBalMzK7ydO0VhioNosvewSyu79AxMEiOJh5dq4mVF+9YWN/i6epLoW7T09tPaZYcmd9NjOZuBrt7kMTepbSoiI4mI3POHWqqq6hLi0Pked2fyUUn9olFdO1VpGl8UAq7sPTYWHS+EQx3GLY5UIcEMTzwGOuYg8rkGO5H+JOSGoMi1Jex2Wc0lhQwWJyM6HpoHOOLz8kpKeaewp/4hyf57eweMuR5bPwHA0/saBLCkRw7QEublMZKNXOPUmkpL6GsKBZZ0DkaaoykpKcgiQ9HdPSHg/idPYPHsZN437xIqOIEV/7YR2FmOSvOV5hMzTTIzqOW/CTECqBAXUFNZio5iZEUpHtRpPQlLD6FEKmYiIRIROcO7Cfw8EHELj8Q+bcX4jCB0i8AS68NS2cnbVVlFMnF+J44QuZ9KbKcIqJjlMQFB2OxSCgrvsed2DhKasuQJksQjY24sDi/n8f9rugavGgzu9HYcBF9gzv1Wnf09acw6E6jb3THbHCnUevGk6HDLM99h916nu7ueuFpGRmpoqJcgejpTCLbW0o2X2Xw8kUuGxuZDFlVtDQXMu1Q8eGDmrc7xaw7swVNnqAtFPo0gU7G8lI2U5Mmurrqef3GQJNejuiZswlh9WxttfJmq0XoLSyvdvBkzMbKSgedXSr6B4o/a1bXDGgN2ThmtIyOtuJw1LG728zwYBHmxgcCTD2i+YUK3n9qoTLdh47yeD7SweZmPR1tSiYmSjl79BDVebG8/9hEtyUNrT4dWVY0fT1ZOKZKGDBnYCpIoEEVx8SkGtGfVz0Ek05G+wuozVQw76jBuV6H97XTwkFnMWQqxJQjFei0tJjFlGvlJEtuU50fRZ9Ari1NwlyrRB0TSm6UJ6Jfj7t+jvnhUzN9uhyWJyo/x9PrZCiSvDEURqORiDE2xmA2RqOSBpEVcIVcVSIRBRoi86tJzkogU3oFZeApRK6nTwoGvWztGHC7e4fYlHC2N3VsvzUhD/dF5n8OVagPLdoQdOUBtCeGkB5xg9gHUdxW5BOcUUlSSiLGmkAKpX5C5EvulP2TxFX/G3xz2Zcvvv0R6+Nspu2l6JRSyhMDeZRwgRldPqbcMIwJflRE3+LuJTeu+tzEP/o2kjte5Eq9UEVfRBTg7UPQ7x54nvHguqcXrkdcmJ2txLlqIEN6lRTxCfLvHSdV/JdwzF4ob7kSf/kQh7/8ip+/34vLL3u5dmofCWHHuXHhAP8DAnfkY1pGqwIAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"4\"\n        title=\"4\"\n        src=\"/static/da60f493f3637dfe4c4bfdc23661388f/69902/4.png\"\n        srcset=\"/static/da60f493f3637dfe4c4bfdc23661388f/69902/4.png 520w\"\n        sizes=\"(max-width: 520px) 100vw, 520px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"5-maths-always-a-hurdle----mohammed-modi\" style=\"position:relative;\"><a href=\"#5-maths-always-a-hurdle----mohammed-modi\" aria-label=\"5 maths always a hurdle    mohammed modi permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. Maths Always A hurdle !! - <a href=\"/author/mohammed-modi/\">Mohammed Modi</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 111.84615384615384%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAWABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAUDBAL/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgD/2gAMAwEAAhADEAAAAZtSb2G9tQ8GhZTEV//EABsQAAIDAQEBAAAAAAAAAAAAAAECAAMSIiEy/9oACAEBAAEFAipLsvmJWd2b77Mr+gE0FAn/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPwFiT//EAB0QAAICAQUAAAAAAAAAAAAAAAABETEhAhIyQZH/2gAIAQEABj8CUULZR36QjElIlYYktJxR/8QAHRABAAICAgMAAAAAAAAAAAAAAQARIUExYXGBsf/aAAgBAQABPyHKE+YKma1O4WKm63csIXKm82y9F5ZW5je4jPLHnuEcudz/2gAMAwEAAgADAAAAEGzHAv/EABoRAAICAwAAAAAAAAAAAAAAAAARARAhMVH/2gAIAQMBAT8QhrRjg5Vf/8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAB/9oACAECAQE/EAxYMX//xAAeEAEBAAICAgMAAAAAAAAAAAABEQAhMXFRoUGBkf/aAAgBAQABPxCZEza/cenByJVW63cf3GADhsQesYIn2m1nLrBuMYQPB36wFdbUIcPI6KcLzLjDQJrjw7u8bBSmivj56z//2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"5\"\n        title=\"5\"\n        src=\"/static/14a68e5d3ba823b574b031958cab252c/212bf/5.jpg\"\n        srcset=\"/static/14a68e5d3ba823b574b031958cab252c/6aca1/5.jpg 650w,\n/static/14a68e5d3ba823b574b031958cab252c/212bf/5.jpg 768w,\n/static/14a68e5d3ba823b574b031958cab252c/47311/5.jpg 1080w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"6-i-had-a-problem-so-i-thought-to-use-java---indrasen-kumar\" style=\"position:relative;\"><a href=\"#6-i-had-a-problem-so-i-thought-to-use-java---indrasen-kumar\" aria-label=\"6 i had a problem so i thought to use java   indrasen kumar permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. I had a problem so I thought to use Java - <a href=\"/author/indrasen-kumar/\">Indrasen Kumar</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 499px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 65.53106212424849%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAADYUlEQVQ4yx2T+VPaZxCH+bnTaWvwSMUDBSQeqBhpYyTEM9ZEI0TBA/hy34e3VogHIoKKikemOmrHOnba6T/59NUfdnb3fed93v3s7Mr6B94RDgaEhQj6/CwuLFAo5Dk9OSGXyz3biYjPz8+5vLwkn98nk8mwvbVFRLwL+bwEvC4CHgnz5w/IZmZEIkDRcOQZupBMktvLcnZ2xl52j2LxmKOjIgeFAqVSicfH/3i4f+Tm6oZENCqAHoJeCY80yztjJzKnPYjP6yckfgv6/SwtLnB1dcXt7Q0PD39xd3fL7m6G42JR5H9zf3vHvTj79/GBjWQIv9shgG6mp8bpeq1GZp8N4PM8Af0EA35RrY+A8OFImHkhPxqLExLVf13b5CRzQHY+yVYsxKrbimNiALdzRlTpZnSkl9a2OiHZ5sEteYlFIwIaJJ3e4vDogkL+RPTrmL3cIblsgXxa9C0cZMNjZ9VpRRrvZ2TgV9F3F3PTE0JuG7X1VcimrRKSw/0MjAtLr8yTWoywFg+wEvawHHKx5LeznYyzkwixZDcTt31izNiBdcSIy2HDLOCdnRoqq8pFhdYn/TYcs5NIsxYSLgu+L5/p6dajN7TT+/4NYx+HSSeiAhgkuxBm3TfHhKmdgZ4W+t/r+TDYTXOLkvIKuQBOebBarM9NtZqHmTO9YbLZwEeVjsGmTl6pNSgaanB/GSObjLEZC5AKSRh0GlSqnzF0qegT8LY2FRVPQOuUE7NlCtvoKPZfhrBoXjPU0ERfg4Z+pQZTo5YOpRJjqwb32DCrPqcAutC3anlRJUfb2kjPW52QrBVAIXnE1IdkGmOuw8hvDS0MqV7RrWxktKmDca2ePqWanrp6umrr0dUpcH0aJB2WmOzvpblWQVeTmpYWNSqtksrKSmSj6naM8hoMZdUYqmuo/+kHdC+qcdT3MK5oY0ihpvdlnbivQl9WKeAKTColb1/WoJdXoPuxjC55ORXff0e5vAzZRijC/tYmy2LubBazmLkguZU0+cQai3MSy04vxc0MO/NLlHZzfJ1fZC0cJZ9Ksx5PsCS2JRWNsS68w25HFvd7+eP6WqzaqdgUJ3ubaf65+ZPSwQGZtXVSYhV/j0Qp5QvcXH7jOLfP9cUFh7u7nIr4/OiQfGaHb6fHrKe2+R/F3BhYmEy8fgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"6\"\n        title=\"6\"\n        src=\"/static/e911b116d29aca75687238ff6046bb1b/119c7/6.png\"\n        srcset=\"/static/e911b116d29aca75687238ff6046bb1b/119c7/6.png 499w\"\n        sizes=\"(max-width: 499px) 100vw, 499px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"7-avoid-handshakes---piyush-kumar\" style=\"position:relative;\"><a href=\"#7-avoid-handshakes---piyush-kumar\" aria-label=\"7 avoid handshakes   piyush kumar permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. Avoid Handshakes. - <a href=\"/author/piyush-kumar/\">Piyush Kumar</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 88.15384615384615%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEjElEQVQ4y62Q6U+UVxSHX6RNq4KNhbYmFoqNVqt1qSKLAm7AsMjIOCwDiDDDOuzVYRnWUUdZrAyDiFWWGZRqbVXSlk1AxSY1adRCqZCgRFNjavlg0rQfZPXpO9OS+Af0Jr+c+7vnueece4XJyUkmJiaYmppiZmYGi5+dnbV6S7ScTU9PW70lZ/FzsnhLbo55+fIlwuPHjxkcHOTRo0eMjIxY9fDhQ2scGxvjwYMHVo2Ojlpl2VvOh4eHGRoassaBgQHGx8exLOHZsz94+vQpT357wosXE2K3WSbFaaanZ8Sppq2ydLd4yyRzfuoVZu5VFgl//f0nz5+P8+z3J/wfS+jrGqCnb4SeW6N0Xh+m8+YwHb2DdHTfofOaqN67XOu+R0/7Xbq6f6GjT8z33afzxggd14de4e7Q1XsPoaiglfLkYgwhUk747kC3Kwht2jHyy86RW9KIpqyJokITRQUX0GdUYJCFU+2/i8Pb/ShUain4j8stbSK3rBnheFQ81avs0b8vULX8dbqiVnFKsgZdZikVhqtUGa9SXn6ByoQDGNYtodzZhiNOAt/Jl2PevYqy+DTKq6+I7BWO17YhfOY8nyRHAaWjDTV+Ltw7upO+HFfSZK7skctQJqWikEvJ+nARqSIXL3K6ze9xu2wbP+a7UxT+KVLZbmLjVSgTUxA0S98gysGWPfYCdbKP6T8cwg9VqRizQti6cwVu2z7Az2s5GpeFxDnaIrUT0Hk5cbtcSn9lMq3acLb7rsTdxxkPn2UIsYsFAu3nESQWTHCxw6DcSas+nZM5Mrb7r8Mz4BMUnitJFosF2tsQvMiGcId5nEn05YtCFS0FCnwl6/HyW4233xoExVI7Ah3fxEuEJW/Z0BC9hr5SH6rjPAgIcCUgwgvZ5hVEL1lIyJIF+IjctoUClQHL6C3xwpS6ldCATUj2eiKRuiLseMeOtfMEVtoKBDstwBi7kcZUN1L9PiI8OoTIpFAi5BIkzu+ywfZfzuft1zgqW02z2hNN8ArC5P4okvYi3x+EEKZSs2W9CxucFrFFnCBsgwORmxaTrckk0XiOBEMzCYfriFbn4eO2mo0ui3F1nI98nQNh6+3ITIokpbYF1YkmEmpMCHmn29A215NuLEGpi0ORGkzgbm+Sa1rJaO0jtaVLvPAtB4xtFJsbyao7gkqfSEy2jMBgd+J1BjIv9pPS3CmyPQh6UzOnei9Rcs7EQbOBmOpE9usyyTG3k27uJuP8NZJPfkVx/VlO91zi0MUWcpvqUNZnElWsJKfpGzLEQuliY7W5C+Hyrzcw3mwk5kQ2SXlaDtYeIsJYSIYIqhuaSDnbRub3X3J+qBPTT18Tf+oAcXka8qv1RBo1qBsvktZoJqXhEsmmdoT2+7eQn84govEIEdlH2XekEolBTXSZjJhjQSgqItFfrqV/7GcSzFpCG7QotJXEigo6mUN4WRj79IHEVEaiqklD2B/qjb85i70dOtLFf1NVfM6OqjikGg/2aN2RlXoQI12LymsjgXVqQroKSTljQn2sHt/qFIJyvQnVuhGa70ZkkQf/AEqrpSvE4V1fAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"7\"\n        title=\"7\"\n        src=\"/static/17e62f6b3e38d9cf9018e22a1a816bc8/e5715/7.png\"\n        srcset=\"/static/17e62f6b3e38d9cf9018e22a1a816bc8/a6d36/7.png 650w,\n/static/17e62f6b3e38d9cf9018e22a1a816bc8/e5715/7.png 768w,\n/static/17e62f6b3e38d9cf9018e22a1a816bc8/d9199/7.png 960w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"8-im-really-unsure-about-my-own-creation---kheenvraj-lomror\" style=\"position:relative;\"><a href=\"#8-im-really-unsure-about-my-own-creation---kheenvraj-lomror\" aria-label=\"8 im really unsure about my own creation   kheenvraj lomror permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. I’m Really Unsure About My Own Creation - <a href=\"/author/kheenvraj-lomror/\">Kheenvraj Lomror</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 452px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 100.44247787610621%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFUUlEQVQ4yx2T61PbVRrH81+svvBNnWldnalaW5fKzZYSciEkQBpSKCGEW0pC7tdfCLlAQi5Q7o5CKShtaXWKWLGlVaE3KbQMOjpeWrW+2tWZHd+5OkLXz57lzDxzznnmzGe+z/N9juz+gw2Wl69x9+5drl69yvXr11lZWWFra0vkl3mw+UDEOovvX+bx4x/46ruHpIbeYm1ji931119sb2+zvbPDHzvbyH766TEb9zdYW1vbhdxbX2d9Y51ffv6ZH3/8nm8efcvtz+4xNnmWaHaYDl+ULimB1ZciNzHDf/74fZf7+59/8tuTJ8geff+QldUV5i9e5Nbt29y8tcqHS1fY3PqC1TsCND2HL5amzRdEU29CfdxIrdnM1Pn3CPUO4Y7m2Pzy613oLvDJzhNx/C87QvY/f/kXt9Y3GZ8+h93XjaHRKgAmilU1FKqqOaqu4eXC1zmm0iGvrKHe1IxXigvFaeYXl/lNlC3796+/srb5OWfmLhGIpWjqcKI/aUZZfYLCMh2HSxW8WlzG4eIjNDS1UFWpxdTQik5rpOioWrxRYGqzYnEEWLl3H5nUn6fR6kJvsqCra6BMWUXR63IKSo9QUnGMCp0Ofb2BhuYT+IIS7eZG3DYPjg4Xp5qd1BnMHDx8hCMaLX0DQ8jUhhOo6oxUWtvR2qwUquVoajVYjDXkyjVMyPUiasnVGuiTuumwtRNwhvDbA3jtfgKeMJYWK6WVVdS3WpCVK9QYPD4MVQ3MNNiYLChn6UAFq8+Xc+OQkoUSNYuvqbhxsJz1gyreLtMS9vgJuTwEXS7yp0eJ509jtIh2GOuQeU5ZWartZO0fBj4ub+B8sZppjZ5so4meQBfhHh/dIiJBNxPxJJ/uL+WiUo836CXg6GTgjSmGhYmugMSxKiWyqZoTzO+roGf8HPmJEfwBO7GURDofJZ2KMJyJMdgbJp+OkhzOkzCbuHNAgeR1EhAtyk5Mc2bpDpmhEdS6KmQfyA3MmTyMXltlfCRPtjdAJhkiGXGTCNrp89tIB51kRS6R6iHaWM/qK0q6PXaCDiv5kTHOLt1k8r0FLFYrshuizIVWP7FML4mIk1TCR0KyM9AfYXwoxdhohrGRjDj3k8jEGVGoWC6oJBD0CIXtpHMZLnx4jbnrn9GTGUT2vnDx3QIF9rCN0bE8428OMTySIp+P0x314nC1YGmtwx/uIpjpYeHFYmaq63GGXAQ62ujL5hifPcfcwjXGZueQZdpbWXuuhBltLR5bM/oWDeXHSyhUvMyhoy/yUvHz7D+0hwNlB8iaW7j7XBExWxte7ymhsInefJbk7LvMXLrMm2dmkYVc7cSNRj7af4xP9pYwu+cVMk/9neTf9pJ8+ln6n9nHwDMvcH5PATf3lZET8+Z2C1hnO95OE8lcitT8IuMXrzA6JYBRu4VIRI8UqyPr0PKWqUyoLWVOW8SMXJSnLOJCzWucaVUJw9rwBFTEYkaiPU1iFpuJdgeZunyFycWPOX1uQSjsFElJSzyuRApW4ZHUOGMKvLEyHGE5jpCcQPIo8SEjqUEbYZ+CRL+eZPo4Pn8jHuG2FHQxPb/A9AfLyMKnzPQmK+lLKYkGq0lGK4lFVEgeOalkBb1xhcjJxRu9MKBRjE65KLNWOC6AvlbeeGeeVC6Nu8vK8MSEALadJGTTIrkrCf5/d4rdpSHk1BAJiLtXTdguoNJJurtbRL4Cv0uPvVMngG0Mir4lBgYYnjpLKOwTQL8dV4sYA5Nw2XIct1l8K0st3mYDPrO4N1XjNmno8XYS9HTRadTga2/GYamnS0xF7+gkz+7dg85YTSw3yP8AJ9zY7mvoh98AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"8\"\n        title=\"8\"\n        src=\"/static/46f57c587678067be0c7b7c2b37ccb96/fcb94/8.png\"\n        srcset=\"/static/46f57c587678067be0c7b7c2b37ccb96/fcb94/8.png 452w\"\n        sizes=\"(max-width: 452px) 100vw, 452px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"9--that-missing-fact---priyadarshan-mohanty\" style=\"position:relative;\"><a href=\"#9--that-missing-fact---priyadarshan-mohanty\" aria-label=\"9  that missing fact   priyadarshan mohanty permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9.  That Missing Fact - <a href=\"/author/priyadarshan-mohanty/\">Priyadarshan Mohanty</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 537px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 93.10986964618249%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAAsTAAALEwEAmpwYAAADqElEQVQ4y4WUW2ibZRjHcy0IXog3Ew84ER1e6I2IFyITFRWdjCGdV14MYaOWucE8bXhArfNQEFkXpKx2rmnr0iY9uc4k7bJakjRt0i9ps3zJdz4kadPeeC0/3+/bYtduqxd/3tPz/t/n8H/egGma2LaNZVlbIfYtS5y15v7a8m3NG/PbIaDrOoqiYBgG3lxVVX/UxCVF7HmoirUh1q1zz7Y1aprmz1v3AgsLCwSDQdLpNLFYjN7eX4ldniJZ1onmK4QljdFrDqklicnxcYaHh5mbmyMcDpPJZBgaHKKvr494PI4kbAKemx7zFg81Hd0We65NKpVlZjqJ67rIehnFrPpQLQVFQNbKVI0KmqNhOgaBO+XDtuskFsJ83XWCtmNt9MR6aDTraHURal2nYsporvofVEfx4RPeDMPQcZ0m8fQZvly6m7fUJ3h0ZA+v/PIqcqHMtUKJ5OwllktL2I6DLuw1exuh59HmaOA4DeaXxjky9TRv/LiL5zru48gfRxkZj/Jx+BSdPSfQVd23N4S974glUmbpt4Z83VNBajVYWa5ybvAnHu7eTWQpgitkdHzwI74Z/FbIyLoRkbElwls83CTVWV9rUhKSevf8PuaLV2m6dd7pbKM9eBTLcDCtHQhvJnNsB1VUulIRVZdjXBh/VhQoxppbo6v3O144/Tw9f54VDzT9HN6RsNU1lWqVxcUo6fwXXEw8xWcDjyOtLHAlP81r3W9yrLedbG5aPOzuHLKXO8taoyANs2x28GG0neDE9wxNDWCWVU5PdtAX/QRlWRVkDd9+u0q2ycZrsXWqpX7Gio/xQ+Rn+PsfTs58zuu9L3I4tJ+93ft5r38vysqkqGzdl9kOhIYIuYFaSTGavp+vLh6nVt3gcLidTy8fEuHu49DAHt4fu0ucnaRZWxc51P4vhway7CIVD9B5aTeJ7NsMJA5i1g7yYPBJPuh/mUy2g99nojRqtdsXxUvsJjQse1UUJUQi9RIHfnuEe848wK6zD3Fv1zNcSE4IDW6Ib030vOnZb8uhI9pndXWVer1Oo9Hw4Ti2aCsh7GKeq6krnIuHOT8XoVwtsbG2JqJRxOUqdceiZlu4/n96/Z8M5HI5QqEQExMTRCIRRkdHkSSJRCLO8kqJ2eQsUjbP5NgYI2NhEskEOdVkvqISyalEJZ1krkg+t+hLLiDLsviiUiLERby/0YO355F6o/dgoVjgr8ys6O80hVKBsmZQVDXmZZ2s0Kwkl1EVxffwXzpDA5v3zH8yAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"9\"\n        title=\"9\"\n        src=\"/static/efc617d57bd6c90738df4cde44b8a501/b1cde/9.png\"\n        srcset=\"/static/efc617d57bd6c90738df4cde44b8a501/b1cde/9.png 537w\"\n        sizes=\"(max-width: 537px) 100vw, 537px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"10-every-it-administrator---narendra-pareek\" style=\"position:relative;\"><a href=\"#10-every-it-administrator---narendra-pareek\" aria-label=\"10 every it administrator   narendra pareek permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10. Every IT Administrator. - <a href=\"/author/narendra-pareek/\">Narendra Pareek</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 88.61538461538461%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAADCElEQVQ4y41UW09aQRDmvzZ9aW360D6a+ND6oGlMa6qSEAVK1QbaiBduIuqBKgQ4yE1uavBCrIkKSKHAgcPXnaFQvKWd8J2zu2f4dr6dmdVAWLvdRqlUQuGsgP39fciyjEwmg+vra1xeXiKfz/O8Xq8jkUjAarUinU5jdnYWHo8HsVgMjUaDqKDpdDo8sNlsmJiYwPj4OAwGAxO7XC7Mzc1henoaRqMRXq8X4XCYx+Sj1Wpht9vZ5+Li4jZhLpeD2+2GHJY5QiKMRCKMaDSKZDLJUWazWZ4T8eHhIdKpNGLRGCvpEx4dHTHh6ekpms0mKpUKqtUqyuUyarUaO5Kk8/NzkD+tUfTZTBbFYhGBQAA+nw83NzddQtuaDRazBcvLyxwJSZr8MMmOfr8ftWoNKysr0Ov1aLVafLYkeXFhETqdDhaLBfPz8xyARlVV/hORLS0tYW11jcdmsxkOh4OJ9vb24HK6eE4bkmRpW4LT6cT6+jq2trYgSRIr5QgVRWFJ9KaM0yZkTaWJeqPOx0DrBPKjec+nZ8RD3/tJufuRZP7LyK+HnmnoQWeSSqU4MScnJyiXyrC717AT2cJR/oAdKaJBgsfAhGdnZ1xPJpOJC7VSrsDkmMKY/Rm+OufRK/7On6gw8L5rD0tWO1h1foMvbEf+NNuNcEDaY2R9yVRLVLBUqIVCQdRTCVaHyF4wCeeOjI3dAFrt5r1zu4s+IZ0d1RG1n8eziePjA7wzWvFS68brWQnDU1/ws1LsS1fb6gC6VdHp7nZfMs3pEnB4NhDJ5hBIiJYTl8N/pJxJOUJqbIqS+pHIyNwuOw4TceTiXSREj8dDYSRDMpLhLvbliFgLIZdJgenET0Mk1GLUSjPTM/BKXvy4vsTq2CR2n45g58Uodp+/gX/obR+BoVF+fxfrvifDML8aQVXpBqK5urriW2RzcxPBYBAhseNePIZV/Sdsv9fBO6UXMDB8H8WYINYkmus+w6cVpbZghqK2/yblIYvEo6ijjarIbk1VbqGqNvGr04IiNLbvnP9vim4NsG3X38YAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"10\"\n        title=\"10\"\n        src=\"/static/fa3fc149cdf28b47202a082f38a98806/e5715/10.png\"\n        srcset=\"/static/fa3fc149cdf28b47202a082f38a98806/a6d36/10.png 650w,\n/static/fa3fc149cdf28b47202a082f38a98806/e5715/10.png 768w,\n/static/fa3fc149cdf28b47202a082f38a98806/d9199/10.png 960w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"11-imma-genius---abhimanyu-singh-rathore\" style=\"position:relative;\"><a href=\"#11-imma-genius---abhimanyu-singh-rathore\" aria-label=\"11 imma genius   abhimanyu singh rathore permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>11. Imma Genius! - <a href=\"/author/abhimanyu-singh-rathore/\">Abhimanyu Singh Rathore</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 66.60000000000001%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlEQVQ4yx2T6U+TBwDG+8VPS5w7zJJlJi5bdPEPMCZLzJIlDszmVBbZpsi4ZA3lhlKOcshR7nJW7tKWvi093p5AW1rLXcpRDhVBMClky/bB7NO+/9bsD3h+eY48EkGwYTSasdlcOJ1eZmYCjI5qmdLrcViNeB0W3C43Xn8Q0ethWpxGP6VDre6gsbGekdERLE4nJrsdvehGYrHOI3rC+AJRwgt7rESO8IeiCEaB2JKTl5EZYrv7bB7/ReTwCDHo4tqVL7h2+VOuXr7El5c+o2d4hNBODME/mwC6VpgJ7vB8+YD12Bmz4V0qf0/DNtDEm+054i+CnMRPOXz3L7GzU1798ZLvk27y3rlzXPzoIhfOf0yRooyVowNMwQASo2MJh3/jf9DWwd/0DguUJV1lfVhJbN5I/NUCx/E4m/ETNk52efvPOzR1BXz71eecf/8DPrzwCXXtDQT31rEtPkeidyxi823gTQAXoq8RzB66M2/hq81i1fKMaFjkTQK49nY74WKD3T9PELXtyG5eIf2nu6j6DJjmAohLIqMuE5Jx+wIW3xa2wBZPsrLJfphCZvJ1fE+zUFVVkPZLKtHdLcJHc/j2Zlk8DmL3D9FdnkV0eZmt2CGRnTNCW68ZcwpIhi0hBN8mgneV7Me/kpP2gMd3v0NXlUFFkQxFUS4TggH/Cxfe2BSz+wI6+yAWi4e5wDpe3xqu0A6hjVPcS0dIBgU/k541hJlVCnMzefgghfrSQsR6GRW5aUhzMmjsaMez52buwM7Mtgllk4r8Gg21agvdE7PoPeuI4X2mgwdIenRuxsRFRiwB8rIzuZN8C7WqFZf6KbWlMh6lpqCoVtJnMtNrGKNt6BlSeRvSyn5y5F3kN0zSORFk3BHFNL+PpHnYitYewmZxoSgs4OsbN1A3t7DoEBOd5nA7KZmSwlKUNU3UKZTIFQ0UVHVRUqfh3m9yUqXNlHXYaR0NMCCsIOkdM9OldWMe13EYDjGUiJef8YiWsnzS79+jukROW+sAU1oD45pByqubKK7X8ENGDde/+ZH0whaylXqKVFZqe5xIDH2dTOkM9FSV018sY8kxzWRCqCzIoyMnneaycopKlEQim2g0w2TIasgp7+Z+ai7Jd1L5ObMYqaKXyg4jefVaJHWlUhxmHR67gGPaQMAr4rab8TsTH0582TAxgnlKj9VqJb+4IuFQRUtilPH+dpS19TyRFtDQ3E1n3xhZ8h7+A1iMzsp5sw19AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"11\"\n        title=\"11\"\n        src=\"/static/2f2b76260318e583002ef97fae33b369/0b533/11.png\"\n        srcset=\"/static/2f2b76260318e583002ef97fae33b369/0b533/11.png 500w\"\n        sizes=\"(max-width: 500px) 100vw, 500px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"12-my-logical-thinking-as-programmer---ankit-singh\" style=\"position:relative;\"><a href=\"#12-my-logical-thinking-as-programmer---ankit-singh\" aria-label=\"12 my logical thinking as programmer   ankit singh permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>12. My Logical Thinking as Programmer​​​. - <a href=\"/author/ankit-singh/\">Ankit Singh</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 480px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 125%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAYAAAAxFw7TAAAACXBIWXMAAAsTAAALEwEAmpwYAAADhklEQVQ4y3WVWU8iURCF+fW+GV99mBFUUGE04ALI4oIryKLsLbtroj4YjRqXaM39qqcZDdDJpbvvrT516tSCK5VKSafTlkqlIvV6TSzLklqtKlWzrFNLKtWKNBoNY9ORRrMh1WrVnNeMbV1arZY0m00973a7ApZrb29PyuWiBAJ+8fl84vN6xe12SzQaMXsB8Uy5JRaLS6lckt3dlPz+9Vu8xi6TzaoTAFm9Xs8G5Af0U8OmbtX/ebeMUcs8182eZc5OlYWzLPPebrcVyGE5AMgmRvZq9d9hgRyZTFpyuZy5ZzTskYA7Oztyfn6unh36GDngJycnRpKyvLy8yOvrqzw/P0s+n9c9B/QH4NbWltFmV18A5847QDBPp9Py8PAgHx8f8vb2JlyAw3SohrFYTLa3tzVrhILnlZUVIVmXl5cSDoclaxJQKBQU/ObmRt7f3+Xo6Gg4YDwe10RcX1+r+ISRTCYVBCNYr6+v6+KdC7vj4+PhgDDBM6CElEgkVHyAYM3+zMyMMoQ99pA4OztT3QeSAtj+/r565UJwDqPRaD8psAHYa2o0GAzJ8vLyD3YA9wE3NjY0PEJ+enrSj/x+v8zNzakTmMEWpzAndKLAAUnDKSxhTDJdHJIE7oCPj4/L5OSkhEIhXSQMtoSK4/n5eZmdnZXFxUX9hlZFCpwnkwmbYalUUh1hwHPFGBA6i3Ap7GKxqOyoCjJM2VByh4eHcnBwoHvBYNDuFAobLTomBBW5ZYvMQiu70O2wumrT1IHCO+esi4sLjcKVMvqgQ8ig/2EYTHtkyj1la1bISblaVmfdXkcikbBMezwS8AdGTxt+YFIzowstWEwWe0jU+qOLsPP5nAkto2f/e3nItIE6BnhhAeD0MoDoWyrZTAFDr++DYQCQAwyd5YwrgMns3d2dfL8gkB01D2kzyoLyQDc2V1dXNXsky57onX6CHh8f5fPzc3QvUwoc4hVmhMxAAPDq6qr/jDNYMb7u7+9HTxtqCcHRC1DAST93wqZT6B7q9fb2VkcXDijooRpSlDwwurg2NzdVR6cLcEYUgCPFwsKCrK2t9YfywHAA0BkIX19fmlFKh6qHMZ1C93CnRZk0aO5Mded/pl+HMCEhsILR2NiYTExMaL+yj1YAMCBgAjsWmn4fEHSKDgdQCZNsc6dX+ZhD9viQKOjzSCSijpaWljQCxhgaozcRcP4XN0OwQIPN1dMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"12\"\n        title=\"12\"\n        src=\"/static/ce430bf1882a235044353d4b4d098275/e85cb/12.png\"\n        srcset=\"/static/ce430bf1882a235044353d4b4d098275/e85cb/12.png 480w\"\n        sizes=\"(max-width: 480px) 100vw, 480px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"13-html-is-a-programming-language---hitesh-kumawat\" style=\"position:relative;\"><a href=\"#13-html-is-a-programming-language---hitesh-kumawat\" aria-label=\"13 html is a programming language   hitesh kumawat permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>13. HTML is a Programming Language - <a href=\"/author/hitesh-kumawat/\">Hitesh Kumawat</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 119.69230769230768%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGbElEQVQ4y02UeVDV1xXHf2nGuqKCEkCCGhUIIYoGt8BjkU1BeKAg6xNwWARBWRRBHstjefDggaIsD4EnCC5sihGJGg2oHauOuGDT0ARxaiLR2mjbpJ3WPzqf3of+0d/Md+6553fmc+85954rqTsPMvD7K1S21HB2sJ+2c6eo6zjK6YFuui6e4cKtK2hPHmG7VsXQoweMPnnMw+9GJzXy/Z8YGfueP44/ZvzZjxR3tCDdfnCHf//1V66cv8Qf7owwfO0W39x5yO3rN7kzdJOfnz6ns7+Xxp5TPHv6A4/Hxvjl7/+Y1IuffhJ6zg9Pn/J8YoKbt24hrdeEENyShrwhmcDGXfjUxbGxIQGFNpXw+t346uKRa+PpGejnx2fPGH/yhOF797h0+TI9vb2c7evju8dj/PyXl5zqP4c0v8CJmaVOGAnNLPocr9JwfMq2MTt3HSZlLkwpXYNXdTTZTXW8+ucvGL7/vnnDq+cveCV29+vr15O+N/95g29lPtKHRe4sqPXDot4Pq2IvumrKqCvLwSxHxjytL9M17gTVJuKmPsD8vCQcK5U4VuWxtqGMz+pK8T1Sjkd1EZYFqUh7wpAsil2xTHTAMsYeWaw7WQeyOKAsIEYZg0+1TACcCNTswPugCkmVyKINn7DSwRwbHwfmb3ViWlwAUlY0UnYs07JikRakf05K8BqU8pUEBTqhPtHOob5zlFTv4v4ZBb/r8yK5PBLXeg1T6vYT+ekHJDuaEfbRTCKXGbHJzhSrCG9+o0pmauZ2pJUJq7mh28HV1nRWhC5nT0cdV//2muz8bC4dLuRQ+X6C0mLwuNbJ0uYDVMe4iNhEGpVyrtcq2FuTwHudVUw9Wsi0nB1Ivj7WXHRcxHmFK1vka/CN20J6YTYxsenk5aow8S7HT7EPl5EBPHRZPOncJeocw9CJDIbqYlF15yKNnmfqg15m6IuQ7DctpcdrFRdCnImId+M9/8XYhS0nKmYn0UkqtielsHVvFFH6g7TbmPIow4c7l3Kori7gSksqO/WZSONfIU0MMn1QbwBaIve2QrZlCVYyU6Qti5CCF7Ikag1WouhLA5ayPjsETUosE/MlhpfN4us4Z3r3+NDl70CbtQnLW/OwvVbPlPtdSKsjXLENdcY6xZvPtslYnujBSoU7TqHuOOz2xm7TaqJVqZQ0HqQnwI1BF0furf2UK/uiGUoL5+R6R7rz4zldlkpEe7W4Oi35ZOgLyGjKJ+1YIWnNBaQJe/fRPNKbCkjS5aA7o6fqbDPxeoNfSKck/XgR6R0lJIp5ilBSfS7ptTlIJqUuzBEdMaf8/8Z3Mta48b7olG0NqQTUxE92jcE31yBDrFqGsYiba1ClK/NUzkhWZV5YVBrkPakF72SwLSt9mC2CFY0ZbK1LZo7GZdJnWumBqdbzXZzX5DhP+BeUeCFZlnliVuGJufhhrvVivtZjUubvAmeVywQwXQCTMNLIMNd44lAaxAqVHDNhGxY2FaN9hQufKJ3fAs0rBKhiA2Zqd2yKNmKt2ihsNyy0b4FROgGsTWaaxolVRQH0tjTQq6vBpsCDqRVuyKs28M3lbTRV+YrHQS1gIgW7Ej+U2mL0zXqON7exoySVD8QCRiJNAzC4NonpFTKsi7woyd5FbZES36wIbNSBrMvfTH12KtEJe0UNBXBupRubC6O523WKscFenl4/T/MRDR+qPJklIFGihkH1yRgVO2Fb5k9qpYrKk6fpuDtMcbsOx8hQFvuq+dhPKYDlIq1SGfur9/BtXytjlzsY/bKN4Z4mVhVsZqpIU9GUiaIqiQRtHLGHsomszSatVs0Xo99y4vYNghOCsQ9JIDQh7O0pzxHXQJ4XzLVTx2iuO0yHroF60VoL89yZadjh0Uwyi3dhG2iHPHQNJYXhVGky+PLhXQZeTCDP2YlFmA1mQXaihgJoXOGKe244x3THaT9+mu4TZ8ksyMU0T4aROL2w5kzUhalsXTyLkI/nErbcmFDvdbQ/GqHz5hA7EoKQ/Bfy28ClSKalrqyvUtB5/z661jYunOmn92Q37Rcuigchn/cLV6LQ78NvbzhFtrPR25qw38aYrkWzaY3yp7w4gdURDkgRdswIXYZknLeetM7DfP3yJcduDFJTXUO9vpWB8XFqrn7BDKUj21vE85URhtp+Nv8SO/yz7Tzi1lqwyP8jzGJWIIXaTgKnBy/hfyrhWFIRm8CKAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"13\"\n        title=\"13\"\n        src=\"/static/c976299e6494257936e25d7e87b08998/37523/13.png\"\n        srcset=\"/static/c976299e6494257936e25d7e87b08998/a6d36/13.png 650w,\n/static/c976299e6494257936e25d7e87b08998/37523/13.png 720w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"14-programmers-while-sleeping---versha-gupta\" style=\"position:relative;\"><a href=\"#14-programmers-while-sleeping---versha-gupta\" aria-label=\"14 programmers while sleeping   versha gupta permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>14. Programmers while Sleeping​. - <a href=\"/author/versha-gupta/\">Versha Gupta</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 756px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 99.07692307692308%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFV0lEQVQ4yx2UeUzTZxzG+/+yxP3nXLaZLdnmlhnw4igFQc6CGDePLc57UwSLyqVTKRXKjRBBRenKISqIooh4cbQUS2spBaHIIcWDSx0omgkxWeZnb/tLnvzevMnvk+d5v8/7k7SnRjNcW46uKI3uy1rG9NcZbalj0tDAo1vVtP11nJ7KkzyoKeGV5S5T5tu86WxmwlDPBVUc51UHqM06RHXWYW4mbUZiEx9Mj47yYnqK/wBzVw+T0zMMPnnG+N+vcD7dPXZuN7XQO+Rg9OWUeA/jGJvkTGkF+5IOkZKeifJ4EZpDMUg6ilIZ7u3h2bPHDA7002400tTURHNLM2ZTO8NDQ0xOTqATe04Z9HqMbW08djgoL9USH3eA/YoYdu6JoWD3L0isp9MZdzyio8OCvbeXfnsvuoYbmPU67D09DA4OYmxtxWaz8eHDB2ZnZ12aGJ8g+WgyKpWK9LRUjqZlUKTYgsRceIx/X4xja7mDvuo8pYcO0lZ0CnvFOfRni3nUpmfUZqXhej3Pnz9nYGAAu91OeXk5mzZtYv/+/STEx6HKzCE/Sjg0FihhZpqXXRZMJwrp1Zyhr7ICm7YMa/FZurWlPLUYUR45jFqtJjk5mZSUFHJyclAqlRw7doyDiQkEyFej3hKJpKskh7cjw3SUl3G/7irdJRqs1dVY62qZvNFARVwilrorJAugUpniAkZFRbFj+w72KWJpMxi4crmGhd9+j3JDCJLOkmxmHEOMNN2ms7KS6yo15rMaBququJWqpjpDzVOr2RUr73geubm5LqdKAV4dHkGsQsHayEiWS305HbsViaU4i5nHI8w9fcTc8EOmOkyM39MxZTEz1HIXa00VY2JganHwhUVFFBQUkJ+fT5FYK5OVLHFz58tPF7AzSkGxE1iXmkBDzVUM12rpaW3B2FBHr0FHn9FAZ9MddFUXaaw8z96YaOLj44mLiyMxMdG1TkpMYtuWrWxY9zMbN28nY7M4Q9O5E4yICpiMbbS3G7l/34zB0Orqo9lkwiLcORzDeHl64ikkk8nw8/Nj5cqVrFq1yiVfHx8WuS0lyn+JqE1FITZ7P2YBMOj0WExmOjusosCtWC0d3Gs10NfXR0hICP7+/gQFBbmAwcHBBAYG4uXlhdTbC3cPKQfCpEj0mjym5t7zbvYd069f8+rNG2bevmV6ZobZ9+/5Z26O7q4uAoQj/4AAF9gJCw0NRSqV4i/2/WQ+uHtKUQR5IKlRbMd+pwnLrQYeNDbSWFpK05lirGLiVlHmh20ivuhksJ8AinhOYFhYmAu4dOlSl+uQoECkq4LZF+qF5MbuzYxoKxgo03IrLoFzv+/iXmoa1tR06vco6BQ16tdoCfT1I1DElQuYXC4nIiICb29vV2S3xT+yxFvG3mDhsF6xlbFLtQyVl9J++hRPzmp5UHgSQ14eXZm5NMbGc1epcgGdkZ1DcLpywpxDWrNmDWuF5s0X1fFZjKT5yF4c1TWYsrMxVlRgFI4sp89gKztHT1oW2k2/0ZqVTYCYpMzXFz+hAAF2OluxYoXrHDeuX88n8z9jl587ksY/o5m4Vsf4pSrs+QV0Z+fSlZFNlzqTOwmJ1Ivfk12jYbWIGx4uF7dDjjw0hMiIcMLDQvlh0XfM+/gjFiz8ivhwHxH5YAyd5RfoP3+B5zdvM1R9ib6LVQxdvUrfhYvoVOnos/Lxkq5kma+IGhCMT2AoPkGhyILCcPeS8fnX3/DF4uXsChJDaYmO4N6RPzAf3olFGYVJrDtTY+hIicKQtI32xK3oYn9FGexGcpg76kgPMtd6kyGU/pM32etkpK/x4Ih8GWXrlvM/WtotP1X3tRwAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"14\"\n        title=\"14\"\n        src=\"/static/73aa746c803e377ecf26b5c409dad0c2/8ae3e/14.png\"\n        srcset=\"/static/73aa746c803e377ecf26b5c409dad0c2/a6d36/14.png 650w,\n/static/73aa746c803e377ecf26b5c409dad0c2/8ae3e/14.png 756w\"\n        sizes=\"(max-width: 756px) 100vw, 756px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"15-programmer-swag---gaurav-bewal\" style=\"position:relative;\"><a href=\"#15-programmer-swag---gaurav-bewal\" aria-label=\"15 programmer swag   gaurav bewal permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>15. Programmer Swag!! - <a href=\"/author/gaurav-bewal/\">Gaurav Bewal</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 480px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFj0lEQVQ4yx2Ue1DUZRfHf5avQhpeAjJWBZQQUReDEZUyo1IMAxJRCVCIuCxIXAQRTTcuK6yoCIIgiLoikMAmCyyXXdlddmG5bJnKjKk1UzRjb71Njf3R67yXmT499cyceZ5znjPfc75zLlJbnx5NTw+avl60ZhM6q4WeUSu94zYMt6cwfD7FoGOSoakJ2np1aIcNDIp3z+gIXeZhGtuvo66vpe7aVWqaLiDVd3XSbbxFt8FAh3GIfgE2IEAHxd1jM2MRgCNfODCO2WjRdmAQdpNjgl6LiX6zmSut1+nU67l2o52PjhYgXdJ+hnXMTr/RgFbfh9Vux2obxTQ6xtT0Pe4/eIhN/BtFNpprzYzYrEK3YbTcYljYDLcMTIiM29taSS3IRmoZGKLDZEE/4cAyPY394QPuPJ5h+I6DgpMqhr50MPP0Cd//5ze6h/vonxzhwa8z3PnxEVe0Vyg5W8H51iZ2Rr+DskaNdGPYKMBGGZn+gvFvprn7+BG/8wfldZVIkkS28mOh/5/H//uVb397THPbJR79MsPXQswOE4psBdXNtUTviUB5pgzppqkPw6SJ0Xvj3J25z9idUdRnS/n0ZitBa3wpLznCX+eX/z7h3wJ47LaNIZuBfz79F989+Z6KM6WEhYWiyE2jx6JD0pl6GZ40Y783wbc/f0dWXvrfmWVlZ3C6KIu8xBhMFgO/C8AnT3/ih58fUler5vZdKw8eTaC90UDIxnU0XFSj7WhAGhJtYLNbmfrczvT0BNtCQ/Dy9ELu48VG+VpeDw7ktcAATpUc5qupAe7b9ehb6yjM2I++qxGdpopXg9ZQd/pjNPWCcpumnrbmKjqvnUNTV0ZCyBpiNq8nOiKStT7eBPiuJOBlH7Zv3ci4oZ3JoQ7ujXRzRplHQ3UxzWeO4em+kBNFGWguqpAqS7M5ry6krUlNWtRWgmUvkK/IQaMuIzrEH2/ZS6zyWk6oyMKqa2ZUfx2H4QYlhxV8cuwgZ5U5zP/HMyQnRnOlvhRJXZxFVUUBJw8nEyb3ZV9UDDkpB0l6I4ict9eydIkbPh7uJIZvxa5vwdLXwi3dVQYE3ezUWA6lx+O+aL5g9BZN55VINXUqLgu6xw+lk5uSSVFeIYq4OPy9PYgLXMmBTauJ8JcRH/YqZrOWMUsngz2XMfa3cKFWRWJcFKt9lrEvJoJLjaIPS4vzqakpo+JkGcpCJakJHxC1fRtL3BYiE5H9X1yAl8yNl/1WU1GSS9+n52i7WEZT9VG0Ny8TFx+Ny7y55OZncrWlHilhxyaKFPvIVaSSkpBCalwCB/buxs/XD18fH5Yt9UAul7MhKIgTOXFUK9NprDnO9auVdHU0UnnquACcw+5dO6iuKEJ6ZaUHwX7LecVvBatFNTesXycoeLLIxRlP2Ysse8kd98UuuLo4sUrmilz4b5avZPN6XwL8PNkSvE74zsXT4wUitwYihYiPv8TPawm+K5bgvdwVpzmzWOHhiqug7LbwOWRuLixeMA9/4bPK051F8+eweP5cXBc44zRbwsn5WZydZzPPaTZSWsxbZMRuI+P9cApSoomP3PK3Q0zYJoIDVrBURI54I5Bly2UcSo7iSHI4aXtDSYl5neT3XiNY7s2sWRIuz8/BVwST8hVJDIi11d6qobL8EypUSjq1Wmqrymk4f5puXS/qChVNTU2YxVQZB/vQ93bTq9NiGOzBMTVOZ2cHXUJ2bn8TKTNxNzWny8USOErs7nfJ/HA/BXlZFOSkc/akkkt1VWRlpJB4IJZzlSoaRZBasbLOnVKhVhVTWqzkxPFj5BfkE7JpA1KumMmMpBj2RL7Jrh1bSIqNIjJsC+nxURRmJpKdFs8+UcGId0LJTI7lyMEk8tLjyFPsJ3X/HvZGv8uuqHDCw7fx3q4I/gR6Ps/3Sm/LpAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"15\"\n        title=\"15\"\n        src=\"/static/2d05765ce4e0fcde30c2369301f38812/e85cb/15.png\"\n        srcset=\"/static/2d05765ce4e0fcde30c2369301f38812/e85cb/15.png 480w\"\n        sizes=\"(max-width: 480px) 100vw, 480px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"16-qa-life---rakesh-pareek\" style=\"position:relative;\"><a href=\"#16-qa-life---rakesh-pareek\" aria-label=\"16 qa life   rakesh pareek permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>16. QA Life!! - <a href=\"/author/rakesh-pareek/\">Rakesh Pareek</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 75.07692307692308%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAACiElEQVQ4y21TWXLaQBDVCWIgBMcb3sACY4tFYCQ2gRCLAS94S5xypfLlr3zkBjlCqnIG3yKHe+nXQpBU8dHV0zM9b16/7jGS+wWUHA8Vp4WdkxIS6TxiOybiezm8lzXjDwcFJPdP1a+z6Cx1eAYjeWDix+sz/rz9xrlto9IaYXD1hPbwBpfzLyi6fcR3zf8uRwAkE+1tHlv4KGYk0sf4/u0Rb79+Yj9/CrPSQa07heUGqHoT5KueXkgdCoM1zFbg4dqI7ebgBdd4+fqK1JGFje2slhwTVok9ln+CDTGyjKnPLby5tnxjL1dBpugiW2oib7dRaQ5QFju76CJXaS3j02oH5UYgeQ2UGn09o86JhdYRSyMrYB3Rqz97EP0G4h/RvbyD409R88YYz59Vz1pnjM7oFk5vitbgWuPDwoVYDduZ4orhseXAnz5gcP0J9e4E9d4EvcmdgpAlQWh2e6iPsGH0ZMh70/sXITJcaZgRQIIFkshDXhhKTMYEJVuWXXR9zSO4Ve/B7c+UKY3jwtKXDJnEUkuiUaHmoS1xb3Kvccj4Hs3gSiWpdkb6CB/zxnMdLcqweXQeMkznbJ01Cp+xXLBJFJ0NYHwiTSg3A1hOD2a5qc0hsOX46gnG9VbGCgFJU3/EP93iyHAsmMC9cGTMZR7j+MLrSMk6mkeDr7IcdjTqIsvhmiW5/gy2iE6NWR6ZX3Qv0ZIc6je8+awMIzJGOl/Vyw0BJRiNglM3+mh8KAsb05A97vOO64ePt4e3+u205KOzujJhAg/4el0skCb5BJVLdnukY8MxYpPImM3jR+DeuXR9qeGBDCYBWQo9yyBLdrM1CDvpCMjq0RtpVBPvtjKLbxh+yUjDv9G/4q3jY6erAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"16\"\n        title=\"16\"\n        src=\"/static/1e0e4249644e76b22b31c0de507c6973/e5715/16.png\"\n        srcset=\"/static/1e0e4249644e76b22b31c0de507c6973/a6d36/16.png 650w,\n/static/1e0e4249644e76b22b31c0de507c6973/e5715/16.png 768w,\n/static/1e0e4249644e76b22b31c0de507c6973/5a190/16.png 800w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"17-infinite---hridayesh-sharma\" style=\"position:relative;\"><a href=\"#17-infinite---hridayesh-sharma\" aria-label=\"17 infinite   hridayesh sharma permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>17. Infinite... - <a href=\"/author/hridayesh-sharma/\">Hridayesh Sharma</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 64%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAADvklEQVQ4yw2RWVDUBQDG/xaYnBsphBQiwyGCkHINEMO1LMcCArsuh7iCDizHIjrBLoSjIQSIyjkIiMaxoJJyBisqGJcMSE6Zo9BB49RDhTY9UPZQD7/24Xv95vv9PqElN5Z86X4uFyWhK0qkTRVJt1rCubQAtIpAUkP3UZElpjozApXEg08z/BjQxjJdfQidOpKKJC9K4j1IC9iN2tAjzDaqyYgJ4fPSY9w5ISPCxZaLVcVMPv2G+6vfcu+ndXp0rbQUSEmJDqA8PZwbHyupPhJO40k5A/pBhmYmubXwgPbeNoSzKjnbt9sg9XEjL8qf7abGqMo03PlulRvzs+i//4Gh8V4ay5TscnJHFRdMzwkFfTlxqJQyRp4/4/bKMiubmwzP3kWQJ4ZiYWKChZkpNjus8N5tQ/3lC4w9fYJu+h7ja2tMzQ9ytjQLG1sHRG+LSAzaR16oJ8ezUhhYXuTqxCjXHy4wNDWKcCxditk2E95/R4SNpTlRPi703O5m8eUGMy/WWdjYYHjyOkdkYizMRVhamCMSifBytKWuVot+9TmDjxYNRGuMLhgWRsVKsbS0wszEjDeMtpEU4smNu8Ms//Wah4ayJ//+R+egDg93N7aamrPVxBQjo60kB+6h/coFljf/ZvHVKx6//oehh9MIaZF+xHg7kBLshEbuR29RJLrzhXQ1n+ZSZREV5YWcK0olJ96fnGg/ssSeyCJ8KEoOoklzmL5rNUz019HTWUvVGTXCxZxYMqO9+eSomK7iJAY0cbTnR3EmO57KQhm5GVLqTh6iJF1CQaQveQoJw0tzjM3pyVVEoE3wpzU3jo6BbnQj/QipcRH4e7kzWlXAWHE6yZ4OnNSomft9gy9/+ZmvDCi39Dfx9XJBEARSD8uZ2XjJ/Is1wsICMTHgH1fEcvvZKl98/QjBbud7WBlEV6RJaMqIxN78LWIVCoZXlugcH2HCIPvqzWuEHXAmYI8tDaVKxu4P0dHVTPyHXnjs3slH2TJmlu7RP9yL4LDL3vCaBXa21rxrvQPjN7dwRJXNyp9/8NmknsqmC0zqaqhQiukoOEhNloTmtjpa288T5+NEfXMNl1qqkfm70jfYjeDk7EqCOIiGAhnJIb6cSgggLS+f6w+mcHB0pkQezosrGhqOSpHud8XX5wATP64z8ngJeZAb9TVayk+fIj3lIK1t5xE8PPZia21NptiP/PhgmpTBlJ3REhwhwVjYgq+bExXyMGIMDj9wtKMsN4X53341KFkkZK89tc0XDanjdKkarSaf/wF/KVOvU8xECAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"17\"\n        title=\"17\"\n        src=\"/static/486a8dc5475edb227208bc6aba37c7c5/e5715/17.png\"\n        srcset=\"/static/486a8dc5475edb227208bc6aba37c7c5/a6d36/17.png 650w,\n/static/486a8dc5475edb227208bc6aba37c7c5/e5715/17.png 768w,\n/static/486a8dc5475edb227208bc6aba37c7c5/d9199/17.png 960w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"18-python-lover---aman-agrawal\" style=\"position:relative;\"><a href=\"#18-python-lover---aman-agrawal\" aria-label=\"18 python lover   aman agrawal permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>18. Python Lover!! - <a href=\"/author/aman-agrawal/\">Aman Agrawal</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 602px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 64.11960132890366%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACaUlEQVQ4y41TyXITMRDNB0BRCY5tvMRjjz1eZ9PIs3hsj5fxFjtOUhU48Qecc+bABU78AFc+heLGLz1a0tjAjUOX1Gqp+/V7rYt+uESyeUC4vEOUHsDiNZx4hfH6AWyyRbQ4IJzvMfDnMMMU/vwWE4oFtA5nOzTMGAXdxZuWJ+2iZkXgyU4+Nil5nx72/BnYeIMB+WyygUsFejyBGSzg0T1hoqg7XsNg038T5lsMVzULOc3Cdd3BdUNZTrOlL9Zc3ZaP8tn5OZadi0TFJpN2Ue0HqA8ilI2hDJSEGVzZX76MGafYnzunN2UjQ6i7IywPT2i5U7wmpPmGKysLy1P1QtOViMW5Wh2JSnZTV/tLzcXLGqO7hLBmj9APlmhYMdpegg5LFJfBHHUivNoL0OUzNO2xXA13At0aSa6FUDVzgkMa4+P7KaodQqhRMCaFPRJhKtQm9fyElKS9SFLu+EoMijvjFabbR1jhQk7GfHOPupPi0weOn19taH0uRFFkF6l/0dbJRHuiBcGLap3Jc9FiMdsrn+4YDKWOrUSpUEuV9lBydpL+f+wkRMlQRQt6JkqHeFgd3yJO7+QliUZXlSWSbFzOYpxXhlc3Hi5rHq40QtjKxqZJ6g6GCyJ4QXwNoQ1GUqCbLiEnv2GOaAImZGM5Xm2PyO9GsDyO4y3HasmRzDzkGgIhJewR4dPVkb7eHiF9MytKEZOfEOHJ7pG+2B58pr5ZlO6xvX+HXnjA52cHv757+PHNxpdnjhdVRhRQwmLbI7kDFImPCikqJ76l9uW2GHZ+Jr9ACMQw53UOkzvwAgd+aKNjES26QvgbW9GTZhi9Z8IAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"18\"\n        title=\"18\"\n        src=\"/static/ea58877c7c9a876c684900782b68a362/32056/18.png\"\n        srcset=\"/static/ea58877c7c9a876c684900782b68a362/32056/18.png 602w\"\n        sizes=\"(max-width: 602px) 100vw, 602px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"19-whats-your-address---vijay-singh-shekhawat\" style=\"position:relative;\"><a href=\"#19-whats-your-address---vijay-singh-shekhawat\" aria-label=\"19 whats your address   vijay singh shekhawat permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>19. What's your address? - <a href=\"/author/vijay-singh-shekhawat/\">Vijay Singh Shekhawat</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 460px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 123.04347826086956%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAYAAAAxFw7TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGwklEQVQ4yyWVaVBU2R3Fn4oIIjrAgLgEBBXZd5G2EYQGRGiaraGbBpqlARtkETpAK4gIwujIpiWCgoyKLIpgEB1l0FHiRsbRuMSYZCqVWElVqlKpytd8++WKn17devf+36l7zvk9qXNwhBO9g3zbf5nT/cMY649hPGRCsUdGfKqW1PxyDIcaKK9r5ICpibrjp6g4fJzqxjZM7V1EqbKwtf0KB8cN2Ns5Is2/+cjcqz8x9/IjM09e0z44zsXRabIUkbR/20PnlWnOjk7RPjBC3cmz9IzcZPb935l69gduv/1EoekokiQhrbASTwuk6w9eMHbvKdOPf2Zi/gmt4uD50RmSY2Lp6O2ja+QWp8dm0Va0oIyPRKXaT+nhZpovz9J9/x3Hus4sDVxhYcWyFZZIj9//jdkXH7jx4Bl3Fl+jNtazfksAUYoMYpM0BEer6Jq4Q0ntESr0GTQdMpKwV0ZWVSNDC79gOvll4HKhcLmFNdLkjy9JSNexcqUlqTo94fuzxIaVOG3241fuvjhv8aTjytTS/WmSkzAZSygsr8E7Vk117yQlbX0sX2mDtGwlFla2SNfuPiEwJByLZRKKuFiihCpJWiE2rFr6soOzKyevTpJVVs92/zCUqZm09V2lvW+EhtPfkVl9DFuHjWLvsi8Kf/j9X9Hk5OO3xRGtTktkSgHWaxyxXr0Oa2tbHNZv4si5YfJNrWQVVpOeUyaScALzN/10DU9Td6IPl60+SyIsLMVAXVEZ2mwd4QFehISFExIRT2BwOP4Bwbht9cDG1o7t3n74hcpw3OBKkHgXFh6Jl08A4fJo9ivVODpu/OK0tBwpu+AAxZW/ptos8lfTQGlVLWU1ZrE+iqEwn7h4BUVllRQYSsThFPSGg5RWHBJZrUN/oAp1XhER0bH4+PoTEBiClFvTwj59JclFNWQIh3VVzeRUNKJUqVDGyPHzdEelzWN4ep6uSxN0X5lk4OYcQzOP6Rq/T9ulGeRx6ayyscVuvSvS8OxjWs6P0dg5xMGWbrIrmtiTlkvU7ghMuTpMBi3BQQE09I6RpssnKzMF0+kLVHXf4OqjVyx++jfeIZEiNquwWfc10uj9RaZ++57Z53/m6R//xcK7f1DR2kNKmgZNfAxqhZy81CSKTc3os0VUCrRkaLSUnhjk0sO3zH/4RIBMgZWNMFFUULr2/TNGf/iJyUfvmFl4z3MxtO3iBJk6A+qYaJThwZjNh6k80kZ2egqGHC1KdQ4ppWZMneNUtfUTLFewxl4kY40YODT9iMv3Frn+4BW/efyGH4XCjuGb6MrNqOOS2O3hRq0wLO9gPaGyCGFMKsbaJirM7ZQf7SHT2EBwVBzrHJywtXdGmnj4MzcW3nDr6Xtmnn7gwswChtoWtvnvJiOnhKTEdIrLqzgoIBCf8lmdnpLKBgxldTR19GM0dxCXUchXgjZ2n+OTrMknWbhYVmsmM6+YMHEf3r7B7BA58w0MEznctLSOS0jGxd2DbV6+RO6NJzpmH3sVCYTJY9ni4S/qt2qpLVJukYG8ohJqGxrJzi8gLjGJfUlKEZsUlEmJ7JJHoMrIFC3KIzh0J3ui40kU9UtITiM6bh+yPdEoEpUEBIeyw9NL8PD1L8wIts0ufmTk/gLNZ/q59vAF5taTZCXtQ1dcRse5Qfouj3NuZJqLU/cZmJrj8u15zk/N0zZ4i4PNnbi4bRcw2S5cnnvK0Owj4fTvuHDzrqBwDzM//YXekUkU4TsFturpGbvFoY4Bio6cIiNdRV3HWVqGbnNi5C4v//kfiho6luBqKbovjc89Z3z+BdfnFzkzNiUIcp4LohWVR0+iTM4gvaCE6tZO8mvbSMvOozwnlRyNhvyGU7SOPuDtf/8nCtHLaht7EWwHpLF7TwR1+xm48b1QOs+R7n5hUilOmzxI1hTjFxaJZ8AuCitN6PV6jDlqdFodMepianomaBqYQnPAhIPT5i8Dd+6OWqJEYoZGdPQOtR3d+O5SYOu0hQ2uXmx298bTNwSNoJIsLpHY6AhyispFLkV0Dp8mr+Y4cWnZOLtsY+3nn1RImIyv7e2JjJQxeOsuBXXHWOfkiuVaZ1bbb2L1Wke2bvci21CBMktPWISCQqOgU/1xzO1nMdQcI0FXhotnIGvWCoUqdRae7i5i4G5Bk2toy0y4efjg6R8kGCjHeaMbfoGhpOuKSEzLQaXORVdoJF2dT25hOTWN31BY04yrGGhpvQYpVGRrh4cHXiKwnl7eAqDBS3D18fFFJpOxzc0dT08//AODsLJaTUjITuRyOUFBYUt7/P0D2Bkajp2dHavE+/8DbL0jCrnpZjsAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"19\"\n        title=\"19\"\n        src=\"/static/7298e05136c9f8ff10336ed4b196ccd1/08a84/19.png\"\n        srcset=\"/static/7298e05136c9f8ff10336ed4b196ccd1/08a84/19.png 460w\"\n        sizes=\"(max-width: 460px) 100vw, 460px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"20-gamer-and-programmer---chinmaya-pati\" style=\"position:relative;\"><a href=\"#20-gamer-and-programmer---chinmaya-pati\" aria-label=\"20 gamer and programmer   chinmaya pati permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>20. Gamer and Programmer - <a href=\"/author/chinmaya-pati/\">Chinmaya Pati</a></h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 403px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 74.44168734491315%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAAsTAAALEwEAmpwYAAADJUlEQVQozyVR204bVxSdT4rUmERAIClmLmdmzm3uc+zBBkx9weMLYHOzjWMnKA0ugaZgaBO1TSpFSanSVG2l5KXuJ6QvzWvpRTynH9CNerS1tfY5Z++1tZZ0cjxsrDWajfXmWmMFTq22Vq/XKtWVSrxardSWl+txuV6pVsvl2iWAHNfjOC4WHgz2pPVmM+vYy0FYjdKxEItCpAJ/IZOJRJhJiUgE6cAPHDvlexC+bTmczYnQ5SwuFaV2bSWtaBn/sp5z3DzhglIRBBbBLufQBvcOozYlrnUJiI5ci1uUrdaq0lbuI0XRAs/HukExZYYZId1mFCMNGphpAOAEG6oKHzghUBJd12S1XCxIG0tLCCGfW75lu5QxQtO6bshJTU6amqorszPTUxxjixITaYaqIVmFfP2DRG4+K23klsavjqmqZjEG2bw101hYbLe2tjc3O61Wt926//E9jomanJmenAhcu7m6cj0xRgy8/8lA6rc61SBVCsO8H1ZEOs/50ydf/zoavXj+4tX3L0ej0fv3/1bjOAr8XDZTr8Qb6w3fdcql5cODQ2kwGPR7vbut1l63t9vu3Ll9u7vT3e3f3e33793p93Z2ep1Ot7Xd67Qhb69vbDbXYJ2tZhOeJHDPUBGnNCWExTg3MTV0UBhUNVSF4UvBCNKwBoJpSFOQolB40jTPcaVSoUCQEXqeZ9m+7Tjcsgj1LAtGUNMAwzg2QXZiIJvgyDCIrFDTBI78Yk7K55Z0RY1CYVMG4XLLAX6MMRhGCTV1YHYoeGUIpAuE0qoKQ7WknI3mpHKhqMzOAi34DqpCOJT/v7ZNAFMkzwI/Mc00bK5qoara2Lw5ORmJlFQulm7emGImDj0fTLYZ92wb2Bg2YRAzTZszl8EwbCSTWUXOcibPfAhuzWcy0lw6Gh+7Nj0xaWjoxvjEranpwd79n3/68buzs1c/vDw7+/bN6zcg88RY4loiEQlxsL9/9cqV3PzCV18+lp4/e3Z89NnJ8Pjxo0cAhsdHv719++f5+e/v3v39z1/n539cXFyMRr8cHjw4HQ6/OD35/PTk08ODo4cPv3n65D9i+19RL3zytwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"21\"\n        title=\"21\"\n        src=\"/static/3b4dea4a312b01bf07b331a2b4afe9eb/045fd/21.png\"\n        srcset=\"/static/3b4dea4a312b01bf07b331a2b4afe9eb/045fd/21.png 403w\"\n        sizes=\"(max-width: 403px) 100vw, 403px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>If you have better ones, reply in the comments below and we’ll include them.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"September 04, 2020","updated_date":null,"description":null,"title":"Let’s Take A MEME Break!!!","tags":["MEME","Programming","Humor"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7241379310344827,"src":"/static/89b49574235e0c317d2219ca5e10b6d9/1c1a5/cover.png","srcSet":"/static/89b49574235e0c317d2219ca5e10b6d9/69585/cover.png 200w,\n/static/89b49574235e0c317d2219ca5e10b6d9/497c6/cover.png 400w,\n/static/89b49574235e0c317d2219ca5e10b6d9/1c1a5/cover.png 550w","sizes":"(max-width: 550px) 100vw, 550px"}}},"author":{"id":"Ashish Sharma","github":"ashish8947","avatar":null}}}}]},"markdownRemark":{"excerpt":"Google has prepared a roadmap to restrict third-party cookies in Chrome. Since 04 January 2024, Chrome has rolled out third-party cookie…","fields":{"slug":"/engineering/identity-impact-of-google-chrome-thirdparty-cookie-restrictions/"},"html":"<p>Google has prepared a roadmap to restrict third-party cookies in Chrome. Since 04 January 2024, Chrome has rolled out third-party cookie restrictions for 1% of stable clients and 20% of Canary, Dev, and Beta clients.</p>\n<p><strong>What does it mean for user authentication?</strong></p>\n<p>On one hand, Google believes third-party cookies are widely used for cross-site tracking, greatly affecting user privacy. Hence, Google wants to phase out (or restrict) supporting third-party cookies in Chrome by early Q2 2025 (subject to regulatory processes).</p>\n<p>On the other hand, Google introduced Privacy Sandbox to support the use cases (other than cross-site tracking and advertising) previously implemented using third-party cookies.</p>\n<p>In this article, we’ll discuss:</p>\n<ul>\n<li>How is user authentication (identity) affected?</li>\n<li>What is Google offering as part of Privacy Sandbox to support various identity use cases when third-party cookies are phased out?</li>\n</ul>\n<h2 id=\"how-is-user-authentication-affected\" style=\"position:relative;\"><a href=\"#how-is-user-authentication-affected\" aria-label=\"how is user authentication affected permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How is User Authentication Affected?</h2>\n<p>Third-party cookie restrictions affect user authentication in three ways, as follows.</p>\n<h3 id=\"external-identity-providers\" style=\"position:relative;\"><a href=\"#external-identity-providers\" aria-label=\"external identity providers permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>External Identity Providers</h3>\n<p>If your website or app uses an external Identity Provider (IdP) — like LoginRadius, the IdP sets a third-party cookie when the user authenticates on your app.</p>\n<h3 id=\"web-sso\" style=\"position:relative;\"><a href=\"#web-sso\" aria-label=\"web sso permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Web SSO</h3>\n<p>If you have multiple apps across domains within your organization and authentication is handled using an IdP (internal or external) with web SSO, you already use third-party cookies to facilitate seamless access for each user using a single set of credentials.</p>\n<p>If you have implemented web SSO with one primary domain and multiple sub-domains of the primary domain, third-party cookie restrictions may not apply. For now, Google doesn’t consider the cookies set by sub-domains as third-party cookies, although this stance may change in the future.</p>\n<p>For example, you have apps at <code>example.com</code>, <code>travel.example.com</code>, <code>stay.example.com</code>, and web SSO is handled by <code>auth.example.com</code>. In this case, third-party cookie restrictions don’t apply.</p>\n<h3 id=\"federated-sso\" style=\"position:relative;\"><a href=\"#federated-sso\" aria-label=\"federated sso permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Federated SSO</h3>\n<p>Federated SSO is similar to, albeit different from, web SSO. It can handle multiple IdPs and applications—aka., Service Providers (SPs)—spanning multiple organizations. It can also implement authentication scenarios that are usually implemented through web SSO.</p>\n<p>Usually, authentication is handled on a separate pop-up or page when the user wants to authenticate rather than on the application or website a user visits. </p>\n<p>For example, you already use federated SSO if you facilitate authentication for a set of apps through multiple social identity providers as well as traditional usernames and passwords.</p>\n<blockquote>\n<p><strong>Note</strong>: It is also possible to store tokens locally, not within cookies. In this case, third-party cookie restrictions won’t affect token-based authentication. However, the restrictions still affect authentication where tokens are stored within third-party cookies (a common and secure method).</p>\n</blockquote>\n<h2 id=\"chromes-alternatives-for-third-party-cookies\" style=\"position:relative;\"><a href=\"#chromes-alternatives-for-third-party-cookies\" aria-label=\"chromes alternatives for third party cookies permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Chrome’s Alternatives for Third-Party Cookies</h2>\n<p>Google has been developing alternative features and capabilities for Chrome to replace third-party cookies as part of its Privacy Sandbox for Web initiative.</p>\n<p>Specific to authentication, Google recommends the following:</p>\n<ol>\n<li>Cookies Having Independent Partitioned State (CHIPS)</li>\n<li>Storage Access API</li>\n<li>Related Website Sets</li>\n<li>Federated Credential Management (FedCM) API</li>\n</ol>\n<h3 id=\"cookies-having-independent-partitioned-state-chips\" style=\"position:relative;\"><a href=\"#cookies-having-independent-partitioned-state-chips\" aria-label=\"cookies having independent partitioned state chips permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Cookies Having Independent Partitioned State (CHIPS)</h3>\n<p><a href=\"https://developers.google.com/privacy-sandbox/3pcd/chips\">CHIPS</a> are a restricted way of setting third-party cookies on a top-level site without making them accessible on other top-level sites. Thus, they limit cross-site tracking and enable specific cross-site functionalities, such as maps, chat, and payment embeds.</p>\n<p>For example, a user visits <code>a.com</code> with a map embed from <code>map-example.com</code>, which can set a partitioned cookie that is only accessible on a.com. </p>\n<p>If the user visits <code>b.com</code> with a map embed from <code>map-example.com</code>, it cannot access the partitioned cookie set on <code>a.com</code>. It has to create a separate partitioned cookie specific to <code>b.com</code>, thus blocking cross-site tracking yet allowing limited cross-site functionality.</p>\n<p>You should specifically opt for partitioned cookies (CHIPS), which are set with partitioned and secure cookie attributes.</p>\n<p>If you’re using an external identity provider for your application, CHIPS is a good option to supplant third-party cookie restrictions. </p>\n<p>However, CHIPS may not be ideal if you have a web SSO or federated SSO implementation. It creates separate partitioned cookies for each application with a separate domain, which can increase complexity and create compatibility issues.</p>\n<h3 id=\"storage-access-api\" style=\"position:relative;\"><a href=\"#storage-access-api\" aria-label=\"storage access api permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Storage Access API</h3>\n<p>With <a href=\"https://developers.google.com/privacy-sandbox/3pcd/storage-access-api\">Storage Access API</a>, you can access the local storage in a third-party context through iframes, similar to when users visit it as a top-level site in a first-party context. That is, it gives access to unpartitioned cookies and storage.</p>\n<p>Storage Access API requires explicit user approval to grant access, similar to locations, camera, and microphone permissions. If the user denies access, unpartitioned cookies and storage won’t be accessible in a third-party context.</p>\n<p>It is most suitable when loading cross-site resources and interactions, such as:</p>\n<p>Verifying user sessions when allowing interactions on an embedded social post or providing personalization for an embedded video.\nEmbedded documents requiring user verification status to be accessible.</p>\n<p>As it requires explicit user approval, it is advisable to use Storage Access API when you can’t implement an identity use case with the other options.</p>\n<h3 id=\"related-website-sets\" style=\"position:relative;\"><a href=\"#related-website-sets\" aria-label=\"related website sets permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Related Website Sets</h3>\n<p>With <a href=\"https://developers.google.com/privacy-sandbox/3pcd/related-website-sets\">Related Website Sets</a>, you can declare a <code>primary</code> website and <code>associatedSites</code> for limited purposes to grant third-party cookie access and local storage for a limited number of sites.</p>\n<p>Chrome automatically recognizes related website sets declared, accepted, and maintained in this open-source GitHub repository: <a href=\"https://github.com/GoogleChrome/related-website-sets\">Related Website Sets</a></p>\n<p>It provides access through Storage Access API directly without prompting for user approval, but only after the user interacts with the relevant iframe.</p>\n<p>It is important to declare a limited number of domains in related website sets that are meaningful and used for specific purposes. Google may block or suspend any exploitative use of this feature.</p>\n<p>The top-level site can also request approval for specific cross-site resources and scripts to Storage Access API using <code>resuestStorageAccessFor()</code> API.</p>\n<p>If you’re using an external identity provider for your web application, you can declare the domain of the identity provider in the related set to ensure limited third-party cookies and storage access to the identity provider, thus ensuring seamless user authentication.</p>\n<p>Related Website Sets can also work to supplement third-party cookie restrictions in web SSO and federated SSO if the number of web applications (or domains) is limited.</p>\n<h3 id=\"federated-credential-management-fedcm-api\" style=\"position:relative;\"><a href=\"#federated-credential-management-fedcm-api\" aria-label=\"federated credential management fedcm api permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Federated Credential Management (FedCM) API</h3>\n<p>FedCM API enables federated SSO without third-party cookies.</p>\n<p>With FedCM API, a user follows these steps for authentication:</p>\n<ol>\n<li>The User navigates to a Service Provider (SP) — aka., Relying Party (RP)</li>\n<li>As the user requests to authenticate, the SP requests the browser through FedCM API to initiate authentication.</li>\n<li>The browser displays a list of available identity providers (supported by the RP), such as social IdPs like Google, Apple, LinkedIn, and Facebook, or other OAuth IdPs like LoginRadius.</li>\n<li>Once the user selects an IdP, the browser communicates with the IdP. Upon valid authentication, the IdP generates a secure token.\nThe browser delivers this secure token to the RP to facilitate user authorization.</li>\n</ol>\n<p>You can access a user demo of FedCM here: <a href=\"https://fedcm-rp-demo.glitch.me/\">FedCM</a>. </p>\n<p>For more information about implementing federated SSO with FedCM API, go through the <a href=\"https://developers.google.com/privacy-sandbox/3pcd/fedcm-developer-guide\">FedCM developer guide</a>.</p>\n<h2 id=\"how-is-loginradius-preparing-for-the-third-party-cookie-phase-out\" style=\"position:relative;\"><a href=\"#how-is-loginradius-preparing-for-the-third-party-cookie-phase-out\" aria-label=\"how is loginradius preparing for the third party cookie phase out permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How is LoginRadius Preparing for the Third-party Cookie Phase-out?</h2>\n<p>Firstly, we’re committed to solving our customers' user identity pain points — and preparing for the third-party cookies phase-out is no different.</p>\n<p>We’ll implement the most relevant and widely useful solutions to facilitate a smooth transition for our customers.</p>\n<p>Please subscribe to our blog for more information. We’ll update you on how we help with the third-party cookie phase-out.</p>\n<h2 id=\"in-conclusion\" style=\"position:relative;\"><a href=\"#in-conclusion\" aria-label=\"in conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>In Conclusion</h2>\n<p>The proposed changes to phase out third-party cookies and suggested alternatives are evolving as Google has been actively collaborating and discussing changes with the border community.</p>\n<p>Moreover, browsers like Firefox, Safari, and Edge may approach restricting third-party cookies differently than Google does.</p>\n<p>From LoginRadius, we’ll keep you updated on what we’re doing as a leading Customer Identity and Access Management (CIAM) vendor to prepare for the third-party cookie phase-out.</p>\n<h2 id=\"glossary\" style=\"position:relative;\"><a href=\"#glossary\" aria-label=\"glossary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Glossary</h2>\n<p><strong>Top-level site</strong>: It is the primary site a user has visited.</p>\n<p><strong>First-party cookie</strong>: A cookie set by the top-level site.</p>\n<p><strong>Third-party cookie</strong>: A cookie set by a domain other than the top-level site. For example, let’s assume that a user has visited <code>a.com</code>, which might use an embed from <code>loginradius.com</code> to facilitate authentication. If <code>loginradius.com</code> sets a cookie when the user visits <code>a.com</code>, it is called a third-party cookie as the user hasn’t directly visited <code>loginradius.com</code>.</p>\n<h2 id=\"references\" style=\"position:relative;\"><a href=\"#references\" aria-label=\"references permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>References</h2>\n<ul>\n<li><a href=\"https://developers.google.com/privacy-sandbox/3pcd/prepare/prepare-for-phaseout\">Changes to Chrome's treatment of third-party cookies</a></li>\n<li><a href=\"https://developers.google.com/privacy-sandbox/3pcd/guides/identity\">Check the impact of the third-party cookie changes on your sign-in workflows</a></li>\n</ul>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"July 08, 2024","updated_date":null,"description":"Google Chrome has planned to phase out third-party cookies, which will affect different website functionalities depending on third-party cookies. This blog focuses on how this phase-out affects identity and user authentication and discusses alternatives for overcoming challenges.","title":"How Chrome’s Third-Party Cookie Restrictions Affect User Authentication?","tags":["Identity","Cookies","Chrome"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/eb7396060c0adc430dbed2d04b63d431/ee604/third-party-cookies-phaseout-chrome.png","srcSet":"/static/eb7396060c0adc430dbed2d04b63d431/69585/third-party-cookies-phaseout-chrome.png 200w,\n/static/eb7396060c0adc430dbed2d04b63d431/497c6/third-party-cookies-phaseout-chrome.png 400w,\n/static/eb7396060c0adc430dbed2d04b63d431/ee604/third-party-cookies-phaseout-chrome.png 800w,\n/static/eb7396060c0adc430dbed2d04b63d431/f3583/third-party-cookies-phaseout-chrome.png 1200w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Raghunath Reddy","github":"raghunath-r-a","avatar":null}}}},"pageContext":{"limit":6,"skip":168,"currentPage":29,"type":"//engineering//","numPages":52,"pinned":"17fa0d7b-34c8-51c4-b047-df5e2bbaeedb"}},"staticQueryHashes":["1171199041","1384082988","2100481360","23180105","528864852"]}