<?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: Stanley Chinedu Ogada</title>
    <description>The latest articles on DEV Community by Stanley Chinedu Ogada (@stanleyogada).</description>
    <link>https://dev.to/stanleyogada</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%2F1260736%2F2112c24a-d4df-4d55-b8f8-8d9b1058f6ac.jpg</url>
      <title>DEV Community: Stanley Chinedu Ogada</title>
      <link>https://dev.to/stanleyogada</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stanleyogada"/>
    <language>en</language>
    <item>
      <title>A Junior DevOps Engr should be an ex-IT Operations Engineer or SysAdmin</title>
      <dc:creator>Stanley Chinedu Ogada</dc:creator>
      <pubDate>Sun, 31 Mar 2024 22:42:55 +0000</pubDate>
      <link>https://dev.to/stanleyogada/a-junior-devops-engr-should-be-an-ex-it-operations-engineer-or-sysadmin-324g</link>
      <guid>https://dev.to/stanleyogada/a-junior-devops-engr-should-be-an-ex-it-operations-engineer-or-sysadmin-324g</guid>
      <description>&lt;p&gt;&lt;strong&gt;My Note About DevOps&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Preface
&lt;/h2&gt;

&lt;p&gt;Suppose Bob👑, as a &lt;em&gt;&lt;strong&gt;Junior DevOps Engineer&lt;/strong&gt;&lt;/em&gt;, has a background as an Ex operations engineer or/and SysAdmin. In that case, he embodies a stronger DevOps Engineer profile compared to Smith😖, who holds the title of &lt;em&gt;Senior DevOps Engineer&lt;/em&gt; but is solely an Ex Only-DevOps-Tools-User.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Key Argument: Prioritize the implementation of DevOps methodology before integrating tools (Not DevOps 👎🏽), both methodologically and technically. Learning about tools should follow a thorough understanding of systems and infrastructure&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In DevOps, tools should be regarded as the final consideration. They should not take precedence in the learning journey nor be the primary focus during DevOps implementation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡(this is Bob👑 BTW) Learn Linux System Administration (because Cloud is Linux. lol) first before learning all 1K+ tools, &lt;em&gt;Tools only help you bring the System to the Developer&lt;/em&gt; 🙃&lt;/p&gt;

&lt;p&gt;Hope my &lt;em&gt;Preface&lt;/em&gt; section is messy enough?!!&lt;/p&gt;

&lt;p&gt;Don't be like "Senior" Smith😖 yet struggling with his all tools 👎🏽&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In recent years, the term "DevOps Engineer" has become increasingly popular in the tech industry. However, there's often confusion surrounding the exact responsibilities and skill set required for this role. Some argue that a DevOps Engineer is essentially a Cloud + Automation Engineer, while others believe there's more to it. In this blog post, we'll delve into the nuances of the DevOps Engineer role and explore why it encompasses more than just cloud computing and automation.&lt;/p&gt;

&lt;p&gt;Table of Contents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understanding DevOps Engineering&lt;/li&gt;
&lt;li&gt;The Role of Cloud Computing in DevOps&lt;/li&gt;
&lt;li&gt;Exploring System Administration Skills&lt;/li&gt;
&lt;li&gt;The Intersection of Software Engineering and DevOps&lt;/li&gt;
&lt;li&gt;Debunking the Myth: DevOps Engineer vs. Cloud + Automation Engineer&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Understanding DevOps Engineering
&lt;/h2&gt;

&lt;p&gt;DevOps is a cultural and organizational approach that emphasizes collaboration, communication, and integration between software development (Dev) and IT operations (Ops) teams. DevOps engineering involves implementing practices, processes, and tools to streamline and automate the software development lifecycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Role of Cloud Computing in DevOps
&lt;/h2&gt;

&lt;p&gt;Cloud computing plays a crucial role in DevOps by providing a scalable and flexible infrastructure for deploying and managing applications. DevOps engineers leverage cloud services and platforms to build and maintain infrastructure as code, enabling rapid provisioning, scalability, and automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploring System Administration Skills
&lt;/h2&gt;

&lt;p&gt;SysAdmin skills are essential for DevOps engineers, as they involve managing and maintaining the infrastructure and tooling that support software development and deployment. This includes tasks such as server configuration, networking, security, automation, and monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Intersection of Software Engineering and DevOps
&lt;/h2&gt;

&lt;p&gt;While DevOps engineers may not primarily focus on writing application code, they often have some knowledge of software development principles and practices. They collaborate with developers to define infrastructure requirements, troubleshoot deployment issues, and optimize application performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debunking the Myth: DevOps Engineer vs. Cloud + Automation Engineer
&lt;/h2&gt;

