<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sayan Mondal</title>
    <description>The latest articles on DEV Community by Sayan Mondal (@sayanide).</description>
    <link>https://dev.to/sayanide</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F393931%2F9dce4e96-9409-4261-bc79-c4eab026e975.jpeg</url>
      <title>DEV Community: Sayan Mondal</title>
      <link>https://dev.to/sayanide</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sayanide"/>
    <language>en</language>
    <item>
      <title>LitmusChaos is Heading to KubeCon + CloudNativeCon Europe 2025 – Join the Chaos!</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Wed, 26 Mar 2025 05:39:15 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/litmuschaos-is-heading-to-kubecon-cloudnativecon-europe-2025-join-the-chaos-g92</link>
      <guid>https://dev.to/litmus-chaos/litmuschaos-is-heading-to-kubecon-cloudnativecon-europe-2025-join-the-chaos-g92</guid>
      <description>&lt;p&gt;&lt;em&gt;March 26, 2025&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Project post by Sayan Mondal, Community Manager, LitmusChaos&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The cloud native community is gearing up for one of the most anticipated events of the year, &lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" rel="noopener noreferrer"&gt;KubeCon + CloudNativeCon Europe 2025&lt;/a&gt;, happening in the vibrant city of London from April 1 - 4, 2025. And guess what? LitmusChaos is back and thrilled to be part of the action once again!&lt;/p&gt;

&lt;p&gt;No matter if you’ve been doing chaos engineering for a while or you’re just starting to explore the world of reliability, we’re excited to connect with you. We’ve got some fun and insightful talks lined up, hands-on demos at our booth, and lots of conversations waiting to happen. Here’s a sneak peek at what LitmusChaos has planned for KubeCon EU 2025&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Chaos Talks You Won’t Want to Miss
&lt;/h2&gt;

&lt;p&gt;We’re excited to be part of the conference schedule with &lt;strong&gt;two impactful sessions&lt;/strong&gt; that dive deep into chaos engineering and reliability practices in cloud native ecosystems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lightning Talk:&lt;/strong&gt;
&lt;a href="https://sched.co/1tcw9" rel="noopener noreferrer"&gt;Project Lightning Talk: Chaos Unleashed: LitmusChaos and Its Journey Towards CNCF Graduation - Vedant Shrotria, Maintainer&lt;/a&gt;
🗓 &lt;strong&gt;Tuesday April 1, 2025&lt;/strong&gt;
🕐 &lt;strong&gt;14:22 - 14:27 BST&lt;/strong&gt;
📍 &lt;strong&gt;Platinum Suite | Level 3&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Join us to explore the essence of LitmusChaos and its roadmap to becoming a CNCF Graduated project&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Session Talk:&lt;/strong&gt;
&lt;a href="https://sched.co/1td04" rel="noopener noreferrer"&gt;Driving Chaos Engineering Forward: What’s New and Next With LitmusChaos - Sarthak Jain &amp;amp; Saranya Jena, Harness&lt;/a&gt; 
🗓 &lt;strong&gt;Thursday, April 3, 2025&lt;/strong&gt;
🕐 &lt;strong&gt;16:00 - 16:30 BST&lt;/strong&gt;
📍 &lt;strong&gt;Level 3 | ICC Capital Suite 7-9&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Explore the latest advancements in chaos engineering for cloud-native systems. This session will cover key updates from recent releases, including enhanced resilience testing, observability, and scalability features, while showcasing how they address real-world challenges faced by Developers and SREs.&lt;/p&gt;




&lt;h2&gt;
  
  
  📍 Visit Us at the LitmusChaos Booth
&lt;/h2&gt;

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

&lt;p&gt;Want to get hands-on with chaos engineering? Come meet the maintainers, explore live demos, and learn how LitmusChaos can integrate into your SRE and platform engineering workflows.&lt;/p&gt;

&lt;h4&gt;
  
  
  Booth Details:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Kiosk Number:&lt;/strong&gt; 10A&lt;br&gt;
&lt;strong&gt;Location:&lt;/strong&gt; Excel London | Level 1 | North Hall | Entrance N8-N9 &lt;br&gt;
&lt;strong&gt;Project Pavilion Hours (BST):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wednesday, April 2:&lt;/strong&gt; 15:30 – 19:45&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thursday, April 3:&lt;/strong&gt; 14:00 – 17:00&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friday, April 4:&lt;/strong&gt; 12:30 – 14:00&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ll be showcasing new features, running live chaos experiments, and walking through use cases from real production environments. If you’ve been curious about how chaos fits into GitOps, platform engineering, or if you even need an additional layer in your reliability journey, this is the place to be.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Project Engagement Opportunities
&lt;/h2&gt;

&lt;p&gt;There are multiple ways you can engage with us at KubeCon EU with the latest project engagement opportunities for the community as well as for projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;☕ Meet us at the Project Pavilion Lounge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Project Pavilion Lounge, situated at the heart of the Pavilion, offers projects and attendees a retreat for unwinding and networking in a laid-back environment. Come chat with us at booth 10A, where the chaos engineers will be hanging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;☕ Let’s Chat at Coffee Stations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Coffee stations will be conveniently located on both sides of the Pavilion, offering a refreshing array of hot beverages to energize and invigorate attendees throughout the event.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📍 Ad-Hoc Meeting Tables:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Adjacent to the Project Pavilion, designated tables will be available for projects interested in hosting impromptu on-site meetings. These tables operate on a first-come, first-served basis, providing projects and event attendees the opportunity to convene and collaborate throughout the duration of the week.&lt;/p&gt;

&lt;p&gt;Want to plan a quick sync or deep-dive chat with us during the event? &lt;strong&gt;Drop a note at &lt;a href="mailto:sayan.mondal@harness.io"&gt;sayan.mondal@harness.io&lt;/a&gt;&lt;/strong&gt; and we’ll make sure we catch up at KubeCon EU 2025!&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Come Along and Learn More About Chaos Engineering
&lt;/h2&gt;

&lt;p&gt;Here’s your opportunity to meet the LitmusChaos team, grab some cool LitmusChaos stickers, and ask questions in person. Whether you’re a Chaos Engineering expert, user, enthusiast, or just getting started, the LitmusChaos community is here to help you get the most out of your reliability journey.&lt;/p&gt;

&lt;p&gt;At our booth, you’ll get guidance on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Getting Started with Chaos Engineering&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Getting Started with LitmusChaos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learning more about Chaos Engineering adoption&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Questions on LitmusChaos (blockers, doubts, next steps, choosing the right experiments)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Latest updates and enhancements in LitmusChaos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LitmusChaos Roadmap&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Participating in the LitmusChaos community&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Becoming a contributor or a future maintainer&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🌐 Stay Connected with LitmusChaos&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Whether you're attending KubeCon EU 2025 or following the updates from afar, there are plenty of ways to stay connected and be part of the LitmusChaos community.&lt;/p&gt;

&lt;p&gt;We’re an open, welcoming space for chaos engineering enthusiasts, platform engineers, reliability folks, contributors, or anyone simply curious to learn more about building resilient systems. And we’d love to have you join us!&lt;/p&gt;

&lt;p&gt;Here’s how you can get involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;💻 Visit the &lt;a href="https://litmuschaos.io/" rel="noopener noreferrer"&gt; LitmusChaos website&lt;/a&gt; to learn about the project, use cases, architecture, and everything chaos engineering.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;💬 Join the conversation on the &lt;code&gt;#litmus&lt;/code&gt; channel in the Kubernetes Slack, ask questions, share ideas, or just hang out with the community.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🛠 Contribute to the project! Check out our&lt;a href="https://github.com/litmuschaos/litmus/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt; Contributing Guide&lt;/a&gt; and start with an issue, suggestion, or PR — every contribution counts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📺 Subscribe to the &lt;a href="https://www.youtube.com/@LitmusChaos" rel="noopener noreferrer"&gt; LitmusChaos YouTube Channel&lt;/a&gt; for community meetings, demos, tutorials, and project updates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🐦 Follow &lt;a href="https://twitter.com/LitmusChaos" rel="noopener noreferrer"&gt;@LitmusChaos on Twitter/X&lt;/a&gt; or &lt;a href="https://www.linkedin.com/company/litmuschaos/" rel="noopener noreferrer"&gt;@litmuschaos on LinkedIn&lt;/a&gt; for the latest news, release updates, and community shoutouts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✍️ Explore the &lt;a href="https://litmuschaos.io/blog" rel="noopener noreferrer"&gt;LitmusChaos blog&lt;/a&gt; for stories, tutorials, and deep dives. Want to share your own experience with Litmus? Publish a blog on&lt;a href="https://dev.to/"&gt; DEV.to&lt;/a&gt; and tag it with &lt;strong&gt;#litmuschaos&lt;/strong&gt;, we’d love to read it!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See you in London!&lt;/p&gt;

</description>
      <category>litmuschaos</category>
      <category>opensource</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>Streamlined Incident Management in a Cloud Native World</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Fri, 07 Feb 2025 05:34:17 +0000</pubDate>
      <link>https://dev.to/sayanide/streamlined-incident-management-in-a-cloud-native-world-1ep0</link>
      <guid>https://dev.to/sayanide/streamlined-incident-management-in-a-cloud-native-world-1ep0</guid>
      <description>&lt;p&gt;Incidents happen. Whether you're running a small startup or managing a large-scale cloud-native infrastructure, downtime, bugs, and unexpected issues are inevitable. The real challenge isn't just fixing the problem—it's managing the chaos that ensues when things go wrong. Who’s on call? How do you notify the right people? How do you ensure everyone is on the same page? These are the questions that keep engineers up at night.&lt;/p&gt;

&lt;p&gt;That’s where having a consistent and well-structured incident management approach comes into play. But with so many solutions and frameworks out there, it can be tricky to settle on one that feels right for your organization. This blog aims to unravel why a specialized incident management tool can make life easier for every team—dev, ops, and beyond, when the pressure is on.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Challenge of Modern Incident Management
&lt;/h2&gt;

&lt;p&gt;Modern distributed systems are complex. There’s the interplay of microservices, container platforms, and a host of monitoring and logging tools. When something goes off the rails, the immediate questions usually revolve around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do we alert the right people in real time?&lt;/li&gt;
&lt;li&gt;How do we gather all the context needed to quickly understand what went wrong?&lt;/li&gt;
&lt;li&gt;How do we keep everyone in the loop without overwhelming them with noise?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A single issue can cascade across multiple services, teams, and even time zones. Traditional incident management tools often fall short in these environments because they weren’t built with cloud-native architectures in mind.&lt;/p&gt;

&lt;p&gt;Here’s what typically happens during an incident:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Detection&lt;/strong&gt;: Something goes wrong. Maybe it’s a spike in error rates, a failed deployment, or a sudden drop in traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notification&lt;/strong&gt;: Someone (or something) needs to alert the right people. But who’s on call? Are they even awake?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coordination&lt;/strong&gt;: Once the team is alerted, they need to collaborate to diagnose and fix the issue. This often involves jumping between Slack, monitoring tools, and runbooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolution&lt;/strong&gt;: Finally, the issue is resolved, but the work isn’t over. You need to document what happened, why it happened, and how to prevent it in the future.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This process can be messy, time-consuming, and stressful—especially when you’re dealing with a production outage at 3 a.m.&lt;/p&gt;

&lt;p&gt;A typical approach might involve rummaging through multiple dashboards, scouring logs, or manually pinging team members. While this can work, it’s chaotic enough to slow you down, sometimes with real consequences for customers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an Open Source Incident Management Tool?
&lt;/h2&gt;

&lt;p&gt;Open source software provides the flexibility to mold the tool to your exact needs and integrate with your existing workflows. In many cloud native organizations, open source is the backbone of daily operations—think Kubernetes, Prometheus, and Grafana. Adding an open source incident management layer not only aligns with your existing ecosystem but also fosters community-driven improvements and transparency.&lt;/p&gt;




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

&lt;p&gt;&lt;a href="https://respondnow.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;RespondNow&lt;/strong&gt;&lt;/a&gt; is an open source project that offers a straightforward way to handle incidents in modern environments. It integrates neatly with the tools you’re already using, like Slack for communication, and it provides a central place to track what’s going on during an incident.&lt;/p&gt;

