<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alex Cerda</title>
    <description>The latest articles on DEV Community by Alex Cerda (@cerdfied).</description>
    <link>https://dev.to/cerdfied</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%2F465222%2F0280ac9f-7c15-4ed6-8c34-e90eab68248c.jpeg</url>
      <title>DEV Community: Alex Cerda</title>
      <link>https://dev.to/cerdfied</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cerdfied"/>
    <language>en</language>
    <item>
      <title>Site Rendering - CSR, SSR &amp; SSG explained</title>
      <dc:creator>Alex Cerda</dc:creator>
      <pubDate>Tue, 11 Jan 2022 20:44:07 +0000</pubDate>
      <link>https://dev.to/cerdfied/site-rendering-csr-ssr-ssg-explained-3o97</link>
      <guid>https://dev.to/cerdfied/site-rendering-csr-ssr-ssg-explained-3o97</guid>
      <description>&lt;p&gt;Once upon a time all websites were &lt;strong&gt;static&lt;/strong&gt;. We would have simple websites with minimal dynamic content, so the server would load up a HTML page with CSS and some basic JavaScript for the client to display, without too much trouble...😬&lt;/p&gt;

&lt;p&gt;Nowadays, we desire a lot more complex &amp;amp; high performant websites with not only good search engine optimisation (&lt;strong&gt;SEO&lt;/strong&gt; - so Google can easily return our site when a user searches for it) but also fast and responsive load times ⏰.&lt;/p&gt;

&lt;p&gt;There are 3 main technologies in which websites can be rendered, oftentimes easily confused, but no fear - after this article you'll be a site rendering connoisseur 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  Client-side rendering (CSR)
&lt;/h1&gt;

&lt;p&gt;First off, we have &lt;strong&gt;CSR&lt;/strong&gt;, which arguably is the most different of the 3.&lt;/p&gt;

&lt;p&gt;Client-side rendering is used by the most popular JavaScript frameworks that we all know and love, such as React, Vue.js &amp;amp; Angular. In such websites, the heavy lifting is done by the &lt;strong&gt;client&lt;/strong&gt; (surprise surprise) or &lt;strong&gt;browser&lt;/strong&gt; - whichever term you prefer to use. &lt;/p&gt;

&lt;p&gt;The browser essentially receives an &lt;strong&gt;empty&lt;/strong&gt; HTML file and JavaScript is in charge of putting together the content of the page. Once the page has been put together, what is dynamically shown on the page from then on is also determined by browser JavaScript, as opposed to a server sending up a fully rendered dynamic page (which we will get to soon!). Seeing as the browser assembles the page, loading times tend to be a little longer in this type of website. But after the initial page load, it's &lt;strong&gt;super fast&lt;/strong&gt; to handle dynamic content as everything that is needed to be done (such as making any API calls) is done within the browser!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single-page applications&lt;/strong&gt; (SPAs) are an example of client-side rendering, where the initial request serves up a single HTML file and all other DOM page structures are manipulated by the client. Our handy tools like React &amp;amp; Vue.js are perfect for creating SPAs 😇&lt;/p&gt;

&lt;h1&gt;
  
  
  Server-side rendering (SSR)
&lt;/h1&gt;

&lt;p&gt;Next up we have &lt;strong&gt;SSR&lt;/strong&gt;, where the heavy lifting is done by the &lt;strong&gt;server&lt;/strong&gt; (shock!). In these websites, the user makes a request for a page, the server listens to this request and composes the page with HTML, CSS &amp;amp; JavaScript. It then sends up a fully rendered page to the browser. This means the initial page load is fast but every subsequent request for dynamic content requires the server to put together the page all over again, so it can be slower than CSR after this point.&lt;/p&gt;

&lt;p&gt;However, note that SSR websites are great for search engine optimisation. Crawlers can easily deduce the content of the page as it has already been rendered before being sent up the wire.&lt;/p&gt;

&lt;h1&gt;
  
  
  Static site generation (SSG)
&lt;/h1&gt;

&lt;p&gt;Finally we have &lt;strong&gt;SSG&lt;/strong&gt;. Similarly to SSR, SSG involves pre-populating the page with content so that when the user loads the page, a fully rendered page is served. The &lt;strong&gt;key difference&lt;/strong&gt; between SSR &amp;amp; SSG is &lt;strong&gt;when&lt;/strong&gt; the page is put together. In SSR the page is put together by the server. In SSG the page is populated at &lt;strong&gt;build time&lt;/strong&gt;. All API calls required to populate the page with content are made at build phase, cached and then deployed to a static hosting service like &lt;strong&gt;AWS S3&lt;/strong&gt; or &lt;strong&gt;Netlify&lt;/strong&gt;. In SSG websites, no server is needed to render your page! 🤯&lt;/p&gt;

