<?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>Forem: Shuvro_baset</title>
    <description>The latest articles on Forem by Shuvro_baset (@shuvrobaset).</description>
    <link>https://forem.com/shuvrobaset</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%2F668343%2Fdd1cec21-9b92-4fb0-8824-e0c5b881a23c.jpeg</url>
      <title>Forem: Shuvro_baset</title>
      <link>https://forem.com/shuvrobaset</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shuvrobaset"/>
    <language>en</language>
    <item>
      <title>Docker Engine ও Container Runtime: ভেতরকার রহস্য ও কার্যপদ্ধতি</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Thu, 22 Jan 2026 14:28:22 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/docker-engine-o-container-runtime-bhetrkaar-rhsy-o-kaarypddhti-1hdf</link>
      <guid>https://forem.com/shuvrobaset/docker-engine-o-container-runtime-bhetrkaar-rhsy-o-kaarypddhti-1hdf</guid>
      <description>&lt;p&gt;&lt;strong&gt;Docker- Part-3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;আমরা যারা কন্টেইনারাইজেশন নিয়ে কাজ করি, তারা প্রতিদিন docker run কমান্ডটি ব্যবহার করছি। কিন্তু এই একটি কমান্ড দেওয়ার পর পর্দার আড়ালে ঠিক কী কী ঘটে? কিভাবে Docker Daemon আমাদের রিকোয়েস্টটি প্রসেস করে এবং Linux Kernel-এর সাথে কথা বলে একটি আইসোলেটেড এনভায়রনমেন্ট তৈরি করে?&lt;/p&gt;

&lt;p&gt;আজকের আর্টিকেলে আমি Docker Engine-এর আর্কিটেকচার এবং এর অভ্যন্তরীণ বিভিন্ন কম্পোনেন্ট যেমন— dockerd, containerd, runc, Namespaces এবং Cgroups নিয়ে সহজ ভাষায় আলোচনা করেছি।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Engine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Docker Engine হলো Docker-এর মূল অংশ। এটি একটি client-server application যা দিয়ে আমরা container create, stop, delete, start, clean ইত্যাদি করি। এর প্রধান তিনটি অংশ রয়েছে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker CLI&lt;/li&gt;
&lt;li&gt;Docker Daemon (dockerd)&lt;/li&gt;
&lt;li&gt;Container Runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker CLI (Docker Client)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটি হলো interface যেখানে আমরা docker-এর বিভিন্ন কমান্ড লিখি। যেমন: docker run, docker build ইত্যাদি। সোজা কথা user input নেয়ার interface বা user এর সাথে interact করার মাধ্যমে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Daemon (dockerd)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;এটি হচ্ছে docker-এর মস্তিষ্ক। সব কাজের আসল দায়িত্ব পালন করে এটি।&lt;/li&gt;
&lt;li&gt;ক্লায়েন্টের কাছ থেকে রিকোয়েস্ট গ্রহণ করে ইমেজ, কন্টেইনার ও নেটওয়ার্ক ম্যানেজ করে।&lt;/li&gt;
&lt;li&gt;এটি একটি ব্যাকগ্রাউন্ড প্রসেস। এটি সবসময় listen করে যে কোনো নতুন কমান্ড আসছে কি না। এটি অনেকটা 'বিগ ব্রাদার' বা প্যারেন্ট প্রসেসের মতো যা পুরো সিস্টেমের দেখাশুনা করে।&lt;/li&gt;
&lt;li&gt;Docker Daemon সবসময় অন থাকে। PC start করার সাথে সাথে এটি start হয়ে যায়। Request-এর জন্য wait করে।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Container Runtime&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Container Runtime হলো docker-এর সেই উপাদান যা actual container চালায়। এই Runtime আবার দুই ধরণের:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;containerd (High level Runtime)&lt;/li&gt;
&lt;li&gt;runc (low level Runtime)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*&lt;em&gt;containerd (High level Runtime): *&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;এটি docker image ম্যানেজ করে,&lt;/li&gt;
&lt;li&gt;container life cycle manage করে &lt;/li&gt;
&lt;li&gt;এবং network, storage handle করে।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;runc (low level Runtime):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;এটি Kernel এর সাহায্য নিয়ে কন্টেইনার তৈরি করার কাজ করে। &lt;/li&gt;
&lt;li&gt;এটি Namespace ও Cgroup ব্যবহার করে।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Execution Flow (কিভাবে কাজ করে)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;যখন আমরা লিখি docker run hello-world, তখন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1 (Request):&lt;/strong&gt; User docker CLI এর মাধ্যমে dockerd (daemon) কে request পাঠায়। dockerd সেটা রিসিভ করে। &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2 (Delegation):&lt;/strong&gt; dockerd নিজে container তৈরি না করে সেই দায়িত্ব পাঠিয়ে দেয় containerd-এর কাছে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3 (Execution):&lt;/strong&gt; containerd আবার runc কে কল করে। runc সরাসরি OS এর Kernel-এর সাথে কথা বলে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 4 (Isolation):&lt;/strong&gt; Kernel তখন Namespace এবং Cgroup ব্যবহার করে একটি isolated (আলাদা) পরিবেশ তৈরি করে। আর এভাবেই একটি container তৈরি হয়।&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Docker #DockerEngine #Containers #BackendDevelopment #SoftwareEngineering #TechBlog
&lt;/h1&gt;

