<?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: Syed Sadat Ali</title>
    <description>The latest articles on DEV Community by Syed Sadat Ali (@syedsadatali).</description>
    <link>https://dev.to/syedsadatali</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%2F1669610%2Fedaaa6a8-8ee3-4bab-993d-55415746414a.jpg</url>
      <title>DEV Community: Syed Sadat Ali</title>
      <link>https://dev.to/syedsadatali</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/syedsadatali"/>
    <language>en</language>
    <item>
      <title>How to Monitor Network Bandwidth of Docker Containers</title>
      <dc:creator>Syed Sadat Ali</dc:creator>
      <pubDate>Mon, 16 Sep 2024 17:44:10 +0000</pubDate>
      <link>https://dev.to/syedsadatali/how-to-monitor-network-bandwidth-of-docker-containers-1i3e</link>
      <guid>https://dev.to/syedsadatali/how-to-monitor-network-bandwidth-of-docker-containers-1i3e</guid>
      <description>&lt;p&gt;To check the network bandwidth of a Docker instance, you can use several methods depending on what specifics you want to monitor (e.g., overall network usage, per-container bandwidth, etc.). Here’s a step-by-step guide for different approaches:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Using Docker Stats Command&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;docker stats&lt;/code&gt; command provides real-time statistics for containers, including network I/O.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker stats
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command shows information including network input and output for each running container. The &lt;code&gt;NET I/O&lt;/code&gt; column shows the amount of data received and sent by each container.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Using Docker Network Inspect&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you need detailed information about a specific network:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker network inspect &amp;lt;network_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will give you details about the network configuration and connected containers but does not directly show bandwidth usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Using Network Monitoring Tools&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For more detailed bandwidth monitoring, you may need external tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;iftop&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;nload&lt;/code&gt;&lt;/strong&gt;: These tools can be installed on the host machine to monitor network traffic. You’ll need to look at traffic on the Docker network interfaces (e.g., &lt;code&gt;docker0&lt;/code&gt; or &lt;code&gt;br-&amp;lt;network_id&amp;gt;&lt;/code&gt;).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;iftop &lt;span class="nt"&gt;-ni&lt;/span&gt; docker0
&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;  &lt;span class="nb"&gt;sudo &lt;/span&gt;nload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prometheus &amp;amp; Grafana&lt;/strong&gt;: For more comprehensive monitoring, you can set up Prometheus with a Docker exporter and visualize the metrics using Grafana. The Docker exporter can provide metrics on network usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Using cAdvisor&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/google/cadvisor" rel="noopener noreferrer"&gt;cAdvisor&lt;/a&gt; is a container monitoring tool that provides detailed metrics about Docker containers, including network usage.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install cAdvisor&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cadvisor &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/:/rootfs:ro &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/run:/var/run:ro &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/sys:/sys:ro &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/docker/:/var/lib/docker:ro &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--publish&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
    google/cadvisor:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Access the cAdvisor Web Interface&lt;/strong&gt;: Visit &lt;code&gt;http://localhost:8080&lt;/code&gt; to view metrics, including network statistics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Custom Monitoring with Network Tools&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You can use network traffic monitoring tools directly within containers to get more granular data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install &lt;code&gt;iperf&lt;/code&gt;&lt;/strong&gt; or similar tools within your containers and run tests to measure bandwidth.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;container_id&amp;gt; iperf &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;container_id&amp;gt; iperf &lt;span class="nt"&gt;-c&lt;/span&gt; &amp;lt;server_ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Reference : &lt;a href="https://docs.docker.com/reference/cli/docker/network/" rel="noopener noreferrer"&gt;https://docs.docker.com/reference/cli/docker/network/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>network</category>
    </item>
    <item>
      <title>Mindful Activities</title>
      <dc:creator>Syed Sadat Ali</dc:creator>
      <pubDate>Sat, 07 Sep 2024 20:58:51 +0000</pubDate>
      <link>https://dev.to/syedsadatali/mindful-activities-ehf</link>
      <guid>https://dev.to/syedsadatali/mindful-activities-ehf</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiyuy3w3d4xglbt9gqsja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiyuy3w3d4xglbt9gqsja.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Four data structures in Python</title>
      <dc:creator>Syed Sadat Ali</dc:creator>
      <pubDate>Sat, 07 Sep 2024 20:45:36 +0000</pubDate>
      <link>https://dev.to/syedsadatali/four-data-structures-in-python-4peh</link>
      <guid>https://dev.to/syedsadatali/four-data-structures-in-python-4peh</guid>
      <description>&lt;h1&gt;
  
  
  Four data structures in Python
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;List&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mutable&lt;/strong&gt;: You can change, add, or remove items after the list creation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ordered&lt;/strong&gt;: The order of items is maintained, and items can be accessed by their index.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: Created using square brackets &lt;code&gt;[]&lt;/code&gt; or the &lt;code&gt;list()&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates&lt;/strong&gt;: Allows duplicate elements.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: &lt;code&gt;[1, 2, 3, 'apple', 'banana']&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Immutable&lt;/strong&gt;: Once created, you cannot change, add, or remove items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ordered&lt;/strong&gt;: Like lists, the order is maintained, and index access is possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: Created using parentheses &lt;code&gt;()&lt;/code&gt; or the &lt;code&gt;tuple()&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates&lt;/strong&gt;: Allows duplicate elements.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: &lt;code&gt;(1, 2, 3, 'apple', 'banana')&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mutable&lt;/strong&gt;: You can add or remove items, but you cannot change individual items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unordered&lt;/strong&gt;: No index access because sets do not record element position.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: Created using curly braces &lt;code&gt;{}&lt;/code&gt; or the &lt;code&gt;set()&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates&lt;/strong&gt;: Does not allow duplicate elements; only unique items.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: &lt;code&gt;{1, 2, 3, 'apple', 'banana'}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mutable&lt;/strong&gt;: You can change, add, or remove items, which are key-value pairs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ordered&lt;/strong&gt;: As of Python 3.7, dictionaries maintain insertion order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: Created using curly braces &lt;code&gt;{}&lt;/code&gt; with key-value pairs or the &lt;code&gt;dict()&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates&lt;/strong&gt;: Keys must be unique, but values can be duplicated.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: &lt;code&gt;{1: 'apple', 2: 'banana', 3: 'cherry'}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Quick summary in code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# List: Mutable, ordered, allows duplicates
&lt;/span&gt;&lt;span class="n"&gt;my_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;apple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Tuple: Immutable, ordered, allows duplicates
&lt;/span&gt;&lt;span class="n"&gt;my_tuple&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;apple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Set: Mutable, unordered, no duplicates
&lt;/span&gt;&lt;span class="n"&gt;my_set&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;apple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Dictionary: Mutable, ordered (since Python 3.7), unique keys
&lt;/span&gt;&lt;span class="n"&gt;my_dict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;apple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;banana&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;apple&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each structure has its own use-cases depending on the requirements of mutability, order, and uniqueness in your Python program.&lt;/p&gt;