&lt;p&gt;While it's true that DevOps engineers require skills in cloud computing and automation, their role extends beyond that. DevOps engineering involves a combination of cloud computing, system administration, software engineering, collaboration, and automation to enable efficient software delivery. However, it is my firm belief that a DevOps Engineer should have a very strong background and skills in IT Ops/Cloud Computing and SysAdmin. Essentially, combining expertise from both former IT Ops and SysAdmin roles creates an even stronger DevOps Engineer at the bare minimum.&lt;/p&gt;

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

&lt;p&gt;The role of a DevOps Engineer is multifaceted, encompassing skills in cloud computing, system administration, software engineering, collaboration, and automation (Essentially Jack of all trades). While cloud computing and automation are important aspects of DevOps, they are just one part of the broader skill set required for success in this role. Understanding the full scope of DevOps engineering, including strong backgrounds in IT Ops and SysAdmin, is essential for organizations looking to adopt DevOps practices effectively.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Lite Neovim Distro: A Blazing Fast, Lightweight Neovim Setup</title>
      <dc:creator>Stanley Chinedu Ogada</dc:creator>
      <pubDate>Sat, 24 Feb 2024 00:44:13 +0000</pubDate>
      <link>https://dev.to/stanleyogada/lite-neovim-distro-a-blazing-fast-lightweight-neovim-setup-7fm</link>
      <guid>https://dev.to/stanleyogada/lite-neovim-distro-a-blazing-fast-lightweight-neovim-setup-7fm</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Motivation&lt;/li&gt;
&lt;li&gt;Features&lt;/li&gt;
&lt;li&gt;Usage&lt;/li&gt;
&lt;li&gt;Conclusions&lt;/li&gt;
&lt;li&gt;Social Links&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Welcome to Lite Neovim Distro, a project tailored for those eager to dive into Neovim without any prior configuration knowledge, including my future self! 😄 This minimalist Neovim distribution offers a lightning-fast and lightweight setup right out of the gate.&lt;/p&gt;

&lt;p&gt;What sets this project apart is its comprehensive guide. Whether you're interested in configuring Neovim yourself or simply want to jump right in, our guide covers all the prerequisites and installation steps to get you up and running with my customized Neovim configuration. &lt;a href="https://github.com/stanleyogada/lite-neovim-distro.git"&gt;Don't hesitate to explore it!&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;As a Vim aficionado, I've always admired its efficiency. While it's perfect for basic tasks, I often resorted to VSCode for more complex projects. Seeking to streamline my workflow, I experimented with various setups, ultimately embracing Neovim with Lua scripting for its speed and flexibility.&lt;/p&gt;

&lt;p&gt;Existing distributions like NVChad were bogged down with plugins, slowing performance. Hence, I crafted a custom configuration focused solely on essential plugins. With Packer and Lua, I optimized my setup for efficiency and speed.&lt;/p&gt;

&lt;p&gt;Managing this setup across different systems posed challenges. To simplify, I meticulously documented prerequisites and streamlined installation to a single step. Now, setting up my Neovim environment is quick and consistent across systems.&lt;/p&gt;

