<?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: Md Asaduzzaman</title>
    <description>The latest articles on DEV Community by Md Asaduzzaman (@plabonasad).</description>
    <link>https://dev.to/plabonasad</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3490567%2F78fd0471-5c7a-4bc3-9ec6-61d9a3c44b29.jpg</url>
      <title>DEV Community: Md Asaduzzaman</title>
      <link>https://dev.to/plabonasad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/plabonasad"/>
    <language>en</language>
    <item>
      <title>Senior Front-end Engineer — React Syllabus</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Thu, 17 Sep 2026 08:50:37 +0000</pubDate>
      <link>https://dev.to/plabonasad/senior-front-end-engineer-react-syllabus-3e2o</link>
      <guid>https://dev.to/plabonasad/senior-front-end-engineer-react-syllabus-3e2o</guid>
      <description>&lt;h2&gt;
  
  
  Senior Front-end Engineer — React Syllabus
&lt;/h2&gt;

&lt;h1&gt;
  
  
  How to learn fast with these sequence
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;React Fundamentals&lt;/li&gt;
&lt;li&gt;React Architecture&lt;/li&gt;
&lt;li&gt;TanStack Query&lt;/li&gt;
&lt;li&gt;Zustand / Redux Toolkit&lt;/li&gt;
&lt;li&gt;HTML + CSS + Tailwind&lt;/li&gt;
&lt;li&gt;Accessibility&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;React Performance&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Vite + Webpack&lt;/li&gt;
&lt;li&gt;Design Systems + Storybook&lt;/li&gt;
&lt;li&gt;SSR / SSG / RSC&lt;/li&gt;
&lt;li&gt;API Contracts + Front-end DX&lt;/li&gt;
&lt;li&gt;Advanced React&lt;/li&gt;
&lt;li&gt;Capstone Project&lt;/li&gt;
&lt;li&gt;Interview Practice&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Modern JavaScript
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ES6+&lt;/li&gt;
&lt;li&gt;Async/Await, Promises&lt;/li&gt;
&lt;li&gt;Modules&lt;/li&gt;
&lt;li&gt;Closures&lt;/li&gt;
&lt;li&gt;Destructuring &amp;amp; Spread&lt;/li&gt;
&lt;li&gt;Event Loop&lt;/li&gt;
&lt;li&gt;DOM &amp;amp; Browser APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. TypeScript
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Types &amp;amp; Interfaces&lt;/li&gt;
&lt;li&gt;Generics&lt;/li&gt;
&lt;li&gt;Utility Types&lt;/li&gt;
&lt;li&gt;Union &amp;amp; Intersection Types&lt;/li&gt;
&lt;li&gt;Type Narrowing&lt;/li&gt;
&lt;li&gt;Type-safe API contracts&lt;/li&gt;
&lt;li&gt;Advanced TypeScript&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. HTML &amp;amp; CSS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Semantic HTML&lt;/li&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Responsive Design&lt;/li&gt;
&lt;li&gt;Flexbox &amp;amp; Grid&lt;/li&gt;
&lt;li&gt;CSS Modules&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Cross-browser compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Accessibility
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;WCAG fundamentals&lt;/li&gt;
&lt;li&gt;Keyboard navigation&lt;/li&gt;
&lt;li&gt;ARIA&lt;/li&gt;
&lt;li&gt;Focus management&lt;/li&gt;
&lt;li&gt;Screen readers&lt;/li&gt;
&lt;li&gt;Accessible forms/components&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. React Fundamentals
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Components&lt;/li&gt;
&lt;li&gt;Props &amp;amp; State&lt;/li&gt;
&lt;li&gt;JSX&lt;/li&gt;
&lt;li&gt;Hooks&lt;/li&gt;
&lt;li&gt;useEffect&lt;/li&gt;
&lt;li&gt;useMemo / useCallback&lt;/li&gt;
&lt;li&gt;useRef&lt;/li&gt;
&lt;li&gt;Rendering lifecycle&lt;/li&gt;
&lt;li&gt;Reconciliation&lt;/li&gt;
&lt;li&gt;Component composition&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. React Architecture
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Component architecture&lt;/li&gt;
&lt;li&gt;Reusable components&lt;/li&gt;
&lt;li&gt;Custom hooks&lt;/li&gt;
&lt;li&gt;Feature-based architecture&lt;/li&gt;
&lt;li&gt;Shared design system&lt;/li&gt;
&lt;li&gt;Error boundaries&lt;/li&gt;
&lt;li&gt;Forms &amp;amp; validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. State Management
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Context API&lt;/li&gt;
&lt;li&gt;Redux Toolkit&lt;/li&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;Server state vs client state&lt;/li&gt;
&lt;li&gt;React Query / TanStack Query&lt;/li&gt;
&lt;li&gt;Caching &amp;amp; invalidation&lt;/li&gt;
&lt;li&gt;Pagination &amp;amp; optimistic updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Next.js
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;App Router&lt;/li&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;li&gt;Layouts&lt;/li&gt;
&lt;li&gt;Server &amp;amp; Client Components&lt;/li&gt;
&lt;li&gt;SSR&lt;/li&gt;
&lt;li&gt;SSG&lt;/li&gt;
&lt;li&gt;Data fetching&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Middleware&lt;/li&gt;
&lt;li&gt;API integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. Build Toolchain
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Webpack fundamentals&lt;/li&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Code splitting&lt;/li&gt;
&lt;li&gt;Tree shaking&lt;/li&gt;
&lt;li&gt;Lazy loading&lt;/li&gt;
&lt;li&gt;Bundle analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10. Performance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Rendering optimization&lt;/li&gt;
&lt;li&gt;React.memo&lt;/li&gt;
&lt;li&gt;useMemo / useCallback&lt;/li&gt;
&lt;li&gt;Code splitting&lt;/li&gt;
&lt;li&gt;Lazy loading&lt;/li&gt;
&lt;li&gt;Image optimization&lt;/li&gt;
&lt;li&gt;Bundle size&lt;/li&gt;
&lt;li&gt;Core Web Vitals&lt;/li&gt;
&lt;li&gt;Lighthouse&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  11. Testing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Jest&lt;/li&gt;
&lt;li&gt;Vitest&lt;/li&gt;
&lt;li&gt;React Testing Library&lt;/li&gt;
&lt;li&gt;Unit testing&lt;/li&gt;
&lt;li&gt;Component testing&lt;/li&gt;
&lt;li&gt;Integration testing&lt;/li&gt;
&lt;li&gt;Playwright&lt;/li&gt;
&lt;li&gt;E2E testing&lt;/li&gt;
&lt;li&gt;Mocking APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  12. API &amp;amp; Frontend DX
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;REST API integration&lt;/li&gt;
&lt;li&gt;API contracts&lt;/li&gt;
&lt;li&gt;Type-safe API clients&lt;/li&gt;
&lt;li&gt;Error/loading states&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Environment configuration&lt;/li&gt;
&lt;li&gt;Developer tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  13. Design Systems
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Design tokens&lt;/li&gt;
&lt;li&gt;Reusable UI components&lt;/li&gt;
&lt;li&gt;Storybook&lt;/li&gt;
&lt;li&gt;Component documentation&lt;/li&gt;
&lt;li&gt;Figma → React workflow&lt;/li&gt;
&lt;li&gt;Versioning &amp;amp; consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  14. Advanced React
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React Server Components&lt;/li&gt;
&lt;li&gt;SSR/SSG architecture&lt;/li&gt;
&lt;li&gt;Streaming&lt;/li&gt;
&lt;li&gt;Suspense&lt;/li&gt;
&lt;li&gt;Concurrent rendering&lt;/li&gt;
&lt;li&gt;Micro-frontends&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  15. UI &amp;amp; Visualization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Framer Motion&lt;/li&gt;
&lt;li&gt;D3.js fundamentals&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  16. Senior Engineering Skills
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Code review&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Frontend architecture decisions&lt;/li&gt;
&lt;li&gt;Technical documentation&lt;/li&gt;
&lt;li&gt;Mentoring&lt;/li&gt;
&lt;li&gt;Strong English communication&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  17. Capstone Project
&lt;/h2&gt;

