<?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.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>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="460"&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;-f&lt;/span&gt; ~/.ssh/id_rsa_deploy &lt;span class="nt"&gt;-N&lt;/span&gt; &lt;span class="s2"&gt;""&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>
    <item>
      <title>VPS Server Setup for Any Application (with Easy Deployment Flow)</title>
      <dc:creator>Md Asaduzzaman</dc:creator>
      <pubDate>Thu, 18 Sep 2025 01:53:08 +0000</pubDate>
      <link>https://dev.to/plabonasad/vps-server-setup-for-any-application-with-easy-deployment-flow-4dl1</link>
      <guid>https://dev.to/plabonasad/vps-server-setup-for-any-application-with-easy-deployment-flow-4dl1</guid>
      <description>&lt;p&gt;When you get a fresh VPS, the first question is: How do I set it up so I can deploy multiple apps easily?&lt;br&gt;
In this guide, I’ll walk you through a full flow setup that works for Laravel, Node.js, Ruby on Rails, or almost any stack.&lt;/p&gt;

&lt;p&gt;We’ll use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;OS: Ubuntu 22.04 LTS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Web Server: Nginx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Process Managers: php-fpm (for PHP), pm2 (for Node.js)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Database: MySQL/MariaDB or PostgreSQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SSL: Let’s Encrypt (Certbot)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SSH Keys: For secure access&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;What You’ll Learn&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By the end of this article, you’ll know how to:&lt;br&gt;
✅ Add SSH access to your VPS&lt;br&gt;
✅ Organize multiple apps on the same server&lt;br&gt;
✅ Manage multiple PHP and Node.js versions&lt;br&gt;
✅ Set up domains and subdomains with Nginx&lt;br&gt;
✅ Secure apps with Let’s Encrypt SSL&lt;br&gt;
✅ Deploy apps with a simple Git + build flow&lt;/p&gt;

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

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

&lt;p&gt;A VPS + a domain&lt;/p&gt;

&lt;p&gt;Basic Linux knowledge (cd, nano, systemctl, etc.)&lt;/p&gt;

&lt;p&gt;SSH key configured for secure login&lt;/p&gt;

&lt;p&gt;Some familiarity with Nginx&lt;/p&gt;

&lt;p&gt;At least one project (Laravel, Node.js, or Rails) to deploy&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Directory Structure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We’ll keep all projects under /var/www/ for organization. This makes it easy to manage multiple apps on the same server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/var/www/
   ├── laravel-app1/
   │     └── public/   &lt;span class="c"&gt;# Laravel public folder&lt;/span&gt;
   ├── laravel-app2/
   │     └── public/
   ├── node-app1/
   ├── node-app2/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Version Management&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Since different projects often require different versions, we’ll use:&lt;/p&gt;

&lt;p&gt;php-fpm for multiple PHP versions&lt;/p&gt;

&lt;p&gt;NVM for multiple Node.js versions&lt;/p&gt;

&lt;p&gt;4.1 PHP&lt;/p&gt;

&lt;p&gt;Install multiple PHP versions (7.4, 8.1, 8.2, etc.) with php-fpm.&lt;br&gt;
Each app points to its own PHP socket:&lt;/p&gt;

&lt;p&gt;Laravel App1 → PHP 8.1 → /run/php/php8.1-fpm.sock&lt;/p&gt;

&lt;p&gt;Laravel App2 → PHP 8.2 → /run/php/php8.2-fpm.sock&lt;/p&gt;

&lt;p&gt;Nginx will route each site to the right PHP version.&lt;/p&gt;

&lt;p&gt;4.2 Node.js&lt;/p&gt;

&lt;p&gt;Use NVM to install the Node.js version your project needs.&lt;/p&gt;

&lt;p&gt;Use PM2 to keep apps running in the background.&lt;/p&gt;

&lt;p&gt;Nginx will reverse-proxy to the correct port:&lt;/p&gt;

&lt;p&gt;node-app1.yourdomain.com → localhost:3001&lt;br&gt;&lt;br&gt;
node-app2.yourdomain.com → localhost:3002  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Domain &amp;amp; Subdomains&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Point your DNS records to your VPS IP:&lt;/p&gt;

&lt;p&gt;app1.yourdomain.com   → VPS IP&lt;br&gt;
app2.yourdomain.com   → VPS IP&lt;br&gt;
node1.yourdomain.com  → VPS IP&lt;br&gt;
node2.yourdomain.com  → VPS IP&lt;/p&gt;

&lt;p&gt;On the server, create Nginx configs for each app:&lt;/p&gt;

&lt;p&gt;/etc/nginx/sites-available/&lt;br&gt;
   ├── laravel-app1.conf&lt;br&gt;
   ├── laravel-app2.conf&lt;br&gt;
   ├── node-app1.conf&lt;br&gt;
   ├── node-app2.conf&lt;/p&gt;

&lt;p&gt;Then symlink them to sites-enabled/:&lt;/p&gt;

&lt;p&gt;sudo ln -s /etc/nginx/sites-available/laravel-app1.conf /etc/nginx/sites-enabled/&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SSL Certificates&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use Let’s Encrypt with Certbot:&lt;/p&gt;

&lt;p&gt;Free SSL for each domain/subdomain&lt;/p&gt;

&lt;p&gt;Auto-renew every 90 days&lt;/p&gt;

&lt;p&gt;Works directly with Nginx&lt;/p&gt;

&lt;p&gt;sudo certbot --nginx -d app1.yourdomain.com -d &lt;a href="http://www.app1.yourdomain.com" rel="noopener noreferrer"&gt;www.app1.yourdomain.com&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deployment Flow&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here’s the simple deployment workflow you can follow for each project:&lt;/p&gt;

&lt;p&gt;Push your code to GitHub.&lt;/p&gt;

&lt;p&gt;SSH into your VPS.&lt;/p&gt;

&lt;p&gt;Clone or pull the project from GitHub.&lt;/p&gt;

&lt;p&gt;Install dependencies:&lt;/p&gt;

&lt;p&gt;Laravel → composer install &amp;amp;&amp;amp; npm run build&lt;/p&gt;

&lt;p&gt;Node.js → npm install &amp;amp;&amp;amp; pm2 restart &lt;/p&gt;

&lt;p&gt;Run migrations/seeds if needed.&lt;/p&gt;

&lt;p&gt;Since Nginx + SSL are already set up, the app goes live instantly. 🚀&lt;/p&gt;

&lt;p&gt;✅ Conclusion&lt;/p&gt;

&lt;p&gt;With this setup, your VPS becomes a multi-app hosting machine.&lt;/p&gt;

&lt;p&gt;PHP apps run side by side with Node.js apps.&lt;/p&gt;

&lt;p&gt;Each project has its own domain/subdomain, SSL, and process manager.&lt;/p&gt;

&lt;p&gt;Deployment is as easy as git pull &amp;amp;&amp;amp; build.&lt;/p&gt;

&lt;p&gt;This gives you the flexibility of a PaaS (like Heroku or Vercel) but with the full control of a VPS.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>laravel</category>
    </item>
  </channel>
</rss>