&lt;p&gt;Picture yourself on a server needing quick edits. With Lite Neovim Distro, you can swiftly establish a lightweight Neovim environment, boosting efficiency and productivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Key Notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;leader&amp;gt;&lt;/code&gt; is the space key.&lt;/li&gt;
&lt;li&gt;This distro comes with only the &lt;a href="https://github.com/mxsdev/nvim-dap-vscode-js"&gt;NodeJs Debugger&lt;/a&gt;. I'm not a Debugger guy :)&lt;/li&gt;
&lt;li&gt;I have configured only for the following; &lt;a href="https://github.com/stanleyogada/lite-neovim-distro/blob/latest/lua/core/plugin_config/nvim-dap.lua"&gt;Find Tweak the config from the Adapter's section&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Javascript/Typescript: &lt;code&gt;Tested&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Testing with Jest (Assumes you have Jest installed on your local project): &lt;code&gt;Tested&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;React Vite: &lt;code&gt;Tested&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;React NextJs: &lt;code&gt;Not-Tested&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;So if you need a debugger for any other programming language you will need to &lt;a href="https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation"&gt;configure it yourself&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;PACKER&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;An easy-to-use plugin manager. (&lt;a href="https://github.com/wbthomason/packer.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;TELESCOPE&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Fuzzy finding (&lt;code&gt;&amp;lt;leader&amp;gt;ff&lt;/code&gt;), live grep (&lt;code&gt;&amp;lt;leader&amp;gt;fg&lt;/code&gt;), etc. (&lt;a href="https://github.com/nvim-telescope/telescope.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;GITHUB-THEME&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A beautiful GitHub theme pack (&lt;code&gt;:colorscheme github_dark&lt;/code&gt;). (&lt;a href="https://github.com/projekt0n/github-nvim-theme"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;NVIM-TREE&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A modern File tree (&lt;code&gt;&amp;lt;leader&amp;gt;n&lt;/code&gt;), etc. (&lt;a href="https://github.com/nvim-tree/nvim-tree.lua"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;WEB-DEVICONS&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Displays icons. (&lt;a href="https://github.com/nvim-tree/nvim-web-devicons"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;LUALINE&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A beautiful status line. (&lt;a href="https://github.com/nvim-lualine/lualine.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;TREESITTER&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Syntax highlighting, etc. (&lt;a href="https://github.com/nvim-treesitter/nvim-treesitter"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;GITSIGNS&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Signs for added, removed, and changed lines, etc. (&lt;a href="https://github.com/lewis6991/gitsigns.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;BARBAR&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A beautiful tabs manager (&lt;code&gt;&amp;lt;leader&amp;gt;bq&lt;/code&gt; -&amp;gt; quit the current tab). (&lt;a href="https://github.com/romgrk/barbar.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;MININTRO&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A beautiful "NEOVIM" intro when you type just &lt;code&gt;nvim&lt;/code&gt; from the OS's terminal. (&lt;a href="https://github.com/eoh-bse/minintro.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;TELESCOPE-UNDO&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A telescope extension for undo history (&lt;code&gt;&amp;lt;leader&amp;gt;fu&lt;/code&gt;). (&lt;a href="https://github.com/debugloop/telescope-undo.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;OIL&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A beautiful and fast file explorer (&lt;code&gt;-&lt;/code&gt; -&amp;gt; Opens current/previous directory). (&lt;a href="https://github.com/stevearc/oil.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;NVTERM&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A beautiful terminal emulator (&lt;code&gt;&amp;lt;leader&amp;gt;tv&lt;/code&gt; -&amp;gt; Toggle vertical terminal). (&lt;a href="https://github.com/NvChad/nvterm"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;GITHUB-COPILOT&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;AI-powered code completion (&lt;code&gt;&amp;lt;TAB&amp;gt;&lt;/code&gt; -&amp;gt; autocomplete the suggestion). (&lt;a href="https://github.com/github/copilot.vim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;WHICH-KEY&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A keybindings helper. (&lt;a href="https://github.com/folke/which-key.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;ZEN-MODE&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A distraction-free writing (focus) mode. (&lt;a href="https://github.com/folke/zen-mode.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;TELESCOPE-TODO-COMMENTS&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A telescope extension to manage all todo comments (&lt;code&gt;&amp;lt;leader&amp;gt;fc&lt;/code&gt; -&amp;gt; list all todo comments). (&lt;a href="https://github.com/folke/todo-comments.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;AUTO-SESSION&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Let Neovim remember your opened files (&lt;code&gt;&amp;lt;leader&amp;gt;fs&lt;/code&gt; -&amp;gt; switch to previously saved sessions). (&lt;a href="https://github.com/rmagatti/auto-session"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;COMMENT&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Toggle comments with ease (&lt;code&gt;gcc&lt;/code&gt;). (&lt;a href="https://github.com/numToStr/Comment.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;SURROUND&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Surround text with ease (&lt;code&gt;ysiw}&lt;/code&gt; -&amp;gt; surrounds word with {}). (&lt;a href="https://github.com/kylechui/nvim-surround"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;VISUAL-MULTI&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Work with Multiple cursors (&lt;code&gt;&amp;lt;C-n&amp;gt;&lt;/code&gt;). (&lt;a href="https://github.com/mg979/vim-visual-multi"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;COC&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A marketplace (&lt;code&gt;:CocInstall marketplace&lt;/code&gt;) packed with extensions (&lt;code&gt;&amp;lt;leader&amp;gt;m&lt;/code&gt;), like LSPs (&lt;code&gt;:CocInstall coc-tsserver&lt;/code&gt;), linters (&lt;code&gt;:CocInstall coc-eslint&lt;/code&gt;), etc. (&lt;a href="https://github.com/neoclide/coc.nvim"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;DAP&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A debugger for Neovim (&lt;code&gt;&amp;lt;leader&amp;gt;dc&lt;/code&gt; -&amp;gt; continue, &lt;code&gt;&amp;lt;leader&amp;gt;db&lt;/code&gt; -&amp;gt; toggle breakpoint). (&lt;a href="https://github.com/mfussenegger/nvim-dap"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;NVIM-DAP-VSCODE-JS&lt;/em&gt;&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;A NodeJS Debug Adapter. (&lt;a href="https://github.com/mxsdev/nvim-dap-vscode-js"&gt;&lt;strong&gt;&lt;em&gt;Optional&lt;/em&gt;&lt;/strong&gt; Read more about this plugin&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;To use Lite Neovim Distro, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backup&lt;/strong&gt; or &lt;strong&gt;Remove&lt;/strong&gt; your existing Neovim config (&lt;code&gt;~/.config/nvim&lt;/code&gt;). If you don't have any existing Neovim configuration, you can skip this step.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install the config&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git clone https://github.com/stanleyogada/lite-neovim-distro.git ~/.config/nvim &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; nvim
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you get an error, just Hit the ENTER KEY on your keyboard twice and Packer will fix the errors and set everything up for you. &lt;br&gt;
&lt;em&gt;If you're still getting any errors, you might be missing 1 or more requirements on your system, definitely &lt;a href="https://github.com/stanleyogada/lite-neovim-distro/blob/main/README.md"&gt;check out the docs for more info&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;You're all set&lt;/strong&gt; 🚀&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; nvim
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;Lite Neovim Distro provides a streamlined Neovim setup, prioritizing speed and efficiency. With its minimalist approach and essential plugins, you can enjoy a powerful editing experience without the bloat. Give it a try and elevate your text editing workflow!&lt;/p&gt;

&lt;h2&gt;
  
  
  Social Links
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/stanleyogada"&gt;GitHub Profile&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/stanley-ogada"&gt;LinkedIn Profile&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/stanleyogada/lite-neovim-distro.git"&gt;Project Repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>vim</category>
      <category>linux</category>
      <category>bash</category>
    </item>
    <item>
      <title>Documenting Your Tech Journey: The Key to Success</title>
      <dc:creator>Stanley Chinedu Ogada</dc:creator>
      <pubDate>Thu, 08 Feb 2024 15:08:40 +0000</pubDate>
      <link>https://dev.to/stanleyogada/documenting-your-tech-journey-the-key-to-success-5hkg</link>
      <guid>https://dev.to/stanleyogada/documenting-your-tech-journey-the-key-to-success-5hkg</guid>
      <description>&lt;p&gt;&lt;strong&gt;Table of Contents:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Why Documentation Matters&lt;/li&gt;
&lt;li&gt;What Do We Mean by Documenting Your Work?&lt;/li&gt;
&lt;li&gt;The Power of Sharing&lt;/li&gt;
&lt;li&gt;Embracing Every Opportunity&lt;/li&gt;
&lt;li&gt;The Role of AI with Prompt Engineering&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;In the fast-paced world of technology, success isn't just about the code you write or the systems you build—it's also about the story you tell. Each line of code, every project you undertake, is a chapter in your tech journey. But how do you ensure your story stands out in a sea of aspiring developers and engineers? The answer lies in one word: documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Documentation Matters:
&lt;/h2&gt;

&lt;p&gt;Documentation isn't just a mundane task—it's your strongest alibi, your evidence that you've journeyed through the vast landscape of technology and gained valuable insights along the way. It's about more than just showcasing your skills; it's about demonstrating your thought process, problem-solving abilities, and commitment to continuous improvement.&lt;/p&gt;

&lt;p&gt;Documenting how you solved a problem or why that problem could potentially save your future self assuming you encounter it again (More of like a quick reference 🙂).&lt;/p&gt;

&lt;h2&gt;
  
  
  What Do I Mean by Documenting Your Work?
&lt;/h2&gt;

&lt;p&gt;Documenting your work means sharing your learnings, triumphs, and challenges. It's about capturing the essence of your experiences and sharing them with the world. Whether it's through writing a blog post, creating engaging content for YouTube or TikTok, or contributing to open-source projects on GitHub, documenting your journey is key.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of Sharing:
&lt;/h2&gt;

&lt;p&gt;When you document your work, you're not just creating a portfolio—you're building a community. By sharing your experiences, insights, and discoveries, you're contributing to the collective knowledge of the tech community. You never know who might benefit from your insights or find inspiration in your projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embracing Every Opportunity:
&lt;/h2&gt;

&lt;p&gt;Remember, it's not just about the result; it's about the journey. Embrace every opportunity to learn, grow, and share your knowledge with others. Each project, no matter how small, is an opportunity to showcase your skills and make a difference in the tech world.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Role of AI with Prompt Engineering:
&lt;/h2&gt;

&lt;p&gt;In the modern digital landscape, leveraging artificial intelligence (AI) can significantly enhance your documentation efforts. Embrace the opportunities afforded by AI technology to streamline your workflow and ensure accuracy in your work. Remember to tap into the expertise of peers, colleagues, mentors, and AI systems to cross-check your writing and validate its content (A useful one could be Grammarly). Cultivating proficiency in AI prompt engineering is becoming essential in today's professional sphere, so take advantage of the resources and training available to hone this skill. By integrating AI into your documentation process, you can optimize efficiency and maintain high-quality standards.&lt;/p&gt;




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

&lt;p&gt;In conclusion, documenting your tech journey is more than just a task—it's a mindset. It's about embracing the process, celebrating your successes, and learning from your failures. So, don't hold back—document your work, share your story, and let your passion for technology shine through. With determination, resilience, and a touch of creativity, the possibilities are endless.&lt;/p&gt;

&lt;p&gt;Wishing you all the luck in your tech endeavors! Keep pushing boundaries, breaking barriers, and reaching for the stars. Your journey is just beginning.&lt;/p&gt;




&lt;p&gt;Also, connect with me on &lt;a href="https://www.linkedin.com/in/stanley-ogada/"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy hacking!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>documentation</category>
      <category>learning</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Bridging 2 VEth Devices within Namespaces</title>
      <dc:creator>Stanley Chinedu Ogada</dc:creator>
      <pubDate>Thu, 08 Feb 2024 13:20:04 +0000</pubDate>
      <link>https://dev.to/stanleyogada/demystifying-linux-network-bridging-and-network-namespaces-19ap</link>
      <guid>https://dev.to/stanleyogada/demystifying-linux-network-bridging-and-network-namespaces-19ap</guid>
      <description>&lt;p&gt;Table of Contents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Understanding Network Bridging&lt;/li&gt;
&lt;li&gt;Understanding Network Namespaces&lt;/li&gt;
&lt;li&gt;Connecting Network Namespaces with a Bridge&lt;/li&gt;
&lt;li&gt;PRACTICAL GUIDE&lt;/li&gt;
&lt;li&gt;Real-world scenarios for creating multiple namespaces&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;In the world of Linux networking, understanding concepts like network bridging and network namespaces can open up a realm of possibilities for network configuration, isolation, and testing. In this blog post, we'll delve into these concepts, exploring their use cases and providing a step-by-step guide to implementing them on your Linux system.&lt;/p&gt;




&lt;h3&gt;
  
  
  Understanding Network Bridging:
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;br&gt;
Network bridging is a technique used to connect multiple network interfaces, allowing them to communicate with each other as if they were part of the same network segment. This is achieved by creating a virtual bridge interface that acts as a hub for the connected interfaces.&lt;/p&gt;
&lt;h3&gt;
  
  
  Understanding Network Namespaces:
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;br&gt;
Network namespaces provide a way to create isolated network environments within a Linux system. Each namespace has its network stack, including interfaces, routing tables, and firewall rules, allowing for separate network configurations.&lt;/p&gt;
&lt;h3&gt;
  
  
  Connecting Network Namespaces with a Bridge:
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;br&gt;
While network namespaces provide isolation, there may be scenarios where communication between namespaces is desired. This can be achieved by connecting the namespaces using a bridge, allowing for controlled communication between them.&lt;/p&gt;


&lt;h2&gt;
  
  
  Practical Guide:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Create a bridge:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link &lt;/span&gt;add br0 &lt;span class="nb"&gt;type &lt;/span&gt;bridge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create the veth network interfaces and their peers:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link &lt;/span&gt;add vth1 &lt;span class="nb"&gt;type &lt;/span&gt;veth peer vth_1
ip &lt;span class="nb"&gt;link &lt;/span&gt;add vth2 &lt;span class="nb"&gt;type &lt;/span&gt;veth peer vth_2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands create two pairs of virtual Ethernet (veth) interfaces (&lt;code&gt;vth1&lt;/code&gt; and &lt;code&gt;vth2&lt;/code&gt;) along with their peers (&lt;code&gt;vth_1&lt;/code&gt; and &lt;code&gt;vth_2&lt;/code&gt;). Each veth pair acts as a virtual cable, where data sent through one end of the pair emerges at the other end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create 2 network namespaces:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns add ns1
ip netns add ns2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Move the veth peers to each namespace:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev vth_1 netns ns1
ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev vth_2 netns ns2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands move the veth peer interfaces (&lt;code&gt;vth_1&lt;/code&gt; and &lt;code&gt;vth_2&lt;/code&gt;) into their respective network namespaces (&lt;code&gt;ns1&lt;/code&gt; and &lt;code&gt;ns2&lt;/code&gt;), effectively associating them with the namespaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assign an IP address to the veth network interface in each network namespace:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns1 ip address add 192.168.10.1/24 dev vth_1
ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns1 ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev vth_1 up

ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns2 ip address add 192.168.10.2/24 dev vth_2
ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns2 ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev vth_2 up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands assign IP addresses to the veth interfaces (&lt;code&gt;vth_1&lt;/code&gt; and &lt;code&gt;vth_2&lt;/code&gt;) inside their respective namespaces (&lt;code&gt;ns1&lt;/code&gt; and &lt;code&gt;ns2&lt;/code&gt;). Additionally, they bring up the interfaces (&lt;code&gt;vth_1&lt;/code&gt; and &lt;code&gt;vth_2&lt;/code&gt;) within their namespaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add the veth network interfaces to the bridge:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev vth1 master br0
ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev vth2 master br0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands add the veth interfaces (&lt;code&gt;vth1&lt;/code&gt; and &lt;code&gt;vth2&lt;/code&gt;) to the bridge (&lt;code&gt;br0&lt;/code&gt;). By adding the interfaces to the bridge, traffic can flow between the namespaces through the bridge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bring up the bridge and the veth network interfaces:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev br0 up
ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev vth1 up
ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev vth2 up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands bring up the bridge (&lt;code&gt;br0&lt;/code&gt;) and the veth interfaces (&lt;code&gt;vth1&lt;/code&gt; and &lt;code&gt;vth2&lt;/code&gt;), enabling network connectivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test connectivity between namespaces using ping:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.10.1&lt;span class="p"&gt;;&lt;/span&gt;
ping 192.168.10.2&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands attempt to ping the IP address &lt;code&gt;192.168.10.1&lt;/code&gt; and &lt;code&gt;192.168.10.2&lt;/code&gt;. Since the bridge is not directly connected to the physical network, the ping fails.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns1 ping 192.168.10.2 &lt;span class="nt"&gt;-c2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command uses the &lt;code&gt;ip netns exec&lt;/code&gt; command to execute the ping from within the &lt;code&gt;ns1&lt;/code&gt; namespace. As a result, the ping is successful with 0% packet loss.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns2 ping 192.168.10.1 &lt;span class="nt"&gt;-c2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similarly, this command executes the ping from within the &lt;code&gt;ns2&lt;/code&gt; namespace, resulting in a successful ping with 0% packet loss.&lt;/p&gt;

&lt;p&gt;However, &lt;code&gt;ns1&lt;/code&gt; can only ping &lt;code&gt;ns2&lt;/code&gt; (with its IP address of course) but can't ping itself (&lt;code&gt;ns1&lt;/code&gt; can't ping &lt;code&gt;ns1&lt;/code&gt;), and the same situation for the &lt;code&gt;ns2&lt;/code&gt; namespace as well. Well, the reason is the &lt;code&gt;lo&lt;/code&gt; devices in a newly created namespace are down by default.&lt;/p&gt;

