<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Areeb ur Rub</title>
    <description>The latest articles on Forem by Areeb ur Rub (@areeburrub).</description>
    <link>https://forem.com/areeburrub</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%2F417828%2Fb2f01376-c3d2-48d0-a31c-25d29b43402d.jpg</url>
      <title>Forem: Areeb ur Rub</title>
      <link>https://forem.com/areeburrub</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/areeburrub"/>
    <language>en</language>
    <item>
      <title>New way to get portfolio inspirations</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Sun, 01 Mar 2026 04:45:31 +0000</pubDate>
      <link>https://forem.com/areeburrub/new-way-to-get-portfolio-inspirations-2730</link>
      <guid>https://forem.com/areeburrub/new-way-to-get-portfolio-inspirations-2730</guid>
      <description>&lt;p&gt;If you’re searching for &lt;strong&gt;portfolio inspiration&lt;/strong&gt;, &lt;strong&gt;developer portfolio examples&lt;/strong&gt;, or &lt;strong&gt;designer portfolio website ideas&lt;/strong&gt;, here’s a new way to discover them.&lt;/p&gt;

&lt;p&gt;Try Now : &lt;a href="https://stash-or-pass.com/" rel="noopener noreferrer"&gt;stash-or-pass.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://stash-or-pass.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Stash or Pass&lt;/strong&gt;&lt;/a&gt; a simple platform where you can review &lt;strong&gt;portfolio websites&lt;/strong&gt; in one place.&lt;/p&gt;

&lt;p&gt;Instead of opening 20 tabs from Google searches like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“best developer portfolios”&lt;/li&gt;
&lt;li&gt;“portfolio website inspiration”&lt;/li&gt;
&lt;li&gt;“creative portfolio examples”&lt;/li&gt;
&lt;li&gt;“UI/UX portfolio case study examples”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can browse everything in one structured flow.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Stash or Pass lets you:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔎 Browse Portfolios in Swipe style inteface
&lt;/h3&gt;

&lt;p&gt;You get access to high-quality &lt;strong&gt;developer, designer, and creative portfolios&lt;/strong&gt; ready for inspiration, and swipe on them to Stash (save) or Pass (skip)&lt;/p&gt;

&lt;h3&gt;
  
  
  ⭐ Discover Top-Rated Portfolios
&lt;/h3&gt;

&lt;p&gt;There’s a &lt;strong&gt;Top Stash&lt;/strong&gt; section where you can see which portfolio websites people have rated the highest.&lt;br&gt;
This helps you quickly find what the community considers the best portfolio designs.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏆 Portfolio Leaderboard
&lt;/h3&gt;

&lt;p&gt;You can view a leaderboard of the most appreciated portfolios great if you want to analyze what makes a portfolio stand out (layout, animation, storytelling, case studies, etc.).&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Add Your Own Portfolio
&lt;/h3&gt;

&lt;p&gt;You can submit your own portfolio website and get listed.&lt;br&gt;
Once added, you can see how people rate it and where it stands on the leaderboard.&lt;/p&gt;

&lt;p&gt;This makes it useful not just for inspiration but also for feedback and visibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Is Useful If You’re Building a Portfolio
&lt;/h2&gt;

&lt;p&gt;If you’re:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redesigning your personal website&lt;/li&gt;
&lt;li&gt;Creating a developer portfolio from scratch&lt;/li&gt;
&lt;li&gt;Building a UI/UX portfolio&lt;/li&gt;
&lt;li&gt;Improving your case study structure&lt;/li&gt;
&lt;li&gt;Looking for modern portfolio website trends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This platform gives you a focused place to explore high-quality portfolio examples without getting lost in random blog lists.&lt;/p&gt;

&lt;p&gt;Instead of bookmarking everything and forgetting it later, you can quickly review, compare, and learn from the best.&lt;/p&gt;




&lt;p&gt;If you’re currently working on your portfolio and need real, high-quality inspiration this might help.&lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts and feedback 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>discuss</category>
      <category>career</category>
    </item>
    <item>
      <title>Using 1Password CLI to Manage Multiple GitHub SSH Keys in a Terminal-Only Debian Setup</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Wed, 23 Jul 2025 15:24:19 +0000</pubDate>
      <link>https://forem.com/areeburrub/using-1password-cli-to-manage-multiple-github-ssh-keys-in-a-terminal-only-debian-setup-16el</link>
      <guid>https://forem.com/areeburrub/using-1password-cli-to-manage-multiple-github-ssh-keys-in-a-terminal-only-debian-setup-16el</guid>
      <description>&lt;p&gt;When working on a headless server or terminal-only environment, managing multiple GitHub SSH keys securely can be challenging — especially when you’re using 1Password. This guide walks you through setting up &lt;strong&gt;1Password CLI&lt;/strong&gt; to handle SSH keys for &lt;strong&gt;multiple GitHub accounts&lt;/strong&gt;, all without a graphical interface.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;Debian or any Linux distro with a terminal&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.1password.com/docs/cli/" rel="noopener noreferrer"&gt;1Password CLI&lt;/a&gt; installed (&lt;code&gt;op&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;SSH installed and working (&lt;code&gt;ssh&lt;/code&gt;, &lt;code&gt;ssh-agent&lt;/code&gt;, &lt;code&gt;ssh-add&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;SSH keys (private + public) already stored in 1Password for each GitHub account&lt;/li&gt;
&lt;li&gt;Public keys added to the corresponding GitHub accounts&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  🔹 1. Ensure &lt;code&gt;ssh-agent&lt;/code&gt; Is Running
&lt;/h3&gt;

&lt;p&gt;Before using any keys, make sure the SSH agent is active:&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;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To make this automatic, add it to your &lt;code&gt;~/.bashrc&lt;/code&gt;, &lt;code&gt;~/.zshrc&lt;/code&gt;, or shell init file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(ssh-agent -s)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔹 2. Load SSH Keys from 1Password CLI
&lt;/h3&gt;

