<?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: Drew Ronsman</title>
    <description>The latest articles on Forem by Drew Ronsman (@neoprint3d).</description>
    <link>https://forem.com/neoprint3d</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%2F731747%2Fca3dcc51-cdeb-410d-a412-976ff3978014.jpg</url>
      <title>Forem: Drew Ronsman</title>
      <link>https://forem.com/neoprint3d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/neoprint3d"/>
    <language>en</language>
    <item>
      <title>Get started with Vite Firebase Tailwindcss fast🔥🔥🔥</title>
      <dc:creator>Drew Ronsman</dc:creator>
      <pubDate>Sun, 10 Apr 2022 13:58:55 +0000</pubDate>
      <link>https://forem.com/neoprint3d/get-started-with-vite-firebase-tailwindcss-fast-51me</link>
      <guid>https://forem.com/neoprint3d/get-started-with-vite-firebase-tailwindcss-fast-51me</guid>
      <description>&lt;p&gt;We all know how boring and tedious it is to create new projects from scratch. It is time consuming, and it is just a lot of repetitive boiler plate code.&lt;/p&gt;

&lt;p&gt;That is why I created the ultimate starter template for Vite. Some features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crypto Js -&lt;/strong&gt; for encryption 🔒&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwindcss -&lt;/strong&gt; for styling 💅&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typescript -&lt;/strong&gt; for more reliable code 🔐&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firebase -&lt;/strong&gt; for Baas 💾&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Snap and React Helmet -&lt;/strong&gt; for SEO 🔍&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Use -&lt;/strong&gt; for useful premade react hooks 🪝&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React transition group -&lt;/strong&gt; for smooth animations 📺&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React icons -&lt;/strong&gt; for icons 💖&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Some quality of life improvements include
&lt;/h2&gt;

&lt;p&gt;A preconfigured file in the  utils/firebase.ts already configured with the environment variables and the env. So it is just copy and paste your firebase credentials into the .env file.&lt;/p&gt;

&lt;p&gt;./utils/firebase.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
import { getAuth } from "firebase/auth";
import { getFirestore } from "firebase/firestore";
import { getPerformance } from "firebase/performance";
import { getStorage } from "firebase/storage";

const firebaseConfig = {
  apiKey: import.meta.env.VITE_FIRE_API_KEY,
  authDomain: import.meta.env.VITE_FIRE_AUTH_DOM,
  projectId: import.meta.env.VITE_FIRE_PRJ_ID,
  storageBucket: import.meta.env.VITE_FIRE_STG_BKT,
  messagingSenderId: import.meta.env.VITE_FIRE_MSG_ID,
  appId: import.meta.env.VITE_FIRE_APP_ID,
  measurementId: import.meta.env.VITE_FIRE_MESG_ID,
};

const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
//type the auth and firestore functions
const auth = getAuth();
const firestore = getFirestore(app);
const performance = getPerformance(app);
const storage = getStorage(app);

export { analytics, auth, firestore, performance, storage };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Routing
&lt;/h2&gt;

&lt;p&gt;is preconfigured and already done in the App.tsx file and main.tsx&lt;/p&gt;

&lt;h2&gt;
  
  
  Encryption
&lt;/h2&gt;

&lt;p&gt;functions encrypt and decrypt are already made in ./utils/encryption.ts&lt;/p&gt;

&lt;h2&gt;
  
  
  SEO
&lt;/h2&gt;

&lt;p&gt;the main.tsx file is already configured with the appropriate code react snap needs to run&lt;/p&gt;

&lt;h2&gt;
  
  
  Production
&lt;/h2&gt;

&lt;p&gt;scripts on production already have a prod script so you can ship your app with SEO and performance&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the template
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/NeoPrint3D/vite-starter-kit

cd vite-starter-kit

#use anyone of these commands to install dependencies

pnpm install 
yarn install
npm install 

#start the project

pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Thanks for reading any question just email me &lt;a href="mailto:np3d.dev@gmail.com"&gt;np3d.dev@gmail.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And please star the GitHub repo:&lt;br&gt;
&lt;a href="https://github.com/NeoPrint3D/vite-starter-kit" rel="noopener noreferrer"&gt;https://github.com/NeoPrint3D/vite-starter-kit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vite</category>
      <category>react</category>
      <category>firebase</category>
    </item>
    <item>
      <title>Firebase limits doc fields</title>
      <dc:creator>Drew Ronsman</dc:creator>
      <pubDate>Sat, 09 Apr 2022 17:14:12 +0000</pubDate>
      <link>https://forem.com/neoprint3d/firebase-limits-doc-fields-19jk</link>
      <guid>https://forem.com/neoprint3d/firebase-limits-doc-fields-19jk</guid>
      <description>&lt;p&gt;Today I ill be figuring out the max amount of items a single firestore doc can have and why that is a problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;We all know how limiting firestore is, but don't get me wrong the developer experience is amazing just plop down some functions to create read and update data it's super easy and simple. &lt;/p&gt;

&lt;p&gt;Firestore sucks at relational data at scale. One way to represent relationships is having other document ids and embed it into the document, but truly how many document ids can fit into one document.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DNoScCUj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxhc11no8gvds33sngdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DNoScCUj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxhc11no8gvds33sngdr.png" alt="Image description" width="880" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The answer is that each firestore document can have at max 19999 different items in a document after that many items adding anything else does not work.&lt;/p&gt;

&lt;p&gt;You might ask who would need that many items in a single document. Well features like followers where you grab the others user uid to show a follower and followee relationship is impossible unless you add more documents to show the relationship where it could check first document then second document with a list of uids. But that is clunky and doesn't work well.&lt;/p&gt;

&lt;p&gt;So unless the firebase team can do something better for relational data firestore is an inadequate option for large scale relational data.&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>react</category>
      <category>limits</category>
    </item>
    <item>
      <title>Can You Run Copilot on the Raspberry pi, Answer is Surprisingly YES.</title>
      <dc:creator>Drew Ronsman</dc:creator>
      <pubDate>Wed, 15 Dec 2021 16:33:08 +0000</pubDate>
      <link>https://forem.com/neoprint3d/github-copilot-on-the-raspberry-pi-41ga</link>
      <guid>https://forem.com/neoprint3d/github-copilot-on-the-raspberry-pi-41ga</guid>
      <description>&lt;p&gt;In order to get GitHub Copilot on VSCode first you have to ins tall it with the package manager apt or recommended software from raspberry pi&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo apt install code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;/p&gt;

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

&lt;p&gt;After you install VSCode go an open it up and go to the extension tab or use "Ctrl+Shift+X" (Keyboard shortcut). Go type in GitHub Copilot into the search bar and install the extension.&lt;/p&gt;

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

&lt;p&gt;Copilot is currently in beta, but you can sign up for the waiting list to potentially get access to it. I did nothing special to get copilot &lt;br&gt;
except joining the wait list and having a GitHub Account. All I had to do was wait and I got access to it.&lt;/p&gt;

&lt;p&gt;You will know if copilot is working when the bottom of the screen has the copilot icon.&lt;/p&gt;

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

&lt;p&gt;Here is a showcase showing of copilot working.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/pK4gESoSU7w"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>html</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