</description>
      <category>architecture</category>
      <category>devops</category>
      <category>docker</category>
      <category>linux</category>
    </item>
    <item>
      <title>খেলার মাঠ থেকে ডকার: ভার্চুয়াল মেশিন এবং কন্টেইনার</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Mon, 19 Jan 2026 18:21:25 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/khelaar-maatth-theke-ddkaar-bhaarcuyaal-meshin-ebn-kntteinaar-2f78</link>
      <guid>https://forem.com/shuvrobaset/khelaar-maatth-theke-ddkaar-bhaarcuyaal-meshin-ebn-kntteinaar-2f78</guid>
      <description>&lt;p&gt;&lt;strong&gt;Part-2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;সফটওয়্যার ইঞ্জিনিয়ারিংয়ের দুনিয়ায় পা রাখলে দুটি শব্দ বারবার কানে আসে— Virtual Machine (VM) এবং Container। এই দুটির পার্থক্য বুঝতে গিয়ে অনেকে খেই হারিয়ে ফেলেন। চলুন, আমাদের এলাকার খেলার মাঠের একটি কাল্পনিক গল্প দিয়ে বিষয়টি পরিষ্কার করা যাক।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;১. ভার্চুয়াল মেশিন (VM) যখন মাঠ ভাগ হয়ে যায়:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;আমাদের এলাকায় একটি বিশাল খেলার মাঠ আছে। এলাকার একদল মানুষ ক্রিকেট পাগল, আর অন্যদল ফুটবল ভক্ত। সবাই একসাথে মাঠে খেলতে চায় । মুরুব্বিরা (যাদের আমরা টেকনিক্যালি বলব Hypervisor) একটি সিদ্ধান্ত নিলেন। তারা মাঠের মাঝখানে দেয়াল তুলে মাঠটিকে দুই ভাগ করে দিলেন।&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;পুরো মাঠ: আমাদের মূল কম্পিউটার বা হার্ডওয়্যার।&lt;/li&gt;
&lt;li&gt;জমি: স্টোরেজ বা HDD&lt;/li&gt;
&lt;li&gt;ম্যানেজমেন্ট রুম: CPU&lt;/li&gt;
&lt;li&gt;ড্রেসিং রুম: মেমোরি বা RAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;মাঠ ভাগ করার সাথে সাথেই প্রতিটি ভাগের জন্য আলাদা ম্যানেজমেন্ট রুম, আলাদা ড্রেসিং রুম এবং আলাদা এন্ট্রি গেট তৈরি করতে হলো। অর্থাৎ, প্রতিটি ভার্চুয়াল মেশিন তার নিজের জন্য আলাদা অপারেটিং সিস্টেম (Guest OS) এবং রিসোর্স দখল করে নিলো। এখানে একটির প্লেয়ার অন্যটির রুমে ঢুকতে পারে না। এটি নিরাপদ, কিন্তু অনেক জায়গা এবং সম্পদ অপচয় করে ।&lt;/p&gt;

&lt;p&gt;সহজ ভাষায় Virtual Machine মানে- একটা কম্পিউটারের ভেতরে আরেকটা পুরো কম্পিউটার।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ভিতরে কী থাকে?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;একটা VM এর ভেতরে থাকে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;নিজস্ব Operating System (Linux/Windows)&lt;/li&gt;
&lt;li&gt;নিজস্ব Kernel&lt;/li&gt;
&lt;li&gt;CPU, RAM, Disk (share করা, কিন্তু আলাদা করে দেয়া)&lt;/li&gt;
&lt;li&gt;Application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hypervisor কী?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hypervisor হলো manager&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;কে কত RAM পাবে&lt;/li&gt;
&lt;li&gt;কে কত CPU পাবে&lt;/li&gt;
&lt;li&gt;কে কখন চলবে&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;VM কেন Heavy?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;প্রতিটা VM এ পুরো OS&lt;/li&gt;
&lt;li&gt;প্রতিটা OS আলাদা Kernel চালায়&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;👉 তাই VM:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slow start&lt;/li&gt;
&lt;li&gt;বেশি RAM/Disk লাগে&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;VM কখন ব্যবহার করা ভালো?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different OS দরকার (Windows + Linux)&lt;/li&gt;
&lt;li&gt;Strong security isolation দরকার&lt;/li&gt;
&lt;li&gt;Legacy system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;২. ডকার কন্টেইনার (Docker): যখন মাঠ শেয়ার করা হয়&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এবার একটু ভিন্নভাবে চিন্তা করি। মাঠ একটাই, কোনো দেয়াল নেই। কিন্তু মাঠের এক কোণে ৪-৫টি পিচে ক্রিকেট খেলা চলছে, অন্যপাশে ব্যাডমিন্টন আর এক পাশে ফুটবল। সবাই একই মাঠ, একই ড্রেসিং রুম আর একই গেট ব্যবহার করছে।&lt;/p&gt;