&lt;p&gt;Build a production-style React + TypeScript application with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React + Vite&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Tailwind&lt;/li&gt;
&lt;li&gt;TanStack Query&lt;/li&gt;
&lt;li&gt;Zustand/Redux Toolkit&lt;/li&gt;
&lt;li&gt;Storybook&lt;/li&gt;
&lt;li&gt;Accessible components&lt;/li&gt;
&lt;li&gt;Unit + component + E2E tests&lt;/li&gt;
&lt;li&gt;Performance optimization&lt;/li&gt;
&lt;li&gt;SSR/SSG&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;API integration&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>react</category>
      <category>frontend</category>
    </item>
    <item>
      <title>For #JavaScript development using #NodeJS, #NestJS, #React, #Angular, a high-end PC isn't required. However, my system lags when opening multiple tabs in #google #chrome while working. I solved issue, wrote an article to document fix for myself &amp; anyone.</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Sat, 05 Sep 2026 07:58:53 +0000</pubDate>
      <link>https://dev.to/plabonasad/for-javascript-development-using-nodejs-nestjs-react-angular-a-high-end-pc-isnt-required-1bp3</link>
      <guid>https://dev.to/plabonasad/for-javascript-development-using-nodejs-nestjs-react-angular-a-high-end-pc-isnt-required-1bp3</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/plabonasad/how-i-fixed-ubuntu-freezes-and-high-swap-usage-on-an-8gb-ram-laptop-1fh3" class="crayons-story__hidden-navigation-link"&gt;How I Fixed Ubuntu Freezes and High Swap Usage on an 8GB RAM Laptop&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/plabonasad" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3490567%2F78fd0471-5c7a-4bc3-9ec6-61d9a3c44b29.jpg" alt="plabonasad profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/plabonasad" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Md Asaduzzaman
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Md Asaduzzaman
                
                
              
              &lt;div id="story-author-preview-content-4580633" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/plabonasad" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3490567%2F78fd0471-5c7a-4bc3-9ec6-61d9a3c44b29.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Md Asaduzzaman&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/plabonasad/how-i-fixed-ubuntu-freezes-and-high-swap-usage-on-an-8gb-ram-laptop-1fh3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 5&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/plabonasad/how-i-fixed-ubuntu-freezes-and-high-swap-usage-on-an-8gb-ram-laptop-1fh3" id="article-link-4580633"&gt;
          How I Fixed Ubuntu Freezes and High Swap Usage on an 8GB RAM Laptop
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ubuntu"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ubuntu&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/btop"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;btop&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/plabonasad/how-i-fixed-ubuntu-freezes-and-high-swap-usage-on-an-8gb-ram-laptop-1fh3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>linux</category>
      <category>performance</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>How I Fixed Ubuntu Freezes and High Swap Usage on an 8GB RAM Laptop</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Sat, 05 Sep 2026 07:37:18 +0000</pubDate>
      <link>https://dev.to/plabonasad/how-i-fixed-ubuntu-freezes-and-high-swap-usage-on-an-8gb-ram-laptop-1fh3</link>
      <guid>https://dev.to/plabonasad/how-i-fixed-ubuntu-freezes-and-high-swap-usage-on-an-8gb-ram-laptop-1fh3</guid>
      <description>&lt;p&gt;When opening multiple Chrome tabs alongside my local dev server, my Ubuntu machine regularly froze or stuttered. Swapping between tabs took seconds, and terminal input lagged. &lt;/p&gt;

&lt;p&gt;Here is how I traced the issue to swap thrashing and fixed it without buying extra RAM.&lt;/p&gt;




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

&lt;p&gt;My laptop has 8 GB of RAM. Under daily development load, Chrome caused severe system lag. &lt;/p&gt;

&lt;p&gt;Checking system memory showed heavy pressure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;               total        used        free      shared  buff/cache   available
Mem:           7.6Gi       5.6Gi       686Mi       1.2Gi       3.0Gi       2.1Gi
Swap:          4.0Gi       697Mi       3.3Gi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Out of &lt;strong&gt;7.6 GiB&lt;/strong&gt; usable RAM, &lt;strong&gt;5.6 GiB&lt;/strong&gt; was in use, leaving only &lt;strong&gt;2.1 GiB available&lt;/strong&gt;. The system pushed &lt;strong&gt;697 MiB&lt;/strong&gt; into disk swap.&lt;/p&gt;

&lt;p&gt;Checking top memory processes revealed the culprit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps &lt;span class="nt"&gt;-eo&lt;/span&gt; pid,user,%mem,rss,comm &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%mem | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    PID USER     %MEM   RSS COMMAND
   4489 coder     8.3 663660 chrome
   4868 coder     7.5 604032 chrome
   5003 coder     7.3 586812 chrome
 127211 coder     4.6 368332 chrome
   4933 coder     4.4 357628 chrome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chrome processes consumed &lt;strong&gt;37%+ (~3 GB)&lt;/strong&gt; of RAM. Combined with &lt;strong&gt;1.2 GiB&lt;/strong&gt; in shared memory (&lt;code&gt;tmpfs&lt;/code&gt;), Ubuntu was forced to write memory pages to slow disk swap, causing UI freezes (swap thrashing).&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 20.04 / 22.04 / 24.04 on an 8 GB RAM setup.&lt;/li&gt;
&lt;li&gt;Terminal access with &lt;code&gt;sudo&lt;/code&gt; privileges.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step-by-Step Fix
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Lower Swappiness
&lt;/h3&gt;

&lt;p&gt;Ubuntu defaults to &lt;code&gt;vm.swappiness=60&lt;/code&gt;, which swaps memory pages to disk too aggressively. Lowering it to &lt;code&gt;10&lt;/code&gt; forces the kernel to prefer physical RAM.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Apply temporarily:
&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;sudo &lt;/span&gt;sysctl vm.swappiness&lt;span class="o"&gt;=&lt;/span&gt;10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Make it permanent:
&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;sudo &lt;/span&gt;nano /etc/sysctl.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add to the bottom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   vm.swappiness=10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Apply changes:
&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;sudo &lt;/span&gt;sysctl &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 2: Set Up ZRAM (Compressed RAM Swap)
&lt;/h3&gt;

&lt;p&gt;Instead of swapping to a slow SSD/HDD, &lt;strong&gt;ZRAM&lt;/strong&gt; creates a compressed swap space directly in physical RAM (10x-20x faster than disk swap).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;code&gt;zram-tools&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;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;zram-tools &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Edit the config file:
&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;sudo &lt;/span&gt;nano /etc/default/zramswap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Configure allocation and compression algorithm:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   ALGO=zstd
   PERCENT=50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Note: The configuration key in Ubuntu is &lt;code&gt;ALGO&lt;/code&gt;, not &lt;code&gt;ALGORITHM&lt;/code&gt;).&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Restart the service:
&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;sudo &lt;/span&gt;service zramswap restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 3: Optimize Chrome Settings
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open Chrome and go to &lt;code&gt;chrome://settings/performance&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Turn &lt;strong&gt;Memory Saver&lt;/strong&gt; to &lt;strong&gt;On&lt;/strong&gt; (suspends inactive background tabs).&lt;/li&gt;
&lt;li&gt;Go to &lt;code&gt;chrome://settings/system&lt;/code&gt; and confirm &lt;strong&gt;Use graphics acceleration when available&lt;/strong&gt; is turned &lt;strong&gt;On&lt;/strong&gt; (offloads rendering to GPU).&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Step 4: Install &lt;code&gt;btop&lt;/code&gt; for Real-Time Monitoring
&lt;/h3&gt;

&lt;p&gt;To track RAM, ZRAM, and process trees visually without complex CLI parameters:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;code&gt;btop&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;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;btop &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Launch &lt;code&gt;btop&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;   btop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Press &lt;strong&gt;&lt;code&gt;m&lt;/code&gt;&lt;/strong&gt; inside &lt;code&gt;btop&lt;/code&gt; to focus on RAM and swap compression in real time.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Step 5: Flush Slow Disk Swap
&lt;/h3&gt;