&lt;p&gt;In other words (Optionally), If you wish for the &lt;code&gt;ns1&lt;/code&gt; and &lt;code&gt;ns1&lt;/code&gt; to ping itself, then bring up the &lt;code&gt;lo&lt;/code&gt; devices&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns1 ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev lo up
ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns2 ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev lo up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;ns1&lt;/code&gt; can now ping both &lt;code&gt;ns2&lt;/code&gt; (192.168.10.2) and itself (192.168.10.1) and the same is true for the &lt;code&gt;ns2&lt;/code&gt; namespace.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns1 ping 192.168.10.1 &lt;span class="nt"&gt;-c2&lt;/span&gt;
ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;ns1 ping 192.168.10.2 &lt;span class="nt"&gt;-c2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-world scenarios for creating multiple namespaces:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Service or application isolation:&lt;/strong&gt; &lt;br&gt;
In a cloud environment, different services or applications may require isolated network environments for testing or development. By creating multiple namespaces on a single machine and connecting them using a bridge, developers can simulate isolated network environments for each service or application without the need for additional physical hardware.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security testing:&lt;/strong&gt; &lt;br&gt;
Security researchers or penetration testers often require isolated environments to conduct security testing or analysis. By creating multiple namespaces on a single machine and connecting them using a bridge, they can simulate complex network topologies and test various security scenarios without impacting production systems. This setup allows for controlled experimentation and analysis of network-based vulnerabilities and attack vectors.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;NOTE:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's essential to note that the use of a bridge in this scenario doesn't completely negate the isolation provided by the namespaces. The namespaces still maintain separate network configurations, IP addresses, and routing tables, ensuring that network traffic remains isolated within each namespace by default.&lt;/p&gt;