&lt;p&gt;Use the 1Password CLI to securely fetch your private key and load it into &lt;code&gt;ssh-agent&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For each GitHub account (say &lt;code&gt;personal&lt;/code&gt; and &lt;code&gt;work&lt;/code&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="c"&gt;# Replace &amp;lt;item-id&amp;gt; with your 1Password item ID&lt;/span&gt;
op item get &lt;span class="s2"&gt;"&amp;lt;item-id&amp;gt;"&lt;/span&gt; &lt;span class="nt"&gt;--field&lt;/span&gt; &lt;span class="s2"&gt;"private key"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.ssh/id_personal
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/id_personal
ssh-add ~/.ssh/id_personal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repeat for your work account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;op item get &lt;span class="s2"&gt;"&amp;lt;item-id&amp;gt;"&lt;/span&gt; &lt;span class="nt"&gt;--field&lt;/span&gt; &lt;span class="s2"&gt;"private key"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.ssh/id_work
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/id_work
ssh-add ~/.ssh/id_work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Note&lt;/strong&gt;: If the key format causes errors (e.g., &lt;code&gt;libcrypto&lt;/code&gt; errors), regenerate the key in 1Password using &lt;strong&gt;OpenSSH format&lt;/strong&gt; and re-fetch it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🔹 3. Configure &lt;code&gt;~/.ssh/config&lt;/code&gt; for Multiple GitHub Accounts
&lt;/h3&gt;

&lt;p&gt;Create or edit your SSH config file:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ssh"&gt;&lt;code&gt;&lt;span class="k"&gt;Host&lt;/span&gt; github-personal
  &lt;span class="k"&gt;HostName&lt;/span&gt; github.com
  &lt;span class="k"&gt;User&lt;/span&gt; git
  &lt;span class="k"&gt;IdentityFile&lt;/span&gt; ~/.ssh/id_personal
  &lt;span class="k"&gt;IdentitiesOnly&lt;/span&gt; &lt;span class="no"&gt;yes&lt;/span&gt;

&lt;span class="k"&gt;Host&lt;/span&gt; github-work
  &lt;span class="k"&gt;HostName&lt;/span&gt; github.com
  &lt;span class="k"&gt;User&lt;/span&gt; git
  &lt;span class="k"&gt;IdentityFile&lt;/span&gt; ~/.ssh/id_work
  &lt;span class="k"&gt;IdentitiesOnly&lt;/span&gt; &lt;span class="no"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells SSH which identity (key) to use when you refer to GitHub using the alias &lt;code&gt;github-personal&lt;/code&gt; or &lt;code&gt;github-work&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 4. Clone Repositories Using Host Aliases
&lt;/h3&gt;

&lt;p&gt;Now that SSH knows which key to use, you can clone repositories like this:&lt;/p&gt;

&lt;p&gt;For your &lt;strong&gt;personal&lt;/strong&gt; GitHub account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github-personal:yourusername/repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For your &lt;strong&gt;work&lt;/strong&gt; GitHub account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github-work:yourorg/repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures the correct key is used without conflicts.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Final Verification
&lt;/h2&gt;

&lt;p&gt;To test whether each setup works correctly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-T&lt;/span&gt; github-personal
&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 yourusername! You've successfully authenticated, but GitHub does not provide shell access.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Likewise, for work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-T&lt;/span&gt; github-work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧠 Bonus: Automate the Workflow
&lt;/h2&gt;

&lt;p&gt;You can wrap the &lt;code&gt;op&lt;/code&gt; commands and &lt;code&gt;ssh-add&lt;/code&gt; calls in a script and run it after logging in:&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;#!/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
op signin my.1password.com myemail@example.com my-secret-key
op item get &lt;span class="s2"&gt;"github-personal-key"&lt;/span&gt; &lt;span class="nt"&gt;--field&lt;/span&gt; &lt;span class="s2"&gt;"private key"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.ssh/id_personal
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/id_personal
ssh-add ~/.ssh/id_personal
&lt;span class="c"&gt;# Repeat for work&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or add to your shell profile with appropriate session caching.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛡️ Conclusion
&lt;/h2&gt;

&lt;p&gt;Using the 1Password CLI with &lt;code&gt;ssh-agent&lt;/code&gt; gives you a secure and flexible way to manage multiple GitHub SSH identities in a terminal-only setup. Whether you're working across multiple accounts or teams, this setup keeps your keys safe and your workflow efficient — all without ever touching a GUI.&lt;/p&gt;

</description>
      <category>1password</category>
      <category>cli</category>
      <category>debian</category>
      <category>linux</category>
    </item>
    <item>
      <title>Building NextJs project, should I use tRPC or Server Actions with React Query?</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Mon, 15 Jul 2024 22:52:52 +0000</pubDate>
      <link>https://forem.com/areeburrub/building-nextjs-project-should-i-use-trpc-or-server-actions-with-react-query-4pdo</link>
      <guid>https://forem.com/areeburrub/building-nextjs-project-should-i-use-trpc-or-server-actions-with-react-query-4pdo</guid>
      <description>&lt;h2&gt;
  
  
  Seeking Suggestions: tRPC vs. Next.js Server Actions for a Next.js Project
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1812948845044900179-896" src="https://platform.twitter.com/embed/Tweet.html?id=1812948845044900179"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1812948845044900179-896');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1812948845044900179&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Both options seem promising, especially since I plan to use React Query and need type-safe query functions. I’d love to get some insights and suggestions from the community on which path to take.&lt;/p&gt;

&lt;h3&gt;
  
  
  I am comparing in this way
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Both have Type Safety&lt;/li&gt;
&lt;li&gt;Both can be Integrated with React Query&lt;/li&gt;
&lt;li&gt;Both can be easily used, but tRPC have to be installed and initialised on other hand Server Actions can be simply used by simply creating functions with "use server" directives.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Seeking Your Advice
&lt;/h3&gt;

&lt;p&gt;It's clear that Server Actions are easier to implement and solves the problem the thing is that I am unable to figure out the trade offs I will be having by not using tRPC.&lt;/p&gt;

&lt;p&gt;I'd love to hear about your experiences and recommendations. Your insights will be helping me make an informed decision. Please share your thoughts in the comments below!&lt;/p&gt;




&lt;p&gt;Thanks in advance for your help!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Boost Your Tailwindcss Development with Flow Launcher's Tailwindcss Docs Extension</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Tue, 21 Feb 2023 04:07:05 +0000</pubDate>
      <link>https://forem.com/areeburrub/boost-your-tailwindcss-development-with-flow-launchers-tailwindcss-docs-extension-2fh7</link>
      <guid>https://forem.com/areeburrub/boost-your-tailwindcss-development-with-flow-launchers-tailwindcss-docs-extension-2fh7</guid>
      <description>&lt;p&gt;Tailwindcss is a popular CSS framework that offers a range of utility classes to speed up web development. With its extensive documentation, it's easy to look up the different classes and their usage. However, accessing this information can be time-consuming, especially if you're working on a project that requires constant reference to the Tailwindcss documentation.&lt;/p&gt;

&lt;p&gt;This is where &lt;a href="https://www.flowlauncher.com/" rel="noopener noreferrer"&gt;Flow Launcher&lt;/a&gt; comes in. Flow Launcher is an open-source productivity tool for Windows that allows users to quickly search and launch apps, files, and websites. With its powerful plugin system, Flow Launcher can be extended to include additional functionality, making it even more useful for developers.&lt;/p&gt;

&lt;p&gt;Download Flow Launcher Here : &lt;a href="https://www.flowlauncher.com/" rel="noopener noreferrer"&gt;Download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recently, I created a &lt;a href="https://tailwindcss.com/docs/" rel="noopener noreferrer"&gt;Tailwindcss Docs&lt;/a&gt; Extension for Flow Launcher, which helps you to search through Tailwind classes and access the Tailwindcss documentation. This extension makes it easy to find the right class for your project and access its documentation, all without leaving Flow Launcher.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;
        areeburrub
      &lt;/a&gt; / &lt;a href="https://github.com/areeburrub/tailwindcss-flow-launcher-plugin" rel="noopener noreferrer"&gt;
        tailwindcss-flow-launcher-plugin
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A Flow Launcher plugin that let you search tailwindcss classes and open their docs in your browser — just type tw and simply search
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Flow Tailwind Docs&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Search tailwindcss classes and open their docs in your browser — just type &lt;code&gt;tw&lt;/code&gt; and simply search&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/demo/tailwind-plugin.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdemo%2Ftailwind-plugin.gif"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Built with &lt;a href="https://github.com/gabrielcarloto/flow-launcher-helper" rel="noopener noreferrer"&gt;flow-launcher-helper&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Install the plugin from the Plugin Store or via &lt;code&gt;pm install tailwindcss&lt;/code&gt;. After installation you will be prompted to install/select Node.js if you have not done so.&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/areeburrub/tailwindcss-flow-launcher-plugin" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;To install the Tailwindcss Docs Extension for Flow Launcher, you first need to download and install Flow Launcher. Once you have Flow Launcher installed, you can install the extension by typing "pm install Tailwindcss" in the Flow Launcher search box. This will download and install the extension, and you'll be ready to use it.&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%2Fu8z6snk5570rebvjp9me.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%2Fu8z6snk5570rebvjp9me.png" alt="Tailwindcss Extension on Flow Launcher" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To use the Tailwindcss Docs Extension, simply type "tw" followed by the class name you're looking for in the Flow Launcher search box. For example, if you're looking for the "text-center" class, you would type "tw text-center" in the search box. The extension will display a list of matching classes, along with their documentation, if available.&lt;/p&gt;

&lt;p&gt;The Tailwindcss Docs Extension for Flow Launcher is a useful tool for any Tailwindcss developer. It helps to speed up development by making it easy to find the right class and access its documentation. With its simple installation process and powerful search capabilities, it's a must-have tool for any developer working with Tailwindcss.&lt;/p&gt;

&lt;p&gt;In conclusion, if you're a Tailwindcss developer looking for a faster and more efficient way to search for classes and access documentation, be sure to check out the Tailwindcss Docs Extension for Flow Launcher. It's an excellent tool that can help you save time and improve your productivity.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>challenge</category>
      <category>mentorship</category>
      <category>career</category>
    </item>
    <item>
      <title>Shortcut to connect Bluetooth device [Windows 10]</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Sun, 17 Oct 2021 05:07:29 +0000</pubDate>
      <link>https://forem.com/areeburrub/shortcut-to-connect-bluetooth-device-windows-10-2157</link>
      <guid>https://forem.com/areeburrub/shortcut-to-connect-bluetooth-device-windows-10-2157</guid>
      <description>&lt;h3&gt;
  
  
  Now it's a pre-defined feature [UPDATED]
&lt;/h3&gt;

&lt;p&gt;Windows made some updates and after that you can easily open the connect tab using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Windows + K
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h3&gt;
  
  
  Life before &lt;strong&gt;Windows&lt;/strong&gt; added this feature
&lt;/h3&gt;

&lt;p&gt;If you use a Windows Machine and have a Bluetooth audio device then you can understand the pain of connecting it to the PC.&lt;/p&gt;

&lt;p&gt;It usually happen that we wanted to watch a video but the audio device isn't connected and to connect it we have to go through&lt;br&gt;
&lt;code&gt;settings &amp;gt; bluetooth &amp;gt; then connect&lt;/code&gt;&lt;br&gt;
which in itself consume much time for a little thing.&lt;/p&gt;

&lt;p&gt;It is not something we called simple like in Android or Mac where there's a notification center.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows Action Center
&lt;/h3&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%2Fxat0mnladksylxtmbgdw.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%2Fxat0mnladksylxtmbgdw.png" alt="Windows 10 action center" width="597" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some people might know about it but many don't that Windows also have something called action center from where you can get basic controls of PC.&lt;/p&gt;

&lt;p&gt;In the action center there's an option called &lt;em&gt;Connect&lt;/em&gt; , it allows you to connect to all external devices.&lt;/p&gt;

&lt;p&gt;Now, this was also not efficient to me as this method also includes so many clicks.&lt;br&gt;
&lt;code&gt;Action center &amp;gt; connect &amp;gt; connect device&lt;/code&gt;&lt;br&gt;
But it is easier than the previous one where we have to open the settings and the connect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a shortcut
&lt;/h3&gt;

&lt;p&gt;Now it's time to make it much easier, so first of all we can use keyboard shortcuts instead of manually clicking using the mouse.&lt;/p&gt;

&lt;p&gt;To open the Action center there's a shortcut predefined in Windows which is (&lt;code&gt;Windows + A&lt;/code&gt;) but there's no shortcut to open the connect menu so we have to create one&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Now it's depends on you that you want to implement a shortcut to open the connect tab or are you okay with using the action center&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I want to make things more easier and decided to make a shortcut&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%2Frv7mfj5ionrx1wk2y7bw.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%2Frv7mfj5ionrx1wk2y7bw.png" alt="Creating a Shortcut" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To create a shortcut right click on the desktop and hover over new then click on shortcut as shown in the image above&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%2Ff9i7xhxlniko3b7854ly.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%2Ff9i7xhxlniko3b7854ly.png" alt="Shortcut Wizard" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It will open the shortcut wizard as shown above&lt;/li&gt;
&lt;li&gt;Now enter the location given below
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;%windir%\explorer.exe ms-settings-connectabledevices:devicediscovery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will directly open the connect tab&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter the name of the shortcut and press Finish, you successfully created the shortcut try opening it it will open the connect menu instantly&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%2Fxjxb1h24a789r7m4w0qy.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%2Fxjxb1h24a789r7m4w0qy.png" alt="Shortcut properties" width="622" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time to create a Keyboard shortcut, for that right click on the shortcut and open properties
&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%2F5yiex7m02pmomriuevtl.png" alt="Shortcut key" width="749" height="270"&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now click the shortcut key option and press a combination using Shift, Alt, Ctrl + a letter. I made it &lt;code&gt;CTRL+SHIFT+C&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now connect your device rapidly&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Done
&lt;/h3&gt;

&lt;p&gt;Now you can connect your devices hassle free, hope it helped you and made your life easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Follow for more
&lt;/h3&gt;

&lt;p&gt;Connect with me on Linked in :&lt;a href="https://www.linkedin.com/in/areeburrub/" rel="noopener noreferrer"&gt;connect&lt;/a&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>First 2 Weeks Experience | Hacktoberfest 2021</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Thu, 14 Oct 2021 15:04:52 +0000</pubDate>
      <link>https://forem.com/areeburrub/first-2-weeks-experience-hacktoberfest-2021-4hdd</link>
      <guid>https://forem.com/areeburrub/first-2-weeks-experience-hacktoberfest-2021-4hdd</guid>
      <description>&lt;p&gt;I always wanted to contribute in Open Source project and Hacktober Fest gives me this chance.&lt;/p&gt;

&lt;p&gt;I Registered my self on the very first day it was available &lt;em&gt;(30th Oct)&lt;/em&gt; and started to find some good projects to contribute to.&lt;/p&gt;

&lt;h3&gt;
  
  
  First Commit
&lt;/h3&gt;

&lt;p&gt;After registering, I was surfing the Hacktoberfest website and found one video in the resource section which showed me how to contribute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hacktoberfest.digitalocean.com/resources?wvideo=tf3u5ruz5y" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fembedwistia-a.akamaihd.net%2Fdeliveries%2F4bdee00ef68274f35bc6ad84ac1e49c6.jpg%3Fimage_play_button_size%3D2x%26image_crop_resized%3D960x540%26image_play_button%3D1%26image_play_button_color%3D1e71e7e0" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, I contributed to the repo which was less about coding but more about how to contribute on github.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I was already knowing about git and GitHub so it wasn't hard for me to get started&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The project was that, every contributor have to write a &lt;code&gt;Haiku&lt;/code&gt; (A Japanese format for poem) and then ask for a pull request&lt;/p&gt;

&lt;h3&gt;
  
  
  Other Contributions
&lt;/h3&gt;

&lt;p&gt;After getting how open source works I started finding projects of my interest which is Web Development.&lt;/p&gt;

&lt;p&gt;The thing which I noticed here is that, making a project from zero is more &lt;em&gt;comfortable&lt;/em&gt; than working on someone else project and trying to fix something or add some new stuffs.&lt;/p&gt;

&lt;p&gt;But working on someone else project is fun as it forces to learn new things because at first you can't know everything.&lt;/p&gt;

&lt;p&gt;I also came to know that working directly on production level projects can be difficult as everyone wanted to contribute to those, so will not get any easy issues or bugs easily.&lt;/p&gt;

&lt;p&gt;So, I tried doing some good projects which I found on Hactoberfest discord server and also found some from GitHub search.&lt;/p&gt;

&lt;h3&gt;
  
  
  Progress
&lt;/h3&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%2Foctw7dry1cdo4qxte3ud.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%2Foctw7dry1cdo4qxte3ud.png" alt="My Hacktoberfest PRs" width="800" height="222"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
I did my all 4PRs, and now I am finding some good project which I will do for fun.&lt;/p&gt;

&lt;p&gt;You can suggest me some projects related to Web Development &lt;em&gt;(if you can)&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My Tech Stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Node JS&lt;/li&gt;
&lt;li&gt;Flask&lt;/li&gt;
&lt;li&gt;Firebase&lt;/li&gt;
&lt;li&gt;and HTML/CSS/JS &lt;em&gt;(my brain screaming don't mention it DUMB!)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Contributions
&lt;/h3&gt;

&lt;p&gt;Projects I have contributed by now are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;do-community/cloud_haiku&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/do-community/cloud_haiku/pull/1704" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Areeb ur Rub added a Haiku
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#1704&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F24785527%3Fv%3D4" alt="areeburrub avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;areeburrub&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/do-community/cloud_haiku/pull/1704" rel="noopener noreferrer"&gt;&lt;time&gt;Oct 06, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Hey, I added a Haiku to this repo.&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/do-community/cloud_haiku/pull/1704" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vikhyatsingh123/Naruto-Shippuden&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/vikhyatsingh123/Naruto-Shippuden/pull/371" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        added toggle button for dark-mode
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#371&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F24785527%3Fv%3D4" alt="areeburrub avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;areeburrub&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/vikhyatsingh123/Naruto-Shippuden/pull/371" rel="noopener noreferrer"&gt;&lt;time&gt;Oct 10, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Hey, it's Areeb
I have added a toggle button replacing the simple static button for dark mode.
and also deleted some repeating codes for NAV bar
and did some other minor fixes too.&lt;/p&gt;
&lt;p&gt;Happy Hacktober 2021&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vikhyatsingh123/Naruto-Shippuden/pull/371" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rishit30G/Personal-Portfolio&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/Rishit30G/Personal-Portfolio/pull/20" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Changes to Navbar
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#20&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F24785527%3Fv%3D4" alt="areeburrub avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;areeburrub&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/Rishit30G/Personal-Portfolio/pull/20" rel="noopener noreferrer"&gt;&lt;time&gt;Oct 10, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;I have changed the padding and added drop shadow which gives it a effect&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Rishit30G/Personal-Portfolio/pull/20" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alitindrawan24/2048&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/Alitindrawan24/2048/pull/3" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Added Try Again and Changed UI  
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#3&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F24785527%3Fv%3D4" alt="areeburrub avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/areeburrub" rel="noopener noreferrer"&gt;areeburrub&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/Alitindrawan24/2048/pull/3" rel="noopener noreferrer"&gt;&lt;time&gt;Oct 11, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;I have made some style changes&lt;/h2&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Try Again Button&lt;/h2&gt;
&lt;p&gt;I have a added a try again button, now after game over new game can be started from there only
&lt;a href="https://user-images.githubusercontent.com/24785527/136813606-65919af2-373d-4118-8012-b9e5d2bbaf9b.png" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24785527%2F136813606-65919af2-373d-4118-8012-b9e5d2bbaf9b.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Added a How to Play&lt;/h2&gt;
&lt;p&gt;Some people don't know how to use 2048 that's why added a how to play card.&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Changed Colors and Stylings&lt;/h2&gt;
&lt;p&gt;The website was looking too dull that's why I added some colors to it.
Now It looks good.
&lt;a href="https://user-images.githubusercontent.com/24785527/136813785-1a315349-48e4-479c-b832-694aa9e7ff09.png" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24785527%2F136813785-1a315349-48e4-479c-b832-694aa9e7ff09.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Alitindrawan24/2048/pull/3" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reflections
&lt;/h3&gt;

&lt;p&gt;I think Hacktoberfest is a great way to start open source journey, till now I haven't made any good connections yeah but I am looking for some good projects and people whom I can work with.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>5 Chrome Extension to make Web Dev more Interesting</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Sat, 10 Jul 2021 01:36:29 +0000</pubDate>
      <link>https://forem.com/areeburrub/5-chrome-extension-to-make-web-dev-more-interesting-ae0</link>
      <guid>https://forem.com/areeburrub/5-chrome-extension-to-make-web-dev-more-interesting-ae0</guid>
      <description>&lt;p&gt;Ever Happened that you wanted to make a project and surfing over internet to find similar websites to get inspirations, so for that you need some tools which I have listed here these are so useful to me and popular as well so might know about some.&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%2Fxqv4stfg1izxd4dznwa7.gif" 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%2Fxqv4stfg1izxd4dznwa7.gif" alt="5-extensions" width="723" height="269"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  WhatFont
&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%2Fx9u0iv1k88b8vem2tnj2.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%2Fx9u0iv1k88b8vem2tnj2.png" alt="WhatFont" width="800" height="116"&gt;&lt;/a&gt;&lt;br&gt;
Beside &lt;code&gt;Comic Sans&lt;/code&gt; and &lt;code&gt;monospace&lt;/code&gt; there are many fonts and to choose the right topography can be sometimes pretty daunting and for that we &lt;strong&gt;WhatFont&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WhatFont will help you Identify the font used in the websites.&lt;/p&gt;
&lt;h2&gt;
  
  
  Fonts Ninja
&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%2F1f5rjd1lk1grif19o0c8.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%2F1f5rjd1lk1grif19o0c8.png" alt="image" width="800" height="142"&gt;&lt;/a&gt;&lt;br&gt;
WhatFont is get but it don't give much information if you want more like sample text or more info about the font then use font ninja it's feels like an upgrade from what font&lt;/p&gt;

&lt;p&gt;Font Ninja have a better UI and I use this rather What Font&lt;br&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%2F39c3ob7erk7jlvj0gh2y.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%2F39c3ob7erk7jlvj0gh2y.png" alt="Better UI Font Ninja" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ColorZilla
&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%2Fbpo8pwzd5ou3khg6p5ly.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%2Fbpo8pwzd5ou3khg6p5ly.png" alt="ColorZilla" width="800" height="125"&gt;&lt;/a&gt;&lt;br&gt;
When we are done with font we need colors for them so for that we have ColorZilla it works as a color picker and tells the color we point at.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's an tool for Choosing Colors for website&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/areeburrub" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F417828%2Fb2f01376-c3d2-48d0-a31c-25d29b43402d.jpg" alt="areeburrub"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/areeburrub/use-this-tool-to-make-color-palette-for-your-next-project-3hn1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Use this tool to make color palette for your next project.&lt;/h2&gt;
      &lt;h3&gt;Areeb ur Rub ・ Jun 6 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  CSS Peeper
&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%2Fhzebvzro3ad9ni6jvydd.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%2Fhzebvzro3ad9ni6jvydd.png" alt="image" width="800" height="115"&gt;&lt;/a&gt;&lt;br&gt;
It's so handy to use and basically you can check styling of each elements in a website.&lt;br&gt;
Yeah it gives everything from fonts to margin.&lt;br&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%2Fam9nis0wny2y0pe2nant.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%2Fam9nis0wny2y0pe2nant.png" alt="CSS Peeper" width="800" height="256"&gt;&lt;/a&gt;&lt;br&gt;
Feels like an upgrade to inspect mode.&lt;/p&gt;
&lt;h2&gt;
  
  
  Wappalyzer
&lt;/h2&gt;

&lt;p&gt;This extension will tell you which frameworks or plugins are being used in a website.&lt;br&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%2Fjn8yb0per3sdtz8ch9gl.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%2Fjn8yb0per3sdtz8ch9gl.png" alt="Wappalyzer" width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;br&gt;
I have listed only 5 but there are many more useful extension that you might know share it with me and everyone here.

&lt;blockquote&gt;
&lt;p&gt;Follow me for more&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__417828"&gt;
    &lt;a href="/areeburrub" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F417828%2Fb2f01376-c3d2-48d0-a31c-25d29b43402d.jpg" alt="areeburrub image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/areeburrub"&gt;Areeb ur Rub&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/areeburrub"&gt; NextJs | NextJs | Langchain + Langgraph | Python | TypeScript | Love of building things&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;/blockquote&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Display cloud file on website - Firebase Basics Series - Part 10</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Thu, 01 Jul 2021 18:18:54 +0000</pubDate>
      <link>https://forem.com/areeburrub/display-cloud-file-on-website-firebase-basics-series-part-10-k15</link>
      <guid>https://forem.com/areeburrub/display-cloud-file-on-website-firebase-basics-series-part-10-k15</guid>
      <description>&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/areeburrub" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.buymeacoffee.com%2Fassets%2Fimg%2Fcustom_images%2Forange_img.png" alt="Buy Me A Coffee" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sorry about posting this one late I was working on this and drafted it for a while and thinking to post this one everyday and finally did it today.&lt;br&gt;
&lt;em&gt;Sorry for my procrastinating issues.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the last post we were able to check whether our file is uploaded or not and also checked the upload process using a progress bar.&lt;/p&gt;

&lt;p&gt;Now, when the file is uploaded after that we will create a entry in firestore database then we will be able to display the uploaded content on the website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding data to firestore
&lt;/h3&gt;

&lt;p&gt;In order order to get the files first we need to store details about the file and we will be using firestore database to store the file data.&lt;/p&gt;

&lt;p&gt;The Data we will be saving for our &lt;strong&gt;Photogram&lt;/strong&gt; Project will be&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uploaded By (Name and UID)&lt;/li&gt;
&lt;li&gt;user id (uid)&lt;/li&gt;
&lt;li&gt;heading for the post&lt;/li&gt;
&lt;li&gt;Post Id&lt;/li&gt;
&lt;li&gt;Upload Time&lt;/li&gt;
&lt;li&gt;File Download Link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have to update the database whenever new file is uploaded so we will create a function which take the download link and username then add the data to firestore.&lt;/p&gt;

&lt;p&gt;We will call the function from the &lt;code&gt;complete&lt;/code&gt;&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;uploadTask&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;state_changed&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="nx"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Handle upload Progress &lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt; 

        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Handle unsuccessful upload&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt; 

        &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;//Handle complete upload&lt;/span&gt;
            &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDownloadURL&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;downloadURL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;updateDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;downloadURL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;firebase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&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;And the update function will simply add the data to the database,&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;// Update Database Function&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;firebase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;firestore&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dbRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updateDatabase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;postid&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;makeid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
     &lt;span class="na"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;headingPhoto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="na"&gt;By&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;displayName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="na"&gt;uid&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="na"&gt;img&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="na"&gt;time&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;firebase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firestore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FieldValue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;serverTimestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="nx"&gt;dbRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&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;I use a snippet to generate random code which i got from &lt;a href="https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript" rel="noopener noreferrer"&gt;here&lt;/a&gt;&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;makeid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;           &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;       &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;charactersLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; 
 &lt;span class="nx"&gt;charactersLength&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&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;h3&gt;
  
  
  Displaying data
&lt;/h3&gt;

&lt;p&gt;There will be two page which will be displayed one in which all feeds will be visible and another in which only the posts in current user profile will be shown.&lt;/p&gt;

&lt;p&gt;For that we will be using the &lt;code&gt;.where&lt;/code&gt; query to get data in all feed we will display all posts and in user profile we will change it to &lt;code&gt;.where('uid','==',user.uid)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;By default we will subscribe to the all photos snapshots but if user select Profile we will unsubscribe to all and subscribe to the profile one so that if user uploads something, it's visible on the page.&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;var&lt;/span&gt; &lt;span class="nx"&gt;allfeedStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;userfeedStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// sub all will subscribe to all feed&lt;/span&gt;
&lt;span class="nx"&gt;subAll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;allfeedStatus&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;allfeed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dbRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onSnapshot&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;querySnapshot&lt;/span&gt;&lt;span class="p"&gt;)&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;photoContainer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;
            &lt;span class="nx"&gt;querySnapshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nf"&gt;drawPhotos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;By&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="nx"&gt;allfeedStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;userSection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userfeedStatus&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nf"&gt;userfeed&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nx"&gt;userfeedStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="c1"&gt;// sub profile will subscribe to the profile feed&lt;/span&gt;
&lt;span class="nx"&gt;subProfile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userfeedStatus&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;userfeed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dbRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;uid&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="s1"&gt;==&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;onSnapshot&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;querySnapshot&lt;/span&gt;&lt;span class="p"&gt;)&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;photoContainer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;
            &lt;span class="nx"&gt;querySnapshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nf"&gt;drawPhotos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;By&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt; 
        &lt;span class="nx"&gt;userSection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;userfeedStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;allfeedStatus&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nf"&gt;allfeed&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nx"&gt;allfeedStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;subAll&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

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

