<?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: Offirmo</title>
    <description>The latest articles on DEV Community by Offirmo (@offirmo).</description>
    <link>https://dev.to/offirmo</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%2F33020%2F14641e7d-3726-433a-a7dd-fa32d68b88ca.png</url>
      <title>DEV Community: Offirmo</title>
      <link>https://dev.to/offirmo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/offirmo"/>
    <language>en</language>
    <item>
      <title>Learn JavaScript in 2020: A curated and up-to-date list of resources</title>
      <dc:creator>Offirmo</dc:creator>
      <pubDate>Fri, 06 Nov 2020 11:32:35 +0000</pubDate>
      <link>https://dev.to/offirmo/learn-javascript-in-2020-a-refreshed-list-of-resources-44o0</link>
      <guid>https://dev.to/offirmo/learn-javascript-in-2020-a-refreshed-list-of-resources-44o0</guid>
      <description>&lt;p&gt;An acquaintance of mine wanted to add JavaScript to their engineering toolbox but they only learnt OOP with Java so far. I reviewed my JavaScript stash of links, discarded the outdated ones and ordered them:&lt;/p&gt;




&lt;h1&gt;
  
  
  Resources for learning JavaScript (and its ecosystem) in 2020
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Links are introduced in suggested order of reading&lt;/li&gt;
&lt;li&gt;Intended target: someone knowing to program but not in JavaScript&lt;/li&gt;
&lt;li&gt;all resources are free&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Why investing in JavaScript?&lt;/strong&gt; (blog post coming soon)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Fundamentals
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A re-introduction to JavaScript (JS tutorial)&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dan Abramov's "Just JavaScript" 1 to 9&lt;/strong&gt; &lt;a href="https://offirmo-backups.github.io/my-time-machine/Dan%20Abramov%20-%20Just%20JavaScript/01.%20Mental%20Models.html"&gt;https://offirmo-backups.github.io/my-time-machine/Dan%20Abramov%20-%20Just%20JavaScript/01.%20Mental%20Models.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mozilla's JavaScript Guide&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Promises&lt;/strong&gt; &lt;a href="https://web.dev/promises/"&gt;https://web.dev/promises/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eloquent JavaScript&lt;/strong&gt; with an intro to the browser and node &lt;a href="https://eloquentjavascript.net/"&gt;https://eloquentjavascript.net/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fetch&lt;/strong&gt; intro: &lt;a href="https://developers.google.com/web/updates/2015/03/introduction-to-fetch"&gt;https://developers.google.com/web/updates/2015/03/introduction-to-fetch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;async/await&lt;/strong&gt; &lt;a href="https://developers.google.com/web/fundamentals/primers/async-functions"&gt;https://developers.google.com/web/fundamentals/primers/async-functions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 JavaScript concepts you need to know for interviews&lt;/strong&gt; &lt;a href="https://dev.to/arnavaggarwal/10-javascript-concepts-you-need-to-know-for-interviews"&gt;https://dev.to/arnavaggarwal/10-javascript-concepts-you-need-to-know-for-interviews&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Advanced fundamentals
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Two Pillars of JavaScript Part 1: How to Escape the 7th Circle of Hell&lt;/strong&gt; &lt;a href="https://medium.com/javascript-scene/the-two-pillars-of-javascript-ee6f3281e7f3"&gt;https://medium.com/javascript-scene/the-two-pillars-of-javascript-ee6f3281e7f3&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Two Pillars of JavaScript Part 2: Functional Programming, How to Stop Micromanaging Everything&lt;/strong&gt; &lt;a href="https://medium.com/javascript-scene/the-two-pillars-of-javascript-pt-2-functional-programming-a63aa53a41a4"&gt;https://medium.com/javascript-scene/the-two-pillars-of-javascript-pt-2-functional-programming-a63aa53a41a4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event Loop and the Big Picture&lt;/strong&gt; (just the 1st one of the series for now) &lt;a href="https://blog.insiderattack.net/event-loop-and-the-big-picture-nodejs-event-loop-part-1-1cb67a182810"&gt;https://blog.insiderattack.net/event-loop-and-the-big-picture-nodejs-event-loop-part-1-1cb67a182810&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;33 Concepts Every JavaScript Developer Should Know&lt;/strong&gt; &lt;a href="https://github.com/leonardomso/33-js-concepts"&gt;https://github.com/leonardomso/33-js-concepts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Keys to JavaScript Mastery&lt;/strong&gt; &lt;a href="https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95"&gt;https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript Garden = the most quirky parts of the JavaScript programming language&lt;/strong&gt; how to avoid common mistakes and subtle bugs, as well as performance issues and bad practices &lt;a href="http://bonsaiden.github.io/JavaScript-Garden/"&gt;http://bonsaiden.github.io/JavaScript-Garden/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Advanced ecosystem
&lt;/h2&gt;