&lt;p&gt;The point of connecting the namespaces with a bridge is to enable controlled communication between them when necessary, such as for testing network communication between different services or applications running in separate namespaces. It allows for flexibility in network configuration while still providing isolation where needed.&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;br&gt;
Network bridging and network namespaces are powerful tools in the Linux networking toolbox, offering flexibility, isolation, and control over network configurations. By understanding these concepts and how to implement them, you can tailor your Linux network environment to suit your specific needs, whether it's for testing, development, or production use. With the step-by-step guide provided in this blog post, you can start exploring the possibilities of Linux networking bridging and namespaces in your projects.&lt;/p&gt;




&lt;p&gt;Also, connect with me on &lt;a href="https://www.linkedin.com/in/stanley-ogada/"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy hacking!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>beginners</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Automated Backups Made Easy: &amp; Lessons Learned From This Project</title>
      <dc:creator>Stanley Chinedu Ogada</dc:creator>
      <pubDate>Thu, 01 Feb 2024 13:09:16 +0000</pubDate>
      <link>https://dev.to/stanleyogada/automated-backups-made-easy-lessons-learned-from-this-project-44h4</link>
      <guid>https://dev.to/stanleyogada/automated-backups-made-easy-lessons-learned-from-this-project-44h4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Table of Contents:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Project Overview&lt;/li&gt;