&lt;p&gt;কিন্তু মজার ব্যাপার হলো, ক্রিকেটের প্লেয়াররা এমনভাবে খেলছে যেন তাদের কাছে ওই পিচটুকুই তাদের জগত। তারা অন্য খেলায় বাধা দিচ্ছে না। এই যে একই মাঠ (Host OS) ব্যবহার করে ছোট ছোট সীমানায় (Isolated environment) নিজেদের খেলা চালানো—এটিই হলো Container।&lt;/p&gt;

&lt;p&gt;কন্টেইনার প্রযুক্তিতে ডকার মূলত Namespace এবং Cgroups ব্যবহার করে এই অদৃশ্য সীমানা তৈরি করে।&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;এটি প্রতিটি খেলার জন্য একটি আলাদা "ভিউ" তৈরি করে, যাতে একজন অন্যজনের প্রসেস দেখতে না পায়।&lt;/li&gt;
&lt;li&gt;Namespace Container কে বোঝায় তুমি একা&lt;/li&gt;
&lt;li&gt;বাস্তবে সব Host OS এর ভেতরে।&lt;/li&gt;
&lt;li&gt;PID (process)&lt;/li&gt;
&lt;li&gt;NET (network)&lt;/li&gt;
&lt;li&gt;MNT (filesystem)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cgroups — resource control&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cgroups: এটি নিশ্চিত করে যে ফুটবল প্লেয়াররা যেন পুরো মাঠ দখল না করে ফেলে, ক্রিকেটের জন্য যেন নির্দিষ্ট জায়গা থাকে।&lt;/li&gt;
&lt;li&gt;এই Container max কত CPU&lt;/li&gt;
&lt;li&gt;max কত RAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 এক Container অন্যটার resource খেতে পারবে না।&lt;/p&gt;

&lt;p&gt;সহজ ভাষায় Container হলো OS-এর ভেতরে আলাদা আলাদা lightweight environment&lt;/p&gt;

&lt;p&gt;এগুলো নিজেদের OS চালায় না, Host OS এর Kernel ব্যবহার করে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;কীভাবে কাজ করে?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Host OS (Linux)&lt;/li&gt;
&lt;li&gt;Docker / Container Runtime&lt;/li&gt;
&lt;li&gt;একাধিক Container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;👉 প্রতিটা Container এর আছে:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App&lt;/li&gt;
&lt;li&gt;App dependencies&lt;/li&gt;
&lt;li&gt;নিজস্ব OS নেই&lt;/li&gt;
&lt;li&gt;Host Kernel শেয়ার করে&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ভার্চুয়াল মেশিন হলো আলাদা আলাদা বাড়ি তৈরির মতো নিরাপদ কিন্তু ব্যয়বহুল। আর ডকার কন্টেইনার হলো একই মাঠের ভেতর সুশৃঙ্খলভাবে আলাদা আলাদা খেলা চালানোর মতো দক্ষ এবং সাশ্রয়ী।&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/shuvrobaset/it-works-on-my-machine-ei-bhuuter-ojhaa-ykhn-ddkaar-docker-12m4"&gt;&lt;strong&gt;Part-1&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>container</category>
      <category>softwareengineering</category>
      <category>backenddevelopment</category>
    </item>
    <item>
      <title>"It Works on My Machine" — এই ভূতের ওঝা যখন ডকার (Docker)</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Tue, 06 Jan 2026 16:24:20 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/it-works-on-my-machine-ei-bhuuter-ojhaa-ykhn-ddkaar-docker-12m4</link>
      <guid>https://forem.com/shuvrobaset/it-works-on-my-machine-ei-bhuuter-ojhaa-ykhn-ddkaar-docker-12m4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Part-1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ডেভেলপারদের জীবনে একটি চিরচেনা এবং বিরক্তিকর সমস্যা হলো - আমার local-এ তো ঠিকঠাক কাজ করছে, কিন্তু server-এ বা খুব কাছের বন্ধুর কম্পিউটারে কাজ করছে না। কী বিপদ! আজ কাছের বন্ধুটাও আমার পাশে নেই… ☹️ &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;সমস্যার মূলে কী?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;আমরা যখন কোনো অ্যাপ্লিকেশন তৈরি করি, তখন সেটি একা চলে না। এর সাথে জড়িয়ে থাকে বিভিন্ন Programming Language, Tools, এবং Dependency Packages। এগুলোর প্রত্যেকটির আবার আলাদা আলাদা ভার্সন (Version) থাকে। সবার কম্পিউটারে সবকিছুর ভার্সন হুবহু এক থাকবে—এমনটা আশা করা কঠিন। আর এই ভার্সনের সামান্য অমিল হলেই উদয় হয় সেই অনাকাঙ্ক্ষিত ভূতের, যা আমাদের বলতে বাধ্য করে— "It works on my machine!" ☹️&lt;/p&gt;