&lt;p&gt;Choose your path: &lt;em&gt;frontend&lt;/em&gt; or &lt;em&gt;backend&lt;/em&gt;. If you learn a bit of both, you can claim the legendary &lt;em&gt;"fullstack"&lt;/em&gt; title.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced: browser (frontend)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Roadmap&lt;/strong&gt; &lt;a href="https://roadmap.sh/frontend"&gt;https://roadmap.sh/frontend&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intro&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Front-end_web_developer"&gt;https://developer.mozilla.org/en-US/docs/Learn/Front-end_web_developer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DOM&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/DOM"&gt;https://developer.mozilla.org/en-US/docs/Glossary/DOM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web APIs&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API"&gt;https://developer.mozilla.org/en-US/docs/Web/API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flux architecture&lt;/strong&gt; &lt;a href="https://facebook.github.io/flux/docs/in-depth-overview/"&gt;https://facebook.github.io/flux/docs/in-depth-overview/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The core foundations of a delightful web experience&lt;/strong&gt; &lt;a href="https://developers.google.com/web/fundamentals"&gt;https://developers.google.com/web/fundamentals&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt; &lt;a href="https://developers.google.com/web/fundamentals/security"&gt;https://developers.google.com/web/fundamentals/security&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Advanced: node (backend)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Roadmap&lt;/strong&gt; &lt;a href="https://roadmap.sh/backend"&gt;https://roadmap.sh/backend&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setting up a JS environment&lt;/strong&gt; &lt;a href="https://medium.com/javascript-scene/setting-up-a-new-macbook-for-javascript-development-289df3f8f9"&gt;https://medium.com/javascript-scene/setting-up-a-new-macbook-for-javascript-development-289df3f8f9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;node basics&lt;/strong&gt; &lt;a href="http://nodejs.org/"&gt;http://nodejs.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;express&lt;/strong&gt; &lt;a href="https://expressjs.com/"&gt;https://expressjs.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NodeJS Event Loop:

&lt;ol&gt;
&lt;li&gt;Event Loop and the Big Picture  &lt;a href="https://blog.insiderattack.net/event-loop-and-the-big-picture-nodejs-event-loop-part-1-1cb67a182810"&gt;https://blog.insiderattack.net/event-loop-and-the-big-picture-nodejs-event-loop-part-1-1cb67a182810&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Timers, Immediates and Process.nextTick &lt;a href="https://blog.insiderattack.net/timers-immediates-and-process-nexttick-nodejs-event-loop-part-2-2c53fd511bb3"&gt;https://blog.insiderattack.net/timers-immediates-and-process-nexttick-nodejs-event-loop-part-2-2c53fd511bb3&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Promises, Next-Ticks, and Immediates &lt;a href="https://blog.insiderattack.net/promises-next-ticks-and-immediates-nodejs-event-loop-part-3-9226cbe7a6aa"&gt;https://blog.insiderattack.net/promises-next-ticks-and-immediates-nodejs-event-loop-part-3-9226cbe7a6aa&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Handling IO &lt;a href="https://blog.insiderattack.net/handling-io-nodejs-event-loop-part-4-418062f917d1"&gt;https://blog.insiderattack.net/handling-io-nodejs-event-loop-part-4-418062f917d1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Event Loop Best Practices &lt;a href="https://blog.insiderattack.net/event-loop-best-practices-nodejs-event-loop-part-5-e29b2b50bfe2"&gt;https://blog.insiderattack.net/event-loop-best-practices-nodejs-event-loop-part-5-e29b2b50bfe2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New Changes to the Timers and Microtasks in Node v11.0.0 &lt;a href="https://blog.insiderattack.net/new-changes-to-timers-and-microtasks-from-node-v11-0-0-and-above-68d112743eb3"&gt;https://blog.insiderattack.net/new-changes-to-timers-and-microtasks-from-node-v11-0-0-and-above-68d112743eb3&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;JavaScript Event Loop vs Node JS Event Loop &lt;a href="https://blog.insiderattack.net/javascript-event-loop-vs-node-js-event-loop-aea2b1b85f5c"&gt;https://blog.insiderattack.net/javascript-event-loop-vs-node-js-event-loop-aea2b1b85f5c&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Security TODO&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Even more advanced
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Jest, a delightful JavaScript Testing Framework&lt;/strong&gt; &lt;a href="https://jestjs.io/"&gt;https://jestjs.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; &lt;a href="https://www.typescriptlang.org/"&gt;https://www.typescriptlang.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;React:

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript fundamentals before learning React&lt;/strong&gt; &lt;a href="https://www.robinwieruch.de/javascript-fundamentals-react-requirements"&gt;https://www.robinwieruch.de/javascript-fundamentals-react-requirements&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Roadmap&lt;/strong&gt; &lt;a href="https://roadmap.sh/react"&gt;https://roadmap.sh/react&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Official React documentation&lt;/strong&gt; it's very good &lt;a href="https://reactjs.org/"&gt;https://reactjs.org/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive Web Apps&lt;/strong&gt; &lt;a href="https://web.dev/progressive-web-apps/"&gt;&lt;/a&gt;&lt;a href="https://web.dev/progressive-web-apps/"&gt;https://web.dev/progressive-web-apps/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System design primer&lt;/strong&gt; &lt;a href="https://github.com/donnemartin/system-design-primer"&gt;&lt;/a&gt;&lt;a href="https://github.com/donnemartin/system-design-primer"&gt;https://github.com/donnemartin/system-design-primer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GraphQL&lt;/strong&gt; &lt;a href="https://graphql.org/"&gt;&lt;/a&gt;&lt;a href="https://graphql.org/"&gt;https://graphql.org/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Any other good resource I missed? Please share them in a comment.&lt;/p&gt;