&lt;p&gt;The neat part? RespondNow is designed with cloud native ecosystems in mind, from its container-friendly setup to streamlined Slack integrations. Think of it as a dedicated incident cockpit. Teams get to rally around issues quickly, gather relevant details, and manage resolution steps without rummaging through separate tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;RespondNow is an open-source incident management tool designed specifically for cloud-native environments. It integrates seamlessly with Slack, Kubernetes, and other tools you’re already using, making it easier to detect, notify, and resolve incidents.&lt;/p&gt;

&lt;p&gt;Here’s how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Slack Integration&lt;/strong&gt;: RespondNow uses Slack as its primary interface. When an incident is detected, it creates a dedicated Slack channel, notifies the right people, and provides a centralized place for collaboration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes Integration&lt;/strong&gt;: RespondNow can be deployed in your Kubernetes cluster using Helm, making it easy to manage and scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incident Portal&lt;/strong&gt;: RespondNow provides a web-based portal where you can track the status of ongoing incidents, view historical data, and generate post-mortem reports.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The best part? RespondNow is open source, so you can customize it to fit your team’s workflow and integrate it with the tools you already use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started with RespondNow
&lt;/h2&gt;

&lt;p&gt;Now that you know why RespondNow exists and what it can do, let’s dive into how to set it up. We’ll walk you through the key steps to get RespondNow up and running in your environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Prerequisites
&lt;/h3&gt;

&lt;p&gt;Before you start, make sure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Kubernetes cluster (if you don’t have one, you can use Minikube or Kind for local testing).&lt;/li&gt;
&lt;li&gt;Helm installed on your local machine.&lt;/li&gt;
&lt;li&gt;A Slack workspace where you have permission to create apps.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 2: Create a Slack App with an App Manifest
&lt;/h3&gt;

&lt;p&gt;RespondNow uses Slack as its primary interface, so the next step is to create a Slack app. This might sound intimidating, but it’s actually pretty straightforward.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;a href="https://api.slack.com/apps?new_app=1" rel="noopener noreferrer"&gt;here&lt;/a&gt; to create a slack app&lt;/li&gt;
&lt;li&gt;Choose option to create an app from a manifest&lt;/li&gt;
&lt;li&gt;Select the desired slack workspace from the drop-down menu and click Next&lt;/li&gt;
&lt;li&gt;Paste the &lt;a href="https://github.com/respondnow/respondnow/blob/main/server/src/main/resources/slackmanifest.yml" rel="noopener noreferrer"&gt;RespondNow manifest configuration&lt;/a&gt; and click Next&lt;/li&gt;
&lt;li&gt;Review and verify that the configuration you entered matches the summary and click Create&lt;/li&gt;
&lt;li&gt;In the Settings -&amp;gt; Basic Information screen for the created app, generate an App Level Token with the right scope (shown in the screenshot below) by clicking on Generate Token and Scopes. Save all the app tokens and OAuth Tokens to be used later.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Once the app is created, you’ll need to install it in your workspace.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Deploy RespondNow with Helm
&lt;/h3&gt;

&lt;p&gt;With your Slack app ready, it’s time to deploy RespondNow to your Kubernetes cluster. Helm is the easiest way to do this, as it handles all the dependencies and configuration for you.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add the RespondNow Helm Repository
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm repo add respondnow https://respondnow.github.io/respondnow-helm
helm repo update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install RespondNow server by providing the slack App and Bot tokens noted in the previous steps
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm install respondnow respondnow/respondnow --namespace=respondnow --create-namespace --set server.configMap.data.ENABLE_SLACK_CLIENT=true --set server.configMap.data.INCIDENT_CHANNEL_ID="respond-now" --set server.secret.data.SLACK_APP_TOKEN="FILL-YOUR-SLACK-APP-TOKEN" --set server.secret.data.SLACK_BOT_TOKEN="FILL-YOUR-SLACK-BOT-TOKEN"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify that all pods in the &lt;code&gt;respondnow&lt;/code&gt; namespace are up and running successfully&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: Verify the RespondNow Portal
&lt;/h3&gt;

&lt;p&gt;Once RespondNow is deployed, you’ll want to make sure everything is working as expected. The RespondNow portal is where you’ll track incidents, view historical data, and generate post-mortem reports.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Access the portal by navigating to the URL provided during the Helm deployment.&lt;/li&gt;
&lt;li&gt;Verify that you can see the portal and that it’s connected to your Slack workspace.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Don’t worry if this sounds like a lot, RespondNow’s &lt;a href="https://respondnow.github.io/respondnow/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; walks you through every step of the process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why RespondNow?
&lt;/h2&gt;

&lt;p&gt;At this point, you might be wondering why you should use RespondNow instead of another incident management tool. The answer is simple: RespondNow is designed for cloud-native environments. It’s lightweight, easy to deploy, and integrates seamlessly with the tools you’re already using.&lt;/p&gt;

&lt;p&gt;But more importantly, RespondNow is open source. That means you can customize it to fit your team’s workflow, contribute back to the project, and be part of a growing community of engineers who are rethinking how we handle incidents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Incidents are a fact of life in the cloud-native world, but they don’t have to be a nightmare. With RespondNow, you can streamline the process of detecting, notifying, and resolving incidents, so you can focus on what really matters—building great software.&lt;/p&gt;

&lt;p&gt;Ready to get started? Check out the &lt;a href="https://respondnow.github.io/respondnow/" rel="noopener noreferrer"&gt;RespondNow documentation&lt;/a&gt; and join the &lt;a href="https://app.slack.com/client/T08PSQ7BQ/C07K7TBH4P3" rel="noopener noreferrer"&gt;community&lt;/a&gt; on Slack and &lt;a href="https://github.com/respondnow/respond" rel="noopener noreferrer"&gt;star our repository&lt;/a&gt; to support us. And if you have any questions or feedback, don’t hesitate to reach out. After all, the best tools are the ones that evolve with their users.&lt;/p&gt;

&lt;p&gt;Happy incident managing! 🚀&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>kubernetes</category>
      <category>incident</category>
      <category>java</category>
    </item>
    <item>
      <title>LitmusChaos is joining Kubecon + CloudNativeCon North America 2024!</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Tue, 05 Nov 2024 12:10:29 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/litmuschaos-is-joining-kubecon-cloudnativecon-north-america-2024-3blg</link>
      <guid>https://dev.to/litmus-chaos/litmuschaos-is-joining-kubecon-cloudnativecon-north-america-2024-3blg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs752lulge3etcjshg93t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs752lulge3etcjshg93t.png" alt="Meet Litmus at Kubecon NA 2024" width="800" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hello LitmusChaos Community! 👋&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over the past few years, LitmusChaos has evolved tremendously, becoming a leading open-source tool for Chaos Engineering within the Cloud Native ecosystem. It's been inspiring to watch our community grow, from engineers just getting started with chaos testing to large teams running complex fault scenarios across cloud and on-prem environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On behalf of the maintainers&lt;/strong&gt;, we’re deeply grateful for the energy and passion each of you brings to the project. Your contributions, ideas, and feedback have fueled LitmusChaos' growth and helped tackle real-world resilience challenges in a collaborative, open-source environment. Whether it’s through insightful discussions in our Slack channels, pull requests on GitHub, or your experiences shared at events, it’s clear we’re building something special—together! &lt;/p&gt;

&lt;p&gt;Our maintainers and contributors will be on-site, eager to meet with attendees, discuss how to get started with LitmusChaos, answer questions, and share opportunities to contribute to the project. We invite you to stop by, say hello, and learn more about how chaos engineering is transforming modern cloud-native applications.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;strong&gt;Where to Find Us: Project Pavilion Kiosk #16A&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Location&lt;/strong&gt;: Level 1 | Halls A-C + 1-5 | Project Pavilion (Hall 1)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kiosk:&lt;/strong&gt; #16A&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shift&lt;/strong&gt;: Half-shift AM schedule&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Pavilion Hours&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wednesday, November 13&lt;/strong&gt;: 10:45 AM – 3:15 PM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thursday, November 14&lt;/strong&gt;: 10:30 AM – 1:45 PM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friday, November 15&lt;/strong&gt;: 10:30 AM – 12:30 PM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our team will be at the &lt;strong&gt;Project Pavilion&lt;/strong&gt; ready to talk chaos engineering, share resources, and hand out some awesome LitmusChaos stickers, candies and more. No matter your experience level—whether you’re an expert or just beginning to explore chaos engineering—this is the perfect opportunity to get personalized guidance and learn best practices for using LitmusChaos.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;strong&gt;Project Engagement Opportunities at KubeCon NA&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are plenty of ways to connect with us beyond our kiosk! Here’s where you can find us around the venue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project Pavilion Lounge&lt;/strong&gt;: Located in the heart of the Pavilion, the Lounge is a welcoming spot to relax, network, and have insightful discussions with other community members in a casual setting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coffee Stations&lt;/strong&gt;: Fuel up and chat with us at the coffee stations on both sides of the Pavilion. Grab a coffee, and let’s discuss your ideas for chaos engineering!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ad-Hoc Meeting Tables&lt;/strong&gt;: Need more time to dive deeper into LitmusChaos? Ad-hoc meeting tables are available next to the Project Pavilion on a first-come, first-served basis, offering a chance for impromptu discussions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’d like to set up a specific time to meet with us, please feel free to email &lt;strong&gt;&lt;a href="mailto:matthew.schillerstrom@harness.io"&gt;matthew.schillerstrom@harness.io&lt;/a&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;a href="mailto:sayan.mondal@harness.io"&gt;sayan.mondal@harness.io&lt;/a&gt;&lt;/strong&gt;, we’d love to connect at KubeCon NA 2024!&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What You Can Learn at the LitmusChaos Booth&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Our booth offers a hands-on opportunity to dive into chaos engineering, ask questions, and explore the latest developments in LitmusChaos. Here are some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Getting Started with Chaos Engineering&lt;/li&gt;
&lt;li&gt;Introduction to LitmusChaos: First Steps &amp;amp; Best Practices&lt;/li&gt;
&lt;li&gt;Adopting Chaos Engineering at Scale&lt;/li&gt;
&lt;li&gt;Solving Challenges &amp;amp; Troubleshooting with LitmusChaos&lt;/li&gt;
&lt;li&gt;Latest Updates and Enhancements in LitmusChaos&lt;/li&gt;
&lt;li&gt;Roadmap for LitmusChaos&lt;/li&gt;
&lt;li&gt;How to Get Involved as a Contributor or Future Maintainer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you’re facing blockers, looking for experiment guidance, or curious about the project roadmap, our team is here to help you make the most of chaos engineering with LitmusChaos.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Connect with LitmusChaos Year-Round&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Can’t make it to KubeCon NA 2024? You can still stay connected with the LitmusChaos community:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt;: Visit the&lt;a href="https://litmuschaos.io" rel="noopener noreferrer"&gt; LitmusChaos Website&lt;/a&gt; for the latest resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack&lt;/strong&gt;: Join the conversation on &lt;strong&gt;#litmus&lt;/strong&gt; in the &lt;a href="http://slack.litmuschaos.io" rel="noopener noreferrer"&gt;Kubernetes Slack&lt;/a&gt; to learn, ask questions, and contribute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributing Guide&lt;/strong&gt;: Get started as a contributor by checking out our&lt;a href="https://github.com/litmuschaos/litmus/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt; Contributing Guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YouTube&lt;/strong&gt;: Subscribe to the&lt;a href="https://www.youtube.com/@litmuschaos" rel="noopener noreferrer"&gt; LitmusChaos YouTube Channel&lt;/a&gt; for the latest demos and tutorials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter&lt;/strong&gt;: Stay updated by following&lt;a href="https://twitter.com/LitmusChaos" rel="noopener noreferrer"&gt; @LitmusChaos&lt;/a&gt; on Twitter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn&lt;/strong&gt;: Connect with&lt;a href="https://twitter.com/LitmusChaos" rel="noopener noreferrer"&gt; @litmuschaos&lt;/a&gt; on LinkedIn for latest updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DEV.to&lt;/strong&gt;: Share your insights on &lt;a href="https://dev.to/litmus-chaos"&gt;DEV.to&lt;/a&gt; with #litmuschaos, or check out community-written blogs to learn from other contributors.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>litmuschaos</category>
      <category>kubecon</category>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>The What, Why and How of JavaScript bundlers</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Fri, 13 Oct 2023 11:38:15 +0000</pubDate>
      <link>https://dev.to/sayanide/the-what-why-and-how-of-javascript-bundlers-4po9</link>
      <guid>https://dev.to/sayanide/the-what-why-and-how-of-javascript-bundlers-4po9</guid>
      <description>&lt;h2&gt;
  
  
  What is a JavaScript bundler anyway?