&lt;li&gt;
Discoveries and Resolutions

&lt;ul&gt;
&lt;li&gt;Use Full Paths in Crontabs&lt;/li&gt;
&lt;li&gt;Specify Full Paths for Rsync and SSH Key&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;In the ever-evolving world of technology, ensuring the safety of our data is paramount. Recently, I completed a project that automates backup tasks, aiming to simplify the process and enhance data security. While the project proved successful, I encountered a stumbling block that led me on a troubleshooting journey. In this blog post, I'll share the project overview and the valuable lessons learned from resolving a crucial issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview:
&lt;/h2&gt;

&lt;p&gt;The project (GitHub link: &lt;a href="https://github.com/stanleyogada/auto-backup-project"&gt;Auto-Backup Project&lt;/a&gt;) automates the addition of backup tasks to the crontab for daily, weekly, and monthly backups. All compressions (.tar.gz) are stored in a designated backup directory, and SSH key authentication is required for remote hosts. The script intelligently manages backup files, retaining only the most recent ones to optimize storage usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discoveries and Resolutions:
&lt;/h2&gt;

&lt;p&gt;While developing the project, a significant challenge surfaced when incorporating the rsync command into the script for scheduled execution via crontab. Here are the two major discoveries that solved the issue:&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Full Paths in Crontabs:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Crontab entries should include the full path to scripts. Correct example:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt; * * * * * &lt;span class="sr"&gt;/usr/&lt;/span&gt;local&lt;span class="sr"&gt;/bin/&lt;/span&gt;&lt;span class="nb"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;sh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Specify Full Paths for Rsync and SSH Key
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In the script, provide the full path to the rsync program and explicitly specify the SSH key for the remote system.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; /usr/bin/rsync &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"ssh -i /home/user/.ssh/vps-1-private-key"&lt;/span&gt; /home/user/backups user@vps-1.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To troubleshoot, add verbose logging with the &lt;code&gt;-vv&lt;/code&gt; option to the rsync in the script and redirect the crontab output to a file for monitoring.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt; * * * * * &lt;span class="sr"&gt;/usr/&lt;/span&gt;local&lt;span class="sr"&gt;/bin/&lt;/span&gt;&lt;span class="nb"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;sh&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="sr"&gt;/home/&lt;/span&gt;user/&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;cron&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt; 

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