&lt;/div&gt;


&lt;p&gt;Also create a function &lt;code&gt;draw post&lt;/code&gt; which will add the posts to the page.&lt;/p&gt;
&lt;h3&gt;
  
  
  Let's Test
&lt;/h3&gt;

&lt;p&gt;The website is working and is hosted on firebase hosting check it on the link : &lt;a href="https://photogram-on.web.app/" rel="noopener noreferrer"&gt;photogram-on.web.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get the codes from my github repo : &lt;a href="https://github.com/areeburrub/photogram" rel="noopener noreferrer"&gt;Photogram Github Repo&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Follow me for more&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__417828"&gt;
    &lt;a href="/areeburrub" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F417828%2Fb2f01376-c3d2-48d0-a31c-25d29b43402d.jpg" alt="areeburrub image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/areeburrub"&gt;Areeb ur Rub&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/areeburrub"&gt; NextJs | NextJs | Langchain + Langgraph | Python | TypeScript | Love of building things&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/areeburrub" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.buymeacoffee.com%2Fassets%2Fimg%2Fcustom_images%2Forange_img.png" alt="Buy Me A Coffee" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>tutorial</category>
      <category>coding</category>
    </item>
    <item>
      <title>Cloud Storage - Managing files user uploads - Firebase Basic Series - Part 9</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Mon, 21 Jun 2021 18:30:09 +0000</pubDate>
      <link>https://forem.com/areeburrub/cloud-storage-managing-files-user-uploads-firebase-basic-series-part-9-290h</link>
      <guid>https://forem.com/areeburrub/cloud-storage-managing-files-user-uploads-firebase-basic-series-part-9-290h</guid>
      <description>&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/areeburrub" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.buymeacoffee.com%2Fassets%2Fimg%2Fcustom_images%2Forange_img.png" alt="Buy Me A Coffee" width="170" height="37"&gt;&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%2F6fyxuvlky1jbln76chd6.gif" 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%2F6fyxuvlky1jbln76chd6.gif" alt="firebase storage" width="600" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Previous post we successfully uploaded the user files to our cloud storage, but we haven't worked on what will happen after the file is uploaded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Uploading Snapshot