&lt;/h2&gt;

&lt;p&gt;A tool people struggle with for hours just to get a basic web app setup? A thing that you use when you bootstrap your React project? Something that your company uses, or that your colleagues/seniors have configured already, which is apparently supposed to optimize your final JS build?&lt;/p&gt;

&lt;p&gt;Whether you are starting your web development journey or have already used a bunch of bundlers before, you might have had these questions at some point in time, I certainly did.&lt;/p&gt;

&lt;p&gt;To answer the above question, &lt;strong&gt;a module bundler provides a method for arranging and merging multiple JavaScript files into a unified single file. Using a JavaScript bundler becomes necessary when your project outgrows a single file or when dealing with libraries with numerous dependencies. As a result, the end-user's browser or client doesn't have to fetch numerous files individually&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;In this blog post, we'll go through what bundlers do and how they work in detail, but before that, why do we even need to combine dependencies into a single file? Let's have a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The Problem&lt;/li&gt;
&lt;li&gt;How bundlers bundle&lt;/li&gt;
&lt;li&gt;Bundlers are not transpilers&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;To understand the core problem, let's consider a very simple traditional web app, with HTML, CSS and a script tag injecting an &lt;code&gt;index.js&lt;/code&gt; which acts as the entry point for JavaScript. To add some styling we're also injecting some external UI library like &lt;a href="https://picocss.com/" rel="noopener noreferrer"&gt;Pico CSS&lt;/a&gt; via a CDN and linking the same.&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;  
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"module"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"index.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt;
      &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;
      &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.min.css"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Very Simple Traditional App&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"redirect-page-btn"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Redirect&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"say-hello"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Say Hi&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Now we'll obviously not chunk all our JavaScript in a single &lt;code&gt;index.js&lt;/code&gt; file rather we'd divide our functionalities into individual files (as and when required). For this example, we'll create an alert and one redirect function in &lt;code&gt;alert.js&lt;/code&gt; and &lt;code&gt;redirect.js&lt;/code&gt; respectively.&lt;/p&gt;

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

&lt;span class="c1"&gt;// redirect.js&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Redirect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://exampleURL.com/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;RandomFunction1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// This is an unused function&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

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

&lt;span class="c1"&gt;// alert.js&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;SayHi&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello Dev.to community&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;RandomFunction2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// This is an unused function&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;In the two files above we have two unused functions &lt;code&gt;RandomFunction1&lt;/code&gt; and &lt;code&gt;RandomFunction2&lt;/code&gt;, which we'll get to in a moment but for now, let them hang out there.&lt;/p&gt;

&lt;p&gt;Next, let's import the functions we created in &lt;code&gt;index.js&lt;/code&gt; and add some interactivity to the HTML elements.&lt;/p&gt;

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

&lt;span class="c1"&gt;// index.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Redirect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./redirect.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SayHi&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./alert.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;redirect-page-btn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Redirect&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;say-hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SayHi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;So far our application looks something like this, check the network tab closely, you'd find all the JS chunks referenced/loaded separately.&lt;/p&gt;

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

&lt;p&gt;Unfortunately, it loads the whole script along with all the functions that aren't even in use, i.e. &lt;code&gt;RandomFunction1&lt;/code&gt; and &lt;code&gt;RandomFunction2&lt;/code&gt;.&lt;/p&gt;

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

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

&lt;p&gt;When you consider libraries/packages that you import in your regular application like Loadash, Math, etc where you require just one or two functions for a specific use-case, you can understand the amount of unnecessary network requests it'd make to fetch every single file along with fetching everything your page doesn't need. Here’s where a JavaScript bundler comes into the field.&lt;/p&gt;

&lt;h2&gt;
  
  
  How bundlers bundle
&lt;/h2&gt;

&lt;p&gt;Circling back to our discussion on bundlers and their pivotal role in modern web development, let's explore the inner workings of these tools in handling dependencies. Essentially, a bundler's operation can be broken down into two primary stages: generating a dependency graph and subsequently bundling the required elements.&lt;/p&gt;

&lt;h4&gt;
  
  
  Mapping a Dependency Graph
&lt;/h4&gt;

&lt;p&gt;The initial step in module bundling involves creating a map that outlines the relationships among all the served files, known as Dependency Resolution. To do this, the bundler requires an entry file which should ideally be your main file. It then parses through this entry file to understand its dependencies.&lt;/p&gt;

&lt;p&gt;Subsequently, the bundler navigates through these dependencies, tracing further dependencies if any, and allocates distinct IDs to every encountered file. Finally, it extracts all dependencies and generates a dependency graph that depicts the relationship between all files.&lt;/p&gt;

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

&lt;p&gt;Why make a simple process so complicated? Good question&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a browser requests functions from the bundler it can easily return the requested function because of the already constructed dependency order.&lt;/li&gt;
&lt;li&gt;Since JS bundlers have a good source map of all the files and their dependencies, it prevents name conflicts.&lt;/li&gt;
&lt;li&gt;It detects unused files allowing you to get rid of them if you choose.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Bundling
&lt;/h4&gt;

&lt;p&gt;Once the bundler gets all the necessary inputs and sorts out its dependencies in the Dependency Resolution phase, it starts preparing the assets that the browser can handle without any hitch. This preparation stage is what we call Packing. In this step, the bundler cleverly uses the dependency graph to blend our numerous code files, plug in the needed functions and &lt;code&gt;module.exports&lt;/code&gt; object, and whip up a neat and tidy bundle that the browser will happily load up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bundlers are not transpilers
&lt;/h2&gt;

&lt;p&gt;Firstly, let's clarify their roles. A JavaScript bundler is a tool that helps manage and organize JavaScript code and its dependencies, combining multiple files into a single, efficient bundle that can be easily loaded by the browser. The goal is to minimize HTTP requests and improve page load performance. On the other hand, a transpiler, short for "transformation compiler," is a tool that converts source code written in one programming language (such as ES6+ JavaScript) into another, usually older or more widely supported version (like ES5 JavaScript), making it compatible with a broader range of browsers.&lt;/p&gt;

&lt;p&gt;These tools take a bunch of code in one language, and 'compile' it to another language. They're called commonly 'transpilers' rather than 'compilers' because unlike traditional compilers, these tools don't compile to a lower-level representation; they're just different languages at a similar level of abstraction.&lt;/p&gt;

&lt;p&gt;These are typically used to run code written against newer JS versions in older JS runtimes (eg. Babel) or to provide custom languages with more conveniences or constraints that can then be executed in any regular JS environment (TypeScript, CoffeeScript).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Lately, developers have come up with some impressive alternatives to JavaScript bundling. I suggest keeping an eye on these options, as webpack is no longer the only go-to choice. Although webpack remains prominent, especially in tools like Create React App (CRA), which is a common approach for starting new React projects, there's flexibility to explore other options.&lt;/p&gt;

&lt;p&gt;I recommend giving Parcel, esbuild, and ViteJS a look. These are modern bundlers designed, among other things, to alleviate certain challenges associated with webpack.&lt;/p&gt;

&lt;p&gt;That’s all that you need to know about JavaScript bundlers to be able to work with them and understand what’s happening when executing this magic &lt;code&gt;npm run build&lt;/code&gt; script&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webpack</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>React just got awesome'er!</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Fri, 21 Oct 2022 10:31:05 +0000</pubDate>
      <link>https://dev.to/sayanide/react-just-got-awesomeer-349i</link>
      <guid>https://dev.to/sayanide/react-just-got-awesomeer-349i</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TL;DR -- React introduced the &lt;code&gt;use&lt;/code&gt; hook and converted all its components into server first, which suspends your components until the promise/s has been resolved resulting in a much cleaner UI and no janky loading states.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you've ever worked on a React or Next.js application, you've probably noticed that it's pretty un-opinionated in general, particularly when it comes to dealing with asynchronous behaviours. However, the initial Server Components proposal made it difficult to access promise-based APIs.&lt;/p&gt;

&lt;p&gt;React has &lt;strong&gt;finally&lt;/strong&gt; acknowledged that async is an important part of developing applications on the web. Instead of having multiple useEffects or useSWRs and a ginormous loading hell, React finally decided to provide a seamless integration to resolve promises by wrapping them in special bindings. Which is exactly what this article tends to talk about. So sit tight and lets get reacting!&lt;/p&gt;




&lt;h2&gt;
  
  
  Proposal
&lt;/h2&gt;

&lt;p&gt;Adds first class support for reading the result of a JavaScript Promise using Suspense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Introduces support for async/await in Server Components. Write Server Components using standard JavaScript await syntax by defining your component as an async function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Introduces the &lt;code&gt;use&lt;/code&gt; Hook. Like &lt;code&gt;await&lt;/code&gt;, &lt;code&gt;use&lt;/code&gt; unwraps the value of a promise, but it can be used inside normal components and Hooks, including on the client.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Read the full proposal here: &lt;a href="https://github.com/reactjs/rfcs/pull/229"&gt;First class support for promises and async/await&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What does this mean for us?
&lt;/h2&gt;

&lt;p&gt;In a typical React application we would have components that are dependent on some data to be fetched and while that is done we usually go with a loading state which renders a spinner while our promise isn't resolved, the child components also might have their own data fetching which would also require to be resolved, and thus a very janky UI.&lt;/p&gt;

&lt;p&gt;Within React, we can leverage Suspense boundaries and have a tree of components that are all calling data, which needs to resolve promises at individual levels. We can just suspend at the top and let all of the promises below it resolve themselves, resulting in no more interruptions or flaky loading states.&lt;/p&gt;

&lt;p&gt;With a significant change like this, React also announced that all its components are now server first by default until you choose for it to not be. You might be thinking now, what about &lt;code&gt;react-query&lt;/code&gt; our good old friend, well it helps us remove redundant local states we no longer need by leveraging API states instead, but it also returns a loading state, which no matter how optimised still doesn't keep us from defining the endpoint on the server.&lt;/p&gt;




&lt;h2&gt;
  
  
  The old vanilla way
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Vanilla.tsx&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;IData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;author&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/endpoint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Vanilla&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Old way of maintaining a state to update it once the data is fetched&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;IData&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;

  &lt;span class="c1"&gt;// Check if data is undefined then handle loading state&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Spinner&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Spinner&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nx"&gt;Data&lt;/span&gt; &lt;span class="nx"&gt;has&lt;/span&gt; &lt;span class="nx"&gt;been&lt;/span&gt; &lt;span class="na"&gt;rendered&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A better way
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ReactQueryWay.tsx&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/endpoint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Better&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// No more local state to maintain the data, instead use API states&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fetchedData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;example&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;// Check if loading is true then handle loading state&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Spinner&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Spinner&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nx"&gt;Data&lt;/span&gt; &lt;span class="nx"&gt;has&lt;/span&gt; &lt;span class="nx"&gt;been&lt;/span&gt; &lt;span class="na"&gt;rendered&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The proposed way
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// TheUseWay.tsx&lt;/span&gt;

&lt;span class="c1"&gt;// Making the component async and turning it into a server component&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/endpoint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;

  &lt;span class="c1"&gt;// We don't need to check for loading anymore because the state is defined, the `use` hook would suspend the component altogether till the data is not returned&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nx"&gt;Data&lt;/span&gt; &lt;span class="nx"&gt;has&lt;/span&gt; &lt;span class="nx"&gt;been&lt;/span&gt; &lt;span class="na"&gt;rendered&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;If I missed out on any point or you want to discuss something feel free to leave a comment down below, I'd hop in ASAP. 🌟&lt;/p&gt;