&lt;p&gt;Tools such as Nuxt.js or Next.js are perfect for SSR &amp;amp; SSG&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For SSR&lt;/strong&gt;: In these frameworks, the websites are loaded on the server and the data is brought into local browser state, which can then be easily manipulated on the client, reducing load times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For SSG&lt;/strong&gt;: Nuxt.js &amp;amp; Next.js give the ability to statically generate your website, packaging it up into static files ready to be deployed to your hosting service of choice. Any pages that have been excluded from site generation will typically fall back to an SPA and be rendered on the client. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's all folks! 🎉 I hope after reading this, you'll understand the key differences between SSG, SSR &amp;amp; CSR. And of course, if you have any more questions, please don't hesitate to contact me in the links below! 😊👋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/cerdfied"&gt;Twitter&lt;/a&gt; || &lt;a href="https://github.com/cerdfied"&gt;GitHub&lt;/a&gt; &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Coding for Beginners: VS Code, CLI &amp; Version Control</title>
      <dc:creator>Alex Cerda</dc:creator>
      <pubDate>Thu, 17 Sep 2020 21:37:06 +0000</pubDate>
      <link>https://dev.to/cerdfied/build-deploy-your-first-full-stack-web-app-vs-code-cli-version-control-5577</link>
      <guid>https://dev.to/cerdfied/build-deploy-your-first-full-stack-web-app-vs-code-cli-version-control-5577</guid>
      <description>&lt;p&gt;I’ll begin by giving an overview of 3 key tools we’ll be using. After I’ve defined them I’ll give you examples of how to use them together!&lt;/p&gt;

&lt;p&gt;(BTW I’m a Mac OS user, so if some commands aren’t the same for your operating system, please give it a quick Google!)&lt;/p&gt;

&lt;p&gt;1.1 Visual Studio Code&lt;br&gt;
1.2 The Command Line Interface&lt;br&gt;
1.3 Version Control&lt;br&gt;
1.4 Putting this all together&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;1.1 Visual Studio Code (VS Code)&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;First things first, we need somewhere to write your code! &lt;strong&gt;Visual Studio Code&lt;/strong&gt; is my favourite source code editor (or &lt;strong&gt;Integrated Development Environment&lt;/strong&gt; if you want to use the fancy term) and it’s free 😍.&lt;/p&gt;

&lt;p&gt;It provides various inbuilt tools that we’ll be needing, so go ahead and &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;click here&lt;/a&gt; to find out how to install it.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;1.2 The Command Line Interface (CLI)&lt;/strong&gt;&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Next, I’ll talk briefly about the &lt;strong&gt;CLI&lt;/strong&gt;. At a simple level, it is a window where you can write commands that tell your computer to carry out some actions, for example, to create/modify some files or initiate some process. Each operating system has its own name for this (eg. for Mac OS it’s called Terminal) but don’t worry about this as VS code provides its own CLI and that’s what we’ll be using (we can begin to see why I’m a fan of VS code!).&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;1.3 Version Control (Git)&lt;/strong&gt;&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Developers need a way to track their code. Of course, you could save a new version of the same file every time you changed it juuust in case you wanted to go back to a previous version at some point in the future, but that’s just super inconvenient and you’d end up with hundreds of files!  Not to mention if you’re working in a team. So that’s why &lt;strong&gt;version control&lt;/strong&gt; was born, and in particular we’ll be talking about the most popular one called &lt;strong&gt;Git&lt;/strong&gt; (interesting name right 😅?).&lt;/p&gt;