&lt;p&gt;Also published as a &lt;a href="https://gist.github.com/Offirmo/fac3c3064b4c239f874e39bb8933a71c"&gt;gist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Credits: &lt;a href="https://dev.to/chrisachard/how-to-write-your-first-post-on-dev-c3k"&gt;https://dev.to/chrisachard/how-to-write-your-first-post-on-dev-c3k&lt;/a&gt; for the tips&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Heroku pipelines: easy &amp; free!</title>
      <dc:creator>Offirmo</dc:creator>
      <pubDate>Tue, 14 Jul 2020 11:08:42 +0000</pubDate>
      <link>https://dev.to/offirmo/heroku-pipelines-easy-free-580g</link>
      <guid>https://dev.to/offirmo/heroku-pipelines-easy-free-580g</guid>
      <description>&lt;p&gt;Do you use heroku for your project's backend? You may be interested in setting up a &lt;strong&gt;branch → staging → prod&lt;/strong&gt; pipeline. It's surprisingly easy!&lt;/p&gt;

&lt;p&gt;My pet project uses an &lt;a href="//www.heroku.com"&gt;Heroku&lt;/a&gt; app as part of its backend.&lt;/p&gt;

&lt;p&gt;ICYMI heroku is one of the simplest method to deploy a Node.js server with databases. And they have a good &lt;a href="https://www.heroku.com/pricing"&gt;free tier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Heroku bugged me to upgrade my app from its outdated cedar-14 stack:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fd0kvrq9j72tnccbt13h5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fd0kvrq9j72tnccbt13h5.png" alt="Alt Text" width="800" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of doing an upgrade, why not recreating it from scratch? And why not trying the pipeline feature?&lt;/p&gt;

&lt;p&gt;An heroku pipeline is just an aggregation of "branch" → "staging" → "prod" apps, with the ability to promote an app to the next step. Setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;create a pipeline, super easy through the UI&lt;/li&gt;
&lt;li&gt;create (or add an existing) staging app&lt;/li&gt;
&lt;li&gt;create (or add an existing) prod app&lt;/li&gt;
&lt;li&gt;(I didn't use "review apps", too complicated for my simple setup)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The staging app then has a "promote to production" button:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6k9f1q0p83q2zyp9fmhe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6k9f1q0p83q2zyp9fmhe.png" alt="Alt Text" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;which does what you guess = promote the staging app to prod.&lt;/p&gt;

&lt;p&gt;Since I'm now using a single bolt monorepo for all my personal dev, I had to learn how to deploy an heroku app from a sub-package of a monorepo. Fortunately, &lt;a href="https://laugri.com"&gt;Laurent Grima&lt;/a&gt; has us covered: &lt;a href="https://medium.com/inato/how-to-setup-heroku-with-yarn-workspaces-d8eac0db0256"&gt;instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once linked, I enabled auto-deploys on git push &lt;strong&gt;for the staging app&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Note that "promoting to production" doesn't means swapping the apps like in a blue-green deployment. It just means that the nodejs source will be copied over the target app. This is what we want since staging and prod have their own databases (through heroku app addons) that shouldn't be swapped.&lt;/p&gt;

&lt;p&gt;I must now confess that I'm not really using heroku as a server... The free tier has a limited run time. I'm just using the free databases that can be attached to an app. They are always on and can be accessed from outside.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fynf8rn7whyeuxuo757y0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fynf8rn7whyeuxuo757y0.png" alt="Alt Text" width="605" height="122"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcvnl3ykyavaxcp16yoc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcvnl3ykyavaxcp16yoc0.png" alt="Alt Text" width="474" height="96"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My true server is powered by &lt;a href="https://www.netlify.com/products/functions/"&gt;Netlify functions&lt;/a&gt; using a serveless architecture that I find much easier to reason about. The functions then access the heroku databases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1002id2ksgknxahq7jq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1002id2ksgknxahq7jq8.png" alt="Alt Text" width="700" height="841"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was pleasantly surprised by the simplicity of heroku pipelines, I was expecting something much more complicated. Good job heroku!&lt;/p&gt;

</description>
      <category>node</category>
      <category>heroku</category>
      <category>backend</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