&lt;p&gt;Lastly, Thank you for making it this far down into the article and showing your interest in React. You are amazing and keep making a positive difference every day. Peace out. ✌🏼&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Free alternatives to Heroku</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Thu, 08 Sep 2022 03:58:47 +0000</pubDate>
      <link>https://dev.to/sayanide/free-alternatives-to-heroku-3g3n</link>
      <guid>https://dev.to/sayanide/free-alternatives-to-heroku-3g3n</guid>
      <description>&lt;p&gt;Heroku has long been the go-to cloud Platform-as-a-Service (PaaS) for scalable app deployment and management. It saves developers the bother of setting up servers and supporting infrastructure by offering a subscription-based cloud-based managed environment.&lt;/p&gt;

&lt;p&gt;Despite its popularity, Heroku just announced that it will discontinue all free services, forcing users to upgrade to premium subscriptions. Beginning November 28, the Salesforce-owned cloud platform as a service will discontinue free product plans and shut down free data services, and it will soon (on October 26) begin removing dormant accounts and related storage for accounts that have been idle for more than a year.&lt;/p&gt;

&lt;p&gt;This may no longer be an ideal option for students and hosting hobby projects, therefore be prepared with other good alternatives to Heroku.&lt;/p&gt;

&lt;p&gt;Various PaaS companies have attempted to compete with Heroku, and some have succeeded. In this article, we'll take a look at some alternatives which are a close match to the former.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Railway
&lt;/h2&gt;

&lt;p&gt;Railway is an infrastructure platform that allows you to provision infrastructure, develop with it locally, and then deploy it to the cloud. 1GB Disk, 512 MB RAM, $5 limit, or 500 hours of free usage per month.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://railway.app" rel="noopener noreferrer"&gt;railway.app&lt;/a&gt;&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Fly.io
&lt;/h2&gt;

&lt;p&gt;Fly is a platform for globally distributed applications. It executes your code close to users and scales computation in cities where your programme is most popular. Write your code, package it as a Docker image, deploy it to Fly's platform, and let it do the rest to keep your app running smoothly. Free for side projects, $10 per month in service credit that applies to any paid service. Credits will also go a long way if you run very small virtual machines.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://fly.io/" rel="noopener noreferrer"&gt;fly.io&lt;/a&gt;&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Deno Deploy
&lt;/h2&gt;

&lt;p&gt;Globally distributed system that runs JavaScript, TypeScript, and WebAssembly at the edge. The free tier includes 100,000 daily requests and 100 GiB of data transmission each month.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://deno.com/deploy" rel="noopener noreferrer"&gt;deno.com/deploy&lt;/a&gt;&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Koyeb
&lt;/h2&gt;

&lt;p&gt;Koyeb is a developer-friendly serverless platform for worldwide app deployment. With git-based deployment, native autoscaling, a global edge network, and built-in service mesh and discovery, you can host Docker containers, web apps, and APIs with ease. With its forever-free tier, Koyeb offers two nano services to operate your apps and also sponsors open-source projects with free resources.&lt;/p&gt;

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




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

&lt;h2&gt;
  
  
  Napkin
&lt;/h2&gt;

&lt;p&gt;Instantly create and deploy serverless cloud operations from the browser. Easily add API authentication, schedule tasks, and replay events. A FaaS with 1Gb of memory, a default timeout of 15 seconds and 1,000,000 free API calls/month.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.napkin.io/" rel="noopener noreferrer"&gt;napkin.io&lt;/a&gt;&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Deta
&lt;/h2&gt;

&lt;p&gt;Get your Python and Node.js apps and APIs online in seconds. Unlike Heroku, which lets you to operate up to two free dynos, Deta allows you to construct an unlimited number of micros. The size of your application's source code and dependencies, however, cannot exceed 250MB. Deta is forever free.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.deta.sh/" rel="noopener noreferrer"&gt;deta.sh&lt;/a&gt;&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Meteor Cloud
&lt;/h2&gt;

&lt;p&gt;Galaxy hosting. Meteor's platform-as-a-service for Meteor apps, with free MongoDB Shared Hosting and automated SSL. Build, monitor and host your application on the only platform designed with your Meteor app in mind.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.meteor.com/cloud" rel="noopener noreferrer"&gt;meteor.com&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;That's all folks 👨‍🏫, Thank you for making it this far down. All the resources mentioned are not just the only resources available, I'm sure there must be tons of other amazing project out there too. These are the ones that I really found helpful and often get myself indulged into. 👨🏻‍💻 Peace out ✌🏼&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>heroku</category>
    </item>
    <item>
      <title>Understanding React Higher Order Component (HOC)</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Sun, 08 May 2022 16:52:58 +0000</pubDate>
      <link>https://dev.to/sayanide/understanding-react-higher-order-component-hoc-4i06</link>
      <guid>https://dev.to/sayanide/understanding-react-higher-order-component-hoc-4i06</guid>
      <description>&lt;p&gt;Almost everything about using a SPA library influences you to abstract the business logic and write quality code. React has been enforcing such quality controls for the last few years using a variety of &lt;a href="https://reactjs.org/docs/design-principles.html" rel="noopener noreferrer"&gt;amazing design patterns&lt;/a&gt; and we are no strangers to that!&lt;/p&gt;

&lt;p&gt;In this article, we'll discuss one such addition to the quality control mechanism of React using Higher Order Components. By the end of this article, you should be confident and ready to tackle/improve a codebase by using this principle whenever necessary.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is a Higher Order Component?
&lt;/h1&gt;

&lt;p&gt;Higher Order Components is a great pattern that has proven to be very valuable for several React libraries. According to the &lt;a href="https://reactjs.org/docs/higher-order-components.html" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; of React -&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A higher-order component (HOC) is an advanced technique in React for reusing component logic. HOCs are not part of the React API, per se. They are a pattern that emerges from React's compositional nature.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;JavaScript is a well-suited language for functional programming as it can accept higher-order functions. A higher-order function is a function that can take &lt;strong&gt;another function&lt;/strong&gt; as an &lt;strong&gt;argument&lt;/strong&gt; and/or that &lt;strong&gt;returns a function&lt;/strong&gt; as a result.&lt;/p&gt;

&lt;p&gt;Higher-order functions allow us to abstract over actions, not just values. With HOCs we can wrap over our child component and either add business logic on top of it or extend the abilities of the child component itself.&lt;/p&gt;

&lt;h1&gt;
  
  
  What can I do with HOCs?
&lt;/h1&gt;

&lt;p&gt;At a high-level HOC enables you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reuse code, reuse logic, and bootstrap abstraction&lt;/li&gt;
&lt;li&gt;Render Highjacking&lt;/li&gt;
&lt;li&gt;State abstraction and manipulation&lt;/li&gt;
&lt;li&gt;Props manipulation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Third-party React libraries, such as Redux or React Router, frequently use HOCs. I'm sure you've used some of them without even realising it.&lt;/p&gt;

&lt;p&gt;In React, the main purpose of a higher-order component is to share common functionality between components without having to repeat code.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Types of HOCs
&lt;/h1&gt;

&lt;p&gt;The two main ways of implementing HOCs in React are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Props Proxy (PP)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inheritance Inversion (II)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both enable different ways of manipulating the &lt;em&gt;WrappedComponent&lt;/em&gt;. Both are simply a function, that takes a Component as an argument and produces a new component containing the &lt;em&gt;WrappedComponent&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Props Proxy
&lt;/h2&gt;

&lt;p&gt;Props Proxy, as the name suggests, passes properties received from Higher-Order Component.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The crucial element here is that the HOC's render method returns a React Element of the WrappedComponent's type. The HOC receives what we pass through the props, hence the name props proxy. The HOC returns a React Element that describes what React should render in its reconciliation process.&lt;/p&gt;

&lt;p&gt;You can also wrap the Wrapped Component with other JSX elements changing its UI according to your app needs.&lt;/p&gt;

&lt;p&gt;Props Proxy HOCs are useful in the following situations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manipulating props&lt;/li&gt;
&lt;li&gt;Accessing the instance via Refs&lt;/li&gt;
&lt;li&gt;Abstracting State&lt;/li&gt;
&lt;li&gt;Wrapping/Composing the WrappedComponent with other elements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Inheritance Inversion
&lt;/h2&gt;

&lt;p&gt;This HOC can gain access to WrappedComponents instances. This provides us with access to the state, props, component lifecycle hooks, and the render method.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The returned HOC class (Enhancer) extends the WrappedComponent, as you can see. It's termed Inheritance Inversion because, instead of the WrappedComponent extending some Enhancer class, the Enhancer passively extends it. In this way, their relationship appears reversed.&lt;/p&gt;

&lt;p&gt;Inversion Inheritance HOCs are useful for the following situations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Render Highjacking&lt;/li&gt;
&lt;li&gt;Manipulating state&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Let's dive into some examples
&lt;/h1&gt;

&lt;p&gt;To get a solid grip on the fundamentals we've learned, let's take an example of an application that has a single input that takes a name and changes the name.&lt;/p&gt;

&lt;p&gt;Imagine we have a scenario where our business application requires lots of form validation and different use cases have different input validations, in such a case rather than duplication code and making multiple input forms with use case-based components, we can abstract it into a HOC which takes an input field or a little more of your child component and manipulates the states as well as the actions (validations, etc) and wraps your child component with the necessary business logic for each use case.&lt;/p&gt;

&lt;p&gt;Consider the example below -&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Here we have made &lt;code&gt;Form&lt;/code&gt; as the child component which is being wrapped around the &lt;code&gt;withHandlers&lt;/code&gt; HOC. It gives the child component its own freedom and doesn't overcomplicate the base component with overhead logic and justifies separation of concern.&lt;br&gt;
 &lt;br&gt;
The HOC is now in control to add/remove validations and any extra actions as deemed fit by the developer.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;This was a relatively simple example to give you an idea of how the ideas work in practice. It takes some time to become accustomed to and comfortable with this type of abstraction, so don't lose the drive or focus with HOCs.&lt;/p&gt;

&lt;p&gt;Also once you are comfortable and want more deep and complex explanations, I'd recommend checking out &lt;a href="https://medium.com/@franleplant/react-higher-order-components-in-depth-cf9032ee6c3e" rel="noopener noreferrer"&gt;this detailed blog&lt;/a&gt; and exploring the concepts.&lt;/p&gt;

&lt;p&gt;If I missed out on any point or you want to discuss something feel free to leave a comment down below, I'd hop in ASAP. 🌟&lt;br&gt;
Lastly, Thank you for making it this far down into the article and showing your interest in React. You are amazing and keep making a positive difference every day. Peace out. ✌🏼&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>react</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How the Resilience Score Algorithm works in Litmus!</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Tue, 27 Jul 2021 11:04:34 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/how-the-resilience-score-algorithm-works-in-litmus-1d22</link>
      <guid>https://dev.to/litmus-chaos/how-the-resilience-score-algorithm-works-in-litmus-1d22</guid>
      <description>&lt;p&gt;What really is Resilience? For practitioners, psychologists, etc, Resilience is the process of adapting well in the face of adversity, trauma, tragedy, threats, or significant sources of stress, for an SRE or Chaos Engineering however Resilience can be defined as the ability of a system to fail gracefully in the face of—and eventually recover from—disruptive events.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--EzkG1_qr--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Flitmuschaos.io%2Fstatic%2F0a11d0492777dc77ca7c7d008877ce5a%2F78692%2Fcloud-native-way.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--EzkG1_qr--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Flitmuschaos.io%2Fstatic%2F0a11d0492777dc77ca7c7d008877ce5a%2F78692%2Fcloud-native-way.webp" alt="Litmus" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Litmus&lt;/strong&gt; is a &lt;strong&gt;Cross-Cloud Chaos Orchestration&lt;/strong&gt; framework for practising chaos engineering in cloud-native environments. Litmus provides a chaos operator, a large set of chaos experiments on its &lt;a href="http://hub.litmuschaos.io/" rel="noopener noreferrer"&gt;hub&lt;/a&gt;, detailed &lt;a href="https://docs.litmuschaos.io/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, and a friendly &lt;a href="https://kubernetes.slack.com/?redir=%2Fmessages%2FCNXNB0ZTN" rel="noopener noreferrer"&gt;community&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Find the video format of this blog here:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/OuB3dS05DHU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In this blog, we'll deep dive into how the Resilience Score is calculated for your Workflows in Litmus and also understand the concept of Weights.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Weights in Litmus