&lt;/h3&gt;

&lt;p&gt;Like every other firebase service we have used by now cloud storage also have snapshots, we can use it to check How much data is uploaded and also trigger some function as it completes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you don't know what are snapshots then no problems, it's just &lt;br&gt;
a fancy term to given to changes that occur in firebase. &lt;br&gt;
Read previous posts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Subscribing to snapshot
&lt;/h3&gt;

&lt;p&gt;To start getting snapshots first change the &lt;code&gt;fileRef.put()&lt;/code&gt; into a variable.&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;var&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fileRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After changing it to a variable subscribe to the on snapshot it will give us the changes as file uploads.&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;uploadTask&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;state_changed&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="nx"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Handle upload Progress &lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt; 

        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Handle unsuccessful upload&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt; 

        &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;//Handle complete upload&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;Use the same order to create function,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;progress&lt;/li&gt;
&lt;li&gt;error &lt;/li&gt;
&lt;li&gt;complete&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  getting a progress bar
&lt;/h3&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%2Fmcpc43wg7or0y243z4r6.gif" 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%2Fmcpc43wg7or0y243z4r6.gif" alt="firebase upload" width="800" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can get how much file is uploaded by simply using  &lt;code&gt;(snapshot.bytesTransferred / snapshot.totalBytes) * 100&lt;/code&gt; this will give us the percentage of data transferred then we can easily  change the style of progress bar.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(snapshot) =&amp;gt; {
    // Observe state change events such as progress, pause, and resume
    // Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded
    var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
    const upProgress = document.getElementById('upProgress');
    upProgress.style.width = progress + '%';
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Getting the file link
&lt;/h3&gt;

&lt;p&gt;In order to display the file we should have a link using which we can access files we can get that link in the &lt;code&gt;complete&lt;/code&gt; part of function.&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="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Handle successful uploads on complete&lt;/span&gt;
        &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDownloadURL&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;downloadURL&lt;/span&gt;&lt;span class="p"&gt;)&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;File available at&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;downloadURL&lt;/span&gt;&lt;span class="p"&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;h3&gt;
  
  
  What Next:
&lt;/h3&gt;

&lt;p&gt;In the next post we will see how to store these file data in the firestore database and display it on the main feed&lt;/p&gt;

&lt;blockquote&gt;

&lt;div class="ltag__user ltag__user__id__417828"&gt;
    &lt;a href="/areeburrub" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F417828%2Fb2f01376-c3d2-48d0-a31c-25d29b43402d.jpg" alt="areeburrub image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/areeburrub"&gt;Areeb ur Rub&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/areeburrub"&gt; NextJs | NextJs | Langchain + Langgraph | Python | TypeScript | Love of building things&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.buymeacoffee.com/areeburrub" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.buymeacoffee.com%2Fassets%2Fimg%2Fcustom_images%2Forange_img.png" alt="Buy Me A Coffee" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;/blockquote&gt;

</description>
      <category>firebase</category>
      <category>tutorial</category>
      <category>coding</category>
    </item>
    <item>
      <title>Free Cloud File Storage - Firebase Basics Series - Part 8</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Sat, 19 Jun 2021 18:28:01 +0000</pubDate>
      <link>https://forem.com/areeburrub/free-cloud-file-storage-firebase-basics-series-part-8-5an2</link>
      <guid>https://forem.com/areeburrub/free-cloud-file-storage-firebase-basics-series-part-8-5an2</guid>
      <description>&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/areeburrub" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.buymeacoffee.com%2Fassets%2Fimg%2Fcustom_images%2Forange_img.png" alt="Buy Me A Coffee" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My previous post told you about firestore and how we will use it for our new project which will take users photo and create a post with it.&lt;/p&gt;

