{"componentChunkName":"component---src-templates-blog-list-template-js","path":"/118","result":{"data":{"allMarkdownRemark":{"edges":[{"node":{"excerpt":"You can have data without information, but you cannot have information without data  ~Daniel Keys Moran Who runs the World? Simple Question…","fields":{"slug":"/engineering/handling-cheapest-fuel-data/"},"html":"<blockquote>\n<p><strong>You can have data without information, but you cannot have information without data</strong></p>\n</blockquote>\n<p> <em>~Daniel Keys Moran</em></p>\n<h2 id=\"who-runs-the-world\" style=\"position:relative;\"><a href=\"#who-runs-the-world\" aria-label=\"who runs the world 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>Who runs the World?</h2>\n<p><strong>Simple Question! Isn't it?</strong></p>\n<p><strong>Answer- Of course, we humans, \"People\" run the world.</strong></p>\n<p>The correct answer would be data. Precisely, the information we gain from data. In this digital world, the one most common thing we all do is\n\"We all generate data\". Whenever we do something digitally, we generate data. Listening to a song, watching a movie, playing a game, chatting with friends, reading a comic blah blah blah everything generates data.</p>\n<h2 id=\"can-you-imagine\" style=\"position:relative;\"><a href=\"#can-you-imagine\" aria-label=\"can you imagine 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 you imagine?</h2>\n<p><strong>7.8 Billion</strong> people currently live on Earth, and almost <strong>4.57 Billion</strong> people are active internet users, encompassing 59 percent of the global population.\nThis is the sixth edition of DOMO's report, and according to their research:\n** \"Over 2.5 quintillion bytes of data are created every single day, and it's only going to grow from there. By 2020, it's estimated that 1.7MB of data will be created every second for every person on earth.\"**\nAs 1 Exabyte = 1 quintillion bytes, so 2.5 Exabytes ( 2.5 * 10¹⁸ bytes) of data is generated per day.</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: 69.6923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAAAsTAAALEwEAmpwYAAABlklEQVQoz41Sy27cMAz03/YP+hf9twA99ZBLYtfr9dpey5RIiXp0JCeLIAjQzIGWYHI4FKeb53noh+v1OgzDOI7TZULsh/5yudRD/9r3PRHFGFU1hFBK+fP88uPnr2Gcu3m+TdOETOReGqYGHNZ1NeYwxtBxWGsdwBV035+ffnvmLucM1vJN5FREckol15IOlWBNKeV3lDOWkj8BSciE/pw5JmR03+5ZsnMlxfBOXTt77zHY4/655PyRUiTSoB6HpjFqBN3/O2dVT+QV6SWG2AbPygGxS23mLzqfY4uItW3AkkJE85g1RtGwgKOrRHi9rxCZhTk1FugUj1JOSk17XXgnbXWPzucXQa0V505WVDLOchQ22fvAng9bi2EaXD/KxljBORV5u3px91uiKbst2OMg4xDWtTxWde7XazpcsMY64wImFOvN5pa/8bhFETQ8aHdC4mgZX/BY1WGw3bLt607TdWPy99vOVrd5YQtf7hphDdYQHTutBldmT06xsirbEuHBMZU0qSmnD/FtzRAHL542A1CF+A8/TTEGHeWSygAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"b\"\n        title=\"b\"\n        src=\"/static/b924543e8337fbee0cb6078b3d218bda/e5715/b.png\"\n        srcset=\"/static/b924543e8337fbee0cb6078b3d218bda/a6d36/b.png 650w,\n/static/b924543e8337fbee0cb6078b3d218bda/e5715/b.png 768w,\n/static/b924543e8337fbee0cb6078b3d218bda/71c8e/b.png 875w\"\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>Big companies like Google, Amazon, Netflix, Instagram, Facebook, Twitter, and many more are generating tons of data daily.\nInformation is taken from <a href=\"https://www.smartdatacollective.com/how-much-big-data-companies-make-on-internet/\">here</a>.</p>\n<h2 id=\"google-40000-google-web-searches-per-second\" style=\"position:relative;\"><a href=\"#google-40000-google-web-searches-per-second\" aria-label=\"google 40000 google web searches per second 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>Google: 40,000 Google Web Searches Per Second</h2>\n<p>More than 3.7 billion humans now have regular access to and use the internet. That results in about 40,000 web searches per second — on Google alone.</p>\n<h2 id=\"facebook-500-terabytes-per-day\" style=\"position:relative;\"><a href=\"#facebook-500-terabytes-per-day\" aria-label=\"facebook 500 terabytes per day 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>Facebook: 500 Terabytes Per Day</h2>\n<p>In 2012, Facebook's system was generating 2.5 billion pieces of content and more than 500 terabytes of data per day.</p>\n<h2 id=\"twitter-12-terabytes-per-day\" style=\"position:relative;\"><a href=\"#twitter-12-terabytes-per-day\" aria-label=\"twitter 12 terabytes per day 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>Twitter: 12 Terabytes Per Day</h2>\n<p>One wouldn't think that 140-character messages comprise large stores of data, but it turns out that the Twitter community generates more than 12 terabytes of data per day.</p>\n<h2 id=\"general-stats-per-minute-ratings\" style=\"position:relative;\"><a href=\"#general-stats-per-minute-ratings\" aria-label=\"general stats per minute ratings 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>General Stats: Per Minute Ratings</h2>\n<p>Here are some of the per-minute ratings for various social networks:</p>\n<p><strong>Snapchat:</strong> Over 527,760 photos shared by users</p>\n<p><strong>LinkedIn:</strong> Over 120 professionals join the network</p>\n<p><strong>YouTube:</strong> 4,146,600 videos watched</p>\n<p><strong>Twitter:</strong> 456,000 tweets sent or created</p>\n<p><strong>Instagram:</strong> 46,740 photos uploaded</p>\n<p><strong>Netflix:</strong> 69,444 hours of video watched</p>\n<p><strong>Giphy:</strong> 694,444 GIFs served</p>\n<p><strong>Tumblr:</strong> 74,220 posts published</p>\n<p><strong>Skype:</strong> 154,200 calls made by users</p>\n<p>These companies use this data to uncover the hidden patterns, correlations, and also to give insights to make proper business decisions. They analyze data for Customer Acquisition and Retention and try to personalize their products for their customers to establish a solid customer base.</p>\n<p>As of August 2020, desktop hard disk drives typically had a capacity of 1 to 8 terabytes, with the largest-capacity drives reaching 20 terabytes (single-disk drives, \"dual\" drives are available up to 24 TB).</p>\n<h2 id=\"another-question--how-they-do-it\" style=\"position:relative;\"><a href=\"#another-question--how-they-do-it\" aria-label=\"another question  how they do 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>Another Question- How they do it?</h2>\n<p>If the capacity of storage devices is much lesser than the data generated per day by such companies, how they manage it. How they process such a large amount of data without storing it anywhere? How Google search gives results in just a few seconds after processing the data stored for years? Can we store data in a storage device whose volume exceeds the capacity of the hardware?</p>\n<h2 id=\"problem--big-data\" style=\"position:relative;\"><a href=\"#problem--big-data\" aria-label=\"problem  big data 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>Problem:- Big Data</h2>\n<p>All these problems combined are called Big Data. Below are some subparts of the Big Data problem-</p>\n<ol>\n<li>Firstly, the <strong>volume of data</strong> is too large. Even if we build storage devices of huge capacity, we can't cope up with the increasing data per day.</li>\n<li>Secondly, the <strong>cost of manufacturing</strong>. Even if we manufacture large size storage, it is not possible to afford their manufacturing prices even for high-profit organizations. So, What are the solutions for low- budget companies? How can they manage data?</li>\n<li>Thirdly, <strong>Velocity of data transfer(I/O Operations)</strong>. If we ignore the above limitations, the next problem posed is the time taken by Processing units to process this data. Because of the huge volume of data stored in large-capacity storage devices, data transfer is time-consuming.</li>\n</ol>\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: 56.15384615384615%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAAsTAAALEwEAmpwYAAACLklEQVQoz12S2U7bYBSEg92sJnj5Hcdk37xkA28YHDtx4hDbhFLaBBLixBXqAgXxBO0tUAmpT9I+ZA1FIFWa22/OjM6E8DXhUaFtAhJzkd3ChpnesAqUW8oc5jCnuHlUBG6GdDKolY12qIRGwOIzsiaE/pEgIqfie6monk4Oi5jNp48kZibVl0rtTGHnjdIkh9qBKYl0Aay8wsQjLICIQsQ7XNyskAfN2onGLDRmNSh7JuPvMaseu2hVplXg8ut9OmkAWAqoQCESEghICPzySHeAjSpgbIjn3dYnRrnZbl5sidescmMwvtz2i5hrEiMq2SNghYIEChKfYkMC+UatIz0VHTWqpwPGa0lXVf7SXzycHN/m2a+K/M3il1z2WEu5JaSHh9XXzo/JExqLmDpmC1urXs3rFJez07tfP/883P+2R9+NgmeU5q3StJMeM+sm+j+MaCxuybhdy7wfcsumfOWe3J5O7meTO8P50d6+2G/6lfyHXdwux7upsEquCVgApyExqI3DCh0z+uiwRI7Vuter+cX2ZZv73OC/lOVrq3kucYsy/XYARqn17mZ45xkOzoJAsExENQ7pM/Rhk50ZnKfzH63qymL9butcbyz5zXdV3GGTfSK6R4Rl7CU2CYsAFsnwDojpaXSYB269PA3eK9XmUt3b4c/4YCrJfTo5IGN6KqrikPjaGXuqHSyMjOzSMZ3esDKEU0BHBczJok4wjwxhUwmTihtkWAVR5QX+Cz80bdfiDCY1AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"c\"\n        title=\"c\"\n        src=\"/static/8e0f521fcb10ddd6483faec088e4fd48/e5715/c.png\"\n        srcset=\"/static/8e0f521fcb10ddd6483faec088e4fd48/a6d36/c.png 650w,\n/static/8e0f521fcb10ddd6483faec088e4fd48/e5715/c.png 768w,\n/static/8e0f521fcb10ddd6483faec088e4fd48/71c8e/c.png 875w\"\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=\"solution-\" style=\"position:relative;\"><a href=\"#solution-\" aria-label=\"solution  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>Solution:-</h2>\n<p>Big Data can be taken as technology or field that treats ways to analyze, systematically extract information from, or otherwise deal with data sets that are too large or complex to be dealt with by traditional data processing.\nOne of the concepts that solve the above problem is Distributed Storage.</p>\n<p><strong>Distributed Storage Cluster-</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: 435px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 65.28735632183907%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsTAAALEwEAmpwYAAABvklEQVQoz2P4TwFgAOIvX77cu3f/yZMnb968efr02UswePbs2aPHj4Dkk6dPP33+hFPzjx8/XoDB58+fgfpfv3797t279+/fgxhv3wLJr1+/4tSMFfz+9/fb39/f/v769u/3z7+///37h1PzPyTw999foIjb4Qa1XVmm+0u19+YZ7C16/u09SNn/fwRshqiIOtPveLzO83iTzaFKh4O1L4jRDHfek2evb957fObS9WOnL5y7eP3bt+9wB+K1GSwdk1Nv7ZMcmV7lHJzpGZX/6u0HZKPRNYN8+/cvMNp+/fr1+/fvpet2Tpi1YvqCNRNnLZ+1eP3bdyDN38EAbj+6zT9//gQagQjz379//foJZEAEIeYibIaIXrh4qbGpacKEid3dPU3NzWfOnl+2fEVTU3N3d29La9uUqdPOnDvf2dnV19s3ZfKUtra2/QcOgjT/+fMHSK1Zu05BTs7d1dXDzV1JQWHpshXpaenqqqqBAQEmRkZurq5Lli1XU1VzdnT0dPdQUlDs7ukFaYa4/uPHT7du3r51C4ref/gITKc3b92+efMWkPvgwcP37z/cuHnrxo2b12/cBJKvXr0G6gIAWb2kPX+THHwAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"d\"\n        title=\"d\"\n        src=\"/static/9024951b223197f7bf7a5116af24b446/330eb/d.png\"\n        srcset=\"/static/9024951b223197f7bf7a5116af24b446/330eb/d.png 435w\"\n        sizes=\"(max-width: 435px) 100vw, 435px\"\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>Distributed storage is a method that provides huge storage(even exceeding from physical storage) shared by multiple systems. These systems or the servers are connected following horizontal scaling. This multiple commodity server hardware is comparatively cheap than optimized servers with large storage(Hard Disk). Each virtual machine contributes directory to a centralized system and thereby shares its storage. The team of master and slave nodes working together for one purpose called a cluster.</p>\n<p>One of the Topologies or the architecture used for implementing a Distributed storage system is <strong>Master-slave architecture</strong>.\nMaster-slave architecture- Master-slave is a model of asymmetric communication or control where one device(the \"master\") connected to one or more other devices(the \"slaves\") are connected using a protocol(Network), where the slave nodes/devices can contribute a part/whole of their storage devices to the master node, like this centralized master node can store data exceeding its local storage limit.</p>\n<p>The slave nodes can be commodity hardware/devices that need not be expensive and high functioning.\nAs the data is split and stored in(and loaded from) other devices/nodes, the I/O operations (data transfer) can be performed parallelly on all the devices. Thus, reducing the time consumption by a large factor.</p>\n<p><strong>Hence, distributed storage solves all the problems- Volume, Cost, and Velocity.</strong></p>\n<h2 id=\"apache-hadoop\" style=\"position:relative;\"><a href=\"#apache-hadoop\" aria-label=\"apache hadoop 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>Apache Hadoop</h2>\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: 30%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB8UlEQVQY0wHmARn+AC8vLwD//1YCsqhZAP//ZwCMciUA/56hArwqMxKtLDUNtS45D6guOAzSMDoRqWY5AvYPKQDtEysA6x8oAP9SHgD/WgAA2lslB/mgIgDzkSMAABMVLgD/8lMAioNHP8y8SJlucyAquAACKfcLDDH/Fx0w/wwOLP8CBB3XCAs+5QYdJvMMKivoFStH4CAsdO5QJYTuaiPJ8Igk6vSUI73whyQOAA8NABWnn1ej2MlS+vHfS//OvDz/VG9kzjVfgFsvPEFFSVNnU0g7WmQ+X3Otez9a8KIwSPWfL0T9pjtE/6xVQP+7Zzv/7Yki//ibIrnsiCQNAFdSLCLSw0b/5dNH/8y7PuqIgjO3RHqG5z14jvJGh53/TJ63/1R5lf9HhZ3/VH2V/0iGnv9WdIr/Touj/E59j/9Neortw2gjPrlpHAD/th0AAD02DAmnmjJ/qJs1pJ+NKlIAACgpJkJUhStPXYZKgZyzTGqLyllkidZZW3faY2J90UxpfrRJcIWdPm6C5kqAlMk5bH9mrW46AIp5YgLfkCYBAGheGwDi0UMA//9ZAM63NwD//wAATcrVAGi31gCv//8AfAAACIUAAA0A//8A/wAAAUf//wCBr9EACRQXKwARGgxBiaUAt41fA/9jAADXWQAArCvPD9WXLikAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"e\"\n        title=\"e\"\n        src=\"/static/ea8134ccb65d292f944f9e7d8f5173ba/e5715/e.png\"\n        srcset=\"/static/ea8134ccb65d292f944f9e7d8f5173ba/a6d36/e.png 650w,\n/static/ea8134ccb65d292f944f9e7d8f5173ba/e5715/e.png 768w,\n/static/ea8134ccb65d292f944f9e7d8f5173ba/71c8e/e.png 875w\"\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>Distributed storage is just a concept, and some companies have launched different software or products that work on this concept which solve the problem of Big Data. One such company is <strong>APACHE and the software APACHE HADOOP</strong>.\nThe Apache Hadoop software is a collection of libraries that provides facility to create clusters/network of systems following the distributed system. It can be used in processing the huge data distributes in thousands of machines, each offering local computation and storage.</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":"October 06, 2020","updated_date":null,"description":"You can have data without information, but you cannot have information without data. Huge data is generated per day. What are the issues in handling it? How big companies manage and analyze it?","title":"Handling the Cheapest Fuel- Data","tags":["Data","BigData","Hadoop"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/197c7c10e56844e11cee38047766f8ab/ee604/a.png","srcSet":"/static/197c7c10e56844e11cee38047766f8ab/69585/a.png 200w,\n/static/197c7c10e56844e11cee38047766f8ab/497c6/a.png 400w,\n/static/197c7c10e56844e11cee38047766f8ab/ee604/a.png 800w,\n/static/197c7c10e56844e11cee38047766f8ab/f3583/a.png 1200w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Samriddhi Mishra","github":"SamriddhiMishra","avatar":null}}}},{"node":{"excerpt":"Social engineering attacks have become a common occurrence against enterprises over the years. In fact, it has grown increasingly…","fields":{"slug":"/identity/social-engineering-attacks/"},"html":"<p>Social engineering attacks have become a common occurrence against enterprises over the years. In fact, it has grown increasingly sophisticated. </p>\n<p>Needless-to-say there is no ‘stop sign’ for cybercrimes any time soon. Instead, hackers have been coming up with more creative methods to deceive employees and people into sharing sensitive credentials.</p>\n<p>It is high time that companies conduct proper research and utilize the right tools to keep ahead of the fraudsters.</p>\n<p>This infographic will cover what social engineering is and the best practices to avoid becoming a victim of the most common social engineering attacks.</p>\n<h2 id=\"what-is-social-engineering\" style=\"position:relative;\"><a href=\"#what-is-social-engineering\" aria-label=\"what is social engineering 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 Social Engineering </h2>\n<p>Social engineering is a cyberattack where criminals psychologically manipulate unsuspecting users into making security mistakes and giving up their confidential information. </p>\n<p>Social engineering involves the criminal using human emotions like fear, curiosity, greed, anger, etc. to trick victims into clicking malicious links or physical tailgating attacks. </p>\n<p>Social engineering attackers have one of two goals: </p>\n<ul>\n<li>They want to corrupt data to cause <a href=\"https://www.loginradius.com/blog/2020/05/cyber-threats-business-risk-covid-19/\">inconvenience to an organization</a>.</li>\n<li>They want to steal information, money. or obtain unsolicited access. </li>\n</ul>\n<h2 id=\"common-social-engineering-attack-techniques\" style=\"position:relative;\"><a href=\"#common-social-engineering-attack-techniques\" aria-label=\"common social engineering attack techniques 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>Common Social Engineering Attack Techniques</h2>\n<p>Here is a quick overview of the most common social engineering scams used against modern enterprises and individuals.</p>\n<h3 id=\"phishing\" style=\"position:relative;\"><a href=\"#phishing\" aria-label=\"phishing 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>Phishing</h3>\n<p><a href=\"https://www.loginradius.com/blog/phishing-for-identity/\">Phishing is the most common</a> and widely successful form of social engineering attack. The fraudster uses trickery and deceit via email, chat, web ad, or website to persuade a person or organization to expose their PII and other valuables. </p>\n<p>For example, the fraudster might pretend to represent a bank, a government organization, or a major corporation trusted by the naive victim. The source can be an email asking the email recipients to click on a link to log in to their accounts. They are then redirected to a fake website appearing to be legitimate, and that's where the attack takes place.</p>\n<p><a href=\"https://www.loginradius.com/resource/passwords-are-dead/\"><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: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABaElEQVQY01VRPU8CQRAlUYE7EA4ixjOIAY4P7zgK5e44+cwR0COGxEJjYmshNsaGQhtjjKExJv4COwtjYWJMbLS00cbCv/OcXSDR4u3M7M68NzPrEbJVTBDI1wh1DjFXw983Br+yDlFzEDF6iOoOBNWBP9+AkKmM3sl6mMOKY3oTkVwFoYyNWaWM+WIL8uoGQisNnsjyfGkbwWIHidY+tNYufMY2vIUOF/KPRT0T9XTZhdXZgVbdgl7vQdaqkDIWEdaJcKQeJZG42UXccCGXXCRMl8eLFLOmeIfsYCPOaYS8jZhaRYz8cNaGpJgjwrHoTKrMLSNbWNuEbHQhFRxM0/1kCk4YpCKJxhWWSxBTFsSkiYBChGqDEzJ1z1IJx+fX+Pz+wf3TK+4enjneP77w+PLGu/fSSv4RirSLYI4+hUYUlQrCehvhYpsvfSppwdnrY3B1i6OzIfqnQxwSTi5ucDC4REhtwkf1v5g0wRxmn00bAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"passwords are dead whitepaper\"\n        title=\"passwords are dead whitepaper\"\n        src=\"/static/d4ca18e17738b66575b5f83a8606a96b/e5715/SET-1.png\"\n        srcset=\"/static/d4ca18e17738b66575b5f83a8606a96b/a6d36/SET-1.png 650w,\n/static/d4ca18e17738b66575b5f83a8606a96b/e5715/SET-1.png 768w,\n/static/d4ca18e17738b66575b5f83a8606a96b/2bef9/SET-1.png 1024w\"\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></a></p>\n<h3 id=\"spear-phishing\" style=\"position:relative;\"><a href=\"#spear-phishing\" aria-label=\"spear phishing 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>Spear Phishing</h3>\n<p>Spear Phishing is another form of social engineering where the fraudster does some background research on the victim's personal and professional life to establish the right pretext.</p>\n<p>For example, the fraudster might reveal to the victim that they are planning a surprise birthday for a friend and are seeking help to pull it off.</p>\n<h3 id=\"baiting\" style=\"position:relative;\"><a href=\"#baiting\" aria-label=\"baiting 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>Baiting</h3>\n<p>Baiting is when the fraudster uses greed or curiosity to trap the victim with false promises and trick them into <a href=\"https://www.loginradius.com/blog/2019/09/prevent-credential-stuffing-attacks/\">handing their login credentials</a>.</p>\n<p>For example, the fraudster may leave a malware-infected, authentic-looking flash drive (or bait) in the least suspicious area like the bathroom or elevator of a company. The bait will also have enticing labels like a payroll list or appraisal list that will be tempting enough to insert on a computer. </p>\n<h3 id=\"tailgating\" style=\"position:relative;\"><a href=\"#tailgating\" aria-label=\"tailgating 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>Tailgating</h3>\n<p>Tailgating happens when someone without <a href=\"https://www.loginradius.com/authentication/\">proper authentication enters</a> into a restricted area by physically bypassing the security measures in place.</p>\n<p>For example, the attacker can strike up conversations with an employee in the lobby or the parking lot and use the familiarity to enter the office premises and get past the front desk.</p>\n<h3 id=\"scareware\" style=\"position:relative;\"><a href=\"#scareware\" aria-label=\"scareware 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>Scareware</h3>\n<p>Scareware is a malware tactic where the fraudster perceives a threat to deceive users into visiting malware-infected sites and buying malicious software.</p>\n<p>Examples include PC Health Check Programs and Antivirus Updaters that scare victims into buying diagnostic and repair services they do not need. </p>\n<h2 id=\"warning-signs-of-social-engineering-attacks\" style=\"position:relative;\"><a href=\"#warning-signs-of-social-engineering-attacks\" aria-label=\"warning signs of social engineering attacks 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>Warning Signs of Social Engineering Attacks</h2>\n<p>One of the best ways to protect against social engineering is to understand the warning signs and steer clear of attacks. A few of the warning signs include:</p>\n<ul>\n<li>Asking for immediate assistance.</li>\n<li>Asking to verify your information.</li>\n<li>Acting overly friendly or eager.</li>\n<li>Acting nervous when counter questioned.</li>\n<li>Overemphasizing details.</li>\n<li>Luring with too good to be true offers.</li>\n<li>Threatening reprimands if their requests are ignored.</li>\n</ul>\n<h2 id=\"best-practices-to-prevent-social-engineering-attacks\" style=\"position:relative;\"><a href=\"#best-practices-to-prevent-social-engineering-attacks\" aria-label=\"best practices to prevent social engineering attacks 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>Best Practices to Prevent Social Engineering Attacks </h2>\n<p>Be careful of what you share. And no, you don't need to be paranoid about these attacks. Preventing them is possible. The following are a few ways that help. </p>\n<ul>\n<li><strong>Set spam filters to high</strong>. Every email program has spam filters. To find out, look closely through your setting options and set them too high. It will help you keep away from spam messages to a large extent.</li>\n<li><strong>Never use the same password for different accounts</strong>. If the attacker gets hold of one account, they will be able to hack other accounts too.</li>\n<li><strong>Use two-factor or multi-factor authentication</strong>. Just the password is no longer enough to secure your account. Additional layers are just are crucial. It can be a <a href=\"https://www.loginradius.com/blog/identity/best-practices-choosing-good-security-questions/\">security question</a>, a captcha, fingerprinting, or SMS confirmation codes.</li>\n<li><strong>When in doubt, change passwords right away</strong>. If you think you gave away your password to a spammer, change all your passwords immediately.</li>\n<li><strong>Educate employees</strong>. Knowledge is key. Keep your employees aware of the latest social engineering threats and help them exercise the necessary caution, whenever needed. </li>\n</ul>\n<p>To learn more about Social Engineering Attacks – preventions and best practices, check out the infographic created by LoginRadius.</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: 734.923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,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'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Social-Engineering-Attacks-infographic\"\n        title=\"Social-Engineering-Attacks-infographic\"\n        src=\"/static/78ca1428a48999f5d0833ea23ed00b30/e5715/Social-Engineering-Attacks-2.png\"\n        srcset=\"/static/78ca1428a48999f5d0833ea23ed00b30/a6d36/Social-Engineering-Attacks-2.png 650w,\n/static/78ca1428a48999f5d0833ea23ed00b30/e5715/Social-Engineering-Attacks-2.png 768w,\n/static/78ca1428a48999f5d0833ea23ed00b30/4fa52/Social-Engineering-Attacks-2.png 1241w\"\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><a href=\"https://www.loginradius.com/book-a-demo/\"><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: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABYElEQVQY0z2RO08CURCFN0hcWRZQHhYUKBHFBR+sUQQWefoAE4HCArXSWGhiZUGhsTHGEBsLf4AxdkQriZWWNtrY+HuOMwNaTO69k3PPfOdeZWS2BO9cGS4jD//8Ktyxgpx575kpQp20oE/nMGquQ4+uwBkvw5uswUcajfYOowBtKgsH1RBplQAJ+SI3fH2TwYkMeJBu5OCJF6XHYtvYEtRYCcF8E9HCNgbMGmxGGfbxJNSIJR4Kk+lU7niPjI3EjKiYkofYwykEEmtINQ5gVvewUN1FokJrhdaNHSzX9xG26gSShsKT1UhGCISQjJmKDbk33Kd3Ulwm5UThbAOh9JZUMLkpfQaTyCKmy0yl8Rv1yTiuFs1KnwcpoUWcXNzg8/sHj8+veHjq4r7zgvePL3S6b6Ljp1KYwE9x2Jjfgen+4rti+f8P4jjF5hFa13c4Pm/36qyN08tbHLau5DM56S/3nMSX+4NvoQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-demo-loginradius\"\n        title=\"book-a-demo-loginradius\"\n        src=\"/static/c4fac6b24f15c7b7ba84deec1d1107ac/e5715/BD-Plexicon1-1024x310-1.png\"\n        srcset=\"/static/c4fac6b24f15c7b7ba84deec1d1107ac/a6d36/BD-Plexicon1-1024x310-1.png 650w,\n/static/c4fac6b24f15c7b7ba84deec1d1107ac/e5715/BD-Plexicon1-1024x310-1.png 768w,\n/static/c4fac6b24f15c7b7ba84deec1d1107ac/2bef9/BD-Plexicon1-1024x310-1.png 1024w\"\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></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</style>","frontmatter":{"date":"October 06, 2020","updated_date":null,"description":"Over the years, social engineering attacks have been a regular phenomenon against companies. It has actually become more and more sophisticated. It is high time for businesses to perform careful research and use the right instruments to remain ahead of fraudsters.","title":"Social Engineering Attacks: Prevention and Best Practices [Infographic]","tags":["data security","authentication","mfa"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/e11301be507c80c6942f130c439f8a51/33aa5/social-engineering-attacks.jpg","srcSet":"/static/e11301be507c80c6942f130c439f8a51/f836f/social-engineering-attacks.jpg 200w,\n/static/e11301be507c80c6942f130c439f8a51/2244e/social-engineering-attacks.jpg 400w,\n/static/e11301be507c80c6942f130c439f8a51/33aa5/social-engineering-attacks.jpg 768w","sizes":"(max-width: 768px) 100vw, 768px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},{"node":{"excerpt":"The GitHub CLI is a recent GitHub released tool that takes tasks of issue / PR management to the terminal. It will be a useful tool that…","fields":{"slug":"/engineering/github-cli-tool/"},"html":"<p><em>The <a href=\"https://cli.github.com/\">GitHub CLI</a> is a recent GitHub released tool that takes tasks of issue / PR management to the terminal. It will be a useful tool that will put more of our workflow for software creation into the textual domain rather than the visual domain. It’s just called <code>gh</code>.</em></p>\n<p>*<strong>*Installation of GitHub CLI 💡**</strong></p>\n<p>GitHub CLI has releases with significant operating systems, visit the installation page and find instructions on how to install GitHub CLI for your operating system.</p>\n<p>For [Windows] and [macOS], you will use the package managers to update and maintain GitHub CLI, and for <a href=\"https://github.com/cli/cli/releases/tag/v1.0.0\">Linux</a> users, you may need to grab the software from the latest release website.</p>\n<p>Here are examples of the installation instructions for each compatible platform:</p>\n<p>→ Windows</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">scoop bucket add github-gh https://github.com/cli/scoop-gh.gitscoop install gh</span></span></code></pre>\n<p>→ macOS</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">brew install github</span></span></code></pre>\n<p>→ Debian/Ubuntu Linux</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">sudo apt install git &amp;&amp; sudo dpkg -i gh_*_linux_amd64.deb</span></span></code></pre>\n<p>→ Fedora/Centos Linux</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">sudo yum localinstall gh_*_linux_amd64.rpm</span></span></code></pre>\n<p>→ Arch Linux</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">yay -S github-cli</span></span></code></pre>\n<p>You’ll need to authenticate your account after you install GitHub CLI. Running any command would activate this process of authentication(via OAuth). Well, you can use Git CLI.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 623px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 126.64526484751204%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAIAAAC+dZmEAAAACXBIWXMAAAsTAAALEwEAmpwYAAADNElEQVQ4y41UWWsUWRSu3zIPwgz44IvMgw+CL4IgCI5BRlFEQYm44wrz7OhMUBBFBEFwA1/ckhmDISC44ZIIOkl6S9Ld1bXdqurqVHXVrbv5VVWbODqtc/j69Klzz3fvueecKi1lvABN2eYt2zZsHFi1es3vfwwppWpesx6YMM5fuHT6zNDZofPAYjyg4ZfQFBHv/5leu2790ROn9h04vHHzr/D89vLcn5NXeSR27tkbxzE8g/sPNZotGDipRy7AuNi1e/CHZT/9uHzFxctXEGF1XCf0YVy4ePnhyF/Xrt84cuwkHpOcuUTGTlKpdtC5efvO6Ng4IoRUElCZJJQS15+vNxAAP/2CnPPTlGVeQly9ZRimZRHS0PUmHkzLdkg3Thjni8yCrCiTNJWUqZQrxw1qtUbLIPNNs2WCbDd1u9GydcPxgy4TyFllkTk0nrqSu4pDE0AJD+n3IP0lW/lYkowUYTx1AI1Hkx3nObFeB95E4L4NvEnfeePZr6Hb5C1ArFeZP8NEx5+E9skbFk8pXtZ4PJNGU0lYolEpiaDLOUqLurswA38eUC5i4rAkaE2xWdwZlUoY+xo0x6JBP/eAAmhcoCPoipRFbzJkPyEk/x40tHHixVPbtgzDgPZc1/bjukMxM6rX5kL/h2TkJ2OjtmU5jmNZ+LdNp90wPNsmEGjHIZ7f7gSdbjf+kiyESLngXDDGv94bq6q/aJirmXLVNJq10rvA0xd8Pex0MEzZzftLktD8ZFmIkIJKkQqWZGl888ClkzGuc/Wm53u6Xm825lot0yHEME1MN5b60ZBvRsYphmm3fWLpZbtVtUzD83y8vWEUif6Z83zfrGAoVQ4obCXV/5asYOXqrGXbU1PT5Up1tvIhDKzv0mj+8dFQK0qp+PTic5bwdKmfXPIc4t/IPL07q3w8heh1Bxp2gW8cjtWsVTwfEgDJoFRpfvdibEbnn92cHr5bGXtQG79beXy/On6vMnZrZmRk9gm6ioLJ/OuTMTCGc/P1MOrCxnNMkx2PTq689cum4YPbHx3f+vfR7aOnBkYO/nx7YGD40AKNNNlfcIGE0TCNwrQLHUFTGF0YMUuQ+UdA13EK+hZQxwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Auhtorize\"\n        title=\"Auhtorize\"\n        src=\"/static/b6ad06259d464af651573dc4aed7dcba/6114d/Authorize.png\"\n        srcset=\"/static/b6ad06259d464af651573dc4aed7dcba/6114d/Authorize.png 623w\"\n        sizes=\"(max-width: 623px) 100vw, 623px\"\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>*<strong>*What is CLI really doing? 🤔**</strong></p>\n<p>The GitHub CLI lets you handle issues/ PRs / repositories from inside your console. Let’s have a look at it:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">gh issue [status, list, view, create]</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">gh pr [status, list, view, checkout, create]</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">gh repo [view, create, clone, fork]</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">gh </span><span class=\"mtk11\">help</span></span></code></pre>\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.76923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB+ElEQVQ4y5WSSU9bMRSFjTKwa1XyxrzBb87UZNNtl5AumnRRVQKEIGLDBgkkghBDaJr+7/j0OHmp1NIKWHy6tuV7fO71FWI+XxKIxUKJHwsdX89P5mqN+VwJMf++3LqaYnsyUfXJCWrHx2Qdqy/hhHeZK25uNoLz5fbXb/gYOyr/4OGdYcLUmNbL2WmoyulpKfjwsKyPvyD2AiXTBL6MECUpTNuBQcxnWN0xTFU5OoKYzSh4d7esj0aQfqiiNIOME8SMluPCsOzn2QgeHIDm1oLbFPQcVxWdLvKihYzIKIYXhIj4QCDlah8S/WAQSvisQrbaaPLMaBh/CtY/jxAFoSq6PYRMSLIcTtOH5TZhE5Nu9drQrv9V+t8OtaC5Y6goS5GSwWCATqeNVquFoigQ5znSdhtpnqHp+2iY9u/+/bdkSYf6M9KUpbDELMtYboyE+w363HKcJ3186pCCUShVq99HQlfd/gBdutQ97ZBu7z16PIvzAn6UoCnjFR4N+GyP2/RUZX+/FLy/59iM0XjzVlmuy48I4IchPyCC53kIOJMpZy0kCYnpyGaZFrHZU91jSzs8PCzHhoJbZ2eojUaqNvyE6t4eqrua3fV6OERFR1Ip0etaGavMqY3HSpyflw5ns6W4vYWYTpW4vIS4uHgdOuf6Wq00Hh/VL6PvkYUjnVP6AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"gh pr status\"\n        title=\"gh pr status\"\n        src=\"/static/dd3fb5eb26988074652e8f4e50e378f7/e5715/ghpr.png\"\n        srcset=\"/static/dd3fb5eb26988074652e8f4e50e378f7/a6d36/ghpr.png 650w,\n/static/dd3fb5eb26988074652e8f4e50e378f7/e5715/ghpr.png 768w,\n/static/dd3fb5eb26988074652e8f4e50e378f7/71c8e/ghpr.png 875w\"\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><em>It should be said that gh is not the same stuff as git. It’s because <code>gh</code> just adds GitHub tools to the terminal. Version management is yet to be managed with git.</em></p>\n<p>*<strong>*CLI Commands ➫**</strong></p>\n<p>We’re going to cover a bunch of exciting commands. Let’s use the official <a href=\"https://github.com/angular/angular\">Angular.js repo</a> to run <code>gh</code> commands</p>\n<p>Clone the <code>Angular</code> repo, and navigate to the repository. You can either clone the repo through HTTPS/ ssh/ Git CLI. I’m going to clone the repo through <code>git CLI</code> since we are working on GIT CLI.</p>\n<p>Let’s execute the <code>$gh issue --help</code> see what commands are available.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">gh issue --help  </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">Work with GitHub issues</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">USAGE</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  gh issue &lt;command&gt; [flags]</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">CORE COMMANDS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  close:      Close issue</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  create:     Create a new issue</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  list:       List and filter issues </span><span class=\"mtk15\">in</span><span class=\"mtk1\"> this repository</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  reopen:     Reopen issue</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  status:     Show the status of relevant issues</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  view:       View an issue</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">FLAGS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  -R, --repo OWNER/REPO   Select another repository using the OWNER/REPO format</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">INHERITED FLAGS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  --help   Show </span><span class=\"mtk11\">help</span><span class=\"mtk1\"> </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> </span><span class=\"mtk11\">command</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">ARGUMENTS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  An issue can be supplied as an argument </span><span class=\"mtk15\">in</span><span class=\"mtk1\"> any of the following </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  formats:</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  - by number, e.g. </span><span class=\"mtk8\">&quot;123&quot;</span><span class=\"mtk1\">; or</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  - by URL, e.g. </span><span class=\"mtk8\">&quot;https://github.com/OWNER/REPO/issues/123&quot;</span><span class=\"mtk1\">.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">EXAMPLES</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh issue list</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh issue create --label bug</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh issue view --web</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">LEARN MORE</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  Use </span><span class=\"mtk8\">&#39;gh &lt;command&gt; &lt;subcommand&gt; --help&#39;</span><span class=\"mtk1\"> </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> more information about a command.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  Read the manual at https://cli.github.com/manual</span></span></code></pre>\n<p>It’s Time to view Problems/issues in the angular repo.😁</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">gh issue list</span></span></code></pre>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 490px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 124.48979591836735%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAIAAAC+dZmEAAAACXBIWXMAAAsTAAALEwEAmpwYAAADkklEQVQ4yy1UCY7TQBDMD7nZI85hO+Mjvu3YubPciIchIViOFbC7Ai3ZFTzAM5MHUDWJZEXjeLq7qrq6O7+d4ffQ/XdsqWGosqkKCulE0k3kIODBiZSXSTdWYanGlRwlEq8ilf2gfdzr/AjcD5W/tXray/WLd3p6ppEibVRSq3yG2wzDGb/FnAc/4znI20e9zqXvnGfi9tTSo1SvX6tRigp6ssKviioAQSJW9lJdr9W4VPEElQGnfTpAZec8F3ddSzuxymYS4MOSwdlU5zPl5/iTMUHOymHBSNQXaftk0LnynK+J+HtiguuVxtWgVPWGNxCA+Gii0ylK6WopRaKRAqS8dM/ZAWdW9gs93ehmo/EtrlFWxxOek4YBECKbEj+IVAsES8vr/PQJe2tZFKzZUFukn6yIGU88QX3IpjdvAJviAwX+HFeEfek5n3LvFpUBbHZGnbKGPBFQLgjYPQhOIeqVOaxlWLSP+6z8ofSg9s4vJFLiwWeAjMG5AGDiRxg6lDQSKgC2nwM/OV8L50sqtl0Go8msCWwEZjSn8ktVLaEzkkqRHRrJ4D4F+1QAdk8PxuQMV/g5PztjNhZZQAcH9AyMipm0hDKKyqMhOX+GSVAZJplu2NK0MWwbKhyWRjNCRat261d8hUnR54fWXjBxY1k79PPZW9wgZ/SGNqKrtPEG8aORxYKeFYns+/LYJuyPhbft9WASPX+Ob7wN2iIhBJMLUqGgNmND8LFxGAS7Es55YVo1CJkY8CAbsEUVDz5GKjKRM9QHHRIxbj8I9r4OMFU74GQYMbM4dDIFGT8ytoGcBywNCHOqrjwbDvtjRpIG7Hl69ZLewgwMQmpeLTS0dSKUxZDDm8Rv4inYt2R0d9rdwZ6wDqaKmNln5hqGVL5aIp4dAmfoWq+5D45sOmzfKg0bxvVhHnHPjASfyCi09xwy+hy19mjYPulzJC/iEYNhRgwdTAJ5SZVWgU77CTHroaTtwDmqwIKDYZaBdwPBwspIYsYYD/TDVOAel8mUzQf4vZbosz1uARuVfwYuRxLenj+nGCLV5RKJuABFYnQKFcMWHI+MRKQdUW1wvohGdyfdXWgUOnHZIUCFqugqOgfn0BslGaHhyIKeo3/GYS6CtxhJWKeco/scA6wEL6NChjkm0Wy12cG52IHDoL1/2vnl2teegx2m7EgZG+0rEJslkF6Xcy4T2wwZVy+Wbr990G3vnfwHK6J5DQ/JkAUAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Angular issue\"\n        title=\"Angular issue\"\n        src=\"/static/3049d6111c908f6724c7ccdf2b1227e6/41d3c/angular%20issue.png\"\n        srcset=\"/static/3049d6111c908f6724c7ccdf2b1227e6/41d3c/angular%20issue.png 490w\"\n        sizes=\"(max-width: 490px) 100vw, 490px\"\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>*<strong>*Pull Requests 🤖**</strong></p>\n<p>It is now possible to build a Pull Request (PR) on the terminal. You will perform <code>$gh pr create</code> right after you have committed a feature or bug branch. This interactively creates the pull request.😉</p>\n<p>Let’s execute the <code>$gh pr --help</code> see what commands are available.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"8\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">Work with GitHub pull requests</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">USAGE</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  gh pr &lt;command&gt; [flags]</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">CORE COMMANDS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  checkout:   Check out a pull request </span><span class=\"mtk15\">in</span><span class=\"mtk1\"> git</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  checks:     Show CI status </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> a single pull request</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  close:      Close a pull request</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  create:     Create a pull request</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  diff:       View changes </span><span class=\"mtk15\">in</span><span class=\"mtk1\"> a pull request</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  list:       List and filter pull requests </span><span class=\"mtk15\">in</span><span class=\"mtk1\"> this repository</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  merge:      Merge a pull request</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  ready:      Mark a pull request as ready </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> review</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  reopen:     Reopen a pull request</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  review:     Add a review to a pull request</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  status:     Show status of relevant pull requests</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  view:       View a pull request</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">FLAGS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  -R, --repo OWNER/REPO   Select another repository using the OWNER/REPO format</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">INHERITED FLAGS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  --help   Show </span><span class=\"mtk11\">help</span><span class=\"mtk1\"> </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> </span><span class=\"mtk11\">command</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">ARGUMENTS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  A pull request can be supplied as an argument </span><span class=\"mtk15\">in</span><span class=\"mtk1\"> any of the following formats:</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  - by number, e.g. </span><span class=\"mtk8\">&quot;123&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  - by URL, e.g. </span><span class=\"mtk8\">&quot;https://github.com/OWNER/REPO/pull/123&quot;</span><span class=\"mtk1\">; or</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  - by the name of its head branch, e.g. </span><span class=\"mtk8\">&quot;patch-1&quot;</span><span class=\"mtk1\"> or </span><span class=\"mtk8\">&quot;OWNER:patch-1&quot;</span><span class=\"mtk1\">.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">EXAMPLES</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh pr checkout 353</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh pr create --fill</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh pr view --web</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">LEARN MORE</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  Use </span><span class=\"mtk8\">&#39;gh &lt;command&gt; &lt;subcommand&gt; --help&#39;</span><span class=\"mtk1\"> </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> more information about a command.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  Read the manual at https://cli.github.com/manual</span></span></code></pre>\n<p><strong>**</strong>Let’s view some of it:👀<strong>**</strong></p>\n<p>current PR’s in the repo:</p>\n<p><code>$ gh pr list</code>\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 104.28571428571429%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAACXBIWXMAAAsTAAALEwEAmpwYAAADJ0lEQVQ4yzVU2W7TQBT1D7KWNrv3NfGaxUmapgXBz1FVJVKXIOAd8dBklnwA59ggjUb22HPPPcuMofxURaW0EjkK5SCQZqScibRjvroTDDEMxNBXYS7dMV7xsxj44nVXvO0bf85Gv89M0bGxTQ4DOYq4x4zEBVZi6U1Ez+U6v4Zcwdz3RM8T74fGLvbuYufFik6Lra4xrvViq9KFymvMevVRzTYqmWnM1aWablRcaXxabNGm8ZR4D7F7RGOTOTZIO1GTmQpy5WeqXHEultig4lIGmQTBqOQPRS27rrFL/bvMO4yC03yrVzc6W6iwVMVKL2+wWc+vWDHI9fRSrz8pfM2X6IWKdBzjOXR3Y/dl4Gmsjqf8HOYqyP49YE6m0hmTRVigOxTibMXi3DK+ZcEtkL2xrtZyPGV59JktdLHUQIYKs40uaiwCnL2AbaOWOBsZ+9B9iJ3DyFfjmYoKnS5IG+WjgrDpnFqAcFyCOVsYT+lIx+FmIuc+1AYUlABtdtiw1ZvPZFgQjfhZDedoG7z0UnlhG/vIffbtgxUyKs6EtJMZZ0iaL/G3wgA+Ba8QB/FuALYwHw/Gt9T/mnkv/gQ+k9jVFw0/0TYJX2tYUK2hWes8dKLOViRedcSbnvGrb/7ojY59jxpCXoD4mQwL+plUEkk8R/4c0XXFhSW6DhRByPiMhN1n/m3mHvyJLteIAaXOa2ICEOIjYZANaSlWSBh1wQzzIWHfJ+fHyDmYIdSmh8xQodoWYGzQPLSpguxR0cZetGo/2s6DaR2GAdGQKnADVLXW8w1fYThSDS2gNpRPpnShvkYt2XONfeA+ALnv6nYbdM4ZCYoE5jAW4UHCsQj8/6WxIpuENdm2whPSiwF66ZyEkSoUAj2Ijz3Vil3gtXGBWvY8ZpvIQ6/J0wL7WZVUkeqKM8/Qsol6Ac0ZLyshZyDvMv8+BXJ0Are8PqEqFEoqlkcwwDMudX3DQ47LpDkV6EjgPvhgGt9N+2loHq1QYxXxhDawp1oxWxkZwlhq1hwykkLFpjruE+OnZe9t6zjwaEw74BkPwEy1/Qd5W0I1keZphZB+hjvsLwWe5oWFwbmJAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Angular pullrequest\"\n        title=\"Angular pullrequest\"\n        src=\"/static/c7c9214ed811a39667e4204bae7880cc/f058b/angular%20pr.png\"\n        srcset=\"/static/c7c9214ed811a39667e4204bae7880cc/f058b/angular%20pr.png 630w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\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><strong>*</strong>Let’s view an individual pr:<strong>*</strong></p>\n<p>I’m going with the first pull request <code>#38899</code>. Through gh cmd $ gh pr view <code>38899</code>.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"9\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">refactor(compiler): simplify visitor logic </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> attributes</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">Draft • atscott wants to merge 1 commit into master from testrefactor</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">Labels: cla: yes, comp: compiler, state: WIP, target: patch</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">Milestone: needsTriage</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">The logic </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> computing identifiers, specifically </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> bound attributes can  </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  be simplified by using the value span of the binding rather than the </span><span class=\"mtk11\">source</span><span class=\"mtk1\"> span.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">View this pull request on GitHub: https://github.com/angular/angular/pull/38899</span></span></code></pre>\n<p>*<strong>*Repository 🤖**</strong></p>\n<p>Let’s execute the <code>$gh repo --help</code> see what commands are available</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"10\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">Work with GitHub repositories</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">USAGE</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  gh repo &lt;command&gt; [flags]</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">CORE COMMANDS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  clone:      Clone a repository locally</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  create:     Create a new repository</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  fork:       Create a fork of a repository</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  view:       View a repository</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">INHERITED FLAGS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  --help   Show </span><span class=\"mtk11\">help</span><span class=\"mtk1\"> </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> </span><span class=\"mtk11\">command</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">ARGUMENTS</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  A repository can be supplied as an argument </span><span class=\"mtk15\">in</span><span class=\"mtk1\"> any of the following formats:</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  - </span><span class=\"mtk8\">&quot;OWNER/REPO&quot;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  - by URL, e.g. </span><span class=\"mtk8\">&quot;https://github.com/OWNER/REPO&quot;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">EXAMPLES</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh repo create</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh repo clone cli/cli</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  $ gh repo view --web</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">LEARN MORE</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  Use </span><span class=\"mtk8\">&#39;gh &lt;command&gt; &lt;subcommand&gt; --help&#39;</span><span class=\"mtk1\"> </span><span class=\"mtk15\">for</span><span class=\"mtk1\"> more information about a command.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  Read the manual at https://cli.github.com/manual</span></span></code></pre>\n<p>It is better to clone a repository using the gh command than with the git command. I have done this above. Only through gh cmd, I have cloned angular repo.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"11\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">$ gh repo clone angular/angular</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">$ gh repo fork</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">- Forking angular/angular...</span></span></code></pre>\n<p>Start functioning. You should create a new PR after this (<code>$gh pr create</code>)! It’s sort of remarkable that all of that element is now available in the terminal!😍</p>\n<p>*<strong>*Gist 🐱‍🚀**</strong></p>\n<p>It is now simple to create a gist on GitHub from the terminal using the CLI cmd.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"bash\" data-index=\"12\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\">gh gist create &lt; file &gt;</span></span></code></pre>\n<p>*<strong>*Conclusion🙀**</strong></p>\n<p><a href=\"https://cli.github.com/\">Git CLI's</a> primary objective is to \"minimize context switching\" by allowing you to continue inside your terminal/console, rather than opening your browser to access <a href=\"https://github.com/\">GitHub</a>. For additional functionality and knowledge on using the current resources, you may link to the <a href=\"https://cli.github.com/manual/\">manual</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 .mtk11 { color: #DCDCAA; }\n  .dark-default-dark .mtk15 { color: #C586C0; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n</style>","frontmatter":{"date":"October 05, 2020","updated_date":null,"description":"Learn about GitHub CLI tool and how/when to use it","title":"GitHub CLI Tool ⚒","tags":["Cloud","GIT","Version control"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5384615384615385,"src":"/static/83b212a04295c14c34c4446afe679467/d8212/GitHub%20CLI%20Tool.png","srcSet":"/static/83b212a04295c14c34c4446afe679467/69585/GitHub%20CLI%20Tool.png 200w,\n/static/83b212a04295c14c34c4446afe679467/497c6/GitHub%20CLI%20Tool.png 400w,\n/static/83b212a04295c14c34c4446afe679467/d8212/GitHub%20CLI%20Tool.png 757w","sizes":"(max-width: 757px) 100vw, 757px"}}},"author":{"id":"Saravanan Vijayamuthu","github":"SaravananVijayamuthu","avatar":null}}}},{"node":{"excerpt":"Overview You may have come across the term- “lazy loading in React”, but most of you won’t be familiar with exactly what is lazy loading in…","fields":{"slug":"/engineering/lazy-loading-in-react/"},"html":"<h3 id=\"overview\" style=\"position:relative;\"><a href=\"#overview\" aria-label=\"overview 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>Overview</h3>\n<p>You may have come across the term- “lazy loading in React”, but most of you won’t be familiar with exactly what is lazy loading in React. Lazy loading is not a new concept. It has been available for quite some time. In essence, lazy loading means that a component or a part of code must get loaded when it is required. It is also referred to as <code>code splitting</code> and <code>data fetching</code>. Now, the next question is, how to do lazy loading in react​? </p>\n<p>Talking about <code>React</code> specifically, it bundles the complete code and deploys all of it at the same time. Now, usually, that's not a bad idea, since React SPAs (Single page application) are quite small and do not affect the performance. But what if we have a gigantic application, like a content management system with a customer portal, admin portal etc. In such a case, it does not seem like a smart idea to load the complete application.</p>\n<ul>\n<li>It will be a huge application and will cost a lot of unnecessary data transfer which can lead to slow loading of the website.</li>\n<li>A customer login, will not have access to admin specific features, so loading it is a waste of memory and time.</li>\n</ul>\n<p>In this post, I will try to explain the advantages of lazy loading in react and how to implement it in <code>React</code>.</p>\n<h3 id=\"advantages\" style=\"position:relative;\"><a href=\"#advantages\" aria-label=\"advantages 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>Advantages</h3>\n<p>In situations where we know that certain code/features will not be accessible to all the users or the user does not access it frequently, it is best to load them when the user requests for it. This improves user experience as well as initial loading time.</p>\n<p>For example, let's consider that our application has two sections, <code>A</code> and <code>B</code>. Size of A is 1 MB and its loading time is approximately 1 second. Size of B is also 1 MB and so its loading time is also 1 second. And we know that a user will access either of the sections, or a user accessing section A will rarely access section B and vice versa. If we were to load the complete application at the starting of our application, it would cost the user 2 MB of data and the loading time will also be 2 seconds. The user might not like to wait for 2 seconds or won't be happy that a site is costing them a lot of data. This can be improved and halved with proper lazy loading through  lazy load react components.</p>\n<blockquote>\n<p>Note: This is not the general case. Small single-page applications are usually in kbs.</p>\n</blockquote>\n<h3 id=\"prerequisites\" style=\"position:relative;\"><a href=\"#prerequisites\" aria-label=\"prerequisites 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>Prerequisites</h3>\n<p>To follow this tutorial, you’ll need the following:</p>\n<ul>\n<li><a href=\"https://nodejs.org/en/download/\"><strong>Latest Node version</strong></a> installed</li>\n<li>\n<p><code>create-react-app</code> tool </p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">npm install -g create-react-app</span></code></pre>\n</li>\n</ul>\n<h3 id=\"general-instructions\" style=\"position:relative;\"><a href=\"#general-instructions\" aria-label=\"general instructions 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>General instructions</h3>\n<ol>\n<li>We will perform lazy loading in React with react suspense and without it.</li>\n<li>\n<p>First of all, create the app using <code>npm create-react-app</code> </p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">npm create-react-app my-app</span></code></pre>\n</li>\n<li>\n<p>Now run the app by running following command in the project directory root</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">npm start</span></code></pre>\n</li>\n<li>The default react app will run in <code>http://localhost:3000</code></li>\n<li>\n<p>Let the directory structure be </p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">|</span>\n<span class=\"grvsc-line\">|-src</span>\n<span class=\"grvsc-line\">|\t|-components</span>\n<span class=\"grvsc-line\">|\t|\t|-Admin.js</span>\n<span class=\"grvsc-line\">|\t|\t|-Customer.js</span>\n<span class=\"grvsc-line\">|\t|\t|-Home.js</span>\n<span class=\"grvsc-line\">|\t|-app.js</span>\n<span class=\"grvsc-line\">|-index.js</span></code></pre>\n</li>\n<li>Application will first render <code>app.js</code> which will have an input field. We will pass the input received as props to Home, and render <code>Home.js</code>. Based on props received, we will either render <code>Admin</code> or <code>Customer</code>.</li>\n</ol>\n<h3 id=\"using-react-suspense-react-166\" style=\"position:relative;\"><a href=\"#using-react-suspense-react-166\" aria-label=\"using react suspense react 166 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>Using React Suspense (<code>React 16.6+</code>)</h3>\n<p>From React 16.6+, react added <a href=\"https://reactjs.org/docs/react-api.html#reactsuspense\">React Suspense</a> which performs lazy loading.</p>\n<ol>\n<li>\n<p>In our <code>Home.js</code>, we will lazy load Admin and Customer</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"js\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> </span><span class=\"mtk12\">React</span><span class=\"mtk1\">, { </span><span class=\"mtk12\">Suspense</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;react&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Customer</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">React</span><span class=\"mtk1\">.</span><span class=\"mtk11\">lazy</span><span class=\"mtk1\">(() </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk4\">import</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;./Customer.js&quot;</span><span class=\"mtk1\">));</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Admin</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">React</span><span class=\"mtk1\">.</span><span class=\"mtk11\">lazy</span><span class=\"mtk1\">(() </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk4\">import</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;./Admin.js&quot;</span><span class=\"mtk1\">));</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">//Instead of regular import statements, we will use the above approach for lazy loading</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk15\">default</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">props</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t</span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">props</span><span class=\"mtk1\">.</span><span class=\"mtk12\">user</span><span class=\"mtk1\"> === </span><span class=\"mtk8\">&quot;admin&quot;</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> (</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk3\">// fallback component is rendered until our main component is loaded</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk17\">&lt;</span><span class=\"mtk10\">Suspense</span><span class=\"mtk1\"> </span><span class=\"mtk12\">fallback</span><span class=\"mtk1\">=</span><span class=\"mtk4\">{</span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">Loading</span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk4\">}</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t\t</span><span class=\"mtk17\">&lt;</span><span class=\"mtk10\">Admin</span><span class=\"mtk1\"> </span><span class=\"mtk17\">/&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk17\">&lt;/</span><span class=\"mtk10\">Suspense</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t} </span><span class=\"mtk15\">else</span><span class=\"mtk1\"> </span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">props</span><span class=\"mtk1\">.</span><span class=\"mtk12\">user</span><span class=\"mtk1\"> === </span><span class=\"mtk8\">&quot;customer&quot;</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> (</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk17\">&lt;</span><span class=\"mtk10\">Suspense</span><span class=\"mtk1\"> </span><span class=\"mtk12\">fallback</span><span class=\"mtk1\">=</span><span class=\"mtk4\">{</span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">Loading</span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk4\">}</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t\t</span><span class=\"mtk17\">&lt;</span><span class=\"mtk10\">Customer</span><span class=\"mtk1\"> </span><span class=\"mtk17\">/&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk17\">&lt;/</span><span class=\"mtk10\">Suspense</span><span class=\"mtk17\">&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t} </span><span class=\"mtk15\">else</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\"> Invalid User </span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">};</span></span></code></pre>\n</li>\n</ol>\n<h3 id=\"without-react-suspense\" style=\"position:relative;\"><a href=\"#without-react-suspense\" aria-label=\"without react suspense 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>Without React Suspense</h3>\n<p>When talking about react lazy loading, if you are working with React version prior to 16.6, you won't have the Suspense component. It is best to upgrade to the latest version and use Suspense. If you're not able to upgrade and still want this feature, it is still possible to create your own React Suspense component. I will be using <a href=\"https://reactjs.org/docs/higher-order-components.html\">Higher Order Component(HOC)</a>. </p>\n<ul>\n<li>\n<p>Our HOC (<code>lazyLoader.js</code>)</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"js\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk11\">lazyLoader</span><span class=\"mtk1\"> = (</span><span class=\"mtk12\">importComp</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk4\">extends</span><span class=\"mtk1\"> </span><span class=\"mtk10\">React</span><span class=\"mtk1\">.</span><span class=\"mtk10\">Component</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk12\">state</span><span class=\"mtk1\">: {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk12\">component</span><span class=\"mtk1\">: </span><span class=\"mtk10\">null</span><span class=\"mtk1\">; </span><span class=\"mtk3\">//initializing state</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t};</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk3\">//loading the component and setting it to state</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk11\">componentDidMount</span><span class=\"mtk1\">() {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk11\">importComp</span><span class=\"mtk1\">().</span><span class=\"mtk11\">then</span><span class=\"mtk1\">((</span><span class=\"mtk12\">comp</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk11\">setState</span><span class=\"mtk1\">({ </span><span class=\"mtk12\">component:</span><span class=\"mtk1\"> </span><span class=\"mtk12\">comp</span><span class=\"mtk1\">.</span><span class=\"mtk12\">default</span><span class=\"mtk1\"> }));</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t}</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk3\">//rendering the component</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk11\">render</span><span class=\"mtk1\">() {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">C</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">this</span><span class=\"mtk1\">.</span><span class=\"mtk12\">state</span><span class=\"mtk1\">.</span><span class=\"mtk12\">component</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk12\">C</span><span class=\"mtk1\"> ? </span><span class=\"mtk17\">&lt;</span><span class=\"mtk10\">C</span><span class=\"mtk1\"> </span><span class=\"mtk4\">{</span><span class=\"mtk1\">...</span><span class=\"mtk4\">this</span><span class=\"mtk1\">.</span><span class=\"mtk12\">props</span><span class=\"mtk4\">}</span><span class=\"mtk1\"> </span><span class=\"mtk17\">/&gt;</span><span class=\"mtk1\"> : </span><span class=\"mtk4\">null</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t};</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=\"mtk15\">default</span><span class=\"mtk1\"> </span><span class=\"mtk12\">lazyLoader</span><span class=\"mtk1\">;</span></span></code></pre>\n</li>\n<li>\n<p>Our calling component, in this case <code>Home.js</code></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"js\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> </span><span class=\"mtk12\">React</span><span class=\"mtk1\"> </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;react&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">lazyLoader</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;./lazyLoader&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Customer</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">lazyLoader</span><span class=\"mtk1\">(() </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk4\">import</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;./Customer.js&quot;</span><span class=\"mtk1\">));</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Admin</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">lazyLoader</span><span class=\"mtk1\">(() </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk4\">import</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;./Admin.js&quot;</span><span class=\"mtk1\">));</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">//Instead of regular import statements, we will use the above approach for lazy loading</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">export</span><span class=\"mtk1\"> </span><span class=\"mtk15\">default</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">props</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t</span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">props</span><span class=\"mtk1\">.</span><span class=\"mtk12\">user</span><span class=\"mtk1\"> === </span><span class=\"mtk8\">&quot;admin&quot;</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk17\">&lt;</span><span class=\"mtk10\">Admin</span><span class=\"mtk1\"> </span><span class=\"mtk17\">/&gt;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t} </span><span class=\"mtk15\">else</span><span class=\"mtk1\"> </span><span class=\"mtk15\">if</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">props</span><span class=\"mtk1\">.</span><span class=\"mtk12\">user</span><span class=\"mtk1\"> === </span><span class=\"mtk8\">&quot;customer&quot;</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk17\">&lt;</span><span class=\"mtk10\">Customer</span><span class=\"mtk1\"> </span><span class=\"mtk17\">/&gt;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t} </span><span class=\"mtk15\">else</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\"> Invalid User </span><span class=\"mtk17\">&lt;/</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">};</span></span></code></pre>\n<p>This was all about how to implement lazy loading in react,  if you need the fallback feature, you can update HOC's render method where it is returning null. Instead of null, you can return your fallback component, and it can be passed as props too.</p>\n<p>Now our HOC would look like - </p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"js\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk11\">lazyLoader</span><span class=\"mtk1\"> = (</span><span class=\"mtk12\">importComp</span><span class=\"mtk1\">, </span><span class=\"mtk12\">fallback</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk4\">class</span><span class=\"mtk1\"> </span><span class=\"mtk4\">extends</span><span class=\"mtk1\"> </span><span class=\"mtk10\">React</span><span class=\"mtk1\">.</span><span class=\"mtk10\">Component</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk12\">state</span><span class=\"mtk1\"> = {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk12\">component:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">null</span><span class=\"mtk1\">, </span><span class=\"mtk3\">//initializing state</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t};</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk3\">//loading the component and setting it to state</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk11\">componentDidMount</span><span class=\"mtk1\">() {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk11\">importComp</span><span class=\"mtk1\">().</span><span class=\"mtk11\">then</span><span class=\"mtk1\">((</span><span class=\"mtk12\">comp</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> </span><span class=\"mtk11\">setState</span><span class=\"mtk1\">({ </span><span class=\"mtk12\">component:</span><span class=\"mtk1\"> </span><span class=\"mtk12\">comp</span><span class=\"mtk1\">.</span><span class=\"mtk12\">default</span><span class=\"mtk1\"> }));</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t}</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk3\">//rendering the component</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t</span><span class=\"mtk11\">render</span><span class=\"mtk1\">() {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">C</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">this</span><span class=\"mtk1\">.</span><span class=\"mtk12\">state</span><span class=\"mtk1\">.</span><span class=\"mtk12\">component</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk12\">C</span><span class=\"mtk1\"> ? (</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t\t</span><span class=\"mtk17\">&lt;</span><span class=\"mtk10\">C</span><span class=\"mtk1\"> </span><span class=\"mtk4\">{</span><span class=\"mtk1\">...</span><span class=\"mtk4\">this</span><span class=\"mtk1\">.</span><span class=\"mtk12\">props</span><span class=\"mtk4\">}</span><span class=\"mtk1\"> </span><span class=\"mtk17\">/&gt;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t) : </span><span class=\"mtk12\">fallback</span><span class=\"mtk1\"> ? (</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t\t</span><span class=\"mtk12\">fallback</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t) : (</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t\t</span><span class=\"mtk17\">&lt;</span><span class=\"mtk4\">div</span><span class=\"mtk17\">&gt;</span><span class=\"mtk1\">loading</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\">\t\t\t);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t\t</span><span class=\"mtk3\">// If component is not loaded then return fallback component, if fallback is not provided then use default loading</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t\t}</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">\t};</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=\"mtk15\">default</span><span class=\"mtk1\"> </span><span class=\"mtk12\">lazyLoader</span><span class=\"mtk1\">;</span></span></code></pre>\n</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  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n  .dark-default-dark .mtk15 { color: #C586C0; }\n  .dark-default-dark .mtk1 { color: #D4D4D4; }\n  .dark-default-dark .mtk12 { color: #9CDCFE; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n  .dark-default-dark .mtk4 { color: #569CD6; }\n  .dark-default-dark .mtk11 { color: #DCDCAA; }\n  .dark-default-dark .mtk3 { color: #6A9955; }\n  .dark-default-dark .mtk17 { color: #808080; }\n  .dark-default-dark .mtk10 { color: #4EC9B0; }\n</style>","frontmatter":{"date":"October 05, 2020","updated_date":null,"description":"Learn about lazy loading in React and how/when to use it","title":"Lazy loading in React","tags":["React","Lazy loading","React Suspense"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/00a89fc56461ea1529439d89072c93f1/14b42/react.jpg","srcSet":"/static/00a89fc56461ea1529439d89072c93f1/f836f/react.jpg 200w,\n/static/00a89fc56461ea1529439d89072c93f1/2244e/react.jpg 400w,\n/static/00a89fc56461ea1529439d89072c93f1/14b42/react.jpg 800w,\n/static/00a89fc56461ea1529439d89072c93f1/9842e/react.jpg 900w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Akshay Avinash","github":"akshay11298","avatar":null}}}},{"node":{"excerpt":"GraphQL's popularity has skyrocketed since its release in 2015. It is the modern way of developing and querying APIs. GraphQL is an…","fields":{"slug":"/engineering/what-is-graphql/"},"html":"<p>GraphQL's popularity has skyrocketed since its release in 2015. It is the modern way of developing and querying APIs. GraphQL is an application programming interface (API) query language and server-side runtime that prioritises giving customers precisely the data they request.</p>\n<p>GraphQL is designed to make fast, scalable, and <a href=\"/what-is-an-api/\">developer-friendly APIs</a>. GraphQL allows developers to build requests that pull data from multiple data sources in a single API call as an alternative to REST.</p>\n<h2 id=\"foundation-of-graphql\" style=\"position:relative;\"><a href=\"#foundation-of-graphql\" aria-label=\"foundation of graphql 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>Foundation of GraphQL</h2>\n<p>It was developed internally by <a href=\"https://techcrunch.com/2018/11/06/facebooks-graphql-gets-its-own-open-source-foundation/\">Facebook in 2012</a> before being publicly released in 2015. \"On 7 November 2018, the GraphQL project was moved from Facebook to the newly-established GraphQL Foundation, hosted by the non-profit Linux Foundation.\"</p>\n<h2 id=\"what-is-graphql\" style=\"position:relative;\"><a href=\"#what-is-graphql\" aria-label=\"what is graphql 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 GraphQL?</h2>\n<p>GraphQL is an application-level query language that helps data fetching and serving between client and server runtime by providing a standard protocol for queries. Its strength lies in the fact that it offers a modern, simpler, and efficient way to query and develop APIs. The real deal is its <strong>flexible data fetching</strong> -- the application only loads relevant data from the server. Also, GraphQL is hierarchical in nature; it structures relationships in a simple hierarchical manner to avoid complex queries while fetching data.</p>\n<h2 id=\"why-to-use-graphql\" style=\"position:relative;\"><a href=\"#why-to-use-graphql\" aria-label=\"why to use graphql 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 to use GraphQL?</h2>\n<p>GraphQL <strong>offers much power and flexibility</strong> over Traditional APIs. One of the few things GraphQL was designed, was to solve Data Fetching/Loading problems.</p>\n<p>Data fetching is one of the most critical factors responsible for the performance of the application. Most of the time, the data provided by the API isn't required to run the application. This problem is termed as <strong>\"Over fetching\"</strong>, which can be a more significant issue in mobile devices. Since devices with slower network connection are bound to take more load time, it creates a <strong>negative impact on end-users.</strong></p>\n<p>In the current scenario, traditional <a href=\"/best-practice-guide-for-rest-api-security/\">REST APIs</a> offer no clean way to solve this problem; GraphQL comes to the rescue. It allows <strong>clients to define the structure of the data</strong> required, and the same structure of the data is returned from the server. Therefore preventing fetching loads and loads of data, ultimately increasing performance.</p>\n<p>API endpoints generally fetch specific data, hence to load a certain data-rich application, there have to be <strong>multiple requests to the server.</strong> But, applications should fetch relevant data in one round trip to avoid <strong>degrading performance.</strong> The flexibility and richness of the GraphQL, allows us to define all the data to fetch in a single request, avoiding multiple Round trips</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%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAABZklEQVQoz4VRXW8TMRC8//+GEIhfg3hBRaSUBySq43pqm0Caj8udY3s/vONesUlUCfrAarWatWfWq3Fjp0iGbPGAoatJo7G34aZiPhq5Mw574LGST9GctWqPT7a+ypdv5s+v5s03TPf48m4u7XiLfYvLt/Pi9by6yPNTJf8lfo5yIdGUazJlJiSxJNBY6j/cF2LDnxHJEsCdo86JKkXWMhX/FZ8iw6LQ+yV/WC37u+v2um1b7z2AF2KcF64PpupHBWqh96EPIiosRFTA6fxZ0liuvSqgyAT1JgGxuO2QQhaX2WUaITGnAERDsUBRRwBNmjh+3KQhrom7LTko3zj+tIsmt45WTghCF1vpp8G02/FWJO0jFcmRG53YL36lkTYx/ng4hJzoboxXD6Ta78f7YWLV+HUjSzcm+f5ztw0hHaJfrNVxU7b3HBLK+la+JReTVQLHAspyUM3IrFwMyYWqglQ9OVIo9TePzzpP+VoO0QAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Wrapping a REST API in GraphQL\"\n        title=\"Wrapping a REST API in GraphQL\"\n        src=\"/static/7de39de94c321c5ef5ad1991b63fc1ee/e5715/wrapper.png\"\n        srcset=\"/static/7de39de94c321c5ef5ad1991b63fc1ee/a6d36/wrapper.png 650w,\n/static/7de39de94c321c5ef5ad1991b63fc1ee/e5715/wrapper.png 768w,\n/static/7de39de94c321c5ef5ad1991b63fc1ee/e8950/wrapper.png 2000w\"\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>\n<em>Wrapping REST API in graphQL - Source - Joey Ng'ethe | TwigaTech</em></p>\n<h2 id=\"fundamentals-of-graphql\" style=\"position:relative;\"><a href=\"#fundamentals-of-graphql\" aria-label=\"fundamentals of graphql 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>Fundamentals of GraphQL</h2>\n<table>\n<thead>\n<tr>\n<th>Server -></th>\n<th>GraphQL Server -></th>\n<th>Graphql Client -></th>\n<th>Client</th>\n</tr>\n</thead>\n<tbody>\n</tbody>\n</table>\n<hr>\n<p><strong>Schema</strong> - GraphQL follows a type system to define the schema of an API. The syntax for writing schemas is called Schema Definition Language (SDL).</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"js\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\"># </span><span class=\"mtk12\">A</span><span class=\"mtk1\"> </span><span class=\"mtk12\">simple</span><span class=\"mtk1\"> </span><span class=\"mtk12\">example</span><span class=\"mtk1\"> </span><span class=\"mtk12\">to</span><span class=\"mtk1\"> </span><span class=\"mtk12\">define</span><span class=\"mtk1\"> </span><span class=\"mtk12\">schema</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">type</span><span class=\"mtk1\"> </span><span class=\"mtk10\">Person</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  name: String!</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  age: Int!</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span></code></pre>\n<p><strong>Query</strong> - The data or information that a client needs from a server can be fetched in a request using queries.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"json\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\"># This query fetches all specifically names of all users</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">{</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk14\">users</span><span class=\"mtk1\"> </span><span class=\"mtk14\">{</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk14\">name</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\"># This query fetches all names of all friends of user </span><span class=\"mtk8\">&quot;Anup&quot;</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=\"mtk14\">user(name</span><span class=\"mtk1\">: </span><span class=\"mtk8\">&quot;Anup&quot;</span><span class=\"mtk14\">)</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk14\">name</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk14\">friend</span><span class=\"mtk1\"> </span><span class=\"mtk14\">{</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk14\">name</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></code></pre>\n<p><strong>Mutation</strong> - Mutations are the way to modify data to the server; these include creating/updating/deleting data. They have similar syntax as queries, with special keywords ahead of them.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"json\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk1\"># This mutation adds a user with name </span><span class=\"mtk8\">&quot;Anup&quot;</span><span class=\"mtk1\"> and age </span><span class=\"mtk7\">20</span><span class=\"mtk1\">.</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">mutation {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk14\">addUser(</span><span class=\"mtk1\"> </span><span class=\"mtk14\">name</span><span class=\"mtk1\"> : </span><span class=\"mtk8\">&quot;Anup&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk14\">age</span><span class=\"mtk1\">: </span><span class=\"mtk7\">20</span><span class=\"mtk14\">)</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk14\">name</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk14\">age</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>Despite its powers, you might not need graphQL in your applications -</p>\n<ul>\n<li>Since it adds unnecessary overhead and complex architecture for simple applications.</li>\n<li>It makes web caching challenging to implement.</li>\n</ul>\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>GraphQL is a step forward in the world of applications by providing a significant boost in performance. Another plus point of GraphQL is that it is not meant to replace any existing solution but enhance and co-exist with REST APIs. Simply put, the future of GraphQL looks bright.</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 .mtk4 { color: #569CD6; }\n  .dark-default-dark .mtk10 { color: #4EC9B0; }\n  .dark-default-dark .mtk14 { color: #F44747; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n  .dark-default-dark .mtk7 { color: #B5CEA8; }\n</style>","frontmatter":{"date":"October 01, 2020","updated_date":null,"description":"GraphQL is a syntax that specifies how data can be requested and is usually used to load data to a client from a server. Find out why to use it and any other advantages.","title":"What is GraphQL? - A Basic Guide","tags":["Engineering","API","GraphQL","Performance"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/926f1c395eca216d1174370ca687b800/ee604/graph.png","srcSet":"/static/926f1c395eca216d1174370ca687b800/69585/graph.png 200w,\n/static/926f1c395eca216d1174370ca687b800/497c6/graph.png 400w,\n/static/926f1c395eca216d1174370ca687b800/ee604/graph.png 800w,\n/static/926f1c395eca216d1174370ca687b800/db955/graph.png 900w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Anup Aglawe","github":"anup-a","avatar":null}}}},{"node":{"excerpt":"Determining how consumers are introduced to a brand is as important as managing their subsequent journey. With LoginRadius’ recently…","fields":{"slug":"/identity/loginradius-announces-user-management/"},"html":"<p>Determining how consumers are introduced to a brand is as important as managing their subsequent journey. With LoginRadius’ recently <a href=\"https://www.loginradius.com/user-management/\">launched User Management feature</a>, businesses can enjoy streamlined access control and adjustable privileges for their consumers. </p>\n<h2 id=\"intent-behind-the-launch\" style=\"position:relative;\"><a href=\"#intent-behind-the-launch\" aria-label=\"intent behind the launch 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>Intent Behind the Launch</h2>\n<p>Simply put, the LoginRadius User Management feature solves the problem of managing the multiple operations that revolve around consumer data. </p>\n<p>It also has been designed to help your business in the following ways: </p>\n<ul>\n<li>It is an easy-to-use feature launched to handle your user management and support requirements.</li>\n<li>It allows you to control and restrict access for consumers from the LoginRadius Admin Console. You can also handle consumers from your application’s admin console.</li>\n<li>It allows you to block, or delete consumers based on your business policies. </li>\n<li>It allows you to feed consumers' data in real-time using Webhooks and APIs.</li>\n<li>It reduces your team effort to maintain and manage consumer data.</li>\n<li>It helps you to migrate the existing consumer data from multiple sources.</li>\n</ul>\n<p><a href=\"https://www.loginradius.com/resource/loginradius-ciam-user-management/\"><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: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABmElEQVQY0z2Qy0tbQRSHr4vePHy1RhufSTE+YmyqNA+viWkltyEajQ8QURBEwYW2uy5aUFdSsK5cuFfcCJYuRF1IoXRVSotSaCtFoqL+Ez4Cn+deHwPfzJmZM7/5naPY6towsNfHyPO+MMmV2MB+e3eHtTaCvTHOo1CaIn8cmy+O1fsSW230PkcxplxvDEeTTn7DjVihX8fRnMAZTFHgaxehKBZBrdaw+xO49BF8+iCWUD/q0wQWj4ZaEzHzlDtld2sarXeMmlgf+SKi+juwaYMUNLZjkeSyYCdPIj24tW7KA0kqwl24WlJUhQU5c8n7PDGkWG/tVrf10pIeJSx4oj08bErijA7geKajeiKUBjpwPk9KJa94LGt5KIVTzoqlkhKhUj4w2mY6NOyuft4mc3zK3p99/v7PsH9wyNHJGVrfODnuMEpVkDezC/z8/Y+1jR2W1zdZ+bTJ1++/WN/6YlaielpRjMY/kODbj12McXF+Tvbqkmz2ytzHhyZRKgOmS314ivfzS7ye+ciUwfQ8b+cWmXj34b4118kz37JlDFP6AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"loginradius user management datasheet\"\n        title=\"loginradius user management datasheet\"\n        src=\"/static/fe328332d6d3ccc84958da4e801dce17/e5715/DS-LoginRadius-User-Management.png\"\n        srcset=\"/static/fe328332d6d3ccc84958da4e801dce17/a6d36/DS-LoginRadius-User-Management.png 650w,\n/static/fe328332d6d3ccc84958da4e801dce17/e5715/DS-LoginRadius-User-Management.png 768w,\n/static/fe328332d6d3ccc84958da4e801dce17/2bef9/DS-LoginRadius-User-Management.png 1024w\"\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></a></p>\n<h2 id=\"key-capabilities-of-loginradius-user-management\" style=\"position:relative;\"><a href=\"#key-capabilities-of-loginradius-user-management\" aria-label=\"key capabilities of loginradius user management 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>Key Capabilities of LoginRadius User Management</h2>\n<p>1. <strong>User management process</strong>: LoginRadius offers complete consumer management features, including: </p>\n<ul>\n<li><strong>Provisioning</strong>: To create consumer accounts.</li>\n<li><strong>Authorization</strong>: To validate the access rights of consumers.</li>\n<li><strong>Account Management</strong>: To disable consumer accounts, and grant, or restrict access.</li>\n<li><strong>Password Management</strong>: To trigger the password reset option for consumer accounts.</li>\n<li><strong>Deprovisioning</strong>: To block, or delete consumer accounts.</li>\n</ul>\n<p>2. <strong>Multiple operations of user data</strong>: LoginRadius allows the following actions to be performed on consumers’ data:</p>\n<ul>\n<li><strong>Data filtration</strong>: To search consumers based on parameters like Name, Email, UID, ID, and Phone ID via the LoginRadius Admin Console.</li>\n<li><strong>API support for user management</strong>: To allow all user management features to be directly integrated into your application’s Admin Console.</li>\n<li><strong>Real-time user data feeds using webhooks</strong>: To obtain real-time feeds of consumer data using the LoginRadius webhooks.</li>\n<li><strong>Data migration services for user management</strong>: To offer self-serve and CSV-based data migration via the LoginRadius Admin Console.</li>\n</ul>\n<h3 id=\"a-final-word\" style=\"position:relative;\"><a href=\"#a-final-word\" aria-label=\"a final word 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>A Final Word</h3>\n<p>The User Management feature by LoginRadius is unique in that it monitors and manages the entire consumer journey through automated access permissions, data migration, API support, and other consumer-centric solutions. Now, blend it with creating <a href=\"https://www.loginradius.com/customer-experience-solutions/\">meaningful relationships with your consumers</a>—that’s what we offer. </p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><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: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABdElEQVQY002RO0/CUBzFG6PtbZWHCAmRmBB5P8vDII9SSC0omog4oAEGjZMO6OKEuLjoJ2Fx0cSBwUQnXZxcHPwux38LJA7nNvfec8+5v1tOCCiwpbbhye2BxbYgBMtgIRVioDRRsARGXxZUzLlEHmehBaesQ4rrEMPViYf2DR9nDGKkChbVICVqsMt1WJI1sHCFwhUsUIFohJH49TxECvRUjhDW2mAbB5iP6hB8hUkhiRPN5KIZYJdrsEYrcCSpmQqMm6/m9ylUhSulY7N5ivROB3L9GOlGF3Ktbc4zuz341UPw/uIk0ESbBjoSGlYIx8BfzjSwVmyCEYEUUmCPa3Bnd+hwC75yC95S05SxbolU/iEbOCFCpDexEfIioTNCNd6Tp6IlMnNuGeeDe3z//OLx5RWj5zFGT2O8fXxh/P4Ja6w6vSEFCnTIlW2YiDzhzX7ATFKojDlvjpBPcDF4QPdyiG5/iE7/BmfXd+hd3VKpCoG8fzxWw2+c+yTpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Book-a-demo-loginradius\"\n        title=\"Book-a-demo-loginradius\"\n        src=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png\"\n        srcset=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/a6d36/book-a-demo-loginradius.png 650w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png 768w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/63ff0/book-a-demo-loginradius.png 2887w\"\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></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</style>","frontmatter":{"date":"September 30, 2020","updated_date":null,"description":"Businesses will enjoy simplified access control and flexible rights for their customers with the newly added User Management functionality of LoginRadius.","title":"Announcement – LoginRadius Announces the Availability of User Management","tags":["user management","identity management","password management"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.408450704225352,"src":"/static/c7b97877ec6e51015bd2d515b9f3f29b/0756a/image1.png","srcSet":"/static/c7b97877ec6e51015bd2d515b9f3f29b/69585/image1.png 200w,\n/static/c7b97877ec6e51015bd2d515b9f3f29b/497c6/image1.png 400w,\n/static/c7b97877ec6e51015bd2d515b9f3f29b/0756a/image1.png 768w","sizes":"(max-width: 768px) 100vw, 768px"}}},"author":{"id":"Kundan Singh","github":null,"avatar":null}}}}]},"markdownRemark":{"excerpt":"Identity is evolving, and developers are at the forefront of this transformation. Every day brings a new learning—adapting to new standards…","fields":{"slug":"/identity/developer-first-identity-provider-loginradius/"},"html":"<p>Identity is evolving, and developers are at the forefront of this transformation. Every day brings a new learning—adapting to new standards and refining approaches to building secure, seamless experiences.</p>\n<p>We’re here to support developers on that journey. We know how important simplicity, efficiency, and well-structured documentation are when working with identity and access management solutions. That’s why we’ve redesigned the <a href=\"https://www.loginradius.com/\">LoginRadius website</a>—to be faster, more intuitive, and developer-first in every way.</p>\n<p>The goal? Having them spend less time searching and more time building.</p>\n<h2 id=\"whats-new-and-improved-on-the-loginradius-website\" style=\"position:relative;\"><a href=\"#whats-new-and-improved-on-the-loginradius-website\" aria-label=\"whats new and improved on the loginradius website 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’s New and Improved on the LoginRadius Website?</h2>\n<p>LoginRadius’ vision is to give developers a product that simplifies identity management so they can focus on building, deploying, and scaling their applications. To enhance this experience, we’ve spent the last few months redesigning our interface— making navigation more intuitive and reassuring that essential resources are easily accessible.</p>\n<p>Here’s a closer look at what’s new and why it’s important:</p>\n<h3 id=\"a-developer-friendly-dark-theme\" style=\"position:relative;\"><a href=\"#a-developer-friendly-dark-theme\" aria-label=\"a developer friendly dark theme 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>A Developer-Friendly Dark Theme</h3>\n<p><img src=\"/f46881583c7518a93bb24e94c32320de/a-developer-friendly-dark-theme.webp\" alt=\"This image shows how LoginRadius offers several authentication methods like traditional login, social login, passwordless login, passkeys and more in a dark mode.\">    </p>\n<p>Developers spend long hours working in dark-themed IDEs and terminals, so we’ve designed the LoginRadius experience to be developer-friendly and align with that preference.</p>\n<p>The new dark mode reduces eye strain, enhances readability, and provides a seamless transition between a coding environment and our platform. Our new design features a clean, modern aesthetic with a consistent color scheme and Barlow typography, ensuring better readability. High-quality graphics and icons are thoughtfully placed to enhance the content without adding visual clutter.</p>\n<p>So, whether you’re navigating our API docs or configuring authentication into your system, our improved interface will make those extended development hours more comfortable and efficient.</p>\n<h3 id=\"clear-categorization-for-loginradius-capabilities\" style=\"position:relative;\"><a href=\"#clear-categorization-for-loginradius-capabilities\" aria-label=\"clear categorization for loginradius capabilities 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>Clear Categorization for LoginRadius Capabilities</h3>\n<p><img src=\"/e5358b82be414940f3fb146013845933/capabilities.webp\" alt=\"This image shows a breakdown of all the LoginRadius CIAM capabilities, including authentication, security, UX, scalability and multi-brand management.\"></p>\n<p>We’ve restructured our website to provide a straightforward breakdown of our customer identity and access management platform capabilities, helping you quickly find what you need:</p>\n<ul>\n<li>Authentication: Easily understand <a href=\"https://www.loginradius.com/blog/identity/authentication-option-for-your-product/\">how to choose the right login method</a>, from traditional passwords and OTPs to social login, federated SSO, and passkeys with few lines of code.</li>\n<li>Security: Implement no-code security features like bot detection, IP throttling, breached password alerts, DDoS protection, and adaptive MFA to safeguard user accounts.</li>\n<li>User Experience: Leverage AI builder, hosted pages, and drag-and-drop workflows to create smooth, branded sign-up and login experiences.</li>\n<li>High Performance &#x26; Scalability: Confidently scale with sub-100ms API response times, 100% uptime, 240K+ RPS, and 28+ global data center regions.</li>\n<li>Multi-Brand Management: Efficiently manage multiple identity apps, choosing isolated or shared data stores based on your brand’s unique needs.</li>\n</ul>\n<p>This structured layout ensures you can quickly understand each capability and how it integrates into your identity ecosystem.</p>\n<h3 id=\"developer-first-navigation\" style=\"position:relative;\"><a href=\"#developer-first-navigation\" aria-label=\"developer first navigation 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>Developer-First Navigation</h3>\n<p><img src=\"/a8c155c2b6faf3d5f4b4de4e2b14d763/developers-menu.webp\" alt=\"This image shows the LoginRadius menu bar, highlighting the developer dropdown.\">   </p>\n<p>We’ve been analyzing developer workflows to identify how you access key resources. That’s why we redesigned our navigation with one goal in mind: to reduce clicks and make essential resources readily available.</p>\n<p>The new LoginRadius structure puts APIs, SDKs, and integration guides right at the menu bar under the Developers dropdown so you can get started faster. Our Products, Solutions, and Customer Services are also clearly categorized, helping development teams quickly find the right tools and make informed decisions.</p>\n<h3 id=\"quick-understanding-of-integration-benefits\" style=\"position:relative;\"><a href=\"#quick-understanding-of-integration-benefits\" aria-label=\"quick understanding of integration benefits 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>Quick Understanding of Integration Benefits</h3>\n<p><img src=\"/b2f9a964a2da0ea83e2f8596b833bba7/we-support-your-tech-stack.webp\" alt=\"This image shows a list of popular programming languages and frameworks offered by LoginRadius.\"></p>\n<p>Developers now have a clear view of the tech stack available with LoginRadius, designed to support diverse business needs.</p>\n<p>Our platform offers pre-built SDKs for Node.js, Python, Java, and more, making CIAM integration seamless across popular programming languages and frameworks.</p>\n<h2 id=\"over-to-you-now\" style=\"position:relative;\"><a href=\"#over-to-you-now\" aria-label=\"over to you now 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>Over to You Now!</h2>\n<p>Check out our <a href=\"https://www.loginradius.com/\">revamped LoginRadius website</a> and see how the improved experience makes it easier to build, scale, and secure your applications.</p>\n<p>Do not forget to explore the improved navigation and API documentation, and get started with our free trial today. We’re excited to see what you’ll build with LoginRadius!</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":"February 21, 2025","updated_date":null,"description":"LoginRadius’ vision is to give developers a product that simplifies identity management so they can focus on building, deploying, and scaling their applications. To enhance this experience, we’ve redesigned our website interface, making navigation more intuitive and reassuring that essential resources are easily accessible.","title":"Revamped & Ready: Introducing the New Developer-First LoginRadius Website","tags":["Developer tools","API","Identity Management","User Authentication"],"pinned":true,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7857142857142858,"src":"/static/80b4e4fbe176a10a327d273504607f32/58556/hero-section.webp","srcSet":"/static/80b4e4fbe176a10a327d273504607f32/61e93/hero-section.webp 200w,\n/static/80b4e4fbe176a10a327d273504607f32/1f5c5/hero-section.webp 400w,\n/static/80b4e4fbe176a10a327d273504607f32/58556/hero-section.webp 800w,\n/static/80b4e4fbe176a10a327d273504607f32/99238/hero-section.webp 1200w,\n/static/80b4e4fbe176a10a327d273504607f32/7c22d/hero-section.webp 1600w,\n/static/80b4e4fbe176a10a327d273504607f32/1258b/hero-section.webp 2732w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},"pageContext":{"limit":6,"skip":702,"currentPage":118,"type":"///","numPages":161,"pinned":"ee8a4479-3471-53b1-bf62-d0d8dc3faaeb"}},"staticQueryHashes":["1171199041","1384082988","2100481360","23180105","528864852"]}