&lt;/h2&gt;

&lt;p&gt;You might have often seen the term weightage pop up quite a few times when you construct your Workflows in Litmus. Typically attached to Resilience, these weights have an important role to play to determine the appropriate Resilience score for your use case.&lt;/p&gt;

&lt;p&gt;Giving a weightage to your experiment is a way of signifying/attaching the importance/priority of that experiment in your workflow. The higher the weight, the more importance it holds.&lt;/p&gt;

&lt;p&gt;For instance, consider this example where you have two Chaos Experiments, &lt;strong&gt;Pod Delete&lt;/strong&gt; and &lt;strong&gt;Pod Network Loss&lt;/strong&gt; in your workflow. Imagine you have a use case where you cannot bear having a network loss but an eviction of a pod does not really bother you that much because you are confident that the pod would re-spawn back up, but you still want to test for pod eviction as a part of your Chaos Test Suite. &lt;/p&gt;

&lt;p&gt;In such a scenario, the Pod Delete Chaos Experiment doesn't hold much of an importance for you but on the other hand, Pod Network Loss does.&lt;/p&gt;

&lt;p&gt;The weight priority is generally divided into three sections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;0-3&lt;/strong&gt;: Low Priority&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4-6&lt;/strong&gt;: Medium Priority&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7-10&lt;/strong&gt;: High Priority&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Therefore considering your scenario, you would want to assign &lt;strong&gt;Pod Delete&lt;/strong&gt; with a &lt;strong&gt;Low Priority&lt;/strong&gt; weightage, whereas, &lt;strong&gt;Pod Network Loss&lt;/strong&gt; would be in the &lt;strong&gt;High Priority&lt;/strong&gt; category.&lt;/p&gt;

&lt;p&gt;Now that we know &lt;em&gt;why&lt;/em&gt; we set the weights the way we do! As we progress further in the blog, we'd also get to know how they actually come into play to determine the Resilience Score.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Resilience Score
&lt;/h2&gt;

&lt;p&gt;A Resilience Score is the measure of how resilient your workflow is considering all the chaos experiments and their individual result points. This calculation takes into account the individual experiment weights (from a range of 1-10) which are relative to each other.&lt;/p&gt;

&lt;p&gt;Once a weight has been assigned to the experiment, we look for the &lt;strong&gt;Probe Success Percentage&lt;/strong&gt; for that experiment itself (Post Chaos) and calculate the &lt;strong&gt;total resilience result&lt;/strong&gt; for that experiment as a &lt;em&gt;multiplication&lt;/em&gt; of the &lt;em&gt;weight given&lt;/em&gt; and the &lt;em&gt;probe success percentage&lt;/em&gt; returned after the Chaos Run.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Resilience for one single experiment = (Weight Given to that experiment * Probe Success Percentage)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;If an experiment doesn't have a probe in it, the probe success percentage returned can either be 0 or 100 based on the experiment verdict. If the experiment passed then it returns 100 else 0.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Final Resilience Score is calculated by dividing the total test result by the sum of all the weights of all the experiments combined in a single workflow.&lt;/p&gt;

&lt;p&gt;Let's take our above scenario again, considering we have given a weightage of 2 to Pod Delete and 10 for Pod Network Loss, this is how the Resilience Calculation would look like.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Considering Probe Success Percentage is 100&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here is why weights play such an important role in your use case specific Resilience Calculation. For the scenario mentioned above, even if Pod Delete would have failed for whichever reason, your Resilience Score would only drop down by a few numbers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resilience Score = Total Test Result / Weight Sum 
                 = (0 * 100) + (10 * 100) / 12                  
                 = 1000 / 12 
                 = 83.33%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However if they both were of the same weights, lets say 10. Then your Resilience Score would drop to 50% straight.&lt;/p&gt;

&lt;p&gt;With that I hope you are now an expert of weights, and would use them wisely. With great power comes great responsibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That's all folks 👨‍🏫, Thank you for reading it till the end. I hope you had a productive time learning about Litmus and how you can construct your workflows with more confidence now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Ftse1.mm.bing.net%252Fth%253Fid%253DOIP.NiUNEyoX9bHslroFaIqmEAAAAA%2526pid%253DApi%26f%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Ftse1.mm.bing.net%252Fth%253Fid%253DOIP.NiUNEyoX9bHslroFaIqmEAAAAA%2526pid%253DApi%26f%3D1" alt="Thanks" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Contribute to LitmusChaos and share your feedback on &lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;Github&lt;/a&gt;. If you like LitmusChaos, become one of the many stargazers &lt;a href="https://github.com/litmuschaos/litmus/stargazers" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Join the LitmusChaos slack community following these simple steps!&lt;/p&gt;

&lt;p&gt;Step 1: Join the Kubernetes slack using the following link: &lt;a href="https://slack.k8s.io/" rel="noopener noreferrer"&gt;https://slack.k8s.io/&lt;/a&gt;&lt;br&gt;
Step 2: Join the #litmus channel on the Kubernetes slack or use this link after joining the Kubernetes slack: &lt;a href="https://slack.litmuschaos.io/" rel="noopener noreferrer"&gt;https://slack.litmuschaos.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking forward to having you in our community and learning together!&lt;/p&gt;

</description>
      <category>litmuschaos</category>
      <category>cloudnative</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>SQL vs NoSQL - Which is better for you?</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Tue, 25 May 2021 14:22:57 +0000</pubDate>
      <link>https://dev.to/sayanide/sql-vs-nosql-which-is-better-for-you-38mf</link>
      <guid>https://dev.to/sayanide/sql-vs-nosql-which-is-better-for-you-38mf</guid>
      <description>&lt;p&gt;Whether you have worked with databases, are about to work with one, or haven’t worked at all, this topic is something you should know irrespective.&lt;/p&gt;

&lt;p&gt;You need to always think about how your data looks like first, how you are about to query it and what are your scalability requirements. Whether it's you choosing the perfect database for your personal project or it’s an organisation, It is an important decision whether to pick a relational (SQL) or non-relational (NoSQL) data structure.&lt;/p&gt;

&lt;p&gt;This article is not about which type is better but about which type suits you for your current project requirements. Each one has clear advantages and disadvantages which must be kept in mind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;If you just want to see the key-points mentioned in this article skip directly to the end.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Now with that said, let’s get started&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BTqCSqmY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/1%2AjTQMqXUVSceCXAg_Xve38A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BTqCSqmY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/1%2AjTQMqXUVSceCXAg_Xve38A.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SQL?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;SQL or Structured Query Language is pronounced as “&lt;em&gt;S-Q-L”&lt;/em&gt; or sometimes as “&lt;em&gt;see-quel”&lt;/em&gt; is a standard language to access and manipulate Relational Databases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It gives the users the power to create queries to INSERT, DELETE, UPDATE, SEARCH, ALTER, and to do a lot more with the Database. It is a very powerful language and is preferred by lots of developers as it can handle very complex queries as well.&lt;/p&gt;

&lt;p&gt;Common and Popular Examples of Relational Databases which use SQL are —&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;MySQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Oracle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SQLite&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Postgres&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MS-SQL&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A very Basic syntax pattern of SQL statement is —&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    General--
    SELECT &lt;span class="k"&gt;*&lt;/span&gt; FROM &amp;lt;TABLENAME&amp;gt; WHERE &amp;lt;ATTRIBUTE&amp;gt; &lt;span class="o"&gt;=&lt;/span&gt; &amp;lt;VALUE&amp;gt;

    Practical--
    SELECT &lt;span class="k"&gt;*&lt;/span&gt; FROM EMPLOYEE WHERE Salary &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 90000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qi1uWL9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AkuaNppKbOlJt1K2JF619yw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qi1uWL9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AkuaNppKbOlJt1K2JF619yw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is NoSQL?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;As the name suggests NoSQL is “&lt;strong&gt;not&lt;/strong&gt;” SQL, in other words, it is a non-relational database and is unstructured. Due to its unstructured nature, it is sometimes called as &lt;strong&gt;UnQL&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It follows a database design which can take all sorts of data models. It mainly consists of key-value pairs, graphs, documents, etc. It is especially used to store large sets of distributed data.&lt;/p&gt;

&lt;p&gt;Common and Popular Examples of NoSQL Databases are —&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Mongo DB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;BigTable&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cassandra&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hbase&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Redis&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Information may be stored in many ways in this type of unstructured databases, but a widely followed approach is to store the information in &lt;em&gt;**JSON *&lt;/em&gt;*format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;role:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"employee"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
      &lt;/span&gt;&lt;span class="err"&gt;salary:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"90000"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Comparing SQL vs NoSQL
&lt;/h2&gt;

&lt;p&gt;Now that we have a basic understanding of what SQL and NoSQL database means, it would be much easier to compare the two types and figure out which one better suits your needs. &lt;em&gt;Let’s go ahead and compare them now.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Structure
&lt;/h2&gt;

&lt;p&gt;A SQL Database follows a &lt;strong&gt;table like structure&lt;/strong&gt; which can have an &lt;strong&gt;unlimited number of rows&lt;/strong&gt; and every data present inside the database is &lt;strong&gt;properly structured with Predefined Schemas&lt;/strong&gt;, it is basically used to manipulate &lt;strong&gt;Relational Databases Management Systems&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0eKAQmg3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AfgjsesCmGvupHZDTKhlYfA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0eKAQmg3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AfgjsesCmGvupHZDTKhlYfA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A NoSQL Database is a &lt;strong&gt;Distributed Database&lt;/strong&gt; where the data is very &lt;strong&gt;unstructured with Dynamic Schema&lt;/strong&gt;. Unlike SQL it cannot have unlimited rows but it follows a &lt;em&gt;**Standard Schema Definition *&lt;/em&gt;&lt;em&gt;and can store all sorts of data models with large distributed data in the form of **key-value pairs, graph databases, documents or wide-column stores&lt;/em&gt;*.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;

&lt;p&gt;SQL is a very powerful language and is very handy when it comes to access as well as manipulate not just simple but very &lt;strong&gt;&lt;em&gt;complex queries&lt;/em&gt;&lt;/strong&gt; as well. It uses &lt;strong&gt;SQL syntax&lt;/strong&gt; to define and manipulate data. An example of this syntax is —&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM STUDENT WHERE NAME = "Sayan" AND MARKS &amp;gt; 80;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whereas in NoSQL the queries are mainly focused on the &lt;em&gt;**collection of large documents *&lt;/em&gt;&lt;em&gt;and it is not a good option to manipulate complex queries. As there are different types of NoSQL databases available therefore it *&lt;/em&gt;&lt;em&gt;doesn’t follow a single syntax base&lt;/em&gt;&lt;strong&gt;, the syntax differs from database to database. The most commonly used format to store data is **JSON.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;name:&lt;/span&gt;&lt;span class="s2"&gt;"Sayan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;marks:&lt;/span&gt;&lt;span class="s2"&gt;"85"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Hierarchy
&lt;/h2&gt;

&lt;p&gt;SQL Databases are stored in the form of tables consisting of n number of rows thus it &lt;strong&gt;cannot follow&lt;/strong&gt; a hierarchical approach rather all the data is present individually in each row under a specific attribute with its own significance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G8Dhx3bE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ATbePcljkuBNzsJp6-w4ejA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G8Dhx3bE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ATbePcljkuBNzsJp6-w4ejA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whereas NoSQL is a &lt;strong&gt;very good fit&lt;/strong&gt; for hierarchical data storage as it stores the data in the form of &lt;strong&gt;key-value pairs&lt;/strong&gt; in JSON format and thus serves as a better fit for large distributed data.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scalability
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sTkMfY_Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2Asp5Xl71P6GL5O0QSFeM5Ew.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sTkMfY_Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2Asp5Xl71P6GL5O0QSFeM5Ew.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A SQL Database is always &lt;strong&gt;vertically scalable&lt;/strong&gt;. The meaning of this sentence is that if there is more load on the server then it &lt;strong&gt;can be handled by increasing the CPU, SSD, RAM, etc&lt;/strong&gt;. This will work only on a &lt;strong&gt;single&lt;/strong&gt; server. Thus by this, you may already be aware that this requires &lt;strong&gt;&lt;em&gt;more strain&lt;/em&gt;&lt;/strong&gt; on a single server.&lt;/p&gt;