&lt;p&gt;Once memory pressure drops, clear old swap data sitting on disk back into RAM:&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;swapoff &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;swapon &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Check &lt;code&gt;free -h&lt;/code&gt; first! Only run &lt;code&gt;swapoff&lt;/code&gt; if &lt;strong&gt;Available RAM&lt;/strong&gt; is larger than &lt;strong&gt;Used Swap&lt;/strong&gt; (e.g., &amp;gt;1.5 GB available), or the OS will run out of memory and freeze.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Common Pitfall &amp;amp; Solution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  System freezes when running &lt;code&gt;swapoff -a&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cause:&lt;/strong&gt; Physical RAM is too full to absorb swapped-out data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; Kill heavy memory hogs first before resetting swap:
&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="c"&gt;# Find heavy process IDs&lt;/span&gt;
  ps &lt;span class="nt"&gt;-eo&lt;/span&gt; pid,user,%mem,rss,comm &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%mem | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 5

  &lt;span class="c"&gt;# Terminate top memory hogs&lt;/span&gt;
  &lt;span class="nb"&gt;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; &amp;lt;PID_1&amp;gt; &amp;lt;PID_2&amp;gt;

  &lt;span class="c"&gt;# Confirm available memory increased, then reset swap&lt;/span&gt;
  &lt;span class="nb"&gt;sudo &lt;/span&gt;swapoff &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;swapon &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verify ZRAM status:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Expected Output:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STYPE      PRIORITY
   /dev/zram0 zstd          3.8G   4K    59B    12K partition       100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verify live memory metrics:&lt;/strong&gt;