&lt;p&gt;In this post we will be implementing the cloud file storage  to store user photos and finally will host it on firebase hosting.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I will not be discussing how to add data to firestore or how user-auth is working check previous posts for that&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Creating a post
&lt;/h2&gt;

&lt;p&gt;We can add a POPUP where user  can upload image and then can post it, the popup will have a file input, progress bar, preview display and submit button.&lt;br&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%2Ftwv781sovkaft45cnmn7.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%2Ftwv781sovkaft45cnmn7.png" alt="image" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting files from user
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Skip this part if you are familiar with files in javascript&lt;/em&gt;&lt;br&gt;
Give id to the an input file element and also create a img element where preview will be show then get them in our javascript&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;uploadPhoto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;photo-input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;preview&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;preview&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;Now, we will add an onchange event which will change the preview image you can use this snippet in various projects.&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;uploadPhoto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onchange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;upPhoto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;upPhoto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;substring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lastIndexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gif&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;jpeg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;jpg&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileReader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="nx"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&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;preview&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
       &lt;span class="nx"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readAsDataURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&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;h2&gt;
  
  
  Uploading files to cloud storage
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Adding firebase cloud storage script
&lt;/h3&gt;

&lt;p&gt;like every other Library we have to add storage also you can get it from the docs &lt;a href="https://firebase.google.com/docs/web/setup#expandable-8" rel="noopener noreferrer"&gt;firebas-docs&lt;/a&gt;&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;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.gstatic.com/firebasejs/8.6.8/firebase-storage.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After getting the library initialize firebase storage&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;storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;firebase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Location of files
&lt;/h3&gt;