&lt;p&gt;A NoSQL Database, on the other hand, is &lt;strong&gt;horizontally scalable&lt;/strong&gt;. This means that if there is excess load on the server then it will simply &lt;strong&gt;add a few more servers&lt;/strong&gt; to handle the large traffic. It is simple and &lt;strong&gt;&lt;em&gt;very efficient&lt;/em&gt;&lt;/strong&gt; and prevents the server from being non-responsive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Stability
&lt;/h2&gt;

&lt;p&gt;A SQL Database is &lt;strong&gt;more stable&lt;/strong&gt; and is always preferred when doing heavy duty transactions. The reason being it keeps the data very &lt;strong&gt;secure&lt;/strong&gt; through &lt;strong&gt;data integrity and atomicity&lt;/strong&gt;. It follows &lt;strong&gt;ACID&lt;/strong&gt; Property which stands for &lt;strong&gt;&lt;em&gt;Atomicity, Consistency, Isolation, and Durability.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tutorialspoint.com/dbms/dbms_transaction.htm"&gt;Click to know more about ACID&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A NoSQL Database is &lt;strong&gt;less stable&lt;/strong&gt; than a SQL Database when there is &lt;strong&gt;high load&lt;/strong&gt; on the server or even when performing &lt;strong&gt;complex transactions&lt;/strong&gt;. It follows &lt;strong&gt;Brewers CAP Theorem **which stands for **Consistency, Availability, and Partition Tolerance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://howtodoinjava.com/hadoop/brewers-cap-theorem-in-simple-words/"&gt;Click to know more about Brewers CAP Theorem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yN1Sxees--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ASo5pjo8Th-0ID2c-afh2Gw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yN1Sxees--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ASo5pjo8Th-0ID2c-afh2Gw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What is the right choice for your business?
&lt;/h2&gt;

&lt;p&gt;This decision completely depends on the business type and the ideation of the business. If you want to work with pre-defined structures and set schemas then SQL Databases is the correct choice for you. If you are building anything similar to an inventory monitoring system or accounting system then SQL Database is a better fit.&lt;/p&gt;

&lt;p&gt;But if you want to build an application with dynamic schema or if your business has a very rapid growth and no schema definition then NoSQL Databases is what you need. If you cannot determine the type of schema your application wants or you want to keep it changing from time to time like in case of mobile apps, analytics or content management then NoSQL is a better fit.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key-points in Short
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aL3LAiau--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2048/1%2ASCpu7EglVWfjT7GUD6cSsw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aL3LAiau--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2048/1%2ASCpu7EglVWfjT7GUD6cSsw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading this. I really appreciate all the effort. If you’re having any doubts comment below and I’ll try to answer them.&lt;/p&gt;

&lt;p&gt;Peace Out. ✌🏼&lt;/p&gt;

</description>
      <category>database</category>
      <category>sql</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Exploring Litmus 2.0 Beta with Civo</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Thu, 29 Apr 2021 12:19:54 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/exploring-litmus-2-0-beta-with-civo-4g89</link>
      <guid>https://dev.to/litmus-chaos/exploring-litmus-2-0-beta-with-civo-4g89</guid>
      <description>&lt;p&gt;Have you ever had the need to execute, monitor and manage all your services in one place with minimal effort! Sounds like a dream isn't it! Well not for long. With the upcoming Litmus 2.0 we're excited to try out some groundbreaking features like GitOps, Enhanced Teaming, Workflow Visualization, Workflow Sequence Editing, adding custom templates and so much more. &lt;/p&gt;

&lt;p&gt;Before starting this blog, do check out the previous blog on running Chaos Engineering Tests with LitmusChaos on Civo: &lt;a href="https://www.civo.com/learn/chaos-engineering-kubernetes-litmus" rel="noopener noreferrer"&gt;https://www.civo.com/learn/chaos-engineering-kubernetes-litmus&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this blog, we’re going to explore how to use Civo’s amazingly fast managed k3s clusters to pick LitmusChaos app from the Civo Marketplace and set it up with no more than two clicks.&lt;/p&gt;

&lt;p&gt;Find the technical demo with Litmus 2.0 on Civo here:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/yroUVeX9-Wk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fuser-images.githubusercontent.com%252F567298%252F65482853-a53bcb80-de9a-11e9-817f-60ab00ec265a.png%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fuser-images.githubusercontent.com%252F567298%252F65482853-a53bcb80-de9a-11e9-817f-60ab00ec265a.png%26f%3D1%26nofb%3D1" alt="Civo" width="2554" height="1206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;What is CIVO Cloud?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Civo is a cloud hosting platform powered by k3s which helps cloud-native developers manage and build their Kubernetes-native applications easily. The powerful k3s distribution helps you bring up a cluster in just a couple of minutes. Developers can now sign-up for &lt;a href="https://www.civo.com/signup" rel="noopener noreferrer"&gt;Civo’s Early Launch Access&lt;/a&gt; as Civo comes out of their beta program, #KUBE100.&lt;/p&gt;

&lt;p&gt;Loaded with features and with considerable focus on simplicity, speed &amp;amp; value for money, Civo allows agile Kubernetes development and hosts various Open Source Cloud-Native projects in its marketplace to induce various functionalities according to your needs. &lt;/p&gt;

&lt;p&gt;One of them is LitmusChaos which can be found in the CI/CD section of the marketplace. &lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEzaxpILVkAE7q4x%3Fformat%3Dpng%26name%3Dsmall" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEzaxpILVkAE7q4x%3Fformat%3Dpng%26name%3Dsmall" alt="Litmus Beta" width="680" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;LitmusChaos 2.0 Advanced Beta is out!&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Litmus is a toolset to do cloud-native chaos engineering. Litmus provides tools to orchestrate chaos on Kubernetes to help SREs find weaknesses in their deployments. SREs use Litmus to run chaos experiments initially in the staging environment and eventually in production to find bugs, vulnerabilities. Fixing the weaknesses leads to increased resilience of the system. Litmus takes a cloud-native approach to create, manage and monitor chaos.&lt;/p&gt;

&lt;p&gt;With the launch of Litmus Chaos 2.0 Advanced Beta, a new way of chaos engineering can be performed by the users, capturing a few high-level features. A detailed list can be found on the &lt;a href="https://github.com/litmuschaos/litmus/releases" rel="noopener noreferrer"&gt;release page&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chaos experiments become building blocks of a ChaosWorkflow, to allow users to create a larger chaos scenario using sequential or parallel experiment execution.&lt;/li&gt;
&lt;li&gt;A cross-cloud control plane has been built which can be used to 

&lt;ul&gt;
&lt;li&gt;Predefined workflow for easy onboarding.&lt;/li&gt;
&lt;li&gt;Construct a custom workflow from a UI interface for both parallel and sequential workflow from both public or private hub.&lt;/li&gt;
&lt;li&gt;Orchestrate chaos workflow across K8S agents(clusters) from a single control plane.&lt;/li&gt;
&lt;li&gt;Centrally visualize the chaos workflows, get chaos analytics and compare the same.&lt;/li&gt;
&lt;li&gt;Get the teaming in place for collaboration of chaos workflows.&lt;/li&gt;
&lt;li&gt;Agents can work in namespace scope or cluster scope.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Chaos workflow can be stored in Git&lt;/li&gt;

&lt;li&gt;Chaos GitOps for highly scalable automation of chaos workflows. Chaos can now be triggered as a result of a change to an application. This integrates with other CD tools like ArgoCD and FluxCD&lt;/li&gt;

&lt;li&gt;Chaos Interleaved dashboards. A step toward open observability that is interleaved with chaos incident details.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Litmus itself is composed of microservices. And we made sure that by adding the above features for 2.0, seamlessly integrates the additional microservices in conjunction with the existing one. Litmus 2.0 is completely backwards compatible. No features are deprecated. The migration path is about constructing new artifacts such as ChaosWorkflows that include the current chaos experiments in use by the users.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Prerequisites&lt;/strong&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;A Kubernetes cluster you control. We'll take advantage of &lt;a href="https://www.civo.com/kube100" rel="noopener noreferrer"&gt;Civo's super-fast managed k3s service&lt;/a&gt; to experiment with this quickly. If you don't yet have an account, sign up to join Civo Cloud now as it is production ready &amp;amp; open for business. Join Civo as its early access launch comes out on the 4th of May! &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alternatively, you could also use any other Kubernetes cluster.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://kubernetes.io/docs/tasks/tools/install-kubectl/" rel="noopener noreferrer"&gt;&lt;code&gt;kubectl installed&lt;/code&gt;&lt;/a&gt;, and the &lt;code&gt;kubeconfig&lt;/code&gt; file for your cluster downloaded.&lt;/li&gt;
&lt;/ul&gt;

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




&lt;h1&gt;
  
  
  &lt;strong&gt;Installing Litmus 2.0 Beta on Civo&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;To ensure Litmus runs perfectly in sync with your cluster, make sure you have installed Helm from the Civo marketplace along with Litmus since Litmus 2.0 is dependent on Helm for pulling the updated chaos charts.&lt;/p&gt;

&lt;p&gt;Once you click on &lt;strong&gt;Create&lt;/strong&gt; all you have to do is sit back and relax for 80 seconds while Civo creates the cluster at jet speed. Once installed and you can verify if litmus is up and running in your system by viewing the pods.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$kubectl&lt;/span&gt; get pods &lt;span class="nt"&gt;-n&lt;/span&gt; litmus

NAME                                                READY   STATUS      RESTARTS   AGE
chaos-litmus-2-0-0-beta-frontend-7b76655b6b-s9989   1/1     Running     0          72m
chaos-litmus-2-0-0-beta-mongo-0                     1/1     Running     0          72m
chaos-litmus-2-0-0-beta-server-bc884dcc7-v6bwj      2/2     Running     1          72m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should be able to view the front end, server as well as mongo pod successfully running in your cluster.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Accessing the Litmus Control Plane&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;To set up and log in to Litmus Portal expand the available services just created and copy the PORT of the frontend service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$kubectl&lt;/span&gt; get svc &lt;span class="nt"&gt;-n&lt;/span&gt; litmus

NAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT&lt;span class="o"&gt;(&lt;/span&gt;S&lt;span class="o"&gt;)&lt;/span&gt;                         AGE
litmusportal-frontend-service   NodePort    10.43.24.252    &amp;lt;none&amp;gt;        9091:31054/TCP                  81m
chaos-litmus-2-0-0-beta-mongo   ClusterIP   10.43.223.208   &amp;lt;none&amp;gt;        27017/TCP                       81m
litmusportal-server-service     NodePort    10.43.167.201   &amp;lt;none&amp;gt;        9002:32678/TCP,9003:31672/TCP   81m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;From this example, we can note that the frontend port is &lt;strong&gt;31054&lt;/strong&gt; but it’s dynamic and will be different in your case.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you have the PORT copied in your clipboard, simply use your &lt;strong&gt;NodeIP&lt;/strong&gt; and &lt;strong&gt;PORT&lt;/strong&gt; in this manner &lt;code&gt;&amp;lt;NodeIP&amp;gt;:&amp;lt;PORT&amp;gt;&lt;/code&gt; to access the portal. To get the NodeIP of the Civo cluster in this case, visit the UI and pick up the IP of the master node from the Nodes section.&lt;/p&gt;

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

&lt;p&gt;So in this case, since my &lt;strong&gt;master node&lt;/strong&gt; is &lt;code&gt;212.2.240.142&lt;/code&gt; and &lt;strong&gt;PORT&lt;/strong&gt; is &lt;code&gt;31054&lt;/code&gt;. I’ll be able to access the Litmus Control Plane by visiting &lt;strong&gt;&lt;a href="http://212.2.240.142:31054" rel="noopener noreferrer"&gt;http://212.2.240.142:31054&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You should be able to see the Login Page of Litmus. The default credentials are&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Username: admin
Password: litmus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  &lt;strong&gt;Deploying our target application&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Just like an application is incomplete without Chaos Engineering, a chaos injection is incomplete without selecting a target application to inject the chaos on. In this demo, we’ll target Nginx as the target application on which we’ll apply pod-delete to terminate the application pod and check if it's resilient enough to come back up by itself.&lt;/p&gt;