Run &lt;code&gt;btop&lt;/code&gt; or check &lt;code&gt;free -h&lt;/code&gt;. You should see &lt;code&gt;Swap Used&lt;/code&gt; remain near 0 MB or managed entirely by ZRAM (&lt;code&gt;/dev/zram0&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Available RAM &amp;gt; Free RAM:&lt;/strong&gt; Ignore "Free" memory in Linux; "Available" is what determines whether your apps will lag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ZRAM is essential for 8GB dev setups:&lt;/strong&gt; Compressing RAM in-memory eliminates disk I/O bottlenecks without requiring hardware upgrades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default swappiness is too high:&lt;/strong&gt; Dropping &lt;code&gt;vm.swappiness&lt;/code&gt; from &lt;code&gt;60&lt;/code&gt; to &lt;code&gt;10&lt;/code&gt; stops premature disk swapping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared memory (&lt;code&gt;tmpfs&lt;/code&gt;) locks RAM:&lt;/strong&gt; Always clean unused containers (&lt;code&gt;docker system prune&lt;/code&gt;) and temporary files (&lt;code&gt;/tmp&lt;/code&gt;) to free shared RAM allocations.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>ubuntu</category>
      <category>btop</category>
      <category>devops</category>
    </item>
    <item>
      <title>Setting Up a Secure, Passwordless CI/CD Deploy User with `www-data` Permissions</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Thu, 03 Sep 2026 05:26:56 +0000</pubDate>
      <link>https://dev.to/plabonasad/setting-up-a-secure-passwordless-cicd-deploy-user-with-www-data-permissions-3k35</link>
      <guid>https://dev.to/plabonasad/setting-up-a-secure-passwordless-cicd-deploy-user-with-www-data-permissions-3k35</guid>
      <description>&lt;p&gt;When automating web deployments using tools like GitHub Actions, GitLab CI/CD, or Jenkins, your runner needs a dedicated server user to log in and deploy files. However, misconfiguring this user often leads to two major headaches: "Permission Denied" errors from your web server, or critical security vulnerabilities from over-privileged access.This guide will walk you through setting up a dedicated deploy user owned by the www-data group, enabling secure passwordless execution, and fixing file permission bottlenecks before they break your pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  1: Create the User and Configure Group Alignment
&lt;/h3&gt;

&lt;p&gt;Your web server (Nginx/Apache) usually runs as www-data. By adding the deploy user to the www-data group, both entities can manipulate the web files seamlessly.Run these commands as root or an existing administrator:&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="c"&gt;# 1. Create the deploy user&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;adduser deploy

&lt;span class="c"&gt;# 2. Add the user to the sudo and www-data groups&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; &lt;span class="nb"&gt;sudo&lt;/span&gt;,www-data deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2: Grant Least-Privilege Passwordless Sudo
&lt;/h3&gt;

&lt;p&gt;Giving your CI/CD user unrestricted root access (NOPASSWD: ALL) means a leak in your CI/CD repository gives attackers complete control of your server. Instead, restrict passwordless access strictly to the services your deploy script needs to restart.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the sudoers configuration file safely: &lt;code&gt;sudo visudo&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Scroll to the very end of the file and append the specific commands your script requires (separated by commas). Always use absolute binary paths:
&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="c"&gt;# Allow deploy user to restart Nginx and reload systemd without a password&lt;/span&gt;
deploy &lt;span class="nv"&gt;ALL&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;ALL&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3: Prevent "Permission Denied" Deployment Issues
&lt;/h3&gt;

&lt;p&gt;A common CI/CD pitfall happens when the deploy user uploads a file, and Linux assigns it strict default permissions (644 or 700). Because of this, the web server (www-data) suddenly loses the ability to write to or read that new file.To fix this permanently, configure a shared directory mask and inherit group ownership:&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="c"&gt;# 1. Change ownership of your web directory&lt;/span&gt;
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; deploy:www-data /var/www/html

&lt;span class="c"&gt;# 2. Set the SetGID bit so new files automatically inherit the 'www-data' group&lt;/span&gt;
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; g+s /var/www/html

&lt;span class="c"&gt;# 3. Ensure the deploy user creates files that the group can write to&lt;/span&gt;
&lt;span class="c"&gt;# Open the user's bash profile:&lt;/span&gt;
nano /home/deploy/.bashrc

&lt;span class="c"&gt;# Append this line at the very bottom:&lt;/span&gt;
&lt;span class="nb"&gt;umask &lt;/span&gt;002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4: Verify the Setup
&lt;/h3&gt;

&lt;p&gt;Test the configuration locally on the server before hooking up your CI/CD pipeline:&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="c"&gt;# Switch to the deploy user&lt;/span&gt;
su - deploy

&lt;span class="c"&gt;# Test passwordless access on an allowed command&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx

&lt;span class="c"&gt;# Test passwordless access on a restricted command (Should prompt for password)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>vps</category>
      <category>ubuntu</category>
      <category>cicd</category>
      <category>githubactions</category>
    </item>
    <item>
      <title>Mastering SSH Config on Ubuntu: Simplify Your Remote Connections</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Wed, 02 Sep 2026 06:31:18 +0000</pubDate>
      <link>https://dev.to/plabonasad/mastering-ssh-config-on-ubuntu-simplify-your-remote-connections-m59</link>
      <guid>https://dev.to/plabonasad/mastering-ssh-config-on-ubuntu-simplify-your-remote-connections-m59</guid>
      <description>&lt;p&gt;Stop typing &lt;code&gt;ssh username@192.168.1.100 -p 2222 -i ~/.ssh/my_key.pem&lt;/code&gt; every single time you connect to a server. &lt;/p&gt;

&lt;p&gt;With SSH config (&lt;code&gt;~/.ssh/config&lt;/code&gt;), you can replace long, cumbersome SSH commands with clean shortcuts like &lt;code&gt;ssh prod&lt;/code&gt; or &lt;code&gt;ssh staging&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This guide walks you through setting up and optimizing your SSH configuration file on Ubuntu.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Step 1: Create the SSH Config File
&lt;/h2&gt;

&lt;p&gt;SSH is strict about permissions. If your configuration or &lt;code&gt;.ssh&lt;/code&gt; folder has overly open permissions, SSH will ignore them for security reasons.&lt;/p&gt;

&lt;p&gt;Run the following commands in your terminal:&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="c"&gt;# Ensure the .ssh directory exists with restricted permissions (700)&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.ssh
&lt;span class="nb"&gt;chmod &lt;/span&gt;700 ~/.ssh

&lt;span class="c"&gt;# Create the config file and set read/write permissions for user only (600)&lt;/span&gt;
&lt;span class="nb"&gt;touch&lt;/span&gt; ~/.ssh/config
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the config file in your favorite text editor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.ssh/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ Core Directives Explained
&lt;/h2&gt;

&lt;p&gt;Before jumping into examples, here are the key directives you'll use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Directive&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The nickname/alias you use in terminal (e.g., &lt;code&gt;ssh myserver&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HostName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The real IP address or domain name of the remote server.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;User&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The username on the remote server (e.g., &lt;code&gt;root&lt;/code&gt;, &lt;code&gt;ubuntu&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The SSH port on the remote server (default is &lt;code&gt;22&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;IdentityFile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Path to the specific private SSH key for this host.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;IdentitiesOnly&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Forces SSH to use only specified key file, preventing access denied errors when holding multiple keys.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🚀 Practical Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Basic Host Shortcut
&lt;/h3&gt;

&lt;p&gt;Instead of typing &lt;code&gt;ssh developer@192.168.1.50&lt;/code&gt;, set up an alias.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="n"&gt;dev&lt;/span&gt;
    &lt;span class="n"&gt;HostName&lt;/span&gt; &lt;span class="m"&gt;192&lt;/span&gt;.&lt;span class="m"&gt;168&lt;/span&gt;.&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="m"&gt;50&lt;/span&gt;
    &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="n"&gt;developer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage:&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;ssh dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Custom Port &amp;amp; Specific Private Key
&lt;/h3&gt;

&lt;p&gt;For servers running on custom ports (e.g., &lt;code&gt;2222&lt;/code&gt;) using a specific SSH key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="n"&gt;staging&lt;/span&gt;
    &lt;span class="n"&gt;HostName&lt;/span&gt; &lt;span class="n"&gt;staging&lt;/span&gt;.&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
    &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="n"&gt;ubuntu&lt;/span&gt;
    &lt;span class="n"&gt;Port&lt;/span&gt; &lt;span class="m"&gt;2222&lt;/span&gt;
    &lt;span class="n"&gt;IdentityFile&lt;/span&gt; ~/.&lt;span class="n"&gt;ssh&lt;/span&gt;/&lt;span class="n"&gt;id_ed25519_staging&lt;/span&gt;
    &lt;span class="n"&gt;IdentitiesOnly&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage:&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;ssh staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Bastion / Jump Host (&lt;code&gt;ProxyJump&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Connecting to an internal server (e.g., private database server &lt;code&gt;10.0.0.5&lt;/code&gt;) through a publicly exposed Bastion/Jump server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# Public Bastion Host
&lt;/span&gt;&lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="n"&gt;bastion&lt;/span&gt;
    &lt;span class="n"&gt;HostName&lt;/span&gt; &lt;span class="n"&gt;bastion&lt;/span&gt;.&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
    &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;
    &lt;span class="n"&gt;IdentityFile&lt;/span&gt; ~/.&lt;span class="n"&gt;ssh&lt;/span&gt;/&lt;span class="n"&gt;id_rsa_bastion&lt;/span&gt;

&lt;span class="c"&gt;# Private Internal Server
&lt;/span&gt;&lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="n"&gt;internal&lt;/span&gt;-&lt;span class="n"&gt;db&lt;/span&gt;
    &lt;span class="n"&gt;HostName&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;5&lt;/span&gt;
    &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="n"&gt;ubuntu&lt;/span&gt;
    &lt;span class="n"&gt;IdentityFile&lt;/span&gt; ~/.&lt;span class="n"&gt;ssh&lt;/span&gt;/&lt;span class="n"&gt;id_rsa_internal&lt;/span&gt;
    &lt;span class="n"&gt;ProxyJump&lt;/span&gt; &lt;span class="n"&gt;bastion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage:&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;ssh internal-db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;SSH will automatically route your connection through the bastion server!&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Global Settings &amp;amp; Keep-Alive Pings
&lt;/h3&gt;

&lt;p&gt;Prevent SSH connections from dropping or hanging due to idle timeouts by applying wildcard settings (&lt;code&gt;Host *&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;Host&lt;/span&gt; *
    &lt;span class="n"&gt;ServerAliveInterval&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;
    &lt;span class="n"&gt;ServerAliveCountMax&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
    &lt;span class="n"&gt;AddKeysToAgent&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ServerAliveInterval 60&lt;/code&gt;: Sends a keep-alive signal every 60 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ServerAliveCountMax 3&lt;/code&gt;: Drops connection after 3 unacknowledged signals.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AddKeysToAgent yes&lt;/code&gt;: Automatically adds keys to &lt;code&gt;ssh-agent&lt;/code&gt; upon connection.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. Connection Multiplexing (Blazing Fast Re-connections)
&lt;/h3&gt;

&lt;p&gt;Multiplexing reuses an existing SSH connection for new terminal windows, &lt;code&gt;scp&lt;/code&gt;, or &lt;code&gt;rsync&lt;/code&gt; transfers, eliminating key exchange overhead.&lt;/p&gt;

&lt;p&gt;First, create a socket directory:&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;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.ssh/sockets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add this block to your &lt;code&gt;~/.ssh/config&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;Host&lt;/span&gt; *
    &lt;span class="n"&gt;ControlMaster&lt;/span&gt; &lt;span class="n"&gt;auto&lt;/span&gt;
    &lt;span class="n"&gt;ControlPath&lt;/span&gt; ~/.&lt;span class="n"&gt;ssh&lt;/span&gt;/&lt;span class="n"&gt;sockets&lt;/span&gt;/%&lt;span class="n"&gt;r&lt;/span&gt;@%&lt;span class="n"&gt;h&lt;/span&gt;:%&lt;span class="n"&gt;p&lt;/span&gt;
    &lt;span class="n"&gt;ControlPersist&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 Bonus: Auto-Load SSH Keys into &lt;code&gt;ssh-agent&lt;/code&gt; on Login
&lt;/h2&gt;

&lt;p&gt;Add this snippet to the bottom of your &lt;code&gt;~/.bashrc&lt;/code&gt; (or &lt;code&gt;~/.zshrc&lt;/code&gt;) to ensure &lt;code&gt;ssh-agent&lt;/code&gt; is running without starting multiple redundant instances:&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="c"&gt;# SSH Agent Auto-Start&lt;/span&gt;
&lt;span class="nv"&gt;SSH_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.ssh/agent-environment"&lt;/span&gt;

&lt;span class="k"&gt;function &lt;/span&gt;start_agent &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Initializing new SSH agent..."&lt;/span&gt;
    /usr/bin/ssh-agent | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/^echo/#echo/'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SSH_ENV&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;chmod &lt;/span&gt;600 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SSH_ENV&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SSH_ENV&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
    /usr/bin/ssh-add
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SSH_ENV&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
    &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SSH_ENV&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
    ps &lt;span class="nt"&gt;-ef&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SSH_AGENT_PID&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;ssh-agent&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        start_agent&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else
    &lt;/span&gt;start_agent&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload shell settings:&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;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📌 Summary Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Folder permissions: &lt;code&gt;chmod 700 ~/.ssh&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Config file permissions: &lt;code&gt;chmod 600 ~/.ssh/config&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Specific hosts defined before wildcard (&lt;code&gt;Host *&lt;/code&gt;) sections&lt;/li&gt;
&lt;li&gt;[ ] Tested shortcut with &lt;code&gt;ssh &amp;lt;alias-name&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Coding! 🚀&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>linux</category>
      <category>devops</category>
      <category>shell</category>
    </item>
    <item>
      <title>Ubuntu Expand Swap Space to 4 GB for coolify crash</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Mon, 31 Aug 2026 03:52:16 +0000</pubDate>
      <link>https://dev.to/plabonasad/ubuntu-expand-swap-space-to-4-gb-for-coolify-crash-185b</link>
      <guid>https://dev.to/plabonasad/ubuntu-expand-swap-space-to-4-gb-for-coolify-crash-185b</guid>
      <description>&lt;p&gt;Increasing Swap prevents the server from crashing when memory spikes during builds. Run these commands via SSH on your VPS:&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="c"&gt;# Turn off existing swap&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapoff &lt;span class="nt"&gt;-a&lt;/span&gt;

&lt;span class="c"&gt;# Allocate a 4GB swap file&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;fallocate &lt;span class="nt"&gt;-l&lt;/span&gt; 4G /swapfile

&lt;span class="c"&gt;# Set correct permissions&lt;/span&gt;
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;600 /swapfile

&lt;span class="c"&gt;# Format and activate swap&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;mkswap /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon /swapfile

&lt;span class="c"&gt;# See status&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon &lt;span class="nt"&gt;--show&lt;/span&gt;

&lt;span class="c"&gt;# Verify the new swap size&lt;/span&gt;
free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ubuntu</category>
      <category>devops</category>
      <category>docker</category>
    </item>
    <item>
      <title>Stop Using Slow Language Shims: How to Manage Node, Go, Ruby, and PHP Fast with Mise</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Fri, 28 Aug 2026 06:42:41 +0000</pubDate>
      <link>https://dev.to/plabonasad/stop-using-slow-language-shims-how-to-manage-node-go-ruby-and-php-fast-with-mise-4kl0</link>
      <guid>https://dev.to/plabonasad/stop-using-slow-language-shims-how-to-manage-node-go-ruby-and-php-fast-with-mise-4kl0</guid>
      <description>&lt;h2&gt;
  
  
  Efficient Polyglot Development on Ubuntu: Switching from asdf to mise
&lt;/h2&gt;

&lt;p&gt;Managing multiple development runtimes like Node.js, Ruby, PHP, and Go can severely slow down your terminal if you rely on traditional shim-based tools like asdf. This guide provides a modern setup utilizing &lt;strong&gt;mise&lt;/strong&gt;, a blazing-fast, Rust-based development environment manager designed to optimize workflows for polyglot developers on Ubuntu.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant Switching:&lt;/strong&gt; Modifies your &lt;code&gt;PATH&lt;/code&gt; directly, eliminating shim latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified Config:&lt;/strong&gt; Manages language versions, environment variables, and tasks inside a single &lt;code&gt;mise.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full Compatibility:&lt;/strong&gt; Supports core native backends and works flawlessly with all legacy &lt;code&gt;asdf&lt;/code&gt; plugins.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step-by-Step Setup Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install Ubuntu System Dependencies
&lt;/h3&gt;

&lt;p&gt;Ensure your system has the required build essentials and development libraries to compile runtimes like Ruby and PHP from source.&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;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  curl git build-essential libssl-dev zlib1g-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libreadline-dev libyaml-dev libxml2-dev libxslt1-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libcurl4-openssl-dev libffi-dev pkg-config libsqlite3-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Install Mise
&lt;/h3&gt;

&lt;p&gt;Download and install the native standalone &lt;code&gt;mise&lt;/code&gt; binary.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://mise.jdx.dev/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Activate the Shell Hook
&lt;/h3&gt;

&lt;p&gt;Append the activation hook to your shell configuration so &lt;code&gt;mise&lt;/code&gt; updates your environment dynamically on directory changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Bash (Default Ubuntu Shell):&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;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(~/.local/share/mise/bin/mise activate bash)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For Zsh:&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;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(~/.local/share/mise/bin/mise activate zsh)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Provision Core Language Runtimes
&lt;/h3&gt;

&lt;p&gt;Install the stable runtime baselines globally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise use &lt;span class="nt"&gt;--global&lt;/span&gt; node@lts
mise use &lt;span class="nt"&gt;--global&lt;/span&gt; ruby@latest
mise use &lt;span class="nt"&gt;--global&lt;/span&gt; php@latest
mise use &lt;span class="nt"&gt;--global&lt;/span&gt; go@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Framework Layer Installation
&lt;/h3&gt;

&lt;p&gt;With your primary runtimes activated, provision the ecosystem-specific global command-line interfaces for your frontend and backend frameworks.&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="c"&gt;# Node.js Frameworks (NestJS, Angular, Ionic)&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @nestjs/cli @angular/cli @ionic/cli

&lt;span class="c"&gt;# Ruby Framework (Ruby on Rails)&lt;/span&gt;
gem &lt;span class="nb"&gt;install &lt;/span&gt;rails

&lt;span class="c"&gt;# PHP Framework (Laravel)&lt;/span&gt;
composer global require laravel/installer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Project-Level Versioning
&lt;/h2&gt;

&lt;p&gt;To configure a project directory with strict, isolated tool versions, create a &lt;code&gt;mise.toml&lt;/code&gt; file in your repository root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="c"&gt;# mise.toml&lt;/span&gt;
&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"20.11.0"&lt;/span&gt;
&lt;span class="py"&gt;go&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1.22.0"&lt;/span&gt;
&lt;span class="py"&gt;php&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8.3.2"&lt;/span&gt;
&lt;span class="py"&gt;ruby&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"3.3.0"&lt;/span&gt;

&lt;span class="nn"&gt;[env]&lt;/span&gt;
&lt;span class="py"&gt;DATABASE_URL&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"postgresql://localhost/my_app"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whenever you &lt;code&gt;cd&lt;/code&gt; into this directory, &lt;code&gt;mise&lt;/code&gt; will seamlessly switch to these exact versions.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>devops</category>
      <category>linux</category>
      <category>tools</category>
    </item>
    <item>
      <title>Generate ssh-key, config and quick access server</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Mon, 16 Feb 2026 07:13:40 +0000</pubDate>
      <link>https://dev.to/plabonasad/generate-ssh-key-config-and-quick-access-server-49j6</link>
      <guid>https://dev.to/plabonasad/generate-ssh-key-config-and-quick-access-server-49j6</guid>
      <description>&lt;h2&gt;
  
  
  What we do?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Generate the New SSH Key&lt;/li&gt;
&lt;li&gt;Copy the Public Key to the Server&lt;/li&gt;
&lt;li&gt;Configure the SSH Client&lt;/li&gt;
&lt;li&gt;Test the Connection&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  At a glance to see Diagram
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  To Do
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Generate the New SSH Key (whithout passphrase)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your_email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Copy the Public Key to the Server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-copy-id &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/id_rsa_deploy.pub server-user@server-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Configure the SSH Client
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Host deploy-server
    HostName server-ip
    User server-user
    IdentityFile ~/.ssh/id_rsa_deploy
    IdentitiesOnly &lt;span class="nb"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Test the Connection
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh deploy-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  (Important): Fix permissions (if SSH refuses key)
&lt;/h2&gt;

&lt;p&gt;Run these on your deployment machine:&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;chmod &lt;/span&gt;700 ~/.ssh
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/deploy_key
&lt;span class="nb"&gt;chmod &lt;/span&gt;644 ~/.ssh/deploy_key.pub
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⭐ Bonus Point:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Securely copy file/folder from local to server
&lt;/h4&gt;

&lt;p&gt;File copy from local to server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp file_name server_name_prod:/path_of_target_directory

// Example
scp index.html server_name1:/var/www/app1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Folder copy from local to server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp &lt;span class="nt"&gt;-r&lt;/span&gt; ./dist/&lt;span class="k"&gt;*&lt;/span&gt; server_name_prod:/path_of_target_directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>devops</category>
      <category>linux</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>HTTP STATUS CODE, you need to know for API Development</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Fri, 31 Oct 2025 01:54:21 +0000</pubDate>
      <link>https://dev.to/plabonasad/http-status-code-you-need-to-know-for-api-development-pme</link>
      <guid>https://dev.to/plabonasad/http-status-code-you-need-to-know-for-api-development-pme</guid>
      <description>&lt;p&gt;HTTP status codes are 3-digit numbers returned by a web server to indicate the result of a client's request/response.&lt;/p&gt;

&lt;p&gt;In API development choosing the right codes enhances clarity, debugging, and align with  industry standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it Important?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automated error handling in client applications&lt;/li&gt;
&lt;li&gt;Proper caching behavior by intermediary servers&lt;/li&gt;
&lt;li&gt;Meaningful monitoring and alerting in production systems&lt;/li&gt;
&lt;li&gt;Better developer experience during integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Five Categories (1xx–5xx):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Informational responses (100 – 199)&lt;/li&gt;
&lt;li&gt;Successful responses (200 – 299)&lt;/li&gt;
&lt;li&gt;Redirection messages (300 – 399)&lt;/li&gt;
&lt;li&gt;Client error responses (400 – 499)&lt;/li&gt;
&lt;li&gt;Server error responses (500 – 599)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🟦 1xx – Informational
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Typical Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Continue&lt;/td&gt;
&lt;td&gt;Server has received the headers; client should continue.&lt;/td&gt;
&lt;td&gt;Rarely used directly; used in chunked requests.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;101&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Switching Protocols&lt;/td&gt;
&lt;td&gt;Server switches protocols as requested by the client.&lt;/td&gt;
&lt;td&gt;WebSocket handshake upgrade.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;102&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Processing&lt;/td&gt;
&lt;td&gt;WebDAV: server is processing but no response yet.&lt;/td&gt;
&lt;td&gt;Long-running requests, WebDAV.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;103&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Early Hints&lt;/td&gt;
&lt;td&gt;Suggests headers (like Link) before final response.&lt;/td&gt;
&lt;td&gt;Performance optimizations (preload assets).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🟩 2xx – Success
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Typical Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;200&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OK&lt;/td&gt;
&lt;td&gt;Request succeeded; response depends on method.&lt;/td&gt;
&lt;td&gt;GET returns resource; POST may return created resource.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;201&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Created&lt;/td&gt;
&lt;td&gt;Resource successfully created.&lt;/td&gt;
&lt;td&gt;POST /resources -&amp;gt; response includes Location header.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;202&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Accepted&lt;/td&gt;
&lt;td&gt;Request accepted for processing, not completed.&lt;/td&gt;
&lt;td&gt;Async operations queued.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;203&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Non-Authoritative Information&lt;/td&gt;
&lt;td&gt;Returned meta-information modified from origin.&lt;/td&gt;
&lt;td&gt;Proxy or transformation scenarios.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;204&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No Content&lt;/td&gt;
&lt;td&gt;Success but no body returned.&lt;/td&gt;
&lt;td&gt;Successful DELETE or PUT with no body response.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;205&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reset Content&lt;/td&gt;
&lt;td&gt;Client should reset the view.&lt;/td&gt;
&lt;td&gt;HTML forms reset after a successful request.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;206&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Partial Content&lt;/td&gt;
&lt;td&gt;Partial GET due to Range header.&lt;/td&gt;
&lt;td&gt;Resuming downloads, media streaming.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;207&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-Status&lt;/td&gt;
&lt;td&gt;WebDAV; multiple separate responses.&lt;/td&gt;
&lt;td&gt;Batch WebDAV operations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;208&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Already Reported&lt;/td&gt;
&lt;td&gt;WebDAV: members of a DAV binding already reported.&lt;/td&gt;
&lt;td&gt;WebDAV multistatus optimization.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;226&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IM Used&lt;/td&gt;
&lt;td&gt;Delta encoding; server fulfilled with a delta.&lt;/td&gt;
&lt;td&gt;Rare: HTTP Delta encoding (RFC 3229).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🟨 3xx – Redirection
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Typical Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;300&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiple Choices&lt;/td&gt;
&lt;td&gt;Multiple representation options for the resource.&lt;/td&gt;
&lt;td&gt;Content negotiation or choices page.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;301&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moved Permanently&lt;/td&gt;
&lt;td&gt;Resource moved permanently; update bookmarks.&lt;/td&gt;
&lt;td&gt;Permanent redirects (SEO-friendly).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;302&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Found (Temporary Redirect)&lt;/td&gt;
&lt;td&gt;Temporary redirect; user-agent may change method.&lt;/td&gt;
&lt;td&gt;Temporarily redirecting resources.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;303&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;See Other&lt;/td&gt;
&lt;td&gt;Redirect using GET to retrieve result.&lt;/td&gt;
&lt;td&gt;After POST, redirect to a GET-able result (PRG pattern).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;304&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not Modified&lt;/td&gt;
&lt;td&gt;Resource not modified; use cached copy.&lt;/td&gt;
&lt;td&gt;Conditional GET with ETag/If-Modified-Since.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;305&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use Proxy (deprecated)&lt;/td&gt;
&lt;td&gt;Must use the proxy given in Location.&lt;/td&gt;
&lt;td&gt;Deprecated — avoid using.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;307&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporary Redirect&lt;/td&gt;
&lt;td&gt;Temporary redirect; method and body must not change.&lt;/td&gt;
&lt;td&gt;Safer temporary redirect than 302 for non-GET methods.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;308&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Permanent Redirect&lt;/td&gt;
&lt;td&gt;Permanent redirect; method and body preserved.&lt;/td&gt;
&lt;td&gt;Permanent redirect that preserves method (replacement for 301).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🟥 4xx – Client Errors
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Typical Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;400&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bad Request&lt;/td&gt;
&lt;td&gt;Malformed syntax or invalid request.&lt;/td&gt;
&lt;td&gt;Validation errors, parse failures.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;401&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unauthorized&lt;/td&gt;
&lt;td&gt;Authentication required or failed.&lt;/td&gt;
&lt;td&gt;Missing/invalid authentication token.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;402&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Payment Required&lt;/td&gt;
&lt;td&gt;Reserved for future use.&lt;/td&gt;
&lt;td&gt;Rarely used (some APIs use it for billing).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;403&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Forbidden&lt;/td&gt;
&lt;td&gt;Server understood but refuses to authorize.&lt;/td&gt;
&lt;td&gt;Valid auth but insufficient permissions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;404&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not Found&lt;/td&gt;
&lt;td&gt;Resource not found.&lt;/td&gt;
&lt;td&gt;Wrong URL, missing resource.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;405&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Method Not Allowed&lt;/td&gt;
&lt;td&gt;Method not allowed for resource.&lt;/td&gt;
&lt;td&gt;POST used where only GET allowed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;406&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not Acceptable&lt;/td&gt;
&lt;td&gt;Content negotiation failed.&lt;/td&gt;
&lt;td&gt;Requested content type not supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;407&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proxy Authentication Required&lt;/td&gt;
&lt;td&gt;Client must authenticate with proxy.&lt;/td&gt;
&lt;td&gt;Requests through an authenticating proxy.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;408&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Request Timeout&lt;/td&gt;
&lt;td&gt;Server timed out waiting for the request.&lt;/td&gt;
&lt;td&gt;Large uploads interrupted or slow clients.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;409&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conflict&lt;/td&gt;
&lt;td&gt;Request could not be completed because of a conflict.&lt;/td&gt;
&lt;td&gt;Versioning conflicts, duplicate unique fields.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;410&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gone&lt;/td&gt;
&lt;td&gt;Resource permanently removed.&lt;/td&gt;
&lt;td&gt;Deleted resources that should not be requested again.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;411&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Length Required&lt;/td&gt;
&lt;td&gt;Content-Length header required.&lt;/td&gt;
&lt;td&gt;Servers requiring known-length requests.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;412&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Precondition Failed&lt;/td&gt;
&lt;td&gt;One of the preconditions failed (If-Match, etc.).&lt;/td&gt;
&lt;td&gt;Optimistic concurrency control (ETag mismatch).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;413&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Payload Too Large&lt;/td&gt;
&lt;td&gt;Request entity too large.&lt;/td&gt;
&lt;td&gt;Large file uploads exceeding limits.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;414&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;URI Too Long&lt;/td&gt;
&lt;td&gt;Request URI too long.&lt;/td&gt;
&lt;td&gt;Overlong query strings or improperly built URLs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;415&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unsupported Media Type&lt;/td&gt;
&lt;td&gt;Unsupported payload media type.&lt;/td&gt;
&lt;td&gt;Sending XML to an API that accepts JSON only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;416&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Range Not Satisfiable&lt;/td&gt;
&lt;td&gt;Invalid Range header value.&lt;/td&gt;
&lt;td&gt;Requesting byte ranges outside file length.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;417&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Expectation Failed&lt;/td&gt;
&lt;td&gt;Server cannot meet Expect header.&lt;/td&gt;
&lt;td&gt;Rare; related to Expect: 100-continue.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;418&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I'm a teapot&lt;/td&gt;
&lt;td&gt;April Fools' joke (RFC 2324).&lt;/td&gt;
&lt;td&gt;Easter-egg; not used in real APIs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;421&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Misdirected Request&lt;/td&gt;
&lt;td&gt;Server not able to produce response.&lt;/td&gt;
&lt;td&gt;Requests routed incorrectly in multi-host setups.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;422&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unprocessable Entity&lt;/td&gt;
&lt;td&gt;Semantic errors in the request entity.&lt;/td&gt;
&lt;td&gt;Validation errors with well-formed JSON.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;423&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Locked&lt;/td&gt;
&lt;td&gt;Resource is locked (WebDAV).&lt;/td&gt;
&lt;td&gt;Concurrency controls in WebDAV.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;424&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Failed Dependency&lt;/td&gt;
&lt;td&gt;Operation failed due to earlier failure.&lt;/td&gt;
&lt;td&gt;A step in a multi-step request failed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;425&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Too Early&lt;/td&gt;
&lt;td&gt;Server reluctant to process early data.&lt;/td&gt;
&lt;td&gt;Protect against replay attacks (experimental).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;426&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Upgrade Required&lt;/td&gt;
&lt;td&gt;Client should switch protocols.&lt;/td&gt;
&lt;td&gt;Require TLS or a different protocol.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;428&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Precondition Required&lt;/td&gt;
&lt;td&gt;Require preconditions (e.g., If-Match).&lt;/td&gt;
&lt;td&gt;Prevent lost updates by requiring ETags.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;429&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Too Many Requests&lt;/td&gt;
&lt;td&gt;Rate limiting; client should slow down.&lt;/td&gt;
&lt;td&gt;API throttling; include Retry-After header.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;431&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Request Header Fields Too Large&lt;/td&gt;
&lt;td&gt;Headers too large to process.&lt;/td&gt;
&lt;td&gt;Oversized cookies or headers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;451&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unavailable For Legal Reasons&lt;/td&gt;
&lt;td&gt;Resource unavailable due to legal reasons.&lt;/td&gt;
&lt;td&gt;Geo-blocking or court-ordered takedown.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  ⛔ 5xx – Server Errors
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Typical Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;500&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Internal Server Error&lt;/td&gt;
&lt;td&gt;Generic server error.&lt;/td&gt;
&lt;td&gt;Unhandled exceptions, server crashes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;501&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not Implemented&lt;/td&gt;
&lt;td&gt;Server does not support requested functionality.&lt;/td&gt;
&lt;td&gt;Feature not implemented on server.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;502&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bad Gateway&lt;/td&gt;
&lt;td&gt;Invalid response from upstream server.&lt;/td&gt;
&lt;td&gt;Reverse proxy or gateway error.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;503&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Service Unavailable&lt;/td&gt;
&lt;td&gt;Server overloaded or down for maintenance.&lt;/td&gt;
&lt;td&gt;Temporary downtime; include Retry-After.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;504&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gateway Timeout&lt;/td&gt;
&lt;td&gt;Upstream server timed out.&lt;/td&gt;
&lt;td&gt;Slow upstream service causing timeout.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;505&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HTTP Version Not Supported&lt;/td&gt;
&lt;td&gt;HTTP version not supported by server.&lt;/td&gt;
&lt;td&gt;Rare in modern APIs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;506&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Variant Also Negotiates&lt;/td&gt;
&lt;td&gt;Server configuration error in content negotiation.&lt;/td&gt;
&lt;td&gt;Rare; indicates misconfiguration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;507&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Insufficient Storage&lt;/td&gt;
&lt;td&gt;WebDAV: insufficient storage.&lt;/td&gt;
&lt;td&gt;Servers running out of storage for the request.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;508&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Loop Detected&lt;/td&gt;
&lt;td&gt;WebDAV: infinite loop detected.&lt;/td&gt;
&lt;td&gt;Misconfigured resource references.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;509&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bandwidth Limit Exceeded (non-standard)&lt;/td&gt;
&lt;td&gt;Informational; not an official status.&lt;/td&gt;
&lt;td&gt;Some servers/providers use this for bandwidth caps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;510&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not Extended&lt;/td&gt;
&lt;td&gt;Further extensions required to fulfill request.&lt;/td&gt;
&lt;td&gt;Rare; extension negotiation needed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;511&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Network Authentication Required&lt;/td&gt;
&lt;td&gt;Client needs to authenticate to gain network access.&lt;/td&gt;
&lt;td&gt;Captive portal or network auth required.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;HTTP status codes are not just numbers—they are a language between the front-end and back-end. A well-designed API should use them properly to communicate intent, success, or failure. This improves both developer experience and debuggability.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>http</category>
      <category>api</category>
    </item>
    <item>
      <title>Why Angular? Kickstart Your Journey in 2025</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Thu, 02 Oct 2025 01:56:07 +0000</pubDate>
      <link>https://dev.to/plabonasad/why-angular-kickstart-your-journey-in-2025-pij</link>
      <guid>https://dev.to/plabonasad/why-angular-kickstart-your-journey-in-2025-pij</guid>
      <description>&lt;h1&gt;
  
  
  Why Angular? Kickstart Your Journey in 2025
&lt;/h1&gt;

&lt;p&gt;Angular is not just another JavaScript framework—it’s a &lt;strong&gt;complete ecosystem&lt;/strong&gt; for building modern web and mobile applications.&lt;br&gt;&lt;br&gt;
If you’re looking to level up as a developer in 2025, Angular gives you the tools, structure, and scalability you need.&lt;/p&gt;


&lt;h2&gt;
  
  
  What We’ll Cover
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Angular is worth learning in 2025
&lt;/li&gt;
&lt;li&gt;How Angular sets you apart as a developer
&lt;/li&gt;
&lt;li&gt;The bonus: one skill for both web &lt;strong&gt;and&lt;/strong&gt; mobile (Ionic)
&lt;/li&gt;
&lt;li&gt;A quick "Hello Angular" example
&lt;/li&gt;
&lt;/ul&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complete Framework&lt;/strong&gt;: Everything you need—routing, forms, HTTP, state, testing—is built-in.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Ready&lt;/strong&gt;: Trusted by Google and used in large-scale apps worldwide.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable by Design&lt;/strong&gt;: From small projects to enterprise solutions, Angular’s modularity shines.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent Updates&lt;/strong&gt;: Angular 20 (latest version) brings modern features like &lt;strong&gt;zoneless apps&lt;/strong&gt; and performance boosts.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One Skill, Two Platforms&lt;/strong&gt;: Learn Angular once, and you can build &lt;strong&gt;web apps&lt;/strong&gt; and &lt;strong&gt;hybrid mobile apps with Ionic&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Quick Example: Hello Angular Component
&lt;/h2&gt;

&lt;p&gt;Here’s how simple it is to create your first Angular component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-hello&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;h1&amp;gt;Hello Angular &amp;lt;/h1&amp;gt;`&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HelloComponent&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Angular is more than a framework—it’s a career investment.&lt;br&gt;
Whether you’re building enterprise web apps or mobile apps with Ionic, Angular keeps you future-proof in 2025 and beyond.&lt;/p&gt;

&lt;h4&gt;
  
  
  📌 Next article in the series: Project Setup &amp;amp; Clean Folder Structure
&lt;/h4&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>angular</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Deep learning about DNS records!</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Mon, 22 Sep 2025 09:21:56 +0000</pubDate>
      <link>https://dev.to/plabonasad/deep-learning-about-dns-records-2mkh</link>
      <guid>https://dev.to/plabonasad/deep-learning-about-dns-records-2mkh</guid>
      <description>&lt;h1&gt;
  
  
  🌍 DNS &amp;amp; VPS Setup Guide (Example: &lt;code&gt;plabonasad.xyz&lt;/code&gt;)
&lt;/h1&gt;

&lt;p&gt;When you purchase a &lt;strong&gt;domain&lt;/strong&gt; and a &lt;strong&gt;VPS hosting&lt;/strong&gt;, you need to connect them.&lt;br&gt;&lt;br&gt;
This is done using &lt;strong&gt;DNS records&lt;/strong&gt; and configuring your VPS (like Nginx/Apache).  &lt;/p&gt;

&lt;p&gt;This guide is &lt;strong&gt;brief, step-by-step, and developer-friendly&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  📖 Quick Overview: DNS Records
&lt;/h2&gt;

&lt;p&gt;DNS is like the &lt;strong&gt;phonebook of the internet&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
It tells the browser or mail server &lt;em&gt;where to go&lt;/em&gt; when someone uses your domain.  &lt;/p&gt;
&lt;h3&gt;
  
  
  Common DNS Records
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Record&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Points domain → IPv4 address&lt;/td&gt;
&lt;td&gt;&lt;code&gt;plabonasad.xyz → 123.45.67.89&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AAAA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Points domain → IPv6 address&lt;/td&gt;
&lt;td&gt;&lt;code&gt;plabonasad.xyz → 2606:4700:4700::1111&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Directs emails → mail server&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ MX 10 mail.google.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CNAME&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Points domain → another domain&lt;/td&gt;
&lt;td&gt;&lt;code&gt;www → plabonasad.xyz&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TXT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stores text (for verification &amp;amp; security)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"v=spf1 include:_spf.google.com ~all"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;👉 For website setup, the &lt;strong&gt;A record&lt;/strong&gt; is the most important (connects your domain → VPS IP).  &lt;/p&gt;


&lt;h2&gt;
  
  
  🚀 Step 1: Get Your VPS Public IP
&lt;/h2&gt;

&lt;p&gt;Login to your VPS provider dashboard and copy your &lt;strong&gt;IPv4 address&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Example: 123.45.67.89&lt;/p&gt;


&lt;h2&gt;
  
  
  🚀 Step 2: Set DNS Records
&lt;/h2&gt;

&lt;p&gt;Go to your &lt;strong&gt;domain registrar DNS settings&lt;/strong&gt; (where you bought &lt;code&gt;plabonasad.xyz&lt;/code&gt;).&lt;br&gt;&lt;br&gt;
Add the following records:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;@&lt;/td&gt;
&lt;td&gt;123.45.67.89&lt;/td&gt;
&lt;td&gt;Root domain → VPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;www&lt;/td&gt;
&lt;td&gt;123.45.67.89&lt;/td&gt;
&lt;td&gt;www → VPS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;👉 This means:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;plabonasad.xyz&lt;/code&gt; → goes to your VPS
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;www.plabonasad.xyz&lt;/code&gt; → goes to your VPS
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🌍 Overview Flow (Diagram)
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Browser (plabonasad.xyz)
          |
          v
   DNS Lookup (A Record → 123.45.67.89)
          |
          v
       VPS Server
          |
          v
      Nginx/Apache
          |
          v
     Your Website

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

&lt;/div&gt;

&lt;h2&gt;
  
  
  🚀 Step 3: Configure Nginx on VPS
&lt;/h2&gt;

&lt;p&gt;SSH into your VPS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh username@123.45.67.89
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a config for your domain:&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;nano /etc/nginx/sites-available/plabonasad.xyz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy nginx config code:&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="c"&gt;# Redirect everything to https://plabonasad.xyz&lt;/span&gt;
server &lt;span class="o"&gt;{&lt;/span&gt;
    listen 80&lt;span class="p"&gt;;&lt;/span&gt;
    server_name www.plabonasad.xyz&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;301 https://plabonasad.xyz&lt;span class="nv"&gt;$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Main site (canonical domain)&lt;/span&gt;
server &lt;span class="o"&gt;{&lt;/span&gt;
    listen 80&lt;span class="p"&gt;;&lt;/span&gt;
    server_name plabonasad.xyz&lt;span class="p"&gt;;&lt;/span&gt;

    root /var/www/app1/public&lt;span class="p"&gt;;&lt;/span&gt;
    index index.php index.html&lt;span class="p"&gt;;&lt;/span&gt;

    location / &lt;span class="o"&gt;{&lt;/span&gt;
        try_files &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;/ /index.php?&lt;span class="nv"&gt;$query_string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    location ~ &lt;span class="se"&gt;\.&lt;/span&gt;php&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
        include snippets/fastcgi-php.conf&lt;span class="p"&gt;;&lt;/span&gt;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock&lt;span class="p"&gt;;&lt;/span&gt;
        fastcgi_param SCRIPT_FILENAME &lt;span class="nv"&gt;$document_root$fastcgi_script_name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        include fastcgi_params&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    location ~ /&lt;span class="se"&gt;\.&lt;/span&gt;ht &lt;span class="o"&gt;{&lt;/span&gt;
        deny all&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Enable the site by symlink:&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 ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/plabonasad.xyz /etc/nginx/sites-enabled/
&lt;span class="nb"&gt;sudo &lt;/span&gt;nginx &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Test DNS
&lt;/h2&gt;

&lt;p&gt;Check if your domain points to the VPS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig plabonasad.xyz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use &lt;a href="https://dnschecker.org/" rel="noopener noreferrer"&gt;dnschecker.org&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Secure with SSL (Optional but Recommended)
&lt;/h2&gt;

&lt;p&gt;Install Certbot:&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;apt &lt;span class="nb"&gt;install &lt;/span&gt;certbot python3-certbot-nginx &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run:&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;certbot &lt;span class="nt"&gt;--nginx&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; plabonasad.xyz &lt;span class="nt"&gt;-d&lt;/span&gt; www.plabonasad.xyz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your site will load with HTTPS 🔒.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A record connects domain → server IP&lt;/li&gt;
&lt;li&gt;Nginx/Apache serves the website from VPS&lt;/li&gt;
&lt;li&gt;SSL (Certbot) secures with HTTPS&lt;/li&gt;
&lt;li&gt;Other records (MX, CNAME, TXT) are useful for email &amp;amp; verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now when someone types plabonasad.xyz, they’ll reach your VPS-hosted site 🎉.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>programming</category>
      <category>linux</category>
    </item>
    <item>
      <title>Redis Basics – Getting Started and Core Data Structures</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Thu, 18 Sep 2025 02:13:40 +0000</pubDate>
      <link>https://dev.to/plabonasad/redis-basics-getting-started-and-core-data-structures-33k3</link>
      <guid>https://dev.to/plabonasad/redis-basics-getting-started-and-core-data-structures-33k3</guid>
      <description>&lt;p&gt;Redis is more than just a cache—it’s a powerful in-memory data store that supports real-time apps, queues, leaderboards, and more.&lt;/p&gt;

&lt;p&gt;In this beginner-friendly guide, we’ll cover how to:&lt;br&gt;
✅ Set up Redis locally or with Docker&lt;br&gt;
✅ Use Redis CLI for quick testing&lt;br&gt;
✅ Work with core data structures (Strings, Hashes, Lists, Sets, Sorted Sets)&lt;/p&gt;

&lt;p&gt;🚀 Setup &amp;amp; Basics&lt;br&gt;
Start Redis&lt;/p&gt;
&lt;h1&gt;
  
  
  Start Redis (local)
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;redis-server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Run with Docker&lt;br&gt;
&lt;code&gt;docker run --name redis -p 6379:6379 -d redis&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Open Redis CLI&lt;br&gt;
&lt;code&gt;redis-cli&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Test Connection&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;PING
&lt;span class="c"&gt;# PONG&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📦 Core Data Structures&lt;br&gt;
🔹 Strings&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;SET name &lt;span class="s2"&gt;"Asad"&lt;/span&gt;
GET name
INCR counter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use cases: counters, sessions, caching simple values.&lt;/p&gt;

&lt;p&gt;Diagram:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;key    →   value
&lt;span class="nt"&gt;----------------&lt;/span&gt;
name   →   &lt;span class="s2"&gt;"Asad"&lt;/span&gt;
counter →   1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔹 Hashes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;HSET user:1 name &lt;span class="s2"&gt;"Asad"&lt;/span&gt; age &lt;span class="s2"&gt;"25"&lt;/span&gt;
HGETALL user:1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use cases: store JSON-like objects (e.g., user profiles).&lt;/p&gt;

&lt;p&gt;Diagram:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;user:1
 ├── name → &lt;span class="s2"&gt;"Asad"&lt;/span&gt;
 └── age  → &lt;span class="s2"&gt;"25"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔹 Lists&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;LPUSH tasks &lt;span class="s2"&gt;"task1"&lt;/span&gt;
RPUSH tasks &lt;span class="s2"&gt;"task2"&lt;/span&gt;
LPOP tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use cases: queues (FIFO), stacks (LIFO).&lt;/p&gt;

&lt;p&gt;Diagram (FIFO Queue):&lt;/p&gt;

&lt;p&gt;[ task1 ] → [ task2 ] → [ task3 ]&lt;/p&gt;

&lt;p&gt;🔹 Sets&lt;br&gt;
SADD tags "redis" "database" "cache"&lt;br&gt;
SMEMBERS tags&lt;/p&gt;

&lt;p&gt;Use cases: unique collections (tags, categories, followers).&lt;/p&gt;

&lt;p&gt;Diagram:&lt;/p&gt;

&lt;p&gt;tags = { "redis", "database", "cache" }&lt;/p&gt;

&lt;p&gt;🔹 Sorted Sets&lt;br&gt;
ZADD scores 100 "Asad" 200 "Plabon"&lt;br&gt;
ZRANGE scores 0 -1 WITHSCORES&lt;/p&gt;

&lt;p&gt;Use cases: leaderboards, rankings, priority queues.&lt;/p&gt;

&lt;p&gt;Diagram:&lt;/p&gt;

&lt;p&gt;+------+---------+&lt;br&gt;
|User  | Score   |&lt;br&gt;
+------+---------+&lt;br&gt;
|Asad  | 100     |&lt;br&gt;
|Plabon| 200     |&lt;/p&gt;

&lt;p&gt;✅ Wrap-Up&lt;/p&gt;

&lt;p&gt;That’s the foundation of Redis. With just a few commands, you can build counters, queues, and ranking systems.&lt;/p&gt;

&lt;p&gt;👉 In the next article, we’ll go deeper into advanced Redis concepts like Pub/Sub, Streams, persistence, clustering, and real-world AI use cases.&lt;/p&gt;

</description>
      <category>backenddevelopment</category>
      <category>programming</category>
      <category>php</category>
      <category>node</category>
    </item>
  </channel>
</rss>