</description>
      <category>datastructures</category>
      <category>python</category>
      <category>dsa</category>
    </item>
    <item>
      <title>How to fix RHEL file system</title>
      <dc:creator>Syed Sadat Ali</dc:creator>
      <pubDate>Sat, 07 Sep 2024 15:03:03 +0000</pubDate>
      <link>https://dev.to/syedsadatali/how-to-fix-redhat-file-system-112p</link>
      <guid>https://dev.to/syedsadatali/how-to-fix-redhat-file-system-112p</guid>
      <description>&lt;h1&gt;
  
  
  How to fix RHEL file system
&lt;/h1&gt;

&lt;p&gt;To boot into rescue mode in Red Hat Enterprise Linux (RHEL) 8 and check the file system for corruption, you can follow these steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  Boot into Rescue Mode
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reboot the System:&lt;/strong&gt;&lt;br&gt;
Restart your system. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access the Boot Menu:&lt;/strong&gt;&lt;br&gt;
During the boot process, press a key (usually &lt;code&gt;Esc&lt;/code&gt;, &lt;code&gt;F2&lt;/code&gt;, &lt;code&gt;F12&lt;/code&gt;, or a similar key, depending on your system) to access the boot menu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Select Rescue Mode:&lt;/strong&gt;&lt;br&gt;
If using GRUB bootloader, press &lt;code&gt;e&lt;/code&gt; to edit the boot parameters of the default kernel. Use the arrow keys to navigate to the line that starts with &lt;code&gt;linux&lt;/code&gt; and append &lt;code&gt;rd.break&lt;/code&gt; at the end of the line. Then press &lt;code&gt;Ctrl + X&lt;/code&gt; to boot with these parameters.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Check and Fix File System Corruption
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Remount the Root File System:&lt;/strong&gt;
Once you are in the rescue shell, you will need to remount the root file system in read/write mode:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   mount &lt;span class="nt"&gt;-o&lt;/span&gt; remount,rw /sysroot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Change Root into the Sysroot:&lt;/strong&gt;
Change the root to the &lt;code&gt;/sysroot&lt;/code&gt; directory:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;chroot&lt;/span&gt; /sysroot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check and Repair the File System:&lt;/strong&gt;
Use the &lt;code&gt;fsck&lt;/code&gt; command to check and repair the file system. Replace &lt;code&gt;/dev/sdXN&lt;/code&gt; with your actual device identifier (e.g., &lt;code&gt;/dev/sda1&lt;/code&gt;):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   fsck /dev/sdXN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, to check the root partition, you might run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   fsck &lt;span class="nt"&gt;-f&lt;/span&gt; /dev/sda1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Exit and Reboot:&lt;/strong&gt;
After the file system check and repair are complete, exit the chroot environment:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remount the file system in read-only mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   mount &lt;span class="nt"&gt;-o&lt;/span&gt; remount,ro /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reboot the system:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Alternative Method (Using Rescue Media)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Boot from Rescue Media:&lt;/strong&gt;&lt;br&gt;
Insert the RHEL 8 installation media and boot from it. Select the &lt;code&gt;Troubleshooting&lt;/code&gt; option from the boot menu, then select &lt;code&gt;Rescue a Red Hat Enterprise Linux system&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mount the File System:&lt;/strong&gt;&lt;br&gt;
Follow the prompts to mount the file system. The installer will detect your RHEL installation and mount it under &lt;code&gt;/mnt/sysimage&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chroot into the Mounted File System:&lt;/strong&gt;&lt;br&gt;
Change root into the mounted file system:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;chroot&lt;/span&gt; /mnt/sysimage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check and Repair the File System:&lt;/strong&gt;&lt;br&gt;
Follow the same steps as above to run &lt;code&gt;fsck&lt;/code&gt; and repair the file system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exit and Reboot:&lt;/strong&gt;&lt;br&gt;
Exit the chroot environment and reboot the system:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;exit
   &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should be able to boot into rescue mode in RHEL 8 and check and fix any file system corruption.&lt;/p&gt;

