This repository has been archived by the owner on Jan 10, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sonichigo-stories-copy.json
1 lines (1 loc) · 230 KB
/
sonichigo-stories-copy.json
1
{"posts":[{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":1,"slugOverridden":false,"coverImage":"","autoGeneratedCover":"","brief":"sdfghj","content":"<p>sdfghj</p>\n","contentMarkdown":"sdfghj","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":6100.8625,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":false,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":false,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"6458ef3c8ed271d4a6ece34a","createdAt":"2023-05-08T12:46:52.634Z","updatedAt":"2023-05-08T12:46:52.634Z","type":"story","partOfPublication":true,"tweetOptions":{"enabled":false},"title":"asdfsdfghjkl;","cuid":"clheu7jkp001309la6xbbd9ha","dateAdded":"2023-05-08T12:46:52.633Z","hasCustomDate":null,"isCoverAttributionHidden":false,"coverImageAttribution":"","coverImagePhotographer":"","stickCoverToBottom":false,"slug":"asdfsdfghjkl--deleted","author":"60f6b06bd6a73079b398bede","sB":true,"isRepublished":false,"originalArticleURL":null,"readTime":1,"draft":"6458ef27b3e491000f6bfc27","publication":"60f6da61410a0224b5d4ed48","ogImage":null,"metaTitle":null,"metaDescription":null,"isNewsletterActivated":true,"dateDeleted":"2023-05-08T12:47:59.306Z","viewsUpdatedOn":1683550832185,"pollOptions":[],"badges":[],"questionReplies":[],"contributors":[],"uniqueReactions":[],"reactionToCountMapUnique":{"any":1},"id":"6458ef3c8ed271d4a6ece34a"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":14,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/npxXWgQ33ZQ/upload/82a2ea6787b64dd6c7ad437e49cffb12.jpeg","autoGeneratedCover":"","brief":"Testing is a crucial aspect of software development that ensures the quality, reliability, and performance of a product. In this blog, we will discuss the importance of testing, its benefits, and why it is essential for businesses.\nWhy is Testing Imp...","content":"<p>Testing is a crucial aspect of software development that ensures the quality, reliability, and performance of a product. In this blog, we will discuss the importance of testing, its benefits, and why it is essential for businesses.</p>\n<h2 id=\"heading-why-is-testing-important\">Why is Testing Important?</h2>\n<p>It helps us in ensuring the quality of the software by identifying and fixing bugs, errors, and defects that can impact the functionality and performance of the product. Testing is important for several reasons:</p>\n<ol>\n<li><p>Customer Satisfaction: It helps to ensure that the software meets the needs and expectations of the customers. This, in turn, leads to greater customer satisfaction and loyalty.</p>\n</li>\n<li><p>Cost-Effective: Early detection of defects and issues through testing helps to save money by avoiding the cost of fixing them at a later stage.</p>\n</li>\n<li><p>Risk Mitigation: It mitigates the risk of software failure by identifying and fixing potential problems before they occur.</p>\n</li>\n<li><p>Compliance: Testing helps to ensure compliance with regulatory and legal requirements.</p>\n</li>\n</ol>\n<h2 id=\"heading-benefits-of-testing\">Benefits of Testing</h2>\n<p>Testing has several benefits, including:</p>\n<ol>\n<li><p>Improved Quality: Improvement in the quality of software by identifying and fixing defects and errors.</p>\n</li>\n<li><p>Reduced Costs: Early detection of defects through testing helps to reduce the cost of fixing them at a later stage.</p>\n</li>\n<li><p>Better Time Management: Testing helps to identify defects and errors early on, which saves time and avoids delays in the development process.</p>\n</li>\n<li><p>Increased Reliability: Testing helps to ensure the reliability of the software by identifying and fixing potential problems before they occur.</p>\n</li>\n</ol>\n<h3 id=\"heading-why-is-testing-essential-for-businesses\">Why is Testing Essential for Businesses?</h3>\n<p>Testing is essential for businesses for several reasons:</p>\n<ol>\n<li><p>Product Quality: Testing helps to ensure the quality of the product, which is essential for customer satisfaction and loyalty.</p>\n</li>\n<li><p>Time-to-Market: Testing helps to save time by identifying and fixing defects early on, which avoids delays in the development process and reduces time-to-market.</p>\n</li>\n<li><p>Cost-Effective: Early detection of defects through testing helps to reduce the cost of fixing them at a later stage, which saves money and resources.</p>\n</li>\n<li><p>Reputation: Testing helps to protect the reputation of the business by ensuring that the software meets the needs and expectations of the customers.</p>\n</li>\n</ol>\n<h2 id=\"heading-conclusion\">Conclusion</h2>\n<p>Testing is a critical aspect of software development that ensures the quality, reliability, and performance of a product. Testing is essential for businesses as it helps to ensure product quality, reduce time-to-market, save costs, and protect the reputation of the business. By investing in testing, businesses can improve the quality of their products and ensure customer satisfaction, which is essential for success in today's competitive marketplace.</p>\n","contentMarkdown":"Testing is a crucial aspect of software development that ensures the quality, reliability, and performance of a product. In this blog, we will discuss the importance of testing, its benefits, and why it is essential for businesses.\n\n## Why is Testing Important?\n\nIt helps us in ensuring the quality of the software by identifying and fixing bugs, errors, and defects that can impact the functionality and performance of the product. Testing is important for several reasons:\n\n1. Customer Satisfaction: It helps to ensure that the software meets the needs and expectations of the customers. This, in turn, leads to greater customer satisfaction and loyalty.\n \n2. Cost-Effective: Early detection of defects and issues through testing helps to save money by avoiding the cost of fixing them at a later stage.\n \n3. Risk Mitigation: It mitigates the risk of software failure by identifying and fixing potential problems before they occur.\n \n4. Compliance: Testing helps to ensure compliance with regulatory and legal requirements.\n \n\n## Benefits of Testing\n\nTesting has several benefits, including:\n\n1. Improved Quality: Improvement in the quality of software by identifying and fixing defects and errors.\n \n2. Reduced Costs: Early detection of defects through testing helps to reduce the cost of fixing them at a later stage.\n \n3. Better Time Management: Testing helps to identify defects and errors early on, which saves time and avoids delays in the development process.\n \n4. Increased Reliability: Testing helps to ensure the reliability of the software by identifying and fixing potential problems before they occur.\n \n\n### Why is Testing Essential for Businesses?\n\nTesting is essential for businesses for several reasons:\n\n1. Product Quality: Testing helps to ensure the quality of the product, which is essential for customer satisfaction and loyalty.\n \n2. Time-to-Market: Testing helps to save time by identifying and fixing defects early on, which avoids delays in the development process and reduces time-to-market.\n \n3. Cost-Effective: Early detection of defects through testing helps to reduce the cost of fixing them at a later stage, which saves money and resources.\n \n4. Reputation: Testing helps to protect the reputation of the business by ensuring that the software meets the needs and expectations of the customers.\n \n\n## Conclusion\n\nTesting is a critical aspect of software development that ensures the quality, reliability, and performance of a product. Testing is essential for businesses as it helps to ensure product quality, reduce time-to-market, save costs, and protect the reputation of the business. By investing in testing, businesses can improve the quality of their products and ensure customer satisfaction, which is essential for success in today's competitive marketplace.","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["56744723958ef13879b9549b","56744723958ef13879b952a1"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":6088.9114,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":false,"enableToc":true,"toc":[[{"id":"7ed370b1-c86e-474f-b91b-6a97d7c88c3a","level":2,"previousLevel":null,"parentId":null,"slug":"why-is-testing-important","title":"Why is Testing Important?"}],[{"id":"09942b5b-d7ff-4f18-8d20-e0ab92332fc9","level":2,"previousLevel":2,"parentId":null,"slug":"benefits-of-testing","title":"Benefits of Testing"}],[{"id":"d73c0e95-63d1-44ea-bf54-713cccda5c44","level":3,"previousLevel":2,"parentId":"09942b5b-d7ff-4f18-8d20-e0ab92332fc9","slug":"why-is-testing-essential-for-businesses","title":"Why is Testing Essential for Businesses?"}],[{"id":"c9645bcb-8cfc-4207-829d-e8f26bf53ad2","level":2,"previousLevel":3,"parentId":null,"slug":"conclusion","title":"Conclusion"}]],"numUniqueUsersWhoReacted":0,"_id":"6450ba74c9ec8915767d61a4","createdAt":"2023-05-02T07:23:32.520Z","updatedAt":"2023-05-02T07:23:32.520Z","type":"story","partOfPublication":true,"tweetOptions":{"enabled":false},"title":"Need of Testing and why we need it ?","cuid":"clh5y0mcl000109l52sg45a53","dateAdded":"2023-05-02T07:23:32.517Z","hasCustomDate":null,"isCoverAttributionHidden":true,"coverImageAttribution":"https://unsplash.com/es/@glenncarstenspeters","coverImagePhotographer":"Glenn Carstens-Peters","slug":"need-of-testing-and-why-we-need-it","author":"60f6b06bd6a73079b398bede","sB":false,"isRepublished":false,"originalArticleURL":null,"readTime":2,"draft":"641c17a97e98d1001067400c","publication":"60f6da61410a0224b5d4ed48","ogImage":null,"metaTitle":null,"metaDescription":null,"isNewsletterActivated":true,"viewsUpdatedOn":1689787831969,"pollOptions":[],"badges":[],"questionReplies":[],"contributors":[],"uniqueReactions":[],"reactionToCountMapUnique":{"any":1},"id":"6450ba74c9ec8915767d61a4"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":121,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1660356441025/-NnXTGAbs.jpg","autoGeneratedCover":"","brief":"API automated testing is critical for product quality and CI/CD processes. Unlike GUI tests, API tests can cope with short release cycles and frequent changes — without breaking the test outputs.\nWhat is API testing?\nIn software application developme...","content":"<p>API automated testing is critical for product quality and CI/CD processes. Unlike GUI tests, API tests can cope with short release cycles and frequent changes — <em>without breaking the test outputs</em>.</p>\n<h1 id=\"heading-what-is-api-testing\">What is API testing?</h1>\n<p>In software application development, <strong>API</strong> is the middle layer between the <em>UI and the database layer</em>. They enable the communication and data exchange from one software system to another.</p>\n<p>API testing is a software testing practice that tests the APIs directly — from their functionality, reliability, performance, to security. Part of integration testing, API testing effectively validates the logic of the build architecture within a short amount of time.</p>\n<h2 id=\"heading-types-of-api-testing\">Types of API Testing</h2>\n<p>There are 6 main types of API testing that must be done and to ensure that an API is working properly and there is no breakage from either the Server or Client Side, these are as follows :-</p>\n<ol>\n<li>Validation Testing</li>\n<li>Functional testing</li>\n<li>Security testing</li>\n<li>Load testing</li>\n<li>Runtime and error detection</li>\n<li>Penetration testing</li>\n</ol>\n<h1 id=\"heading-how-keploy-comes-in-the-play\">How Keploy comes in the Play ?</h1>\n<p><a target=\"_blank\" href=\"https://github.com/keploy/keploy\">Keploy</a> is a no-code testing platform that generates tests from API calls. It converts API calls into testcases and Mock test cases are automatically generated with the actual request/responses.</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1660355385013/FLZjr_OuU.png\" alt=\"image.png\" /></p>\n<h2 id=\"heading-key-features\">Key Features</h2>\n<ul>\n<li><p><strong>Convert API calls from anywhere to Test-Case</strong></p>\n</li>\n<li><p><strong>Automatically mocks network/external dependencies for all CRUD operations with correct responses.</strong></p>\n</li>\n<li><p><strong>It identifies noisy fields in the responses accurately like (timestamps, random values) to ensure high quality tests.</strong></p>\n</li>\n<li><p><strong>It has native integrations with popular testing libraries like go-test. Code coverage will be reported with existing and Keploy recorded test cases and can also be integrated in existing CI pipelines easily.</strong></p>\n</li>\n<li><p><strong>Keploy has Instrumentation/Integration framework to easily add the new libraries/drivers within ~100 lines of code.</strong></p>\n</li>\n</ul>\n<h1 id=\"heading-what-is-pynt\">What is Pynt ?</h1>\n<p><a target=\"_blank\" href=\"https://github.com/pynt-io/pynt\">Pynt</a> is an API security solution for developers and testers. It generates and runs security tests automatically from existing Postman and Newman collections. </p>\n<p>While working with Pynt, One thing that is really important is to make sure that the API has more extensive functional tests are, the more the security tests will cover. For example, more APIs, more users, more requests, and full use of the parameters will trigger broader and richer dynamic security tests.</p>\n<p>We can provide any valid functional Postman test collection for API/s you have. The product generates security tests from it, runs them, and provides you with the results.</p>\n<p><img src=\"https://user-images.githubusercontent.com/107360829/181883204-fed73a15-8c9a-4087-b28b-22f53884ed44.gif\" alt=\"image.png\" /></p>\n<hr />\n<p>Personally, I liked Keploy usage more as Pynt is still in development phase and Keploy has provided me with better Developer Experience that in now-a-days many product lacks, which is very important point of focus as majority of user for such tools and libraries are Developers themselves.</p>\n","contentMarkdown":"API automated testing is critical for product quality and CI/CD processes. Unlike GUI tests, API tests can cope with short release cycles and frequent changes — *without breaking the test outputs*.\n\n# What is API testing?\n\nIn software application development, **API** is the middle layer between the *UI and the database layer*. They enable the communication and data exchange from one software system to another.\n\nAPI testing is a software testing practice that tests the APIs directly — from their functionality, reliability, performance, to security. Part of integration testing, API testing effectively validates the logic of the build architecture within a short amount of time.\n\n## Types of API Testing\n\nThere are 6 main types of API testing that must be done and to ensure that an API is working properly and there is no breakage from either the Server or Client Side, these are as follows :-\n\n1. Validation Testing\n2. Functional testing\n3. Security testing\n4. Load testing\n5. Runtime and error detection\n6. Penetration testing\n\n# How Keploy comes in the Play ?\n\n[Keploy](https://github.com/keploy/keploy) is a no-code testing platform that generates tests from API calls. It converts API calls into testcases and Mock test cases are automatically generated with the actual request/responses.\n\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1660355385013/FLZjr_OuU.png align=\"left\")\n\n## Key Features\n\n- **Convert API calls from anywhere to Test-Case**\n\n- **Automatically mocks network/external dependencies for all CRUD operations with correct responses.**\n\n- **It identifies noisy fields in the responses accurately like (timestamps, random values) to ensure high quality tests.**\n\n- **It has native integrations with popular testing libraries like go-test. Code coverage will be reported with existing and Keploy recorded test cases and can also be integrated in existing CI pipelines easily.**\n\n- **Keploy has Instrumentation/Integration framework to easily add the new libraries/drivers within ~100 lines of code.**\n\n# What is Pynt ?\n\n[Pynt](https://github.com/pynt-io/pynt) is an API security solution for developers and testers. It generates and runs security tests automatically from existing Postman and Newman collections. \n\nWhile working with Pynt, One thing that is really important is to make sure that the API has more extensive functional tests are, the more the security tests will cover. For example, more APIs, more users, more requests, and full use of the parameters will trigger broader and richer dynamic security tests.\n\nWe can provide any valid functional Postman test collection for API/s you have. The product generates security tests from it, runs them, and provides you with the results.\n\n![image.png](https://user-images.githubusercontent.com/107360829/181883204-fed73a15-8c9a-4087-b28b-22f53884ed44.gif align=\"left\")\n\n---\n\nPersonally, I liked Keploy usage more as Pynt is still in development phase and Keploy has provided me with better Developer Experience that in now-a-days many product lacks, which is very important point of focus as majority of user for such tools and libraries are Developers themselves.","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["56744723958ef13879b95245","56744723958ef13879b9549b","62a981410baf4306d9495519"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5590.1438,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":false,"enableToc":true,"toc":[[{"id":"014d2ff4-7424-44b6-8f44-aed2141e4f66","level":1,"previousLevel":null,"parentId":null,"slug":"what-is-api-testing","title":"What is API testing?"}],[{"id":"f79d4e18-afc9-44cf-9883-99f1d00b5649","level":2,"previousLevel":1,"parentId":"014d2ff4-7424-44b6-8f44-aed2141e4f66","slug":"types-of-api-testing","title":"Types of API Testing"}],[{"id":"44c0ab15-7716-41f3-aafb-6964d9801cd7","level":1,"previousLevel":2,"parentId":null,"slug":"how-keploy-comes-in-the-play","title":"How Keploy comes in the Play ?"}],[{"id":"65943e72-c39a-4bf6-abcb-84c27f9ff57d","level":2,"previousLevel":1,"parentId":"44c0ab15-7716-41f3-aafb-6964d9801cd7","slug":"key-features","title":"Key Features"}],[{"id":"c4b25eb2-d2db-4ccb-a66d-7cbe07a9fae8","level":1,"previousLevel":2,"parentId":null,"slug":"what-is-pynt","title":"What is Pynt ?"}]],"numUniqueUsersWhoReacted":0,"_id":"62fa4077fffdab933bdeca25","title":"API Automation :- Testing","subtitle":"Keploy OR Pynt ?","pollOptions":[],"type":"story","coverImageAttribution":"","coverImagePhotographer":"","isCoverAttributionHidden":false,"ogImage":"","metaTitle":"Keploy vs Pynt","metaDescription":"Keploy is a no-code testing platform that generates tests from API calls. Pynt is an API Security testing solution built on top of Newman & Postman.","isRepublished":false,"originalArticleURL":"","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"api-automation-testing","importedFromMedium":false,"dateAdded":"2022-08-15T12:47:51.357Z","hasCustomDate":false,"hasScheduledDate":false,"stickCoverToBottom":false,"badges":[],"questionReplies":[],"contributors":[],"cuid":"cl6ur47k90jc3genvaxr85ko8","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"62f65070fffdab933bde4791","readTime":3,"__v":1,"viewsUpdatedOn":1698454825046,"series":null,"dateUpdated":"2022-08-18T14:48:32.326Z","pendingPublicationApproval":false,"uniqueReactions":[],"reactionToCountMapUnique":{"any":1},"id":"62fa4077fffdab933bdeca25"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":288,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1656315514190/aZse392qg.png","autoGeneratedCover":"","brief":"Kubernetes became a central part of the container revolution by making containerized systems significantly more straightforward to handle at scale. Since it's initial release in June 2014, the Kubernetes as a term, has been associated with words like...","content":"<p>Kubernetes became a central part of the container revolution by making containerized systems significantly more straightforward to handle at scale. Since it's initial release in June 2014, the Kubernetes as a term, has been associated with words like k8s, k9s and very recently with k3s as well.</p>\n<p>But before we get started and deep dive into more about - k9s & k3s, let's first get us familiarize ourselves with Kubernetes, shall we?</p>\n<p>So, the first thing that comes in mind is ~ <em>What is kubernetes?</em></p>\n<h1 id=\"heading-what-is-kubernetes\">What is Kubernetes?</h1>\n<p>Kubernetes is a standard container orchestration open-source platform, that is, for managing applications constructed from several, often self-contained runtimes called containers. It is a widely used tool to deploy and update the application without any downtime.</p>\n<p>It is generally known as k8s or “kube”, where 8 in 'k8s' is a abbreviation for \"ubernete\".<br />Kubernetes also handles things like upgrades of your containers, so when you make a new release of your website, it will gradually launch containers with the new version and gradually kill off the old ones, usually over a minute or two.</p>\n<h2 id=\"heading-how-it-helps-us\">How it helps us?</h2>\n<p>Kubernetes orchestration allows you to build application services that span multiple containers, schedule those containers across a cluster, scale those containers, and manage the health of those containers over time. With Kubernetes you can take effective steps toward better IT security.</p>\n<p>Kubernetes also needs to integrate with networking, storage, security, telemetry, and other services to provide a comprehensive container infrastructure.</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1656312811622/kldSdyrjG.png\" alt=\"image.png\" /></p>\n<ul>\n<li><p>Microservices in containers make it** easier to orchestrate services**, including storage, networking, and security. This significantly multiplies the number of containers in your environment, and as those containers accumulate, the complexity also grows.</p>\n</li>\n<li><p>It fixes a lot of common problems with container proliferation by sorting containers together into \"pods.\" Pods <strong>add a layer of abstraction</strong> to grouped containers.</p>\n</li>\n<li><p>Other parts of Kubernetes help you** balance loads** across these pods and ensure you have the right number of containers running to support your workloads.</p>\n</li>\n</ul>\n<h2 id=\"heading-what-is-kubernetes-cluster\">What is Kubernetes-Cluster?</h2>\n<p>A working Kubernetes deployment is called a cluster. You can visualize a Kubernetes cluster as two parts: <strong>Master and Node</strong>.</p>\n<ul>\n<li><p><strong>Node</strong>: Where we run our applications</p>\n</li>\n<li><p><strong>Master</strong>: Used to coordinate the cluster.</p>\n</li>\n</ul>\n<p>Each node is its own Linux environment, and which could be either a physical or virtual machine and each node runs pods, which are made up of containers.</p>\n<p>Master is responsible for managing the cluster. The master nodes will coordinate all the activities in your cluster, such as scheduling applications, maintaining their desired state, scaling applications, and rolling new updates.</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1656313435775/s5y0nfdyo.png\" alt=\"image.png\" /></p>\n<h1 id=\"heading-starting-with-k9s\">Starting with K9s</h1>\n<p><strong>k9s</strong> is a terminal-based UI for managing the Kubernetes clusters, that aims to simplify navigating, observing, and managing applications in k8s. K9s continuously monitors Kubernetes clusters for changes and provides shortcut commands to interact with the observed resources.</p>\n<h2 id=\"heading-installation\">Installation</h2>\n<p>K9s is open-source software and available for various operating systems with instructions on this official repository. If you use a package manager, K9s will be available through it.</p>\n<ul>\n<li><p>On Mac OS, you can install K9s with brew: brew install k9s</p>\n</li>\n<li><p>On Windows, either via <em>scoop</em> or <em>chocolatey</em>: scoop install k9s choco install k9s</p>\n</li>\n</ul>\n<h3 id=\"heading-usage\">Usage</h3>\n<p>K9s runs in your terminal, and if you have installed it according to the instructions for your operating system, you should be able to start it with the <code>k9s</code> command. It will by default read your current KUBECONFIG, which in turn is by default read from <code>$HOME/.kube/config.</code></p>\n<p>Unfortunately, K9s slows down considerably when processing large log amounts. At such moments, K9s wholly used two cores of my Intel Xeon E312xx CPU and could even freeze.</p>\n<h1 id=\"heading-issues-and-troubleshooting\">Issues and Troubleshooting</h1>\n<p>One of the biggest issue is that, deployment failure messages on Kubernetes are complex and not intuitive for debugging. Users need to identify the errors from pod logs, pod events(describe pod), pod status, etc. Developers spend a lot of time and effort demystifying the cryptic messages K8s throws up, perfectly valuable time that could have otherwise gone in building core functionalities of the application.</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1656314971586/nRKD_JTv5.png\" alt=\"image.png\" /></p>\n<h2 id=\"heading-komodor-a-trouble-shooting-platform\">Komodor - A Trouble Shooting Platform</h2>\n<p>Here <strong>Komodor</strong> makes things interesting by handling the k8s-native troubleshooting , so that developers can save a lot of time actually developing instead of wasting hours of their valuable time troubleshooting and focus on building interesting stuff. It tracks changes across your entire k8s stack, identifies issues, uncovers their root cause and delivers the context you need to troubleshoot efficiently and independently.</p>\n<p>Komodor supports configurations per Monitor, meaning it's monitors are being configured on a cluster level, each monitor supports the following configurations:</p>\n<ul>\n<li><p><strong>Trigger conditions</strong> - specify when this monitor should be triggered, conditions vary per monitor.</p>\n</li>\n<li><p><strong>Scope</strong> - which resources should be monitored, the scope can be configured for the entire cluster, specific namespaces, annotations or labels, the relationship between the selected resources is currently OR relationship.</p>\n</li>\n<li><p><strong>Sink/Notification</strong> - where do you want to receive notifications.</p>\n</li>\n</ul>\n<hr />\n<h1 id=\"heading-follow-up-resources\">Follow up Resources</h1>\n<ul>\n<li><p>Kubernetes Basics - <a target=\"_blank\" href=\"https://kubernetes.io/docs/tutorials/kubernetes-basics/\">https://kubernetes.io/docs/tutorials/kubernetes-basics/</a></p>\n</li>\n<li><p>K9s Commands - <a target=\"_blank\" href=\"https://k9scli.io/topics/commands/\">https://k9scli.io/topics/commands/</a></p>\n</li>\n<li><p>Kubernetes Tutorial for Beginners - <a target=\"_blank\" href=\"https://spacelift.io/blog/kubernetes-tutorial\">https://spacelift.io/blog/kubernetes-tutorial</a></p>\n</li>\n<li><p>Komodor Resource Library - <a target=\"_blank\" href=\"https://komodor.com/resource-library/\">https://komodor.com/resource-library/</a></p>\n</li>\n</ul>\n","contentMarkdown":"Kubernetes became a central part of the container revolution by making containerized systems significantly more straightforward to handle at scale. Since it's initial release in June 2014, the Kubernetes as a term, has been associated with words like k8s, k9s and very recently with k3s as well.\n\nBut before we get started and deep dive into more about - k9s & k3s, let's first get us familiarize ourselves with Kubernetes, shall we?\n\nSo, the first thing that comes in mind is ~ *What is kubernetes?*\n\n# What is Kubernetes?\n\nKubernetes is a standard container orchestration open-source platform, that is, for managing applications constructed from several, often self-contained runtimes called containers. It is a widely used tool to deploy and update the application without any downtime.\n\nIt is generally known as k8s or “kube”, where 8 in 'k8s' is a abbreviation for \"ubernete\". \nKubernetes also handles things like upgrades of your containers, so when you make a new release of your website, it will gradually launch containers with the new version and gradually kill off the old ones, usually over a minute or two.\n\n## How it helps us?\n\nKubernetes orchestration allows you to build application services that span multiple containers, schedule those containers across a cluster, scale those containers, and manage the health of those containers over time. With Kubernetes you can take effective steps toward better IT security.\n\nKubernetes also needs to integrate with networking, storage, security, telemetry, and other services to provide a comprehensive container infrastructure.\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1656312811622/kldSdyrjG.png align=\"left\")\n\n* Microservices in containers make it\\*\\* easier to orchestrate services\\*\\*, including storage, networking, and security. This significantly multiplies the number of containers in your environment, and as those containers accumulate, the complexity also grows.\n \n* It fixes a lot of common problems with container proliferation by sorting containers together into \"pods.\" Pods **add a layer of abstraction** to grouped containers.\n \n* Other parts of Kubernetes help you\\*\\* balance loads\\*\\* across these pods and ensure you have the right number of containers running to support your workloads.\n \n\n## What is Kubernetes-Cluster?\n\nA working Kubernetes deployment is called a cluster. You can visualize a Kubernetes cluster as two parts: **Master and Node**.\n\n* **Node**: Where we run our applications\n \n* **Master**: Used to coordinate the cluster.\n \n\nEach node is its own Linux environment, and which could be either a physical or virtual machine and each node runs pods, which are made up of containers.\n\nMaster is responsible for managing the cluster. The master nodes will coordinate all the activities in your cluster, such as scheduling applications, maintaining their desired state, scaling applications, and rolling new updates.\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1656313435775/s5y0nfdyo.png align=\"left\")\n\n# Starting with K9s\n\n**k9s** is a terminal-based UI for managing the Kubernetes clusters, that aims to simplify navigating, observing, and managing applications in k8s. K9s continuously monitors Kubernetes clusters for changes and provides shortcut commands to interact with the observed resources.\n\n## Installation\n\nK9s is open-source software and available for various operating systems with instructions on this official repository. If you use a package manager, K9s will be available through it.\n\n* On Mac OS, you can install K9s with brew: brew install k9s\n \n* On Windows, either via *scoop* or *chocolatey*: scoop install k9s choco install k9s\n \n\n### Usage\n\nK9s runs in your terminal, and if you have installed it according to the instructions for your operating system, you should be able to start it with the `k9s` command. It will by default read your current KUBECONFIG, which in turn is by default read from `$HOME/.kube/config.`\n\nUnfortunately, K9s slows down considerably when processing large log amounts. At such moments, K9s wholly used two cores of my Intel Xeon E312xx CPU and could even freeze.\n\n# Issues and Troubleshooting\n\nOne of the biggest issue is that, deployment failure messages on Kubernetes are complex and not intuitive for debugging. Users need to identify the errors from pod logs, pod events(describe pod), pod status, etc. Developers spend a lot of time and effort demystifying the cryptic messages K8s throws up, perfectly valuable time that could have otherwise gone in building core functionalities of the application.\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1656314971586/nRKD_JTv5.png align=\"left\")\n\n## Komodor - A Trouble Shooting Platform\n\nHere **Komodor** makes things interesting by handling the k8s-native troubleshooting , so that developers can save a lot of time actually developing instead of wasting hours of their valuable time troubleshooting and focus on building interesting stuff. It tracks changes across your entire k8s stack, identifies issues, uncovers their root cause and delivers the context you need to troubleshoot efficiently and independently.\n\nKomodor supports configurations per Monitor, meaning it's monitors are being configured on a cluster level, each monitor supports the following configurations:\n\n* **Trigger conditions** - specify when this monitor should be triggered, conditions vary per monitor.\n \n* **Scope** - which resources should be monitored, the scope can be configured for the entire cluster, specific namespaces, annotations or labels, the relationship between the selected resources is currently OR relationship.\n \n* **Sink/Notification** - where do you want to receive notifications.\n \n\n---\n\n# Follow up Resources\n\n* Kubernetes Basics - [https://kubernetes.io/docs/tutorials/kubernetes-basics/](https://kubernetes.io/docs/tutorials/kubernetes-basics/)\n \n* K9s Commands - [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/)\n \n* Kubernetes Tutorial for Beginners - [https://spacelift.io/blog/kubernetes-tutorial](https://spacelift.io/blog/kubernetes-tutorial)\n \n* Komodor Resource Library - [https://komodor.com/resource-library/](https://komodor.com/resource-library/)","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["56744723958ef13879b9522c","58456f2afc2da7579e5f3ed0","62b95f5eb86f939ac81b94ea","62b95f5eb86f939ac81b94eb"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5487.1354,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35486","5c090d96c2a9c2a674d35488","567453d0b73d6a82ac8c5ab9","567453d0b73d6a82ac8c5abc","5c090d96c2a9c2a674d3548b","5d9dd859f31791c942dc5b52","567453d0b73d6a82ac8c5abd"],"totalReactions":12,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":true,"toc":[[{"id":"e013d231-a2ff-4aa9-899f-65fc821899fd","level":1,"previousLevel":null,"parentId":null,"slug":"what-is-kubernetes","title":"What is Kubernetes?"}],[{"id":"277dc058-28c2-48cf-abac-d20964a72b9b","level":2,"previousLevel":1,"parentId":"e013d231-a2ff-4aa9-899f-65fc821899fd","slug":"how-it-helps-us","title":"How it helps us?"}],[{"id":"2eb5ffa3-fa40-46b6-b6b7-64b47c71b924","level":2,"previousLevel":2,"parentId":"e013d231-a2ff-4aa9-899f-65fc821899fd","slug":"what-is-kubernetes-cluster","title":"What is Kubernetes-Cluster?"}],[{"id":"e1ab23ba-3f21-4d4c-99da-a0c5e46309c2","level":1,"previousLevel":2,"parentId":null,"slug":"starting-with-k9s","title":"Starting with K9s"}],[{"id":"9d9e0899-23df-4fec-8bbf-66aa84fd88e6","level":2,"previousLevel":1,"parentId":"e1ab23ba-3f21-4d4c-99da-a0c5e46309c2","slug":"installation","title":"Installation"}],[{"id":"74ba8902-178e-4266-9f4b-8962000c19c6","level":3,"previousLevel":2,"parentId":"9d9e0899-23df-4fec-8bbf-66aa84fd88e6","slug":"usage","title":"Usage"}],[{"id":"abcc4ea2-b384-4ef9-8e75-4822479af59f","level":1,"previousLevel":3,"parentId":null,"slug":"issues-and-troubleshooting","title":"Issues and Troubleshooting"}],[{"id":"849cb138-75a9-47b1-bc30-a75a19efdacd","level":2,"previousLevel":1,"parentId":"abcc4ea2-b384-4ef9-8e75-4822479af59f","slug":"komodor-a-trouble-shooting-platform","title":"Komodor - A Trouble Shooting Platform"}],[{"id":"f63bd1d7-8451-4a93-9844-0860da9a447f","level":1,"previousLevel":2,"parentId":null,"slug":"follow-up-resources","title":"Follow up Resources"}]],"numUniqueUsersWhoReacted":0,"_id":"62b95f5eb86f939ac81b94e9","title":"Introduction to Kubernetes","subtitle":"Getting Started with k8s & k9s","type":"story","coverImageAttribution":"","coverImagePhotographer":"","isCoverAttributionHidden":false,"ogImage":"","metaTitle":"Introduction to Kubernetes","metaDescription":"","isRepublished":false,"originalArticleURL":"","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"introduction-to-kubernetes","importedFromMedium":false,"dateAdded":"2022-06-22T07:42:09.000Z","hasCustomDate":true,"hasScheduledDate":false,"stickCoverToBottom":false,"pollOptions":[],"badges":[],"questionReplies":[],"contributors":[],"cuid":"cl4wfmly00jk78unvco6o61gg","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"62b94e4cb86f939ac81b9215","readTime":4,"__v":1,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_567453d0b73d6a82ac8c5abd":1},"viewsUpdatedOn":1698372027919,"series":null,"dateUpdated":"2023-01-12T12:30:58.036Z","pendingPublicationApproval":false,"uniqueReactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35486","5c090d96c2a9c2a674d35488","567453d0b73d6a82ac8c5ab9","567453d0b73d6a82ac8c5abc","5c090d96c2a9c2a674d3548b","5d9dd859f31791c942dc5b52","567453d0b73d6a82ac8c5abd"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d35484":0},"id":"62b95f5eb86f939ac81b94e9"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":241,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1654066415052/xngmP7vgz.jpg","autoGeneratedCover":"","brief":"Introduction\nKomodor is the kubernetes troubleshooting platform that monitors your entire k8s stack, identifies issues, helps in uncovering their root cause and delivers the context you need to troubleshoot efficiently and independently. \nAnd ValidKu...","content":"<h2 id=\"heading-introduction\">Introduction</h2>\n<p><a target=\"_blank\" href=\"https://komodor.com/\">Komodor</a> is the kubernetes troubleshooting platform that monitors your entire k8s stack, identifies issues, helps in uncovering their root cause and delivers the context you need to troubleshoot efficiently and independently. </p>\n<p>And <a target=\"_blank\" href=\"https://validkube.com/\">ValidKube</a> is the OSS is a simple web tool that combines a few other OSS tools which allows quick scanning of YAMLs for hygiene, security and validity, it's made and maintained by the Komodor. </p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1653827184637/eV9ZXSFWm.png\" alt=\"image.png\" /></p>\n<h2 id=\"heading-what-validkube-does\">What ValidKube does?</h2>\n<p>In the last few years, there are many companies that are focusing more on the development part of DevOps making the work of developers easy, <strong>ValidKube </strong>being one of tools that is focused on making the developers work and experience both smooth and easy. Working with Kubernetes and YAML files as the beginner is really difficult sometimes, as you have to debug and making sure that clusters are secure. And this is where ValidKube comes in, it simplifies the developers kubernetes deployments, since it's and online platform so no kind of installations are required.</p>\n<p>It can be just run from your browser, and it will validate & clean the files for you.</p>\n<h2 id=\"heading-features\">Features</h2>\n<p>As we discussed, ValidKube project uses other opensource projects as it's part to provide best features. It has following capabilities:-</p>\n<ul>\n<li><strong>Validate </strong>- Verify your Kubernetes configuration files using <a target=\"_blank\" href=\"https://github.com/instrumenta/kubeval\">@kubeval</a></li>\n<li><strong>Clean </strong>- Remove clutter from your Kubernetes manifests using <a target=\"_blank\" href=\"https://github.com/itaysk/kubectl-neat\">@kubectl-neat</a></li>\n<li><strong>Secure </strong>- Scan your YAML code for security vulnerabilities using <a target=\"_blank\" href=\"https://github.com/aquasecurity/trivy\">@trivy</a></li>\n<li><strong>Audit </strong>-Validation of best practices for your yaml using <a target=\"_blank\" href=\"https://github.com/FairwindsOps/polaris\">@polaris</a></li>\n</ul>\n<h3 id=\"heading-how-it-works\">How it works?</h3>\n<p>We will be using YAML file mentioned below:-</p>\n<pre><code class=\"lang-yaml\"><span class=\"hljs-attr\">apiVersion:</span> <span class=\"hljs-string\">apps/v1</span>\n<span class=\"hljs-attr\">kind:</span> <span class=\"hljs-string\">Deployment</span>\n<span class=\"hljs-attr\">metadata:</span>\n <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">nginx-deployment</span>\n <span class=\"hljs-attr\">namespace:</span> <span class=\"hljs-string\">example</span>\n <span class=\"hljs-attr\">labels:</span>\n <span class=\"hljs-attr\">app:</span> <span class=\"hljs-string\">nginx</span>\n<span class=\"hljs-attr\">spec:</span>\n <span class=\"hljs-attr\">replicas:</span> <span class=\"hljs-string\">\"Wrong\"</span>\n <span class=\"hljs-attr\">selector:</span>\n <span class=\"hljs-attr\">matchLabels:</span>\n <span class=\"hljs-attr\">app:</span> <span class=\"hljs-string\">nginx</span>\n <span class=\"hljs-attr\">template:</span>\n <span class=\"hljs-attr\">metadata:</span>\n <span class=\"hljs-attr\">labels:</span>\n <span class=\"hljs-attr\">app:</span> <span class=\"hljs-string\">nginx</span>\n <span class=\"hljs-attr\">spec:</span>\n <span class=\"hljs-attr\">containers:</span>\n <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">name:</span> <span class=\"hljs-string\">nginx</span>\n <span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">nginx:1.14.2</span>\n <span class=\"hljs-attr\">args:</span> []\n <span class=\"hljs-attr\">ports:</span>\n <span class=\"hljs-bullet\">-</span> <span class=\"hljs-attr\">containerPort:</span> <span class=\"hljs-number\">80</span>\n <span class=\"hljs-attr\">resources:</span> {}\n</code></pre>\n<p>Once the sample YAML is up, click on run and it will validate whether the YAML file is correct or not.</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1653828754379/K60gSGM-0.png\" alt=\"image.png\" /></p>\n<p>It validates and throw an error, which is correct as we can see <code>spec.replicas</code> is in the form of the string and we know that's the wrong format, it can either be in the form of <code>Integer</code> or <code>Null</code>. Now let's change it value to integer and see what happens:</p>\n<pre><code class=\"lang-yaml\"><span class=\"hljs-attr\">spec:</span>\n <span class=\"hljs-attr\">replicas:</span> <span class=\"hljs-number\">1</span>\n</code></pre>\n<p>This time we got no errors and status is YAML file is valid, implying that it is fine.\n<img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1653829063193/z_J7XbZSQ.png\" alt=\"image.png\" /></p>\n<p>Similarly, While running clean on the file it makes the file more neat and clean and readable for everyone, and when we run secure on the file we can check how many exceptions, failures and successes have occurred, as we have seen it uses the trivy for that purpose, so you will get information about how misconfigs and failures could be fixed. And the last service that it currently provides it Audit, it can help you to know more about your k8s yaml such has when it was created, clusters information, results such as <code>cpuLimits</code>, <code>cpuRequests</code> and more.</p>\n<hr />\n<h2 id=\"heading-follow-up-resources\">Follow Up Resources:-</h2>\n<ol>\n<li>ValidKube: https://validkube.com/</li>\n<li>GitHub: https://github.com/komodorio/validkube</li>\n<li>Komodor: https://komodor.com/</li>\n</ol>\n<p>You can checkout their GitHub and star it, since it's OSS you can work on current open issues or add more tools or capabilities to it. Give Komodor a follow on twitter, all the updates and news are released there.</p>\n","contentMarkdown":"## Introduction\n\n[Komodor](https://komodor.com/) is the kubernetes troubleshooting platform that monitors your entire k8s stack, identifies issues, helps in uncovering their root cause and delivers the context you need to troubleshoot efficiently and independently. \n\nAnd [ValidKube](https://validkube.com/) is the OSS is a simple web tool that combines a few other OSS tools which allows quick scanning of YAMLs for hygiene, security and validity, it's made and maintained by the Komodor. \n\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1653827184637/eV9ZXSFWm.png align=\"left\")\n\n## What ValidKube does?\n\nIn the last few years, there are many companies that are focusing more on the development part of DevOps making the work of developers easy, **ValidKube **being one of tools that is focused on making the developers work and experience both smooth and easy. Working with Kubernetes and YAML files as the beginner is really difficult sometimes, as you have to debug and making sure that clusters are secure. And this is where ValidKube comes in, it simplifies the developers kubernetes deployments, since it's and online platform so no kind of installations are required.\n\nIt can be just run from your browser, and it will validate & clean the files for you.\n\n## Features \n\nAs we discussed, ValidKube project uses other opensource projects as it's part to provide best features. It has following capabilities:-\n\n- **Validate **- Verify your Kubernetes configuration files using [@kubeval](https://github.com/instrumenta/kubeval)\n- **Clean **- Remove clutter from your Kubernetes manifests using [@kubectl-neat](https://github.com/itaysk/kubectl-neat)\n- **Secure **- Scan your YAML code for security vulnerabilities using [@trivy](https://github.com/aquasecurity/trivy)\n- **Audit **-Validation of best practices for your yaml using [@polaris](https://github.com/FairwindsOps/polaris)\n\n### How it works?\n\nWe will be using YAML file mentioned below:-\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: nginx-deployment\n namespace: example\n labels:\n app: nginx\nspec:\n replicas: \"Wrong\"\n selector:\n matchLabels:\n app: nginx\n template:\n metadata:\n labels:\n app: nginx\n spec:\n containers:\n - name: nginx\n image: nginx:1.14.2\n args: []\n ports:\n - containerPort: 80\n resources: {}\n```\n\nOnce the sample YAML is up, click on run and it will validate whether the YAML file is correct or not.\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1653828754379/K60gSGM-0.png align=\"left\")\n\nIt validates and throw an error, which is correct as we can see ``spec.replicas`` is in the form of the string and we know that's the wrong format, it can either be in the form of ``Integer`` or ``Null``. Now let's change it value to integer and see what happens:\n\n```yaml\nspec:\n replicas: 1\n```\nThis time we got no errors and status is YAML file is valid, implying that it is fine.\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1653829063193/z_J7XbZSQ.png align=\"left\")\n\nSimilarly, While running clean on the file it makes the file more neat and clean and readable for everyone, and when we run secure on the file we can check how many exceptions, failures and successes have occurred, as we have seen it uses the trivy for that purpose, so you will get information about how misconfigs and failures could be fixed. And the last service that it currently provides it Audit, it can help you to know more about your k8s yaml such has when it was created, clusters information, results such as ``cpuLimits``, ``cpuRequests`` and more.\n\n---\n## Follow Up Resources:-\n\n1. ValidKube: https://validkube.com/\n2. GitHub: https://github.com/komodorio/validkube\n3. Komodor: https://komodor.com/\n\nYou can checkout their GitHub and star it, since it's OSS you can work on current open issues or add more tools or capabilities to it. Give Komodor a follow on twitter, all the updates and news are released there.\n\n\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["56744723958ef13879b9522c","56d9941a489cf60d99aa90c4","58456f2afc2da7579e5f3ed0"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5445.48,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35488","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc","5c090d96c2a9c2a674d35484"],"totalReactions":5,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":true,"toc":[[{"id":"8b112f78-4ed1-42d1-bd15-c16ef30cae4c","level":2,"previousLevel":null,"parentId":null,"slug":"introduction","title":"Introduction"}],[{"id":"310f9c87-f70c-4521-98b7-6ccbc6f017b0","level":2,"previousLevel":2,"parentId":null,"slug":"what-validkube-does","title":"What ValidKube does?"}],[{"id":"ef82d7ed-e958-4962-86ee-b42da063b4d4","level":2,"previousLevel":2,"parentId":null,"slug":"features","title":"Features"}],[{"id":"4d2b726b-7235-4753-9aa4-c0a52645ad7e","level":3,"previousLevel":2,"parentId":"ef82d7ed-e958-4962-86ee-b42da063b4d4","slug":"how-it-works","title":"How it works?"}],[{"id":"9a9ad704-921f-4da1-8517-55afa8f6fa77","level":2,"previousLevel":3,"parentId":null,"slug":"follow-up-resources","title":"Follow Up Resources:-"}]],"numUniqueUsersWhoReacted":0,"_id":"6296eb49e78667ee04ce80d2","title":"ValidKube : Securing your YAML","subtitle":"Validate, Clean, Secure and Audit your Kubernetes Manifest files","type":"story","ogImage":"","isRepublished":false,"originalArticleURL":"","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"validkube-securing-your-yaml","importedFromMedium":false,"dateAdded":"2022-06-01T04:30:01.072Z","hasCustomDate":false,"series":null,"coverImageAttribution":"","coverImagePhotographer":"","isCoverAttributionHidden":false,"metaTitle":"ValidKube : Securing your YAML","metaDescription":"Validate, Clean, Secure and Audit your Kubernetes Manifest files using ValidKube, as OSS powered by Komodor.","hasScheduledDate":true,"stickCoverToBottom":false,"pollOptions":[],"badges":[],"questionReplies":[],"contributors":[],"cuid":"cl3v3b3zi03a0jwnvcpac2igq","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"629363e20989e6b52feb112a","hasPinnedTag":false,"readTime":3,"__v":1,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_5c090d96c2a9c2a674d3548a":0,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_5c090d96c2a9c2a674d35484":1},"viewsUpdatedOn":1698372027858,"dateUpdated":"2022-06-01T06:53:48.474Z","pendingPublicationApproval":false,"uniqueReactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35488","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc","5c090d96c2a9c2a674d35484"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_5c090d96c2a9c2a674d3548a":0,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_5c090d96c2a9c2a674d35484":1},"id":"6296eb49e78667ee04ce80d2"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":393,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1650559601617/j9sJi6YrT.png","autoGeneratedCover":"","brief":"DevRel Definition\nDeveloper Relations, or DevRel, is a domain that focuses on maintaining relationships with the folks building on an organization's technologies or products.\nEssentially DevRel is the bridge between the code and the community. DevRel...","content":"<h2 id=\"heading-devrel-definition\">DevRel Definition</h2>\n<p><strong>Developer Relations</strong>, or <strong>DevRel</strong>, is a domain that focuses on maintaining relationships with the folks building on an organization's technologies or products.</p>\n<p>Essentially DevRel is the bridge between the code and the community. DevRel folks are often responsible for maintaining communication between organizations and developers to ensure a better information flow and feedback loop. These relationships become positive only when the company’s developer customers are happy. And for developers, happiness comes from a flawless product documentation, easy navigation of the website, responsive customer support, constructive on-boarding, helpful tutorials, engaging events/contests and anything in-between. This is exactly where the DevRel team’s focus is. </p>\n<p>While many people say “Developer Relations,” “Developer Advocacy,” and “Developer Evangelism” are brand new terms, even these phrases have been around for longer than most folks realize. </p>\n<h2 id=\"heading-what-is-community\">What is “Community?”</h2>\n<p>Community is a group of people who not only share common principles, but also develop and share practices that help individuals in the group thrive.</p>\n<p>How we define who falls into the realm of community at a particular company depends on the company’s goals and intentions, but in general, the community will include your company’s technical employees and your current customers, as well as prospects and anyone who could in the future be interested in using the product. </p>\n<h2 id=\"heading-roles-under-devrel\">Roles under DevRel?</h2>\n<p>Even if job titles aren’t always accurate, there are seven or so broad roles that tend to fall into DevRel teams:</p>\n<ul>\n<li><strong>Developer advocate:</strong> usually an all-rounder who acts as a public interface between developers and the company, which tends to involve doing a little of all the roles below.</li>\n<li><strong>Developer evangelist</strong>: this can be interchangeable with “developer advocate” but some people use this to describe a role focused on awareness building.</li>\n<li><strong>Developer marketer</strong>: looks after the developer journey, messaging, segmentation, research, campaigns, and other traditional marketing activities but focused on developer audiences.</li>\n<li><strong>Technical writer</strong>: produces educational, technical marketing, and other content to enable developers.</li>\n<li><strong>Community manager</strong>: ensures the smooth running of the developer community around a product or project.</li>\n<li><strong>Developer experience engineer</strong>: focuses on sample apps, SDKs, and other development that helps people to use the product.</li>\n<li><strong>Developer relations lead</strong>: sets the strategic direction for the team, acts as the face of the team within the company, and takes care of day to day management.</li>\n</ul>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1650558156821/zzf_1TFsT.png\" /></p>\n<p>The correlation between level of expertise and job title is going to vary from company to company and between individuals. Nonetheless, everyone working in DevRel should understand broadly what the product does and how it compares to alternatives but not everyone needs to be a developer.</p>\n<hr />\n<h2 id=\"heading-what-role-is-for-you\">What role is for you</h2>\n<p>As with every aspect of finding a job in DevRel, a lot of this depends on the specific job you’re going for. It can be hard like coming from outside but do some work and trying to figure out what kind of role you want because again if we're targeting DevRel you could put together you know pretty generic resume but it's not really gonna meet you with anyone and so some more tangible analogy would be not breaking into DevRel but break into Developer Advocacy, break into Community Management, as it provides you way more focused and intangible sets of responsibilities to focus on. If some said breaking into DevRel, you could be get good at live streaming, know how to do talks, be able to write content, be able to set up discord servers, be able to make integrations, contribute to open source and much more, <em>that is wild, right? </em> </p>\n<p>That's an astronomical amount of things to be able to do instead of you might want to focus on and you say developer advocacy and might try to create a couple of pieces of content that target pin point your experience. </p>\n<p>By understanding the type of role you think you might want you can really target what it is your doing to secure yourself apart from rest. Become familiar with how different companies do DevRel and be able to talk about how their strategies and tactics differ from one another. Read blog posts, watch DevRel videos, attend events, and ask existing DevRel people for advice.</p>\n<hr />\n<h3 id=\"heading-learn-by-peers\">Learn by peers</h3>\n<p>There are many great folks in DevRel whom I follow and learn from,</p>\n<p><a target=\"_blank\" href=\"https://twitter.com/CherishSantoshi\">Cherish Santoshi</a>, <a target=\"_blank\" href=\"https://twitter.com/TheTechMaharaj\">Atul Maharaj</a>, \n <a target=\"_blank\" href=\"https://twitter.com/adityaoberai1\">Aditya Oberai</a>, <a target=\"_blank\" href=\"https://twitter.com/ksprashu\">Prashanth</a>, <a target=\"_blank\" href=\"https://twitter.com/liran_tal\">Liran Tal</a> , <a target=\"_blank\" href=\"https://twitter.com/praveenweb\">Praveen</a>, <a target=\"_blank\" href=\"https://twitter.com/iandouglas736\">Ian Douglas</a>, <a target=\"_blank\" href=\"https://twitter.com/siddharth_hacks\">Siddharth Dayalwal</a>, <a target=\"_blank\" href=\"https://twitter.com/taiponrock\">Taiji Eddie</a>, <a target=\"_blank\" href=\"https://twitter.com/TessaMero\">Tessa Mero</a>, <a target=\"_blank\" href=\"https://twitter.com/veratiago\">Vera Tiago</a>, <a target=\"_blank\" href=\"https://twitter.com/kverma_twt\">Kunal Verma</a></p>\n<p>There still so more whose work have created a great influence on me and my work, so I would suggest any inspiring folks in DevRel to find their niche and passion and kickstart their journey.</p>\n","contentMarkdown":"## DevRel Definition\n\n**Developer Relations**, or **DevRel**, is a domain that focuses on maintaining relationships with the folks building on an organization's technologies or products.\n\nEssentially DevRel is the bridge between the code and the community. DevRel folks are often responsible for maintaining communication between organizations and developers to ensure a better information flow and feedback loop. These relationships become positive only when the company’s developer customers are happy. And for developers, happiness comes from a flawless product documentation, easy navigation of the website, responsive customer support, constructive on-boarding, helpful tutorials, engaging events/contests and anything in-between. This is exactly where the DevRel team’s focus is. \n\nWhile many people say “Developer Relations,” “Developer Advocacy,” and “Developer Evangelism” are brand new terms, even these phrases have been around for longer than most folks realize. \n\n\n## What is “Community?”\n\nCommunity is a group of people who not only share common principles, but also develop and share practices that help individuals in the group thrive.\n\nHow we define who falls into the realm of community at a particular company depends on the company’s goals and intentions, but in general, the community will include your company’s technical employees and your current customers, as well as prospects and anyone who could in the future be interested in using the product. \n\n\n## Roles under DevRel?\n\nEven if job titles aren’t always accurate, there are seven or so broad roles that tend to fall into DevRel teams:\n\n- **Developer advocate:** usually an all-rounder who acts as a public interface between developers and the company, which tends to involve doing a little of all the roles below.\n- **Developer evangelist**: this can be interchangeable with “developer advocate” but some people use this to describe a role focused on awareness building.\n- **Developer marketer**: looks after the developer journey, messaging, segmentation, research, campaigns, and other traditional marketing activities but focused on developer audiences.\n- **Technical writer**: produces educational, technical marketing, and other content to enable developers.\n- **Community manager**: ensures the smooth running of the developer community around a product or project.\n- **Developer experience engineer**: focuses on sample apps, SDKs, and other development that helps people to use the product.\n- **Developer relations lead**: sets the strategic direction for the team, acts as the face of the team within the company, and takes care of day to day management.\n\n<img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1650558156821/zzf_1TFsT.png\" height=\"30px\" />\n\nThe correlation between level of expertise and job title is going to vary from company to company and between individuals. Nonetheless, everyone working in DevRel should understand broadly what the product does and how it compares to alternatives but not everyone needs to be a developer.\n\n---\n\n## What role is for you\n\nAs with every aspect of finding a job in DevRel, a lot of this depends on the specific job you’re going for. It can be hard like coming from outside but do some work and trying to figure out what kind of role you want because again if we're targeting DevRel you could put together you know pretty generic resume but it's not really gonna meet you with anyone and so some more tangible analogy would be not breaking into DevRel but break into Developer Advocacy, break into Community Management, as it provides you way more focused and intangible sets of responsibilities to focus on. If some said breaking into DevRel, you could be get good at live streaming, know how to do talks, be able to write content, be able to set up discord servers, be able to make integrations, contribute to open source and much more, *that is wild, right? * \n\nThat's an astronomical amount of things to be able to do instead of you might want to focus on and you say developer advocacy and might try to create a couple of pieces of content that target pin point your experience. \n\nBy understanding the type of role you think you might want you can really target what it is your doing to secure yourself apart from rest. Become familiar with how different companies do DevRel and be able to talk about how their strategies and tactics differ from one another. Read blog posts, watch DevRel videos, attend events, and ask existing DevRel people for advice.\n\n---\n\n### Learn by peers\n\nThere are many great folks in DevRel whom I follow and learn from,\n\n[Cherish Santoshi](https://twitter.com/CherishSantoshi), [Atul Maharaj](https://twitter.com/TheTechMaharaj), \n [Aditya Oberai](https://twitter.com/adityaoberai1), [Prashanth](https://twitter.com/ksprashu), [Liran Tal](https://twitter.com/liran_tal) , [Praveen](https://twitter.com/praveenweb), [Ian Douglas](https://twitter.com/iandouglas736), [Siddharth Dayalwal](https://twitter.com/siddharth_hacks), [Taiji Eddie](https://twitter.com/taiponrock), [Tessa Mero](https://twitter.com/TessaMero), [Vera Tiago](https://twitter.com/veratiago), [Kunal Verma](https://twitter.com/kverma_twt)\n\nThere still so more whose work have created a great influence on me and my work, so I would suggest any inspiring folks in DevRel to find their niche and passion and kickstart their journey.","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["5f1c1e25e8769101a9ef64d2","56744723958ef13879b953b6"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5372.1031,"discussionScore":0,"responses":[{"popularity":5501.4571,"isActive":true,"upvotedBy":[],"downvotedBy":[],"upvotes":0,"downvotes":0,"isCollapsed":false,"totalBadgesAwarded":0,"isRewardWinner":false,"bookmarkedIn":[],"score":0,"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"_id":"62bd5b033948871077879926","content":"<p>This is a Great Blog. Cleared few of my doubts :)\nThanks Animesh!</p>\n","contentMarkdown":"This is a Great Blog. Cleared few of my doubts :)\nThanks Animesh!","author":"62bd5988de0d0a065f4f7b26","stamp":"cl50r1dey00bjhonv4t4m4f17","post":"6263a0950f819f588af7571c","replies":[],"dateAdded":"2022-06-30T08:12:51.372Z","badgesAwarded":[],"__v":0}],"responseCount":1,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35488","5c090d96c2a9c2a674d3548b","5c090d96c2a9c2a674d35485","567453d0b73d6a82ac8c5ab9","567453d0b73d6a82ac8c5abc","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35486","5c090d96c2a9c2a674d3548a","5d9dd859f31791c942dc5b52"],"totalReactions":21,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":true,"toc":[[{"id":"5f9fed76-1372-4653-b33b-465cc175c71e","level":2,"previousLevel":null,"parentId":null,"slug":"devrel-definition","title":"DevRel Definition"}],[{"id":"9d0e8064-4a90-4768-977f-95965fc231ac","level":2,"previousLevel":2,"parentId":null,"slug":"what-is-community","title":"What is “Community?”"}],[{"id":"6403a8e0-8402-4ede-b6c8-663790da4a10","level":2,"previousLevel":2,"parentId":null,"slug":"roles-under-devrel","title":"Roles under DevRel?"}],[{"id":"4b675f0d-8016-4e09-87a1-2f4babffee6d","level":2,"previousLevel":2,"parentId":null,"slug":"what-role-is-for-you","title":"What role is for you"}],[{"id":"92497830-7a73-4303-adf0-cd2c10835b2d","level":3,"previousLevel":2,"parentId":"4b675f0d-8016-4e09-87a1-2f4babffee6d","slug":"learn-by-peers","title":"Learn by peers"}]],"numUniqueUsersWhoReacted":0,"_id":"6263a0950f819f588af7571c","title":"Breaking into Developer Relations","subtitle":"A guide for freshers","type":"story","coverImageAttribution":"","coverImagePhotographer":"","isCoverAttributionHidden":false,"ogImage":"","metaTitle":"","metaDescription":"","isRepublished":false,"originalArticleURL":"","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"breaking-into-developer-relations","importedFromMedium":false,"dateAdded":"2022-04-23T06:45:41.436Z","hasCustomDate":false,"stickCoverToBottom":false,"pollOptions":[],"badges":[],"questionReplies":[],"contributors":[{"_id":"62bd5b033948871077879927","user":"62bd5988de0d0a065f4f7b26","stamp":"cl50r1dey00bjhonv4t4m4f17"}],"cuid":"cl2bhzcnu0639w4nv14af3iej","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"625d7b2857bc361115202073","hasPinnedTag":false,"readTime":4,"__v":1,"viewsUpdatedOn":1698647430525,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35484":2,"reaction_5c090d96c2a9c2a674d35488":3,"reaction_5c090d96c2a9c2a674d3548b":2,"reaction_5c090d96c2a9c2a674d35485":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_5c090d96c2a9c2a674d3548a":2,"reaction_5d9dd859f31791c942dc5b52":1},"lastActivity":"2022-06-30T08:14:44.077Z","uniqueReactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35488","5c090d96c2a9c2a674d3548b","5c090d96c2a9c2a674d35485","567453d0b73d6a82ac8c5ab9","567453d0b73d6a82ac8c5abc","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35486","5c090d96c2a9c2a674d3548a","5d9dd859f31791c942dc5b52"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35484":2,"reaction_5c090d96c2a9c2a674d35488":3,"reaction_5c090d96c2a9c2a674d3548b":2,"reaction_5c090d96c2a9c2a674d35485":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_5c090d96c2a9c2a674d3548a":2,"reaction_5d9dd859f31791c942dc5b52":1},"id":"6263a0950f819f588af7571c"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":84,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1649937145038/c6Qcd9FZB.png","autoGeneratedCover":"","brief":"This tutorial will show you how to develop a secure video app using SAWO authentication in a simple HTML & CSS app.\n\nThe source code for the App we're working on is available to view here.\n\n\nWhat is SAWO?\nSAWO is the only user-authentication tool tha...","content":"<p>This tutorial will show you how to develop a secure video app using SAWO authentication in a simple HTML & CSS app.</p>\n<blockquote>\n<p>The source code for the App we're working on is available to view <a target=\"_blank\" href=\"https://github.com/Sonichigo/twilio-with-sawo\">here</a>.</p>\n</blockquote>\n<hr />\n<h1 id=\"heading-what-is-sawo\">What is SAWO?</h1>\n<p>SAWO is the only user-authentication tool that your developers would crave for. Their APIs are fast, reliable, integrate onto any platform, and speak many languages. It allows you to set up authentication in less than 10 minutes.</p>\n<hr />\n<h1 id=\"heading-what-is-twilio\">What is Twilio?</h1>\n<p>Twilio is a US cloud communication platform as a service (CPaaS) company. Twilio’s programmable application program interfaces (APIs) are a set of building blocks developers can use to build the exact customer experiences they want, such as :</p>\n<ul>\n<li>Making/receiving phone calls</li>\n<li>Sending/receiving text messages</li>\n<li>Launching email campaigns</li>\n<li>Staying connected with customers</li>\n</ul>\n<p>Besides, Twilio also automates user verification and marketing campaign monitoring using its web service APIs and many more.</p>\n<hr />\n<h1 id=\"heading-tldr\">TL;DR</h1>\n<ul>\n<li><a target=\"_blank\" href=\"https://github.com/Sonichigo/twilio-with-sawo\">Source Code</a></li>\n<li><a target=\"_blank\" href=\"https://sawolabs.com/\">SAWO Labs</a></li>\n<li><a target=\"_blank\" href=\"https://twilio.com/\">Twilio</a></li>\n</ul>\n<hr />\n<h1 id=\"heading-lets-get-started\">Let's get started</h1>\n<p>To get started, first create a new folder for the project and make it ready by running following commands.</p>\n<pre><code>mkdir greetnmeet\n<span class=\"hljs-built_in\">cd</span> greetnmeet\n</code></pre><p>Now let's setup twilio-cli in our desktop</p>\n<pre><code>npm install <span class=\"hljs-operator\">-</span>g twilio<span class=\"hljs-operator\">-</span>cli\ntwilio login\n</code></pre><p>Since, we are making video app the proper tokens with necessary permissions are required for the user to get the app working. For that we need to create a new file <code>funtions/get_token.js</code> .</p>\n<pre><code>const twilio <span class=\"hljs-operator\">=</span> <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">'twilio'</span>);\n\nexports.handler <span class=\"hljs-operator\">=</span> async <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\">context, <span class=\"hljs-keyword\">event</span>, callback</span>) </span>{\n const accessToken <span class=\"hljs-operator\">=</span> <span class=\"hljs-keyword\">new</span> twilio.jwt.AccessToken(\n context.ACCOUNT_SID, context.API_KEY_SID, context.API_KEY_SECRET\n );\n accessToken.identity <span class=\"hljs-operator\">=</span> <span class=\"hljs-keyword\">event</span>.username;\n console.log(<span class=\"hljs-function\"><span class=\"hljs-keyword\">event</span>)</span>;\n const videoGrant <span class=\"hljs-operator\">=</span> <span class=\"hljs-keyword\">new</span> twilio.jwt.AccessToken.VideoGrant({\n room: <span class=\"hljs-string\">'roomname'</span>,\n });\n accessToken.addGrant(videoGrant);\n <span class=\"hljs-keyword\">return</span> callback(null, {\n token: accessToken.toJwt(),\n });\n}\n</code></pre><p>Now we are ready to call this function in our frontend. So let's get ahead and file call <code>assests/video.html</code> to setup our video services.</p>\n<pre><code><span class=\"hljs-operator\"><</span>html<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>head<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>link rel<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"stylesheet\"</span> <span class=\"hljs-keyword\">type</span><span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"text/css\"</span> href<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"styles.css\"</span><span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>title<span class=\"hljs-operator\">></span>Greet n Meet<span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>title<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>head<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>body<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>div class<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"topnav\"</span><span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>a class<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"nav-link active\"</span> aria<span class=\"hljs-operator\">-</span>current<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"page\"</span> href<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"#\"</span><span class=\"hljs-operator\">></span>Home<span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>a<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>div<span class=\"hljs-operator\">></span>\n\n <span class=\"hljs-operator\"><</span>h1 align<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"center\"</span><span class=\"hljs-operator\">></span>Greet n Meet<span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>h1<span class=\"hljs-operator\">></span> \n\n <span class=\"hljs-operator\"><</span>form align<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"center\"</span><span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>input <span class=\"hljs-keyword\">type</span><span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"text\"</span> id<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"username\"</span><span class=\"hljs-operator\">></span><span class=\"hljs-operator\"><</span>br<span class=\"hljs-operator\">/</span><span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>button id<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"join_leave\"</span><span class=\"hljs-operator\">></span>Join call<span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>button<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>form<span class=\"hljs-operator\">></span>\n\n <span class=\"hljs-operator\"><</span>div id<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"container\"</span> class<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"container\"</span><span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>div id<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"local\"</span> class<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"participant\"</span><span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>div<span class=\"hljs-operator\">></span><span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>div<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>div<span class=\"hljs-operator\">></span>You<span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>div<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>div<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">!</span><span class=\"hljs-operator\">-</span><span class=\"hljs-operator\">-</span> more participants will be added dynamically here <span class=\"hljs-operator\">-</span><span class=\"hljs-operator\">-</span><span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>div<span class=\"hljs-operator\">></span>\n\n <span class=\"hljs-operator\"><</span>p id<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"count\"</span> align<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"center\"</span><span class=\"hljs-operator\">></span><span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>p<span class=\"hljs-operator\">></span>\n\n <span class=\"hljs-operator\"><</span>script src<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"https://sdk.twilio.com/js/video/releases/2.20.1/twilio-video.min.js\"</span><span class=\"hljs-operator\">></span><span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>script<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span>script src<span class=\"hljs-operator\">=</span><span class=\"hljs-string\">\"app.js\"</span><span class=\"hljs-operator\">></span><span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>script<span class=\"hljs-operator\">></span>\n <span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>body<span class=\"hljs-operator\">></span>\n<span class=\"hljs-operator\"><</span><span class=\"hljs-operator\">/</span>html<span class=\"hljs-operator\">></span>\n</code></pre><p><code>twilio-video.min.js</code> is Twilio’s Programmable Video JavaScript SDK lets you add real time voice and video to your web applications. The JavaScript SDK connects to a Twilio Video Room and allows you to control the client-side video conference experience.</p>\n<p>Now it's time to make our <code>video.html</code> responsive, let's make an <code>app.js</code> which we have called above under the script folder.</p>\n<pre><code class=\"lang-javascript\"><span class=\"hljs-keyword\">const</span> usernameInput = <span class=\"hljs-built_in\">document</span>.getElementById(<span class=\"hljs-string\">'username'</span>);\n<span class=\"hljs-keyword\">const</span> roomNameInput = <span class=\"hljs-built_in\">document</span>.getElementById(<span class=\"hljs-string\">\"roomname\"</span>);\n<span class=\"hljs-keyword\">const</span> button = <span class=\"hljs-built_in\">document</span>.getElementById(<span class=\"hljs-string\">'join_leave'</span>);\n<span class=\"hljs-keyword\">const</span> container = <span class=\"hljs-built_in\">document</span>.getElementById(<span class=\"hljs-string\">'container'</span>);\n<span class=\"hljs-keyword\">const</span> count = <span class=\"hljs-built_in\">document</span>.getElementById(<span class=\"hljs-string\">'count'</span>);\n<span class=\"hljs-keyword\">let</span> connected = <span class=\"hljs-literal\">false</span>;\n<span class=\"hljs-keyword\">let</span> room;\n\n<span class=\"hljs-keyword\">const</span> addLocalVideo = <span class=\"hljs-keyword\">async</span> () => {\n <span class=\"hljs-keyword\">const</span> track = <span class=\"hljs-keyword\">await</span> Twilio.Video.createLocalVideoTrack();\n <span class=\"hljs-keyword\">const</span> video = <span class=\"hljs-built_in\">document</span>.getElementById(<span class=\"hljs-string\">'local'</span>).firstElementChild;\n video.appendChild(track.attach());\n};\n\n<span class=\"hljs-keyword\">const</span> connectButtonHandler = <span class=\"hljs-keyword\">async</span> (event) => {\n event.preventDefault();\n <span class=\"hljs-keyword\">if</span> (!connected) {\n <span class=\"hljs-keyword\">const</span> username = usernameInput.value;\n <span class=\"hljs-keyword\">if</span> (!username) {\n alert(<span class=\"hljs-string\">'Enter your name before connecting'</span>);\n <span class=\"hljs-keyword\">return</span>;\n }\n button.disabled = <span class=\"hljs-literal\">true</span>;\n button.innerHTML = <span class=\"hljs-string\">'Connecting...'</span>;\n <span class=\"hljs-keyword\">try</span> {\n <span class=\"hljs-keyword\">await</span> connect(username);\n button.innerHTML = <span class=\"hljs-string\">'Leave call'</span>;\n button.disabled = <span class=\"hljs-literal\">false</span>;\n }\n <span class=\"hljs-keyword\">catch</span> {\n alert(<span class=\"hljs-string\">'Connection failed. Is the backend running?'</span>);\n button.innerHTML = <span class=\"hljs-string\">'Join call'</span>;\n button.disabled = <span class=\"hljs-literal\">false</span>; \n }\n }\n <span class=\"hljs-keyword\">else</span> {\n disconnect();\n button.innerHTML = <span class=\"hljs-string\">'Join call'</span>;\n connected = <span class=\"hljs-literal\">false</span>;\n }\n};\n</code></pre>\n<p>Let's call our get_token endpoint we created earlier to grant the token to the user accessing our app, and use it to connect with other on the same stream. Also let's setup other functionality such as disconnect and participants too.</p>\n<pre><code class=\"lang-javascript\"><span class=\"hljs-keyword\">const</span> connect = <span class=\"hljs-keyword\">async</span> (username) => {\n <span class=\"hljs-keyword\">const</span> response = <span class=\"hljs-keyword\">await</span> fetch(<span class=\"hljs-string\">'/get_token'</span>, {\n <span class=\"hljs-attr\">method</span>: <span class=\"hljs-string\">'POST'</span>,\n <span class=\"hljs-attr\">headers</span>: {<span class=\"hljs-string\">'Content-Type'</span>: <span class=\"hljs-string\">'application/json'</span>},\n <span class=\"hljs-attr\">body</span>: <span class=\"hljs-built_in\">JSON</span>.stringify({<span class=\"hljs-string\">'username'</span>:username}),\n });\n\n <span class=\"hljs-keyword\">const</span> data = <span class=\"hljs-keyword\">await</span> response.json();\n room = <span class=\"hljs-keyword\">await</span> Twilio.Video.connect(data.token);\n room.participants.forEach(participantConnected);\n room.on(<span class=\"hljs-string\">'participantConnected'</span>, participantConnected);\n room.on(<span class=\"hljs-string\">'participantDisconnected'</span>, participantDisconnected);\n connected = <span class=\"hljs-literal\">true</span>;\n usernameInput.style.display = <span class=\"hljs-string\">'none'</span>;\n updateParticipantCount();\n};\n\n<span class=\"hljs-keyword\">const</span> updateParticipantCount = <span class=\"hljs-function\">() =></span> {\n <span class=\"hljs-keyword\">if</span> (!connected) {\n count.innerHTML = <span class=\"hljs-string\">'Disconnected.'</span>;\n }\n <span class=\"hljs-keyword\">else</span> {\n count.innerHTML = (room.participants.size + <span class=\"hljs-number\">1</span>) + <span class=\"hljs-string\">' participants online.'</span>;\n }\n};\n\n<span class=\"hljs-keyword\">const</span> participantConnected = <span class=\"hljs-function\">(<span class=\"hljs-params\">participant</span>) =></span> {\n <span class=\"hljs-keyword\">const</span> participantDiv = <span class=\"hljs-built_in\">document</span>.createElement(<span class=\"hljs-string\">'div'</span>);\n participantDiv.setAttribute(<span class=\"hljs-string\">'id'</span>, participant.sid);\n participantDiv.setAttribute(<span class=\"hljs-string\">'class'</span>, <span class=\"hljs-string\">'participant'</span>);\n\n <span class=\"hljs-keyword\">const</span> tracksDiv = <span class=\"hljs-built_in\">document</span>.createElement(<span class=\"hljs-string\">'div'</span>);\n participantDiv.appendChild(tracksDiv);\n\n <span class=\"hljs-keyword\">const</span> labelDiv = <span class=\"hljs-built_in\">document</span>.createElement(<span class=\"hljs-string\">'div'</span>);\n labelDiv.innerHTML = participant.identity;\n participantDiv.appendChild(labelDiv);\n\n container.appendChild(participantDiv);\n\n participant.tracks.forEach(<span class=\"hljs-function\"><span class=\"hljs-params\">publication</span> =></span> {\n <span class=\"hljs-keyword\">if</span> (publication.isSubscribed) {\n trackSubscribed(tracksDiv, publication.track);\n }\n });\n participant.on(<span class=\"hljs-string\">'trackSubscribed'</span>, <span class=\"hljs-function\"><span class=\"hljs-params\">track</span> =></span> trackSubscribed(tracksDiv, track));\n participant.on(<span class=\"hljs-string\">'trackUnsubscribed'</span>, trackUnsubscribed);\n updateParticipantCount();\n};\n\n<span class=\"hljs-keyword\">const</span> participantDisconnected = <span class=\"hljs-function\">(<span class=\"hljs-params\">participant</span>) =></span> {\n <span class=\"hljs-built_in\">document</span>.getElementById(participant.sid).remove();\n updateParticipantCount();\n};\n\n<span class=\"hljs-keyword\">const</span> trackSubscribed = <span class=\"hljs-function\">(<span class=\"hljs-params\">div, track</span>) =></span> {\n div.appendChild(track.attach());\n};\n\n<span class=\"hljs-keyword\">const</span> trackUnsubscribed = <span class=\"hljs-function\">(<span class=\"hljs-params\">track</span>) =></span> {\n track.detach().forEach(<span class=\"hljs-function\"><span class=\"hljs-params\">element</span> =></span> element.remove());\n};\n\n<span class=\"hljs-keyword\">const</span> disconnect = <span class=\"hljs-function\">() =></span> {\n room.disconnect();\n <span class=\"hljs-keyword\">while</span> (container.lastChild.id != <span class=\"hljs-string\">'local'</span>) {\n container.removeChild(container.lastChild);\n }\n button.innerHTML = <span class=\"hljs-string\">'Join call'</span>;\n usernameInput.style.display = <span class=\"hljs-string\">'inline-block'</span>;\n connected = <span class=\"hljs-literal\">false</span>;\n updateParticipantCount();\n};\n\naddLocalVideo();\nbutton.addEventListener(<span class=\"hljs-string\">'click'</span>, connectButtonHandler);\n</code></pre>\n<p>We are done with setting up with our video webapp. Wait..! Something is not right. If we leave our app as it is, then anyone will be able to access it directly and might intrude in the conversation. To prevent such intrusion and also to secure our app, let's put up the SAWO authentication.</p>\n<p>First let's get our credentials, by signing in to <a target=\"_blank\" href=\"https://dev.sawolabs.com/\">SAWO Labs Dashboard</a>\nSelect Create New project and then choose <code>Web</code>-> <code></>Code</code> </p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1649935359498/rQrZtqrEC.png\" alt=\"image.png\" /></p>\n<p>Save your API Key and for now let's keep our hostname url as <em>localhost</em>. Go to the form section and let's add our google spreadsheet with the email of people we want our app to used by. \n<img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1649935569440/UezbYYM9k.png\" alt=\"image.png\" /></p>\n<p>This SAWO feature allow us to prevent other from entering in directly and at same allows people we want to meet directly. Now it's time to setup our login in <code>index.html</code> in same folder as video.html.</p>\n<pre><code class=\"lang-html\"><span class=\"hljs-tag\"><<span class=\"hljs-name\">html</span> <span class=\"hljs-attr\">lang</span>=<span class=\"hljs-string\">\"en\"</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">head</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">meta</span> <span class=\"hljs-attr\">charset</span>=<span class=\"hljs-string\">\"UTF-8\"</span> /></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">meta</span> <span class=\"hljs-attr\">name</span>=<span class=\"hljs-string\">\"viewport\"</span> <span class=\"hljs-attr\">content</span>=<span class=\"hljs-string\">\"width=device-width, initial-scale=1.0\"</span> /></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">title</span>></span>Greet n Meet<span class=\"hljs-tag\"></<span class=\"hljs-name\">title</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">head</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">body</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">div</span> <span class=\"hljs-attr\">class</span>=<span class=\"hljs-string\">\"topnav\"</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">a</span> <span class=\"hljs-attr\">class</span>=<span class=\"hljs-string\">\"nav-link active\"</span> <span class=\"hljs-attr\">aria-current</span>=<span class=\"hljs-string\">\"page\"</span> <span class=\"hljs-attr\">href</span>=<span class=\"hljs-string\">\"#\"</span>></span>Home<span class=\"hljs-tag\"></<span class=\"hljs-name\">a</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">a</span> <span class=\"hljs-attr\">class</span>=<span class=\"hljs-string\">\"nav-link\"</span> <span class=\"hljs-attr\">href</span>=<span class=\"hljs-string\">\"/radio.html\"</span> <span class=\"hljs-attr\">target</span>=<span class=\"hljs-string\">\"_blank\"</span>></span>Radio<span class=\"hljs-tag\"></<span class=\"hljs-name\">a</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">div</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">div</span> <span class=\"hljs-attr\">class</span>=<span class=\"hljs-string\">\"container\"</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">div</span> <span class=\"hljs-attr\">class</span>=<span class=\"hljs-string\">\"login-container\"</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">h1</span> <span class=\"hljs-attr\">align</span>=<span class=\"hljs-string\">\"center\"</span>></span>Greet n Meet<span class=\"hljs-tag\"></<span class=\"hljs-name\">h1</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">div</span> <span class=\"hljs-attr\">id</span>=<span class=\"hljs-string\">\"sawo-container\"</span> <span class=\"hljs-attr\">style</span>=<span class=\"hljs-string\">\"height: 400px; width: 300px\"</span> <span class=\"hljs-attr\">align:</span>\"<span class=\"hljs-attr\">center</span>\"></span><span class=\"hljs-tag\"></<span class=\"hljs-name\">div</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">div</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">div</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">script</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">\"https://websdk.sawolabs.com/sawo.min.js\"</span>></span><span class=\"hljs-tag\"></<span class=\"hljs-name\">script</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">script</span>></span><span class=\"javascript\">\n <span class=\"hljs-keyword\">const</span> payload = sessionStorage.getItem(<span class=\"hljs-string\">\"payload\"</span>);\n <span class=\"hljs-keyword\">if</span> (payload) {\n <span class=\"hljs-built_in\">window</span>.location.href = <span class=\"hljs-string\">\"/video.html\"</span>;\n }\n <span class=\"hljs-keyword\">var</span> config = {\n <span class=\"hljs-attr\">containerID</span>: <span class=\"hljs-string\">\"sawo-container\"</span>,\n <span class=\"hljs-attr\">identifierType</span>: <span class=\"hljs-string\">\"email\"</span>,\n <span class=\"hljs-attr\">apiKey</span>: <span class=\"hljs-string\">\"APIKEY\"</span>, <span class=\"hljs-comment\">// create in our SAWO Dashboard</span>\n <span class=\"hljs-attr\">onSuccess</span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">payload</span>) =></span> {\n sessionStorage.setItem(<span class=\"hljs-string\">\"payload\"</span>, <span class=\"hljs-built_in\">JSON</span>.stringify(payload));\n <span class=\"hljs-built_in\">window</span>.location.href = <span class=\"hljs-string\">\"/video.html\"</span>;\n },\n };\n <span class=\"hljs-keyword\">var</span> sawo = <span class=\"hljs-keyword\">new</span> Sawo(config);\n sawo.showForm();\n </span><span class=\"hljs-tag\"></<span class=\"hljs-name\">script</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">body</span>></span>\n<span class=\"hljs-tag\"></<span class=\"hljs-name\">html</span>></span>\n</code></pre>\n<p>Now our authentication is ready, but wait even now by url bypassing anyone might enter in our stream, for that let's create a script in our <code>video.html</code>that let's the access to the video stream by verifying the payload content.</p>\n<pre><code class=\"lang-javascript\">\n <script>\n <span class=\"hljs-keyword\">const</span> payload = sessionStorage.getItem(<span class=\"hljs-string\">\"payload\"</span>);\n <span class=\"hljs-keyword\">if</span> (payload) {\n <span class=\"hljs-comment\">// If the payload is available then console.log the payload</span>\n <span class=\"hljs-built_in\">console</span>.log(<span class=\"hljs-string\">\"Payload : \"</span> + payload);\n } <span class=\"hljs-keyword\">else</span> {\n <span class=\"hljs-comment\">// If the payload isn't available, that means the user hasn't logged in yet.</span>\n <span class=\"hljs-comment\">// So redirecting back to authentication</span>\n <span class=\"hljs-built_in\">window</span>.location.href = <span class=\"hljs-string\">\"/index.html\"</span>;\n }\n </script>\n</body>\n</code></pre>\n<p>Finally our app is completed and ready to deploy on twilio' severless platform</p>\n<pre><code><span class=\"hljs-selector-tag\">twilio</span> <span class=\"hljs-selector-tag\">plugins</span><span class=\"hljs-selector-pseudo\">:install</span> <span class=\"hljs-keyword\">@twilio-labs</span>/plugin-serverless\n\ntwilio <span class=\"hljs-attribute\">serverless:</span>deploy\n</code></pre><hr />\n<h1 id=\"heading-follow-up-resources\">Follow up resources</h1>\n<ul>\n<li><a target=\"_blank\" href=\"https://www.twilio.com/docs/labs/serverless-toolkit/examples\">Twilio Serverless</a></li>\n<li><a target=\"_blank\" href=\"https://github.com/Sawo-Community/Initial-Contributors-Projects\">SAWO Projects</a></li>\n<li><a target=\"_blank\" href=\"https://github.com/Sawo-Community/Champs-Contributions\">SAWO Community Projects</a></li>\n</ul>\n","contentMarkdown":"This tutorial will show you how to develop a secure video app using SAWO authentication in a simple HTML & CSS app.\n\n>The source code for the App we're working on is available to view [here](https://github.com/Sonichigo/twilio-with-sawo).\n\n---\n\n# What is SAWO?\nSAWO is the only user-authentication tool that your developers would crave for. Their APIs are fast, reliable, integrate onto any platform, and speak many languages. It allows you to set up authentication in less than 10 minutes.\n\n---\n\n# What is Twilio?\nTwilio is a US cloud communication platform as a service (CPaaS) company. Twilio’s programmable application program interfaces (APIs) are a set of building blocks developers can use to build the exact customer experiences they want, such as :\n\n- Making/receiving phone calls\n- Sending/receiving text messages\n- Launching email campaigns\n- Staying connected with customers\n\nBesides, Twilio also automates user verification and marketing campaign monitoring using its web service APIs and many more.\n\n---\n\n# TL;DR\n\n- [Source Code](https://github.com/Sonichigo/twilio-with-sawo)\n- [SAWO Labs](https://sawolabs.com/)\n- [Twilio](https://twilio.com/)\n\n---\n\n# Let's get started\n\nTo get started, first create a new folder for the project and make it ready by running following commands.\n\n```\nmkdir greetnmeet\ncd greetnmeet\n```\n\nNow let's setup twilio-cli in our desktop\n\n```\nnpm install -g twilio-cli\ntwilio login\n```\n\nSince, we are making video app the proper tokens with necessary permissions are required for the user to get the app working. For that we need to create a new file ``funtions/get_token.js`` .\n\n```\nconst twilio = require('twilio');\n\nexports.handler = async function(context, event, callback) {\n const accessToken = new twilio.jwt.AccessToken(\n context.ACCOUNT_SID, context.API_KEY_SID, context.API_KEY_SECRET\n );\n accessToken.identity = event.username;\n console.log(event);\n const videoGrant = new twilio.jwt.AccessToken.VideoGrant({\n room: 'roomname',\n });\n accessToken.addGrant(videoGrant);\n return callback(null, {\n token: accessToken.toJwt(),\n });\n}\n\n``` \nNow we are ready to call this function in our frontend. So let's get ahead and file call ``assests/video.html`` to setup our video services.\n\n```\n<html>\n <head>\n <link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">\n <title>Greet n Meet</title>\n </head>\n <body>\n <div class=\"topnav\">\n <a class=\"nav-link active\" aria-current=\"page\" href=\"#\">Home</a>\n </div>\n\n <h1 align=\"center\">Greet n Meet</h1> \n\n <form align=\"center\">\n <input type=\"text\" id=\"username\"><br/>\n <button id=\"join_leave\">Join call</button>\n </form>\n\n <div id=\"container\" class=\"container\">\n <div id=\"local\" class=\"participant\">\n <div></div>\n <div>You</div>\n </div>\n <!-- more participants will be added dynamically here -->\n </div>\n\n <p id=\"count\" align=\"center\"></p>\n\n <script src=\"https://sdk.twilio.com/js/video/releases/2.20.1/twilio-video.min.js\"></script>\n <script src=\"app.js\"></script>\n </body>\n</html>\n```\n``twilio-video.min.js`` is Twilio’s Programmable Video JavaScript SDK lets you add real time voice and video to your web applications. The JavaScript SDK connects to a Twilio Video Room and allows you to control the client-side video conference experience.\n\nNow it's time to make our ``video.html`` responsive, let's make an ``app.js`` which we have called above under the script folder.\n```javascript\nconst usernameInput = document.getElementById('username');\nconst roomNameInput = document.getElementById(\"roomname\");\nconst button = document.getElementById('join_leave');\nconst container = document.getElementById('container');\nconst count = document.getElementById('count');\nlet connected = false;\nlet room;\n\nconst addLocalVideo = async () => {\n const track = await Twilio.Video.createLocalVideoTrack();\n const video = document.getElementById('local').firstElementChild;\n video.appendChild(track.attach());\n};\n\nconst connectButtonHandler = async (event) => {\n event.preventDefault();\n if (!connected) {\n const username = usernameInput.value;\n if (!username) {\n alert('Enter your name before connecting');\n return;\n }\n button.disabled = true;\n button.innerHTML = 'Connecting...';\n try {\n await connect(username);\n button.innerHTML = 'Leave call';\n button.disabled = false;\n }\n catch {\n alert('Connection failed. Is the backend running?');\n button.innerHTML = 'Join call';\n button.disabled = false; \n }\n }\n else {\n disconnect();\n button.innerHTML = 'Join call';\n connected = false;\n }\n};\n\n```\nLet's call our get_token endpoint we created earlier to grant the token to the user accessing our app, and use it to connect with other on the same stream. Also let's setup other functionality such as disconnect and participants too.\n\n```javascript\nconst connect = async (username) => {\n const response = await fetch('/get_token', {\n method: 'POST',\n headers: {'Content-Type': 'application/json'},\n body: JSON.stringify({'username':username}),\n });\n\n const data = await response.json();\n room = await Twilio.Video.connect(data.token);\n room.participants.forEach(participantConnected);\n room.on('participantConnected', participantConnected);\n room.on('participantDisconnected', participantDisconnected);\n connected = true;\n usernameInput.style.display = 'none';\n updateParticipantCount();\n};\n\nconst updateParticipantCount = () => {\n if (!connected) {\n count.innerHTML = 'Disconnected.';\n }\n else {\n count.innerHTML = (room.participants.size + 1) + ' participants online.';\n }\n};\n\nconst participantConnected = (participant) => {\n const participantDiv = document.createElement('div');\n participantDiv.setAttribute('id', participant.sid);\n participantDiv.setAttribute('class', 'participant');\n\n const tracksDiv = document.createElement('div');\n participantDiv.appendChild(tracksDiv);\n\n const labelDiv = document.createElement('div');\n labelDiv.innerHTML = participant.identity;\n participantDiv.appendChild(labelDiv);\n\n container.appendChild(participantDiv);\n\n participant.tracks.forEach(publication => {\n if (publication.isSubscribed) {\n trackSubscribed(tracksDiv, publication.track);\n }\n });\n participant.on('trackSubscribed', track => trackSubscribed(tracksDiv, track));\n participant.on('trackUnsubscribed', trackUnsubscribed);\n updateParticipantCount();\n};\n\nconst participantDisconnected = (participant) => {\n document.getElementById(participant.sid).remove();\n updateParticipantCount();\n};\n\nconst trackSubscribed = (div, track) => {\n div.appendChild(track.attach());\n};\n\nconst trackUnsubscribed = (track) => {\n track.detach().forEach(element => element.remove());\n};\n\nconst disconnect = () => {\n room.disconnect();\n while (container.lastChild.id != 'local') {\n container.removeChild(container.lastChild);\n }\n button.innerHTML = 'Join call';\n usernameInput.style.display = 'inline-block';\n connected = false;\n updateParticipantCount();\n};\n\naddLocalVideo();\nbutton.addEventListener('click', connectButtonHandler);\n\n```\nWe are done with setting up with our video webapp. Wait..! Something is not right. If we leave our app as it is, then anyone will be able to access it directly and might intrude in the conversation. To prevent such intrusion and also to secure our app, let's put up the SAWO authentication.\n\nFirst let's get our credentials, by signing in to [SAWO Labs Dashboard](https://dev.sawolabs.com/)\nSelect Create New project and then choose ``Web ``-> ``</>Code`` \n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1649935359498/rQrZtqrEC.png)\n\nSave your API Key and for now let's keep our hostname url as *localhost*. Go to the form section and let's add our google spreadsheet with the email of people we want our app to used by. \n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1649935569440/UezbYYM9k.png)\n\nThis SAWO feature allow us to prevent other from entering in directly and at same allows people we want to meet directly. Now it's time to setup our login in ``index.html`` in same folder as video.html.\n\n```html\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Greet n Meet</title>\n </head>\n <body>\n <div class=\"topnav\">\n <a class=\"nav-link active\" aria-current=\"page\" href=\"#\">Home</a>\n <a class=\"nav-link\" href=\"/radio.html\" target=\"_blank\">Radio</a>\n </div>\n <div class=\"container\">\n <div class=\"login-container\">\n <h1 align=\"center\">Greet n Meet</h1>\n <div id=\"sawo-container\" style=\"height: 400px; width: 300px\" align:\"center\"></div>\n </div>\n </div>\n <script src=\"https://websdk.sawolabs.com/sawo.min.js\"></script>\n <script>\n const payload = sessionStorage.getItem(\"payload\");\n if (payload) {\n window.location.href = \"/video.html\";\n }\n var config = {\n containerID: \"sawo-container\",\n identifierType: \"email\",\n apiKey: \"APIKEY\", // create in our SAWO Dashboard\n onSuccess: (payload) => {\n sessionStorage.setItem(\"payload\", JSON.stringify(payload));\n window.location.href = \"/video.html\";\n },\n };\n var sawo = new Sawo(config);\n sawo.showForm();\n </script>\n </body>\n</html>\n```\n\nNow our authentication is ready, but wait even now by url bypassing anyone might enter in our stream, for that let's create a script in our ``video.html``that let's the access to the video stream by verifying the payload content.\n\n```javascript\n\n <script>\n const payload = sessionStorage.getItem(\"payload\");\n if (payload) {\n // If the payload is available then console.log the payload\n console.log(\"Payload : \" + payload);\n } else {\n // If the payload isn't available, that means the user hasn't logged in yet.\n // So redirecting back to authentication\n window.location.href = \"/index.html\";\n }\n </script>\n</body>\n```\n\nFinally our app is completed and ready to deploy on twilio' severless platform\n```\ntwilio plugins:install @twilio-labs/plugin-serverless\n\ntwilio serverless:deploy\n```\n\n---\n# Follow up resources\n\n- [Twilio Serverless](https://www.twilio.com/docs/labs/serverless-toolkit/examples)\n- [SAWO Projects](https://github.com/Sawo-Community/Initial-Contributors-Projects)\n- [SAWO Community Projects](https://github.com/Sawo-Community/Champs-Contributions)","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["57e57691ef99cf03582fe2b3"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5354.1959,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35488","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abd","5d9dd859f31791c942dc5b52","567453d0b73d6a82ac8c5abc","567453d0b73d6a82ac8c5ab9"],"totalReactions":10,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":true,"toc":[[{"id":"c51f612f-0f32-479b-b759-79330b148032","level":1,"previousLevel":null,"parentId":null,"slug":"what-is-sawo","title":"What is SAWO?"}],[{"id":"61460934-e9d6-4e77-a158-e9c0f4bf2e97","level":1,"previousLevel":1,"parentId":null,"slug":"what-is-twilio","title":"What is Twilio?"}],[{"id":"e9ecbb10-33ee-43da-81ca-d8116db6ec38","level":1,"previousLevel":1,"parentId":null,"slug":"tldr","title":"TL;DR"}],[{"id":"d275e28d-8d61-46e0-a148-90e7cc6cecff","level":1,"previousLevel":1,"parentId":null,"slug":"lets-get-started","title":"Let's get started"}],[{"id":"9c9db3b9-0cb1-4cdc-b975-554be05ac2c7","level":1,"previousLevel":1,"parentId":null,"slug":"follow-up-resources","title":"Follow up resources"}]],"numUniqueUsersWhoReacted":0,"_id":"6258085552fb7bd53380ac46","title":"Build a Secure Video App with SAWO and Twilio","subtitle":"","type":"story","coverImageAttribution":"","coverImagePhotographer":"","isCoverAttributionHidden":false,"ogImage":"","metaTitle":"Build a Secure Video App with SAWO and Twilio","metaDescription":"This tutorial will show you how to develop a secure video app using SAWO authentication in a simple HTML & CSS app.","isRepublished":false,"originalArticleURL":"","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"build-a-secure-video-app-with-sawo-and-twilio","importedFromMedium":false,"dateAdded":"2022-04-14T11:41:09.930Z","hasCustomDate":false,"stickCoverToBottom":false,"pollOptions":[],"badges":[],"questionReplies":[],"contributors":[],"cuid":"cl1yxkoct00rty6nv022w2a5e","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"625119ad92d73e7055c17770","hasPinnedTag":false,"readTime":6,"__v":2,"series":null,"dateUpdated":"2022-04-14T17:02:08.039Z","pendingPublicationApproval":false,"viewsUpdatedOn":1698372027921,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35485":2,"reaction_5c090d96c2a9c2a674d35484":2,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5c090d96c2a9c2a674d3548a":0,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_567453d0b73d6a82ac8c5ab9":1},"uniqueReactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35488","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abd","5d9dd859f31791c942dc5b52","567453d0b73d6a82ac8c5abc","567453d0b73d6a82ac8c5ab9"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35485":2,"reaction_5c090d96c2a9c2a674d35484":2,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5c090d96c2a9c2a674d3548a":0,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_567453d0b73d6a82ac8c5ab9":1},"id":"6258085552fb7bd53380ac46"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":341,"slugOverridden":true,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1648542409744/o_Gs-AbeS.svg","autoGeneratedCover":"","brief":"Every process has a workflow to complete it. However, many workflows are filled with manual tasks that are time-consuming, error-prone, and expensive. This is where Workflow Automation comes in, it refers to the design, execution, and automation of p...","content":"<p>Every process has a workflow to complete it. However, many workflows are filled with manual tasks that are time-consuming, error-prone, and expensive. This is where Workflow Automation comes in, it refers to the design, execution, and automation of processes based on workflow rules where human tasks, data or files are routed between systems based on pre-defined business rules.</p>\n<p>In short, it is an approach to making the flow of tasks, documents and information across work-related activities easy.</p>\n<h3 id=\"heading-why-workflow-automation-is-used\">Why Workflow Automation Is Used?</h3>\n<p>By automating workflows, especially those processes that are primarily handled manually by employees, significant improvements can be made in:</p>\n<ol>\n<li>Reduces Human Error</li>\n<li>Improves Operational Efficiency</li>\n<li>Increases Workplace Accountability</li>\n</ol>\n<h3 id=\"heading-what-is-cicd\">What is CI/CD?</h3>\n<p>CI/CD is a method to frequently deliver apps to customers by introducing automation into the stages of app development. The main concepts attributed to CI/CD are continuous integration, continuous delivery, and continuous deployment.</p>\n<h4 id=\"heading-ci-vs-cd-vs-and-the-other-cd\">CI vs CD vs (and the other CD)</h4>\n<ol>\n<li><p>Continuous integration:-</p>\n<p>Continuous integration puts a great emphasis on testing automation to check that the application is not broken whenever new commits are integrated into the main branch.</p>\n</li>\n<li><p>Continuous delivery:- </p>\n<p> Continuous delivery is an extension of continuous integration since it automatically deploys all code changes to a testing and/or production environment after the build stage. \nThis means that on top of automated testing, you have an automated release process and you can deploy your application any time by clicking a button.</p>\n</li>\n<li><p>Continuous deployment:-</p>\n<p> It goes one step further than continuous delivery. With this practice, every change that passes all stages of your production pipeline is released to your customers. There's no human intervention, and only a failed test will prevent a new change to be deployed to production.</p>\n</li>\n</ol>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1648541123679/XzBz7ilqX.png\" alt=\"image.png\" /></p>\n<h2 id=\"heading-what-are-some-common-cicd-tools\">What are some common CI/CD tools?</h2>\n<ol>\n<li><p><a target=\"_blank\" href=\"https://powerautomate.microsoft.com/en-us/\">MSPowerAutomate</a> cloud-based system to create automated workflows. </p>\n</li>\n<li><p><a target=\"_blank\" href=\"https://github.com/features/actions\">Github Action's</a> automate, customize, and execute your software development workflows.</p>\n</li>\n<li><p><a target=\"_blank\" href=\"https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/\">GitLab</a> CI/CD is a tool for software development using continuous methods.</p>\n</li>\n<li><p><a target=\"_blank\" href=\"https://circleci.com/\">CircleCI</a> is a continuous integration and continuous delivery platform that can be used to implement DevOps practices.</p>\n</li>\n<li><p><a target=\"_blank\" href=\"https://docs.docker.com/get-started/overview/\">Docker</a> workflows for modern applications, integrates with GitHub and Bitbucket, and with your favorite tools with API-based automated HTTP.</p>\n</li>\n</ol>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1648550017542/CO_rJJcI4.png\" alt=\"image.png\" /></p>\n<h3 id=\"heading-resources-to-build-your-first-workflow-automation\">Resources to build your first workflow automation</h3>\n<ul>\n<li><p><a target=\"_blank\" href=\"https://www.freecodecamp.org/news/build-your-first-javascript-github-action/\">How to Build Your First JavaScript GitHub Action</a> ~ Bassem Dghaidi</p>\n</li>\n<li><p><a target=\"_blank\" href=\"https://www.youtube.com/watch?v=7I6tHw68DMQ\">Build & Use Custom Docker images in your GitLab CI/CD</a> ~ Valentin Despa</p>\n</li>\n<li><p><a target=\"_blank\" href=\"https://www.youtube.com/watch?v=7UqGVTWEzWs\">Use Portainer, integrated into Git, to automate the deployment</a> ~ Portainer IO</p>\n</li>\n<li><p><a target=\"_blank\" href=\"https://www.youtube.com/watch?v=IA90BTozdow\">Complete YAML Course - Beginner to Advanced for DevOps and more!</a> ~ Kunal Kushwaha</p>\n</li>\n</ul>\n","contentMarkdown":"Every process has a workflow to complete it. However, many workflows are filled with manual tasks that are time-consuming, error-prone, and expensive. This is where Workflow Automation comes in, it refers to the design, execution, and automation of processes based on workflow rules where human tasks, data or files are routed between systems based on pre-defined business rules.\n\nIn short, it is an approach to making the flow of tasks, documents and information across work-related activities easy.\n\n\n### Why Workflow Automation Is Used?\n\nBy automating workflows, especially those processes that are primarily handled manually by employees, significant improvements can be made in:\n\n1. Reduces Human Error\n2. Improves Operational Efficiency\n3. Increases Workplace Accountability\n\n\n### What is CI/CD?\n\nCI/CD is a method to frequently deliver apps to customers by introducing automation into the stages of app development. The main concepts attributed to CI/CD are continuous integration, continuous delivery, and continuous deployment.\n\n\n#### CI vs CD vs (and the other CD)\n\n1. Continuous integration:-\n\n Continuous integration puts a great emphasis on testing automation to check that the application is not broken whenever new commits are integrated into the main branch.\n\n2. Continuous delivery:- \n\n Continuous delivery is an extension of continuous integration since it automatically deploys all code changes to a testing and/or production environment after the build stage. \nThis means that on top of automated testing, you have an automated release process and you can deploy your application any time by clicking a button.\n\n3. Continuous deployment:-\n\n It goes one step further than continuous delivery. With this practice, every change that passes all stages of your production pipeline is released to your customers. There's no human intervention, and only a failed test will prevent a new change to be deployed to production.\n\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1648541123679/XzBz7ilqX.png)\n\n\n## What are some common CI/CD tools?\n\n1. [MSPowerAutomate](https://powerautomate.microsoft.com/en-us/) cloud-based system to create automated workflows. \n\n2. [Github Action's](https://github.com/features/actions) automate, customize, and execute your software development workflows.\n\n3. [GitLab](https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/) CI/CD is a tool for software development using continuous methods.\n\n4. [CircleCI](https://circleci.com/) is a continuous integration and continuous delivery platform that can be used to implement DevOps practices.\n\n5. [Docker](https://docs.docker.com/get-started/overview/) workflows for modern applications, integrates with GitHub and Bitbucket, and with your favorite tools with API-based automated HTTP.\n\n\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1648550017542/CO_rJJcI4.png)\n\n\n### Resources to build your first workflow automation\n\n- [How to Build Your First JavaScript GitHub Action](https://www.freecodecamp.org/news/build-your-first-javascript-github-action/) ~ Bassem Dghaidi\n\n- [Build & Use Custom Docker images in your GitLab CI/CD](https://www.youtube.com/watch?v=7I6tHw68DMQ) ~ Valentin Despa\n\n- [Use Portainer, integrated into Git, to automate the deployment](https://www.youtube.com/watch?v=7UqGVTWEzWs) ~ Portainer IO\n\n- [Complete YAML Course - Beginner to Advanced for DevOps and more!](https://www.youtube.com/watch?v=IA90BTozdow) ~ Kunal Kushwaha\n\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["5f0ed0dd7611e111fbd7194f","56744722958ef13879b94e77","56744721958ef13879b94c63","56bb10616bd8ce129b0bcc6c","56744721958ef13879b94b77"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5324.4525,"discussionScore":0,"responses":[{"popularity":5324.7005,"isActive":true,"upvotedBy":[],"downvotedBy":[],"upvotes":0,"downvotes":0,"isCollapsed":false,"totalBadgesAwarded":0,"isRewardWinner":false,"bookmarkedIn":[],"score":0,"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"_id":"6243fc81a3901fe38a6f0c27","content":"<p>This is great <a class=\"user-mention\" href=\"https://hashnode.com/@sonichigo\">Animesh Pathak</a></p>\n","contentMarkdown":"This is great @[Animesh Pathak](@sonichigo)","author":"617053af0c5e175a1c611836","stamp":"cl1d7egzo000h7qnv0u2a255d","post":"6242ec3a2d728ed85fffced9","replies":[],"dateAdded":"2022-03-30T06:45:21.157Z","badgesAwarded":[],"__v":0}],"responseCount":1,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35486","5c090d96c2a9c2a674d35485","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35488","567453d0b73d6a82ac8c5abc","567453d0b73d6a82ac8c5ab9","5c090d96c2a9c2a674d3548b","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548a"],"totalReactions":20,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":true,"toc":[[{"id":"a0fa0ad7-1723-4490-8ad7-3b1d1f1de2da","level":3,"previousLevel":null,"parentId":null,"slug":"why-workflow-automation-is-used","title":"Why Workflow Automation Is Used?"}],[{"id":"b3cbd537-4caf-47c8-809b-4596416be874","level":3,"previousLevel":3,"parentId":null,"slug":"what-is-cicd","title":"What is CI/CD?"}],[{"id":"755cb77c-17ae-4264-b03f-734c1690d269","level":4,"previousLevel":3,"parentId":"b3cbd537-4caf-47c8-809b-4596416be874","slug":"ci-vs-cd-vs-and-the-other-cd","title":"CI vs CD vs (and the other CD)"}],[{"id":"0eb52462-5c48-42e5-a323-344e76db8eff","level":2,"previousLevel":4,"parentId":null,"slug":"what-are-some-common-cicd-tools","title":"What are some common CI/CD tools?"}],[{"id":"3cf080d8-673a-429e-9fd7-a9eb7b2b43d4","level":3,"previousLevel":2,"parentId":"0eb52462-5c48-42e5-a323-344e76db8eff","slug":"resources-to-build-your-first-workflow-automation","title":"Resources to build your first workflow automation"}]],"numUniqueUsersWhoReacted":0,"_id":"6242ec3a2d728ed85fffced9","title":"A Guide to Workflow Automation","subtitle":"","type":"story","coverImageAttribution":"","coverImagePhotographer":"","isCoverAttributionHidden":false,"ogImage":"","metaTitle":"","metaDescription":"","isRepublished":false,"originalArticleURL":"","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"the-guide-to-workflow-automation","importedFromMedium":false,"dateAdded":"2022-03-29T11:23:38.896Z","hasCustomDate":false,"stickCoverToBottom":false,"pollOptions":[],"badges":[],"questionReplies":[],"contributors":[{"_id":"6243fc81a3901fe38a6f0c28","user":"617053af0c5e175a1c611836","stamp":"cl1d7egzo000h7qnv0u2a255d"}],"cuid":"cl1c1wieu003y0bnv7rhn17dc","author":"60f6b06bd6a73079b398bede","followersCount":2,"draft":"6228482c33120280724e86bd","hasPinnedTag":false,"readTime":2,"__v":1,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35484":3,"reaction_5c090d96c2a9c2a674d35486":2,"reaction_5c090d96c2a9c2a674d35485":2,"reaction_567453d0b73d6a82ac8c5abd":2,"reaction_5c090d96c2a9c2a674d35488":2,"reaction_567453d0b73d6a82ac8c5abc":2,"reaction_567453d0b73d6a82ac8c5ab9":2,"reaction_5c090d96c2a9c2a674d3548b":2,"reaction_5d9dd859f31791c942dc5b52":2,"reaction_5c090d96c2a9c2a674d3548a":1},"viewsUpdatedOn":1698480027637,"lastActivity":"2022-03-30T06:45:21.165Z","uniqueReactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35486","5c090d96c2a9c2a674d35485","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35488","567453d0b73d6a82ac8c5abc","567453d0b73d6a82ac8c5ab9","5c090d96c2a9c2a674d3548b","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548a"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35484":3,"reaction_5c090d96c2a9c2a674d35486":2,"reaction_5c090d96c2a9c2a674d35485":2,"reaction_567453d0b73d6a82ac8c5abd":2,"reaction_5c090d96c2a9c2a674d35488":2,"reaction_567453d0b73d6a82ac8c5abc":2,"reaction_567453d0b73d6a82ac8c5ab9":2,"reaction_5c090d96c2a9c2a674d3548b":2,"reaction_5d9dd859f31791c942dc5b52":2,"reaction_5c090d96c2a9c2a674d3548a":1},"id":"6242ec3a2d728ed85fffced9"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":162,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1647140600883/Skwqt8Ykn.png","autoGeneratedCover":"","brief":"📌 About the project :\nThe project aims to provide a food ordering service for your loved ones. It can be used to order food for someone and notify them using Whatsapp and also provide a Tracking service via calling feature.\n📌 Screenshots\nHome Page\n...","content":"<h2 id=\"heading-about-the-project\">📌 About the project :</h2>\n<p>The project aims to provide a food ordering service for your loved ones. It can be used to order food for someone and notify them using Whatsapp and also provide a Tracking service via calling feature.</p>\n<h2 id=\"heading-screenshots\">📌 Screenshots</h2>\n<h3 id=\"heading-home-page\">Home Page</h3>\n<p><img src=\"https://user-images.githubusercontent.com/61322830/153749943-fe0be00d-b678-46ae-a323-1c58bd7491cf.png\" alt=\"image\" /></p>\n<h3 id=\"heading-order-page\">Order Page</h3>\n<p><img src=\"https://user-images.githubusercontent.com/61322830/153749963-7798f796-9862-418e-83d5-f7b263759e60.png\" alt=\"image\" /></p>\n<h2 id=\"heading-technologies-used\">📌 Technologies used</h2>\n<ul>\n<li>ReactJS (Frontend)</li>\n<li>NodeJS/ExpressJS (Backend)</li>\n<li>Twilio</li>\n<li>Dasha </li>\n</ul>\n<h2 id=\"heading-challenges-we-ran-into\">📌 Challenges we ran into</h2>\n<ul>\n<li>Generating Receipt</li>\n<li>Making Intent Json</li>\n<li>Integrating twilio with dasha </li>\n</ul>\n<h2 id=\"heading-what-we-learned\">📌 What we learned</h2>\n<p>Got to learn about useState function reactjs, and Dasha & Twilio</p>\n","contentMarkdown":"## 📌 About the project :\nThe project aims to provide a food ordering service for your loved ones. It can be used to order food for someone and notify them using Whatsapp and also provide a Tracking service via calling feature.\n \n## 📌 Screenshots\n \n### Home Page\n\n![image](https://user-images.githubusercontent.com/61322830/153749943-fe0be00d-b678-46ae-a323-1c58bd7491cf.png)\n\n### Order Page\n\n![image](https://user-images.githubusercontent.com/61322830/153749963-7798f796-9862-418e-83d5-f7b263759e60.png)\n \n## 📌 Technologies used\n- ReactJS (Frontend)\n- NodeJS/ExpressJS (Backend)\n- Twilio\n- Dasha \n\n## 📌 Challenges we ran into\n- Generating Receipt\n- Making Intent Json\n- Integrating twilio with dasha \n\n## 📌 What we learned\nGot to learn about useState function reactjs, and Dasha & Twilio","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5253.2725,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":false,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35486","567453d0b73d6a82ac8c5abd","567453d0b73d6a82ac8c5ab9","5c090d96c2a9c2a674d3548a","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc"],"totalReactions":9,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"6212f0cde2db563535e3ac93","title":"No-Starved Valentine : DASHA.ai | Twilio","subtitle":"Dashathon 2.0","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"no-starved-valentine-dashaai-or-twilio--deleted","pollOptions":[],"dateAdded":"2022-02-21T01:54:21.088Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckzw1pq3d0g28ids15a5eeq6p","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"6212f093e2db563535e3ac92","isRepublished":false,"hasPinnedTag":false,"readTime":1,"__v":0,"viewsUpdatedOn":1655913611627,"series":null,"coverImageAttribution":"","coverImagePhotographer":"","dateUpdated":"2022-03-13T03:03:53.925Z","isCoverAttributionHidden":false,"pendingPublicationApproval":false,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35484":1,"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abc":1},"dateDeleted":"2022-06-26T01:39:59.020Z","uniqueReactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35486","567453d0b73d6a82ac8c5abd","567453d0b73d6a82ac8c5ab9","5c090d96c2a9c2a674d3548a","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35484":1,"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abc":1},"id":"6212f0cde2db563535e3ac93"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":106,"slugOverridden":false,"coverImage":"","autoGeneratedCover":"https://hcti.io/v1/image/da065134-48db-44c9-920d-730d9dbb37a3","brief":"https://www.canva.com/design/DAE0MPB_xHc/view","content":"<div class=\"embed-wrapper\"><div class=\"embed-loading\"><div class=\"loadingRow\"></div><div class=\"loadingRow\"></div></div><a class=\"embed-card\" href=\"https://www.canva.com/design/DAE0MPB_xHc/view\">https://www.canva.com/design/DAE0MPB_xHc/view</a></div>\n","contentMarkdown":"\n%[https://www.canva.com/design/DAE0MPB_xHc/view]\n \n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5155.9622,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":true,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35484"],"totalReactions":1,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"61d01f7d0cfc5655c184471d","title":"Alphasians' Newsletter : January '22","subtitle":"","type":"story","coverImageAttribution":"","coverImagePhotographer":"","isCoverAttributionHidden":false,"partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"alphasians-newsletter-january-22","stickCoverToBottom":false,"pollOptions":[],"dateAdded":"2022-01-01T09:31:41.951Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckxvmlfll02qbxts1e8d071bf","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"61d0106d0cfc5655c1844621","isRepublished":false,"hasPinnedTag":false,"readTime":1,"__v":0,"viewsUpdatedOn":1698372027778,"reactionToCountMap":{"reaction_567453d0b73d6a82ac8c5abc":0,"reaction_5c090d96c2a9c2a674d35484":1},"uniqueReactions":["5c090d96c2a9c2a674d35484"],"reactionToCountMapUnique":{"reaction_567453d0b73d6a82ac8c5abc":0,"reaction_5c090d96c2a9c2a674d35484":1},"id":"61d01f7d0cfc5655c184471d"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":70,"slugOverridden":true,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1637843681271/VG6Ciy2Rsw.jpeg","autoGeneratedCover":"","brief":"There is a growing demand for a platform that enables anyone to submit feature requests and bugs directly to a brand, product team or development team. And SAWO Labs has presented a chance for you to drive Product Scalability for top brands of India....","content":"<p>There is a growing demand for a platform that enables anyone to submit feature requests and bugs directly to a brand, product team or development team. And SAWO Labs has presented a chance for you to drive Product Scalability for top brands of India. </p>\n<h3 id=\"heading-100-days-of-feature-requests\"><strong>100 DAYS OF FEATURE REQUESTS</strong></h3>\n<p>Powered by SAWO is a synergetic effort to work with some of the best D2C , E-commerce and SaaS brands to help them achieve Product scalability and User retention, program starts from 1st December 2021.</p>\n<p>It is an extensive 14-week program for developers, product managers, brands and brand owners to obtain guided feature suggestions from a distinguished and diverse community of developers and product managers. This initiative is solely to create an atmosphere where innovations thrive best and aim to provide an opportunity to bring passionate minds together to improvise and ideate.</p>\n<p>In the meet-up on 23rd of this month, revealed there first brand in addition to answering some common questions regarding the program such as:</p>\n<ol>\n<li>Program Details,</li>\n<li>Program Schedule,</li>\n<li>What's the format of the program?</li>\n<li>What does 10 days with Each brand look like?</li>\n<li>What are the rewards as a participant?</li>\n<li>How should someone submit feature requests or code merges ?</li>\n<li>What kind of problem statements will you be solving.</li>\n</ol>\n<p>First brand “Habitate” kicking off on Dec 1st, 2021. </p>\n<h4 id=\"heading-about-habitate\">About Habitate</h4>\n<p>Habitate is on a mission to help companies build happy communities around them. We want to help customer-obsessed companies become community-led organizations in a shorter period. We have created a community platform that has simplicity and a touch of artistic design. We make it easy for brands to host an online community integrated into their existing website/application without any help from the engineering team. </p>\n<p>The company is based out of Chennai, backed by some strong industry names like FirstCheque.VC, Sri Krishnan from Rocketlane, Lakshmi Narayanan from Cognizant, and many more Angel Investors. </p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1637843609108/CgXN7A7zw.png\" alt=\"image.png\" /></p>\n","contentMarkdown":"There is a growing demand for a platform that enables anyone to submit feature requests and bugs directly to a brand, product team or development team. And SAWO Labs has presented a chance for you to drive Product Scalability for top brands of India. \n\n### **100 DAYS OF FEATURE REQUESTS**\nPowered by SAWO is a synergetic effort to work with some of the best D2C , E-commerce and SaaS brands to help them achieve Product scalability and User retention, program starts from 1st December 2021.\n\nIt is an extensive 14-week program for developers, product managers, brands and brand owners to obtain guided feature suggestions from a distinguished and diverse community of developers and product managers. This initiative is solely to create an atmosphere where innovations thrive best and aim to provide an opportunity to bring passionate minds together to improvise and ideate.\n\nIn the meet-up on 23rd of this month, revealed there first brand in addition to answering some common questions regarding the program such as:\n\n1. Program Details,\n2. Program Schedule,\n3. What's the format of the program?\n4. What does 10 days with Each brand look like?\n5. What are the rewards as a participant?\n6. How should someone submit feature requests or code merges ?\n7. What kind of problem statements will you be solving.\n\nFirst brand “Habitate” kicking off on Dec 1st, 2021. \n\n#### About Habitate\nHabitate is on a mission to help companies build happy communities around them. We want to help customer-obsessed companies become community-led organizations in a shorter period. We have created a community platform that has simplicity and a touch of artistic design. We make it easy for brands to host an online community integrated into their existing website/application without any help from the engineering team. \n \nThe company is based out of Chennai, backed by some strong industry names like FirstCheque.VC, Sri Krishnan from Rocketlane, Lakshmi Narayanan from Cognizant, and many more Angel Investors. \n\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1637843609108/CgXN7A7zw.png)\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5085.1679,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d3548a","5c090d96c2a9c2a674d35488","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc","5c090d96c2a9c2a674d35484","567453d0b73d6a82ac8c5ab9","567453d0b73d6a82ac8c5abd"],"totalReactions":9,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":false,"toc":[[{"id":"91894233-3d0c-4564-a27a-8af7e74d71b2","level":3,"previousLevel":null,"parentId":null,"slug":"100-days-of-feature-requests","title":"100 DAYS OF FEATURE REQUESTS"}],[{"id":"a8bf9daf-8d03-4763-b28f-eeefbc4e0dea","level":4,"previousLevel":3,"parentId":"91894233-3d0c-4564-a27a-8af7e74d71b2","slug":"about-habitate","title":"About Habitate"}]],"numUniqueUsersWhoReacted":0,"_id":"619f832ce6a8de74213236e9","title":"What is 100daysfeaturerequests?","subtitle":"","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"sawo-labs-100daysfeaturerequests","stickCoverToBottom":true,"pollOptions":[],"dateAdded":"2021-11-25T12:35:56.435Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckwexvumw02yexts1aojufyd9","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"619f80219829fb749bcbe76b","isRepublished":false,"hasPinnedTag":false,"readTime":2,"__v":0,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_5c090d96c2a9c2a674d35484":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_567453d0b73d6a82ac8c5abd":1},"series":null,"dateUpdated":"2021-11-25T12:36:31.576Z","pendingPublicationApproval":false,"viewsUpdatedOn":1698465625483,"uniqueReactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d3548a","5c090d96c2a9c2a674d35488","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc","5c090d96c2a9c2a674d35484","567453d0b73d6a82ac8c5ab9","567453d0b73d6a82ac8c5abd"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_5c090d96c2a9c2a674d35484":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_567453d0b73d6a82ac8c5abd":1},"id":"619f832ce6a8de74213236e9"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":84,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1636511776699/sIILhbY4m.png","autoGeneratedCover":"","brief":"From simple chats to big corporate communication platforms, every online app needs to be built properly to prevent issues from arising down the line with future users. Still, organizing online communication can be a very tough task. Here is where big...","content":"<p>From simple chats to big corporate communication platforms, every online app needs to be built properly to prevent issues from arising down the line with future users. Still, organizing online communication can be a very tough task. Here is where big platforms like Twilio come into play. </p>\n<h2 id=\"what-is-twilio\">What is Twilio?</h2>\n<p>Twilio is a US cloud communication platform as a service (CPaaS) company. It has since attracted over 200,000 active corporate customers, including Airbnb, Shopify, Netflix, Spotify, and Twitter. Twilio’s programmable application program interfaces (APIs) are a set of building blocks developers can use to build the exact customer experiences they want, such as :</p>\n<ul>\n<li>Making/receiving phone calls</li>\n<li>Sending/receiving text messages</li>\n<li>Launching email campaigns</li>\n<li>Staying connected with customers</li>\n</ul>\n<p>Besides, Twilio also automates user verification and marketing campaign monitoring using its web service APIs and many more..</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1636512553402/7oTrdr6P5.png\" alt=\"image.png\" /></p>\n<h2 id=\"what-does-twilio-do\">What does Twilio do?</h2>\n<p>Twilio has plenty of services that can reduce the time and money spent on app development. Let’s take a closer look at exactly how Twilio can help your project with its:</p>\n<ul>\n<li>Communications APIs for enabling messaging, voice chats, and video conversations.</li>\n<li>Programmable connectivity options for providing virtual phone numbers, SIP trunking, and messaging.</li>\n<li>Use-case APIs for powering abstraction for authentication, message control, and call routing tasks.</li>\n</ul>\n<h2 id=\"the-advantages-of-using-twilio\">The advantages of using Twilio</h2>\n<p>What makes their means worth implementing? We can highlight several advantages:</p>\n<ul>\n<li>Pay-as-you-go—you pay only for the time you actively use Twilio solutions, so there is no need to sign long-term contracts. Also, Twilio offers favorable discounts for its services.</li>\n<li>Easy integration—the Twilio API supports a variety of programming languages like Java, Python, and PHP, and developers start working at maximum speed.</li>\n<li>Regional distribution—it’s easy to customize all the technologies to local needs depending on what country is going to see your product.</li>\n<li>The international presence—Twilio services are available in more than 180 countries.</li>\n<li>Also, Twilio services offer good scalability, top-notch security, and high-quality performance.</li>\n</ul>\n<p>Various sample App are provided by twilio themselves to give the developers a quickstart and familiarize themselves while integration in their <a target=\"_blank\" href=\"https://www.twilio.com/docs\">projects</a></p>\n","contentMarkdown":"From simple chats to big corporate communication platforms, every online app needs to be built properly to prevent issues from arising down the line with future users. Still, organizing online communication can be a very tough task. Here is where big platforms like Twilio come into play. \n\n## What is Twilio?\n\nTwilio is a US cloud communication platform as a service (CPaaS) company. It has since attracted over 200,000 active corporate customers, including Airbnb, Shopify, Netflix, Spotify, and Twitter. Twilio’s programmable application program interfaces (APIs) are a set of building blocks developers can use to build the exact customer experiences they want, such as :\n\n- Making/receiving phone calls\n- Sending/receiving text messages\n- Launching email campaigns\n- Staying connected with customers\n\nBesides, Twilio also automates user verification and marketing campaign monitoring using its web service APIs and many more..\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1636512553402/7oTrdr6P5.png)\n\n## What does Twilio do?\n\nTwilio has plenty of services that can reduce the time and money spent on app development. Let’s take a closer look at exactly how Twilio can help your project with its:\n\n- Communications APIs for enabling messaging, voice chats, and video conversations.\n- Programmable connectivity options for providing virtual phone numbers, SIP trunking, and messaging.\n- Use-case APIs for powering abstraction for authentication, message control, and call routing tasks.\n\n## The advantages of using Twilio\n\nWhat makes their means worth implementing? We can highlight several advantages:\n\n- Pay-as-you-go—you pay only for the time you actively use Twilio solutions, so there is no need to sign long-term contracts. Also, Twilio offers favorable discounts for its services.\n- Easy integration—the Twilio API supports a variety of programming languages like Java, Python, and PHP, and developers start working at maximum speed.\n- Regional distribution—it’s easy to customize all the technologies to local needs depending on what country is going to see your product.\n- The international presence—Twilio services are available in more than 180 countries.\n- Also, Twilio services offer good scalability, top-notch security, and high-quality performance.\n\nVarious sample App are provided by twilio themselves to give the developers a quickstart and familiarize themselves while integration in their [projects](https://www.twilio.com/docs)","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["57e57691ef99cf03582fe2b3"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5056.4893,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35488","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d35484","567453d0b73d6a82ac8c5abc"],"totalReactions":8,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"618b3344f991b025366e050c","title":"Getting Started with Twilio","subtitle":"","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"getting-started-with-twilio","pollOptions":[],"dateAdded":"2021-11-10T02:49:40.958Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckvsxc52307m2cms1aasxefcn","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"618b3019f991b025366e04ff","isRepublished":false,"hasPinnedTag":false,"readTime":2,"__v":0,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5d9dd859f31791c942dc5b52":2,"reaction_5c090d96c2a9c2a674d35484":3,"reaction_567453d0b73d6a82ac8c5abc":1},"series":null,"dateUpdated":"2021-11-10T02:50:31.409Z","pendingPublicationApproval":false,"viewsUpdatedOn":1685424629162,"uniqueReactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35488","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d35484","567453d0b73d6a82ac8c5abc"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5d9dd859f31791c942dc5b52":2,"reaction_5c090d96c2a9c2a674d35484":3,"reaction_567453d0b73d6a82ac8c5abc":1},"id":"618b3344f991b025366e050c"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":59,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1635145699503/USfHeLWHj.png","autoGeneratedCover":"","brief":"WordPress is a free and open-source content management system written in PHP and paired with a MySQL or MariaDB database. It lets you create pages or posts without having to learn all that complicated HTML code and is among the most widely used websi...","content":"<p><em>WordPress</em> is a free and open-source content management system written in PHP and paired with a MySQL or MariaDB database. It lets you create pages or posts without having to learn all that complicated HTML code and is among the most widely used website creation tools around the world.\nAnd one of the main component are the plugins that can help admins to customize their website starting from Login, UI/UX, and many more but sadly not all those plugins provides those for free. </p>\n<p>To solve these thing <strong>SAWO Labs has launched a plugin for WordPress</strong>! All the features that were compatible while coding the site/blog is present in plugin and it's easier to integrate as well, on top it of with cherry you can chose where to add the widget while making the website!</p>\n<h3 id=\"lets-integrate-into-project\">Let's integrate into project!🚀</h3>\n<h4 id=\"step-1\">Step 1:-</h4>\n<p>Go to the dashboard and create the new project:</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1635146089285/BtXlH6qgH.png\" alt=\"image.png\" /></p>\n<h4 id=\"step-2\">Step 2:-</h4>\n<p>Enter the hostname of project, WordPress can be work either through localwp or WordPress Hosting.</p>\n<p><em>Note:- Depending which you are using only hostname will differ</em>\n<img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1635146258711/ZNvz1Cbja.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1635146380770/1sQXKUp_l.png\" alt=\"image.png\" />\nI am using LocalWP to make My site.</p>\n<h4 id=\"step-3\">Step 3:</h4>\n<p>In the WordPress Admin Panel, navigate to <code>Plugin</code>-><code>Add New</code>-><code>Search</code>-> <code>SAWO</code></p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1635146579937/v7C5VksXd.png\" alt=\"image.png\" /></p>\n<p>Click on <code>Install</code> then <code>Activate</code> the plugin. Once active move to the <code>Widget under Appearance</code></p>\n<p>Click on <code>+</code> in the area you want to the SAWO Authentication and simply type \"SAWO\"\nAdd the API key from Step-2, in the field asked. It will look something like this.</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1635147023405/a3GdBYEhFi.png\" alt=\"image.png\" /></p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1635147207479/_V0SKskYg.png\" alt=\"image.png\" /></p>\n<p><strong><em>Congratulation</em></strong>🎉🎉 you have successfully added the Authentication to your Site/Blog🙂. My experience of using the plugin was a great simpler than rest options, plus login page is as always easy to customize!</p>\n","contentMarkdown":"*WordPress* is a free and open-source content management system written in PHP and paired with a MySQL or MariaDB database. It lets you create pages or posts without having to learn all that complicated HTML code and is among the most widely used website creation tools around the world.\nAnd one of the main component are the plugins that can help admins to customize their website starting from Login, UI/UX, and many more but sadly not all those plugins provides those for free. \n\nTo solve these thing **SAWO Labs has launched a plugin for WordPress**! All the features that were compatible while coding the site/blog is present in plugin and it's easier to integrate as well, on top it of with cherry you can chose where to add the widget while making the website!\n\n### Let's integrate into project!🚀\n\n#### Step 1:- \n\nGo to the dashboard and create the new project:\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1635146089285/BtXlH6qgH.png)\n\n#### Step 2:-\n\nEnter the hostname of project, WordPress can be work either through localwp or WordPress Hosting.\n\n*Note:- Depending which you are using only hostname will differ*\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1635146258711/ZNvz1Cbja.png)\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1635146380770/1sQXKUp_l.png)\nI am using LocalWP to make My site.\n\n#### Step 3:\n\nIn the WordPress Admin Panel, navigate to ``Plugin``->``Add New``->`` Search``-> ``SAWO``\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1635146579937/v7C5VksXd.png)\n\nClick on ``Install`` then ``Activate`` the plugin. Once active move to the ```Widget under Appearance```\n\nClick on ``+`` in the area you want to the SAWO Authentication and simply type \"SAWO\"\nAdd the API key from Step-2, in the field asked. It will look something like this.\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1635147023405/a3GdBYEhFi.png)\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1635147207479/_V0SKskYg.png)\n\n***Congratulation***🎉🎉 you have successfully added the Authentication to your Site/Blog🙂. My experience of using the plugin was a great simpler than rest options, plus login page is as always easy to customize!\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5025.2506,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":true,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":false,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"61765ed47a94bb0be56757ca","title":"Secure your WordPress Sites","subtitle":"New SAWO Plugin for WordPress","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"secure-your-wordpress-sites","stickCoverToBottom":true,"pollOptions":[],"dateAdded":"2021-10-25T07:37:56.267Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckv6cl7j802vxcls15m3vfn5c","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"6176550f0f452c1cd94fc415","isRepublished":false,"hasPinnedTag":false,"readTime":2,"__v":0,"viewsUpdatedOn":1698649230841,"uniqueReactions":[],"reactionToCountMapUnique":{"any":1},"id":"61765ed47a94bb0be56757ca"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":392,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1647141341505/IUBKJsCWZ.jpg","autoGeneratedCover":"","brief":"Hello everyone 👋, If you are following me on my LinkedIn you might know that I joined SAWO Labs as a Developer Champ. And I have complete 1 month as it's a team member.\nI will be sharing my learning and insights about my experience in this blog. If ...","content":"<p>Hello everyone 👋, If you are following me on my LinkedIn you might know that I joined SAWO Labs as a Developer Champ. And I have complete 1 month as it's a team member.</p>\n<p>I will be sharing my learning and insights about my experience in this blog. If you would like to follow me through my 3 months journey, you can consider signing up on my newsletter on my profile so that you get notified when I share my learning and experience.</p>\n<h2 id=\"heading-what-all-i-did\">What all i did🚀</h2>\n<ol>\n<li><p>First thing i did after joining was played with SAWO SDK, implementing them in my projects, providing feedback and feature request as after all primary i am SAWO Developer champ first😂.</p>\n</li>\n<li><p>There were few beginners, who got stuck after creating the project and was unable to move on with the project, so stepping up, helped them and guided till the integration was successful.</p>\n</li>\n<li><p>As SAWO Labs are sponsors to many great hackathons, i was selected as a mentor for those from SAWO Team. This undoubtedly helped me on personal basis as well as professional interaction, as i got see the techstack works with which i wasn't that much familiar yet, while solving queries got to learn those from many brilliant hackers.</p>\n</li>\n<li><p>There are many new developers, who might the SAWO Labs works interesting but due to the skills are not able to implement those in their work, to help such new beginners i took the sessions, made videos, etc.. to help them understand how simple the things are and very easily those can be done.</p>\n</li>\n</ol>\n<p>I really believe when there's opportunity to learn, grow, and collaborate, one should never miss that. As this thought of mine has provided me with such a place were we are always asked to reach out in case we need any help or anything which needs to be discussed.</p>\n","contentMarkdown":"Hello everyone 👋, If you are following me on my LinkedIn you might know that I joined SAWO Labs as a Developer Champ. And I have complete 1 month as it's a team member.\n\nI will be sharing my learning and insights about my experience in this blog. If you would like to follow me through my 3 months journey, you can consider signing up on my newsletter on my profile so that you get notified when I share my learning and experience.\n\n## What all i did🚀\n\n1. First thing i did after joining was played with SAWO SDK, implementing them in my projects, providing feedback and feature request as after all primary i am SAWO Developer champ first😂.\n\n- There were few beginners, who got stuck after creating the project and was unable to move on with the project, so stepping up, helped them and guided till the integration was successful.\n\n- As SAWO Labs are sponsors to many great hackathons, i was selected as a mentor for those from SAWO Team. This undoubtedly helped me on personal basis as well as professional interaction, as i got see the techstack works with which i wasn't that much familiar yet, while solving queries got to learn those from many brilliant hackers.\n\n- There are many new developers, who might the SAWO Labs works interesting but due to the skills are not able to implement those in their work, to help such new beginners i took the sessions, made videos, etc.. to help them understand how simple the things are and very easily those can be done.\n\nI really believe when there's opportunity to learn, grow, and collaborate, one should never miss that. As this thought of mine has provided me with such a place were we are always asked to reach out in case we need any help or anything which needs to be discussed.\n\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5021.327,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":false,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"6173ad240f452c1cd94f98b4","title":"SAWO Developer Champ","subtitle":"A month Experience","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"sawo-developer-champ","series":"6173a71e0c5e175a1c615ba6","pollOptions":[],"dateAdded":"2021-10-23T06:35:16.578Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckv3fgx7e0mtvp5s1536n7lxk","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"6173a8f10c5e175a1c615bcc","isRepublished":false,"hasPinnedTag":false,"readTime":2,"__v":1,"viewsUpdatedOn":1698372027876,"coverImageAttribution":"","coverImagePhotographer":"","dateUpdated":"2022-03-13T03:15:57.615Z","isCoverAttributionHidden":false,"pendingPublicationApproval":false,"uniqueReactions":[],"reactionToCountMapUnique":{"any":1},"id":"6173ad240f452c1cd94f98b4"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":130,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1647141307251/jgs4DW2R1.png","autoGeneratedCover":"","brief":"Hello everyone 👋, If you are following me on my LinkedIn you might know that I joined SAWO Labs as a Developer Champ. And I have complete 1 month as it's a team member.\nTo be honest, I still can't believe that a month has passed so quickly. It has b...","content":"<p>Hello everyone 👋, If you are following me on my <a target=\"_blank\" href=\"https://linkedin.com/in/sonichigo\">LinkedIn</a> you might know that I joined SAWO Labs as a Developer Champ. And I have complete 1 month as it's a team member.</p>\n<p>To be honest, I still can't believe that a month has passed so quickly. It has been a lot of fun and collaboration.</p>\n<p>Okay, I will be sharing my learning and insights about my experience in this blog. If you would like to follow me through my 3 months journey, you can consider signing up on my newsletter on my profile so that you get notified when I share my learning and experience.</p>\n<p>Okay so let's get started.</p>\n<h1 id=\"heading-my-learning\">My Learning 🚀.</h1>\n<p>I joined team on 08/2021, but before getting diving into the how much i got to learn and improve upon, first thing we had after joining was the orientation - the best orientation in all and every program. There we discussed things like:</p>\n<ul>\n<li>What is program about</li>\n<li>What we will be doing</li>\n<li>Any shoutouts as the Days passed on I became comfortable. Yes in a week I felt like I belong here for a long time. I really like communicating with other teammates. Listening to their ideas, telling your ideas fearlessly, speaking up more. <a target=\"_blank\" href=\"https://www.linkedin.com/in/anujsharma378/\">Anuj</a>, <a target=\"_blank\" href=\"https://in.linkedin.com/in/meghna-das15\">Meghna</a> & <a target=\"_blank\" href=\"https://in.linkedin.com/in/cherishsantoshi\">Cherish</a> kept on telling us that don't feel left out. If you want to speak about something just do it. I personally feel like the current team is like perfectly matched puzzle blocks. We laugh at jokes 😂, share ideas 💡, thoughts🤔, etc.</li>\n</ul>\n<p>We are given the opportunity to learn, grow. We are always asked to reach out in case we need any help or anything which needs to be discussed. </p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1634711004618/8AES49pKj.jpeg\" alt=\"1632883497411.jfif\" /></p>\n","contentMarkdown":"Hello everyone 👋, If you are following me on my [LinkedIn](https://linkedin.com/in/sonichigo) you might know that I joined SAWO Labs as a Developer Champ. And I have complete 1 month as it's a team member.\n\nTo be honest, I still can't believe that a month has passed so quickly. It has been a lot of fun and collaboration.\n\nOkay, I will be sharing my learning and insights about my experience in this blog. If you would like to follow me through my 3 months journey, you can consider signing up on my newsletter on my profile so that you get notified when I share my learning and experience.\n\nOkay so let's get started.\n\n# My Learning 🚀.\n\nI joined team on 08/2021, but before getting diving into the how much i got to learn and improve upon, first thing we had after joining was the orientation - the best orientation in all and every program. There we discussed things like:\n- What is program about\n- What we will be doing\n- Any shoutouts as the Days passed on I became comfortable. Yes in a week I felt like I belong here for a long time. I really like communicating with other teammates. Listening to their ideas, telling your ideas fearlessly, speaking up more. [Anuj](https://www.linkedin.com/in/anujsharma378/), [Meghna](https://in.linkedin.com/in/meghna-das15) & [Cherish](https://in.linkedin.com/in/cherishsantoshi) kept on telling us that don't feel left out. If you want to speak about something just do it. I personally feel like the current team is like perfectly matched puzzle blocks. We laugh at jokes 😂, share ideas 💡, thoughts🤔, etc.\n\nWe are given the opportunity to learn, grow. We are always asked to reach out in case we need any help or anything which needs to be discussed. \n\n![1632883497411.jfif](https://cdn.hashnode.com/res/hashnode/image/upload/v1634711004618/8AES49pKj.jpeg)\n\n\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":5016.6326,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35486","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d3548a","5c090d96c2a9c2a674d35488","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc","567453d0b73d6a82ac8c5ab9"],"totalReactions":12,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"616fb6400c5e175a1c6109b8","title":"Joining SAWO as a Developer Champ","subtitle":"My 2 Week Learnings 🚀","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"joining-sawo-as-a-developer-champ","pollOptions":[],"dateAdded":"2021-10-20T06:25:04.476Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckuz4s8wq0101sss17bq0dnb5","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"616fb03dd78c655a2312765f","isRepublished":false,"hasPinnedTag":false,"readTime":2,"__v":1,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35484":2,"reaction_5c090d96c2a9c2a674d35485":2,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_567453d0b73d6a82ac8c5ab9":1},"series":"6173a71e0c5e175a1c615ba6","dateUpdated":"2022-03-13T03:15:19.220Z","pendingPublicationApproval":false,"viewsUpdatedOn":1693204228813,"coverImageAttribution":"","coverImagePhotographer":"","isCoverAttributionHidden":false,"stickCoverToBottom":false,"uniqueReactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35486","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d3548a","5c090d96c2a9c2a674d35488","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc","567453d0b73d6a82ac8c5ab9"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35484":2,"reaction_5c090d96c2a9c2a674d35485":2,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5d9dd859f31791c942dc5b52":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_567453d0b73d6a82ac8c5ab9":1},"id":"616fb6400c5e175a1c6109b8"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":122,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1632538772080/cKk0UtERi.jpeg","autoGeneratedCover":"","brief":"Hey there! So, I was working on building a web app on promoting health and for authentication i used SAWO Labs API. During the process, I found that there was a need to know more than what the official documentation provided. \nHere then is a small wa...","content":"<p>Hey there! So, I was working on building a web app on promoting health and for authentication i used SAWO Labs API. During the process, I found that there was a need to know more than what the official documentation provided. \nHere then is a small walkthrough to help you integrate SAWO Labs authentication with a Basic React applications.</p>\n<h4 id=\"baisc-features-of-the-web-app\">Baisc Features of the WEB APP</h4>\n<ul>\n<li>A Login Page</li>\n<li>A User Dashboard</li>\n</ul>\n<h4 id=\"lets-get-started\">Let’s get started</h4>\n<ol>\n<li><p>You need a SAWO Labs account in order to use this awesome stuff. Head over to <a target=\"_blank\" href=\"https://sawolabs.com\">sawolabs.com</a> and create your first project, select the platform and set the Host to localhost, if you chose to develop locally. Otherwise, you can set Host as your application URL.</p>\n</li>\n<li><p><strong>We will be choosing web as our platform!</strong>\n<img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1632537516009/Ugmb-yyzC.png\" alt=\"image.png\" /></p>\n</li>\n</ol>\n<ol>\n<li><p>Open the VScode and run <code>npx create-react-app Project</code> to create the react app default structure.</p>\n</li>\n<li><p>We need to have the SAWO labs package in our <em>node_modules</em>. So head over to the terminal, make sure, you have entered </p>\n<pre><code><span class=\"hljs-built_in\">cd</span> Project\n</code></pre><p>and run the following command to install the SAWO package: - </p>\n<pre><code><span class=\"hljs-built_in\">npm</span> i sawo \n</code></pre></li>\n<li><p>After the package is installed, head to <code>src/app.js</code> and import the SAWO package:- </p>\n</li>\n</ol>\n<pre><code><span class=\"hljs-keyword\">import</span> React <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\"react\"</span>;\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-string\">\"./App.css\"</span>;\n<span class=\"hljs-keyword\">import</span> Sawo <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\"sawo\"</span>;\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span> <span class=\"hljs-title\">App</span>(<span class=\"hljs-params\"></span>) </span>{\n\n<span class=\"hljs-keyword\">let</span> [payload, setPayload] = React.useState(<span class=\"hljs-literal\">false</span>);\n\nReact.useEffect(<span class=\"hljs-function\">() =></span> {\n <span class=\"hljs-keyword\">var</span> config = {\n <span class=\"hljs-attr\">containerID</span>: <span class=\"hljs-string\">\"sawo-container\"</span>,\n <span class=\"hljs-attr\">identifierType</span>: <span class=\"hljs-string\">\"email\"</span>,\n <span class=\"hljs-attr\">apiKey</span>: process.env.REACT_APP_API_SAWO,\n <span class=\"hljs-attr\">onSuccess</span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">payload</span>) =></span> {\n <span class=\"hljs-comment\">// console.log(payload); </span>\n setPayload(payload)\n },\n };\n <span class=\"hljs-keyword\">let</span> sawo = <span class=\"hljs-keyword\">new</span> Sawo(config);\n sawo.showForm();\n }, []); \n\n <span class=\"hljs-keyword\">return</span> (\n <span class=\"xml\"><span class=\"hljs-tag\"><<span class=\"hljs-name\">div</span>\n <span class=\"hljs-attr\">id</span>=<span class=\"hljs-string\">\"sawo-container\"</span>\n <span class=\"hljs-attr\">style</span>=<span class=\"hljs-string\">{{</span> <span class=\"hljs-attr\">height:</span> \"<span class=\"hljs-attr\">300px</span>\", <span class=\"hljs-attr\">width:</span> \"<span class=\"hljs-attr\">300px</span>\" }}\n ></span><span class=\"hljs-tag\"></<span class=\"hljs-name\">div</span>></span></span>\n );\n}\n<span class=\"hljs-keyword\">export</span> <span class=\"hljs-keyword\">default</span> App;\n</code></pre><p>also for the SAWO API to work you need the API key, which we get from the project console:-</p>\n<p><img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1632538176891/bJ5CZr7Rq.png\" alt=\"image.png\" /></p>\n<p>Save your API Key in the .env file and make sure you have added it before itself in .gitignore. The .env file should look like this: -\n <code>React_SAWO_API : Sample_API_KEY1223456</code></p>\n<h3 id=\"making-dashboard\">Making Dashboard</h3>\n<ol>\n<li><p>We are going to create a file <code>src/Dashboard.js</code>, which looks like this: -</p>\n<pre><code><span class=\"hljs-keyword\">import</span> React <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\"react\"</span>;\n<span class=\"hljs-keyword\">const</span> Dashboard = <span class=\"hljs-function\">(<span class=\"hljs-params\">props</span>) =></span> {\n<span class=\"hljs-keyword\">return</span> (\n <span class=\"xml\"><span class=\"hljs-tag\"><></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">h2</span>></span>Private Dashboard<span class=\"hljs-tag\"></<span class=\"hljs-name\">h2</span>></span>\n Email: {props.payload.identifier}\n <span class=\"hljs-tag\"></></span></span>\n);\n};\n<span class=\"hljs-keyword\">export</span> <span class=\"hljs-keyword\">default</span> Dashboard;\n</code></pre><p>*Note: As our method of Authentication is email, props.payload.identifier will return EMAIL-ID of the user.</p>\n</li>\n<li><p>Now we need to add the dashboard component to our app.js</p>\n</li>\n</ol>\n<pre><code><span class=\"hljs-keyword\">import</span> React <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\"react\"</span>;\n<span class=\"hljs-keyword\">import</span> logo <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\"./logo.svg\"</span>;\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-string\">\"./App.css\"</span>;\n\n<span class=\"hljs-comment\">//Dashboard Component</span>\n\n<span class=\"hljs-keyword\">import</span> Dashboard <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'./dashboard'</span>\n<span class=\"hljs-keyword\">import</span> Sawo <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\"sawo\"</span>;\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span> <span class=\"hljs-title\">App</span>(<span class=\"hljs-params\"></span>) </span>{ \n\n<span class=\"hljs-keyword\">let</span> [payload, setPayload] = React.useState(<span class=\"hljs-literal\">false</span>);\n\nReact.useEffect(<span class=\"hljs-function\">() =></span> {\n <span class=\"hljs-keyword\">var</span> config = {\n <span class=\"hljs-attr\">containerID</span>: <span class=\"hljs-string\">\"sawo-container\"</span>,\n <span class=\"hljs-attr\">identifierType</span>: <span class=\"hljs-string\">\"email\"</span>,\n <span class=\"hljs-attr\">apiKey</span>: process.env.REACT_APP_API_SAWO,\n <span class=\"hljs-attr\">onSuccess</span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">payload</span>) =></span> {\n <span class=\"hljs-comment\">// console.log(payload); </span>\n setPayload(payload)\n },\n };\n <span class=\"hljs-keyword\">let</span> sawo = <span class=\"hljs-keyword\">new</span> Sawo(config);\n sawo.showForm();\n }, []); \n <span class=\"hljs-keyword\">return</span> (<span class=\"xml\"><span class=\"hljs-tag\"><></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">div</span>\n <span class=\"hljs-attr\">id</span>=<span class=\"hljs-string\">\"sawo-container\"</span>\n <span class=\"hljs-attr\">style</span>=<span class=\"hljs-string\">{{</span> <span class=\"hljs-attr\">height:</span> \"<span class=\"hljs-attr\">300px</span>\", <span class=\"hljs-attr\">width:</span> \"<span class=\"hljs-attr\">300px</span>\" }}\n ></span><span class=\"hljs-tag\"></<span class=\"hljs-name\">div</span>></span>\n {payload && (\n <span class=\"hljs-tag\"><></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">Dashboard</span> <span class=\"hljs-attr\">payload</span>=<span class=\"hljs-string\">{payload}</span> /></span>\n <span class=\"hljs-tag\"></></span></span>\n )}\n</>\n );\n}\n<span class=\"hljs-keyword\">export</span> <span class=\"hljs-keyword\">default</span> App;\n</code></pre><p>And that’s it. Hope you enjoyed reading this article.</p>\n","contentMarkdown":"Hey there! So, I was working on building a web app on promoting health and for authentication i used SAWO Labs API. During the process, I found that there was a need to know more than what the official documentation provided. \nHere then is a small walkthrough to help you integrate SAWO Labs authentication with a Basic React applications.\n\n#### Baisc Features of the WEB APP\n- A Login Page\n- A User Dashboard\n\n#### Let’s get started\n1. You need a SAWO Labs account in order to use this awesome stuff. Head over to [sawolabs.com](https://sawolabs.com) and create your first project, select the platform and set the Host to localhost, if you chose to develop locally. Otherwise, you can set Host as your application URL.\n\n- **We will be choosing web as our platform!**\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1632537516009/Ugmb-yyzC.png)\n\n\n2. Open the VScode and run ``npx create-react-app Project`` to create the react app default structure.\n\n3. We need to have the SAWO labs package in our *node_modules*. So head over to the terminal, make sure, you have entered \n cd Project\nand run the following command to install the SAWO package: - \n npm i sawo \n\n4. After the package is installed, head to ``src/app.js`` and import the SAWO package:- \n\n```\nimport React from \"react\";\nimport \"./App.css\";\nimport Sawo from \"sawo\";\nfunction App() {\n\nlet [payload, setPayload] = React.useState(false);\n\nReact.useEffect(() => {\n var config = {\n containerID: \"sawo-container\",\n identifierType: \"email\",\n apiKey: process.env.REACT_APP_API_SAWO,\n onSuccess: (payload) => {\n // console.log(payload); \n setPayload(payload)\n },\n };\n let sawo = new Sawo(config);\n sawo.showForm();\n }, []); \n\n return (\n <div\n id=\"sawo-container\"\n style={{ height: \"300px\", width: \"300px\" }}\n ></div>\n );\n}\nexport default App;\n```\nalso for the SAWO API to work you need the API key, which we get from the project console:-\n\n![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1632538176891/bJ5CZr7Rq.png)\n\nSave your API Key in the .env file and make sure you have added it before itself in .gitignore. The .env file should look like this: -\n ```React_SAWO_API : Sample_API_KEY1223456```\n\n\n### Making Dashboard\n\n1. We are going to create a file ``src/Dashboard.js``, which looks like this: -\n```\nimport React from \"react\";\nconst Dashboard = (props) => {\n return (\n <>\n <h2>Private Dashboard</h2>\n Email: {props.payload.identifier}\n </>\n );\n};\nexport default Dashboard;\n```\n*Note: As our method of Authentication is email, props.payload.identifier will return EMAIL-ID of the user.\n\n2. Now we need to add the dashboard component to our app.js\n\n```\nimport React from \"react\";\nimport logo from \"./logo.svg\";\nimport \"./App.css\";\n\n//Dashboard Component\n\nimport Dashboard from './dashboard'\nimport Sawo from \"sawo\";\nfunction App() { \n\nlet [payload, setPayload] = React.useState(false);\n\nReact.useEffect(() => {\n var config = {\n containerID: \"sawo-container\",\n identifierType: \"email\",\n apiKey: process.env.REACT_APP_API_SAWO,\n onSuccess: (payload) => {\n // console.log(payload); \n setPayload(payload)\n },\n };\n let sawo = new Sawo(config);\n sawo.showForm();\n }, []); \n return (<>\n <div\n id=\"sawo-container\"\n style={{ height: \"300px\", width: \"300px\" }}\n ></div>\n {payload && (\n <>\n <Dashboard payload={payload} />\n </>\n )}\n</>\n );\n}\nexport default App;\n```\n\nAnd that’s it. Hope you enjoyed reading this article.","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["56744723958ef13879b95434","56744721958ef13879b94b00"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":4968.4576,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35485","567453d0b73d6a82ac8c5ab9","5c090d96c2a9c2a674d35488","5c090d96c2a9c2a674d3548a","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35486","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc"],"totalReactions":15,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"614e90f47ef2d57e218ee877","title":"React Authentication using SAWO Labs API","subtitle":"","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"react-authentication-using-sawo-labs-api","stickCoverToBottom":true,"pollOptions":[],"dateAdded":"2021-09-25T03:01:08.981Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"cktz7hpee0101wxs13or94y14","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"614e8a3e94bb297e1aad6016","isRepublished":false,"hasPinnedTag":false,"readTime":3,"__v":0,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35484":2,"reaction_5c090d96c2a9c2a674d35485":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d35486":3,"reaction_5d9dd859f31791c942dc5b52":3,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abc":1},"viewsUpdatedOn":1698373829156,"uniqueReactions":["5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d35485","567453d0b73d6a82ac8c5ab9","5c090d96c2a9c2a674d35488","5c090d96c2a9c2a674d3548a","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35486","5d9dd859f31791c942dc5b52","5c090d96c2a9c2a674d3548b","567453d0b73d6a82ac8c5abc"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35484":2,"reaction_5c090d96c2a9c2a674d35485":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d35486":3,"reaction_5d9dd859f31791c942dc5b52":3,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_567453d0b73d6a82ac8c5abc":1},"id":"614e90f47ef2d57e218ee877"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":25,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1647140950697/fs47fg_P-.png","autoGeneratedCover":"","brief":"What is SQL?\nSQL stands for Structured Query Language, and is used to communicate with a database using certain statements. SQL statements are used to perform tasks such as update data on a database, or retrieve data. Companies like Oracle, Sybase, M...","content":"<h3 id=\"heading-what-is-sql\">What is SQL?</h3>\n<p>SQL stands for Structured Query Language, and is used to communicate with a database using certain statements. SQL statements are used to perform tasks such as update data on a database, or retrieve data. Companies like Oracle, Sybase, Microsoft SQL Server, Access, Ingres, etc are relational database systems that uses SQL.</p>\n<h3 id=\"heading-what-is-nosql\">What is NoSQL?</h3>\n<p>NoSQL (“non SQL” or “not only SQL”) databases were developed with a focus on scaling, fast queries, allowing for frequent application changes, and making programming simpler for developers. Relational databases accessed with SQL (Structured Query Language) were developed with a focus on reducing data duplication as storage was much more costly than developer time. SQL databases tend to have rigid, complex, tabular schemas and typically require expensive vertical scaling.</p>\n<p><img src=\"https://www.improgrammer.net/wp-content/uploads/2020/04/NoSQL-Database-Types.jpg\" /></p>\n<h3 id=\"heading-what-is-cql-then\">What is CQL then?</h3>\n<p>CQL (Cassandra Query Language) is the language for managing database resources such as keyspaces, tables, functions, aggregates, user-defined types, roles, and access permissions. CQL can be used to insert, update, and query tables, plus much more. It is similar to SQL, so anyone familiar with the commands and statement will find it easy to work with.</p>\n<h2 id=\"heading-what-is-astra-db\">What is Astra DB?</h2>\n<p>DataStax Astra DB provides the ability to develop and deploy data-driven applications with a cloud-native service, without the hassles of database and infrastructure administration. By automating tuning and configuration, Astra DB radically simplifies database and streaming operations.</p>\n<p><img src=\"https://www.datastax.com/sites/default/files/content/blog/2021-03/astra-blog.png\" /></p>\n<p>Astra DB simplifies cloud-native Cassandra application development. It reduces deployment time from weeks to minutes, and delivers an unprecedented combination of serverless, pay-as-you-go pricing with the freedom and agility of multi-cloud and open source.</p>\n<p>The Cassandra Query Language SHell (CQLSH) is a command line shell for interacting with your database through Cassandra Query Language (CQL) provided by Datastax. This tool provides a useful interface for accessing the database and issuing CQL commands. Each DataStax Astra DB database includes an embedded CQL shell instance. In the Astra DB console, navigate to your database and click the CQL Console tab to open a CQLSH instance that is connected to your database. Issue CQL commands directly to your Astra DB database without navigating outside of your browser.</p>\n","contentMarkdown":"### What is SQL?\n\nSQL stands for Structured Query Language, and is used to communicate with a database using certain statements. SQL statements are used to perform tasks such as update data on a database, or retrieve data. Companies like Oracle, Sybase, Microsoft SQL Server, Access, Ingres, etc are relational database systems that uses SQL.\n\n### What is NoSQL?\n\nNoSQL (“non SQL” or “not only SQL”) databases were developed with a focus on scaling, fast queries, allowing for frequent application changes, and making programming simpler for developers. Relational databases accessed with SQL (Structured Query Language) were developed with a focus on reducing data duplication as storage was much more costly than developer time. SQL databases tend to have rigid, complex, tabular schemas and typically require expensive vertical scaling.\n\n<img src=\"https://www.improgrammer.net/wp-content/uploads/2020/04/NoSQL-Database-Types.jpg\" width=200px,height=250px>\n\n\n### What is CQL then?\n\nCQL (Cassandra Query Language) is the language for managing database resources such as keyspaces, tables, functions, aggregates, user-defined types, roles, and access permissions. CQL can be used to insert, update, and query tables, plus much more. It is similar to SQL, so anyone familiar with the commands and statement will find it easy to work with.\n\n## What is Astra DB?\n\nDataStax Astra DB provides the ability to develop and deploy data-driven applications with a cloud-native service, without the hassles of database and infrastructure administration. By automating tuning and configuration, Astra DB radically simplifies database and streaming operations.\n\n<img src=\"https://www.datastax.com/sites/default/files/content/blog/2021-03/astra-blog.png\" width=200px,height=250px>\n\nAstra DB simplifies cloud-native Cassandra application development. It reduces deployment time from weeks to minutes, and delivers an unprecedented combination of serverless, pay-as-you-go pricing with the freedom and agility of multi-cloud and open source.\n\nThe Cassandra Query Language SHell (CQLSH) is a command line shell for interacting with your database through Cassandra Query Language (CQL) provided by Datastax. This tool provides a useful interface for accessing the database and issuing CQL commands. Each DataStax Astra DB database includes an embedded CQL shell instance. In the Astra DB console, navigate to your database and click the CQL Console tab to open a CQLSH instance that is connected to your database. Issue CQL commands directly to your Astra DB database without navigating outside of your browser.","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":["56744722958ef13879b950eb"],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":4963.5059,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35486","5c090d96c2a9c2a674d3548a","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35488","567453d0b73d6a82ac8c5ab9","567453d0b73d6a82ac8c5abc","5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d3548b","5d9dd859f31791c942dc5b52"],"totalReactions":10,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"614bf944544e242e0c93de8c","title":"The Cassandra Query Language","subtitle":"Datastax-AstraDB","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"the-cassandra-query-language","pollOptions":[],"dateAdded":"2021-09-23T03:49:24.480Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"cktwec24i08y53gs1767abhpw","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"614bf0d3c790e72dddca730b","isRepublished":false,"hasPinnedTag":false,"readTime":2,"__v":1,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_5c090d96c2a9c2a674d35484":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_5d9dd859f31791c942dc5b52":1},"viewsUpdatedOn":1687354232693,"series":null,"coverImageAttribution":"","coverImagePhotographer":"","dateUpdated":"2022-03-13T03:10:29.168Z","isCoverAttributionHidden":false,"pendingPublicationApproval":false,"uniqueReactions":["5c090d96c2a9c2a674d35485","5c090d96c2a9c2a674d35486","5c090d96c2a9c2a674d3548a","567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35488","567453d0b73d6a82ac8c5ab9","567453d0b73d6a82ac8c5abc","5c090d96c2a9c2a674d35484","5c090d96c2a9c2a674d3548b","5d9dd859f31791c942dc5b52"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35486":1,"reaction_5c090d96c2a9c2a674d3548a":1,"reaction_567453d0b73d6a82ac8c5abd":1,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_567453d0b73d6a82ac8c5ab9":1,"reaction_567453d0b73d6a82ac8c5abc":1,"reaction_5c090d96c2a9c2a674d35484":1,"reaction_5c090d96c2a9c2a674d3548b":1,"reaction_5d9dd859f31791c942dc5b52":1},"id":"614bf944544e242e0c93de8c"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":6,"slugOverridden":true,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1628590050619/QoCOz_e1m.png","autoGeneratedCover":"","brief":"What is LetsGrowMore?\nLetsGrowMore is a community of the students, for the students, and by the students. Lets Grow More Summer of Code’21, LGM-SOC’21 is an Open Source Program organized by LetsGrowMore that aims at contributing in the different fiel...","content":"<h3 id=\"what-is-letsgrowmore\">What is LetsGrowMore?</h3>\n<p>LetsGrowMore is a community of the students, for the students, and by the students. Lets Grow More Summer of Code’21, LGM-SOC’21 is an Open Source Program organized by LetsGrowMore that aims at contributing in the different fields ranging from contribution in the field of Data Structures and Algorithms to Web Development to App Development to Machine Learning to making some cool stuff with Python, JavaScript, and much more. </p>\n<p>Visit LetsGrowMore at https://letsgrowmore.in/ & LGM-SOC’21 at https://lgmsoc.co/</p>\n<h3 id=\"got-to-do-in-the-program\">Got to do in the Program!</h3>\n<p>Talking about my experience at LGM-SOC’21, it was great being here. Initially, I had no idea of what Open Source means but slowly and steadily I came to know about the same and started contributing towards the projects. It was like taking part in Hacktoberfest, there were multiple projects to work on. And a great team of Mentors and Admins who, whenever need were right aside with us. </p>\n<p>I contributed to a single project Daily-Coding-DS-ALGO-Practice by Ayush Kumar. I started contributing to the project. Also to the <a target=\"_blank\" href=\"https://github.com/Ayushparikh-code/Web-dev-mini-projects\">Web-dev-mini-projects</a> by Ayush Parikh where i submitted the web app made on the React, It was a great experience for me contributing to both the projects.</p>\n<p>Although LGM-SOC’21 is over now, my learning with them hasn't. </p>\n","contentMarkdown":"### What is LetsGrowMore?\n\nLetsGrowMore is a community of the students, for the students, and by the students. Lets Grow More Summer of Code’21, LGM-SOC’21 is an Open Source Program organized by LetsGrowMore that aims at contributing in the different fields ranging from contribution in the field of Data Structures and Algorithms to Web Development to App Development to Machine Learning to making some cool stuff with Python, JavaScript, and much more. \n\nVisit LetsGrowMore at https://letsgrowmore.in/ & LGM-SOC’21 at https://lgmsoc.co/\n\n### Got to do in the Program!\n\nTalking about my experience at LGM-SOC’21, it was great being here. Initially, I had no idea of what Open Source means but slowly and steadily I came to know about the same and started contributing towards the projects. It was like taking part in Hacktoberfest, there were multiple projects to work on. And a great team of Mentors and Admins who, whenever need were right aside with us. \n\nI contributed to a single project Daily-Coding-DS-ALGO-Practice by Ayush Kumar. I started contributing to the project. Also to the [Web-dev-mini-projects](https://github.com/Ayushparikh-code/Web-dev-mini-projects) by Ayush Parikh where i submitted the web app made on the React, It was a great experience for me contributing to both the projects.\n\nAlthough LGM-SOC’21 is over now, my learning with them hasn't. \n\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":4879.5308,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":true,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":false,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"61125007fab8db0c4fc31a5c","title":"LGM-SOC’21 | Learning Experience","subtitle":"","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"lgm-soc21-learning-experience","stickCoverToBottom":false,"pollOptions":[],"dateAdded":"2021-08-10T10:08:07.823Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"cks5whm8907rgfjs16aq57lwt","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"61124da19584520c481f5fcb","isRepublished":false,"hasPinnedTag":false,"readTime":1,"__v":0,"viewsUpdatedOn":1682472655467,"uniqueReactions":[],"reactionToCountMapUnique":{"any":1},"id":"61125007fab8db0c4fc31a5c"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":20,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1627886776032/r238Ztwy8.jpeg","autoGeneratedCover":"","brief":"We started off with discussing the importance of knowing what we are doing here.\nThere are basically three types of hackers in this community – Grey Hat, Black Hat and White Hat \nhackers. This is a training session for the future White Hat’s, aka Eth...","content":"<p>\nWe started off with discussing the importance of knowing what we are doing here.\nThere are basically three types of hackers in this community – Grey Hat, Black Hat and White Hat \nhackers. This is a training session for the future White Hat’s, aka Ethical Hackers!\nWhite hat hackers choose to use their powers for good rather than evil. They employ the same \nmethods of hacking as black hats, with one exception- they do it with permission from the owner \nof the system first, which makes the process completely legal. White hat hackers perform \npenetration testing, test in-place security systems and perform vulnerability assessments for \ncompanies.</p>\n\n<p><strong>Beware: We are not here for personal gains! Apart from this, Enjoy Hacking! :D </strong></p>\n<p>Read more about this <a target=\"_blank\" href=\"https://sonichigo.hashnode.dev/introduction-to-ethical-hacking-or-linux-basics-or-networking\">here</a>\n<br /><br /></p>\n<h1 id=\"lessugreateradvanced-linuxlessugreater\">ADVANCED LINUX</h1>\n<p>Then I started with basic to advanced linux commands that we’re gonna work with throughout\nthis training session –</p>\n<ul>\n<li><p>NOTE – You always have a handy manual if you want to know more about any command, inbuilt\ninto Linux.</p>\n</li>\n<li><p>Usage</p>\n<ul>\n<li><code>man <command></code> Eg- man chmod</li>\n<li><code>ls –lra</code> - Listing directory contents { long listing, all, reverse }</li>\n<li><code>gedit</code> – graphical text editor</li>\n<li><code>nano/vim/vi</code> -terminal text editor</li>\n<li><code>echo “CONTENT” > file.txt</code> </li>\n<li><code>></code> is used to write/overwrite >> used to append to a file\nEg- ifconfig > ip.txt</li>\n</ul>\n</li>\n<li><p>cat / tac / more / less - display contents of a file</p>\n</li>\n<li>head / tail - first and last 10 lines of the content of a file</li>\n<li>nl – file with line number</li>\n<li>find command</li>\n<li>Recursive so it’ll literally search everywhere inside that directory</li>\n<li>Find /dir_name –name - to search inside a specific directory\n which -tells us the location of the binary. It searches for the binaries in </li>\n<li><code>“echo $PATH”</code>\n where is - It finds for the binaries anywhere, not only in the above locations\n locate - FASTER, uses a pre made database. NEW FILES CANNOT BE FOUND </li>\n</ul>\n<h1 id=\"lessugreaterinfo-gatheringlessugreater\">INFO GATHERING</h1>\n<p>So do you know about IoT devices? </p>\n<p>Basically these are very small computers embedded with electrical devices to form a smart \ndevice. Eg- Smart home stuff, cameras, etc</p>\n<p>Now if you wanna control them, you generally use your phone, and these IoT devices are \nconnected to your home router. The catch here is.. These devices then become connected to \nInternet UNSECURED. They are very tough to secure… think about it! Imagine you have to put a \npassword to switch on your smart bulb -_- </p>\n<p>The address to these devices can be found out easily on the internet with the help of Google \nDorking or Shodan.</p>\n<p>This is one of the few applications of Google Dorking. \n<img src=\"https://cdn.hashnode.com/res/hashnode/image/upload/v1627886794906/TqaAwj0Ag.png\" alt=\"0_EA62_VMXI5zNV8FS.png\" /></p>\n","contentMarkdown":"<p>\nWe started off with discussing the importance of knowing what we are doing here.\nThere are basically three types of hackers in this community – Grey Hat, Black Hat and White Hat \nhackers. This is a training session for the future White Hat’s, aka Ethical Hackers!\nWhite hat hackers choose to use their powers for good rather than evil. They employ the same \nmethods of hacking as black hats, with one exception- they do it with permission from the owner \nof the system first, which makes the process completely legal. White hat hackers perform \npenetration testing, test in-place security systems and perform vulnerability assessments for \ncompanies.</p>\n\n**Beware: We are not here for personal gains! Apart from this, Enjoy Hacking! :D **\n\nRead more about this [here](https://sonichigo.hashnode.dev/introduction-to-ethical-hacking-or-linux-basics-or-networking)\n<br><br>\n# <u>ADVANCED LINUX</u>\n\nThen I started with basic to advanced linux commands that we’re gonna work with throughout\nthis training session –\n- NOTE – You always have a handy manual if you want to know more about any command, inbuilt\ninto Linux.\n\n- Usage\n - ``man <command>`` Eg- man chmod\n - ``ls –lra`` - Listing directory contents { long listing, all, reverse }\n - ``gedit`` – graphical text editor\n - ``nano/vim/vi`` -terminal text editor\n - ``echo “CONTENT” > file.txt`` \n - ``>`` is used to write/overwrite >> used to append to a file\nEg- ifconfig > ip.txt\n\n- cat / tac / more / less - display contents of a file\n- head / tail - first and last 10 lines of the content of a file\n- nl <filename> – file with line number\n- find command\n- Recursive so it’ll literally search everywhere inside that directory\n- Find /dir_name –name <file> - to search inside a specific directory\n which <command_name> -tells us the location of the binary. It searches for the binaries in \n- ``“echo $PATH”``\n where is <cmnd_name> - It finds for the binaries anywhere, not only in the above locations\n locate <file/command> - FASTER, uses a pre made database. NEW FILES CANNOT BE FOUND \n\n# <u>INFO GATHERING</u>\n\nSo do you know about IoT devices? \n\nBasically these are very small computers embedded with electrical devices to form a smart \ndevice. Eg- Smart home stuff, cameras, etc\n\nNow if you wanna control them, you generally use your phone, and these IoT devices are \nconnected to your home router. The catch here is.. These devices then become connected to \nInternet UNSECURED. They are very tough to secure… think about it! Imagine you have to put a \npassword to switch on your smart bulb -_- \n\nThe address to these devices can be found out easily on the internet with the help of Google \nDorking or Shodan.\n\nThis is one of the few applications of Google Dorking. \n![0_EA62_VMXI5zNV8FS.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1627886794906/TqaAwj0Ag.png)\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":4863.9036,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35488"],"totalReactions":3,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":true,"syncAlgolia":true,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"6107950d3b9b85399dcf5a05","title":"Advanced Linux commands and Google Dorking","subtitle":"Session-2","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"advanced-linux-commands-and-google-dorking","stickCoverToBottom":false,"series":"60f7942a3e181324dac71847","pollOptions":[],"dateAdded":"2021-08-02T06:47:41.701Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckru9t1hl0saidps15fxoh268","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"6107918733a2a43971a2f847","isRepublished":false,"hasPinnedTag":false,"readTime":3,"__v":0,"reactionToCountMap":{"reaction_567453d0b73d6a82ac8c5abd":2,"reaction_5c090d96c2a9c2a674d35488":1},"viewsUpdatedOn":1694080834165,"uniqueReactions":["567453d0b73d6a82ac8c5abd","5c090d96c2a9c2a674d35488"],"reactionToCountMapUnique":{"reaction_567453d0b73d6a82ac8c5abd":2,"reaction_5c090d96c2a9c2a674d35488":1,"reaction_5c090d96c2a9c2a674d35484":0},"id":"6107950d3b9b85399dcf5a05"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":33,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1627216453964/P2uGgeBPL.webp","autoGeneratedCover":"","brief":"What is Ethical Hacking?\nHacking is the process of finding vulnerabilities in a system and using these found vulnerabilities to gain unauthorized access into the system to perform malicious activities ranging from deleting system files to stealing se...","content":"<h3 id=\"what-is-ethical-hacking\">What is Ethical Hacking?</h3>\n<p>Hacking is the process of finding vulnerabilities in a system and using these found vulnerabilities to gain unauthorized access into the system to perform malicious activities ranging from deleting system files to stealing sensitive information. Hacking is illegal and can lead to extreme consequences if you are caught in the act. People have been sentenced to years of imprisonment because of hacking.</p>\n<p><img src=\"https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-content/uploads/2018/12/Ethical-Hacking-What-is-Ethical-Hacking-Edureka-768x304.png\" /></p>\n<h4 id=\"these-are-various-types-of-hackers\">These are various types of hackers:</h4>\n<pre><code><span class=\"hljs-selector-tag\">1</span>. <span class=\"hljs-selector-tag\">White</span> <span class=\"hljs-selector-tag\">Hat</span> <span class=\"hljs-selector-tag\">Hackers</span> (Cyber-Security Hacker) \n<span class=\"hljs-selector-tag\">2</span>. <span class=\"hljs-selector-tag\">Black</span> <span class=\"hljs-selector-tag\">Hat</span> <span class=\"hljs-selector-tag\">Hackers</span> (Cracker) \n<span class=\"hljs-selector-tag\">3</span>. <span class=\"hljs-selector-tag\">Gray</span> <span class=\"hljs-selector-tag\">Hat</span> <span class=\"hljs-selector-tag\">Hackers</span> (Both)\n</code></pre><p>Let’s summarize them one-by-one.</p>\n<ol>\n<li><p><b>White Hat Hackers:</b>\nHere, we look for bugs and ethically report it to the organization. We are authorized as a user to test for bugs in a website or network and report it to them. White hat hackers generally get all the needed information about the application or network to test for, from the organization itself. They use their skills to test it before the website goes live or attacked by malicious hackers.</p>\n</li>\n<li><p><b>Black Hat Hackers:</b>\nHere, the organization doesn’t allow the user to test it. They unethically enter inside the website and steal data from the admin panel or manipulate the data. They only focus on themselves and the advantages they will get from the personal data for personal financial gain. They can cause major damage to the company by altering the functions which lead to the loss of the company at a much higher extent. This can even lead you to extreme consequences.</p>\n</li>\n<li><p><b>Grey Hat Hackers:</b>\nThey sometimes access to the data and violates the law. But never have the same intention as Black hat hackers, they often operate for the common good. The main difference is that they exploit vulnerability publicly whereas white hat hackers do it privately for the company.</p>\n</li>\n</ol>\n<h2 id=\"resources\">Resources</h2>\n<ol>\n<li><a target=\"_blank\" href=\"https://www.kali.org/blog/\">Read</a> about the Kali releases and it's features. Visually, it has become quite interesting recently! </li>\n<li><a target=\"_blank\" href=\"http://wiki.cas.mcmaster.ca/index.php/Ethical_Hacking\">Introduction to Ethical Hacking</a></li>\n<li><a target=\"_blank\" href=\"https://github.com/dexter-11/Konnexions-2020/blob/master/Day%201/Kali-Linux_Command_List.txt\">Basic Kali Linux Commands</a></li>\n<li>Linux essentials for Hackers - <a target=\"_blank\" href=\"https://hackersploit.org/linux-essentials-for-hackers/\">Hackersploit</a> || <a target=\"_blank\" href=\"https://null-byte.wonderhowto.com/how-to/linux-basics/\">Nullbyte</a> - RECOMMENDED</li>\n</ol>\n<h2 id=\"day-1a-handy-commands-and-actions\">Day 1a [Handy commands and actions]</h2>\n<h3 id=\"your-handy-terminal-shortcuts\">Your handy terminal shortcuts!</h3>\n<ul>\n<li><em>Ctrl+C</em> Terminates a job/process</li>\n<li><em>Ctrl+Shift+C</em> Copy</li>\n<li><em>Ctrl+Shift+V</em> Paste</li>\n</ul>\n<h3 id=\"keep-system-and-applications-up-to-date\">Keep system and applications up-to-date</h3>\n<p><strong><code>sudo apt-get update && sudo apt-get upgrade</code></strong> OR <strong><code>sudo apt update && sudo apt full-upgrade</code></strong> -> Update the kali repositories</p>\n<p><strong><code>sudo apt-get install <application_name></code></strong> -> Install/update git community repositories</p>\n<h3 id=\"access-privileges\">Access privileges</h3>\n<p>Most Popular command - <strong><code>chmod 777 <file></code></strong> </p>\n<p>When we want to set permissions, we just add up the number. \nFor example, to set the permissions to read and write, we will use ‘6’ (4 + 2) for the permission. </p>\n<p>Here are the different permutations:</p>\n<ul>\n<li>0 – <em>no permission</em></li>\n<li>1 – <em>EXECUTE</em></li>\n<li>2 – <em>WRITE</em></li>\n<li>3 – <em>write and execute</em></li>\n<li>4 – <em>READ</em></li>\n<li>5 – <em>read and execute</em></li>\n<li>6 – <em>read and write</em></li>\n<li>7 – <em>read, write, and execute</em></li>\n</ul>\n<p>Depending on the permissions you want to grant to the file, you just set the number accordingly.\nWhat about the 3 digits ‘777’? Well, the First digit is assigned to the Owner, the Second digit is assigned to the Group and the Third digit is assigned to the Others. \n<strong>So for a file with ‘777’ permission, everyone can read, write and execute the file.</strong></p>\n<h2 id=\"day-1b-types-of-hackers-or-networking\">Day 1b [Types of Hackers | Networking]</h2>\n<ol>\n<li><p><a target=\"_blank\" href=\"https://github.com/sundowndev/hacker-roadmap#wrench-exploitation-tools\">Hacker_Roadmap</a> (:star: Star this repository for future reference)</p>\n</li>\n<li><p><a target=\"_blank\" href=\"https://www.malwarefox.com/types-of-hackers/\">Types of Hackers</a> </p>\n</li>\n</ol>\n<h4 id=\"networking\">NETWORKING</h4>\n<pre><code>sudo ifconfig \n<span class=\"hljs-keyword\">OR</span> ip -a <span class=\"hljs-comment\">// network adapter information (Your machine's IP is visible at eth0)</span>\niwconfig <span class=\"hljs-comment\">// wlan adapters information</span>\nping <ip/url> <span class=\"hljs-comment\">// ping to check connection and stability</span>\narp -a <span class=\"hljs-comment\">// IP address with MAC address</span>\nroute <span class=\"hljs-comment\">//routing table tells you where the traffic exits</span>\nnetstat -ano <span class=\"hljs-comment\">// all open connections and which one is talking from what port number</span>\n</code></pre><ul>\n<li>Running a local sever on Kali machine -> <strong><code>python -m SimpleHTTPServer 8080</code></strong> <br />\nNow, go in any browser and enter <strong>:8080</strong> to access system files! <br /></li>\n</ul>\n<p>TCP : https smtp ftp <br /></p>\n<pre><code>1. Connection oriented <span class=\"hljs-tag\"><<span class=\"hljs-name\">br</span>/></span>\n2. Give Response <span class=\"hljs-tag\"><<span class=\"hljs-name\">br</span>/></span>\n</code></pre><p>UDP : dns ntp <br />\n 1.No response <br /></p>\n<p><strong><strong><strong>_</strong></strong></strong>Three Way Handshake<strong><strong><strong>__</strong></strong></strong> <br />\nCLIENT ---------->Server <br />\n <em>syn</em> <br />\nCLIENT<-----------Server <br />\n <em>ack+syn</em> <br />\nCLIENT----------->Server<br />\n <em>ack</em> <br />\nConnection complete! <br />\n<strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>__</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> <br /></p>\n<ul>\n<li><p><strong>Flags</strong> <br />\nFIN - transmission finished <br />\nPSH - send buffer <br />\nURG - important packet <br />\nRST - Reset connection <br /> <br /></p>\n</li>\n<li><p>Read about a <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Christmas_tree_packet\"><strong>Christmas Tree packet</strong></a>.\n<br /></p>\n</li>\n<li><p><strong>Ports</strong> <br />\n1.Open - that actively respond to incoming connection <br />\n2.Closed - that respond but does not have any services running on that port (Firewall not present) <br />\n3.Filtered - (Firewall present) protected and prevents nmap from determining open/closed <br />\n4.Unfiltered - nmap can access but cannot determine open/closed <br />\n5.Open-filtered - nmap belives to be open but can not say <br />\n6.Close-filtered - nmap belives to be closed but can not say <br /> <br /></p>\n</li>\n</ul>\n<h3 id=\"staying-anonymous-in-kali-linux\">Staying Anonymous in Kali Linux</h3>\n<p><a target=\"_blank\" href=\"https://www.youtube.com/watch?v=VZMHfO9rOCg&list=PLBf0hzazHTGOh6JBKc8WkpyuZgDPW6yTk&ab_channel=HackerSploit\">How to stay anonmous</a></p>\n","contentMarkdown":"### What is Ethical Hacking?\nHacking is the process of finding vulnerabilities in a system and using these found vulnerabilities to gain unauthorized access into the system to perform malicious activities ranging from deleting system files to stealing sensitive information. Hacking is illegal and can lead to extreme consequences if you are caught in the act. People have been sentenced to years of imprisonment because of hacking.\n\n<img src=\"https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-content/uploads/2018/12/Ethical-Hacking-What-is-Ethical-Hacking-Edureka-768x304.png\">\n\n#### These are various types of hackers:\n\n```\n1. White Hat Hackers (Cyber-Security Hacker) \n2. Black Hat Hackers (Cracker) \n3. Gray Hat Hackers (Both) \n```\n\nLet’s summarize them one-by-one.\n\n1. <b>White Hat Hackers:</b>\nHere, we look for bugs and ethically report it to the organization. We are authorized as a user to test for bugs in a website or network and report it to them. White hat hackers generally get all the needed information about the application or network to test for, from the organization itself. They use their skills to test it before the website goes live or attacked by malicious hackers.\n\n2. <b>Black Hat Hackers:</b>\nHere, the organization doesn’t allow the user to test it. They unethically enter inside the website and steal data from the admin panel or manipulate the data. They only focus on themselves and the advantages they will get from the personal data for personal financial gain. They can cause major damage to the company by altering the functions which lead to the loss of the company at a much higher extent. This can even lead you to extreme consequences.\n\n3. <b>Grey Hat Hackers:</b>\nThey sometimes access to the data and violates the law. But never have the same intention as Black hat hackers, they often operate for the common good. The main difference is that they exploit vulnerability publicly whereas white hat hackers do it privately for the company.\n\n## Resources\n\n1. [Read](https://www.kali.org/blog/) about the Kali releases and it's features. Visually, it has become quite interesting recently! \n2. [Introduction to Ethical Hacking](http://wiki.cas.mcmaster.ca/index.php/Ethical_Hacking)\n3. [Basic Kali Linux Commands](https://github.com/dexter-11/Konnexions-2020/blob/master/Day%201/Kali-Linux_Command_List.txt)\n4. Linux essentials for Hackers - [Hackersploit](https://hackersploit.org/linux-essentials-for-hackers/) || [Nullbyte](https://null-byte.wonderhowto.com/how-to/linux-basics/) - RECOMMENDED\n\n\n\n\n## Day 1a [Handy commands and actions]\n\n### Your handy terminal shortcuts!\n* *Ctrl+C* Terminates a job/process\n* *Ctrl+Shift+C* Copy\n* *Ctrl+Shift+V* Paste\n\n### Keep system and applications up-to-date\n\n**`sudo apt-get update && sudo apt-get upgrade`** OR **`sudo apt update && sudo apt full-upgrade`** -> Update the kali repositories\n\n**`sudo apt-get install <application_name>`** -> Install/update git community repositories\n\n\n### Access privileges\nMost Popular command - **`chmod 777 <file>`** \n \nWhen we want to set permissions, we just add up the number. \nFor example, to set the permissions to read and write, we will use ‘6’ (4 + 2) for the permission. \n \nHere are the different permutations:\n * 0 – *no permission*\n * 1 – *EXECUTE*\n * 2 – *WRITE*\n * 3 – *write and execute*\n * 4 – *READ*\n * 5 – *read and execute*\n * 6 – *read and write*\n * 7 – *read, write, and execute*\n \nDepending on the permissions you want to grant to the file, you just set the number accordingly.\nWhat about the 3 digits ‘777’? Well, the First digit is assigned to the Owner, the Second digit is assigned to the Group and the Third digit is assigned to the Others. \n**So for a file with ‘777’ permission, everyone can read, write and execute the file.**\n\n\n## Day 1b [Types of Hackers | Networking]\n\n1. [Hacker_Roadmap](https://github.com/sundowndev/hacker-roadmap#wrench-exploitation-tools) (:star: Star this repository for future reference)\n\n2. [Types of Hackers](https://www.malwarefox.com/types-of-hackers/) \n\n#### NETWORKING\n```\nsudo ifconfig \nOR ip -a // network adapter information (Your machine's IP is visible at eth0)\niwconfig // wlan adapters information\nping <ip/url> // ping to check connection and stability\narp -a // IP address with MAC address\nroute //routing table tells you where the traffic exits\nnetstat -ano // all open connections and which one is talking from what port number\n```\n\n* Running a local sever on Kali machine -> **`python -m SimpleHTTPServer 8080`** <br/>\nNow, go in any browser and enter **<kali_ip>:8080** to access system files! <br/>\n\nTCP : https smtp ftp <br/>\n 1. Connection oriented <br/>\n 2. Give Response <br/>\n \nUDP : dns ntp <br/>\n 1.No response <br/>\n\n_____________Three Way Handshake______________ <br/>\nCLIENT ---------->Server <br/>\n *syn* <br/>\nCLIENT<-----------Server <br/>\n *ack+syn* <br/>\nCLIENT----------->Server<br/>\n *ack* <br/>\nConnection complete! <br/>\n______________________________________________ <br/>\n\n* **Flags** <br/>\nFIN - transmission finished <br/>\nPSH - send buffer <br/>\nURG - important packet <br/>\nRST - Reset connection <br/> <br/>\n\n* Read about a [**Christmas Tree packet**](https://en.wikipedia.org/wiki/Christmas_tree_packet).\n<br/>\n\n* **Ports** <br/>\n1.Open - that actively respond to incoming connection <br/>\n2.Closed - that respond but does not have any services running on that port (Firewall not present) <br/>\n3.Filtered - (Firewall present) protected and prevents nmap from determining open/closed <br/>\n4.Unfiltered - nmap can access but cannot determine open/closed <br/>\n5.Open-filtered - nmap belives to be open but can not say <br/>\n6.Close-filtered - nmap belives to be closed but can not say <br/> <br/>\n\n\n### Staying Anonymous in Kali Linux\n[How to stay anonmous](https://www.youtube.com/watch?v=VZMHfO9rOCg&list=PLBf0hzazHTGOh6JBKc8WkpyuZgDPW6yTk&ab_channel=HackerSploit)","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":4849.0063,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":[],"totalReactions":0,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":false,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"60fd5a6518fbbb77c94679f0","title":"Introduction to Ethical Hacking | Linux Basics | Networking","subtitle":"","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"introduction-to-ethical-hacking-or-linux-basics-or-networking","series":"60f7942a3e181324dac71847","pollOptions":[],"dateAdded":"2021-07-25T12:34:45.918Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckrj6okab0qtrnts101dh66dx","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"60fd58af18fbbb77c94679d1","isRepublished":false,"hasPinnedTag":false,"readTime":4,"__v":0,"viewsUpdatedOn":1697785234344,"uniqueReactions":[],"reactionToCountMapUnique":{"any":1},"id":"60fd5a6518fbbb77c94679f0"},{"reward":{"type":"xlm"},"sourcedFromGithub":false,"githubAsSourceMeta":null,"isAnonymous":false,"views":21,"slugOverridden":false,"coverImage":"https://cdn.hashnode.com/res/hashnode/image/upload/v1626837656918/mrzhATJE8.jpeg","autoGeneratedCover":"","brief":"In recent years, Serverless adoption has started, with more and more individuals depending on Serverless technology to meet organizations’ specific needs. A survey conducted by Serverless Inc. showed in 2018 that half of the respondents used Serverle...","content":"<p>In recent years, Serverless adoption has started, with more and more individuals depending on Serverless technology to meet organizations’ specific needs. A survey conducted by Serverless Inc. showed in 2018 that half of the respondents used Serverless in their job, and the numbers are projected to rise further. In this post, we would get around the terms so that you can start your own Serverless journey 😉<br />\nLet’s get started!</p>\n<h4 id=\"what-is-a-server\"><strong>What is a Server?</strong></h4>\n<p>\nIf you have been on the internet even for a while, you have undoubtedly interacted with a server. Servers are a piece of specific hardware which ‘serves’ information or data to you. The specific hardware contains a lot of memory, speedy internet and generally hosted in massive data centres with other servers.</p>\n\n<h4 id=\"the-limitation\"><strong>The Limitation</strong></h4>\n<p>\nMost serverless providers won’t let your code execute for more than a few minutes, and when you spin up a function, it doesn’t retain any stateful data from previously run instances. A related problem is that serverless code can take as long as several seconds to spin up — not a problem for many use cases, but if your application requires low latency, be warned.</p><p>\nYou can always jump into a scalable cloud computing infrastructure.Although there are open source options available, the serverless market is dominated by the big commercial cloud providers, as we’ll discuss in a moment. That means developers often end up using tooling from their vendors, which makes it hard to switch if they grow dissatisfied. And because so much of serverless computing takes place, by definition, on the vendor’s infrastructure, it can be difficult to integrate serverless code into in-house development and testing pipelines.</p>\n\n<h4 id=\"what-is-serverless\"><strong>What is Serverless?</strong></h4>\n<p>\nServerless functions are event-driven, meaning the code is invoked only when triggered by a request. The provider charges only for compute time used by that execution, rather than a flat monthly fee for maintaining a physical or virtual server. These functions can be connected together to create a processing pipeline, or they can serve as components of a larger application, interacting with other code running in containers or on conventional servers.</p>\n<p><img src=\"https://miro.medium.com/max/3600/1*PyPO0Tq1VC4ZfIGQusEw4w.jpeg\" alt /></p>\n\n<h3 id=\"how-serverless-works\"><strong>How ServerLess Works?</strong></h3>\n<p>\nDevelopers rely on serverless to execute specific functions. Because of this, cloud service providers offer Functions as a Service (FaaS). Below, you can see how functions are written and executed in a serverless way.</p><p>\n1. <strong>The developer writes a function.</strong> This function often serves a specific purpose within the application code.\n2. <strong>The developer defines an event. </strong>The event is what triggers the cloud service provider to execute the function. A common type of event is an HTTP request.\n3. <strong>The event is triggered.</strong> If the defined event is an HTTP request, a user triggers the event with a click or similar action.\n4. <strong>The function is executed.</strong> The cloud service provider checks if an instance of the function is already running. If not, it starts a new one for the function.\n5. <strong>The result is sent to the client.</strong> The user sees the result of the executed function inside the application.</p>\n\n<h3 id=\"serverless-vendors-aws-lambda-azure-functions-and-google-cloud-functionslesspgreater\"><strong>Serverless vendors: AWS Lambda, Azure Functions, and Google Cloud Functions</strong><p></p></h3>\n<p>The modern age of serverless computing began with the launch of AWS Lambda, a platform based on Amazon’s cloud service, in 2014. Microsoft followed suit with Azure Functions in 2016. Google Cloud Functions, which had been in beta since 2017, finally reached production status in July 2018. The three services have slightly different limitations, advantages, supported languages, and ways of doing things.\n<img src=\"https://miro.medium.com/max/1050/1*9v5XVNWV1CPBW49l-yZMmA.png\" />\n</p><p></p>\n","contentMarkdown":"In recent years, Serverless adoption has started, with more and more individuals depending on Serverless technology to meet organizations’ specific needs. A survey conducted by Serverless Inc. showed in 2018 that half of the respondents used Serverless in their job, and the numbers are projected to rise further. In this post, we would get around the terms so that you can start your own Serverless journey 😉<br>\nLet’s get started!\n\n#### **What is a Server?**\n<p>\nIf you have been on the internet even for a while, you have undoubtedly interacted with a server. Servers are a piece of specific hardware which ‘serves’ information or data to you. The specific hardware contains a lot of memory, speedy internet and generally hosted in massive data centres with other servers.</p>\n\n#### **The Limitation** \n<p>\nMost serverless providers won’t let your code execute for more than a few minutes, and when you spin up a function, it doesn’t retain any stateful data from previously run instances. A related problem is that serverless code can take as long as several seconds to spin up — not a problem for many use cases, but if your application requires low latency, be warned.</p><p>\nYou can always jump into a scalable cloud computing infrastructure.Although there are open source options available, the serverless market is dominated by the big commercial cloud providers, as we’ll discuss in a moment. That means developers often end up using tooling from their vendors, which makes it hard to switch if they grow dissatisfied. And because so much of serverless computing takes place, by definition, on the vendor’s infrastructure, it can be difficult to integrate serverless code into in-house development and testing pipelines.</p>\n\n#### **What is Serverless?**\n<p>\nServerless functions are event-driven, meaning the code is invoked only when triggered by a request. The provider charges only for compute time used by that execution, rather than a flat monthly fee for maintaining a physical or virtual server. These functions can be connected together to create a processing pipeline, or they can serve as components of a larger application, interacting with other code running in containers or on conventional servers.</p>\n<p><img src=\"https://miro.medium.com/max/3600/1*PyPO0Tq1VC4ZfIGQusEw4w.jpeg\" alt/text=\"Servers\"></p>\n\n### **How ServerLess Works?** \n<p>\nDevelopers rely on serverless to execute specific functions. Because of this, cloud service providers offer Functions as a Service (FaaS). Below, you can see how functions are written and executed in a serverless way.</p><p>\n1. **The developer writes a function.** This function often serves a specific purpose within the application code.\n2. **The developer defines an event. **The event is what triggers the cloud service provider to execute the function. A common type of event is an HTTP request.\n3. **The event is triggered.** If the defined event is an HTTP request, a user triggers the event with a click or similar action.\n4. **The function is executed.** The cloud service provider checks if an instance of the function is already running. If not, it starts a new one for the function.\n5. **The result is sent to the client.** The user sees the result of the executed function inside the application.</p>\n\n### **Serverless vendors: AWS Lambda, Azure Functions, and Google Cloud Functions**<p>\nThe modern age of serverless computing began with the launch of AWS Lambda, a platform based on Amazon’s cloud service, in 2014. Microsoft followed suit with Azure Functions in 2016. Google Cloud Functions, which had been in beta since 2017, finally reached production status in July 2018. The three services have slightly different limitations, advantages, supported languages, and ways of doing things.\n<img src=\"https://miro.medium.com/max/1050/1*9v5XVNWV1CPBW49l-yZMmA.png\">\n</p>\n\n\n","hasPolls":false,"totalPollVotes":0,"upvotes":0,"downvotes":0,"tags":[],"untaggedFrom":[],"upvotedBy":[],"downvotedBy":[],"popularity":4840.5886,"discussionScore":0,"responses":[],"responseCount":0,"replyCount":0,"followers":[],"isActive":true,"isFeatured":false,"isEngaging":false,"answeredByTarget":false,"inviters":[],"isDelisted":false,"isNotified":false,"duplicatePosts":[],"numCollapsed":0,"hasReward":false,"bookmarkedIn":[],"similarPostIds":[],"reactions":["5c090d96c2a9c2a674d35485"],"totalReactions":1,"reactionsByCurrentUser":[],"totalReactionsByCurrentUser":0,"isPinnedToBlog":false,"disableComments":false,"commentsPaused":false,"hasLatex":false,"syncAlgolia":true,"enableToc":false,"toc":[],"numUniqueUsersWhoReacted":0,"_id":"60f792b5410a0224b5d500d5","title":"What are Serverless? Why do you need them?","subtitle":"","type":"story","partOfPublication":true,"publication":"60f6da61410a0224b5d4ed48","slug":"what-are-serverless-why-do-you-need-them","stickCoverToBottom":false,"pollOptions":[],"dateAdded":"2021-07-21T03:21:25.358Z","badges":[],"questionReplies":[],"contributors":[],"cuid":"ckrcx5ju307cn91s18m8q7rfj","author":"60f6b06bd6a73079b398bede","followersCount":1,"draft":"60f78f573e181324dac717fe","isRepublished":false,"hasPinnedTag":false,"readTime":3,"__v":0,"reactionToCountMap":{"reaction_5c090d96c2a9c2a674d35485":1},"viewsUpdatedOn":1691834424839,"uniqueReactions":["5c090d96c2a9c2a674d35485"],"reactionToCountMapUnique":{"reaction_5c090d96c2a9c2a674d35485":1,"reaction_5c090d96c2a9c2a674d35484":0},"id":"60f792b5410a0224b5d500d5"}]}