&lt;p&gt;The hypothesis of this demo experiment is to kill the application pod of Nginx and wait to see if it spawns back up by itself. To deploy Nginx on the cluster do the following.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$kubectl&lt;/span&gt; create deploy nginx &lt;span class="nt"&gt;--image&lt;/span&gt; nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would install the Nginx deployment in the default namespace, you can also create the same in the namespace of your choice.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Creating the Pod Delete experiment through the Litmus Control Plane&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Once we are able to successfully launch the Control Plane we can select the respective agent that we want to use to run the Chaos on. By default, you’ll have a Self Agent connected and we’re also going to use the same to move forward in this demo.&lt;/p&gt;

&lt;p&gt;Since this is a custom workflow that involves adding pod-delete as an experiment, we’d focus on adding it as a part of the custom workflow and not a pre-defined one. We have two options for custom workflows - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choosing from MyHub&lt;/li&gt;
&lt;li&gt;Uploading a YAML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ve selected MyHub to ease the flow of the demo and added pod-delete from the list of generic experiments present in ChaosHub. &lt;/p&gt;

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

&lt;p&gt;Once we’ve added the same in the workflow table we can click on the experiment to reveal the metadata which is tunable.&lt;/p&gt;

&lt;p&gt;If you have installed the Nginx deployment in any other namespace or if you want to tune your experiment to set annotations to true, then this is the right place to do so. For our application, we just need to set the app label to &lt;code&gt;app=nginx&lt;/code&gt; so that it can target the right application.&lt;/p&gt;

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

&lt;p&gt;Post-editing we can schedule the workflow by verifying the information in the Verify and Commit page.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Analysing the Workflow&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Post creation our workflow would be available to us where we can see the live visualization of the chaos injection. The UI would map and visualize the steps in a sequential fashion and display all the metadata and logs along with Chaos Results of the workflow nodes.&lt;/p&gt;

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

&lt;p&gt;If you want more granular control over the nodes, you can switch over to Table View to get a better view of the same. Upon workflow completion, the Chaos Result of the Chaos Engine would return the verdict of the workflow which specify the score of probe success percentage, the overall verdict of the experiment, phase, and other vital information.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Thank you for reading it to the very end and trying out Litmus Beta on Civo! Civo is a great platform to build your Kubernetes applications! With a community of 4000+ members, the community initiative is taking centre stage while Civo comes out of Beta and gears up for the Early Access Launch!&lt;/p&gt;

&lt;p&gt;Apply for Early Access for Civo here: &lt;a href="https://www.civo.com/" rel="noopener noreferrer"&gt;https://www.civo.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LitmusChaos 2.0 beta is out now and we await the launch of 2.0 GA within the next few months. Are you an SRE or a Kubernetes enthusiast? Does Chaos Engineering excite you?&lt;br&gt;
Contribute to LitmusChaos and share your feedback on &lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;Github&lt;/a&gt;. If you like LitmusChaos, become one of the many stargazers &lt;a href="https://github.com/litmuschaos/litmus/stargazers" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Join the LitmusChaos slack community following these simple steps!&lt;/p&gt;

&lt;p&gt;Step 1: Join the Kubernetes slack using the following link: &lt;a href="https://slack.k8s.io/" rel="noopener noreferrer"&gt;https://slack.k8s.io/&lt;/a&gt;&lt;br&gt;
Step 2: Join the #litmus channel on the Kubernetes slack or use this link after joining the Kubernetes slack: &lt;a href="https://slack.litmuschaos.io/" rel="noopener noreferrer"&gt;https://slack.litmuschaos.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking forward to having you in our community and learning together!&lt;/p&gt;

</description>
      <category>litmuschaos</category>
      <category>cloudnative</category>
      <category>cloud</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>How Litmus Orchestrates Chaos</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Sat, 27 Mar 2021 10:20:39 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/how-litmus-orchestrates-chaos-3nnd</link>
      <guid>https://dev.to/litmus-chaos/how-litmus-orchestrates-chaos-3nnd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flitmuschaos.io%2Fstatic%2F0a11d0492777dc77ca7c7d008877ce5a%2F78692%2Fcloud-native-way.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flitmuschaos.io%2Fstatic%2F0a11d0492777dc77ca7c7d008877ce5a%2F78692%2Fcloud-native-way.webp" alt="Litmus" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Litmus&lt;/strong&gt; is a &lt;strong&gt;Cross-Cloud Chaos Orchestration&lt;/strong&gt; framework for practising chaos engineering in cloud-native environments. Litmus provides a chaos operator, a large set of chaos experiments on its &lt;a href="https://hub.litmuschaos.io/" rel="noopener noreferrer"&gt;hub&lt;/a&gt;, detailed &lt;a href="https://docs.litmuschaos.io/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, and a friendly community.&lt;/p&gt;