&lt;p&gt;Install Git from &lt;a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;1. 4 Putting This All Together&lt;/strong&gt;&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Go ahead and open up VS code, then click &lt;em&gt;Open Folder&lt;/em&gt;.&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%2Fi%2Fzy6wkp77ke42qdq5a6ub.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%2Fi%2Fzy6wkp77ke42qdq5a6ub.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make a new folder, call it something fun, select it and click &lt;em&gt;Open&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;You should now see on the left hand side the first icon is selected, with the file view open. There are no files in there at the moment so it’s empty. &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%2Fi%2Fo6z1474jv62oa6mqi64t.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%2Fi%2Fo6z1474jv62oa6mqi64t.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s open the command line. Click the triangle in the left-hand corner, followed by the &lt;em&gt;Terminal&lt;/em&gt; tab.&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%2Fi%2Fp78f01a34any98pxhigx.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%2Fi%2Fp78f01a34any98pxhigx.png"&gt;&lt;/a&gt;&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%2Fi%2F9kuonb211h7ze97yzvfi.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%2Fi%2F9kuonb211h7ze97yzvfi.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you have the command line open and it’s pointing to the folder you just made, great!&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%2Fi%2Fkeluzk3tejx9t60ez5vt.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%2Fi%2Fkeluzk3tejx9t60ez5vt.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s tell Git who we are. Paste these commands into your command line then set a username and email (choose your own here):&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="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nb"&gt;global&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;name&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_username&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nb"&gt;global&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;email&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let’s initialise Git:&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="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We’ve now added version control tracking. &lt;/p&gt;

&lt;p&gt;Add some files via the command line using the &lt;code&gt;touch&lt;/code&gt; command.&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="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;touch&lt;/span&gt; &lt;span class="nx"&gt;file1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt; &lt;span class="nx"&gt;file2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hit enter and you should see your left hand file view with two empty JavaScript files!&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%2Fi%2Fyodz1fz124p6m1divt2a.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%2Fi%2Fyodz1fz124p6m1divt2a.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note, the &lt;em&gt;U&lt;/em&gt; next to each file. This stands for &lt;em&gt;Untracked&lt;/em&gt;. Git has recognised that we have added two new files, that we haven’t yet committed to track. If you click on the &lt;em&gt;2&lt;/em&gt;, we can see our version control in more detail!&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%2Fi%2F6x3b3cavnaiy453q5fke.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%2Fi%2F6x3b3cavnaiy453q5fke.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, how do we tell git to track these files? There are two steps to do this. First we must &lt;code&gt;git add&lt;/code&gt; the files, so Git knows which files we want it to track. Then we &lt;code&gt;git commit&lt;/code&gt; the files, along with a short message explaining what the changes for this commit are. We can add/commit either via the command line or with the help of VS code to do this for us under the hood. BTW we can’t commit without adding some file first!&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Via the command line
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;commit&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Add my first javascript files&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; The &lt;strong&gt;.&lt;/strong&gt; here means all!&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Via the VS code version control tab
&lt;/h4&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%2Fi%2Ff4huv8844ct0bzhgsh2c.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%2Fi%2Ff4huv8844ct0bzhgsh2c.png"&gt;&lt;/a&gt;&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%2Fi%2F7k19oto6t862m6wfh65r.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%2Fi%2F7k19oto6t862m6wfh65r.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whichever way you did, if you now check the &lt;code&gt;git log&lt;/code&gt; via the command line, you should see your first commit has been logged and the files in the version control tab have been cleared!&lt;/p&gt;

&lt;p&gt;Congratulations! You’ve completed your first git commit 🥳&lt;/p&gt;

&lt;p&gt;Now, if you go back into file view and open up one of the files, type something in the file and hit &lt;em&gt;Save&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You should see a little &lt;em&gt;M&lt;/em&gt; which stands for &lt;em&gt;Modified&lt;/em&gt;. Git has recognised something has changed in the file, so you’d have to commit again if you want to clear that notification!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Some Caveats&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We’ve just been looking at Git &lt;strong&gt;locally&lt;/strong&gt;. This means that only our computer currently knows about our Git tracking. We can use Git to track files &lt;strong&gt;remotely&lt;/strong&gt; so other people can access our versioned code, via the wonderful &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; for example. We would similarly use add/commit as we have done here, but we will also have to &lt;code&gt;git push&lt;/code&gt; our changes to some repository (which is essentially a folder of all of our code) for other developers to see. We will have to &lt;code&gt;git pull&lt;/code&gt; other people’s changes too if we want to see their changes locally. But don’t worry about this for now, we will return to these terms in some future articles!👾&lt;/p&gt;

&lt;p&gt;Hope this helped some of you aspiring coders set a foundation for what’s to come! And of course, if you have any questions, please feel free to give me a message 😌&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/cerdfied" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; || &lt;a href="https://github.com/cerdfied" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; &lt;/p&gt;

</description>
      <category>vscode</category>
      <category>git</category>
    </item>
  </channel>
</rss>