&lt;p&gt;এই 'ভার্সন সমস্যার ভূত' তাড়ানোর জন্য আমাদের একজন 'ওঝা' দরকার। আর আধুনিক সফটওয়্যার ইঞ্জিনিয়ারিংয়ের সেই ওঝা বা মুশকিল আসান হলো Docker (ডকার)।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker আসলে কী?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;'ডকার' (Docker) একটি ব্রিটিশ শব্দ, যার বাংলা অর্থ হলো 'ডকশ্রমিক'। আমেরিকান ইংরেজিতে একে বলা হয় 'Longshoreman'। তাদের কাজ হলো মূলত জাহাজের মালামাল লোড-আনলোড (Load/Unload) করা।&lt;/p&gt;

&lt;p&gt;আগে জাহাজে আলগা মালামাল তোলা-নামানো ছিল বেশ সময়সাপেক্ষ ও ঝামেলার কাজ। ১৯৫০ সালে Malcolm McLean নামক একজন আমেরিকান ব্যক্তি 'Container' আবিষ্কার করেন। এই কন্টেইনার আসার পর মালামাল পরিবহন যেমন নিরাপদ হয়েছে, তেমনি লোড-আনলোড করাও অনেক সহজ হয়ে গেছে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;টেকনিক্যাল দিক থেকে Docker-এর ভূমিকা&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;সফটওয়্যার জগতের ডকারও ঠিক একই কাজ করে। এটি মূলত একটি ইকোসিস্টেম বা প্ল্যাটফর্ম, যা আমাদের অ্যাপ্লিকেশনের জন্য 'কন্টেইনার' ম্যানেজ করে। জাহাজের কন্টেইনারে যেমন পণ্য থাকে, তেমনি ডকার কন্টেইনারে থাকে আমাদের অ্যাপ্লিকেশনের:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;সোর্স কোড (Code)&lt;/li&gt;
&lt;li&gt;ডিপেন্ডেন্সি প্যাকেজ (Dependency Packages)&lt;/li&gt;
&lt;li&gt;অপারেটিং সিস্টেমের প্রয়োজনীয় অংশ (OS)&lt;/li&gt;
&lt;li&gt;এবং অন্যান্য কনফিগারেশন।
এই সবকিছু একসাথে একটি প্যাকেজ হিসেবে থাকে, যাকে আমরা Docker Image বলি।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;একটি সহজ উদাহরণ&lt;br&gt;
ধরা যাক—&lt;/p&gt;

&lt;p&gt;একটি application-এ ব্যবহার করা হচ্ছে Python 3.7&lt;br&gt;
আরেকটি application-এ দরকার Python 3.12&lt;/p&gt;

&lt;p&gt;Docker ব্যবহার করলে—&lt;/p&gt;

&lt;p&gt;দুটি application দুইটি আলাদা container-এ&lt;br&gt;
একদম কোনো ঝামেলা ছাড়াই&lt;br&gt;
একই machine-এ একসাথে run করা যায়&lt;/p&gt;

&lt;p&gt;পরবর্তীতে এই container-কে Docker image (snapshot) হিসেবে তৈরি করে অন্য যেকোনো PC বা server-এ খুব সহজেই run করা সম্ভব।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;সংক্ষেপে Docker কী কী করে?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker মূলত container load এবং unload করার কাজ করে&lt;/li&gt;
&lt;li&gt;Container-এর ভেতরে আমার application বা service-এর সবকিছু isolated অবস্থায় থাকে&lt;/li&gt;
&lt;li&gt;প্রতিটি container আলাদা আলাদা software বা project-এর জন্য হতে পারে&lt;/li&gt;
&lt;li&gt;Docker খুবই efficient এবং lightweight&lt;/li&gt;
&lt;li&gt;আগে এই সমস্যা সমাধানে Virtual Machine (VM) ব্যবহার করা হতো, যা ছিল ভারী ও ধীরগতির&lt;/li&gt;
&lt;li&gt;Docker-এ প্রতিটি container আলাদাভাবে (isolated) কাজ করতে পারে&lt;/li&gt;
&lt;li&gt;Docker image ব্যবহার করে deployment হয় খুব সহজ ও দ্রুত&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;শেষ কথা&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;সহজ কথায় বলতে গেলে, ডকার আমাদের অ্যাপ্লিকেশনকে একটি নির্দিষ্ট ফ্রেমওয়ার্ক বা বক্সের মধ্যে আটকে দেয়, যাতে বাইরের পরিবেশ পরিবর্তনের কোনো প্রভাব ওই অ্যাপ্লিকেশনের ওপর না পড়ে। ফলে "It Works on My Machine" — এই অজুহাত দেওয়ার দিন এখন শেষ!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/shuvrobaset/khelaar-maatth-theke-ddkaar-bhaarcuyaal-meshin-ebn-kntteinaar-2f78"&gt;Part-2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>docker</category>
    </item>
    <item>
      <title>How does the Python Program work in your computer</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Sat, 13 Jan 2024 17:42:34 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/how-does-the-python-program-work-in-your-computer-3d2d</link>
      <guid>https://forem.com/shuvrobaset/how-does-the-python-program-work-in-your-computer-3d2d</guid>
      <description>&lt;p&gt;পাইথন খুব সহজ এবং ডিমান্ডিং প্রোগ্রামিং ল্যাঙ্গুয়েজ হওয়ার কারণে আমাদের অনেকেরই পছন্দের প্রোগ্রামিং ল্যাংগুয়েজ এটি। আমরা পাইথন দিয়ে প্রোগ্রামিং করলেও অনেকেই ঠিকমতো জানিনা পাইথন আসলে কিভাবে কাজ করে। এই আর্টিকেল এর মাধ্যমে আজকে আমরা সেটাই জানার চেষ্টা করবো।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;পাইথন একটি হাই লেভেল ইন্টারপ্রেটেড প্রোগ্রামিং ল্যাঙ্গুয়েজ। C বা C++ এর মতো প্রোগ্রাম রান করতে কম্পাইলার এর প্রয়োজন হয় না। পাইথন লাইন বাই লাইন এক্সেকিউট করে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compiler &amp;amp; Interpreter&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;কম্পাইলার মূলত সম্পূর্ণ কোডকে একসাথে মেশিন কোড এ ট্রান্সলেট করে। অপরদিকে ইন্টারপ্রেটার লাইন বাই লাইন ট্রান্সলেট করে।&lt;/p&gt;