&lt;p&gt;In this blog, we'll take a look at how Litmus Orchestrates Chaos Experiments and the individual components/resource breakdowns to get a perfect step by step understanding of how things happen behind the hood.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  &lt;strong&gt;The Basics First&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Litmus takes a cloud-native approach to create, manage and monitor chaos. Litmus orchestrates Chaos using the following &lt;strong&gt;Primary&lt;/strong&gt; Kubernetes Custom Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chaos Experiment&lt;/strong&gt;: This is a low-level definition of the Chaos Experiment itself, in this CR you'd find the different chaos parameters, the libraries used to implement chaos, the permissions associated with the particular experiment as well as some Operational characteristics like if the privileged mode is enabled, the security context of your experiment, etc. The experiment tunables like the &lt;code&gt;TOTAL_CHAOS_DURATION&lt;/code&gt;, &lt;code&gt;LIB_IMAGE&lt;/code&gt;, etc, is already set to a default value with the help of this CR. &lt;em&gt;(The default experiment parameters are pulled from the ChaosHub)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chaos Engine&lt;/strong&gt;: This user-facing CR helps in binding the &lt;em&gt;application instance&lt;/em&gt; with the &lt;em&gt;ChaosExperiment&lt;/em&gt;. It defines the Run Policies and also holds the status of your experiment. This CR helps you customize the experiment according to your need since it can override some of the default characteristics/tunables in your experiment CR. This CR reconciles with the Chaos Operator &lt;em&gt;(We'll get to more details about Chaos Operator soon, but for now think about it as a chaos generator that takes your tuned settings and applies the chaos)&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chaos Result&lt;/strong&gt;: This resource is created by the experiment and is used to store details of the experiment run. It contains important experiment level details like the current Verdict (Awaited, Passed, Failed), the current status and the nature of the experiment results, the Chaos Engine reference, salient application/result attributes. It is also a source for metrics collection. It is updated/patched with the status of the experiment run. It is not removed as part of the default cleanup procedures to allow for extended reference.&lt;/li&gt;
&lt;/ul&gt;






&lt;h2&gt;
  
  
  The Run Time Flow
&lt;/h2&gt;

&lt;p&gt;The first and foremost step is to install Litmus, either by directly applying the Kubernetes manifest or by doing a helm install of the litmus chart.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;litmuschaos  &lt;span class="nt"&gt;--namespace&lt;/span&gt; litmus ./charts/litmus-2-0-0-beta/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/litmuschaos/litmus/master/litmus-portal/cluster-k8s-manifest.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;NOTE: Take a look at the &lt;a href="https://docs.litmuschaos.io/docs/getting-started/installation" rel="noopener noreferrer"&gt;detailed installation instructions&lt;/a&gt; to have Litmus installed step by step in your system&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ow0tixe4tlkrfag9wmd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ow0tixe4tlkrfag9wmd.gif" alt="Alt Text" width="720" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once Litmus has been installed in your cluster, it'd create the CRDs and the Chaos Operator as a part of the installation. Once you have the basic CRDs up and running in your cluster, you can pull your experiments from the Hub of experiments, the ChaosHub, containing 30+ experiments for you to try out. &lt;/p&gt;

&lt;p&gt;After successfully pulling the experiment in your cluster as CRs, the ChaosEngine has to be created which binds your application instance to the chaos experiment you just pulled. This whole time, the Chaos Operator keeps a watch at the ChaosEngine and as soon as it detects a new experiment installation it spawns up a &lt;strong&gt;Chaos Runner&lt;/strong&gt; which is responsible for executing the Chaos Experiment with the help of &lt;strong&gt;Experiment Jobs&lt;/strong&gt; (The Jobs are spawned by the Chaos Runner based on how you have created the Chaos Engine)&lt;/p&gt;

&lt;p&gt;These Experiment Jobs then create the Chaos Results, which are continually updated as the experiment is being executed. The Chaos Runner listens to these results and patches them to the Chaos Engine accordingly.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  How the Chaos Operator works
&lt;/h2&gt;

&lt;p&gt;Now at this point, we are already aware of Chaos Engine being one of the important Custom Resources in this project, but there's much more to it that just binding application instances. The Chaos Engine CR is what holds the crucial information of which is the target application to induce chaos on! &lt;/p&gt;

&lt;p&gt;The Operator on the other hand is responsible for identifying whether the target application is existing on the cluster from the Chaos Engine (It does so with the help of app namespace and app label which is defined as a part of the Chaos Engine CRD). Once it gets confirmation that these applications are present on the cluster, it does a routine annotation check (Can be turned off as well, but in case you are someone worried about controlling the blast radius, do keep it enabled).&lt;/p&gt;

&lt;p&gt;Next comes validating the policies/run properties that have been constructed as a part of Chaos Engine (Default as well as when modified), the Engine is what holds the service accounts which is responsible for creating the Chaos Runner and Experiment Pods (RBAC). Role Bindings are very helpful when it comes to assessing the permissions you have given for a workflow or individual experiments. It is then followed by a validation of the experiment tunables that had been overridden on added, for example, adding a new ConfigMap to push some secret to it, Overriding the default experiment parameters, pushing instance-specific data dynamically during experiment run, etc. &lt;/p&gt;

&lt;p&gt;The operator also takes note/validates the Chaos Runner attributes as well, it checks whether the pull policy, the set of images and arguments are correct or not, it comes really handy when you are targeting infra changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Job Cleanup Policy
&lt;/h3&gt;

&lt;p&gt;This is a tunable property of the workflow which decides whether you want to clear all the resources used for inducing chaos in your application and revert it back to the original state, or you want to retain all the resources created and use it to export metrics in your own Analytical solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoring
&lt;/h3&gt;

&lt;p&gt;The operator is also responsible for monitoring your application state, if this tunable is set to true then the experiment metrics are monitored. The operator ensures that these metrics are collected and enables the exporter to scrape them from the Chaos Engine.&lt;/p&gt;

&lt;p&gt;In the future releases, Litmus won't have this tunable parameter anymore, since it won't be available anymore in the Chaos Engine the users can't use this tunable from there, instead, if they don't want to collect the metrics of their workflows they have to skip the installation of the &lt;code&gt;chaos-exporter&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Apart from all the above Jobs of the Chaos Operator, it also reconciles the state of the Chaos Engine and takes certain steps based on the result of the Chaos Experiment.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  The Three modes of the Operator
&lt;/h2&gt;

&lt;p&gt;Litmus provides certain operational modes when it comes to diversifying the range of chaos operations for different personas making it suitable for use-cases of SREs, Developers, Service Owners, etc so that they can induce chaos on their specific cluster (individual or shared). &lt;/p&gt;

&lt;p&gt;There are three modes that the Chaos Operator supports&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Standard&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Admin&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Namespaced&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Standard&lt;/strong&gt; - The Standard Mode is where Litmus run on a centralized namespace (typically &lt;code&gt;litmus&lt;/code&gt;) and it watches for Chaos Engines created in the cluster in different namespaces. Mostly suited for SREs, DevOps Admins, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin&lt;/strong&gt; - Admin mode is one of the ways the chaos orchestration is set up in Litmus, wherein all chaos resources (i.e., install time resources like the operator, Chaos Experiment CRs, Chaos Service Account and runtime resources like Chaos Engine, Chaos Runner, etc) are set up in a single admin namespace (typically, litmus). This mode typically needs a "wider" &amp;amp; "stronger" ClusterRole, albeit one that is still just a superset of the individual experiment permissions. In this mode, the applications in their respective namespaces are subjected to chaos while the chaos job runs elsewhere, i.e., admin namespace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Namespaced&lt;/strong&gt; - This mode constraints developers to very strict environments where they are very conscious about the blast radius and the policies are set in such a way that they don't get the visibility to watch the Chaos Operators in any other namespace.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Chaos Orchestration
&lt;/h2&gt;

&lt;p&gt;Now that you are aware of all the Chaos Resources and the primary details which make up the Chaos Experiment, its time to take a look at the main Orchestration. There are three main states of Chaos Orchestration namely&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Initialization&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Completed&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Stopped&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Initialization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the operator triggers Chaos and spawns the Chaos Runner Pod, the experiment is in the Initialization phase. The Chaos Operator is instrumented with Kubernetes Finalizers which ensures to only delete the supporting chaos resources if and only if all the child resources have been exhausted/reached a logical conclusion and your experiment have been finished.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Completed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The execution of the experiment is verified by the Chaos Runner with the help of the Chaos Result resource which then states/validates that the experiment has been completed. At this point, re-applying the Chaos Engine would repeat the same steps and the experiment would be repeated seamlessly. Depending upon your job cleanup policy the Chaos Operator might either remove or retain your experiment Pods. If you decide to remove all the Chaos Resources, the Finalizer would be removed as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stopped&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once initialized, you are having second thoughts about your experiments and want to abruptly stop it in the middle! You can actually do so by either patching the Engine state to &lt;code&gt;stop&lt;/code&gt; or delete the Chaos Engine resource completely. If you have patched the Operator then it will set the Engine Status to &lt;code&gt;Stopped&lt;/code&gt;. If you re-apply the experiment at this point, it'll re-trigger the experiment run. As a part of this abort operation, it forcefully deletes the Chaos Pods.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttp%253A%252F%252Fpm1.narvii.com%252F6488%252F49d7205822d2a62fab121a7c5ee3c8afe5ba8f26_hq.jpg%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttp%253A%252F%252Fpm1.narvii.com%252F6488%252F49d7205822d2a62fab121a7c5ee3c8afe5ba8f26_hq.jpg%26f%3D1%26nofb%3D1" alt="Thanks" width="700" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;That's all folks 👨‍🏫, Thank you for reading it till the end. I hope you had a productive time learning about Litmus and how it works internally.&lt;/p&gt;

&lt;p&gt;Are you an &lt;a href="https://en.wikipedia.org/wiki/Site_Reliability_Engineering" rel="noopener noreferrer"&gt;SRE&lt;/a&gt; or a &lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; enthusiast? Does &lt;a href="https://en.wikipedia.org/wiki/Chaos_engineering" rel="noopener noreferrer"&gt;Chaos Engineering&lt;/a&gt; excite you?&lt;br&gt;
Join Our Community On Slack For Detailed Discussion, Feedback &amp;amp; Regular Updates On Chaos Engineering For Kubernetes: &lt;a href="https://kubernetes.slack.com/messages/CNXNB0ZTN" rel="noopener noreferrer"&gt;https://kubernetes.slack.com/messages/CNXNB0ZTN&lt;/a&gt;&lt;br&gt;
(#litmus channel on the Kubernetes workspace)&lt;/p&gt;


&lt;p&gt;&lt;br&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FXtpJ3Wz%2FLitmus.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FXtpJ3Wz%2FLitmus.png" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;Litmus Chaos GitHub repo&lt;/a&gt; and do share your feedback: &lt;a href="https://github.com/litmuschaos/litmus" rel="noopener noreferrer"&gt;https://github.com/litmuschaos/litmus&lt;/a&gt;&lt;br&gt;
Submit a &lt;a href="https://github.com/litmuschaos/litmus/pulls" rel="noopener noreferrer"&gt;pull request&lt;/a&gt; if you identify any necessary changes.&lt;/p&gt;

&lt;p&gt;Don't forget to share these resources with someone who you think might need some help learn/explore more about Chaos Engineering. Peace out. ✌🏼&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>cloudnative</category>
      <category>kubernetes</category>
      <category>litmuschaos</category>
    </item>
    <item>
      <title>Amazing Productivity Tools for Developers</title>
      <dc:creator>Sayan Mondal</dc:creator>
      <pubDate>Sat, 13 Mar 2021 11:21:02 +0000</pubDate>
      <link>https://dev.to/sayanide/amazing-productivity-tools-for-developers-bl4</link>
      <guid>https://dev.to/sayanide/amazing-productivity-tools-for-developers-bl4</guid>
      <description>&lt;p&gt;Whenever it comes to work, whether you are casually working on your side project while sipping a cup of coffee or have intense working hours to deliver your task before the deadline, you want to know that you’re doing your best. That’s when productivity tools for developers come in handy.&lt;/p&gt;

&lt;p&gt;In this article, I'll not mention tools like Trello, Slack, Jira, etc which are pretty widely known instead I'm going to talk about tools that are underrated and not really that famous(but definitely should be adopted more).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstormotion.io%2Fblog%2Fcontent%2Fimages%2F2018%2F09%2FProductivity.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstormotion.io%2Fblog%2Fcontent%2Fimages%2F2018%2F09%2FProductivity.jpg" alt="Productivity"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Keeping in mind how software developers work best, the following productivity tools for developers are recommended for individuals as well as teams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fwww.gradelink.com%252Fwp-content%252Fuploads%252F2019%252F03%252FColdTurkey.jpg%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fwww.gradelink.com%252Fwp-content%252Fuploads%252F2019%252F03%252FColdTurkey.jpg%26f%3D1%26nofb%3D1" alt="Cold Turkey"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Cold Turkey&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;If you blame yourself for being unable to stay away from social media or get easily distracted by AI driven notification of your favourite streamer streaming right now! Then this is the perfect application for you.&lt;/p&gt;

&lt;p&gt;Using Cold Turkey, you can proactively restrict your access to specific desktop applications, websites, or even your access to the internet in general. You set your own schedule and daily limits for access, based on areas of weakness. RescueTime pairs nicely with this tool, in that it can help you audit major timesucks.&lt;/p&gt;

&lt;p&gt;Find it here: &lt;a href="https://getcoldturkey.com/" rel="noopener noreferrer"&gt;https://getcoldturkey.com/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fgeorgiachron.com%252Fimgx%252F7pace-timetracker-5-reporting-dashboards-10040281.png%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fgeorgiachron.com%252Fimgx%252F7pace-timetracker-5-reporting-dashboards-10040281.png%26f%3D1%26nofb%3D1" alt="7pace"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;7pace&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Do you follow a DevOps practice pretty often in your development cycle! I'm assuming you/your team is using Kanban or Scrum boards to manage your work already. Well, wouldn't it be convenient if you could fit a time tracker solution right into your development team's board and keep track of your activities, automate burndown reports and also manage resources and budget in large organizations! Well, then 7pace is the right solution for you.&lt;/p&gt;

&lt;p&gt;7pace Timetracker was built specifically for software development teams that work in an Agile, Scrum, or Waterfall environment. Individuals using the tool experience an average of just three seconds to log each task. 7pace Timetracker integrates with Microsoft Team Foundation Server (TFS) and Visual Studio Team Services (VSTS) for even greater efficiency.&lt;/p&gt;

&lt;p&gt;Even if you use GitHub project boards to manage your projects 7pace has a beta offering to integrate their time tracking solution right in.&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://www.7pace.com/" rel="noopener noreferrer"&gt;https://www.7pace.com/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fcdn.guidingtech.com%252Fmedia%252Fassets%252FWordPress-Import%252F2015%252F05%252FTime-Out-Overlayer.png%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fcdn.guidingtech.com%252Fmedia%252Fassets%252FWordPress-Import%252F2015%252F05%252FTime-Out-Overlayer.png%26f%3D1%26nofb%3D1" alt="TimeOut"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Time Out&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Unfortunately only available for the macOS currently, Time Out definitely tops the list of the best productivity tools for programmers to organize breaks. We love it for the plain &amp;amp; clear interface as well as wide customization capabilities.&lt;/p&gt;

&lt;p&gt;You can take either a &lt;em&gt;short break&lt;/em&gt; of 15 seconds every 15 minutes or &lt;em&gt;long ones&lt;/em&gt; for 10 minutes every hour. Thus whether you want to do a short 15 seconds eye exercise or brew your coffee in a 10 minutes break is all up to you.&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://apps.apple.com/us/app/time-out-break-reminders/" rel="noopener noreferrer"&gt;https://apps.apple.com/us/app/time-out-break-reminders/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timecamp.com%2Fblog%2Fwp-content%2Fuploads%2F2018%2F11%2Fflux-windows.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timecamp.com%2Fblog%2Fwp-content%2Fuploads%2F2018%2F11%2Fflux-windows.jpg" alt="Flux"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;F.lux&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;During the day, computer screens look good—they're designed to look like the sun. But, at 9 PM, 10 PM, or 3 AM, you probably shouldn't be looking at the sun. If you have a bad sleeping habit like me and you're probably coding late nights! Trust me, you just might want to consider this tool.&lt;/p&gt;

&lt;p&gt;f.lux makes your computer screen look like the room you're in, all the time. When the sun sets, it makes your computer look like your indoor lights. In the morning, it makes things look like sunlight again.&lt;/p&gt;

&lt;p&gt;Tell f.lux what kind of lighting you have, and where you live. Then forget about it. f.lux will do the rest, automatically.&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://justgetflux.com/" rel="noopener noreferrer"&gt;https://justgetflux.com/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fwakatime.com%252Fstatic%252Fimg%252FScreenShots%252Fdashboard.png%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fwakatime.com%252Fstatic%252Fimg%252FScreenShots%252Fdashboard.png%26f%3D1%26nofb%3D1" alt="WakaTime"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;WakaTime&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;This tool follows your work when you’re programming. It shows you all the details of your work as a developer – what file you’ve been working on, operating system, and even language. You can also compete against your teammates on the Leaderboard and see who has the highest score in coding.&lt;/p&gt;

&lt;p&gt;It is very useful when it comes to managing your budget and productivity as a developer at once. Since this is also a time tracking solution, if you combine this with &lt;a href="https://www.timecamp.com/" rel="noopener noreferrer"&gt;TimeCamp&lt;/a&gt; you basically become the time god.&lt;/p&gt;

&lt;p&gt;Check it out at: &lt;a href="https://wakatime.com/" rel="noopener noreferrer"&gt;https://wakatime.com/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timecamp.com%2Fblog%2Fwp-content%2Fuploads%2F2018%2F11%2Fhabitica.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.timecamp.com%2Fblog%2Fwp-content%2Fuploads%2F2018%2F11%2Fhabitica.png" alt="Habitica"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Habitica&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;One of my personal favourites, Habitica is a free habit-building and productivity app that treats your real life like a game. With in-game rewards and punishments to motivate you and a strong social network to inspire you, Habitica can help you achieve your goals to become healthy, hard-working, and happy.&lt;/p&gt;

&lt;p&gt;Habitica takes you to the old pixel-like platform world in which you’re a hero fighting through daily, weekly, and long-term goals, habits, and to-do lists. For every goal achieved you receive points, discover new animals, and can buy weapon to gain strength. The more you fail at your tasks, the more strength you lose. And the challenge is to keep your character alive.&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://habitica.com/static/home" rel="noopener noreferrer"&gt;https://habitica.com/static/home&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttp%253A%252F%252Fpm1.narvii.com%252F6488%252F49d7205822d2a62fab121a7c5ee3c8afe5ba8f26_hq.jpg%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttp%253A%252F%252Fpm1.narvii.com%252F6488%252F49d7205822d2a62fab121a7c5ee3c8afe5ba8f26_hq.jpg%26f%3D1%26nofb%3D1" alt="Thanks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;That's all folks 👨‍🏫, Thank you for reading it till the end. These are the resources I found to be really helpful for me.&lt;br&gt;
I'm sure there must be tons of other amazing tools out there too. These are the ones that I really found helpful and often get myself indulged into. 👨🏻‍💻&lt;/p&gt;

&lt;p&gt;Don't forget to share these resources with someone who you think might need some help being more productive at work too. Peace out. ✌🏼&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>todayilearned</category>
      <category>career</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