&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Developing the Auto-Backup Project was a rewarding experience, and overcoming the challenge highlighted the importance of attention to detail. By sharing these discoveries, I hope to assist fellow developers facing similar issues. Remember, the devil is in the details, and providing full paths can make all the difference in the world of scheduled tasks. Explore the &lt;a href="https://github.com/stanleyogada/auto-backup-project"&gt;GitHub repository&lt;/a&gt; for more details and project documentation.&lt;/p&gt;

&lt;p&gt;Check out a related problem posted on &lt;a href="https://stackoverflow.com/a/77915389/14889311"&gt;StackOverFlow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, connect with me on &lt;a href="https://www.linkedin.com/in/stanley-ogada/"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy hacking!&lt;/p&gt;

</description>
      <category>bash</category>
      <category>ssh</category>
      <category>cronjobs</category>
      <category>automation</category>
    </item>
    <item>
      <title>Get a practice Ansible Lab in 1 step -- Powered by Docker</title>
      <dc:creator>Stanley Chinedu Ogada</dc:creator>
      <pubDate>Fri, 19 Jan 2024 09:47:27 +0000</pubDate>
      <link>https://dev.to/stanleyogada/simplifying-ansible-lab-setup-with-docker-888</link>
      <guid>https://dev.to/stanleyogada/simplifying-ansible-lab-setup-with-docker-888</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Why This Project?&lt;/li&gt;