&lt;p&gt;To upload any file we have to first decide a location where it will be stored and here also it is called reference,&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;fileRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FolderName/NewFolder/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;png&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Uploading a file
&lt;/h3&gt;

&lt;p&gt;once reference is set then we can  put our files to that reference,&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;var&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;uploadPhoto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="c1"&gt;//get the first file from the input file dom&lt;/span&gt;

&lt;span class="nx"&gt;fileRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Upload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Uploading files in our project
&lt;/h3&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%2F6fyxuvlky1jbln76chd6.gif" 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%2F6fyxuvlky1jbln76chd6.gif" alt="firebase storage" width="600" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the upload button click We are uploading the file to the storage.&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;uploadBtn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;upPhoto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fileRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;posts/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nf"&gt;makeid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;fileRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&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;To  avoid same file name I am using makeid function to generate random id, I got this snippet &lt;a href="https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript" rel="noopener noreferrer"&gt;here&lt;/a&gt;&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;makeid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;           &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;       &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;charactersLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; 
 &lt;span class="nx"&gt;charactersLength&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&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;h2&gt;
  
  
  What Next:
&lt;/h2&gt;

&lt;p&gt;For Now we are able to upload files in next post we will see how we can get files from cloud storage and how to update the progress bar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Follow me:
&lt;/h3&gt;