&lt;p&gt;চলুন মূল আলোচনায় যাওয়া যাক।&lt;/p&gt;

&lt;p&gt;একটি প্রোগ্রাম রান করার আগে প্রথমে আমরা প্রোগ্রাম টি কোনো একটা ফাইল এ লিখি। তারপর সেটি নির্দিষ্ট ল্যাঙ্গুয়েজে অনুসারে এক্সটেনশন দিয়ে ফাইল টি সেভ করি। পাইথন এর ক্ষেত্রে আমরা .py দিয়ে লিখি।&lt;/p&gt;

&lt;p&gt;ধরুন আমরা একটা Hello World প্রোগ্রাম লিখবো। শুরুতে আমরা একটি ফাইল নিলাম যার নাম দিলাম hello.py&lt;/p&gt;

&lt;p&gt;এরপর ফাইলটি যেকোনো এডিটর এ ওপেন করে সেখানে আমরা আমাদের কোড টি লিখব।&lt;/p&gt;

&lt;p&gt;যখন আমরা ফাইল টি রান করবো তখন আসলে কি হয় সেটাই আমাদের আজকের মূল আলোচনা।&lt;/p&gt;

&lt;p&gt;পাইথন প্রোগ্রাম রান করার পূর্বে অবশ্যই আপনার কম্পিউটার এ পাইথন ইন্টারপ্রেটার ইনস্টল থাকা চাই।&lt;/p&gt;

&lt;p&gt;কোড টি রান দেয়ার পর প্রথমে পাইথন ইন্টারপ্রেটার কোড টি লাইন বাই লাইন রিড করে byte code / machine code এ ট্রান্সলেট করবে। কম্পিউটার মূলত মেশিন কোড বুঝে।&lt;/p&gt;

&lt;p&gt;byte code হলো ডেভেলপার বা প্রোগ্রামার এর লেখা কোড এর set of instruction. এবং এটি .pyc ফাইল এ সেভ হয়। PVM বা পাইথন ভার্চুয়াল মেশিন এর মাধ্যমে byte code/ machine code এ ট্রান্সলেট হয়ে এক্সেকিউট হয়। এবং এক্সপেকটেড আউটপুট দেখায়।&lt;/p&gt;

&lt;p&gt;পাইথন ইন্টারপ্রেটার যখন প্রতিটা লাইন কে রিড করে byte code এ ট্রান্সলেট করে তখন যদি কোনো এরর বা অন্য কোনো সমস্যা পায় তখনই প্রোগ্রাম টি এক্সেকিউট বন্ধ করে দেয়। এবং সেই এরর মেসেজ টি শো করে দেয়।&lt;/p&gt;

&lt;p&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%2Fommxk311m9zwdhah3dan.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fommxk311m9zwdhah3dan.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;List of some Python interpreter&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Cpython (official Python interpreter and it is standard)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jpython/Jython&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PyPy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RubyPython&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>CRUD with NodeJs &amp; ReactJs</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Thu, 06 Jan 2022 18:29:32 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/crud-with-nodejs-reactjs-173h</link>
      <guid>https://forem.com/shuvrobaset/crud-with-nodejs-reactjs-173h</guid>
      <description>&lt;p&gt;&lt;strong&gt;CRUD&lt;/strong&gt;: &lt;br&gt;
    Most important thing in backend development. &lt;br&gt;
CRUD means C for Create/POST, R for Read/GET, U for Update/Patch and D for Delete&lt;/p&gt;

&lt;p&gt;I will try to describe these operations with some examples. How do we make this using ReactJs and NodeJs very simply. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;POST/CREATE&lt;/strong&gt;:&lt;br&gt;
    In a very simple way CREATE means client will give some input data then it will take to the backend side or server side then it will save into the database. &lt;/p&gt;