&lt;li&gt;Project Goals&lt;/li&gt;
&lt;li&gt;
Documentation

&lt;ul&gt;
&lt;li&gt;Docker Ansible Lab Configuration&lt;/li&gt;
&lt;li&gt;Prerequisites&lt;/li&gt;
&lt;li&gt;
Usage Instructions

&lt;ul&gt;
&lt;li&gt;Control-Host Usage&lt;/li&gt;
&lt;li&gt;Server Usage (Example for Server-1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Conclusion and Useful Links&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why This Project?
&lt;/h2&gt;

&lt;p&gt;The motivation behind this Docker Ansible Lab project is to eliminate the headaches associated with creating a lab environment for Ansible practice. The traditional setup demands a robust machine capable of running at least three VMs, with various configurations such as network establishment and SSH communication. This project aims to simplify the process by allowing users to set up a scalable lab environment within Docker, with minimal configuration requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Goals
&lt;/h2&gt;

&lt;p&gt;The primary goal of the Docker Ansible Lab project is to enable users to effortlessly set up a lab environment within a Docker container. Unlike traditional setups, this project offers scalability, allowing users to create more than three machines with ease. The emphasis here is on minimizing the setup steps and allowing users to dive straight into Ansible without worrying about the intricacies of lab configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Docker Ansible Lab Configuration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This configuration will create a total of five nodes, including three Ubuntu and two Oracle Linux machines. Refer to the &lt;code&gt;docker-compose.yaml&lt;/code&gt; file for details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node Credentials:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Username: &lt;strong&gt;&lt;em&gt;zero&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Password: &lt;strong&gt;&lt;em&gt;][poiuy&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;Before getting started, ensure the following prerequisites are met:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker installed on your machine&lt;/li&gt;
&lt;li&gt;Docker Compose installed&lt;/li&gt;
&lt;li&gt;Docker daemon started&lt;/li&gt;
&lt;li&gt;For Ubuntu, consider adding your user to the &lt;code&gt;docker&lt;/code&gt; group&lt;/li&gt;
&lt;li&gt;Optionally, install the provided version (refer to the screenshot below) of higher&lt;/li&gt;
&lt;/ul&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%2Fgithub.com%2Fstanleyogada%2Fdocker-ansible-env-setup%2Fassets%2F102979724%2F4bb5d9b6-4818-4a9a-ae61-4366663deedd" 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%2Fgithub.com%2Fstanleyogada%2Fdocker-ansible-env-setup%2Fassets%2F102979724%2F4bb5d9b6-4818-4a9a-ae61-4366663deedd" alt="Docker Ansible Setup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage Instructions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repository and navigate to it.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;docker-compose up -d&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;View the logs using &lt;code&gt;docker-compose logs -f&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Wait for approximately 1-5 minutes until you see a message indicating "SUCCESS! ... Happy hacking!"&lt;/li&gt;
&lt;li&gt;Your Ansible lab is now ready!&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Control-Host Usage
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open a new terminal for each control host.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;docker container exec -it control-host bash&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Stay as the root user.&lt;/li&gt;
&lt;li&gt;In the container, navigate to &lt;code&gt;cd ~/ansible-project&lt;/code&gt; as this is your base Ansible directory.&lt;/li&gt;
&lt;li&gt;Your lab is ready! You can now control and configure all servers. Test server connections with &lt;code&gt;ansible all -m ping&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Server Usage (Example for Server-1)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open a new terminal for each server.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;docker container exec -it server-1 bash&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Switch to the &lt;code&gt;zero&lt;/code&gt; user by running &lt;code&gt;su - zero&lt;/code&gt; and use the password &lt;code&gt;\][poiuy&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion and Useful Links
&lt;/h2&gt;

&lt;p&gt;Simplify your Ansible learning journey with this Docker Ansible Lab setup, and enjoy a seamless and scalable environment for honing your skills. For further engagement, you can connect with me on &lt;a href="https://www.linkedin.com/in/stanley-ogada/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. Additionally, explore the project on &lt;a href="https://github.com/stanleyogada/docker-ansible-env-setup" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; for more details and updates (Please star this project 🙏 ). Happy hacking!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>docker</category>
      <category>ansible</category>
      <category>bash</category>
    </item>
  </channel>
</rss>