&lt;div class="ltag__user ltag__user__id__417828"&gt;
    &lt;a href="/areeburrub" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F417828%2Fb2f01376-c3d2-48d0-a31c-25d29b43402d.jpg" alt="areeburrub image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/areeburrub"&gt;Areeb ur Rub&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/areeburrub"&gt; NextJs | NextJs | Langchain + Langgraph | Python | TypeScript | Love of building things&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/areeburrub" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.buymeacoffee.com%2Fassets%2Fimg%2Fcustom_images%2Forange_img.png" alt="Buy Me A Coffee" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>tutorial</category>
      <category>coding</category>
    </item>
    <item>
      <title>Using Firestore database - Firebase Basics Series - Part 7</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Fri, 18 Jun 2021 18:04:19 +0000</pubDate>
      <link>https://forem.com/areeburrub/using-firestore-database-firebase-basics-series-3c04</link>
      <guid>https://forem.com/areeburrub/using-firestore-database-firebase-basics-series-3c04</guid>
      <description>&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/areeburrub" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.buymeacoffee.com%2Fassets%2Fimg%2Fcustom_images%2Forange_img.png" alt="Buy Me A Coffee" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Till now we have already used &lt;code&gt;Firebase Realtime Database&lt;/code&gt; and &lt;code&gt;Firebase Authentication&lt;/code&gt;, now in this post I will tell you about Firestore.&lt;/p&gt;

&lt;p&gt;While Firestore and Realtime databases are very similar, Firestore maintains data in a more structured manner and can also do more complex querying.&lt;/p&gt;

&lt;p&gt;To choose between both you can take help of firebase docs as it gives you choices to choose and will tell you which one best fits in your need category, visit &lt;a href="https://firebase.google.com/docs/database/rtdb-vs-firestore?authuser=0#key_considerations" rel="noopener noreferrer"&gt;Firebase Docs/rtdb-vs-firestore&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create Database
&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%2Fsfngd2xxy4xgnnjg9t0k.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%2Fsfngd2xxy4xgnnjg9t0k.png" alt="image" width="800" height="244"&gt;&lt;/a&gt;&lt;br&gt;
You can go to the firestore section from your console and create a database that will be in test mode for now, but we will set rules later on.&lt;/p&gt;
&lt;h2&gt;
  
  
  Project to use it in
&lt;/h2&gt;

&lt;p&gt;I like project based learning a lot so we will make another website, where user can login and upload pictures and other can see it.&lt;br&gt;
This project will let us work with firestore and firebase file storage.&lt;br&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%2F3kwuu2e05c49qc6s6fyz.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%2F3kwuu2e05c49qc6s6fyz.png" alt="image" width="800" height="386"&gt;&lt;/a&gt; &lt;br&gt;
I made this layout for the website you can use your creativity for doing so.&lt;/p&gt;
&lt;h2&gt;
  
  
  Adding Firestore to project
&lt;/h2&gt;

&lt;p&gt;First we have to add the CDN script of firestore from &lt;a href="https://firebase.google.com/docs/hosting/reserved-urls#libraries_hosting-urls" rel="noopener noreferrer"&gt;Firebase Docs&lt;/a&gt;&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;script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-firestore.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Using Firestore
&lt;/h2&gt;

&lt;p&gt;First we have to initialize the firestore in order to use it&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const db = firebase.firestore();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Structure of database in firestore
&lt;/h3&gt;

&lt;p&gt;Like &lt;code&gt;.ref()&lt;/code&gt; in Realtime Db, firestore have &lt;code&gt;.collection()&lt;/code&gt;.&lt;br&gt;
A collection can be of anything and a database can have many collection and each collection have documents.&lt;/p&gt;

&lt;p&gt;A document is the place where all data is stored in a JSON like format.&lt;/p&gt;

&lt;p&gt;Here's an example,&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var areeb = db.collection('users').doc('areeburrub');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;in this the variable &lt;code&gt;areeb&lt;/code&gt; will contain all of my information stored in my user doc and can be accessed like JSON file.&lt;/p&gt;

&lt;p&gt;Structuring the document totally depends on us it can be a simple one like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;first : Areeb"
last : "ur Rub"
born : 2002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or can be nested and have much more data like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name :
    first : "Areeb"
    last : ur Rub"
Social:
    Instagram : areeb.ur_rub
    Linkedin : areeburrub
born : 1815
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or A document which also have sub collection with there collection, if you are confused with structure of data in firestore then read this : &lt;a href="https://firebase.google.com/docs/firestore/data-model#web-v8" rel="noopener noreferrer"&gt;firestore-Docs/data-model&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Adding, Removing and Updating
&lt;/h3&gt;

&lt;p&gt;it's very much similar to Realtime db&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To Add data
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collection('nameOfColl').add({name : 'AREEB'})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;To Delete data
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collection('nameOfColl').doc(uniqueId).delete();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;To Update data
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collection('nameOfColl').doc(uniqueId).update({
    fruite : 'PineApple',
    name : 'Areeb ur Rub'
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  More Features of Firestore
&lt;/h3&gt;

&lt;p&gt;For now I am not introducing you to more features of firestore we will see it in next part.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Follow me
&lt;/h3&gt;


&lt;div class="ltag__user ltag__user__id__417828"&gt;
    &lt;a href="/areeburrub" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F417828%2Fb2f01376-c3d2-48d0-a31c-25d29b43402d.jpg" alt="areeburrub image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/areeburrub"&gt;Areeb ur Rub&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/areeburrub"&gt; NextJs | NextJs | Langchain + Langgraph | Python | TypeScript | Love of building things&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/areeburrub" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.buymeacoffee.com%2Fassets%2Fimg%2Fcustom_images%2Forange_img.png" alt="Buy Me A Coffee" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How do you like to learn programming languages?</title>
      <dc:creator>Areeb ur Rub</dc:creator>
      <pubDate>Thu, 17 Jun 2021 18:07:18 +0000</pubDate>
      <link>https://forem.com/areeburrub/how-do-you-like-to-learn-programming-languages-ooc</link>
      <guid>https://forem.com/areeburrub/how-do-you-like-to-learn-programming-languages-ooc</guid>
      <description>&lt;p&gt;Coders learn a lot in their early stages, and they continue to do so every day, but there are a variety of ways to learn.&lt;/p&gt;

&lt;p&gt;Some people do it &lt;em&gt;by Reading Documentation first&lt;/em&gt; some prefer to &lt;em&gt;watch online tutorials&lt;/em&gt; and some learn by &lt;em&gt;making some project&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Let me know what methods you have used to learn new things, and how you went about it.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Methods
&lt;/h3&gt;

&lt;p&gt;I enjoy project-based learning.&lt;br&gt;
Eventually, we all have to implement the things, which is different from remembering syntax.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The more projects I build, the more I learn.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>discuss</category>
      <category>watercooler</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