</description>
      <category>redhat</category>
      <category>filesystem</category>
      <category>rescue</category>
    </item>
    <item>
      <title>Tech Debt</title>
      <dc:creator>Syed Sadat Ali</dc:creator>
      <pubDate>Sat, 07 Sep 2024 14:01:36 +0000</pubDate>
      <link>https://dev.to/syedsadatali/tech-debt-12na</link>
      <guid>https://dev.to/syedsadatali/tech-debt-12na</guid>
      <description>&lt;p&gt;To effectively advocate for reducing technical debt, focus on communicating how it can lead to faster delivery, increased productivity, and better value for the company. Here’s how to frame your approach:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pay Down Tech Debt to Go Faster Immediately&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Technical Debt?&lt;/strong&gt;&lt;br&gt;
Technical debt represents the cost of quick fixes, workarounds, and suboptimal code that accumulate over time. It’s like borrowing time from future development efforts, but with "interest" in the form of slower progress, more bugs, and higher maintenance costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proven Approach:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identify High-Impact Areas:&lt;/strong&gt; Start by identifying specific, high-impact areas of technical debt that slow down development or increase error rates. Prioritize these issues by their impact on day-to-day work, such as parts of the code that frequently cause bugs or slow down new feature development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demonstrate Quick Wins:&lt;/strong&gt; Provide examples where addressing specific pieces of technical debt has led to immediate improvements, like faster builds, reduced bug counts, or quicker turnaround on feature requests. Use data to back up your points—show how much time or how many resources are spent dealing with recurring issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relate to Business Objectives:&lt;/strong&gt; Highlight how paying down technical debt aligns with broader business goals, like accelerating time-to-market or improving customer satisfaction. Frame debt reduction not just as a cleanup activity, but as a strategic move that helps the team meet delivery targets faster and with fewer issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Tech Debt to Increase Productivity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proven Approach:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quantify Productivity Losses:&lt;/strong&gt; Illustrate the impact of technical debt on productivity by quantifying time lost due to rework, debugging, or navigating complex code. For instance, track the number of hours spent fixing issues that stem from technical debt versus working on new features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link to Team Well-Being:&lt;/strong&gt; Emphasize how technical debt contributes to daily stress and impacts team morale. Explain that constantly working around poor code quality is frustrating and demoralizing, which can lead to burnout or reduced performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Propose Focused Refactoring Sessions:&lt;/strong&gt; Suggest dedicating specific time slots, such as a portion of each sprint, to tackle high-priority debt items. This approach integrates debt reduction into the workflow without requiring major shifts in scheduling or priorities, making it easier for management to approve.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Couple Tech Debt Fixes with Value Delivery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proven Approach:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Align with Feature Development:&lt;/strong&gt; Suggest coupling technical debt reduction with ongoing feature development. For example, when planning a new feature that interacts with problematic code, propose refactoring that code as part of the feature work. This approach minimizes the perception of technical debt reduction as a separate, time-consuming task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Show Value Through Examples:&lt;/strong&gt; Provide case studies or examples where similar approaches have led to noticeable improvements in product stability, performance, or customer satisfaction. Concrete evidence of value delivery can help shift the conversation from abstract concepts to real-world benefits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a Feedback Loop:&lt;/strong&gt; Set up mechanisms to regularly review the impact of debt reduction efforts, such as retrospectives focused on technical debt or metrics that track improvements in productivity and quality. Sharing these successes can build momentum and encourage ongoing support from management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Points for Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster Delivery:&lt;/strong&gt; Reducing technical debt directly correlates with faster delivery of features and bug fixes, aligning with business goals of speed and efficiency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased Productivity:&lt;/strong&gt; Paying down technical debt allows developers to spend more time on productive work and less on firefighting, leading to a more efficient and happier team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Product Quality:&lt;/strong&gt; A cleaner, more maintainable codebase results in fewer bugs, better performance, and a stronger product overall, contributing to higher customer satisfaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By clearly linking technical debt reduction to the immediate and tangible benefits that management values—speed, productivity, and quality—you can make a more compelling case for prioritizing this work. Present your argument with data and examples that resonate with the broader business objectives, and emphasize that addressing technical debt is not just a technical necessity, but a strategic investment in the team's and the product's future success.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The impact of technical debt on a software project and its stakeholders can be significant, affecting everything from code quality to team morale.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Understanding these impacts is crucial for making the case to reduce technical debt and to motivate teams to prioritize quality alongside speed. *&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here’s a breakdown of the various ways technical debt can impact a project:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Reduced Development Velocity&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Technical debt often leads to slower development over time because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complex Code:&lt;/strong&gt; Developers spend more time understanding and working around complex, messy, or poorly documented code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frequent Bugs:&lt;/strong&gt; Increased bugs and errors mean more time spent on fixes and less on new feature development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rework and Refactoring:&lt;/strong&gt; As debt accumulates, the need for rework increases, consuming time that could be spent on innovation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Overall, this reduces the team's ability to deliver features quickly, impacting deadlines and slowing down the project’s progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Increased Maintenance Costs&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As technical debt accumulates, the cost of maintaining the software rises due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time-Consuming Debugging:&lt;/strong&gt; Debugging becomes more challenging in a codebase riddled with quick fixes and workarounds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Higher Testing Efforts:&lt;/strong&gt; Poor code quality can lead to more complex and extensive testing requirements, as the code may behave unpredictably.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependencies Management:&lt;/strong&gt; Outdated or poorly managed dependencies add complexity, often leading to compatibility issues and security risks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; The increasing need for maintenance drives up operational costs, reducing the overall return on investment for the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Poor Product Quality&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Technical debt can significantly impact the quality of the product, leading to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance Issues:&lt;/strong&gt; Suboptimal code can cause performance bottlenecks, resulting in slower applications and poor user experiences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased Bugs:&lt;/strong&gt; A high volume of technical debt typically correlates with a higher incidence of bugs, negatively affecting reliability and customer satisfaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability Challenges:&lt;/strong&gt; As the codebase becomes more complex and intertwined, scaling the product or adding new features becomes increasingly difficult.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Reduced product quality can lead to customer dissatisfaction, increased churn, and damage to the company's reputation.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Lower Team Morale and Increased Stress&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The presence of technical debt can have a significant impact on the development team's morale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frustration:&lt;/strong&gt; Developers may feel frustrated and demotivated when constantly dealing with poor code quality and recurring issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Burnout:&lt;/strong&gt; The stress of managing technical debt can contribute to burnout, especially when deadlines are tight, and the pressure to deliver is high.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turnover:&lt;/strong&gt; Persistent technical debt can drive talented developers to leave, seeking environments where they can work on higher-quality code and more rewarding projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; High turnover and low morale can disrupt team cohesion, leading to a loss of institutional knowledge and further slowing down the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Difficulty in Onboarding New Developers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Technical debt can make it challenging to onboard new developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Steep Learning Curve:&lt;/strong&gt; New developers may struggle to understand a complex, undocumented, or poorly structured codebase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Productivity:&lt;/strong&gt; It takes longer for new team members to become productive, as they spend more time deciphering existing debt-laden code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Slower onboarding can delay project timelines and reduce the overall efficiency of the team.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. &lt;strong&gt;Increased Risk and Reduced Agility&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Technical debt can introduce significant risks and reduce the agility of the development process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unpredictable Behavior:&lt;/strong&gt; Quick fixes and workarounds can lead to code that behaves unpredictably, making the software less reliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited Flexibility:&lt;/strong&gt; As debt grows, making changes or adapting to new business requirements becomes increasingly difficult, reducing the team's ability to respond to market needs quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; The project becomes less adaptable, increasing the risk of missed opportunities or failure to meet business objectives.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. &lt;strong&gt;Negative Impact on Customer Satisfaction&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For end-users, the effects of technical debt can manifest as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decreased Reliability:&lt;/strong&gt; Users may experience more downtime, bugs, or inconsistent performance due to the underlying technical issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poor User Experience:&lt;/strong&gt; Performance issues or frequent updates to fix bugs can disrupt the user experience, leading to frustration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Dissatisfied customers are less likely to continue using the product, potentially harming the business’s growth and profitability.&lt;/p&gt;




&lt;p&gt;Addressing technical debt early and systematically is essential to mitigating these impacts. By reducing debt, teams can improve productivity, lower maintenance costs, enhance product quality, and create a healthier work environment—all of which contribute to the long-term success of the project.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2lgxmdur7h21dql6v5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2lgxmdur7h21dql6v5d.png" alt="Image description" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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

</description>
      <category>devchallenge</category>
      <category>developer</category>
      <category>development</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