&lt;p&gt;User will give input form data and submit it with a url called. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fetch('http://localhost:5000/add-users', { 
        method: 'POST', 
        headers: { 
            'content-type': 'application/json' 
        }, 
        body: JSON.stringify(newUser) 
    })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;From the client side data will pass into the backend and it will save into database in a specific collection. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.post('/add-users', async (req, res) =&amp;gt; {
    const newUser = req.body // receive data from frontend 
    const result = await usersCollection.insertOne(newUser); // save data to the database 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;/&amp;gt;&lt;br&gt;
        res.send(result); // send response to the frontend. &lt;br&gt;
      }); &lt;br&gt;
After that a successful response will go from the backend side to the client side.&lt;br&gt;
User will see a success message &lt;br&gt;
     .then(res =&amp;gt; res.json()) &lt;br&gt;
            .then(data =&amp;gt; { &lt;br&gt;
                if (data.insertedId) { &lt;br&gt;
                    alert('Successfully added the user.') &lt;br&gt;
                    e.target.reset(); &lt;br&gt;
                }})&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;READ/GET&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
    Get the data from the database and show it to the client side.&lt;br&gt;
When we want to show some data to the client side and the page is loaded then it will call the API url for getting the data.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; fetch(`http://localhost:5000/users`)  
 app.get('/users', async (req, res) =&amp;gt; { 
    const cursor = usersCollection.find({}); 
    const users = await cursor.toArray();         
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Server side receive the data from the database and send it to the client side.&lt;/p&gt;

&lt;p&gt;res.send(users); &lt;br&gt;
From client side data will show to the UI&lt;br&gt;
    - .then(res =&amp;gt; res.json()) &lt;br&gt;
            .then(data =&amp;gt; { &lt;br&gt;
                setUsers(data.users)&lt;br&gt;&lt;br&gt;
            }); &lt;br&gt;
    user.map(.............) &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE/PUT&lt;/strong&gt;:&lt;br&gt;
Updating and existing data from the database. Sometimes we need to edit our existing data. In that we make a method for updating data.&lt;br&gt;
It’s one kind of POST method. User will give some data from the client side and hit a url then it will come to the backend side and from the backend side they will check in to the database if the condition matches then data will update into the database and after that it will send a successful response to the client side.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const url = `http://localhost:5000/update-user/${userId}`; 
    fetch(url, { 
        method: 'PUT', 
        headers: {
            'content-type': 'application/json'
        }, 
        body: JSON.stringify(user)
    })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We need to pass the unique data to sure that which object data we want to change. &lt;/p&gt;

&lt;p&gt;app.put('/update-user/:id', async (req, res) =&amp;gt; { &lt;br&gt;
        const id = req.params.id; &lt;br&gt;
        console.log('updating', id) &lt;br&gt;
        const updatedUser = req.body; &lt;br&gt;
        const filter = { _id: ObjectId(id) }; // filtering user's object &lt;br&gt;
        const options = { upsert: true }; // update and insert &lt;br&gt;
        const updateDoc = { // set data &lt;br&gt;
            $set: { &lt;br&gt;
                fname: updatedUser.fname,&lt;br&gt;
                lname: updatedUser.lname, &lt;br&gt;
                address: updatedUser.address, &lt;br&gt;
                email: updatedUser.email &lt;br&gt;
            }, &lt;br&gt;
        }; &lt;br&gt;
        const result = await usersCollection.updateOne(filter, updateDoc, options) // updating          res.json(result) // send response to frontend &lt;/p&gt;

&lt;p&gt;Updated data from database&lt;br&gt;
Response send from backend to the client side.&lt;/p&gt;

&lt;p&gt;res.json(result) // send response to frontend &lt;br&gt;
        .then(res =&amp;gt; res.json()) &lt;br&gt;
            .then(data =&amp;gt; { &lt;br&gt;
                if (data.modifiedCount &amp;gt; 0) { &lt;br&gt;
                    alert('Update Successful'); &lt;br&gt;
                    setUser({}); &lt;br&gt;
                    e.target.reset(); &lt;br&gt;
                } &lt;br&gt;
            })&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DELETE&lt;/strong&gt;:&lt;br&gt;
Delete existing data&lt;br&gt;
I click a specific button to delete the data. After that the delete API url hit and the backend received the unique value to identify which data we want to delete.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;button onClick={() =&amp;gt; handleDeleteUser(user._id)} className="btn btn-danger" &amp;gt;delete&amp;lt;/button&amp;gt;

- const handleDeleteUser = id =&amp;gt; { 
    const proceed = window.confirm('Are you sure, you want to delete?'); 
    if (proceed) { 
        const url = `http://localhost:5000/users/${id}`;
        fetch(url, { 
            method: 'DELETE' 
        }) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Backend receives the unique value(id) and makes a query to find out the specific data for delete.&lt;br&gt;
    app.delete('/users/:id', async (req, res) =&amp;gt; { &lt;br&gt;
        const id = req.params.id;&lt;br&gt;
        const query = { _id: ObjectId(id) }; &lt;br&gt;
        const result = await usersCollection.deleteOne(query); &lt;br&gt;
    }&lt;br&gt;
Data will be deleted from the database.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- res.json(result); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Send a success message to the client.&lt;br&gt;
    - .then(res =&amp;gt; res.json()) &lt;br&gt;
                .then(data =&amp;gt; { &lt;br&gt;
                    if (data.deletedCount &amp;gt; 0) { &lt;br&gt;
                        alert('deleted successfully'); &lt;br&gt;
                    }&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>programming</category>
    </item>
    <item>
      <title>Virtual DOM, diffing- algorithm, Context API</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Thu, 06 Jan 2022 17:40:57 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/virtual-dom-diffing-algorithm-context-api-56ig</link>
      <guid>https://forem.com/shuvrobaset/virtual-dom-diffing-algorithm-context-api-56ig</guid>
      <description>&lt;p&gt;&lt;strong&gt;DOM&lt;/strong&gt;: &lt;br&gt;
    DOM stands for Document Object Model. It is the hierarchical representation of your web page(UI). It’s a programming interface of XML or HTML documents. It represents our webpage as we can easily modify it using the programming language.&lt;br&gt;
Each time something in the DOM changes. Since DOM is represented as a tree structure, It contains a node for each UI element present in the web document. It is very useful as it allows web developers to modify content through JavaScript, also it being in structured format helps a lot as we can choose specific targets and all the code becomes much easier to work with&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual DOM&lt;/strong&gt;:&lt;br&gt;
    Virtual DOM is the copy of real DOM that kept the original DOM in the memory and synced with the real DOM by libraries such as ReactDOM. This process is called Reconciliation. Changing virtual DOMs is easier than real DOM. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diffing-Algorithm&lt;/strong&gt;: &lt;br&gt;
    A diff algorithm outputs the set of differences between two inputs. These algorithms are the basis of a number of commonly used developer tools. Yet understanding the inner workings of diff algorithms is rarely necessary to use said tools.&lt;br&gt;
React Two virtual trees need to be maintained at the same time DOM Trees ： A tree representing the present DOM structure , The other one is React Generated when the state change is about to be re rendered .React By comparing the differences between the two trees , Decide if it needs to be changed DOM structure , And how to modify . This algorithm is called the Diff Algorithm .&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context API&lt;/strong&gt;: &lt;br&gt;
    In React props passing into the component is a little bit difficult because In a typical React application, data is passed top-down (parent to child) via props. &lt;br&gt;
In that situation we need something to handle this problem. Sometimes we need to pass data into many more components. In that case React gives us a Context API to solve this problem. By using Context API we can share props to any components as we want without any difficulties. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>Javascript- call(), apply(), bind()</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Thu, 06 Jan 2022 06:26:34 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/javascript-call-apply-bind-4a1l</link>
      <guid>https://forem.com/shuvrobaset/javascript-call-apply-bind-4a1l</guid>
      <description>&lt;p&gt;This: &lt;br&gt;
In javascript one of the most important and confusing topics is ‘this’. It's a reserved keyword, we do not use it as variable or function name. &lt;br&gt;
This means that “this” can only be used in a function, or globally. When used in either of these cases, “this” refers to the window object. When the function is a method of an object, then “this” refers to the object that the method is a member of. When the function is a constructor, then “this” refers to the instance object. There is much more to talk about with regards to what “this” means in varying scenarios, but these are the most common situations.&lt;/p&gt;

&lt;p&gt;Call, Bind, Apply: &lt;br&gt;
    We use call, bind and apply methods to set ‘this’ keyword independent of how the function is called. This is especially useful for the callbacks.&lt;/p&gt;

&lt;p&gt;These Three methods take the value of this or centext of this as a first argument. But call() and bind() can take unlimited arguments. On the other hand apply() can take only two arguments. First one is the value or context and the second one is an array. &lt;/p&gt;

&lt;p&gt;In which function we use call() and apply() method that function will be called instant. On the other hand, the bind() method did not call it instant, it returned a function definition so that we can call it later as we want.&lt;/p&gt;

&lt;p&gt;Examples: &lt;br&gt;
const normalPerson = {&lt;br&gt;
    firstName: 'shuvro',&lt;br&gt;
    lastName: 'baset',&lt;br&gt;
    salary: 15000,&lt;br&gt;
    getFullName: function() {&lt;br&gt;
        console.log(this.firstName, this.lastName);&lt;br&gt;
    },&lt;br&gt;
    chargeBill: function(amount, tips, tax) {&lt;br&gt;
        console.log(this)&lt;br&gt;
        this.salary = this.salary - amount -tips - tax;&lt;br&gt;
        return this.salary;&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;normalPerson.chargeBill(100);&lt;br&gt;
console.log(normalPerson.salary)&lt;/p&gt;

&lt;p&gt;const zeroPerson = {&lt;br&gt;
    firstName: 'zero',&lt;br&gt;
    lastName: 'person',&lt;br&gt;
    salary: 5000,&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;const heroPerson = {&lt;br&gt;
    firstName: 'hero',&lt;br&gt;
    lastName: 'person',&lt;br&gt;
    salary: 25000,&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;// i will bind chargeBill function to heroPerson&lt;br&gt;
const heroChargeBill = normalPerson.chargeBill.bind(heroPerson);&lt;br&gt;
heroChargeBill(2000);&lt;br&gt;
heroChargeBill(1000);&lt;br&gt;
console.log(heroPerson.salary)&lt;br&gt;
console.log(normalPerson.salary)&lt;/p&gt;

&lt;p&gt;// call function&lt;br&gt;
normalPerson.chargeBill.call(heroPerson, 900,100,10);&lt;br&gt;
console.log(heroPerson.salary)&lt;br&gt;
normalPerson.chargeBill.call(zeroPerson, 2000, 200, 20);&lt;br&gt;
console.log(zeroPerson.salary)&lt;/p&gt;

&lt;p&gt;// apply&lt;br&gt;
normalPerson.chargeBill.apply(heroPerson, [1000, 200, 20]);&lt;br&gt;
console.log(heroPerson.salary);&lt;br&gt;
normalPerson.chargeBill.apply(zeroPerson, [500, 501, 501]);&lt;br&gt;
console.log(zeroPerson.salary);&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Javascript - Scope, Closure</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Wed, 05 Jan 2022 19:53:10 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/javascript-scope-closure-2kf5</link>
      <guid>https://forem.com/shuvrobaset/javascript-scope-closure-2kf5</guid>
      <description>&lt;p&gt;*&lt;em&gt;Scope: *&lt;/em&gt;&lt;br&gt;
It’s a very important topic in javascript. It mainly defines where we can use our variables and functions in javascript. When we declare a variable and function and after that we use them. But we did not use them all over the script. There are some restrictions and that is known as scope. &lt;/p&gt;

&lt;p&gt;There are two types of scops &lt;br&gt;
Local scope&lt;br&gt;
Global scope&lt;/p&gt;

&lt;p&gt;It defines where we can access the variables and functions&lt;br&gt;
Every new functions creates a scope&lt;br&gt;
A variable that is declared in a function and that function can not be used in other functions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Local Scope:&lt;/strong&gt;&lt;br&gt;
    We declare variables in a function called local variables. These variables are local scope. It means we can use these variables only under that function. We did not use any outer function. In that case you will get an error.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;2. Global Scope: *&lt;/em&gt;&lt;br&gt;
    Global scope means that access is everywhere. We declare variables not in any function that are known as global variables. These variables are global scope. We can use these variables anywhere in the script. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lexical Scoping:&lt;/strong&gt; &lt;br&gt;
    Every child function can access their parent functions. We declare a function and under that function we declare a variable x and another function y(). So now we can access x in the y() function though we did not declare x under the y(). So here child y() can access the parent variable this is called Lexical Scoping. &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Closure: *&lt;/em&gt;&lt;br&gt;
    Closure just like  Lexical Scoping. We did not need to do anything for closure. It’s a default behavior of javascript. When we write a function inside a function then there is a parent child relationship occurring. If we return a parent function we can also access a variable from the parent function into the child function. This is called closure. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>The CSS Position Property</title>
      <dc:creator>Shuvro_baset</dc:creator>
      <pubDate>Tue, 04 Jan 2022 19:20:57 +0000</pubDate>
      <link>https://forem.com/shuvrobaset/the-css-position-property-5acm</link>
      <guid>https://forem.com/shuvrobaset/the-css-position-property-5acm</guid>
      <description>&lt;p&gt;In css the most confusing part is position property. But we should have clear concept about these. Now I will try to clear these concepts below.&lt;/p&gt;

&lt;p&gt;The types of positioning in CSS are static, sticky, fixed, relative, absolute&lt;br&gt;
&lt;strong&gt;Static:&lt;/strong&gt; Static positioning is the default for every HTML element. In fact, there’s not much that you can do to change it. It won’t be affected by certain properties that can make an impact on other CSS position types. No matter what value you associate with top, right, bottom, and left properties, they will not change, and neither will the z-index property.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sticky:&lt;/strong&gt; It's not relative or not a fix position. It's depends on user scrolled on the web page. it behaves like a relative value element until the viewport meets a specified position — then it gets "fixed" in a spot. &lt;br&gt;
&lt;strong&gt;Fixed:&lt;/strong&gt; If we use fix position of any div it will not change. It will be set in that position where we set if the webpage scrolled but that will not change the position. &lt;br&gt;
&lt;strong&gt;Relative:&lt;/strong&gt; Normally it set into a normal position. But we can change the position according to the body. And we can also use relative position when we want to change another property position according to this div. More will discuss in the absolute position part.&lt;br&gt;
&lt;strong&gt;Absolute:&lt;/strong&gt; Absolute position depends on others elements. It changes by respect to it's parent element. If there is no parent element then it will consider the body as it's parent and change the position according to parent.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
