<?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: raielly</title>
    <description>The latest articles on DEV Community by raielly (@raielly).</description>
    <link>https://dev.to/raielly</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%2F861371%2F1d3250d6-37bc-49a8-a261-eca458627cff.jpg</url>
      <title>DEV Community: raielly</title>
      <link>https://dev.to/raielly</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raielly"/>
    <language>en</language>
    <item>
      <title>Move Your Repository to a New GitHub Repo on a VPS Hosting Site</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Mon, 13 Oct 2025 16:41:03 +0000</pubDate>
      <link>https://dev.to/raielly/move-your-repository-to-a-new-github-repo-on-a-vps-hosting-site-14a7</link>
      <guid>https://dev.to/raielly/move-your-repository-to-a-new-github-repo-on-a-vps-hosting-site-14a7</guid>
      <description>&lt;p&gt;⚠️ Warning: Live site may go offline temporarily. Perform during low-traffic or maintenance time.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Prepare the New GitHub Repository
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Clone local repository
git clone **YOUR_LOCAL_REPO_PATH**
cd **YOUR_LOCAL_REPO_FOLDER**

# Remove old Git history and reinitialize
rm -rf .git
git init

# Add new repository as remote
git remote add origin git@github-company:**YOUR_ORG/YOUR_NEW_REPO.git

# Push to new repository
git add .
git commit -m "Initial commit"
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 2: Generate SSH Key on VPS
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Generate new SSH key
ssh-keygen -t rsa -b 4096 -C "deploy@**YOUR_COMPANY.com**"

# Save key as
# /home/**YOUR_USER**/.ssh/id_rsa_company

# Copy public key
cat ~/.ssh/id_rsa_company.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Paste the copied key into GitHub → Settings → Deploy Keys&lt;/li&gt;
&lt;li&gt;Check Allow write access&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 3: Configure Multiple SSH Keys
&lt;/h4&gt;



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

&lt;/div&gt;



&lt;p&gt;Add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Personal GitHub
Host github-personal
    HostName github.com
    User git
    IdentityFile /home/**YOUR_USER**/.ssh/id_rsa
    IdentitiesOnly yes

# Company GitHub
Host github-company
    HostName github.com
    User git
    IdentityFile /home/**YOUR_USER**/.ssh/id_rsa_company
    IdentitiesOnly yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Save and exit (CTRL + O, ENTER, CTRL + X)
Test the connection:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh -T git@github-company
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hi **YOUR_COMPANY**! You've successfully authenticated, but GitHub does not provide shell access.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 4: Deploy Code on VPS
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Navigate to web root
cd /home/**YOUR_USER**/htdocs

# Backup old site
mv **YOUR_SITE_FOLDER** **YOUR_SITE_FOLDER**.bak

# Clone new repository
git clone git@github-company:**YOUR_ORG/YOUR_NEW_REPO.git **YOUR_SITE_FOLDER**

# Configure environment variables
cd **YOUR_SITE_FOLDER**
cp .env.example .env
vim .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the following placeholders in .env:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;APP_NAME=**YOUR_APP_NAME**
APP_ENV=**YOUR_APP_ENV**
APP_DEBUG=true/false
APP_URL=https://**YOUR_DOMAIN.com**

DB_CONNECTION=**YOUR_DB_CONNECTION**
DB_HOST=**YOUR_DB_HOST**
DB_PORT=**YOUR_DB_PORT**
DB_DATABASE=**YOUR_DB_NAME**
DB_USERNAME=**YOUR_DB_USER**
DB_PASSWORD=**YOUR_DB_PASSWORD**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Save and exit (ESC, :wq, ENTER)
Install dependencies:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer install
npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Check Node/NPM versions: node -v, npm -v. Install if missing.)&lt;/em&gt;&lt;br&gt;
Build assets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Site is now live with the new repository.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5: Configure GitHub Actions Deployment
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Check private key content
cat ~/.ssh/id_rsa_company

# Add public key to authorized_keys
cat ~/.ssh/id_rsa_company.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys

# Verify authorized_keys
cat ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Copy the key and add it to GitHub Actions → SSH Key Secret
After this, any commit, push, or release can trigger deployment to the VPS automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once this is set up, your live site is fully connected to the new GitHub repository, and all future changes commits, pushes, or releases will automatically deploy to your VPS via GitHub Actions. ✅&lt;/p&gt;

&lt;p&gt;Tip: Always test deployments on a staging environment first if possible, to ensure everything works as expected before affecting your live site.&lt;/p&gt;

&lt;p&gt;HAPPY CODING! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>githubactions</category>
      <category>laravel</category>
      <category>vpshosting</category>
    </item>
    <item>
      <title>1–10 Must CSS Layout Rules (Safari + Responsive Safe)</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Tue, 07 Oct 2025 07:07:50 +0000</pubDate>
      <link>https://dev.to/raielly/1-10-must-css-layout-rules-safari-responsive-safe-4pn8</link>
      <guid>https://dev.to/raielly/1-10-must-css-layout-rules-safari-responsive-safe-4pn8</guid>
      <description>&lt;p&gt;If your website uses native CSS, skipping these guidelines can lead to hidden layout problems on real devices such as iPhones (11–15), Safari, and iPads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Base Setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Always start with a reset or normalize:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Use :root for color + spacing variables.&lt;br&gt;
✅ Define body { font-family; line-height; color; background-color; }.&lt;br&gt;
✅ Set global image styles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;img {
  max-width: 100%;
  height: auto;
  display: block;
}

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

&lt;/div&gt;



&lt;p&gt;✅ Add overflow-x: hidden; on body if animations or transforms move content sideways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Layout Systems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flexbox Tips&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Flex for 1-dimensional layouts (rows or columns only).&lt;/li&gt;
&lt;li&gt;Use Grid for 2-dimensional layouts (rows + columns).&lt;/li&gt;
&lt;li&gt;Common Flex rules:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 1rem;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add fallback for Safari &amp;lt;15 (no gap):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@supports not (gap: 1rem) {
  .flex-item + .flex-item {
    margin-left: 1rem;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grid Tips&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always define rows/columns explicitly:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
grid-gap: 1rem;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefer minmax(0, 1fr) to prevent overflow bugs in Safari.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Responsive Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Always include viewport meta tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Use relative units (rem, %, vh, vw) over px.&lt;br&gt;
✅ Common breakpoints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@media (max-width: 1200px) { ... } /* desktop */
@media (max-width: 992px) { ... }  /* tablet */
@media (max-width: 768px) { ... }  /* landscape phone */
@media (max-width: 480px) { ... }  /* mobile */
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Test with “responsive design mode” on Safari DevTools and Chrome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Safari/iPhone-Specific Gotchas&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Issue: Grid inside Flex not expanding   
Fix: Add width: 100%; min-height: 0;

Issue: Scrollable div inside flex not scrolling 
Fix: Add overflow: auto; -webkit-overflow-scrolling: touch;

Issue: gap not working in flex  
Fix: Use margin-left fallback

Issue: Fixed element with bottom: 0 overlaps keyboard   
Fix: Use position: sticky; bottom: 0; instead when possible

Issue: 100vh too tall on iPhone (browser UI height issue)   
Fix: Use height: 100dvh; (dynamic viewport unit)

Issue: Z-index issues on iOS (e.g. modals)  
Fix: Make sure parent has position: relative; z-index: 0;

Issue: position: sticky not working 
Fix: Ensure parent doesn’t have overflow: hidden; or overflow: auto;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Typography &amp;amp; Spacing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Use fluid scaling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;html {
  font-size: clamp(14px, 1.5vw, 18px);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Line height around 1.4–1.6 for body text.&lt;br&gt;
✅ Use consistent spacing scale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:root {
  --space-xs: 0.25rem;
  --space-sm: 0.5rem;
  --space-md: 1rem;
  --space-lg: 2rem;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Set consistent heading sizes (e.g. h1 { font-size: 2rem; } etc.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Buttons, Forms, and Inputs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Remove default Safari styles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;button, input, textarea, select {
  font: inherit;
  border: none;
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Add visible focus states for accessibility.&lt;br&gt;
✅ Prevent zoom on input focus (iPhone Safari):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;input, select, textarea {
  font-size: 16px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7. Animations / Transitions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Prefer transform and opacity (GPU-accelerated).&lt;br&gt;
✅ Avoid animating layout properties (width, top, left).&lt;br&gt;
✅ For Safari smoothness:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* {
  -webkit-transform: translateZ(0);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Add prefers-reduced-motion media query for accessibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Accessibility &amp;amp; Semantics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Use semantic tags (header, main, footer, section, nav, article).&lt;br&gt;
✅ Use aria-labels or alt text for images.&lt;br&gt;
✅ Check color contrast.&lt;br&gt;
✅ Don’t rely on color alone to convey information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Performance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Combine and minify CSS.&lt;br&gt;
✅ Lazy load images.&lt;br&gt;
✅ Use content-visibility: auto; for off-screen sections (modern browsers).&lt;br&gt;
✅ Use will-change sparingly for smoother animations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Debug Checklist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before marking a layout as done:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Works on Chrome, Safari, Firefox, Edge.&lt;/li&gt;
&lt;li&gt; Tested on iPhone &amp;amp; Android devices.&lt;/li&gt;
&lt;li&gt; No overflow horizontally.&lt;/li&gt;
&lt;li&gt; Text readable at all breakpoints.&lt;/li&gt;
&lt;li&gt; Buttons/touch targets large enough (min 44px height).&lt;/li&gt;
&lt;li&gt; Scrolls smoothly without layout shift.&lt;/li&gt;
&lt;li&gt; No console warnings.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Most effective way to learn JavaScript</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Wed, 27 Aug 2025 16:27:42 +0000</pubDate>
      <link>https://dev.to/raielly/learning-js-4eec</link>
      <guid>https://dev.to/raielly/learning-js-4eec</guid>
      <description>&lt;h4&gt;
  
  
  Step 1: Stop Obsessing, Start Building (Week 1)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Pick one resource and commit. Most tutorials cover the same basics—don’t waste weeks searching for the “perfect” one.&lt;/li&gt;
&lt;li&gt;Aim to get your first “Hello World” running in under an hour. Start coding on day one instead of passively consuming content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 2: Learn the Bare Minimum, Then Build (Weeks 2–3)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Follow the 80/20 rule: learn the 20% of concepts you’ll use 80% of the time.&lt;/li&gt;
&lt;li&gt;Build with the basics instead of trying to memorize every JavaScript method.&lt;/li&gt;
&lt;li&gt;Get foundations right:&lt;/li&gt;
&lt;li&gt;HTML: headings, paragraphs, divs/spans, forms, inputs, links, images&lt;/li&gt;
&lt;li&gt;CSS: selectors (classes, IDs), Flexbox, media queries&lt;/li&gt;
&lt;li&gt;Git: create a repo, run &lt;code&gt;init&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 3: Master Core JavaScript (Weeks 4–8)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Variables &amp;amp; Data Types: &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, primitives vs references&lt;/li&gt;
&lt;li&gt;Operators &amp;amp; Control Flow: arithmetic, &lt;code&gt;===&lt;/code&gt; vs &lt;code&gt;==&lt;/code&gt;, &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;, &lt;code&gt;||&lt;/code&gt;, ternary, if/else, switch, loops&lt;/li&gt;
&lt;li&gt;Functions: declarations, expressions, arrow functions, and higher-order methods (&lt;code&gt;map&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt;, &lt;code&gt;reduce&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Arrays: create, access, update, and use methods like &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt;, &lt;code&gt;forEach&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt;, &lt;code&gt;pop&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Objects: create, access properties, and iterate with &lt;code&gt;Object.keys&lt;/code&gt;, &lt;code&gt;Object.values&lt;/code&gt;, &lt;code&gt;Object.entries&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 4: Make It Interactive (Weeks 9–12)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;DOM Manipulation:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;querySelector&lt;/code&gt;, &lt;code&gt;getElementById&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;innerHTML&lt;/code&gt;, &lt;code&gt;textContent&lt;/code&gt;, &lt;code&gt;.style&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add/remove classes, create/remove elements&lt;/li&gt;
&lt;li&gt;Handle events with &lt;code&gt;addEventListener&lt;/code&gt;(click, form, keyup)&lt;/li&gt;
&lt;li&gt;Local Storage &amp;amp; Async JS:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;localStorage&lt;/code&gt;: &lt;code&gt;setItem&lt;/code&gt;, &lt;code&gt;getItem&lt;/code&gt;, &lt;code&gt;removeItem&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Promises and &lt;code&gt;async/await&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fetch API with real data (weather, jokes, any JSON API)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 5: Build Real Projects, Not Tutorials (Weeks 13–20)
&lt;/h4&gt;

&lt;p&gt;Escape tutorial hell by actively building and modifying projects instead of copying them line by line.&lt;/p&gt;

&lt;p&gt;Three suggested projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Personal Finance Tracker

&lt;ul&gt;
&lt;li&gt;Data entry with HTML forms&lt;/li&gt;
&lt;li&gt;LocalStorage for persistence&lt;/li&gt;
&lt;li&gt;DOM updates for displaying data&lt;/li&gt;
&lt;li&gt;Simple charts with Chart.js&lt;/li&gt;
&lt;li&gt;CSV export option&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Task Management System

&lt;ul&gt;
&lt;li&gt;CRUD operations (Create, Read, Update, Delete)&lt;/li&gt;
&lt;li&gt;Drag-and-drop functionality&lt;/li&gt;
&lt;li&gt;LocalStorage with validation&lt;/li&gt;
&lt;li&gt;Responsive design&lt;/li&gt;
&lt;li&gt;Search and filter tasks&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Real-Time Weather Dashboard

&lt;ul&gt;
&lt;li&gt;Fetch API + async/await&lt;/li&gt;
&lt;li&gt;Geolocation API for location-based weather&lt;/li&gt;
&lt;li&gt;Dynamic DOM updates&lt;/li&gt;
&lt;li&gt;Error handling for failed requests&lt;/li&gt;
&lt;li&gt;LocalStorage for favorite cities&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 6: Think Bigger (Weeks 21+)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Larger projects teach real-world skills:&lt;/li&gt;
&lt;li&gt;Breaking down complex problems&lt;/li&gt;
&lt;li&gt;Structuring bigger codebases&lt;/li&gt;
&lt;li&gt;Handling messy, unpredictable requirements&lt;/li&gt;
&lt;li&gt;Debugging across multiple files&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 7: Learn to Read Code (Ongoing)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Most development time is spent reading code, not writing it.&lt;/li&gt;
&lt;li&gt;Clone open-source projects from GitHub and study patterns.&lt;/li&gt;
&lt;li&gt;Use debugger tools to step through code.&lt;/li&gt;
&lt;li&gt;Master browser dev tools.&lt;/li&gt;
&lt;li&gt;Use editor shortcuts (e.g., Ctrl+Click) to navigate functions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 8: Modern Workflow (Weeks 25–32)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;After building a strong JavaScript foundation:&lt;/li&gt;
&lt;li&gt;Learn React basics: components, JSX, &lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;useEffect&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Understand why frameworks exist and what problems they solve&lt;/li&gt;
&lt;li&gt;Learn testing with Jest&lt;/li&gt;
&lt;li&gt;Set up build processes with Vite&lt;/li&gt;
&lt;li&gt;Understand &lt;code&gt;package.json&lt;/code&gt; and npm basics&lt;/li&gt;
&lt;li&gt;Accept that modern projects include many dependencies—don’t panic&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The AI Integration Strategy
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Use AI wisely—follow the 20-minute rule: try first, then ask.&lt;/li&gt;
&lt;li&gt;Best uses for AI:

&lt;ul&gt;
&lt;li&gt;Explaining confusing concepts&lt;/li&gt;
&lt;li&gt;Reviewing and improving code&lt;/li&gt;
&lt;li&gt;Debugging stubborn errors&lt;/li&gt;
&lt;li&gt;Generating practice problems&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Common Mistakes That Kill Progress
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Productive Procrastination: spending weeks preparing to learn instead of coding.&lt;/li&gt;
&lt;li&gt;Shiny Object Syndrome: jumping between languages and frameworks too often. &lt;/li&gt;
&lt;li&gt;Tutorial Hell: consuming tutorials endlessly without applying knowledge. &lt;/li&gt;
&lt;li&gt;Avoiding Struggle: relying on AI/Stack Overflow instantly instead of problem-solving.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  The Learning Strategy That Works
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Build in Public

&lt;ul&gt;
&lt;li&gt;Share progress on Twitter, LinkedIn, or YouTube.&lt;/li&gt;
&lt;li&gt;Find accountability partners and mentors.&lt;/li&gt;
&lt;li&gt;Build a visible portfolio.&lt;/li&gt;
&lt;li&gt;Connect with other learners and devs.&lt;/li&gt;
&lt;li&gt;Show proof of consistent progress to future employers.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Daily Consistency Over Intensity

&lt;ul&gt;
&lt;li&gt;Code for 1–2 hours daily.&lt;/li&gt;
&lt;li&gt;Consistency matters more than occasional long bursts.&lt;/li&gt;
&lt;li&gt;Missing one day can easily snowball into missing weeks.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Focus, Then Expand

&lt;ul&gt;
&lt;li&gt;Stick with JavaScript for at least 6 months.&lt;/li&gt;
&lt;li&gt;Push through difficulties instead of hopping to another stack.&lt;/li&gt;
&lt;li&gt;Deep knowledge in one ecosystem beats shallow knowledge in many.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;These notes were inspired by "How I Would Learn JavaScript If I Could Start Over". If you want to watch the full explanation, check out the original video.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Fixing the WordPress Redirect Issue to /wp-admin/upgrade.php</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Fri, 14 Mar 2025 18:47:03 +0000</pubDate>
      <link>https://dev.to/raielly/how-to-fix-wordpress-being-redirected-to-wp-adminupgradephp-fa7</link>
      <guid>https://dev.to/raielly/how-to-fix-wordpress-being-redirected-to-wp-adminupgradephp-fa7</guid>
      <description>&lt;p&gt;If you're suddenly being redirected to /wp-admin/upgrade.php when trying to log into your WordPress site, don’t worry—this is a common issue and can be fixed in just a few steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Does This Happen?
&lt;/h3&gt;

&lt;p&gt;This usually happens when there’s a mismatch between your WordPress database version and the actual WordPress files. The system thinks an update is needed when it might not be.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Fix It
&lt;/h3&gt;

&lt;p&gt;Follow these simple steps to resolve the issue:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Check Your Database Version&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to your hosting control panel.&lt;/li&gt;
&lt;li&gt;Open phpMyAdmin and find your WordPress database.&lt;/li&gt;
&lt;li&gt;Locate the wp_options table and check the db_version value.&lt;/li&gt;
&lt;/ul&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%2Fabv2pdoy7cgjx1rg7o6g.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%2Fabv2pdoy7cgjx1rg7o6g.png" alt=" " width="800" height="50"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Update Your WordPress Version File&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access your site’s files using FTP or your hosting’s File Manager.&lt;/li&gt;
&lt;li&gt;Navigate to wp-includes/ and open the version.php file.&lt;/li&gt;
&lt;li&gt;Compare the database version from wp_options with the $wp_db_version value in version.php.&lt;/li&gt;
&lt;li&gt;If they don’t match, update the version.php file to reflect the correct database version and save the changes.&lt;/li&gt;
&lt;/ul&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%2Fp10ymuom6r5hoc24vk37.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%2Fp10ymuom6r5hoc24vk37.png" alt=" " width="490" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s it! Now, try logging in again, and your issue should be resolved.&lt;/p&gt;

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

</description>
      <category>wordpress</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Fix "MySQL Shutdown Unexpectedly"</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Sun, 17 Nov 2024 14:56:59 +0000</pubDate>
      <link>https://dev.to/raielly/how-to-fix-mysql-shutdown-unexpectedly-13b</link>
      <guid>https://dev.to/raielly/how-to-fix-mysql-shutdown-unexpectedly-13b</guid>
      <description>&lt;p&gt;Have you ever run into the annoying “MySQL shutdown unexpectedly” error? It’s the worst, right? But don’t stress—you don’t need to be a tech wizard to sort it out. Just follow this super simple, friendly guide, and you’ll have your MySQL server up and running again in no time!&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Backup Your Current Data Folder
&lt;/h3&gt;

&lt;p&gt;First, navigate to the folder where MySQL is installed. Inside, you’ll find a folder named data. Copy this folder and save it somewhere safe, just in case things go sideways.&lt;br&gt;
&lt;code&gt;C:\Program Files\MySQL\MySQL Server\data&lt;/code&gt;&lt;/p&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%2F1w8xyszlxwg1imfnjv7g.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%2F1w8xyszlxwg1imfnjv7g.png" alt="Backup Your Current Data Folder" width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Delete Specific Files from the Data Folder
&lt;/h3&gt;

&lt;p&gt;Now, go inside the data folder and remove these items:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The mysql folder.&lt;/li&gt;
&lt;li&gt;The performance_schema folder.&lt;/li&gt;
&lt;li&gt;Any folders or files related to phpmyadmin or test.&lt;/li&gt;
&lt;li&gt;All other files except ibdata1.&lt;/li&gt;
&lt;/ul&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%2Fthijzvpiu155rk57t96z.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%2Fthijzvpiu155rk57t96z.png" alt="Delete Specific Files from the Data Folder" width="800" height="869"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Don’t delete ibdata1! This file is crucial—it contains important information about your databases.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Restore Files from Your Backup
&lt;/h3&gt;

&lt;p&gt;Find the backup of your data folder you created earlier. From this backup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy everything except the ibdata1 file.&lt;/li&gt;
&lt;/ul&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%2F94xzvec58nqxorzi8lme.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%2F94xzvec58nqxorzi8lme.png" alt="Restore Files from Your Backup" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste it into the original data folder, overwriting existing files if prompted.
&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%2Fxuygxn049eg2g2qkcs53.png" alt="Restart MySQL" width="800" height="702"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This step replaces the corrupted files with working ones while keeping the critical ibdata1 intact.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Restart MySQL
&lt;/h3&gt;

&lt;p&gt;With the restored files in place, it’s time to restart MySQL:&lt;/p&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%2Fhvyu6t774zegrog80fs7.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%2Fhvyu6t774zegrog80fs7.png" alt="Restart MySQL" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If all went well, your MySQL server should now be running smoothly! 🎉&lt;/p&gt;

&lt;p&gt;Fixing a MySQL server that unexpectedly shut down might feel intimidating at first, but as you’ve seen, it’s totally doable with a bit of patience and care.&lt;/p&gt;

&lt;p&gt;To help avoid this happening again, here are a few handy tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always shut down MySQL properly before turning off your computer.&lt;/li&gt;
&lt;li&gt;Keep regular backups of your data—better safe than sorry!&lt;/li&gt;
&lt;li&gt;Watch out for other software that might conflict with MySQL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have questions or want to share your own MySQL recovery story? Let us know in the comments—we’d love to hear from you!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>mysql</category>
      <category>xampp</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Making Your GitHub Readme Profile Stand Out</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Sun, 26 May 2024 10:50:58 +0000</pubDate>
      <link>https://dev.to/raielly/making-your-github-readme-profile-stand-out-4m52</link>
      <guid>https://dev.to/raielly/making-your-github-readme-profile-stand-out-4m52</guid>
      <description>&lt;p&gt;In this article, I like to share with you how to make your &lt;a href="https://github.com/raielly" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; Readme profile pop and stand out from the others.&lt;/p&gt;

&lt;p&gt;Old 🙂&lt;/p&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%2Fcqgpgbbf7sy0q3pcxdi1.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%2Fcqgpgbbf7sy0q3pcxdi1.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New 🤩&lt;/p&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%2Fsirgxspd773jsbh9s456.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%2Fsirgxspd773jsbh9s456.png" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, basically, you just make a new repository with the same name as your GitHub username. Like, if your username is 'raielly', you'd create a repo called 'raielly'. &lt;/p&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%2Fffyw609tvguor4aibboy.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%2Fffyw609tvguor4aibboy.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, you use the README file to make changes to your page. There you can use &lt;a href="https://github.github.com/gfm/" rel="noopener noreferrer"&gt;Markdown&lt;/a&gt; and HTML to add your personal touch and make your profile stand out. show off whatever you want people to know about you, list your favorite languages and tech.&lt;/p&gt;

&lt;p&gt;For some ideas, take a peek at this site: &lt;br&gt;
&lt;a href="https://zzetao.github.io/awesome-github-profile" rel="noopener noreferrer"&gt;https://zzetao.github.io/awesome-github-profile/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cool images for your skills and social links, grab them from here: &lt;br&gt;
&lt;a href="https://github.com/alexandresanlim/Badges4-README.md-Profile" rel="noopener noreferrer"&gt;https://github.com/alexandresanlim/Badges4-README.md-Profile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you're all set, don't forget to git commit your changes.&lt;/p&gt;

&lt;p&gt;That's it! EzPz! &lt;/p&gt;

&lt;p&gt;Now that you've seen how easy it is to redesign your GitHub page, What does your GitHub profile readme file look like? Share your GitHub Profile below 😊😎🔥&lt;/p&gt;

</description>
      <category>github</category>
      <category>profile</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Simplest way to Downgrade Node Version on Windows</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Sat, 13 May 2023 03:26:29 +0000</pubDate>
      <link>https://dev.to/raielly/simplest-way-to-downgrade-node-version-on-windows-3oi7</link>
      <guid>https://dev.to/raielly/simplest-way-to-downgrade-node-version-on-windows-3oi7</guid>
      <description>&lt;p&gt;In this article, we'll walk through the simple steps to downgrade Nodejs version on Windows. So, let's get started!&lt;/p&gt;

&lt;p&gt;To begin, we need to install the Node Version Manager (NVM) which will handle the node version management. We can do this by going to the link provided and downloading the NVM setup execution file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/coreybutler/nvm-windows/releases" rel="noopener noreferrer"&gt;https://github.com/coreybutler/nvm-windows/releases&lt;/a&gt;&lt;/p&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%2Ff2mqu82hr76hl08qlqvb.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%2Ff2mqu82hr76hl08qlqvb.png" alt="NVM" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we will need to run the NVM installer. Once we have downloaded the installer from the link provided, we can find it in &lt;strong&gt;"Downloads"&lt;/strong&gt; folder (usually the default location). Simply navigate to the folder and double-click on the &lt;strong&gt;"nvm-setup.exe"&lt;/strong&gt; file to initiate the installation process.&lt;/p&gt;

&lt;p&gt;After double-clicking on the &lt;strong&gt;"nvm-setup.exe"&lt;/strong&gt; file, a wizard called &lt;strong&gt;"Setup-NVM for Windows"&lt;/strong&gt; will appear on screen. To proceed with the installation of NVM, we will need to accept the license agreement by selecting the corresponding radio button and clicking the "Next" button.&lt;/p&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%2Ft2rzo97p0waj38nh8lr0.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%2Ft2rzo97p0waj38nh8lr0.png" alt="Setup-NVM for Windows" width="597" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can leave the default selected location as is and click the &lt;strong&gt;"Next"&lt;/strong&gt; button. Finally, click the &lt;strong&gt;"Install"&lt;/strong&gt; button to start the NVM installation process.&lt;/p&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%2Ffa16vmkan21ss5935j4q.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%2Ffa16vmkan21ss5935j4q.png" alt="Install" width="595" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great job! We have successfully installed NVM on our Windows machine. All that's left to do now is to click the "Finish" button to wrap up the installation process and close the setup wizard. &lt;/p&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%2Fdqdnhirqjpfks19k6zce.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%2Fdqdnhirqjpfks19k6zce.png" alt="NVM" width="622" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  And now, lets downgrade the Node version on Windows using NVM,
&lt;/h4&gt;

&lt;p&gt;Open the Command Prompt on your Windows machine as an administrator. We can do this by searching for &lt;strong&gt;"Command Prompt"&lt;/strong&gt; in the &lt;strong&gt;"Start"&lt;/strong&gt; menu and then right-clicking on it and selecting &lt;strong&gt;"Run as administrator"&lt;/strong&gt;.&lt;/p&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%2Fyjyi7g4q9gopx1imeqnv.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%2Fyjyi7g4q9gopx1imeqnv.png" alt="CMD" width="667" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;check the current Node version that is installed on Windows machine by using the &lt;strong&gt;"-v"&lt;/strong&gt; option in the Command Prompt.&lt;/p&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%2Ff4tpj1qcolm4utzhy8bs.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%2Ff4tpj1qcolm4utzhy8bs.png" alt="v" width="476" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are currently using node &lt;strong&gt;“v18.12.1”&lt;/strong&gt; on Windows. Use the "nvm" command and specify the version we want to wish to install. For example, if we want to switch from Node version 18.12.1 to 18.5.0, simply execute the appropriate &lt;strong&gt;"nvm"&lt;/strong&gt; command with the version number.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm install v18.5.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fboemrolbvojus4noynwa.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%2Fboemrolbvojus4noynwa.png" alt="nvm install " width="567" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the downgraded version, with the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm use 18.5.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fnqhv17rggo1xzcv91mrx.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%2Fnqhv17rggo1xzcv91mrx.png" alt="nvm use" width="337" height="123"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After downgrading the Node version using NVM, it is important to verify whether the downgrade was successful or not. To do this, check the Node version again using the same command as before.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F45f250pknz7bzmwjsrn2.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%2F45f250pknz7bzmwjsrn2.png" alt="NODE" width="283" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it! if the output displays the version number that you specified during the downgrade process, then it indicates that you have successfully downgraded the Node version using NVM. Great Job!&lt;/p&gt;

&lt;p&gt;Now if we want to check all the Node versions that are currently installed on our Windows machine using NVM, simply execute the command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvm list 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will give us a list of all the installed Node versions. To switch to a specific version that we want to use, use the &lt;strong&gt;"nvm use"&lt;/strong&gt; command along with the version number just like we did above process.&lt;/p&gt;

&lt;p&gt;We demonstrate the simplest and most commonly used method to downgrade Node version on a Windows machine. Follow the steps carefully and we'll be able to successfully switch to the desired version. Thanks for reading this article. &lt;strong&gt;HAPPY CODING 🚀!!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>node</category>
      <category>learning</category>
    </item>
    <item>
      <title>My VS Code extensions that I absolutely love and use all the time</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Sat, 18 Mar 2023 09:10:40 +0000</pubDate>
      <link>https://dev.to/raielly/my-vs-code-extensions-that-i-absolutely-love-and-use-all-the-time-2he1</link>
      <guid>https://dev.to/raielly/my-vs-code-extensions-that-i-absolutely-love-and-use-all-the-time-2he1</guid>
      <description>&lt;p&gt;In this article, I'd like to share with you some of the Visual Studio Code extensions that I find incredibly useful and use on a daily basis. So, if you're interested in enhancing your coding experience with some great tools, keep reading and let's explore together!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=GitHub.github-vscode-theme" rel="noopener noreferrer"&gt;Github Theme&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;I personally love to use the GitHub theme as my theme for VS Code. It's not really an extension, but it changes the look and feel of my editor. It's easy on the eyes and makes reading code a breeze. &lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme" rel="noopener noreferrer"&gt;Material Icon Theme&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Want to spice up your Visual Studio Code editor? This extension has got you covered with a collection of icons to choose from!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Say goodbye to messy code with this extension! It automatically formats your JavaScript, CSS, and HTML code, making it look clean and organized.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer" rel="noopener noreferrer"&gt;Polacode&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;This extension that lets you create shareable screenshots of your code, complete with your preferred theme and font.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens" rel="noopener noreferrer"&gt;GitLens&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;I love using these extensions to improve my Git workflow in VS Code. They have been incredibly helpful!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks" rel="noopener noreferrer"&gt;Bookmarks&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Bookmark your code easily with this extension! Just use the shortcut 'ctrl+alt+k' to add or toggle a bookmark, and 'ctrl+alt+l' or 'ctrl+alt+j' to navigate between bookmarks.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens" rel="noopener noreferrer"&gt;Error Lens&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Make your code errors and warnings easier to spot with this extension that enhances the highlighting of errors, warnings, and other language diagnostics.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager" rel="noopener noreferrer"&gt;Project Manager&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;If you work on multiple projects in Visual Studio Code and need to switch between them frequently, the Project Manager extension can simplify the process and make managing easy.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;This amazing tool for coding JavaScript highlights common errors as I write code, helping me detect and fix mistakes quickly. Plus, it provides real-time validation to keep my code error-free.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer" rel="noopener noreferrer"&gt;Live Server&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Create a local development server with ease using this extension! It even includes a live reload feature that works for both static and dynamic web pages.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client" rel="noopener noreferrer"&gt;REST Client&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Want to test your APIs without leaving Visual Studio Code? The REST Client extension has got you covered! It lets you send HTTP requests and view responses right inside VS Code. Say goodbye to switching between applications!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=IBM.output-colorizer" rel="noopener noreferrer"&gt;Output Colorizer&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Make your log files easy on the eyes with this extension! It adds syntax highlighting to your logs for a colorful and organized display.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets" rel="noopener noreferrer"&gt;JavaScript (ES6) code snippets&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;This extension is essential for web development as it offers code snippets for JavaScript, Vue, React, and HTML.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag" rel="noopener noreferrer"&gt;Auto Rename Tag&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;This extension helps you save time by automatically updating the name of the corresponding close-tag when you modify the name of an open-tag. No need to manually update them anymore!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag" rel="noopener noreferrer"&gt;Auto Close Tag&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Save time and maintain your HTML files easily with these two VS Code plugins. They automatically rename and close your tags, even in React's JSX syntax.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=steoates.autoimport" rel="noopener noreferrer"&gt;Auto Import&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;With this extension, you'll never have to manually search for imports again! It automatically detects and suggests code completion and actions for all available imports in your code, saving you time and effort.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost" rel="noopener noreferrer"&gt;Import Cost&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Imagine being able to see how much space a third-party library takes up in your code! That's exactly what the Import Cost extension does. It even uses colors to show you which ones are heavy imports, and highlights them in red so you can easily spot them.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense" rel="noopener noreferrer"&gt;npm Intellisense&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;This awesome plugin for Visual Studio Code helps you quickly autocomplete your npm modules when writing import statements. No more typos or manual searching for module names!&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense" rel="noopener noreferrer"&gt;Path Intellisense&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Meet the sibling of NPM Intellisense! This awesome VS Code plugin now autocompletes your filesystem paths. It's from the same maintainer as NPM Intellisense, and it's become a must-have tool for me. Give it a try and simplify your coding workflow!&lt;/p&gt;

&lt;p&gt;And there you have our selection of extensions, thank you for reading this article that can enhance your productivity and coding experience! I hope that these extensions, from code completion to debugging to project file management, will be helpful for you. Let me know in the comments which ones you find the most useful! Thanks again for reading! 🙌&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>extensions</category>
      <category>tools</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Export an Array of JSON Objects to Excel with SheetJS</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Tue, 07 Mar 2023 06:29:45 +0000</pubDate>
      <link>https://dev.to/raielly/how-to-export-an-array-of-json-objects-to-excel-with-sheetjs-2oa5</link>
      <guid>https://dev.to/raielly/how-to-export-an-array-of-json-objects-to-excel-with-sheetjs-2oa5</guid>
      <description>&lt;p&gt;In this article, we will demonstrate how to convert JSON response data to an Excel file with defined headers and columns that can be downloaded directly by the client.&lt;/p&gt;

&lt;p&gt;To accomplish this, we will utilize the &lt;a href="https://sheetjs.com/" rel="noopener noreferrer"&gt;SheetJS &lt;/a&gt; plugin.&lt;/p&gt;

&lt;p&gt;Let's begin, add a button that users will click to generate an export&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"exportExcel"&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; Export Excel &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then create array of "employees" objects&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;employees&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Saitama&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;32&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="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Genos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;24&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next create a workbook&lt;br&gt;
&lt;code&gt;XLSX.utils.json_to_sheet&lt;/code&gt; generates a worksheet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;worksheet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;XLSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json_to_sheet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;employees&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;XLSX.utils.book_new&lt;/code&gt; creates a new workbook and &lt;code&gt;XLSX.utils.book_append_sheet&lt;/code&gt; appends a worksheet to the workbook. The new worksheet will be called "Empoloyess":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;workbook&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;XLSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;book_new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;XLSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;book_append_sheet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;workbook&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Employees&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Last export the file&lt;br&gt;
&lt;code&gt;XLSX.writeFile&lt;/code&gt; creates a spreadsheet file and tries to write it to the system.&lt;br&gt;&lt;br&gt;
&lt;code&gt;compression: true&lt;/code&gt; enables ZIP compression for XLSX and other formats.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;XLSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;workbook&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Employee Lists.xlsx&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="na"&gt;compression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it! this is the simplest code to convert JSON data in XLSX EXCEL file which will download on the client side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access functioning demo &lt;a href="https://codepen.io/raieldev/pen/LYJjgNO" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;PS.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;By default, &lt;code&gt;json_to_sheet&lt;/code&gt; creates a worksheet with a header row. In this case, the headers come from the JS object keys: "id", "names" and "age".&lt;/p&gt;

&lt;p&gt;Let's create array of custom header&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;excelHeader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Employee Id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Full Name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Age&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we want to fix the header and customize the name we can simply use &lt;code&gt;XLSX.utils.sheet_add_aoa&lt;/code&gt; that can write text values to the existing worksheet starting at cell A1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;XLSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sheet_add_aoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;excelHeader&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And since some names may exceed the default column width, we can adjust the column width by defining the "!cols" worksheet property. For example, the following line sets the width of column A to approximately length of the header + 5&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="c1"&gt;// Map the array and get the length and add 5 to add extra spaces.&lt;/span&gt;
&lt;span class="c1"&gt;// Push the value to the defined variable `wscols` &lt;/span&gt;
&lt;span class="c1"&gt;// Assign the varialbe `wscols` to `worksheet["!cols"]`&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;wscols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="nx"&gt;excelHeader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;wscols&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;wch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nx"&gt;worksheet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;!cols&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;wscols&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Access functioning demo &lt;a href="https://codepen.io/raieldev/pen/oNPeQxV" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>sheetjs</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Some common scenarios where using git stash can be useful in a development workflow.</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Sun, 05 Mar 2023 00:01:24 +0000</pubDate>
      <link>https://dev.to/raielly/what-are-some-common-scenarios-where-using-git-stash-can-be-useful-in-a-development-workflow-2c3p</link>
      <guid>https://dev.to/raielly/what-are-some-common-scenarios-where-using-git-stash-can-be-useful-in-a-development-workflow-2c3p</guid>
      <description>&lt;p&gt;Git stash can be a useful tool in certain situations, such as when you need to quickly switch to another branch or work on a different feature. However, it's important to use this feature accordingly and in conjunction with other Git commands and techniques to ensure that your development workflow stays organized and manageable.&lt;/p&gt;

&lt;p&gt;I find Git stash particularly useful in situations where I realize that I forgot something in my previous commit, and have already moved on to working on the next one within the same branch.&lt;/p&gt;

&lt;p&gt;Here are some commands you can use:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git stash&lt;/code&gt; (command to save any changes that you haven't committed yet into a "stash". Please note that this command removes those changes from the working tree.)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git checkout other_branch&lt;/code&gt; (to switch to the desired branch -- in this case 'other_branch')&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git stash list&lt;/code&gt; (check list of stashes)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git stash apply&lt;/code&gt; (apply the saved changes from stash to the current branch's working tree.)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git stash apply stash@{12}&lt;/code&gt; (in case you have multiple stashes, you can specify which stash to apply. Here, we are applying the 12th stash.)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git stash drop stash@{0}&lt;/code&gt; (to remove from stash list -- in this case stash 0)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git stash pop stash@{1}&lt;/code&gt; (to apply selected stash and drop it from stash list)&lt;/p&gt;

&lt;p&gt;PS.&lt;br&gt;
To save &lt;code&gt;git stash&lt;/code&gt; with custom commented, we simply use &lt;br&gt;
&lt;code&gt;git stash push -m "my-stash-name"&lt;/code&gt; and then to apply changes use&lt;br&gt;
&lt;code&gt;git stash apply stash^{/my-stash-name}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So basically, Stash command is like a little magic trick for your changes. It lets you keep some changes that you don't need or want right now, but you may need them later on.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Merge changes made in the "master" branch into your development branch.</title>
      <dc:creator>raielly</dc:creator>
      <pubDate>Sat, 04 Mar 2023 13:51:27 +0000</pubDate>
      <link>https://dev.to/raielly/git-pull-from-master-into-the-development-branch-44il</link>
      <guid>https://dev.to/raielly/git-pull-from-master-into-the-development-branch-44il</guid>
      <description>&lt;p&gt;If we needs to stay in sync with the latest changes made in "master", while also retaining a complete record of all changes made. Let's try to use rebasing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout master
git pull --rebase
git checkout branch_name
git rebase master
git push -f origin branch_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Don't forget to backup first your branch when doing changes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch branch_name-bkp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If there's any conflict arise, use this command as needed to fix the issue based on the situation and the hints provided by git.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git rebase --continue
git rebase --skip
git mergetool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Please continue this process until all conflicts are resolved.&lt;/p&gt;

&lt;p&gt;At this point, our branch should be rebased and aligned with the "master" branch, and the remote should also be updated. When checking the Git log, there should be no instances of "behind" or "ahead".&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
